diff --git a/upstream/go.mod b/upstream/go.mod index 34d4c12475..72c3123082 100644 --- a/upstream/go.mod +++ b/upstream/go.mod @@ -37,7 +37,7 @@ require ( gocloud.dev v0.40.0 gocloud.dev/docstore/mongodocstore v0.40.0 gocloud.dev/pubsub/kafkapubsub v0.40.0 - golang.org/x/crypto v0.37.0 + golang.org/x/crypto v0.41.0 golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac google.golang.org/grpc v1.71.1 google.golang.org/protobuf v1.36.6 @@ -240,7 +240,7 @@ require ( github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect github.com/google/cel-go v0.24.1 // indirect github.com/google/certificate-transparency-go v1.3.1 // indirect - github.com/google/gnostic-models v0.6.9 // indirect + github.com/google/gnostic-models v0.7.0 // indirect github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20240108195214-a0658aa1d0cc // indirect github.com/google/go-github/v55 v55.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect @@ -435,16 +435,18 @@ require ( go.opentelemetry.io/otel/trace v1.35.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect + go.yaml.in/yaml/v2 v2.4.2 // indirect + go.yaml.in/yaml/v3 v3.0.3 // indirect golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect - golang.org/x/mod v0.24.0 // indirect - golang.org/x/net v0.39.0 // indirect + golang.org/x/mod v0.27.0 // indirect + golang.org/x/net v0.43.0 // indirect golang.org/x/oauth2 v0.29.0 // indirect - golang.org/x/sync v0.13.0 // indirect - golang.org/x/sys v0.32.0 // indirect - golang.org/x/term v0.31.0 // indirect - golang.org/x/text v0.24.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/term v0.34.0 // indirect + golang.org/x/text v0.28.0 // indirect golang.org/x/time v0.11.0 // indirect - golang.org/x/tools v0.32.0 // indirect + golang.org/x/tools v0.36.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect google.golang.org/api v0.229.0 // indirect @@ -461,15 +463,17 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect honnef.co/go/tools v0.6.1 // indirect k8s.io/apiextensions-apiserver v0.32.1 // indirect - k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 // indirect + k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 // indirect + k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect mvdan.cc/gofumpt v0.7.0 // indirect mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect + sigs.k8s.io/randfill v1.0.0 // indirect sigs.k8s.io/release-utils v0.11.1 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.5.0 // indirect + sigs.k8s.io/structured-merge-diff/v6 v6.2.0 // indirect ) // Replace glog to fix flag collision between klog and glog. diff --git a/upstream/go.sum b/upstream/go.sum index a63031c2ab..64913e737d 100644 --- a/upstream/go.sum +++ b/upstream/go.sum @@ -683,8 +683,8 @@ github.com/google/cel-go v0.24.1 h1:jsBCtxG8mM5wiUJDSGUqU0K7Mtr3w7Eyv00rw4DiZxI= github.com/google/cel-go v0.24.1/go.mod h1:Hdf9TqOaTNSFQA1ybQaRqATVoK7m/zcf7IMhGXP5zI8= github.com/google/certificate-transparency-go v1.3.1 h1:akbcTfQg0iZlANZLn0L9xOeWtyCIdeoYhKrqi5iH3Go= github.com/google/certificate-transparency-go v1.3.1/go.mod h1:gg+UQlx6caKEDQ9EElFOujyxEQEfOiQzAt6782Bvi8k= -github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw= -github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw= +github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo= +github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -1470,6 +1470,10 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= +go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +go.yaml.in/yaml/v3 v3.0.3 h1:bXOww4E/J3f66rav3pX3m8w6jDE4knZjGOw8b5Y6iNE= +go.yaml.in/yaml/v3 v3.0.3/go.mod h1:tBHosrYAkRZjRAOREWbDnBXUf08JOwYq++0QNwQiWzI= gocloud.dev v0.40.0 h1:f8LgP+4WDqOG/RXoUcyLpeIAGOcAbZrZbDQCUee10ng= gocloud.dev v0.40.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ= gocloud.dev/docstore/mongodocstore v0.40.0 h1:KTwP9Wr3PNPxN3bItxtK/RHiF4D6cTYjE5GDkPKcJrI= @@ -1498,8 +1502,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= -golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1549,8 +1553,8 @@ golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1616,8 +1620,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= -golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1660,8 +1664,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= -golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1756,8 +1760,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= -golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1771,8 +1775,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= -golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1791,8 +1795,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= -golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1871,8 +1875,12 @@ golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= -golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= +golang.org/x/tools/go/expect v0.1.0-deprecated h1:jY2C5HGYR5lqex3gEniOQL0r7Dq5+VGVgY1nudX5lXY= +golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= +golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= +golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2136,13 +2144,13 @@ k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= k8s.io/code-generator v0.32.2 h1:CIvyPrLWP7cMgrqval2qYT839YAwCDeSvGfXgWSNpHQ= k8s.io/code-generator v0.32.2/go.mod h1:plh7bWk7JztAUkHM4zpbdy0KOMdrhsePcZL2HLWFH7Y= -k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 h1:si3PfKm8dDYxgfbeA6orqrtLkvvIeH8UqffFJDl0bz4= -k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU= +k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f h1:SLb+kxmzfA87x4E4brQzB33VBbT2+x7Zq9ROIHmGn9Q= +k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 h1:hcha5B1kVACrLujCKLbr8XWMxCxzQx42DY8QKYJrDLg= -k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7/go.mod h1:GewRfANuJ70iYzvn+i4lezLDAFzvjxZYK1gn1lWcfas= +k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE= +k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ= k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= knative.dev/pkg v0.0.0-20250415155312-ed3e2158b883 h1:UeOY7009M0EHwdyW3P35Fc1U6FJHzBrj6Gf370do8zY= @@ -2156,10 +2164,14 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= +sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= +sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= sigs.k8s.io/release-utils v0.11.1 h1:hzvXGpHgHJfLOJB6TRuu14bzWc3XEglHmXHJqwClSZE= sigs.k8s.io/release-utils v0.11.1/go.mod h1:ybR2V/uQAOGxYfzYtBenSYeXWkBGNP2qnEiX77ACtpc= sigs.k8s.io/structured-merge-diff/v4 v4.5.0 h1:nbCitCK2hfnhyiKo6uf2HxUPTCodY6Qaf85SbDIaMBk= sigs.k8s.io/structured-merge-diff/v4 v4.5.0/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= +sigs.k8s.io/structured-merge-diff/v6 v6.2.0 h1:msyqjP8Nyd5sF3QSmJouFSzcBIdwq4ct8d1/7VSBHIQ= +sigs.k8s.io/structured-merge-diff/v6 v6.2.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= diff --git a/upstream/vendor/github.com/google/gnostic-models/compiler/context.go b/upstream/vendor/github.com/google/gnostic-models/compiler/context.go index 1bfe961219..26b31e51e3 100644 --- a/upstream/vendor/github.com/google/gnostic-models/compiler/context.go +++ b/upstream/vendor/github.com/google/gnostic-models/compiler/context.go @@ -15,7 +15,7 @@ package compiler import ( - yaml "gopkg.in/yaml.v3" + yaml "go.yaml.in/yaml/v3" ) // Context contains state of the compiler as it traverses a document. diff --git a/upstream/vendor/github.com/google/gnostic-models/compiler/extensions.go b/upstream/vendor/github.com/google/gnostic-models/compiler/extensions.go index 16ae66faa3..efa07f2a90 100644 --- a/upstream/vendor/github.com/google/gnostic-models/compiler/extensions.go +++ b/upstream/vendor/github.com/google/gnostic-models/compiler/extensions.go @@ -20,9 +20,9 @@ import ( "os/exec" "strings" + yaml "go.yaml.in/yaml/v3" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/anypb" - yaml "gopkg.in/yaml.v3" extensions "github.com/google/gnostic-models/extensions" ) diff --git a/upstream/vendor/github.com/google/gnostic-models/compiler/helpers.go b/upstream/vendor/github.com/google/gnostic-models/compiler/helpers.go index 975d65e8f8..a83261eb6c 100644 --- a/upstream/vendor/github.com/google/gnostic-models/compiler/helpers.go +++ b/upstream/vendor/github.com/google/gnostic-models/compiler/helpers.go @@ -20,7 +20,7 @@ import ( "sort" "strconv" - "gopkg.in/yaml.v3" + yaml "go.yaml.in/yaml/v3" "github.com/google/gnostic-models/jsonschema" ) diff --git a/upstream/vendor/github.com/google/gnostic-models/compiler/reader.go b/upstream/vendor/github.com/google/gnostic-models/compiler/reader.go index be0e8b40c8..da409d6b36 100644 --- a/upstream/vendor/github.com/google/gnostic-models/compiler/reader.go +++ b/upstream/vendor/github.com/google/gnostic-models/compiler/reader.go @@ -24,7 +24,7 @@ import ( "strings" "sync" - yaml "gopkg.in/yaml.v3" + yaml "go.yaml.in/yaml/v3" ) var verboseReader = false diff --git a/upstream/vendor/github.com/google/gnostic-models/jsonschema/models.go b/upstream/vendor/github.com/google/gnostic-models/jsonschema/models.go index 4781bdc5f5..a42b8e0035 100644 --- a/upstream/vendor/github.com/google/gnostic-models/jsonschema/models.go +++ b/upstream/vendor/github.com/google/gnostic-models/jsonschema/models.go @@ -16,7 +16,7 @@ // of JSON Schemas. package jsonschema -import "gopkg.in/yaml.v3" +import "go.yaml.in/yaml/v3" // The Schema struct models a JSON Schema and, because schemas are // defined hierarchically, contains many references to itself. diff --git a/upstream/vendor/github.com/google/gnostic-models/jsonschema/reader.go b/upstream/vendor/github.com/google/gnostic-models/jsonschema/reader.go index b8583d4660..4f1fe0c08c 100644 --- a/upstream/vendor/github.com/google/gnostic-models/jsonschema/reader.go +++ b/upstream/vendor/github.com/google/gnostic-models/jsonschema/reader.go @@ -21,7 +21,7 @@ import ( "io/ioutil" "strconv" - "gopkg.in/yaml.v3" + yaml "go.yaml.in/yaml/v3" ) // This is a global map of all known Schemas. diff --git a/upstream/vendor/github.com/google/gnostic-models/jsonschema/writer.go b/upstream/vendor/github.com/google/gnostic-models/jsonschema/writer.go index 340dc5f933..19f5ddeae2 100644 --- a/upstream/vendor/github.com/google/gnostic-models/jsonschema/writer.go +++ b/upstream/vendor/github.com/google/gnostic-models/jsonschema/writer.go @@ -17,7 +17,7 @@ package jsonschema import ( "fmt" - "gopkg.in/yaml.v3" + yaml "go.yaml.in/yaml/v3" ) const indentation = " " diff --git a/upstream/vendor/github.com/google/gnostic-models/openapiv2/OpenAPIv2.go b/upstream/vendor/github.com/google/gnostic-models/openapiv2/OpenAPIv2.go index d71fe6d545..de337d80c8 100644 --- a/upstream/vendor/github.com/google/gnostic-models/openapiv2/OpenAPIv2.go +++ b/upstream/vendor/github.com/google/gnostic-models/openapiv2/OpenAPIv2.go @@ -21,7 +21,7 @@ import ( "regexp" "strings" - "gopkg.in/yaml.v3" + yaml "go.yaml.in/yaml/v3" "github.com/google/gnostic-models/compiler" ) @@ -60,7 +60,7 @@ func NewAdditionalPropertiesItem(in *yaml.Node, context *compiler.Context) (*Add // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid AdditionalPropertiesItem") + message := "contains an invalid AdditionalPropertiesItem" err := compiler.NewError(context, message) errors = []error{err} } @@ -2543,7 +2543,7 @@ func NewNonBodyParameter(in *yaml.Node, context *compiler.Context) (*NonBodyPara // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid NonBodyParameter") + message := "contains an invalid NonBodyParameter" err := compiler.NewError(context, message) errors = []error{err} } @@ -3271,7 +3271,7 @@ func NewParameter(in *yaml.Node, context *compiler.Context) (*Parameter, error) // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid Parameter") + message := "contains an invalid Parameter" err := compiler.NewError(context, message) errors = []error{err} } @@ -3345,7 +3345,7 @@ func NewParametersItem(in *yaml.Node, context *compiler.Context) (*ParametersIte // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid ParametersItem") + message := "contains an invalid ParametersItem" err := compiler.NewError(context, message) errors = []error{err} } @@ -4561,7 +4561,7 @@ func NewResponseValue(in *yaml.Node, context *compiler.Context) (*ResponseValue, // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid ResponseValue") + message := "contains an invalid ResponseValue" err := compiler.NewError(context, message) errors = []error{err} } @@ -5030,7 +5030,7 @@ func NewSchemaItem(in *yaml.Node, context *compiler.Context) (*SchemaItem, error // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid SchemaItem") + message := "contains an invalid SchemaItem" err := compiler.NewError(context, message) errors = []error{err} } @@ -5160,7 +5160,7 @@ func NewSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*Secu // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid SecurityDefinitionsItem") + message := "contains an invalid SecurityDefinitionsItem" err := compiler.NewError(context, message) errors = []error{err} } @@ -6930,7 +6930,7 @@ func (m *BodyParameter) ToRawInfo() *yaml.Node { // always include this required field. info.Content = append(info.Content, compiler.NewScalarNodeForString("in")) info.Content = append(info.Content, compiler.NewScalarNodeForString(m.In)) - if m.Required != false { + if m.Required { info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Required)) } @@ -7149,7 +7149,7 @@ func (m *FileSchema) ToRawInfo() *yaml.Node { // always include this required field. info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) - if m.ReadOnly != false { + if m.ReadOnly { info.Content = append(info.Content, compiler.NewScalarNodeForString("readOnly")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ReadOnly)) } @@ -7176,7 +7176,7 @@ func (m *FormDataParameterSubSchema) ToRawInfo() *yaml.Node { if m == nil { return info } - if m.Required != false { + if m.Required { info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Required)) } @@ -7192,7 +7192,7 @@ func (m *FormDataParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } - if m.AllowEmptyValue != false { + if m.AllowEmptyValue { info.Content = append(info.Content, compiler.NewScalarNodeForString("allowEmptyValue")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.AllowEmptyValue)) } @@ -7220,7 +7220,7 @@ func (m *FormDataParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } - if m.ExclusiveMaximum != false { + if m.ExclusiveMaximum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } @@ -7228,7 +7228,7 @@ func (m *FormDataParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } - if m.ExclusiveMinimum != false { + if m.ExclusiveMinimum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } @@ -7252,7 +7252,7 @@ func (m *FormDataParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } - if m.UniqueItems != false { + if m.UniqueItems { info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } @@ -7306,7 +7306,7 @@ func (m *Header) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } - if m.ExclusiveMaximum != false { + if m.ExclusiveMaximum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } @@ -7314,7 +7314,7 @@ func (m *Header) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } - if m.ExclusiveMinimum != false { + if m.ExclusiveMinimum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } @@ -7338,7 +7338,7 @@ func (m *Header) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } - if m.UniqueItems != false { + if m.UniqueItems { info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } @@ -7373,7 +7373,7 @@ func (m *HeaderParameterSubSchema) ToRawInfo() *yaml.Node { if m == nil { return info } - if m.Required != false { + if m.Required { info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Required)) } @@ -7413,7 +7413,7 @@ func (m *HeaderParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } - if m.ExclusiveMaximum != false { + if m.ExclusiveMaximum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } @@ -7421,7 +7421,7 @@ func (m *HeaderParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } - if m.ExclusiveMinimum != false { + if m.ExclusiveMinimum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } @@ -7445,7 +7445,7 @@ func (m *HeaderParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } - if m.UniqueItems != false { + if m.UniqueItems { info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } @@ -7940,7 +7940,7 @@ func (m *Operation) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("schemes")) info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Schemes)) } - if m.Deprecated != false { + if m.Deprecated { info.Content = append(info.Content, compiler.NewScalarNodeForString("deprecated")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Deprecated)) } @@ -8110,7 +8110,7 @@ func (m *PathParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } - if m.ExclusiveMaximum != false { + if m.ExclusiveMaximum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } @@ -8118,7 +8118,7 @@ func (m *PathParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } - if m.ExclusiveMinimum != false { + if m.ExclusiveMinimum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } @@ -8142,7 +8142,7 @@ func (m *PathParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } - if m.UniqueItems != false { + if m.UniqueItems { info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } @@ -8218,7 +8218,7 @@ func (m *PrimitivesItems) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } - if m.ExclusiveMaximum != false { + if m.ExclusiveMaximum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } @@ -8226,7 +8226,7 @@ func (m *PrimitivesItems) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } - if m.ExclusiveMinimum != false { + if m.ExclusiveMinimum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } @@ -8250,7 +8250,7 @@ func (m *PrimitivesItems) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } - if m.UniqueItems != false { + if m.UniqueItems { info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } @@ -8296,7 +8296,7 @@ func (m *QueryParameterSubSchema) ToRawInfo() *yaml.Node { if m == nil { return info } - if m.Required != false { + if m.Required { info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Required)) } @@ -8312,7 +8312,7 @@ func (m *QueryParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } - if m.AllowEmptyValue != false { + if m.AllowEmptyValue { info.Content = append(info.Content, compiler.NewScalarNodeForString("allowEmptyValue")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.AllowEmptyValue)) } @@ -8340,7 +8340,7 @@ func (m *QueryParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } - if m.ExclusiveMaximum != false { + if m.ExclusiveMaximum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } @@ -8348,7 +8348,7 @@ func (m *QueryParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } - if m.ExclusiveMinimum != false { + if m.ExclusiveMinimum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } @@ -8372,7 +8372,7 @@ func (m *QueryParameterSubSchema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } - if m.UniqueItems != false { + if m.UniqueItems { info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } @@ -8514,7 +8514,7 @@ func (m *Schema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } - if m.ExclusiveMaximum != false { + if m.ExclusiveMaximum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } @@ -8522,7 +8522,7 @@ func (m *Schema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } - if m.ExclusiveMinimum != false { + if m.ExclusiveMinimum { info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } @@ -8546,7 +8546,7 @@ func (m *Schema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } - if m.UniqueItems != false { + if m.UniqueItems { info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } @@ -8610,7 +8610,7 @@ func (m *Schema) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("discriminator")) info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Discriminator)) } - if m.ReadOnly != false { + if m.ReadOnly { info.Content = append(info.Content, compiler.NewScalarNodeForString("readOnly")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ReadOnly)) } @@ -8796,11 +8796,11 @@ func (m *Xml) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("prefix")) info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Prefix)) } - if m.Attribute != false { + if m.Attribute { info.Content = append(info.Content, compiler.NewScalarNodeForString("attribute")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Attribute)) } - if m.Wrapped != false { + if m.Wrapped { info.Content = append(info.Content, compiler.NewScalarNodeForString("wrapped")) info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Wrapped)) } diff --git a/upstream/vendor/github.com/google/gnostic-models/openapiv2/document.go b/upstream/vendor/github.com/google/gnostic-models/openapiv2/document.go index e96ac0d6da..89469a13ed 100644 --- a/upstream/vendor/github.com/google/gnostic-models/openapiv2/document.go +++ b/upstream/vendor/github.com/google/gnostic-models/openapiv2/document.go @@ -15,7 +15,7 @@ package openapi_v2 import ( - "gopkg.in/yaml.v3" + yaml "go.yaml.in/yaml/v3" "github.com/google/gnostic-models/compiler" ) diff --git a/upstream/vendor/github.com/google/gnostic-models/openapiv3/OpenAPIv3.go b/upstream/vendor/github.com/google/gnostic-models/openapiv3/OpenAPIv3.go index 4b1131ce1c..662772dd95 100644 --- a/upstream/vendor/github.com/google/gnostic-models/openapiv3/OpenAPIv3.go +++ b/upstream/vendor/github.com/google/gnostic-models/openapiv3/OpenAPIv3.go @@ -21,7 +21,7 @@ import ( "regexp" "strings" - "gopkg.in/yaml.v3" + yaml "go.yaml.in/yaml/v3" "github.com/google/gnostic-models/compiler" ) @@ -60,7 +60,7 @@ func NewAdditionalPropertiesItem(in *yaml.Node, context *compiler.Context) (*Add // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid AdditionalPropertiesItem") + message := "contains an invalid AdditionalPropertiesItem" err := compiler.NewError(context, message) errors = []error{err} } @@ -113,7 +113,7 @@ func NewAnyOrExpression(in *yaml.Node, context *compiler.Context) (*AnyOrExpress // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid AnyOrExpression") + message := "contains an invalid AnyOrExpression" err := compiler.NewError(context, message) errors = []error{err} } @@ -227,7 +227,7 @@ func NewCallbackOrReference(in *yaml.Node, context *compiler.Context) (*Callback // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid CallbackOrReference") + message := "contains an invalid CallbackOrReference" err := compiler.NewError(context, message) errors = []error{err} } @@ -979,7 +979,7 @@ func NewExampleOrReference(in *yaml.Node, context *compiler.Context) (*ExampleOr // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid ExampleOrReference") + message := "contains an invalid ExampleOrReference" err := compiler.NewError(context, message) errors = []error{err} } @@ -1320,7 +1320,7 @@ func NewHeaderOrReference(in *yaml.Node, context *compiler.Context) (*HeaderOrRe // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid HeaderOrReference") + message := "contains an invalid HeaderOrReference" err := compiler.NewError(context, message) errors = []error{err} } @@ -1713,7 +1713,7 @@ func NewLinkOrReference(in *yaml.Node, context *compiler.Context) (*LinkOrRefere // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid LinkOrReference") + message := "contains an invalid LinkOrReference" err := compiler.NewError(context, message) errors = []error{err} } @@ -3090,7 +3090,7 @@ func NewParameterOrReference(in *yaml.Node, context *compiler.Context) (*Paramet // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid ParameterOrReference") + message := "contains an invalid ParameterOrReference" err := compiler.NewError(context, message) errors = []error{err} } @@ -3606,7 +3606,7 @@ func NewRequestBodyOrReference(in *yaml.Node, context *compiler.Context) (*Reque // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid RequestBodyOrReference") + message := "contains an invalid RequestBodyOrReference" err := compiler.NewError(context, message) errors = []error{err} } @@ -3743,7 +3743,7 @@ func NewResponseOrReference(in *yaml.Node, context *compiler.Context) (*Response // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid ResponseOrReference") + message := "contains an invalid ResponseOrReference" err := compiler.NewError(context, message) errors = []error{err} } @@ -4310,7 +4310,7 @@ func NewSchemaOrReference(in *yaml.Node, context *compiler.Context) (*SchemaOrRe // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid SchemaOrReference") + message := "contains an invalid SchemaOrReference" err := compiler.NewError(context, message) errors = []error{err} } @@ -4543,7 +4543,7 @@ func NewSecuritySchemeOrReference(in *yaml.Node, context *compiler.Context) (*Se // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) } else { - message := fmt.Sprintf("contains an invalid SecuritySchemeOrReference") + message := "contains an invalid SecuritySchemeOrReference" err := compiler.NewError(context, message) errors = []error{err} } diff --git a/upstream/vendor/github.com/google/gnostic-models/openapiv3/document.go b/upstream/vendor/github.com/google/gnostic-models/openapiv3/document.go index 1cee467735..499ff883c5 100644 --- a/upstream/vendor/github.com/google/gnostic-models/openapiv3/document.go +++ b/upstream/vendor/github.com/google/gnostic-models/openapiv3/document.go @@ -15,7 +15,7 @@ package openapi_v3 import ( - "gopkg.in/yaml.v3" + yaml "go.yaml.in/yaml/v3" "github.com/google/gnostic-models/compiler" ) diff --git a/upstream/vendor/go.yaml.in/yaml/v2/.travis.yml b/upstream/vendor/go.yaml.in/yaml/v2/.travis.yml new file mode 100644 index 0000000000..7348c50c0c --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/.travis.yml @@ -0,0 +1,17 @@ +language: go + +go: + - "1.4.x" + - "1.5.x" + - "1.6.x" + - "1.7.x" + - "1.8.x" + - "1.9.x" + - "1.10.x" + - "1.11.x" + - "1.12.x" + - "1.13.x" + - "1.14.x" + - "tip" + +go_import_path: gopkg.in/yaml.v2 diff --git a/upstream/vendor/go.yaml.in/yaml/v2/LICENSE b/upstream/vendor/go.yaml.in/yaml/v2/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/upstream/vendor/go.yaml.in/yaml/v2/LICENSE.libyaml b/upstream/vendor/go.yaml.in/yaml/v2/LICENSE.libyaml new file mode 100644 index 0000000000..8da58fbf6f --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/LICENSE.libyaml @@ -0,0 +1,31 @@ +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original copyright and license: + + apic.go + emitterc.go + parserc.go + readerc.go + scannerc.go + writerc.go + yamlh.go + yamlprivateh.go + +Copyright (c) 2006 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/upstream/vendor/go.yaml.in/yaml/v2/NOTICE b/upstream/vendor/go.yaml.in/yaml/v2/NOTICE new file mode 100644 index 0000000000..866d74a7ad --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/NOTICE @@ -0,0 +1,13 @@ +Copyright 2011-2016 Canonical Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/upstream/vendor/go.yaml.in/yaml/v2/README.md b/upstream/vendor/go.yaml.in/yaml/v2/README.md new file mode 100644 index 0000000000..c9388da425 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/README.md @@ -0,0 +1,131 @@ +# YAML support for the Go language + +Introduction +------------ + +The yaml package enables Go programs to comfortably encode and decode YAML +values. It was developed within [Canonical](https://www.canonical.com) as +part of the [juju](https://juju.ubuntu.com) project, and is based on a +pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) +C library to parse and generate YAML data quickly and reliably. + +Compatibility +------------- + +The yaml package supports most of YAML 1.1 and 1.2, including support for +anchors, tags, map merging, etc. Multi-document unmarshalling is not yet +implemented, and base-60 floats from YAML 1.1 are purposefully not +supported since they're a poor design and are gone in YAML 1.2. + +Installation and usage +---------------------- + +The import path for the package is *go.yaml.in/yaml/v2*. + +To install it, run: + + go get go.yaml.in/yaml/v2 + +API documentation +----------------- + +See: + +API stability +------------- + +The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in). + + +License +------- + +The yaml package is licensed under the Apache License 2.0. Please see the LICENSE file for details. + + +Example +------- + +```Go +package main + +import ( + "fmt" + "log" + + "go.yaml.in/yaml/v2" +) + +var data = ` +a: Easy! +b: + c: 2 + d: [3, 4] +` + +// Note: struct fields must be public in order for unmarshal to +// correctly populate the data. +type T struct { + A string + B struct { + RenamedC int `yaml:"c"` + D []int `yaml:",flow"` + } +} + +func main() { + t := T{} + + err := yaml.Unmarshal([]byte(data), &t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t:\n%v\n\n", t) + + d, err := yaml.Marshal(&t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t dump:\n%s\n\n", string(d)) + + m := make(map[interface{}]interface{}) + + err = yaml.Unmarshal([]byte(data), &m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m:\n%v\n\n", m) + + d, err = yaml.Marshal(&m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m dump:\n%s\n\n", string(d)) +} +``` + +This example will generate the following output: + +``` +--- t: +{Easy! {2 [3 4]}} + +--- t dump: +a: Easy! +b: + c: 2 + d: [3, 4] + + +--- m: +map[a:Easy! b:map[c:2 d:[3 4]]] + +--- m dump: +a: Easy! +b: + c: 2 + d: + - 3 + - 4 +``` + diff --git a/upstream/vendor/go.yaml.in/yaml/v2/apic.go b/upstream/vendor/go.yaml.in/yaml/v2/apic.go new file mode 100644 index 0000000000..acf71402cf --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/apic.go @@ -0,0 +1,744 @@ +package yaml + +import ( + "io" +) + +func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { + //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) + + // Check if we can move the queue at the beginning of the buffer. + if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { + if parser.tokens_head != len(parser.tokens) { + copy(parser.tokens, parser.tokens[parser.tokens_head:]) + } + parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] + parser.tokens_head = 0 + } + parser.tokens = append(parser.tokens, *token) + if pos < 0 { + return + } + copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) + parser.tokens[parser.tokens_head+pos] = *token +} + +// Create a new parser object. +func yaml_parser_initialize(parser *yaml_parser_t) bool { + *parser = yaml_parser_t{ + raw_buffer: make([]byte, 0, input_raw_buffer_size), + buffer: make([]byte, 0, input_buffer_size), + } + return true +} + +// Destroy a parser object. +func yaml_parser_delete(parser *yaml_parser_t) { + *parser = yaml_parser_t{} +} + +// String read handler. +func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + if parser.input_pos == len(parser.input) { + return 0, io.EOF + } + n = copy(buffer, parser.input[parser.input_pos:]) + parser.input_pos += n + return n, nil +} + +// Reader read handler. +func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + return parser.input_reader.Read(buffer) +} + +// Set a string input. +func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_string_read_handler + parser.input = input + parser.input_pos = 0 +} + +// Set a file input. +func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_reader_read_handler + parser.input_reader = r +} + +// Set the source encoding. +func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { + if parser.encoding != yaml_ANY_ENCODING { + panic("must set the encoding only once") + } + parser.encoding = encoding +} + +var disableLineWrapping = false + +// Create a new emitter object. +func yaml_emitter_initialize(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{ + buffer: make([]byte, output_buffer_size), + raw_buffer: make([]byte, 0, output_raw_buffer_size), + states: make([]yaml_emitter_state_t, 0, initial_stack_size), + events: make([]yaml_event_t, 0, initial_queue_size), + } + if disableLineWrapping { + emitter.best_width = -1 + } +} + +// Destroy an emitter object. +func yaml_emitter_delete(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{} +} + +// String write handler. +func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + *emitter.output_buffer = append(*emitter.output_buffer, buffer...) + return nil +} + +// yaml_writer_write_handler uses emitter.output_writer to write the +// emitted text. +func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + _, err := emitter.output_writer.Write(buffer) + return err +} + +// Set a string output. +func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_string_write_handler + emitter.output_buffer = output_buffer +} + +// Set a file output. +func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_writer_write_handler + emitter.output_writer = w +} + +// Set the output encoding. +func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { + if emitter.encoding != yaml_ANY_ENCODING { + panic("must set the output encoding only once") + } + emitter.encoding = encoding +} + +// Set the canonical output style. +func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { + emitter.canonical = canonical +} + +//// Set the indentation increment. +func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { + if indent < 2 || indent > 9 { + indent = 2 + } + emitter.best_indent = indent +} + +// Set the preferred line width. +func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { + if width < 0 { + width = -1 + } + emitter.best_width = width +} + +// Set if unescaped non-ASCII characters are allowed. +func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { + emitter.unicode = unicode +} + +// Set the preferred line break character. +func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { + emitter.line_break = line_break +} + +///* +// * Destroy a token object. +// */ +// +//YAML_DECLARE(void) +//yaml_token_delete(yaml_token_t *token) +//{ +// assert(token); // Non-NULL token object expected. +// +// switch (token.type) +// { +// case YAML_TAG_DIRECTIVE_TOKEN: +// yaml_free(token.data.tag_directive.handle); +// yaml_free(token.data.tag_directive.prefix); +// break; +// +// case YAML_ALIAS_TOKEN: +// yaml_free(token.data.alias.value); +// break; +// +// case YAML_ANCHOR_TOKEN: +// yaml_free(token.data.anchor.value); +// break; +// +// case YAML_TAG_TOKEN: +// yaml_free(token.data.tag.handle); +// yaml_free(token.data.tag.suffix); +// break; +// +// case YAML_SCALAR_TOKEN: +// yaml_free(token.data.scalar.value); +// break; +// +// default: +// break; +// } +// +// memset(token, 0, sizeof(yaml_token_t)); +//} +// +///* +// * Check if a string is a valid UTF-8 sequence. +// * +// * Check 'reader.c' for more details on UTF-8 encoding. +// */ +// +//static int +//yaml_check_utf8(yaml_char_t *start, size_t length) +//{ +// yaml_char_t *end = start+length; +// yaml_char_t *pointer = start; +// +// while (pointer < end) { +// unsigned char octet; +// unsigned int width; +// unsigned int value; +// size_t k; +// +// octet = pointer[0]; +// width = (octet & 0x80) == 0x00 ? 1 : +// (octet & 0xE0) == 0xC0 ? 2 : +// (octet & 0xF0) == 0xE0 ? 3 : +// (octet & 0xF8) == 0xF0 ? 4 : 0; +// value = (octet & 0x80) == 0x00 ? octet & 0x7F : +// (octet & 0xE0) == 0xC0 ? octet & 0x1F : +// (octet & 0xF0) == 0xE0 ? octet & 0x0F : +// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; +// if (!width) return 0; +// if (pointer+width > end) return 0; +// for (k = 1; k < width; k ++) { +// octet = pointer[k]; +// if ((octet & 0xC0) != 0x80) return 0; +// value = (value << 6) + (octet & 0x3F); +// } +// if (!((width == 1) || +// (width == 2 && value >= 0x80) || +// (width == 3 && value >= 0x800) || +// (width == 4 && value >= 0x10000))) return 0; +// +// pointer += width; +// } +// +// return 1; +//} +// + +// Create STREAM-START. +func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + encoding: encoding, + } +} + +// Create STREAM-END. +func yaml_stream_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + } +} + +// Create DOCUMENT-START. +func yaml_document_start_event_initialize( + event *yaml_event_t, + version_directive *yaml_version_directive_t, + tag_directives []yaml_tag_directive_t, + implicit bool, +) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: implicit, + } +} + +// Create DOCUMENT-END. +func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + implicit: implicit, + } +} + +///* +// * Create ALIAS. +// */ +// +//YAML_DECLARE(int) +//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t) +//{ +// mark yaml_mark_t = { 0, 0, 0 } +// anchor_copy *yaml_char_t = NULL +// +// assert(event) // Non-NULL event object is expected. +// assert(anchor) // Non-NULL anchor is expected. +// +// if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0 +// +// anchor_copy = yaml_strdup(anchor) +// if (!anchor_copy) +// return 0 +// +// ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark) +// +// return 1 +//} + +// Create SCALAR. +func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + anchor: anchor, + tag: tag, + value: value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-START. +func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-END. +func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + } + return true +} + +// Create MAPPING-START. +func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } +} + +// Create MAPPING-END. +func yaml_mapping_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + } +} + +// Destroy an event object. +func yaml_event_delete(event *yaml_event_t) { + *event = yaml_event_t{} +} + +///* +// * Create a document object. +// */ +// +//YAML_DECLARE(int) +//yaml_document_initialize(document *yaml_document_t, +// version_directive *yaml_version_directive_t, +// tag_directives_start *yaml_tag_directive_t, +// tag_directives_end *yaml_tag_directive_t, +// start_implicit int, end_implicit int) +//{ +// struct { +// error yaml_error_type_t +// } context +// struct { +// start *yaml_node_t +// end *yaml_node_t +// top *yaml_node_t +// } nodes = { NULL, NULL, NULL } +// version_directive_copy *yaml_version_directive_t = NULL +// struct { +// start *yaml_tag_directive_t +// end *yaml_tag_directive_t +// top *yaml_tag_directive_t +// } tag_directives_copy = { NULL, NULL, NULL } +// value yaml_tag_directive_t = { NULL, NULL } +// mark yaml_mark_t = { 0, 0, 0 } +// +// assert(document) // Non-NULL document object is expected. +// assert((tag_directives_start && tag_directives_end) || +// (tag_directives_start == tag_directives_end)) +// // Valid tag directives are expected. +// +// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error +// +// if (version_directive) { +// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) +// if (!version_directive_copy) goto error +// version_directive_copy.major = version_directive.major +// version_directive_copy.minor = version_directive.minor +// } +// +// if (tag_directives_start != tag_directives_end) { +// tag_directive *yaml_tag_directive_t +// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) +// goto error +// for (tag_directive = tag_directives_start +// tag_directive != tag_directives_end; tag_directive ++) { +// assert(tag_directive.handle) +// assert(tag_directive.prefix) +// if (!yaml_check_utf8(tag_directive.handle, +// strlen((char *)tag_directive.handle))) +// goto error +// if (!yaml_check_utf8(tag_directive.prefix, +// strlen((char *)tag_directive.prefix))) +// goto error +// value.handle = yaml_strdup(tag_directive.handle) +// value.prefix = yaml_strdup(tag_directive.prefix) +// if (!value.handle || !value.prefix) goto error +// if (!PUSH(&context, tag_directives_copy, value)) +// goto error +// value.handle = NULL +// value.prefix = NULL +// } +// } +// +// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, +// tag_directives_copy.start, tag_directives_copy.top, +// start_implicit, end_implicit, mark, mark) +// +// return 1 +// +//error: +// STACK_DEL(&context, nodes) +// yaml_free(version_directive_copy) +// while (!STACK_EMPTY(&context, tag_directives_copy)) { +// value yaml_tag_directive_t = POP(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// } +// STACK_DEL(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// +// return 0 +//} +// +///* +// * Destroy a document object. +// */ +// +//YAML_DECLARE(void) +//yaml_document_delete(document *yaml_document_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// tag_directive *yaml_tag_directive_t +// +// context.error = YAML_NO_ERROR // Eliminate a compiler warning. +// +// assert(document) // Non-NULL document object is expected. +// +// while (!STACK_EMPTY(&context, document.nodes)) { +// node yaml_node_t = POP(&context, document.nodes) +// yaml_free(node.tag) +// switch (node.type) { +// case YAML_SCALAR_NODE: +// yaml_free(node.data.scalar.value) +// break +// case YAML_SEQUENCE_NODE: +// STACK_DEL(&context, node.data.sequence.items) +// break +// case YAML_MAPPING_NODE: +// STACK_DEL(&context, node.data.mapping.pairs) +// break +// default: +// assert(0) // Should not happen. +// } +// } +// STACK_DEL(&context, document.nodes) +// +// yaml_free(document.version_directive) +// for (tag_directive = document.tag_directives.start +// tag_directive != document.tag_directives.end +// tag_directive++) { +// yaml_free(tag_directive.handle) +// yaml_free(tag_directive.prefix) +// } +// yaml_free(document.tag_directives.start) +// +// memset(document, 0, sizeof(yaml_document_t)) +//} +// +///** +// * Get a document node. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_node(document *yaml_document_t, index int) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (index > 0 && document.nodes.start + index <= document.nodes.top) { +// return document.nodes.start + index - 1 +// } +// return NULL +//} +// +///** +// * Get the root object. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_root_node(document *yaml_document_t) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (document.nodes.top != document.nodes.start) { +// return document.nodes.start +// } +// return NULL +//} +// +///* +// * Add a scalar node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_scalar(document *yaml_document_t, +// tag *yaml_char_t, value *yaml_char_t, length int, +// style yaml_scalar_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// value_copy *yaml_char_t = NULL +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// assert(value) // Non-NULL value is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (length < 0) { +// length = strlen((char *)value) +// } +// +// if (!yaml_check_utf8(value, length)) goto error +// value_copy = yaml_malloc(length+1) +// if (!value_copy) goto error +// memcpy(value_copy, value, length) +// value_copy[length] = '\0' +// +// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// yaml_free(tag_copy) +// yaml_free(value_copy) +// +// return 0 +//} +// +///* +// * Add a sequence node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_sequence(document *yaml_document_t, +// tag *yaml_char_t, style yaml_sequence_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_item_t +// end *yaml_node_item_t +// top *yaml_node_item_t +// } items = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error +// +// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, items) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Add a mapping node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_mapping(document *yaml_document_t, +// tag *yaml_char_t, style yaml_mapping_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_pair_t +// end *yaml_node_pair_t +// top *yaml_node_pair_t +// } pairs = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error +// +// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, pairs) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Append an item to a sequence node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_sequence_item(document *yaml_document_t, +// sequence int, item int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// assert(document) // Non-NULL document is required. +// assert(sequence > 0 +// && document.nodes.start + sequence <= document.nodes.top) +// // Valid sequence id is required. +// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) +// // A sequence node is required. +// assert(item > 0 && document.nodes.start + item <= document.nodes.top) +// // Valid item id is required. +// +// if (!PUSH(&context, +// document.nodes.start[sequence-1].data.sequence.items, item)) +// return 0 +// +// return 1 +//} +// +///* +// * Append a pair of a key and a value to a mapping node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_mapping_pair(document *yaml_document_t, +// mapping int, key int, value int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// pair yaml_node_pair_t +// +// assert(document) // Non-NULL document is required. +// assert(mapping > 0 +// && document.nodes.start + mapping <= document.nodes.top) +// // Valid mapping id is required. +// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) +// // A mapping node is required. +// assert(key > 0 && document.nodes.start + key <= document.nodes.top) +// // Valid key id is required. +// assert(value > 0 && document.nodes.start + value <= document.nodes.top) +// // Valid value id is required. +// +// pair.key = key +// pair.value = value +// +// if (!PUSH(&context, +// document.nodes.start[mapping-1].data.mapping.pairs, pair)) +// return 0 +// +// return 1 +//} +// +// diff --git a/upstream/vendor/go.yaml.in/yaml/v2/decode.go b/upstream/vendor/go.yaml.in/yaml/v2/decode.go new file mode 100644 index 0000000000..129bc2a97d --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/decode.go @@ -0,0 +1,815 @@ +package yaml + +import ( + "encoding" + "encoding/base64" + "fmt" + "io" + "math" + "reflect" + "strconv" + "time" +) + +const ( + documentNode = 1 << iota + mappingNode + sequenceNode + scalarNode + aliasNode +) + +type node struct { + kind int + line, column int + tag string + // For an alias node, alias holds the resolved alias. + alias *node + value string + implicit bool + children []*node + anchors map[string]*node +} + +// ---------------------------------------------------------------------------- +// Parser, produces a node tree out of a libyaml event stream. + +type parser struct { + parser yaml_parser_t + event yaml_event_t + doc *node + doneInit bool +} + +func newParser(b []byte) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + if len(b) == 0 { + b = []byte{'\n'} + } + yaml_parser_set_input_string(&p.parser, b) + return &p +} + +func newParserFromReader(r io.Reader) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + yaml_parser_set_input_reader(&p.parser, r) + return &p +} + +func (p *parser) init() { + if p.doneInit { + return + } + p.expect(yaml_STREAM_START_EVENT) + p.doneInit = true +} + +func (p *parser) destroy() { + if p.event.typ != yaml_NO_EVENT { + yaml_event_delete(&p.event) + } + yaml_parser_delete(&p.parser) +} + +// expect consumes an event from the event stream and +// checks that it's of the expected type. +func (p *parser) expect(e yaml_event_type_t) { + if p.event.typ == yaml_NO_EVENT { + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } + } + if p.event.typ == yaml_STREAM_END_EVENT { + failf("attempted to go past the end of stream; corrupted value?") + } + if p.event.typ != e { + p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ) + p.fail() + } + yaml_event_delete(&p.event) + p.event.typ = yaml_NO_EVENT +} + +// peek peeks at the next event in the event stream, +// puts the results into p.event and returns the event type. +func (p *parser) peek() yaml_event_type_t { + if p.event.typ != yaml_NO_EVENT { + return p.event.typ + } + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } + return p.event.typ +} + +func (p *parser) fail() { + var where string + var line int + if p.parser.problem_mark.line != 0 { + line = p.parser.problem_mark.line + // Scanner errors don't iterate line before returning error + if p.parser.error == yaml_SCANNER_ERROR { + line++ + } + } else if p.parser.context_mark.line != 0 { + line = p.parser.context_mark.line + } + if line != 0 { + where = "line " + strconv.Itoa(line) + ": " + } + var msg string + if len(p.parser.problem) > 0 { + msg = p.parser.problem + } else { + msg = "unknown problem parsing YAML content" + } + failf("%s%s", where, msg) +} + +func (p *parser) anchor(n *node, anchor []byte) { + if anchor != nil { + p.doc.anchors[string(anchor)] = n + } +} + +func (p *parser) parse() *node { + p.init() + switch p.peek() { + case yaml_SCALAR_EVENT: + return p.scalar() + case yaml_ALIAS_EVENT: + return p.alias() + case yaml_MAPPING_START_EVENT: + return p.mapping() + case yaml_SEQUENCE_START_EVENT: + return p.sequence() + case yaml_DOCUMENT_START_EVENT: + return p.document() + case yaml_STREAM_END_EVENT: + // Happens when attempting to decode an empty buffer. + return nil + default: + panic("attempted to parse unknown event: " + p.event.typ.String()) + } +} + +func (p *parser) node(kind int) *node { + return &node{ + kind: kind, + line: p.event.start_mark.line, + column: p.event.start_mark.column, + } +} + +func (p *parser) document() *node { + n := p.node(documentNode) + n.anchors = make(map[string]*node) + p.doc = n + p.expect(yaml_DOCUMENT_START_EVENT) + n.children = append(n.children, p.parse()) + p.expect(yaml_DOCUMENT_END_EVENT) + return n +} + +func (p *parser) alias() *node { + n := p.node(aliasNode) + n.value = string(p.event.anchor) + n.alias = p.doc.anchors[n.value] + if n.alias == nil { + failf("unknown anchor '%s' referenced", n.value) + } + p.expect(yaml_ALIAS_EVENT) + return n +} + +func (p *parser) scalar() *node { + n := p.node(scalarNode) + n.value = string(p.event.value) + n.tag = string(p.event.tag) + n.implicit = p.event.implicit + p.anchor(n, p.event.anchor) + p.expect(yaml_SCALAR_EVENT) + return n +} + +func (p *parser) sequence() *node { + n := p.node(sequenceNode) + p.anchor(n, p.event.anchor) + p.expect(yaml_SEQUENCE_START_EVENT) + for p.peek() != yaml_SEQUENCE_END_EVENT { + n.children = append(n.children, p.parse()) + } + p.expect(yaml_SEQUENCE_END_EVENT) + return n +} + +func (p *parser) mapping() *node { + n := p.node(mappingNode) + p.anchor(n, p.event.anchor) + p.expect(yaml_MAPPING_START_EVENT) + for p.peek() != yaml_MAPPING_END_EVENT { + n.children = append(n.children, p.parse(), p.parse()) + } + p.expect(yaml_MAPPING_END_EVENT) + return n +} + +// ---------------------------------------------------------------------------- +// Decoder, unmarshals a node into a provided value. + +type decoder struct { + doc *node + aliases map[*node]bool + mapType reflect.Type + terrors []string + strict bool + + decodeCount int + aliasCount int + aliasDepth int +} + +var ( + mapItemType = reflect.TypeOf(MapItem{}) + durationType = reflect.TypeOf(time.Duration(0)) + defaultMapType = reflect.TypeOf(map[interface{}]interface{}{}) + ifaceType = defaultMapType.Elem() + timeType = reflect.TypeOf(time.Time{}) + ptrTimeType = reflect.TypeOf(&time.Time{}) +) + +func newDecoder(strict bool) *decoder { + d := &decoder{mapType: defaultMapType, strict: strict} + d.aliases = make(map[*node]bool) + return d +} + +func (d *decoder) terror(n *node, tag string, out reflect.Value) { + if n.tag != "" { + tag = n.tag + } + value := n.value + if tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG { + if len(value) > 10 { + value = " `" + value[:7] + "...`" + } else { + value = " `" + value + "`" + } + } + d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.line+1, shortTag(tag), value, out.Type())) +} + +func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) { + terrlen := len(d.terrors) + err := u.UnmarshalYAML(func(v interface{}) (err error) { + defer handleErr(&err) + d.unmarshal(n, reflect.ValueOf(v)) + if len(d.terrors) > terrlen { + issues := d.terrors[terrlen:] + d.terrors = d.terrors[:terrlen] + return &TypeError{issues} + } + return nil + }) + if e, ok := err.(*TypeError); ok { + d.terrors = append(d.terrors, e.Errors...) + return false + } + if err != nil { + fail(err) + } + return true +} + +// d.prepare initializes and dereferences pointers and calls UnmarshalYAML +// if a value is found to implement it. +// It returns the initialized and dereferenced out value, whether +// unmarshalling was already done by UnmarshalYAML, and if so whether +// its types unmarshalled appropriately. +// +// If n holds a null value, prepare returns before doing anything. +func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { + if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) { + return out, false, false + } + again := true + for again { + again = false + if out.Kind() == reflect.Ptr { + if out.IsNil() { + out.Set(reflect.New(out.Type().Elem())) + } + out = out.Elem() + again = true + } + if out.CanAddr() { + if u, ok := out.Addr().Interface().(Unmarshaler); ok { + good = d.callUnmarshaler(n, u) + return out, true, good + } + } + } + return out, false, false +} + +const ( + // 400,000 decode operations is ~500kb of dense object declarations, or + // ~5kb of dense object declarations with 10000% alias expansion + alias_ratio_range_low = 400000 + + // 4,000,000 decode operations is ~5MB of dense object declarations, or + // ~4.5MB of dense object declarations with 10% alias expansion + alias_ratio_range_high = 4000000 + + // alias_ratio_range is the range over which we scale allowed alias ratios + alias_ratio_range = float64(alias_ratio_range_high - alias_ratio_range_low) +) + +func allowedAliasRatio(decodeCount int) float64 { + switch { + case decodeCount <= alias_ratio_range_low: + // allow 99% to come from alias expansion for small-to-medium documents + return 0.99 + case decodeCount >= alias_ratio_range_high: + // allow 10% to come from alias expansion for very large documents + return 0.10 + default: + // scale smoothly from 99% down to 10% over the range. + // this maps to 396,000 - 400,000 allowed alias-driven decodes over the range. + // 400,000 decode operations is ~100MB of allocations in worst-case scenarios (single-item maps). + return 0.99 - 0.89*(float64(decodeCount-alias_ratio_range_low)/alias_ratio_range) + } +} + +func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) { + d.decodeCount++ + if d.aliasDepth > 0 { + d.aliasCount++ + } + if d.aliasCount > 100 && d.decodeCount > 1000 && float64(d.aliasCount)/float64(d.decodeCount) > allowedAliasRatio(d.decodeCount) { + failf("document contains excessive aliasing") + } + switch n.kind { + case documentNode: + return d.document(n, out) + case aliasNode: + return d.alias(n, out) + } + out, unmarshaled, good := d.prepare(n, out) + if unmarshaled { + return good + } + switch n.kind { + case scalarNode: + good = d.scalar(n, out) + case mappingNode: + good = d.mapping(n, out) + case sequenceNode: + good = d.sequence(n, out) + default: + panic("internal error: unknown node kind: " + strconv.Itoa(n.kind)) + } + return good +} + +func (d *decoder) document(n *node, out reflect.Value) (good bool) { + if len(n.children) == 1 { + d.doc = n + d.unmarshal(n.children[0], out) + return true + } + return false +} + +func (d *decoder) alias(n *node, out reflect.Value) (good bool) { + if d.aliases[n] { + // TODO this could actually be allowed in some circumstances. + failf("anchor '%s' value contains itself", n.value) + } + d.aliases[n] = true + d.aliasDepth++ + good = d.unmarshal(n.alias, out) + d.aliasDepth-- + delete(d.aliases, n) + return good +} + +var zeroValue reflect.Value + +func resetMap(out reflect.Value) { + for _, k := range out.MapKeys() { + out.SetMapIndex(k, zeroValue) + } +} + +func (d *decoder) scalar(n *node, out reflect.Value) bool { + var tag string + var resolved interface{} + if n.tag == "" && !n.implicit { + tag = yaml_STR_TAG + resolved = n.value + } else { + tag, resolved = resolve(n.tag, n.value) + if tag == yaml_BINARY_TAG { + data, err := base64.StdEncoding.DecodeString(resolved.(string)) + if err != nil { + failf("!!binary value contains invalid base64 data") + } + resolved = string(data) + } + } + if resolved == nil { + if out.Kind() == reflect.Map && !out.CanAddr() { + resetMap(out) + } else { + out.Set(reflect.Zero(out.Type())) + } + return true + } + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + // We've resolved to exactly the type we want, so use that. + out.Set(resolvedv) + return true + } + // Perhaps we can use the value as a TextUnmarshaler to + // set its value. + if out.CanAddr() { + u, ok := out.Addr().Interface().(encoding.TextUnmarshaler) + if ok { + var text []byte + if tag == yaml_BINARY_TAG { + text = []byte(resolved.(string)) + } else { + // We let any value be unmarshaled into TextUnmarshaler. + // That might be more lax than we'd like, but the + // TextUnmarshaler itself should bowl out any dubious values. + text = []byte(n.value) + } + err := u.UnmarshalText(text) + if err != nil { + fail(err) + } + return true + } + } + switch out.Kind() { + case reflect.String: + if tag == yaml_BINARY_TAG { + out.SetString(resolved.(string)) + return true + } + if resolved != nil { + out.SetString(n.value) + return true + } + case reflect.Interface: + if resolved == nil { + out.Set(reflect.Zero(out.Type())) + } else if tag == yaml_TIMESTAMP_TAG { + // It looks like a timestamp but for backward compatibility + // reasons we set it as a string, so that code that unmarshals + // timestamp-like values into interface{} will continue to + // see a string and not a time.Time. + // TODO(v3) Drop this. + out.Set(reflect.ValueOf(n.value)) + } else { + out.Set(reflect.ValueOf(resolved)) + } + return true + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + switch resolved := resolved.(type) { + case int: + if !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case int64: + if !out.OverflowInt(resolved) { + out.SetInt(resolved) + return true + } + case uint64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case float64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case string: + if out.Type() == durationType { + d, err := time.ParseDuration(resolved) + if err == nil { + out.SetInt(int64(d)) + return true + } + } + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + switch resolved := resolved.(type) { + case int: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case int64: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case uint64: + if !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case float64: + if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + } + case reflect.Bool: + switch resolved := resolved.(type) { + case bool: + out.SetBool(resolved) + return true + } + case reflect.Float32, reflect.Float64: + switch resolved := resolved.(type) { + case int: + out.SetFloat(float64(resolved)) + return true + case int64: + out.SetFloat(float64(resolved)) + return true + case uint64: + out.SetFloat(float64(resolved)) + return true + case float64: + out.SetFloat(resolved) + return true + } + case reflect.Struct: + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + out.Set(resolvedv) + return true + } + case reflect.Ptr: + if out.Type().Elem() == reflect.TypeOf(resolved) { + // TODO DOes this make sense? When is out a Ptr except when decoding a nil value? + elem := reflect.New(out.Type().Elem()) + elem.Elem().Set(reflect.ValueOf(resolved)) + out.Set(elem) + return true + } + } + d.terror(n, tag, out) + return false +} + +func settableValueOf(i interface{}) reflect.Value { + v := reflect.ValueOf(i) + sv := reflect.New(v.Type()).Elem() + sv.Set(v) + return sv +} + +func (d *decoder) sequence(n *node, out reflect.Value) (good bool) { + l := len(n.children) + + var iface reflect.Value + switch out.Kind() { + case reflect.Slice: + out.Set(reflect.MakeSlice(out.Type(), l, l)) + case reflect.Array: + if l != out.Len() { + failf("invalid array: want %d elements but got %d", out.Len(), l) + } + case reflect.Interface: + // No type hints. Will have to use a generic sequence. + iface = out + out = settableValueOf(make([]interface{}, l)) + default: + d.terror(n, yaml_SEQ_TAG, out) + return false + } + et := out.Type().Elem() + + j := 0 + for i := 0; i < l; i++ { + e := reflect.New(et).Elem() + if ok := d.unmarshal(n.children[i], e); ok { + out.Index(j).Set(e) + j++ + } + } + if out.Kind() != reflect.Array { + out.Set(out.Slice(0, j)) + } + if iface.IsValid() { + iface.Set(out) + } + return true +} + +func (d *decoder) mapping(n *node, out reflect.Value) (good bool) { + switch out.Kind() { + case reflect.Struct: + return d.mappingStruct(n, out) + case reflect.Slice: + return d.mappingSlice(n, out) + case reflect.Map: + // okay + case reflect.Interface: + if d.mapType.Kind() == reflect.Map { + iface := out + out = reflect.MakeMap(d.mapType) + iface.Set(out) + } else { + slicev := reflect.New(d.mapType).Elem() + if !d.mappingSlice(n, slicev) { + return false + } + out.Set(slicev) + return true + } + default: + d.terror(n, yaml_MAP_TAG, out) + return false + } + outt := out.Type() + kt := outt.Key() + et := outt.Elem() + + mapType := d.mapType + if outt.Key() == ifaceType && outt.Elem() == ifaceType { + d.mapType = outt + } + + if out.IsNil() { + out.Set(reflect.MakeMap(outt)) + } + l := len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + k := reflect.New(kt).Elem() + if d.unmarshal(n.children[i], k) { + kkind := k.Kind() + if kkind == reflect.Interface { + kkind = k.Elem().Kind() + } + if kkind == reflect.Map || kkind == reflect.Slice { + failf("invalid map key: %#v", k.Interface()) + } + e := reflect.New(et).Elem() + if d.unmarshal(n.children[i+1], e) { + d.setMapIndex(n.children[i+1], out, k, e) + } + } + } + d.mapType = mapType + return true +} + +func (d *decoder) setMapIndex(n *node, out, k, v reflect.Value) { + if d.strict && out.MapIndex(k) != zeroValue { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: key %#v already set in map", n.line+1, k.Interface())) + return + } + out.SetMapIndex(k, v) +} + +func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) { + outt := out.Type() + if outt.Elem() != mapItemType { + d.terror(n, yaml_MAP_TAG, out) + return false + } + + mapType := d.mapType + d.mapType = outt + + var slice []MapItem + var l = len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + item := MapItem{} + k := reflect.ValueOf(&item.Key).Elem() + if d.unmarshal(n.children[i], k) { + v := reflect.ValueOf(&item.Value).Elem() + if d.unmarshal(n.children[i+1], v) { + slice = append(slice, item) + } + } + } + out.Set(reflect.ValueOf(slice)) + d.mapType = mapType + return true +} + +func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { + sinfo, err := getStructInfo(out.Type()) + if err != nil { + panic(err) + } + name := settableValueOf("") + l := len(n.children) + + var inlineMap reflect.Value + var elemType reflect.Type + if sinfo.InlineMap != -1 { + inlineMap = out.Field(sinfo.InlineMap) + inlineMap.Set(reflect.New(inlineMap.Type()).Elem()) + elemType = inlineMap.Type().Elem() + } + + var doneFields []bool + if d.strict { + doneFields = make([]bool, len(sinfo.FieldsList)) + } + for i := 0; i < l; i += 2 { + ni := n.children[i] + if isMerge(ni) { + d.merge(n.children[i+1], out) + continue + } + if !d.unmarshal(ni, name) { + continue + } + if info, ok := sinfo.FieldsMap[name.String()]; ok { + if d.strict { + if doneFields[info.Id] { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.line+1, name.String(), out.Type())) + continue + } + doneFields[info.Id] = true + } + var field reflect.Value + if info.Inline == nil { + field = out.Field(info.Num) + } else { + field = out.FieldByIndex(info.Inline) + } + d.unmarshal(n.children[i+1], field) + } else if sinfo.InlineMap != -1 { + if inlineMap.IsNil() { + inlineMap.Set(reflect.MakeMap(inlineMap.Type())) + } + value := reflect.New(elemType).Elem() + d.unmarshal(n.children[i+1], value) + d.setMapIndex(n.children[i+1], inlineMap, name, value) + } else if d.strict { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.line+1, name.String(), out.Type())) + } + } + return true +} + +func failWantMap() { + failf("map merge requires map or sequence of maps as the value") +} + +func (d *decoder) merge(n *node, out reflect.Value) { + switch n.kind { + case mappingNode: + d.unmarshal(n, out) + case aliasNode: + if n.alias != nil && n.alias.kind != mappingNode { + failWantMap() + } + d.unmarshal(n, out) + case sequenceNode: + // Step backwards as earlier nodes take precedence. + for i := len(n.children) - 1; i >= 0; i-- { + ni := n.children[i] + if ni.kind == aliasNode { + if ni.alias != nil && ni.alias.kind != mappingNode { + failWantMap() + } + } else if ni.kind != mappingNode { + failWantMap() + } + d.unmarshal(ni, out) + } + default: + failWantMap() + } +} + +func isMerge(n *node) bool { + return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG) +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/emitterc.go b/upstream/vendor/go.yaml.in/yaml/v2/emitterc.go new file mode 100644 index 0000000000..a1c2cc5262 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/emitterc.go @@ -0,0 +1,1685 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Flush the buffer if needed. +func flush(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) { + return yaml_emitter_flush(emitter) + } + return true +} + +// Put a character to the output buffer. +func put(emitter *yaml_emitter_t, value byte) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + emitter.buffer[emitter.buffer_pos] = value + emitter.buffer_pos++ + emitter.column++ + return true +} + +// Put a line break to the output buffer. +func put_break(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + switch emitter.line_break { + case yaml_CR_BREAK: + emitter.buffer[emitter.buffer_pos] = '\r' + emitter.buffer_pos += 1 + case yaml_LN_BREAK: + emitter.buffer[emitter.buffer_pos] = '\n' + emitter.buffer_pos += 1 + case yaml_CRLN_BREAK: + emitter.buffer[emitter.buffer_pos+0] = '\r' + emitter.buffer[emitter.buffer_pos+1] = '\n' + emitter.buffer_pos += 2 + default: + panic("unknown line break setting") + } + emitter.column = 0 + emitter.line++ + return true +} + +// Copy a character from a string into buffer. +func write(emitter *yaml_emitter_t, s []byte, i *int) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + p := emitter.buffer_pos + w := width(s[*i]) + switch w { + case 4: + emitter.buffer[p+3] = s[*i+3] + fallthrough + case 3: + emitter.buffer[p+2] = s[*i+2] + fallthrough + case 2: + emitter.buffer[p+1] = s[*i+1] + fallthrough + case 1: + emitter.buffer[p+0] = s[*i+0] + default: + panic("unknown character width") + } + emitter.column++ + emitter.buffer_pos += w + *i += w + return true +} + +// Write a whole string into buffer. +func write_all(emitter *yaml_emitter_t, s []byte) bool { + for i := 0; i < len(s); { + if !write(emitter, s, &i) { + return false + } + } + return true +} + +// Copy a line break character from a string into buffer. +func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { + if s[*i] == '\n' { + if !put_break(emitter) { + return false + } + *i++ + } else { + if !write(emitter, s, i) { + return false + } + emitter.column = 0 + emitter.line++ + } + return true +} + +// Set an emitter error and return false. +func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_EMITTER_ERROR + emitter.problem = problem + return false +} + +// Emit an event. +func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.events = append(emitter.events, *event) + for !yaml_emitter_need_more_events(emitter) { + event := &emitter.events[emitter.events_head] + if !yaml_emitter_analyze_event(emitter, event) { + return false + } + if !yaml_emitter_state_machine(emitter, event) { + return false + } + yaml_event_delete(event) + emitter.events_head++ + } + return true +} + +// Check if we need to accumulate more events before emitting. +// +// We accumulate extra +// - 1 event for DOCUMENT-START +// - 2 events for SEQUENCE-START +// - 3 events for MAPPING-START +// +func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { + if emitter.events_head == len(emitter.events) { + return true + } + var accumulate int + switch emitter.events[emitter.events_head].typ { + case yaml_DOCUMENT_START_EVENT: + accumulate = 1 + break + case yaml_SEQUENCE_START_EVENT: + accumulate = 2 + break + case yaml_MAPPING_START_EVENT: + accumulate = 3 + break + default: + return false + } + if len(emitter.events)-emitter.events_head > accumulate { + return false + } + var level int + for i := emitter.events_head; i < len(emitter.events); i++ { + switch emitter.events[i].typ { + case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: + level++ + case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: + level-- + } + if level == 0 { + return false + } + } + return true +} + +// Append a directive to the directives stack. +func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { + for i := 0; i < len(emitter.tag_directives); i++ { + if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") + } + } + + // [Go] Do we actually need to copy this given garbage collection + // and the lack of deallocating destructors? + tag_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(tag_copy.handle, value.handle) + copy(tag_copy.prefix, value.prefix) + emitter.tag_directives = append(emitter.tag_directives, tag_copy) + return true +} + +// Increase the indentation level. +func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { + emitter.indents = append(emitter.indents, emitter.indent) + if emitter.indent < 0 { + if flow { + emitter.indent = emitter.best_indent + } else { + emitter.indent = 0 + } + } else if !indentless { + emitter.indent += emitter.best_indent + } + return true +} + +// State dispatcher. +func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { + switch emitter.state { + default: + case yaml_EMIT_STREAM_START_STATE: + return yaml_emitter_emit_stream_start(emitter, event) + + case yaml_EMIT_FIRST_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, true) + + case yaml_EMIT_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, false) + + case yaml_EMIT_DOCUMENT_CONTENT_STATE: + return yaml_emitter_emit_document_content(emitter, event) + + case yaml_EMIT_DOCUMENT_END_STATE: + return yaml_emitter_emit_document_end(emitter, event) + + case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, true) + + case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, false) + + case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, true) + + case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, false) + + case yaml_EMIT_END_STATE: + return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") + } + panic("invalid emitter state") +} + +// Expect STREAM-START. +func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_STREAM_START_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") + } + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = event.encoding + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = yaml_UTF8_ENCODING + } + } + if emitter.best_indent < 2 || emitter.best_indent > 9 { + emitter.best_indent = 2 + } + if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { + emitter.best_width = 80 + } + if emitter.best_width < 0 { + emitter.best_width = 1<<31 - 1 + } + if emitter.line_break == yaml_ANY_BREAK { + emitter.line_break = yaml_LN_BREAK + } + + emitter.indent = -1 + emitter.line = 0 + emitter.column = 0 + emitter.whitespace = true + emitter.indention = true + + if emitter.encoding != yaml_UTF8_ENCODING { + if !yaml_emitter_write_bom(emitter) { + return false + } + } + emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE + return true +} + +// Expect DOCUMENT-START or STREAM-END. +func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + + if event.typ == yaml_DOCUMENT_START_EVENT { + + if event.version_directive != nil { + if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { + return false + } + } + + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { + return false + } + if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { + return false + } + } + + for i := 0; i < len(default_tag_directives); i++ { + tag_directive := &default_tag_directives[i] + if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { + return false + } + } + + implicit := event.implicit + if !first || emitter.canonical { + implicit = false + } + + if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if event.version_directive != nil { + implicit = false + if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if len(event.tag_directives) > 0 { + implicit = false + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { + return false + } + if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + if yaml_emitter_check_empty_document(emitter) { + implicit = false + } + if !implicit { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { + return false + } + if emitter.canonical { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE + return true + } + + if event.typ == yaml_STREAM_END_EVENT { + if emitter.open_ended { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_END_STATE + return true + } + + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") +} + +// Expect the root node. +func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) + return yaml_emitter_emit_node(emitter, event, true, false, false, false) +} + +// Expect DOCUMENT-END. +func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_DOCUMENT_END_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !event.implicit { + // [Go] Allocate the slice elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_DOCUMENT_START_STATE + emitter.tag_directives = emitter.tag_directives[:0] + return true +} + +// Expect a flow item node. +func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a flow key node. +func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_MAPPING_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a flow value node. +func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block item node. +func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) { + return false + } + } + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a block key node. +func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, false) { + return false + } + } + if event.typ == yaml_MAPPING_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block value node. +func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a node. +func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, + root bool, sequence bool, mapping bool, simple_key bool) bool { + + emitter.root_context = root + emitter.sequence_context = sequence + emitter.mapping_context = mapping + emitter.simple_key_context = simple_key + + switch event.typ { + case yaml_ALIAS_EVENT: + return yaml_emitter_emit_alias(emitter, event) + case yaml_SCALAR_EVENT: + return yaml_emitter_emit_scalar(emitter, event) + case yaml_SEQUENCE_START_EVENT: + return yaml_emitter_emit_sequence_start(emitter, event) + case yaml_MAPPING_START_EVENT: + return yaml_emitter_emit_mapping_start(emitter, event) + default: + return yaml_emitter_set_emitter_error(emitter, + fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ)) + } +} + +// Expect ALIAS. +func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SCALAR. +func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_select_scalar_style(emitter, event) { + return false + } + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + if !yaml_emitter_process_scalar(emitter) { + return false + } + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SEQUENCE-START. +func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || + yaml_emitter_check_empty_sequence(emitter) { + emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE + } + return true +} + +// Expect MAPPING-START. +func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || + yaml_emitter_check_empty_mapping(emitter) { + emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE + } + return true +} + +// Check if the document content is an empty scalar. +func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { + return false // [Go] Huh? +} + +// Check if the next events represent an empty sequence. +func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT +} + +// Check if the next events represent an empty mapping. +func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT +} + +// Check if the next node can be expressed as a simple key. +func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { + length := 0 + switch emitter.events[emitter.events_head].typ { + case yaml_ALIAS_EVENT: + length += len(emitter.anchor_data.anchor) + case yaml_SCALAR_EVENT: + if emitter.scalar_data.multiline { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + + len(emitter.scalar_data.value) + case yaml_SEQUENCE_START_EVENT: + if !yaml_emitter_check_empty_sequence(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + case yaml_MAPPING_START_EVENT: + if !yaml_emitter_check_empty_mapping(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + default: + return false + } + return length <= 128 +} + +// Determine an acceptable scalar style. +func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 + if no_tag && !event.implicit && !event.quoted_implicit { + return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") + } + + style := event.scalar_style() + if style == yaml_ANY_SCALAR_STYLE { + style = yaml_PLAIN_SCALAR_STYLE + } + if emitter.canonical { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + if emitter.simple_key_context && emitter.scalar_data.multiline { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + + if style == yaml_PLAIN_SCALAR_STYLE { + if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || + emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if no_tag && !event.implicit { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { + if !emitter.scalar_data.single_quoted_allowed { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { + if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + + if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { + emitter.tag_data.handle = []byte{'!'} + } + emitter.scalar_data.style = style + return true +} + +// Write an anchor. +func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { + if emitter.anchor_data.anchor == nil { + return true + } + c := []byte{'&'} + if emitter.anchor_data.alias { + c[0] = '*' + } + if !yaml_emitter_write_indicator(emitter, c, true, false, false) { + return false + } + return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) +} + +// Write a tag. +func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { + if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { + return true + } + if len(emitter.tag_data.handle) > 0 { + if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { + return false + } + if len(emitter.tag_data.suffix) > 0 { + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + } + } else { + // [Go] Allocate these slices elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { + return false + } + } + return true +} + +// Write a scalar. +func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { + switch emitter.scalar_data.style { + case yaml_PLAIN_SCALAR_STYLE: + return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_SINGLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_DOUBLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_LITERAL_SCALAR_STYLE: + return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) + + case yaml_FOLDED_SCALAR_STYLE: + return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) + } + panic("unknown scalar style") +} + +// Check if a %YAML directive is valid. +func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { + if version_directive.major != 1 || version_directive.minor != 1 { + return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") + } + return true +} + +// Check if a %TAG directive is valid. +func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { + handle := tag_directive.handle + prefix := tag_directive.prefix + if len(handle) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") + } + if handle[0] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") + } + if handle[len(handle)-1] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") + } + for i := 1; i < len(handle)-1; i += width(handle[i]) { + if !is_alpha(handle, i) { + return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") + } + } + if len(prefix) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") + } + return true +} + +// Check if an anchor is valid. +func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { + if len(anchor) == 0 { + problem := "anchor value must not be empty" + if alias { + problem = "alias value must not be empty" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + for i := 0; i < len(anchor); i += width(anchor[i]) { + if !is_alpha(anchor, i) { + problem := "anchor value must contain alphanumerical characters only" + if alias { + problem = "alias value must contain alphanumerical characters only" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + } + emitter.anchor_data.anchor = anchor + emitter.anchor_data.alias = alias + return true +} + +// Check if a tag is valid. +func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { + if len(tag) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") + } + for i := 0; i < len(emitter.tag_directives); i++ { + tag_directive := &emitter.tag_directives[i] + if bytes.HasPrefix(tag, tag_directive.prefix) { + emitter.tag_data.handle = tag_directive.handle + emitter.tag_data.suffix = tag[len(tag_directive.prefix):] + return true + } + } + emitter.tag_data.suffix = tag + return true +} + +// Check if a scalar is valid. +func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { + var ( + block_indicators = false + flow_indicators = false + line_breaks = false + special_characters = false + + leading_space = false + leading_break = false + trailing_space = false + trailing_break = false + break_space = false + space_break = false + + preceded_by_whitespace = false + followed_by_whitespace = false + previous_space = false + previous_break = false + ) + + emitter.scalar_data.value = value + + if len(value) == 0 { + emitter.scalar_data.multiline = false + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = false + return true + } + + if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { + block_indicators = true + flow_indicators = true + } + + preceded_by_whitespace = true + for i, w := 0, 0; i < len(value); i += w { + w = width(value[i]) + followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) + + if i == 0 { + switch value[i] { + case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': + flow_indicators = true + block_indicators = true + case '?', ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '-': + if followed_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } else { + switch value[i] { + case ',', '?', '[', ']', '{', '}': + flow_indicators = true + case ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '#': + if preceded_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } + + if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { + special_characters = true + } + if is_space(value, i) { + if i == 0 { + leading_space = true + } + if i+width(value[i]) == len(value) { + trailing_space = true + } + if previous_break { + break_space = true + } + previous_space = true + previous_break = false + } else if is_break(value, i) { + line_breaks = true + if i == 0 { + leading_break = true + } + if i+width(value[i]) == len(value) { + trailing_break = true + } + if previous_space { + space_break = true + } + previous_space = false + previous_break = true + } else { + previous_space = false + previous_break = false + } + + // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. + preceded_by_whitespace = is_blankz(value, i) + } + + emitter.scalar_data.multiline = line_breaks + emitter.scalar_data.flow_plain_allowed = true + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = true + + if leading_space || leading_break || trailing_space || trailing_break { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if trailing_space { + emitter.scalar_data.block_allowed = false + } + if break_space { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + } + if space_break || special_characters { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + emitter.scalar_data.block_allowed = false + } + if line_breaks { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if flow_indicators { + emitter.scalar_data.flow_plain_allowed = false + } + if block_indicators { + emitter.scalar_data.block_plain_allowed = false + } + return true +} + +// Check if the event data is valid. +func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + emitter.anchor_data.anchor = nil + emitter.tag_data.handle = nil + emitter.tag_data.suffix = nil + emitter.scalar_data.value = nil + + switch event.typ { + case yaml_ALIAS_EVENT: + if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { + return false + } + + case yaml_SCALAR_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + if !yaml_emitter_analyze_scalar(emitter, event.value) { + return false + } + + case yaml_SEQUENCE_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + + case yaml_MAPPING_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + } + return true +} + +// Write the BOM character. +func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { + if !flush(emitter) { + return false + } + pos := emitter.buffer_pos + emitter.buffer[pos+0] = '\xEF' + emitter.buffer[pos+1] = '\xBB' + emitter.buffer[pos+2] = '\xBF' + emitter.buffer_pos += 3 + return true +} + +func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { + indent := emitter.indent + if indent < 0 { + indent = 0 + } + if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { + if !put_break(emitter) { + return false + } + } + for emitter.column < indent { + if !put(emitter, ' ') { + return false + } + } + emitter.whitespace = true + emitter.indention = true + return true +} + +func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, indicator) { + return false + } + emitter.whitespace = is_whitespace + emitter.indention = (emitter.indention && is_indention) + emitter.open_ended = false + return true +} + +func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + for i := 0; i < len(value); { + var must_write bool + switch value[i] { + case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': + must_write = true + default: + must_write = is_alpha(value, i) + } + if must_write { + if !write(emitter, value, &i) { + return false + } + } else { + w := width(value[i]) + for k := 0; k < w; k++ { + octet := value[i] + i++ + if !put(emitter, '%') { + return false + } + + c := octet >> 4 + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + + c = octet & 0x0f + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + } + } + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + + emitter.whitespace = false + emitter.indention = false + if emitter.root_context { + emitter.open_ended = true + } + + return true +} + +func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { + return false + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if value[i] == '\'' { + if !put(emitter, '\'') { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + spaces := false + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { + return false + } + + for i := 0; i < len(value); { + if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || + is_bom(value, i) || is_break(value, i) || + value[i] == '"' || value[i] == '\\' { + + octet := value[i] + + var w int + var v rune + switch { + case octet&0x80 == 0x00: + w, v = 1, rune(octet&0x7F) + case octet&0xE0 == 0xC0: + w, v = 2, rune(octet&0x1F) + case octet&0xF0 == 0xE0: + w, v = 3, rune(octet&0x0F) + case octet&0xF8 == 0xF0: + w, v = 4, rune(octet&0x07) + } + for k := 1; k < w; k++ { + octet = value[i+k] + v = (v << 6) + (rune(octet) & 0x3F) + } + i += w + + if !put(emitter, '\\') { + return false + } + + var ok bool + switch v { + case 0x00: + ok = put(emitter, '0') + case 0x07: + ok = put(emitter, 'a') + case 0x08: + ok = put(emitter, 'b') + case 0x09: + ok = put(emitter, 't') + case 0x0A: + ok = put(emitter, 'n') + case 0x0b: + ok = put(emitter, 'v') + case 0x0c: + ok = put(emitter, 'f') + case 0x0d: + ok = put(emitter, 'r') + case 0x1b: + ok = put(emitter, 'e') + case 0x22: + ok = put(emitter, '"') + case 0x5c: + ok = put(emitter, '\\') + case 0x85: + ok = put(emitter, 'N') + case 0xA0: + ok = put(emitter, '_') + case 0x2028: + ok = put(emitter, 'L') + case 0x2029: + ok = put(emitter, 'P') + default: + if v <= 0xFF { + ok = put(emitter, 'x') + w = 2 + } else if v <= 0xFFFF { + ok = put(emitter, 'u') + w = 4 + } else { + ok = put(emitter, 'U') + w = 8 + } + for k := (w - 1) * 4; ok && k >= 0; k -= 4 { + digit := byte((v >> uint(k)) & 0x0F) + if digit < 10 { + ok = put(emitter, digit+'0') + } else { + ok = put(emitter, digit+'A'-10) + } + } + } + if !ok { + return false + } + spaces = false + } else if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { + if !yaml_emitter_write_indent(emitter) { + return false + } + if is_space(value, i+1) { + if !put(emitter, '\\') { + return false + } + } + i += width(value[i]) + } else if !write(emitter, value, &i) { + return false + } + spaces = true + } else { + if !write(emitter, value, &i) { + return false + } + spaces = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { + if is_space(value, 0) || is_break(value, 0) { + indent_hint := []byte{'0' + byte(emitter.best_indent)} + if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { + return false + } + } + + emitter.open_ended = false + + var chomp_hint [1]byte + if len(value) == 0 { + chomp_hint[0] = '-' + } else { + i := len(value) - 1 + for value[i]&0xC0 == 0x80 { + i-- + } + if !is_break(value, i) { + chomp_hint[0] = '-' + } else if i == 0 { + chomp_hint[0] = '+' + emitter.open_ended = true + } else { + i-- + for value[i]&0xC0 == 0x80 { + i-- + } + if is_break(value, i) { + chomp_hint[0] = '+' + emitter.open_ended = true + } + } + } + if chomp_hint[0] != 0 { + if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { + return false + } + } + return true +} + +func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + breaks := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + breaks = false + } + } + + return true +} + +func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + + breaks := true + leading_spaces := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !breaks && !leading_spaces && value[i] == '\n' { + k := 0 + for is_break(value, k) { + k += width(value[k]) + } + if !is_blankz(value, k) { + if !put_break(emitter) { + return false + } + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + leading_spaces = is_blank(value, i) + } + if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + emitter.indention = false + breaks = false + } + } + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/encode.go b/upstream/vendor/go.yaml.in/yaml/v2/encode.go new file mode 100644 index 0000000000..0ee738e11b --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/encode.go @@ -0,0 +1,390 @@ +package yaml + +import ( + "encoding" + "fmt" + "io" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "time" + "unicode/utf8" +) + +// jsonNumber is the interface of the encoding/json.Number datatype. +// Repeating the interface here avoids a dependency on encoding/json, and also +// supports other libraries like jsoniter, which use a similar datatype with +// the same interface. Detecting this interface is useful when dealing with +// structures containing json.Number, which is a string under the hood. The +// encoder should prefer the use of Int64(), Float64() and string(), in that +// order, when encoding this type. +type jsonNumber interface { + Float64() (float64, error) + Int64() (int64, error) + String() string +} + +type encoder struct { + emitter yaml_emitter_t + event yaml_event_t + out []byte + flow bool + // doneInit holds whether the initial stream_start_event has been + // emitted. + doneInit bool +} + +func newEncoder() *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_string(&e.emitter, &e.out) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func newEncoderWithWriter(w io.Writer) *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_writer(&e.emitter, w) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func (e *encoder) init() { + if e.doneInit { + return + } + yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING) + e.emit() + e.doneInit = true +} + +func (e *encoder) finish() { + e.emitter.open_ended = false + yaml_stream_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) destroy() { + yaml_emitter_delete(&e.emitter) +} + +func (e *encoder) emit() { + // This will internally delete the e.event value. + e.must(yaml_emitter_emit(&e.emitter, &e.event)) +} + +func (e *encoder) must(ok bool) { + if !ok { + msg := e.emitter.problem + if msg == "" { + msg = "unknown problem generating YAML content" + } + failf("%s", msg) + } +} + +func (e *encoder) marshalDoc(tag string, in reflect.Value) { + e.init() + yaml_document_start_event_initialize(&e.event, nil, nil, true) + e.emit() + e.marshal(tag, in) + yaml_document_end_event_initialize(&e.event, true) + e.emit() +} + +func (e *encoder) marshal(tag string, in reflect.Value) { + if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() { + e.nilv() + return + } + iface := in.Interface() + switch m := iface.(type) { + case jsonNumber: + integer, err := m.Int64() + if err == nil { + // In this case the json.Number is a valid int64 + in = reflect.ValueOf(integer) + break + } + float, err := m.Float64() + if err == nil { + // In this case the json.Number is a valid float64 + in = reflect.ValueOf(float) + break + } + // fallback case - no number could be obtained + in = reflect.ValueOf(m.String()) + case time.Time, *time.Time: + // Although time.Time implements TextMarshaler, + // we don't want to treat it as a string for YAML + // purposes because YAML has special support for + // timestamps. + case Marshaler: + v, err := m.MarshalYAML() + if err != nil { + fail(err) + } + if v == nil { + e.nilv() + return + } + in = reflect.ValueOf(v) + case encoding.TextMarshaler: + text, err := m.MarshalText() + if err != nil { + fail(err) + } + in = reflect.ValueOf(string(text)) + case nil: + e.nilv() + return + } + switch in.Kind() { + case reflect.Interface: + e.marshal(tag, in.Elem()) + case reflect.Map: + e.mapv(tag, in) + case reflect.Ptr: + if in.Type() == ptrTimeType { + e.timev(tag, in.Elem()) + } else { + e.marshal(tag, in.Elem()) + } + case reflect.Struct: + if in.Type() == timeType { + e.timev(tag, in) + } else { + e.structv(tag, in) + } + case reflect.Slice, reflect.Array: + if in.Type().Elem() == mapItemType { + e.itemsv(tag, in) + } else { + e.slicev(tag, in) + } + case reflect.String: + e.stringv(tag, in) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if in.Type() == durationType { + e.stringv(tag, reflect.ValueOf(iface.(time.Duration).String())) + } else { + e.intv(tag, in) + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + e.uintv(tag, in) + case reflect.Float32, reflect.Float64: + e.floatv(tag, in) + case reflect.Bool: + e.boolv(tag, in) + default: + panic("cannot marshal type: " + in.Type().String()) + } +} + +func (e *encoder) mapv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + keys := keyList(in.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + e.marshal("", k) + e.marshal("", in.MapIndex(k)) + } + }) +} + +func (e *encoder) itemsv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + slice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem) + for _, item := range slice { + e.marshal("", reflect.ValueOf(item.Key)) + e.marshal("", reflect.ValueOf(item.Value)) + } + }) +} + +func (e *encoder) structv(tag string, in reflect.Value) { + sinfo, err := getStructInfo(in.Type()) + if err != nil { + panic(err) + } + e.mappingv(tag, func() { + for _, info := range sinfo.FieldsList { + var value reflect.Value + if info.Inline == nil { + value = in.Field(info.Num) + } else { + value = in.FieldByIndex(info.Inline) + } + if info.OmitEmpty && isZero(value) { + continue + } + e.marshal("", reflect.ValueOf(info.Key)) + e.flow = info.Flow + e.marshal("", value) + } + if sinfo.InlineMap >= 0 { + m := in.Field(sinfo.InlineMap) + if m.Len() > 0 { + e.flow = false + keys := keyList(m.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + if _, found := sinfo.FieldsMap[k.String()]; found { + panic(fmt.Sprintf("Can't have key %q in inlined map; conflicts with struct field", k.String())) + } + e.marshal("", k) + e.flow = false + e.marshal("", m.MapIndex(k)) + } + } + } + }) +} + +func (e *encoder) mappingv(tag string, f func()) { + implicit := tag == "" + style := yaml_BLOCK_MAPPING_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_MAPPING_STYLE + } + yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) + e.emit() + f() + yaml_mapping_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) slicev(tag string, in reflect.Value) { + implicit := tag == "" + style := yaml_BLOCK_SEQUENCE_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_SEQUENCE_STYLE + } + e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + e.emit() + n := in.Len() + for i := 0; i < n; i++ { + e.marshal("", in.Index(i)) + } + e.must(yaml_sequence_end_event_initialize(&e.event)) + e.emit() +} + +// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. +// +// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported +// in YAML 1.2 and by this package, but these should be marshalled quoted for +// the time being for compatibility with other parsers. +func isBase60Float(s string) (result bool) { + // Fast path. + if s == "" { + return false + } + c := s[0] + if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { + return false + } + // Do the full match. + return base60float.MatchString(s) +} + +// From http://yaml.org/type/float.html, except the regular expression there +// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. +var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) + +func (e *encoder) stringv(tag string, in reflect.Value) { + var style yaml_scalar_style_t + s := in.String() + canUsePlain := true + switch { + case !utf8.ValidString(s): + if tag == yaml_BINARY_TAG { + failf("explicitly tagged !!binary data must be base64-encoded") + } + if tag != "" { + failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) + } + // It can't be encoded directly as YAML so use a binary tag + // and encode it as base64. + tag = yaml_BINARY_TAG + s = encodeBase64(s) + case tag == "": + // Check to see if it would resolve to a specific + // tag when encoded unquoted. If it doesn't, + // there's no need to quote it. + rtag, _ := resolve("", s) + canUsePlain = rtag == yaml_STR_TAG && !isBase60Float(s) + } + // Note: it's possible for user code to emit invalid YAML + // if they explicitly specify a tag and a string containing + // text that's incompatible with that tag. + switch { + case strings.Contains(s, "\n"): + style = yaml_LITERAL_SCALAR_STYLE + case canUsePlain: + style = yaml_PLAIN_SCALAR_STYLE + default: + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + e.emitScalar(s, "", tag, style) +} + +func (e *encoder) boolv(tag string, in reflect.Value) { + var s string + if in.Bool() { + s = "true" + } else { + s = "false" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) intv(tag string, in reflect.Value) { + s := strconv.FormatInt(in.Int(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) uintv(tag string, in reflect.Value) { + s := strconv.FormatUint(in.Uint(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) timev(tag string, in reflect.Value) { + t := in.Interface().(time.Time) + s := t.Format(time.RFC3339Nano) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) floatv(tag string, in reflect.Value) { + // Issue #352: When formatting, use the precision of the underlying value + precision := 64 + if in.Kind() == reflect.Float32 { + precision = 32 + } + + s := strconv.FormatFloat(in.Float(), 'g', -1, precision) + switch s { + case "+Inf": + s = ".inf" + case "-Inf": + s = "-.inf" + case "NaN": + s = ".nan" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) nilv() { + e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) { + implicit := tag == "" + e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) + e.emit() +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/parserc.go b/upstream/vendor/go.yaml.in/yaml/v2/parserc.go new file mode 100644 index 0000000000..81d05dfe57 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/parserc.go @@ -0,0 +1,1095 @@ +package yaml + +import ( + "bytes" +) + +// The parser implements the following grammar: +// +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// implicit_document ::= block_node DOCUMENT-END* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// block_node_or_indentless_sequence ::= +// ALIAS +// | properties (block_content | indentless_block_sequence)? +// | block_content +// | indentless_block_sequence +// block_node ::= ALIAS +// | properties block_content? +// | block_content +// flow_node ::= ALIAS +// | properties flow_content? +// | flow_content +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// block_content ::= block_collection | flow_collection | SCALAR +// flow_content ::= flow_collection | SCALAR +// block_collection ::= block_sequence | block_mapping +// flow_collection ::= flow_sequence | flow_mapping +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// block_mapping ::= BLOCK-MAPPING_START +// ((KEY block_node_or_indentless_sequence?)? +// (VALUE block_node_or_indentless_sequence?)?)* +// BLOCK-END +// flow_sequence ::= FLOW-SEQUENCE-START +// (flow_sequence_entry FLOW-ENTRY)* +// flow_sequence_entry? +// FLOW-SEQUENCE-END +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// flow_mapping ::= FLOW-MAPPING-START +// (flow_mapping_entry FLOW-ENTRY)* +// flow_mapping_entry? +// FLOW-MAPPING-END +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + +// Peek the next token in the token queue. +func peek_token(parser *yaml_parser_t) *yaml_token_t { + if parser.token_available || yaml_parser_fetch_more_tokens(parser) { + return &parser.tokens[parser.tokens_head] + } + return nil +} + +// Remove the next token from the queue (must be called after peek_token). +func skip_token(parser *yaml_parser_t) { + parser.token_available = false + parser.tokens_parsed++ + parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN + parser.tokens_head++ +} + +// Get the next event. +func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { + // Erase the event object. + *event = yaml_event_t{} + + // No events after the end of the stream or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { + return true + } + + // Generate the next event. + return yaml_parser_state_machine(parser, event) +} + +// Set parser error. +func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +// State dispatcher. +func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { + //trace("yaml_parser_state_machine", "state:", parser.state.String()) + + switch parser.state { + case yaml_PARSE_STREAM_START_STATE: + return yaml_parser_parse_stream_start(parser, event) + + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, true) + + case yaml_PARSE_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, false) + + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return yaml_parser_parse_document_content(parser, event) + + case yaml_PARSE_DOCUMENT_END_STATE: + return yaml_parser_parse_document_end(parser, event) + + case yaml_PARSE_BLOCK_NODE_STATE: + return yaml_parser_parse_node(parser, event, true, false) + + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return yaml_parser_parse_node(parser, event, true, true) + + case yaml_PARSE_FLOW_NODE_STATE: + return yaml_parser_parse_node(parser, event, false, false) + + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, true) + + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, false) + + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_indentless_sequence_entry(parser, event) + + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, true) + + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, false) + + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return yaml_parser_parse_block_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, true) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, false) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) + + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, true) + + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, true) + + default: + panic("invalid parser state") + } +} + +// Parse the production: +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// ************ +func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_STREAM_START_TOKEN { + return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark) + } + parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + encoding: token.encoding, + } + skip_token(parser) + return true +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// * +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// ************************* +func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { + + token := peek_token(parser) + if token == nil { + return false + } + + // Parse extra document end indicators. + if !implicit { + for token.typ == yaml_DOCUMENT_END_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && + token.typ != yaml_TAG_DIRECTIVE_TOKEN && + token.typ != yaml_DOCUMENT_START_TOKEN && + token.typ != yaml_STREAM_END_TOKEN { + // Parse an implicit document. + if !yaml_parser_process_directives(parser, nil, nil) { + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_BLOCK_NODE_STATE + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + } else if token.typ != yaml_STREAM_END_TOKEN { + // Parse an explicit document. + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + start_mark := token.start_mark + if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { + return false + } + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_DOCUMENT_START_TOKEN { + yaml_parser_set_parser_error(parser, + "did not find expected ", token.start_mark) + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE + end_mark := token.end_mark + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: false, + } + skip_token(parser) + + } else { + // Parse the stream end. + parser.state = yaml_PARSE_END_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + } + + return true +} + +// Parse the productions: +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// *********** +// +func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || + token.typ == yaml_TAG_DIRECTIVE_TOKEN || + token.typ == yaml_DOCUMENT_START_TOKEN || + token.typ == yaml_DOCUMENT_END_TOKEN || + token.typ == yaml_STREAM_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + return yaml_parser_process_empty_scalar(parser, event, + token.start_mark) + } + return yaml_parser_parse_node(parser, event, true, false) +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// ************* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// +func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + start_mark := token.start_mark + end_mark := token.start_mark + + implicit := true + if token.typ == yaml_DOCUMENT_END_TOKEN { + end_mark = token.end_mark + skip_token(parser) + implicit = false + } + + parser.tag_directives = parser.tag_directives[:0] + + parser.state = yaml_PARSE_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + start_mark: start_mark, + end_mark: end_mark, + implicit: implicit, + } + return true +} + +// Parse the productions: +// block_node_or_indentless_sequence ::= +// ALIAS +// ***** +// | properties (block_content | indentless_block_sequence)? +// ********** * +// | block_content | indentless_block_sequence +// * +// block_node ::= ALIAS +// ***** +// | properties block_content? +// ********** * +// | block_content +// * +// flow_node ::= ALIAS +// ***** +// | properties flow_content? +// ********** * +// | flow_content +// * +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// ************************* +// block_content ::= block_collection | flow_collection | SCALAR +// ****** +// flow_content ::= flow_collection | SCALAR +// ****** +func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { + //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_ALIAS_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + *event = yaml_event_t{ + typ: yaml_ALIAS_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + anchor: token.value, + } + skip_token(parser) + return true + } + + start_mark := token.start_mark + end_mark := token.start_mark + + var tag_token bool + var tag_handle, tag_suffix, anchor []byte + var tag_mark yaml_mark_t + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + start_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } else if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + start_mark = token.start_mark + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + var tag []byte + if tag_token { + if len(tag_handle) == 0 { + tag = tag_suffix + tag_suffix = nil + } else { + for i := range parser.tag_directives { + if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { + tag = append([]byte(nil), parser.tag_directives[i].prefix...) + tag = append(tag, tag_suffix...) + break + } + } + if len(tag) == 0 { + yaml_parser_set_parser_error_context(parser, + "while parsing a node", start_mark, + "found undefined tag handle", tag_mark) + return false + } + } + } + + implicit := len(tag) == 0 + if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_SCALAR_TOKEN { + var plain_implicit, quoted_implicit bool + end_mark = token.end_mark + if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { + plain_implicit = true + } else if len(tag) == 0 { + quoted_implicit = true + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + value: token.value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(token.style), + } + skip_token(parser) + return true + } + if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { + // [Go] Some of the events below can be merged as they differ only on style. + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_FLOW_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), + } + return true + } + if len(anchor) > 0 || len(tag) > 0 { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + quoted_implicit: false, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true + } + + context := "while parsing a flow node" + if block { + context = "while parsing a block node" + } + yaml_parser_set_parser_error_context(parser, context, start_mark, + "did not find expected node content", token.start_mark) + return false +} + +// Parse the productions: +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// ******************** *********** * ********* +// +func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } else { + parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } + if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block collection", context_mark, + "did not find expected '-' indicator", token.start_mark) +} + +// Parse the productions: +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// *********** * +func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && + token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? + } + return true +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// ******************* +// ((KEY block_node_or_indentless_sequence?)? +// *** * +// (VALUE block_node_or_indentless_sequence?)?)* +// +// BLOCK-END +// ********* +// +func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_KEY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } else { + parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } else if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block mapping", context_mark, + "did not find expected key", token.start_mark) +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// +// ((KEY block_node_or_indentless_sequence?)? +// +// (VALUE block_node_or_indentless_sequence?)?)* +// ***** * +// BLOCK-END +// +// +func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence ::= FLOW-SEQUENCE-START +// ******************* +// (flow_sequence_entry FLOW-ENTRY)* +// * ********** +// flow_sequence_entry? +// * +// FLOW-SEQUENCE-END +// ***************** +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow sequence", context_mark, + "did not find expected ',' or ']'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + implicit: true, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + skip_token(parser) + return true + } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true +} + +// +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// *** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + mark := token.end_mark + skip_token(parser) + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// ***** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? + } + return true +} + +// Parse the productions: +// flow_mapping ::= FLOW-MAPPING-START +// ****************** +// (flow_mapping_entry FLOW-ENTRY)* +// * ********** +// flow_mapping_entry? +// ****************** +// FLOW-MAPPING-END +// **************** +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * *** * +// +func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow mapping", context_mark, + "did not find expected ',' or '}'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } else { + parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true +} + +// Parse the productions: +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * ***** * +// +func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { + token := peek_token(parser) + if token == nil { + return false + } + if empty { + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Generate an empty scalar event. +func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: mark, + end_mark: mark, + value: nil, // Empty + implicit: true, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true +} + +var default_tag_directives = []yaml_tag_directive_t{ + {[]byte("!"), []byte("!")}, + {[]byte("!!"), []byte("tag:yaml.org,2002:")}, +} + +// Parse directives. +func yaml_parser_process_directives(parser *yaml_parser_t, + version_directive_ref **yaml_version_directive_t, + tag_directives_ref *[]yaml_tag_directive_t) bool { + + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + + token := peek_token(parser) + if token == nil { + return false + } + + for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { + if version_directive != nil { + yaml_parser_set_parser_error(parser, + "found duplicate %YAML directive", token.start_mark) + return false + } + if token.major != 1 || token.minor != 1 { + yaml_parser_set_parser_error(parser, + "found incompatible YAML document", token.start_mark) + return false + } + version_directive = &yaml_version_directive_t{ + major: token.major, + minor: token.minor, + } + } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { + value := yaml_tag_directive_t{ + handle: token.value, + prefix: token.prefix, + } + if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { + return false + } + tag_directives = append(tag_directives, value) + } + + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + + for i := range default_tag_directives { + if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { + return false + } + } + + if version_directive_ref != nil { + *version_directive_ref = version_directive + } + if tag_directives_ref != nil { + *tag_directives_ref = tag_directives + } + return true +} + +// Append a tag directive to the directives stack. +func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { + for i := range parser.tag_directives { + if bytes.Equal(value.handle, parser.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) + } + } + + // [Go] I suspect the copy is unnecessary. This was likely done + // because there was no way to track ownership of the data. + value_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(value_copy.handle, value.handle) + copy(value_copy.prefix, value.prefix) + parser.tag_directives = append(parser.tag_directives, value_copy) + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/readerc.go b/upstream/vendor/go.yaml.in/yaml/v2/readerc.go new file mode 100644 index 0000000000..7c1f5fac3d --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/readerc.go @@ -0,0 +1,412 @@ +package yaml + +import ( + "io" +) + +// Set the reader error and return 0. +func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { + parser.error = yaml_READER_ERROR + parser.problem = problem + parser.problem_offset = offset + parser.problem_value = value + return false +} + +// Byte order marks. +const ( + bom_UTF8 = "\xef\xbb\xbf" + bom_UTF16LE = "\xff\xfe" + bom_UTF16BE = "\xfe\xff" +) + +// Determine the input stream encoding by checking the BOM symbol. If no BOM is +// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. +func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { + // Ensure that we had enough bytes in the raw buffer. + for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { + if !yaml_parser_update_raw_buffer(parser) { + return false + } + } + + // Determine the encoding. + buf := parser.raw_buffer + pos := parser.raw_buffer_pos + avail := len(buf) - pos + if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { + parser.encoding = yaml_UTF16LE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { + parser.encoding = yaml_UTF16BE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { + parser.encoding = yaml_UTF8_ENCODING + parser.raw_buffer_pos += 3 + parser.offset += 3 + } else { + parser.encoding = yaml_UTF8_ENCODING + } + return true +} + +// Update the raw buffer. +func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { + size_read := 0 + + // Return if the raw buffer is full. + if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { + return true + } + + // Return on EOF. + if parser.eof { + return true + } + + // Move the remaining bytes in the raw buffer to the beginning. + if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { + copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) + } + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] + parser.raw_buffer_pos = 0 + + // Call the read handler to fill the buffer. + size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] + if err == io.EOF { + parser.eof = true + } else if err != nil { + return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) + } + return true +} + +// Ensure that the buffer contains at least `length` characters. +// Return true on success, false on failure. +// +// The length is supposed to be significantly less that the buffer size. +func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { + if parser.read_handler == nil { + panic("read handler must be set") + } + + // [Go] This function was changed to guarantee the requested length size at EOF. + // The fact we need to do this is pretty awful, but the description above implies + // for that to be the case, and there are tests + + // If the EOF flag is set and the raw buffer is empty, do nothing. + if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { + // [Go] ACTUALLY! Read the documentation of this function above. + // This is just broken. To return true, we need to have the + // given length in the buffer. Not doing that means every single + // check that calls this function to make sure the buffer has a + // given length is Go) panicking; or C) accessing invalid memory. + //return true + } + + // Return if the buffer contains enough characters. + if parser.unread >= length { + return true + } + + // Determine the input encoding if it is not known yet. + if parser.encoding == yaml_ANY_ENCODING { + if !yaml_parser_determine_encoding(parser) { + return false + } + } + + // Move the unread characters to the beginning of the buffer. + buffer_len := len(parser.buffer) + if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { + copy(parser.buffer, parser.buffer[parser.buffer_pos:]) + buffer_len -= parser.buffer_pos + parser.buffer_pos = 0 + } else if parser.buffer_pos == buffer_len { + buffer_len = 0 + parser.buffer_pos = 0 + } + + // Open the whole buffer for writing, and cut it before returning. + parser.buffer = parser.buffer[:cap(parser.buffer)] + + // Fill the buffer until it has enough characters. + first := true + for parser.unread < length { + + // Fill the raw buffer if necessary. + if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { + if !yaml_parser_update_raw_buffer(parser) { + parser.buffer = parser.buffer[:buffer_len] + return false + } + } + first = false + + // Decode the raw buffer. + inner: + for parser.raw_buffer_pos != len(parser.raw_buffer) { + var value rune + var width int + + raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos + + // Decode the next character. + switch parser.encoding { + case yaml_UTF8_ENCODING: + // Decode a UTF-8 character. Check RFC 3629 + // (http://www.ietf.org/rfc/rfc3629.txt) for more details. + // + // The following table (taken from the RFC) is used for + // decoding. + // + // Char. number range | UTF-8 octet sequence + // (hexadecimal) | (binary) + // --------------------+------------------------------------ + // 0000 0000-0000 007F | 0xxxxxxx + // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx + // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx + // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + // + // Additionally, the characters in the range 0xD800-0xDFFF + // are prohibited as they are reserved for use with UTF-16 + // surrogate pairs. + + // Determine the length of the UTF-8 sequence. + octet := parser.raw_buffer[parser.raw_buffer_pos] + switch { + case octet&0x80 == 0x00: + width = 1 + case octet&0xE0 == 0xC0: + width = 2 + case octet&0xF0 == 0xE0: + width = 3 + case octet&0xF8 == 0xF0: + width = 4 + default: + // The leading octet is invalid. + return yaml_parser_set_reader_error(parser, + "invalid leading UTF-8 octet", + parser.offset, int(octet)) + } + + // Check if the raw buffer contains an incomplete character. + if width > raw_unread { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-8 octet sequence", + parser.offset, -1) + } + break inner + } + + // Decode the leading octet. + switch { + case octet&0x80 == 0x00: + value = rune(octet & 0x7F) + case octet&0xE0 == 0xC0: + value = rune(octet & 0x1F) + case octet&0xF0 == 0xE0: + value = rune(octet & 0x0F) + case octet&0xF8 == 0xF0: + value = rune(octet & 0x07) + default: + value = 0 + } + + // Check and decode the trailing octets. + for k := 1; k < width; k++ { + octet = parser.raw_buffer[parser.raw_buffer_pos+k] + + // Check if the octet is valid. + if (octet & 0xC0) != 0x80 { + return yaml_parser_set_reader_error(parser, + "invalid trailing UTF-8 octet", + parser.offset+k, int(octet)) + } + + // Decode the octet. + value = (value << 6) + rune(octet&0x3F) + } + + // Check the length of the sequence against the value. + switch { + case width == 1: + case width == 2 && value >= 0x80: + case width == 3 && value >= 0x800: + case width == 4 && value >= 0x10000: + default: + return yaml_parser_set_reader_error(parser, + "invalid length of a UTF-8 sequence", + parser.offset, -1) + } + + // Check the range of the value. + if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { + return yaml_parser_set_reader_error(parser, + "invalid Unicode character", + parser.offset, int(value)) + } + + case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: + var low, high int + if parser.encoding == yaml_UTF16LE_ENCODING { + low, high = 0, 1 + } else { + low, high = 1, 0 + } + + // The UTF-16 encoding is not as simple as one might + // naively think. Check RFC 2781 + // (http://www.ietf.org/rfc/rfc2781.txt). + // + // Normally, two subsequent bytes describe a Unicode + // character. However a special technique (called a + // surrogate pair) is used for specifying character + // values larger than 0xFFFF. + // + // A surrogate pair consists of two pseudo-characters: + // high surrogate area (0xD800-0xDBFF) + // low surrogate area (0xDC00-0xDFFF) + // + // The following formulas are used for decoding + // and encoding characters using surrogate pairs: + // + // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) + // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) + // W1 = 110110yyyyyyyyyy + // W2 = 110111xxxxxxxxxx + // + // where U is the character value, W1 is the high surrogate + // area, W2 is the low surrogate area. + + // Check for incomplete UTF-16 character. + if raw_unread < 2 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 character", + parser.offset, -1) + } + break inner + } + + // Get the character. + value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) + + // Check for unexpected low surrogate area. + if value&0xFC00 == 0xDC00 { + return yaml_parser_set_reader_error(parser, + "unexpected low surrogate area", + parser.offset, int(value)) + } + + // Check for a high surrogate area. + if value&0xFC00 == 0xD800 { + width = 4 + + // Check for incomplete surrogate pair. + if raw_unread < 4 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 surrogate pair", + parser.offset, -1) + } + break inner + } + + // Get the next character. + value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) + + // Check for a low surrogate area. + if value2&0xFC00 != 0xDC00 { + return yaml_parser_set_reader_error(parser, + "expected low surrogate area", + parser.offset+2, int(value2)) + } + + // Generate the value of the surrogate pair. + value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) + } else { + width = 2 + } + + default: + panic("impossible") + } + + // Check if the character is in the allowed range: + // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) + // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) + // | [#x10000-#x10FFFF] (32 bit) + switch { + case value == 0x09: + case value == 0x0A: + case value == 0x0D: + case value >= 0x20 && value <= 0x7E: + case value == 0x85: + case value >= 0xA0 && value <= 0xD7FF: + case value >= 0xE000 && value <= 0xFFFD: + case value >= 0x10000 && value <= 0x10FFFF: + default: + return yaml_parser_set_reader_error(parser, + "control characters are not allowed", + parser.offset, int(value)) + } + + // Move the raw pointers. + parser.raw_buffer_pos += width + parser.offset += width + + // Finally put the character into the buffer. + if value <= 0x7F { + // 0000 0000-0000 007F . 0xxxxxxx + parser.buffer[buffer_len+0] = byte(value) + buffer_len += 1 + } else if value <= 0x7FF { + // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) + parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) + buffer_len += 2 + } else if value <= 0xFFFF { + // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) + buffer_len += 3 + } else { + // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) + buffer_len += 4 + } + + parser.unread++ + } + + // On EOF, put NUL into the buffer and return. + if parser.eof { + parser.buffer[buffer_len] = 0 + buffer_len++ + parser.unread++ + break + } + } + // [Go] Read the documentation of this function above. To return true, + // we need to have the given length in the buffer. Not doing that means + // every single check that calls this function to make sure the buffer + // has a given length is Go) panicking; or C) accessing invalid memory. + // This happens here due to the EOF above breaking early. + for buffer_len < length { + parser.buffer[buffer_len] = 0 + buffer_len++ + } + parser.buffer = parser.buffer[:buffer_len] + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/resolve.go b/upstream/vendor/go.yaml.in/yaml/v2/resolve.go new file mode 100644 index 0000000000..4120e0c916 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/resolve.go @@ -0,0 +1,258 @@ +package yaml + +import ( + "encoding/base64" + "math" + "regexp" + "strconv" + "strings" + "time" +) + +type resolveMapItem struct { + value interface{} + tag string +} + +var resolveTable = make([]byte, 256) +var resolveMap = make(map[string]resolveMapItem) + +func init() { + t := resolveTable + t[int('+')] = 'S' // Sign + t[int('-')] = 'S' + for _, c := range "0123456789" { + t[int(c)] = 'D' // Digit + } + for _, c := range "yYnNtTfFoO~" { + t[int(c)] = 'M' // In map + } + t[int('.')] = '.' // Float (potentially in map) + + var resolveMapList = []struct { + v interface{} + tag string + l []string + }{ + {true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}}, + {true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}}, + {true, yaml_BOOL_TAG, []string{"on", "On", "ON"}}, + {false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}}, + {false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}}, + {false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}}, + {nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}}, + {math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}}, + {math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}}, + {"<<", yaml_MERGE_TAG, []string{"<<"}}, + } + + m := resolveMap + for _, item := range resolveMapList { + for _, s := range item.l { + m[s] = resolveMapItem{item.v, item.tag} + } + } +} + +const longTagPrefix = "tag:yaml.org,2002:" + +func shortTag(tag string) string { + // TODO This can easily be made faster and produce less garbage. + if strings.HasPrefix(tag, longTagPrefix) { + return "!!" + tag[len(longTagPrefix):] + } + return tag +} + +func longTag(tag string) string { + if strings.HasPrefix(tag, "!!") { + return longTagPrefix + tag[2:] + } + return tag +} + +func resolvableTag(tag string) bool { + switch tag { + case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG, yaml_TIMESTAMP_TAG: + return true + } + return false +} + +var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`) + +func resolve(tag string, in string) (rtag string, out interface{}) { + if !resolvableTag(tag) { + return tag, in + } + + defer func() { + switch tag { + case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG: + return + case yaml_FLOAT_TAG: + if rtag == yaml_INT_TAG { + switch v := out.(type) { + case int64: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + case int: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + } + } + } + failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) + }() + + // Any data is accepted as a !!str or !!binary. + // Otherwise, the prefix is enough of a hint about what it might be. + hint := byte('N') + if in != "" { + hint = resolveTable[in[0]] + } + if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG { + // Handle things we can lookup in a map. + if item, ok := resolveMap[in]; ok { + return item.tag, item.value + } + + // Base 60 floats are a bad idea, were dropped in YAML 1.2, and + // are purposefully unsupported here. They're still quoted on + // the way out for compatibility with other parser, though. + + switch hint { + case 'M': + // We've already checked the map above. + + case '.': + // Not in the map, so maybe a normal float. + floatv, err := strconv.ParseFloat(in, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + + case 'D', 'S': + // Int, float, or timestamp. + // Only try values as a timestamp if the value is unquoted or there's an explicit + // !!timestamp tag. + if tag == "" || tag == yaml_TIMESTAMP_TAG { + t, ok := parseTimestamp(in) + if ok { + return yaml_TIMESTAMP_TAG, t + } + } + + plain := strings.Replace(in, "_", "", -1) + intv, err := strconv.ParseInt(plain, 0, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain, 0, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + if yamlStyleFloat.MatchString(plain) { + floatv, err := strconv.ParseFloat(plain, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + } + if strings.HasPrefix(plain, "0b") { + intv, err := strconv.ParseInt(plain[2:], 2, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain[2:], 2, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + } else if strings.HasPrefix(plain, "-0b") { + intv, err := strconv.ParseInt("-" + plain[3:], 2, 64) + if err == nil { + if true || intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + } + default: + panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")") + } + } + return yaml_STR_TAG, in +} + +// encodeBase64 encodes s as base64 that is broken up into multiple lines +// as appropriate for the resulting length. +func encodeBase64(s string) string { + const lineLen = 70 + encLen := base64.StdEncoding.EncodedLen(len(s)) + lines := encLen/lineLen + 1 + buf := make([]byte, encLen*2+lines) + in := buf[0:encLen] + out := buf[encLen:] + base64.StdEncoding.Encode(in, []byte(s)) + k := 0 + for i := 0; i < len(in); i += lineLen { + j := i + lineLen + if j > len(in) { + j = len(in) + } + k += copy(out[k:], in[i:j]) + if lines > 1 { + out[k] = '\n' + k++ + } + } + return string(out[:k]) +} + +// This is a subset of the formats allowed by the regular expression +// defined at http://yaml.org/type/timestamp.html. +var allowedTimestampFormats = []string{ + "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields. + "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t". + "2006-1-2 15:4:5.999999999", // space separated with no time zone + "2006-1-2", // date only + // Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5" + // from the set of examples. +} + +// parseTimestamp parses s as a timestamp string and +// returns the timestamp and reports whether it succeeded. +// Timestamp formats are defined at http://yaml.org/type/timestamp.html +func parseTimestamp(s string) (time.Time, bool) { + // TODO write code to check all the formats supported by + // http://yaml.org/type/timestamp.html instead of using time.Parse. + + // Quick check: all date formats start with YYYY-. + i := 0 + for ; i < len(s); i++ { + if c := s[i]; c < '0' || c > '9' { + break + } + } + if i != 4 || i == len(s) || s[i] != '-' { + return time.Time{}, false + } + for _, format := range allowedTimestampFormats { + if t, err := time.Parse(format, s); err == nil { + return t, true + } + } + return time.Time{}, false +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/scannerc.go b/upstream/vendor/go.yaml.in/yaml/v2/scannerc.go new file mode 100644 index 0000000000..0b9bb6030a --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/scannerc.go @@ -0,0 +1,2711 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Introduction +// ************ +// +// The following notes assume that you are familiar with the YAML specification +// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in +// some cases we are less restrictive that it requires. +// +// The process of transforming a YAML stream into a sequence of events is +// divided on two steps: Scanning and Parsing. +// +// The Scanner transforms the input stream into a sequence of tokens, while the +// parser transform the sequence of tokens produced by the Scanner into a +// sequence of parsing events. +// +// The Scanner is rather clever and complicated. The Parser, on the contrary, +// is a straightforward implementation of a recursive-descendant parser (or, +// LL(1) parser, as it is usually called). +// +// Actually there are two issues of Scanning that might be called "clever", the +// rest is quite straightforward. The issues are "block collection start" and +// "simple keys". Both issues are explained below in details. +// +// Here the Scanning step is explained and implemented. We start with the list +// of all the tokens produced by the Scanner together with short descriptions. +// +// Now, tokens: +// +// STREAM-START(encoding) # The stream start. +// STREAM-END # The stream end. +// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. +// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. +// DOCUMENT-START # '---' +// DOCUMENT-END # '...' +// BLOCK-SEQUENCE-START # Indentation increase denoting a block +// BLOCK-MAPPING-START # sequence or a block mapping. +// BLOCK-END # Indentation decrease. +// FLOW-SEQUENCE-START # '[' +// FLOW-SEQUENCE-END # ']' +// BLOCK-SEQUENCE-START # '{' +// BLOCK-SEQUENCE-END # '}' +// BLOCK-ENTRY # '-' +// FLOW-ENTRY # ',' +// KEY # '?' or nothing (simple keys). +// VALUE # ':' +// ALIAS(anchor) # '*anchor' +// ANCHOR(anchor) # '&anchor' +// TAG(handle,suffix) # '!handle!suffix' +// SCALAR(value,style) # A scalar. +// +// The following two tokens are "virtual" tokens denoting the beginning and the +// end of the stream: +// +// STREAM-START(encoding) +// STREAM-END +// +// We pass the information about the input stream encoding with the +// STREAM-START token. +// +// The next two tokens are responsible for tags: +// +// VERSION-DIRECTIVE(major,minor) +// TAG-DIRECTIVE(handle,prefix) +// +// Example: +// +// %YAML 1.1 +// %TAG ! !foo +// %TAG !yaml! tag:yaml.org,2002: +// --- +// +// The correspoding sequence of tokens: +// +// STREAM-START(utf-8) +// VERSION-DIRECTIVE(1,1) +// TAG-DIRECTIVE("!","!foo") +// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") +// DOCUMENT-START +// STREAM-END +// +// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole +// line. +// +// The document start and end indicators are represented by: +// +// DOCUMENT-START +// DOCUMENT-END +// +// Note that if a YAML stream contains an implicit document (without '---' +// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be +// produced. +// +// In the following examples, we present whole documents together with the +// produced tokens. +// +// 1. An implicit document: +// +// 'a scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// STREAM-END +// +// 2. An explicit document: +// +// --- +// 'a scalar' +// ... +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// SCALAR("a scalar",single-quoted) +// DOCUMENT-END +// STREAM-END +// +// 3. Several documents in a stream: +// +// 'a scalar' +// --- +// 'another scalar' +// --- +// 'yet another scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// DOCUMENT-START +// SCALAR("another scalar",single-quoted) +// DOCUMENT-START +// SCALAR("yet another scalar",single-quoted) +// STREAM-END +// +// We have already introduced the SCALAR token above. The following tokens are +// used to describe aliases, anchors, tag, and scalars: +// +// ALIAS(anchor) +// ANCHOR(anchor) +// TAG(handle,suffix) +// SCALAR(value,style) +// +// The following series of examples illustrate the usage of these tokens: +// +// 1. A recursive sequence: +// +// &A [ *A ] +// +// Tokens: +// +// STREAM-START(utf-8) +// ANCHOR("A") +// FLOW-SEQUENCE-START +// ALIAS("A") +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A tagged scalar: +// +// !!float "3.14" # A good approximation. +// +// Tokens: +// +// STREAM-START(utf-8) +// TAG("!!","float") +// SCALAR("3.14",double-quoted) +// STREAM-END +// +// 3. Various scalar styles: +// +// --- # Implicit empty plain scalars do not produce tokens. +// --- a plain scalar +// --- 'a single-quoted scalar' +// --- "a double-quoted scalar" +// --- |- +// a literal scalar +// --- >- +// a folded +// scalar +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// DOCUMENT-START +// SCALAR("a plain scalar",plain) +// DOCUMENT-START +// SCALAR("a single-quoted scalar",single-quoted) +// DOCUMENT-START +// SCALAR("a double-quoted scalar",double-quoted) +// DOCUMENT-START +// SCALAR("a literal scalar",literal) +// DOCUMENT-START +// SCALAR("a folded scalar",folded) +// STREAM-END +// +// Now it's time to review collection-related tokens. We will start with +// flow collections: +// +// FLOW-SEQUENCE-START +// FLOW-SEQUENCE-END +// FLOW-MAPPING-START +// FLOW-MAPPING-END +// FLOW-ENTRY +// KEY +// VALUE +// +// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and +// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' +// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the +// indicators '?' and ':', which are used for denoting mapping keys and values, +// are represented by the KEY and VALUE tokens. +// +// The following examples show flow collections: +// +// 1. A flow sequence: +// +// [item 1, item 2, item 3] +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-SEQUENCE-START +// SCALAR("item 1",plain) +// FLOW-ENTRY +// SCALAR("item 2",plain) +// FLOW-ENTRY +// SCALAR("item 3",plain) +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A flow mapping: +// +// { +// a simple key: a value, # Note that the KEY token is produced. +// ? a complex key: another value, +// } +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// FLOW-ENTRY +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// FLOW-ENTRY +// FLOW-MAPPING-END +// STREAM-END +// +// A simple key is a key which is not denoted by the '?' indicator. Note that +// the Scanner still produce the KEY token whenever it encounters a simple key. +// +// For scanning block collections, the following tokens are used (note that we +// repeat KEY and VALUE here): +// +// BLOCK-SEQUENCE-START +// BLOCK-MAPPING-START +// BLOCK-END +// BLOCK-ENTRY +// KEY +// VALUE +// +// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation +// increase that precedes a block collection (cf. the INDENT token in Python). +// The token BLOCK-END denote indentation decrease that ends a block collection +// (cf. the DEDENT token in Python). However YAML has some syntax pecularities +// that makes detections of these tokens more complex. +// +// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators +// '-', '?', and ':' correspondingly. +// +// The following examples show how the tokens BLOCK-SEQUENCE-START, +// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: +// +// 1. Block sequences: +// +// - item 1 +// - item 2 +// - +// - item 3.1 +// - item 3.2 +// - +// key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 3.1",plain) +// BLOCK-ENTRY +// SCALAR("item 3.2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Block mappings: +// +// a simple key: a value # The KEY token is produced here. +// ? a complex key +// : another value +// a mapping: +// key 1: value 1 +// key 2: value 2 +// a sequence: +// - item 1 +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// KEY +// SCALAR("a mapping",plain) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML does not always require to start a new block collection from a new +// line. If the current line contains only '-', '?', and ':' indicators, a new +// block collection may start at the current line. The following examples +// illustrate this case: +// +// 1. Collections in a sequence: +// +// - - item 1 +// - item 2 +// - key 1: value 1 +// key 2: value 2 +// - ? complex key +// : complex value +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("complex key") +// VALUE +// SCALAR("complex value") +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Collections in a mapping: +// +// ? a sequence +// : - item 1 +// - item 2 +// ? a mapping +// : key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// KEY +// SCALAR("a mapping",plain) +// VALUE +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML also permits non-indented sequences if they are included into a block +// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: +// +// key: +// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key",plain) +// VALUE +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// + +// Ensure that the buffer contains the required number of characters. +// Return true on success, false on failure (reader error or memory error). +func cache(parser *yaml_parser_t, length int) bool { + // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) + return parser.unread >= length || yaml_parser_update_buffer(parser, length) +} + +// Advance the buffer pointer. +func skip(parser *yaml_parser_t) { + parser.mark.index++ + parser.mark.column++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) +} + +func skip_line(parser *yaml_parser_t) { + if is_crlf(parser.buffer, parser.buffer_pos) { + parser.mark.index += 2 + parser.mark.column = 0 + parser.mark.line++ + parser.unread -= 2 + parser.buffer_pos += 2 + } else if is_break(parser.buffer, parser.buffer_pos) { + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) + } +} + +// Copy a character to a string buffer and advance pointers. +func read(parser *yaml_parser_t, s []byte) []byte { + w := width(parser.buffer[parser.buffer_pos]) + if w == 0 { + panic("invalid character sequence") + } + if len(s) == 0 { + s = make([]byte, 0, 32) + } + if w == 1 && len(s)+w <= cap(s) { + s = s[:len(s)+1] + s[len(s)-1] = parser.buffer[parser.buffer_pos] + parser.buffer_pos++ + } else { + s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) + parser.buffer_pos += w + } + parser.mark.index++ + parser.mark.column++ + parser.unread-- + return s +} + +// Copy a line break character to a string buffer and advance pointers. +func read_line(parser *yaml_parser_t, s []byte) []byte { + buf := parser.buffer + pos := parser.buffer_pos + switch { + case buf[pos] == '\r' && buf[pos+1] == '\n': + // CR LF . LF + s = append(s, '\n') + parser.buffer_pos += 2 + parser.mark.index++ + parser.unread-- + case buf[pos] == '\r' || buf[pos] == '\n': + // CR|LF . LF + s = append(s, '\n') + parser.buffer_pos += 1 + case buf[pos] == '\xC2' && buf[pos+1] == '\x85': + // NEL . LF + s = append(s, '\n') + parser.buffer_pos += 2 + case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): + // LS|PS . LS|PS + s = append(s, buf[parser.buffer_pos:pos+3]...) + parser.buffer_pos += 3 + default: + return s + } + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + return s +} + +// Get the next token. +func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { + // Erase the token object. + *token = yaml_token_t{} // [Go] Is this necessary? + + // No tokens after STREAM-END or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR { + return true + } + + // Ensure that the tokens queue contains enough tokens. + if !parser.token_available { + if !yaml_parser_fetch_more_tokens(parser) { + return false + } + } + + // Fetch the next token from the queue. + *token = parser.tokens[parser.tokens_head] + parser.tokens_head++ + parser.tokens_parsed++ + parser.token_available = false + + if token.typ == yaml_STREAM_END_TOKEN { + parser.stream_end_produced = true + } + return true +} + +// Set the scanner error and return false. +func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { + parser.error = yaml_SCANNER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = parser.mark + return false +} + +func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { + context := "while parsing a tag" + if directive { + context = "while parsing a %TAG directive" + } + return yaml_parser_set_scanner_error(parser, context, context_mark, problem) +} + +func trace(args ...interface{}) func() { + pargs := append([]interface{}{"+++"}, args...) + fmt.Println(pargs...) + pargs = append([]interface{}{"---"}, args...) + return func() { fmt.Println(pargs...) } +} + +// Ensure that the tokens queue contains at least one token which can be +// returned to the Parser. +func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { + // While we need more tokens to fetch, do it. + for { + if parser.tokens_head != len(parser.tokens) { + // If queue is non-empty, check if any potential simple key may + // occupy the head position. + head_tok_idx, ok := parser.simple_keys_by_tok[parser.tokens_parsed] + if !ok { + break + } else if valid, ok := yaml_simple_key_is_valid(parser, &parser.simple_keys[head_tok_idx]); !ok { + return false + } else if !valid { + break + } + } + // Fetch the next token. + if !yaml_parser_fetch_next_token(parser) { + return false + } + } + + parser.token_available = true + return true +} + +// The dispatcher for token fetchers. +func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { + // Ensure that the buffer is initialized. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we just started scanning. Fetch STREAM-START then. + if !parser.stream_start_produced { + return yaml_parser_fetch_stream_start(parser) + } + + // Eat whitespaces and comments until we reach the next token. + if !yaml_parser_scan_to_next_token(parser) { + return false + } + + // Check the indentation level against the current column. + if !yaml_parser_unroll_indent(parser, parser.mark.column) { + return false + } + + // Ensure that the buffer contains at least 4 characters. 4 is the length + // of the longest indicators ('--- ' and '... '). + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + // Is it the end of the stream? + if is_z(parser.buffer, parser.buffer_pos) { + return yaml_parser_fetch_stream_end(parser) + } + + // Is it a directive? + if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { + return yaml_parser_fetch_directive(parser) + } + + buf := parser.buffer + pos := parser.buffer_pos + + // Is it the document start indicator? + if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) + } + + // Is it the document end indicator? + if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) + } + + // Is it the flow sequence start indicator? + if buf[pos] == '[' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) + } + + // Is it the flow mapping start indicator? + if parser.buffer[parser.buffer_pos] == '{' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) + } + + // Is it the flow sequence end indicator? + if parser.buffer[parser.buffer_pos] == ']' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_SEQUENCE_END_TOKEN) + } + + // Is it the flow mapping end indicator? + if parser.buffer[parser.buffer_pos] == '}' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_MAPPING_END_TOKEN) + } + + // Is it the flow entry indicator? + if parser.buffer[parser.buffer_pos] == ',' { + return yaml_parser_fetch_flow_entry(parser) + } + + // Is it the block entry indicator? + if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { + return yaml_parser_fetch_block_entry(parser) + } + + // Is it the key indicator? + if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_key(parser) + } + + // Is it the value indicator? + if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_value(parser) + } + + // Is it an alias? + if parser.buffer[parser.buffer_pos] == '*' { + return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) + } + + // Is it an anchor? + if parser.buffer[parser.buffer_pos] == '&' { + return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) + } + + // Is it a tag? + if parser.buffer[parser.buffer_pos] == '!' { + return yaml_parser_fetch_tag(parser) + } + + // Is it a literal scalar? + if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, true) + } + + // Is it a folded scalar? + if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, false) + } + + // Is it a single-quoted scalar? + if parser.buffer[parser.buffer_pos] == '\'' { + return yaml_parser_fetch_flow_scalar(parser, true) + } + + // Is it a double-quoted scalar? + if parser.buffer[parser.buffer_pos] == '"' { + return yaml_parser_fetch_flow_scalar(parser, false) + } + + // Is it a plain scalar? + // + // A plain scalar may start with any non-blank characters except + // + // '-', '?', ':', ',', '[', ']', '{', '}', + // '#', '&', '*', '!', '|', '>', '\'', '\"', + // '%', '@', '`'. + // + // In the block context (and, for the '-' indicator, in the flow context + // too), it may also start with the characters + // + // '-', '?', ':' + // + // if it is followed by a non-space character. + // + // The last rule is more restrictive than the specification requires. + // [Go] Make this logic more reasonable. + //switch parser.buffer[parser.buffer_pos] { + //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': + //} + if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || + parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || + parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || + (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level == 0 && + (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && + !is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_plain_scalar(parser) + } + + // If we don't determine the token type so far, it is an error. + return yaml_parser_set_scanner_error(parser, + "while scanning for the next token", parser.mark, + "found character that cannot start any token") +} + +func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) { + if !simple_key.possible { + return false, true + } + + // The 1.2 specification says: + // + // "If the ? indicator is omitted, parsing needs to see past the + // implicit key to recognize it as such. To limit the amount of + // lookahead required, the “:” indicator must appear at most 1024 + // Unicode characters beyond the start of the key. In addition, the key + // is restricted to a single line." + // + if simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index { + // Check if the potential simple key to be removed is required. + if simple_key.required { + return false, yaml_parser_set_scanner_error(parser, + "while scanning a simple key", simple_key.mark, + "could not find expected ':'") + } + simple_key.possible = false + return false, true + } + return true, true +} + +// Check if a simple key may start at the current position and add it if +// needed. +func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { + // A simple key is required at the current position if the scanner is in + // the block context and the current column coincides with the indentation + // level. + + required := parser.flow_level == 0 && parser.indent == parser.mark.column + + // + // If the current position may start a simple key, save it. + // + if parser.simple_key_allowed { + simple_key := yaml_simple_key_t{ + possible: true, + required: required, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, + } + + if !yaml_parser_remove_simple_key(parser) { + return false + } + parser.simple_keys[len(parser.simple_keys)-1] = simple_key + parser.simple_keys_by_tok[simple_key.token_number] = len(parser.simple_keys) - 1 + } + return true +} + +// Remove a potential simple key at the current flow level. +func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { + i := len(parser.simple_keys) - 1 + if parser.simple_keys[i].possible { + // If the key is required, it is an error. + if parser.simple_keys[i].required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", parser.simple_keys[i].mark, + "could not find expected ':'") + } + // Remove the key from the stack. + parser.simple_keys[i].possible = false + delete(parser.simple_keys_by_tok, parser.simple_keys[i].token_number) + } + return true +} + +// max_flow_level limits the flow_level +const max_flow_level = 10000 + +// Increase the flow level and resize the simple key list if needed. +func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { + // Reset the simple key on the next level. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{ + possible: false, + required: false, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, + }) + + // Increase the flow level. + parser.flow_level++ + if parser.flow_level > max_flow_level { + return yaml_parser_set_scanner_error(parser, + "while increasing flow level", parser.simple_keys[len(parser.simple_keys)-1].mark, + fmt.Sprintf("exceeded max depth of %d", max_flow_level)) + } + return true +} + +// Decrease the flow level. +func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { + if parser.flow_level > 0 { + parser.flow_level-- + last := len(parser.simple_keys) - 1 + delete(parser.simple_keys_by_tok, parser.simple_keys[last].token_number) + parser.simple_keys = parser.simple_keys[:last] + } + return true +} + +// max_indents limits the indents stack size +const max_indents = 10000 + +// Push the current indentation level to the stack and set the new level +// the current column is greater than the indentation level. In this case, +// append or insert the specified token into the token queue. +func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + if parser.indent < column { + // Push the current indentation level to the stack and set the new + // indentation level. + parser.indents = append(parser.indents, parser.indent) + parser.indent = column + if len(parser.indents) > max_indents { + return yaml_parser_set_scanner_error(parser, + "while increasing indent level", parser.simple_keys[len(parser.simple_keys)-1].mark, + fmt.Sprintf("exceeded max depth of %d", max_indents)) + } + + // Create a token and insert it into the queue. + token := yaml_token_t{ + typ: typ, + start_mark: mark, + end_mark: mark, + } + if number > -1 { + number -= parser.tokens_parsed + } + yaml_insert_token(parser, number, &token) + } + return true +} + +// Pop indentation levels from the indents stack until the current level +// becomes less or equal to the column. For each indentation level, append +// the BLOCK-END token. +func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + // Loop through the indentation levels in the stack. + for parser.indent > column { + // Create a token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + + // Pop the indentation level. + parser.indent = parser.indents[len(parser.indents)-1] + parser.indents = parser.indents[:len(parser.indents)-1] + } + return true +} + +// Initialize the scanner and produce the STREAM-START token. +func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { + + // Set the initial indentation. + parser.indent = -1 + + // Initialize the simple key stack. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + parser.simple_keys_by_tok = make(map[int]int) + + // A simple key is allowed at the beginning of the stream. + parser.simple_key_allowed = true + + // We have started. + parser.stream_start_produced = true + + // Create the STREAM-START token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_START_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + encoding: parser.encoding, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the STREAM-END token and shut down the scanner. +func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { + + // Force new line. + if parser.mark.column != 0 { + parser.mark.column = 0 + parser.mark.line++ + } + + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the STREAM-END token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. +func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. + token := yaml_token_t{} + if !yaml_parser_scan_directive(parser, &token) { + return false + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the DOCUMENT-START or DOCUMENT-END token. +func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Consume the token. + start_mark := parser.mark + + skip(parser) + skip(parser) + skip(parser) + + end_mark := parser.mark + + // Create the DOCUMENT-START or DOCUMENT-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. +func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // The indicators '[' and '{' may start a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // Increase the flow level. + if !yaml_parser_increase_flow_level(parser) { + return false + } + + // A simple key may follow the indicators '[' and '{'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. +func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset any potential simple key on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Decrease the flow level. + if !yaml_parser_decrease_flow_level(parser) { + return false + } + + // No simple keys after the indicators ']' and '}'. + parser.simple_key_allowed = false + + // Consume the token. + + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-ENTRY token. +func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after ','. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_FLOW_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the BLOCK-ENTRY token. +func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { + // Check if the scanner is in the block context. + if parser.flow_level == 0 { + // Check if we are allowed to start a new entry. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "block sequence entries are not allowed in this context") + } + // Add the BLOCK-SEQUENCE-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { + return false + } + } else { + // It is an error for the '-' indicator to occur in the flow context, + // but we let the Parser detect and report about it because the Parser + // is able to point to the context. + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '-'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the BLOCK-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the KEY token. +func yaml_parser_fetch_key(parser *yaml_parser_t) bool { + + // In the block context, additional checks are required. + if parser.flow_level == 0 { + // Check if we are allowed to start a new key (not nessesary simple). + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping keys are not allowed in this context") + } + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '?' in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the KEY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the VALUE token. +func yaml_parser_fetch_value(parser *yaml_parser_t) bool { + + simple_key := &parser.simple_keys[len(parser.simple_keys)-1] + + // Have we found a simple key? + if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok { + return false + + } else if valid { + + // Create the KEY token and insert it into the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: simple_key.mark, + end_mark: simple_key.mark, + } + yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) + + // In the block context, we may need to add the BLOCK-MAPPING-START token. + if !yaml_parser_roll_indent(parser, simple_key.mark.column, + simple_key.token_number, + yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { + return false + } + + // Remove the simple key. + simple_key.possible = false + delete(parser.simple_keys_by_tok, simple_key.token_number) + + // A simple key cannot follow another simple key. + parser.simple_key_allowed = false + + } else { + // The ':' indicator follows a complex key. + + // In the block context, extra checks are required. + if parser.flow_level == 0 { + + // Check if we are allowed to start a complex value. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping values are not allowed in this context") + } + + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Simple keys after ':' are allowed in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + } + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the VALUE token and append it to the queue. + token := yaml_token_t{ + typ: yaml_VALUE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the ALIAS or ANCHOR token. +func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // An anchor or an alias could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow an anchor or an alias. + parser.simple_key_allowed = false + + // Create the ALIAS or ANCHOR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_anchor(parser, &token, typ) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the TAG token. +func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { + // A tag could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a tag. + parser.simple_key_allowed = false + + // Create the TAG token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_tag(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. +func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { + // Remove any potential simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // A simple key may follow a block scalar. + parser.simple_key_allowed = true + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_block_scalar(parser, &token, literal) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. +func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_flow_scalar(parser, &token, single) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,plain) token. +func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_plain_scalar(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Eat whitespaces and comments until the next token is found. +func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { + + // Until the next token is not found. + for { + // Allow the BOM mark to start a line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { + skip(parser) + } + + // Eat whitespaces. + // Tabs are allowed: + // - in the flow context + // - in the block context, but not at the beginning of the line or + // after '-', '?', or ':' (complex value). + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Eat a comment until a line break. + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // If it is a line break, eat it. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + + // In the block context, a new line may start a simple key. + if parser.flow_level == 0 { + parser.simple_key_allowed = true + } + } else { + break // We have found a token. + } + } + + return true +} + +// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { + // Eat '%'. + start_mark := parser.mark + skip(parser) + + // Scan the directive name. + var name []byte + if !yaml_parser_scan_directive_name(parser, start_mark, &name) { + return false + } + + // Is it a YAML directive? + if bytes.Equal(name, []byte("YAML")) { + // Scan the VERSION directive value. + var major, minor int8 + if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { + return false + } + end_mark := parser.mark + + // Create a VERSION-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_VERSION_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + major: major, + minor: minor, + } + + // Is it a TAG directive? + } else if bytes.Equal(name, []byte("TAG")) { + // Scan the TAG directive value. + var handle, prefix []byte + if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { + return false + } + end_mark := parser.mark + + // Create a TAG-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_TAG_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + prefix: prefix, + } + + // Unknown directive. + } else { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unknown directive name") + return false + } + + // Eat the rest of the line including any comments. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + return true +} + +// Scan the directive name. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^ +// +func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { + // Consume the directive name. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + var s []byte + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the name is empty. + if len(s) == 0 { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "could not find expected directive name") + return false + } + + // Check for an blank character after the name. + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unexpected non-alphabetical character") + return false + } + *name = s + return true +} + +// Scan the value of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^ +func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the major version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { + return false + } + + // Eat '.'. + if parser.buffer[parser.buffer_pos] != '.' { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected digit or '.' character") + } + + skip(parser) + + // Consume the minor version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { + return false + } + return true +} + +const max_number_length = 2 + +// Scan the version number of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^ +// %YAML 1.1 # a comment \n +// ^ +func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { + + // Repeat while the next character is digit. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var value, length int8 + for is_digit(parser.buffer, parser.buffer_pos) { + // Check if the number is too long. + length++ + if length > max_number_length { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "found extremely long version number") + } + value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the number was present. + if length == 0 { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected version number") + } + *number = value + return true +} + +// Scan the value of a TAG-DIRECTIVE token. +// +// Scope: +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { + var handle_value, prefix_value []byte + + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a handle. + if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { + return false + } + + // Expect a whitespace. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blank(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace") + return false + } + + // Eat whitespaces. + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a prefix. + if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { + return false + } + + // Expect a whitespace or line break. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace or line break") + return false + } + + *handle = handle_value + *prefix = prefix_value + return true +} + +func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { + var s []byte + + // Eat the indicator character. + start_mark := parser.mark + skip(parser) + + // Consume the value. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + end_mark := parser.mark + + /* + * Check if length of the anchor is greater than 0 and it is followed by + * a whitespace character or one of the indicators: + * + * '?', ':', ',', ']', '}', '%', '@', '`'. + */ + + if len(s) == 0 || + !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || + parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '`') { + context := "while scanning an alias" + if typ == yaml_ANCHOR_TOKEN { + context = "while scanning an anchor" + } + yaml_parser_set_scanner_error(parser, context, start_mark, + "did not find expected alphabetic or numeric character") + return false + } + + // Create a token. + *token = yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + value: s, + } + + return true +} + +/* + * Scan a TAG token. + */ + +func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { + var handle, suffix []byte + + start_mark := parser.mark + + // Check if the tag is in the canonical form. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + if parser.buffer[parser.buffer_pos+1] == '<' { + // Keep the handle as '' + + // Eat '!<' + skip(parser) + skip(parser) + + // Consume the tag value. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + + // Check for '>' and eat it. + if parser.buffer[parser.buffer_pos] != '>' { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find the expected '>'") + return false + } + + skip(parser) + } else { + // The tag has either the '!suffix' or the '!handle!suffix' form. + + // First, try to scan a handle. + if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { + return false + } + + // Check if it is, indeed, handle. + if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { + // Scan the suffix now. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + } else { + // It wasn't a handle after all. Scan the rest of the tag. + if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { + return false + } + + // Set the handle to '!'. + handle = []byte{'!'} + + // A special case: the '!' tag. Set the handle to '' and the + // suffix to '!'. + if len(suffix) == 0 { + handle, suffix = suffix, handle + } + } + } + + // Check the character which ends the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find expected whitespace or line break") + return false + } + + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_TAG_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + suffix: suffix, + } + return true +} + +// Scan a tag handle. +func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { + // Check the initial '!' character. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] != '!' { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + + var s []byte + + // Copy the '!' character. + s = read(parser, s) + + // Copy all subsequent alphabetical and numerical characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the trailing character is '!' and copy it. + if parser.buffer[parser.buffer_pos] == '!' { + s = read(parser, s) + } else { + // It's either the '!' tag or not really a tag handle. If it's a %TAG + // directive, it's an error. If it's a tag token, it must be a part of URI. + if directive && string(s) != "!" { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + } + + *handle = s + return true +} + +// Scan a tag. +func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { + //size_t length = head ? strlen((char *)head) : 0 + var s []byte + hasTag := len(head) > 0 + + // Copy the head if needed. + // + // Note that we don't copy the leading '!' character. + if len(head) > 1 { + s = append(s, head[1:]...) + } + + // Scan the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // The set of characters that may appear in URI is as follows: + // + // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', + // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', + // '%'. + // [Go] Convert this into more reasonable logic. + for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || + parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || + parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || + parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || + parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || + parser.buffer[parser.buffer_pos] == '%' { + // Check if it is a URI-escape sequence. + if parser.buffer[parser.buffer_pos] == '%' { + if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { + return false + } + } else { + s = read(parser, s) + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + hasTag = true + } + + if !hasTag { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected tag URI") + return false + } + *uri = s + return true +} + +// Decode an URI-escape sequence corresponding to a single UTF-8 character. +func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { + + // Decode the required number of characters. + w := 1024 + for w > 0 { + // Check for a URI-escaped octet. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + + if !(parser.buffer[parser.buffer_pos] == '%' && + is_hex(parser.buffer, parser.buffer_pos+1) && + is_hex(parser.buffer, parser.buffer_pos+2)) { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find URI escaped octet") + } + + // Get the octet. + octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) + + // If it is the leading octet, determine the length of the UTF-8 sequence. + if w == 1024 { + w = width(octet) + if w == 0 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect leading UTF-8 octet") + } + } else { + // Check if the trailing octet is correct. + if octet&0xC0 != 0x80 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect trailing UTF-8 octet") + } + } + + // Copy the octet and move the pointers. + *s = append(*s, octet) + skip(parser) + skip(parser) + skip(parser) + w-- + } + return true +} + +// Scan a block scalar. +func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { + // Eat the indicator '|' or '>'. + start_mark := parser.mark + skip(parser) + + // Scan the additional block scalar indicators. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check for a chomping indicator. + var chomping, increment int + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + // Set the chomping method and eat the indicator. + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + + // Check for an indentation indicator. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if is_digit(parser.buffer, parser.buffer_pos) { + // Check that the indentation is greater than 0. + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + + // Get the indentation level and eat the indicator. + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + } + + } else if is_digit(parser.buffer, parser.buffer_pos) { + // Do the same as above, but in the opposite order. + + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + } + } + + // Eat whitespaces and comments to the end of the line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + end_mark := parser.mark + + // Set the indentation level if it was specified. + var indent int + if increment > 0 { + if parser.indent >= 0 { + indent = parser.indent + increment + } else { + indent = increment + } + } + + // Scan the leading line breaks and determine the indentation level if needed. + var s, leading_break, trailing_breaks []byte + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + + // Scan the block scalar content. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var leading_blank, trailing_blank bool + for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { + // We are at the beginning of a non-empty line. + + // Is it a trailing whitespace? + trailing_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Check if we need to fold the leading line break. + if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { + // Do we need to join the lines by space? + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } + } else { + s = append(s, leading_break...) + } + leading_break = leading_break[:0] + + // Append the remaining line breaks. + s = append(s, trailing_breaks...) + trailing_breaks = trailing_breaks[:0] + + // Is it a leading whitespace? + leading_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Consume the current line. + for !is_breakz(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + leading_break = read_line(parser, leading_break) + + // Eat the following indentation spaces and line breaks. + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + } + + // Chomp the tail. + if chomping != -1 { + s = append(s, leading_break...) + } + if chomping == 1 { + s = append(s, trailing_breaks...) + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_LITERAL_SCALAR_STYLE, + } + if !literal { + token.style = yaml_FOLDED_SCALAR_STYLE + } + return true +} + +// Scan indentation spaces and line breaks for a block scalar. Determine the +// indentation level if needed. +func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { + *end_mark = parser.mark + + // Eat the indentation spaces and line breaks. + max_indent := 0 + for { + // Eat the indentation spaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.mark.column > max_indent { + max_indent = parser.mark.column + } + + // Check for a tab character messing the indentation. + if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { + return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found a tab character where an indentation space is expected") + } + + // Have we found a non-empty line? + if !is_break(parser.buffer, parser.buffer_pos) { + break + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + // [Go] Should really be returning breaks instead. + *breaks = read_line(parser, *breaks) + *end_mark = parser.mark + } + + // Determine the indentation level if needed. + if *indent == 0 { + *indent = max_indent + if *indent < parser.indent+1 { + *indent = parser.indent + 1 + } + if *indent < 1 { + *indent = 1 + } + } + return true +} + +// Scan a quoted scalar. +func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { + // Eat the left quote. + start_mark := parser.mark + skip(parser) + + // Consume the content of the quoted scalar. + var s, leading_break, trailing_breaks, whitespaces []byte + for { + // Check that there are no document indicators at the beginning of the line. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected document indicator") + return false + } + + // Check for EOF. + if is_z(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected end of stream") + return false + } + + // Consume non-blank characters. + leading_blanks := false + for !is_blankz(parser.buffer, parser.buffer_pos) { + if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { + // Is is an escaped single quote. + s = append(s, '\'') + skip(parser) + skip(parser) + + } else if single && parser.buffer[parser.buffer_pos] == '\'' { + // It is a right single quote. + break + } else if !single && parser.buffer[parser.buffer_pos] == '"' { + // It is a right double quote. + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { + // It is an escaped line break. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + skip(parser) + skip_line(parser) + leading_blanks = true + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' { + // It is an escape sequence. + code_length := 0 + + // Check the escape character. + switch parser.buffer[parser.buffer_pos+1] { + case '0': + s = append(s, 0) + case 'a': + s = append(s, '\x07') + case 'b': + s = append(s, '\x08') + case 't', '\t': + s = append(s, '\x09') + case 'n': + s = append(s, '\x0A') + case 'v': + s = append(s, '\x0B') + case 'f': + s = append(s, '\x0C') + case 'r': + s = append(s, '\x0D') + case 'e': + s = append(s, '\x1B') + case ' ': + s = append(s, '\x20') + case '"': + s = append(s, '"') + case '\'': + s = append(s, '\'') + case '\\': + s = append(s, '\\') + case 'N': // NEL (#x85) + s = append(s, '\xC2') + s = append(s, '\x85') + case '_': // #xA0 + s = append(s, '\xC2') + s = append(s, '\xA0') + case 'L': // LS (#x2028) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA8') + case 'P': // PS (#x2029) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA9') + case 'x': + code_length = 2 + case 'u': + code_length = 4 + case 'U': + code_length = 8 + default: + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found unknown escape character") + return false + } + + skip(parser) + skip(parser) + + // Consume an arbitrary escape code. + if code_length > 0 { + var value int + + // Scan the character value. + if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { + return false + } + for k := 0; k < code_length; k++ { + if !is_hex(parser.buffer, parser.buffer_pos+k) { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "did not find expected hexdecimal number") + return false + } + value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) + } + + // Check the value and write the character. + if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found invalid Unicode character escape code") + return false + } + if value <= 0x7F { + s = append(s, byte(value)) + } else if value <= 0x7FF { + s = append(s, byte(0xC0+(value>>6))) + s = append(s, byte(0x80+(value&0x3F))) + } else if value <= 0xFFFF { + s = append(s, byte(0xE0+(value>>12))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } else { + s = append(s, byte(0xF0+(value>>18))) + s = append(s, byte(0x80+((value>>12)&0x3F))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } + + // Advance the pointer. + for k := 0; k < code_length; k++ { + skip(parser) + } + } + } else { + // It is a non-escaped non-blank character. + s = read(parser, s) + } + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we are at the end of the scalar. + if single { + if parser.buffer[parser.buffer_pos] == '\'' { + break + } + } else { + if parser.buffer[parser.buffer_pos] == '"' { + break + } + } + + // Consume blank characters. + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Join the whitespaces or fold line breaks. + if leading_blanks { + // Do we need to fold line breaks? + if len(leading_break) > 0 && leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Eat the right quote. + skip(parser) + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_SINGLE_QUOTED_SCALAR_STYLE, + } + if !single { + token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + return true +} + +// Scan a plain scalar. +func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { + + var s, leading_break, trailing_breaks, whitespaces []byte + var leading_blanks bool + var indent = parser.indent + 1 + + start_mark := parser.mark + end_mark := parser.mark + + // Consume the content of the plain scalar. + for { + // Check for a document indicator. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + break + } + + // Check for a comment. + if parser.buffer[parser.buffer_pos] == '#' { + break + } + + // Consume non-blank characters. + for !is_blankz(parser.buffer, parser.buffer_pos) { + + // Check for indicators that may end a plain scalar. + if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level > 0 && + (parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}')) { + break + } + + // Check if we need to join whitespaces and breaks. + if leading_blanks || len(whitespaces) > 0 { + if leading_blanks { + // Do we need to fold line breaks? + if leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + leading_blanks = false + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Copy the character. + s = read(parser, s) + + end_mark = parser.mark + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + // Is it the end? + if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { + break + } + + // Consume blank characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + + // Check for tab characters that abuse indentation. + if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", + start_mark, "found a tab character that violates indentation") + return false + } + + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check indentation level. + if parser.flow_level == 0 && parser.mark.column < indent { + break + } + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_PLAIN_SCALAR_STYLE, + } + + // Note that we change the 'simple_key_allowed' flag. + if leading_blanks { + parser.simple_key_allowed = true + } + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/sorter.go b/upstream/vendor/go.yaml.in/yaml/v2/sorter.go new file mode 100644 index 0000000000..4c45e660a8 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/sorter.go @@ -0,0 +1,113 @@ +package yaml + +import ( + "reflect" + "unicode" +) + +type keyList []reflect.Value + +func (l keyList) Len() int { return len(l) } +func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } +func (l keyList) Less(i, j int) bool { + a := l[i] + b := l[j] + ak := a.Kind() + bk := b.Kind() + for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { + a = a.Elem() + ak = a.Kind() + } + for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { + b = b.Elem() + bk = b.Kind() + } + af, aok := keyFloat(a) + bf, bok := keyFloat(b) + if aok && bok { + if af != bf { + return af < bf + } + if ak != bk { + return ak < bk + } + return numLess(a, b) + } + if ak != reflect.String || bk != reflect.String { + return ak < bk + } + ar, br := []rune(a.String()), []rune(b.String()) + for i := 0; i < len(ar) && i < len(br); i++ { + if ar[i] == br[i] { + continue + } + al := unicode.IsLetter(ar[i]) + bl := unicode.IsLetter(br[i]) + if al && bl { + return ar[i] < br[i] + } + if al || bl { + return bl + } + var ai, bi int + var an, bn int64 + if ar[i] == '0' || br[i] == '0' { + for j := i-1; j >= 0 && unicode.IsDigit(ar[j]); j-- { + if ar[j] != '0' { + an = 1 + bn = 1 + break + } + } + } + for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { + an = an*10 + int64(ar[ai]-'0') + } + for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { + bn = bn*10 + int64(br[bi]-'0') + } + if an != bn { + return an < bn + } + if ai != bi { + return ai < bi + } + return ar[i] < br[i] + } + return len(ar) < len(br) +} + +// keyFloat returns a float value for v if it is a number/bool +// and whether it is a number/bool or not. +func keyFloat(v reflect.Value) (f float64, ok bool) { + switch v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return float64(v.Int()), true + case reflect.Float32, reflect.Float64: + return v.Float(), true + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return float64(v.Uint()), true + case reflect.Bool: + if v.Bool() { + return 1, true + } + return 0, true + } + return 0, false +} + +// numLess returns whether a < b. +// a and b must necessarily have the same kind. +func numLess(a, b reflect.Value) bool { + switch a.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return a.Int() < b.Int() + case reflect.Float32, reflect.Float64: + return a.Float() < b.Float() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return a.Uint() < b.Uint() + case reflect.Bool: + return !a.Bool() && b.Bool() + } + panic("not a number") +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/writerc.go b/upstream/vendor/go.yaml.in/yaml/v2/writerc.go new file mode 100644 index 0000000000..a2dde608cb --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/writerc.go @@ -0,0 +1,26 @@ +package yaml + +// Set the writer error and return false. +func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_WRITER_ERROR + emitter.problem = problem + return false +} + +// Flush the output buffer. +func yaml_emitter_flush(emitter *yaml_emitter_t) bool { + if emitter.write_handler == nil { + panic("write handler not set") + } + + // Check if the buffer is empty. + if emitter.buffer_pos == 0 { + return true + } + + if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { + return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) + } + emitter.buffer_pos = 0 + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/yaml.go b/upstream/vendor/go.yaml.in/yaml/v2/yaml.go new file mode 100644 index 0000000000..5248e1263c --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/yaml.go @@ -0,0 +1,478 @@ +// Package yaml implements YAML support for the Go language. +// +// Source code and other details for the project are available at GitHub: +// +// https://github.com/yaml/go-yaml +// +package yaml + +import ( + "errors" + "fmt" + "io" + "reflect" + "strings" + "sync" +) + +// MapSlice encodes and decodes as a YAML map. +// The order of keys is preserved when encoding and decoding. +type MapSlice []MapItem + +// MapItem is an item in a MapSlice. +type MapItem struct { + Key, Value interface{} +} + +// The Unmarshaler interface may be implemented by types to customize their +// behavior when being unmarshaled from a YAML document. The UnmarshalYAML +// method receives a function that may be called to unmarshal the original +// YAML value into a field or variable. It is safe to call the unmarshal +// function parameter more than once if necessary. +type Unmarshaler interface { + UnmarshalYAML(unmarshal func(interface{}) error) error +} + +// The Marshaler interface may be implemented by types to customize their +// behavior when being marshaled into a YAML document. The returned value +// is marshaled in place of the original value implementing Marshaler. +// +// If an error is returned by MarshalYAML, the marshaling procedure stops +// and returns with the provided error. +type Marshaler interface { + MarshalYAML() (interface{}, error) +} + +// Unmarshal decodes the first document found within the in byte slice +// and assigns decoded values into the out value. +// +// Maps and pointers (to a struct, string, int, etc) are accepted as out +// values. If an internal pointer within a struct is not initialized, +// the yaml package will initialize it if necessary for unmarshalling +// the provided data. The out parameter must not be nil. +// +// The type of the decoded values should be compatible with the respective +// values in out. If one or more values cannot be decoded due to a type +// mismatches, decoding continues partially until the end of the YAML +// content, and a *yaml.TypeError is returned with details for all +// missed values. +// +// Struct fields are only unmarshalled if they are exported (have an +// upper case first letter), and are unmarshalled using the field name +// lowercased as the default key. Custom keys may be defined via the +// "yaml" name in the field tag: the content preceding the first comma +// is used as the key, and the following comma-separated options are +// used to tweak the marshalling process (see Marshal). +// Conflicting names result in a runtime error. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// var t T +// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// +// See the documentation of Marshal for the format of tags and a list of +// supported tag options. +// +func Unmarshal(in []byte, out interface{}) (err error) { + return unmarshal(in, out, false) +} + +// UnmarshalStrict is like Unmarshal except that any fields that are found +// in the data that do not have corresponding struct members, or mapping +// keys that are duplicates, will result in +// an error. +func UnmarshalStrict(in []byte, out interface{}) (err error) { + return unmarshal(in, out, true) +} + +// A Decoder reads and decodes YAML values from an input stream. +type Decoder struct { + strict bool + parser *parser +} + +// NewDecoder returns a new decoder that reads from r. +// +// The decoder introduces its own buffering and may read +// data from r beyond the YAML values requested. +func NewDecoder(r io.Reader) *Decoder { + return &Decoder{ + parser: newParserFromReader(r), + } +} + +// SetStrict sets whether strict decoding behaviour is enabled when +// decoding items in the data (see UnmarshalStrict). By default, decoding is not strict. +func (dec *Decoder) SetStrict(strict bool) { + dec.strict = strict +} + +// Decode reads the next YAML-encoded value from its input +// and stores it in the value pointed to by v. +// +// See the documentation for Unmarshal for details about the +// conversion of YAML into a Go value. +func (dec *Decoder) Decode(v interface{}) (err error) { + d := newDecoder(dec.strict) + defer handleErr(&err) + node := dec.parser.parse() + if node == nil { + return io.EOF + } + out := reflect.ValueOf(v) + if out.Kind() == reflect.Ptr && !out.IsNil() { + out = out.Elem() + } + d.unmarshal(node, out) + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +func unmarshal(in []byte, out interface{}, strict bool) (err error) { + defer handleErr(&err) + d := newDecoder(strict) + p := newParser(in) + defer p.destroy() + node := p.parse() + if node != nil { + v := reflect.ValueOf(out) + if v.Kind() == reflect.Ptr && !v.IsNil() { + v = v.Elem() + } + d.unmarshal(node, v) + } + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +// Marshal serializes the value provided into a YAML document. The structure +// of the generated document will reflect the structure of the value itself. +// Maps and pointers (to struct, string, int, etc) are accepted as the in value. +// +// Struct fields are only marshalled if they are exported (have an upper case +// first letter), and are marshalled using the field name lowercased as the +// default key. Custom keys may be defined via the "yaml" name in the field +// tag: the content preceding the first comma is used as the key, and the +// following comma-separated options are used to tweak the marshalling process. +// Conflicting names result in a runtime error. +// +// The field tag format accepted is: +// +// `(...) yaml:"[][,[,]]" (...)` +// +// The following flags are currently supported: +// +// omitempty Only include the field if it's not set to the zero +// value for the type or to empty slices or maps. +// Zero valued structs will be omitted if all their public +// fields are zero, unless they implement an IsZero +// method (see the IsZeroer interface type), in which +// case the field will be excluded if IsZero returns true. +// +// flow Marshal using a flow style (useful for structs, +// sequences and maps). +// +// inline Inline the field, which must be a struct or a map, +// causing all of its fields or keys to be processed as if +// they were part of the outer struct. For maps, keys must +// not conflict with the yaml keys of other struct fields. +// +// In addition, if the key is "-", the field is ignored. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" +// +func Marshal(in interface{}) (out []byte, err error) { + defer handleErr(&err) + e := newEncoder() + defer e.destroy() + e.marshalDoc("", reflect.ValueOf(in)) + e.finish() + out = e.out + return +} + +// An Encoder writes YAML values to an output stream. +type Encoder struct { + encoder *encoder +} + +// NewEncoder returns a new encoder that writes to w. +// The Encoder should be closed after use to flush all data +// to w. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{ + encoder: newEncoderWithWriter(w), + } +} + +// Encode writes the YAML encoding of v to the stream. +// If multiple items are encoded to the stream, the +// second and subsequent document will be preceded +// with a "---" document separator, but the first will not. +// +// See the documentation for Marshal for details about the conversion of Go +// values to YAML. +func (e *Encoder) Encode(v interface{}) (err error) { + defer handleErr(&err) + e.encoder.marshalDoc("", reflect.ValueOf(v)) + return nil +} + +// Close closes the encoder by writing any remaining data. +// It does not write a stream terminating string "...". +func (e *Encoder) Close() (err error) { + defer handleErr(&err) + e.encoder.finish() + return nil +} + +func handleErr(err *error) { + if v := recover(); v != nil { + if e, ok := v.(yamlError); ok { + *err = e.err + } else { + panic(v) + } + } +} + +type yamlError struct { + err error +} + +func fail(err error) { + panic(yamlError{err}) +} + +func failf(format string, args ...interface{}) { + panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) +} + +// A TypeError is returned by Unmarshal when one or more fields in +// the YAML document cannot be properly decoded into the requested +// types. When this error is returned, the value is still +// unmarshaled partially. +type TypeError struct { + Errors []string +} + +func (e *TypeError) Error() string { + return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) +} + +// -------------------------------------------------------------------------- +// Maintain a mapping of keys to structure field indexes + +// The code in this section was copied from mgo/bson. + +// structInfo holds details for the serialization of fields of +// a given struct. +type structInfo struct { + FieldsMap map[string]fieldInfo + FieldsList []fieldInfo + + // InlineMap is the number of the field in the struct that + // contains an ,inline map, or -1 if there's none. + InlineMap int +} + +type fieldInfo struct { + Key string + Num int + OmitEmpty bool + Flow bool + // Id holds the unique field identifier, so we can cheaply + // check for field duplicates without maintaining an extra map. + Id int + + // Inline holds the field index if the field is part of an inlined struct. + Inline []int +} + +var structMap = make(map[reflect.Type]*structInfo) +var fieldMapMutex sync.RWMutex + +func getStructInfo(st reflect.Type) (*structInfo, error) { + fieldMapMutex.RLock() + sinfo, found := structMap[st] + fieldMapMutex.RUnlock() + if found { + return sinfo, nil + } + + n := st.NumField() + fieldsMap := make(map[string]fieldInfo) + fieldsList := make([]fieldInfo, 0, n) + inlineMap := -1 + for i := 0; i != n; i++ { + field := st.Field(i) + if field.PkgPath != "" && !field.Anonymous { + continue // Private field + } + + info := fieldInfo{Num: i} + + tag := field.Tag.Get("yaml") + if tag == "" && strings.Index(string(field.Tag), ":") < 0 { + tag = string(field.Tag) + } + if tag == "-" { + continue + } + + inline := false + fields := strings.Split(tag, ",") + if len(fields) > 1 { + for _, flag := range fields[1:] { + switch flag { + case "omitempty": + info.OmitEmpty = true + case "flow": + info.Flow = true + case "inline": + inline = true + default: + return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st)) + } + } + tag = fields[0] + } + + if inline { + switch field.Type.Kind() { + case reflect.Map: + if inlineMap >= 0 { + return nil, errors.New("Multiple ,inline maps in struct " + st.String()) + } + if field.Type.Key() != reflect.TypeOf("") { + return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String()) + } + inlineMap = info.Num + case reflect.Struct: + sinfo, err := getStructInfo(field.Type) + if err != nil { + return nil, err + } + for _, finfo := range sinfo.FieldsList { + if _, found := fieldsMap[finfo.Key]; found { + msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + if finfo.Inline == nil { + finfo.Inline = []int{i, finfo.Num} + } else { + finfo.Inline = append([]int{i}, finfo.Inline...) + } + finfo.Id = len(fieldsList) + fieldsMap[finfo.Key] = finfo + fieldsList = append(fieldsList, finfo) + } + default: + //return nil, errors.New("Option ,inline needs a struct value or map field") + return nil, errors.New("Option ,inline needs a struct value field") + } + continue + } + + if tag != "" { + info.Key = tag + } else { + info.Key = strings.ToLower(field.Name) + } + + if _, found = fieldsMap[info.Key]; found { + msg := "Duplicated key '" + info.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + + info.Id = len(fieldsList) + fieldsList = append(fieldsList, info) + fieldsMap[info.Key] = info + } + + sinfo = &structInfo{ + FieldsMap: fieldsMap, + FieldsList: fieldsList, + InlineMap: inlineMap, + } + + fieldMapMutex.Lock() + structMap[st] = sinfo + fieldMapMutex.Unlock() + return sinfo, nil +} + +// IsZeroer is used to check whether an object is zero to +// determine whether it should be omitted when marshaling +// with the omitempty flag. One notable implementation +// is time.Time. +type IsZeroer interface { + IsZero() bool +} + +func isZero(v reflect.Value) bool { + kind := v.Kind() + if z, ok := v.Interface().(IsZeroer); ok { + if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { + return true + } + return z.IsZero() + } + switch kind { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + case reflect.Slice: + return v.Len() == 0 + case reflect.Map: + return v.Len() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Struct: + vt := v.Type() + for i := v.NumField() - 1; i >= 0; i-- { + if vt.Field(i).PkgPath != "" { + continue // Private field + } + if !isZero(v.Field(i)) { + return false + } + } + return true + } + return false +} + +// FutureLineWrap globally disables line wrapping when encoding long strings. +// This is a temporary and thus deprecated method introduced to faciliate +// migration towards v3, which offers more control of line lengths on +// individual encodings, and has a default matching the behavior introduced +// by this function. +// +// The default formatting of v2 was erroneously changed in v2.3.0 and reverted +// in v2.4.0, at which point this function was introduced to help migration. +func FutureLineWrap() { + disableLineWrapping = true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/yamlh.go b/upstream/vendor/go.yaml.in/yaml/v2/yamlh.go new file mode 100644 index 0000000000..f6a9c8e34b --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/yamlh.go @@ -0,0 +1,739 @@ +package yaml + +import ( + "fmt" + "io" +) + +// The version directive data. +type yaml_version_directive_t struct { + major int8 // The major version number. + minor int8 // The minor version number. +} + +// The tag directive data. +type yaml_tag_directive_t struct { + handle []byte // The tag handle. + prefix []byte // The tag prefix. +} + +type yaml_encoding_t int + +// The stream encoding. +const ( + // Let the parser choose the encoding. + yaml_ANY_ENCODING yaml_encoding_t = iota + + yaml_UTF8_ENCODING // The default UTF-8 encoding. + yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. + yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. +) + +type yaml_break_t int + +// Line break types. +const ( + // Let the parser choose the break type. + yaml_ANY_BREAK yaml_break_t = iota + + yaml_CR_BREAK // Use CR for line breaks (Mac style). + yaml_LN_BREAK // Use LN for line breaks (Unix style). + yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). +) + +type yaml_error_type_t int + +// Many bad things could happen with the parser and emitter. +const ( + // No error is produced. + yaml_NO_ERROR yaml_error_type_t = iota + + yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. + yaml_READER_ERROR // Cannot read or decode the input stream. + yaml_SCANNER_ERROR // Cannot scan the input stream. + yaml_PARSER_ERROR // Cannot parse the input stream. + yaml_COMPOSER_ERROR // Cannot compose a YAML document. + yaml_WRITER_ERROR // Cannot write to the output stream. + yaml_EMITTER_ERROR // Cannot emit a YAML stream. +) + +// The pointer position. +type yaml_mark_t struct { + index int // The position index. + line int // The position line. + column int // The position column. +} + +// Node Styles + +type yaml_style_t int8 + +type yaml_scalar_style_t yaml_style_t + +// Scalar styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota + + yaml_PLAIN_SCALAR_STYLE // The plain scalar style. + yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. + yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. + yaml_LITERAL_SCALAR_STYLE // The literal scalar style. + yaml_FOLDED_SCALAR_STYLE // The folded scalar style. +) + +type yaml_sequence_style_t yaml_style_t + +// Sequence styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota + + yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. + yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. +) + +type yaml_mapping_style_t yaml_style_t + +// Mapping styles. +const ( + // Let the emitter choose the style. + yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota + + yaml_BLOCK_MAPPING_STYLE // The block mapping style. + yaml_FLOW_MAPPING_STYLE // The flow mapping style. +) + +// Tokens + +type yaml_token_type_t int + +// Token types. +const ( + // An empty token. + yaml_NO_TOKEN yaml_token_type_t = iota + + yaml_STREAM_START_TOKEN // A STREAM-START token. + yaml_STREAM_END_TOKEN // A STREAM-END token. + + yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. + yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. + yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. + yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. + + yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. + yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. + yaml_BLOCK_END_TOKEN // A BLOCK-END token. + + yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. + yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. + yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. + yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. + + yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. + yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. + yaml_KEY_TOKEN // A KEY token. + yaml_VALUE_TOKEN // A VALUE token. + + yaml_ALIAS_TOKEN // An ALIAS token. + yaml_ANCHOR_TOKEN // An ANCHOR token. + yaml_TAG_TOKEN // A TAG token. + yaml_SCALAR_TOKEN // A SCALAR token. +) + +func (tt yaml_token_type_t) String() string { + switch tt { + case yaml_NO_TOKEN: + return "yaml_NO_TOKEN" + case yaml_STREAM_START_TOKEN: + return "yaml_STREAM_START_TOKEN" + case yaml_STREAM_END_TOKEN: + return "yaml_STREAM_END_TOKEN" + case yaml_VERSION_DIRECTIVE_TOKEN: + return "yaml_VERSION_DIRECTIVE_TOKEN" + case yaml_TAG_DIRECTIVE_TOKEN: + return "yaml_TAG_DIRECTIVE_TOKEN" + case yaml_DOCUMENT_START_TOKEN: + return "yaml_DOCUMENT_START_TOKEN" + case yaml_DOCUMENT_END_TOKEN: + return "yaml_DOCUMENT_END_TOKEN" + case yaml_BLOCK_SEQUENCE_START_TOKEN: + return "yaml_BLOCK_SEQUENCE_START_TOKEN" + case yaml_BLOCK_MAPPING_START_TOKEN: + return "yaml_BLOCK_MAPPING_START_TOKEN" + case yaml_BLOCK_END_TOKEN: + return "yaml_BLOCK_END_TOKEN" + case yaml_FLOW_SEQUENCE_START_TOKEN: + return "yaml_FLOW_SEQUENCE_START_TOKEN" + case yaml_FLOW_SEQUENCE_END_TOKEN: + return "yaml_FLOW_SEQUENCE_END_TOKEN" + case yaml_FLOW_MAPPING_START_TOKEN: + return "yaml_FLOW_MAPPING_START_TOKEN" + case yaml_FLOW_MAPPING_END_TOKEN: + return "yaml_FLOW_MAPPING_END_TOKEN" + case yaml_BLOCK_ENTRY_TOKEN: + return "yaml_BLOCK_ENTRY_TOKEN" + case yaml_FLOW_ENTRY_TOKEN: + return "yaml_FLOW_ENTRY_TOKEN" + case yaml_KEY_TOKEN: + return "yaml_KEY_TOKEN" + case yaml_VALUE_TOKEN: + return "yaml_VALUE_TOKEN" + case yaml_ALIAS_TOKEN: + return "yaml_ALIAS_TOKEN" + case yaml_ANCHOR_TOKEN: + return "yaml_ANCHOR_TOKEN" + case yaml_TAG_TOKEN: + return "yaml_TAG_TOKEN" + case yaml_SCALAR_TOKEN: + return "yaml_SCALAR_TOKEN" + } + return "" +} + +// The token structure. +type yaml_token_t struct { + // The token type. + typ yaml_token_type_t + + // The start/end of the token. + start_mark, end_mark yaml_mark_t + + // The stream encoding (for yaml_STREAM_START_TOKEN). + encoding yaml_encoding_t + + // The alias/anchor/scalar value or tag/tag directive handle + // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). + value []byte + + // The tag suffix (for yaml_TAG_TOKEN). + suffix []byte + + // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). + prefix []byte + + // The scalar style (for yaml_SCALAR_TOKEN). + style yaml_scalar_style_t + + // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). + major, minor int8 +} + +// Events + +type yaml_event_type_t int8 + +// Event types. +const ( + // An empty event. + yaml_NO_EVENT yaml_event_type_t = iota + + yaml_STREAM_START_EVENT // A STREAM-START event. + yaml_STREAM_END_EVENT // A STREAM-END event. + yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. + yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. + yaml_ALIAS_EVENT // An ALIAS event. + yaml_SCALAR_EVENT // A SCALAR event. + yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. + yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. + yaml_MAPPING_START_EVENT // A MAPPING-START event. + yaml_MAPPING_END_EVENT // A MAPPING-END event. +) + +var eventStrings = []string{ + yaml_NO_EVENT: "none", + yaml_STREAM_START_EVENT: "stream start", + yaml_STREAM_END_EVENT: "stream end", + yaml_DOCUMENT_START_EVENT: "document start", + yaml_DOCUMENT_END_EVENT: "document end", + yaml_ALIAS_EVENT: "alias", + yaml_SCALAR_EVENT: "scalar", + yaml_SEQUENCE_START_EVENT: "sequence start", + yaml_SEQUENCE_END_EVENT: "sequence end", + yaml_MAPPING_START_EVENT: "mapping start", + yaml_MAPPING_END_EVENT: "mapping end", +} + +func (e yaml_event_type_t) String() string { + if e < 0 || int(e) >= len(eventStrings) { + return fmt.Sprintf("unknown event %d", e) + } + return eventStrings[e] +} + +// The event structure. +type yaml_event_t struct { + + // The event type. + typ yaml_event_type_t + + // The start and end of the event. + start_mark, end_mark yaml_mark_t + + // The document encoding (for yaml_STREAM_START_EVENT). + encoding yaml_encoding_t + + // The version directive (for yaml_DOCUMENT_START_EVENT). + version_directive *yaml_version_directive_t + + // The list of tag directives (for yaml_DOCUMENT_START_EVENT). + tag_directives []yaml_tag_directive_t + + // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). + anchor []byte + + // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + tag []byte + + // The scalar value (for yaml_SCALAR_EVENT). + value []byte + + // Is the document start/end indicator implicit, or the tag optional? + // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). + implicit bool + + // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). + quoted_implicit bool + + // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + style yaml_style_t +} + +func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } +func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } +func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } + +// Nodes + +const ( + yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. + yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. + yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. + yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. + yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. + yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. + + yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. + yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. + + // Not in original libyaml. + yaml_BINARY_TAG = "tag:yaml.org,2002:binary" + yaml_MERGE_TAG = "tag:yaml.org,2002:merge" + + yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. + yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. + yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. +) + +type yaml_node_type_t int + +// Node types. +const ( + // An empty node. + yaml_NO_NODE yaml_node_type_t = iota + + yaml_SCALAR_NODE // A scalar node. + yaml_SEQUENCE_NODE // A sequence node. + yaml_MAPPING_NODE // A mapping node. +) + +// An element of a sequence node. +type yaml_node_item_t int + +// An element of a mapping node. +type yaml_node_pair_t struct { + key int // The key of the element. + value int // The value of the element. +} + +// The node structure. +type yaml_node_t struct { + typ yaml_node_type_t // The node type. + tag []byte // The node tag. + + // The node data. + + // The scalar parameters (for yaml_SCALAR_NODE). + scalar struct { + value []byte // The scalar value. + length int // The length of the scalar value. + style yaml_scalar_style_t // The scalar style. + } + + // The sequence parameters (for YAML_SEQUENCE_NODE). + sequence struct { + items_data []yaml_node_item_t // The stack of sequence items. + style yaml_sequence_style_t // The sequence style. + } + + // The mapping parameters (for yaml_MAPPING_NODE). + mapping struct { + pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). + pairs_start *yaml_node_pair_t // The beginning of the stack. + pairs_end *yaml_node_pair_t // The end of the stack. + pairs_top *yaml_node_pair_t // The top of the stack. + style yaml_mapping_style_t // The mapping style. + } + + start_mark yaml_mark_t // The beginning of the node. + end_mark yaml_mark_t // The end of the node. + +} + +// The document structure. +type yaml_document_t struct { + + // The document nodes. + nodes []yaml_node_t + + // The version directive. + version_directive *yaml_version_directive_t + + // The list of tag directives. + tag_directives_data []yaml_tag_directive_t + tag_directives_start int // The beginning of the tag directives list. + tag_directives_end int // The end of the tag directives list. + + start_implicit int // Is the document start indicator implicit? + end_implicit int // Is the document end indicator implicit? + + // The start/end of the document. + start_mark, end_mark yaml_mark_t +} + +// The prototype of a read handler. +// +// The read handler is called when the parser needs to read more bytes from the +// source. The handler should write not more than size bytes to the buffer. +// The number of written bytes should be set to the size_read variable. +// +// [in,out] data A pointer to an application data specified by +// yaml_parser_set_input(). +// [out] buffer The buffer to write the data from the source. +// [in] size The size of the buffer. +// [out] size_read The actual number of bytes read from the source. +// +// On success, the handler should return 1. If the handler failed, +// the returned value should be 0. On EOF, the handler should set the +// size_read to 0 and return 1. +type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) + +// This structure holds information about a potential simple key. +type yaml_simple_key_t struct { + possible bool // Is a simple key possible? + required bool // Is a simple key required? + token_number int // The number of the token. + mark yaml_mark_t // The position mark. +} + +// The states of the parser. +type yaml_parser_state_t int + +const ( + yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota + + yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. + yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. + yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. + yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. + yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. + yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. + yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. + yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. + yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. + yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. + yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. + yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. + yaml_PARSE_END_STATE // Expect nothing. +) + +func (ps yaml_parser_state_t) String() string { + switch ps { + case yaml_PARSE_STREAM_START_STATE: + return "yaml_PARSE_STREAM_START_STATE" + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_START_STATE: + return "yaml_PARSE_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return "yaml_PARSE_DOCUMENT_CONTENT_STATE" + case yaml_PARSE_DOCUMENT_END_STATE: + return "yaml_PARSE_DOCUMENT_END_STATE" + case yaml_PARSE_BLOCK_NODE_STATE: + return "yaml_PARSE_BLOCK_NODE_STATE" + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" + case yaml_PARSE_FLOW_NODE_STATE: + return "yaml_PARSE_FLOW_NODE_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" + case yaml_PARSE_END_STATE: + return "yaml_PARSE_END_STATE" + } + return "" +} + +// This structure holds aliases data. +type yaml_alias_data_t struct { + anchor []byte // The anchor. + index int // The node id. + mark yaml_mark_t // The anchor mark. +} + +// The parser structure. +// +// All members are internal. Manage the structure using the +// yaml_parser_ family of functions. +type yaml_parser_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + + problem string // Error description. + + // The byte about which the problem occurred. + problem_offset int + problem_value int + problem_mark yaml_mark_t + + // The error context. + context string + context_mark yaml_mark_t + + // Reader stuff + + read_handler yaml_read_handler_t // Read handler. + + input_reader io.Reader // File input data. + input []byte // String input data. + input_pos int + + eof bool // EOF flag + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + unread int // The number of unread characters in the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The input encoding. + + offset int // The offset of the current position (in bytes). + mark yaml_mark_t // The mark of the current position. + + // Scanner stuff + + stream_start_produced bool // Have we started to scan the input stream? + stream_end_produced bool // Have we reached the end of the input stream? + + flow_level int // The number of unclosed '[' and '{' indicators. + + tokens []yaml_token_t // The tokens queue. + tokens_head int // The head of the tokens queue. + tokens_parsed int // The number of tokens fetched from the queue. + token_available bool // Does the tokens queue contain a token ready for dequeueing. + + indent int // The current indentation level. + indents []int // The indentation levels stack. + + simple_key_allowed bool // May a simple key occur at the current position? + simple_keys []yaml_simple_key_t // The stack of simple keys. + simple_keys_by_tok map[int]int // possible simple_key indexes indexed by token_number + + // Parser stuff + + state yaml_parser_state_t // The current parser state. + states []yaml_parser_state_t // The parser states stack. + marks []yaml_mark_t // The stack of marks. + tag_directives []yaml_tag_directive_t // The list of TAG directives. + + // Dumper stuff + + aliases []yaml_alias_data_t // The alias data. + + document *yaml_document_t // The currently parsed document. +} + +// Emitter Definitions + +// The prototype of a write handler. +// +// The write handler is called when the emitter needs to flush the accumulated +// characters to the output. The handler should write @a size bytes of the +// @a buffer to the output. +// +// @param[in,out] data A pointer to an application data specified by +// yaml_emitter_set_output(). +// @param[in] buffer The buffer with bytes to be written. +// @param[in] size The size of the buffer. +// +// @returns On success, the handler should return @c 1. If the handler failed, +// the returned value should be @c 0. +// +type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error + +type yaml_emitter_state_t int + +// The emitter states. +const ( + // Expect STREAM-START. + yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota + + yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. + yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. + yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. + yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. + yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. + yaml_EMIT_END_STATE // Expect nothing. +) + +// The emitter structure. +// +// All members are internal. Manage the structure using the @c yaml_emitter_ +// family of functions. +type yaml_emitter_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + problem string // Error description. + + // Writer stuff + + write_handler yaml_write_handler_t // Write handler. + + output_buffer *[]byte // String output data. + output_writer io.Writer // File output data. + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The stream encoding. + + // Emitter stuff + + canonical bool // If the output is in the canonical style? + best_indent int // The number of indentation spaces. + best_width int // The preferred width of the output lines. + unicode bool // Allow unescaped non-ASCII characters? + line_break yaml_break_t // The preferred line break. + + state yaml_emitter_state_t // The current emitter state. + states []yaml_emitter_state_t // The stack of states. + + events []yaml_event_t // The event queue. + events_head int // The head of the event queue. + + indents []int // The stack of indentation levels. + + tag_directives []yaml_tag_directive_t // The list of tag directives. + + indent int // The current indentation level. + + flow_level int // The current flow level. + + root_context bool // Is it the document root context? + sequence_context bool // Is it a sequence context? + mapping_context bool // Is it a mapping context? + simple_key_context bool // Is it a simple mapping key context? + + line int // The current line. + column int // The current column. + whitespace bool // If the last character was a whitespace? + indention bool // If the last character was an indentation character (' ', '-', '?', ':')? + open_ended bool // If an explicit document end is required? + + // Anchor analysis. + anchor_data struct { + anchor []byte // The anchor value. + alias bool // Is it an alias? + } + + // Tag analysis. + tag_data struct { + handle []byte // The tag handle. + suffix []byte // The tag suffix. + } + + // Scalar analysis. + scalar_data struct { + value []byte // The scalar value. + multiline bool // Does the scalar contain line breaks? + flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? + block_plain_allowed bool // Can the scalar be expressed in the block plain style? + single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? + block_allowed bool // Can the scalar be expressed in the literal or folded styles? + style yaml_scalar_style_t // The output style. + } + + // Dumper stuff + + opened bool // If the stream was already opened? + closed bool // If the stream was already closed? + + // The information associated with the document nodes. + anchors *struct { + references int // The number of references. + anchor int // The anchor id. + serialized bool // If the node has been emitted? + } + + last_anchor_id int // The last assigned anchor id. + + document *yaml_document_t // The currently emitted document. +} diff --git a/upstream/vendor/go.yaml.in/yaml/v2/yamlprivateh.go b/upstream/vendor/go.yaml.in/yaml/v2/yamlprivateh.go new file mode 100644 index 0000000000..8110ce3c37 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v2/yamlprivateh.go @@ -0,0 +1,173 @@ +package yaml + +const ( + // The size of the input raw buffer. + input_raw_buffer_size = 512 + + // The size of the input buffer. + // It should be possible to decode the whole raw buffer. + input_buffer_size = input_raw_buffer_size * 3 + + // The size of the output buffer. + output_buffer_size = 128 + + // The size of the output raw buffer. + // It should be possible to encode the whole output buffer. + output_raw_buffer_size = (output_buffer_size*2 + 2) + + // The size of other stacks and queues. + initial_stack_size = 16 + initial_queue_size = 16 + initial_string_size = 16 +) + +// Check if the character at the specified position is an alphabetical +// character, a digit, '_', or '-'. +func is_alpha(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' +} + +// Check if the character at the specified position is a digit. +func is_digit(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' +} + +// Get the value of a digit. +func as_digit(b []byte, i int) int { + return int(b[i]) - '0' +} + +// Check if the character at the specified position is a hex-digit. +func is_hex(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' +} + +// Get the value of a hex-digit. +func as_hex(b []byte, i int) int { + bi := b[i] + if bi >= 'A' && bi <= 'F' { + return int(bi) - 'A' + 10 + } + if bi >= 'a' && bi <= 'f' { + return int(bi) - 'a' + 10 + } + return int(bi) - '0' +} + +// Check if the character is ASCII. +func is_ascii(b []byte, i int) bool { + return b[i] <= 0x7F +} + +// Check if the character at the start of the buffer can be printed unescaped. +func is_printable(b []byte, i int) bool { + return ((b[i] == 0x0A) || // . == #x0A + (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E + (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF + (b[i] > 0xC2 && b[i] < 0xED) || + (b[i] == 0xED && b[i+1] < 0xA0) || + (b[i] == 0xEE) || + (b[i] == 0xEF && // #xE000 <= . <= #xFFFD + !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF + !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) +} + +// Check if the character at the specified position is NUL. +func is_z(b []byte, i int) bool { + return b[i] == 0x00 +} + +// Check if the beginning of the buffer is a BOM. +func is_bom(b []byte, i int) bool { + return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF +} + +// Check if the character at the specified position is space. +func is_space(b []byte, i int) bool { + return b[i] == ' ' +} + +// Check if the character at the specified position is tab. +func is_tab(b []byte, i int) bool { + return b[i] == '\t' +} + +// Check if the character at the specified position is blank (space or tab). +func is_blank(b []byte, i int) bool { + //return is_space(b, i) || is_tab(b, i) + return b[i] == ' ' || b[i] == '\t' +} + +// Check if the character at the specified position is a line break. +func is_break(b []byte, i int) bool { + return (b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) +} + +func is_crlf(b []byte, i int) bool { + return b[i] == '\r' && b[i+1] == '\n' +} + +// Check if the character is a line break or NUL. +func is_breakz(b []byte, i int) bool { + //return is_break(b, i) || is_z(b, i) + return ( // is_break: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + // is_z: + b[i] == 0) +} + +// Check if the character is a line break, space, or NUL. +func is_spacez(b []byte, i int) bool { + //return is_space(b, i) || is_breakz(b, i) + return ( // is_space: + b[i] == ' ' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Check if the character is a line break, space, tab, or NUL. +func is_blankz(b []byte, i int) bool { + //return is_blank(b, i) || is_breakz(b, i) + return ( // is_blank: + b[i] == ' ' || b[i] == '\t' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Determine the width of the character. +func width(b byte) int { + // Don't replace these by a switch without first + // confirming that it is being inlined. + if b&0x80 == 0x00 { + return 1 + } + if b&0xE0 == 0xC0 { + return 2 + } + if b&0xF0 == 0xE0 { + return 3 + } + if b&0xF8 == 0xF0 { + return 4 + } + return 0 + +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/LICENSE b/upstream/vendor/go.yaml.in/yaml/v3/LICENSE new file mode 100644 index 0000000000..2683e4bb1f --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/LICENSE @@ -0,0 +1,50 @@ + +This project is covered by two different licenses: MIT and Apache. + +#### MIT License #### + +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original MIT license, with the additional +copyright staring in 2011 when the project was ported over: + + apic.go emitterc.go parserc.go readerc.go scannerc.go + writerc.go yamlh.go yamlprivateh.go + +Copyright (c) 2006-2010 Kirill Simonov +Copyright (c) 2006-2011 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +### Apache License ### + +All the remaining project files are covered by the Apache license: + +Copyright (c) 2011-2019 Canonical Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/upstream/vendor/go.yaml.in/yaml/v3/NOTICE b/upstream/vendor/go.yaml.in/yaml/v3/NOTICE new file mode 100644 index 0000000000..866d74a7ad --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/NOTICE @@ -0,0 +1,13 @@ +Copyright 2011-2016 Canonical Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/upstream/vendor/go.yaml.in/yaml/v3/README.md b/upstream/vendor/go.yaml.in/yaml/v3/README.md new file mode 100644 index 0000000000..15a85a6350 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/README.md @@ -0,0 +1,171 @@ +go.yaml.in/yaml +=============== + +YAML Support for the Go Language + + +## Introduction + +The `yaml` package enables [Go](https://go.dev/) programs to comfortably encode +and decode [YAML](https://yaml.org/) values. + +It was originally developed within [Canonical](https://www.canonical.com) as +part of the [juju](https://juju.ubuntu.com) project, and is based on a pure Go +port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) C library to +parse and generate YAML data quickly and reliably. + + +## Project Status + +This project started as a fork of the extremely popular [go-yaml]( +https://github.com/go-yaml/yaml/) +project, and is being maintained by the official [YAML organization]( +https://github.com/yaml/). + +The YAML team took over ongoing maintenance and development of the project after +discussion with go-yaml's author, @niemeyer, following his decision to +[label the project repository as "unmaintained"]( +https://github.com/go-yaml/yaml/blob/944c86a7d2/README.md) in April 2025. + +We have put together a team of dedicated maintainers including representatives +of go-yaml's most important downstream projects. + +We will strive to earn the trust of the various go-yaml forks to switch back to +this repository as their upstream. + +Please [contact us](https://cloud-native.slack.com/archives/C08PPAT8PS7) if you +would like to contribute or be involved. + + +## Compatibility + +The `yaml` package supports most of YAML 1.2, but preserves some behavior from +1.1 for backwards compatibility. + +Specifically, v3 of the `yaml` package: + +* Supports YAML 1.1 bools (`yes`/`no`, `on`/`off`) as long as they are being + decoded into a typed bool value. + Otherwise they behave as a string. + Booleans in YAML 1.2 are `true`/`false` only. +* Supports octals encoded and decoded as `0777` per YAML 1.1, rather than + `0o777` as specified in YAML 1.2, because most parsers still use the old + format. + Octals in the `0o777` format are supported though, so new files work. +* Does not support base-60 floats. + These are gone from YAML 1.2, and were actually never supported by this + package as it's clearly a poor choice. + + +## Installation and Usage + +The import path for the package is *go.yaml.in/yaml/v3*. + +To install it, run: + +```bash +go get go.yaml.in/yaml/v3 +``` + + +## API Documentation + +See: + + +## API Stability + +The package API for yaml v3 will remain stable as described in [gopkg.in]( +https://gopkg.in). + + +## Example + +```go +package main + +import ( + "fmt" + "log" + + "go.yaml.in/yaml/v3" +) + +var data = ` +a: Easy! +b: + c: 2 + d: [3, 4] +` + +// Note: struct fields must be public in order for unmarshal to +// correctly populate the data. +type T struct { + A string + B struct { + RenamedC int `yaml:"c"` + D []int `yaml:",flow"` + } +} + +func main() { + t := T{} + + err := yaml.Unmarshal([]byte(data), &t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t:\n%v\n\n", t) + + d, err := yaml.Marshal(&t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t dump:\n%s\n\n", string(d)) + + m := make(map[interface{}]interface{}) + + err = yaml.Unmarshal([]byte(data), &m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m:\n%v\n\n", m) + + d, err = yaml.Marshal(&m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m dump:\n%s\n\n", string(d)) +} +``` + +This example will generate the following output: + +``` +--- t: +{Easy! {2 [3 4]}} + +--- t dump: +a: Easy! +b: + c: 2 + d: [3, 4] + + +--- m: +map[a:Easy! b:map[c:2 d:[3 4]]] + +--- m dump: +a: Easy! +b: + c: 2 + d: + - 3 + - 4 +``` + + +## License + +The yaml package is licensed under the MIT and Apache License 2.0 licenses. +Please see the LICENSE file for details. diff --git a/upstream/vendor/go.yaml.in/yaml/v3/apic.go b/upstream/vendor/go.yaml.in/yaml/v3/apic.go new file mode 100644 index 0000000000..05fd305da1 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/apic.go @@ -0,0 +1,747 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// Copyright (c) 2006-2010 Kirill Simonov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package yaml + +import ( + "io" +) + +func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { + //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) + + // Check if we can move the queue at the beginning of the buffer. + if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { + if parser.tokens_head != len(parser.tokens) { + copy(parser.tokens, parser.tokens[parser.tokens_head:]) + } + parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] + parser.tokens_head = 0 + } + parser.tokens = append(parser.tokens, *token) + if pos < 0 { + return + } + copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) + parser.tokens[parser.tokens_head+pos] = *token +} + +// Create a new parser object. +func yaml_parser_initialize(parser *yaml_parser_t) bool { + *parser = yaml_parser_t{ + raw_buffer: make([]byte, 0, input_raw_buffer_size), + buffer: make([]byte, 0, input_buffer_size), + } + return true +} + +// Destroy a parser object. +func yaml_parser_delete(parser *yaml_parser_t) { + *parser = yaml_parser_t{} +} + +// String read handler. +func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + if parser.input_pos == len(parser.input) { + return 0, io.EOF + } + n = copy(buffer, parser.input[parser.input_pos:]) + parser.input_pos += n + return n, nil +} + +// Reader read handler. +func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + return parser.input_reader.Read(buffer) +} + +// Set a string input. +func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_string_read_handler + parser.input = input + parser.input_pos = 0 +} + +// Set a file input. +func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_reader_read_handler + parser.input_reader = r +} + +// Set the source encoding. +func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { + if parser.encoding != yaml_ANY_ENCODING { + panic("must set the encoding only once") + } + parser.encoding = encoding +} + +// Create a new emitter object. +func yaml_emitter_initialize(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{ + buffer: make([]byte, output_buffer_size), + raw_buffer: make([]byte, 0, output_raw_buffer_size), + states: make([]yaml_emitter_state_t, 0, initial_stack_size), + events: make([]yaml_event_t, 0, initial_queue_size), + best_width: -1, + } +} + +// Destroy an emitter object. +func yaml_emitter_delete(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{} +} + +// String write handler. +func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + *emitter.output_buffer = append(*emitter.output_buffer, buffer...) + return nil +} + +// yaml_writer_write_handler uses emitter.output_writer to write the +// emitted text. +func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + _, err := emitter.output_writer.Write(buffer) + return err +} + +// Set a string output. +func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_string_write_handler + emitter.output_buffer = output_buffer +} + +// Set a file output. +func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_writer_write_handler + emitter.output_writer = w +} + +// Set the output encoding. +func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { + if emitter.encoding != yaml_ANY_ENCODING { + panic("must set the output encoding only once") + } + emitter.encoding = encoding +} + +// Set the canonical output style. +func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { + emitter.canonical = canonical +} + +// Set the indentation increment. +func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { + if indent < 2 || indent > 9 { + indent = 2 + } + emitter.best_indent = indent +} + +// Set the preferred line width. +func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { + if width < 0 { + width = -1 + } + emitter.best_width = width +} + +// Set if unescaped non-ASCII characters are allowed. +func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { + emitter.unicode = unicode +} + +// Set the preferred line break character. +func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { + emitter.line_break = line_break +} + +///* +// * Destroy a token object. +// */ +// +//YAML_DECLARE(void) +//yaml_token_delete(yaml_token_t *token) +//{ +// assert(token); // Non-NULL token object expected. +// +// switch (token.type) +// { +// case YAML_TAG_DIRECTIVE_TOKEN: +// yaml_free(token.data.tag_directive.handle); +// yaml_free(token.data.tag_directive.prefix); +// break; +// +// case YAML_ALIAS_TOKEN: +// yaml_free(token.data.alias.value); +// break; +// +// case YAML_ANCHOR_TOKEN: +// yaml_free(token.data.anchor.value); +// break; +// +// case YAML_TAG_TOKEN: +// yaml_free(token.data.tag.handle); +// yaml_free(token.data.tag.suffix); +// break; +// +// case YAML_SCALAR_TOKEN: +// yaml_free(token.data.scalar.value); +// break; +// +// default: +// break; +// } +// +// memset(token, 0, sizeof(yaml_token_t)); +//} +// +///* +// * Check if a string is a valid UTF-8 sequence. +// * +// * Check 'reader.c' for more details on UTF-8 encoding. +// */ +// +//static int +//yaml_check_utf8(yaml_char_t *start, size_t length) +//{ +// yaml_char_t *end = start+length; +// yaml_char_t *pointer = start; +// +// while (pointer < end) { +// unsigned char octet; +// unsigned int width; +// unsigned int value; +// size_t k; +// +// octet = pointer[0]; +// width = (octet & 0x80) == 0x00 ? 1 : +// (octet & 0xE0) == 0xC0 ? 2 : +// (octet & 0xF0) == 0xE0 ? 3 : +// (octet & 0xF8) == 0xF0 ? 4 : 0; +// value = (octet & 0x80) == 0x00 ? octet & 0x7F : +// (octet & 0xE0) == 0xC0 ? octet & 0x1F : +// (octet & 0xF0) == 0xE0 ? octet & 0x0F : +// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; +// if (!width) return 0; +// if (pointer+width > end) return 0; +// for (k = 1; k < width; k ++) { +// octet = pointer[k]; +// if ((octet & 0xC0) != 0x80) return 0; +// value = (value << 6) + (octet & 0x3F); +// } +// if (!((width == 1) || +// (width == 2 && value >= 0x80) || +// (width == 3 && value >= 0x800) || +// (width == 4 && value >= 0x10000))) return 0; +// +// pointer += width; +// } +// +// return 1; +//} +// + +// Create STREAM-START. +func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + encoding: encoding, + } +} + +// Create STREAM-END. +func yaml_stream_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + } +} + +// Create DOCUMENT-START. +func yaml_document_start_event_initialize( + event *yaml_event_t, + version_directive *yaml_version_directive_t, + tag_directives []yaml_tag_directive_t, + implicit bool, +) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: implicit, + } +} + +// Create DOCUMENT-END. +func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + implicit: implicit, + } +} + +// Create ALIAS. +func yaml_alias_event_initialize(event *yaml_event_t, anchor []byte) bool { + *event = yaml_event_t{ + typ: yaml_ALIAS_EVENT, + anchor: anchor, + } + return true +} + +// Create SCALAR. +func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + anchor: anchor, + tag: tag, + value: value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-START. +func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-END. +func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + } + return true +} + +// Create MAPPING-START. +func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } +} + +// Create MAPPING-END. +func yaml_mapping_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + } +} + +// Destroy an event object. +func yaml_event_delete(event *yaml_event_t) { + *event = yaml_event_t{} +} + +///* +// * Create a document object. +// */ +// +//YAML_DECLARE(int) +//yaml_document_initialize(document *yaml_document_t, +// version_directive *yaml_version_directive_t, +// tag_directives_start *yaml_tag_directive_t, +// tag_directives_end *yaml_tag_directive_t, +// start_implicit int, end_implicit int) +//{ +// struct { +// error yaml_error_type_t +// } context +// struct { +// start *yaml_node_t +// end *yaml_node_t +// top *yaml_node_t +// } nodes = { NULL, NULL, NULL } +// version_directive_copy *yaml_version_directive_t = NULL +// struct { +// start *yaml_tag_directive_t +// end *yaml_tag_directive_t +// top *yaml_tag_directive_t +// } tag_directives_copy = { NULL, NULL, NULL } +// value yaml_tag_directive_t = { NULL, NULL } +// mark yaml_mark_t = { 0, 0, 0 } +// +// assert(document) // Non-NULL document object is expected. +// assert((tag_directives_start && tag_directives_end) || +// (tag_directives_start == tag_directives_end)) +// // Valid tag directives are expected. +// +// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error +// +// if (version_directive) { +// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) +// if (!version_directive_copy) goto error +// version_directive_copy.major = version_directive.major +// version_directive_copy.minor = version_directive.minor +// } +// +// if (tag_directives_start != tag_directives_end) { +// tag_directive *yaml_tag_directive_t +// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) +// goto error +// for (tag_directive = tag_directives_start +// tag_directive != tag_directives_end; tag_directive ++) { +// assert(tag_directive.handle) +// assert(tag_directive.prefix) +// if (!yaml_check_utf8(tag_directive.handle, +// strlen((char *)tag_directive.handle))) +// goto error +// if (!yaml_check_utf8(tag_directive.prefix, +// strlen((char *)tag_directive.prefix))) +// goto error +// value.handle = yaml_strdup(tag_directive.handle) +// value.prefix = yaml_strdup(tag_directive.prefix) +// if (!value.handle || !value.prefix) goto error +// if (!PUSH(&context, tag_directives_copy, value)) +// goto error +// value.handle = NULL +// value.prefix = NULL +// } +// } +// +// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, +// tag_directives_copy.start, tag_directives_copy.top, +// start_implicit, end_implicit, mark, mark) +// +// return 1 +// +//error: +// STACK_DEL(&context, nodes) +// yaml_free(version_directive_copy) +// while (!STACK_EMPTY(&context, tag_directives_copy)) { +// value yaml_tag_directive_t = POP(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// } +// STACK_DEL(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// +// return 0 +//} +// +///* +// * Destroy a document object. +// */ +// +//YAML_DECLARE(void) +//yaml_document_delete(document *yaml_document_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// tag_directive *yaml_tag_directive_t +// +// context.error = YAML_NO_ERROR // Eliminate a compiler warning. +// +// assert(document) // Non-NULL document object is expected. +// +// while (!STACK_EMPTY(&context, document.nodes)) { +// node yaml_node_t = POP(&context, document.nodes) +// yaml_free(node.tag) +// switch (node.type) { +// case YAML_SCALAR_NODE: +// yaml_free(node.data.scalar.value) +// break +// case YAML_SEQUENCE_NODE: +// STACK_DEL(&context, node.data.sequence.items) +// break +// case YAML_MAPPING_NODE: +// STACK_DEL(&context, node.data.mapping.pairs) +// break +// default: +// assert(0) // Should not happen. +// } +// } +// STACK_DEL(&context, document.nodes) +// +// yaml_free(document.version_directive) +// for (tag_directive = document.tag_directives.start +// tag_directive != document.tag_directives.end +// tag_directive++) { +// yaml_free(tag_directive.handle) +// yaml_free(tag_directive.prefix) +// } +// yaml_free(document.tag_directives.start) +// +// memset(document, 0, sizeof(yaml_document_t)) +//} +// +///** +// * Get a document node. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_node(document *yaml_document_t, index int) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (index > 0 && document.nodes.start + index <= document.nodes.top) { +// return document.nodes.start + index - 1 +// } +// return NULL +//} +// +///** +// * Get the root object. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_root_node(document *yaml_document_t) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (document.nodes.top != document.nodes.start) { +// return document.nodes.start +// } +// return NULL +//} +// +///* +// * Add a scalar node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_scalar(document *yaml_document_t, +// tag *yaml_char_t, value *yaml_char_t, length int, +// style yaml_scalar_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// value_copy *yaml_char_t = NULL +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// assert(value) // Non-NULL value is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (length < 0) { +// length = strlen((char *)value) +// } +// +// if (!yaml_check_utf8(value, length)) goto error +// value_copy = yaml_malloc(length+1) +// if (!value_copy) goto error +// memcpy(value_copy, value, length) +// value_copy[length] = '\0' +// +// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// yaml_free(tag_copy) +// yaml_free(value_copy) +// +// return 0 +//} +// +///* +// * Add a sequence node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_sequence(document *yaml_document_t, +// tag *yaml_char_t, style yaml_sequence_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_item_t +// end *yaml_node_item_t +// top *yaml_node_item_t +// } items = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error +// +// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, items) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Add a mapping node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_mapping(document *yaml_document_t, +// tag *yaml_char_t, style yaml_mapping_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_pair_t +// end *yaml_node_pair_t +// top *yaml_node_pair_t +// } pairs = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error +// +// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, pairs) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Append an item to a sequence node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_sequence_item(document *yaml_document_t, +// sequence int, item int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// assert(document) // Non-NULL document is required. +// assert(sequence > 0 +// && document.nodes.start + sequence <= document.nodes.top) +// // Valid sequence id is required. +// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) +// // A sequence node is required. +// assert(item > 0 && document.nodes.start + item <= document.nodes.top) +// // Valid item id is required. +// +// if (!PUSH(&context, +// document.nodes.start[sequence-1].data.sequence.items, item)) +// return 0 +// +// return 1 +//} +// +///* +// * Append a pair of a key and a value to a mapping node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_mapping_pair(document *yaml_document_t, +// mapping int, key int, value int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// pair yaml_node_pair_t +// +// assert(document) // Non-NULL document is required. +// assert(mapping > 0 +// && document.nodes.start + mapping <= document.nodes.top) +// // Valid mapping id is required. +// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) +// // A mapping node is required. +// assert(key > 0 && document.nodes.start + key <= document.nodes.top) +// // Valid key id is required. +// assert(value > 0 && document.nodes.start + value <= document.nodes.top) +// // Valid value id is required. +// +// pair.key = key +// pair.value = value +// +// if (!PUSH(&context, +// document.nodes.start[mapping-1].data.mapping.pairs, pair)) +// return 0 +// +// return 1 +//} +// +// diff --git a/upstream/vendor/go.yaml.in/yaml/v3/decode.go b/upstream/vendor/go.yaml.in/yaml/v3/decode.go new file mode 100644 index 0000000000..02e2b17bfe --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/decode.go @@ -0,0 +1,1018 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package yaml + +import ( + "encoding" + "encoding/base64" + "fmt" + "io" + "math" + "reflect" + "strconv" + "time" +) + +// ---------------------------------------------------------------------------- +// Parser, produces a node tree out of a libyaml event stream. + +type parser struct { + parser yaml_parser_t + event yaml_event_t + doc *Node + anchors map[string]*Node + doneInit bool + textless bool +} + +func newParser(b []byte) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + if len(b) == 0 { + b = []byte{'\n'} + } + yaml_parser_set_input_string(&p.parser, b) + return &p +} + +func newParserFromReader(r io.Reader) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + yaml_parser_set_input_reader(&p.parser, r) + return &p +} + +func (p *parser) init() { + if p.doneInit { + return + } + p.anchors = make(map[string]*Node) + p.expect(yaml_STREAM_START_EVENT) + p.doneInit = true +} + +func (p *parser) destroy() { + if p.event.typ != yaml_NO_EVENT { + yaml_event_delete(&p.event) + } + yaml_parser_delete(&p.parser) +} + +// expect consumes an event from the event stream and +// checks that it's of the expected type. +func (p *parser) expect(e yaml_event_type_t) { + if p.event.typ == yaml_NO_EVENT { + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } + } + if p.event.typ == yaml_STREAM_END_EVENT { + failf("attempted to go past the end of stream; corrupted value?") + } + if p.event.typ != e { + p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ) + p.fail() + } + yaml_event_delete(&p.event) + p.event.typ = yaml_NO_EVENT +} + +// peek peeks at the next event in the event stream, +// puts the results into p.event and returns the event type. +func (p *parser) peek() yaml_event_type_t { + if p.event.typ != yaml_NO_EVENT { + return p.event.typ + } + // It's curious choice from the underlying API to generally return a + // positive result on success, but on this case return true in an error + // scenario. This was the source of bugs in the past (issue #666). + if !yaml_parser_parse(&p.parser, &p.event) || p.parser.error != yaml_NO_ERROR { + p.fail() + } + return p.event.typ +} + +func (p *parser) fail() { + var where string + var line int + if p.parser.context_mark.line != 0 { + line = p.parser.context_mark.line + // Scanner errors don't iterate line before returning error + if p.parser.error == yaml_SCANNER_ERROR { + line++ + } + } else if p.parser.problem_mark.line != 0 { + line = p.parser.problem_mark.line + // Scanner errors don't iterate line before returning error + if p.parser.error == yaml_SCANNER_ERROR { + line++ + } + } + if line != 0 { + where = "line " + strconv.Itoa(line) + ": " + } + var msg string + if len(p.parser.problem) > 0 { + msg = p.parser.problem + } else { + msg = "unknown problem parsing YAML content" + } + failf("%s%s", where, msg) +} + +func (p *parser) anchor(n *Node, anchor []byte) { + if anchor != nil { + n.Anchor = string(anchor) + p.anchors[n.Anchor] = n + } +} + +func (p *parser) parse() *Node { + p.init() + switch p.peek() { + case yaml_SCALAR_EVENT: + return p.scalar() + case yaml_ALIAS_EVENT: + return p.alias() + case yaml_MAPPING_START_EVENT: + return p.mapping() + case yaml_SEQUENCE_START_EVENT: + return p.sequence() + case yaml_DOCUMENT_START_EVENT: + return p.document() + case yaml_STREAM_END_EVENT: + // Happens when attempting to decode an empty buffer. + return nil + case yaml_TAIL_COMMENT_EVENT: + panic("internal error: unexpected tail comment event (please report)") + default: + panic("internal error: attempted to parse unknown event (please report): " + p.event.typ.String()) + } +} + +func (p *parser) node(kind Kind, defaultTag, tag, value string) *Node { + var style Style + if tag != "" && tag != "!" { + tag = shortTag(tag) + style = TaggedStyle + } else if defaultTag != "" { + tag = defaultTag + } else if kind == ScalarNode { + tag, _ = resolve("", value) + } + n := &Node{ + Kind: kind, + Tag: tag, + Value: value, + Style: style, + } + if !p.textless { + n.Line = p.event.start_mark.line + 1 + n.Column = p.event.start_mark.column + 1 + n.HeadComment = string(p.event.head_comment) + n.LineComment = string(p.event.line_comment) + n.FootComment = string(p.event.foot_comment) + } + return n +} + +func (p *parser) parseChild(parent *Node) *Node { + child := p.parse() + parent.Content = append(parent.Content, child) + return child +} + +func (p *parser) document() *Node { + n := p.node(DocumentNode, "", "", "") + p.doc = n + p.expect(yaml_DOCUMENT_START_EVENT) + p.parseChild(n) + if p.peek() == yaml_DOCUMENT_END_EVENT { + n.FootComment = string(p.event.foot_comment) + } + p.expect(yaml_DOCUMENT_END_EVENT) + return n +} + +func (p *parser) alias() *Node { + n := p.node(AliasNode, "", "", string(p.event.anchor)) + n.Alias = p.anchors[n.Value] + if n.Alias == nil { + failf("unknown anchor '%s' referenced", n.Value) + } + p.expect(yaml_ALIAS_EVENT) + return n +} + +func (p *parser) scalar() *Node { + var parsedStyle = p.event.scalar_style() + var nodeStyle Style + switch { + case parsedStyle&yaml_DOUBLE_QUOTED_SCALAR_STYLE != 0: + nodeStyle = DoubleQuotedStyle + case parsedStyle&yaml_SINGLE_QUOTED_SCALAR_STYLE != 0: + nodeStyle = SingleQuotedStyle + case parsedStyle&yaml_LITERAL_SCALAR_STYLE != 0: + nodeStyle = LiteralStyle + case parsedStyle&yaml_FOLDED_SCALAR_STYLE != 0: + nodeStyle = FoldedStyle + } + var nodeValue = string(p.event.value) + var nodeTag = string(p.event.tag) + var defaultTag string + if nodeStyle == 0 { + if nodeValue == "<<" { + defaultTag = mergeTag + } + } else { + defaultTag = strTag + } + n := p.node(ScalarNode, defaultTag, nodeTag, nodeValue) + n.Style |= nodeStyle + p.anchor(n, p.event.anchor) + p.expect(yaml_SCALAR_EVENT) + return n +} + +func (p *parser) sequence() *Node { + n := p.node(SequenceNode, seqTag, string(p.event.tag), "") + if p.event.sequence_style()&yaml_FLOW_SEQUENCE_STYLE != 0 { + n.Style |= FlowStyle + } + p.anchor(n, p.event.anchor) + p.expect(yaml_SEQUENCE_START_EVENT) + for p.peek() != yaml_SEQUENCE_END_EVENT { + p.parseChild(n) + } + n.LineComment = string(p.event.line_comment) + n.FootComment = string(p.event.foot_comment) + p.expect(yaml_SEQUENCE_END_EVENT) + return n +} + +func (p *parser) mapping() *Node { + n := p.node(MappingNode, mapTag, string(p.event.tag), "") + block := true + if p.event.mapping_style()&yaml_FLOW_MAPPING_STYLE != 0 { + block = false + n.Style |= FlowStyle + } + p.anchor(n, p.event.anchor) + p.expect(yaml_MAPPING_START_EVENT) + for p.peek() != yaml_MAPPING_END_EVENT { + k := p.parseChild(n) + if block && k.FootComment != "" { + // Must be a foot comment for the prior value when being dedented. + if len(n.Content) > 2 { + n.Content[len(n.Content)-3].FootComment = k.FootComment + k.FootComment = "" + } + } + v := p.parseChild(n) + if k.FootComment == "" && v.FootComment != "" { + k.FootComment = v.FootComment + v.FootComment = "" + } + if p.peek() == yaml_TAIL_COMMENT_EVENT { + if k.FootComment == "" { + k.FootComment = string(p.event.foot_comment) + } + p.expect(yaml_TAIL_COMMENT_EVENT) + } + } + n.LineComment = string(p.event.line_comment) + n.FootComment = string(p.event.foot_comment) + if n.Style&FlowStyle == 0 && n.FootComment != "" && len(n.Content) > 1 { + n.Content[len(n.Content)-2].FootComment = n.FootComment + n.FootComment = "" + } + p.expect(yaml_MAPPING_END_EVENT) + return n +} + +// ---------------------------------------------------------------------------- +// Decoder, unmarshals a node into a provided value. + +type decoder struct { + doc *Node + aliases map[*Node]bool + terrors []string + + stringMapType reflect.Type + generalMapType reflect.Type + + knownFields bool + uniqueKeys bool + decodeCount int + aliasCount int + aliasDepth int + + mergedFields map[interface{}]bool +} + +var ( + nodeType = reflect.TypeOf(Node{}) + durationType = reflect.TypeOf(time.Duration(0)) + stringMapType = reflect.TypeOf(map[string]interface{}{}) + generalMapType = reflect.TypeOf(map[interface{}]interface{}{}) + ifaceType = generalMapType.Elem() + timeType = reflect.TypeOf(time.Time{}) + ptrTimeType = reflect.TypeOf(&time.Time{}) +) + +func newDecoder() *decoder { + d := &decoder{ + stringMapType: stringMapType, + generalMapType: generalMapType, + uniqueKeys: true, + } + d.aliases = make(map[*Node]bool) + return d +} + +func (d *decoder) terror(n *Node, tag string, out reflect.Value) { + if n.Tag != "" { + tag = n.Tag + } + value := n.Value + if tag != seqTag && tag != mapTag { + if len(value) > 10 { + value = " `" + value[:7] + "...`" + } else { + value = " `" + value + "`" + } + } + d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.Line, shortTag(tag), value, out.Type())) +} + +func (d *decoder) callUnmarshaler(n *Node, u Unmarshaler) (good bool) { + err := u.UnmarshalYAML(n) + if e, ok := err.(*TypeError); ok { + d.terrors = append(d.terrors, e.Errors...) + return false + } + if err != nil { + fail(err) + } + return true +} + +func (d *decoder) callObsoleteUnmarshaler(n *Node, u obsoleteUnmarshaler) (good bool) { + terrlen := len(d.terrors) + err := u.UnmarshalYAML(func(v interface{}) (err error) { + defer handleErr(&err) + d.unmarshal(n, reflect.ValueOf(v)) + if len(d.terrors) > terrlen { + issues := d.terrors[terrlen:] + d.terrors = d.terrors[:terrlen] + return &TypeError{issues} + } + return nil + }) + if e, ok := err.(*TypeError); ok { + d.terrors = append(d.terrors, e.Errors...) + return false + } + if err != nil { + fail(err) + } + return true +} + +// d.prepare initializes and dereferences pointers and calls UnmarshalYAML +// if a value is found to implement it. +// It returns the initialized and dereferenced out value, whether +// unmarshalling was already done by UnmarshalYAML, and if so whether +// its types unmarshalled appropriately. +// +// If n holds a null value, prepare returns before doing anything. +func (d *decoder) prepare(n *Node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { + if n.ShortTag() == nullTag { + return out, false, false + } + again := true + for again { + again = false + if out.Kind() == reflect.Ptr { + if out.IsNil() { + out.Set(reflect.New(out.Type().Elem())) + } + out = out.Elem() + again = true + } + if out.CanAddr() { + outi := out.Addr().Interface() + if u, ok := outi.(Unmarshaler); ok { + good = d.callUnmarshaler(n, u) + return out, true, good + } + if u, ok := outi.(obsoleteUnmarshaler); ok { + good = d.callObsoleteUnmarshaler(n, u) + return out, true, good + } + } + } + return out, false, false +} + +func (d *decoder) fieldByIndex(n *Node, v reflect.Value, index []int) (field reflect.Value) { + if n.ShortTag() == nullTag { + return reflect.Value{} + } + for _, num := range index { + for { + if v.Kind() == reflect.Ptr { + if v.IsNil() { + v.Set(reflect.New(v.Type().Elem())) + } + v = v.Elem() + continue + } + break + } + v = v.Field(num) + } + return v +} + +const ( + // 400,000 decode operations is ~500kb of dense object declarations, or + // ~5kb of dense object declarations with 10000% alias expansion + alias_ratio_range_low = 400000 + + // 4,000,000 decode operations is ~5MB of dense object declarations, or + // ~4.5MB of dense object declarations with 10% alias expansion + alias_ratio_range_high = 4000000 + + // alias_ratio_range is the range over which we scale allowed alias ratios + alias_ratio_range = float64(alias_ratio_range_high - alias_ratio_range_low) +) + +func allowedAliasRatio(decodeCount int) float64 { + switch { + case decodeCount <= alias_ratio_range_low: + // allow 99% to come from alias expansion for small-to-medium documents + return 0.99 + case decodeCount >= alias_ratio_range_high: + // allow 10% to come from alias expansion for very large documents + return 0.10 + default: + // scale smoothly from 99% down to 10% over the range. + // this maps to 396,000 - 400,000 allowed alias-driven decodes over the range. + // 400,000 decode operations is ~100MB of allocations in worst-case scenarios (single-item maps). + return 0.99 - 0.89*(float64(decodeCount-alias_ratio_range_low)/alias_ratio_range) + } +} + +func (d *decoder) unmarshal(n *Node, out reflect.Value) (good bool) { + d.decodeCount++ + if d.aliasDepth > 0 { + d.aliasCount++ + } + if d.aliasCount > 100 && d.decodeCount > 1000 && float64(d.aliasCount)/float64(d.decodeCount) > allowedAliasRatio(d.decodeCount) { + failf("document contains excessive aliasing") + } + if out.Type() == nodeType { + out.Set(reflect.ValueOf(n).Elem()) + return true + } + switch n.Kind { + case DocumentNode: + return d.document(n, out) + case AliasNode: + return d.alias(n, out) + } + out, unmarshaled, good := d.prepare(n, out) + if unmarshaled { + return good + } + switch n.Kind { + case ScalarNode: + good = d.scalar(n, out) + case MappingNode: + good = d.mapping(n, out) + case SequenceNode: + good = d.sequence(n, out) + case 0: + if n.IsZero() { + return d.null(out) + } + fallthrough + default: + failf("cannot decode node with unknown kind %d", n.Kind) + } + return good +} + +func (d *decoder) document(n *Node, out reflect.Value) (good bool) { + if len(n.Content) == 1 { + d.doc = n + d.unmarshal(n.Content[0], out) + return true + } + return false +} + +func (d *decoder) alias(n *Node, out reflect.Value) (good bool) { + if d.aliases[n] { + // TODO this could actually be allowed in some circumstances. + failf("anchor '%s' value contains itself", n.Value) + } + d.aliases[n] = true + d.aliasDepth++ + good = d.unmarshal(n.Alias, out) + d.aliasDepth-- + delete(d.aliases, n) + return good +} + +var zeroValue reflect.Value + +func resetMap(out reflect.Value) { + for _, k := range out.MapKeys() { + out.SetMapIndex(k, zeroValue) + } +} + +func (d *decoder) null(out reflect.Value) bool { + if out.CanAddr() { + switch out.Kind() { + case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: + out.Set(reflect.Zero(out.Type())) + return true + } + } + return false +} + +func (d *decoder) scalar(n *Node, out reflect.Value) bool { + var tag string + var resolved interface{} + if n.indicatedString() { + tag = strTag + resolved = n.Value + } else { + tag, resolved = resolve(n.Tag, n.Value) + if tag == binaryTag { + data, err := base64.StdEncoding.DecodeString(resolved.(string)) + if err != nil { + failf("!!binary value contains invalid base64 data") + } + resolved = string(data) + } + } + if resolved == nil { + return d.null(out) + } + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + // We've resolved to exactly the type we want, so use that. + out.Set(resolvedv) + return true + } + // Perhaps we can use the value as a TextUnmarshaler to + // set its value. + if out.CanAddr() { + u, ok := out.Addr().Interface().(encoding.TextUnmarshaler) + if ok { + var text []byte + if tag == binaryTag { + text = []byte(resolved.(string)) + } else { + // We let any value be unmarshaled into TextUnmarshaler. + // That might be more lax than we'd like, but the + // TextUnmarshaler itself should bowl out any dubious values. + text = []byte(n.Value) + } + err := u.UnmarshalText(text) + if err != nil { + fail(err) + } + return true + } + } + switch out.Kind() { + case reflect.String: + if tag == binaryTag { + out.SetString(resolved.(string)) + return true + } + out.SetString(n.Value) + return true + case reflect.Interface: + out.Set(reflect.ValueOf(resolved)) + return true + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + // This used to work in v2, but it's very unfriendly. + isDuration := out.Type() == durationType + + switch resolved := resolved.(type) { + case int: + if !isDuration && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case int64: + if !isDuration && !out.OverflowInt(resolved) { + out.SetInt(resolved) + return true + } + case uint64: + if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case float64: + if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case string: + if out.Type() == durationType { + d, err := time.ParseDuration(resolved) + if err == nil { + out.SetInt(int64(d)) + return true + } + } + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + switch resolved := resolved.(type) { + case int: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case int64: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case uint64: + if !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case float64: + if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + } + case reflect.Bool: + switch resolved := resolved.(type) { + case bool: + out.SetBool(resolved) + return true + case string: + // This offers some compatibility with the 1.1 spec (https://yaml.org/type/bool.html). + // It only works if explicitly attempting to unmarshal into a typed bool value. + switch resolved { + case "y", "Y", "yes", "Yes", "YES", "on", "On", "ON": + out.SetBool(true) + return true + case "n", "N", "no", "No", "NO", "off", "Off", "OFF": + out.SetBool(false) + return true + } + } + case reflect.Float32, reflect.Float64: + switch resolved := resolved.(type) { + case int: + out.SetFloat(float64(resolved)) + return true + case int64: + out.SetFloat(float64(resolved)) + return true + case uint64: + out.SetFloat(float64(resolved)) + return true + case float64: + out.SetFloat(resolved) + return true + } + case reflect.Struct: + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + out.Set(resolvedv) + return true + } + case reflect.Ptr: + panic("yaml internal error: please report the issue") + } + d.terror(n, tag, out) + return false +} + +func settableValueOf(i interface{}) reflect.Value { + v := reflect.ValueOf(i) + sv := reflect.New(v.Type()).Elem() + sv.Set(v) + return sv +} + +func (d *decoder) sequence(n *Node, out reflect.Value) (good bool) { + l := len(n.Content) + + var iface reflect.Value + switch out.Kind() { + case reflect.Slice: + out.Set(reflect.MakeSlice(out.Type(), l, l)) + case reflect.Array: + if l != out.Len() { + failf("invalid array: want %d elements but got %d", out.Len(), l) + } + case reflect.Interface: + // No type hints. Will have to use a generic sequence. + iface = out + out = settableValueOf(make([]interface{}, l)) + default: + d.terror(n, seqTag, out) + return false + } + et := out.Type().Elem() + + j := 0 + for i := 0; i < l; i++ { + e := reflect.New(et).Elem() + if ok := d.unmarshal(n.Content[i], e); ok { + out.Index(j).Set(e) + j++ + } + } + if out.Kind() != reflect.Array { + out.Set(out.Slice(0, j)) + } + if iface.IsValid() { + iface.Set(out) + } + return true +} + +func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { + l := len(n.Content) + if d.uniqueKeys { + nerrs := len(d.terrors) + for i := 0; i < l; i += 2 { + ni := n.Content[i] + for j := i + 2; j < l; j += 2 { + nj := n.Content[j] + if ni.Kind == nj.Kind && ni.Value == nj.Value { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: mapping key %#v already defined at line %d", nj.Line, nj.Value, ni.Line)) + } + } + } + if len(d.terrors) > nerrs { + return false + } + } + switch out.Kind() { + case reflect.Struct: + return d.mappingStruct(n, out) + case reflect.Map: + // okay + case reflect.Interface: + iface := out + if isStringMap(n) { + out = reflect.MakeMap(d.stringMapType) + } else { + out = reflect.MakeMap(d.generalMapType) + } + iface.Set(out) + default: + d.terror(n, mapTag, out) + return false + } + + outt := out.Type() + kt := outt.Key() + et := outt.Elem() + + stringMapType := d.stringMapType + generalMapType := d.generalMapType + if outt.Elem() == ifaceType { + if outt.Key().Kind() == reflect.String { + d.stringMapType = outt + } else if outt.Key() == ifaceType { + d.generalMapType = outt + } + } + + mergedFields := d.mergedFields + d.mergedFields = nil + + var mergeNode *Node + + mapIsNew := false + if out.IsNil() { + out.Set(reflect.MakeMap(outt)) + mapIsNew = true + } + for i := 0; i < l; i += 2 { + if isMerge(n.Content[i]) { + mergeNode = n.Content[i+1] + continue + } + k := reflect.New(kt).Elem() + if d.unmarshal(n.Content[i], k) { + if mergedFields != nil { + ki := k.Interface() + if d.getPossiblyUnhashableKey(mergedFields, ki) { + continue + } + d.setPossiblyUnhashableKey(mergedFields, ki, true) + } + kkind := k.Kind() + if kkind == reflect.Interface { + kkind = k.Elem().Kind() + } + if kkind == reflect.Map || kkind == reflect.Slice { + failf("invalid map key: %#v", k.Interface()) + } + e := reflect.New(et).Elem() + if d.unmarshal(n.Content[i+1], e) || n.Content[i+1].ShortTag() == nullTag && (mapIsNew || !out.MapIndex(k).IsValid()) { + out.SetMapIndex(k, e) + } + } + } + + d.mergedFields = mergedFields + if mergeNode != nil { + d.merge(n, mergeNode, out) + } + + d.stringMapType = stringMapType + d.generalMapType = generalMapType + return true +} + +func isStringMap(n *Node) bool { + if n.Kind != MappingNode { + return false + } + l := len(n.Content) + for i := 0; i < l; i += 2 { + shortTag := n.Content[i].ShortTag() + if shortTag != strTag && shortTag != mergeTag { + return false + } + } + return true +} + +func (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) { + sinfo, err := getStructInfo(out.Type()) + if err != nil { + panic(err) + } + + var inlineMap reflect.Value + var elemType reflect.Type + if sinfo.InlineMap != -1 { + inlineMap = out.Field(sinfo.InlineMap) + elemType = inlineMap.Type().Elem() + } + + for _, index := range sinfo.InlineUnmarshalers { + field := d.fieldByIndex(n, out, index) + d.prepare(n, field) + } + + mergedFields := d.mergedFields + d.mergedFields = nil + var mergeNode *Node + var doneFields []bool + if d.uniqueKeys { + doneFields = make([]bool, len(sinfo.FieldsList)) + } + name := settableValueOf("") + l := len(n.Content) + for i := 0; i < l; i += 2 { + ni := n.Content[i] + if isMerge(ni) { + mergeNode = n.Content[i+1] + continue + } + if !d.unmarshal(ni, name) { + continue + } + sname := name.String() + if mergedFields != nil { + if mergedFields[sname] { + continue + } + mergedFields[sname] = true + } + if info, ok := sinfo.FieldsMap[sname]; ok { + if d.uniqueKeys { + if doneFields[info.Id] { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.Line, name.String(), out.Type())) + continue + } + doneFields[info.Id] = true + } + var field reflect.Value + if info.Inline == nil { + field = out.Field(info.Num) + } else { + field = d.fieldByIndex(n, out, info.Inline) + } + d.unmarshal(n.Content[i+1], field) + } else if sinfo.InlineMap != -1 { + if inlineMap.IsNil() { + inlineMap.Set(reflect.MakeMap(inlineMap.Type())) + } + value := reflect.New(elemType).Elem() + d.unmarshal(n.Content[i+1], value) + inlineMap.SetMapIndex(name, value) + } else if d.knownFields { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.Line, name.String(), out.Type())) + } + } + + d.mergedFields = mergedFields + if mergeNode != nil { + d.merge(n, mergeNode, out) + } + return true +} + +func failWantMap() { + failf("map merge requires map or sequence of maps as the value") +} + +func (d *decoder) setPossiblyUnhashableKey(m map[interface{}]bool, key interface{}, value bool) { + defer func() { + if err := recover(); err != nil { + failf("%v", err) + } + }() + m[key] = value +} + +func (d *decoder) getPossiblyUnhashableKey(m map[interface{}]bool, key interface{}) bool { + defer func() { + if err := recover(); err != nil { + failf("%v", err) + } + }() + return m[key] +} + +func (d *decoder) merge(parent *Node, merge *Node, out reflect.Value) { + mergedFields := d.mergedFields + if mergedFields == nil { + d.mergedFields = make(map[interface{}]bool) + for i := 0; i < len(parent.Content); i += 2 { + k := reflect.New(ifaceType).Elem() + if d.unmarshal(parent.Content[i], k) { + d.setPossiblyUnhashableKey(d.mergedFields, k.Interface(), true) + } + } + } + + switch merge.Kind { + case MappingNode: + d.unmarshal(merge, out) + case AliasNode: + if merge.Alias != nil && merge.Alias.Kind != MappingNode { + failWantMap() + } + d.unmarshal(merge, out) + case SequenceNode: + for i := 0; i < len(merge.Content); i++ { + ni := merge.Content[i] + if ni.Kind == AliasNode { + if ni.Alias != nil && ni.Alias.Kind != MappingNode { + failWantMap() + } + } else if ni.Kind != MappingNode { + failWantMap() + } + d.unmarshal(ni, out) + } + default: + failWantMap() + } + + d.mergedFields = mergedFields +} + +func isMerge(n *Node) bool { + return n.Kind == ScalarNode && n.Value == "<<" && (n.Tag == "" || n.Tag == "!" || shortTag(n.Tag) == mergeTag) +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/emitterc.go b/upstream/vendor/go.yaml.in/yaml/v3/emitterc.go new file mode 100644 index 0000000000..ab4e03ba72 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/emitterc.go @@ -0,0 +1,2054 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// Copyright (c) 2006-2010 Kirill Simonov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package yaml + +import ( + "bytes" + "fmt" +) + +// Flush the buffer if needed. +func flush(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) { + return yaml_emitter_flush(emitter) + } + return true +} + +// Put a character to the output buffer. +func put(emitter *yaml_emitter_t, value byte) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + emitter.buffer[emitter.buffer_pos] = value + emitter.buffer_pos++ + emitter.column++ + return true +} + +// Put a line break to the output buffer. +func put_break(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + switch emitter.line_break { + case yaml_CR_BREAK: + emitter.buffer[emitter.buffer_pos] = '\r' + emitter.buffer_pos += 1 + case yaml_LN_BREAK: + emitter.buffer[emitter.buffer_pos] = '\n' + emitter.buffer_pos += 1 + case yaml_CRLN_BREAK: + emitter.buffer[emitter.buffer_pos+0] = '\r' + emitter.buffer[emitter.buffer_pos+1] = '\n' + emitter.buffer_pos += 2 + default: + panic("unknown line break setting") + } + if emitter.column == 0 { + emitter.space_above = true + } + emitter.column = 0 + emitter.line++ + // [Go] Do this here and below and drop from everywhere else (see commented lines). + emitter.indention = true + return true +} + +// Copy a character from a string into buffer. +func write(emitter *yaml_emitter_t, s []byte, i *int) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + p := emitter.buffer_pos + w := width(s[*i]) + switch w { + case 4: + emitter.buffer[p+3] = s[*i+3] + fallthrough + case 3: + emitter.buffer[p+2] = s[*i+2] + fallthrough + case 2: + emitter.buffer[p+1] = s[*i+1] + fallthrough + case 1: + emitter.buffer[p+0] = s[*i+0] + default: + panic("unknown character width") + } + emitter.column++ + emitter.buffer_pos += w + *i += w + return true +} + +// Write a whole string into buffer. +func write_all(emitter *yaml_emitter_t, s []byte) bool { + for i := 0; i < len(s); { + if !write(emitter, s, &i) { + return false + } + } + return true +} + +// Copy a line break character from a string into buffer. +func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { + if s[*i] == '\n' { + if !put_break(emitter) { + return false + } + *i++ + } else { + if !write(emitter, s, i) { + return false + } + if emitter.column == 0 { + emitter.space_above = true + } + emitter.column = 0 + emitter.line++ + // [Go] Do this here and above and drop from everywhere else (see commented lines). + emitter.indention = true + } + return true +} + +// Set an emitter error and return false. +func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_EMITTER_ERROR + emitter.problem = problem + return false +} + +// Emit an event. +func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.events = append(emitter.events, *event) + for !yaml_emitter_need_more_events(emitter) { + event := &emitter.events[emitter.events_head] + if !yaml_emitter_analyze_event(emitter, event) { + return false + } + if !yaml_emitter_state_machine(emitter, event) { + return false + } + yaml_event_delete(event) + emitter.events_head++ + } + return true +} + +// Check if we need to accumulate more events before emitting. +// +// We accumulate extra +// - 1 event for DOCUMENT-START +// - 2 events for SEQUENCE-START +// - 3 events for MAPPING-START +func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { + if emitter.events_head == len(emitter.events) { + return true + } + var accumulate int + switch emitter.events[emitter.events_head].typ { + case yaml_DOCUMENT_START_EVENT: + accumulate = 1 + break + case yaml_SEQUENCE_START_EVENT: + accumulate = 2 + break + case yaml_MAPPING_START_EVENT: + accumulate = 3 + break + default: + return false + } + if len(emitter.events)-emitter.events_head > accumulate { + return false + } + var level int + for i := emitter.events_head; i < len(emitter.events); i++ { + switch emitter.events[i].typ { + case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: + level++ + case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: + level-- + } + if level == 0 { + return false + } + } + return true +} + +// Append a directive to the directives stack. +func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { + for i := 0; i < len(emitter.tag_directives); i++ { + if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") + } + } + + // [Go] Do we actually need to copy this given garbage collection + // and the lack of deallocating destructors? + tag_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(tag_copy.handle, value.handle) + copy(tag_copy.prefix, value.prefix) + emitter.tag_directives = append(emitter.tag_directives, tag_copy) + return true +} + +// Increase the indentation level. +func yaml_emitter_increase_indent_compact(emitter *yaml_emitter_t, flow, indentless bool, compact_seq bool) bool { + emitter.indents = append(emitter.indents, emitter.indent) + if emitter.indent < 0 { + if flow { + emitter.indent = emitter.best_indent + } else { + emitter.indent = 0 + } + } else if !indentless { + // [Go] This was changed so that indentations are more regular. + if emitter.states[len(emitter.states)-1] == yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE { + // The first indent inside a sequence will just skip the "- " indicator. + emitter.indent += 2 + } else { + // Everything else aligns to the chosen indentation. + emitter.indent = emitter.best_indent * ((emitter.indent + emitter.best_indent) / emitter.best_indent) + if compact_seq { + // The value compact_seq passed in is almost always set to `false` when this function is called, + // except when we are dealing with sequence nodes. So this gets triggered to subtract 2 only when we + // are increasing the indent to account for sequence nodes, which will be correct because we need to + // subtract 2 to account for the - at the beginning of the sequence node. + emitter.indent = emitter.indent - 2 + } + } + } + return true +} + +// State dispatcher. +func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { + switch emitter.state { + default: + case yaml_EMIT_STREAM_START_STATE: + return yaml_emitter_emit_stream_start(emitter, event) + + case yaml_EMIT_FIRST_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, true) + + case yaml_EMIT_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, false) + + case yaml_EMIT_DOCUMENT_CONTENT_STATE: + return yaml_emitter_emit_document_content(emitter, event) + + case yaml_EMIT_DOCUMENT_END_STATE: + return yaml_emitter_emit_document_end(emitter, event) + + case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, true, false) + + case yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, false, true) + + case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, false, false) + + case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, true, false) + + case yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, false, true) + + case yaml_EMIT_FLOW_MAPPING_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, false, false) + + case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, false) + + case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, true) + + case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, false) + + case yaml_EMIT_END_STATE: + return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") + } + panic("invalid emitter state") +} + +// Expect STREAM-START. +func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_STREAM_START_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") + } + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = event.encoding + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = yaml_UTF8_ENCODING + } + } + if emitter.best_indent < 2 || emitter.best_indent > 9 { + emitter.best_indent = 2 + } + if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { + emitter.best_width = 80 + } + if emitter.best_width < 0 { + emitter.best_width = 1<<31 - 1 + } + if emitter.line_break == yaml_ANY_BREAK { + emitter.line_break = yaml_LN_BREAK + } + + emitter.indent = -1 + emitter.line = 0 + emitter.column = 0 + emitter.whitespace = true + emitter.indention = true + emitter.space_above = true + emitter.foot_indent = -1 + + if emitter.encoding != yaml_UTF8_ENCODING { + if !yaml_emitter_write_bom(emitter) { + return false + } + } + emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE + return true +} + +// Expect DOCUMENT-START or STREAM-END. +func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + + if event.typ == yaml_DOCUMENT_START_EVENT { + + if event.version_directive != nil { + if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { + return false + } + } + + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { + return false + } + if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { + return false + } + } + + for i := 0; i < len(default_tag_directives); i++ { + tag_directive := &default_tag_directives[i] + if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { + return false + } + } + + implicit := event.implicit + if !first || emitter.canonical { + implicit = false + } + + if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if event.version_directive != nil { + implicit = false + if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if len(event.tag_directives) > 0 { + implicit = false + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { + return false + } + if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + if yaml_emitter_check_empty_document(emitter) { + implicit = false + } + if !implicit { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { + return false + } + if emitter.canonical || true { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + if len(emitter.head_comment) > 0 { + if !yaml_emitter_process_head_comment(emitter) { + return false + } + if !put_break(emitter) { + return false + } + } + + emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE + return true + } + + if event.typ == yaml_STREAM_END_EVENT { + if emitter.open_ended { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_END_STATE + return true + } + + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") +} + +// yaml_emitter_increase_indent preserves the original signature and delegates to +// yaml_emitter_increase_indent_compact without compact-sequence indentation +func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { + return yaml_emitter_increase_indent_compact(emitter, flow, indentless, false) +} + +// yaml_emitter_process_line_comment preserves the original signature and delegates to +// yaml_emitter_process_line_comment_linebreak passing false for linebreak +func yaml_emitter_process_line_comment(emitter *yaml_emitter_t) bool { + return yaml_emitter_process_line_comment_linebreak(emitter, false) +} + +// Expect the root node. +func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) + + if !yaml_emitter_process_head_comment(emitter) { + return false + } + if !yaml_emitter_emit_node(emitter, event, true, false, false, false) { + return false + } + if !yaml_emitter_process_line_comment(emitter) { + return false + } + if !yaml_emitter_process_foot_comment(emitter) { + return false + } + return true +} + +// Expect DOCUMENT-END. +func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_DOCUMENT_END_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") + } + // [Go] Force document foot separation. + emitter.foot_indent = 0 + if !yaml_emitter_process_foot_comment(emitter) { + return false + } + emitter.foot_indent = -1 + if !yaml_emitter_write_indent(emitter) { + return false + } + if !event.implicit { + // [Go] Allocate the slice elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_DOCUMENT_START_STATE + emitter.tag_directives = emitter.tag_directives[:0] + return true +} + +// Expect a flow item node. +func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_SEQUENCE_END_EVENT { + if emitter.canonical && !first && !trail { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.column == 0 || emitter.canonical && !first { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { + return false + } + if !yaml_emitter_process_line_comment(emitter) { + return false + } + if !yaml_emitter_process_foot_comment(emitter) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + + return true + } + + if !first && !trail { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + + if !yaml_emitter_process_head_comment(emitter) { + return false + } + if emitter.column == 0 { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE) + } else { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) + } + if !yaml_emitter_emit_node(emitter, event, false, true, false, false) { + return false + } + if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + if !yaml_emitter_process_line_comment(emitter) { + return false + } + if !yaml_emitter_process_foot_comment(emitter) { + return false + } + return true +} + +// Expect a flow key node. +func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_MAPPING_END_EVENT { + if (emitter.canonical || len(emitter.head_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0) && !first && !trail { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + if !yaml_emitter_process_head_comment(emitter) { + return false + } + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { + return false + } + if !yaml_emitter_process_line_comment(emitter) { + return false + } + if !yaml_emitter_process_foot_comment(emitter) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + + if !first && !trail { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + + if !yaml_emitter_process_head_comment(emitter) { + return false + } + + if emitter.column == 0 { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a flow value node. +func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { + return false + } + } + if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE) + } else { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) + } + if !yaml_emitter_emit_node(emitter, event, false, false, true, false) { + return false + } + if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + if !yaml_emitter_process_line_comment(emitter) { + return false + } + if !yaml_emitter_process_foot_comment(emitter) { + return false + } + return true +} + +// Expect a block item node. +func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + // emitter.mapping context tells us if we are currently in a mapping context. + // emiiter.column tells us which column we are in in the yaml output. 0 is the first char of the column. + // emitter.indentation tells us if the last character was an indentation character. + // emitter.compact_sequence_indent tells us if '- ' is considered part of the indentation for sequence elements. + // So, `seq` means that we are in a mapping context, and we are either at the first char of the column or + // the last character was not an indentation character, and we consider '- ' part of the indentation + // for sequence elements. + seq := emitter.mapping_context && (emitter.column == 0 || !emitter.indention) && + emitter.compact_sequence_indent + if !yaml_emitter_increase_indent_compact(emitter, false, false, seq) { + return false + } + } + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_process_head_comment(emitter) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) + if !yaml_emitter_emit_node(emitter, event, false, true, false, false) { + return false + } + if !yaml_emitter_process_line_comment(emitter) { + return false + } + if !yaml_emitter_process_foot_comment(emitter) { + return false + } + return true +} + +// Expect a block key node. +func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, false) { + return false + } + } + if !yaml_emitter_process_head_comment(emitter) { + return false + } + if event.typ == yaml_MAPPING_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if len(emitter.line_comment) > 0 { + // [Go] A line comment was provided for the key. That's unusual as the + // scanner associates line comments with the value. Either way, + // save the line comment and render it appropriately later. + emitter.key_line_comment = emitter.line_comment + emitter.line_comment = nil + } + if yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block value node. +func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { + return false + } + } + if len(emitter.key_line_comment) > 0 { + // [Go] Line comments are generally associated with the value, but when there's + // no value on the same line as a mapping key they end up attached to the + // key itself. + if event.typ == yaml_SCALAR_EVENT { + if len(emitter.line_comment) == 0 { + // A scalar is coming and it has no line comments by itself yet, + // so just let it handle the line comment as usual. If it has a + // line comment, we can't have both so the one from the key is lost. + emitter.line_comment = emitter.key_line_comment + emitter.key_line_comment = nil + } + } else if event.sequence_style() != yaml_FLOW_SEQUENCE_STYLE && (event.typ == yaml_MAPPING_START_EVENT || event.typ == yaml_SEQUENCE_START_EVENT) { + // An indented block follows, so write the comment right now. + emitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment + if !yaml_emitter_process_line_comment(emitter) { + return false + } + emitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment + } + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) + if !yaml_emitter_emit_node(emitter, event, false, false, true, false) { + return false + } + if !yaml_emitter_process_line_comment(emitter) { + return false + } + if !yaml_emitter_process_foot_comment(emitter) { + return false + } + return true +} + +func yaml_emitter_silent_nil_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { + return event.typ == yaml_SCALAR_EVENT && event.implicit && !emitter.canonical && len(emitter.scalar_data.value) == 0 +} + +// Expect a node. +func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, + root bool, sequence bool, mapping bool, simple_key bool) bool { + + emitter.root_context = root + emitter.sequence_context = sequence + emitter.mapping_context = mapping + emitter.simple_key_context = simple_key + + switch event.typ { + case yaml_ALIAS_EVENT: + return yaml_emitter_emit_alias(emitter, event) + case yaml_SCALAR_EVENT: + return yaml_emitter_emit_scalar(emitter, event) + case yaml_SEQUENCE_START_EVENT: + return yaml_emitter_emit_sequence_start(emitter, event) + case yaml_MAPPING_START_EVENT: + return yaml_emitter_emit_mapping_start(emitter, event) + default: + return yaml_emitter_set_emitter_error(emitter, + fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ)) + } +} + +// Expect ALIAS. +func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SCALAR. +func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_select_scalar_style(emitter, event) { + return false + } + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + if !yaml_emitter_process_scalar(emitter) { + return false + } + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SEQUENCE-START. +func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || + yaml_emitter_check_empty_sequence(emitter) { + emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE + } + return true +} + +// Expect MAPPING-START. +func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || + yaml_emitter_check_empty_mapping(emitter) { + emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE + } + return true +} + +// Check if the document content is an empty scalar. +func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { + return false // [Go] Huh? +} + +// Check if the next events represent an empty sequence. +func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT +} + +// Check if the next events represent an empty mapping. +func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT +} + +// Check if the next node can be expressed as a simple key. +func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { + length := 0 + switch emitter.events[emitter.events_head].typ { + case yaml_ALIAS_EVENT: + length += len(emitter.anchor_data.anchor) + case yaml_SCALAR_EVENT: + if emitter.scalar_data.multiline { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + + len(emitter.scalar_data.value) + case yaml_SEQUENCE_START_EVENT: + if !yaml_emitter_check_empty_sequence(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + case yaml_MAPPING_START_EVENT: + if !yaml_emitter_check_empty_mapping(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + default: + return false + } + return length <= 128 +} + +// Determine an acceptable scalar style. +func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 + if no_tag && !event.implicit && !event.quoted_implicit { + return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") + } + + style := event.scalar_style() + if style == yaml_ANY_SCALAR_STYLE { + style = yaml_PLAIN_SCALAR_STYLE + } + if emitter.canonical { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + if emitter.simple_key_context && emitter.scalar_data.multiline { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + + if style == yaml_PLAIN_SCALAR_STYLE { + if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || + emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if no_tag && !event.implicit { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { + if !emitter.scalar_data.single_quoted_allowed { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { + if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + + if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { + emitter.tag_data.handle = []byte{'!'} + } + emitter.scalar_data.style = style + return true +} + +// Write an anchor. +func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { + if emitter.anchor_data.anchor == nil { + return true + } + c := []byte{'&'} + if emitter.anchor_data.alias { + c[0] = '*' + } + if !yaml_emitter_write_indicator(emitter, c, true, false, false) { + return false + } + return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) +} + +// Write a tag. +func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { + if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { + return true + } + if len(emitter.tag_data.handle) > 0 { + if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { + return false + } + if len(emitter.tag_data.suffix) > 0 { + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + } + } else { + // [Go] Allocate these slices elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { + return false + } + } + return true +} + +// Write a scalar. +func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { + switch emitter.scalar_data.style { + case yaml_PLAIN_SCALAR_STYLE: + return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_SINGLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_DOUBLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_LITERAL_SCALAR_STYLE: + return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) + + case yaml_FOLDED_SCALAR_STYLE: + return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) + } + panic("unknown scalar style") +} + +// Write a head comment. +func yaml_emitter_process_head_comment(emitter *yaml_emitter_t) bool { + if len(emitter.tail_comment) > 0 { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_comment(emitter, emitter.tail_comment) { + return false + } + emitter.tail_comment = emitter.tail_comment[:0] + emitter.foot_indent = emitter.indent + if emitter.foot_indent < 0 { + emitter.foot_indent = 0 + } + } + + if len(emitter.head_comment) == 0 { + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_comment(emitter, emitter.head_comment) { + return false + } + emitter.head_comment = emitter.head_comment[:0] + return true +} + +// Write an line comment. +func yaml_emitter_process_line_comment_linebreak(emitter *yaml_emitter_t, linebreak bool) bool { + if len(emitter.line_comment) == 0 { + // The next 3 lines are needed to resolve an issue with leading newlines + // See https://github.com/go-yaml/yaml/issues/755 + // When linebreak is set to true, put_break will be called and will add + // the needed newline. + if linebreak && !put_break(emitter) { + return false + } + return true + } + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !yaml_emitter_write_comment(emitter, emitter.line_comment) { + return false + } + emitter.line_comment = emitter.line_comment[:0] + return true +} + +// Write a foot comment. +func yaml_emitter_process_foot_comment(emitter *yaml_emitter_t) bool { + if len(emitter.foot_comment) == 0 { + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_comment(emitter, emitter.foot_comment) { + return false + } + emitter.foot_comment = emitter.foot_comment[:0] + emitter.foot_indent = emitter.indent + if emitter.foot_indent < 0 { + emitter.foot_indent = 0 + } + return true +} + +// Check if a %YAML directive is valid. +func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { + if version_directive.major != 1 || version_directive.minor != 1 { + return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") + } + return true +} + +// Check if a %TAG directive is valid. +func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { + handle := tag_directive.handle + prefix := tag_directive.prefix + if len(handle) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") + } + if handle[0] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") + } + if handle[len(handle)-1] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") + } + for i := 1; i < len(handle)-1; i += width(handle[i]) { + if !is_alpha(handle, i) { + return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") + } + } + if len(prefix) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") + } + return true +} + +// Check if an anchor is valid. +func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { + if len(anchor) == 0 { + problem := "anchor value must not be empty" + if alias { + problem = "alias value must not be empty" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + for i := 0; i < len(anchor); i += width(anchor[i]) { + if !is_alpha(anchor, i) { + problem := "anchor value must contain alphanumerical characters only" + if alias { + problem = "alias value must contain alphanumerical characters only" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + } + emitter.anchor_data.anchor = anchor + emitter.anchor_data.alias = alias + return true +} + +// Check if a tag is valid. +func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { + if len(tag) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") + } + for i := 0; i < len(emitter.tag_directives); i++ { + tag_directive := &emitter.tag_directives[i] + if bytes.HasPrefix(tag, tag_directive.prefix) { + emitter.tag_data.handle = tag_directive.handle + emitter.tag_data.suffix = tag[len(tag_directive.prefix):] + return true + } + } + emitter.tag_data.suffix = tag + return true +} + +// Check if a scalar is valid. +func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { + var ( + block_indicators = false + flow_indicators = false + line_breaks = false + special_characters = false + tab_characters = false + + leading_space = false + leading_break = false + trailing_space = false + trailing_break = false + break_space = false + space_break = false + + preceded_by_whitespace = false + followed_by_whitespace = false + previous_space = false + previous_break = false + ) + + emitter.scalar_data.value = value + + if len(value) == 0 { + emitter.scalar_data.multiline = false + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = false + return true + } + + if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { + block_indicators = true + flow_indicators = true + } + + preceded_by_whitespace = true + for i, w := 0, 0; i < len(value); i += w { + w = width(value[i]) + followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) + + if i == 0 { + switch value[i] { + case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': + flow_indicators = true + block_indicators = true + case '?', ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '-': + if followed_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } else { + switch value[i] { + case ',', '?', '[', ']', '{', '}': + flow_indicators = true + case ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '#': + if preceded_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } + + if value[i] == '\t' { + tab_characters = true + } else if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { + special_characters = true + } + if is_space(value, i) { + if i == 0 { + leading_space = true + } + if i+width(value[i]) == len(value) { + trailing_space = true + } + if previous_break { + break_space = true + } + previous_space = true + previous_break = false + } else if is_break(value, i) { + line_breaks = true + if i == 0 { + leading_break = true + } + if i+width(value[i]) == len(value) { + trailing_break = true + } + if previous_space { + space_break = true + } + previous_space = false + previous_break = true + } else { + previous_space = false + previous_break = false + } + + // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. + preceded_by_whitespace = is_blankz(value, i) + } + + emitter.scalar_data.multiline = line_breaks + emitter.scalar_data.flow_plain_allowed = true + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = true + + if leading_space || leading_break || trailing_space || trailing_break { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if trailing_space { + emitter.scalar_data.block_allowed = false + } + if break_space { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + } + if space_break || tab_characters || special_characters { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + } + if space_break || special_characters { + emitter.scalar_data.block_allowed = false + } + if line_breaks { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if flow_indicators { + emitter.scalar_data.flow_plain_allowed = false + } + if block_indicators { + emitter.scalar_data.block_plain_allowed = false + } + return true +} + +// Check if the event data is valid. +func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + emitter.anchor_data.anchor = nil + emitter.tag_data.handle = nil + emitter.tag_data.suffix = nil + emitter.scalar_data.value = nil + + if len(event.head_comment) > 0 { + emitter.head_comment = event.head_comment + } + if len(event.line_comment) > 0 { + emitter.line_comment = event.line_comment + } + if len(event.foot_comment) > 0 { + emitter.foot_comment = event.foot_comment + } + if len(event.tail_comment) > 0 { + emitter.tail_comment = event.tail_comment + } + + switch event.typ { + case yaml_ALIAS_EVENT: + if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { + return false + } + + case yaml_SCALAR_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + if !yaml_emitter_analyze_scalar(emitter, event.value) { + return false + } + + case yaml_SEQUENCE_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + + case yaml_MAPPING_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + } + return true +} + +// Write the BOM character. +func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { + if !flush(emitter) { + return false + } + pos := emitter.buffer_pos + emitter.buffer[pos+0] = '\xEF' + emitter.buffer[pos+1] = '\xBB' + emitter.buffer[pos+2] = '\xBF' + emitter.buffer_pos += 3 + return true +} + +func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { + indent := emitter.indent + if indent < 0 { + indent = 0 + } + if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { + if !put_break(emitter) { + return false + } + } + if emitter.foot_indent == indent { + if !put_break(emitter) { + return false + } + } + for emitter.column < indent { + if !put(emitter, ' ') { + return false + } + } + emitter.whitespace = true + //emitter.indention = true + emitter.space_above = false + emitter.foot_indent = -1 + return true +} + +func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, indicator) { + return false + } + emitter.whitespace = is_whitespace + emitter.indention = (emitter.indention && is_indention) + emitter.open_ended = false + return true +} + +func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + for i := 0; i < len(value); { + var must_write bool + switch value[i] { + case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': + must_write = true + default: + must_write = is_alpha(value, i) + } + if must_write { + if !write(emitter, value, &i) { + return false + } + } else { + w := width(value[i]) + for k := 0; k < w; k++ { + octet := value[i] + i++ + if !put(emitter, '%') { + return false + } + + c := octet >> 4 + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + + c = octet & 0x0f + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + } + } + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + if len(value) > 0 && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + //emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + + if len(value) > 0 { + emitter.whitespace = false + } + emitter.indention = false + if emitter.root_context { + emitter.open_ended = true + } + + return true +} + +func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { + return false + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + //emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if value[i] == '\'' { + if !put(emitter, '\'') { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + spaces := false + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { + return false + } + + for i := 0; i < len(value); { + if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || + is_bom(value, i) || is_break(value, i) || + value[i] == '"' || value[i] == '\\' { + + octet := value[i] + + var w int + var v rune + switch { + case octet&0x80 == 0x00: + w, v = 1, rune(octet&0x7F) + case octet&0xE0 == 0xC0: + w, v = 2, rune(octet&0x1F) + case octet&0xF0 == 0xE0: + w, v = 3, rune(octet&0x0F) + case octet&0xF8 == 0xF0: + w, v = 4, rune(octet&0x07) + } + for k := 1; k < w; k++ { + octet = value[i+k] + v = (v << 6) + (rune(octet) & 0x3F) + } + i += w + + if !put(emitter, '\\') { + return false + } + + var ok bool + switch v { + case 0x00: + ok = put(emitter, '0') + case 0x07: + ok = put(emitter, 'a') + case 0x08: + ok = put(emitter, 'b') + case 0x09: + ok = put(emitter, 't') + case 0x0A: + ok = put(emitter, 'n') + case 0x0b: + ok = put(emitter, 'v') + case 0x0c: + ok = put(emitter, 'f') + case 0x0d: + ok = put(emitter, 'r') + case 0x1b: + ok = put(emitter, 'e') + case 0x22: + ok = put(emitter, '"') + case 0x5c: + ok = put(emitter, '\\') + case 0x85: + ok = put(emitter, 'N') + case 0xA0: + ok = put(emitter, '_') + case 0x2028: + ok = put(emitter, 'L') + case 0x2029: + ok = put(emitter, 'P') + default: + if v <= 0xFF { + ok = put(emitter, 'x') + w = 2 + } else if v <= 0xFFFF { + ok = put(emitter, 'u') + w = 4 + } else { + ok = put(emitter, 'U') + w = 8 + } + for k := (w - 1) * 4; ok && k >= 0; k -= 4 { + digit := byte((v >> uint(k)) & 0x0F) + if digit < 10 { + ok = put(emitter, digit+'0') + } else { + ok = put(emitter, digit+'A'-10) + } + } + } + if !ok { + return false + } + spaces = false + } else if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { + if !yaml_emitter_write_indent(emitter) { + return false + } + if is_space(value, i+1) { + if !put(emitter, '\\') { + return false + } + } + i += width(value[i]) + } else if !write(emitter, value, &i) { + return false + } + spaces = true + } else { + if !write(emitter, value, &i) { + return false + } + spaces = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { + if is_space(value, 0) || is_break(value, 0) { + indent_hint := []byte{'0' + byte(emitter.best_indent)} + if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { + return false + } + } + + emitter.open_ended = false + + var chomp_hint [1]byte + if len(value) == 0 { + chomp_hint[0] = '-' + } else { + i := len(value) - 1 + for value[i]&0xC0 == 0x80 { + i-- + } + if !is_break(value, i) { + chomp_hint[0] = '-' + } else if i == 0 { + chomp_hint[0] = '+' + emitter.open_ended = true + } else { + i-- + for value[i]&0xC0 == 0x80 { + i-- + } + if is_break(value, i) { + chomp_hint[0] = '+' + emitter.open_ended = true + } + } + } + if chomp_hint[0] != 0 { + if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { + return false + } + } + return true +} + +func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + if !yaml_emitter_process_line_comment_linebreak(emitter, true) { + return false + } + //emitter.indention = true + emitter.whitespace = true + breaks := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !write_break(emitter, value, &i) { + return false + } + //emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + breaks = false + } + } + + return true +} + +func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + if !yaml_emitter_process_line_comment_linebreak(emitter, true) { + return false + } + + //emitter.indention = true + emitter.whitespace = true + + breaks := true + leading_spaces := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !breaks && !leading_spaces && value[i] == '\n' { + k := 0 + for is_break(value, k) { + k += width(value[k]) + } + if !is_blankz(value, k) { + if !put_break(emitter) { + return false + } + } + } + if !write_break(emitter, value, &i) { + return false + } + //emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + leading_spaces = is_blank(value, i) + } + if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + emitter.indention = false + breaks = false + } + } + return true +} + +func yaml_emitter_write_comment(emitter *yaml_emitter_t, comment []byte) bool { + breaks := false + pound := false + for i := 0; i < len(comment); { + if is_break(comment, i) { + if !write_break(emitter, comment, &i) { + return false + } + //emitter.indention = true + breaks = true + pound = false + } else { + if breaks && !yaml_emitter_write_indent(emitter) { + return false + } + if !pound { + if comment[i] != '#' && (!put(emitter, '#') || !put(emitter, ' ')) { + return false + } + pound = true + } + if !write(emitter, comment, &i) { + return false + } + emitter.indention = false + breaks = false + } + } + if !breaks && !put_break(emitter) { + return false + } + + emitter.whitespace = true + //emitter.indention = true + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/encode.go b/upstream/vendor/go.yaml.in/yaml/v3/encode.go new file mode 100644 index 0000000000..de9e72a3e6 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/encode.go @@ -0,0 +1,577 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package yaml + +import ( + "encoding" + "fmt" + "io" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "time" + "unicode/utf8" +) + +type encoder struct { + emitter yaml_emitter_t + event yaml_event_t + out []byte + flow bool + indent int + doneInit bool +} + +func newEncoder() *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_string(&e.emitter, &e.out) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func newEncoderWithWriter(w io.Writer) *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_writer(&e.emitter, w) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func (e *encoder) init() { + if e.doneInit { + return + } + if e.indent == 0 { + e.indent = 4 + } + e.emitter.best_indent = e.indent + yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING) + e.emit() + e.doneInit = true +} + +func (e *encoder) finish() { + e.emitter.open_ended = false + yaml_stream_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) destroy() { + yaml_emitter_delete(&e.emitter) +} + +func (e *encoder) emit() { + // This will internally delete the e.event value. + e.must(yaml_emitter_emit(&e.emitter, &e.event)) +} + +func (e *encoder) must(ok bool) { + if !ok { + msg := e.emitter.problem + if msg == "" { + msg = "unknown problem generating YAML content" + } + failf("%s", msg) + } +} + +func (e *encoder) marshalDoc(tag string, in reflect.Value) { + e.init() + var node *Node + if in.IsValid() { + node, _ = in.Interface().(*Node) + } + if node != nil && node.Kind == DocumentNode { + e.nodev(in) + } else { + yaml_document_start_event_initialize(&e.event, nil, nil, true) + e.emit() + e.marshal(tag, in) + yaml_document_end_event_initialize(&e.event, true) + e.emit() + } +} + +func (e *encoder) marshal(tag string, in reflect.Value) { + tag = shortTag(tag) + if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() { + e.nilv() + return + } + iface := in.Interface() + switch value := iface.(type) { + case *Node: + e.nodev(in) + return + case Node: + if !in.CanAddr() { + var n = reflect.New(in.Type()).Elem() + n.Set(in) + in = n + } + e.nodev(in.Addr()) + return + case time.Time: + e.timev(tag, in) + return + case *time.Time: + e.timev(tag, in.Elem()) + return + case time.Duration: + e.stringv(tag, reflect.ValueOf(value.String())) + return + case Marshaler: + v, err := value.MarshalYAML() + if err != nil { + fail(err) + } + if v == nil { + e.nilv() + return + } + e.marshal(tag, reflect.ValueOf(v)) + return + case encoding.TextMarshaler: + text, err := value.MarshalText() + if err != nil { + fail(err) + } + in = reflect.ValueOf(string(text)) + case nil: + e.nilv() + return + } + switch in.Kind() { + case reflect.Interface: + e.marshal(tag, in.Elem()) + case reflect.Map: + e.mapv(tag, in) + case reflect.Ptr: + e.marshal(tag, in.Elem()) + case reflect.Struct: + e.structv(tag, in) + case reflect.Slice, reflect.Array: + e.slicev(tag, in) + case reflect.String: + e.stringv(tag, in) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + e.intv(tag, in) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + e.uintv(tag, in) + case reflect.Float32, reflect.Float64: + e.floatv(tag, in) + case reflect.Bool: + e.boolv(tag, in) + default: + panic("cannot marshal type: " + in.Type().String()) + } +} + +func (e *encoder) mapv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + keys := keyList(in.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + e.marshal("", k) + e.marshal("", in.MapIndex(k)) + } + }) +} + +func (e *encoder) fieldByIndex(v reflect.Value, index []int) (field reflect.Value) { + for _, num := range index { + for { + if v.Kind() == reflect.Ptr { + if v.IsNil() { + return reflect.Value{} + } + v = v.Elem() + continue + } + break + } + v = v.Field(num) + } + return v +} + +func (e *encoder) structv(tag string, in reflect.Value) { + sinfo, err := getStructInfo(in.Type()) + if err != nil { + panic(err) + } + e.mappingv(tag, func() { + for _, info := range sinfo.FieldsList { + var value reflect.Value + if info.Inline == nil { + value = in.Field(info.Num) + } else { + value = e.fieldByIndex(in, info.Inline) + if !value.IsValid() { + continue + } + } + if info.OmitEmpty && isZero(value) { + continue + } + e.marshal("", reflect.ValueOf(info.Key)) + e.flow = info.Flow + e.marshal("", value) + } + if sinfo.InlineMap >= 0 { + m := in.Field(sinfo.InlineMap) + if m.Len() > 0 { + e.flow = false + keys := keyList(m.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + if _, found := sinfo.FieldsMap[k.String()]; found { + panic(fmt.Sprintf("cannot have key %q in inlined map: conflicts with struct field", k.String())) + } + e.marshal("", k) + e.flow = false + e.marshal("", m.MapIndex(k)) + } + } + } + }) +} + +func (e *encoder) mappingv(tag string, f func()) { + implicit := tag == "" + style := yaml_BLOCK_MAPPING_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_MAPPING_STYLE + } + yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) + e.emit() + f() + yaml_mapping_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) slicev(tag string, in reflect.Value) { + implicit := tag == "" + style := yaml_BLOCK_SEQUENCE_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_SEQUENCE_STYLE + } + e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + e.emit() + n := in.Len() + for i := 0; i < n; i++ { + e.marshal("", in.Index(i)) + } + e.must(yaml_sequence_end_event_initialize(&e.event)) + e.emit() +} + +// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. +// +// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported +// in YAML 1.2 and by this package, but these should be marshalled quoted for +// the time being for compatibility with other parsers. +func isBase60Float(s string) (result bool) { + // Fast path. + if s == "" { + return false + } + c := s[0] + if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { + return false + } + // Do the full match. + return base60float.MatchString(s) +} + +// From http://yaml.org/type/float.html, except the regular expression there +// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. +var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) + +// isOldBool returns whether s is bool notation as defined in YAML 1.1. +// +// We continue to force strings that YAML 1.1 would interpret as booleans to be +// rendered as quotes strings so that the marshalled output valid for YAML 1.1 +// parsing. +func isOldBool(s string) (result bool) { + switch s { + case "y", "Y", "yes", "Yes", "YES", "on", "On", "ON", + "n", "N", "no", "No", "NO", "off", "Off", "OFF": + return true + default: + return false + } +} + +func (e *encoder) stringv(tag string, in reflect.Value) { + var style yaml_scalar_style_t + s := in.String() + canUsePlain := true + switch { + case !utf8.ValidString(s): + if tag == binaryTag { + failf("explicitly tagged !!binary data must be base64-encoded") + } + if tag != "" { + failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) + } + // It can't be encoded directly as YAML so use a binary tag + // and encode it as base64. + tag = binaryTag + s = encodeBase64(s) + case tag == "": + // Check to see if it would resolve to a specific + // tag when encoded unquoted. If it doesn't, + // there's no need to quote it. + rtag, _ := resolve("", s) + canUsePlain = rtag == strTag && !(isBase60Float(s) || isOldBool(s)) + } + // Note: it's possible for user code to emit invalid YAML + // if they explicitly specify a tag and a string containing + // text that's incompatible with that tag. + switch { + case strings.Contains(s, "\n"): + if e.flow { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } else { + style = yaml_LITERAL_SCALAR_STYLE + } + case canUsePlain: + style = yaml_PLAIN_SCALAR_STYLE + default: + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + e.emitScalar(s, "", tag, style, nil, nil, nil, nil) +} + +func (e *encoder) boolv(tag string, in reflect.Value) { + var s string + if in.Bool() { + s = "true" + } else { + s = "false" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) +} + +func (e *encoder) intv(tag string, in reflect.Value) { + s := strconv.FormatInt(in.Int(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) +} + +func (e *encoder) uintv(tag string, in reflect.Value) { + s := strconv.FormatUint(in.Uint(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) +} + +func (e *encoder) timev(tag string, in reflect.Value) { + t := in.Interface().(time.Time) + s := t.Format(time.RFC3339Nano) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) +} + +func (e *encoder) floatv(tag string, in reflect.Value) { + // Issue #352: When formatting, use the precision of the underlying value + precision := 64 + if in.Kind() == reflect.Float32 { + precision = 32 + } + + s := strconv.FormatFloat(in.Float(), 'g', -1, precision) + switch s { + case "+Inf": + s = ".inf" + case "-Inf": + s = "-.inf" + case "NaN": + s = ".nan" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) +} + +func (e *encoder) nilv() { + e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) +} + +func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t, head, line, foot, tail []byte) { + // TODO Kill this function. Replace all initialize calls by their underlining Go literals. + implicit := tag == "" + if !implicit { + tag = longTag(tag) + } + e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) + e.event.head_comment = head + e.event.line_comment = line + e.event.foot_comment = foot + e.event.tail_comment = tail + e.emit() +} + +func (e *encoder) nodev(in reflect.Value) { + e.node(in.Interface().(*Node), "") +} + +func (e *encoder) node(node *Node, tail string) { + // Zero nodes behave as nil. + if node.Kind == 0 && node.IsZero() { + e.nilv() + return + } + + // If the tag was not explicitly requested, and dropping it won't change the + // implicit tag of the value, don't include it in the presentation. + var tag = node.Tag + var stag = shortTag(tag) + var forceQuoting bool + if tag != "" && node.Style&TaggedStyle == 0 { + if node.Kind == ScalarNode { + if stag == strTag && node.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0 { + tag = "" + } else { + rtag, _ := resolve("", node.Value) + if rtag == stag { + tag = "" + } else if stag == strTag { + tag = "" + forceQuoting = true + } + } + } else { + var rtag string + switch node.Kind { + case MappingNode: + rtag = mapTag + case SequenceNode: + rtag = seqTag + } + if rtag == stag { + tag = "" + } + } + } + + switch node.Kind { + case DocumentNode: + yaml_document_start_event_initialize(&e.event, nil, nil, true) + e.event.head_comment = []byte(node.HeadComment) + e.emit() + for _, node := range node.Content { + e.node(node, "") + } + yaml_document_end_event_initialize(&e.event, true) + e.event.foot_comment = []byte(node.FootComment) + e.emit() + + case SequenceNode: + style := yaml_BLOCK_SEQUENCE_STYLE + if node.Style&FlowStyle != 0 { + style = yaml_FLOW_SEQUENCE_STYLE + } + e.must(yaml_sequence_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == "", style)) + e.event.head_comment = []byte(node.HeadComment) + e.emit() + for _, node := range node.Content { + e.node(node, "") + } + e.must(yaml_sequence_end_event_initialize(&e.event)) + e.event.line_comment = []byte(node.LineComment) + e.event.foot_comment = []byte(node.FootComment) + e.emit() + + case MappingNode: + style := yaml_BLOCK_MAPPING_STYLE + if node.Style&FlowStyle != 0 { + style = yaml_FLOW_MAPPING_STYLE + } + yaml_mapping_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == "", style) + e.event.tail_comment = []byte(tail) + e.event.head_comment = []byte(node.HeadComment) + e.emit() + + // The tail logic below moves the foot comment of prior keys to the following key, + // since the value for each key may be a nested structure and the foot needs to be + // processed only the entirety of the value is streamed. The last tail is processed + // with the mapping end event. + var tail string + for i := 0; i+1 < len(node.Content); i += 2 { + k := node.Content[i] + foot := k.FootComment + if foot != "" { + kopy := *k + kopy.FootComment = "" + k = &kopy + } + e.node(k, tail) + tail = foot + + v := node.Content[i+1] + e.node(v, "") + } + + yaml_mapping_end_event_initialize(&e.event) + e.event.tail_comment = []byte(tail) + e.event.line_comment = []byte(node.LineComment) + e.event.foot_comment = []byte(node.FootComment) + e.emit() + + case AliasNode: + yaml_alias_event_initialize(&e.event, []byte(node.Value)) + e.event.head_comment = []byte(node.HeadComment) + e.event.line_comment = []byte(node.LineComment) + e.event.foot_comment = []byte(node.FootComment) + e.emit() + + case ScalarNode: + value := node.Value + if !utf8.ValidString(value) { + if stag == binaryTag { + failf("explicitly tagged !!binary data must be base64-encoded") + } + if stag != "" { + failf("cannot marshal invalid UTF-8 data as %s", stag) + } + // It can't be encoded directly as YAML so use a binary tag + // and encode it as base64. + tag = binaryTag + value = encodeBase64(value) + } + + style := yaml_PLAIN_SCALAR_STYLE + switch { + case node.Style&DoubleQuotedStyle != 0: + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + case node.Style&SingleQuotedStyle != 0: + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + case node.Style&LiteralStyle != 0: + style = yaml_LITERAL_SCALAR_STYLE + case node.Style&FoldedStyle != 0: + style = yaml_FOLDED_SCALAR_STYLE + case strings.Contains(value, "\n"): + style = yaml_LITERAL_SCALAR_STYLE + case forceQuoting: + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + + e.emitScalar(value, node.Anchor, tag, style, []byte(node.HeadComment), []byte(node.LineComment), []byte(node.FootComment), []byte(tail)) + default: + failf("cannot encode node with unknown kind %d", node.Kind) + } +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/parserc.go b/upstream/vendor/go.yaml.in/yaml/v3/parserc.go new file mode 100644 index 0000000000..25fe823637 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/parserc.go @@ -0,0 +1,1274 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// Copyright (c) 2006-2010 Kirill Simonov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package yaml + +import ( + "bytes" +) + +// The parser implements the following grammar: +// +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// implicit_document ::= block_node DOCUMENT-END* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// block_node_or_indentless_sequence ::= +// ALIAS +// | properties (block_content | indentless_block_sequence)? +// | block_content +// | indentless_block_sequence +// block_node ::= ALIAS +// | properties block_content? +// | block_content +// flow_node ::= ALIAS +// | properties flow_content? +// | flow_content +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// block_content ::= block_collection | flow_collection | SCALAR +// flow_content ::= flow_collection | SCALAR +// block_collection ::= block_sequence | block_mapping +// flow_collection ::= flow_sequence | flow_mapping +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// block_mapping ::= BLOCK-MAPPING_START +// ((KEY block_node_or_indentless_sequence?)? +// (VALUE block_node_or_indentless_sequence?)?)* +// BLOCK-END +// flow_sequence ::= FLOW-SEQUENCE-START +// (flow_sequence_entry FLOW-ENTRY)* +// flow_sequence_entry? +// FLOW-SEQUENCE-END +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// flow_mapping ::= FLOW-MAPPING-START +// (flow_mapping_entry FLOW-ENTRY)* +// flow_mapping_entry? +// FLOW-MAPPING-END +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + +// Peek the next token in the token queue. +func peek_token(parser *yaml_parser_t) *yaml_token_t { + if parser.token_available || yaml_parser_fetch_more_tokens(parser) { + token := &parser.tokens[parser.tokens_head] + yaml_parser_unfold_comments(parser, token) + return token + } + return nil +} + +// yaml_parser_unfold_comments walks through the comments queue and joins all +// comments behind the position of the provided token into the respective +// top-level comment slices in the parser. +func yaml_parser_unfold_comments(parser *yaml_parser_t, token *yaml_token_t) { + for parser.comments_head < len(parser.comments) && token.start_mark.index >= parser.comments[parser.comments_head].token_mark.index { + comment := &parser.comments[parser.comments_head] + if len(comment.head) > 0 { + if token.typ == yaml_BLOCK_END_TOKEN { + // No heads on ends, so keep comment.head for a follow up token. + break + } + if len(parser.head_comment) > 0 { + parser.head_comment = append(parser.head_comment, '\n') + } + parser.head_comment = append(parser.head_comment, comment.head...) + } + if len(comment.foot) > 0 { + if len(parser.foot_comment) > 0 { + parser.foot_comment = append(parser.foot_comment, '\n') + } + parser.foot_comment = append(parser.foot_comment, comment.foot...) + } + if len(comment.line) > 0 { + if len(parser.line_comment) > 0 { + parser.line_comment = append(parser.line_comment, '\n') + } + parser.line_comment = append(parser.line_comment, comment.line...) + } + *comment = yaml_comment_t{} + parser.comments_head++ + } +} + +// Remove the next token from the queue (must be called after peek_token). +func skip_token(parser *yaml_parser_t) { + parser.token_available = false + parser.tokens_parsed++ + parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN + parser.tokens_head++ +} + +// Get the next event. +func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { + // Erase the event object. + *event = yaml_event_t{} + + // No events after the end of the stream or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { + return true + } + + // Generate the next event. + return yaml_parser_state_machine(parser, event) +} + +// Set parser error. +func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +// State dispatcher. +func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { + //trace("yaml_parser_state_machine", "state:", parser.state.String()) + + switch parser.state { + case yaml_PARSE_STREAM_START_STATE: + return yaml_parser_parse_stream_start(parser, event) + + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, true) + + case yaml_PARSE_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, false) + + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return yaml_parser_parse_document_content(parser, event) + + case yaml_PARSE_DOCUMENT_END_STATE: + return yaml_parser_parse_document_end(parser, event) + + case yaml_PARSE_BLOCK_NODE_STATE: + return yaml_parser_parse_node(parser, event, true, false) + + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return yaml_parser_parse_node(parser, event, true, true) + + case yaml_PARSE_FLOW_NODE_STATE: + return yaml_parser_parse_node(parser, event, false, false) + + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, true) + + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, false) + + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_indentless_sequence_entry(parser, event) + + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, true) + + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, false) + + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return yaml_parser_parse_block_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, true) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, false) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) + + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, true) + + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, true) + + default: + panic("invalid parser state") + } +} + +// Parse the production: +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// +// ************ +func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_STREAM_START_TOKEN { + return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark) + } + parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + encoding: token.encoding, + } + skip_token(parser) + return true +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// +// * +// +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// +// ************************* +func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { + + token := peek_token(parser) + if token == nil { + return false + } + + // Parse extra document end indicators. + if !implicit { + for token.typ == yaml_DOCUMENT_END_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && + token.typ != yaml_TAG_DIRECTIVE_TOKEN && + token.typ != yaml_DOCUMENT_START_TOKEN && + token.typ != yaml_STREAM_END_TOKEN { + // Parse an implicit document. + if !yaml_parser_process_directives(parser, nil, nil) { + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_BLOCK_NODE_STATE + + var head_comment []byte + if len(parser.head_comment) > 0 { + // [Go] Scan the header comment backwards, and if an empty line is found, break + // the header so the part before the last empty line goes into the + // document header, while the bottom of it goes into a follow up event. + for i := len(parser.head_comment) - 1; i > 0; i-- { + if parser.head_comment[i] == '\n' { + if i == len(parser.head_comment)-1 { + head_comment = parser.head_comment[:i] + parser.head_comment = parser.head_comment[i+1:] + break + } else if parser.head_comment[i-1] == '\n' { + head_comment = parser.head_comment[:i-1] + parser.head_comment = parser.head_comment[i+1:] + break + } + } + } + } + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + + head_comment: head_comment, + } + + } else if token.typ != yaml_STREAM_END_TOKEN { + // Parse an explicit document. + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + start_mark := token.start_mark + if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { + return false + } + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_DOCUMENT_START_TOKEN { + yaml_parser_set_parser_error(parser, + "did not find expected ", token.start_mark) + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE + end_mark := token.end_mark + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: false, + } + skip_token(parser) + + } else { + // Parse the stream end. + parser.state = yaml_PARSE_END_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + } + + return true +} + +// Parse the productions: +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// +// *********** +func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || + token.typ == yaml_TAG_DIRECTIVE_TOKEN || + token.typ == yaml_DOCUMENT_START_TOKEN || + token.typ == yaml_DOCUMENT_END_TOKEN || + token.typ == yaml_STREAM_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + return yaml_parser_process_empty_scalar(parser, event, + token.start_mark) + } + return yaml_parser_parse_node(parser, event, true, false) +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// +// ************* +// +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + start_mark := token.start_mark + end_mark := token.start_mark + + implicit := true + if token.typ == yaml_DOCUMENT_END_TOKEN { + end_mark = token.end_mark + skip_token(parser) + implicit = false + } + + parser.tag_directives = parser.tag_directives[:0] + + parser.state = yaml_PARSE_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + start_mark: start_mark, + end_mark: end_mark, + implicit: implicit, + } + yaml_parser_set_event_comments(parser, event) + if len(event.head_comment) > 0 && len(event.foot_comment) == 0 { + event.foot_comment = event.head_comment + event.head_comment = nil + } + return true +} + +func yaml_parser_set_event_comments(parser *yaml_parser_t, event *yaml_event_t) { + event.head_comment = parser.head_comment + event.line_comment = parser.line_comment + event.foot_comment = parser.foot_comment + parser.head_comment = nil + parser.line_comment = nil + parser.foot_comment = nil + parser.tail_comment = nil + parser.stem_comment = nil +} + +// Parse the productions: +// block_node_or_indentless_sequence ::= +// +// ALIAS +// ***** +// | properties (block_content | indentless_block_sequence)? +// ********** * +// | block_content | indentless_block_sequence +// * +// +// block_node ::= ALIAS +// +// ***** +// | properties block_content? +// ********** * +// | block_content +// * +// +// flow_node ::= ALIAS +// +// ***** +// | properties flow_content? +// ********** * +// | flow_content +// * +// +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// +// ************************* +// +// block_content ::= block_collection | flow_collection | SCALAR +// +// ****** +// +// flow_content ::= flow_collection | SCALAR +// +// ****** +func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { + //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_ALIAS_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + *event = yaml_event_t{ + typ: yaml_ALIAS_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + anchor: token.value, + } + yaml_parser_set_event_comments(parser, event) + skip_token(parser) + return true + } + + start_mark := token.start_mark + end_mark := token.start_mark + + var tag_token bool + var tag_handle, tag_suffix, anchor []byte + var tag_mark yaml_mark_t + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + start_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } else if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + start_mark = token.start_mark + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + var tag []byte + if tag_token { + if len(tag_handle) == 0 { + tag = tag_suffix + tag_suffix = nil + } else { + for i := range parser.tag_directives { + if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { + tag = append([]byte(nil), parser.tag_directives[i].prefix...) + tag = append(tag, tag_suffix...) + break + } + } + if len(tag) == 0 { + yaml_parser_set_parser_error_context(parser, + "while parsing a node", start_mark, + "found undefined tag handle", tag_mark) + return false + } + } + } + + implicit := len(tag) == 0 + if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_SCALAR_TOKEN { + var plain_implicit, quoted_implicit bool + end_mark = token.end_mark + if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { + plain_implicit = true + } else if len(tag) == 0 { + quoted_implicit = true + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + value: token.value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(token.style), + } + yaml_parser_set_event_comments(parser, event) + skip_token(parser) + return true + } + if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { + // [Go] Some of the events below can be merged as they differ only on style. + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), + } + yaml_parser_set_event_comments(parser, event) + return true + } + if token.typ == yaml_FLOW_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + yaml_parser_set_event_comments(parser, event) + return true + } + if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + if parser.stem_comment != nil { + event.head_comment = parser.stem_comment + parser.stem_comment = nil + } + return true + } + if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), + } + if parser.stem_comment != nil { + event.head_comment = parser.stem_comment + parser.stem_comment = nil + } + return true + } + if len(anchor) > 0 || len(tag) > 0 { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + quoted_implicit: false, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true + } + + context := "while parsing a flow node" + if block { + context = "while parsing a block node" + } + yaml_parser_set_parser_error_context(parser, context, start_mark, + "did not find expected node content", token.start_mark) + return false +} + +// Parse the productions: +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// +// ******************** *********** * ********* +func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + if token == nil { + return false + } + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + prior_head_len := len(parser.head_comment) + skip_token(parser) + yaml_parser_split_stem_comment(parser, prior_head_len) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } else { + parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } + if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block collection", context_mark, + "did not find expected '-' indicator", token.start_mark) +} + +// Parse the productions: +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// +// *********** * +func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + prior_head_len := len(parser.head_comment) + skip_token(parser) + yaml_parser_split_stem_comment(parser, prior_head_len) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && + token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? + } + return true +} + +// Split stem comment from head comment. +// +// When a sequence or map is found under a sequence entry, the former head comment +// is assigned to the underlying sequence or map as a whole, not the individual +// sequence or map entry as would be expected otherwise. To handle this case the +// previous head comment is moved aside as the stem comment. +func yaml_parser_split_stem_comment(parser *yaml_parser_t, stem_len int) { + if stem_len == 0 { + return + } + + token := peek_token(parser) + if token == nil || token.typ != yaml_BLOCK_SEQUENCE_START_TOKEN && token.typ != yaml_BLOCK_MAPPING_START_TOKEN { + return + } + + parser.stem_comment = parser.head_comment[:stem_len] + if len(parser.head_comment) == stem_len { + parser.head_comment = nil + } else { + // Copy suffix to prevent very strange bugs if someone ever appends + // further bytes to the prefix in the stem_comment slice above. + parser.head_comment = append([]byte(nil), parser.head_comment[stem_len+1:]...) + } +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// +// ******************* +// ((KEY block_node_or_indentless_sequence?)? +// *** * +// (VALUE block_node_or_indentless_sequence?)?)* +// +// BLOCK-END +// ********* +func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + if token == nil { + return false + } + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + // [Go] A tail comment was left from the prior mapping value processed. Emit an event + // as it needs to be processed with that value and not the following key. + if len(parser.tail_comment) > 0 { + *event = yaml_event_t{ + typ: yaml_TAIL_COMMENT_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + foot_comment: parser.tail_comment, + } + parser.tail_comment = nil + return true + } + + if token.typ == yaml_KEY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } else { + parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } else if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + yaml_parser_set_event_comments(parser, event) + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block mapping", context_mark, + "did not find expected key", token.start_mark) +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// +// ((KEY block_node_or_indentless_sequence?)? +// +// (VALUE block_node_or_indentless_sequence?)?)* +// ***** * +// BLOCK-END +func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence ::= FLOW-SEQUENCE-START +// +// ******************* +// (flow_sequence_entry FLOW-ENTRY)* +// * ********** +// flow_sequence_entry? +// * +// FLOW-SEQUENCE-END +// ***************** +// +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// +// * +func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + if token == nil { + return false + } + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow sequence", context_mark, + "did not find expected ',' or ']'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + implicit: true, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + skip_token(parser) + return true + } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + yaml_parser_set_event_comments(parser, event) + + skip_token(parser) + return true +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// +// *** * +func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + mark := token.end_mark + skip_token(parser) + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// +// ***** * +func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// +// * +func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? + } + return true +} + +// Parse the productions: +// flow_mapping ::= FLOW-MAPPING-START +// +// ****************** +// (flow_mapping_entry FLOW-ENTRY)* +// * ********** +// flow_mapping_entry? +// ****************** +// FLOW-MAPPING-END +// **************** +// +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// - *** * +func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow mapping", context_mark, + "did not find expected ',' or '}'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } else { + parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + yaml_parser_set_event_comments(parser, event) + skip_token(parser) + return true +} + +// Parse the productions: +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// - ***** * +func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { + token := peek_token(parser) + if token == nil { + return false + } + if empty { + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Generate an empty scalar event. +func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: mark, + end_mark: mark, + value: nil, // Empty + implicit: true, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true +} + +var default_tag_directives = []yaml_tag_directive_t{ + {[]byte("!"), []byte("!")}, + {[]byte("!!"), []byte("tag:yaml.org,2002:")}, +} + +// Parse directives. +func yaml_parser_process_directives(parser *yaml_parser_t, + version_directive_ref **yaml_version_directive_t, + tag_directives_ref *[]yaml_tag_directive_t) bool { + + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + + token := peek_token(parser) + if token == nil { + return false + } + + for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { + if version_directive != nil { + yaml_parser_set_parser_error(parser, + "found duplicate %YAML directive", token.start_mark) + return false + } + if token.major != 1 || token.minor != 1 { + yaml_parser_set_parser_error(parser, + "found incompatible YAML document", token.start_mark) + return false + } + version_directive = &yaml_version_directive_t{ + major: token.major, + minor: token.minor, + } + } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { + value := yaml_tag_directive_t{ + handle: token.value, + prefix: token.prefix, + } + if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { + return false + } + tag_directives = append(tag_directives, value) + } + + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + + for i := range default_tag_directives { + if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { + return false + } + } + + if version_directive_ref != nil { + *version_directive_ref = version_directive + } + if tag_directives_ref != nil { + *tag_directives_ref = tag_directives + } + return true +} + +// Append a tag directive to the directives stack. +func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { + for i := range parser.tag_directives { + if bytes.Equal(value.handle, parser.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) + } + } + + // [Go] I suspect the copy is unnecessary. This was likely done + // because there was no way to track ownership of the data. + value_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(value_copy.handle, value.handle) + copy(value_copy.prefix, value.prefix) + parser.tag_directives = append(parser.tag_directives, value_copy) + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/readerc.go b/upstream/vendor/go.yaml.in/yaml/v3/readerc.go new file mode 100644 index 0000000000..56af245366 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/readerc.go @@ -0,0 +1,434 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// Copyright (c) 2006-2010 Kirill Simonov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package yaml + +import ( + "io" +) + +// Set the reader error and return 0. +func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { + parser.error = yaml_READER_ERROR + parser.problem = problem + parser.problem_offset = offset + parser.problem_value = value + return false +} + +// Byte order marks. +const ( + bom_UTF8 = "\xef\xbb\xbf" + bom_UTF16LE = "\xff\xfe" + bom_UTF16BE = "\xfe\xff" +) + +// Determine the input stream encoding by checking the BOM symbol. If no BOM is +// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. +func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { + // Ensure that we had enough bytes in the raw buffer. + for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { + if !yaml_parser_update_raw_buffer(parser) { + return false + } + } + + // Determine the encoding. + buf := parser.raw_buffer + pos := parser.raw_buffer_pos + avail := len(buf) - pos + if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { + parser.encoding = yaml_UTF16LE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { + parser.encoding = yaml_UTF16BE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { + parser.encoding = yaml_UTF8_ENCODING + parser.raw_buffer_pos += 3 + parser.offset += 3 + } else { + parser.encoding = yaml_UTF8_ENCODING + } + return true +} + +// Update the raw buffer. +func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { + size_read := 0 + + // Return if the raw buffer is full. + if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { + return true + } + + // Return on EOF. + if parser.eof { + return true + } + + // Move the remaining bytes in the raw buffer to the beginning. + if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { + copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) + } + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] + parser.raw_buffer_pos = 0 + + // Call the read handler to fill the buffer. + size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] + if err == io.EOF { + parser.eof = true + } else if err != nil { + return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) + } + return true +} + +// Ensure that the buffer contains at least `length` characters. +// Return true on success, false on failure. +// +// The length is supposed to be significantly less that the buffer size. +func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { + if parser.read_handler == nil { + panic("read handler must be set") + } + + // [Go] This function was changed to guarantee the requested length size at EOF. + // The fact we need to do this is pretty awful, but the description above implies + // for that to be the case, and there are tests + + // If the EOF flag is set and the raw buffer is empty, do nothing. + if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { + // [Go] ACTUALLY! Read the documentation of this function above. + // This is just broken. To return true, we need to have the + // given length in the buffer. Not doing that means every single + // check that calls this function to make sure the buffer has a + // given length is Go) panicking; or C) accessing invalid memory. + //return true + } + + // Return if the buffer contains enough characters. + if parser.unread >= length { + return true + } + + // Determine the input encoding if it is not known yet. + if parser.encoding == yaml_ANY_ENCODING { + if !yaml_parser_determine_encoding(parser) { + return false + } + } + + // Move the unread characters to the beginning of the buffer. + buffer_len := len(parser.buffer) + if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { + copy(parser.buffer, parser.buffer[parser.buffer_pos:]) + buffer_len -= parser.buffer_pos + parser.buffer_pos = 0 + } else if parser.buffer_pos == buffer_len { + buffer_len = 0 + parser.buffer_pos = 0 + } + + // Open the whole buffer for writing, and cut it before returning. + parser.buffer = parser.buffer[:cap(parser.buffer)] + + // Fill the buffer until it has enough characters. + first := true + for parser.unread < length { + + // Fill the raw buffer if necessary. + if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { + if !yaml_parser_update_raw_buffer(parser) { + parser.buffer = parser.buffer[:buffer_len] + return false + } + } + first = false + + // Decode the raw buffer. + inner: + for parser.raw_buffer_pos != len(parser.raw_buffer) { + var value rune + var width int + + raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos + + // Decode the next character. + switch parser.encoding { + case yaml_UTF8_ENCODING: + // Decode a UTF-8 character. Check RFC 3629 + // (http://www.ietf.org/rfc/rfc3629.txt) for more details. + // + // The following table (taken from the RFC) is used for + // decoding. + // + // Char. number range | UTF-8 octet sequence + // (hexadecimal) | (binary) + // --------------------+------------------------------------ + // 0000 0000-0000 007F | 0xxxxxxx + // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx + // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx + // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + // + // Additionally, the characters in the range 0xD800-0xDFFF + // are prohibited as they are reserved for use with UTF-16 + // surrogate pairs. + + // Determine the length of the UTF-8 sequence. + octet := parser.raw_buffer[parser.raw_buffer_pos] + switch { + case octet&0x80 == 0x00: + width = 1 + case octet&0xE0 == 0xC0: + width = 2 + case octet&0xF0 == 0xE0: + width = 3 + case octet&0xF8 == 0xF0: + width = 4 + default: + // The leading octet is invalid. + return yaml_parser_set_reader_error(parser, + "invalid leading UTF-8 octet", + parser.offset, int(octet)) + } + + // Check if the raw buffer contains an incomplete character. + if width > raw_unread { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-8 octet sequence", + parser.offset, -1) + } + break inner + } + + // Decode the leading octet. + switch { + case octet&0x80 == 0x00: + value = rune(octet & 0x7F) + case octet&0xE0 == 0xC0: + value = rune(octet & 0x1F) + case octet&0xF0 == 0xE0: + value = rune(octet & 0x0F) + case octet&0xF8 == 0xF0: + value = rune(octet & 0x07) + default: + value = 0 + } + + // Check and decode the trailing octets. + for k := 1; k < width; k++ { + octet = parser.raw_buffer[parser.raw_buffer_pos+k] + + // Check if the octet is valid. + if (octet & 0xC0) != 0x80 { + return yaml_parser_set_reader_error(parser, + "invalid trailing UTF-8 octet", + parser.offset+k, int(octet)) + } + + // Decode the octet. + value = (value << 6) + rune(octet&0x3F) + } + + // Check the length of the sequence against the value. + switch { + case width == 1: + case width == 2 && value >= 0x80: + case width == 3 && value >= 0x800: + case width == 4 && value >= 0x10000: + default: + return yaml_parser_set_reader_error(parser, + "invalid length of a UTF-8 sequence", + parser.offset, -1) + } + + // Check the range of the value. + if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { + return yaml_parser_set_reader_error(parser, + "invalid Unicode character", + parser.offset, int(value)) + } + + case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: + var low, high int + if parser.encoding == yaml_UTF16LE_ENCODING { + low, high = 0, 1 + } else { + low, high = 1, 0 + } + + // The UTF-16 encoding is not as simple as one might + // naively think. Check RFC 2781 + // (http://www.ietf.org/rfc/rfc2781.txt). + // + // Normally, two subsequent bytes describe a Unicode + // character. However a special technique (called a + // surrogate pair) is used for specifying character + // values larger than 0xFFFF. + // + // A surrogate pair consists of two pseudo-characters: + // high surrogate area (0xD800-0xDBFF) + // low surrogate area (0xDC00-0xDFFF) + // + // The following formulas are used for decoding + // and encoding characters using surrogate pairs: + // + // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) + // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) + // W1 = 110110yyyyyyyyyy + // W2 = 110111xxxxxxxxxx + // + // where U is the character value, W1 is the high surrogate + // area, W2 is the low surrogate area. + + // Check for incomplete UTF-16 character. + if raw_unread < 2 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 character", + parser.offset, -1) + } + break inner + } + + // Get the character. + value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) + + // Check for unexpected low surrogate area. + if value&0xFC00 == 0xDC00 { + return yaml_parser_set_reader_error(parser, + "unexpected low surrogate area", + parser.offset, int(value)) + } + + // Check for a high surrogate area. + if value&0xFC00 == 0xD800 { + width = 4 + + // Check for incomplete surrogate pair. + if raw_unread < 4 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 surrogate pair", + parser.offset, -1) + } + break inner + } + + // Get the next character. + value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) + + // Check for a low surrogate area. + if value2&0xFC00 != 0xDC00 { + return yaml_parser_set_reader_error(parser, + "expected low surrogate area", + parser.offset+2, int(value2)) + } + + // Generate the value of the surrogate pair. + value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) + } else { + width = 2 + } + + default: + panic("impossible") + } + + // Check if the character is in the allowed range: + // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) + // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) + // | [#x10000-#x10FFFF] (32 bit) + switch { + case value == 0x09: + case value == 0x0A: + case value == 0x0D: + case value >= 0x20 && value <= 0x7E: + case value == 0x85: + case value >= 0xA0 && value <= 0xD7FF: + case value >= 0xE000 && value <= 0xFFFD: + case value >= 0x10000 && value <= 0x10FFFF: + default: + return yaml_parser_set_reader_error(parser, + "control characters are not allowed", + parser.offset, int(value)) + } + + // Move the raw pointers. + parser.raw_buffer_pos += width + parser.offset += width + + // Finally put the character into the buffer. + if value <= 0x7F { + // 0000 0000-0000 007F . 0xxxxxxx + parser.buffer[buffer_len+0] = byte(value) + buffer_len += 1 + } else if value <= 0x7FF { + // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) + parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) + buffer_len += 2 + } else if value <= 0xFFFF { + // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) + buffer_len += 3 + } else { + // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) + buffer_len += 4 + } + + parser.unread++ + } + + // On EOF, put NUL into the buffer and return. + if parser.eof { + parser.buffer[buffer_len] = 0 + buffer_len++ + parser.unread++ + break + } + } + // [Go] Read the documentation of this function above. To return true, + // we need to have the given length in the buffer. Not doing that means + // every single check that calls this function to make sure the buffer + // has a given length is Go) panicking; or C) accessing invalid memory. + // This happens here due to the EOF above breaking early. + for buffer_len < length { + parser.buffer[buffer_len] = 0 + buffer_len++ + } + parser.buffer = parser.buffer[:buffer_len] + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/resolve.go b/upstream/vendor/go.yaml.in/yaml/v3/resolve.go new file mode 100644 index 0000000000..64ae888057 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/resolve.go @@ -0,0 +1,326 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package yaml + +import ( + "encoding/base64" + "math" + "regexp" + "strconv" + "strings" + "time" +) + +type resolveMapItem struct { + value interface{} + tag string +} + +var resolveTable = make([]byte, 256) +var resolveMap = make(map[string]resolveMapItem) + +func init() { + t := resolveTable + t[int('+')] = 'S' // Sign + t[int('-')] = 'S' + for _, c := range "0123456789" { + t[int(c)] = 'D' // Digit + } + for _, c := range "yYnNtTfFoO~" { + t[int(c)] = 'M' // In map + } + t[int('.')] = '.' // Float (potentially in map) + + var resolveMapList = []struct { + v interface{} + tag string + l []string + }{ + {true, boolTag, []string{"true", "True", "TRUE"}}, + {false, boolTag, []string{"false", "False", "FALSE"}}, + {nil, nullTag, []string{"", "~", "null", "Null", "NULL"}}, + {math.NaN(), floatTag, []string{".nan", ".NaN", ".NAN"}}, + {math.Inf(+1), floatTag, []string{".inf", ".Inf", ".INF"}}, + {math.Inf(+1), floatTag, []string{"+.inf", "+.Inf", "+.INF"}}, + {math.Inf(-1), floatTag, []string{"-.inf", "-.Inf", "-.INF"}}, + {"<<", mergeTag, []string{"<<"}}, + } + + m := resolveMap + for _, item := range resolveMapList { + for _, s := range item.l { + m[s] = resolveMapItem{item.v, item.tag} + } + } +} + +const ( + nullTag = "!!null" + boolTag = "!!bool" + strTag = "!!str" + intTag = "!!int" + floatTag = "!!float" + timestampTag = "!!timestamp" + seqTag = "!!seq" + mapTag = "!!map" + binaryTag = "!!binary" + mergeTag = "!!merge" +) + +var longTags = make(map[string]string) +var shortTags = make(map[string]string) + +func init() { + for _, stag := range []string{nullTag, boolTag, strTag, intTag, floatTag, timestampTag, seqTag, mapTag, binaryTag, mergeTag} { + ltag := longTag(stag) + longTags[stag] = ltag + shortTags[ltag] = stag + } +} + +const longTagPrefix = "tag:yaml.org,2002:" + +func shortTag(tag string) string { + if strings.HasPrefix(tag, longTagPrefix) { + if stag, ok := shortTags[tag]; ok { + return stag + } + return "!!" + tag[len(longTagPrefix):] + } + return tag +} + +func longTag(tag string) string { + if strings.HasPrefix(tag, "!!") { + if ltag, ok := longTags[tag]; ok { + return ltag + } + return longTagPrefix + tag[2:] + } + return tag +} + +func resolvableTag(tag string) bool { + switch tag { + case "", strTag, boolTag, intTag, floatTag, nullTag, timestampTag: + return true + } + return false +} + +var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`) + +func resolve(tag string, in string) (rtag string, out interface{}) { + tag = shortTag(tag) + if !resolvableTag(tag) { + return tag, in + } + + defer func() { + switch tag { + case "", rtag, strTag, binaryTag: + return + case floatTag: + if rtag == intTag { + switch v := out.(type) { + case int64: + rtag = floatTag + out = float64(v) + return + case int: + rtag = floatTag + out = float64(v) + return + } + } + } + failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) + }() + + // Any data is accepted as a !!str or !!binary. + // Otherwise, the prefix is enough of a hint about what it might be. + hint := byte('N') + if in != "" { + hint = resolveTable[in[0]] + } + if hint != 0 && tag != strTag && tag != binaryTag { + // Handle things we can lookup in a map. + if item, ok := resolveMap[in]; ok { + return item.tag, item.value + } + + // Base 60 floats are a bad idea, were dropped in YAML 1.2, and + // are purposefully unsupported here. They're still quoted on + // the way out for compatibility with other parser, though. + + switch hint { + case 'M': + // We've already checked the map above. + + case '.': + // Not in the map, so maybe a normal float. + floatv, err := strconv.ParseFloat(in, 64) + if err == nil { + return floatTag, floatv + } + + case 'D', 'S': + // Int, float, or timestamp. + // Only try values as a timestamp if the value is unquoted or there's an explicit + // !!timestamp tag. + if tag == "" || tag == timestampTag { + t, ok := parseTimestamp(in) + if ok { + return timestampTag, t + } + } + + plain := strings.Replace(in, "_", "", -1) + intv, err := strconv.ParseInt(plain, 0, 64) + if err == nil { + if intv == int64(int(intv)) { + return intTag, int(intv) + } else { + return intTag, intv + } + } + uintv, err := strconv.ParseUint(plain, 0, 64) + if err == nil { + return intTag, uintv + } + if yamlStyleFloat.MatchString(plain) { + floatv, err := strconv.ParseFloat(plain, 64) + if err == nil { + return floatTag, floatv + } + } + if strings.HasPrefix(plain, "0b") { + intv, err := strconv.ParseInt(plain[2:], 2, 64) + if err == nil { + if intv == int64(int(intv)) { + return intTag, int(intv) + } else { + return intTag, intv + } + } + uintv, err := strconv.ParseUint(plain[2:], 2, 64) + if err == nil { + return intTag, uintv + } + } else if strings.HasPrefix(plain, "-0b") { + intv, err := strconv.ParseInt("-"+plain[3:], 2, 64) + if err == nil { + if true || intv == int64(int(intv)) { + return intTag, int(intv) + } else { + return intTag, intv + } + } + } + // Octals as introduced in version 1.2 of the spec. + // Octals from the 1.1 spec, spelled as 0777, are still + // decoded by default in v3 as well for compatibility. + // May be dropped in v4 depending on how usage evolves. + if strings.HasPrefix(plain, "0o") { + intv, err := strconv.ParseInt(plain[2:], 8, 64) + if err == nil { + if intv == int64(int(intv)) { + return intTag, int(intv) + } else { + return intTag, intv + } + } + uintv, err := strconv.ParseUint(plain[2:], 8, 64) + if err == nil { + return intTag, uintv + } + } else if strings.HasPrefix(plain, "-0o") { + intv, err := strconv.ParseInt("-"+plain[3:], 8, 64) + if err == nil { + if true || intv == int64(int(intv)) { + return intTag, int(intv) + } else { + return intTag, intv + } + } + } + default: + panic("internal error: missing handler for resolver table: " + string(rune(hint)) + " (with " + in + ")") + } + } + return strTag, in +} + +// encodeBase64 encodes s as base64 that is broken up into multiple lines +// as appropriate for the resulting length. +func encodeBase64(s string) string { + const lineLen = 70 + encLen := base64.StdEncoding.EncodedLen(len(s)) + lines := encLen/lineLen + 1 + buf := make([]byte, encLen*2+lines) + in := buf[0:encLen] + out := buf[encLen:] + base64.StdEncoding.Encode(in, []byte(s)) + k := 0 + for i := 0; i < len(in); i += lineLen { + j := i + lineLen + if j > len(in) { + j = len(in) + } + k += copy(out[k:], in[i:j]) + if lines > 1 { + out[k] = '\n' + k++ + } + } + return string(out[:k]) +} + +// This is a subset of the formats allowed by the regular expression +// defined at http://yaml.org/type/timestamp.html. +var allowedTimestampFormats = []string{ + "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields. + "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t". + "2006-1-2 15:4:5.999999999", // space separated with no time zone + "2006-1-2", // date only + // Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5" + // from the set of examples. +} + +// parseTimestamp parses s as a timestamp string and +// returns the timestamp and reports whether it succeeded. +// Timestamp formats are defined at http://yaml.org/type/timestamp.html +func parseTimestamp(s string) (time.Time, bool) { + // TODO write code to check all the formats supported by + // http://yaml.org/type/timestamp.html instead of using time.Parse. + + // Quick check: all date formats start with YYYY-. + i := 0 + for ; i < len(s); i++ { + if c := s[i]; c < '0' || c > '9' { + break + } + } + if i != 4 || i == len(s) || s[i] != '-' { + return time.Time{}, false + } + for _, format := range allowedTimestampFormats { + if t, err := time.Parse(format, s); err == nil { + return t, true + } + } + return time.Time{}, false +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/scannerc.go b/upstream/vendor/go.yaml.in/yaml/v3/scannerc.go new file mode 100644 index 0000000000..30b1f08920 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/scannerc.go @@ -0,0 +1,3040 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// Copyright (c) 2006-2010 Kirill Simonov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package yaml + +import ( + "bytes" + "fmt" +) + +// Introduction +// ************ +// +// The following notes assume that you are familiar with the YAML specification +// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in +// some cases we are less restrictive that it requires. +// +// The process of transforming a YAML stream into a sequence of events is +// divided on two steps: Scanning and Parsing. +// +// The Scanner transforms the input stream into a sequence of tokens, while the +// parser transform the sequence of tokens produced by the Scanner into a +// sequence of parsing events. +// +// The Scanner is rather clever and complicated. The Parser, on the contrary, +// is a straightforward implementation of a recursive-descendant parser (or, +// LL(1) parser, as it is usually called). +// +// Actually there are two issues of Scanning that might be called "clever", the +// rest is quite straightforward. The issues are "block collection start" and +// "simple keys". Both issues are explained below in details. +// +// Here the Scanning step is explained and implemented. We start with the list +// of all the tokens produced by the Scanner together with short descriptions. +// +// Now, tokens: +// +// STREAM-START(encoding) # The stream start. +// STREAM-END # The stream end. +// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. +// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. +// DOCUMENT-START # '---' +// DOCUMENT-END # '...' +// BLOCK-SEQUENCE-START # Indentation increase denoting a block +// BLOCK-MAPPING-START # sequence or a block mapping. +// BLOCK-END # Indentation decrease. +// FLOW-SEQUENCE-START # '[' +// FLOW-SEQUENCE-END # ']' +// BLOCK-SEQUENCE-START # '{' +// BLOCK-SEQUENCE-END # '}' +// BLOCK-ENTRY # '-' +// FLOW-ENTRY # ',' +// KEY # '?' or nothing (simple keys). +// VALUE # ':' +// ALIAS(anchor) # '*anchor' +// ANCHOR(anchor) # '&anchor' +// TAG(handle,suffix) # '!handle!suffix' +// SCALAR(value,style) # A scalar. +// +// The following two tokens are "virtual" tokens denoting the beginning and the +// end of the stream: +// +// STREAM-START(encoding) +// STREAM-END +// +// We pass the information about the input stream encoding with the +// STREAM-START token. +// +// The next two tokens are responsible for tags: +// +// VERSION-DIRECTIVE(major,minor) +// TAG-DIRECTIVE(handle,prefix) +// +// Example: +// +// %YAML 1.1 +// %TAG ! !foo +// %TAG !yaml! tag:yaml.org,2002: +// --- +// +// The correspoding sequence of tokens: +// +// STREAM-START(utf-8) +// VERSION-DIRECTIVE(1,1) +// TAG-DIRECTIVE("!","!foo") +// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") +// DOCUMENT-START +// STREAM-END +// +// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole +// line. +// +// The document start and end indicators are represented by: +// +// DOCUMENT-START +// DOCUMENT-END +// +// Note that if a YAML stream contains an implicit document (without '---' +// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be +// produced. +// +// In the following examples, we present whole documents together with the +// produced tokens. +// +// 1. An implicit document: +// +// 'a scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// STREAM-END +// +// 2. An explicit document: +// +// --- +// 'a scalar' +// ... +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// SCALAR("a scalar",single-quoted) +// DOCUMENT-END +// STREAM-END +// +// 3. Several documents in a stream: +// +// 'a scalar' +// --- +// 'another scalar' +// --- +// 'yet another scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// DOCUMENT-START +// SCALAR("another scalar",single-quoted) +// DOCUMENT-START +// SCALAR("yet another scalar",single-quoted) +// STREAM-END +// +// We have already introduced the SCALAR token above. The following tokens are +// used to describe aliases, anchors, tag, and scalars: +// +// ALIAS(anchor) +// ANCHOR(anchor) +// TAG(handle,suffix) +// SCALAR(value,style) +// +// The following series of examples illustrate the usage of these tokens: +// +// 1. A recursive sequence: +// +// &A [ *A ] +// +// Tokens: +// +// STREAM-START(utf-8) +// ANCHOR("A") +// FLOW-SEQUENCE-START +// ALIAS("A") +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A tagged scalar: +// +// !!float "3.14" # A good approximation. +// +// Tokens: +// +// STREAM-START(utf-8) +// TAG("!!","float") +// SCALAR("3.14",double-quoted) +// STREAM-END +// +// 3. Various scalar styles: +// +// --- # Implicit empty plain scalars do not produce tokens. +// --- a plain scalar +// --- 'a single-quoted scalar' +// --- "a double-quoted scalar" +// --- |- +// a literal scalar +// --- >- +// a folded +// scalar +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// DOCUMENT-START +// SCALAR("a plain scalar",plain) +// DOCUMENT-START +// SCALAR("a single-quoted scalar",single-quoted) +// DOCUMENT-START +// SCALAR("a double-quoted scalar",double-quoted) +// DOCUMENT-START +// SCALAR("a literal scalar",literal) +// DOCUMENT-START +// SCALAR("a folded scalar",folded) +// STREAM-END +// +// Now it's time to review collection-related tokens. We will start with +// flow collections: +// +// FLOW-SEQUENCE-START +// FLOW-SEQUENCE-END +// FLOW-MAPPING-START +// FLOW-MAPPING-END +// FLOW-ENTRY +// KEY +// VALUE +// +// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and +// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' +// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the +// indicators '?' and ':', which are used for denoting mapping keys and values, +// are represented by the KEY and VALUE tokens. +// +// The following examples show flow collections: +// +// 1. A flow sequence: +// +// [item 1, item 2, item 3] +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-SEQUENCE-START +// SCALAR("item 1",plain) +// FLOW-ENTRY +// SCALAR("item 2",plain) +// FLOW-ENTRY +// SCALAR("item 3",plain) +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A flow mapping: +// +// { +// a simple key: a value, # Note that the KEY token is produced. +// ? a complex key: another value, +// } +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// FLOW-ENTRY +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// FLOW-ENTRY +// FLOW-MAPPING-END +// STREAM-END +// +// A simple key is a key which is not denoted by the '?' indicator. Note that +// the Scanner still produce the KEY token whenever it encounters a simple key. +// +// For scanning block collections, the following tokens are used (note that we +// repeat KEY and VALUE here): +// +// BLOCK-SEQUENCE-START +// BLOCK-MAPPING-START +// BLOCK-END +// BLOCK-ENTRY +// KEY +// VALUE +// +// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation +// increase that precedes a block collection (cf. the INDENT token in Python). +// The token BLOCK-END denote indentation decrease that ends a block collection +// (cf. the DEDENT token in Python). However YAML has some syntax pecularities +// that makes detections of these tokens more complex. +// +// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators +// '-', '?', and ':' correspondingly. +// +// The following examples show how the tokens BLOCK-SEQUENCE-START, +// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: +// +// 1. Block sequences: +// +// - item 1 +// - item 2 +// - +// - item 3.1 +// - item 3.2 +// - +// key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 3.1",plain) +// BLOCK-ENTRY +// SCALAR("item 3.2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Block mappings: +// +// a simple key: a value # The KEY token is produced here. +// ? a complex key +// : another value +// a mapping: +// key 1: value 1 +// key 2: value 2 +// a sequence: +// - item 1 +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// KEY +// SCALAR("a mapping",plain) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML does not always require to start a new block collection from a new +// line. If the current line contains only '-', '?', and ':' indicators, a new +// block collection may start at the current line. The following examples +// illustrate this case: +// +// 1. Collections in a sequence: +// +// - - item 1 +// - item 2 +// - key 1: value 1 +// key 2: value 2 +// - ? complex key +// : complex value +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("complex key") +// VALUE +// SCALAR("complex value") +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Collections in a mapping: +// +// ? a sequence +// : - item 1 +// - item 2 +// ? a mapping +// : key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// KEY +// SCALAR("a mapping",plain) +// VALUE +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML also permits non-indented sequences if they are included into a block +// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: +// +// key: +// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key",plain) +// VALUE +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// + +// Ensure that the buffer contains the required number of characters. +// Return true on success, false on failure (reader error or memory error). +func cache(parser *yaml_parser_t, length int) bool { + // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) + return parser.unread >= length || yaml_parser_update_buffer(parser, length) +} + +// Advance the buffer pointer. +func skip(parser *yaml_parser_t) { + if !is_blank(parser.buffer, parser.buffer_pos) { + parser.newlines = 0 + } + parser.mark.index++ + parser.mark.column++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) +} + +func skip_line(parser *yaml_parser_t) { + if is_crlf(parser.buffer, parser.buffer_pos) { + parser.mark.index += 2 + parser.mark.column = 0 + parser.mark.line++ + parser.unread -= 2 + parser.buffer_pos += 2 + parser.newlines++ + } else if is_break(parser.buffer, parser.buffer_pos) { + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) + parser.newlines++ + } +} + +// Copy a character to a string buffer and advance pointers. +func read(parser *yaml_parser_t, s []byte) []byte { + if !is_blank(parser.buffer, parser.buffer_pos) { + parser.newlines = 0 + } + w := width(parser.buffer[parser.buffer_pos]) + if w == 0 { + panic("invalid character sequence") + } + if len(s) == 0 { + s = make([]byte, 0, 32) + } + if w == 1 && len(s)+w <= cap(s) { + s = s[:len(s)+1] + s[len(s)-1] = parser.buffer[parser.buffer_pos] + parser.buffer_pos++ + } else { + s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) + parser.buffer_pos += w + } + parser.mark.index++ + parser.mark.column++ + parser.unread-- + return s +} + +// Copy a line break character to a string buffer and advance pointers. +func read_line(parser *yaml_parser_t, s []byte) []byte { + buf := parser.buffer + pos := parser.buffer_pos + switch { + case buf[pos] == '\r' && buf[pos+1] == '\n': + // CR LF . LF + s = append(s, '\n') + parser.buffer_pos += 2 + parser.mark.index++ + parser.unread-- + case buf[pos] == '\r' || buf[pos] == '\n': + // CR|LF . LF + s = append(s, '\n') + parser.buffer_pos += 1 + case buf[pos] == '\xC2' && buf[pos+1] == '\x85': + // NEL . LF + s = append(s, '\n') + parser.buffer_pos += 2 + case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): + // LS|PS . LS|PS + s = append(s, buf[parser.buffer_pos:pos+3]...) + parser.buffer_pos += 3 + default: + return s + } + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + parser.newlines++ + return s +} + +// Get the next token. +func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { + // Erase the token object. + *token = yaml_token_t{} // [Go] Is this necessary? + + // No tokens after STREAM-END or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR { + return true + } + + // Ensure that the tokens queue contains enough tokens. + if !parser.token_available { + if !yaml_parser_fetch_more_tokens(parser) { + return false + } + } + + // Fetch the next token from the queue. + *token = parser.tokens[parser.tokens_head] + parser.tokens_head++ + parser.tokens_parsed++ + parser.token_available = false + + if token.typ == yaml_STREAM_END_TOKEN { + parser.stream_end_produced = true + } + return true +} + +// Set the scanner error and return false. +func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { + parser.error = yaml_SCANNER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = parser.mark + return false +} + +func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { + context := "while parsing a tag" + if directive { + context = "while parsing a %TAG directive" + } + return yaml_parser_set_scanner_error(parser, context, context_mark, problem) +} + +func trace(args ...interface{}) func() { + pargs := append([]interface{}{"+++"}, args...) + fmt.Println(pargs...) + pargs = append([]interface{}{"---"}, args...) + return func() { fmt.Println(pargs...) } +} + +// Ensure that the tokens queue contains at least one token which can be +// returned to the Parser. +func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { + // While we need more tokens to fetch, do it. + for { + // [Go] The comment parsing logic requires a lookahead of two tokens + // so that foot comments may be parsed in time of associating them + // with the tokens that are parsed before them, and also for line + // comments to be transformed into head comments in some edge cases. + if parser.tokens_head < len(parser.tokens)-2 { + // If a potential simple key is at the head position, we need to fetch + // the next token to disambiguate it. + head_tok_idx, ok := parser.simple_keys_by_tok[parser.tokens_parsed] + if !ok { + break + } else if valid, ok := yaml_simple_key_is_valid(parser, &parser.simple_keys[head_tok_idx]); !ok { + return false + } else if !valid { + break + } + } + // Fetch the next token. + if !yaml_parser_fetch_next_token(parser) { + return false + } + } + + parser.token_available = true + return true +} + +// The dispatcher for token fetchers. +func yaml_parser_fetch_next_token(parser *yaml_parser_t) (ok bool) { + // Ensure that the buffer is initialized. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we just started scanning. Fetch STREAM-START then. + if !parser.stream_start_produced { + return yaml_parser_fetch_stream_start(parser) + } + + scan_mark := parser.mark + + // Eat whitespaces and comments until we reach the next token. + if !yaml_parser_scan_to_next_token(parser) { + return false + } + + // [Go] While unrolling indents, transform the head comments of prior + // indentation levels observed after scan_start into foot comments at + // the respective indexes. + + // Check the indentation level against the current column. + if !yaml_parser_unroll_indent(parser, parser.mark.column, scan_mark) { + return false + } + + // Ensure that the buffer contains at least 4 characters. 4 is the length + // of the longest indicators ('--- ' and '... '). + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + // Is it the end of the stream? + if is_z(parser.buffer, parser.buffer_pos) { + return yaml_parser_fetch_stream_end(parser) + } + + // Is it a directive? + if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { + return yaml_parser_fetch_directive(parser) + } + + buf := parser.buffer + pos := parser.buffer_pos + + // Is it the document start indicator? + if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) + } + + // Is it the document end indicator? + if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) + } + + comment_mark := parser.mark + if len(parser.tokens) > 0 && (parser.flow_level == 0 && buf[pos] == ':' || parser.flow_level > 0 && buf[pos] == ',') { + // Associate any following comments with the prior token. + comment_mark = parser.tokens[len(parser.tokens)-1].start_mark + } + defer func() { + if !ok { + return + } + if len(parser.tokens) > 0 && parser.tokens[len(parser.tokens)-1].typ == yaml_BLOCK_ENTRY_TOKEN { + // Sequence indicators alone have no line comments. It becomes + // a head comment for whatever follows. + return + } + if !yaml_parser_scan_line_comment(parser, comment_mark) { + ok = false + return + } + }() + + // Is it the flow sequence start indicator? + if buf[pos] == '[' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) + } + + // Is it the flow mapping start indicator? + if parser.buffer[parser.buffer_pos] == '{' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) + } + + // Is it the flow sequence end indicator? + if parser.buffer[parser.buffer_pos] == ']' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_SEQUENCE_END_TOKEN) + } + + // Is it the flow mapping end indicator? + if parser.buffer[parser.buffer_pos] == '}' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_MAPPING_END_TOKEN) + } + + // Is it the flow entry indicator? + if parser.buffer[parser.buffer_pos] == ',' { + return yaml_parser_fetch_flow_entry(parser) + } + + // Is it the block entry indicator? + if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { + return yaml_parser_fetch_block_entry(parser) + } + + // Is it the key indicator? + if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_key(parser) + } + + // Is it the value indicator? + if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_value(parser) + } + + // Is it an alias? + if parser.buffer[parser.buffer_pos] == '*' { + return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) + } + + // Is it an anchor? + if parser.buffer[parser.buffer_pos] == '&' { + return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) + } + + // Is it a tag? + if parser.buffer[parser.buffer_pos] == '!' { + return yaml_parser_fetch_tag(parser) + } + + // Is it a literal scalar? + if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, true) + } + + // Is it a folded scalar? + if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, false) + } + + // Is it a single-quoted scalar? + if parser.buffer[parser.buffer_pos] == '\'' { + return yaml_parser_fetch_flow_scalar(parser, true) + } + + // Is it a double-quoted scalar? + if parser.buffer[parser.buffer_pos] == '"' { + return yaml_parser_fetch_flow_scalar(parser, false) + } + + // Is it a plain scalar? + // + // A plain scalar may start with any non-blank characters except + // + // '-', '?', ':', ',', '[', ']', '{', '}', + // '#', '&', '*', '!', '|', '>', '\'', '\"', + // '%', '@', '`'. + // + // In the block context (and, for the '-' indicator, in the flow context + // too), it may also start with the characters + // + // '-', '?', ':' + // + // if it is followed by a non-space character. + // + // The last rule is more restrictive than the specification requires. + // [Go] TODO Make this logic more reasonable. + //switch parser.buffer[parser.buffer_pos] { + //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': + //} + if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || + parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || + parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || + (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level == 0 && + (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && + !is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_plain_scalar(parser) + } + + // If we don't determine the token type so far, it is an error. + return yaml_parser_set_scanner_error(parser, + "while scanning for the next token", parser.mark, + "found character that cannot start any token") +} + +func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) { + if !simple_key.possible { + return false, true + } + + // The 1.2 specification says: + // + // "If the ? indicator is omitted, parsing needs to see past the + // implicit key to recognize it as such. To limit the amount of + // lookahead required, the “:” indicator must appear at most 1024 + // Unicode characters beyond the start of the key. In addition, the key + // is restricted to a single line." + // + if simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index { + // Check if the potential simple key to be removed is required. + if simple_key.required { + return false, yaml_parser_set_scanner_error(parser, + "while scanning a simple key", simple_key.mark, + "could not find expected ':'") + } + simple_key.possible = false + return false, true + } + return true, true +} + +// Check if a simple key may start at the current position and add it if +// needed. +func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { + // A simple key is required at the current position if the scanner is in + // the block context and the current column coincides with the indentation + // level. + + required := parser.flow_level == 0 && parser.indent == parser.mark.column + + // + // If the current position may start a simple key, save it. + // + if parser.simple_key_allowed { + simple_key := yaml_simple_key_t{ + possible: true, + required: required, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, + } + + if !yaml_parser_remove_simple_key(parser) { + return false + } + parser.simple_keys[len(parser.simple_keys)-1] = simple_key + parser.simple_keys_by_tok[simple_key.token_number] = len(parser.simple_keys) - 1 + } + return true +} + +// Remove a potential simple key at the current flow level. +func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { + i := len(parser.simple_keys) - 1 + if parser.simple_keys[i].possible { + // If the key is required, it is an error. + if parser.simple_keys[i].required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", parser.simple_keys[i].mark, + "could not find expected ':'") + } + // Remove the key from the stack. + parser.simple_keys[i].possible = false + delete(parser.simple_keys_by_tok, parser.simple_keys[i].token_number) + } + return true +} + +// max_flow_level limits the flow_level +const max_flow_level = 10000 + +// Increase the flow level and resize the simple key list if needed. +func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { + // Reset the simple key on the next level. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{ + possible: false, + required: false, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, + }) + + // Increase the flow level. + parser.flow_level++ + if parser.flow_level > max_flow_level { + return yaml_parser_set_scanner_error(parser, + "while increasing flow level", parser.simple_keys[len(parser.simple_keys)-1].mark, + fmt.Sprintf("exceeded max depth of %d", max_flow_level)) + } + return true +} + +// Decrease the flow level. +func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { + if parser.flow_level > 0 { + parser.flow_level-- + last := len(parser.simple_keys) - 1 + delete(parser.simple_keys_by_tok, parser.simple_keys[last].token_number) + parser.simple_keys = parser.simple_keys[:last] + } + return true +} + +// max_indents limits the indents stack size +const max_indents = 10000 + +// Push the current indentation level to the stack and set the new level +// the current column is greater than the indentation level. In this case, +// append or insert the specified token into the token queue. +func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + if parser.indent < column { + // Push the current indentation level to the stack and set the new + // indentation level. + parser.indents = append(parser.indents, parser.indent) + parser.indent = column + if len(parser.indents) > max_indents { + return yaml_parser_set_scanner_error(parser, + "while increasing indent level", parser.simple_keys[len(parser.simple_keys)-1].mark, + fmt.Sprintf("exceeded max depth of %d", max_indents)) + } + + // Create a token and insert it into the queue. + token := yaml_token_t{ + typ: typ, + start_mark: mark, + end_mark: mark, + } + if number > -1 { + number -= parser.tokens_parsed + } + yaml_insert_token(parser, number, &token) + } + return true +} + +// Pop indentation levels from the indents stack until the current level +// becomes less or equal to the column. For each indentation level, append +// the BLOCK-END token. +func yaml_parser_unroll_indent(parser *yaml_parser_t, column int, scan_mark yaml_mark_t) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + block_mark := scan_mark + block_mark.index-- + + // Loop through the indentation levels in the stack. + for parser.indent > column { + + // [Go] Reposition the end token before potential following + // foot comments of parent blocks. For that, search + // backwards for recent comments that were at the same + // indent as the block that is ending now. + stop_index := block_mark.index + for i := len(parser.comments) - 1; i >= 0; i-- { + comment := &parser.comments[i] + + if comment.end_mark.index < stop_index { + // Don't go back beyond the start of the comment/whitespace scan, unless column < 0. + // If requested indent column is < 0, then the document is over and everything else + // is a foot anyway. + break + } + if comment.start_mark.column == parser.indent+1 { + // This is a good match. But maybe there's a former comment + // at that same indent level, so keep searching. + block_mark = comment.start_mark + } + + // While the end of the former comment matches with + // the start of the following one, we know there's + // nothing in between and scanning is still safe. + stop_index = comment.scan_mark.index + } + + // Create a token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_END_TOKEN, + start_mark: block_mark, + end_mark: block_mark, + } + yaml_insert_token(parser, -1, &token) + + // Pop the indentation level. + parser.indent = parser.indents[len(parser.indents)-1] + parser.indents = parser.indents[:len(parser.indents)-1] + } + return true +} + +// Initialize the scanner and produce the STREAM-START token. +func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { + + // Set the initial indentation. + parser.indent = -1 + + // Initialize the simple key stack. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + parser.simple_keys_by_tok = make(map[int]int) + + // A simple key is allowed at the beginning of the stream. + parser.simple_key_allowed = true + + // We have started. + parser.stream_start_produced = true + + // Create the STREAM-START token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_START_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + encoding: parser.encoding, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the STREAM-END token and shut down the scanner. +func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { + + // Force new line. + if parser.mark.column != 0 { + parser.mark.column = 0 + parser.mark.line++ + } + + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1, parser.mark) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the STREAM-END token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. +func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1, parser.mark) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. + token := yaml_token_t{} + if !yaml_parser_scan_directive(parser, &token) { + return false + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the DOCUMENT-START or DOCUMENT-END token. +func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1, parser.mark) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Consume the token. + start_mark := parser.mark + + skip(parser) + skip(parser) + skip(parser) + + end_mark := parser.mark + + // Create the DOCUMENT-START or DOCUMENT-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. +func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { + + // The indicators '[' and '{' may start a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // Increase the flow level. + if !yaml_parser_increase_flow_level(parser) { + return false + } + + // A simple key may follow the indicators '[' and '{'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. +func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset any potential simple key on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Decrease the flow level. + if !yaml_parser_decrease_flow_level(parser) { + return false + } + + // No simple keys after the indicators ']' and '}'. + parser.simple_key_allowed = false + + // Consume the token. + + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-ENTRY token. +func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after ','. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_FLOW_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the BLOCK-ENTRY token. +func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { + // Check if the scanner is in the block context. + if parser.flow_level == 0 { + // Check if we are allowed to start a new entry. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "block sequence entries are not allowed in this context") + } + // Add the BLOCK-SEQUENCE-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { + return false + } + } else { + // It is an error for the '-' indicator to occur in the flow context, + // but we let the Parser detect and report about it because the Parser + // is able to point to the context. + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '-'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the BLOCK-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the KEY token. +func yaml_parser_fetch_key(parser *yaml_parser_t) bool { + + // In the block context, additional checks are required. + if parser.flow_level == 0 { + // Check if we are allowed to start a new key (not nessesary simple). + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping keys are not allowed in this context") + } + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '?' in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the KEY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the VALUE token. +func yaml_parser_fetch_value(parser *yaml_parser_t) bool { + + simple_key := &parser.simple_keys[len(parser.simple_keys)-1] + + // Have we found a simple key? + if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok { + return false + + } else if valid { + + // Create the KEY token and insert it into the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: simple_key.mark, + end_mark: simple_key.mark, + } + yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) + + // In the block context, we may need to add the BLOCK-MAPPING-START token. + if !yaml_parser_roll_indent(parser, simple_key.mark.column, + simple_key.token_number, + yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { + return false + } + + // Remove the simple key. + simple_key.possible = false + delete(parser.simple_keys_by_tok, simple_key.token_number) + + // A simple key cannot follow another simple key. + parser.simple_key_allowed = false + + } else { + // The ':' indicator follows a complex key. + + // In the block context, extra checks are required. + if parser.flow_level == 0 { + + // Check if we are allowed to start a complex value. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping values are not allowed in this context") + } + + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Simple keys after ':' are allowed in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + } + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the VALUE token and append it to the queue. + token := yaml_token_t{ + typ: yaml_VALUE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the ALIAS or ANCHOR token. +func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // An anchor or an alias could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow an anchor or an alias. + parser.simple_key_allowed = false + + // Create the ALIAS or ANCHOR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_anchor(parser, &token, typ) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the TAG token. +func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { + // A tag could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a tag. + parser.simple_key_allowed = false + + // Create the TAG token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_tag(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. +func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { + // Remove any potential simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // A simple key may follow a block scalar. + parser.simple_key_allowed = true + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_block_scalar(parser, &token, literal) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. +func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_flow_scalar(parser, &token, single) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,plain) token. +func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_plain_scalar(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Eat whitespaces and comments until the next token is found. +func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { + + scan_mark := parser.mark + + // Until the next token is not found. + for { + // Allow the BOM mark to start a line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { + skip(parser) + } + + // Eat whitespaces. + // Tabs are allowed: + // - in the flow context + // - in the block context, but not at the beginning of the line or + // after '-', '?', or ':' (complex value). + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if we just had a line comment under a sequence entry that + // looks more like a header to the following content. Similar to this: + // + // - # The comment + // - Some data + // + // If so, transform the line comment to a head comment and reposition. + if len(parser.comments) > 0 && len(parser.tokens) > 1 { + tokenA := parser.tokens[len(parser.tokens)-2] + tokenB := parser.tokens[len(parser.tokens)-1] + comment := &parser.comments[len(parser.comments)-1] + if tokenA.typ == yaml_BLOCK_SEQUENCE_START_TOKEN && tokenB.typ == yaml_BLOCK_ENTRY_TOKEN && len(comment.line) > 0 && !is_break(parser.buffer, parser.buffer_pos) { + // If it was in the prior line, reposition so it becomes a + // header of the follow up token. Otherwise, keep it in place + // so it becomes a header of the former. + comment.head = comment.line + comment.line = nil + if comment.start_mark.line == parser.mark.line-1 { + comment.token_mark = parser.mark + } + } + } + + // Eat a comment until a line break. + if parser.buffer[parser.buffer_pos] == '#' { + if !yaml_parser_scan_comments(parser, scan_mark) { + return false + } + } + + // If it is a line break, eat it. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + + // In the block context, a new line may start a simple key. + if parser.flow_level == 0 { + parser.simple_key_allowed = true + } + } else { + break // We have found a token. + } + } + + return true +} + +// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. +// +// Scope: +// +// %YAML 1.1 # a comment \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { + // Eat '%'. + start_mark := parser.mark + skip(parser) + + // Scan the directive name. + var name []byte + if !yaml_parser_scan_directive_name(parser, start_mark, &name) { + return false + } + + // Is it a YAML directive? + if bytes.Equal(name, []byte("YAML")) { + // Scan the VERSION directive value. + var major, minor int8 + if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { + return false + } + end_mark := parser.mark + + // Create a VERSION-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_VERSION_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + major: major, + minor: minor, + } + + // Is it a TAG directive? + } else if bytes.Equal(name, []byte("TAG")) { + // Scan the TAG directive value. + var handle, prefix []byte + if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { + return false + } + end_mark := parser.mark + + // Create a TAG-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_TAG_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + prefix: prefix, + } + + // Unknown directive. + } else { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unknown directive name") + return false + } + + // Eat the rest of the line including any comments. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + if parser.buffer[parser.buffer_pos] == '#' { + // [Go] Discard this inline comment for the time being. + //if !yaml_parser_scan_line_comment(parser, start_mark) { + // return false + //} + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + return true +} + +// Scan the directive name. +// +// Scope: +// +// %YAML 1.1 # a comment \n +// ^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^ +func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { + // Consume the directive name. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + var s []byte + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the name is empty. + if len(s) == 0 { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "could not find expected directive name") + return false + } + + // Check for an blank character after the name. + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unexpected non-alphabetical character") + return false + } + *name = s + return true +} + +// Scan the value of VERSION-DIRECTIVE. +// +// Scope: +// +// %YAML 1.1 # a comment \n +// ^^^^^^ +func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the major version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { + return false + } + + // Eat '.'. + if parser.buffer[parser.buffer_pos] != '.' { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected digit or '.' character") + } + + skip(parser) + + // Consume the minor version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { + return false + } + return true +} + +const max_number_length = 2 + +// Scan the version number of VERSION-DIRECTIVE. +// +// Scope: +// +// %YAML 1.1 # a comment \n +// ^ +// %YAML 1.1 # a comment \n +// ^ +func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { + + // Repeat while the next character is digit. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var value, length int8 + for is_digit(parser.buffer, parser.buffer_pos) { + // Check if the number is too long. + length++ + if length > max_number_length { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "found extremely long version number") + } + value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the number was present. + if length == 0 { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected version number") + } + *number = value + return true +} + +// Scan the value of a TAG-DIRECTIVE token. +// +// Scope: +// +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { + var handle_value, prefix_value []byte + + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a handle. + if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { + return false + } + + // Expect a whitespace. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blank(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace") + return false + } + + // Eat whitespaces. + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a prefix. + if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { + return false + } + + // Expect a whitespace or line break. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace or line break") + return false + } + + *handle = handle_value + *prefix = prefix_value + return true +} + +func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { + var s []byte + + // Eat the indicator character. + start_mark := parser.mark + skip(parser) + + // Consume the value. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + end_mark := parser.mark + + /* + * Check if length of the anchor is greater than 0 and it is followed by + * a whitespace character or one of the indicators: + * + * '?', ':', ',', ']', '}', '%', '@', '`'. + */ + + if len(s) == 0 || + !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || + parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '`') { + context := "while scanning an alias" + if typ == yaml_ANCHOR_TOKEN { + context = "while scanning an anchor" + } + yaml_parser_set_scanner_error(parser, context, start_mark, + "did not find expected alphabetic or numeric character") + return false + } + + // Create a token. + *token = yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + value: s, + } + + return true +} + +/* + * Scan a TAG token. + */ + +func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { + var handle, suffix []byte + + start_mark := parser.mark + + // Check if the tag is in the canonical form. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + if parser.buffer[parser.buffer_pos+1] == '<' { + // Keep the handle as '' + + // Eat '!<' + skip(parser) + skip(parser) + + // Consume the tag value. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + + // Check for '>' and eat it. + if parser.buffer[parser.buffer_pos] != '>' { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find the expected '>'") + return false + } + + skip(parser) + } else { + // The tag has either the '!suffix' or the '!handle!suffix' form. + + // First, try to scan a handle. + if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { + return false + } + + // Check if it is, indeed, handle. + if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { + // Scan the suffix now. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + } else { + // It wasn't a handle after all. Scan the rest of the tag. + if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { + return false + } + + // Set the handle to '!'. + handle = []byte{'!'} + + // A special case: the '!' tag. Set the handle to '' and the + // suffix to '!'. + if len(suffix) == 0 { + handle, suffix = suffix, handle + } + } + } + + // Check the character which ends the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find expected whitespace or line break") + return false + } + + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_TAG_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + suffix: suffix, + } + return true +} + +// Scan a tag handle. +func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { + // Check the initial '!' character. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] != '!' { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + + var s []byte + + // Copy the '!' character. + s = read(parser, s) + + // Copy all subsequent alphabetical and numerical characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the trailing character is '!' and copy it. + if parser.buffer[parser.buffer_pos] == '!' { + s = read(parser, s) + } else { + // It's either the '!' tag or not really a tag handle. If it's a %TAG + // directive, it's an error. If it's a tag token, it must be a part of URI. + if directive && string(s) != "!" { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + } + + *handle = s + return true +} + +// Scan a tag. +func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { + //size_t length = head ? strlen((char *)head) : 0 + var s []byte + hasTag := len(head) > 0 + + // Copy the head if needed. + // + // Note that we don't copy the leading '!' character. + if len(head) > 1 { + s = append(s, head[1:]...) + } + + // Scan the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // The set of characters that may appear in URI is as follows: + // + // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', + // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', + // '%'. + // [Go] TODO Convert this into more reasonable logic. + for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || + parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || + parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || + parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || + parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || + parser.buffer[parser.buffer_pos] == '%' { + // Check if it is a URI-escape sequence. + if parser.buffer[parser.buffer_pos] == '%' { + if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { + return false + } + } else { + s = read(parser, s) + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + hasTag = true + } + + if !hasTag { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected tag URI") + return false + } + *uri = s + return true +} + +// Decode an URI-escape sequence corresponding to a single UTF-8 character. +func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { + + // Decode the required number of characters. + w := 1024 + for w > 0 { + // Check for a URI-escaped octet. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + + if !(parser.buffer[parser.buffer_pos] == '%' && + is_hex(parser.buffer, parser.buffer_pos+1) && + is_hex(parser.buffer, parser.buffer_pos+2)) { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find URI escaped octet") + } + + // Get the octet. + octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) + + // If it is the leading octet, determine the length of the UTF-8 sequence. + if w == 1024 { + w = width(octet) + if w == 0 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect leading UTF-8 octet") + } + } else { + // Check if the trailing octet is correct. + if octet&0xC0 != 0x80 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect trailing UTF-8 octet") + } + } + + // Copy the octet and move the pointers. + *s = append(*s, octet) + skip(parser) + skip(parser) + skip(parser) + w-- + } + return true +} + +// Scan a block scalar. +func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { + // Eat the indicator '|' or '>'. + start_mark := parser.mark + skip(parser) + + // Scan the additional block scalar indicators. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check for a chomping indicator. + var chomping, increment int + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + // Set the chomping method and eat the indicator. + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + + // Check for an indentation indicator. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if is_digit(parser.buffer, parser.buffer_pos) { + // Check that the indentation is greater than 0. + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + + // Get the indentation level and eat the indicator. + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + } + + } else if is_digit(parser.buffer, parser.buffer_pos) { + // Do the same as above, but in the opposite order. + + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + } + } + + // Eat whitespaces and comments to the end of the line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.buffer[parser.buffer_pos] == '#' { + if !yaml_parser_scan_line_comment(parser, start_mark) { + return false + } + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + end_mark := parser.mark + + // Set the indentation level if it was specified. + var indent int + if increment > 0 { + if parser.indent >= 0 { + indent = parser.indent + increment + } else { + indent = increment + } + } + + // Scan the leading line breaks and determine the indentation level if needed. + var s, leading_break, trailing_breaks []byte + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + + // Scan the block scalar content. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var leading_blank, trailing_blank bool + for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { + // We are at the beginning of a non-empty line. + + // Is it a trailing whitespace? + trailing_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Check if we need to fold the leading line break. + if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { + // Do we need to join the lines by space? + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } + } else { + s = append(s, leading_break...) + } + leading_break = leading_break[:0] + + // Append the remaining line breaks. + s = append(s, trailing_breaks...) + trailing_breaks = trailing_breaks[:0] + + // Is it a leading whitespace? + leading_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Consume the current line. + for !is_breakz(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + leading_break = read_line(parser, leading_break) + + // Eat the following indentation spaces and line breaks. + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + } + + // Chomp the tail. + if chomping != -1 { + s = append(s, leading_break...) + } + if chomping == 1 { + s = append(s, trailing_breaks...) + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_LITERAL_SCALAR_STYLE, + } + if !literal { + token.style = yaml_FOLDED_SCALAR_STYLE + } + return true +} + +// Scan indentation spaces and line breaks for a block scalar. Determine the +// indentation level if needed. +func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { + *end_mark = parser.mark + + // Eat the indentation spaces and line breaks. + max_indent := 0 + for { + // Eat the indentation spaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.mark.column > max_indent { + max_indent = parser.mark.column + } + + // Check for a tab character messing the indentation. + if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { + return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found a tab character where an indentation space is expected") + } + + // Have we found a non-empty line? + if !is_break(parser.buffer, parser.buffer_pos) { + break + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + // [Go] Should really be returning breaks instead. + *breaks = read_line(parser, *breaks) + *end_mark = parser.mark + } + + // Determine the indentation level if needed. + if *indent == 0 { + *indent = max_indent + if *indent < parser.indent+1 { + *indent = parser.indent + 1 + } + if *indent < 1 { + *indent = 1 + } + } + return true +} + +// Scan a quoted scalar. +func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { + // Eat the left quote. + start_mark := parser.mark + skip(parser) + + // Consume the content of the quoted scalar. + var s, leading_break, trailing_breaks, whitespaces []byte + for { + // Check that there are no document indicators at the beginning of the line. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected document indicator") + return false + } + + // Check for EOF. + if is_z(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected end of stream") + return false + } + + // Consume non-blank characters. + leading_blanks := false + for !is_blankz(parser.buffer, parser.buffer_pos) { + if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { + // Is is an escaped single quote. + s = append(s, '\'') + skip(parser) + skip(parser) + + } else if single && parser.buffer[parser.buffer_pos] == '\'' { + // It is a right single quote. + break + } else if !single && parser.buffer[parser.buffer_pos] == '"' { + // It is a right double quote. + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { + // It is an escaped line break. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + skip(parser) + skip_line(parser) + leading_blanks = true + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' { + // It is an escape sequence. + code_length := 0 + + // Check the escape character. + switch parser.buffer[parser.buffer_pos+1] { + case '0': + s = append(s, 0) + case 'a': + s = append(s, '\x07') + case 'b': + s = append(s, '\x08') + case 't', '\t': + s = append(s, '\x09') + case 'n': + s = append(s, '\x0A') + case 'v': + s = append(s, '\x0B') + case 'f': + s = append(s, '\x0C') + case 'r': + s = append(s, '\x0D') + case 'e': + s = append(s, '\x1B') + case ' ': + s = append(s, '\x20') + case '"': + s = append(s, '"') + case '\'': + s = append(s, '\'') + case '\\': + s = append(s, '\\') + case 'N': // NEL (#x85) + s = append(s, '\xC2') + s = append(s, '\x85') + case '_': // #xA0 + s = append(s, '\xC2') + s = append(s, '\xA0') + case 'L': // LS (#x2028) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA8') + case 'P': // PS (#x2029) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA9') + case 'x': + code_length = 2 + case 'u': + code_length = 4 + case 'U': + code_length = 8 + default: + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found unknown escape character") + return false + } + + skip(parser) + skip(parser) + + // Consume an arbitrary escape code. + if code_length > 0 { + var value int + + // Scan the character value. + if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { + return false + } + for k := 0; k < code_length; k++ { + if !is_hex(parser.buffer, parser.buffer_pos+k) { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "did not find expected hexdecimal number") + return false + } + value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) + } + + // Check the value and write the character. + if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found invalid Unicode character escape code") + return false + } + if value <= 0x7F { + s = append(s, byte(value)) + } else if value <= 0x7FF { + s = append(s, byte(0xC0+(value>>6))) + s = append(s, byte(0x80+(value&0x3F))) + } else if value <= 0xFFFF { + s = append(s, byte(0xE0+(value>>12))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } else { + s = append(s, byte(0xF0+(value>>18))) + s = append(s, byte(0x80+((value>>12)&0x3F))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } + + // Advance the pointer. + for k := 0; k < code_length; k++ { + skip(parser) + } + } + } else { + // It is a non-escaped non-blank character. + s = read(parser, s) + } + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we are at the end of the scalar. + if single { + if parser.buffer[parser.buffer_pos] == '\'' { + break + } + } else { + if parser.buffer[parser.buffer_pos] == '"' { + break + } + } + + // Consume blank characters. + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Join the whitespaces or fold line breaks. + if leading_blanks { + // Do we need to fold line breaks? + if len(leading_break) > 0 && leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Eat the right quote. + skip(parser) + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_SINGLE_QUOTED_SCALAR_STYLE, + } + if !single { + token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + return true +} + +// Scan a plain scalar. +func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { + + var s, leading_break, trailing_breaks, whitespaces []byte + var leading_blanks bool + var indent = parser.indent + 1 + + start_mark := parser.mark + end_mark := parser.mark + + // Consume the content of the plain scalar. + for { + // Check for a document indicator. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + break + } + + // Check for a comment. + if parser.buffer[parser.buffer_pos] == '#' { + break + } + + // Consume non-blank characters. + for !is_blankz(parser.buffer, parser.buffer_pos) { + + // Check for indicators that may end a plain scalar. + if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level > 0 && + (parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}')) { + break + } + + // Check if we need to join whitespaces and breaks. + if leading_blanks || len(whitespaces) > 0 { + if leading_blanks { + // Do we need to fold line breaks? + if leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + leading_blanks = false + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Copy the character. + s = read(parser, s) + + end_mark = parser.mark + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + // Is it the end? + if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { + break + } + + // Consume blank characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + + // Check for tab characters that abuse indentation. + if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", + start_mark, "found a tab character that violates indentation") + return false + } + + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check indentation level. + if parser.flow_level == 0 && parser.mark.column < indent { + break + } + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_PLAIN_SCALAR_STYLE, + } + + // Note that we change the 'simple_key_allowed' flag. + if leading_blanks { + parser.simple_key_allowed = true + } + return true +} + +func yaml_parser_scan_line_comment(parser *yaml_parser_t, token_mark yaml_mark_t) bool { + if parser.newlines > 0 { + return true + } + + var start_mark yaml_mark_t + var text []byte + + for peek := 0; peek < 512; peek++ { + if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { + break + } + if is_blank(parser.buffer, parser.buffer_pos+peek) { + continue + } + if parser.buffer[parser.buffer_pos+peek] == '#' { + seen := parser.mark.index + peek + for { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if is_breakz(parser.buffer, parser.buffer_pos) { + if parser.mark.index >= seen { + break + } + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } else if parser.mark.index >= seen { + if len(text) == 0 { + start_mark = parser.mark + } + text = read(parser, text) + } else { + skip(parser) + } + } + } + break + } + if len(text) > 0 { + parser.comments = append(parser.comments, yaml_comment_t{ + token_mark: token_mark, + start_mark: start_mark, + line: text, + }) + } + return true +} + +func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) bool { + token := parser.tokens[len(parser.tokens)-1] + + if token.typ == yaml_FLOW_ENTRY_TOKEN && len(parser.tokens) > 1 { + token = parser.tokens[len(parser.tokens)-2] + } + + var token_mark = token.start_mark + var start_mark yaml_mark_t + var next_indent = parser.indent + if next_indent < 0 { + next_indent = 0 + } + + var recent_empty = false + var first_empty = parser.newlines <= 1 + + var line = parser.mark.line + var column = parser.mark.column + + var text []byte + + // The foot line is the place where a comment must start to + // still be considered as a foot of the prior content. + // If there's some content in the currently parsed line, then + // the foot is the line below it. + var foot_line = -1 + if scan_mark.line > 0 { + foot_line = parser.mark.line - parser.newlines + 1 + if parser.newlines == 0 && parser.mark.column > 1 { + foot_line++ + } + } + + var peek = 0 + for ; peek < 512; peek++ { + if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { + break + } + column++ + if is_blank(parser.buffer, parser.buffer_pos+peek) { + continue + } + c := parser.buffer[parser.buffer_pos+peek] + var close_flow = parser.flow_level > 0 && (c == ']' || c == '}') + if close_flow || is_breakz(parser.buffer, parser.buffer_pos+peek) { + // Got line break or terminator. + if close_flow || !recent_empty { + if close_flow || first_empty && (start_mark.line == foot_line && token.typ != yaml_VALUE_TOKEN || start_mark.column-1 < next_indent) { + // This is the first empty line and there were no empty lines before, + // so this initial part of the comment is a foot of the prior token + // instead of being a head for the following one. Split it up. + // Alternatively, this might also be the last comment inside a flow + // scope, so it must be a footer. + if len(text) > 0 { + if start_mark.column-1 < next_indent { + // If dedented it's unrelated to the prior token. + token_mark = start_mark + } + parser.comments = append(parser.comments, yaml_comment_t{ + scan_mark: scan_mark, + token_mark: token_mark, + start_mark: start_mark, + end_mark: yaml_mark_t{parser.mark.index + peek, line, column}, + foot: text, + }) + scan_mark = yaml_mark_t{parser.mark.index + peek, line, column} + token_mark = scan_mark + text = nil + } + } else { + if len(text) > 0 && parser.buffer[parser.buffer_pos+peek] != 0 { + text = append(text, '\n') + } + } + } + if !is_break(parser.buffer, parser.buffer_pos+peek) { + break + } + first_empty = false + recent_empty = true + column = 0 + line++ + continue + } + + if len(text) > 0 && (close_flow || column-1 < next_indent && column != start_mark.column) { + // The comment at the different indentation is a foot of the + // preceding data rather than a head of the upcoming one. + parser.comments = append(parser.comments, yaml_comment_t{ + scan_mark: scan_mark, + token_mark: token_mark, + start_mark: start_mark, + end_mark: yaml_mark_t{parser.mark.index + peek, line, column}, + foot: text, + }) + scan_mark = yaml_mark_t{parser.mark.index + peek, line, column} + token_mark = scan_mark + text = nil + } + + if parser.buffer[parser.buffer_pos+peek] != '#' { + break + } + + if len(text) == 0 { + start_mark = yaml_mark_t{parser.mark.index + peek, line, column} + } else { + text = append(text, '\n') + } + + recent_empty = false + + // Consume until after the consumed comment line. + seen := parser.mark.index + peek + for { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if is_breakz(parser.buffer, parser.buffer_pos) { + if parser.mark.index >= seen { + break + } + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } else if parser.mark.index >= seen { + text = read(parser, text) + } else { + skip(parser) + } + } + + peek = 0 + column = 0 + line = parser.mark.line + next_indent = parser.indent + if next_indent < 0 { + next_indent = 0 + } + } + + if len(text) > 0 { + parser.comments = append(parser.comments, yaml_comment_t{ + scan_mark: scan_mark, + token_mark: start_mark, + start_mark: start_mark, + end_mark: yaml_mark_t{parser.mark.index + peek - 1, line, column}, + head: text, + }) + } + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/sorter.go b/upstream/vendor/go.yaml.in/yaml/v3/sorter.go new file mode 100644 index 0000000000..9210ece7e9 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/sorter.go @@ -0,0 +1,134 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package yaml + +import ( + "reflect" + "unicode" +) + +type keyList []reflect.Value + +func (l keyList) Len() int { return len(l) } +func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } +func (l keyList) Less(i, j int) bool { + a := l[i] + b := l[j] + ak := a.Kind() + bk := b.Kind() + for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { + a = a.Elem() + ak = a.Kind() + } + for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { + b = b.Elem() + bk = b.Kind() + } + af, aok := keyFloat(a) + bf, bok := keyFloat(b) + if aok && bok { + if af != bf { + return af < bf + } + if ak != bk { + return ak < bk + } + return numLess(a, b) + } + if ak != reflect.String || bk != reflect.String { + return ak < bk + } + ar, br := []rune(a.String()), []rune(b.String()) + digits := false + for i := 0; i < len(ar) && i < len(br); i++ { + if ar[i] == br[i] { + digits = unicode.IsDigit(ar[i]) + continue + } + al := unicode.IsLetter(ar[i]) + bl := unicode.IsLetter(br[i]) + if al && bl { + return ar[i] < br[i] + } + if al || bl { + if digits { + return al + } else { + return bl + } + } + var ai, bi int + var an, bn int64 + if ar[i] == '0' || br[i] == '0' { + for j := i - 1; j >= 0 && unicode.IsDigit(ar[j]); j-- { + if ar[j] != '0' { + an = 1 + bn = 1 + break + } + } + } + for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { + an = an*10 + int64(ar[ai]-'0') + } + for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { + bn = bn*10 + int64(br[bi]-'0') + } + if an != bn { + return an < bn + } + if ai != bi { + return ai < bi + } + return ar[i] < br[i] + } + return len(ar) < len(br) +} + +// keyFloat returns a float value for v if it is a number/bool +// and whether it is a number/bool or not. +func keyFloat(v reflect.Value) (f float64, ok bool) { + switch v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return float64(v.Int()), true + case reflect.Float32, reflect.Float64: + return v.Float(), true + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return float64(v.Uint()), true + case reflect.Bool: + if v.Bool() { + return 1, true + } + return 0, true + } + return 0, false +} + +// numLess returns whether a < b. +// a and b must necessarily have the same kind. +func numLess(a, b reflect.Value) bool { + switch a.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return a.Int() < b.Int() + case reflect.Float32, reflect.Float64: + return a.Float() < b.Float() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return a.Uint() < b.Uint() + case reflect.Bool: + return !a.Bool() && b.Bool() + } + panic("not a number") +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/writerc.go b/upstream/vendor/go.yaml.in/yaml/v3/writerc.go new file mode 100644 index 0000000000..266d0b092c --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/writerc.go @@ -0,0 +1,48 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// Copyright (c) 2006-2010 Kirill Simonov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package yaml + +// Set the writer error and return false. +func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_WRITER_ERROR + emitter.problem = problem + return false +} + +// Flush the output buffer. +func yaml_emitter_flush(emitter *yaml_emitter_t) bool { + if emitter.write_handler == nil { + panic("write handler not set") + } + + // Check if the buffer is empty. + if emitter.buffer_pos == 0 { + return true + } + + if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { + return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) + } + emitter.buffer_pos = 0 + return true +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/yaml.go b/upstream/vendor/go.yaml.in/yaml/v3/yaml.go new file mode 100644 index 0000000000..0b101cd20d --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/yaml.go @@ -0,0 +1,703 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package yaml implements YAML support for the Go language. +// +// Source code and other details for the project are available at GitHub: +// +// https://github.com/yaml/go-yaml +package yaml + +import ( + "errors" + "fmt" + "io" + "reflect" + "strings" + "sync" + "unicode/utf8" +) + +// The Unmarshaler interface may be implemented by types to customize their +// behavior when being unmarshaled from a YAML document. +type Unmarshaler interface { + UnmarshalYAML(value *Node) error +} + +type obsoleteUnmarshaler interface { + UnmarshalYAML(unmarshal func(interface{}) error) error +} + +// The Marshaler interface may be implemented by types to customize their +// behavior when being marshaled into a YAML document. The returned value +// is marshaled in place of the original value implementing Marshaler. +// +// If an error is returned by MarshalYAML, the marshaling procedure stops +// and returns with the provided error. +type Marshaler interface { + MarshalYAML() (interface{}, error) +} + +// Unmarshal decodes the first document found within the in byte slice +// and assigns decoded values into the out value. +// +// Maps and pointers (to a struct, string, int, etc) are accepted as out +// values. If an internal pointer within a struct is not initialized, +// the yaml package will initialize it if necessary for unmarshalling +// the provided data. The out parameter must not be nil. +// +// The type of the decoded values should be compatible with the respective +// values in out. If one or more values cannot be decoded due to a type +// mismatches, decoding continues partially until the end of the YAML +// content, and a *yaml.TypeError is returned with details for all +// missed values. +// +// Struct fields are only unmarshalled if they are exported (have an +// upper case first letter), and are unmarshalled using the field name +// lowercased as the default key. Custom keys may be defined via the +// "yaml" name in the field tag: the content preceding the first comma +// is used as the key, and the following comma-separated options are +// used to tweak the marshalling process (see Marshal). +// Conflicting names result in a runtime error. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// var t T +// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// +// See the documentation of Marshal for the format of tags and a list of +// supported tag options. +func Unmarshal(in []byte, out interface{}) (err error) { + return unmarshal(in, out, false) +} + +// A Decoder reads and decodes YAML values from an input stream. +type Decoder struct { + parser *parser + knownFields bool +} + +// NewDecoder returns a new decoder that reads from r. +// +// The decoder introduces its own buffering and may read +// data from r beyond the YAML values requested. +func NewDecoder(r io.Reader) *Decoder { + return &Decoder{ + parser: newParserFromReader(r), + } +} + +// KnownFields ensures that the keys in decoded mappings to +// exist as fields in the struct being decoded into. +func (dec *Decoder) KnownFields(enable bool) { + dec.knownFields = enable +} + +// Decode reads the next YAML-encoded value from its input +// and stores it in the value pointed to by v. +// +// See the documentation for Unmarshal for details about the +// conversion of YAML into a Go value. +func (dec *Decoder) Decode(v interface{}) (err error) { + d := newDecoder() + d.knownFields = dec.knownFields + defer handleErr(&err) + node := dec.parser.parse() + if node == nil { + return io.EOF + } + out := reflect.ValueOf(v) + if out.Kind() == reflect.Ptr && !out.IsNil() { + out = out.Elem() + } + d.unmarshal(node, out) + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +// Decode decodes the node and stores its data into the value pointed to by v. +// +// See the documentation for Unmarshal for details about the +// conversion of YAML into a Go value. +func (n *Node) Decode(v interface{}) (err error) { + d := newDecoder() + defer handleErr(&err) + out := reflect.ValueOf(v) + if out.Kind() == reflect.Ptr && !out.IsNil() { + out = out.Elem() + } + d.unmarshal(n, out) + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +func unmarshal(in []byte, out interface{}, strict bool) (err error) { + defer handleErr(&err) + d := newDecoder() + p := newParser(in) + defer p.destroy() + node := p.parse() + if node != nil { + v := reflect.ValueOf(out) + if v.Kind() == reflect.Ptr && !v.IsNil() { + v = v.Elem() + } + d.unmarshal(node, v) + } + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +// Marshal serializes the value provided into a YAML document. The structure +// of the generated document will reflect the structure of the value itself. +// Maps and pointers (to struct, string, int, etc) are accepted as the in value. +// +// Struct fields are only marshalled if they are exported (have an upper case +// first letter), and are marshalled using the field name lowercased as the +// default key. Custom keys may be defined via the "yaml" name in the field +// tag: the content preceding the first comma is used as the key, and the +// following comma-separated options are used to tweak the marshalling process. +// Conflicting names result in a runtime error. +// +// The field tag format accepted is: +// +// `(...) yaml:"[][,[,]]" (...)` +// +// The following flags are currently supported: +// +// omitempty Only include the field if it's not set to the zero +// value for the type or to empty slices or maps. +// Zero valued structs will be omitted if all their public +// fields are zero, unless they implement an IsZero +// method (see the IsZeroer interface type), in which +// case the field will be excluded if IsZero returns true. +// +// flow Marshal using a flow style (useful for structs, +// sequences and maps). +// +// inline Inline the field, which must be a struct or a map, +// causing all of its fields or keys to be processed as if +// they were part of the outer struct. For maps, keys must +// not conflict with the yaml keys of other struct fields. +// +// In addition, if the key is "-", the field is ignored. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" +func Marshal(in interface{}) (out []byte, err error) { + defer handleErr(&err) + e := newEncoder() + defer e.destroy() + e.marshalDoc("", reflect.ValueOf(in)) + e.finish() + out = e.out + return +} + +// An Encoder writes YAML values to an output stream. +type Encoder struct { + encoder *encoder +} + +// NewEncoder returns a new encoder that writes to w. +// The Encoder should be closed after use to flush all data +// to w. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{ + encoder: newEncoderWithWriter(w), + } +} + +// Encode writes the YAML encoding of v to the stream. +// If multiple items are encoded to the stream, the +// second and subsequent document will be preceded +// with a "---" document separator, but the first will not. +// +// See the documentation for Marshal for details about the conversion of Go +// values to YAML. +func (e *Encoder) Encode(v interface{}) (err error) { + defer handleErr(&err) + e.encoder.marshalDoc("", reflect.ValueOf(v)) + return nil +} + +// Encode encodes value v and stores its representation in n. +// +// See the documentation for Marshal for details about the +// conversion of Go values into YAML. +func (n *Node) Encode(v interface{}) (err error) { + defer handleErr(&err) + e := newEncoder() + defer e.destroy() + e.marshalDoc("", reflect.ValueOf(v)) + e.finish() + p := newParser(e.out) + p.textless = true + defer p.destroy() + doc := p.parse() + *n = *doc.Content[0] + return nil +} + +// SetIndent changes the used indentation used when encoding. +func (e *Encoder) SetIndent(spaces int) { + if spaces < 0 { + panic("yaml: cannot indent to a negative number of spaces") + } + e.encoder.indent = spaces +} + +// CompactSeqIndent makes it so that '- ' is considered part of the indentation. +func (e *Encoder) CompactSeqIndent() { + e.encoder.emitter.compact_sequence_indent = true +} + +// DefaultSeqIndent makes it so that '- ' is not considered part of the indentation. +func (e *Encoder) DefaultSeqIndent() { + e.encoder.emitter.compact_sequence_indent = false +} + +// Close closes the encoder by writing any remaining data. +// It does not write a stream terminating string "...". +func (e *Encoder) Close() (err error) { + defer handleErr(&err) + e.encoder.finish() + return nil +} + +func handleErr(err *error) { + if v := recover(); v != nil { + if e, ok := v.(yamlError); ok { + *err = e.err + } else { + panic(v) + } + } +} + +type yamlError struct { + err error +} + +func fail(err error) { + panic(yamlError{err}) +} + +func failf(format string, args ...interface{}) { + panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) +} + +// A TypeError is returned by Unmarshal when one or more fields in +// the YAML document cannot be properly decoded into the requested +// types. When this error is returned, the value is still +// unmarshaled partially. +type TypeError struct { + Errors []string +} + +func (e *TypeError) Error() string { + return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) +} + +type Kind uint32 + +const ( + DocumentNode Kind = 1 << iota + SequenceNode + MappingNode + ScalarNode + AliasNode +) + +type Style uint32 + +const ( + TaggedStyle Style = 1 << iota + DoubleQuotedStyle + SingleQuotedStyle + LiteralStyle + FoldedStyle + FlowStyle +) + +// Node represents an element in the YAML document hierarchy. While documents +// are typically encoded and decoded into higher level types, such as structs +// and maps, Node is an intermediate representation that allows detailed +// control over the content being decoded or encoded. +// +// It's worth noting that although Node offers access into details such as +// line numbers, colums, and comments, the content when re-encoded will not +// have its original textual representation preserved. An effort is made to +// render the data plesantly, and to preserve comments near the data they +// describe, though. +// +// Values that make use of the Node type interact with the yaml package in the +// same way any other type would do, by encoding and decoding yaml data +// directly or indirectly into them. +// +// For example: +// +// var person struct { +// Name string +// Address yaml.Node +// } +// err := yaml.Unmarshal(data, &person) +// +// Or by itself: +// +// var person Node +// err := yaml.Unmarshal(data, &person) +type Node struct { + // Kind defines whether the node is a document, a mapping, a sequence, + // a scalar value, or an alias to another node. The specific data type of + // scalar nodes may be obtained via the ShortTag and LongTag methods. + Kind Kind + + // Style allows customizing the apperance of the node in the tree. + Style Style + + // Tag holds the YAML tag defining the data type for the value. + // When decoding, this field will always be set to the resolved tag, + // even when it wasn't explicitly provided in the YAML content. + // When encoding, if this field is unset the value type will be + // implied from the node properties, and if it is set, it will only + // be serialized into the representation if TaggedStyle is used or + // the implicit tag diverges from the provided one. + Tag string + + // Value holds the unescaped and unquoted represenation of the value. + Value string + + // Anchor holds the anchor name for this node, which allows aliases to point to it. + Anchor string + + // Alias holds the node that this alias points to. Only valid when Kind is AliasNode. + Alias *Node + + // Content holds contained nodes for documents, mappings, and sequences. + Content []*Node + + // HeadComment holds any comments in the lines preceding the node and + // not separated by an empty line. + HeadComment string + + // LineComment holds any comments at the end of the line where the node is in. + LineComment string + + // FootComment holds any comments following the node and before empty lines. + FootComment string + + // Line and Column hold the node position in the decoded YAML text. + // These fields are not respected when encoding the node. + Line int + Column int +} + +// IsZero returns whether the node has all of its fields unset. +func (n *Node) IsZero() bool { + return n.Kind == 0 && n.Style == 0 && n.Tag == "" && n.Value == "" && n.Anchor == "" && n.Alias == nil && n.Content == nil && + n.HeadComment == "" && n.LineComment == "" && n.FootComment == "" && n.Line == 0 && n.Column == 0 +} + +// LongTag returns the long form of the tag that indicates the data type for +// the node. If the Tag field isn't explicitly defined, one will be computed +// based on the node properties. +func (n *Node) LongTag() string { + return longTag(n.ShortTag()) +} + +// ShortTag returns the short form of the YAML tag that indicates data type for +// the node. If the Tag field isn't explicitly defined, one will be computed +// based on the node properties. +func (n *Node) ShortTag() string { + if n.indicatedString() { + return strTag + } + if n.Tag == "" || n.Tag == "!" { + switch n.Kind { + case MappingNode: + return mapTag + case SequenceNode: + return seqTag + case AliasNode: + if n.Alias != nil { + return n.Alias.ShortTag() + } + case ScalarNode: + tag, _ := resolve("", n.Value) + return tag + case 0: + // Special case to make the zero value convenient. + if n.IsZero() { + return nullTag + } + } + return "" + } + return shortTag(n.Tag) +} + +func (n *Node) indicatedString() bool { + return n.Kind == ScalarNode && + (shortTag(n.Tag) == strTag || + (n.Tag == "" || n.Tag == "!") && n.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0) +} + +// SetString is a convenience function that sets the node to a string value +// and defines its style in a pleasant way depending on its content. +func (n *Node) SetString(s string) { + n.Kind = ScalarNode + if utf8.ValidString(s) { + n.Value = s + n.Tag = strTag + } else { + n.Value = encodeBase64(s) + n.Tag = binaryTag + } + if strings.Contains(n.Value, "\n") { + n.Style = LiteralStyle + } +} + +// -------------------------------------------------------------------------- +// Maintain a mapping of keys to structure field indexes + +// The code in this section was copied from mgo/bson. + +// structInfo holds details for the serialization of fields of +// a given struct. +type structInfo struct { + FieldsMap map[string]fieldInfo + FieldsList []fieldInfo + + // InlineMap is the number of the field in the struct that + // contains an ,inline map, or -1 if there's none. + InlineMap int + + // InlineUnmarshalers holds indexes to inlined fields that + // contain unmarshaler values. + InlineUnmarshalers [][]int +} + +type fieldInfo struct { + Key string + Num int + OmitEmpty bool + Flow bool + // Id holds the unique field identifier, so we can cheaply + // check for field duplicates without maintaining an extra map. + Id int + + // Inline holds the field index if the field is part of an inlined struct. + Inline []int +} + +var structMap = make(map[reflect.Type]*structInfo) +var fieldMapMutex sync.RWMutex +var unmarshalerType reflect.Type + +func init() { + var v Unmarshaler + unmarshalerType = reflect.ValueOf(&v).Elem().Type() +} + +func getStructInfo(st reflect.Type) (*structInfo, error) { + fieldMapMutex.RLock() + sinfo, found := structMap[st] + fieldMapMutex.RUnlock() + if found { + return sinfo, nil + } + + n := st.NumField() + fieldsMap := make(map[string]fieldInfo) + fieldsList := make([]fieldInfo, 0, n) + inlineMap := -1 + inlineUnmarshalers := [][]int(nil) + for i := 0; i != n; i++ { + field := st.Field(i) + if field.PkgPath != "" && !field.Anonymous { + continue // Private field + } + + info := fieldInfo{Num: i} + + tag := field.Tag.Get("yaml") + if tag == "" && strings.Index(string(field.Tag), ":") < 0 { + tag = string(field.Tag) + } + if tag == "-" { + continue + } + + inline := false + fields := strings.Split(tag, ",") + if len(fields) > 1 { + for _, flag := range fields[1:] { + switch flag { + case "omitempty": + info.OmitEmpty = true + case "flow": + info.Flow = true + case "inline": + inline = true + default: + return nil, errors.New(fmt.Sprintf("unsupported flag %q in tag %q of type %s", flag, tag, st)) + } + } + tag = fields[0] + } + + if inline { + switch field.Type.Kind() { + case reflect.Map: + if inlineMap >= 0 { + return nil, errors.New("multiple ,inline maps in struct " + st.String()) + } + if field.Type.Key() != reflect.TypeOf("") { + return nil, errors.New("option ,inline needs a map with string keys in struct " + st.String()) + } + inlineMap = info.Num + case reflect.Struct, reflect.Ptr: + ftype := field.Type + for ftype.Kind() == reflect.Ptr { + ftype = ftype.Elem() + } + if ftype.Kind() != reflect.Struct { + return nil, errors.New("option ,inline may only be used on a struct or map field") + } + if reflect.PtrTo(ftype).Implements(unmarshalerType) { + inlineUnmarshalers = append(inlineUnmarshalers, []int{i}) + } else { + sinfo, err := getStructInfo(ftype) + if err != nil { + return nil, err + } + for _, index := range sinfo.InlineUnmarshalers { + inlineUnmarshalers = append(inlineUnmarshalers, append([]int{i}, index...)) + } + for _, finfo := range sinfo.FieldsList { + if _, found := fieldsMap[finfo.Key]; found { + msg := "duplicated key '" + finfo.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + if finfo.Inline == nil { + finfo.Inline = []int{i, finfo.Num} + } else { + finfo.Inline = append([]int{i}, finfo.Inline...) + } + finfo.Id = len(fieldsList) + fieldsMap[finfo.Key] = finfo + fieldsList = append(fieldsList, finfo) + } + } + default: + return nil, errors.New("option ,inline may only be used on a struct or map field") + } + continue + } + + if tag != "" { + info.Key = tag + } else { + info.Key = strings.ToLower(field.Name) + } + + if _, found = fieldsMap[info.Key]; found { + msg := "duplicated key '" + info.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + + info.Id = len(fieldsList) + fieldsList = append(fieldsList, info) + fieldsMap[info.Key] = info + } + + sinfo = &structInfo{ + FieldsMap: fieldsMap, + FieldsList: fieldsList, + InlineMap: inlineMap, + InlineUnmarshalers: inlineUnmarshalers, + } + + fieldMapMutex.Lock() + structMap[st] = sinfo + fieldMapMutex.Unlock() + return sinfo, nil +} + +// IsZeroer is used to check whether an object is zero to +// determine whether it should be omitted when marshaling +// with the omitempty flag. One notable implementation +// is time.Time. +type IsZeroer interface { + IsZero() bool +} + +func isZero(v reflect.Value) bool { + kind := v.Kind() + if z, ok := v.Interface().(IsZeroer); ok { + if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { + return true + } + return z.IsZero() + } + switch kind { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + case reflect.Slice: + return v.Len() == 0 + case reflect.Map: + return v.Len() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Struct: + vt := v.Type() + for i := v.NumField() - 1; i >= 0; i-- { + if vt.Field(i).PkgPath != "" { + continue // Private field + } + if !isZero(v.Field(i)) { + return false + } + } + return true + } + return false +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/yamlh.go b/upstream/vendor/go.yaml.in/yaml/v3/yamlh.go new file mode 100644 index 0000000000..f59aa40f64 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/yamlh.go @@ -0,0 +1,811 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// Copyright (c) 2006-2010 Kirill Simonov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package yaml + +import ( + "fmt" + "io" +) + +// The version directive data. +type yaml_version_directive_t struct { + major int8 // The major version number. + minor int8 // The minor version number. +} + +// The tag directive data. +type yaml_tag_directive_t struct { + handle []byte // The tag handle. + prefix []byte // The tag prefix. +} + +type yaml_encoding_t int + +// The stream encoding. +const ( + // Let the parser choose the encoding. + yaml_ANY_ENCODING yaml_encoding_t = iota + + yaml_UTF8_ENCODING // The default UTF-8 encoding. + yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. + yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. +) + +type yaml_break_t int + +// Line break types. +const ( + // Let the parser choose the break type. + yaml_ANY_BREAK yaml_break_t = iota + + yaml_CR_BREAK // Use CR for line breaks (Mac style). + yaml_LN_BREAK // Use LN for line breaks (Unix style). + yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). +) + +type yaml_error_type_t int + +// Many bad things could happen with the parser and emitter. +const ( + // No error is produced. + yaml_NO_ERROR yaml_error_type_t = iota + + yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. + yaml_READER_ERROR // Cannot read or decode the input stream. + yaml_SCANNER_ERROR // Cannot scan the input stream. + yaml_PARSER_ERROR // Cannot parse the input stream. + yaml_COMPOSER_ERROR // Cannot compose a YAML document. + yaml_WRITER_ERROR // Cannot write to the output stream. + yaml_EMITTER_ERROR // Cannot emit a YAML stream. +) + +// The pointer position. +type yaml_mark_t struct { + index int // The position index. + line int // The position line. + column int // The position column. +} + +// Node Styles + +type yaml_style_t int8 + +type yaml_scalar_style_t yaml_style_t + +// Scalar styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = 0 + + yaml_PLAIN_SCALAR_STYLE yaml_scalar_style_t = 1 << iota // The plain scalar style. + yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. + yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. + yaml_LITERAL_SCALAR_STYLE // The literal scalar style. + yaml_FOLDED_SCALAR_STYLE // The folded scalar style. +) + +type yaml_sequence_style_t yaml_style_t + +// Sequence styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota + + yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. + yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. +) + +type yaml_mapping_style_t yaml_style_t + +// Mapping styles. +const ( + // Let the emitter choose the style. + yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota + + yaml_BLOCK_MAPPING_STYLE // The block mapping style. + yaml_FLOW_MAPPING_STYLE // The flow mapping style. +) + +// Tokens + +type yaml_token_type_t int + +// Token types. +const ( + // An empty token. + yaml_NO_TOKEN yaml_token_type_t = iota + + yaml_STREAM_START_TOKEN // A STREAM-START token. + yaml_STREAM_END_TOKEN // A STREAM-END token. + + yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. + yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. + yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. + yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. + + yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. + yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. + yaml_BLOCK_END_TOKEN // A BLOCK-END token. + + yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. + yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. + yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. + yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. + + yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. + yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. + yaml_KEY_TOKEN // A KEY token. + yaml_VALUE_TOKEN // A VALUE token. + + yaml_ALIAS_TOKEN // An ALIAS token. + yaml_ANCHOR_TOKEN // An ANCHOR token. + yaml_TAG_TOKEN // A TAG token. + yaml_SCALAR_TOKEN // A SCALAR token. +) + +func (tt yaml_token_type_t) String() string { + switch tt { + case yaml_NO_TOKEN: + return "yaml_NO_TOKEN" + case yaml_STREAM_START_TOKEN: + return "yaml_STREAM_START_TOKEN" + case yaml_STREAM_END_TOKEN: + return "yaml_STREAM_END_TOKEN" + case yaml_VERSION_DIRECTIVE_TOKEN: + return "yaml_VERSION_DIRECTIVE_TOKEN" + case yaml_TAG_DIRECTIVE_TOKEN: + return "yaml_TAG_DIRECTIVE_TOKEN" + case yaml_DOCUMENT_START_TOKEN: + return "yaml_DOCUMENT_START_TOKEN" + case yaml_DOCUMENT_END_TOKEN: + return "yaml_DOCUMENT_END_TOKEN" + case yaml_BLOCK_SEQUENCE_START_TOKEN: + return "yaml_BLOCK_SEQUENCE_START_TOKEN" + case yaml_BLOCK_MAPPING_START_TOKEN: + return "yaml_BLOCK_MAPPING_START_TOKEN" + case yaml_BLOCK_END_TOKEN: + return "yaml_BLOCK_END_TOKEN" + case yaml_FLOW_SEQUENCE_START_TOKEN: + return "yaml_FLOW_SEQUENCE_START_TOKEN" + case yaml_FLOW_SEQUENCE_END_TOKEN: + return "yaml_FLOW_SEQUENCE_END_TOKEN" + case yaml_FLOW_MAPPING_START_TOKEN: + return "yaml_FLOW_MAPPING_START_TOKEN" + case yaml_FLOW_MAPPING_END_TOKEN: + return "yaml_FLOW_MAPPING_END_TOKEN" + case yaml_BLOCK_ENTRY_TOKEN: + return "yaml_BLOCK_ENTRY_TOKEN" + case yaml_FLOW_ENTRY_TOKEN: + return "yaml_FLOW_ENTRY_TOKEN" + case yaml_KEY_TOKEN: + return "yaml_KEY_TOKEN" + case yaml_VALUE_TOKEN: + return "yaml_VALUE_TOKEN" + case yaml_ALIAS_TOKEN: + return "yaml_ALIAS_TOKEN" + case yaml_ANCHOR_TOKEN: + return "yaml_ANCHOR_TOKEN" + case yaml_TAG_TOKEN: + return "yaml_TAG_TOKEN" + case yaml_SCALAR_TOKEN: + return "yaml_SCALAR_TOKEN" + } + return "" +} + +// The token structure. +type yaml_token_t struct { + // The token type. + typ yaml_token_type_t + + // The start/end of the token. + start_mark, end_mark yaml_mark_t + + // The stream encoding (for yaml_STREAM_START_TOKEN). + encoding yaml_encoding_t + + // The alias/anchor/scalar value or tag/tag directive handle + // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). + value []byte + + // The tag suffix (for yaml_TAG_TOKEN). + suffix []byte + + // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). + prefix []byte + + // The scalar style (for yaml_SCALAR_TOKEN). + style yaml_scalar_style_t + + // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). + major, minor int8 +} + +// Events + +type yaml_event_type_t int8 + +// Event types. +const ( + // An empty event. + yaml_NO_EVENT yaml_event_type_t = iota + + yaml_STREAM_START_EVENT // A STREAM-START event. + yaml_STREAM_END_EVENT // A STREAM-END event. + yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. + yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. + yaml_ALIAS_EVENT // An ALIAS event. + yaml_SCALAR_EVENT // A SCALAR event. + yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. + yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. + yaml_MAPPING_START_EVENT // A MAPPING-START event. + yaml_MAPPING_END_EVENT // A MAPPING-END event. + yaml_TAIL_COMMENT_EVENT +) + +var eventStrings = []string{ + yaml_NO_EVENT: "none", + yaml_STREAM_START_EVENT: "stream start", + yaml_STREAM_END_EVENT: "stream end", + yaml_DOCUMENT_START_EVENT: "document start", + yaml_DOCUMENT_END_EVENT: "document end", + yaml_ALIAS_EVENT: "alias", + yaml_SCALAR_EVENT: "scalar", + yaml_SEQUENCE_START_EVENT: "sequence start", + yaml_SEQUENCE_END_EVENT: "sequence end", + yaml_MAPPING_START_EVENT: "mapping start", + yaml_MAPPING_END_EVENT: "mapping end", + yaml_TAIL_COMMENT_EVENT: "tail comment", +} + +func (e yaml_event_type_t) String() string { + if e < 0 || int(e) >= len(eventStrings) { + return fmt.Sprintf("unknown event %d", e) + } + return eventStrings[e] +} + +// The event structure. +type yaml_event_t struct { + + // The event type. + typ yaml_event_type_t + + // The start and end of the event. + start_mark, end_mark yaml_mark_t + + // The document encoding (for yaml_STREAM_START_EVENT). + encoding yaml_encoding_t + + // The version directive (for yaml_DOCUMENT_START_EVENT). + version_directive *yaml_version_directive_t + + // The list of tag directives (for yaml_DOCUMENT_START_EVENT). + tag_directives []yaml_tag_directive_t + + // The comments + head_comment []byte + line_comment []byte + foot_comment []byte + tail_comment []byte + + // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). + anchor []byte + + // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + tag []byte + + // The scalar value (for yaml_SCALAR_EVENT). + value []byte + + // Is the document start/end indicator implicit, or the tag optional? + // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). + implicit bool + + // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). + quoted_implicit bool + + // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + style yaml_style_t +} + +func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } +func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } +func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } + +// Nodes + +const ( + yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. + yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. + yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. + yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. + yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. + yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. + + yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. + yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. + + // Not in original libyaml. + yaml_BINARY_TAG = "tag:yaml.org,2002:binary" + yaml_MERGE_TAG = "tag:yaml.org,2002:merge" + + yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. + yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. + yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. +) + +type yaml_node_type_t int + +// Node types. +const ( + // An empty node. + yaml_NO_NODE yaml_node_type_t = iota + + yaml_SCALAR_NODE // A scalar node. + yaml_SEQUENCE_NODE // A sequence node. + yaml_MAPPING_NODE // A mapping node. +) + +// An element of a sequence node. +type yaml_node_item_t int + +// An element of a mapping node. +type yaml_node_pair_t struct { + key int // The key of the element. + value int // The value of the element. +} + +// The node structure. +type yaml_node_t struct { + typ yaml_node_type_t // The node type. + tag []byte // The node tag. + + // The node data. + + // The scalar parameters (for yaml_SCALAR_NODE). + scalar struct { + value []byte // The scalar value. + length int // The length of the scalar value. + style yaml_scalar_style_t // The scalar style. + } + + // The sequence parameters (for YAML_SEQUENCE_NODE). + sequence struct { + items_data []yaml_node_item_t // The stack of sequence items. + style yaml_sequence_style_t // The sequence style. + } + + // The mapping parameters (for yaml_MAPPING_NODE). + mapping struct { + pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). + pairs_start *yaml_node_pair_t // The beginning of the stack. + pairs_end *yaml_node_pair_t // The end of the stack. + pairs_top *yaml_node_pair_t // The top of the stack. + style yaml_mapping_style_t // The mapping style. + } + + start_mark yaml_mark_t // The beginning of the node. + end_mark yaml_mark_t // The end of the node. + +} + +// The document structure. +type yaml_document_t struct { + + // The document nodes. + nodes []yaml_node_t + + // The version directive. + version_directive *yaml_version_directive_t + + // The list of tag directives. + tag_directives_data []yaml_tag_directive_t + tag_directives_start int // The beginning of the tag directives list. + tag_directives_end int // The end of the tag directives list. + + start_implicit int // Is the document start indicator implicit? + end_implicit int // Is the document end indicator implicit? + + // The start/end of the document. + start_mark, end_mark yaml_mark_t +} + +// The prototype of a read handler. +// +// The read handler is called when the parser needs to read more bytes from the +// source. The handler should write not more than size bytes to the buffer. +// The number of written bytes should be set to the size_read variable. +// +// [in,out] data A pointer to an application data specified by +// +// yaml_parser_set_input(). +// +// [out] buffer The buffer to write the data from the source. +// [in] size The size of the buffer. +// [out] size_read The actual number of bytes read from the source. +// +// On success, the handler should return 1. If the handler failed, +// the returned value should be 0. On EOF, the handler should set the +// size_read to 0 and return 1. +type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) + +// This structure holds information about a potential simple key. +type yaml_simple_key_t struct { + possible bool // Is a simple key possible? + required bool // Is a simple key required? + token_number int // The number of the token. + mark yaml_mark_t // The position mark. +} + +// The states of the parser. +type yaml_parser_state_t int + +const ( + yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota + + yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. + yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. + yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. + yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. + yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. + yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. + yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. + yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. + yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. + yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. + yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. + yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. + yaml_PARSE_END_STATE // Expect nothing. +) + +func (ps yaml_parser_state_t) String() string { + switch ps { + case yaml_PARSE_STREAM_START_STATE: + return "yaml_PARSE_STREAM_START_STATE" + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_START_STATE: + return "yaml_PARSE_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return "yaml_PARSE_DOCUMENT_CONTENT_STATE" + case yaml_PARSE_DOCUMENT_END_STATE: + return "yaml_PARSE_DOCUMENT_END_STATE" + case yaml_PARSE_BLOCK_NODE_STATE: + return "yaml_PARSE_BLOCK_NODE_STATE" + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" + case yaml_PARSE_FLOW_NODE_STATE: + return "yaml_PARSE_FLOW_NODE_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" + case yaml_PARSE_END_STATE: + return "yaml_PARSE_END_STATE" + } + return "" +} + +// This structure holds aliases data. +type yaml_alias_data_t struct { + anchor []byte // The anchor. + index int // The node id. + mark yaml_mark_t // The anchor mark. +} + +// The parser structure. +// +// All members are internal. Manage the structure using the +// yaml_parser_ family of functions. +type yaml_parser_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + + problem string // Error description. + + // The byte about which the problem occurred. + problem_offset int + problem_value int + problem_mark yaml_mark_t + + // The error context. + context string + context_mark yaml_mark_t + + // Reader stuff + + read_handler yaml_read_handler_t // Read handler. + + input_reader io.Reader // File input data. + input []byte // String input data. + input_pos int + + eof bool // EOF flag + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + unread int // The number of unread characters in the buffer. + + newlines int // The number of line breaks since last non-break/non-blank character + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The input encoding. + + offset int // The offset of the current position (in bytes). + mark yaml_mark_t // The mark of the current position. + + // Comments + + head_comment []byte // The current head comments + line_comment []byte // The current line comments + foot_comment []byte // The current foot comments + tail_comment []byte // Foot comment that happens at the end of a block. + stem_comment []byte // Comment in item preceding a nested structure (list inside list item, etc) + + comments []yaml_comment_t // The folded comments for all parsed tokens + comments_head int + + // Scanner stuff + + stream_start_produced bool // Have we started to scan the input stream? + stream_end_produced bool // Have we reached the end of the input stream? + + flow_level int // The number of unclosed '[' and '{' indicators. + + tokens []yaml_token_t // The tokens queue. + tokens_head int // The head of the tokens queue. + tokens_parsed int // The number of tokens fetched from the queue. + token_available bool // Does the tokens queue contain a token ready for dequeueing. + + indent int // The current indentation level. + indents []int // The indentation levels stack. + + simple_key_allowed bool // May a simple key occur at the current position? + simple_keys []yaml_simple_key_t // The stack of simple keys. + simple_keys_by_tok map[int]int // possible simple_key indexes indexed by token_number + + // Parser stuff + + state yaml_parser_state_t // The current parser state. + states []yaml_parser_state_t // The parser states stack. + marks []yaml_mark_t // The stack of marks. + tag_directives []yaml_tag_directive_t // The list of TAG directives. + + // Dumper stuff + + aliases []yaml_alias_data_t // The alias data. + + document *yaml_document_t // The currently parsed document. +} + +type yaml_comment_t struct { + scan_mark yaml_mark_t // Position where scanning for comments started + token_mark yaml_mark_t // Position after which tokens will be associated with this comment + start_mark yaml_mark_t // Position of '#' comment mark + end_mark yaml_mark_t // Position where comment terminated + + head []byte + line []byte + foot []byte +} + +// Emitter Definitions + +// The prototype of a write handler. +// +// The write handler is called when the emitter needs to flush the accumulated +// characters to the output. The handler should write @a size bytes of the +// @a buffer to the output. +// +// @param[in,out] data A pointer to an application data specified by +// +// yaml_emitter_set_output(). +// +// @param[in] buffer The buffer with bytes to be written. +// @param[in] size The size of the buffer. +// +// @returns On success, the handler should return @c 1. If the handler failed, +// the returned value should be @c 0. +type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error + +type yaml_emitter_state_t int + +// The emitter states. +const ( + // Expect STREAM-START. + yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota + + yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. + yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE // Expect the next item of a flow sequence, with the comma already written out + yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. + yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE // Expect the next key of a flow mapping, with the comma already written out + yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. + yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. + yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. + yaml_EMIT_END_STATE // Expect nothing. +) + +// The emitter structure. +// +// All members are internal. Manage the structure using the @c yaml_emitter_ +// family of functions. +type yaml_emitter_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + problem string // Error description. + + // Writer stuff + + write_handler yaml_write_handler_t // Write handler. + + output_buffer *[]byte // String output data. + output_writer io.Writer // File output data. + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The stream encoding. + + // Emitter stuff + + canonical bool // If the output is in the canonical style? + best_indent int // The number of indentation spaces. + best_width int // The preferred width of the output lines. + unicode bool // Allow unescaped non-ASCII characters? + line_break yaml_break_t // The preferred line break. + + state yaml_emitter_state_t // The current emitter state. + states []yaml_emitter_state_t // The stack of states. + + events []yaml_event_t // The event queue. + events_head int // The head of the event queue. + + indents []int // The stack of indentation levels. + + tag_directives []yaml_tag_directive_t // The list of tag directives. + + indent int // The current indentation level. + + compact_sequence_indent bool // Is '- ' is considered part of the indentation for sequence elements? + + flow_level int // The current flow level. + + root_context bool // Is it the document root context? + sequence_context bool // Is it a sequence context? + mapping_context bool // Is it a mapping context? + simple_key_context bool // Is it a simple mapping key context? + + line int // The current line. + column int // The current column. + whitespace bool // If the last character was a whitespace? + indention bool // If the last character was an indentation character (' ', '-', '?', ':')? + open_ended bool // If an explicit document end is required? + + space_above bool // Is there's an empty line above? + foot_indent int // The indent used to write the foot comment above, or -1 if none. + + // Anchor analysis. + anchor_data struct { + anchor []byte // The anchor value. + alias bool // Is it an alias? + } + + // Tag analysis. + tag_data struct { + handle []byte // The tag handle. + suffix []byte // The tag suffix. + } + + // Scalar analysis. + scalar_data struct { + value []byte // The scalar value. + multiline bool // Does the scalar contain line breaks? + flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? + block_plain_allowed bool // Can the scalar be expressed in the block plain style? + single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? + block_allowed bool // Can the scalar be expressed in the literal or folded styles? + style yaml_scalar_style_t // The output style. + } + + // Comments + head_comment []byte + line_comment []byte + foot_comment []byte + tail_comment []byte + + key_line_comment []byte + + // Dumper stuff + + opened bool // If the stream was already opened? + closed bool // If the stream was already closed? + + // The information associated with the document nodes. + anchors *struct { + references int // The number of references. + anchor int // The anchor id. + serialized bool // If the node has been emitted? + } + + last_anchor_id int // The last assigned anchor id. + + document *yaml_document_t // The currently emitted document. +} diff --git a/upstream/vendor/go.yaml.in/yaml/v3/yamlprivateh.go b/upstream/vendor/go.yaml.in/yaml/v3/yamlprivateh.go new file mode 100644 index 0000000000..dea1ba9610 --- /dev/null +++ b/upstream/vendor/go.yaml.in/yaml/v3/yamlprivateh.go @@ -0,0 +1,198 @@ +// +// Copyright (c) 2011-2019 Canonical Ltd +// Copyright (c) 2006-2010 Kirill Simonov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package yaml + +const ( + // The size of the input raw buffer. + input_raw_buffer_size = 512 + + // The size of the input buffer. + // It should be possible to decode the whole raw buffer. + input_buffer_size = input_raw_buffer_size * 3 + + // The size of the output buffer. + output_buffer_size = 128 + + // The size of the output raw buffer. + // It should be possible to encode the whole output buffer. + output_raw_buffer_size = (output_buffer_size*2 + 2) + + // The size of other stacks and queues. + initial_stack_size = 16 + initial_queue_size = 16 + initial_string_size = 16 +) + +// Check if the character at the specified position is an alphabetical +// character, a digit, '_', or '-'. +func is_alpha(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' +} + +// Check if the character at the specified position is a digit. +func is_digit(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' +} + +// Get the value of a digit. +func as_digit(b []byte, i int) int { + return int(b[i]) - '0' +} + +// Check if the character at the specified position is a hex-digit. +func is_hex(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' +} + +// Get the value of a hex-digit. +func as_hex(b []byte, i int) int { + bi := b[i] + if bi >= 'A' && bi <= 'F' { + return int(bi) - 'A' + 10 + } + if bi >= 'a' && bi <= 'f' { + return int(bi) - 'a' + 10 + } + return int(bi) - '0' +} + +// Check if the character is ASCII. +func is_ascii(b []byte, i int) bool { + return b[i] <= 0x7F +} + +// Check if the character at the start of the buffer can be printed unescaped. +func is_printable(b []byte, i int) bool { + return ((b[i] == 0x0A) || // . == #x0A + (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E + (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF + (b[i] > 0xC2 && b[i] < 0xED) || + (b[i] == 0xED && b[i+1] < 0xA0) || + (b[i] == 0xEE) || + (b[i] == 0xEF && // #xE000 <= . <= #xFFFD + !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF + !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) +} + +// Check if the character at the specified position is NUL. +func is_z(b []byte, i int) bool { + return b[i] == 0x00 +} + +// Check if the beginning of the buffer is a BOM. +func is_bom(b []byte, i int) bool { + return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF +} + +// Check if the character at the specified position is space. +func is_space(b []byte, i int) bool { + return b[i] == ' ' +} + +// Check if the character at the specified position is tab. +func is_tab(b []byte, i int) bool { + return b[i] == '\t' +} + +// Check if the character at the specified position is blank (space or tab). +func is_blank(b []byte, i int) bool { + //return is_space(b, i) || is_tab(b, i) + return b[i] == ' ' || b[i] == '\t' +} + +// Check if the character at the specified position is a line break. +func is_break(b []byte, i int) bool { + return (b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) +} + +func is_crlf(b []byte, i int) bool { + return b[i] == '\r' && b[i+1] == '\n' +} + +// Check if the character is a line break or NUL. +func is_breakz(b []byte, i int) bool { + //return is_break(b, i) || is_z(b, i) + return ( + // is_break: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + // is_z: + b[i] == 0) +} + +// Check if the character is a line break, space, or NUL. +func is_spacez(b []byte, i int) bool { + //return is_space(b, i) || is_breakz(b, i) + return ( + // is_space: + b[i] == ' ' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Check if the character is a line break, space, tab, or NUL. +func is_blankz(b []byte, i int) bool { + //return is_blank(b, i) || is_breakz(b, i) + return ( + // is_blank: + b[i] == ' ' || b[i] == '\t' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Determine the width of the character. +func width(b byte) int { + // Don't replace these by a switch without first + // confirming that it is being inlined. + if b&0x80 == 0x00 { + return 1 + } + if b&0xE0 == 0xC0 { + return 2 + } + if b&0xF0 == 0xE0 { + return 3 + } + if b&0xF8 == 0xF0 { + return 4 + } + return 0 + +} diff --git a/upstream/vendor/golang.org/x/crypto/blake2b/blake2x.go b/upstream/vendor/golang.org/x/crypto/blake2b/blake2x.go index 52c414db0e..7692bb3460 100644 --- a/upstream/vendor/golang.org/x/crypto/blake2b/blake2x.go +++ b/upstream/vendor/golang.org/x/crypto/blake2b/blake2x.go @@ -12,6 +12,8 @@ import ( // XOF defines the interface to hash functions that // support arbitrary-length output. +// +// New callers should prefer the standard library [hash.XOF]. type XOF interface { // Write absorbs more data into the hash's state. It panics if called // after Read. @@ -47,6 +49,8 @@ const maxOutputLength = (1 << 32) * 64 // // A non-nil key turns the hash into a MAC. The key must between // zero and 32 bytes long. +// +// The result can be safely interface-upgraded to [hash.XOF]. func NewXOF(size uint32, key []byte) (XOF, error) { if len(key) > Size { return nil, errKeySize @@ -93,6 +97,10 @@ func (x *xof) Clone() XOF { return &clone } +func (x *xof) BlockSize() int { + return x.d.BlockSize() +} + func (x *xof) Reset() { x.cfg[0] = byte(Size) binary.LittleEndian.PutUint32(x.cfg[4:], uint32(Size)) // leaf length diff --git a/upstream/vendor/golang.org/x/crypto/blake2b/go125.go b/upstream/vendor/golang.org/x/crypto/blake2b/go125.go new file mode 100644 index 0000000000..67e990b7e1 --- /dev/null +++ b/upstream/vendor/golang.org/x/crypto/blake2b/go125.go @@ -0,0 +1,11 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.25 + +package blake2b + +import "hash" + +var _ hash.XOF = (*xof)(nil) diff --git a/upstream/vendor/golang.org/x/crypto/ssh/agent/client.go b/upstream/vendor/golang.org/x/crypto/ssh/agent/client.go index 106708d289..37525e1a18 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/agent/client.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/agent/client.go @@ -555,7 +555,7 @@ func (c *client) insertKey(s interface{}, comment string, constraints []byte) er }) case *dsa.PrivateKey: req = ssh.Marshal(dsaKeyMsg{ - Type: ssh.KeyAlgoDSA, + Type: ssh.InsecureKeyAlgoDSA, P: k.P, Q: k.Q, G: k.G, @@ -803,16 +803,16 @@ var _ ssh.AlgorithmSigner = &agentKeyringSigner{} // // This map must be kept in sync with the one in certs.go. var certKeyAlgoNames = map[string]string{ - ssh.CertAlgoRSAv01: ssh.KeyAlgoRSA, - ssh.CertAlgoRSASHA256v01: ssh.KeyAlgoRSASHA256, - ssh.CertAlgoRSASHA512v01: ssh.KeyAlgoRSASHA512, - ssh.CertAlgoDSAv01: ssh.KeyAlgoDSA, - ssh.CertAlgoECDSA256v01: ssh.KeyAlgoECDSA256, - ssh.CertAlgoECDSA384v01: ssh.KeyAlgoECDSA384, - ssh.CertAlgoECDSA521v01: ssh.KeyAlgoECDSA521, - ssh.CertAlgoSKECDSA256v01: ssh.KeyAlgoSKECDSA256, - ssh.CertAlgoED25519v01: ssh.KeyAlgoED25519, - ssh.CertAlgoSKED25519v01: ssh.KeyAlgoSKED25519, + ssh.CertAlgoRSAv01: ssh.KeyAlgoRSA, + ssh.CertAlgoRSASHA256v01: ssh.KeyAlgoRSASHA256, + ssh.CertAlgoRSASHA512v01: ssh.KeyAlgoRSASHA512, + ssh.InsecureCertAlgoDSAv01: ssh.InsecureKeyAlgoDSA, + ssh.CertAlgoECDSA256v01: ssh.KeyAlgoECDSA256, + ssh.CertAlgoECDSA384v01: ssh.KeyAlgoECDSA384, + ssh.CertAlgoECDSA521v01: ssh.KeyAlgoECDSA521, + ssh.CertAlgoSKECDSA256v01: ssh.KeyAlgoSKECDSA256, + ssh.CertAlgoED25519v01: ssh.KeyAlgoED25519, + ssh.CertAlgoSKED25519v01: ssh.KeyAlgoSKED25519, } // underlyingAlgo returns the signature algorithm associated with algo (which is diff --git a/upstream/vendor/golang.org/x/crypto/ssh/agent/server.go b/upstream/vendor/golang.org/x/crypto/ssh/agent/server.go index e35ca7ce31..88ce4da6c4 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/agent/server.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/agent/server.go @@ -506,7 +506,7 @@ func (s *server) insertIdentity(req []byte) error { switch record.Type { case ssh.KeyAlgoRSA: addedKey, err = parseRSAKey(req) - case ssh.KeyAlgoDSA: + case ssh.InsecureKeyAlgoDSA: addedKey, err = parseDSAKey(req) case ssh.KeyAlgoECDSA256, ssh.KeyAlgoECDSA384, ssh.KeyAlgoECDSA521: addedKey, err = parseECDSAKey(req) @@ -514,7 +514,7 @@ func (s *server) insertIdentity(req []byte) error { addedKey, err = parseEd25519Key(req) case ssh.CertAlgoRSAv01: addedKey, err = parseRSACert(req) - case ssh.CertAlgoDSAv01: + case ssh.InsecureCertAlgoDSAv01: addedKey, err = parseDSACert(req) case ssh.CertAlgoECDSA256v01, ssh.CertAlgoECDSA384v01, ssh.CertAlgoECDSA521v01: addedKey, err = parseECDSACert(req) diff --git a/upstream/vendor/golang.org/x/crypto/ssh/certs.go b/upstream/vendor/golang.org/x/crypto/ssh/certs.go index 27d0e14aa9..139fa31e1b 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/certs.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/certs.go @@ -20,14 +20,19 @@ import ( // returned by MultiAlgorithmSigner and don't appear in the Signature.Format // field. const ( - CertAlgoRSAv01 = "ssh-rsa-cert-v01@openssh.com" - CertAlgoDSAv01 = "ssh-dss-cert-v01@openssh.com" - CertAlgoECDSA256v01 = "ecdsa-sha2-nistp256-cert-v01@openssh.com" - CertAlgoECDSA384v01 = "ecdsa-sha2-nistp384-cert-v01@openssh.com" - CertAlgoECDSA521v01 = "ecdsa-sha2-nistp521-cert-v01@openssh.com" - CertAlgoSKECDSA256v01 = "sk-ecdsa-sha2-nistp256-cert-v01@openssh.com" - CertAlgoED25519v01 = "ssh-ed25519-cert-v01@openssh.com" - CertAlgoSKED25519v01 = "sk-ssh-ed25519-cert-v01@openssh.com" + CertAlgoRSAv01 = "ssh-rsa-cert-v01@openssh.com" + // Deprecated: DSA is only supported at insecure key sizes, and was removed + // from major implementations. + CertAlgoDSAv01 = InsecureCertAlgoDSAv01 + // Deprecated: DSA is only supported at insecure key sizes, and was removed + // from major implementations. + InsecureCertAlgoDSAv01 = "ssh-dss-cert-v01@openssh.com" + CertAlgoECDSA256v01 = "ecdsa-sha2-nistp256-cert-v01@openssh.com" + CertAlgoECDSA384v01 = "ecdsa-sha2-nistp384-cert-v01@openssh.com" + CertAlgoECDSA521v01 = "ecdsa-sha2-nistp521-cert-v01@openssh.com" + CertAlgoSKECDSA256v01 = "sk-ecdsa-sha2-nistp256-cert-v01@openssh.com" + CertAlgoED25519v01 = "ssh-ed25519-cert-v01@openssh.com" + CertAlgoSKED25519v01 = "sk-ssh-ed25519-cert-v01@openssh.com" // CertAlgoRSASHA256v01 and CertAlgoRSASHA512v01 can't appear as a // Certificate.Type (or PublicKey.Type), but only in @@ -228,7 +233,11 @@ func parseCert(in []byte, privAlgo string) (*Certificate, error) { if err != nil { return nil, err } - + // The Type() function is intended to return only certificate key types, but + // we use certKeyAlgoNames anyway for safety, to match [Certificate.Type]. + if _, ok := certKeyAlgoNames[k.Type()]; ok { + return nil, fmt.Errorf("ssh: the signature key type %q is invalid for certificates", k.Type()) + } c.SignatureKey = k c.Signature, rest, ok = parseSignatureBody(g.Signature) if !ok || len(rest) > 0 { @@ -296,16 +305,13 @@ type CertChecker struct { SupportedCriticalOptions []string // IsUserAuthority should return true if the key is recognized as an - // authority for the given user certificate. This allows for - // certificates to be signed by other certificates. This must be set - // if this CertChecker will be checking user certificates. + // authority for user certificate. This must be set if this CertChecker + // will be checking user certificates. IsUserAuthority func(auth PublicKey) bool // IsHostAuthority should report whether the key is recognized as - // an authority for this host. This allows for certificates to be - // signed by other keys, and for those other keys to only be valid - // signers for particular hostnames. This must be set if this - // CertChecker will be checking host certificates. + // an authority for this host. This must be set if this CertChecker + // will be checking host certificates. IsHostAuthority func(auth PublicKey, address string) bool // Clock is used for verifying time stamps. If nil, time.Now @@ -442,12 +448,19 @@ func (c *CertChecker) CheckCert(principal string, cert *Certificate) error { // SignCert signs the certificate with an authority, setting the Nonce, // SignatureKey, and Signature fields. If the authority implements the // MultiAlgorithmSigner interface the first algorithm in the list is used. This -// is useful if you want to sign with a specific algorithm. +// is useful if you want to sign with a specific algorithm. As specified in +// [SSH-CERTS], Section 2.1.1, authority can't be a [Certificate]. func (c *Certificate) SignCert(rand io.Reader, authority Signer) error { c.Nonce = make([]byte, 32) if _, err := io.ReadFull(rand, c.Nonce); err != nil { return err } + // The Type() function is intended to return only certificate key types, but + // we use certKeyAlgoNames anyway for safety, to match [Certificate.Type]. + if _, ok := certKeyAlgoNames[authority.PublicKey().Type()]; ok { + return fmt.Errorf("ssh: certificates cannot be used as authority (public key type %q)", + authority.PublicKey().Type()) + } c.SignatureKey = authority.PublicKey() if v, ok := authority.(MultiAlgorithmSigner); ok { @@ -485,16 +498,16 @@ func (c *Certificate) SignCert(rand io.Reader, authority Signer) error { // // This map must be kept in sync with the one in agent/client.go. var certKeyAlgoNames = map[string]string{ - CertAlgoRSAv01: KeyAlgoRSA, - CertAlgoRSASHA256v01: KeyAlgoRSASHA256, - CertAlgoRSASHA512v01: KeyAlgoRSASHA512, - CertAlgoDSAv01: KeyAlgoDSA, - CertAlgoECDSA256v01: KeyAlgoECDSA256, - CertAlgoECDSA384v01: KeyAlgoECDSA384, - CertAlgoECDSA521v01: KeyAlgoECDSA521, - CertAlgoSKECDSA256v01: KeyAlgoSKECDSA256, - CertAlgoED25519v01: KeyAlgoED25519, - CertAlgoSKED25519v01: KeyAlgoSKED25519, + CertAlgoRSAv01: KeyAlgoRSA, + CertAlgoRSASHA256v01: KeyAlgoRSASHA256, + CertAlgoRSASHA512v01: KeyAlgoRSASHA512, + InsecureCertAlgoDSAv01: InsecureKeyAlgoDSA, + CertAlgoECDSA256v01: KeyAlgoECDSA256, + CertAlgoECDSA384v01: KeyAlgoECDSA384, + CertAlgoECDSA521v01: KeyAlgoECDSA521, + CertAlgoSKECDSA256v01: KeyAlgoSKECDSA256, + CertAlgoED25519v01: KeyAlgoED25519, + CertAlgoSKED25519v01: KeyAlgoSKED25519, } // underlyingAlgo returns the signature algorithm associated with algo (which is diff --git a/upstream/vendor/golang.org/x/crypto/ssh/cipher.go b/upstream/vendor/golang.org/x/crypto/ssh/cipher.go index 741e984f33..6a5b582aa9 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/cipher.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/cipher.go @@ -58,11 +58,11 @@ func newRC4(key, iv []byte) (cipher.Stream, error) { type cipherMode struct { keySize int ivSize int - create func(key, iv []byte, macKey []byte, algs directionAlgorithms) (packetCipher, error) + create func(key, iv []byte, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) } -func streamCipherMode(skip int, createFunc func(key, iv []byte) (cipher.Stream, error)) func(key, iv []byte, macKey []byte, algs directionAlgorithms) (packetCipher, error) { - return func(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) { +func streamCipherMode(skip int, createFunc func(key, iv []byte) (cipher.Stream, error)) func(key, iv []byte, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { + return func(key, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { stream, err := createFunc(key, iv) if err != nil { return nil, err @@ -98,36 +98,36 @@ func streamCipherMode(skip int, createFunc func(key, iv []byte) (cipher.Stream, var cipherModes = map[string]*cipherMode{ // Ciphers from RFC 4344, which introduced many CTR-based ciphers. Algorithms // are defined in the order specified in the RFC. - "aes128-ctr": {16, aes.BlockSize, streamCipherMode(0, newAESCTR)}, - "aes192-ctr": {24, aes.BlockSize, streamCipherMode(0, newAESCTR)}, - "aes256-ctr": {32, aes.BlockSize, streamCipherMode(0, newAESCTR)}, + CipherAES128CTR: {16, aes.BlockSize, streamCipherMode(0, newAESCTR)}, + CipherAES192CTR: {24, aes.BlockSize, streamCipherMode(0, newAESCTR)}, + CipherAES256CTR: {32, aes.BlockSize, streamCipherMode(0, newAESCTR)}, // Ciphers from RFC 4345, which introduces security-improved arcfour ciphers. // They are defined in the order specified in the RFC. - "arcfour128": {16, 0, streamCipherMode(1536, newRC4)}, - "arcfour256": {32, 0, streamCipherMode(1536, newRC4)}, + InsecureCipherRC4128: {16, 0, streamCipherMode(1536, newRC4)}, + InsecureCipherRC4256: {32, 0, streamCipherMode(1536, newRC4)}, // Cipher defined in RFC 4253, which describes SSH Transport Layer Protocol. // Note that this cipher is not safe, as stated in RFC 4253: "Arcfour (and // RC4) has problems with weak keys, and should be used with caution." // RFC 4345 introduces improved versions of Arcfour. - "arcfour": {16, 0, streamCipherMode(0, newRC4)}, + InsecureCipherRC4: {16, 0, streamCipherMode(0, newRC4)}, // AEAD ciphers - gcm128CipherID: {16, 12, newGCMCipher}, - gcm256CipherID: {32, 12, newGCMCipher}, - chacha20Poly1305ID: {64, 0, newChaCha20Cipher}, + CipherAES128GCM: {16, 12, newGCMCipher}, + CipherAES256GCM: {32, 12, newGCMCipher}, + CipherChaCha20Poly1305: {64, 0, newChaCha20Cipher}, // CBC mode is insecure and so is not included in the default config. // (See https://www.ieee-security.org/TC/SP2013/papers/4977a526.pdf). If absolutely // needed, it's possible to specify a custom Config to enable it. // You should expect that an active attacker can recover plaintext if // you do. - aes128cbcID: {16, aes.BlockSize, newAESCBCCipher}, + InsecureCipherAES128CBC: {16, aes.BlockSize, newAESCBCCipher}, // 3des-cbc is insecure and is not included in the default // config. - tripledescbcID: {24, des.BlockSize, newTripleDESCBCCipher}, + InsecureCipherTripleDESCBC: {24, des.BlockSize, newTripleDESCBCCipher}, } // prefixLen is the length of the packet prefix that contains the packet length @@ -307,7 +307,7 @@ type gcmCipher struct { buf []byte } -func newGCMCipher(key, iv, unusedMacKey []byte, unusedAlgs directionAlgorithms) (packetCipher, error) { +func newGCMCipher(key, iv, unusedMacKey []byte, unusedAlgs DirectionAlgorithms) (packetCipher, error) { c, err := aes.NewCipher(key) if err != nil { return nil, err @@ -429,7 +429,7 @@ type cbcCipher struct { oracleCamouflage uint32 } -func newCBCCipher(c cipher.Block, key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) { +func newCBCCipher(c cipher.Block, key, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { cbc := &cbcCipher{ mac: macModes[algs.MAC].new(macKey), decrypter: cipher.NewCBCDecrypter(c, iv), @@ -443,7 +443,7 @@ func newCBCCipher(c cipher.Block, key, iv, macKey []byte, algs directionAlgorith return cbc, nil } -func newAESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) { +func newAESCBCCipher(key, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { c, err := aes.NewCipher(key) if err != nil { return nil, err @@ -457,7 +457,7 @@ func newAESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCi return cbc, nil } -func newTripleDESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) { +func newTripleDESCBCCipher(key, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { c, err := des.NewTripleDESCipher(key) if err != nil { return nil, err @@ -635,8 +635,6 @@ func (c *cbcCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader return nil } -const chacha20Poly1305ID = "chacha20-poly1305@openssh.com" - // chacha20Poly1305Cipher implements the chacha20-poly1305@openssh.com // AEAD, which is described here: // @@ -650,7 +648,7 @@ type chacha20Poly1305Cipher struct { buf []byte } -func newChaCha20Cipher(key, unusedIV, unusedMACKey []byte, unusedAlgs directionAlgorithms) (packetCipher, error) { +func newChaCha20Cipher(key, unusedIV, unusedMACKey []byte, unusedAlgs DirectionAlgorithms) (packetCipher, error) { if len(key) != 64 { panic(len(key)) } diff --git a/upstream/vendor/golang.org/x/crypto/ssh/client.go b/upstream/vendor/golang.org/x/crypto/ssh/client.go index fd8c49749e..33079789bc 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/client.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/client.go @@ -110,6 +110,7 @@ func (c *connection) clientHandshake(dialAddress string, config *ClientConfig) e } c.sessionID = c.transport.getSessionID() + c.algorithms = c.transport.getAlgorithms() return c.clientAuthenticate(config) } diff --git a/upstream/vendor/golang.org/x/crypto/ssh/client_auth.go b/upstream/vendor/golang.org/x/crypto/ssh/client_auth.go index b86dde151d..c12818fdc5 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/client_auth.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/client_auth.go @@ -289,7 +289,7 @@ func pickSignatureAlgorithm(signer Signer, extensions map[string][]byte) (MultiA } } - algo, err := findCommon("public key signature algorithm", keyAlgos, serverAlgos) + algo, err := findCommon("public key signature algorithm", keyAlgos, serverAlgos, true) if err != nil { // If there is no overlap, return the fallback algorithm to support // servers that fail to list all supported algorithms. diff --git a/upstream/vendor/golang.org/x/crypto/ssh/common.go b/upstream/vendor/golang.org/x/crypto/ssh/common.go index 7e9c2cbc64..f2ec0896c2 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/common.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/common.go @@ -10,6 +10,7 @@ import ( "fmt" "io" "math" + "slices" "sync" _ "crypto/sha1" @@ -24,69 +25,258 @@ const ( serviceSSH = "ssh-connection" ) -// supportedCiphers lists ciphers we support but might not recommend. -var supportedCiphers = []string{ - "aes128-ctr", "aes192-ctr", "aes256-ctr", - "aes128-gcm@openssh.com", gcm256CipherID, - chacha20Poly1305ID, - "arcfour256", "arcfour128", "arcfour", - aes128cbcID, - tripledescbcID, -} - -// preferredCiphers specifies the default preference for ciphers. -var preferredCiphers = []string{ - "aes128-gcm@openssh.com", gcm256CipherID, - chacha20Poly1305ID, - "aes128-ctr", "aes192-ctr", "aes256-ctr", -} - -// supportedKexAlgos specifies the supported key-exchange algorithms in -// preference order. -var supportedKexAlgos = []string{ - kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH, - // P384 and P521 are not constant-time yet, but since we don't - // reuse ephemeral keys, using them for ECDH should be OK. - kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, - kexAlgoDH14SHA256, kexAlgoDH16SHA512, kexAlgoDH14SHA1, - kexAlgoDH1SHA1, -} +// The ciphers currently or previously implemented by this library, to use in +// [Config.Ciphers]. For a list, see the [Algorithms.Ciphers] returned by +// [SupportedAlgorithms] or [InsecureAlgorithms]. +const ( + CipherAES128GCM = "aes128-gcm@openssh.com" + CipherAES256GCM = "aes256-gcm@openssh.com" + CipherChaCha20Poly1305 = "chacha20-poly1305@openssh.com" + CipherAES128CTR = "aes128-ctr" + CipherAES192CTR = "aes192-ctr" + CipherAES256CTR = "aes256-ctr" + InsecureCipherAES128CBC = "aes128-cbc" + InsecureCipherTripleDESCBC = "3des-cbc" + InsecureCipherRC4 = "arcfour" + InsecureCipherRC4128 = "arcfour128" + InsecureCipherRC4256 = "arcfour256" +) -// serverForbiddenKexAlgos contains key exchange algorithms, that are forbidden -// for the server half. -var serverForbiddenKexAlgos = map[string]struct{}{ - kexAlgoDHGEXSHA1: {}, // server half implementation is only minimal to satisfy the automated tests - kexAlgoDHGEXSHA256: {}, // server half implementation is only minimal to satisfy the automated tests -} +// The key exchanges currently or previously implemented by this library, to use +// in [Config.KeyExchanges]. For a list, see the +// [Algorithms.KeyExchanges] returned by [SupportedAlgorithms] or +// [InsecureAlgorithms]. +const ( + InsecureKeyExchangeDH1SHA1 = "diffie-hellman-group1-sha1" + InsecureKeyExchangeDH14SHA1 = "diffie-hellman-group14-sha1" + KeyExchangeDH14SHA256 = "diffie-hellman-group14-sha256" + KeyExchangeDH16SHA512 = "diffie-hellman-group16-sha512" + KeyExchangeECDHP256 = "ecdh-sha2-nistp256" + KeyExchangeECDHP384 = "ecdh-sha2-nistp384" + KeyExchangeECDHP521 = "ecdh-sha2-nistp521" + KeyExchangeCurve25519 = "curve25519-sha256" + InsecureKeyExchangeDHGEXSHA1 = "diffie-hellman-group-exchange-sha1" + KeyExchangeDHGEXSHA256 = "diffie-hellman-group-exchange-sha256" + // KeyExchangeMLKEM768X25519 is supported from Go 1.24. + KeyExchangeMLKEM768X25519 = "mlkem768x25519-sha256" + + // An alias for KeyExchangeCurve25519SHA256. This kex ID will be added if + // KeyExchangeCurve25519SHA256 is requested for backward compatibility with + // OpenSSH versions up to 7.2. + keyExchangeCurve25519LibSSH = "curve25519-sha256@libssh.org" +) -// preferredKexAlgos specifies the default preference for key-exchange -// algorithms in preference order. The diffie-hellman-group16-sha512 algorithm -// is disabled by default because it is a bit slower than the others. -var preferredKexAlgos = []string{ - kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH, - kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, - kexAlgoDH14SHA256, kexAlgoDH14SHA1, -} +// The message authentication code (MAC) currently or previously implemented by +// this library, to use in [Config.MACs]. For a list, see the +// [Algorithms.MACs] returned by [SupportedAlgorithms] or +// [InsecureAlgorithms]. +const ( + HMACSHA256ETM = "hmac-sha2-256-etm@openssh.com" + HMACSHA512ETM = "hmac-sha2-512-etm@openssh.com" + HMACSHA256 = "hmac-sha2-256" + HMACSHA512 = "hmac-sha2-512" + HMACSHA1 = "hmac-sha1" + InsecureHMACSHA196 = "hmac-sha1-96" +) -// supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods -// of authenticating servers) in preference order. -var supportedHostKeyAlgos = []string{ - CertAlgoRSASHA256v01, CertAlgoRSASHA512v01, - CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, - CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01, +var ( + // supportedKexAlgos specifies key-exchange algorithms implemented by this + // package in preference order, excluding those with security issues. + supportedKexAlgos = []string{ + KeyExchangeCurve25519, + KeyExchangeECDHP256, + KeyExchangeECDHP384, + KeyExchangeECDHP521, + KeyExchangeDH14SHA256, + KeyExchangeDH16SHA512, + KeyExchangeDHGEXSHA256, + } + // defaultKexAlgos specifies the default preference for key-exchange + // algorithms in preference order. + defaultKexAlgos = []string{ + KeyExchangeCurve25519, + KeyExchangeECDHP256, + KeyExchangeECDHP384, + KeyExchangeECDHP521, + KeyExchangeDH14SHA256, + InsecureKeyExchangeDH14SHA1, + } + // insecureKexAlgos specifies key-exchange algorithms implemented by this + // package and which have security issues. + insecureKexAlgos = []string{ + InsecureKeyExchangeDH14SHA1, + InsecureKeyExchangeDH1SHA1, + InsecureKeyExchangeDHGEXSHA1, + } + // supportedCiphers specifies cipher algorithms implemented by this package + // in preference order, excluding those with security issues. + supportedCiphers = []string{ + CipherAES128GCM, + CipherAES256GCM, + CipherChaCha20Poly1305, + CipherAES128CTR, + CipherAES192CTR, + CipherAES256CTR, + } + // defaultCiphers specifies the default preference for ciphers algorithms + // in preference order. + defaultCiphers = supportedCiphers + // insecureCiphers specifies cipher algorithms implemented by this + // package and which have security issues. + insecureCiphers = []string{ + InsecureCipherAES128CBC, + InsecureCipherTripleDESCBC, + InsecureCipherRC4256, + InsecureCipherRC4128, + InsecureCipherRC4, + } + // supportedMACs specifies MAC algorithms implemented by this package in + // preference order, excluding those with security issues. + supportedMACs = []string{ + HMACSHA256ETM, + HMACSHA512ETM, + HMACSHA256, + HMACSHA512, + HMACSHA1, + } + // defaultMACs specifies the default preference for MAC algorithms in + // preference order. + defaultMACs = []string{ + HMACSHA256ETM, + HMACSHA512ETM, + HMACSHA256, + HMACSHA512, + HMACSHA1, + InsecureHMACSHA196, + } + // insecureMACs specifies MAC algorithms implemented by this + // package and which have security issues. + insecureMACs = []string{ + InsecureHMACSHA196, + } + // supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. + // methods of authenticating servers) implemented by this package in + // preference order, excluding those with security issues. + supportedHostKeyAlgos = []string{ + CertAlgoRSASHA256v01, + CertAlgoRSASHA512v01, + CertAlgoECDSA256v01, + CertAlgoECDSA384v01, + CertAlgoECDSA521v01, + CertAlgoED25519v01, + KeyAlgoRSASHA256, + KeyAlgoRSASHA512, + KeyAlgoECDSA256, + KeyAlgoECDSA384, + KeyAlgoECDSA521, + KeyAlgoED25519, + } + // defaultHostKeyAlgos specifies the default preference for host-key + // algorithms in preference order. + defaultHostKeyAlgos = []string{ + CertAlgoRSASHA256v01, + CertAlgoRSASHA512v01, + CertAlgoRSAv01, + InsecureCertAlgoDSAv01, + CertAlgoECDSA256v01, + CertAlgoECDSA384v01, + CertAlgoECDSA521v01, + CertAlgoED25519v01, + KeyAlgoECDSA256, + KeyAlgoECDSA384, + KeyAlgoECDSA521, + KeyAlgoRSASHA256, + KeyAlgoRSASHA512, + KeyAlgoRSA, + InsecureKeyAlgoDSA, + KeyAlgoED25519, + } + // insecureHostKeyAlgos specifies host-key algorithms implemented by this + // package and which have security issues. + insecureHostKeyAlgos = []string{ + KeyAlgoRSA, + InsecureKeyAlgoDSA, + CertAlgoRSAv01, + InsecureCertAlgoDSAv01, + } + // supportedPubKeyAuthAlgos specifies the supported client public key + // authentication algorithms. Note that this doesn't include certificate + // types since those use the underlying algorithm. Order is irrelevant. + supportedPubKeyAuthAlgos = []string{ + KeyAlgoED25519, + KeyAlgoSKED25519, + KeyAlgoSKECDSA256, + KeyAlgoECDSA256, + KeyAlgoECDSA384, + KeyAlgoECDSA521, + KeyAlgoRSASHA256, + KeyAlgoRSASHA512, + } - KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, - KeyAlgoRSASHA256, KeyAlgoRSASHA512, - KeyAlgoRSA, KeyAlgoDSA, + // defaultPubKeyAuthAlgos specifies the preferred client public key + // authentication algorithms. This list is sent to the client if it supports + // the server-sig-algs extension. Order is irrelevant. + defaultPubKeyAuthAlgos = []string{ + KeyAlgoED25519, + KeyAlgoSKED25519, + KeyAlgoSKECDSA256, + KeyAlgoECDSA256, + KeyAlgoECDSA384, + KeyAlgoECDSA521, + KeyAlgoRSASHA256, + KeyAlgoRSASHA512, + KeyAlgoRSA, + InsecureKeyAlgoDSA, + } + // insecurePubKeyAuthAlgos specifies client public key authentication + // algorithms implemented by this package and which have security issues. + insecurePubKeyAuthAlgos = []string{ + KeyAlgoRSA, + InsecureKeyAlgoDSA, + } +) - KeyAlgoED25519, +// NegotiatedAlgorithms defines algorithms negotiated between client and server. +type NegotiatedAlgorithms struct { + KeyExchange string + HostKey string + Read DirectionAlgorithms + Write DirectionAlgorithms +} + +// Algorithms defines a set of algorithms that can be configured in the client +// or server config for negotiation during a handshake. +type Algorithms struct { + KeyExchanges []string + Ciphers []string + MACs []string + HostKeys []string + PublicKeyAuths []string +} + +// SupportedAlgorithms returns algorithms currently implemented by this package, +// excluding those with security issues, which are returned by +// InsecureAlgorithms. The algorithms listed here are in preference order. +func SupportedAlgorithms() Algorithms { + return Algorithms{ + Ciphers: slices.Clone(supportedCiphers), + MACs: slices.Clone(supportedMACs), + KeyExchanges: slices.Clone(supportedKexAlgos), + HostKeys: slices.Clone(supportedHostKeyAlgos), + PublicKeyAuths: slices.Clone(supportedPubKeyAuthAlgos), + } } -// supportedMACs specifies a default set of MAC algorithms in preference order. -// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed -// because they have reached the end of their useful life. -var supportedMACs = []string{ - "hmac-sha2-256-etm@openssh.com", "hmac-sha2-512-etm@openssh.com", "hmac-sha2-256", "hmac-sha2-512", "hmac-sha1", "hmac-sha1-96", +// InsecureAlgorithms returns algorithms currently implemented by this package +// and which have security issues. +func InsecureAlgorithms() Algorithms { + return Algorithms{ + KeyExchanges: slices.Clone(insecureKexAlgos), + Ciphers: slices.Clone(insecureCiphers), + MACs: slices.Clone(insecureMACs), + HostKeys: slices.Clone(insecureHostKeyAlgos), + PublicKeyAuths: slices.Clone(insecurePubKeyAuthAlgos), + } } var supportedCompressions = []string{compressionNone} @@ -94,13 +284,13 @@ var supportedCompressions = []string{compressionNone} // hashFuncs keeps the mapping of supported signature algorithms to their // respective hashes needed for signing and verification. var hashFuncs = map[string]crypto.Hash{ - KeyAlgoRSA: crypto.SHA1, - KeyAlgoRSASHA256: crypto.SHA256, - KeyAlgoRSASHA512: crypto.SHA512, - KeyAlgoDSA: crypto.SHA1, - KeyAlgoECDSA256: crypto.SHA256, - KeyAlgoECDSA384: crypto.SHA384, - KeyAlgoECDSA521: crypto.SHA512, + KeyAlgoRSA: crypto.SHA1, + KeyAlgoRSASHA256: crypto.SHA256, + KeyAlgoRSASHA512: crypto.SHA512, + InsecureKeyAlgoDSA: crypto.SHA1, + KeyAlgoECDSA256: crypto.SHA256, + KeyAlgoECDSA384: crypto.SHA384, + KeyAlgoECDSA521: crypto.SHA512, // KeyAlgoED25519 doesn't pre-hash. KeyAlgoSKECDSA256: crypto.SHA256, KeyAlgoSKED25519: crypto.SHA256, @@ -135,18 +325,6 @@ func isRSACert(algo string) bool { return isRSA(algo) } -// supportedPubKeyAuthAlgos specifies the supported client public key -// authentication algorithms. Note that this doesn't include certificate types -// since those use the underlying algorithm. This list is sent to the client if -// it supports the server-sig-algs extension. Order is irrelevant. -var supportedPubKeyAuthAlgos = []string{ - KeyAlgoED25519, - KeyAlgoSKED25519, KeyAlgoSKECDSA256, - KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, - KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoRSA, - KeyAlgoDSA, -} - // unexpectedMessageError results when the SSH message that we received didn't // match what we wanted. func unexpectedMessageError(expected, got uint8) error { @@ -158,7 +336,7 @@ func parseError(tag uint8) error { return fmt.Errorf("ssh: parse error in message type %d", tag) } -func findCommon(what string, client []string, server []string) (common string, err error) { +func findCommon(what string, client []string, server []string, isClient bool) (string, error) { for _, c := range client { for _, s := range server { if c == s { @@ -166,23 +344,49 @@ func findCommon(what string, client []string, server []string) (common string, e } } } - return "", fmt.Errorf("ssh: no common algorithm for %s; client offered: %v, server offered: %v", what, client, server) + err := &AlgorithmNegotiationError{ + What: what, + } + if isClient { + err.SupportedAlgorithms = client + err.RequestedAlgorithms = server + } else { + err.SupportedAlgorithms = server + err.RequestedAlgorithms = client + } + return "", err +} + +// AlgorithmNegotiationError defines the error returned if the client and the +// server cannot agree on an algorithm for key exchange, host key, cipher, MAC. +type AlgorithmNegotiationError struct { + What string + // RequestedAlgorithms lists the algorithms supported by the peer. + RequestedAlgorithms []string + // SupportedAlgorithms lists the algorithms supported on our side. + SupportedAlgorithms []string } -// directionAlgorithms records algorithm choices in one direction (either read or write) -type directionAlgorithms struct { +func (a *AlgorithmNegotiationError) Error() string { + return fmt.Sprintf("ssh: no common algorithm for %s; we offered: %v, peer offered: %v", + a.What, a.SupportedAlgorithms, a.RequestedAlgorithms) +} + +// DirectionAlgorithms defines the algorithms negotiated in one direction +// (either read or write). +type DirectionAlgorithms struct { Cipher string MAC string - Compression string + compression string } // rekeyBytes returns a rekeying intervals in bytes. -func (a *directionAlgorithms) rekeyBytes() int64 { +func (a *DirectionAlgorithms) rekeyBytes() int64 { // According to RFC 4344 block ciphers should rekey after // 2^(BLOCKSIZE/4) blocks. For all AES flavors BLOCKSIZE is // 128. switch a.Cipher { - case "aes128-ctr", "aes192-ctr", "aes256-ctr", gcm128CipherID, gcm256CipherID, aes128cbcID: + case CipherAES128CTR, CipherAES192CTR, CipherAES256CTR, CipherAES128GCM, CipherAES256GCM, InsecureCipherAES128CBC: return 16 * (1 << 32) } @@ -192,66 +396,59 @@ func (a *directionAlgorithms) rekeyBytes() int64 { } var aeadCiphers = map[string]bool{ - gcm128CipherID: true, - gcm256CipherID: true, - chacha20Poly1305ID: true, + CipherAES128GCM: true, + CipherAES256GCM: true, + CipherChaCha20Poly1305: true, } -type algorithms struct { - kex string - hostKey string - w directionAlgorithms - r directionAlgorithms -} +func findAgreedAlgorithms(isClient bool, clientKexInit, serverKexInit *kexInitMsg) (algs *NegotiatedAlgorithms, err error) { + result := &NegotiatedAlgorithms{} -func findAgreedAlgorithms(isClient bool, clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) { - result := &algorithms{} - - result.kex, err = findCommon("key exchange", clientKexInit.KexAlgos, serverKexInit.KexAlgos) + result.KeyExchange, err = findCommon("key exchange", clientKexInit.KexAlgos, serverKexInit.KexAlgos, isClient) if err != nil { return } - result.hostKey, err = findCommon("host key", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos) + result.HostKey, err = findCommon("host key", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos, isClient) if err != nil { return } - stoc, ctos := &result.w, &result.r + stoc, ctos := &result.Write, &result.Read if isClient { ctos, stoc = stoc, ctos } - ctos.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer) + ctos.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer, isClient) if err != nil { return } - stoc.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient) + stoc.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient, isClient) if err != nil { return } if !aeadCiphers[ctos.Cipher] { - ctos.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer) + ctos.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer, isClient) if err != nil { return } } if !aeadCiphers[stoc.Cipher] { - stoc.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient) + stoc.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient, isClient) if err != nil { return } } - ctos.Compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer) + ctos.compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer, isClient) if err != nil { return } - stoc.Compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient) + stoc.compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient, isClient) if err != nil { return } @@ -297,7 +494,7 @@ func (c *Config) SetDefaults() { c.Rand = rand.Reader } if c.Ciphers == nil { - c.Ciphers = preferredCiphers + c.Ciphers = defaultCiphers } var ciphers []string for _, c := range c.Ciphers { @@ -309,19 +506,22 @@ func (c *Config) SetDefaults() { c.Ciphers = ciphers if c.KeyExchanges == nil { - c.KeyExchanges = preferredKexAlgos + c.KeyExchanges = defaultKexAlgos } var kexs []string for _, k := range c.KeyExchanges { if kexAlgoMap[k] != nil { // Ignore the KEX if we have no kexAlgoMap definition. kexs = append(kexs, k) + if k == KeyExchangeCurve25519 && !contains(c.KeyExchanges, keyExchangeCurve25519LibSSH) { + kexs = append(kexs, keyExchangeCurve25519LibSSH) + } } } c.KeyExchanges = kexs if c.MACs == nil { - c.MACs = supportedMACs + c.MACs = defaultMACs } var macs []string for _, m := range c.MACs { diff --git a/upstream/vendor/golang.org/x/crypto/ssh/connection.go b/upstream/vendor/golang.org/x/crypto/ssh/connection.go index 8f345ee924..613a71a7b3 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/connection.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/connection.go @@ -74,6 +74,13 @@ type Conn interface { // Disconnect } +// AlgorithmsConnMetadata is a ConnMetadata that can return the algorithms +// negotiated between client and server. +type AlgorithmsConnMetadata interface { + ConnMetadata + Algorithms() NegotiatedAlgorithms +} + // DiscardRequests consumes and rejects all requests from the // passed-in channel. func DiscardRequests(in <-chan *Request) { @@ -106,6 +113,7 @@ type sshConn struct { sessionID []byte clientVersion []byte serverVersion []byte + algorithms NegotiatedAlgorithms } func dup(src []byte) []byte { @@ -141,3 +149,7 @@ func (c *sshConn) ClientVersion() []byte { func (c *sshConn) ServerVersion() []byte { return dup(c.serverVersion) } + +func (c *sshConn) Algorithms() NegotiatedAlgorithms { + return c.algorithms +} diff --git a/upstream/vendor/golang.org/x/crypto/ssh/doc.go b/upstream/vendor/golang.org/x/crypto/ssh/doc.go index f5d352fe3a..04ccce3461 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/doc.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/doc.go @@ -16,6 +16,7 @@ References: [PROTOCOL]: https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL?rev=HEAD [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD [SSH-PARAMETERS]: http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1 + [SSH-CERTS]: https://datatracker.ietf.org/doc/html/draft-miller-ssh-cert-01 This package does not fall under the stability promise of the Go language itself, so its API may be changed when pressing needs arise. diff --git a/upstream/vendor/golang.org/x/crypto/ssh/handshake.go b/upstream/vendor/golang.org/x/crypto/ssh/handshake.go index b6bf546b49..a90bfe331c 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/handshake.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/handshake.go @@ -38,7 +38,7 @@ type keyingTransport interface { // prepareKeyChange sets up a key change. The key change for a // direction will be effected if a msgNewKeys message is sent // or received. - prepareKeyChange(*algorithms, *kexResult) error + prepareKeyChange(*NegotiatedAlgorithms, *kexResult) error // setStrictMode sets the strict KEX mode, notably triggering // sequence number resets on sending or receiving msgNewKeys. @@ -115,7 +115,7 @@ type handshakeTransport struct { bannerCallback BannerCallback // Algorithms agreed in the last key exchange. - algorithms *algorithms + algorithms *NegotiatedAlgorithms // Counters exclusively owned by readLoop. readPacketsLeft uint32 @@ -164,7 +164,7 @@ func newClientTransport(conn keyingTransport, clientVersion, serverVersion []byt if config.HostKeyAlgorithms != nil { t.hostKeyAlgorithms = config.HostKeyAlgorithms } else { - t.hostKeyAlgorithms = supportedHostKeyAlgos + t.hostKeyAlgorithms = defaultHostKeyAlgos } go t.readLoop() go t.kexLoop() @@ -184,6 +184,10 @@ func (t *handshakeTransport) getSessionID() []byte { return t.sessionID } +func (t *handshakeTransport) getAlgorithms() NegotiatedAlgorithms { + return *t.algorithms +} + // waitSession waits for the session to be established. This should be // the first thing to call after instantiating handshakeTransport. func (t *handshakeTransport) waitSession() error { @@ -290,7 +294,7 @@ func (t *handshakeTransport) resetWriteThresholds() { if t.config.RekeyThreshold > 0 { t.writeBytesLeft = int64(t.config.RekeyThreshold) } else if t.algorithms != nil { - t.writeBytesLeft = t.algorithms.w.rekeyBytes() + t.writeBytesLeft = t.algorithms.Write.rekeyBytes() } else { t.writeBytesLeft = 1 << 30 } @@ -407,7 +411,7 @@ func (t *handshakeTransport) resetReadThresholds() { if t.config.RekeyThreshold > 0 { t.readBytesLeft = int64(t.config.RekeyThreshold) } else if t.algorithms != nil { - t.readBytesLeft = t.algorithms.r.rekeyBytes() + t.readBytesLeft = t.algorithms.Read.rekeyBytes() } else { t.readBytesLeft = 1 << 30 } @@ -700,9 +704,9 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { } } - kex, ok := kexAlgoMap[t.algorithms.kex] + kex, ok := kexAlgoMap[t.algorithms.KeyExchange] if !ok { - return fmt.Errorf("ssh: unexpected key exchange algorithm %v", t.algorithms.kex) + return fmt.Errorf("ssh: unexpected key exchange algorithm %v", t.algorithms.KeyExchange) } var result *kexResult @@ -809,12 +813,12 @@ func pickHostKey(hostKeys []Signer, algo string) AlgorithmSigner { } func (t *handshakeTransport) server(kex kexAlgorithm, magics *handshakeMagics) (*kexResult, error) { - hostKey := pickHostKey(t.hostKeys, t.algorithms.hostKey) + hostKey := pickHostKey(t.hostKeys, t.algorithms.HostKey) if hostKey == nil { return nil, errors.New("ssh: internal error: negotiated unsupported signature type") } - r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey, t.algorithms.hostKey) + r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey, t.algorithms.HostKey) return r, err } @@ -829,7 +833,7 @@ func (t *handshakeTransport) client(kex kexAlgorithm, magics *handshakeMagics) ( return nil, err } - if err := verifyHostKeySignature(hostKey, t.algorithms.hostKey, result); err != nil { + if err := verifyHostKeySignature(hostKey, t.algorithms.HostKey, result); err != nil { return nil, err } diff --git a/upstream/vendor/golang.org/x/crypto/ssh/kex.go b/upstream/vendor/golang.org/x/crypto/ssh/kex.go index 8a05f79902..cf388a92aa 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/kex.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/kex.go @@ -20,21 +20,18 @@ import ( ) const ( - kexAlgoDH1SHA1 = "diffie-hellman-group1-sha1" - kexAlgoDH14SHA1 = "diffie-hellman-group14-sha1" - kexAlgoDH14SHA256 = "diffie-hellman-group14-sha256" - kexAlgoDH16SHA512 = "diffie-hellman-group16-sha512" - kexAlgoECDH256 = "ecdh-sha2-nistp256" - kexAlgoECDH384 = "ecdh-sha2-nistp384" - kexAlgoECDH521 = "ecdh-sha2-nistp521" - kexAlgoCurve25519SHA256LibSSH = "curve25519-sha256@libssh.org" - kexAlgoCurve25519SHA256 = "curve25519-sha256" - - // For the following kex only the client half contains a production - // ready implementation. The server half only consists of a minimal - // implementation to satisfy the automated tests. - kexAlgoDHGEXSHA1 = "diffie-hellman-group-exchange-sha1" - kexAlgoDHGEXSHA256 = "diffie-hellman-group-exchange-sha256" + // This is the group called diffie-hellman-group1-sha1 in RFC 4253 and + // Oakley Group 2 in RFC 2409. + oakleyGroup2 = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF" + // This is the group called diffie-hellman-group14-sha1 in RFC 4253 and + // Oakley Group 14 in RFC 3526. + oakleyGroup14 = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF" + // This is the group called diffie-hellman-group15-sha512 in RFC 8268 and + // Oakley Group 15 in RFC 3526. + oakleyGroup15 = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF" + // This is the group called diffie-hellman-group16-sha512 in RFC 8268 and + // Oakley Group 16 in RFC 3526. + oakleyGroup16 = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF" ) // kexResult captures the outcome of a key exchange. @@ -402,53 +399,46 @@ func ecHash(curve elliptic.Curve) crypto.Hash { var kexAlgoMap = map[string]kexAlgorithm{} func init() { - // This is the group called diffie-hellman-group1-sha1 in - // RFC 4253 and Oakley Group 2 in RFC 2409. - p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF", 16) - kexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{ + p, _ := new(big.Int).SetString(oakleyGroup2, 16) + kexAlgoMap[InsecureKeyExchangeDH1SHA1] = &dhGroup{ g: new(big.Int).SetInt64(2), p: p, pMinus1: new(big.Int).Sub(p, bigOne), hashFunc: crypto.SHA1, } - // This are the groups called diffie-hellman-group14-sha1 and - // diffie-hellman-group14-sha256 in RFC 4253 and RFC 8268, - // and Oakley Group 14 in RFC 3526. - p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16) + p, _ = new(big.Int).SetString(oakleyGroup14, 16) group14 := &dhGroup{ g: new(big.Int).SetInt64(2), p: p, pMinus1: new(big.Int).Sub(p, bigOne), } - kexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{ + kexAlgoMap[InsecureKeyExchangeDH14SHA1] = &dhGroup{ g: group14.g, p: group14.p, pMinus1: group14.pMinus1, hashFunc: crypto.SHA1, } - kexAlgoMap[kexAlgoDH14SHA256] = &dhGroup{ + kexAlgoMap[KeyExchangeDH14SHA256] = &dhGroup{ g: group14.g, p: group14.p, pMinus1: group14.pMinus1, hashFunc: crypto.SHA256, } - // This is the group called diffie-hellman-group16-sha512 in RFC - // 8268 and Oakley Group 16 in RFC 3526. - p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF", 16) + p, _ = new(big.Int).SetString(oakleyGroup16, 16) - kexAlgoMap[kexAlgoDH16SHA512] = &dhGroup{ + kexAlgoMap[KeyExchangeDH16SHA512] = &dhGroup{ g: new(big.Int).SetInt64(2), p: p, pMinus1: new(big.Int).Sub(p, bigOne), hashFunc: crypto.SHA512, } - kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()} - kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()} - kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()} - kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{} - kexAlgoMap[kexAlgoCurve25519SHA256LibSSH] = &curve25519sha256{} - kexAlgoMap[kexAlgoDHGEXSHA1] = &dhGEXSHA{hashFunc: crypto.SHA1} - kexAlgoMap[kexAlgoDHGEXSHA256] = &dhGEXSHA{hashFunc: crypto.SHA256} + kexAlgoMap[KeyExchangeECDHP521] = &ecdh{elliptic.P521()} + kexAlgoMap[KeyExchangeECDHP384] = &ecdh{elliptic.P384()} + kexAlgoMap[KeyExchangeECDHP256] = &ecdh{elliptic.P256()} + kexAlgoMap[KeyExchangeCurve25519] = &curve25519sha256{} + kexAlgoMap[keyExchangeCurve25519LibSSH] = &curve25519sha256{} + kexAlgoMap[InsecureKeyExchangeDHGEXSHA1] = &dhGEXSHA{hashFunc: crypto.SHA1} + kexAlgoMap[KeyExchangeDHGEXSHA256] = &dhGEXSHA{hashFunc: crypto.SHA256} } // curve25519sha256 implements the curve25519-sha256 (formerly known as @@ -601,9 +591,9 @@ const ( func (gex *dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) { // Send GexRequest kexDHGexRequest := kexDHGexRequestMsg{ - MinBits: dhGroupExchangeMinimumBits, - PreferedBits: dhGroupExchangePreferredBits, - MaxBits: dhGroupExchangeMaximumBits, + MinBits: dhGroupExchangeMinimumBits, + PreferredBits: dhGroupExchangePreferredBits, + MaxBits: dhGroupExchangeMaximumBits, } if err := c.writePacket(Marshal(&kexDHGexRequest)); err != nil { return nil, err @@ -690,9 +680,7 @@ func (gex *dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshak } // Server half implementation of the Diffie Hellman Key Exchange with SHA1 and SHA256. -// -// This is a minimal implementation to satisfy the automated tests. -func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) { +func (gex *dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) { // Receive GexRequest packet, err := c.readPacket() if err != nil { @@ -702,13 +690,32 @@ func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshake if err = Unmarshal(packet, &kexDHGexRequest); err != nil { return } + // We check that the request received is valid and that the MaxBits + // requested are at least equal to our supported minimum. This is the same + // check done in OpenSSH: + // https://github.com/openssh/openssh-portable/blob/80a2f64b/kexgexs.c#L94 + // + // Furthermore, we also check that the required MinBits are less than or + // equal to 4096 because we can use up to Oakley Group 16. + if kexDHGexRequest.MaxBits < kexDHGexRequest.MinBits || kexDHGexRequest.PreferredBits < kexDHGexRequest.MinBits || + kexDHGexRequest.MaxBits < kexDHGexRequest.PreferredBits || kexDHGexRequest.MaxBits < dhGroupExchangeMinimumBits || + kexDHGexRequest.MinBits > 4096 { + return nil, fmt.Errorf("ssh: DH GEX request out of range, min: %d, max: %d, preferred: %d", kexDHGexRequest.MinBits, + kexDHGexRequest.MaxBits, kexDHGexRequest.PreferredBits) + } + + var p *big.Int + // We hardcode sending Oakley Group 14 (2048 bits), Oakley Group 15 (3072 + // bits) or Oakley Group 16 (4096 bits), based on the requested max size. + if kexDHGexRequest.MaxBits < 3072 { + p, _ = new(big.Int).SetString(oakleyGroup14, 16) + } else if kexDHGexRequest.MaxBits < 4096 { + p, _ = new(big.Int).SetString(oakleyGroup15, 16) + } else { + p, _ = new(big.Int).SetString(oakleyGroup16, 16) + } - // Send GexGroup - // This is the group called diffie-hellman-group14-sha1 in RFC - // 4253 and Oakley Group 14 in RFC 3526. - p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16) g := big.NewInt(2) - msg := &kexDHGexGroupMsg{ P: p, G: g, @@ -746,9 +753,9 @@ func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshake h := gex.hashFunc.New() magics.write(h) writeString(h, hostKeyBytes) - binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits)) - binary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits)) - binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits)) + binary.Write(h, binary.BigEndian, kexDHGexRequest.MinBits) + binary.Write(h, binary.BigEndian, kexDHGexRequest.PreferredBits) + binary.Write(h, binary.BigEndian, kexDHGexRequest.MaxBits) writeInt(h, p) writeInt(h, g) writeInt(h, kexDHGexInit.X) diff --git a/upstream/vendor/golang.org/x/crypto/ssh/keys.go b/upstream/vendor/golang.org/x/crypto/ssh/keys.go index 98e6706d5d..a28c0de503 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/keys.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/keys.go @@ -36,14 +36,19 @@ import ( // ClientConfig.HostKeyAlgorithms, Signature.Format, or as AlgorithmSigner // arguments. const ( - KeyAlgoRSA = "ssh-rsa" - KeyAlgoDSA = "ssh-dss" - KeyAlgoECDSA256 = "ecdsa-sha2-nistp256" - KeyAlgoSKECDSA256 = "sk-ecdsa-sha2-nistp256@openssh.com" - KeyAlgoECDSA384 = "ecdsa-sha2-nistp384" - KeyAlgoECDSA521 = "ecdsa-sha2-nistp521" - KeyAlgoED25519 = "ssh-ed25519" - KeyAlgoSKED25519 = "sk-ssh-ed25519@openssh.com" + KeyAlgoRSA = "ssh-rsa" + // Deprecated: DSA is only supported at insecure key sizes, and was removed + // from major implementations. + KeyAlgoDSA = InsecureKeyAlgoDSA + // Deprecated: DSA is only supported at insecure key sizes, and was removed + // from major implementations. + InsecureKeyAlgoDSA = "ssh-dss" + KeyAlgoECDSA256 = "ecdsa-sha2-nistp256" + KeyAlgoSKECDSA256 = "sk-ecdsa-sha2-nistp256@openssh.com" + KeyAlgoECDSA384 = "ecdsa-sha2-nistp384" + KeyAlgoECDSA521 = "ecdsa-sha2-nistp521" + KeyAlgoED25519 = "ssh-ed25519" + KeyAlgoSKED25519 = "sk-ssh-ed25519@openssh.com" // KeyAlgoRSASHA256 and KeyAlgoRSASHA512 are only public key algorithms, not // public key formats, so they can't appear as a PublicKey.Type. The @@ -67,7 +72,7 @@ func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err err switch algo { case KeyAlgoRSA: return parseRSA(in) - case KeyAlgoDSA: + case InsecureKeyAlgoDSA: return parseDSA(in) case KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521: return parseECDSA(in) @@ -77,7 +82,7 @@ func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err err return parseED25519(in) case KeyAlgoSKED25519: return parseSKEd25519(in) - case CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01: + case CertAlgoRSAv01, InsecureCertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01: cert, err := parseCert(in, certKeyAlgoNames[algo]) if err != nil { return nil, nil, err @@ -268,7 +273,7 @@ func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []str return nil, "", nil, nil, errors.New("ssh: no key found") } -// ParsePublicKey parses an SSH public key formatted for use in +// ParsePublicKey parses an SSH public key or certificate formatted for use in // the SSH wire protocol according to RFC 4253, section 6.6. func ParsePublicKey(in []byte) (out PublicKey, err error) { algo, in, ok := parseString(in) diff --git a/upstream/vendor/golang.org/x/crypto/ssh/mac.go b/upstream/vendor/golang.org/x/crypto/ssh/mac.go index 06a1b27507..de2639d57f 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/mac.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/mac.go @@ -47,22 +47,22 @@ func (t truncatingMAC) Size() int { func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() } var macModes = map[string]*macMode{ - "hmac-sha2-512-etm@openssh.com": {64, true, func(key []byte) hash.Hash { + HMACSHA512ETM: {64, true, func(key []byte) hash.Hash { return hmac.New(sha512.New, key) }}, - "hmac-sha2-256-etm@openssh.com": {32, true, func(key []byte) hash.Hash { + HMACSHA256ETM: {32, true, func(key []byte) hash.Hash { return hmac.New(sha256.New, key) }}, - "hmac-sha2-512": {64, false, func(key []byte) hash.Hash { + HMACSHA512: {64, false, func(key []byte) hash.Hash { return hmac.New(sha512.New, key) }}, - "hmac-sha2-256": {32, false, func(key []byte) hash.Hash { + HMACSHA256: {32, false, func(key []byte) hash.Hash { return hmac.New(sha256.New, key) }}, - "hmac-sha1": {20, false, func(key []byte) hash.Hash { + HMACSHA1: {20, false, func(key []byte) hash.Hash { return hmac.New(sha1.New, key) }}, - "hmac-sha1-96": {20, false, func(key []byte) hash.Hash { + InsecureHMACSHA196: {20, false, func(key []byte) hash.Hash { return truncatingMAC{12, hmac.New(sha1.New, key)} }}, } diff --git a/upstream/vendor/golang.org/x/crypto/ssh/messages.go b/upstream/vendor/golang.org/x/crypto/ssh/messages.go index 118427bc05..251b9d06a3 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/messages.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/messages.go @@ -122,9 +122,9 @@ type kexDHGexReplyMsg struct { const msgKexDHGexRequest = 34 type kexDHGexRequestMsg struct { - MinBits uint32 `sshtype:"34"` - PreferedBits uint32 - MaxBits uint32 + MinBits uint32 `sshtype:"34"` + PreferredBits uint32 + MaxBits uint32 } // See RFC 4253, section 10. diff --git a/upstream/vendor/golang.org/x/crypto/ssh/mlkem.go b/upstream/vendor/golang.org/x/crypto/ssh/mlkem.go new file mode 100644 index 0000000000..657e1079d4 --- /dev/null +++ b/upstream/vendor/golang.org/x/crypto/ssh/mlkem.go @@ -0,0 +1,183 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.24 + +package ssh + +import ( + "crypto" + "crypto/mlkem" + "crypto/sha256" + "errors" + "fmt" + "io" + "runtime" + "slices" + + "golang.org/x/crypto/curve25519" +) + +func init() { + // After Go 1.24rc1 mlkem swapped the order of return values of Encapsulate. + // See #70950. + if runtime.Version() == "go1.24rc1" { + return + } + supportedKexAlgos = slices.Insert(supportedKexAlgos, 0, KeyExchangeMLKEM768X25519) + defaultKexAlgos = slices.Insert(defaultKexAlgos, 0, KeyExchangeMLKEM768X25519) + kexAlgoMap[KeyExchangeMLKEM768X25519] = &mlkem768WithCurve25519sha256{} +} + +// mlkem768WithCurve25519sha256 implements the hybrid ML-KEM768 with +// curve25519-sha256 key exchange method, as described by +// draft-kampanakis-curdle-ssh-pq-ke-05 section 2.3.3. +type mlkem768WithCurve25519sha256 struct{} + +func (kex *mlkem768WithCurve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) { + var c25519kp curve25519KeyPair + if err := c25519kp.generate(rand); err != nil { + return nil, err + } + + seed := make([]byte, mlkem.SeedSize) + if _, err := io.ReadFull(rand, seed); err != nil { + return nil, err + } + + mlkemDk, err := mlkem.NewDecapsulationKey768(seed) + if err != nil { + return nil, err + } + + hybridKey := append(mlkemDk.EncapsulationKey().Bytes(), c25519kp.pub[:]...) + if err := c.writePacket(Marshal(&kexECDHInitMsg{hybridKey})); err != nil { + return nil, err + } + + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var reply kexECDHReplyMsg + if err = Unmarshal(packet, &reply); err != nil { + return nil, err + } + + if len(reply.EphemeralPubKey) != mlkem.CiphertextSize768+32 { + return nil, errors.New("ssh: peer's mlkem768x25519 public value has wrong length") + } + + // Perform KEM decapsulate operation to obtain shared key from ML-KEM. + mlkem768Secret, err := mlkemDk.Decapsulate(reply.EphemeralPubKey[:mlkem.CiphertextSize768]) + if err != nil { + return nil, err + } + + // Complete Curve25519 ECDH to obtain its shared key. + c25519Secret, err := curve25519.X25519(c25519kp.priv[:], reply.EphemeralPubKey[mlkem.CiphertextSize768:]) + if err != nil { + return nil, fmt.Errorf("ssh: peer's mlkem768x25519 public value is not valid: %w", err) + } + // Compute actual shared key. + h := sha256.New() + h.Write(mlkem768Secret) + h.Write(c25519Secret) + secret := h.Sum(nil) + + h.Reset() + magics.write(h) + writeString(h, reply.HostKey) + writeString(h, hybridKey) + writeString(h, reply.EphemeralPubKey) + + K := make([]byte, stringLength(len(secret))) + marshalString(K, secret) + h.Write(K) + + return &kexResult{ + H: h.Sum(nil), + K: K, + HostKey: reply.HostKey, + Signature: reply.Signature, + Hash: crypto.SHA256, + }, nil +} + +func (kex *mlkem768WithCurve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (*kexResult, error) { + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var kexInit kexECDHInitMsg + if err = Unmarshal(packet, &kexInit); err != nil { + return nil, err + } + + if len(kexInit.ClientPubKey) != mlkem.EncapsulationKeySize768+32 { + return nil, errors.New("ssh: peer's ML-KEM768/curve25519 public value has wrong length") + } + + encapsulationKey, err := mlkem.NewEncapsulationKey768(kexInit.ClientPubKey[:mlkem.EncapsulationKeySize768]) + if err != nil { + return nil, fmt.Errorf("ssh: peer's ML-KEM768 encapsulation key is not valid: %w", err) + } + // Perform KEM encapsulate operation to obtain ciphertext and shared key. + mlkem768Secret, mlkem768Ciphertext := encapsulationKey.Encapsulate() + + // Perform server side of Curve25519 ECDH to obtain server public value and + // shared key. + var c25519kp curve25519KeyPair + if err := c25519kp.generate(rand); err != nil { + return nil, err + } + c25519Secret, err := curve25519.X25519(c25519kp.priv[:], kexInit.ClientPubKey[mlkem.EncapsulationKeySize768:]) + if err != nil { + return nil, fmt.Errorf("ssh: peer's ML-KEM768/curve25519 public value is not valid: %w", err) + } + hybridKey := append(mlkem768Ciphertext, c25519kp.pub[:]...) + + // Compute actual shared key. + h := sha256.New() + h.Write(mlkem768Secret) + h.Write(c25519Secret) + secret := h.Sum(nil) + + hostKeyBytes := priv.PublicKey().Marshal() + + h.Reset() + magics.write(h) + writeString(h, hostKeyBytes) + writeString(h, kexInit.ClientPubKey) + writeString(h, hybridKey) + + K := make([]byte, stringLength(len(secret))) + marshalString(K, secret) + h.Write(K) + + H := h.Sum(nil) + + sig, err := signAndMarshal(priv, rand, H, algo) + if err != nil { + return nil, err + } + + reply := kexECDHReplyMsg{ + EphemeralPubKey: hybridKey, + HostKey: hostKeyBytes, + Signature: sig, + } + if err := c.writePacket(Marshal(&reply)); err != nil { + return nil, err + } + return &kexResult{ + H: H, + K: K, + HostKey: hostKeyBytes, + Signature: sig, + Hash: crypto.SHA256, + }, nil +} diff --git a/upstream/vendor/golang.org/x/crypto/ssh/server.go b/upstream/vendor/golang.org/x/crypto/ssh/server.go index 1839ddc6a4..98679ba5b6 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/server.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/server.go @@ -243,22 +243,15 @@ func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewCha fullConf.MaxAuthTries = 6 } if len(fullConf.PublicKeyAuthAlgorithms) == 0 { - fullConf.PublicKeyAuthAlgorithms = supportedPubKeyAuthAlgos + fullConf.PublicKeyAuthAlgorithms = defaultPubKeyAuthAlgos } else { for _, algo := range fullConf.PublicKeyAuthAlgorithms { - if !contains(supportedPubKeyAuthAlgos, algo) { + if !contains(SupportedAlgorithms().PublicKeyAuths, algo) && !contains(InsecureAlgorithms().PublicKeyAuths, algo) { c.Close() return nil, nil, nil, fmt.Errorf("ssh: unsupported public key authentication algorithm %s", algo) } } } - // Check if the config contains any unsupported key exchanges - for _, kex := range fullConf.KeyExchanges { - if _, ok := serverForbiddenKexAlgos[kex]; ok { - c.Close() - return nil, nil, nil, fmt.Errorf("ssh: unsupported key exchange %s for server", kex) - } - } s := &connection{ sshConn: sshConn{conn: c}, @@ -315,6 +308,7 @@ func (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) // We just did the key change, so the session ID is established. s.sessionID = s.transport.getSessionID() + s.algorithms = s.transport.getAlgorithms() var packet []byte if packet, err = s.transport.readPacket(); err != nil { diff --git a/upstream/vendor/golang.org/x/crypto/ssh/transport.go b/upstream/vendor/golang.org/x/crypto/ssh/transport.go index 0424d2d37c..663619845c 100644 --- a/upstream/vendor/golang.org/x/crypto/ssh/transport.go +++ b/upstream/vendor/golang.org/x/crypto/ssh/transport.go @@ -16,13 +16,6 @@ import ( // wire. No message decoding is done, to minimize the impact on timing. const debugTransport = false -const ( - gcm128CipherID = "aes128-gcm@openssh.com" - gcm256CipherID = "aes256-gcm@openssh.com" - aes128cbcID = "aes128-cbc" - tripledescbcID = "3des-cbc" -) - // packetConn represents a transport that implements packet based // operations. type packetConn interface { @@ -92,14 +85,14 @@ func (t *transport) setInitialKEXDone() { // prepareKeyChange sets up key material for a keychange. The key changes in // both directions are triggered by reading and writing a msgNewKey packet // respectively. -func (t *transport) prepareKeyChange(algs *algorithms, kexResult *kexResult) error { - ciph, err := newPacketCipher(t.reader.dir, algs.r, kexResult) +func (t *transport) prepareKeyChange(algs *NegotiatedAlgorithms, kexResult *kexResult) error { + ciph, err := newPacketCipher(t.reader.dir, algs.Read, kexResult) if err != nil { return err } t.reader.pendingKeyChange <- ciph - ciph, err = newPacketCipher(t.writer.dir, algs.w, kexResult) + ciph, err = newPacketCipher(t.writer.dir, algs.Write, kexResult) if err != nil { return err } @@ -259,7 +252,7 @@ var ( // setupKeys sets the cipher and MAC keys from kex.K, kex.H and sessionId, as // described in RFC 4253, section 6.4. direction should either be serverKeys // (to setup server->client keys) or clientKeys (for client->server keys). -func newPacketCipher(d direction, algs directionAlgorithms, kex *kexResult) (packetCipher, error) { +func newPacketCipher(d direction, algs DirectionAlgorithms, kex *kexResult) (packetCipher, error) { cipherMode := cipherModes[algs.Cipher] iv := make([]byte, cipherMode.ivSize) diff --git a/upstream/vendor/golang.org/x/mod/modfile/rule.go b/upstream/vendor/golang.org/x/mod/modfile/rule.go index 3e4a1d0ab4..a86ee4fd82 100644 --- a/upstream/vendor/golang.org/x/mod/modfile/rule.go +++ b/upstream/vendor/golang.org/x/mod/modfile/rule.go @@ -20,10 +20,11 @@ package modfile import ( + "cmp" "errors" "fmt" "path/filepath" - "sort" + "slices" "strconv" "strings" "unicode" @@ -44,6 +45,7 @@ type File struct { Replace []*Replace Retract []*Retract Tool []*Tool + Ignore []*Ignore Syntax *FileSyntax } @@ -100,6 +102,12 @@ type Tool struct { Syntax *Line } +// An Ignore is a single ignore statement. +type Ignore struct { + Path string + Syntax *Line +} + // A VersionInterval represents a range of versions with upper and lower bounds. // Intervals are closed: both bounds are included. When Low is equal to High, // the interval may refer to a single version ('v1.2.3') or an interval @@ -304,7 +312,7 @@ func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (parse }) } continue - case "module", "godebug", "require", "exclude", "replace", "retract", "tool": + case "module", "godebug", "require", "exclude", "replace", "retract", "tool", "ignore": for _, l := range x.Line { f.add(&errs, x, l, x.Token[0], l.Token, fix, strict) } @@ -337,7 +345,7 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a // and simply ignore those statements. if !strict { switch verb { - case "go", "module", "retract", "require": + case "go", "module", "retract", "require", "ignore": // want these even for dependency go.mods default: return @@ -531,6 +539,21 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a Path: s, Syntax: line, }) + + case "ignore": + if len(args) != 1 { + errorf("ignore directive expects exactly one argument") + return + } + s, err := parseString(&args[0]) + if err != nil { + errorf("invalid quoted string: %v", err) + return + } + f.Ignore = append(f.Ignore, &Ignore{ + Path: s, + Syntax: line, + }) } } @@ -1619,6 +1642,36 @@ func (f *File) DropTool(path string) error { return nil } +// AddIgnore adds a new ignore directive with the given path. +// It does nothing if the ignore line already exists. +func (f *File) AddIgnore(path string) error { + for _, t := range f.Ignore { + if t.Path == path { + return nil + } + } + + f.Ignore = append(f.Ignore, &Ignore{ + Path: path, + Syntax: f.Syntax.addLine(nil, "ignore", path), + }) + + f.SortBlocks() + return nil +} + +// DropIgnore removes a ignore directive with the given path. +// It does nothing if no such ignore directive exists. +func (f *File) DropIgnore(path string) error { + for _, t := range f.Ignore { + if t.Path == path { + t.Syntax.markRemoved() + *t = Ignore{} + } + } + return nil +} + func (f *File) SortBlocks() { f.removeDups() // otherwise sorting is unsafe @@ -1633,15 +1686,13 @@ func (f *File) SortBlocks() { if !ok { continue } - less := lineLess + less := compareLine if block.Token[0] == "exclude" && useSemanticSortForExclude { - less = lineExcludeLess + less = compareLineExclude } else if block.Token[0] == "retract" { - less = lineRetractLess + less = compareLineRetract } - sort.SliceStable(block.Line, func(i, j int) bool { - return less(block.Line[i], block.Line[j]) - }) + slices.SortStableFunc(block.Line, less) } } @@ -1657,10 +1708,10 @@ func (f *File) SortBlocks() { // retract directives are not de-duplicated since comments are // meaningful, and versions may be retracted multiple times. func (f *File) removeDups() { - removeDups(f.Syntax, &f.Exclude, &f.Replace, &f.Tool) + removeDups(f.Syntax, &f.Exclude, &f.Replace, &f.Tool, &f.Ignore) } -func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, tool *[]*Tool) { +func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, tool *[]*Tool, ignore *[]*Ignore) { kill := make(map[*Line]bool) // Remove duplicate excludes. @@ -1719,6 +1770,24 @@ func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, to *tool = newTool } + if ignore != nil { + haveIgnore := make(map[string]bool) + for _, i := range *ignore { + if haveIgnore[i.Path] { + kill[i.Syntax] = true + continue + } + haveIgnore[i.Path] = true + } + var newIgnore []*Ignore + for _, i := range *ignore { + if !kill[i.Syntax] { + newIgnore = append(newIgnore, i) + } + } + *ignore = newIgnore + } + // Duplicate require and retract directives are not removed. // Drop killed statements from the syntax tree. @@ -1746,39 +1815,38 @@ func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, to syntax.Stmt = stmts } -// lineLess returns whether li should be sorted before lj. It sorts -// lexicographically without assigning any special meaning to tokens. -func lineLess(li, lj *Line) bool { +// compareLine compares li and lj. It sorts lexicographically without assigning +// any special meaning to tokens. +func compareLine(li, lj *Line) int { for k := 0; k < len(li.Token) && k < len(lj.Token); k++ { if li.Token[k] != lj.Token[k] { - return li.Token[k] < lj.Token[k] + return cmp.Compare(li.Token[k], lj.Token[k]) } } - return len(li.Token) < len(lj.Token) + return cmp.Compare(len(li.Token), len(lj.Token)) } -// lineExcludeLess reports whether li should be sorted before lj for lines in -// an "exclude" block. -func lineExcludeLess(li, lj *Line) bool { +// compareLineExclude compares li and lj for lines in an "exclude" block. +func compareLineExclude(li, lj *Line) int { if len(li.Token) != 2 || len(lj.Token) != 2 { // Not a known exclude specification. // Fall back to sorting lexicographically. - return lineLess(li, lj) + return compareLine(li, lj) } // An exclude specification has two tokens: ModulePath and Version. // Compare module path by string order and version by semver rules. if pi, pj := li.Token[0], lj.Token[0]; pi != pj { - return pi < pj + return cmp.Compare(pi, pj) } - return semver.Compare(li.Token[1], lj.Token[1]) < 0 + return semver.Compare(li.Token[1], lj.Token[1]) } -// lineRetractLess returns whether li should be sorted before lj for lines in -// a "retract" block. It treats each line as a version interval. Single versions -// are compared as if they were intervals with the same low and high version. +// compareLineRetract compares li and lj for lines in a "retract" block. +// It treats each line as a version interval. Single versions are compared as +// if they were intervals with the same low and high version. // Intervals are sorted in descending order, first by low version, then by -// high version, using semver.Compare. -func lineRetractLess(li, lj *Line) bool { +// high version, using [semver.Compare]. +func compareLineRetract(li, lj *Line) int { interval := func(l *Line) VersionInterval { if len(l.Token) == 1 { return VersionInterval{Low: l.Token[0], High: l.Token[0]} @@ -1792,9 +1860,9 @@ func lineRetractLess(li, lj *Line) bool { vii := interval(li) vij := interval(lj) if cmp := semver.Compare(vii.Low, vij.Low); cmp != 0 { - return cmp > 0 + return -cmp } - return semver.Compare(vii.High, vij.High) > 0 + return -semver.Compare(vii.High, vij.High) } // checkCanonicalVersion returns a non-nil error if vers is not a canonical diff --git a/upstream/vendor/golang.org/x/mod/modfile/work.go b/upstream/vendor/golang.org/x/mod/modfile/work.go index 5387d0c265..09df5ea3c7 100644 --- a/upstream/vendor/golang.org/x/mod/modfile/work.go +++ b/upstream/vendor/golang.org/x/mod/modfile/work.go @@ -6,7 +6,7 @@ package modfile import ( "fmt" - "sort" + "slices" "strings" ) @@ -315,9 +315,7 @@ func (f *WorkFile) SortBlocks() { if !ok { continue } - sort.SliceStable(block.Line, func(i, j int) bool { - return lineLess(block.Line[i], block.Line[j]) - }) + slices.SortStableFunc(block.Line, compareLine) } } @@ -331,5 +329,5 @@ func (f *WorkFile) SortBlocks() { // retract directives are not de-duplicated since comments are // meaningful, and versions may be retracted multiple times. func (f *WorkFile) removeDups() { - removeDups(f.Syntax, nil, &f.Replace, nil) + removeDups(f.Syntax, nil, &f.Replace, nil, nil) } diff --git a/upstream/vendor/golang.org/x/mod/module/module.go b/upstream/vendor/golang.org/x/mod/module/module.go index 2a364b229b..16e1aa7ab4 100644 --- a/upstream/vendor/golang.org/x/mod/module/module.go +++ b/upstream/vendor/golang.org/x/mod/module/module.go @@ -96,10 +96,11 @@ package module // Changes to the semantics in this file require approval from rsc. import ( + "cmp" "errors" "fmt" "path" - "sort" + "slices" "strings" "unicode" "unicode/utf8" @@ -657,17 +658,15 @@ func CanonicalVersion(v string) string { // optionally followed by a tie-breaking suffix introduced by a slash character, // like in "v0.0.1/go.mod". func Sort(list []Version) { - sort.Slice(list, func(i, j int) bool { - mi := list[i] - mj := list[j] - if mi.Path != mj.Path { - return mi.Path < mj.Path + slices.SortFunc(list, func(i, j Version) int { + if i.Path != j.Path { + return strings.Compare(i.Path, j.Path) } // To help go.sum formatting, allow version/file. // Compare semver prefix by semver rules, // file by string order. - vi := mi.Version - vj := mj.Version + vi := i.Version + vj := j.Version var fi, fj string if k := strings.Index(vi, "/"); k >= 0 { vi, fi = vi[:k], vi[k:] @@ -676,9 +675,9 @@ func Sort(list []Version) { vj, fj = vj[:k], vj[k:] } if vi != vj { - return semver.Compare(vi, vj) < 0 + return semver.Compare(vi, vj) } - return fi < fj + return cmp.Compare(fi, fj) }) } diff --git a/upstream/vendor/golang.org/x/mod/semver/semver.go b/upstream/vendor/golang.org/x/mod/semver/semver.go index 9a2dfd33a7..628f8fd687 100644 --- a/upstream/vendor/golang.org/x/mod/semver/semver.go +++ b/upstream/vendor/golang.org/x/mod/semver/semver.go @@ -22,7 +22,10 @@ // as shorthands for vMAJOR.0.0 and vMAJOR.MINOR.0. package semver -import "sort" +import ( + "slices" + "strings" +) // parsed returns the parsed form of a semantic version string. type parsed struct { @@ -154,19 +157,22 @@ func Max(v, w string) string { // ByVersion implements [sort.Interface] for sorting semantic version strings. type ByVersion []string -func (vs ByVersion) Len() int { return len(vs) } -func (vs ByVersion) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] } -func (vs ByVersion) Less(i, j int) bool { - cmp := Compare(vs[i], vs[j]) - if cmp != 0 { - return cmp < 0 - } - return vs[i] < vs[j] -} +func (vs ByVersion) Len() int { return len(vs) } +func (vs ByVersion) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] } +func (vs ByVersion) Less(i, j int) bool { return compareVersion(vs[i], vs[j]) < 0 } -// Sort sorts a list of semantic version strings using [ByVersion]. +// Sort sorts a list of semantic version strings using [Compare] and falls back +// to use [strings.Compare] if both versions are considered equal. func Sort(list []string) { - sort.Sort(ByVersion(list)) + slices.SortFunc(list, compareVersion) +} + +func compareVersion(a, b string) int { + cmp := Compare(a, b) + if cmp != 0 { + return cmp + } + return strings.Compare(a, b) } func parse(v string) (p parsed, ok bool) { diff --git a/upstream/vendor/golang.org/x/mod/sumdb/dirhash/hash.go b/upstream/vendor/golang.org/x/mod/sumdb/dirhash/hash.go index 51ec4db873..117985ac30 100644 --- a/upstream/vendor/golang.org/x/mod/sumdb/dirhash/hash.go +++ b/upstream/vendor/golang.org/x/mod/sumdb/dirhash/hash.go @@ -16,7 +16,7 @@ import ( "io" "os" "path/filepath" - "sort" + "slices" "strings" ) @@ -36,7 +36,7 @@ type Hash func(files []string, open func(string) (io.ReadCloser, error)) (string // sha256sum $(find . -type f | sort) | sha256sum // // More precisely, the hashed summary contains a single line for each file in the list, -// ordered by sort.Strings applied to the file names, where each line consists of +// ordered by [slices.Sort] applied to the file names, where each line consists of // the hexadecimal SHA-256 hash of the file content, // two spaces (U+0020), the file name, and a newline (U+000A). // @@ -44,7 +44,7 @@ type Hash func(files []string, open func(string) (io.ReadCloser, error)) (string func Hash1(files []string, open func(string) (io.ReadCloser, error)) (string, error) { h := sha256.New() files = append([]string(nil), files...) - sort.Strings(files) + slices.Sort(files) for _, file := range files { if strings.Contains(file, "\n") { return "", errors.New("dirhash: filenames with newlines are not supported") diff --git a/upstream/vendor/golang.org/x/net/http2/frame.go b/upstream/vendor/golang.org/x/net/http2/frame.go index 97bd8b06f7..db3264da8c 100644 --- a/upstream/vendor/golang.org/x/net/http2/frame.go +++ b/upstream/vendor/golang.org/x/net/http2/frame.go @@ -39,7 +39,7 @@ const ( FrameContinuation FrameType = 0x9 ) -var frameName = map[FrameType]string{ +var frameNames = [...]string{ FrameData: "DATA", FrameHeaders: "HEADERS", FramePriority: "PRIORITY", @@ -53,10 +53,10 @@ var frameName = map[FrameType]string{ } func (t FrameType) String() string { - if s, ok := frameName[t]; ok { - return s + if int(t) < len(frameNames) { + return frameNames[t] } - return fmt.Sprintf("UNKNOWN_FRAME_TYPE_%d", uint8(t)) + return fmt.Sprintf("UNKNOWN_FRAME_TYPE_%d", t) } // Flags is a bitmask of HTTP/2 flags. @@ -124,7 +124,7 @@ var flagName = map[FrameType]map[Flags]string{ // might be 0). type frameParser func(fc *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) -var frameParsers = map[FrameType]frameParser{ +var frameParsers = [...]frameParser{ FrameData: parseDataFrame, FrameHeaders: parseHeadersFrame, FramePriority: parsePriorityFrame, @@ -138,8 +138,8 @@ var frameParsers = map[FrameType]frameParser{ } func typeFrameParser(t FrameType) frameParser { - if f := frameParsers[t]; f != nil { - return f + if int(t) < len(frameParsers) { + return frameParsers[t] } return parseUnknownFrame } @@ -509,7 +509,7 @@ func (fr *Framer) ReadFrame() (Frame, error) { } if fh.Length > fr.maxReadSize { if fh == invalidHTTP1LookingFrameHeader() { - return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", err) + return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", ErrFrameTooLarge) } return nil, ErrFrameTooLarge } diff --git a/upstream/vendor/golang.org/x/net/http2/http2.go b/upstream/vendor/golang.org/x/net/http2/http2.go index 6c18ea230b..ea5ae629fd 100644 --- a/upstream/vendor/golang.org/x/net/http2/http2.go +++ b/upstream/vendor/golang.org/x/net/http2/http2.go @@ -11,8 +11,6 @@ // requires Go 1.6 or later) // // See https://http2.github.io/ for more information on HTTP/2. -// -// See https://http2.golang.org/ for a test server running this code. package http2 // import "golang.org/x/net/http2" import ( diff --git a/upstream/vendor/golang.org/x/net/trace/events.go b/upstream/vendor/golang.org/x/net/trace/events.go index c646a6952e..3aaffdd1f7 100644 --- a/upstream/vendor/golang.org/x/net/trace/events.go +++ b/upstream/vendor/golang.org/x/net/trace/events.go @@ -508,7 +508,7 @@ const eventsHTML = ` {{$el.When}} {{$el.ElapsedTime}} - {{$el.Title}} + {{$el.Title}} {{if $.Expanded}} diff --git a/upstream/vendor/golang.org/x/sync/errgroup/errgroup.go b/upstream/vendor/golang.org/x/sync/errgroup/errgroup.go index f8c3c09265..1d8cffae8c 100644 --- a/upstream/vendor/golang.org/x/sync/errgroup/errgroup.go +++ b/upstream/vendor/golang.org/x/sync/errgroup/errgroup.go @@ -61,12 +61,14 @@ func (g *Group) Wait() error { } // Go calls the given function in a new goroutine. +// // The first call to Go must happen before a Wait. // It blocks until the new goroutine can be added without the number of -// active goroutines in the group exceeding the configured limit. +// goroutines in the group exceeding the configured limit. // -// The first call to return a non-nil error cancels the group's context, if the -// group was created by calling WithContext. The error will be returned by Wait. +// The first goroutine in the group that returns a non-nil error will +// cancel the associated Context, if any. The error will be returned +// by Wait. func (g *Group) Go(f func() error) { if g.sem != nil { g.sem <- token{} @@ -76,6 +78,18 @@ func (g *Group) Go(f func() error) { go func() { defer g.done() + // It is tempting to propagate panics from f() + // up to the goroutine that calls Wait, but + // it creates more problems than it solves: + // - it delays panics arbitrarily, + // making bugs harder to detect; + // - it turns f's panic stack into a mere value, + // hiding it from crash-monitoring tools; + // - it risks deadlocks that hide the panic entirely, + // if f's panic leaves the program in a state + // that prevents the Wait call from being reached. + // See #53757, #74275, #74304, #74306. + if err := f(); err != nil { g.errOnce.Do(func() { g.err = err diff --git a/upstream/vendor/golang.org/x/sys/cpu/cpu.go b/upstream/vendor/golang.org/x/sys/cpu/cpu.go index 2e73ee1975..63541994ef 100644 --- a/upstream/vendor/golang.org/x/sys/cpu/cpu.go +++ b/upstream/vendor/golang.org/x/sys/cpu/cpu.go @@ -232,6 +232,17 @@ var RISCV64 struct { HasZba bool // Address generation instructions extension HasZbb bool // Basic bit-manipulation extension HasZbs bool // Single-bit instructions extension + HasZvbb bool // Vector Basic Bit-manipulation + HasZvbc bool // Vector Carryless Multiplication + HasZvkb bool // Vector Cryptography Bit-manipulation + HasZvkt bool // Vector Data-Independent Execution Latency + HasZvkg bool // Vector GCM/GMAC + HasZvkn bool // NIST Algorithm Suite (AES/SHA256/SHA512) + HasZvknc bool // NIST Algorithm Suite with carryless multiply + HasZvkng bool // NIST Algorithm Suite with GCM + HasZvks bool // ShangMi Algorithm Suite + HasZvksc bool // ShangMi Algorithm Suite with carryless multiplication + HasZvksg bool // ShangMi Algorithm Suite with GCM _ CacheLinePad } diff --git a/upstream/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go b/upstream/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go index cb4a0c5728..ad741536f3 100644 --- a/upstream/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go +++ b/upstream/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go @@ -58,6 +58,15 @@ const ( riscv_HWPROBE_EXT_ZBA = 0x8 riscv_HWPROBE_EXT_ZBB = 0x10 riscv_HWPROBE_EXT_ZBS = 0x20 + riscv_HWPROBE_EXT_ZVBB = 0x20000 + riscv_HWPROBE_EXT_ZVBC = 0x40000 + riscv_HWPROBE_EXT_ZVKB = 0x80000 + riscv_HWPROBE_EXT_ZVKG = 0x100000 + riscv_HWPROBE_EXT_ZVKNED = 0x200000 + riscv_HWPROBE_EXT_ZVKNHB = 0x800000 + riscv_HWPROBE_EXT_ZVKSED = 0x1000000 + riscv_HWPROBE_EXT_ZVKSH = 0x2000000 + riscv_HWPROBE_EXT_ZVKT = 0x4000000 riscv_HWPROBE_KEY_CPUPERF_0 = 0x5 riscv_HWPROBE_MISALIGNED_FAST = 0x3 riscv_HWPROBE_MISALIGNED_MASK = 0x7 @@ -99,6 +108,20 @@ func doinit() { RISCV64.HasZba = isSet(v, riscv_HWPROBE_EXT_ZBA) RISCV64.HasZbb = isSet(v, riscv_HWPROBE_EXT_ZBB) RISCV64.HasZbs = isSet(v, riscv_HWPROBE_EXT_ZBS) + RISCV64.HasZvbb = isSet(v, riscv_HWPROBE_EXT_ZVBB) + RISCV64.HasZvbc = isSet(v, riscv_HWPROBE_EXT_ZVBC) + RISCV64.HasZvkb = isSet(v, riscv_HWPROBE_EXT_ZVKB) + RISCV64.HasZvkg = isSet(v, riscv_HWPROBE_EXT_ZVKG) + RISCV64.HasZvkt = isSet(v, riscv_HWPROBE_EXT_ZVKT) + // Cryptography shorthand extensions + RISCV64.HasZvkn = isSet(v, riscv_HWPROBE_EXT_ZVKNED) && + isSet(v, riscv_HWPROBE_EXT_ZVKNHB) && RISCV64.HasZvkb && RISCV64.HasZvkt + RISCV64.HasZvknc = RISCV64.HasZvkn && RISCV64.HasZvbc + RISCV64.HasZvkng = RISCV64.HasZvkn && RISCV64.HasZvkg + RISCV64.HasZvks = isSet(v, riscv_HWPROBE_EXT_ZVKSED) && + isSet(v, riscv_HWPROBE_EXT_ZVKSH) && RISCV64.HasZvkb && RISCV64.HasZvkt + RISCV64.HasZvksc = RISCV64.HasZvks && RISCV64.HasZvbc + RISCV64.HasZvksg = RISCV64.HasZvks && RISCV64.HasZvkg } if pairs[1].key != -1 { v := pairs[1].value & riscv_HWPROBE_MISALIGNED_MASK diff --git a/upstream/vendor/golang.org/x/sys/cpu/cpu_riscv64.go b/upstream/vendor/golang.org/x/sys/cpu/cpu_riscv64.go index aca3199c91..0f617aef54 100644 --- a/upstream/vendor/golang.org/x/sys/cpu/cpu_riscv64.go +++ b/upstream/vendor/golang.org/x/sys/cpu/cpu_riscv64.go @@ -16,5 +16,17 @@ func initOptions() { {Name: "zba", Feature: &RISCV64.HasZba}, {Name: "zbb", Feature: &RISCV64.HasZbb}, {Name: "zbs", Feature: &RISCV64.HasZbs}, + // RISC-V Cryptography Extensions + {Name: "zvbb", Feature: &RISCV64.HasZvbb}, + {Name: "zvbc", Feature: &RISCV64.HasZvbc}, + {Name: "zvkb", Feature: &RISCV64.HasZvkb}, + {Name: "zvkg", Feature: &RISCV64.HasZvkg}, + {Name: "zvkt", Feature: &RISCV64.HasZvkt}, + {Name: "zvkn", Feature: &RISCV64.HasZvkn}, + {Name: "zvknc", Feature: &RISCV64.HasZvknc}, + {Name: "zvkng", Feature: &RISCV64.HasZvkng}, + {Name: "zvks", Feature: &RISCV64.HasZvks}, + {Name: "zvksc", Feature: &RISCV64.HasZvksc}, + {Name: "zvksg", Feature: &RISCV64.HasZvksg}, } } diff --git a/upstream/vendor/golang.org/x/sys/unix/mkerrors.sh b/upstream/vendor/golang.org/x/sys/unix/mkerrors.sh index 6ab02b6c31..d1c8b2640e 100644 --- a/upstream/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/upstream/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -349,6 +349,9 @@ struct ltchars { #define _HIDIOCGRAWPHYS HIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN) #define _HIDIOCGRAWUNIQ HIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN) +// Renamed in v6.16, commit c6d732c38f93 ("net: ethtool: remove duplicate defines for family info") +#define ETHTOOL_FAMILY_NAME ETHTOOL_GENL_NAME +#define ETHTOOL_FAMILY_VERSION ETHTOOL_GENL_VERSION ' includes_NetBSD=' diff --git a/upstream/vendor/golang.org/x/sys/unix/syscall_darwin.go b/upstream/vendor/golang.org/x/sys/unix/syscall_darwin.go index 798f61ad3b..7838ca5db2 100644 --- a/upstream/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/upstream/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -602,14 +602,9 @@ func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocI return } -// sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) const minIovec = 8 func Readv(fd int, iovs [][]byte) (n int, err error) { - if !darwinKernelVersionMin(11, 0, 0) { - return 0, ENOSYS - } - iovecs := make([]Iovec, 0, minIovec) iovecs = appendBytes(iovecs, iovs) n, err = readv(fd, iovecs) @@ -618,9 +613,6 @@ func Readv(fd int, iovs [][]byte) (n int, err error) { } func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { - if !darwinKernelVersionMin(11, 0, 0) { - return 0, ENOSYS - } iovecs := make([]Iovec, 0, minIovec) iovecs = appendBytes(iovecs, iovs) n, err = preadv(fd, iovecs, offset) @@ -629,10 +621,6 @@ func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { } func Writev(fd int, iovs [][]byte) (n int, err error) { - if !darwinKernelVersionMin(11, 0, 0) { - return 0, ENOSYS - } - iovecs := make([]Iovec, 0, minIovec) iovecs = appendBytes(iovecs, iovs) if raceenabled { @@ -644,10 +632,6 @@ func Writev(fd int, iovs [][]byte) (n int, err error) { } func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { - if !darwinKernelVersionMin(11, 0, 0) { - return 0, ENOSYS - } - iovecs := make([]Iovec, 0, minIovec) iovecs = appendBytes(iovecs, iovs) if raceenabled { @@ -707,45 +691,7 @@ func readvRacedetect(iovecs []Iovec, n int, err error) { } } -func darwinMajorMinPatch() (maj, min, patch int, err error) { - var un Utsname - err = Uname(&un) - if err != nil { - return - } - - var mmp [3]int - c := 0 -Loop: - for _, b := range un.Release[:] { - switch { - case b >= '0' && b <= '9': - mmp[c] = 10*mmp[c] + int(b-'0') - case b == '.': - c++ - if c > 2 { - return 0, 0, 0, ENOTSUP - } - case b == 0: - break Loop - default: - return 0, 0, 0, ENOTSUP - } - } - if c != 2 { - return 0, 0, 0, ENOTSUP - } - return mmp[0], mmp[1], mmp[2], nil -} - -func darwinKernelVersionMin(maj, min, patch int) bool { - actualMaj, actualMin, actualPatch, err := darwinMajorMinPatch() - if err != nil { - return false - } - return actualMaj > maj || actualMaj == maj && (actualMin > min || actualMin == min && actualPatch >= patch) -} - +//sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) //sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux.go index 4f432bfe8f..b6db27d937 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -319,6 +319,7 @@ const ( AUDIT_INTEGRITY_POLICY_RULE = 0x70f AUDIT_INTEGRITY_RULE = 0x70d AUDIT_INTEGRITY_STATUS = 0x70a + AUDIT_INTEGRITY_USERSPACE = 0x710 AUDIT_IPC = 0x517 AUDIT_IPC_SET_PERM = 0x51f AUDIT_IPE_ACCESS = 0x58c @@ -327,6 +328,8 @@ const ( AUDIT_KERNEL = 0x7d0 AUDIT_KERNEL_OTHER = 0x524 AUDIT_KERN_MODULE = 0x532 + AUDIT_LANDLOCK_ACCESS = 0x58f + AUDIT_LANDLOCK_DOMAIN = 0x590 AUDIT_LAST_FEATURE = 0x1 AUDIT_LAST_KERN_ANOM_MSG = 0x707 AUDIT_LAST_USER_MSG = 0x4af @@ -491,6 +494,7 @@ const ( BPF_F_BEFORE = 0x8 BPF_F_ID = 0x20 BPF_F_NETFILTER_IP_DEFRAG = 0x1 + BPF_F_PREORDER = 0x40 BPF_F_QUERY_EFFECTIVE = 0x1 BPF_F_REDIRECT_FLAGS = 0x19 BPF_F_REPLACE = 0x4 @@ -527,6 +531,7 @@ const ( BPF_LDX = 0x1 BPF_LEN = 0x80 BPF_LL_OFF = -0x200000 + BPF_LOAD_ACQ = 0x100 BPF_LSH = 0x60 BPF_MAJOR_VERSION = 0x1 BPF_MAXINSNS = 0x1000 @@ -554,6 +559,7 @@ const ( BPF_RET = 0x6 BPF_RSH = 0x70 BPF_ST = 0x2 + BPF_STORE_REL = 0x110 BPF_STX = 0x3 BPF_SUB = 0x10 BPF_TAG_SIZE = 0x8 @@ -843,9 +849,9 @@ const ( DM_UUID_FLAG = 0x4000 DM_UUID_LEN = 0x81 DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2023-03-01)" + DM_VERSION_EXTRA = "-ioctl (2025-04-28)" DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x30 + DM_VERSION_MINOR = 0x32 DM_VERSION_PATCHLEVEL = 0x0 DT_BLK = 0x6 DT_CHR = 0x2 @@ -936,11 +942,10 @@ const ( EPOLL_CTL_MOD = 0x3 EPOLL_IOC_TYPE = 0x8a EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2 - ESP_V4_FLOW = 0xa - ESP_V6_FLOW = 0xc - ETHER_FLOW = 0x12 ETHTOOL_BUSINFO_LEN = 0x20 ETHTOOL_EROMVERS_LEN = 0x20 + ETHTOOL_FAMILY_NAME = "ethtool" + ETHTOOL_FAMILY_VERSION = 0x1 ETHTOOL_FEC_AUTO = 0x2 ETHTOOL_FEC_BASER = 0x10 ETHTOOL_FEC_LLRS = 0x20 @@ -1203,13 +1208,18 @@ const ( FAN_DENY = 0x2 FAN_ENABLE_AUDIT = 0x40 FAN_EPIDFD = -0x2 + FAN_ERRNO_BITS = 0x8 + FAN_ERRNO_MASK = 0xff + FAN_ERRNO_SHIFT = 0x18 FAN_EVENT_INFO_TYPE_DFID = 0x3 FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2 FAN_EVENT_INFO_TYPE_ERROR = 0x5 FAN_EVENT_INFO_TYPE_FID = 0x1 + FAN_EVENT_INFO_TYPE_MNT = 0x7 FAN_EVENT_INFO_TYPE_NEW_DFID_NAME = 0xc FAN_EVENT_INFO_TYPE_OLD_DFID_NAME = 0xa FAN_EVENT_INFO_TYPE_PIDFD = 0x4 + FAN_EVENT_INFO_TYPE_RANGE = 0x6 FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 FAN_FS_ERROR = 0x8000 @@ -1224,9 +1234,12 @@ const ( FAN_MARK_IGNORED_SURV_MODIFY = 0x40 FAN_MARK_IGNORE_SURV = 0x440 FAN_MARK_INODE = 0x0 + FAN_MARK_MNTNS = 0x110 FAN_MARK_MOUNT = 0x10 FAN_MARK_ONLYDIR = 0x8 FAN_MARK_REMOVE = 0x2 + FAN_MNT_ATTACH = 0x1000000 + FAN_MNT_DETACH = 0x2000000 FAN_MODIFY = 0x2 FAN_MOVE = 0xc0 FAN_MOVED_FROM = 0x40 @@ -1240,6 +1253,7 @@ const ( FAN_OPEN_EXEC = 0x1000 FAN_OPEN_EXEC_PERM = 0x40000 FAN_OPEN_PERM = 0x10000 + FAN_PRE_ACCESS = 0x100000 FAN_Q_OVERFLOW = 0x4000 FAN_RENAME = 0x10000000 FAN_REPORT_DFID_NAME = 0xc00 @@ -1247,6 +1261,7 @@ const ( FAN_REPORT_DIR_FID = 0x400 FAN_REPORT_FD_ERROR = 0x2000 FAN_REPORT_FID = 0x200 + FAN_REPORT_MNT = 0x4000 FAN_REPORT_NAME = 0x800 FAN_REPORT_PIDFD = 0x80 FAN_REPORT_TARGET_FID = 0x1000 @@ -1266,6 +1281,7 @@ const ( FIB_RULE_PERMANENT = 0x1 FIB_RULE_UNRESOLVED = 0x4 FIDEDUPERANGE = 0xc0189436 + FSCRYPT_ADD_KEY_FLAG_HW_WRAPPED = 0x1 FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8 FSCRYPT_KEY_DESC_PREFIX = "fscrypt:" FSCRYPT_KEY_DESC_PREFIX_SIZE = 0x8 @@ -1574,7 +1590,6 @@ const ( IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 IPV6_DSTOPTS = 0x3b - IPV6_FLOW = 0x11 IPV6_FREEBIND = 0x4e IPV6_HDRINCL = 0x24 IPV6_HOPLIMIT = 0x34 @@ -1625,7 +1640,6 @@ const ( IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 IPV6_UNICAST_IF = 0x4c - IPV6_USER_FLOW = 0xe IPV6_V6ONLY = 0x1a IPV6_VERSION = 0x60 IPV6_VERSION_MASK = 0xf0 @@ -1687,7 +1701,6 @@ const ( IP_TTL = 0x2 IP_UNBLOCK_SOURCE = 0x25 IP_UNICAST_IF = 0x32 - IP_USER_FLOW = 0xd IP_XFRM_POLICY = 0x11 ISOFS_SUPER_MAGIC = 0x9660 ISTRIP = 0x20 @@ -1809,7 +1822,11 @@ const ( LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 LANDLOCK_ACCESS_NET_BIND_TCP = 0x1 LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2 + LANDLOCK_CREATE_RULESET_ERRATA = 0x2 LANDLOCK_CREATE_RULESET_VERSION = 0x1 + LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON = 0x2 + LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF = 0x1 + LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF = 0x4 LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET = 0x1 LANDLOCK_SCOPE_SIGNAL = 0x2 LINUX_REBOOT_CMD_CAD_OFF = 0x0 @@ -2485,6 +2502,10 @@ const ( PR_FP_EXC_UND = 0x40000 PR_FP_MODE_FR = 0x1 PR_FP_MODE_FRE = 0x2 + PR_FUTEX_HASH = 0x4e + PR_FUTEX_HASH_GET_IMMUTABLE = 0x3 + PR_FUTEX_HASH_GET_SLOTS = 0x2 + PR_FUTEX_HASH_SET_SLOTS = 0x1 PR_GET_AUXV = 0x41555856 PR_GET_CHILD_SUBREAPER = 0x25 PR_GET_DUMPABLE = 0x3 @@ -2644,6 +2665,10 @@ const ( PR_TAGGED_ADDR_ENABLE = 0x1 PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMER_CREATE_RESTORE_IDS = 0x4d + PR_TIMER_CREATE_RESTORE_IDS_GET = 0x2 + PR_TIMER_CREATE_RESTORE_IDS_OFF = 0x0 + PR_TIMER_CREATE_RESTORE_IDS_ON = 0x1 PR_TIMING_STATISTICAL = 0x0 PR_TIMING_TIMESTAMP = 0x1 PR_TSC_ENABLE = 0x1 @@ -2724,6 +2749,7 @@ const ( PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_SYSCALL_INFO = 0x4212 PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG = 0x4210 PTRACE_SINGLESTEP = 0x9 PTRACE_SYSCALL = 0x18 @@ -2787,7 +2813,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x1e + RTA_MAX = 0x1f RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -2864,10 +2890,12 @@ const ( RTM_DELACTION = 0x31 RTM_DELADDR = 0x15 RTM_DELADDRLABEL = 0x49 + RTM_DELANYCAST = 0x3d RTM_DELCHAIN = 0x65 RTM_DELLINK = 0x11 RTM_DELLINKPROP = 0x6d RTM_DELMDB = 0x55 + RTM_DELMULTICAST = 0x39 RTM_DELNEIGH = 0x1d RTM_DELNETCONF = 0x51 RTM_DELNEXTHOP = 0x69 @@ -2917,11 +2945,13 @@ const ( RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWANYCAST = 0x3c RTM_NEWCACHEREPORT = 0x60 RTM_NEWCHAIN = 0x64 RTM_NEWLINK = 0x10 RTM_NEWLINKPROP = 0x6c RTM_NEWMDB = 0x54 + RTM_NEWMULTICAST = 0x38 RTM_NEWNDUSEROPT = 0x44 RTM_NEWNEIGH = 0x1c RTM_NEWNEIGHTBL = 0x40 @@ -2970,6 +3000,7 @@ const ( RTPROT_NTK = 0xf RTPROT_OPENR = 0x63 RTPROT_OSPF = 0xbc + RTPROT_OVN = 0x54 RTPROT_RA = 0x9 RTPROT_REDIRECT = 0x1 RTPROT_RIP = 0xbd @@ -2987,11 +3018,12 @@ const ( RUSAGE_THREAD = 0x1 RWF_APPEND = 0x10 RWF_ATOMIC = 0x40 + RWF_DONTCACHE = 0x80 RWF_DSYNC = 0x2 RWF_HIPRI = 0x1 RWF_NOAPPEND = 0x20 RWF_NOWAIT = 0x8 - RWF_SUPPORTED = 0x7f + RWF_SUPPORTED = 0xff RWF_SYNC = 0x4 RWF_WRITE_LIFE_NOT_SET = 0x0 SCHED_BATCH = 0x3 @@ -3271,6 +3303,7 @@ const ( STATX_BTIME = 0x800 STATX_CTIME = 0x80 STATX_DIOALIGN = 0x2000 + STATX_DIO_READ_ALIGN = 0x20000 STATX_GID = 0x10 STATX_INO = 0x100 STATX_MNT_ID = 0x1000 @@ -3322,7 +3355,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xe + TASKSTATS_VERSION = 0x10 TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 @@ -3392,8 +3425,6 @@ const ( TCP_TX_DELAY = 0x25 TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 - TCP_V4_FLOW = 0x1 - TCP_V6_FLOW = 0x5 TCP_WINDOW_CLAMP = 0xa TCP_ZEROCOPY_RECEIVE = 0x23 TFD_TIMER_ABSTIME = 0x1 @@ -3503,6 +3534,7 @@ const ( TP_STATUS_WRONG_FORMAT = 0x4 TRACEFS_MAGIC = 0x74726163 TS_COMM_LEN = 0x20 + UBI_IOCECNFO = 0xc01c6f06 UDF_SUPER_MAGIC = 0x15013346 UDP_CORK = 0x1 UDP_ENCAP = 0x64 @@ -3515,8 +3547,6 @@ const ( UDP_NO_CHECK6_RX = 0x66 UDP_NO_CHECK6_TX = 0x65 UDP_SEGMENT = 0x67 - UDP_V4_FLOW = 0x2 - UDP_V6_FLOW = 0x6 UMOUNT_NOFOLLOW = 0x8 USBDEVICE_SUPER_MAGIC = 0x9fa2 UTIME_NOW = 0x3fffffff @@ -3559,7 +3589,7 @@ const ( WDIOS_TEMPPANIC = 0x4 WDIOS_UNKNOWN = -0x1 WEXITED = 0x4 - WGALLOWEDIP_A_MAX = 0x3 + WGALLOWEDIP_A_MAX = 0x4 WGDEVICE_A_MAX = 0x8 WGPEER_A_MAX = 0xa WG_CMD_MAX = 0x1 @@ -3673,6 +3703,7 @@ const ( XDP_SHARED_UMEM = 0x1 XDP_STATISTICS = 0x7 XDP_TXMD_FLAGS_CHECKSUM = 0x2 + XDP_TXMD_FLAGS_LAUNCH_TIME = 0x4 XDP_TXMD_FLAGS_TIMESTAMP = 0x1 XDP_TX_METADATA = 0x2 XDP_TX_RING = 0x3 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 75207613c7..1c37f9fbc4 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -360,6 +361,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -372,6 +374,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index c68acda535..6f54d34aef 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -361,6 +362,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -373,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index a8c607ab86..783ec5c126 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -366,6 +367,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -378,6 +380,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 18563dd8d3..ca83d3ba16 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index 22912cdaa9..607e611c0c 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -353,6 +354,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -365,6 +367,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 29344eb37a..b9cb5bd3c0 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 20d51fb96a..65b078a638 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 321b60902a..5298a3033d 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index 9bacdf1e27..7bc557c876 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index c224272615..152399bb04 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -414,6 +415,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -426,6 +428,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 6270c8ee13..1a1ce2409c 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -418,6 +419,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -430,6 +432,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 9966c1941f..4231a1fb57 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -418,6 +419,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -430,6 +432,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 848e5fcc42..21c0e95266 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -350,6 +351,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -362,6 +364,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 669b2adb80..f00d1cd7cf 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -422,6 +423,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -434,6 +436,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index 4834e57514..bc8d539e6a 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -71,6 +71,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -461,6 +462,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x2 SO_PASSPIDFD = 0x55 + SO_PASSRIGHTS = 0x5c SO_PASSSEC = 0x1f SO_PEEK_OFF = 0x26 SO_PEERCRED = 0x40 @@ -473,6 +475,7 @@ const ( SO_RCVBUFFORCE = 0x100b SO_RCVLOWAT = 0x800 SO_RCVMARK = 0x54 + SO_RCVPRIORITY = 0x5b SO_RCVTIMEO = 0x2000 SO_RCVTIMEO_NEW = 0x44 SO_RCVTIMEO_OLD = 0x2000 diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index c79aaff306..aca56ee494 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -462,4 +462,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 5eb450695e..2ea1ef58c3 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -385,4 +385,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index 05e5029744..d22c8af319 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -426,4 +426,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 38c53ec51b..5ee264ae97 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -329,4 +329,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 31d2e71a18..f9f03ebf5f 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -325,4 +325,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index f4184a336b..87c2118e84 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -446,4 +446,5 @@ const ( SYS_GETXATTRAT = 4464 SYS_LISTXATTRAT = 4465 SYS_REMOVEXATTRAT = 4466 + SYS_OPEN_TREE_ATTR = 4467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 05b9962278..391ad102fb 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -376,4 +376,5 @@ const ( SYS_GETXATTRAT = 5464 SYS_LISTXATTRAT = 5465 SYS_REMOVEXATTRAT = 5466 + SYS_OPEN_TREE_ATTR = 5467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index 43a256e9e6..5656157757 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -376,4 +376,5 @@ const ( SYS_GETXATTRAT = 5464 SYS_LISTXATTRAT = 5465 SYS_REMOVEXATTRAT = 5466 + SYS_OPEN_TREE_ATTR = 5467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index eea5ddfc22..0482b52e3c 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -446,4 +446,5 @@ const ( SYS_GETXATTRAT = 4464 SYS_LISTXATTRAT = 4465 SYS_REMOVEXATTRAT = 4466 + SYS_OPEN_TREE_ATTR = 4467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index 0d777bfbb1..71806f08f3 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -453,4 +453,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index b446365025..e35a710582 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -425,4 +425,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 0c7d21c188..2aea476705 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -425,4 +425,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 8405391698..6c9bb4e560 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -330,4 +330,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index fcf1b790d6..680bc9915a 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -391,4 +391,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 52d15b5f9d..620f271052 100644 --- a/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/upstream/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -404,4 +404,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux.go index a46abe6472..cd236443f6 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -114,8 +114,10 @@ type Statx_t struct { Atomic_write_unit_min uint32 Atomic_write_unit_max uint32 Atomic_write_segments_max uint32 + Dio_read_offset_align uint32 + Atomic_write_unit_max_opt uint32 _ [1]uint32 - _ [9]uint64 + _ [8]uint64 } type Fsid struct { @@ -199,7 +201,8 @@ type FscryptAddKeyArg struct { Key_spec FscryptKeySpecifier Raw_size uint32 Key_id uint32 - _ [8]uint32 + Flags uint32 + _ [7]uint32 } type FscryptRemoveKeyArg struct { @@ -2226,8 +2229,11 @@ const ( NFT_PAYLOAD_LL_HEADER = 0x0 NFT_PAYLOAD_NETWORK_HEADER = 0x1 NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_INNER_HEADER = 0x3 + NFT_PAYLOAD_TUN_HEADER = 0x4 NFT_PAYLOAD_CSUM_NONE = 0x0 NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_CSUM_SCTP = 0x2 NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 NFTA_PAYLOAD_UNSPEC = 0x0 NFTA_PAYLOAD_DREG = 0x1 @@ -2314,6 +2320,11 @@ const ( NFT_CT_AVGPKT = 0x10 NFT_CT_ZONE = 0x11 NFT_CT_EVENTMASK = 0x12 + NFT_CT_SRC_IP = 0x13 + NFT_CT_DST_IP = 0x14 + NFT_CT_SRC_IP6 = 0x15 + NFT_CT_DST_IP6 = 0x16 + NFT_CT_ID = 0x17 NFTA_CT_UNSPEC = 0x0 NFTA_CT_DREG = 0x1 NFTA_CT_KEY = 0x2 @@ -2594,8 +2605,8 @@ const ( SOF_TIMESTAMPING_BIND_PHC = 0x8000 SOF_TIMESTAMPING_OPT_ID_TCP = 0x10000 - SOF_TIMESTAMPING_LAST = 0x20000 - SOF_TIMESTAMPING_MASK = 0x3ffff + SOF_TIMESTAMPING_LAST = 0x40000 + SOF_TIMESTAMPING_MASK = 0x7ffff SCM_TSTAMP_SND = 0x0 SCM_TSTAMP_SCHED = 0x1 @@ -3802,7 +3813,16 @@ const ( ETHTOOL_MSG_PSE_GET = 0x24 ETHTOOL_MSG_PSE_SET = 0x25 ETHTOOL_MSG_RSS_GET = 0x26 - ETHTOOL_MSG_USER_MAX = 0x2d + ETHTOOL_MSG_PLCA_GET_CFG = 0x27 + ETHTOOL_MSG_PLCA_SET_CFG = 0x28 + ETHTOOL_MSG_PLCA_GET_STATUS = 0x29 + ETHTOOL_MSG_MM_GET = 0x2a + ETHTOOL_MSG_MM_SET = 0x2b + ETHTOOL_MSG_MODULE_FW_FLASH_ACT = 0x2c + ETHTOOL_MSG_PHY_GET = 0x2d + ETHTOOL_MSG_TSCONFIG_GET = 0x2e + ETHTOOL_MSG_TSCONFIG_SET = 0x2f + ETHTOOL_MSG_USER_MAX = 0x2f ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3842,7 +3862,17 @@ const ( ETHTOOL_MSG_MODULE_NTF = 0x24 ETHTOOL_MSG_PSE_GET_REPLY = 0x25 ETHTOOL_MSG_RSS_GET_REPLY = 0x26 - ETHTOOL_MSG_KERNEL_MAX = 0x2e + ETHTOOL_MSG_PLCA_GET_CFG_REPLY = 0x27 + ETHTOOL_MSG_PLCA_GET_STATUS_REPLY = 0x28 + ETHTOOL_MSG_PLCA_NTF = 0x29 + ETHTOOL_MSG_MM_GET_REPLY = 0x2a + ETHTOOL_MSG_MM_NTF = 0x2b + ETHTOOL_MSG_MODULE_FW_FLASH_NTF = 0x2c + ETHTOOL_MSG_PHY_GET_REPLY = 0x2d + ETHTOOL_MSG_PHY_NTF = 0x2e + ETHTOOL_MSG_TSCONFIG_GET_REPLY = 0x2f + ETHTOOL_MSG_TSCONFIG_SET_REPLY = 0x30 + ETHTOOL_MSG_KERNEL_MAX = 0x30 ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 ETHTOOL_FLAG_OMIT_REPLY = 0x2 ETHTOOL_FLAG_STATS = 0x4 @@ -3949,7 +3979,12 @@ const ( ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 0xb ETHTOOL_A_RINGS_CQE_SIZE = 0xc ETHTOOL_A_RINGS_TX_PUSH = 0xd - ETHTOOL_A_RINGS_MAX = 0x10 + ETHTOOL_A_RINGS_RX_PUSH = 0xe + ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN = 0xf + ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX = 0x10 + ETHTOOL_A_RINGS_HDS_THRESH = 0x11 + ETHTOOL_A_RINGS_HDS_THRESH_MAX = 0x12 + ETHTOOL_A_RINGS_MAX = 0x12 ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -4015,7 +4050,9 @@ const ( ETHTOOL_A_TSINFO_TX_TYPES = 0x3 ETHTOOL_A_TSINFO_RX_FILTERS = 0x4 ETHTOOL_A_TSINFO_PHC_INDEX = 0x5 - ETHTOOL_A_TSINFO_MAX = 0x6 + ETHTOOL_A_TSINFO_STATS = 0x6 + ETHTOOL_A_TSINFO_HWTSTAMP_PROVIDER = 0x7 + ETHTOOL_A_TSINFO_MAX = 0x9 ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0 ETHTOOL_A_CABLE_TEST_HEADER = 0x1 ETHTOOL_A_CABLE_TEST_MAX = 0x1 @@ -4101,6 +4138,19 @@ const ( ETHTOOL_A_TUNNEL_INFO_MAX = 0x2 ) +const ( + TCP_V4_FLOW = 0x1 + UDP_V4_FLOW = 0x2 + TCP_V6_FLOW = 0x5 + UDP_V6_FLOW = 0x6 + ESP_V4_FLOW = 0xa + ESP_V6_FLOW = 0xc + IP_USER_FLOW = 0xd + IPV6_USER_FLOW = 0xe + IPV6_FLOW = 0x11 + ETHER_FLOW = 0x12 +) + const SPEED_UNKNOWN = -0x1 type EthtoolDrvinfo struct { @@ -4613,6 +4663,7 @@ const ( NL80211_ATTR_AKM_SUITES = 0x4c NL80211_ATTR_AP_ISOLATE = 0x60 NL80211_ATTR_AP_SETTINGS_FLAGS = 0x135 + NL80211_ATTR_ASSOC_SPP_AMSDU = 0x14a NL80211_ATTR_AUTH_DATA = 0x9c NL80211_ATTR_AUTH_TYPE = 0x35 NL80211_ATTR_BANDS = 0xef @@ -4623,6 +4674,7 @@ const ( NL80211_ATTR_BSS_BASIC_RATES = 0x24 NL80211_ATTR_BSS = 0x2f NL80211_ATTR_BSS_CTS_PROT = 0x1c + NL80211_ATTR_BSS_DUMP_INCLUDE_USE_DATA = 0x147 NL80211_ATTR_BSS_HT_OPMODE = 0x6d NL80211_ATTR_BSSID = 0xf5 NL80211_ATTR_BSS_SELECT = 0xe3 @@ -4682,6 +4734,7 @@ const ( NL80211_ATTR_DTIM_PERIOD = 0xd NL80211_ATTR_DURATION = 0x57 NL80211_ATTR_EHT_CAPABILITY = 0x136 + NL80211_ATTR_EMA_RNR_ELEMS = 0x145 NL80211_ATTR_EML_CAPABILITY = 0x13d NL80211_ATTR_EXT_CAPA = 0xa9 NL80211_ATTR_EXT_CAPA_MASK = 0xaa @@ -4717,6 +4770,7 @@ const ( NL80211_ATTR_HIDDEN_SSID = 0x7e NL80211_ATTR_HT_CAPABILITY = 0x1f NL80211_ATTR_HT_CAPABILITY_MASK = 0x94 + NL80211_ATTR_HW_TIMESTAMP_ENABLED = 0x144 NL80211_ATTR_IE_ASSOC_RESP = 0x80 NL80211_ATTR_IE = 0x2a NL80211_ATTR_IE_PROBE_RESP = 0x7f @@ -4747,9 +4801,10 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x14d + NL80211_ATTR_MAX = 0x151 NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce + NL80211_ATTR_MAX_HW_TIMESTAMP_PEERS = 0x143 NL80211_ATTR_MAX_MATCH_SETS = 0x85 NL80211_ATTR_MAX_NUM_AKM_SUITES = 0x13c NL80211_ATTR_MAX_NUM_PMKIDS = 0x56 @@ -4774,9 +4829,12 @@ const ( NL80211_ATTR_MGMT_SUBTYPE = 0x29 NL80211_ATTR_MLD_ADDR = 0x13a NL80211_ATTR_MLD_CAPA_AND_OPS = 0x13e + NL80211_ATTR_MLO_LINK_DISABLED = 0x146 NL80211_ATTR_MLO_LINK_ID = 0x139 NL80211_ATTR_MLO_LINKS = 0x138 NL80211_ATTR_MLO_SUPPORT = 0x13b + NL80211_ATTR_MLO_TTLM_DLINK = 0x148 + NL80211_ATTR_MLO_TTLM_ULINK = 0x149 NL80211_ATTR_MNTR_FLAGS = 0x17 NL80211_ATTR_MPATH_INFO = 0x1b NL80211_ATTR_MPATH_NEXT_HOP = 0x1a @@ -4809,12 +4867,14 @@ const ( NL80211_ATTR_PORT_AUTHORIZED = 0x103 NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN = 0x5 NL80211_ATTR_POWER_RULE_MAX_EIRP = 0x6 + NL80211_ATTR_POWER_RULE_PSD = 0x8 NL80211_ATTR_PREV_BSSID = 0x4f NL80211_ATTR_PRIVACY = 0x46 NL80211_ATTR_PROBE_RESP = 0x91 NL80211_ATTR_PROBE_RESP_OFFLOAD = 0x90 NL80211_ATTR_PROTOCOL_FEATURES = 0xad NL80211_ATTR_PS_STATE = 0x5d + NL80211_ATTR_PUNCT_BITMAP = 0x142 NL80211_ATTR_QOS_MAP = 0xc7 NL80211_ATTR_RADAR_BACKGROUND = 0x134 NL80211_ATTR_RADAR_EVENT = 0xa8 @@ -4943,7 +5003,9 @@ const ( NL80211_ATTR_WIPHY_FREQ = 0x26 NL80211_ATTR_WIPHY_FREQ_HINT = 0xc9 NL80211_ATTR_WIPHY_FREQ_OFFSET = 0x122 + NL80211_ATTR_WIPHY_INTERFACE_COMBINATIONS = 0x14c NL80211_ATTR_WIPHY_NAME = 0x2 + NL80211_ATTR_WIPHY_RADIOS = 0x14b NL80211_ATTR_WIPHY_RETRY_LONG = 0x3e NL80211_ATTR_WIPHY_RETRY_SHORT = 0x3d NL80211_ATTR_WIPHY_RTS_THRESHOLD = 0x40 @@ -4978,6 +5040,8 @@ const ( NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 NL80211_BAND_ATTR_MAX = 0xd NL80211_BAND_ATTR_RATES = 0x2 + NL80211_BAND_ATTR_S1G_CAPA = 0xd + NL80211_BAND_ATTR_S1G_MCS_NSS_SET = 0xc NL80211_BAND_ATTR_VHT_CAPA = 0x8 NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC = 0x8 @@ -5001,6 +5065,10 @@ const ( NL80211_BSS_BEACON_INTERVAL = 0x4 NL80211_BSS_BEACON_TSF = 0xd NL80211_BSS_BSSID = 0x1 + NL80211_BSS_CANNOT_USE_6GHZ_PWR_MISMATCH = 0x2 + NL80211_BSS_CANNOT_USE_NSTR_NONPRIMARY = 0x1 + NL80211_BSS_CANNOT_USE_REASONS = 0x18 + NL80211_BSS_CANNOT_USE_UHB_PWR_MISMATCH = 0x2 NL80211_BSS_CAPABILITY = 0x5 NL80211_BSS_CHAIN_SIGNAL = 0x13 NL80211_BSS_CHAN_WIDTH_10 = 0x1 @@ -5032,6 +5100,9 @@ const ( NL80211_BSS_STATUS = 0x9 NL80211_BSS_STATUS_IBSS_JOINED = 0x2 NL80211_BSS_TSF = 0x3 + NL80211_BSS_USE_FOR = 0x17 + NL80211_BSS_USE_FOR_MLD_LINK = 0x2 + NL80211_BSS_USE_FOR_NORMAL = 0x1 NL80211_CHAN_HT20 = 0x1 NL80211_CHAN_HT40MINUS = 0x2 NL80211_CHAN_HT40PLUS = 0x3 @@ -5117,7 +5188,8 @@ const ( NL80211_CMD_LEAVE_IBSS = 0x2c NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x9b + NL80211_CMD_LINKS_REMOVED = 0x9a + NL80211_CMD_MAX = 0x9d NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5161,6 +5233,7 @@ const ( NL80211_CMD_SET_COALESCE = 0x65 NL80211_CMD_SET_CQM = 0x3f NL80211_CMD_SET_FILS_AAD = 0x92 + NL80211_CMD_SET_HW_TIMESTAMP = 0x99 NL80211_CMD_SET_INTERFACE = 0x6 NL80211_CMD_SET_KEY = 0xa NL80211_CMD_SET_MAC_ACL = 0x5d @@ -5180,6 +5253,7 @@ const ( NL80211_CMD_SET_SAR_SPECS = 0x8c NL80211_CMD_SET_STATION = 0x12 NL80211_CMD_SET_TID_CONFIG = 0x89 + NL80211_CMD_SET_TID_TO_LINK_MAPPING = 0x9b NL80211_CMD_SET_TX_BITRATE_MASK = 0x39 NL80211_CMD_SET_WDS_PEER = 0x42 NL80211_CMD_SET_WIPHY = 0x2 @@ -5247,6 +5321,7 @@ const ( NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 0x21 NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 0x22 NL80211_EXT_FEATURE_AQL = 0x28 + NL80211_EXT_FEATURE_AUTH_AND_DEAUTH_RANDOM_TA = 0x40 NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 0x2e NL80211_EXT_FEATURE_BEACON_PROTECTION = 0x29 NL80211_EXT_FEATURE_BEACON_RATE_HE = 0x36 @@ -5262,6 +5337,7 @@ const ( NL80211_EXT_FEATURE_CQM_RSSI_LIST = 0xd NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 0x1b NL80211_EXT_FEATURE_DEL_IBSS_STA = 0x2c + NL80211_EXT_FEATURE_DFS_CONCURRENT = 0x43 NL80211_EXT_FEATURE_DFS_OFFLOAD = 0x19 NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 0x20 NL80211_EXT_FEATURE_EXT_KEY_ID = 0x24 @@ -5281,9 +5357,12 @@ const ( NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x14 NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 0x13 NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 0x31 + NL80211_EXT_FEATURE_OWE_OFFLOAD_AP = 0x42 + NL80211_EXT_FEATURE_OWE_OFFLOAD = 0x41 NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE = 0x3d NL80211_EXT_FEATURE_PROTECTED_TWT = 0x2b NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 0x39 + NL80211_EXT_FEATURE_PUNCT = 0x3e NL80211_EXT_FEATURE_RADAR_BACKGROUND = 0x3c NL80211_EXT_FEATURE_RRM = 0x1 NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 0x33 @@ -5295,8 +5374,10 @@ const ( NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 0x23 NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 0xc NL80211_EXT_FEATURE_SECURE_LTF = 0x37 + NL80211_EXT_FEATURE_SECURE_NAN = 0x3f NL80211_EXT_FEATURE_SECURE_RTT = 0x38 NL80211_EXT_FEATURE_SET_SCAN_DWELL = 0x5 + NL80211_EXT_FEATURE_SPP_AMSDU_SUPPORT = 0x44 NL80211_EXT_FEATURE_STA_TX_PWR = 0x25 NL80211_EXT_FEATURE_TXQS = 0x1c NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 0x35 @@ -5343,7 +5424,10 @@ const ( NL80211_FREQUENCY_ATTR_2MHZ = 0x16 NL80211_FREQUENCY_ATTR_4MHZ = 0x17 NL80211_FREQUENCY_ATTR_8MHZ = 0x18 + NL80211_FREQUENCY_ATTR_ALLOW_6GHZ_VLP_AP = 0x21 + NL80211_FREQUENCY_ATTR_CAN_MONITOR = 0x20 NL80211_FREQUENCY_ATTR_DFS_CAC_TIME = 0xd + NL80211_FREQUENCY_ATTR_DFS_CONCURRENT = 0x1d NL80211_FREQUENCY_ATTR_DFS_STATE = 0x7 NL80211_FREQUENCY_ATTR_DFS_TIME = 0x8 NL80211_FREQUENCY_ATTR_DISABLED = 0x2 @@ -5351,12 +5435,14 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x21 + NL80211_FREQUENCY_ATTR_MAX = 0x22 NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc NL80211_FREQUENCY_ATTR_NO_20MHZ = 0x10 NL80211_FREQUENCY_ATTR_NO_320MHZ = 0x1a + NL80211_FREQUENCY_ATTR_NO_6GHZ_AFC_CLIENT = 0x1f + NL80211_FREQUENCY_ATTR_NO_6GHZ_VLP_CLIENT = 0x1e NL80211_FREQUENCY_ATTR_NO_80MHZ = 0xb NL80211_FREQUENCY_ATTR_NO_EHT = 0x1b NL80211_FREQUENCY_ATTR_NO_HE = 0x13 @@ -5364,8 +5450,11 @@ const ( NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 0xa NL80211_FREQUENCY_ATTR_NO_IBSS = 0x3 NL80211_FREQUENCY_ATTR_NO_IR = 0x3 + NL80211_FREQUENCY_ATTR_NO_UHB_AFC_CLIENT = 0x1f + NL80211_FREQUENCY_ATTR_NO_UHB_VLP_CLIENT = 0x1e NL80211_FREQUENCY_ATTR_OFFSET = 0x14 NL80211_FREQUENCY_ATTR_PASSIVE_SCAN = 0x3 + NL80211_FREQUENCY_ATTR_PSD = 0x1c NL80211_FREQUENCY_ATTR_RADAR = 0x5 NL80211_FREQUENCY_ATTR_WMM = 0x12 NL80211_FTM_RESP_ATTR_CIVICLOC = 0x3 @@ -5430,6 +5519,7 @@ const ( NL80211_IFTYPE_STATION = 0x2 NL80211_IFTYPE_UNSPECIFIED = 0x0 NL80211_IFTYPE_WDS = 0x5 + NL80211_KCK_EXT_LEN_32 = 0x20 NL80211_KCK_EXT_LEN = 0x18 NL80211_KCK_LEN = 0x10 NL80211_KEK_EXT_LEN = 0x20 @@ -5458,9 +5548,10 @@ const ( NL80211_MAX_SUPP_HT_RATES = 0x4d NL80211_MAX_SUPP_RATES = 0x20 NL80211_MAX_SUPP_REG_RULES = 0x80 + NL80211_MAX_SUPP_SELECTORS = 0x80 NL80211_MBSSID_CONFIG_ATTR_EMA = 0x5 NL80211_MBSSID_CONFIG_ATTR_INDEX = 0x3 - NL80211_MBSSID_CONFIG_ATTR_MAX = 0x5 + NL80211_MBSSID_CONFIG_ATTR_MAX = 0x6 NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY = 0x2 NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES = 0x1 NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX = 0x4 @@ -5703,11 +5794,16 @@ const ( NL80211_RADAR_PRE_CAC_EXPIRED = 0x4 NL80211_RATE_INFO_10_MHZ_WIDTH = 0xb NL80211_RATE_INFO_160_MHZ_WIDTH = 0xa + NL80211_RATE_INFO_16_MHZ_WIDTH = 0x1d + NL80211_RATE_INFO_1_MHZ_WIDTH = 0x19 + NL80211_RATE_INFO_2_MHZ_WIDTH = 0x1a NL80211_RATE_INFO_320_MHZ_WIDTH = 0x12 NL80211_RATE_INFO_40_MHZ_WIDTH = 0x3 + NL80211_RATE_INFO_4_MHZ_WIDTH = 0x1b NL80211_RATE_INFO_5_MHZ_WIDTH = 0xc NL80211_RATE_INFO_80_MHZ_WIDTH = 0x8 NL80211_RATE_INFO_80P80_MHZ_WIDTH = 0x9 + NL80211_RATE_INFO_8_MHZ_WIDTH = 0x1c NL80211_RATE_INFO_BITRATE32 = 0x5 NL80211_RATE_INFO_BITRATE = 0x1 NL80211_RATE_INFO_EHT_GI_0_8 = 0x0 @@ -5753,6 +5849,8 @@ const ( NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 NL80211_RATE_INFO_MAX = 0x1d NL80211_RATE_INFO_MCS = 0x2 + NL80211_RATE_INFO_S1G_MCS = 0x17 + NL80211_RATE_INFO_S1G_NSS = 0x18 NL80211_RATE_INFO_SHORT_GI = 0x4 NL80211_RATE_INFO_VHT_MCS = 0x6 NL80211_RATE_INFO_VHT_NSS = 0x7 @@ -5770,14 +5868,19 @@ const ( NL80211_REKEY_DATA_KEK = 0x1 NL80211_REKEY_DATA_REPLAY_CTR = 0x3 NL80211_REPLAY_CTR_LEN = 0x8 + NL80211_RRF_ALLOW_6GHZ_VLP_AP = 0x1000000 NL80211_RRF_AUTO_BW = 0x800 NL80211_RRF_DFS = 0x10 + NL80211_RRF_DFS_CONCURRENT = 0x200000 NL80211_RRF_GO_CONCURRENT = 0x1000 NL80211_RRF_IR_CONCURRENT = 0x1000 NL80211_RRF_NO_160MHZ = 0x10000 NL80211_RRF_NO_320MHZ = 0x40000 + NL80211_RRF_NO_6GHZ_AFC_CLIENT = 0x800000 + NL80211_RRF_NO_6GHZ_VLP_CLIENT = 0x400000 NL80211_RRF_NO_80MHZ = 0x8000 NL80211_RRF_NO_CCK = 0x2 + NL80211_RRF_NO_EHT = 0x80000 NL80211_RRF_NO_HE = 0x20000 NL80211_RRF_NO_HT40 = 0x6000 NL80211_RRF_NO_HT40MINUS = 0x2000 @@ -5788,7 +5891,10 @@ const ( NL80211_RRF_NO_IR = 0x80 NL80211_RRF_NO_OFDM = 0x1 NL80211_RRF_NO_OUTDOOR = 0x8 + NL80211_RRF_NO_UHB_AFC_CLIENT = 0x800000 + NL80211_RRF_NO_UHB_VLP_CLIENT = 0x400000 NL80211_RRF_PASSIVE_SCAN = 0x80 + NL80211_RRF_PSD = 0x100000 NL80211_RRF_PTMP_ONLY = 0x40 NL80211_RRF_PTP_ONLY = 0x20 NL80211_RXMGMT_FLAG_ANSWERED = 0x1 @@ -5849,6 +5955,7 @@ const ( NL80211_STA_FLAG_MAX_OLD_API = 0x6 NL80211_STA_FLAG_MFP = 0x4 NL80211_STA_FLAG_SHORT_PREAMBLE = 0x2 + NL80211_STA_FLAG_SPP_AMSDU = 0x8 NL80211_STA_FLAG_TDLS_PEER = 0x6 NL80211_STA_FLAG_WME = 0x3 NL80211_STA_INFO_ACK_SIGNAL_AVG = 0x23 @@ -6007,6 +6114,13 @@ const ( NL80211_VHT_CAPABILITY_LEN = 0xc NL80211_VHT_NSS_MAX = 0x8 NL80211_WIPHY_NAME_MAXLEN = 0x40 + NL80211_WIPHY_RADIO_ATTR_FREQ_RANGE = 0x2 + NL80211_WIPHY_RADIO_ATTR_INDEX = 0x1 + NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION = 0x3 + NL80211_WIPHY_RADIO_ATTR_MAX = 0x4 + NL80211_WIPHY_RADIO_FREQ_ATTR_END = 0x2 + NL80211_WIPHY_RADIO_FREQ_ATTR_MAX = 0x2 + NL80211_WIPHY_RADIO_FREQ_ATTR_START = 0x1 NL80211_WMMR_AIFSN = 0x3 NL80211_WMMR_CW_MAX = 0x2 NL80211_WMMR_CW_MIN = 0x1 @@ -6038,6 +6152,7 @@ const ( NL80211_WOWLAN_TRIG_PKT_PATTERN = 0x4 NL80211_WOWLAN_TRIG_RFKILL_RELEASE = 0x9 NL80211_WOWLAN_TRIG_TCP_CONNECTION = 0xe + NL80211_WOWLAN_TRIG_UNPROTECTED_DEAUTH_DISASSOC = 0x14 NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 = 0xa NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN = 0xb NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 = 0xc diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index fd402da43f..485f2d3a1b 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -282,7 +282,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -338,6 +338,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index eb7a5e1864..ecbd1ad8bc 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -351,6 +351,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index d78ac108b6..02f0463a44 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -91,7 +91,7 @@ type Stat_t struct { Gid uint32 Rdev uint64 _ uint16 - _ [4]byte + _ [6]byte Size int64 Blksize int32 _ [4]byte @@ -273,7 +273,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -329,6 +329,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index cd06d47f1f..6f4d400d24 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -330,6 +330,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 2f28fe26c1..cd532cfa55 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -331,6 +331,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 71d6cac2f1..4133620851 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -278,7 +278,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -334,6 +334,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 8596d45356..eaa37eb718 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -333,6 +333,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index cd60ea1866..98ae6a1e4a 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -333,6 +333,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index b0ae420c48..cae1961594 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -278,7 +278,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -334,6 +334,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 8359728759..6ce3b4e028 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -90,7 +90,7 @@ type Stat_t struct { Gid uint32 Rdev uint64 _ uint16 - _ [4]byte + _ [6]byte Size int64 Blksize int32 _ [4]byte @@ -285,7 +285,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -341,6 +341,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 69eb6a5c68..c7429c6a14 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -340,6 +340,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 5f583cb62b..4bf4baf4ca 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -340,6 +340,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index ad05b51a60..e9709d70af 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -358,6 +358,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index cf3ce90037..fb44268ca7 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -353,6 +353,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 590b56739c..9c38265c74 100644 --- a/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/upstream/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -335,6 +335,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/upstream/vendor/golang.org/x/sys/windows/security_windows.go b/upstream/vendor/golang.org/x/sys/windows/security_windows.go index b6e1ab76f8..a8b0364c7c 100644 --- a/upstream/vendor/golang.org/x/sys/windows/security_windows.go +++ b/upstream/vendor/golang.org/x/sys/windows/security_windows.go @@ -1303,7 +1303,10 @@ func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DE return nil, err } if absoluteSDSize > 0 { - absoluteSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, absoluteSDSize)[0])) + absoluteSD = new(SECURITY_DESCRIPTOR) + if unsafe.Sizeof(*absoluteSD) < uintptr(absoluteSDSize) { + panic("sizeof(SECURITY_DESCRIPTOR) too small") + } } var ( dacl *ACL @@ -1312,19 +1315,55 @@ func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DE group *SID ) if daclSize > 0 { - dacl = (*ACL)(unsafe.Pointer(&make([]byte, daclSize)[0])) + dacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, daclSize)))) } if saclSize > 0 { - sacl = (*ACL)(unsafe.Pointer(&make([]byte, saclSize)[0])) + sacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, saclSize)))) } if ownerSize > 0 { - owner = (*SID)(unsafe.Pointer(&make([]byte, ownerSize)[0])) + owner = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, ownerSize)))) } if groupSize > 0 { - group = (*SID)(unsafe.Pointer(&make([]byte, groupSize)[0])) + group = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, groupSize)))) } + // We call into Windows via makeAbsoluteSD, which sets up + // pointers within absoluteSD that point to other chunks of memory + // we pass into makeAbsoluteSD, and that happens outside the view of the GC. + // We therefore take some care here to then verify the pointers are as we expect + // and set them explicitly in view of the GC. See https://go.dev/issue/73199. + // TODO: consider weak pointers once Go 1.24 is appropriate. See suggestion in https://go.dev/cl/663575. err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize, dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize) + if err != nil { + // Don't return absoluteSD, which might be partially initialized. + return nil, err + } + // Before using any fields, verify absoluteSD is in the format we expect according to Windows. + // See https://learn.microsoft.com/en-us/windows/win32/secauthz/absolute-and-self-relative-security-descriptors + absControl, _, err := absoluteSD.Control() + if err != nil { + panic("absoluteSD: " + err.Error()) + } + if absControl&SE_SELF_RELATIVE != 0 { + panic("absoluteSD not in absolute format") + } + if absoluteSD.dacl != dacl { + panic("dacl pointer mismatch") + } + if absoluteSD.sacl != sacl { + panic("sacl pointer mismatch") + } + if absoluteSD.owner != owner { + panic("owner pointer mismatch") + } + if absoluteSD.group != group { + panic("group pointer mismatch") + } + absoluteSD.dacl = dacl + absoluteSD.sacl = sacl + absoluteSD.owner = owner + absoluteSD.group = group + return } diff --git a/upstream/vendor/golang.org/x/sys/windows/syscall_windows.go b/upstream/vendor/golang.org/x/sys/windows/syscall_windows.go index 4a32543868..640f6b153f 100644 --- a/upstream/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/upstream/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -870,6 +870,7 @@ const socket_error = uintptr(^uint32(0)) //sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom //sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo //sys WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.WSASocketW +//sys WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) [failretval!=0] = ws2_32.WSADuplicateSocketW //sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname //sys GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname //sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs @@ -1698,8 +1699,9 @@ func NewNTUnicodeString(s string) (*NTUnicodeString, error) { // Slice returns a uint16 slice that aliases the data in the NTUnicodeString. func (s *NTUnicodeString) Slice() []uint16 { - slice := unsafe.Slice(s.Buffer, s.MaximumLength) - return slice[:s.Length] + // Note: this rounds the length down, if it happens + // to (incorrectly) be odd. Probably safer than rounding up. + return unsafe.Slice(s.Buffer, s.MaximumLength/2)[:s.Length/2] } func (s *NTUnicodeString) String() string { diff --git a/upstream/vendor/golang.org/x/sys/windows/types_windows.go b/upstream/vendor/golang.org/x/sys/windows/types_windows.go index ad67df2fdb..958bcf47a3 100644 --- a/upstream/vendor/golang.org/x/sys/windows/types_windows.go +++ b/upstream/vendor/golang.org/x/sys/windows/types_windows.go @@ -2700,6 +2700,8 @@ type CommTimeouts struct { // NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING. type NTUnicodeString struct { + // Note: Length and MaximumLength are in *bytes*, not uint16s. + // They should always be even. Length uint16 MaximumLength uint16 Buffer *uint16 @@ -3628,3 +3630,213 @@ const ( KLF_NOTELLSHELL = 0x00000080 KLF_SETFORPROCESS = 0x00000100 ) + +// Virtual Key codes +// https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes +const ( + VK_LBUTTON = 0x01 + VK_RBUTTON = 0x02 + VK_CANCEL = 0x03 + VK_MBUTTON = 0x04 + VK_XBUTTON1 = 0x05 + VK_XBUTTON2 = 0x06 + VK_BACK = 0x08 + VK_TAB = 0x09 + VK_CLEAR = 0x0C + VK_RETURN = 0x0D + VK_SHIFT = 0x10 + VK_CONTROL = 0x11 + VK_MENU = 0x12 + VK_PAUSE = 0x13 + VK_CAPITAL = 0x14 + VK_KANA = 0x15 + VK_HANGEUL = 0x15 + VK_HANGUL = 0x15 + VK_IME_ON = 0x16 + VK_JUNJA = 0x17 + VK_FINAL = 0x18 + VK_HANJA = 0x19 + VK_KANJI = 0x19 + VK_IME_OFF = 0x1A + VK_ESCAPE = 0x1B + VK_CONVERT = 0x1C + VK_NONCONVERT = 0x1D + VK_ACCEPT = 0x1E + VK_MODECHANGE = 0x1F + VK_SPACE = 0x20 + VK_PRIOR = 0x21 + VK_NEXT = 0x22 + VK_END = 0x23 + VK_HOME = 0x24 + VK_LEFT = 0x25 + VK_UP = 0x26 + VK_RIGHT = 0x27 + VK_DOWN = 0x28 + VK_SELECT = 0x29 + VK_PRINT = 0x2A + VK_EXECUTE = 0x2B + VK_SNAPSHOT = 0x2C + VK_INSERT = 0x2D + VK_DELETE = 0x2E + VK_HELP = 0x2F + VK_LWIN = 0x5B + VK_RWIN = 0x5C + VK_APPS = 0x5D + VK_SLEEP = 0x5F + VK_NUMPAD0 = 0x60 + VK_NUMPAD1 = 0x61 + VK_NUMPAD2 = 0x62 + VK_NUMPAD3 = 0x63 + VK_NUMPAD4 = 0x64 + VK_NUMPAD5 = 0x65 + VK_NUMPAD6 = 0x66 + VK_NUMPAD7 = 0x67 + VK_NUMPAD8 = 0x68 + VK_NUMPAD9 = 0x69 + VK_MULTIPLY = 0x6A + VK_ADD = 0x6B + VK_SEPARATOR = 0x6C + VK_SUBTRACT = 0x6D + VK_DECIMAL = 0x6E + VK_DIVIDE = 0x6F + VK_F1 = 0x70 + VK_F2 = 0x71 + VK_F3 = 0x72 + VK_F4 = 0x73 + VK_F5 = 0x74 + VK_F6 = 0x75 + VK_F7 = 0x76 + VK_F8 = 0x77 + VK_F9 = 0x78 + VK_F10 = 0x79 + VK_F11 = 0x7A + VK_F12 = 0x7B + VK_F13 = 0x7C + VK_F14 = 0x7D + VK_F15 = 0x7E + VK_F16 = 0x7F + VK_F17 = 0x80 + VK_F18 = 0x81 + VK_F19 = 0x82 + VK_F20 = 0x83 + VK_F21 = 0x84 + VK_F22 = 0x85 + VK_F23 = 0x86 + VK_F24 = 0x87 + VK_NUMLOCK = 0x90 + VK_SCROLL = 0x91 + VK_OEM_NEC_EQUAL = 0x92 + VK_OEM_FJ_JISHO = 0x92 + VK_OEM_FJ_MASSHOU = 0x93 + VK_OEM_FJ_TOUROKU = 0x94 + VK_OEM_FJ_LOYA = 0x95 + VK_OEM_FJ_ROYA = 0x96 + VK_LSHIFT = 0xA0 + VK_RSHIFT = 0xA1 + VK_LCONTROL = 0xA2 + VK_RCONTROL = 0xA3 + VK_LMENU = 0xA4 + VK_RMENU = 0xA5 + VK_BROWSER_BACK = 0xA6 + VK_BROWSER_FORWARD = 0xA7 + VK_BROWSER_REFRESH = 0xA8 + VK_BROWSER_STOP = 0xA9 + VK_BROWSER_SEARCH = 0xAA + VK_BROWSER_FAVORITES = 0xAB + VK_BROWSER_HOME = 0xAC + VK_VOLUME_MUTE = 0xAD + VK_VOLUME_DOWN = 0xAE + VK_VOLUME_UP = 0xAF + VK_MEDIA_NEXT_TRACK = 0xB0 + VK_MEDIA_PREV_TRACK = 0xB1 + VK_MEDIA_STOP = 0xB2 + VK_MEDIA_PLAY_PAUSE = 0xB3 + VK_LAUNCH_MAIL = 0xB4 + VK_LAUNCH_MEDIA_SELECT = 0xB5 + VK_LAUNCH_APP1 = 0xB6 + VK_LAUNCH_APP2 = 0xB7 + VK_OEM_1 = 0xBA + VK_OEM_PLUS = 0xBB + VK_OEM_COMMA = 0xBC + VK_OEM_MINUS = 0xBD + VK_OEM_PERIOD = 0xBE + VK_OEM_2 = 0xBF + VK_OEM_3 = 0xC0 + VK_OEM_4 = 0xDB + VK_OEM_5 = 0xDC + VK_OEM_6 = 0xDD + VK_OEM_7 = 0xDE + VK_OEM_8 = 0xDF + VK_OEM_AX = 0xE1 + VK_OEM_102 = 0xE2 + VK_ICO_HELP = 0xE3 + VK_ICO_00 = 0xE4 + VK_PROCESSKEY = 0xE5 + VK_ICO_CLEAR = 0xE6 + VK_OEM_RESET = 0xE9 + VK_OEM_JUMP = 0xEA + VK_OEM_PA1 = 0xEB + VK_OEM_PA2 = 0xEC + VK_OEM_PA3 = 0xED + VK_OEM_WSCTRL = 0xEE + VK_OEM_CUSEL = 0xEF + VK_OEM_ATTN = 0xF0 + VK_OEM_FINISH = 0xF1 + VK_OEM_COPY = 0xF2 + VK_OEM_AUTO = 0xF3 + VK_OEM_ENLW = 0xF4 + VK_OEM_BACKTAB = 0xF5 + VK_ATTN = 0xF6 + VK_CRSEL = 0xF7 + VK_EXSEL = 0xF8 + VK_EREOF = 0xF9 + VK_PLAY = 0xFA + VK_ZOOM = 0xFB + VK_NONAME = 0xFC + VK_PA1 = 0xFD + VK_OEM_CLEAR = 0xFE +) + +// Mouse button constants. +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + FROM_LEFT_1ST_BUTTON_PRESSED = 0x0001 + RIGHTMOST_BUTTON_PRESSED = 0x0002 + FROM_LEFT_2ND_BUTTON_PRESSED = 0x0004 + FROM_LEFT_3RD_BUTTON_PRESSED = 0x0008 + FROM_LEFT_4TH_BUTTON_PRESSED = 0x0010 +) + +// Control key state constaints. +// https://docs.microsoft.com/en-us/windows/console/key-event-record-str +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + CAPSLOCK_ON = 0x0080 + ENHANCED_KEY = 0x0100 + LEFT_ALT_PRESSED = 0x0002 + LEFT_CTRL_PRESSED = 0x0008 + NUMLOCK_ON = 0x0020 + RIGHT_ALT_PRESSED = 0x0001 + RIGHT_CTRL_PRESSED = 0x0004 + SCROLLLOCK_ON = 0x0040 + SHIFT_PRESSED = 0x0010 +) + +// Mouse event record event flags. +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + MOUSE_MOVED = 0x0001 + DOUBLE_CLICK = 0x0002 + MOUSE_WHEELED = 0x0004 + MOUSE_HWHEELED = 0x0008 +) + +// Input Record Event Types +// https://learn.microsoft.com/en-us/windows/console/input-record-str +const ( + FOCUS_EVENT = 0x0010 + KEY_EVENT = 0x0001 + MENU_EVENT = 0x0008 + MOUSE_EVENT = 0x0002 + WINDOW_BUFFER_SIZE_EVENT = 0x0004 +) diff --git a/upstream/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/upstream/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 01c0716c2c..a58bc48b8e 100644 --- a/upstream/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/upstream/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -511,6 +511,7 @@ var ( procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") procWSACleanup = modws2_32.NewProc("WSACleanup") + procWSADuplicateSocketW = modws2_32.NewProc("WSADuplicateSocketW") procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") procWSAIoctl = modws2_32.NewProc("WSAIoctl") @@ -4391,6 +4392,14 @@ func WSACleanup() (err error) { return } +func WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) { + r1, _, e1 := syscall.Syscall(procWSADuplicateSocketW.Addr(), 3, uintptr(s), uintptr(processID), uintptr(unsafe.Pointer(info))) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) { r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) n = int32(r0) diff --git a/upstream/vendor/golang.org/x/term/term_windows.go b/upstream/vendor/golang.org/x/term/term_windows.go index df6bf948e1..0ddd81c02a 100644 --- a/upstream/vendor/golang.org/x/term/term_windows.go +++ b/upstream/vendor/golang.org/x/term/term_windows.go @@ -20,12 +20,14 @@ func isTerminal(fd int) bool { return err == nil } +// This is intended to be used on a console input handle. +// See https://learn.microsoft.com/en-us/windows/console/setconsolemode func makeRaw(fd int) (*State, error) { var st uint32 if err := windows.GetConsoleMode(windows.Handle(fd), &st); err != nil { return nil, err } - raw := st &^ (windows.ENABLE_ECHO_INPUT | windows.ENABLE_PROCESSED_INPUT | windows.ENABLE_LINE_INPUT | windows.ENABLE_PROCESSED_OUTPUT) + raw := st &^ (windows.ENABLE_ECHO_INPUT | windows.ENABLE_PROCESSED_INPUT | windows.ENABLE_LINE_INPUT) raw |= windows.ENABLE_VIRTUAL_TERMINAL_INPUT if err := windows.SetConsoleMode(windows.Handle(fd), raw); err != nil { return nil, err diff --git a/upstream/vendor/golang.org/x/term/terminal.go b/upstream/vendor/golang.org/x/term/terminal.go index 14f89470ab..bddb2e2aeb 100644 --- a/upstream/vendor/golang.org/x/term/terminal.go +++ b/upstream/vendor/golang.org/x/term/terminal.go @@ -6,6 +6,7 @@ package term import ( "bytes" + "fmt" "io" "runtime" "strconv" @@ -36,6 +37,26 @@ var vt100EscapeCodes = EscapeCodes{ Reset: []byte{keyEscape, '[', '0', 'm'}, } +// A History provides a (possibly bounded) queue of input lines read by [Terminal.ReadLine]. +type History interface { + // Add will be called by [Terminal.ReadLine] to add + // a new, most recent entry to the history. + // It is allowed to drop any entry, including + // the entry being added (e.g., if it's deemed an invalid entry), + // the least-recent entry (e.g., to keep the history bounded), + // or any other entry. + Add(entry string) + + // Len returns the number of entries in the history. + Len() int + + // At returns an entry from the history. + // Index 0 is the most-recently added entry and + // index Len()-1 is the least-recently added entry. + // If index is < 0 or >= Len(), it panics. + At(idx int) string +} + // Terminal contains the state for running a VT100 terminal that is capable of // reading lines of input. type Terminal struct { @@ -86,9 +107,14 @@ type Terminal struct { remainder []byte inBuf [256]byte - // history contains previously entered commands so that they can be - // accessed with the up and down keys. - history stRingBuffer + // History records and retrieves lines of input read by [ReadLine] which + // a user can retrieve and navigate using the up and down arrow keys. + // + // It is not safe to call ReadLine concurrently with any methods on History. + // + // [NewTerminal] sets this to a default implementation that records the + // last 100 lines of input. + History History // historyIndex stores the currently accessed history entry, where zero // means the immediately previous entry. historyIndex int @@ -111,6 +137,7 @@ func NewTerminal(c io.ReadWriter, prompt string) *Terminal { termHeight: 24, echo: true, historyIndex: -1, + History: &stRingBuffer{}, } } @@ -119,6 +146,7 @@ const ( keyCtrlD = 4 keyCtrlU = 21 keyEnter = '\r' + keyLF = '\n' keyEscape = 27 keyBackspace = 127 keyUnknown = 0xd800 /* UTF-16 surrogate area */ + iota @@ -450,10 +478,27 @@ func visualLength(runes []rune) int { return length } +// histroryAt unlocks the terminal and relocks it while calling History.At. +func (t *Terminal) historyAt(idx int) (string, bool) { + t.lock.Unlock() // Unlock to avoid deadlock if History methods use the output writer. + defer t.lock.Lock() // panic in At (or Len) protection. + if idx < 0 || idx >= t.History.Len() { + return "", false + } + return t.History.At(idx), true +} + +// historyAdd unlocks the terminal and relocks it while calling History.Add. +func (t *Terminal) historyAdd(entry string) { + t.lock.Unlock() // Unlock to avoid deadlock if History methods use the output writer. + defer t.lock.Lock() // panic in Add protection. + t.History.Add(entry) +} + // handleKey processes the given key and, optionally, returns a line of text // that the user has entered. func (t *Terminal) handleKey(key rune) (line string, ok bool) { - if t.pasteActive && key != keyEnter { + if t.pasteActive && key != keyEnter && key != keyLF { t.addKeyToLine(key) return } @@ -497,7 +542,7 @@ func (t *Terminal) handleKey(key rune) (line string, ok bool) { t.pos = len(t.line) t.moveCursorToPos(t.pos) case keyUp: - entry, ok := t.history.NthPreviousEntry(t.historyIndex + 1) + entry, ok := t.historyAt(t.historyIndex + 1) if !ok { return "", false } @@ -516,14 +561,14 @@ func (t *Terminal) handleKey(key rune) (line string, ok bool) { t.setLine(runes, len(runes)) t.historyIndex-- default: - entry, ok := t.history.NthPreviousEntry(t.historyIndex - 1) + entry, ok := t.historyAt(t.historyIndex - 1) if ok { t.historyIndex-- runes := []rune(entry) t.setLine(runes, len(runes)) } } - case keyEnter: + case keyEnter, keyLF: t.moveCursorToPos(len(t.line)) t.queue([]rune("\r\n")) line = string(t.line) @@ -768,6 +813,10 @@ func (t *Terminal) readLine() (line string, err error) { if !t.pasteActive { lineIsPasted = false } + // If we have CR, consume LF if present (CRLF sequence) to avoid returning an extra empty line. + if key == keyEnter && len(rest) > 0 && rest[0] == keyLF { + rest = rest[1:] + } line, lineOk = t.handleKey(key) } if len(rest) > 0 { @@ -781,7 +830,7 @@ func (t *Terminal) readLine() (line string, err error) { if lineOk { if t.echo { t.historyIndex = -1 - t.history.Add(line) + t.historyAdd(line) } if lineIsPasted { err = ErrPasteIndicator @@ -938,19 +987,23 @@ func (s *stRingBuffer) Add(a string) { } } -// NthPreviousEntry returns the value passed to the nth previous call to Add. +func (s *stRingBuffer) Len() int { + return s.size +} + +// At returns the value passed to the nth previous call to Add. // If n is zero then the immediately prior value is returned, if one, then the // next most recent, and so on. If such an element doesn't exist then ok is // false. -func (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) { +func (s *stRingBuffer) At(n int) string { if n < 0 || n >= s.size { - return "", false + panic(fmt.Sprintf("term: history index [%d] out of range [0,%d)", n, s.size)) } index := s.head - n if index < 0 { index += s.max } - return s.entries[index], true + return s.entries[index] } // readPasswordLine reads from reader until it finds \n or io.EOF. diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go index 436b03cb29..1aa7afb9c2 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go @@ -57,7 +57,7 @@ type asmArch struct { // include the first integer register and first floating-point register. Accessing // any of them counts as writing to result. retRegs []string - // writeResult is a list of instructions that will change result register implicity. + // writeResult is a list of instructions that will change result register implicitly. writeResult []string // calculated during initialization sizes types.Sizes diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/assign/assign.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/assign/assign.go index 1413ee13d2..1914bb4761 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/assign/assign.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/assign/assign.go @@ -9,11 +9,11 @@ package assign import ( _ "embed" - "fmt" "go/ast" "go/token" "go/types" "reflect" + "strings" "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis/passes/inspect" @@ -48,31 +48,84 @@ func run(pass *analysis.Pass) (any, error) { // If LHS and RHS have different cardinality, they can't be the same. return } + + // Delete redundant LHS, RHS pairs, taking care + // to include intervening commas. + var ( + exprs []string // expressions appearing on both sides (x = x) + edits []analysis.TextEdit + runStartLHS, runStartRHS token.Pos // non-zero => within a run + ) for i, lhs := range stmt.Lhs { rhs := stmt.Rhs[i] - if analysisutil.HasSideEffects(pass.TypesInfo, lhs) || - analysisutil.HasSideEffects(pass.TypesInfo, rhs) || - isMapIndex(pass.TypesInfo, lhs) { - continue // expressions may not be equal - } - if reflect.TypeOf(lhs) != reflect.TypeOf(rhs) { - continue // short-circuit the heavy-weight gofmt check + isSelfAssign := false + var le string + + if !analysisutil.HasSideEffects(pass.TypesInfo, lhs) && + !analysisutil.HasSideEffects(pass.TypesInfo, rhs) && + !isMapIndex(pass.TypesInfo, lhs) && + reflect.TypeOf(lhs) == reflect.TypeOf(rhs) { // short-circuit the heavy-weight gofmt check + + le = analysisinternal.Format(pass.Fset, lhs) + re := analysisinternal.Format(pass.Fset, rhs) + if le == re { + isSelfAssign = true + } } - le := analysisinternal.Format(pass.Fset, lhs) - re := analysisinternal.Format(pass.Fset, rhs) - if le == re { - pass.Report(analysis.Diagnostic{ - Pos: stmt.Pos(), Message: fmt.Sprintf("self-assignment of %s to %s", re, le), - SuggestedFixes: []analysis.SuggestedFix{{ - Message: "Remove self-assignment", - TextEdits: []analysis.TextEdit{{ - Pos: stmt.Pos(), - End: stmt.End(), - }}}, - }, - }) + + if isSelfAssign { + exprs = append(exprs, le) + if !runStartLHS.IsValid() { + // Start of a new run of self-assignments. + if i > 0 { + runStartLHS = stmt.Lhs[i-1].End() + runStartRHS = stmt.Rhs[i-1].End() + } else { + runStartLHS = lhs.Pos() + runStartRHS = rhs.Pos() + } + } + } else if runStartLHS.IsValid() { + // End of a run of self-assignments. + endLHS, endRHS := stmt.Lhs[i-1].End(), stmt.Rhs[i-1].End() + if runStartLHS == stmt.Lhs[0].Pos() { + endLHS, endRHS = lhs.Pos(), rhs.Pos() + } + edits = append(edits, + analysis.TextEdit{Pos: runStartLHS, End: endLHS}, + analysis.TextEdit{Pos: runStartRHS, End: endRHS}, + ) + runStartLHS, runStartRHS = 0, 0 } } + + // If a run of self-assignments continues to the end of the statement, close it. + if runStartLHS.IsValid() { + last := len(stmt.Lhs) - 1 + edits = append(edits, + analysis.TextEdit{Pos: runStartLHS, End: stmt.Lhs[last].End()}, + analysis.TextEdit{Pos: runStartRHS, End: stmt.Rhs[last].End()}, + ) + } + + if len(exprs) == 0 { + return + } + + if len(exprs) == len(stmt.Lhs) { + // If every part of the statement is a self-assignment, + // remove the whole statement. + edits = []analysis.TextEdit{{Pos: stmt.Pos(), End: stmt.End()}} + } + + pass.Report(analysis.Diagnostic{ + Pos: stmt.Pos(), + Message: "self-assignment of " + strings.Join(exprs, ", "), + SuggestedFixes: []analysis.SuggestedFix{{ + Message: "Remove self-assignment", + TextEdits: edits, + }}, + }) }) return nil, nil diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go index 25c98a97bb..ed2284e630 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go @@ -153,7 +153,8 @@ func isLocalType(pass *analysis.Pass, typ types.Type) bool { return isLocalType(pass, x.Elem()) case interface{ Obj() *types.TypeName }: // *Named or *TypeParam (aliases were removed already) // names in package foo are local to foo_test too - return strings.TrimSuffix(x.Obj().Pkg().Path(), "_test") == strings.TrimSuffix(pass.Pkg.Path(), "_test") + return x.Obj().Pkg() != nil && + strings.TrimSuffix(x.Obj().Pkg().Path(), "_test") == strings.TrimSuffix(pass.Pkg.Path(), "_test") } return false } diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go index ba94fd68ea..ff9c8b4f81 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go @@ -28,9 +28,9 @@ var Analyzer = &analysis.Analyzer{ // Per-architecture checks for instructions. // Assume comments, leading and trailing spaces are removed. type arch struct { - isFPWrite func(string) bool - isFPRead func(string) bool - isBranch func(string) bool + isFPWrite func(string) bool + isFPRead func(string) bool + isUnconditionalBranch func(string) bool } var re = regexp.MustCompile @@ -48,8 +48,8 @@ var arches = map[string]arch{ "amd64": { isFPWrite: re(`,\s*BP$`).MatchString, // TODO: can have false positive, e.g. for TESTQ BP,BP. Seems unlikely. isFPRead: re(`\bBP\b`).MatchString, - isBranch: func(s string) bool { - return hasAnyPrefix(s, "J", "RET") + isUnconditionalBranch: func(s string) bool { + return hasAnyPrefix(s, "JMP", "RET") }, }, "arm64": { @@ -70,49 +70,16 @@ var arches = map[string]arch{ return false }, isFPRead: re(`\bR29\b`).MatchString, - isBranch: func(s string) bool { + isUnconditionalBranch: func(s string) bool { // Get just the instruction if i := strings.IndexFunc(s, unicode.IsSpace); i > 0 { s = s[:i] } - return arm64Branch[s] + return s == "B" || s == "JMP" || s == "RET" }, }, } -// arm64 has many control flow instructions. -// ^(B|RET) isn't sufficient or correct (e.g. BIC, BFI aren't control flow.) -// It's easier to explicitly enumerate them in a map than to write a regex. -// Borrowed from Go tree, cmd/asm/internal/arch/arm64.go -var arm64Branch = map[string]bool{ - "B": true, - "BL": true, - "BEQ": true, - "BNE": true, - "BCS": true, - "BHS": true, - "BCC": true, - "BLO": true, - "BMI": true, - "BPL": true, - "BVS": true, - "BVC": true, - "BHI": true, - "BLS": true, - "BGE": true, - "BLT": true, - "BGT": true, - "BLE": true, - "CBZ": true, - "CBZW": true, - "CBNZ": true, - "CBNZW": true, - "JMP": true, - "TBNZ": true, - "TBZ": true, - "RET": true, -} - func run(pass *analysis.Pass) (any, error) { arch, ok := arches[build.Default.GOARCH] if !ok { @@ -164,7 +131,7 @@ func run(pass *analysis.Pass) (any, error) { active = false continue } - if arch.isFPRead(line) || arch.isBranch(line) { + if arch.isFPRead(line) || arch.isUnconditionalBranch(line) { active = false continue } diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go index 64df1b106a..2580a0ac21 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go @@ -88,7 +88,7 @@ func run(pass *analysis.Pass) (any, error) { // // TODO: consider allowing the "last" go/defer/Go statement to be followed by // N "trivial" statements, possibly under a recursive definition of "trivial" - // so that that checker could, for example, conclude that a go statement is + // so that checker could, for example, conclude that a go statement is // followed by an if statement made of only trivial statements and trivial expressions, // and hence the go statement could still be checked. forEachLastStmt(body.List, func(last ast.Stmt) { diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go index a7fee18092..c0746789e9 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go @@ -17,6 +17,7 @@ import ( "golang.org/x/tools/go/ast/inspector" "golang.org/x/tools/go/cfg" "golang.org/x/tools/internal/analysisinternal" + "golang.org/x/tools/internal/astutil" ) //go:embed doc.go @@ -83,30 +84,22 @@ func runFunc(pass *analysis.Pass, node ast.Node) { // {FuncDecl,FuncLit,CallExpr,SelectorExpr}. // Find the set of cancel vars to analyze. - stack := make([]ast.Node, 0, 32) - ast.Inspect(node, func(n ast.Node) bool { - switch n.(type) { - case *ast.FuncLit: - if len(stack) > 0 { - return false // don't stray into nested functions - } - case nil: - stack = stack[:len(stack)-1] // pop - return true + astutil.PreorderStack(node, nil, func(n ast.Node, stack []ast.Node) bool { + if _, ok := n.(*ast.FuncLit); ok && len(stack) > 0 { + return false // don't stray into nested functions } - stack = append(stack, n) // push - // Look for [{AssignStmt,ValueSpec} CallExpr SelectorExpr]: + // Look for n=SelectorExpr beneath stack=[{AssignStmt,ValueSpec} CallExpr]: // // ctx, cancel := context.WithCancel(...) // ctx, cancel = context.WithCancel(...) // var ctx, cancel = context.WithCancel(...) // - if !isContextWithCancel(pass.TypesInfo, n) || !isCall(stack[len(stack)-2]) { + if !isContextWithCancel(pass.TypesInfo, n) || !isCall(stack[len(stack)-1]) { return true } var id *ast.Ident // id of cancel var - stmt := stack[len(stack)-3] + stmt := stack[len(stack)-2] switch stmt := stmt.(type) { case *ast.ValueSpec: if len(stmt.Names) > 1 { diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go index a28ed365d1..159a95ae7d 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go @@ -22,6 +22,7 @@ import ( "golang.org/x/tools/go/ast/inspector" "golang.org/x/tools/go/types/typeutil" "golang.org/x/tools/internal/analysisinternal" + "golang.org/x/tools/internal/astutil" "golang.org/x/tools/internal/fmtstr" "golang.org/x/tools/internal/typeparams" "golang.org/x/tools/internal/versions" @@ -540,7 +541,7 @@ func checkPrintf(pass *analysis.Pass, fileVersion string, kind Kind, call *ast.C firstArg := idx + 1 // Arguments are immediately after format string. if !strings.Contains(format, "%") { if len(call.Args) > firstArg { - pass.Reportf(call.Lparen, "%s call has arguments but no formatting directives", name) + pass.ReportRangef(call.Args[firstArg], "%s call has arguments but no formatting directives", name) } return } @@ -552,7 +553,7 @@ func checkPrintf(pass *analysis.Pass, fileVersion string, kind Kind, call *ast.C if err != nil { // All error messages are in predicate form ("call has a problem") // so that they may be affixed into a subject ("log.Printf "). - pass.ReportRangef(call.Args[idx], "%s %s", name, err) + pass.ReportRangef(formatArg, "%s %s", name, err) return } @@ -560,20 +561,21 @@ func checkPrintf(pass *analysis.Pass, fileVersion string, kind Kind, call *ast.C maxArgIndex := firstArg - 1 anyIndex := false // Check formats against args. - for _, operation := range operations { - if operation.Prec.Index != -1 || - operation.Width.Index != -1 || - operation.Verb.Index != -1 { + for _, op := range operations { + if op.Prec.Index != -1 || + op.Width.Index != -1 || + op.Verb.Index != -1 { anyIndex = true } - if !okPrintfArg(pass, call, &maxArgIndex, firstArg, name, operation) { + rng := opRange(formatArg, op) + if !okPrintfArg(pass, call, rng, &maxArgIndex, firstArg, name, op) { // One error per format is enough. return } - if operation.Verb.Verb == 'w' { + if op.Verb.Verb == 'w' { switch kind { case KindNone, KindPrint, KindPrintf: - pass.Reportf(call.Pos(), "%s does not support error-wrapping directive %%w", name) + pass.ReportRangef(rng, "%s does not support error-wrapping directive %%w", name) return } } @@ -594,6 +596,18 @@ func checkPrintf(pass *analysis.Pass, fileVersion string, kind Kind, call *ast.C } } +// opRange returns the source range for the specified printf operation, +// such as the position of the %v substring of "...%v...". +func opRange(formatArg ast.Expr, op *fmtstr.Operation) analysis.Range { + if lit, ok := formatArg.(*ast.BasicLit); ok { + start, end, err := astutil.RangeInStringLiteral(lit, op.Range.Start, op.Range.End) + if err == nil { + return analysisinternal.Range(start, end) // position of "%v" + } + } + return formatArg // entire format string +} + // printfArgType encodes the types of expressions a printf verb accepts. It is a bitmask. type printfArgType int @@ -657,7 +671,7 @@ var printVerbs = []printVerb{ // okPrintfArg compares the operation to the arguments actually present, // reporting any discrepancies it can discern, maxArgIndex was the index of the highest used index. // If the final argument is ellipsissed, there's little it can do for that. -func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, maxArgIndex *int, firstArg int, name string, operation *fmtstr.Operation) (ok bool) { +func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, maxArgIndex *int, firstArg int, name string, operation *fmtstr.Operation) (ok bool) { verb := operation.Verb.Verb var v printVerb found := false @@ -680,7 +694,7 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, maxArgIndex *int, firs if !formatter { if !found { - pass.ReportRangef(call, "%s format %s has unknown verb %c", name, operation.Text, verb) + pass.ReportRangef(rng, "%s format %s has unknown verb %c", name, operation.Text, verb) return false } for _, flag := range operation.Flags { @@ -690,7 +704,7 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, maxArgIndex *int, firs continue } if !strings.ContainsRune(v.flags, rune(flag)) { - pass.ReportRangef(call, "%s format %s has unrecognized flag %c", name, operation.Text, flag) + pass.ReportRangef(rng, "%s format %s has unrecognized flag %c", name, operation.Text, flag) return false } } @@ -707,7 +721,7 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, maxArgIndex *int, firs // If len(argIndexes)>0, we have something like %.*s and all // indexes in argIndexes must be an integer. for _, argIndex := range argIndexes { - if !argCanBeChecked(pass, call, argIndex, firstArg, operation, name) { + if !argCanBeChecked(pass, call, rng, argIndex, firstArg, operation, name) { return } arg := call.Args[argIndex] @@ -716,7 +730,7 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, maxArgIndex *int, firs if reason != "" { details = " (" + reason + ")" } - pass.ReportRangef(call, "%s format %s uses non-int %s%s as argument of *", name, operation.Text, analysisinternal.Format(pass.Fset, arg), details) + pass.ReportRangef(rng, "%s format %s uses non-int %s%s as argument of *", name, operation.Text, analysisinternal.Format(pass.Fset, arg), details) return false } } @@ -738,12 +752,12 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, maxArgIndex *int, firs // Now check verb's type. verbArgIndex := operation.Verb.ArgIndex - if !argCanBeChecked(pass, call, verbArgIndex, firstArg, operation, name) { + if !argCanBeChecked(pass, call, rng, verbArgIndex, firstArg, operation, name) { return false } arg := call.Args[verbArgIndex] if isFunctionValue(pass, arg) && verb != 'p' && verb != 'T' { - pass.ReportRangef(call, "%s format %s arg %s is a func value, not called", name, operation.Text, analysisinternal.Format(pass.Fset, arg)) + pass.ReportRangef(rng, "%s format %s arg %s is a func value, not called", name, operation.Text, analysisinternal.Format(pass.Fset, arg)) return false } if reason, ok := matchArgType(pass, v.typ, arg); !ok { @@ -755,12 +769,14 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, maxArgIndex *int, firs if reason != "" { details = " (" + reason + ")" } - pass.ReportRangef(call, "%s format %s has arg %s of wrong type %s%s", name, operation.Text, analysisinternal.Format(pass.Fset, arg), typeString, details) + pass.ReportRangef(rng, "%s format %s has arg %s of wrong type %s%s", name, operation.Text, analysisinternal.Format(pass.Fset, arg), typeString, details) return false } - if v.typ&argString != 0 && v.verb != 'T' && !strings.Contains(operation.Flags, "#") { + // Detect recursive formatting via value's String/Error methods. + // The '#' flag suppresses the methods, except with %x, %X, and %q. + if v.typ&argString != 0 && v.verb != 'T' && (!strings.Contains(operation.Flags, "#") || strings.ContainsRune("qxX", v.verb)) { if methodName, ok := recursiveStringer(pass, arg); ok { - pass.ReportRangef(call, "%s format %s with arg %s causes recursive %s method call", name, operation.Text, analysisinternal.Format(pass.Fset, arg), methodName) + pass.ReportRangef(rng, "%s format %s with arg %s causes recursive %s method call", name, operation.Text, analysisinternal.Format(pass.Fset, arg), methodName) return false } } @@ -844,7 +860,7 @@ func isFunctionValue(pass *analysis.Pass, e ast.Expr) bool { // argCanBeChecked reports whether the specified argument is statically present; // it may be beyond the list of arguments or in a terminal slice... argument, which // means we can't see it. -func argCanBeChecked(pass *analysis.Pass, call *ast.CallExpr, argIndex, firstArg int, operation *fmtstr.Operation, name string) bool { +func argCanBeChecked(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, argIndex, firstArg int, operation *fmtstr.Operation, name string) bool { if argIndex <= 0 { // Shouldn't happen, so catch it with prejudice. panic("negative argIndex") @@ -861,7 +877,7 @@ func argCanBeChecked(pass *analysis.Pass, call *ast.CallExpr, argIndex, firstArg // There are bad indexes in the format or there are fewer arguments than the format needs. // This is the argument number relative to the format: Printf("%s", "hi") will give 1 for the "hi". arg := argIndex - firstArg + 1 // People think of arguments as 1-indexed. - pass.ReportRangef(call, "%s format %s reads arg #%d, but call has %v", name, operation.Text, arg, count(len(call.Args)-firstArg, "arg")) + pass.ReportRangef(rng, "%s format %s reads arg #%d, but call has %v", name, operation.Text, arg, count(len(call.Args)-firstArg, "arg")) return false } diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go index a23721cd26..7dbff1e4d8 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go @@ -17,6 +17,7 @@ import ( "golang.org/x/tools/go/ast/inspector" "golang.org/x/tools/internal/analysisinternal" "golang.org/x/tools/internal/typeparams" + "golang.org/x/tools/internal/typesinternal" ) //go:embed doc.go @@ -60,12 +61,11 @@ func describe(typ, inType types.Type, inName string) string { } func typeName(t types.Type) string { - type hasTypeName interface{ Obj() *types.TypeName } // Alias, Named, TypeParam - switch t := t.(type) { - case *types.Basic: - return t.Name() - case hasTypeName: - return t.Obj().Name() + if basic, ok := t.(*types.Basic); ok { + return basic.Name() // may be (e.g.) "untyped int", which has no TypeName + } + if tname := typesinternal.TypeNameFor(t); tname != nil { + return tname.Name() } return "" } diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go index da4afd1b23..cc90f7335e 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go @@ -89,8 +89,7 @@ var checkTagSpaces = map[string]bool{"json": true, "xml": true, "asn1": true} // checkCanonicalFieldTag checks a single struct field tag. func checkCanonicalFieldTag(pass *analysis.Pass, field *types.Var, tag string, seen *namesSeen) { - switch pass.Pkg.Path() { - case "encoding/json", "encoding/json/v2", "encoding/xml": + if strings.HasPrefix(pass.Pkg.Path(), "encoding/") { // These packages know how to use their own APIs. // Sometimes they are testing what happens to incorrect programs. return @@ -108,7 +107,7 @@ func checkCanonicalFieldTag(pass *analysis.Pass, field *types.Var, tag string, s // Embedded struct. Nothing to do for now, but that // may change, depending on what happens with issue 7363. - // TODO(adonovan): investigate, now that that issue is fixed. + // TODO(adonovan): investigate, now that issue is fixed. if field.Anonymous() { return } diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go index f49ac4eb1a..360ba0e74d 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go @@ -17,6 +17,7 @@ import ( "golang.org/x/tools/go/ast/inspector" "golang.org/x/tools/go/types/typeutil" "golang.org/x/tools/internal/analysisinternal" + "golang.org/x/tools/internal/typesinternal" ) //go:embed doc.go @@ -186,7 +187,7 @@ func goAsyncCall(info *types.Info, goStmt *ast.GoStmt, toDecl func(*types.Func) call := goStmt.Call fun := ast.Unparen(call.Fun) - if id := funcIdent(fun); id != nil { + if id := typesinternal.UsedIdent(info, fun); id != nil { if lit := funcLitInScope(id); lit != nil { return &asyncCall{region: lit, async: goStmt, scope: nil, fun: fun} } @@ -217,7 +218,7 @@ func tRunAsyncCall(info *types.Info, call *ast.CallExpr) *asyncCall { return &asyncCall{region: lit, async: call, scope: lit, fun: fun} } - if id := funcIdent(fun); id != nil { + if id := typesinternal.UsedIdent(info, fun); id != nil { if lit := funcLitInScope(id); lit != nil { // function lit in variable? return &asyncCall{region: lit, async: call, scope: lit, fun: fun} } diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go index 88e77fb4fc..db2e5f76d1 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go @@ -8,8 +8,6 @@ import ( "go/ast" "go/types" "slices" - - "golang.org/x/tools/internal/typeparams" ) // AST and types utilities that not specific to testinggoroutines. @@ -52,19 +50,6 @@ func isMethodNamed(f *types.Func, pkgPath string, names ...string) bool { return slices.Contains(names, f.Name()) } -func funcIdent(fun ast.Expr) *ast.Ident { - switch fun := ast.Unparen(fun).(type) { - case *ast.IndexExpr, *ast.IndexListExpr: - x, _, _, _ := typeparams.UnpackIndexExpr(fun) // necessary? - id, _ := x.(*ast.Ident) - return id - case *ast.Ident: - return fun - default: - return nil - } -} - // funcLitInScope returns a FuncLit that id is at least initially assigned to. // // TODO: This is closely tied to id.Obj which is deprecated. diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go index 9f59006ebb..d4e9b02532 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go @@ -447,18 +447,6 @@ func checkExampleName(pass *analysis.Pass, fn *ast.FuncDecl) { } } -type tokenRange struct { - p, e token.Pos -} - -func (r tokenRange) Pos() token.Pos { - return r.p -} - -func (r tokenRange) End() token.Pos { - return r.e -} - func checkTest(pass *analysis.Pass, fn *ast.FuncDecl, prefix string) { // Want functions with 0 results and 1 parameter. if fn.Type.Results != nil && len(fn.Type.Results.List) > 0 || @@ -476,8 +464,9 @@ func checkTest(pass *analysis.Pass, fn *ast.FuncDecl, prefix string) { if tparams := fn.Type.TypeParams; tparams != nil && len(tparams.List) > 0 { // Note: cmd/go/internal/load also errors about TestXXX and BenchmarkXXX functions with type parameters. // We have currently decided to also warn before compilation/package loading. This can help users in IDEs. - at := tokenRange{tparams.Opening, tparams.Closing} - pass.ReportRangef(at, "%s has type parameters: it will not be run by go test as a %sXXX function", fn.Name.Name, prefix) + pass.ReportRangef(analysisinternal.Range(tparams.Opening, tparams.Closing), + "%s has type parameters: it will not be run by go test as a %sXXX function", + fn.Name.Name, prefix) } if !isTestSuffix(fn.Name.Name[len(prefix):]) { diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go index fcf5fbd906..317f034992 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go @@ -188,6 +188,9 @@ func (d *deadState) findDead(stmt ast.Stmt) { case *ast.EmptyStmt: // do not warn about unreachable empty statements default: + // (This call to pass.Report is a frequent source + // of diagnostics beyond EOF in a truncated file; + // see #71659.) d.pass.Report(analysis.Diagnostic{ Pos: stmt.Pos(), End: stmt.End(), diff --git a/upstream/vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go b/upstream/vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go index 932f1347e5..556ffed7d9 100644 --- a/upstream/vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go +++ b/upstream/vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go @@ -26,6 +26,7 @@ import ( "golang.org/x/tools/go/analysis/passes/internal/analysisutil" "golang.org/x/tools/go/ast/inspector" "golang.org/x/tools/go/types/typeutil" + "golang.org/x/tools/internal/analysisinternal" ) //go:embed doc.go @@ -59,23 +60,62 @@ func init() { // The context.With{Cancel,Deadline,Timeout} entries are // effectively redundant wrt the lostcancel analyzer. funcs = stringSetFlag{ - "context.WithCancel": true, - "context.WithDeadline": true, - "context.WithTimeout": true, - "context.WithValue": true, - "errors.New": true, - "fmt.Errorf": true, - "fmt.Sprint": true, - "fmt.Sprintf": true, - "slices.Clip": true, - "slices.Compact": true, - "slices.CompactFunc": true, - "slices.Delete": true, - "slices.DeleteFunc": true, - "slices.Grow": true, - "slices.Insert": true, - "slices.Replace": true, - "sort.Reverse": true, + "context.WithCancel": true, + "context.WithDeadline": true, + "context.WithTimeout": true, + "context.WithValue": true, + "errors.New": true, + "fmt.Append": true, + "fmt.Appendf": true, + "fmt.Appendln": true, + "fmt.Errorf": true, + "fmt.Sprint": true, + "fmt.Sprintf": true, + "fmt.Sprintln": true, + "maps.All": true, + "maps.Clone": true, + "maps.Collect": true, + "maps.Equal": true, + "maps.EqualFunc": true, + "maps.Keys": true, + "maps.Values": true, + "slices.All": true, + "slices.AppendSeq": true, + "slices.Backward": true, + "slices.BinarySearch": true, + "slices.BinarySearchFunc": true, + "slices.Chunk": true, + "slices.Clip": true, + "slices.Clone": true, + "slices.Collect": true, + "slices.Compact": true, + "slices.CompactFunc": true, + "slices.Compare": true, + "slices.CompareFunc": true, + "slices.Concat": true, + "slices.Contains": true, + "slices.ContainsFunc": true, + "slices.Delete": true, + "slices.DeleteFunc": true, + "slices.Equal": true, + "slices.EqualFunc": true, + "slices.Grow": true, + "slices.Index": true, + "slices.IndexFunc": true, + "slices.Insert": true, + "slices.IsSorted": true, + "slices.IsSortedFunc": true, + "slices.Max": true, + "slices.MaxFunc": true, + "slices.Min": true, + "slices.MinFunc": true, + "slices.Repeat": true, + "slices.Replace": true, + "slices.Sorted": true, + "slices.SortedFunc": true, + "slices.SortedStableFunc": true, + "slices.Values": true, + "sort.Reverse": true, } Analyzer.Flags.Var(&funcs, "funcs", "comma-separated list of functions whose results must be used") @@ -114,14 +154,16 @@ func run(pass *analysis.Pass) (any, error) { // method (e.g. foo.String()) if types.Identical(sig, sigNoArgsStringResult) { if stringMethods[fn.Name()] { - pass.Reportf(call.Lparen, "result of (%s).%s call not used", + pass.ReportRangef(analysisinternal.Range(call.Pos(), call.Lparen), + "result of (%s).%s call not used", sig.Recv().Type(), fn.Name()) } } } else { // package-level function (e.g. fmt.Errorf) if pkgFuncs[[2]string{fn.Pkg().Path(), fn.Name()}] { - pass.Reportf(call.Lparen, "result of %s.%s call not used", + pass.ReportRangef(analysisinternal.Range(call.Pos(), call.Lparen), + "result of %s.%s call not used", fn.Pkg().Path(), fn.Name()) } } diff --git a/upstream/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/upstream/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go index 6e34df4613..0fb4e7eea8 100644 --- a/upstream/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go +++ b/upstream/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go @@ -113,7 +113,7 @@ func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Nod // childrenOf elides the FuncType node beneath FuncDecl. // Add it back here for TypeParams, Params, Results, // all FieldLists). But we don't add it back for the "func" token - // even though it is is the tree at FuncDecl.Type.Func. + // even though it is the tree at FuncDecl.Type.Func. if decl, ok := node.(*ast.FuncDecl); ok { if fields, ok := child.(*ast.FieldList); ok && fields != decl.Recv { path = append(path, decl.Type) @@ -207,6 +207,9 @@ func childrenOf(n ast.Node) []ast.Node { return false // no recursion }) + // TODO(adonovan): be more careful about missing (!Pos.Valid) + // tokens in trees produced from invalid input. + // Then add fake Nodes for bare tokens. switch n := n.(type) { case *ast.ArrayType: @@ -226,9 +229,12 @@ func childrenOf(n ast.Node) []ast.Node { children = append(children, tok(n.OpPos, len(n.Op.String()))) case *ast.BlockStmt: - children = append(children, - tok(n.Lbrace, len("{")), - tok(n.Rbrace, len("}"))) + if n.Lbrace.IsValid() { + children = append(children, tok(n.Lbrace, len("{"))) + } + if n.Rbrace.IsValid() { + children = append(children, tok(n.Rbrace, len("}"))) + } case *ast.BranchStmt: children = append(children, @@ -304,9 +310,12 @@ func childrenOf(n ast.Node) []ast.Node { // TODO(adonovan): Field.{Doc,Comment,Tag}? case *ast.FieldList: - children = append(children, - tok(n.Opening, len("(")), // or len("[") - tok(n.Closing, len(")"))) // or len("]") + if n.Opening.IsValid() { + children = append(children, tok(n.Opening, len("("))) + } + if n.Closing.IsValid() { + children = append(children, tok(n.Closing, len(")"))) + } case *ast.File: // TODO test: Doc diff --git a/upstream/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go b/upstream/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go index 5c8dbbb7a3..4ad0549304 100644 --- a/upstream/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go +++ b/upstream/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go @@ -67,6 +67,10 @@ var abort = new(int) // singleton, to signal termination of Apply // // The methods Replace, Delete, InsertBefore, and InsertAfter // can be used to change the AST without disrupting Apply. +// +// This type is not to be confused with [inspector.Cursor] from +// package [golang.org/x/tools/go/ast/inspector], which provides +// stateless navigation of immutable syntax trees. type Cursor struct { parent ast.Node name string diff --git a/upstream/vendor/golang.org/x/tools/internal/astutil/edge/edge.go b/upstream/vendor/golang.org/x/tools/go/ast/edge/edge.go similarity index 100% rename from upstream/vendor/golang.org/x/tools/internal/astutil/edge/edge.go rename to upstream/vendor/golang.org/x/tools/go/ast/edge/edge.go diff --git a/upstream/vendor/golang.org/x/tools/internal/astutil/cursor/cursor.go b/upstream/vendor/golang.org/x/tools/go/ast/inspector/cursor.go similarity index 82% rename from upstream/vendor/golang.org/x/tools/internal/astutil/cursor/cursor.go rename to upstream/vendor/golang.org/x/tools/go/ast/inspector/cursor.go index 3f015998c5..31c8d2f240 100644 --- a/upstream/vendor/golang.org/x/tools/internal/astutil/cursor/cursor.go +++ b/upstream/vendor/golang.org/x/tools/go/ast/inspector/cursor.go @@ -1,18 +1,8 @@ -// Copyright 2024 The Go Authors. All rights reserved. +// Copyright 2025 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build go1.23 - -// Package cursor augments [inspector.Inspector] with [Cursor] -// functionality allowing more flexibility and control during -// inspection. -// -// This package is a temporary private extension of inspector until -// proposal #70859 is accepted, and which point it will be moved into -// the inspector package, and [Root] will become a method of -// Inspector. -package cursor +package inspector import ( "fmt" @@ -20,19 +10,30 @@ import ( "go/token" "iter" "reflect" - "slices" - "golang.org/x/tools/go/ast/inspector" - "golang.org/x/tools/internal/astutil/edge" + "golang.org/x/tools/go/ast/edge" ) // A Cursor represents an [ast.Node]. It is immutable. // // Two Cursors compare equal if they represent the same node. // -// Call [Root] to obtain a valid cursor. +// Call [Inspector.Root] to obtain a valid cursor for the virtual root +// node of the traversal. +// +// Use the following methods to navigate efficiently around the tree: +// - for ancestors, use [Cursor.Parent] and [Cursor.Enclosing]; +// - for children, use [Cursor.Child], [Cursor.Children], +// [Cursor.FirstChild], and [Cursor.LastChild]; +// - for siblings, use [Cursor.PrevSibling] and [Cursor.NextSibling]; +// - for descendants, use [Cursor.FindByPos], [Cursor.FindNode], +// [Cursor.Inspect], and [Cursor.Preorder]. +// +// Use the [Cursor.ChildAt] and [Cursor.ParentEdge] methods for +// information about the edges in a tree: which field (and slice +// element) of the parent node holds the child. type Cursor struct { - in *inspector.Inspector + in *Inspector index int32 // index of push node; -1 for virtual root node } @@ -40,27 +41,29 @@ type Cursor struct { // whose children are the files provided to [New]. // // Its [Cursor.Node] and [Cursor.Stack] methods return nil. -func Root(in *inspector.Inspector) Cursor { +func (in *Inspector) Root() Cursor { return Cursor{in, -1} } // At returns the cursor at the specified index in the traversal, // which must have been obtained from [Cursor.Index] on a Cursor -// belonging to the same Inspector. -func At(in *inspector.Inspector, index int32) Cursor { +// belonging to the same Inspector (see [Cursor.Inspector]). +func (in *Inspector) At(index int32) Cursor { if index < 0 { panic("negative index") } - events := events(in) - if int(index) >= len(events) { + if int(index) >= len(in.events) { panic("index out of range for this inspector") } - if events[index].index < index { + if in.events[index].index < index { panic("invalid index") // (a push, not a pop) } return Cursor{in, index} } +// Inspector returns the cursor's Inspector. +func (c Cursor) Inspector() *Inspector { return c.in } + // Index returns the index of this cursor position within the package. // // Clients should not assume anything about the numeric Index value @@ -81,7 +84,7 @@ func (c Cursor) Node() ast.Node { if c.index < 0 { return nil } - return c.events()[c.index].node + return c.in.events[c.index].node } // String returns information about the cursor's node, if any. @@ -98,9 +101,9 @@ func (c Cursor) String() string { // indices return the [start, end) half-open interval of event indices. func (c Cursor) indices() (int32, int32) { if c.index < 0 { - return 0, int32(len(c.events())) // root: all events + return 0, int32(len(c.in.events)) // root: all events } else { - return c.index, c.events()[c.index].index + 1 // just one subtree + return c.index, c.in.events[c.index].index + 1 // just one subtree } } @@ -121,7 +124,7 @@ func (c Cursor) Preorder(types ...ast.Node) iter.Seq[Cursor] { mask := maskOf(types) return func(yield func(Cursor) bool) { - events := c.events() + events := c.in.events for i, limit := c.indices(); i < limit; { ev := events[i] @@ -142,10 +145,9 @@ func (c Cursor) Preorder(types ...ast.Node) iter.Seq[Cursor] { } // Inspect visits the nodes of the subtree represented by c in -// depth-first order. It calls f(n, true) for each node n before it +// depth-first order. It calls f(n) for each node n before it // visits n's children. If f returns true, Inspect invokes f -// recursively for each of the non-nil children of the node, followed -// by a call of f(n, false). +// recursively for each of the non-nil children of the node. // // Each node is represented by a Cursor that allows access to the // Node, but may also be used to start a new traversal, or to obtain @@ -155,54 +157,27 @@ func (c Cursor) Preorder(types ...ast.Node) iter.Seq[Cursor] { // The types argument, if non-empty, enables type-based filtering of // events. The function f if is called only for nodes whose type // matches an element of the types slice. -func (c Cursor) Inspect(types []ast.Node, f func(c Cursor, push bool) (descend bool)) { +func (c Cursor) Inspect(types []ast.Node, f func(c Cursor) (descend bool)) { mask := maskOf(types) - events := c.events() + events := c.in.events for i, limit := c.indices(); i < limit; { ev := events[i] if ev.index > i { // push pop := ev.index - if ev.typ&mask != 0 && !f(Cursor{c.in, i}, true) { - i = pop + 1 // past the pop - continue - } - if events[pop].typ&mask == 0 { - // Subtree does not contain types: skip to pop. - i = pop + if ev.typ&mask != 0 && !f(Cursor{c.in, i}) || + events[pop].typ&mask == 0 { + // The user opted not to descend, or the + // subtree does not contain types: + // skip past the pop. + i = pop + 1 continue } - } else { - // pop - push := ev.index - if events[push].typ&mask != 0 { - f(Cursor{c.in, push}, false) - } } i++ } } -// Stack returns the stack of enclosing nodes, outermost first: -// from the [ast.File] down to the current cursor's node. -// -// To amortize allocation, it appends to the provided slice, which -// must be empty. -// -// Stack must not be called on the Root node. -func (c Cursor) Stack(stack []Cursor) []Cursor { - if len(stack) > 0 { - panic("stack is non-empty") - } - if c.index < 0 { - panic("Cursor.Stack called on Root node") - } - - stack = slices.AppendSeq(stack, c.Enclosing()) - slices.Reverse(stack) - return stack -} - // Enclosing returns an iterator over the nodes enclosing the current // current node, starting with the Cursor itself. // @@ -219,7 +194,7 @@ func (c Cursor) Enclosing(types ...ast.Node) iter.Seq[Cursor] { mask := maskOf(types) return func(yield func(Cursor) bool) { - events := c.events() + events := c.in.events for i := c.index; i >= 0; i = events[i].parent { if events[i].typ&mask != 0 && !yield(Cursor{c.in, i}) { break @@ -236,7 +211,7 @@ func (c Cursor) Parent() Cursor { panic("Cursor.Parent called on Root node") } - return Cursor{c.in, c.events()[c.index].parent} + return Cursor{c.in, c.in.events[c.index].parent} } // ParentEdge returns the identity of the field in the parent node @@ -253,7 +228,7 @@ func (c Cursor) ParentEdge() (edge.Kind, int) { if c.index < 0 { panic("Cursor.ParentEdge called on Root node") } - events := c.events() + events := c.in.events pop := events[c.index].index return unpackEdgeKindAndIndex(events[pop].parent) } @@ -270,7 +245,7 @@ func (c Cursor) ChildAt(k edge.Kind, idx int) Cursor { target := packEdgeKindAndIndex(k, idx) // Unfortunately there's no shortcut to looping. - events := c.events() + events := c.in.events i := c.index + 1 for { pop := events[i].index @@ -303,7 +278,7 @@ func (c Cursor) Child(n ast.Node) Cursor { } else { // optimized implementation - events := c.events() + events := c.in.events for i := c.index + 1; events[i].index > i; i = events[i].index + 1 { if events[i].node == n { return Cursor{c.in, i} @@ -326,7 +301,7 @@ func (c Cursor) NextSibling() (Cursor, bool) { panic("Cursor.NextSibling called on Root node") } - events := c.events() + events := c.in.events i := events[c.index].index + 1 // after corresponding pop if i < int32(len(events)) { if events[i].index > i { // push? @@ -349,7 +324,7 @@ func (c Cursor) PrevSibling() (Cursor, bool) { panic("Cursor.PrevSibling called on Root node") } - events := c.events() + events := c.in.events i := c.index - 1 if i >= 0 { if j := events[i].index; j < i { // pop? @@ -362,7 +337,7 @@ func (c Cursor) PrevSibling() (Cursor, bool) { // FirstChild returns the first direct child of the current node, // or zero if it has no children. func (c Cursor) FirstChild() (Cursor, bool) { - events := c.events() + events := c.in.events i := c.index + 1 // i=0 if c is root if i < int32(len(events)) && events[i].index > i { // push? return Cursor{c.in, i}, true @@ -373,7 +348,7 @@ func (c Cursor) FirstChild() (Cursor, bool) { // LastChild returns the last direct child of the current node, // or zero if it has no children. func (c Cursor) LastChild() (Cursor, bool) { - events := c.events() + events := c.in.events if c.index < 0 { // root? if len(events) > 0 { // return push of final event (a pop) @@ -403,11 +378,11 @@ func (c Cursor) LastChild() (Cursor, bool) { // of expressions and statements. Other nodes that have "uncontained" // list fields include: // -// - [ast.ValueSpec] (Names, Values) -// - [ast.CompositeLit] (Type, Elts) -// - [ast.IndexListExpr] (X, Indices) -// - [ast.CallExpr] (Fun, Args) -// - [ast.AssignStmt] (Lhs, Rhs) +// - [ast.ValueSpec] (Names, Values) +// - [ast.CompositeLit] (Type, Elts) +// - [ast.IndexListExpr] (X, Indices) +// - [ast.CallExpr] (Fun, Args) +// - [ast.AssignStmt] (Lhs, Rhs) // // So, do not assume that the previous sibling of an ast.Stmt is also // an ast.Stmt, or if it is, that they are executed sequentially, @@ -432,7 +407,7 @@ func (c Cursor) Contains(c2 Cursor) bool { if c.in != c2.in { panic("different inspectors") } - events := c.events() + events := c.in.events return c.index <= c2.index && events[c2.index].index <= events[c.index].index } @@ -453,10 +428,10 @@ func (c Cursor) FindNode(n ast.Node) (Cursor, bool) { // TODO(adonovan): opt: should we assume Node.Pos is accurate // and combine type-based filtering with position filtering - // like FindPos? + // like FindByPos? mask := maskOf([]ast.Node{n}) - events := c.events() + events := c.in.events for i, limit := c.indices(); i < limit; i++ { ev := events[i] @@ -474,7 +449,7 @@ func (c Cursor) FindNode(n ast.Node) (Cursor, bool) { return Cursor{}, false } -// FindPos returns the cursor for the innermost node n in the tree +// FindByPos returns the cursor for the innermost node n in the tree // rooted at c such that n.Pos() <= start && end <= n.End(). // (For an *ast.File, it uses the bounds n.FileStart-n.FileEnd.) // @@ -483,11 +458,11 @@ func (c Cursor) FindNode(n ast.Node) (Cursor, bool) { // // See also [astutil.PathEnclosingInterval], which // tolerates adjoining whitespace. -func (c Cursor) FindPos(start, end token.Pos) (Cursor, bool) { +func (c Cursor) FindByPos(start, end token.Pos) (Cursor, bool) { if end < start { panic("end < start") } - events := c.events() + events := c.in.events // This algorithm could be implemented using c.Inspect, // but it is about 2.5x slower. diff --git a/upstream/vendor/golang.org/x/tools/go/ast/inspector/inspector.go b/upstream/vendor/golang.org/x/tools/go/ast/inspector/inspector.go index 1da4a361f0..a703cdfcf9 100644 --- a/upstream/vendor/golang.org/x/tools/go/ast/inspector/inspector.go +++ b/upstream/vendor/golang.org/x/tools/go/ast/inspector/inspector.go @@ -13,10 +13,19 @@ // This representation is sometimes called a "balanced parenthesis tree." // // Experiments suggest the inspector's traversals are about 2.5x faster -// than ast.Inspect, but it may take around 5 traversals for this +// than [ast.Inspect], but it may take around 5 traversals for this // benefit to amortize the inspector's construction cost. // If efficiency is the primary concern, do not use Inspector for // one-off traversals. +// +// The [Cursor] type provides a more flexible API for efficient +// navigation of syntax trees in all four "cardinal directions". For +// example, traversals may be nested, so you can find each node of +// type A and then search within it for nodes of type B. Or you can +// traverse from a node to its immediate neighbors: its parent, its +// previous and next sibling, or its first and last child. We +// recommend using methods of Cursor in preference to Inspector where +// possible. package inspector // There are four orthogonal features in a traversal: @@ -37,9 +46,8 @@ package inspector import ( "go/ast" - _ "unsafe" - "golang.org/x/tools/internal/astutil/edge" + "golang.org/x/tools/go/ast/edge" ) // An Inspector provides methods for inspecting @@ -48,18 +56,12 @@ type Inspector struct { events []event } -//go:linkname events -func events(in *Inspector) []event { return in.events } - -//go:linkname packEdgeKindAndIndex func packEdgeKindAndIndex(ek edge.Kind, index int) int32 { return int32(uint32(index+1)<<7 | uint32(ek)) } // unpackEdgeKindAndIndex unpacks the edge kind and edge index (within // an []ast.Node slice) from the parent field of a pop event. -// -//go:linkname unpackEdgeKindAndIndex func unpackEdgeKindAndIndex(x int32) (edge.Kind, int) { // The "parent" field of a pop node holds the // edge Kind in the lower 7 bits and the index+1 @@ -83,15 +85,21 @@ type event struct { // TODO: Experiment with storing only the second word of event.node (unsafe.Pointer). // Type can be recovered from the sole bit in typ. +// [Tried this, wasn't faster. --adonovan] // Preorder visits all the nodes of the files supplied to New in // depth-first order. It calls f(n) for each node n before it visits // n's children. // -// The complete traversal sequence is determined by ast.Inspect. +// The complete traversal sequence is determined by [ast.Inspect]. // The types argument, if non-empty, enables type-based filtering of // events. The function f is called only for nodes whose type // matches an element of the types slice. +// +// The [Cursor.Preorder] method provides a richer alternative interface. +// Example: +// +// for c := range in.Root().Preorder(types) { ... } func (in *Inspector) Preorder(types []ast.Node, f func(ast.Node)) { // Because it avoids postorder calls to f, and the pruning // check, Preorder is almost twice as fast as Nodes. The two @@ -131,10 +139,18 @@ func (in *Inspector) Preorder(types []ast.Node, f func(ast.Node)) { // of the non-nil children of the node, followed by a call of // f(n, false). // -// The complete traversal sequence is determined by ast.Inspect. +// The complete traversal sequence is determined by [ast.Inspect]. // The types argument, if non-empty, enables type-based filtering of // events. The function f if is called only for nodes whose type // matches an element of the types slice. +// +// The [Cursor.Inspect] method provides a richer alternative interface. +// Example: +// +// in.Root().Inspect(types, func(c Cursor) bool { +// ... +// return true +// } func (in *Inspector) Nodes(types []ast.Node, f func(n ast.Node, push bool) (proceed bool)) { mask := maskOf(types) for i := int32(0); i < int32(len(in.events)); { @@ -168,6 +184,15 @@ func (in *Inspector) Nodes(types []ast.Node, f func(n ast.Node, push bool) (proc // supplies each call to f an additional argument, the current // traversal stack. The stack's first element is the outermost node, // an *ast.File; its last is the innermost, n. +// +// The [Cursor.Inspect] method provides a richer alternative interface. +// Example: +// +// in.Root().Inspect(types, func(c Cursor) bool { +// stack := slices.Collect(c.Enclosing()) +// ... +// return true +// }) func (in *Inspector) WithStack(types []ast.Node, f func(n ast.Node, push bool, stack []ast.Node) (proceed bool)) { mask := maskOf(types) var stack []ast.Node @@ -233,7 +258,7 @@ type visitor struct { type item struct { index int32 // index of current node's push event parentIndex int32 // index of parent node's push event - typAccum uint64 // accumulated type bits of current node's descendents + typAccum uint64 // accumulated type bits of current node's descendants edgeKindAndIndex int32 // edge.Kind and index, bit packed } diff --git a/upstream/vendor/golang.org/x/tools/go/ast/inspector/typeof.go b/upstream/vendor/golang.org/x/tools/go/ast/inspector/typeof.go index 9778448457..9852331a3d 100644 --- a/upstream/vendor/golang.org/x/tools/go/ast/inspector/typeof.go +++ b/upstream/vendor/golang.org/x/tools/go/ast/inspector/typeof.go @@ -12,8 +12,6 @@ package inspector import ( "go/ast" "math" - - _ "unsafe" ) const ( @@ -217,7 +215,6 @@ func typeOf(n ast.Node) uint64 { return 0 } -//go:linkname maskOf func maskOf(nodes []ast.Node) uint64 { if len(nodes) == 0 { return math.MaxUint64 // match all node types diff --git a/upstream/vendor/golang.org/x/tools/go/ast/inspector/walk.go b/upstream/vendor/golang.org/x/tools/go/ast/inspector/walk.go index 5a42174a0a..5f1c93c8a7 100644 --- a/upstream/vendor/golang.org/x/tools/go/ast/inspector/walk.go +++ b/upstream/vendor/golang.org/x/tools/go/ast/inspector/walk.go @@ -13,7 +13,7 @@ import ( "fmt" "go/ast" - "golang.org/x/tools/internal/astutil/edge" + "golang.org/x/tools/go/ast/edge" ) func walkList[N ast.Node](v *visitor, ek edge.Kind, list []N) { diff --git a/upstream/vendor/golang.org/x/tools/go/loader/doc.go b/upstream/vendor/golang.org/x/tools/go/loader/doc.go index e35b1fd7d9..769a1fcf7c 100644 --- a/upstream/vendor/golang.org/x/tools/go/loader/doc.go +++ b/upstream/vendor/golang.org/x/tools/go/loader/doc.go @@ -164,7 +164,7 @@ package loader // entry is created in this cache by startLoad the first time the // package is imported. The first goroutine to request an entry becomes // responsible for completing the task and broadcasting completion to -// subsequent requestors, which block until then. +// subsequent requesters, which block until then. // // Type checking occurs in (parallel) postorder: we cannot type-check a // set of files until we have loaded and type-checked all of their diff --git a/upstream/vendor/golang.org/x/tools/go/packages/doc.go b/upstream/vendor/golang.org/x/tools/go/packages/doc.go index f1931d10ee..366aab6b2c 100644 --- a/upstream/vendor/golang.org/x/tools/go/packages/doc.go +++ b/upstream/vendor/golang.org/x/tools/go/packages/doc.go @@ -76,6 +76,8 @@ uninterpreted to Load, so that it can interpret them according to the conventions of the underlying build system. See the Example function for typical usage. +See also [golang.org/x/tools/go/packages/internal/linecount] +for an example application. # The driver protocol diff --git a/upstream/vendor/golang.org/x/tools/go/packages/golist.go b/upstream/vendor/golang.org/x/tools/go/packages/golist.go index 0458b4f9c4..89f89dd2dc 100644 --- a/upstream/vendor/golang.org/x/tools/go/packages/golist.go +++ b/upstream/vendor/golang.org/x/tools/go/packages/golist.go @@ -224,13 +224,22 @@ extractQueries: return response.dr, nil } +// abs returns an absolute representation of path, based on cfg.Dir. +func (cfg *Config) abs(path string) (string, error) { + if filepath.IsAbs(path) { + return path, nil + } + // In case cfg.Dir is relative, pass it to filepath.Abs. + return filepath.Abs(filepath.Join(cfg.Dir, path)) +} + func (state *golistState) runContainsQueries(response *responseDeduper, queries []string) error { for _, query := range queries { // TODO(matloob): Do only one query per directory. fdir := filepath.Dir(query) // Pass absolute path of directory to go list so that it knows to treat it as a directory, // not a package path. - pattern, err := filepath.Abs(fdir) + pattern, err := state.cfg.abs(fdir) if err != nil { return fmt.Errorf("could not determine absolute path of file= query path %q: %v", query, err) } @@ -703,9 +712,8 @@ func (state *golistState) getGoVersion() (int, error) { // getPkgPath finds the package path of a directory if it's relative to a root // directory. func (state *golistState) getPkgPath(dir string) (string, bool, error) { - absDir, err := filepath.Abs(dir) - if err != nil { - return "", false, err + if !filepath.IsAbs(dir) { + panic("non-absolute dir passed to getPkgPath") } roots, err := state.determineRootDirs() if err != nil { @@ -715,7 +723,7 @@ func (state *golistState) getPkgPath(dir string) (string, bool, error) { for rdir, rpath := range roots { // Make sure that the directory is in the module, // to avoid creating a path relative to another module. - if !strings.HasPrefix(absDir, rdir) { + if !strings.HasPrefix(dir, rdir) { continue } // TODO(matloob): This doesn't properly handle symlinks. @@ -851,8 +859,6 @@ func (state *golistState) cfgInvocation() gocommand.Invocation { cfg := state.cfg return gocommand.Invocation{ BuildFlags: cfg.BuildFlags, - ModFile: cfg.modFile, - ModFlag: cfg.modFlag, CleanEnv: cfg.Env != nil, Env: cfg.Env, Logf: cfg.Logf, diff --git a/upstream/vendor/golang.org/x/tools/go/packages/golist_overlay.go b/upstream/vendor/golang.org/x/tools/go/packages/golist_overlay.go index d823c474ad..d9d5a45cd4 100644 --- a/upstream/vendor/golang.org/x/tools/go/packages/golist_overlay.go +++ b/upstream/vendor/golang.org/x/tools/go/packages/golist_overlay.go @@ -55,7 +55,7 @@ func (state *golistState) determineRootDirsModules() (map[string]string, error) } if mod.Dir != "" && mod.Path != "" { // This is a valid module; add it to the map. - absDir, err := filepath.Abs(mod.Dir) + absDir, err := state.cfg.abs(mod.Dir) if err != nil { return nil, err } diff --git a/upstream/vendor/golang.org/x/tools/go/packages/packages.go b/upstream/vendor/golang.org/x/tools/go/packages/packages.go index 6665a04c17..060ab08efb 100644 --- a/upstream/vendor/golang.org/x/tools/go/packages/packages.go +++ b/upstream/vendor/golang.org/x/tools/go/packages/packages.go @@ -229,14 +229,6 @@ type Config struct { // consistent package metadata about unsaved files. However, // drivers may vary in their level of support for overlays. Overlay map[string][]byte - - // -- Hidden configuration fields only for use in x/tools -- - - // modFile will be used for -modfile in go command invocations. - modFile string - - // modFlag will be used for -modfile in go command invocations. - modFlag string } // Load loads and returns the Go packages named by the given patterns. @@ -569,12 +561,6 @@ func init() { packagesinternal.GetDepsErrors = func(p any) []*packagesinternal.PackageError { return p.(*Package).depsErrors } - packagesinternal.SetModFile = func(config any, value string) { - config.(*Config).modFile = value - } - packagesinternal.SetModFlag = func(config any, value string) { - config.(*Config).modFlag = value - } packagesinternal.TypecheckCgo = int(typecheckCgo) packagesinternal.DepsErrors = int(needInternalDepsErrors) } diff --git a/upstream/vendor/golang.org/x/tools/go/ssa/builder.go b/upstream/vendor/golang.org/x/tools/go/ssa/builder.go index 84ccbc0927..a5ef8fb40d 100644 --- a/upstream/vendor/golang.org/x/tools/go/ssa/builder.go +++ b/upstream/vendor/golang.org/x/tools/go/ssa/builder.go @@ -25,7 +25,7 @@ package ssa // populating fields such as Function.Body, .Params, and others. // // Building may create additional methods, including: -// - wrapper methods (e.g. for embeddding, or implicit &recv) +// - wrapper methods (e.g. for embedding, or implicit &recv) // - bound method closures (e.g. for use(recv.f)) // - thunks (e.g. for use(I.f) or use(T.f)) // - generic instances (e.g. to produce f[int] from f[any]). @@ -138,7 +138,7 @@ type builder struct { finished int // finished is the length of the prefix of fns containing built functions. // The task of building shared functions within the builder. - // Shared functions are ones the the builder may either create or lookup. + // Shared functions are ones the builder may either create or lookup. // These may be built by other builders in parallel. // The task is done when the builder has finished iterating, and it // waits for all shared functions to finish building. @@ -2920,6 +2920,9 @@ func (b *builder) buildParamsOnly(fn *Function) { for i, n := 0, params.Len(); i < n; i++ { fn.addParamVar(params.At(i)) } + + // clear out other function state (keep consistent with finishBody) + fn.subst = nil } // buildFromSyntax builds fn.Body from fn.syntax, which must be non-nil. diff --git a/upstream/vendor/golang.org/x/tools/go/ssa/func.go b/upstream/vendor/golang.org/x/tools/go/ssa/func.go index 2d52309b62..f48bd7184a 100644 --- a/upstream/vendor/golang.org/x/tools/go/ssa/func.go +++ b/upstream/vendor/golang.org/x/tools/go/ssa/func.go @@ -386,6 +386,8 @@ func (f *Function) finishBody() { f.results = nil // (used by lifting) f.deferstack = nil // (used by lifting) f.vars = nil // (used by lifting) + + // clear out other function state (keep consistent with buildParamsOnly) f.subst = nil numberRegisters(f) // uses f.namedRegisters diff --git a/upstream/vendor/golang.org/x/tools/go/ssa/sanity.go b/upstream/vendor/golang.org/x/tools/go/ssa/sanity.go index b11680a1e1..c47a137c88 100644 --- a/upstream/vendor/golang.org/x/tools/go/ssa/sanity.go +++ b/upstream/vendor/golang.org/x/tools/go/ssa/sanity.go @@ -27,9 +27,10 @@ type sanity struct { } // sanityCheck performs integrity checking of the SSA representation -// of the function fn and returns true if it was valid. Diagnostics -// are written to reporter if non-nil, os.Stderr otherwise. Some -// diagnostics are only warnings and do not imply a negative result. +// of the function fn (which must have been "built") and returns true +// if it was valid. Diagnostics are written to reporter if non-nil, +// os.Stderr otherwise. Some diagnostics are only warnings and do not +// imply a negative result. // // Sanity-checking is intended to facilitate the debugging of code // transformation passes. diff --git a/upstream/vendor/golang.org/x/tools/go/ssa/subst.go b/upstream/vendor/golang.org/x/tools/go/ssa/subst.go index b4ea16854e..362dce1267 100644 --- a/upstream/vendor/golang.org/x/tools/go/ssa/subst.go +++ b/upstream/vendor/golang.org/x/tools/go/ssa/subst.go @@ -543,7 +543,7 @@ func (subst *subster) signature(t *types.Signature) types.Type { // We are choosing not to support tparams.Len() > 0 until a need has been observed in practice. // // There are some known usages for types.Types coming from types.{Eval,CheckExpr}. - // To support tparams.Len() > 0, we just need to do the following [psuedocode]: + // To support tparams.Len() > 0, we just need to do the following [pseudocode]: // targs := {subst.replacements[tparams[i]]]}; Instantiate(ctxt, t, targs, false) assert(tparams.Len() == 0, "Substituting types.Signatures with generic functions are currently unsupported.") diff --git a/upstream/vendor/golang.org/x/tools/go/ssa/util.go b/upstream/vendor/golang.org/x/tools/go/ssa/util.go index e53b31ff3b..932eb6cb0e 100644 --- a/upstream/vendor/golang.org/x/tools/go/ssa/util.go +++ b/upstream/vendor/golang.org/x/tools/go/ssa/util.go @@ -25,7 +25,7 @@ type unit struct{} //// Sanity checking utilities -// assert panics with the mesage msg if p is false. +// assert panics with the message msg if p is false. // Avoid combining with expensive string formatting. func assert(p bool, msg string) { if !p { diff --git a/upstream/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/upstream/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go index 16ed3c1780..d3c2913bef 100644 --- a/upstream/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ b/upstream/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -603,7 +603,7 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { type hasTypeParams interface { TypeParams() *types.TypeParamList } - // abstraction of *types.{Named,TypeParam} + // abstraction of *types.{Alias,Named,TypeParam} type hasObj interface { Obj() *types.TypeName } diff --git a/upstream/vendor/golang.org/x/tools/go/types/typeutil/callee.go b/upstream/vendor/golang.org/x/tools/go/types/typeutil/callee.go index 53b7133930..5f10f56cba 100644 --- a/upstream/vendor/golang.org/x/tools/go/types/typeutil/callee.go +++ b/upstream/vendor/golang.org/x/tools/go/types/typeutil/callee.go @@ -48,7 +48,7 @@ func StaticCallee(info *types.Info, call *ast.CallExpr) *types.Func { // This function should live in typesinternal, but cannot because it would // create an import cycle. // -//go:linkname usedIdent +//go:linkname usedIdent golang.org/x/tools/go/types/typeutil.usedIdent func usedIdent(info *types.Info, e ast.Expr) *ast.Ident { if info.Types == nil || info.Uses == nil { panic("one of info.Types or info.Uses is nil; both must be populated") @@ -78,7 +78,7 @@ func usedIdent(info *types.Info, e ast.Expr) *ast.Ident { // interfaceMethod reports whether its argument is a method of an interface. // This function should live in typesinternal, but cannot because it would create an import cycle. // -//go:linkname interfaceMethod +//go:linkname interfaceMethod golang.org/x/tools/go/types/typeutil.interfaceMethod func interfaceMethod(f *types.Func) bool { recv := f.Signature().Recv() return recv != nil && types.IsInterface(recv.Type()) diff --git a/upstream/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go b/upstream/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go index b22e314cf4..e46aab02d6 100644 --- a/upstream/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go +++ b/upstream/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go @@ -22,7 +22,6 @@ import ( "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/ast/inspector" - "golang.org/x/tools/internal/astutil/cursor" "golang.org/x/tools/internal/typesinternal" ) @@ -280,7 +279,15 @@ func AddImport(info *types.Info, file *ast.File, preferredName, pkgpath, member // If the first decl is an import group, add this new import at the end. if gd, ok := before.(*ast.GenDecl); ok && gd.Tok == token.IMPORT && gd.Rparen.IsValid() { pos = gd.Rparen - newText = "\t" + newText + "\n" + // if it's a std lib, we should append it at the beginning of import group. + // otherwise we may see the std package is put at the last behind a 3rd module which doesn't follow our convention. + // besides, gofmt doesn't help in this case. + if IsStdPackage(pkgpath) && len(gd.Specs) != 0 { + pos = gd.Specs[0].Pos() + newText += "\n\t" + } else { + newText = "\t" + newText + "\n" + } } else { pos = before.Pos() newText = "import " + newText + "\n\n" @@ -305,10 +312,10 @@ func FreshName(scope *types.Scope, pos token.Pos, preferred string) string { return newName } -// Format returns a string representation of the expression e. -func Format(fset *token.FileSet, e ast.Expr) string { +// Format returns a string representation of the node n. +func Format(fset *token.FileSet, n ast.Node) string { var buf strings.Builder - printer.Fprint(&buf, fset, e) // ignore errors + printer.Fprint(&buf, fset, n) // ignore errors return buf.String() } @@ -431,11 +438,25 @@ func validateFix(fset *token.FileSet, fix *analysis.SuggestedFix) error { if file == nil { return fmt.Errorf("no token.File for TextEdit.Pos (%v)", edit.Pos) } + fileEnd := token.Pos(file.Base() + file.Size()) if end := edit.End; end.IsValid() { if end < start { return fmt.Errorf("TextEdit.Pos (%v) > TextEdit.End (%v)", edit.Pos, edit.End) } endFile := fset.File(end) + if endFile != file && end < fileEnd+10 { + // Relax the checks below in the special case when the end position + // is only slightly beyond EOF, as happens when End is computed + // (as in ast.{Struct,Interface}Type) rather than based on + // actual token positions. In such cases, truncate end to EOF. + // + // This is a workaround for #71659; see: + // https://github.com/golang/go/issues/71659#issuecomment-2651606031 + // A better fix would be more faithful recording of token + // positions (or their absence) in the AST. + edit.End = fileEnd + continue + } if endFile == nil { return fmt.Errorf("no token.File for TextEdit.End (%v; File(start).FileEnd is %d)", end, file.Base()+file.Size()) } @@ -446,7 +467,7 @@ func validateFix(fset *token.FileSet, fix *analysis.SuggestedFix) error { } else { edit.End = start // update the SuggestedFix } - if eof := token.Pos(file.Base() + file.Size()); edit.End > eof { + if eof := fileEnd; edit.End > eof { return fmt.Errorf("end is (%v) beyond end of file (%v)", edit.End, eof) } @@ -504,7 +525,7 @@ func CanImport(from, to string) bool { func DeleteStmt(fset *token.FileSet, astFile *ast.File, stmt ast.Stmt, report func(string, ...any)) []analysis.TextEdit { // TODO: pass in the cursor to a ast.Stmt. callers should provide the Cursor insp := inspector.New([]*ast.File{astFile}) - root := cursor.Root(insp) + root := insp.Root() cstmt, ok := root.FindNode(stmt) if !ok { report("%s not found in file", stmt.Pos()) @@ -598,8 +619,8 @@ Outer: // otherwise remove the line edit := analysis.TextEdit{Pos: stmt.Pos(), End: stmt.End()} if from.IsValid() || to.IsValid() { - // remove just the statment. - // we can't tell if there is a ; or whitespace right after the statment + // remove just the statement. + // we can't tell if there is a ; or whitespace right after the statement // ideally we'd like to remove the former and leave the latter // (if gofmt has run, there likely won't be a ;) // In type switches we know there's a semicolon somewhere after the statement, @@ -637,3 +658,26 @@ func Comments(file *ast.File, start, end token.Pos) iter.Seq[*ast.Comment] { } } } + +// IsStdPackage reports whether the specified package path belongs to a +// package in the standard library (including internal dependencies). +func IsStdPackage(path string) bool { + // A standard package has no dot in its first segment. + // (It may yet have a dot, e.g. "vendor/golang.org/x/foo".) + slash := strings.IndexByte(path, '/') + if slash < 0 { + slash = len(path) + } + return !strings.Contains(path[:slash], ".") && path != "testdata" +} + +// Range returns an [analysis.Range] for the specified start and end positions. +func Range(pos, end token.Pos) analysis.Range { + return tokenRange{pos, end} +} + +// tokenRange is an implementation of the [analysis.Range] interface. +type tokenRange struct{ StartPos, EndPos token.Pos } + +func (r tokenRange) Pos() token.Pos { return r.StartPos } +func (r tokenRange) End() token.Pos { return r.EndPos } diff --git a/upstream/vendor/golang.org/x/tools/internal/astutil/clone.go b/upstream/vendor/golang.org/x/tools/internal/astutil/clone.go new file mode 100644 index 0000000000..2c9b6bb484 --- /dev/null +++ b/upstream/vendor/golang.org/x/tools/internal/astutil/clone.go @@ -0,0 +1,71 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package astutil + +import ( + "go/ast" + "reflect" +) + +// CloneNode returns a deep copy of a Node. +// It omits pointers to ast.{Scope,Object} variables. +func CloneNode[T ast.Node](n T) T { + return cloneNode(n).(T) +} + +func cloneNode(n ast.Node) ast.Node { + var clone func(x reflect.Value) reflect.Value + set := func(dst, src reflect.Value) { + src = clone(src) + if src.IsValid() { + dst.Set(src) + } + } + clone = func(x reflect.Value) reflect.Value { + switch x.Kind() { + case reflect.Pointer: + if x.IsNil() { + return x + } + // Skip fields of types potentially involved in cycles. + switch x.Interface().(type) { + case *ast.Object, *ast.Scope: + return reflect.Zero(x.Type()) + } + y := reflect.New(x.Type().Elem()) + set(y.Elem(), x.Elem()) + return y + + case reflect.Struct: + y := reflect.New(x.Type()).Elem() + for i := 0; i < x.Type().NumField(); i++ { + set(y.Field(i), x.Field(i)) + } + return y + + case reflect.Slice: + if x.IsNil() { + return x + } + y := reflect.MakeSlice(x.Type(), x.Len(), x.Cap()) + for i := 0; i < x.Len(); i++ { + set(y.Index(i), x.Index(i)) + } + return y + + case reflect.Interface: + y := reflect.New(x.Type()).Elem() + set(y, x.Elem()) + return y + + case reflect.Array, reflect.Chan, reflect.Func, reflect.Map, reflect.UnsafePointer: + panic(x) // unreachable in AST + + default: + return x // bool, string, number + } + } + return clone(reflect.ValueOf(n)).Interface().(ast.Node) +} diff --git a/upstream/vendor/golang.org/x/tools/internal/astutil/comment.go b/upstream/vendor/golang.org/x/tools/internal/astutil/comment.go new file mode 100644 index 0000000000..ee4be23f22 --- /dev/null +++ b/upstream/vendor/golang.org/x/tools/internal/astutil/comment.go @@ -0,0 +1,113 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package astutil + +import ( + "go/ast" + "go/token" + "strings" +) + +// Deprecation returns the paragraph of the doc comment that starts with the +// conventional "Deprecation: " marker, as defined by +// https://go.dev/wiki/Deprecated, or "" if the documented symbol is not +// deprecated. +func Deprecation(doc *ast.CommentGroup) string { + for _, p := range strings.Split(doc.Text(), "\n\n") { + // There is still some ambiguity for deprecation message. This function + // only returns the paragraph introduced by "Deprecated: ". More + // information related to the deprecation may follow in additional + // paragraphs, but the deprecation message should be able to stand on + // its own. See golang/go#38743. + if strings.HasPrefix(p, "Deprecated: ") { + return p + } + } + return "" +} + +// -- plundered from the future (CL 605517, issue #68021) -- + +// TODO(adonovan): replace with ast.Directive after go1.25 (#68021). +// Beware of our local mods to handle analysistest +// "want" comments on the same line. + +// A directive is a comment line with special meaning to the Go +// toolchain or another tool. It has the form: +// +// //tool:name args +// +// The "tool:" portion is missing for the three directives named +// line, extern, and export. +// +// See https://go.dev/doc/comment#Syntax for details of Go comment +// syntax and https://pkg.go.dev/cmd/compile#hdr-Compiler_Directives +// for details of directives used by the Go compiler. +type Directive struct { + Pos token.Pos // of preceding "//" + Tool string + Name string + Args string // may contain internal spaces +} + +// isDirective reports whether c is a comment directive. +// This code is also in go/printer. +func isDirective(c string) bool { + // "//line " is a line directive. + // "//extern " is for gccgo. + // "//export " is for cgo. + // (The // has been removed.) + if strings.HasPrefix(c, "line ") || strings.HasPrefix(c, "extern ") || strings.HasPrefix(c, "export ") { + return true + } + + // "//[a-z0-9]+:[a-z0-9]" + // (The // has been removed.) + colon := strings.Index(c, ":") + if colon <= 0 || colon+1 >= len(c) { + return false + } + for i := 0; i <= colon+1; i++ { + if i == colon { + continue + } + b := c[i] + if !('a' <= b && b <= 'z' || '0' <= b && b <= '9') { + return false + } + } + return true +} + +// Directives returns the directives within the comment. +func Directives(g *ast.CommentGroup) (res []*Directive) { + if g != nil { + // Avoid (*ast.CommentGroup).Text() as it swallows directives. + for _, c := range g.List { + if len(c.Text) > 2 && + c.Text[1] == '/' && + c.Text[2] != ' ' && + isDirective(c.Text[2:]) { + + tool, nameargs, ok := strings.Cut(c.Text[2:], ":") + if !ok { + // Must be one of {line,extern,export}. + tool, nameargs = "", tool + } + name, args, _ := strings.Cut(nameargs, " ") // tab?? + // Permit an additional line comment after the args, chiefly to support + // [golang.org/x/tools/go/analysis/analysistest]. + args, _, _ = strings.Cut(args, "//") + res = append(res, &Directive{ + Pos: c.Slash, + Tool: tool, + Name: name, + Args: strings.TrimSpace(args), + }) + } + } + } + return +} diff --git a/upstream/vendor/golang.org/x/tools/internal/astutil/cursor/hooks.go b/upstream/vendor/golang.org/x/tools/internal/astutil/cursor/hooks.go deleted file mode 100644 index 0257d61d77..0000000000 --- a/upstream/vendor/golang.org/x/tools/internal/astutil/cursor/hooks.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2024 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.23 - -package cursor - -import ( - "go/ast" - _ "unsafe" // for go:linkname - - "golang.org/x/tools/go/ast/inspector" - "golang.org/x/tools/internal/astutil/edge" -) - -// This file defines backdoor access to inspector. - -// Copied from inspector.event; must remain in sync. -// (Note that the linkname effects a type coercion too.) -type event struct { - node ast.Node - typ uint64 // typeOf(node) on push event, or union of typ strictly between push and pop events on pop events - index int32 // index of corresponding push or pop event (relative to this event's index, +ve=push, -ve=pop) - parent int32 // index of parent's push node (push nodes only); or edge and index, bit packed (pop nodes only) -} - -//go:linkname maskOf golang.org/x/tools/go/ast/inspector.maskOf -func maskOf(nodes []ast.Node) uint64 - -//go:linkname events golang.org/x/tools/go/ast/inspector.events -func events(in *inspector.Inspector) []event - -//go:linkname packEdgeKindAndIndex golang.org/x/tools/go/ast/inspector.packEdgeKindAndIndex -func packEdgeKindAndIndex(edge.Kind, int) int32 - -//go:linkname unpackEdgeKindAndIndex golang.org/x/tools/go/ast/inspector.unpackEdgeKindAndIndex -func unpackEdgeKindAndIndex(int32) (edge.Kind, int) - -func (c Cursor) events() []event { return events(c.in) } diff --git a/upstream/vendor/golang.org/x/tools/internal/astutil/util.go b/upstream/vendor/golang.org/x/tools/internal/astutil/util.go new file mode 100644 index 0000000000..f06dbda369 --- /dev/null +++ b/upstream/vendor/golang.org/x/tools/internal/astutil/util.go @@ -0,0 +1,93 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package astutil + +import ( + "fmt" + "go/ast" + "go/token" + "strconv" + "unicode/utf8" +) + +// RangeInStringLiteral calculates the positional range within a string literal +// corresponding to the specified start and end byte offsets within the logical string. +func RangeInStringLiteral(lit *ast.BasicLit, start, end int) (token.Pos, token.Pos, error) { + startPos, err := PosInStringLiteral(lit, start) + if err != nil { + return 0, 0, fmt.Errorf("start: %v", err) + } + endPos, err := PosInStringLiteral(lit, end) + if err != nil { + return 0, 0, fmt.Errorf("end: %v", err) + } + return startPos, endPos, nil +} + +// PosInStringLiteral returns the position within a string literal +// corresponding to the specified byte offset within the logical +// string that it denotes. +func PosInStringLiteral(lit *ast.BasicLit, offset int) (token.Pos, error) { + raw := lit.Value + + value, err := strconv.Unquote(raw) + if err != nil { + return 0, err + } + if !(0 <= offset && offset <= len(value)) { + return 0, fmt.Errorf("invalid offset") + } + + // remove quotes + quote := raw[0] // '"' or '`' + raw = raw[1 : len(raw)-1] + + var ( + i = 0 // byte index within logical value + pos = lit.ValuePos + 1 // position within literal + ) + for raw != "" && i < offset { + r, _, rest, _ := strconv.UnquoteChar(raw, quote) // can't fail + sz := len(raw) - len(rest) // length of literal char in raw bytes + pos += token.Pos(sz) + raw = raw[sz:] + i += utf8.RuneLen(r) + } + return pos, nil +} + +// PreorderStack traverses the tree rooted at root, +// calling f before visiting each node. +// +// Each call to f provides the current node and traversal stack, +// consisting of the original value of stack appended with all nodes +// from root to n, excluding n itself. (This design allows calls +// to PreorderStack to be nested without double counting.) +// +// If f returns false, the traversal skips over that subtree. Unlike +// [ast.Inspect], no second call to f is made after visiting node n. +// In practice, the second call is nearly always used only to pop the +// stack, and it is surprisingly tricky to do this correctly; see +// https://go.dev/issue/73319. +// +// TODO(adonovan): replace with [ast.PreorderStack] when go1.25 is assured. +func PreorderStack(root ast.Node, stack []ast.Node, f func(n ast.Node, stack []ast.Node) bool) { + before := len(stack) + ast.Inspect(root, func(n ast.Node) bool { + if n != nil { + if !f(n, stack) { + // Do not push, as there will be no corresponding pop. + return false + } + stack = append(stack, n) // push + } else { + stack = stack[:len(stack)-1] // pop + } + return true + }) + if len(stack) != before { + panic("push/pop mismatch") + } +} diff --git a/upstream/vendor/golang.org/x/tools/internal/imports/fix.go b/upstream/vendor/golang.org/x/tools/internal/imports/fix.go index 89b96381cd..50b6ca51a6 100644 --- a/upstream/vendor/golang.org/x/tools/internal/imports/fix.go +++ b/upstream/vendor/golang.org/x/tools/internal/imports/fix.go @@ -27,12 +27,13 @@ import ( "unicode" "unicode/utf8" + "maps" + "golang.org/x/tools/go/ast/astutil" "golang.org/x/tools/internal/event" "golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/gopathwalk" "golang.org/x/tools/internal/stdlib" - "maps" ) // importToGroup is a list of functions which map from an import path to @@ -290,8 +291,8 @@ func (p *pass) loadPackageNames(ctx context.Context, imports []*ImportInfo) erro return nil } -// if there is a trailing major version, remove it -func withoutVersion(nm string) string { +// WithoutVersion removes a trailing major version, if there is one. +func WithoutVersion(nm string) string { if v := path.Base(nm); len(v) > 0 && v[0] == 'v' { if _, err := strconv.Atoi(v[1:]); err == nil { // this is, for instance, called with rand/v2 and returns rand @@ -313,7 +314,7 @@ func (p *pass) importIdentifier(imp *ImportInfo) string { } known := p.knownPackages[imp.ImportPath] if known != nil && known.Name != "" { - return withoutVersion(known.Name) + return WithoutVersion(known.Name) } return ImportPathToAssumedName(imp.ImportPath) } diff --git a/upstream/vendor/golang.org/x/tools/internal/imports/imports.go b/upstream/vendor/golang.org/x/tools/internal/imports/imports.go index 2215a12880..b5f5218b5c 100644 --- a/upstream/vendor/golang.org/x/tools/internal/imports/imports.go +++ b/upstream/vendor/golang.org/x/tools/internal/imports/imports.go @@ -93,7 +93,7 @@ func FixImports(ctx context.Context, filename string, src []byte, goroot string, // env is needed. func ApplyFixes(fixes []*ImportFix, filename string, src []byte, opt *Options, extraMode parser.Mode) (formatted []byte, err error) { // Don't use parse() -- we don't care about fragments or statement lists - // here, and we need to work with unparseable files. + // here, and we need to work with unparsable files. fileSet := token.NewFileSet() parserMode := parser.SkipObjectResolution if opt.Comments { diff --git a/upstream/vendor/golang.org/x/tools/internal/imports/source_modindex.go b/upstream/vendor/golang.org/x/tools/internal/imports/source_modindex.go index 05229f06ce..ca745d4a1b 100644 --- a/upstream/vendor/golang.org/x/tools/internal/imports/source_modindex.go +++ b/upstream/vendor/golang.org/x/tools/internal/imports/source_modindex.go @@ -15,6 +15,10 @@ import ( // This code is here rather than in the modindex package // to avoid import loops +// TODO(adonovan): this code is only used by a test in this package. +// Can we delete it? Or is there a plan to call NewIndexSource from +// cmd/goimports? + // implements Source using modindex, so only for module cache. // // this is perhaps over-engineered. A new Index is read at first use. @@ -22,8 +26,8 @@ import ( // is read if the index changed. It is not clear the Mutex is needed. type IndexSource struct { modcachedir string - mutex sync.Mutex - ix *modindex.Index + mu sync.Mutex + index *modindex.Index // (access via getIndex) expires time.Time } @@ -39,13 +43,14 @@ func (s *IndexSource) LoadPackageNames(ctx context.Context, srcDir string, paths } func (s *IndexSource) ResolveReferences(ctx context.Context, filename string, missing References) ([]*Result, error) { - if err := s.maybeReadIndex(); err != nil { + index, err := s.getIndex() + if err != nil { return nil, err } var cs []modindex.Candidate for pkg, nms := range missing { for nm := range nms { - x := s.ix.Lookup(pkg, nm, false) + x := index.Lookup(pkg, nm, false) cs = append(cs, x...) } } @@ -74,30 +79,22 @@ func (s *IndexSource) ResolveReferences(ctx context.Context, filename string, mi return ans, nil } -func (s *IndexSource) maybeReadIndex() error { - s.mutex.Lock() - defer s.mutex.Unlock() - - var readIndex bool - if time.Now().After(s.expires) { - ok, err := modindex.Update(s.modcachedir) - if err != nil { - return err - } - if ok { - readIndex = true - } - } +func (s *IndexSource) getIndex() (*modindex.Index, error) { + s.mu.Lock() + defer s.mu.Unlock() - if readIndex || s.ix == nil { - ix, err := modindex.ReadIndex(s.modcachedir) + // (s.index = nil => s.expires is zero, + // so the first condition is strictly redundant. + // But it makes the postcondition very clear.) + if s.index == nil || time.Now().After(s.expires) { + index, err := modindex.Update(s.modcachedir) if err != nil { - return err + return nil, err } - s.ix = ix - // for now refresh every 15 minutes - s.expires = time.Now().Add(time.Minute * 15) + s.index = index + s.expires = index.ValidAt.Add(15 * time.Minute) // (refresh period) } + // Inv: s.index != nil - return nil + return s.index, nil } diff --git a/upstream/vendor/golang.org/x/tools/internal/modindex/directories.go b/upstream/vendor/golang.org/x/tools/internal/modindex/directories.go index 1e1a02f239..9a963744b5 100644 --- a/upstream/vendor/golang.org/x/tools/internal/modindex/directories.go +++ b/upstream/vendor/golang.org/x/tools/internal/modindex/directories.go @@ -10,7 +10,6 @@ import ( "os" "path/filepath" "regexp" - "slices" "strings" "sync" "time" @@ -20,50 +19,48 @@ import ( ) type directory struct { - path Relpath + path string // relative to GOMODCACHE importPath string version string // semantic version - syms []symbol } -// filterDirs groups the directories by import path, -// sorting the ones with the same import path by semantic version, -// most recent first. -func byImportPath(dirs []Relpath) (map[string][]*directory, error) { - ans := make(map[string][]*directory) // key is import path - for _, d := range dirs { - ip, sv, err := DirToImportPathVersion(d) +// bestDirByImportPath returns the best directory for each import +// path, where "best" means most recent semantic version. These import +// paths are inferred from the GOMODCACHE-relative dir names in dirs. +func bestDirByImportPath(dirs []string) (map[string]directory, error) { + dirsByPath := make(map[string]directory) + for _, dir := range dirs { + importPath, version, err := dirToImportPathVersion(dir) if err != nil { return nil, err } - ans[ip] = append(ans[ip], &directory{ - path: d, - importPath: ip, - version: sv, - }) - } - for k, v := range ans { - semanticSort(v) - ans[k] = v + new := directory{ + path: dir, + importPath: importPath, + version: version, + } + if old, ok := dirsByPath[importPath]; !ok || compareDirectory(new, old) < 0 { + dirsByPath[importPath] = new + } } - return ans, nil + return dirsByPath, nil } -// sort the directories by semantic version, latest first -func semanticSort(v []*directory) { - slices.SortFunc(v, func(l, r *directory) int { - if n := semver.Compare(l.version, r.version); n != 0 { - return -n // latest first - } - return strings.Compare(string(l.path), string(r.path)) - }) +// compareDirectory defines an ordering of path@version directories, +// by descending version, then by ascending path. +func compareDirectory(x, y directory) int { + if sign := -semver.Compare(x.version, y.version); sign != 0 { + return sign // latest first + } + return strings.Compare(string(x.path), string(y.path)) } // modCacheRegexp splits a relpathpath into module, module version, and package. var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`) -// DirToImportPathVersion computes import path and semantic version -func DirToImportPathVersion(dir Relpath) (string, string, error) { +// dirToImportPathVersion computes import path and semantic version +// from a GOMODCACHE-relative directory name. +func dirToImportPathVersion(dir string) (string, string, error) { m := modCacheRegexp.FindStringSubmatch(string(dir)) // m[1] is the module path // m[2] is the version major.minor.patch(-
 that contains the name
+// Package modindex contains code for building and searching an
+// [Index] of the Go module cache.
+package modindex
+
+// The directory containing the index, returned by
+// [IndexDir], contains a file index-name- that contains the name
 // of the current index. We believe writing that short file is atomic.
-// ReadIndex reads that file to get the file name of the index.
+// [Read] reads that file to get the file name of the index.
 // WriteIndex writes an index with a unique name and then
 // writes that name into a new version of index-name-.
 // ( stands for the CurrentVersion of the index format.)
-package modindex
 
 import (
+	"maps"
+	"os"
 	"path/filepath"
 	"slices"
 	"strings"
@@ -21,144 +25,95 @@ import (
 	"golang.org/x/mod/semver"
 )
 
-// Create always creates a new index for the go module cache that is in cachedir.
-func Create(cachedir string) error {
-	_, err := indexModCache(cachedir, true)
-	return err
-}
-
-// Update the index for the go module cache that is in cachedir,
-// If there is no existing index it will build one.
-// If there are changed directories since the last index, it will
-// write a new one and return true. Otherwise it returns false.
-func Update(cachedir string) (bool, error) {
-	return indexModCache(cachedir, false)
+// Update updates the index for the specified Go
+// module cache directory, creating it as needed.
+// On success it returns the current index.
+func Update(gomodcache string) (*Index, error) {
+	prev, err := Read(gomodcache)
+	if err != nil {
+		if !os.IsNotExist(err) {
+			return nil, err
+		}
+		prev = nil
+	}
+	return update(gomodcache, prev)
 }
 
-// indexModCache writes an index current as of when it is called.
-// If clear is true the index is constructed from all of GOMODCACHE
-// otherwise the index is constructed from the last previous index
-// and the updates to the cache. It returns true if it wrote an index,
-// false otherwise.
-func indexModCache(cachedir string, clear bool) (bool, error) {
-	cachedir, err := filepath.Abs(cachedir)
+// update builds, writes, and returns the current index.
+//
+// If old is nil, the new index is built from all of GOMODCACHE;
+// otherwise it is built from the old index plus cache updates
+// since the previous index's time.
+func update(gomodcache string, old *Index) (*Index, error) {
+	gomodcache, err := filepath.Abs(gomodcache)
 	if err != nil {
-		return false, err
+		return nil, err
 	}
-	cd := Abspath(cachedir)
-	future := time.Now().Add(24 * time.Hour) // safely in the future
-	ok, err := modindexTimed(future, cd, clear)
+	new, changed, err := build(gomodcache, old)
 	if err != nil {
-		return false, err
+		return nil, err
 	}
-	return ok, nil
-}
-
-// modindexTimed writes an index current as of onlyBefore.
-// If clear is true the index is constructed from all of GOMODCACHE
-// otherwise the index is constructed from the last previous index
-// and all the updates to the cache before onlyBefore.
-// It returns true if it wrote a new index, false if it wrote nothing.
-func modindexTimed(onlyBefore time.Time, cachedir Abspath, clear bool) (bool, error) {
-	var curIndex *Index
-	if !clear {
-		var err error
-		curIndex, err = ReadIndex(string(cachedir))
-		if clear && err != nil {
-			return false, err
+	if old == nil || changed {
+		if err := write(gomodcache, new); err != nil {
+			return nil, err
 		}
-		// TODO(pjw): check that most of those directories still exist
-	}
-	cfg := &work{
-		onlyBefore: onlyBefore,
-		oldIndex:   curIndex,
-		cacheDir:   cachedir,
-	}
-	if curIndex != nil {
-		cfg.onlyAfter = curIndex.Changed
-	}
-	if err := cfg.buildIndex(); err != nil {
-		return false, err
 	}
-	if len(cfg.newIndex.Entries) == 0 && curIndex != nil {
-		// no changes from existing curIndex, don't write a new index
-		return false, nil
-	}
-	if err := cfg.writeIndex(); err != nil {
-		return false, err
-	}
-	return true, nil
-}
-
-type work struct {
-	onlyBefore time.Time // do not use directories later than this
-	onlyAfter  time.Time // only interested in directories after this
-	// directories from before onlyAfter come from oldIndex
-	oldIndex *Index
-	newIndex *Index
-	cacheDir Abspath
+	return new, nil
 }
 
-func (w *work) buildIndex() error {
-	// The effective date of the new index should be at least
-	// slightly earlier than when the directories are scanned
-	// so set it now.
-	w.newIndex = &Index{Changed: time.Now(), Cachedir: w.cacheDir}
-	dirs := findDirs(string(w.cacheDir), w.onlyAfter, w.onlyBefore)
-	if len(dirs) == 0 {
-		return nil
+// build returns a new index for the specified Go module cache (an
+// absolute path).
+//
+// If an old index is provided, only directories more recent than it
+// that it are scanned; older directories are provided by the old
+// Index.
+//
+// The boolean result indicates whether new entries were found.
+func build(gomodcache string, old *Index) (*Index, bool, error) {
+	// Set the time window.
+	var start time.Time // = dawn of time
+	if old != nil {
+		start = old.ValidAt
 	}
-	newdirs, err := byImportPath(dirs)
+	now := time.Now()
+	end := now.Add(24 * time.Hour) // safely in the future
+
+	// Enumerate GOMODCACHE package directories.
+	// Choose the best (latest) package for each import path.
+	pkgDirs := findDirs(gomodcache, start, end)
+	dirByPath, err := bestDirByImportPath(pkgDirs)
 	if err != nil {
-		return err
+		return nil, false, err
 	}
-	// for each import path it might occur only in newdirs,
-	// only in w.oldIndex, or in both.
-	// If it occurs in both, use the semantically later one
-	if w.oldIndex != nil {
-		for _, e := range w.oldIndex.Entries {
-			found, ok := newdirs[e.ImportPath]
-			if !ok {
-				w.newIndex.Entries = append(w.newIndex.Entries, e)
-				continue // use this one, there is no new one
-			}
-			if semver.Compare(found[0].version, e.Version) > 0 {
-				// use the new one
-			} else {
-				// use the old one, forget the new one
-				w.newIndex.Entries = append(w.newIndex.Entries, e)
-				delete(newdirs, e.ImportPath)
+
+	// For each import path it might occur only in
+	// dirByPath, only in old, or in both.
+	// If both, use the semantically later one.
+	var entries []Entry
+	if old != nil {
+		for _, entry := range old.Entries {
+			dir, ok := dirByPath[entry.ImportPath]
+			if !ok || semver.Compare(dir.version, entry.Version) <= 0 {
+				// New dir is missing or not more recent; use old entry.
+				entries = append(entries, entry)
+				delete(dirByPath, entry.ImportPath)
 			}
 		}
 	}
-	// get symbol information for all the new diredtories
-	getSymbols(w.cacheDir, newdirs)
-	// assemble the new index entries
-	for k, v := range newdirs {
-		d := v[0]
-		pkg, names := processSyms(d.syms)
-		if pkg == "" {
-			continue // PJW: does this ever happen?
-		}
-		entry := Entry{
-			PkgName:    pkg,
-			Dir:        d.path,
-			ImportPath: k,
-			Version:    d.version,
-			Names:      names,
-		}
-		w.newIndex.Entries = append(w.newIndex.Entries, entry)
-	}
-	// sort the entries in the new index
-	slices.SortFunc(w.newIndex.Entries, func(l, r Entry) int {
-		if n := strings.Compare(l.PkgName, r.PkgName); n != 0 {
+
+	// Extract symbol information for all the new directories.
+	newEntries := extractSymbols(gomodcache, maps.Values(dirByPath))
+	entries = append(entries, newEntries...)
+	slices.SortFunc(entries, func(x, y Entry) int {
+		if n := strings.Compare(x.PkgName, y.PkgName); n != 0 {
 			return n
 		}
-		return strings.Compare(l.ImportPath, r.ImportPath)
+		return strings.Compare(x.ImportPath, y.ImportPath)
 	})
-	return nil
-}
 
-func (w *work) writeIndex() error {
-	return writeIndex(w.cacheDir, w.newIndex)
+	return &Index{
+		GOMODCACHE: gomodcache,
+		ValidAt:    now, // time before the directories were scanned
+		Entries:    entries,
+	}, len(newEntries) > 0, nil
 }
diff --git a/upstream/vendor/golang.org/x/tools/internal/modindex/symbols.go b/upstream/vendor/golang.org/x/tools/internal/modindex/symbols.go
index b918529d43..fe24db9b13 100644
--- a/upstream/vendor/golang.org/x/tools/internal/modindex/symbols.go
+++ b/upstream/vendor/golang.org/x/tools/internal/modindex/symbols.go
@@ -10,11 +10,13 @@ import (
 	"go/parser"
 	"go/token"
 	"go/types"
+	"iter"
 	"os"
 	"path/filepath"
 	"runtime"
 	"slices"
 	"strings"
+	"sync"
 
 	"golang.org/x/sync/errgroup"
 )
@@ -30,45 +32,69 @@ import (
 type symbol struct {
 	pkg  string // name of the symbols's package
 	name string // declared name
-	kind string // T, C, V, or F, follwed by D if deprecated
+	kind string // T, C, V, or F, followed by D if deprecated
 	sig  string // signature information, for F
 }
 
-// find the symbols for the best directories
-func getSymbols(cd Abspath, dirs map[string][]*directory) {
+// extractSymbols returns a (new, unordered) array of Entries, one for
+// each provided package directory, describing its exported symbols.
+func extractSymbols(cwd string, dirs iter.Seq[directory]) []Entry {
+	var (
+		mu      sync.Mutex
+		entries []Entry
+	)
+
 	var g errgroup.Group
 	g.SetLimit(max(2, runtime.GOMAXPROCS(0)/2))
-	for _, vv := range dirs {
-		// throttling some day?
-		d := vv[0]
+	for dir := range dirs {
 		g.Go(func() error {
-			thedir := filepath.Join(string(cd), string(d.path))
+			thedir := filepath.Join(cwd, string(dir.path))
 			mode := parser.SkipObjectResolution | parser.ParseComments
 
-			fi, err := os.ReadDir(thedir)
+			// Parse all Go files in dir and extract symbols.
+			dirents, err := os.ReadDir(thedir)
 			if err != nil {
 				return nil // log this someday?
 			}
-			for _, fx := range fi {
-				if !strings.HasSuffix(fx.Name(), ".go") || strings.HasSuffix(fx.Name(), "_test.go") {
+			var syms []symbol
+			for _, dirent := range dirents {
+				if !strings.HasSuffix(dirent.Name(), ".go") ||
+					strings.HasSuffix(dirent.Name(), "_test.go") {
 					continue
 				}
-				fname := filepath.Join(thedir, fx.Name())
+				fname := filepath.Join(thedir, dirent.Name())
 				tr, err := parser.ParseFile(token.NewFileSet(), fname, nil, mode)
 				if err != nil {
 					continue // ignore errors, someday log them?
 				}
-				d.syms = append(d.syms, getFileExports(tr)...)
+				syms = append(syms, getFileExports(tr)...)
+			}
+
+			// Create an entry for the package.
+			pkg, names := processSyms(syms)
+			if pkg != "" {
+				mu.Lock()
+				defer mu.Unlock()
+				entries = append(entries, Entry{
+					PkgName:    pkg,
+					Dir:        dir.path,
+					ImportPath: dir.importPath,
+					Version:    dir.version,
+					Names:      names,
+				})
 			}
+
 			return nil
 		})
 	}
-	g.Wait()
+	g.Wait() // ignore error
+
+	return entries
 }
 
 func getFileExports(f *ast.File) []symbol {
 	pkg := f.Name.Name
-	if pkg == "main" {
+	if pkg == "main" || pkg == "" {
 		return nil
 	}
 	var ans []symbol
@@ -110,7 +136,7 @@ func getFileExports(f *ast.File) []symbol {
 				// The only place a $ can occur seems to be in a struct tag, which
 				// can be an arbitrary string literal, and ExprString does not presently
 				// print struct tags. So for this to happen the type of a formal parameter
-				// has to be a explict struct, e.g. foo(x struct{a int "$"}) and ExprString
+				// has to be a explicit struct, e.g. foo(x struct{a int "$"}) and ExprString
 				// would have to show the struct tag. Even testing for this case seems
 				// a waste of effort, but let's remember the possibility
 				if strings.Contains(tp, "$") {
@@ -202,17 +228,18 @@ func processSyms(syms []symbol) (string, []string) {
 	pkg := syms[0].pkg
 	var names []string
 	for _, s := range syms {
+		if s.pkg != pkg {
+			// Symbols came from two files in same dir
+			// with different package declarations.
+			continue
+		}
 		var nx string
-		if s.pkg == pkg {
-			if s.sig != "" {
-				nx = fmt.Sprintf("%s %s %s", s.name, s.kind, s.sig)
-			} else {
-				nx = fmt.Sprintf("%s %s", s.name, s.kind)
-			}
-			names = append(names, nx)
+		if s.sig != "" {
+			nx = fmt.Sprintf("%s %s %s", s.name, s.kind, s.sig)
 		} else {
-			continue // PJW: do we want to keep track of these?
+			nx = fmt.Sprintf("%s %s", s.name, s.kind)
 		}
+		names = append(names, nx)
 	}
 	return pkg, names
 }
diff --git a/upstream/vendor/golang.org/x/tools/internal/modindex/types.go b/upstream/vendor/golang.org/x/tools/internal/modindex/types.go
deleted file mode 100644
index ece4488630..0000000000
--- a/upstream/vendor/golang.org/x/tools/internal/modindex/types.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package modindex
-
-import (
-	"strings"
-)
-
-// some special types to avoid confusions
-
-// distinguish various types of directory names. It's easy to get confused.
-type Abspath string // absolute paths
-type Relpath string // paths with GOMODCACHE prefix removed
-
-func toRelpath(cachedir Abspath, s string) Relpath {
-	if strings.HasPrefix(s, string(cachedir)) {
-		if s == string(cachedir) {
-			return Relpath("")
-		}
-		return Relpath(s[len(cachedir)+1:])
-	}
-	return Relpath(s)
-}
diff --git a/upstream/vendor/golang.org/x/tools/internal/packagesinternal/packages.go b/upstream/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
index 25ebab663b..929b470beb 100644
--- a/upstream/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
+++ b/upstream/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
@@ -5,6 +5,8 @@
 // Package packagesinternal exposes internal-only fields from go/packages.
 package packagesinternal
 
+import "fmt"
+
 var GetDepsErrors = func(p any) []*PackageError { return nil }
 
 type PackageError struct {
@@ -13,8 +15,9 @@ type PackageError struct {
 	Err         string   // the error itself
 }
 
+func (err PackageError) String() string {
+	return fmt.Sprintf("%s: %s (import stack: %s)", err.Pos, err.Err, err.ImportStack)
+}
+
 var TypecheckCgo int
 var DepsErrors int // must be set as a LoadMode to call GetDepsErrors
-
-var SetModFlag = func(config any, value string) {}
-var SetModFile = func(config any, value string) {}
diff --git a/upstream/vendor/golang.org/x/tools/internal/stdlib/deps.go b/upstream/vendor/golang.org/x/tools/internal/stdlib/deps.go
index c50bf406b7..77cf8d2181 100644
--- a/upstream/vendor/golang.org/x/tools/internal/stdlib/deps.go
+++ b/upstream/vendor/golang.org/x/tools/internal/stdlib/deps.go
@@ -12,61 +12,61 @@ type pkginfo struct {
 }
 
 var deps = [...]pkginfo{
-	{"archive/tar", "\x03j\x03E6\x01\v\x01\"\x01\x01\x02\x05\n\x02\x01\x02\x02\v"},
-	{"archive/zip", "\x02\x04`\a\x16\x0206\x01*\x05\x01\x11\x03\x02\r\x04"},
-	{"bufio", "\x03j~E\x13"},
-	{"bytes", "m+S\x03\fG\x02\x02"},
+	{"archive/tar", "\x03j\x03E5\x01\v\x01#\x01\x01\x02\x05\n\x02\x01\x02\x02\v"},
+	{"archive/zip", "\x02\x04`\a\x16\x0205\x01+\x05\x01\x11\x03\x02\r\x04"},
+	{"bufio", "\x03j}F\x13"},
+	{"bytes", "m+R\x03\fH\x02\x02"},
 	{"cmp", ""},
-	{"compress/bzip2", "\x02\x02\xe7\x01B"},
-	{"compress/flate", "\x02k\x03{\r\x024\x01\x03"},
-	{"compress/gzip", "\x02\x04`\a\x03\x15fT"},
-	{"compress/lzw", "\x02k\x03{"},
-	{"compress/zlib", "\x02\x04`\a\x03\x13\x01g"},
+	{"compress/bzip2", "\x02\x02\xe6\x01C"},
+	{"compress/flate", "\x02k\x03z\r\x025\x01\x03"},
+	{"compress/gzip", "\x02\x04`\a\x03\x15eU"},
+	{"compress/lzw", "\x02k\x03z"},
+	{"compress/zlib", "\x02\x04`\a\x03\x13\x01f"},
 	{"container/heap", "\xae\x02"},
 	{"container/list", ""},
 	{"container/ring", ""},
 	{"context", "m\\i\x01\f"},
-	{"crypto", "\x83\x01hD"},
+	{"crypto", "\x83\x01gE"},
 	{"crypto/aes", "\x10\n\a\x8e\x02"},
-	{"crypto/cipher", "\x03\x1e\x01\x01\x1d\x11\x1c,R"},
+	{"crypto/cipher", "\x03\x1e\x01\x01\x1d\x11\x1c,Q"},
 	{"crypto/des", "\x10\x13\x1d-,\x96\x01\x03"},
-	{"crypto/dsa", "@\x04)~\x0e"},
-	{"crypto/ecdh", "\x03\v\f\x0e\x04\x14\x04\r\x1c~"},
-	{"crypto/ecdsa", "\x0e\x05\x03\x04\x01\x0e\x16\x01\x04\f\x01\x1c~\x0e\x04K\x01"},
-	{"crypto/ed25519", "\x0e\x1c\x16\n\a\x1c~D"},
-	{"crypto/elliptic", "0=~\x0e9"},
+	{"crypto/dsa", "@\x04)}\x0e"},
+	{"crypto/ecdh", "\x03\v\f\x0e\x04\x14\x04\r\x1c}"},
+	{"crypto/ecdsa", "\x0e\x05\x03\x04\x01\x0e\x16\x01\x04\f\x01\x1c}\x0e\x04L\x01"},
+	{"crypto/ed25519", "\x0e\x1c\x16\n\a\x1c}E"},
+	{"crypto/elliptic", "0=}\x0e:"},
 	{"crypto/fips140", " \x05\x90\x01"},
 	{"crypto/hkdf", "-\x12\x01-\x16"},
 	{"crypto/hmac", "\x1a\x14\x11\x01\x112"},
 	{"crypto/internal/boring", "\x0e\x02\rf"},
-	{"crypto/internal/boring/bbig", "\x1a\xdf\x01L"},
+	{"crypto/internal/boring/bbig", "\x1a\xde\x01M"},
 	{"crypto/internal/boring/bcache", "\xb3\x02\x12"},
 	{"crypto/internal/boring/sig", ""},
-	{"crypto/internal/cryptotest", "\x03\r\n)\x0e\x19\x06\x13\x12#\a\t\x11\x12\x11\x1a\r\r\x05\n"},
+	{"crypto/internal/cryptotest", "\x03\r\n)\x0e\x19\x06\x13\x12#\a\t\x11\x11\x11\x1b\x01\f\r\x05\n"},
 	{"crypto/internal/entropy", "E"},
-	{"crypto/internal/fips140", ">/~8\r\x15"},
-	{"crypto/internal/fips140/aes", "\x03\x1d\x03\x02\x13\x04\x01\x01\x05*\x8d\x015"},
-	{"crypto/internal/fips140/aes/gcm", " \x01\x02\x02\x02\x11\x04\x01\x06*\x8b\x01"},
+	{"crypto/internal/fips140", ">/}9\r\x15"},
+	{"crypto/internal/fips140/aes", "\x03\x1d\x03\x02\x13\x04\x01\x01\x05*\x8c\x016"},
+	{"crypto/internal/fips140/aes/gcm", " \x01\x02\x02\x02\x11\x04\x01\x06*\x8a\x01"},
 	{"crypto/internal/fips140/alias", "\xc5\x02"},
-	{"crypto/internal/fips140/bigmod", "%\x17\x01\x06*\x8d\x01"},
-	{"crypto/internal/fips140/check", " \x0e\x06\b\x02\xad\x01Z"},
+	{"crypto/internal/fips140/bigmod", "%\x17\x01\x06*\x8c\x01"},
+	{"crypto/internal/fips140/check", " \x0e\x06\b\x02\xac\x01["},
 	{"crypto/internal/fips140/check/checktest", "%\xfe\x01\""},
-	{"crypto/internal/fips140/drbg", "\x03\x1c\x01\x01\x04\x13\x04\b\x01(~\x0f8"},
-	{"crypto/internal/fips140/ecdh", "\x03\x1d\x05\x02\t\f1~\x0f8"},
-	{"crypto/internal/fips140/ecdsa", "\x03\x1d\x04\x01\x02\a\x02\x067~G"},
+	{"crypto/internal/fips140/drbg", "\x03\x1c\x01\x01\x04\x13\x04\b\x01(}\x0f9"},
+	{"crypto/internal/fips140/ecdh", "\x03\x1d\x05\x02\t\f1}\x0f9"},
+	{"crypto/internal/fips140/ecdsa", "\x03\x1d\x04\x01\x02\a\x02\x067}H"},
 	{"crypto/internal/fips140/ed25519", "\x03\x1d\x05\x02\x04\v7\xc2\x01\x03"},
-	{"crypto/internal/fips140/edwards25519", "%\a\f\x041\x8d\x018"},
-	{"crypto/internal/fips140/edwards25519/field", "%\x13\x041\x8d\x01"},
+	{"crypto/internal/fips140/edwards25519", "%\a\f\x041\x8c\x019"},
+	{"crypto/internal/fips140/edwards25519/field", "%\x13\x041\x8c\x01"},
 	{"crypto/internal/fips140/hkdf", "\x03\x1d\x05\t\x069"},
 	{"crypto/internal/fips140/hmac", "\x03\x1d\x14\x01\x017"},
 	{"crypto/internal/fips140/mlkem", "\x03\x1d\x05\x02\x0e\x03\x041"},
-	{"crypto/internal/fips140/nistec", "%\f\a\x041\x8d\x01)\x0f\x13"},
-	{"crypto/internal/fips140/nistec/fiat", "%\x135\x8d\x01"},
+	{"crypto/internal/fips140/nistec", "%\f\a\x041\x8c\x01*\x0f\x13"},
+	{"crypto/internal/fips140/nistec/fiat", "%\x135\x8c\x01"},
 	{"crypto/internal/fips140/pbkdf2", "\x03\x1d\x05\t\x069"},
-	{"crypto/internal/fips140/rsa", "\x03\x1d\x04\x01\x02\r\x01\x01\x025~G"},
-	{"crypto/internal/fips140/sha256", "\x03\x1d\x1c\x01\x06*\x8d\x01"},
-	{"crypto/internal/fips140/sha3", "\x03\x1d\x18\x04\x010\x8d\x01K"},
-	{"crypto/internal/fips140/sha512", "\x03\x1d\x1c\x01\x06*\x8d\x01"},
+	{"crypto/internal/fips140/rsa", "\x03\x1d\x04\x01\x02\r\x01\x01\x025}H"},
+	{"crypto/internal/fips140/sha256", "\x03\x1d\x1c\x01\x06*\x8c\x01"},
+	{"crypto/internal/fips140/sha3", "\x03\x1d\x18\x04\x010\x8c\x01L"},
+	{"crypto/internal/fips140/sha512", "\x03\x1d\x1c\x01\x06*\x8c\x01"},
 	{"crypto/internal/fips140/ssh", " \x05"},
 	{"crypto/internal/fips140/subtle", "#"},
 	{"crypto/internal/fips140/tls12", "\x03\x1d\x05\t\x06\x027"},
@@ -76,90 +76,90 @@ var deps = [...]pkginfo{
 	{"crypto/internal/fips140deps/cpu", "\xad\x01\a"},
 	{"crypto/internal/fips140deps/godebug", "\xb5\x01"},
 	{"crypto/internal/fips140hash", "5\x1a4\xc2\x01"},
-	{"crypto/internal/fips140only", "'\r\x01\x01M26"},
+	{"crypto/internal/fips140only", "'\r\x01\x01M25"},
 	{"crypto/internal/fips140test", ""},
-	{"crypto/internal/hpke", "\x0e\x01\x01\x03\x1a\x1d#,aM"},
+	{"crypto/internal/hpke", "\x0e\x01\x01\x03\x1a\x1d#,`N"},
 	{"crypto/internal/impl", "\xb0\x02"},
-	{"crypto/internal/randutil", "\xeb\x01\x12"},
-	{"crypto/internal/sysrand", "mi\"\x1e\r\x0f\x01\x01\v\x06"},
+	{"crypto/internal/randutil", "\xea\x01\x12"},
+	{"crypto/internal/sysrand", "mi!\x1f\r\x0f\x01\x01\v\x06"},
 	{"crypto/internal/sysrand/internal/seccomp", "m"},
-	{"crypto/md5", "\x0e2-\x16\x16a"},
+	{"crypto/md5", "\x0e2-\x16\x16`"},
 	{"crypto/mlkem", "/"},
 	{"crypto/pbkdf2", "2\r\x01-\x16"},
-	{"crypto/rand", "\x1a\x06\a\x19\x04\x01(~\x0eL"},
+	{"crypto/rand", "\x1a\x06\a\x19\x04\x01(}\x0eM"},
 	{"crypto/rc4", "#\x1d-\xc2\x01"},
-	{"crypto/rsa", "\x0e\f\x01\t\x0f\f\x01\x04\x06\a\x1c\x03\x1326\r\x01"},
-	{"crypto/sha1", "\x0e\f&-\x16\x16\x14M"},
+	{"crypto/rsa", "\x0e\f\x01\t\x0f\f\x01\x04\x06\a\x1c\x03\x1325\r\x01"},
+	{"crypto/sha1", "\x0e\f&-\x16\x16\x14L"},
 	{"crypto/sha256", "\x0e\f\x1aO"},
 	{"crypto/sha3", "\x0e'N\xc2\x01"},
 	{"crypto/sha512", "\x0e\f\x1cM"},
 	{"crypto/subtle", "8\x96\x01U"},
-	{"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x03\x01\a\x01\v\x02\n\x01\b\x05\x03\x01\x01\x01\x01\x02\x01\x02\x01\x17\x02\x03\x13\x16\x14\b6\x16\x15\r\n\x01\x01\x01\x02\x01\f\x06\x02\x01"},
+	{"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x03\x01\a\x01\v\x02\n\x01\b\x05\x03\x01\x01\x01\x01\x02\x01\x02\x01\x17\x02\x03\x13\x16\x14\b5\x16\x16\r\n\x01\x01\x01\x02\x01\f\x06\x02\x01"},
 	{"crypto/tls/internal/fips140tls", " \x93\x02"},
-	{"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x011\x03\x02\x01\x01\x02\x05\x0e\x06\x02\x02\x03E\x033\x01\x02\t\x01\x01\x01\a\x0f\x05\x01\x06\x02\x05\f\x01\x02\r\x02\x01\x01\x02\x03\x01"},
-	{"crypto/x509/pkix", "c\x06\a\x89\x01F"},
-	{"database/sql", "\x03\nJ\x16\x03{\f\x06!\x05\n\x02\x03\x01\f\x02\x02\x02"},
+	{"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x011\x03\x02\x01\x01\x02\x05\x0e\x06\x02\x02\x03E\x032\x01\x02\t\x01\x01\x01\a\x10\x05\x01\x06\x02\x05\f\x01\x02\r\x02\x01\x01\x02\x03\x01"},
+	{"crypto/x509/pkix", "c\x06\a\x88\x01G"},
+	{"database/sql", "\x03\nJ\x16\x03z\f\x06\"\x05\n\x02\x03\x01\f\x02\x02\x02"},
 	{"database/sql/driver", "\r`\x03\xae\x01\x11\x10"},
-	{"debug/buildinfo", "\x03W\x02\x01\x01\b\a\x03`\x19\x02\x01*\x0f "},
-	{"debug/dwarf", "\x03c\a\x03{0\x13\x01\x01"},
-	{"debug/elf", "\x03\x06P\r\a\x03`\x1a\x01+\x19\x01\x15"},
+	{"debug/buildinfo", "\x03W\x02\x01\x01\b\a\x03`\x18\x02\x01+\x0f "},
+	{"debug/dwarf", "\x03c\a\x03z1\x13\x01\x01"},
+	{"debug/elf", "\x03\x06P\r\a\x03`\x19\x01,\x19\x01\x15"},
 	{"debug/gosym", "\x03c\n\xbe\x01\x01\x01\x02"},
-	{"debug/macho", "\x03\x06P\r\n`\x1b+\x19\x01"},
-	{"debug/pe", "\x03\x06P\r\a\x03`\x1b+\x19\x01\x15"},
-	{"debug/plan9obj", "f\a\x03`\x1b+"},
-	{"embed", "m+:\x19\x01S"},
+	{"debug/macho", "\x03\x06P\r\n`\x1a,\x19\x01"},
+	{"debug/pe", "\x03\x06P\r\a\x03`\x1a,\x19\x01\x15"},
+	{"debug/plan9obj", "f\a\x03`\x1a,"},
+	{"embed", "m+:\x18\x01T"},
 	{"embed/internal/embedtest", ""},
 	{"encoding", ""},
-	{"encoding/ascii85", "\xeb\x01D"},
-	{"encoding/asn1", "\x03j\x03\x88\x01\x01%\x0f\x02\x01\x0f\x03\x01"},
-	{"encoding/base32", "\xeb\x01B\x02"},
-	{"encoding/base64", "f\x85\x01B\x02"},
-	{"encoding/binary", "m~\r&\x0f\x05"},
-	{"encoding/csv", "\x02\x01j\x03{E\x11\x02"},
-	{"encoding/gob", "\x02_\x05\a\x03`\x1b\f\x01\x02\x1c\b\x14\x01\x0e\x02"},
-	{"encoding/hex", "m\x03{B\x03"},
-	{"encoding/json", "\x03\x01]\x04\b\x03{\r&\x0f\x02\x01\x02\x0f\x01\x01\x02"},
-	{"encoding/pem", "\x03b\b~B\x03"},
-	{"encoding/xml", "\x02\x01^\f\x03{3\x05\f\x01\x02\x0f\x02"},
+	{"encoding/ascii85", "\xea\x01E"},
+	{"encoding/asn1", "\x03j\x03\x87\x01\x01&\x0f\x02\x01\x0f\x03\x01"},
+	{"encoding/base32", "\xea\x01C\x02"},
+	{"encoding/base64", "\x99\x01QC\x02"},
+	{"encoding/binary", "m}\r'\x0f\x05"},
+	{"encoding/csv", "\x02\x01j\x03zF\x11\x02"},
+	{"encoding/gob", "\x02_\x05\a\x03`\x1a\f\x01\x02\x1d\b\x14\x01\x0e\x02"},
+	{"encoding/hex", "m\x03zC\x03"},
+	{"encoding/json", "\x03\x01]\x04\b\x03z\r'\x0f\x02\x01\x02\x0f\x01\x01\x02"},
+	{"encoding/pem", "\x03b\b}C\x03"},
+	{"encoding/xml", "\x02\x01^\f\x03z4\x05\f\x01\x02\x0f\x02"},
 	{"errors", "\xc9\x01|"},
-	{"expvar", "jK:\t\n\x14\r\n\x02\x03\x01\x10"},
-	{"flag", "a\f\x03{+\b\x05\n\x02\x01\x0f"},
-	{"fmt", "mE9\r\x1e\b\x0f\x02\x03\x11"},
-	{"go/ast", "\x03\x01l\x0f\x01k\x03(\b\x0f\x02\x01"},
+	{"expvar", "jK9\t\n\x15\r\n\x02\x03\x01\x10"},
+	{"flag", "a\f\x03z,\b\x05\n\x02\x01\x0f"},
+	{"fmt", "mE8\r\x1f\b\x0f\x02\x03\x11"},
+	{"go/ast", "\x03\x01l\x0f\x01j\x03)\b\x0f\x02\x01"},
 	{"go/ast/internal/tests", ""},
-	{"go/build", "\x02\x01j\x03\x01\x03\x02\a\x02\x01\x17\x1e\x04\x02\t\x14\x13\x01*\x01\x04\x01\a\n\x02\x01\x11\x02\x02"},
+	{"go/build", "\x02\x01j\x03\x01\x03\x02\a\x02\x01\x17\x1e\x04\x02\t\x14\x12\x01+\x01\x04\x01\a\n\x02\x01\x11\x02\x02"},
 	{"go/build/constraint", "m\xc2\x01\x01\x11\x02"},
-	{"go/constant", "p\x10x\x01\x015\x01\x02\x11"},
-	{"go/doc", "\x04l\x01\x06\t=.0\x12\x02\x01\x11\x02"},
+	{"go/constant", "p\x10w\x01\x016\x01\x02\x11"},
+	{"go/doc", "\x04l\x01\x06\t=-1\x12\x02\x01\x11\x02"},
 	{"go/doc/comment", "\x03m\xbd\x01\x01\x01\x01\x11\x02"},
-	{"go/format", "\x03m\x01\f\x01\x02kE"},
-	{"go/importer", "s\a\x01\x01\x04\x01j8"},
-	{"go/internal/gccgoimporter", "\x02\x01W\x13\x03\x05\v\x01h\x02+\x01\x05\x13\x01\v\b"},
-	{"go/internal/gcimporter", "\x02n\x10\x01/\x05\x0e(+\x17\x03\x02"},
-	{"go/internal/srcimporter", "p\x01\x02\n\x03\x01j+\x01\x05\x14\x02\x13"},
-	{"go/parser", "\x03j\x03\x01\x03\v\x01k\x01*\x06\x14"},
-	{"go/printer", "p\x01\x03\x03\tk\r\x1e\x17\x02\x01\x02\n\x05\x02"},
-	{"go/scanner", "\x03m\x10k1\x12\x01\x12\x02"},
+	{"go/format", "\x03m\x01\f\x01\x02jF"},
+	{"go/importer", "s\a\x01\x01\x04\x01i9"},
+	{"go/internal/gccgoimporter", "\x02\x01W\x13\x03\x05\v\x01g\x02,\x01\x05\x13\x01\v\b"},
+	{"go/internal/gcimporter", "\x02n\x10\x01/\x05\x0e',\x17\x03\x02"},
+	{"go/internal/srcimporter", "p\x01\x02\n\x03\x01i,\x01\x05\x14\x02\x13"},
+	{"go/parser", "\x03j\x03\x01\x03\v\x01j\x01+\x06\x14"},
+	{"go/printer", "p\x01\x03\x03\tj\r\x1f\x17\x02\x01\x02\n\x05\x02"},
+	{"go/scanner", "\x03m\x10j2\x12\x01\x12\x02"},
 	{"go/token", "\x04l\xbd\x01\x02\x03\x01\x0e\x02"},
-	{"go/types", "\x03\x01\x06c\x03\x01\x04\b\x03\x02\x15\x1e\x06,\x04\x03\n$\a\n\x01\x01\x01\x02\x01\x0e\x02\x02"},
+	{"go/types", "\x03\x01\x06c\x03\x01\x04\b\x03\x02\x15\x1e\x06+\x04\x03\n%\a\n\x01\x01\x01\x02\x01\x0e\x02\x02"},
 	{"go/version", "\xba\x01v"},
-	{"hash", "\xeb\x01"},
+	{"hash", "\xea\x01"},
 	{"hash/adler32", "m\x16\x16"},
 	{"hash/crc32", "m\x16\x16\x14\x85\x01\x01\x12"},
 	{"hash/crc64", "m\x16\x16\x99\x01"},
-	{"hash/fnv", "m\x16\x16a"},
-	{"hash/maphash", "\x94\x01\x05\x1b\x03AM"},
+	{"hash/fnv", "m\x16\x16`"},
+	{"hash/maphash", "\x94\x01\x05\x1b\x03@N"},
 	{"html", "\xb0\x02\x02\x11"},
-	{"html/template", "\x03g\x06\x19,6\x01\v\x1f\x05\x01\x02\x03\x0e\x01\x02\v\x01\x03\x02"},
-	{"image", "\x02k\x1f_\x0f5\x03\x01"},
+	{"html/template", "\x03g\x06\x19,5\x01\v \x05\x01\x02\x03\x0e\x01\x02\v\x01\x03\x02"},
+	{"image", "\x02k\x1f^\x0f6\x03\x01"},
 	{"image/color", ""},
 	{"image/color/palette", "\x8c\x01"},
 	{"image/draw", "\x8b\x01\x01\x04"},
-	{"image/gif", "\x02\x01\x05e\x03\x1b\x01\x01\x01\vR"},
+	{"image/gif", "\x02\x01\x05e\x03\x1b\x01\x01\x01\vQ"},
 	{"image/internal/imageutil", "\x8b\x01"},
-	{"image/jpeg", "\x02k\x1e\x01\x04["},
-	{"image/png", "\x02\a]\n\x13\x02\x06\x01_D"},
-	{"index/suffixarray", "\x03c\a~\r)\f\x01"},
+	{"image/jpeg", "\x02k\x1e\x01\x04Z"},
+	{"image/png", "\x02\a]\n\x13\x02\x06\x01^E"},
+	{"index/suffixarray", "\x03c\a}\r*\f\x01"},
 	{"internal/abi", "\xb4\x01\x91\x01"},
 	{"internal/asan", "\xc5\x02"},
 	{"internal/bisect", "\xa3\x02\x0f\x01"},
@@ -171,27 +171,27 @@ var deps = [...]pkginfo{
 	{"internal/copyright", ""},
 	{"internal/coverage", ""},
 	{"internal/coverage/calloc", ""},
-	{"internal/coverage/cfile", "j\x06\x17\x16\x01\x02\x01\x01\x01\x01\x01\x01\x01#\x01 +\x06\a\f\x01\x03\f\x06"},
-	{"internal/coverage/cformat", "\x04l-\x04J\f6\x01\x02\f"},
-	{"internal/coverage/cmerge", "p-["},
-	{"internal/coverage/decodecounter", "f\n-\v\x02A+\x19\x16"},
-	{"internal/coverage/decodemeta", "\x02d\n\x17\x16\v\x02A+"},
-	{"internal/coverage/encodecounter", "\x02d\n-\f\x01\x02?\f\x1f\x17"},
-	{"internal/coverage/encodemeta", "\x02\x01c\n\x13\x04\x16\r\x02?+/"},
+	{"internal/coverage/cfile", "j\x06\x17\x16\x01\x02\x01\x01\x01\x01\x01\x01\x01#\x01\x1f,\x06\a\f\x01\x03\f\x06"},
+	{"internal/coverage/cformat", "\x04l-\x04I\f7\x01\x02\f"},
+	{"internal/coverage/cmerge", "p-Z"},
+	{"internal/coverage/decodecounter", "f\n-\v\x02@,\x19\x16"},
+	{"internal/coverage/decodemeta", "\x02d\n\x17\x16\v\x02@,"},
+	{"internal/coverage/encodecounter", "\x02d\n-\f\x01\x02>\f \x17"},
+	{"internal/coverage/encodemeta", "\x02\x01c\n\x13\x04\x16\r\x02>,/"},
 	{"internal/coverage/pods", "\x04l-y\x06\x05\f\x02\x01"},
 	{"internal/coverage/rtcov", "\xc5\x02"},
-	{"internal/coverage/slicereader", "f\n{Z"},
-	{"internal/coverage/slicewriter", "p{"},
-	{"internal/coverage/stringtab", "p8\x04?"},
+	{"internal/coverage/slicereader", "f\nz["},
+	{"internal/coverage/slicewriter", "pz"},
+	{"internal/coverage/stringtab", "p8\x04>"},
 	{"internal/coverage/test", ""},
 	{"internal/coverage/uleb128", ""},
 	{"internal/cpu", "\xc5\x02"},
 	{"internal/dag", "\x04l\xbd\x01\x03"},
 	{"internal/diff", "\x03m\xbe\x01\x02"},
-	{"internal/exportdata", "\x02\x01j\x03\x03]\x1b+\x01\x05\x13\x01\x02"},
-	{"internal/filepathlite", "m+:\x1aA"},
+	{"internal/exportdata", "\x02\x01j\x03\x03]\x1a,\x01\x05\x13\x01\x02"},
+	{"internal/filepathlite", "m+:\x19B"},
 	{"internal/fmtsort", "\x04\x9a\x02\x0f"},
-	{"internal/fuzz", "\x03\nA\x18\x04\x03\x03\x01\f\x0356\r\x02\x1c\x01\x05\x02\x05\f\x01\x02\x01\x01\v\x04\x02"},
+	{"internal/fuzz", "\x03\nA\x18\x04\x03\x03\x01\f\x0355\r\x02\x1d\x01\x05\x02\x05\f\x01\x02\x01\x01\v\x04\x02"},
 	{"internal/goarch", ""},
 	{"internal/godebug", "\x96\x01 |\x01\x12"},
 	{"internal/godebugs", ""},
@@ -202,158 +202,158 @@ var deps = [...]pkginfo{
 	{"internal/goversion", ""},
 	{"internal/itoa", ""},
 	{"internal/lazyregexp", "\x96\x02\v\x0f\x02"},
-	{"internal/lazytemplate", "\xeb\x01+\x1a\x02\v"},
+	{"internal/lazytemplate", "\xea\x01,\x1a\x02\v"},
 	{"internal/msan", "\xc5\x02"},
 	{"internal/nettrace", ""},
-	{"internal/obscuretestdata", "e\x86\x01+"},
+	{"internal/obscuretestdata", "e\x85\x01,"},
 	{"internal/oserror", "m"},
-	{"internal/pkgbits", "\x03K\x18\a\x03\x05\vk\x0e\x1d\r\f\x01"},
+	{"internal/pkgbits", "\x03K\x18\a\x03\x05\vj\x0e\x1e\r\f\x01"},
 	{"internal/platform", ""},
-	{"internal/poll", "mO\x1a\x158\x0f\x01\x01\v\x06"},
-	{"internal/profile", "\x03\x04f\x03{6\r\x01\x01\x0f"},
+	{"internal/poll", "mO\x1a\x149\x0f\x01\x01\v\x06"},
+	{"internal/profile", "\x03\x04f\x03z7\r\x01\x01\x0f"},
 	{"internal/profilerecord", ""},
 	{"internal/race", "\x94\x01\xb1\x01"},
-	{"internal/reflectlite", "\x94\x01 4;\""},
+	{"internal/reflectlite", "\x94\x01 3<\""},
 	{"internal/runtime/atomic", "\xc5\x02"},
 	{"internal/runtime/exithook", "\xca\x01{"},
 	{"internal/runtime/maps", "\x94\x01\x01\x1f\v\t\x05\x01w"},
 	{"internal/runtime/math", "\xb4\x01"},
 	{"internal/runtime/sys", "\xb4\x01\x04"},
 	{"internal/runtime/syscall", "\xc5\x02"},
-	{"internal/saferio", "\xeb\x01Z"},
+	{"internal/saferio", "\xea\x01["},
 	{"internal/singleflight", "\xb2\x02"},
 	{"internal/stringslite", "\x98\x01\xad\x01"},
 	{"internal/sync", "\x94\x01 \x14k\x12"},
 	{"internal/synctest", "\xc5\x02"},
 	{"internal/syscall/execenv", "\xb4\x02"},
 	{"internal/syscall/unix", "\xa3\x02\x10\x01\x11"},
-	{"internal/sysinfo", "\x02\x01\xaa\x01>+\x1a\x02"},
+	{"internal/sysinfo", "\x02\x01\xaa\x01=,\x1a\x02"},
 	{"internal/syslist", ""},
-	{"internal/testenv", "\x03\n`\x02\x01*\x1a\x10(*\x01\x05\a\f\x01\x02\x02\x01\n"},
+	{"internal/testenv", "\x03\n`\x02\x01*\x1a\x10'+\x01\x05\a\f\x01\x02\x02\x01\n"},
 	{"internal/testlog", "\xb2\x02\x01\x12"},
 	{"internal/testpty", "m\x03\xa6\x01"},
-	{"internal/trace", "\x02\x01\x01\x06\\\a\x03m\x01\x01\x06\x06\x03\n5\x01\x02\x0f"},
-	{"internal/trace/event", ""},
-	{"internal/trace/event/go122", "pm"},
-	{"internal/trace/internal/oldtrace", "\x03\x01b\a\x03m\b\x06\r5\x01"},
-	{"internal/trace/internal/testgen/go122", "\x03c\nl\x01\x01\x03\x04\x010\v\x0f"},
-	{"internal/trace/raw", "\x02d\nm\b\x06D\x01\x11"},
-	{"internal/trace/testtrace", "\x02\x01j\x03l\x05\x05\x056\f\x02\x01"},
-	{"internal/trace/traceviewer", "\x02]\v\x06\x1a<\x16\b\a\x04\t\n\x14\x01\x05\a\f\x01\x02\r"},
+	{"internal/trace", "\x02\x01\x01\x06\\\a\x03n\x03\x03\x06\x03\n6\x01\x02\x0f\x06"},
+	{"internal/trace/internal/testgen", "\x03c\nl\x03\x02\x03\x011\v\x0f"},
+	{"internal/trace/internal/tracev1", "\x03\x01b\a\x03t\x06\r6\x01"},
+	{"internal/trace/raw", "\x02d\nq\x03\x06E\x01\x11"},
+	{"internal/trace/testtrace", "\x02\x01j\x03l\x03\x06\x057\f\x02\x01"},
+	{"internal/trace/tracev2", ""},
+	{"internal/trace/traceviewer", "\x02]\v\x06\x1a<\x16\a\a\x04\t\n\x15\x01\x05\a\f\x01\x02\r"},
 	{"internal/trace/traceviewer/format", ""},
-	{"internal/trace/version", "pm\x01\r"},
+	{"internal/trace/version", "pq\t"},
 	{"internal/txtar", "\x03m\xa6\x01\x1a"},
 	{"internal/types/errors", "\xaf\x02"},
 	{"internal/unsafeheader", "\xc5\x02"},
-	{"internal/xcoff", "Y\r\a\x03`\x1b+\x19\x01"},
-	{"internal/zstd", "f\a\x03{\x0f"},
+	{"internal/xcoff", "Y\r\a\x03`\x1a,\x19\x01"},
+	{"internal/zstd", "f\a\x03z\x0f"},
 	{"io", "m\xc5\x01"},
-	{"io/fs", "m+*)0\x12\x12\x04"},
-	{"io/ioutil", "\xeb\x01\x01*\x17\x03"},
+	{"io/fs", "m+*(1\x12\x12\x04"},
+	{"io/ioutil", "\xea\x01\x01+\x17\x03"},
 	{"iter", "\xc8\x01[\""},
-	{"log", "p{\x05&\r\x0f\x01\f"},
+	{"log", "pz\x05'\r\x0f\x01\f"},
 	{"log/internal", ""},
-	{"log/slog", "\x03\nT\t\x03\x03{\x04\x01\x02\x02\x04&\x05\n\x02\x01\x02\x01\f\x02\x02\x02"},
+	{"log/slog", "\x03\nT\t\x03\x03z\x04\x01\x02\x02\x04'\x05\n\x02\x01\x02\x01\f\x02\x02\x02"},
 	{"log/slog/internal", ""},
-	{"log/slog/internal/benchmarks", "\r`\x03{\x06\x03;\x10"},
+	{"log/slog/internal/benchmarks", "\r`\x03z\x06\x03<\x10"},
 	{"log/slog/internal/buffer", "\xb2\x02"},
-	{"log/slog/internal/slogtest", "\xf1\x01"},
-	{"log/syslog", "m\x03\x7f\x12\x15\x1a\x02\r"},
-	{"maps", "\xee\x01W"},
-	{"math", "\xad\x01MK"},
-	{"math/big", "\x03j\x03)\x14>\r\x02\x023\x01\x02\x13"},
+	{"log/slog/internal/slogtest", "\xf0\x01"},
+	{"log/syslog", "m\x03~\x12\x16\x1a\x02\r"},
+	{"maps", "\xed\x01X"},
+	{"math", "\xad\x01LL"},
+	{"math/big", "\x03j\x03)\x14=\r\x02\x024\x01\x02\x13"},
 	{"math/bits", "\xc5\x02"},
-	{"math/cmplx", "\xf8\x01\x02"},
-	{"math/rand", "\xb5\x01C:\x01\x12"},
-	{"math/rand/v2", "m,\x02]\x02K"},
-	{"mime", "\x02\x01b\b\x03{\f\x1f\x17\x03\x02\x0f\x02"},
-	{"mime/multipart", "\x02\x01G#\x03E6\f\x01\x06\x02\x14\x02\x06\x11\x02\x01\x15"},
-	{"mime/quotedprintable", "\x02\x01m{"},
-	{"net", "\x04\t`+\x1d\a\x04\x05\f\x01\x04\x15\x01$\x06\r\n\x05\x01\x01\v\x06\a"},
-	{"net/http", "\x02\x01\x04\x04\x02=\b\x13\x01\a\x03E6\x01\x03\b\x01\x02\x02\x02\x01\x02\x06\x02\x01\n\x01\x01\x05\x01\x02\x05\n\x01\x01\x01\x02\x01\f\x02\x02\x02\b\x01\x01\x01"},
-	{"net/http/cgi", "\x02P\x1b\x03{\x04\b\n\x01\x12\x01\x01\x01\x04\x01\x05\x02\n\x02\x01\x0f\x0e"},
-	{"net/http/cookiejar", "\x04i\x03\x91\x01\x01\b\v\x18\x03\x02\r\x04"},
-	{"net/http/fcgi", "\x02\x01\nY\a\x03{\x16\x01\x01\x13\x1a\x02\r"},
-	{"net/http/httptest", "\x02\x01\nE\x02\x1b\x01{\x04\x12\x01\t\t\x02\x19\x01\x02\r\x0e"},
-	{"net/http/httptrace", "\rEnA\x13\n!"},
-	{"net/http/httputil", "\x02\x01\n`\x03{\x04\x0f\x03\x01\x05\x02\x01\n\x01\x1b\x02\r\x0e"},
-	{"net/http/internal", "\x02\x01j\x03{"},
+	{"math/cmplx", "\xf7\x01\x02"},
+	{"math/rand", "\xb5\x01B;\x01\x12"},
+	{"math/rand/v2", "m,\x02\\\x02L"},
+	{"mime", "\x02\x01b\b\x03z\f \x17\x03\x02\x0f\x02"},
+	{"mime/multipart", "\x02\x01G#\x03E5\f\x01\x06\x02\x15\x02\x06\x11\x02\x01\x15"},
+	{"mime/quotedprintable", "\x02\x01mz"},
+	{"net", "\x04\t`+\x1d\a\x04\x05\f\x01\x04\x14\x01%\x06\r\n\x05\x01\x01\v\x06\a"},
+	{"net/http", "\x02\x01\x04\x04\x02=\b\x13\x01\a\x03E5\x01\x03\b\x01\x02\x02\x02\x01\x02\x06\x02\x01\x01\n\x01\x01\x05\x01\x02\x05\n\x01\x01\x01\x02\x01\x01\v\x02\x02\x02\b\x01\x01\x01"},
+	{"net/http/cgi", "\x02P\x1b\x03z\x04\b\n\x01\x13\x01\x01\x01\x04\x01\x05\x02\n\x02\x01\x0f\x0e"},
+	{"net/http/cookiejar", "\x04i\x03\x90\x01\x01\b\f\x18\x03\x02\r\x04"},
+	{"net/http/fcgi", "\x02\x01\nY\a\x03z\x16\x01\x01\x14\x1a\x02\r"},
+	{"net/http/httptest", "\x02\x01\nE\x02\x1b\x01z\x04\x12\x01\n\t\x02\x19\x01\x02\r\x0e"},
+	{"net/http/httptrace", "\rEn@\x14\n!"},
+	{"net/http/httputil", "\x02\x01\n`\x03z\x04\x0f\x03\x01\x05\x02\x01\v\x01\x1b\x02\r\x0e"},
+	{"net/http/internal", "\x02\x01j\x03z"},
 	{"net/http/internal/ascii", "\xb0\x02\x11"},
+	{"net/http/internal/httpcommon", "\r`\x03\x96\x01\x0e\x01\x19\x01\x01\x02\x1b\x02"},
 	{"net/http/internal/testcert", "\xb0\x02"},
-	{"net/http/pprof", "\x02\x01\nc\x19,\x11%\x04\x13\x13\x01\r\x06\x03\x01\x02\x01\x0f"},
+	{"net/http/pprof", "\x02\x01\nc\x19,\x11$\x04\x13\x14\x01\r\x06\x03\x01\x02\x01\x0f"},
 	{"net/internal/cgotest", ""},
 	{"net/internal/socktest", "p\xc2\x01\x02"},
-	{"net/mail", "\x02k\x03{\x04\x0f\x03\x13\x1c\x02\r\x04"},
-	{"net/netip", "\x04i+\x01#<\x025\x15"},
-	{"net/rpc", "\x02f\x05\x03\x10\na\x04\x12\x01\x1c\x0f\x03\x02"},
-	{"net/rpc/jsonrpc", "j\x03\x03{\x16\x10!"},
-	{"net/smtp", "\x19.\v\x13\b\x03{\x16\x13\x1c"},
-	{"net/textproto", "\x02\x01j\x03{\r\t.\x01\x02\x13"},
-	{"net/url", "m\x03\x87\x01$\x12\x02\x01\x15"},
-	{"os", "m+\x01\x18\x03\b\t\r\x03\x01\x04\x11\x017\n\x05\x01\x01\v\x06"},
-	{"os/exec", "\x03\n`H \x01\x15\x01*\x06\a\f\x01\x04\v"},
+	{"net/mail", "\x02k\x03z\x04\x0f\x03\x14\x1c\x02\r\x04"},
+	{"net/netip", "\x04i+\x01#;\x026\x15"},
+	{"net/rpc", "\x02f\x05\x03\x10\n`\x04\x12\x01\x1d\x0f\x03\x02"},
+	{"net/rpc/jsonrpc", "j\x03\x03z\x16\x11!"},
+	{"net/smtp", "\x19.\v\x13\b\x03z\x16\x14\x1c"},
+	{"net/textproto", "\x02\x01j\x03z\r\t/\x01\x02\x13"},
+	{"net/url", "m\x03\x86\x01%\x12\x02\x01\x15"},
+	{"os", "m+\x01\x18\x03\b\t\r\x03\x01\x04\x10\x018\n\x05\x01\x01\v\x06"},
+	{"os/exec", "\x03\n`H \x01\x14\x01+\x06\a\f\x01\x04\v"},
 	{"os/exec/internal/fdtest", "\xb4\x02"},
 	{"os/signal", "\r\x89\x02\x17\x05\x02"},
-	{"os/user", "\x02\x01j\x03{+\r\f\x01\x02"},
+	{"os/user", "\x02\x01j\x03z,\r\f\x01\x02"},
 	{"path", "m+\xab\x01"},
-	{"path/filepath", "m+\x19;*\r\n\x03\x04\x0f"},
+	{"path/filepath", "m+\x19:+\r\n\x03\x04\x0f"},
 	{"plugin", "m"},
-	{"reflect", "m'\x04\x1c\b\f\x04\x02\x1a\x06\n+\f\x03\x0f\x02\x02"},
+	{"reflect", "m'\x04\x1c\b\f\x04\x02\x19\x10,\f\x03\x0f\x02\x02"},
 	{"reflect/internal/example1", ""},
 	{"reflect/internal/example2", ""},
-	{"regexp", "\x03\xe8\x017\v\x02\x01\x02\x0f\x02"},
+	{"regexp", "\x03\xe7\x018\v\x02\x01\x02\x0f\x02"},
 	{"regexp/syntax", "\xad\x02\x01\x01\x01\x11\x02"},
-	{"runtime", "\x94\x01\x04\x01\x02\f\x06\a\x02\x01\x01\x0f\x03\x01\x01\x01\x01\x01\x03s"},
-	{"runtime/coverage", "\x9f\x01L"},
+	{"runtime", "\x94\x01\x04\x01\x02\f\x06\a\x02\x01\x01\x0f\x03\x01\x01\x01\x01\x01\x03\x0fd"},
+	{"runtime/coverage", "\x9f\x01K"},
 	{"runtime/debug", "pUQ\r\n\x02\x01\x0f\x06"},
 	{"runtime/internal/startlinetest", ""},
 	{"runtime/internal/wasitest", ""},
-	{"runtime/metrics", "\xb6\x01B+\""},
-	{"runtime/pprof", "\x02\x01\x01\x03\x06Y\a\x03$3$\r\x1e\r\n\x01\x01\x01\x02\x02\b\x03\x06"},
+	{"runtime/metrics", "\xb6\x01A,\""},
+	{"runtime/pprof", "\x02\x01\x01\x03\x06Y\a\x03$3#\r\x1f\r\n\x01\x01\x01\x02\x02\b\x03\x06"},
 	{"runtime/race", "\xab\x02"},
 	{"runtime/race/internal/amd64v1", ""},
-	{"runtime/trace", "\rc{8\x0f\x01\x12"},
-	{"slices", "\x04\xea\x01\fK"},
-	{"sort", "\xc9\x0113"},
-	{"strconv", "m+:&\x02I"},
-	{"strings", "m'\x04:\x19\x03\f8\x0f\x02\x02"},
+	{"runtime/trace", "\rcz9\x0f\x01\x12"},
+	{"slices", "\x04\xe9\x01\fL"},
+	{"sort", "\xc9\x0104"},
+	{"strconv", "m+:%\x02J"},
+	{"strings", "m'\x04:\x18\x03\f9\x0f\x02\x02"},
 	{"structs", ""},
 	{"sync", "\xc8\x01\vP\x10\x12"},
 	{"sync/atomic", "\xc5\x02"},
-	{"syscall", "m(\x03\x01\x1b\b\x03\x03\x06\aT\x0f\x01\x12"},
-	{"testing", "\x03\n`\x02\x01G\x11\x0f\x14\r\x04\x1a\x06\x02\x05\x02\a\x01\x02\x01\x02\x01\f\x02\x02\x02"},
-	{"testing/fstest", "m\x03{\x01\v$\x12\x03\b\a"},
-	{"testing/internal/testdeps", "\x02\v\xa6\x01'\x11+\x03\x05\x03\b\a\x02\r"},
-	{"testing/iotest", "\x03j\x03{\x04"},
-	{"testing/quick", "o\x01\x88\x01\x04\"\x12\x0f"},
-	{"testing/slogtest", "\r`\x03\x81\x01-\x05\x12\n"},
-	{"text/scanner", "\x03m{++\x02"},
-	{"text/tabwriter", "p{X"},
-	{"text/template", "m\x03B9\x01\v\x1e\x01\x05\x01\x02\x05\r\x02\f\x03\x02"},
+	{"syscall", "m(\x03\x01\x1b\b\x03\x03\x06\aT\n\x05\x01\x12"},
+	{"testing", "\x03\n`\x02\x01X\x0f\x13\r\x04\x1b\x06\x02\x05\x02\a\x01\x02\x01\x02\x01\f\x02\x02\x02"},
+	{"testing/fstest", "m\x03z\x01\v%\x12\x03\b\a"},
+	{"testing/internal/testdeps", "\x02\v\xa6\x01'\x10,\x03\x05\x03\b\a\x02\r"},
+	{"testing/iotest", "\x03j\x03z\x04"},
+	{"testing/quick", "o\x01\x87\x01\x04#\x12\x0f"},
+	{"testing/slogtest", "\r`\x03\x80\x01.\x05\x12\n"},
+	{"text/scanner", "\x03mz,+\x02"},
+	{"text/tabwriter", "pzY"},
+	{"text/template", "m\x03B8\x01\v\x1f\x01\x05\x01\x02\x05\r\x02\f\x03\x02"},
 	{"text/template/parse", "\x03m\xb3\x01\f\x01\x11\x02"},
-	{"time", "m+\x1d\x1d()\x0f\x02\x11"},
+	{"time", "m+\x1d\x1d'*\x0f\x02\x11"},
 	{"time/tzdata", "m\xc7\x01\x11"},
 	{"unicode", ""},
 	{"unicode/utf16", ""},
 	{"unicode/utf8", ""},
 	{"unique", "\x94\x01>\x01P\x0f\x13\x12"},
 	{"unsafe", ""},
-	{"vendor/golang.org/x/crypto/chacha20", "\x10V\a\x8d\x01)'"},
+	{"vendor/golang.org/x/crypto/chacha20", "\x10V\a\x8c\x01*'"},
 	{"vendor/golang.org/x/crypto/chacha20poly1305", "\x10V\a\xd9\x01\x04\x01\a"},
-	{"vendor/golang.org/x/crypto/cryptobyte", "c\n\x03\x89\x01%!\n"},
+	{"vendor/golang.org/x/crypto/cryptobyte", "c\n\x03\x88\x01&!\n"},
 	{"vendor/golang.org/x/crypto/cryptobyte/asn1", ""},
 	{"vendor/golang.org/x/crypto/internal/alias", "\xc5\x02"},
-	{"vendor/golang.org/x/crypto/internal/poly1305", "Q\x15\x94\x01"},
+	{"vendor/golang.org/x/crypto/internal/poly1305", "Q\x15\x93\x01"},
 	{"vendor/golang.org/x/net/dns/dnsmessage", "m"},
-	{"vendor/golang.org/x/net/http/httpguts", "\x81\x02\x13\x1c\x13\r"},
-	{"vendor/golang.org/x/net/http/httpproxy", "m\x03\x91\x01\x0f\x05\x01\x1a\x13\r"},
-	{"vendor/golang.org/x/net/http2/hpack", "\x03j\x03{G"},
-	{"vendor/golang.org/x/net/idna", "p\x88\x018\x13\x10\x02\x01"},
-	{"vendor/golang.org/x/net/nettest", "\x03c\a\x03{\x11\x05\x15\x01\f\f\x01\x02\x02\x01\n"},
+	{"vendor/golang.org/x/net/http/httpguts", "\x80\x02\x14\x1c\x13\r"},
+	{"vendor/golang.org/x/net/http/httpproxy", "m\x03\x90\x01\x15\x01\x1a\x13\r"},
+	{"vendor/golang.org/x/net/http2/hpack", "\x03j\x03zH"},
+	{"vendor/golang.org/x/net/idna", "p\x87\x019\x13\x10\x02\x01"},
+	{"vendor/golang.org/x/net/nettest", "\x03c\a\x03z\x11\x05\x16\x01\f\f\x01\x02\x02\x01\n"},
 	{"vendor/golang.org/x/sys/cpu", "\x96\x02\r\f\x01\x15"},
 	{"vendor/golang.org/x/text/secure/bidirule", "m\xd6\x01\x11\x01"},
-	{"vendor/golang.org/x/text/transform", "\x03j~X"},
-	{"vendor/golang.org/x/text/unicode/bidi", "\x03\be\x7f?\x15"},
-	{"vendor/golang.org/x/text/unicode/norm", "f\n{G\x11\x11"},
+	{"vendor/golang.org/x/text/transform", "\x03j}Y"},
+	{"vendor/golang.org/x/text/unicode/bidi", "\x03\be~@\x15"},
+	{"vendor/golang.org/x/text/unicode/norm", "f\nzH\x11\x11"},
 	{"weak", "\x94\x01\x8f\x01\""},
 }
diff --git a/upstream/vendor/golang.org/x/tools/internal/stdlib/manifest.go b/upstream/vendor/golang.org/x/tools/internal/stdlib/manifest.go
index 2b418796ab..64f0326b64 100644
--- a/upstream/vendor/golang.org/x/tools/internal/stdlib/manifest.go
+++ b/upstream/vendor/golang.org/x/tools/internal/stdlib/manifest.go
@@ -8,17640 +8,17669 @@ package stdlib
 
 var PackageSymbols = map[string][]Symbol{
 	"archive/tar": {
-		{"(*Header).FileInfo", Method, 1},
-		{"(*Reader).Next", Method, 0},
-		{"(*Reader).Read", Method, 0},
-		{"(*Writer).AddFS", Method, 22},
-		{"(*Writer).Close", Method, 0},
-		{"(*Writer).Flush", Method, 0},
-		{"(*Writer).Write", Method, 0},
-		{"(*Writer).WriteHeader", Method, 0},
-		{"(Format).String", Method, 10},
-		{"ErrFieldTooLong", Var, 0},
-		{"ErrHeader", Var, 0},
-		{"ErrInsecurePath", Var, 20},
-		{"ErrWriteAfterClose", Var, 0},
-		{"ErrWriteTooLong", Var, 0},
-		{"FileInfoHeader", Func, 1},
-		{"FileInfoNames", Type, 23},
-		{"Format", Type, 10},
-		{"FormatGNU", Const, 10},
-		{"FormatPAX", Const, 10},
-		{"FormatUSTAR", Const, 10},
-		{"FormatUnknown", Const, 10},
-		{"Header", Type, 0},
-		{"Header.AccessTime", Field, 0},
-		{"Header.ChangeTime", Field, 0},
-		{"Header.Devmajor", Field, 0},
-		{"Header.Devminor", Field, 0},
-		{"Header.Format", Field, 10},
-		{"Header.Gid", Field, 0},
-		{"Header.Gname", Field, 0},
-		{"Header.Linkname", Field, 0},
-		{"Header.ModTime", Field, 0},
-		{"Header.Mode", Field, 0},
-		{"Header.Name", Field, 0},
-		{"Header.PAXRecords", Field, 10},
-		{"Header.Size", Field, 0},
-		{"Header.Typeflag", Field, 0},
-		{"Header.Uid", Field, 0},
-		{"Header.Uname", Field, 0},
-		{"Header.Xattrs", Field, 3},
-		{"NewReader", Func, 0},
-		{"NewWriter", Func, 0},
-		{"Reader", Type, 0},
-		{"TypeBlock", Const, 0},
-		{"TypeChar", Const, 0},
-		{"TypeCont", Const, 0},
-		{"TypeDir", Const, 0},
-		{"TypeFifo", Const, 0},
-		{"TypeGNULongLink", Const, 1},
-		{"TypeGNULongName", Const, 1},
-		{"TypeGNUSparse", Const, 3},
-		{"TypeLink", Const, 0},
-		{"TypeReg", Const, 0},
-		{"TypeRegA", Const, 0},
-		{"TypeSymlink", Const, 0},
-		{"TypeXGlobalHeader", Const, 0},
-		{"TypeXHeader", Const, 0},
-		{"Writer", Type, 0},
+		{"(*Header).FileInfo", Method, 1, ""},
+		{"(*Reader).Next", Method, 0, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Writer).AddFS", Method, 22, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"(*Writer).WriteHeader", Method, 0, ""},
+		{"(Format).String", Method, 10, ""},
+		{"ErrFieldTooLong", Var, 0, ""},
+		{"ErrHeader", Var, 0, ""},
+		{"ErrInsecurePath", Var, 20, ""},
+		{"ErrWriteAfterClose", Var, 0, ""},
+		{"ErrWriteTooLong", Var, 0, ""},
+		{"FileInfoHeader", Func, 1, "func(fi fs.FileInfo, link string) (*Header, error)"},
+		{"FileInfoNames", Type, 23, ""},
+		{"Format", Type, 10, ""},
+		{"FormatGNU", Const, 10, ""},
+		{"FormatPAX", Const, 10, ""},
+		{"FormatUSTAR", Const, 10, ""},
+		{"FormatUnknown", Const, 10, ""},
+		{"Header", Type, 0, ""},
+		{"Header.AccessTime", Field, 0, ""},
+		{"Header.ChangeTime", Field, 0, ""},
+		{"Header.Devmajor", Field, 0, ""},
+		{"Header.Devminor", Field, 0, ""},
+		{"Header.Format", Field, 10, ""},
+		{"Header.Gid", Field, 0, ""},
+		{"Header.Gname", Field, 0, ""},
+		{"Header.Linkname", Field, 0, ""},
+		{"Header.ModTime", Field, 0, ""},
+		{"Header.Mode", Field, 0, ""},
+		{"Header.Name", Field, 0, ""},
+		{"Header.PAXRecords", Field, 10, ""},
+		{"Header.Size", Field, 0, ""},
+		{"Header.Typeflag", Field, 0, ""},
+		{"Header.Uid", Field, 0, ""},
+		{"Header.Uname", Field, 0, ""},
+		{"Header.Xattrs", Field, 3, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) *Reader"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"Reader", Type, 0, ""},
+		{"TypeBlock", Const, 0, ""},
+		{"TypeChar", Const, 0, ""},
+		{"TypeCont", Const, 0, ""},
+		{"TypeDir", Const, 0, ""},
+		{"TypeFifo", Const, 0, ""},
+		{"TypeGNULongLink", Const, 1, ""},
+		{"TypeGNULongName", Const, 1, ""},
+		{"TypeGNUSparse", Const, 3, ""},
+		{"TypeLink", Const, 0, ""},
+		{"TypeReg", Const, 0, ""},
+		{"TypeRegA", Const, 0, ""},
+		{"TypeSymlink", Const, 0, ""},
+		{"TypeXGlobalHeader", Const, 0, ""},
+		{"TypeXHeader", Const, 0, ""},
+		{"Writer", Type, 0, ""},
 	},
 	"archive/zip": {
-		{"(*File).DataOffset", Method, 2},
-		{"(*File).FileInfo", Method, 0},
-		{"(*File).ModTime", Method, 0},
-		{"(*File).Mode", Method, 0},
-		{"(*File).Open", Method, 0},
-		{"(*File).OpenRaw", Method, 17},
-		{"(*File).SetModTime", Method, 0},
-		{"(*File).SetMode", Method, 0},
-		{"(*FileHeader).FileInfo", Method, 0},
-		{"(*FileHeader).ModTime", Method, 0},
-		{"(*FileHeader).Mode", Method, 0},
-		{"(*FileHeader).SetModTime", Method, 0},
-		{"(*FileHeader).SetMode", Method, 0},
-		{"(*ReadCloser).Close", Method, 0},
-		{"(*ReadCloser).Open", Method, 16},
-		{"(*ReadCloser).RegisterDecompressor", Method, 6},
-		{"(*Reader).Open", Method, 16},
-		{"(*Reader).RegisterDecompressor", Method, 6},
-		{"(*Writer).AddFS", Method, 22},
-		{"(*Writer).Close", Method, 0},
-		{"(*Writer).Copy", Method, 17},
-		{"(*Writer).Create", Method, 0},
-		{"(*Writer).CreateHeader", Method, 0},
-		{"(*Writer).CreateRaw", Method, 17},
-		{"(*Writer).Flush", Method, 4},
-		{"(*Writer).RegisterCompressor", Method, 6},
-		{"(*Writer).SetComment", Method, 10},
-		{"(*Writer).SetOffset", Method, 5},
-		{"Compressor", Type, 2},
-		{"Decompressor", Type, 2},
-		{"Deflate", Const, 0},
-		{"ErrAlgorithm", Var, 0},
-		{"ErrChecksum", Var, 0},
-		{"ErrFormat", Var, 0},
-		{"ErrInsecurePath", Var, 20},
-		{"File", Type, 0},
-		{"File.FileHeader", Field, 0},
-		{"FileHeader", Type, 0},
-		{"FileHeader.CRC32", Field, 0},
-		{"FileHeader.Comment", Field, 0},
-		{"FileHeader.CompressedSize", Field, 0},
-		{"FileHeader.CompressedSize64", Field, 1},
-		{"FileHeader.CreatorVersion", Field, 0},
-		{"FileHeader.ExternalAttrs", Field, 0},
-		{"FileHeader.Extra", Field, 0},
-		{"FileHeader.Flags", Field, 0},
-		{"FileHeader.Method", Field, 0},
-		{"FileHeader.Modified", Field, 10},
-		{"FileHeader.ModifiedDate", Field, 0},
-		{"FileHeader.ModifiedTime", Field, 0},
-		{"FileHeader.Name", Field, 0},
-		{"FileHeader.NonUTF8", Field, 10},
-		{"FileHeader.ReaderVersion", Field, 0},
-		{"FileHeader.UncompressedSize", Field, 0},
-		{"FileHeader.UncompressedSize64", Field, 1},
-		{"FileInfoHeader", Func, 0},
-		{"NewReader", Func, 0},
-		{"NewWriter", Func, 0},
-		{"OpenReader", Func, 0},
-		{"ReadCloser", Type, 0},
-		{"ReadCloser.Reader", Field, 0},
-		{"Reader", Type, 0},
-		{"Reader.Comment", Field, 0},
-		{"Reader.File", Field, 0},
-		{"RegisterCompressor", Func, 2},
-		{"RegisterDecompressor", Func, 2},
-		{"Store", Const, 0},
-		{"Writer", Type, 0},
+		{"(*File).DataOffset", Method, 2, ""},
+		{"(*File).FileInfo", Method, 0, ""},
+		{"(*File).ModTime", Method, 0, ""},
+		{"(*File).Mode", Method, 0, ""},
+		{"(*File).Open", Method, 0, ""},
+		{"(*File).OpenRaw", Method, 17, ""},
+		{"(*File).SetModTime", Method, 0, ""},
+		{"(*File).SetMode", Method, 0, ""},
+		{"(*FileHeader).FileInfo", Method, 0, ""},
+		{"(*FileHeader).ModTime", Method, 0, ""},
+		{"(*FileHeader).Mode", Method, 0, ""},
+		{"(*FileHeader).SetModTime", Method, 0, ""},
+		{"(*FileHeader).SetMode", Method, 0, ""},
+		{"(*ReadCloser).Close", Method, 0, ""},
+		{"(*ReadCloser).Open", Method, 16, ""},
+		{"(*ReadCloser).RegisterDecompressor", Method, 6, ""},
+		{"(*Reader).Open", Method, 16, ""},
+		{"(*Reader).RegisterDecompressor", Method, 6, ""},
+		{"(*Writer).AddFS", Method, 22, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Copy", Method, 17, ""},
+		{"(*Writer).Create", Method, 0, ""},
+		{"(*Writer).CreateHeader", Method, 0, ""},
+		{"(*Writer).CreateRaw", Method, 17, ""},
+		{"(*Writer).Flush", Method, 4, ""},
+		{"(*Writer).RegisterCompressor", Method, 6, ""},
+		{"(*Writer).SetComment", Method, 10, ""},
+		{"(*Writer).SetOffset", Method, 5, ""},
+		{"Compressor", Type, 2, ""},
+		{"Decompressor", Type, 2, ""},
+		{"Deflate", Const, 0, ""},
+		{"ErrAlgorithm", Var, 0, ""},
+		{"ErrChecksum", Var, 0, ""},
+		{"ErrFormat", Var, 0, ""},
+		{"ErrInsecurePath", Var, 20, ""},
+		{"File", Type, 0, ""},
+		{"File.FileHeader", Field, 0, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.CRC32", Field, 0, ""},
+		{"FileHeader.Comment", Field, 0, ""},
+		{"FileHeader.CompressedSize", Field, 0, ""},
+		{"FileHeader.CompressedSize64", Field, 1, ""},
+		{"FileHeader.CreatorVersion", Field, 0, ""},
+		{"FileHeader.ExternalAttrs", Field, 0, ""},
+		{"FileHeader.Extra", Field, 0, ""},
+		{"FileHeader.Flags", Field, 0, ""},
+		{"FileHeader.Method", Field, 0, ""},
+		{"FileHeader.Modified", Field, 10, ""},
+		{"FileHeader.ModifiedDate", Field, 0, ""},
+		{"FileHeader.ModifiedTime", Field, 0, ""},
+		{"FileHeader.Name", Field, 0, ""},
+		{"FileHeader.NonUTF8", Field, 10, ""},
+		{"FileHeader.ReaderVersion", Field, 0, ""},
+		{"FileHeader.UncompressedSize", Field, 0, ""},
+		{"FileHeader.UncompressedSize64", Field, 1, ""},
+		{"FileInfoHeader", Func, 0, "func(fi fs.FileInfo) (*FileHeader, error)"},
+		{"NewReader", Func, 0, "func(r io.ReaderAt, size int64) (*Reader, error)"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"OpenReader", Func, 0, "func(name string) (*ReadCloser, error)"},
+		{"ReadCloser", Type, 0, ""},
+		{"ReadCloser.Reader", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Reader.Comment", Field, 0, ""},
+		{"Reader.File", Field, 0, ""},
+		{"RegisterCompressor", Func, 2, "func(method uint16, comp Compressor)"},
+		{"RegisterDecompressor", Func, 2, "func(method uint16, dcomp Decompressor)"},
+		{"Store", Const, 0, ""},
+		{"Writer", Type, 0, ""},
 	},
 	"bufio": {
-		{"(*Reader).Buffered", Method, 0},
-		{"(*Reader).Discard", Method, 5},
-		{"(*Reader).Peek", Method, 0},
-		{"(*Reader).Read", Method, 0},
-		{"(*Reader).ReadByte", Method, 0},
-		{"(*Reader).ReadBytes", Method, 0},
-		{"(*Reader).ReadLine", Method, 0},
-		{"(*Reader).ReadRune", Method, 0},
-		{"(*Reader).ReadSlice", Method, 0},
-		{"(*Reader).ReadString", Method, 0},
-		{"(*Reader).Reset", Method, 2},
-		{"(*Reader).Size", Method, 10},
-		{"(*Reader).UnreadByte", Method, 0},
-		{"(*Reader).UnreadRune", Method, 0},
-		{"(*Reader).WriteTo", Method, 1},
-		{"(*Scanner).Buffer", Method, 6},
-		{"(*Scanner).Bytes", Method, 1},
-		{"(*Scanner).Err", Method, 1},
-		{"(*Scanner).Scan", Method, 1},
-		{"(*Scanner).Split", Method, 1},
-		{"(*Scanner).Text", Method, 1},
-		{"(*Writer).Available", Method, 0},
-		{"(*Writer).AvailableBuffer", Method, 18},
-		{"(*Writer).Buffered", Method, 0},
-		{"(*Writer).Flush", Method, 0},
-		{"(*Writer).ReadFrom", Method, 1},
-		{"(*Writer).Reset", Method, 2},
-		{"(*Writer).Size", Method, 10},
-		{"(*Writer).Write", Method, 0},
-		{"(*Writer).WriteByte", Method, 0},
-		{"(*Writer).WriteRune", Method, 0},
-		{"(*Writer).WriteString", Method, 0},
-		{"(ReadWriter).Available", Method, 0},
-		{"(ReadWriter).AvailableBuffer", Method, 18},
-		{"(ReadWriter).Discard", Method, 5},
-		{"(ReadWriter).Flush", Method, 0},
-		{"(ReadWriter).Peek", Method, 0},
-		{"(ReadWriter).Read", Method, 0},
-		{"(ReadWriter).ReadByte", Method, 0},
-		{"(ReadWriter).ReadBytes", Method, 0},
-		{"(ReadWriter).ReadFrom", Method, 1},
-		{"(ReadWriter).ReadLine", Method, 0},
-		{"(ReadWriter).ReadRune", Method, 0},
-		{"(ReadWriter).ReadSlice", Method, 0},
-		{"(ReadWriter).ReadString", Method, 0},
-		{"(ReadWriter).UnreadByte", Method, 0},
-		{"(ReadWriter).UnreadRune", Method, 0},
-		{"(ReadWriter).Write", Method, 0},
-		{"(ReadWriter).WriteByte", Method, 0},
-		{"(ReadWriter).WriteRune", Method, 0},
-		{"(ReadWriter).WriteString", Method, 0},
-		{"(ReadWriter).WriteTo", Method, 1},
-		{"ErrAdvanceTooFar", Var, 1},
-		{"ErrBadReadCount", Var, 15},
-		{"ErrBufferFull", Var, 0},
-		{"ErrFinalToken", Var, 6},
-		{"ErrInvalidUnreadByte", Var, 0},
-		{"ErrInvalidUnreadRune", Var, 0},
-		{"ErrNegativeAdvance", Var, 1},
-		{"ErrNegativeCount", Var, 0},
-		{"ErrTooLong", Var, 1},
-		{"MaxScanTokenSize", Const, 1},
-		{"NewReadWriter", Func, 0},
-		{"NewReader", Func, 0},
-		{"NewReaderSize", Func, 0},
-		{"NewScanner", Func, 1},
-		{"NewWriter", Func, 0},
-		{"NewWriterSize", Func, 0},
-		{"ReadWriter", Type, 0},
-		{"ReadWriter.Reader", Field, 0},
-		{"ReadWriter.Writer", Field, 0},
-		{"Reader", Type, 0},
-		{"ScanBytes", Func, 1},
-		{"ScanLines", Func, 1},
-		{"ScanRunes", Func, 1},
-		{"ScanWords", Func, 1},
-		{"Scanner", Type, 1},
-		{"SplitFunc", Type, 1},
-		{"Writer", Type, 0},
+		{"(*Reader).Buffered", Method, 0, ""},
+		{"(*Reader).Discard", Method, 5, ""},
+		{"(*Reader).Peek", Method, 0, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).ReadByte", Method, 0, ""},
+		{"(*Reader).ReadBytes", Method, 0, ""},
+		{"(*Reader).ReadLine", Method, 0, ""},
+		{"(*Reader).ReadRune", Method, 0, ""},
+		{"(*Reader).ReadSlice", Method, 0, ""},
+		{"(*Reader).ReadString", Method, 0, ""},
+		{"(*Reader).Reset", Method, 2, ""},
+		{"(*Reader).Size", Method, 10, ""},
+		{"(*Reader).UnreadByte", Method, 0, ""},
+		{"(*Reader).UnreadRune", Method, 0, ""},
+		{"(*Reader).WriteTo", Method, 1, ""},
+		{"(*Scanner).Buffer", Method, 6, ""},
+		{"(*Scanner).Bytes", Method, 1, ""},
+		{"(*Scanner).Err", Method, 1, ""},
+		{"(*Scanner).Scan", Method, 1, ""},
+		{"(*Scanner).Split", Method, 1, ""},
+		{"(*Scanner).Text", Method, 1, ""},
+		{"(*Writer).Available", Method, 0, ""},
+		{"(*Writer).AvailableBuffer", Method, 18, ""},
+		{"(*Writer).Buffered", Method, 0, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).ReadFrom", Method, 1, ""},
+		{"(*Writer).Reset", Method, 2, ""},
+		{"(*Writer).Size", Method, 10, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"(*Writer).WriteByte", Method, 0, ""},
+		{"(*Writer).WriteRune", Method, 0, ""},
+		{"(*Writer).WriteString", Method, 0, ""},
+		{"(ReadWriter).Available", Method, 0, ""},
+		{"(ReadWriter).AvailableBuffer", Method, 18, ""},
+		{"(ReadWriter).Discard", Method, 5, ""},
+		{"(ReadWriter).Flush", Method, 0, ""},
+		{"(ReadWriter).Peek", Method, 0, ""},
+		{"(ReadWriter).Read", Method, 0, ""},
+		{"(ReadWriter).ReadByte", Method, 0, ""},
+		{"(ReadWriter).ReadBytes", Method, 0, ""},
+		{"(ReadWriter).ReadFrom", Method, 1, ""},
+		{"(ReadWriter).ReadLine", Method, 0, ""},
+		{"(ReadWriter).ReadRune", Method, 0, ""},
+		{"(ReadWriter).ReadSlice", Method, 0, ""},
+		{"(ReadWriter).ReadString", Method, 0, ""},
+		{"(ReadWriter).UnreadByte", Method, 0, ""},
+		{"(ReadWriter).UnreadRune", Method, 0, ""},
+		{"(ReadWriter).Write", Method, 0, ""},
+		{"(ReadWriter).WriteByte", Method, 0, ""},
+		{"(ReadWriter).WriteRune", Method, 0, ""},
+		{"(ReadWriter).WriteString", Method, 0, ""},
+		{"(ReadWriter).WriteTo", Method, 1, ""},
+		{"ErrAdvanceTooFar", Var, 1, ""},
+		{"ErrBadReadCount", Var, 15, ""},
+		{"ErrBufferFull", Var, 0, ""},
+		{"ErrFinalToken", Var, 6, ""},
+		{"ErrInvalidUnreadByte", Var, 0, ""},
+		{"ErrInvalidUnreadRune", Var, 0, ""},
+		{"ErrNegativeAdvance", Var, 1, ""},
+		{"ErrNegativeCount", Var, 0, ""},
+		{"ErrTooLong", Var, 1, ""},
+		{"MaxScanTokenSize", Const, 1, ""},
+		{"NewReadWriter", Func, 0, "func(r *Reader, w *Writer) *ReadWriter"},
+		{"NewReader", Func, 0, "func(rd io.Reader) *Reader"},
+		{"NewReaderSize", Func, 0, "func(rd io.Reader, size int) *Reader"},
+		{"NewScanner", Func, 1, "func(r io.Reader) *Scanner"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"NewWriterSize", Func, 0, "func(w io.Writer, size int) *Writer"},
+		{"ReadWriter", Type, 0, ""},
+		{"ReadWriter.Reader", Field, 0, ""},
+		{"ReadWriter.Writer", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"ScanBytes", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
+		{"ScanLines", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
+		{"ScanRunes", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
+		{"ScanWords", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
+		{"Scanner", Type, 1, ""},
+		{"SplitFunc", Type, 1, ""},
+		{"Writer", Type, 0, ""},
 	},
 	"bytes": {
-		{"(*Buffer).Available", Method, 21},
-		{"(*Buffer).AvailableBuffer", Method, 21},
-		{"(*Buffer).Bytes", Method, 0},
-		{"(*Buffer).Cap", Method, 5},
-		{"(*Buffer).Grow", Method, 1},
-		{"(*Buffer).Len", Method, 0},
-		{"(*Buffer).Next", Method, 0},
-		{"(*Buffer).Read", Method, 0},
-		{"(*Buffer).ReadByte", Method, 0},
-		{"(*Buffer).ReadBytes", Method, 0},
-		{"(*Buffer).ReadFrom", Method, 0},
-		{"(*Buffer).ReadRune", Method, 0},
-		{"(*Buffer).ReadString", Method, 0},
-		{"(*Buffer).Reset", Method, 0},
-		{"(*Buffer).String", Method, 0},
-		{"(*Buffer).Truncate", Method, 0},
-		{"(*Buffer).UnreadByte", Method, 0},
-		{"(*Buffer).UnreadRune", Method, 0},
-		{"(*Buffer).Write", Method, 0},
-		{"(*Buffer).WriteByte", Method, 0},
-		{"(*Buffer).WriteRune", Method, 0},
-		{"(*Buffer).WriteString", Method, 0},
-		{"(*Buffer).WriteTo", Method, 0},
-		{"(*Reader).Len", Method, 0},
-		{"(*Reader).Read", Method, 0},
-		{"(*Reader).ReadAt", Method, 0},
-		{"(*Reader).ReadByte", Method, 0},
-		{"(*Reader).ReadRune", Method, 0},
-		{"(*Reader).Reset", Method, 7},
-		{"(*Reader).Seek", Method, 0},
-		{"(*Reader).Size", Method, 5},
-		{"(*Reader).UnreadByte", Method, 0},
-		{"(*Reader).UnreadRune", Method, 0},
-		{"(*Reader).WriteTo", Method, 1},
-		{"Buffer", Type, 0},
-		{"Clone", Func, 20},
-		{"Compare", Func, 0},
-		{"Contains", Func, 0},
-		{"ContainsAny", Func, 7},
-		{"ContainsFunc", Func, 21},
-		{"ContainsRune", Func, 7},
-		{"Count", Func, 0},
-		{"Cut", Func, 18},
-		{"CutPrefix", Func, 20},
-		{"CutSuffix", Func, 20},
-		{"Equal", Func, 0},
-		{"EqualFold", Func, 0},
-		{"ErrTooLarge", Var, 0},
-		{"Fields", Func, 0},
-		{"FieldsFunc", Func, 0},
-		{"FieldsFuncSeq", Func, 24},
-		{"FieldsSeq", Func, 24},
-		{"HasPrefix", Func, 0},
-		{"HasSuffix", Func, 0},
-		{"Index", Func, 0},
-		{"IndexAny", Func, 0},
-		{"IndexByte", Func, 0},
-		{"IndexFunc", Func, 0},
-		{"IndexRune", Func, 0},
-		{"Join", Func, 0},
-		{"LastIndex", Func, 0},
-		{"LastIndexAny", Func, 0},
-		{"LastIndexByte", Func, 5},
-		{"LastIndexFunc", Func, 0},
-		{"Lines", Func, 24},
-		{"Map", Func, 0},
-		{"MinRead", Const, 0},
-		{"NewBuffer", Func, 0},
-		{"NewBufferString", Func, 0},
-		{"NewReader", Func, 0},
-		{"Reader", Type, 0},
-		{"Repeat", Func, 0},
-		{"Replace", Func, 0},
-		{"ReplaceAll", Func, 12},
-		{"Runes", Func, 0},
-		{"Split", Func, 0},
-		{"SplitAfter", Func, 0},
-		{"SplitAfterN", Func, 0},
-		{"SplitAfterSeq", Func, 24},
-		{"SplitN", Func, 0},
-		{"SplitSeq", Func, 24},
-		{"Title", Func, 0},
-		{"ToLower", Func, 0},
-		{"ToLowerSpecial", Func, 0},
-		{"ToTitle", Func, 0},
-		{"ToTitleSpecial", Func, 0},
-		{"ToUpper", Func, 0},
-		{"ToUpperSpecial", Func, 0},
-		{"ToValidUTF8", Func, 13},
-		{"Trim", Func, 0},
-		{"TrimFunc", Func, 0},
-		{"TrimLeft", Func, 0},
-		{"TrimLeftFunc", Func, 0},
-		{"TrimPrefix", Func, 1},
-		{"TrimRight", Func, 0},
-		{"TrimRightFunc", Func, 0},
-		{"TrimSpace", Func, 0},
-		{"TrimSuffix", Func, 1},
+		{"(*Buffer).Available", Method, 21, ""},
+		{"(*Buffer).AvailableBuffer", Method, 21, ""},
+		{"(*Buffer).Bytes", Method, 0, ""},
+		{"(*Buffer).Cap", Method, 5, ""},
+		{"(*Buffer).Grow", Method, 1, ""},
+		{"(*Buffer).Len", Method, 0, ""},
+		{"(*Buffer).Next", Method, 0, ""},
+		{"(*Buffer).Read", Method, 0, ""},
+		{"(*Buffer).ReadByte", Method, 0, ""},
+		{"(*Buffer).ReadBytes", Method, 0, ""},
+		{"(*Buffer).ReadFrom", Method, 0, ""},
+		{"(*Buffer).ReadRune", Method, 0, ""},
+		{"(*Buffer).ReadString", Method, 0, ""},
+		{"(*Buffer).Reset", Method, 0, ""},
+		{"(*Buffer).String", Method, 0, ""},
+		{"(*Buffer).Truncate", Method, 0, ""},
+		{"(*Buffer).UnreadByte", Method, 0, ""},
+		{"(*Buffer).UnreadRune", Method, 0, ""},
+		{"(*Buffer).Write", Method, 0, ""},
+		{"(*Buffer).WriteByte", Method, 0, ""},
+		{"(*Buffer).WriteRune", Method, 0, ""},
+		{"(*Buffer).WriteString", Method, 0, ""},
+		{"(*Buffer).WriteTo", Method, 0, ""},
+		{"(*Reader).Len", Method, 0, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).ReadAt", Method, 0, ""},
+		{"(*Reader).ReadByte", Method, 0, ""},
+		{"(*Reader).ReadRune", Method, 0, ""},
+		{"(*Reader).Reset", Method, 7, ""},
+		{"(*Reader).Seek", Method, 0, ""},
+		{"(*Reader).Size", Method, 5, ""},
+		{"(*Reader).UnreadByte", Method, 0, ""},
+		{"(*Reader).UnreadRune", Method, 0, ""},
+		{"(*Reader).WriteTo", Method, 1, ""},
+		{"Buffer", Type, 0, ""},
+		{"Clone", Func, 20, "func(b []byte) []byte"},
+		{"Compare", Func, 0, "func(a []byte, b []byte) int"},
+		{"Contains", Func, 0, "func(b []byte, subslice []byte) bool"},
+		{"ContainsAny", Func, 7, "func(b []byte, chars string) bool"},
+		{"ContainsFunc", Func, 21, "func(b []byte, f func(rune) bool) bool"},
+		{"ContainsRune", Func, 7, "func(b []byte, r rune) bool"},
+		{"Count", Func, 0, "func(s []byte, sep []byte) int"},
+		{"Cut", Func, 18, "func(s []byte, sep []byte) (before []byte, after []byte, found bool)"},
+		{"CutPrefix", Func, 20, "func(s []byte, prefix []byte) (after []byte, found bool)"},
+		{"CutSuffix", Func, 20, "func(s []byte, suffix []byte) (before []byte, found bool)"},
+		{"Equal", Func, 0, "func(a []byte, b []byte) bool"},
+		{"EqualFold", Func, 0, "func(s []byte, t []byte) bool"},
+		{"ErrTooLarge", Var, 0, ""},
+		{"Fields", Func, 0, "func(s []byte) [][]byte"},
+		{"FieldsFunc", Func, 0, "func(s []byte, f func(rune) bool) [][]byte"},
+		{"FieldsFuncSeq", Func, 24, "func(s []byte, f func(rune) bool) iter.Seq[[]byte]"},
+		{"FieldsSeq", Func, 24, "func(s []byte) iter.Seq[[]byte]"},
+		{"HasPrefix", Func, 0, "func(s []byte, prefix []byte) bool"},
+		{"HasSuffix", Func, 0, "func(s []byte, suffix []byte) bool"},
+		{"Index", Func, 0, "func(s []byte, sep []byte) int"},
+		{"IndexAny", Func, 0, "func(s []byte, chars string) int"},
+		{"IndexByte", Func, 0, "func(b []byte, c byte) int"},
+		{"IndexFunc", Func, 0, "func(s []byte, f func(r rune) bool) int"},
+		{"IndexRune", Func, 0, "func(s []byte, r rune) int"},
+		{"Join", Func, 0, "func(s [][]byte, sep []byte) []byte"},
+		{"LastIndex", Func, 0, "func(s []byte, sep []byte) int"},
+		{"LastIndexAny", Func, 0, "func(s []byte, chars string) int"},
+		{"LastIndexByte", Func, 5, "func(s []byte, c byte) int"},
+		{"LastIndexFunc", Func, 0, "func(s []byte, f func(r rune) bool) int"},
+		{"Lines", Func, 24, "func(s []byte) iter.Seq[[]byte]"},
+		{"Map", Func, 0, "func(mapping func(r rune) rune, s []byte) []byte"},
+		{"MinRead", Const, 0, ""},
+		{"NewBuffer", Func, 0, "func(buf []byte) *Buffer"},
+		{"NewBufferString", Func, 0, "func(s string) *Buffer"},
+		{"NewReader", Func, 0, "func(b []byte) *Reader"},
+		{"Reader", Type, 0, ""},
+		{"Repeat", Func, 0, "func(b []byte, count int) []byte"},
+		{"Replace", Func, 0, "func(s []byte, old []byte, new []byte, n int) []byte"},
+		{"ReplaceAll", Func, 12, "func(s []byte, old []byte, new []byte) []byte"},
+		{"Runes", Func, 0, "func(s []byte) []rune"},
+		{"Split", Func, 0, "func(s []byte, sep []byte) [][]byte"},
+		{"SplitAfter", Func, 0, "func(s []byte, sep []byte) [][]byte"},
+		{"SplitAfterN", Func, 0, "func(s []byte, sep []byte, n int) [][]byte"},
+		{"SplitAfterSeq", Func, 24, "func(s []byte, sep []byte) iter.Seq[[]byte]"},
+		{"SplitN", Func, 0, "func(s []byte, sep []byte, n int) [][]byte"},
+		{"SplitSeq", Func, 24, "func(s []byte, sep []byte) iter.Seq[[]byte]"},
+		{"Title", Func, 0, "func(s []byte) []byte"},
+		{"ToLower", Func, 0, "func(s []byte) []byte"},
+		{"ToLowerSpecial", Func, 0, "func(c unicode.SpecialCase, s []byte) []byte"},
+		{"ToTitle", Func, 0, "func(s []byte) []byte"},
+		{"ToTitleSpecial", Func, 0, "func(c unicode.SpecialCase, s []byte) []byte"},
+		{"ToUpper", Func, 0, "func(s []byte) []byte"},
+		{"ToUpperSpecial", Func, 0, "func(c unicode.SpecialCase, s []byte) []byte"},
+		{"ToValidUTF8", Func, 13, "func(s []byte, replacement []byte) []byte"},
+		{"Trim", Func, 0, "func(s []byte, cutset string) []byte"},
+		{"TrimFunc", Func, 0, "func(s []byte, f func(r rune) bool) []byte"},
+		{"TrimLeft", Func, 0, "func(s []byte, cutset string) []byte"},
+		{"TrimLeftFunc", Func, 0, "func(s []byte, f func(r rune) bool) []byte"},
+		{"TrimPrefix", Func, 1, "func(s []byte, prefix []byte) []byte"},
+		{"TrimRight", Func, 0, "func(s []byte, cutset string) []byte"},
+		{"TrimRightFunc", Func, 0, "func(s []byte, f func(r rune) bool) []byte"},
+		{"TrimSpace", Func, 0, "func(s []byte) []byte"},
+		{"TrimSuffix", Func, 1, "func(s []byte, suffix []byte) []byte"},
 	},
 	"cmp": {
-		{"Compare", Func, 21},
-		{"Less", Func, 21},
-		{"Or", Func, 22},
-		{"Ordered", Type, 21},
+		{"Compare", Func, 21, "func[T Ordered](x T, y T) int"},
+		{"Less", Func, 21, "func[T Ordered](x T, y T) bool"},
+		{"Or", Func, 22, "func[T comparable](vals ...T) T"},
+		{"Ordered", Type, 21, ""},
 	},
 	"compress/bzip2": {
-		{"(StructuralError).Error", Method, 0},
-		{"NewReader", Func, 0},
-		{"StructuralError", Type, 0},
+		{"(StructuralError).Error", Method, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"StructuralError", Type, 0, ""},
 	},
 	"compress/flate": {
-		{"(*ReadError).Error", Method, 0},
-		{"(*WriteError).Error", Method, 0},
-		{"(*Writer).Close", Method, 0},
-		{"(*Writer).Flush", Method, 0},
-		{"(*Writer).Reset", Method, 2},
-		{"(*Writer).Write", Method, 0},
-		{"(CorruptInputError).Error", Method, 0},
-		{"(InternalError).Error", Method, 0},
-		{"BestCompression", Const, 0},
-		{"BestSpeed", Const, 0},
-		{"CorruptInputError", Type, 0},
-		{"DefaultCompression", Const, 0},
-		{"HuffmanOnly", Const, 7},
-		{"InternalError", Type, 0},
-		{"NewReader", Func, 0},
-		{"NewReaderDict", Func, 0},
-		{"NewWriter", Func, 0},
-		{"NewWriterDict", Func, 0},
-		{"NoCompression", Const, 0},
-		{"ReadError", Type, 0},
-		{"ReadError.Err", Field, 0},
-		{"ReadError.Offset", Field, 0},
-		{"Reader", Type, 0},
-		{"Resetter", Type, 4},
-		{"WriteError", Type, 0},
-		{"WriteError.Err", Field, 0},
-		{"WriteError.Offset", Field, 0},
-		{"Writer", Type, 0},
+		{"(*ReadError).Error", Method, 0, ""},
+		{"(*WriteError).Error", Method, 0, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Reset", Method, 2, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"(CorruptInputError).Error", Method, 0, ""},
+		{"(InternalError).Error", Method, 0, ""},
+		{"BestCompression", Const, 0, ""},
+		{"BestSpeed", Const, 0, ""},
+		{"CorruptInputError", Type, 0, ""},
+		{"DefaultCompression", Const, 0, ""},
+		{"HuffmanOnly", Const, 7, ""},
+		{"InternalError", Type, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) io.ReadCloser"},
+		{"NewReaderDict", Func, 0, "func(r io.Reader, dict []byte) io.ReadCloser"},
+		{"NewWriter", Func, 0, "func(w io.Writer, level int) (*Writer, error)"},
+		{"NewWriterDict", Func, 0, "func(w io.Writer, level int, dict []byte) (*Writer, error)"},
+		{"NoCompression", Const, 0, ""},
+		{"ReadError", Type, 0, ""},
+		{"ReadError.Err", Field, 0, ""},
+		{"ReadError.Offset", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Resetter", Type, 4, ""},
+		{"WriteError", Type, 0, ""},
+		{"WriteError.Err", Field, 0, ""},
+		{"WriteError.Offset", Field, 0, ""},
+		{"Writer", Type, 0, ""},
 	},
 	"compress/gzip": {
-		{"(*Reader).Close", Method, 0},
-		{"(*Reader).Multistream", Method, 4},
-		{"(*Reader).Read", Method, 0},
-		{"(*Reader).Reset", Method, 3},
-		{"(*Writer).Close", Method, 0},
-		{"(*Writer).Flush", Method, 1},
-		{"(*Writer).Reset", Method, 2},
-		{"(*Writer).Write", Method, 0},
-		{"BestCompression", Const, 0},
-		{"BestSpeed", Const, 0},
-		{"DefaultCompression", Const, 0},
-		{"ErrChecksum", Var, 0},
-		{"ErrHeader", Var, 0},
-		{"Header", Type, 0},
-		{"Header.Comment", Field, 0},
-		{"Header.Extra", Field, 0},
-		{"Header.ModTime", Field, 0},
-		{"Header.Name", Field, 0},
-		{"Header.OS", Field, 0},
-		{"HuffmanOnly", Const, 8},
-		{"NewReader", Func, 0},
-		{"NewWriter", Func, 0},
-		{"NewWriterLevel", Func, 0},
-		{"NoCompression", Const, 0},
-		{"Reader", Type, 0},
-		{"Reader.Header", Field, 0},
-		{"Writer", Type, 0},
-		{"Writer.Header", Field, 0},
+		{"(*Reader).Close", Method, 0, ""},
+		{"(*Reader).Multistream", Method, 4, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).Reset", Method, 3, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Flush", Method, 1, ""},
+		{"(*Writer).Reset", Method, 2, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"BestCompression", Const, 0, ""},
+		{"BestSpeed", Const, 0, ""},
+		{"DefaultCompression", Const, 0, ""},
+		{"ErrChecksum", Var, 0, ""},
+		{"ErrHeader", Var, 0, ""},
+		{"Header", Type, 0, ""},
+		{"Header.Comment", Field, 0, ""},
+		{"Header.Extra", Field, 0, ""},
+		{"Header.ModTime", Field, 0, ""},
+		{"Header.Name", Field, 0, ""},
+		{"Header.OS", Field, 0, ""},
+		{"HuffmanOnly", Const, 8, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) (*Reader, error)"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"NewWriterLevel", Func, 0, "func(w io.Writer, level int) (*Writer, error)"},
+		{"NoCompression", Const, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Reader.Header", Field, 0, ""},
+		{"Writer", Type, 0, ""},
+		{"Writer.Header", Field, 0, ""},
 	},
 	"compress/lzw": {
-		{"(*Reader).Close", Method, 17},
-		{"(*Reader).Read", Method, 17},
-		{"(*Reader).Reset", Method, 17},
-		{"(*Writer).Close", Method, 17},
-		{"(*Writer).Reset", Method, 17},
-		{"(*Writer).Write", Method, 17},
-		{"LSB", Const, 0},
-		{"MSB", Const, 0},
-		{"NewReader", Func, 0},
-		{"NewWriter", Func, 0},
-		{"Order", Type, 0},
-		{"Reader", Type, 17},
-		{"Writer", Type, 17},
+		{"(*Reader).Close", Method, 17, ""},
+		{"(*Reader).Read", Method, 17, ""},
+		{"(*Reader).Reset", Method, 17, ""},
+		{"(*Writer).Close", Method, 17, ""},
+		{"(*Writer).Reset", Method, 17, ""},
+		{"(*Writer).Write", Method, 17, ""},
+		{"LSB", Const, 0, ""},
+		{"MSB", Const, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader, order Order, litWidth int) io.ReadCloser"},
+		{"NewWriter", Func, 0, "func(w io.Writer, order Order, litWidth int) io.WriteCloser"},
+		{"Order", Type, 0, ""},
+		{"Reader", Type, 17, ""},
+		{"Writer", Type, 17, ""},
 	},
 	"compress/zlib": {
-		{"(*Writer).Close", Method, 0},
-		{"(*Writer).Flush", Method, 0},
-		{"(*Writer).Reset", Method, 2},
-		{"(*Writer).Write", Method, 0},
-		{"BestCompression", Const, 0},
-		{"BestSpeed", Const, 0},
-		{"DefaultCompression", Const, 0},
-		{"ErrChecksum", Var, 0},
-		{"ErrDictionary", Var, 0},
-		{"ErrHeader", Var, 0},
-		{"HuffmanOnly", Const, 8},
-		{"NewReader", Func, 0},
-		{"NewReaderDict", Func, 0},
-		{"NewWriter", Func, 0},
-		{"NewWriterLevel", Func, 0},
-		{"NewWriterLevelDict", Func, 0},
-		{"NoCompression", Const, 0},
-		{"Resetter", Type, 4},
-		{"Writer", Type, 0},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Reset", Method, 2, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"BestCompression", Const, 0, ""},
+		{"BestSpeed", Const, 0, ""},
+		{"DefaultCompression", Const, 0, ""},
+		{"ErrChecksum", Var, 0, ""},
+		{"ErrDictionary", Var, 0, ""},
+		{"ErrHeader", Var, 0, ""},
+		{"HuffmanOnly", Const, 8, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) (io.ReadCloser, error)"},
+		{"NewReaderDict", Func, 0, "func(r io.Reader, dict []byte) (io.ReadCloser, error)"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"NewWriterLevel", Func, 0, "func(w io.Writer, level int) (*Writer, error)"},
+		{"NewWriterLevelDict", Func, 0, "func(w io.Writer, level int, dict []byte) (*Writer, error)"},
+		{"NoCompression", Const, 0, ""},
+		{"Resetter", Type, 4, ""},
+		{"Writer", Type, 0, ""},
 	},
 	"container/heap": {
-		{"Fix", Func, 2},
-		{"Init", Func, 0},
-		{"Interface", Type, 0},
-		{"Pop", Func, 0},
-		{"Push", Func, 0},
-		{"Remove", Func, 0},
+		{"Fix", Func, 2, "func(h Interface, i int)"},
+		{"Init", Func, 0, "func(h Interface)"},
+		{"Interface", Type, 0, ""},
+		{"Pop", Func, 0, "func(h Interface) any"},
+		{"Push", Func, 0, "func(h Interface, x any)"},
+		{"Remove", Func, 0, "func(h Interface, i int) any"},
 	},
 	"container/list": {
-		{"(*Element).Next", Method, 0},
-		{"(*Element).Prev", Method, 0},
-		{"(*List).Back", Method, 0},
-		{"(*List).Front", Method, 0},
-		{"(*List).Init", Method, 0},
-		{"(*List).InsertAfter", Method, 0},
-		{"(*List).InsertBefore", Method, 0},
-		{"(*List).Len", Method, 0},
-		{"(*List).MoveAfter", Method, 2},
-		{"(*List).MoveBefore", Method, 2},
-		{"(*List).MoveToBack", Method, 0},
-		{"(*List).MoveToFront", Method, 0},
-		{"(*List).PushBack", Method, 0},
-		{"(*List).PushBackList", Method, 0},
-		{"(*List).PushFront", Method, 0},
-		{"(*List).PushFrontList", Method, 0},
-		{"(*List).Remove", Method, 0},
-		{"Element", Type, 0},
-		{"Element.Value", Field, 0},
-		{"List", Type, 0},
-		{"New", Func, 0},
+		{"(*Element).Next", Method, 0, ""},
+		{"(*Element).Prev", Method, 0, ""},
+		{"(*List).Back", Method, 0, ""},
+		{"(*List).Front", Method, 0, ""},
+		{"(*List).Init", Method, 0, ""},
+		{"(*List).InsertAfter", Method, 0, ""},
+		{"(*List).InsertBefore", Method, 0, ""},
+		{"(*List).Len", Method, 0, ""},
+		{"(*List).MoveAfter", Method, 2, ""},
+		{"(*List).MoveBefore", Method, 2, ""},
+		{"(*List).MoveToBack", Method, 0, ""},
+		{"(*List).MoveToFront", Method, 0, ""},
+		{"(*List).PushBack", Method, 0, ""},
+		{"(*List).PushBackList", Method, 0, ""},
+		{"(*List).PushFront", Method, 0, ""},
+		{"(*List).PushFrontList", Method, 0, ""},
+		{"(*List).Remove", Method, 0, ""},
+		{"Element", Type, 0, ""},
+		{"Element.Value", Field, 0, ""},
+		{"List", Type, 0, ""},
+		{"New", Func, 0, "func() *List"},
 	},
 	"container/ring": {
-		{"(*Ring).Do", Method, 0},
-		{"(*Ring).Len", Method, 0},
-		{"(*Ring).Link", Method, 0},
-		{"(*Ring).Move", Method, 0},
-		{"(*Ring).Next", Method, 0},
-		{"(*Ring).Prev", Method, 0},
-		{"(*Ring).Unlink", Method, 0},
-		{"New", Func, 0},
-		{"Ring", Type, 0},
-		{"Ring.Value", Field, 0},
+		{"(*Ring).Do", Method, 0, ""},
+		{"(*Ring).Len", Method, 0, ""},
+		{"(*Ring).Link", Method, 0, ""},
+		{"(*Ring).Move", Method, 0, ""},
+		{"(*Ring).Next", Method, 0, ""},
+		{"(*Ring).Prev", Method, 0, ""},
+		{"(*Ring).Unlink", Method, 0, ""},
+		{"New", Func, 0, "func(n int) *Ring"},
+		{"Ring", Type, 0, ""},
+		{"Ring.Value", Field, 0, ""},
 	},
 	"context": {
-		{"AfterFunc", Func, 21},
-		{"Background", Func, 7},
-		{"CancelCauseFunc", Type, 20},
-		{"CancelFunc", Type, 7},
-		{"Canceled", Var, 7},
-		{"Cause", Func, 20},
-		{"Context", Type, 7},
-		{"DeadlineExceeded", Var, 7},
-		{"TODO", Func, 7},
-		{"WithCancel", Func, 7},
-		{"WithCancelCause", Func, 20},
-		{"WithDeadline", Func, 7},
-		{"WithDeadlineCause", Func, 21},
-		{"WithTimeout", Func, 7},
-		{"WithTimeoutCause", Func, 21},
-		{"WithValue", Func, 7},
-		{"WithoutCancel", Func, 21},
+		{"AfterFunc", Func, 21, "func(ctx Context, f func()) (stop func() bool)"},
+		{"Background", Func, 7, "func() Context"},
+		{"CancelCauseFunc", Type, 20, ""},
+		{"CancelFunc", Type, 7, ""},
+		{"Canceled", Var, 7, ""},
+		{"Cause", Func, 20, "func(c Context) error"},
+		{"Context", Type, 7, ""},
+		{"DeadlineExceeded", Var, 7, ""},
+		{"TODO", Func, 7, "func() Context"},
+		{"WithCancel", Func, 7, "func(parent Context) (ctx Context, cancel CancelFunc)"},
+		{"WithCancelCause", Func, 20, "func(parent Context) (ctx Context, cancel CancelCauseFunc)"},
+		{"WithDeadline", Func, 7, "func(parent Context, d time.Time) (Context, CancelFunc)"},
+		{"WithDeadlineCause", Func, 21, "func(parent Context, d time.Time, cause error) (Context, CancelFunc)"},
+		{"WithTimeout", Func, 7, "func(parent Context, timeout time.Duration) (Context, CancelFunc)"},
+		{"WithTimeoutCause", Func, 21, "func(parent Context, timeout time.Duration, cause error) (Context, CancelFunc)"},
+		{"WithValue", Func, 7, "func(parent Context, key any, val any) Context"},
+		{"WithoutCancel", Func, 21, "func(parent Context) Context"},
 	},
 	"crypto": {
-		{"(Hash).Available", Method, 0},
-		{"(Hash).HashFunc", Method, 4},
-		{"(Hash).New", Method, 0},
-		{"(Hash).Size", Method, 0},
-		{"(Hash).String", Method, 15},
-		{"BLAKE2b_256", Const, 9},
-		{"BLAKE2b_384", Const, 9},
-		{"BLAKE2b_512", Const, 9},
-		{"BLAKE2s_256", Const, 9},
-		{"Decrypter", Type, 5},
-		{"DecrypterOpts", Type, 5},
-		{"Hash", Type, 0},
-		{"MD4", Const, 0},
-		{"MD5", Const, 0},
-		{"MD5SHA1", Const, 0},
-		{"PrivateKey", Type, 0},
-		{"PublicKey", Type, 2},
-		{"RIPEMD160", Const, 0},
-		{"RegisterHash", Func, 0},
-		{"SHA1", Const, 0},
-		{"SHA224", Const, 0},
-		{"SHA256", Const, 0},
-		{"SHA384", Const, 0},
-		{"SHA3_224", Const, 4},
-		{"SHA3_256", Const, 4},
-		{"SHA3_384", Const, 4},
-		{"SHA3_512", Const, 4},
-		{"SHA512", Const, 0},
-		{"SHA512_224", Const, 5},
-		{"SHA512_256", Const, 5},
-		{"Signer", Type, 4},
-		{"SignerOpts", Type, 4},
+		{"(Hash).Available", Method, 0, ""},
+		{"(Hash).HashFunc", Method, 4, ""},
+		{"(Hash).New", Method, 0, ""},
+		{"(Hash).Size", Method, 0, ""},
+		{"(Hash).String", Method, 15, ""},
+		{"BLAKE2b_256", Const, 9, ""},
+		{"BLAKE2b_384", Const, 9, ""},
+		{"BLAKE2b_512", Const, 9, ""},
+		{"BLAKE2s_256", Const, 9, ""},
+		{"Decrypter", Type, 5, ""},
+		{"DecrypterOpts", Type, 5, ""},
+		{"Hash", Type, 0, ""},
+		{"MD4", Const, 0, ""},
+		{"MD5", Const, 0, ""},
+		{"MD5SHA1", Const, 0, ""},
+		{"PrivateKey", Type, 0, ""},
+		{"PublicKey", Type, 2, ""},
+		{"RIPEMD160", Const, 0, ""},
+		{"RegisterHash", Func, 0, "func(h Hash, f func() hash.Hash)"},
+		{"SHA1", Const, 0, ""},
+		{"SHA224", Const, 0, ""},
+		{"SHA256", Const, 0, ""},
+		{"SHA384", Const, 0, ""},
+		{"SHA3_224", Const, 4, ""},
+		{"SHA3_256", Const, 4, ""},
+		{"SHA3_384", Const, 4, ""},
+		{"SHA3_512", Const, 4, ""},
+		{"SHA512", Const, 0, ""},
+		{"SHA512_224", Const, 5, ""},
+		{"SHA512_256", Const, 5, ""},
+		{"Signer", Type, 4, ""},
+		{"SignerOpts", Type, 4, ""},
 	},
 	"crypto/aes": {
-		{"(KeySizeError).Error", Method, 0},
-		{"BlockSize", Const, 0},
-		{"KeySizeError", Type, 0},
-		{"NewCipher", Func, 0},
+		{"(KeySizeError).Error", Method, 0, ""},
+		{"BlockSize", Const, 0, ""},
+		{"KeySizeError", Type, 0, ""},
+		{"NewCipher", Func, 0, "func(key []byte) (cipher.Block, error)"},
 	},
 	"crypto/cipher": {
-		{"(StreamReader).Read", Method, 0},
-		{"(StreamWriter).Close", Method, 0},
-		{"(StreamWriter).Write", Method, 0},
-		{"AEAD", Type, 2},
-		{"Block", Type, 0},
-		{"BlockMode", Type, 0},
-		{"NewCBCDecrypter", Func, 0},
-		{"NewCBCEncrypter", Func, 0},
-		{"NewCFBDecrypter", Func, 0},
-		{"NewCFBEncrypter", Func, 0},
-		{"NewCTR", Func, 0},
-		{"NewGCM", Func, 2},
-		{"NewGCMWithNonceSize", Func, 5},
-		{"NewGCMWithRandomNonce", Func, 24},
-		{"NewGCMWithTagSize", Func, 11},
-		{"NewOFB", Func, 0},
-		{"Stream", Type, 0},
-		{"StreamReader", Type, 0},
-		{"StreamReader.R", Field, 0},
-		{"StreamReader.S", Field, 0},
-		{"StreamWriter", Type, 0},
-		{"StreamWriter.Err", Field, 0},
-		{"StreamWriter.S", Field, 0},
-		{"StreamWriter.W", Field, 0},
+		{"(StreamReader).Read", Method, 0, ""},
+		{"(StreamWriter).Close", Method, 0, ""},
+		{"(StreamWriter).Write", Method, 0, ""},
+		{"AEAD", Type, 2, ""},
+		{"Block", Type, 0, ""},
+		{"BlockMode", Type, 0, ""},
+		{"NewCBCDecrypter", Func, 0, "func(b Block, iv []byte) BlockMode"},
+		{"NewCBCEncrypter", Func, 0, "func(b Block, iv []byte) BlockMode"},
+		{"NewCFBDecrypter", Func, 0, "func(block Block, iv []byte) Stream"},
+		{"NewCFBEncrypter", Func, 0, "func(block Block, iv []byte) Stream"},
+		{"NewCTR", Func, 0, "func(block Block, iv []byte) Stream"},
+		{"NewGCM", Func, 2, "func(cipher Block) (AEAD, error)"},
+		{"NewGCMWithNonceSize", Func, 5, "func(cipher Block, size int) (AEAD, error)"},
+		{"NewGCMWithRandomNonce", Func, 24, "func(cipher Block) (AEAD, error)"},
+		{"NewGCMWithTagSize", Func, 11, "func(cipher Block, tagSize int) (AEAD, error)"},
+		{"NewOFB", Func, 0, "func(b Block, iv []byte) Stream"},
+		{"Stream", Type, 0, ""},
+		{"StreamReader", Type, 0, ""},
+		{"StreamReader.R", Field, 0, ""},
+		{"StreamReader.S", Field, 0, ""},
+		{"StreamWriter", Type, 0, ""},
+		{"StreamWriter.Err", Field, 0, ""},
+		{"StreamWriter.S", Field, 0, ""},
+		{"StreamWriter.W", Field, 0, ""},
 	},
 	"crypto/des": {
-		{"(KeySizeError).Error", Method, 0},
-		{"BlockSize", Const, 0},
-		{"KeySizeError", Type, 0},
-		{"NewCipher", Func, 0},
-		{"NewTripleDESCipher", Func, 0},
+		{"(KeySizeError).Error", Method, 0, ""},
+		{"BlockSize", Const, 0, ""},
+		{"KeySizeError", Type, 0, ""},
+		{"NewCipher", Func, 0, "func(key []byte) (cipher.Block, error)"},
+		{"NewTripleDESCipher", Func, 0, "func(key []byte) (cipher.Block, error)"},
 	},
 	"crypto/dsa": {
-		{"ErrInvalidPublicKey", Var, 0},
-		{"GenerateKey", Func, 0},
-		{"GenerateParameters", Func, 0},
-		{"L1024N160", Const, 0},
-		{"L2048N224", Const, 0},
-		{"L2048N256", Const, 0},
-		{"L3072N256", Const, 0},
-		{"ParameterSizes", Type, 0},
-		{"Parameters", Type, 0},
-		{"Parameters.G", Field, 0},
-		{"Parameters.P", Field, 0},
-		{"Parameters.Q", Field, 0},
-		{"PrivateKey", Type, 0},
-		{"PrivateKey.PublicKey", Field, 0},
-		{"PrivateKey.X", Field, 0},
-		{"PublicKey", Type, 0},
-		{"PublicKey.Parameters", Field, 0},
-		{"PublicKey.Y", Field, 0},
-		{"Sign", Func, 0},
-		{"Verify", Func, 0},
+		{"ErrInvalidPublicKey", Var, 0, ""},
+		{"GenerateKey", Func, 0, "func(priv *PrivateKey, rand io.Reader) error"},
+		{"GenerateParameters", Func, 0, "func(params *Parameters, rand io.Reader, sizes ParameterSizes) error"},
+		{"L1024N160", Const, 0, ""},
+		{"L2048N224", Const, 0, ""},
+		{"L2048N256", Const, 0, ""},
+		{"L3072N256", Const, 0, ""},
+		{"ParameterSizes", Type, 0, ""},
+		{"Parameters", Type, 0, ""},
+		{"Parameters.G", Field, 0, ""},
+		{"Parameters.P", Field, 0, ""},
+		{"Parameters.Q", Field, 0, ""},
+		{"PrivateKey", Type, 0, ""},
+		{"PrivateKey.PublicKey", Field, 0, ""},
+		{"PrivateKey.X", Field, 0, ""},
+		{"PublicKey", Type, 0, ""},
+		{"PublicKey.Parameters", Field, 0, ""},
+		{"PublicKey.Y", Field, 0, ""},
+		{"Sign", Func, 0, "func(rand io.Reader, priv *PrivateKey, hash []byte) (r *big.Int, s *big.Int, err error)"},
+		{"Verify", Func, 0, "func(pub *PublicKey, hash []byte, r *big.Int, s *big.Int) bool"},
 	},
 	"crypto/ecdh": {
-		{"(*PrivateKey).Bytes", Method, 20},
-		{"(*PrivateKey).Curve", Method, 20},
-		{"(*PrivateKey).ECDH", Method, 20},
-		{"(*PrivateKey).Equal", Method, 20},
-		{"(*PrivateKey).Public", Method, 20},
-		{"(*PrivateKey).PublicKey", Method, 20},
-		{"(*PublicKey).Bytes", Method, 20},
-		{"(*PublicKey).Curve", Method, 20},
-		{"(*PublicKey).Equal", Method, 20},
-		{"Curve", Type, 20},
-		{"P256", Func, 20},
-		{"P384", Func, 20},
-		{"P521", Func, 20},
-		{"PrivateKey", Type, 20},
-		{"PublicKey", Type, 20},
-		{"X25519", Func, 20},
+		{"(*PrivateKey).Bytes", Method, 20, ""},
+		{"(*PrivateKey).Curve", Method, 20, ""},
+		{"(*PrivateKey).ECDH", Method, 20, ""},
+		{"(*PrivateKey).Equal", Method, 20, ""},
+		{"(*PrivateKey).Public", Method, 20, ""},
+		{"(*PrivateKey).PublicKey", Method, 20, ""},
+		{"(*PublicKey).Bytes", Method, 20, ""},
+		{"(*PublicKey).Curve", Method, 20, ""},
+		{"(*PublicKey).Equal", Method, 20, ""},
+		{"Curve", Type, 20, ""},
+		{"P256", Func, 20, "func() Curve"},
+		{"P384", Func, 20, "func() Curve"},
+		{"P521", Func, 20, "func() Curve"},
+		{"PrivateKey", Type, 20, ""},
+		{"PublicKey", Type, 20, ""},
+		{"X25519", Func, 20, "func() Curve"},
 	},
 	"crypto/ecdsa": {
-		{"(*PrivateKey).ECDH", Method, 20},
-		{"(*PrivateKey).Equal", Method, 15},
-		{"(*PrivateKey).Public", Method, 4},
-		{"(*PrivateKey).Sign", Method, 4},
-		{"(*PublicKey).ECDH", Method, 20},
-		{"(*PublicKey).Equal", Method, 15},
-		{"(PrivateKey).Add", Method, 0},
-		{"(PrivateKey).Double", Method, 0},
-		{"(PrivateKey).IsOnCurve", Method, 0},
-		{"(PrivateKey).Params", Method, 0},
-		{"(PrivateKey).ScalarBaseMult", Method, 0},
-		{"(PrivateKey).ScalarMult", Method, 0},
-		{"(PublicKey).Add", Method, 0},
-		{"(PublicKey).Double", Method, 0},
-		{"(PublicKey).IsOnCurve", Method, 0},
-		{"(PublicKey).Params", Method, 0},
-		{"(PublicKey).ScalarBaseMult", Method, 0},
-		{"(PublicKey).ScalarMult", Method, 0},
-		{"GenerateKey", Func, 0},
-		{"PrivateKey", Type, 0},
-		{"PrivateKey.D", Field, 0},
-		{"PrivateKey.PublicKey", Field, 0},
-		{"PublicKey", Type, 0},
-		{"PublicKey.Curve", Field, 0},
-		{"PublicKey.X", Field, 0},
-		{"PublicKey.Y", Field, 0},
-		{"Sign", Func, 0},
-		{"SignASN1", Func, 15},
-		{"Verify", Func, 0},
-		{"VerifyASN1", Func, 15},
+		{"(*PrivateKey).ECDH", Method, 20, ""},
+		{"(*PrivateKey).Equal", Method, 15, ""},
+		{"(*PrivateKey).Public", Method, 4, ""},
+		{"(*PrivateKey).Sign", Method, 4, ""},
+		{"(*PublicKey).ECDH", Method, 20, ""},
+		{"(*PublicKey).Equal", Method, 15, ""},
+		{"(PrivateKey).Add", Method, 0, ""},
+		{"(PrivateKey).Double", Method, 0, ""},
+		{"(PrivateKey).IsOnCurve", Method, 0, ""},
+		{"(PrivateKey).Params", Method, 0, ""},
+		{"(PrivateKey).ScalarBaseMult", Method, 0, ""},
+		{"(PrivateKey).ScalarMult", Method, 0, ""},
+		{"(PublicKey).Add", Method, 0, ""},
+		{"(PublicKey).Double", Method, 0, ""},
+		{"(PublicKey).IsOnCurve", Method, 0, ""},
+		{"(PublicKey).Params", Method, 0, ""},
+		{"(PublicKey).ScalarBaseMult", Method, 0, ""},
+		{"(PublicKey).ScalarMult", Method, 0, ""},
+		{"GenerateKey", Func, 0, "func(c elliptic.Curve, rand io.Reader) (*PrivateKey, error)"},
+		{"PrivateKey", Type, 0, ""},
+		{"PrivateKey.D", Field, 0, ""},
+		{"PrivateKey.PublicKey", Field, 0, ""},
+		{"PublicKey", Type, 0, ""},
+		{"PublicKey.Curve", Field, 0, ""},
+		{"PublicKey.X", Field, 0, ""},
+		{"PublicKey.Y", Field, 0, ""},
+		{"Sign", Func, 0, "func(rand io.Reader, priv *PrivateKey, hash []byte) (r *big.Int, s *big.Int, err error)"},
+		{"SignASN1", Func, 15, "func(rand io.Reader, priv *PrivateKey, hash []byte) ([]byte, error)"},
+		{"Verify", Func, 0, "func(pub *PublicKey, hash []byte, r *big.Int, s *big.Int) bool"},
+		{"VerifyASN1", Func, 15, "func(pub *PublicKey, hash []byte, sig []byte) bool"},
 	},
 	"crypto/ed25519": {
-		{"(*Options).HashFunc", Method, 20},
-		{"(PrivateKey).Equal", Method, 15},
-		{"(PrivateKey).Public", Method, 13},
-		{"(PrivateKey).Seed", Method, 13},
-		{"(PrivateKey).Sign", Method, 13},
-		{"(PublicKey).Equal", Method, 15},
-		{"GenerateKey", Func, 13},
-		{"NewKeyFromSeed", Func, 13},
-		{"Options", Type, 20},
-		{"Options.Context", Field, 20},
-		{"Options.Hash", Field, 20},
-		{"PrivateKey", Type, 13},
-		{"PrivateKeySize", Const, 13},
-		{"PublicKey", Type, 13},
-		{"PublicKeySize", Const, 13},
-		{"SeedSize", Const, 13},
-		{"Sign", Func, 13},
-		{"SignatureSize", Const, 13},
-		{"Verify", Func, 13},
-		{"VerifyWithOptions", Func, 20},
+		{"(*Options).HashFunc", Method, 20, ""},
+		{"(PrivateKey).Equal", Method, 15, ""},
+		{"(PrivateKey).Public", Method, 13, ""},
+		{"(PrivateKey).Seed", Method, 13, ""},
+		{"(PrivateKey).Sign", Method, 13, ""},
+		{"(PublicKey).Equal", Method, 15, ""},
+		{"GenerateKey", Func, 13, "func(rand io.Reader) (PublicKey, PrivateKey, error)"},
+		{"NewKeyFromSeed", Func, 13, "func(seed []byte) PrivateKey"},
+		{"Options", Type, 20, ""},
+		{"Options.Context", Field, 20, ""},
+		{"Options.Hash", Field, 20, ""},
+		{"PrivateKey", Type, 13, ""},
+		{"PrivateKeySize", Const, 13, ""},
+		{"PublicKey", Type, 13, ""},
+		{"PublicKeySize", Const, 13, ""},
+		{"SeedSize", Const, 13, ""},
+		{"Sign", Func, 13, "func(privateKey PrivateKey, message []byte) []byte"},
+		{"SignatureSize", Const, 13, ""},
+		{"Verify", Func, 13, "func(publicKey PublicKey, message []byte, sig []byte) bool"},
+		{"VerifyWithOptions", Func, 20, "func(publicKey PublicKey, message []byte, sig []byte, opts *Options) error"},
 	},
 	"crypto/elliptic": {
-		{"(*CurveParams).Add", Method, 0},
-		{"(*CurveParams).Double", Method, 0},
-		{"(*CurveParams).IsOnCurve", Method, 0},
-		{"(*CurveParams).Params", Method, 0},
-		{"(*CurveParams).ScalarBaseMult", Method, 0},
-		{"(*CurveParams).ScalarMult", Method, 0},
-		{"Curve", Type, 0},
-		{"CurveParams", Type, 0},
-		{"CurveParams.B", Field, 0},
-		{"CurveParams.BitSize", Field, 0},
-		{"CurveParams.Gx", Field, 0},
-		{"CurveParams.Gy", Field, 0},
-		{"CurveParams.N", Field, 0},
-		{"CurveParams.Name", Field, 5},
-		{"CurveParams.P", Field, 0},
-		{"GenerateKey", Func, 0},
-		{"Marshal", Func, 0},
-		{"MarshalCompressed", Func, 15},
-		{"P224", Func, 0},
-		{"P256", Func, 0},
-		{"P384", Func, 0},
-		{"P521", Func, 0},
-		{"Unmarshal", Func, 0},
-		{"UnmarshalCompressed", Func, 15},
+		{"(*CurveParams).Add", Method, 0, ""},
+		{"(*CurveParams).Double", Method, 0, ""},
+		{"(*CurveParams).IsOnCurve", Method, 0, ""},
+		{"(*CurveParams).Params", Method, 0, ""},
+		{"(*CurveParams).ScalarBaseMult", Method, 0, ""},
+		{"(*CurveParams).ScalarMult", Method, 0, ""},
+		{"Curve", Type, 0, ""},
+		{"CurveParams", Type, 0, ""},
+		{"CurveParams.B", Field, 0, ""},
+		{"CurveParams.BitSize", Field, 0, ""},
+		{"CurveParams.Gx", Field, 0, ""},
+		{"CurveParams.Gy", Field, 0, ""},
+		{"CurveParams.N", Field, 0, ""},
+		{"CurveParams.Name", Field, 5, ""},
+		{"CurveParams.P", Field, 0, ""},
+		{"GenerateKey", Func, 0, "func(curve Curve, rand io.Reader) (priv []byte, x *big.Int, y *big.Int, err error)"},
+		{"Marshal", Func, 0, "func(curve Curve, x *big.Int, y *big.Int) []byte"},
+		{"MarshalCompressed", Func, 15, "func(curve Curve, x *big.Int, y *big.Int) []byte"},
+		{"P224", Func, 0, "func() Curve"},
+		{"P256", Func, 0, "func() Curve"},
+		{"P384", Func, 0, "func() Curve"},
+		{"P521", Func, 0, "func() Curve"},
+		{"Unmarshal", Func, 0, "func(curve Curve, data []byte) (x *big.Int, y *big.Int)"},
+		{"UnmarshalCompressed", Func, 15, "func(curve Curve, data []byte) (x *big.Int, y *big.Int)"},
 	},
 	"crypto/fips140": {
-		{"Enabled", Func, 24},
+		{"Enabled", Func, 24, "func() bool"},
 	},
 	"crypto/hkdf": {
-		{"Expand", Func, 24},
-		{"Extract", Func, 24},
-		{"Key", Func, 24},
+		{"Expand", Func, 24, "func[H hash.Hash](h func() H, pseudorandomKey []byte, info string, keyLength int) ([]byte, error)"},
+		{"Extract", Func, 24, "func[H hash.Hash](h func() H, secret []byte, salt []byte) ([]byte, error)"},
+		{"Key", Func, 24, "func[Hash hash.Hash](h func() Hash, secret []byte, salt []byte, info string, keyLength int) ([]byte, error)"},
 	},
 	"crypto/hmac": {
-		{"Equal", Func, 1},
-		{"New", Func, 0},
+		{"Equal", Func, 1, "func(mac1 []byte, mac2 []byte) bool"},
+		{"New", Func, 0, "func(h func() hash.Hash, key []byte) hash.Hash"},
 	},
 	"crypto/md5": {
-		{"BlockSize", Const, 0},
-		{"New", Func, 0},
-		{"Size", Const, 0},
-		{"Sum", Func, 2},
+		{"BlockSize", Const, 0, ""},
+		{"New", Func, 0, "func() hash.Hash"},
+		{"Size", Const, 0, ""},
+		{"Sum", Func, 2, "func(data []byte) [16]byte"},
 	},
 	"crypto/mlkem": {
-		{"(*DecapsulationKey1024).Bytes", Method, 24},
-		{"(*DecapsulationKey1024).Decapsulate", Method, 24},
-		{"(*DecapsulationKey1024).EncapsulationKey", Method, 24},
-		{"(*DecapsulationKey768).Bytes", Method, 24},
-		{"(*DecapsulationKey768).Decapsulate", Method, 24},
-		{"(*DecapsulationKey768).EncapsulationKey", Method, 24},
-		{"(*EncapsulationKey1024).Bytes", Method, 24},
-		{"(*EncapsulationKey1024).Encapsulate", Method, 24},
-		{"(*EncapsulationKey768).Bytes", Method, 24},
-		{"(*EncapsulationKey768).Encapsulate", Method, 24},
-		{"CiphertextSize1024", Const, 24},
-		{"CiphertextSize768", Const, 24},
-		{"DecapsulationKey1024", Type, 24},
-		{"DecapsulationKey768", Type, 24},
-		{"EncapsulationKey1024", Type, 24},
-		{"EncapsulationKey768", Type, 24},
-		{"EncapsulationKeySize1024", Const, 24},
-		{"EncapsulationKeySize768", Const, 24},
-		{"GenerateKey1024", Func, 24},
-		{"GenerateKey768", Func, 24},
-		{"NewDecapsulationKey1024", Func, 24},
-		{"NewDecapsulationKey768", Func, 24},
-		{"NewEncapsulationKey1024", Func, 24},
-		{"NewEncapsulationKey768", Func, 24},
-		{"SeedSize", Const, 24},
-		{"SharedKeySize", Const, 24},
+		{"(*DecapsulationKey1024).Bytes", Method, 24, ""},
+		{"(*DecapsulationKey1024).Decapsulate", Method, 24, ""},
+		{"(*DecapsulationKey1024).EncapsulationKey", Method, 24, ""},
+		{"(*DecapsulationKey768).Bytes", Method, 24, ""},
+		{"(*DecapsulationKey768).Decapsulate", Method, 24, ""},
+		{"(*DecapsulationKey768).EncapsulationKey", Method, 24, ""},
+		{"(*EncapsulationKey1024).Bytes", Method, 24, ""},
+		{"(*EncapsulationKey1024).Encapsulate", Method, 24, ""},
+		{"(*EncapsulationKey768).Bytes", Method, 24, ""},
+		{"(*EncapsulationKey768).Encapsulate", Method, 24, ""},
+		{"CiphertextSize1024", Const, 24, ""},
+		{"CiphertextSize768", Const, 24, ""},
+		{"DecapsulationKey1024", Type, 24, ""},
+		{"DecapsulationKey768", Type, 24, ""},
+		{"EncapsulationKey1024", Type, 24, ""},
+		{"EncapsulationKey768", Type, 24, ""},
+		{"EncapsulationKeySize1024", Const, 24, ""},
+		{"EncapsulationKeySize768", Const, 24, ""},
+		{"GenerateKey1024", Func, 24, "func() (*DecapsulationKey1024, error)"},
+		{"GenerateKey768", Func, 24, "func() (*DecapsulationKey768, error)"},
+		{"NewDecapsulationKey1024", Func, 24, "func(seed []byte) (*DecapsulationKey1024, error)"},
+		{"NewDecapsulationKey768", Func, 24, "func(seed []byte) (*DecapsulationKey768, error)"},
+		{"NewEncapsulationKey1024", Func, 24, "func(encapsulationKey []byte) (*EncapsulationKey1024, error)"},
+		{"NewEncapsulationKey768", Func, 24, "func(encapsulationKey []byte) (*EncapsulationKey768, error)"},
+		{"SeedSize", Const, 24, ""},
+		{"SharedKeySize", Const, 24, ""},
 	},
 	"crypto/pbkdf2": {
-		{"Key", Func, 24},
+		{"Key", Func, 24, "func[Hash hash.Hash](h func() Hash, password string, salt []byte, iter int, keyLength int) ([]byte, error)"},
 	},
 	"crypto/rand": {
-		{"Int", Func, 0},
-		{"Prime", Func, 0},
-		{"Read", Func, 0},
-		{"Reader", Var, 0},
-		{"Text", Func, 24},
+		{"Int", Func, 0, "func(rand io.Reader, max *big.Int) (n *big.Int, err error)"},
+		{"Prime", Func, 0, "func(rand io.Reader, bits int) (*big.Int, error)"},
+		{"Read", Func, 0, "func(b []byte) (n int, err error)"},
+		{"Reader", Var, 0, ""},
+		{"Text", Func, 24, "func() string"},
 	},
 	"crypto/rc4": {
-		{"(*Cipher).Reset", Method, 0},
-		{"(*Cipher).XORKeyStream", Method, 0},
-		{"(KeySizeError).Error", Method, 0},
-		{"Cipher", Type, 0},
-		{"KeySizeError", Type, 0},
-		{"NewCipher", Func, 0},
+		{"(*Cipher).Reset", Method, 0, ""},
+		{"(*Cipher).XORKeyStream", Method, 0, ""},
+		{"(KeySizeError).Error", Method, 0, ""},
+		{"Cipher", Type, 0, ""},
+		{"KeySizeError", Type, 0, ""},
+		{"NewCipher", Func, 0, "func(key []byte) (*Cipher, error)"},
 	},
 	"crypto/rsa": {
-		{"(*PSSOptions).HashFunc", Method, 4},
-		{"(*PrivateKey).Decrypt", Method, 5},
-		{"(*PrivateKey).Equal", Method, 15},
-		{"(*PrivateKey).Precompute", Method, 0},
-		{"(*PrivateKey).Public", Method, 4},
-		{"(*PrivateKey).Sign", Method, 4},
-		{"(*PrivateKey).Size", Method, 11},
-		{"(*PrivateKey).Validate", Method, 0},
-		{"(*PublicKey).Equal", Method, 15},
-		{"(*PublicKey).Size", Method, 11},
-		{"CRTValue", Type, 0},
-		{"CRTValue.Coeff", Field, 0},
-		{"CRTValue.Exp", Field, 0},
-		{"CRTValue.R", Field, 0},
-		{"DecryptOAEP", Func, 0},
-		{"DecryptPKCS1v15", Func, 0},
-		{"DecryptPKCS1v15SessionKey", Func, 0},
-		{"EncryptOAEP", Func, 0},
-		{"EncryptPKCS1v15", Func, 0},
-		{"ErrDecryption", Var, 0},
-		{"ErrMessageTooLong", Var, 0},
-		{"ErrVerification", Var, 0},
-		{"GenerateKey", Func, 0},
-		{"GenerateMultiPrimeKey", Func, 0},
-		{"OAEPOptions", Type, 5},
-		{"OAEPOptions.Hash", Field, 5},
-		{"OAEPOptions.Label", Field, 5},
-		{"OAEPOptions.MGFHash", Field, 20},
-		{"PKCS1v15DecryptOptions", Type, 5},
-		{"PKCS1v15DecryptOptions.SessionKeyLen", Field, 5},
-		{"PSSOptions", Type, 2},
-		{"PSSOptions.Hash", Field, 4},
-		{"PSSOptions.SaltLength", Field, 2},
-		{"PSSSaltLengthAuto", Const, 2},
-		{"PSSSaltLengthEqualsHash", Const, 2},
-		{"PrecomputedValues", Type, 0},
-		{"PrecomputedValues.CRTValues", Field, 0},
-		{"PrecomputedValues.Dp", Field, 0},
-		{"PrecomputedValues.Dq", Field, 0},
-		{"PrecomputedValues.Qinv", Field, 0},
-		{"PrivateKey", Type, 0},
-		{"PrivateKey.D", Field, 0},
-		{"PrivateKey.Precomputed", Field, 0},
-		{"PrivateKey.Primes", Field, 0},
-		{"PrivateKey.PublicKey", Field, 0},
-		{"PublicKey", Type, 0},
-		{"PublicKey.E", Field, 0},
-		{"PublicKey.N", Field, 0},
-		{"SignPKCS1v15", Func, 0},
-		{"SignPSS", Func, 2},
-		{"VerifyPKCS1v15", Func, 0},
-		{"VerifyPSS", Func, 2},
+		{"(*PSSOptions).HashFunc", Method, 4, ""},
+		{"(*PrivateKey).Decrypt", Method, 5, ""},
+		{"(*PrivateKey).Equal", Method, 15, ""},
+		{"(*PrivateKey).Precompute", Method, 0, ""},
+		{"(*PrivateKey).Public", Method, 4, ""},
+		{"(*PrivateKey).Sign", Method, 4, ""},
+		{"(*PrivateKey).Size", Method, 11, ""},
+		{"(*PrivateKey).Validate", Method, 0, ""},
+		{"(*PublicKey).Equal", Method, 15, ""},
+		{"(*PublicKey).Size", Method, 11, ""},
+		{"CRTValue", Type, 0, ""},
+		{"CRTValue.Coeff", Field, 0, ""},
+		{"CRTValue.Exp", Field, 0, ""},
+		{"CRTValue.R", Field, 0, ""},
+		{"DecryptOAEP", Func, 0, "func(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext []byte, label []byte) ([]byte, error)"},
+		{"DecryptPKCS1v15", Func, 0, "func(random io.Reader, priv *PrivateKey, ciphertext []byte) ([]byte, error)"},
+		{"DecryptPKCS1v15SessionKey", Func, 0, "func(random io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) error"},
+		{"EncryptOAEP", Func, 0, "func(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error)"},
+		{"EncryptPKCS1v15", Func, 0, "func(random io.Reader, pub *PublicKey, msg []byte) ([]byte, error)"},
+		{"ErrDecryption", Var, 0, ""},
+		{"ErrMessageTooLong", Var, 0, ""},
+		{"ErrVerification", Var, 0, ""},
+		{"GenerateKey", Func, 0, "func(random io.Reader, bits int) (*PrivateKey, error)"},
+		{"GenerateMultiPrimeKey", Func, 0, "func(random io.Reader, nprimes int, bits int) (*PrivateKey, error)"},
+		{"OAEPOptions", Type, 5, ""},
+		{"OAEPOptions.Hash", Field, 5, ""},
+		{"OAEPOptions.Label", Field, 5, ""},
+		{"OAEPOptions.MGFHash", Field, 20, ""},
+		{"PKCS1v15DecryptOptions", Type, 5, ""},
+		{"PKCS1v15DecryptOptions.SessionKeyLen", Field, 5, ""},
+		{"PSSOptions", Type, 2, ""},
+		{"PSSOptions.Hash", Field, 4, ""},
+		{"PSSOptions.SaltLength", Field, 2, ""},
+		{"PSSSaltLengthAuto", Const, 2, ""},
+		{"PSSSaltLengthEqualsHash", Const, 2, ""},
+		{"PrecomputedValues", Type, 0, ""},
+		{"PrecomputedValues.CRTValues", Field, 0, ""},
+		{"PrecomputedValues.Dp", Field, 0, ""},
+		{"PrecomputedValues.Dq", Field, 0, ""},
+		{"PrecomputedValues.Qinv", Field, 0, ""},
+		{"PrivateKey", Type, 0, ""},
+		{"PrivateKey.D", Field, 0, ""},
+		{"PrivateKey.Precomputed", Field, 0, ""},
+		{"PrivateKey.Primes", Field, 0, ""},
+		{"PrivateKey.PublicKey", Field, 0, ""},
+		{"PublicKey", Type, 0, ""},
+		{"PublicKey.E", Field, 0, ""},
+		{"PublicKey.N", Field, 0, ""},
+		{"SignPKCS1v15", Func, 0, "func(random io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)"},
+		{"SignPSS", Func, 2, "func(rand io.Reader, priv *PrivateKey, hash crypto.Hash, digest []byte, opts *PSSOptions) ([]byte, error)"},
+		{"VerifyPKCS1v15", Func, 0, "func(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) error"},
+		{"VerifyPSS", Func, 2, "func(pub *PublicKey, hash crypto.Hash, digest []byte, sig []byte, opts *PSSOptions) error"},
 	},
 	"crypto/sha1": {
-		{"BlockSize", Const, 0},
-		{"New", Func, 0},
-		{"Size", Const, 0},
-		{"Sum", Func, 2},
+		{"BlockSize", Const, 0, ""},
+		{"New", Func, 0, "func() hash.Hash"},
+		{"Size", Const, 0, ""},
+		{"Sum", Func, 2, "func(data []byte) [20]byte"},
 	},
 	"crypto/sha256": {
-		{"BlockSize", Const, 0},
-		{"New", Func, 0},
-		{"New224", Func, 0},
-		{"Size", Const, 0},
-		{"Size224", Const, 0},
-		{"Sum224", Func, 2},
-		{"Sum256", Func, 2},
+		{"BlockSize", Const, 0, ""},
+		{"New", Func, 0, "func() hash.Hash"},
+		{"New224", Func, 0, "func() hash.Hash"},
+		{"Size", Const, 0, ""},
+		{"Size224", Const, 0, ""},
+		{"Sum224", Func, 2, "func(data []byte) [28]byte"},
+		{"Sum256", Func, 2, "func(data []byte) [32]byte"},
 	},
 	"crypto/sha3": {
-		{"(*SHA3).AppendBinary", Method, 24},
-		{"(*SHA3).BlockSize", Method, 24},
-		{"(*SHA3).MarshalBinary", Method, 24},
-		{"(*SHA3).Reset", Method, 24},
-		{"(*SHA3).Size", Method, 24},
-		{"(*SHA3).Sum", Method, 24},
-		{"(*SHA3).UnmarshalBinary", Method, 24},
-		{"(*SHA3).Write", Method, 24},
-		{"(*SHAKE).AppendBinary", Method, 24},
-		{"(*SHAKE).BlockSize", Method, 24},
-		{"(*SHAKE).MarshalBinary", Method, 24},
-		{"(*SHAKE).Read", Method, 24},
-		{"(*SHAKE).Reset", Method, 24},
-		{"(*SHAKE).UnmarshalBinary", Method, 24},
-		{"(*SHAKE).Write", Method, 24},
-		{"New224", Func, 24},
-		{"New256", Func, 24},
-		{"New384", Func, 24},
-		{"New512", Func, 24},
-		{"NewCSHAKE128", Func, 24},
-		{"NewCSHAKE256", Func, 24},
-		{"NewSHAKE128", Func, 24},
-		{"NewSHAKE256", Func, 24},
-		{"SHA3", Type, 24},
-		{"SHAKE", Type, 24},
-		{"Sum224", Func, 24},
-		{"Sum256", Func, 24},
-		{"Sum384", Func, 24},
-		{"Sum512", Func, 24},
-		{"SumSHAKE128", Func, 24},
-		{"SumSHAKE256", Func, 24},
+		{"(*SHA3).AppendBinary", Method, 24, ""},
+		{"(*SHA3).BlockSize", Method, 24, ""},
+		{"(*SHA3).MarshalBinary", Method, 24, ""},
+		{"(*SHA3).Reset", Method, 24, ""},
+		{"(*SHA3).Size", Method, 24, ""},
+		{"(*SHA3).Sum", Method, 24, ""},
+		{"(*SHA3).UnmarshalBinary", Method, 24, ""},
+		{"(*SHA3).Write", Method, 24, ""},
+		{"(*SHAKE).AppendBinary", Method, 24, ""},
+		{"(*SHAKE).BlockSize", Method, 24, ""},
+		{"(*SHAKE).MarshalBinary", Method, 24, ""},
+		{"(*SHAKE).Read", Method, 24, ""},
+		{"(*SHAKE).Reset", Method, 24, ""},
+		{"(*SHAKE).UnmarshalBinary", Method, 24, ""},
+		{"(*SHAKE).Write", Method, 24, ""},
+		{"New224", Func, 24, "func() *SHA3"},
+		{"New256", Func, 24, "func() *SHA3"},
+		{"New384", Func, 24, "func() *SHA3"},
+		{"New512", Func, 24, "func() *SHA3"},
+		{"NewCSHAKE128", Func, 24, "func(N []byte, S []byte) *SHAKE"},
+		{"NewCSHAKE256", Func, 24, "func(N []byte, S []byte) *SHAKE"},
+		{"NewSHAKE128", Func, 24, "func() *SHAKE"},
+		{"NewSHAKE256", Func, 24, "func() *SHAKE"},
+		{"SHA3", Type, 24, ""},
+		{"SHAKE", Type, 24, ""},
+		{"Sum224", Func, 24, "func(data []byte) [28]byte"},
+		{"Sum256", Func, 24, "func(data []byte) [32]byte"},
+		{"Sum384", Func, 24, "func(data []byte) [48]byte"},
+		{"Sum512", Func, 24, "func(data []byte) [64]byte"},
+		{"SumSHAKE128", Func, 24, "func(data []byte, length int) []byte"},
+		{"SumSHAKE256", Func, 24, "func(data []byte, length int) []byte"},
 	},
 	"crypto/sha512": {
-		{"BlockSize", Const, 0},
-		{"New", Func, 0},
-		{"New384", Func, 0},
-		{"New512_224", Func, 5},
-		{"New512_256", Func, 5},
-		{"Size", Const, 0},
-		{"Size224", Const, 5},
-		{"Size256", Const, 5},
-		{"Size384", Const, 0},
-		{"Sum384", Func, 2},
-		{"Sum512", Func, 2},
-		{"Sum512_224", Func, 5},
-		{"Sum512_256", Func, 5},
+		{"BlockSize", Const, 0, ""},
+		{"New", Func, 0, "func() hash.Hash"},
+		{"New384", Func, 0, "func() hash.Hash"},
+		{"New512_224", Func, 5, "func() hash.Hash"},
+		{"New512_256", Func, 5, "func() hash.Hash"},
+		{"Size", Const, 0, ""},
+		{"Size224", Const, 5, ""},
+		{"Size256", Const, 5, ""},
+		{"Size384", Const, 0, ""},
+		{"Sum384", Func, 2, "func(data []byte) [48]byte"},
+		{"Sum512", Func, 2, "func(data []byte) [64]byte"},
+		{"Sum512_224", Func, 5, "func(data []byte) [28]byte"},
+		{"Sum512_256", Func, 5, "func(data []byte) [32]byte"},
 	},
 	"crypto/subtle": {
-		{"ConstantTimeByteEq", Func, 0},
-		{"ConstantTimeCompare", Func, 0},
-		{"ConstantTimeCopy", Func, 0},
-		{"ConstantTimeEq", Func, 0},
-		{"ConstantTimeLessOrEq", Func, 2},
-		{"ConstantTimeSelect", Func, 0},
-		{"WithDataIndependentTiming", Func, 24},
-		{"XORBytes", Func, 20},
+		{"ConstantTimeByteEq", Func, 0, "func(x uint8, y uint8) int"},
+		{"ConstantTimeCompare", Func, 0, "func(x []byte, y []byte) int"},
+		{"ConstantTimeCopy", Func, 0, "func(v int, x []byte, y []byte)"},
+		{"ConstantTimeEq", Func, 0, "func(x int32, y int32) int"},
+		{"ConstantTimeLessOrEq", Func, 2, "func(x int, y int) int"},
+		{"ConstantTimeSelect", Func, 0, "func(v int, x int, y int) int"},
+		{"WithDataIndependentTiming", Func, 24, "func(f func())"},
+		{"XORBytes", Func, 20, "func(dst []byte, x []byte, y []byte) int"},
 	},
 	"crypto/tls": {
-		{"(*CertificateRequestInfo).Context", Method, 17},
-		{"(*CertificateRequestInfo).SupportsCertificate", Method, 14},
-		{"(*CertificateVerificationError).Error", Method, 20},
-		{"(*CertificateVerificationError).Unwrap", Method, 20},
-		{"(*ClientHelloInfo).Context", Method, 17},
-		{"(*ClientHelloInfo).SupportsCertificate", Method, 14},
-		{"(*ClientSessionState).ResumptionState", Method, 21},
-		{"(*Config).BuildNameToCertificate", Method, 0},
-		{"(*Config).Clone", Method, 8},
-		{"(*Config).DecryptTicket", Method, 21},
-		{"(*Config).EncryptTicket", Method, 21},
-		{"(*Config).SetSessionTicketKeys", Method, 5},
-		{"(*Conn).Close", Method, 0},
-		{"(*Conn).CloseWrite", Method, 8},
-		{"(*Conn).ConnectionState", Method, 0},
-		{"(*Conn).Handshake", Method, 0},
-		{"(*Conn).HandshakeContext", Method, 17},
-		{"(*Conn).LocalAddr", Method, 0},
-		{"(*Conn).NetConn", Method, 18},
-		{"(*Conn).OCSPResponse", Method, 0},
-		{"(*Conn).Read", Method, 0},
-		{"(*Conn).RemoteAddr", Method, 0},
-		{"(*Conn).SetDeadline", Method, 0},
-		{"(*Conn).SetReadDeadline", Method, 0},
-		{"(*Conn).SetWriteDeadline", Method, 0},
-		{"(*Conn).VerifyHostname", Method, 0},
-		{"(*Conn).Write", Method, 0},
-		{"(*ConnectionState).ExportKeyingMaterial", Method, 11},
-		{"(*Dialer).Dial", Method, 15},
-		{"(*Dialer).DialContext", Method, 15},
-		{"(*ECHRejectionError).Error", Method, 23},
-		{"(*QUICConn).Close", Method, 21},
-		{"(*QUICConn).ConnectionState", Method, 21},
-		{"(*QUICConn).HandleData", Method, 21},
-		{"(*QUICConn).NextEvent", Method, 21},
-		{"(*QUICConn).SendSessionTicket", Method, 21},
-		{"(*QUICConn).SetTransportParameters", Method, 21},
-		{"(*QUICConn).Start", Method, 21},
-		{"(*QUICConn).StoreSession", Method, 23},
-		{"(*SessionState).Bytes", Method, 21},
-		{"(AlertError).Error", Method, 21},
-		{"(ClientAuthType).String", Method, 15},
-		{"(CurveID).String", Method, 15},
-		{"(QUICEncryptionLevel).String", Method, 21},
-		{"(RecordHeaderError).Error", Method, 6},
-		{"(SignatureScheme).String", Method, 15},
-		{"AlertError", Type, 21},
-		{"Certificate", Type, 0},
-		{"Certificate.Certificate", Field, 0},
-		{"Certificate.Leaf", Field, 0},
-		{"Certificate.OCSPStaple", Field, 0},
-		{"Certificate.PrivateKey", Field, 0},
-		{"Certificate.SignedCertificateTimestamps", Field, 5},
-		{"Certificate.SupportedSignatureAlgorithms", Field, 14},
-		{"CertificateRequestInfo", Type, 8},
-		{"CertificateRequestInfo.AcceptableCAs", Field, 8},
-		{"CertificateRequestInfo.SignatureSchemes", Field, 8},
-		{"CertificateRequestInfo.Version", Field, 14},
-		{"CertificateVerificationError", Type, 20},
-		{"CertificateVerificationError.Err", Field, 20},
-		{"CertificateVerificationError.UnverifiedCertificates", Field, 20},
-		{"CipherSuite", Type, 14},
-		{"CipherSuite.ID", Field, 14},
-		{"CipherSuite.Insecure", Field, 14},
-		{"CipherSuite.Name", Field, 14},
-		{"CipherSuite.SupportedVersions", Field, 14},
-		{"CipherSuiteName", Func, 14},
-		{"CipherSuites", Func, 14},
-		{"Client", Func, 0},
-		{"ClientAuthType", Type, 0},
-		{"ClientHelloInfo", Type, 4},
-		{"ClientHelloInfo.CipherSuites", Field, 4},
-		{"ClientHelloInfo.Conn", Field, 8},
-		{"ClientHelloInfo.Extensions", Field, 24},
-		{"ClientHelloInfo.ServerName", Field, 4},
-		{"ClientHelloInfo.SignatureSchemes", Field, 8},
-		{"ClientHelloInfo.SupportedCurves", Field, 4},
-		{"ClientHelloInfo.SupportedPoints", Field, 4},
-		{"ClientHelloInfo.SupportedProtos", Field, 8},
-		{"ClientHelloInfo.SupportedVersions", Field, 8},
-		{"ClientSessionCache", Type, 3},
-		{"ClientSessionState", Type, 3},
-		{"Config", Type, 0},
-		{"Config.Certificates", Field, 0},
-		{"Config.CipherSuites", Field, 0},
-		{"Config.ClientAuth", Field, 0},
-		{"Config.ClientCAs", Field, 0},
-		{"Config.ClientSessionCache", Field, 3},
-		{"Config.CurvePreferences", Field, 3},
-		{"Config.DynamicRecordSizingDisabled", Field, 7},
-		{"Config.EncryptedClientHelloConfigList", Field, 23},
-		{"Config.EncryptedClientHelloKeys", Field, 24},
-		{"Config.EncryptedClientHelloRejectionVerify", Field, 23},
-		{"Config.GetCertificate", Field, 4},
-		{"Config.GetClientCertificate", Field, 8},
-		{"Config.GetConfigForClient", Field, 8},
-		{"Config.InsecureSkipVerify", Field, 0},
-		{"Config.KeyLogWriter", Field, 8},
-		{"Config.MaxVersion", Field, 2},
-		{"Config.MinVersion", Field, 2},
-		{"Config.NameToCertificate", Field, 0},
-		{"Config.NextProtos", Field, 0},
-		{"Config.PreferServerCipherSuites", Field, 1},
-		{"Config.Rand", Field, 0},
-		{"Config.Renegotiation", Field, 7},
-		{"Config.RootCAs", Field, 0},
-		{"Config.ServerName", Field, 0},
-		{"Config.SessionTicketKey", Field, 1},
-		{"Config.SessionTicketsDisabled", Field, 1},
-		{"Config.Time", Field, 0},
-		{"Config.UnwrapSession", Field, 21},
-		{"Config.VerifyConnection", Field, 15},
-		{"Config.VerifyPeerCertificate", Field, 8},
-		{"Config.WrapSession", Field, 21},
-		{"Conn", Type, 0},
-		{"ConnectionState", Type, 0},
-		{"ConnectionState.CipherSuite", Field, 0},
-		{"ConnectionState.DidResume", Field, 1},
-		{"ConnectionState.ECHAccepted", Field, 23},
-		{"ConnectionState.HandshakeComplete", Field, 0},
-		{"ConnectionState.NegotiatedProtocol", Field, 0},
-		{"ConnectionState.NegotiatedProtocolIsMutual", Field, 0},
-		{"ConnectionState.OCSPResponse", Field, 5},
-		{"ConnectionState.PeerCertificates", Field, 0},
-		{"ConnectionState.ServerName", Field, 0},
-		{"ConnectionState.SignedCertificateTimestamps", Field, 5},
-		{"ConnectionState.TLSUnique", Field, 4},
-		{"ConnectionState.VerifiedChains", Field, 0},
-		{"ConnectionState.Version", Field, 3},
-		{"CurveID", Type, 3},
-		{"CurveP256", Const, 3},
-		{"CurveP384", Const, 3},
-		{"CurveP521", Const, 3},
-		{"Dial", Func, 0},
-		{"DialWithDialer", Func, 3},
-		{"Dialer", Type, 15},
-		{"Dialer.Config", Field, 15},
-		{"Dialer.NetDialer", Field, 15},
-		{"ECDSAWithP256AndSHA256", Const, 8},
-		{"ECDSAWithP384AndSHA384", Const, 8},
-		{"ECDSAWithP521AndSHA512", Const, 8},
-		{"ECDSAWithSHA1", Const, 10},
-		{"ECHRejectionError", Type, 23},
-		{"ECHRejectionError.RetryConfigList", Field, 23},
-		{"Ed25519", Const, 13},
-		{"EncryptedClientHelloKey", Type, 24},
-		{"EncryptedClientHelloKey.Config", Field, 24},
-		{"EncryptedClientHelloKey.PrivateKey", Field, 24},
-		{"EncryptedClientHelloKey.SendAsRetry", Field, 24},
-		{"InsecureCipherSuites", Func, 14},
-		{"Listen", Func, 0},
-		{"LoadX509KeyPair", Func, 0},
-		{"NewLRUClientSessionCache", Func, 3},
-		{"NewListener", Func, 0},
-		{"NewResumptionState", Func, 21},
-		{"NoClientCert", Const, 0},
-		{"PKCS1WithSHA1", Const, 8},
-		{"PKCS1WithSHA256", Const, 8},
-		{"PKCS1WithSHA384", Const, 8},
-		{"PKCS1WithSHA512", Const, 8},
-		{"PSSWithSHA256", Const, 8},
-		{"PSSWithSHA384", Const, 8},
-		{"PSSWithSHA512", Const, 8},
-		{"ParseSessionState", Func, 21},
-		{"QUICClient", Func, 21},
-		{"QUICConfig", Type, 21},
-		{"QUICConfig.EnableSessionEvents", Field, 23},
-		{"QUICConfig.TLSConfig", Field, 21},
-		{"QUICConn", Type, 21},
-		{"QUICEncryptionLevel", Type, 21},
-		{"QUICEncryptionLevelApplication", Const, 21},
-		{"QUICEncryptionLevelEarly", Const, 21},
-		{"QUICEncryptionLevelHandshake", Const, 21},
-		{"QUICEncryptionLevelInitial", Const, 21},
-		{"QUICEvent", Type, 21},
-		{"QUICEvent.Data", Field, 21},
-		{"QUICEvent.Kind", Field, 21},
-		{"QUICEvent.Level", Field, 21},
-		{"QUICEvent.SessionState", Field, 23},
-		{"QUICEvent.Suite", Field, 21},
-		{"QUICEventKind", Type, 21},
-		{"QUICHandshakeDone", Const, 21},
-		{"QUICNoEvent", Const, 21},
-		{"QUICRejectedEarlyData", Const, 21},
-		{"QUICResumeSession", Const, 23},
-		{"QUICServer", Func, 21},
-		{"QUICSessionTicketOptions", Type, 21},
-		{"QUICSessionTicketOptions.EarlyData", Field, 21},
-		{"QUICSessionTicketOptions.Extra", Field, 23},
-		{"QUICSetReadSecret", Const, 21},
-		{"QUICSetWriteSecret", Const, 21},
-		{"QUICStoreSession", Const, 23},
-		{"QUICTransportParameters", Const, 21},
-		{"QUICTransportParametersRequired", Const, 21},
-		{"QUICWriteData", Const, 21},
-		{"RecordHeaderError", Type, 6},
-		{"RecordHeaderError.Conn", Field, 12},
-		{"RecordHeaderError.Msg", Field, 6},
-		{"RecordHeaderError.RecordHeader", Field, 6},
-		{"RenegotiateFreelyAsClient", Const, 7},
-		{"RenegotiateNever", Const, 7},
-		{"RenegotiateOnceAsClient", Const, 7},
-		{"RenegotiationSupport", Type, 7},
-		{"RequestClientCert", Const, 0},
-		{"RequireAndVerifyClientCert", Const, 0},
-		{"RequireAnyClientCert", Const, 0},
-		{"Server", Func, 0},
-		{"SessionState", Type, 21},
-		{"SessionState.EarlyData", Field, 21},
-		{"SessionState.Extra", Field, 21},
-		{"SignatureScheme", Type, 8},
-		{"TLS_AES_128_GCM_SHA256", Const, 12},
-		{"TLS_AES_256_GCM_SHA384", Const, 12},
-		{"TLS_CHACHA20_POLY1305_SHA256", Const, 12},
-		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", Const, 2},
-		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", Const, 8},
-		{"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", Const, 2},
-		{"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", Const, 2},
-		{"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", Const, 5},
-		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", Const, 8},
-		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14},
-		{"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", Const, 2},
-		{"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0},
-		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", Const, 0},
-		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", Const, 8},
-		{"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", Const, 2},
-		{"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", Const, 1},
-		{"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", Const, 5},
-		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", Const, 8},
-		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14},
-		{"TLS_ECDHE_RSA_WITH_RC4_128_SHA", Const, 0},
-		{"TLS_FALLBACK_SCSV", Const, 4},
-		{"TLS_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0},
-		{"TLS_RSA_WITH_AES_128_CBC_SHA", Const, 0},
-		{"TLS_RSA_WITH_AES_128_CBC_SHA256", Const, 8},
-		{"TLS_RSA_WITH_AES_128_GCM_SHA256", Const, 6},
-		{"TLS_RSA_WITH_AES_256_CBC_SHA", Const, 1},
-		{"TLS_RSA_WITH_AES_256_GCM_SHA384", Const, 6},
-		{"TLS_RSA_WITH_RC4_128_SHA", Const, 0},
-		{"VerifyClientCertIfGiven", Const, 0},
-		{"VersionName", Func, 21},
-		{"VersionSSL30", Const, 2},
-		{"VersionTLS10", Const, 2},
-		{"VersionTLS11", Const, 2},
-		{"VersionTLS12", Const, 2},
-		{"VersionTLS13", Const, 12},
-		{"X25519", Const, 8},
-		{"X25519MLKEM768", Const, 24},
-		{"X509KeyPair", Func, 0},
+		{"(*CertificateRequestInfo).Context", Method, 17, ""},
+		{"(*CertificateRequestInfo).SupportsCertificate", Method, 14, ""},
+		{"(*CertificateVerificationError).Error", Method, 20, ""},
+		{"(*CertificateVerificationError).Unwrap", Method, 20, ""},
+		{"(*ClientHelloInfo).Context", Method, 17, ""},
+		{"(*ClientHelloInfo).SupportsCertificate", Method, 14, ""},
+		{"(*ClientSessionState).ResumptionState", Method, 21, ""},
+		{"(*Config).BuildNameToCertificate", Method, 0, ""},
+		{"(*Config).Clone", Method, 8, ""},
+		{"(*Config).DecryptTicket", Method, 21, ""},
+		{"(*Config).EncryptTicket", Method, 21, ""},
+		{"(*Config).SetSessionTicketKeys", Method, 5, ""},
+		{"(*Conn).Close", Method, 0, ""},
+		{"(*Conn).CloseWrite", Method, 8, ""},
+		{"(*Conn).ConnectionState", Method, 0, ""},
+		{"(*Conn).Handshake", Method, 0, ""},
+		{"(*Conn).HandshakeContext", Method, 17, ""},
+		{"(*Conn).LocalAddr", Method, 0, ""},
+		{"(*Conn).NetConn", Method, 18, ""},
+		{"(*Conn).OCSPResponse", Method, 0, ""},
+		{"(*Conn).Read", Method, 0, ""},
+		{"(*Conn).RemoteAddr", Method, 0, ""},
+		{"(*Conn).SetDeadline", Method, 0, ""},
+		{"(*Conn).SetReadDeadline", Method, 0, ""},
+		{"(*Conn).SetWriteDeadline", Method, 0, ""},
+		{"(*Conn).VerifyHostname", Method, 0, ""},
+		{"(*Conn).Write", Method, 0, ""},
+		{"(*ConnectionState).ExportKeyingMaterial", Method, 11, ""},
+		{"(*Dialer).Dial", Method, 15, ""},
+		{"(*Dialer).DialContext", Method, 15, ""},
+		{"(*ECHRejectionError).Error", Method, 23, ""},
+		{"(*QUICConn).Close", Method, 21, ""},
+		{"(*QUICConn).ConnectionState", Method, 21, ""},
+		{"(*QUICConn).HandleData", Method, 21, ""},
+		{"(*QUICConn).NextEvent", Method, 21, ""},
+		{"(*QUICConn).SendSessionTicket", Method, 21, ""},
+		{"(*QUICConn).SetTransportParameters", Method, 21, ""},
+		{"(*QUICConn).Start", Method, 21, ""},
+		{"(*QUICConn).StoreSession", Method, 23, ""},
+		{"(*SessionState).Bytes", Method, 21, ""},
+		{"(AlertError).Error", Method, 21, ""},
+		{"(ClientAuthType).String", Method, 15, ""},
+		{"(CurveID).String", Method, 15, ""},
+		{"(QUICEncryptionLevel).String", Method, 21, ""},
+		{"(RecordHeaderError).Error", Method, 6, ""},
+		{"(SignatureScheme).String", Method, 15, ""},
+		{"AlertError", Type, 21, ""},
+		{"Certificate", Type, 0, ""},
+		{"Certificate.Certificate", Field, 0, ""},
+		{"Certificate.Leaf", Field, 0, ""},
+		{"Certificate.OCSPStaple", Field, 0, ""},
+		{"Certificate.PrivateKey", Field, 0, ""},
+		{"Certificate.SignedCertificateTimestamps", Field, 5, ""},
+		{"Certificate.SupportedSignatureAlgorithms", Field, 14, ""},
+		{"CertificateRequestInfo", Type, 8, ""},
+		{"CertificateRequestInfo.AcceptableCAs", Field, 8, ""},
+		{"CertificateRequestInfo.SignatureSchemes", Field, 8, ""},
+		{"CertificateRequestInfo.Version", Field, 14, ""},
+		{"CertificateVerificationError", Type, 20, ""},
+		{"CertificateVerificationError.Err", Field, 20, ""},
+		{"CertificateVerificationError.UnverifiedCertificates", Field, 20, ""},
+		{"CipherSuite", Type, 14, ""},
+		{"CipherSuite.ID", Field, 14, ""},
+		{"CipherSuite.Insecure", Field, 14, ""},
+		{"CipherSuite.Name", Field, 14, ""},
+		{"CipherSuite.SupportedVersions", Field, 14, ""},
+		{"CipherSuiteName", Func, 14, "func(id uint16) string"},
+		{"CipherSuites", Func, 14, "func() []*CipherSuite"},
+		{"Client", Func, 0, "func(conn net.Conn, config *Config) *Conn"},
+		{"ClientAuthType", Type, 0, ""},
+		{"ClientHelloInfo", Type, 4, ""},
+		{"ClientHelloInfo.CipherSuites", Field, 4, ""},
+		{"ClientHelloInfo.Conn", Field, 8, ""},
+		{"ClientHelloInfo.Extensions", Field, 24, ""},
+		{"ClientHelloInfo.ServerName", Field, 4, ""},
+		{"ClientHelloInfo.SignatureSchemes", Field, 8, ""},
+		{"ClientHelloInfo.SupportedCurves", Field, 4, ""},
+		{"ClientHelloInfo.SupportedPoints", Field, 4, ""},
+		{"ClientHelloInfo.SupportedProtos", Field, 8, ""},
+		{"ClientHelloInfo.SupportedVersions", Field, 8, ""},
+		{"ClientSessionCache", Type, 3, ""},
+		{"ClientSessionState", Type, 3, ""},
+		{"Config", Type, 0, ""},
+		{"Config.Certificates", Field, 0, ""},
+		{"Config.CipherSuites", Field, 0, ""},
+		{"Config.ClientAuth", Field, 0, ""},
+		{"Config.ClientCAs", Field, 0, ""},
+		{"Config.ClientSessionCache", Field, 3, ""},
+		{"Config.CurvePreferences", Field, 3, ""},
+		{"Config.DynamicRecordSizingDisabled", Field, 7, ""},
+		{"Config.EncryptedClientHelloConfigList", Field, 23, ""},
+		{"Config.EncryptedClientHelloKeys", Field, 24, ""},
+		{"Config.EncryptedClientHelloRejectionVerify", Field, 23, ""},
+		{"Config.GetCertificate", Field, 4, ""},
+		{"Config.GetClientCertificate", Field, 8, ""},
+		{"Config.GetConfigForClient", Field, 8, ""},
+		{"Config.InsecureSkipVerify", Field, 0, ""},
+		{"Config.KeyLogWriter", Field, 8, ""},
+		{"Config.MaxVersion", Field, 2, ""},
+		{"Config.MinVersion", Field, 2, ""},
+		{"Config.NameToCertificate", Field, 0, ""},
+		{"Config.NextProtos", Field, 0, ""},
+		{"Config.PreferServerCipherSuites", Field, 1, ""},
+		{"Config.Rand", Field, 0, ""},
+		{"Config.Renegotiation", Field, 7, ""},
+		{"Config.RootCAs", Field, 0, ""},
+		{"Config.ServerName", Field, 0, ""},
+		{"Config.SessionTicketKey", Field, 1, ""},
+		{"Config.SessionTicketsDisabled", Field, 1, ""},
+		{"Config.Time", Field, 0, ""},
+		{"Config.UnwrapSession", Field, 21, ""},
+		{"Config.VerifyConnection", Field, 15, ""},
+		{"Config.VerifyPeerCertificate", Field, 8, ""},
+		{"Config.WrapSession", Field, 21, ""},
+		{"Conn", Type, 0, ""},
+		{"ConnectionState", Type, 0, ""},
+		{"ConnectionState.CipherSuite", Field, 0, ""},
+		{"ConnectionState.CurveID", Field, 25, ""},
+		{"ConnectionState.DidResume", Field, 1, ""},
+		{"ConnectionState.ECHAccepted", Field, 23, ""},
+		{"ConnectionState.HandshakeComplete", Field, 0, ""},
+		{"ConnectionState.NegotiatedProtocol", Field, 0, ""},
+		{"ConnectionState.NegotiatedProtocolIsMutual", Field, 0, ""},
+		{"ConnectionState.OCSPResponse", Field, 5, ""},
+		{"ConnectionState.PeerCertificates", Field, 0, ""},
+		{"ConnectionState.ServerName", Field, 0, ""},
+		{"ConnectionState.SignedCertificateTimestamps", Field, 5, ""},
+		{"ConnectionState.TLSUnique", Field, 4, ""},
+		{"ConnectionState.VerifiedChains", Field, 0, ""},
+		{"ConnectionState.Version", Field, 3, ""},
+		{"CurveID", Type, 3, ""},
+		{"CurveP256", Const, 3, ""},
+		{"CurveP384", Const, 3, ""},
+		{"CurveP521", Const, 3, ""},
+		{"Dial", Func, 0, "func(network string, addr string, config *Config) (*Conn, error)"},
+		{"DialWithDialer", Func, 3, "func(dialer *net.Dialer, network string, addr string, config *Config) (*Conn, error)"},
+		{"Dialer", Type, 15, ""},
+		{"Dialer.Config", Field, 15, ""},
+		{"Dialer.NetDialer", Field, 15, ""},
+		{"ECDSAWithP256AndSHA256", Const, 8, ""},
+		{"ECDSAWithP384AndSHA384", Const, 8, ""},
+		{"ECDSAWithP521AndSHA512", Const, 8, ""},
+		{"ECDSAWithSHA1", Const, 10, ""},
+		{"ECHRejectionError", Type, 23, ""},
+		{"ECHRejectionError.RetryConfigList", Field, 23, ""},
+		{"Ed25519", Const, 13, ""},
+		{"EncryptedClientHelloKey", Type, 24, ""},
+		{"EncryptedClientHelloKey.Config", Field, 24, ""},
+		{"EncryptedClientHelloKey.PrivateKey", Field, 24, ""},
+		{"EncryptedClientHelloKey.SendAsRetry", Field, 24, ""},
+		{"InsecureCipherSuites", Func, 14, "func() []*CipherSuite"},
+		{"Listen", Func, 0, "func(network string, laddr string, config *Config) (net.Listener, error)"},
+		{"LoadX509KeyPair", Func, 0, "func(certFile string, keyFile string) (Certificate, error)"},
+		{"NewLRUClientSessionCache", Func, 3, "func(capacity int) ClientSessionCache"},
+		{"NewListener", Func, 0, "func(inner net.Listener, config *Config) net.Listener"},
+		{"NewResumptionState", Func, 21, "func(ticket []byte, state *SessionState) (*ClientSessionState, error)"},
+		{"NoClientCert", Const, 0, ""},
+		{"PKCS1WithSHA1", Const, 8, ""},
+		{"PKCS1WithSHA256", Const, 8, ""},
+		{"PKCS1WithSHA384", Const, 8, ""},
+		{"PKCS1WithSHA512", Const, 8, ""},
+		{"PSSWithSHA256", Const, 8, ""},
+		{"PSSWithSHA384", Const, 8, ""},
+		{"PSSWithSHA512", Const, 8, ""},
+		{"ParseSessionState", Func, 21, "func(data []byte) (*SessionState, error)"},
+		{"QUICClient", Func, 21, "func(config *QUICConfig) *QUICConn"},
+		{"QUICConfig", Type, 21, ""},
+		{"QUICConfig.EnableSessionEvents", Field, 23, ""},
+		{"QUICConfig.TLSConfig", Field, 21, ""},
+		{"QUICConn", Type, 21, ""},
+		{"QUICEncryptionLevel", Type, 21, ""},
+		{"QUICEncryptionLevelApplication", Const, 21, ""},
+		{"QUICEncryptionLevelEarly", Const, 21, ""},
+		{"QUICEncryptionLevelHandshake", Const, 21, ""},
+		{"QUICEncryptionLevelInitial", Const, 21, ""},
+		{"QUICEvent", Type, 21, ""},
+		{"QUICEvent.Data", Field, 21, ""},
+		{"QUICEvent.Kind", Field, 21, ""},
+		{"QUICEvent.Level", Field, 21, ""},
+		{"QUICEvent.SessionState", Field, 23, ""},
+		{"QUICEvent.Suite", Field, 21, ""},
+		{"QUICEventKind", Type, 21, ""},
+		{"QUICHandshakeDone", Const, 21, ""},
+		{"QUICNoEvent", Const, 21, ""},
+		{"QUICRejectedEarlyData", Const, 21, ""},
+		{"QUICResumeSession", Const, 23, ""},
+		{"QUICServer", Func, 21, "func(config *QUICConfig) *QUICConn"},
+		{"QUICSessionTicketOptions", Type, 21, ""},
+		{"QUICSessionTicketOptions.EarlyData", Field, 21, ""},
+		{"QUICSessionTicketOptions.Extra", Field, 23, ""},
+		{"QUICSetReadSecret", Const, 21, ""},
+		{"QUICSetWriteSecret", Const, 21, ""},
+		{"QUICStoreSession", Const, 23, ""},
+		{"QUICTransportParameters", Const, 21, ""},
+		{"QUICTransportParametersRequired", Const, 21, ""},
+		{"QUICWriteData", Const, 21, ""},
+		{"RecordHeaderError", Type, 6, ""},
+		{"RecordHeaderError.Conn", Field, 12, ""},
+		{"RecordHeaderError.Msg", Field, 6, ""},
+		{"RecordHeaderError.RecordHeader", Field, 6, ""},
+		{"RenegotiateFreelyAsClient", Const, 7, ""},
+		{"RenegotiateNever", Const, 7, ""},
+		{"RenegotiateOnceAsClient", Const, 7, ""},
+		{"RenegotiationSupport", Type, 7, ""},
+		{"RequestClientCert", Const, 0, ""},
+		{"RequireAndVerifyClientCert", Const, 0, ""},
+		{"RequireAnyClientCert", Const, 0, ""},
+		{"Server", Func, 0, "func(conn net.Conn, config *Config) *Conn"},
+		{"SessionState", Type, 21, ""},
+		{"SessionState.EarlyData", Field, 21, ""},
+		{"SessionState.Extra", Field, 21, ""},
+		{"SignatureScheme", Type, 8, ""},
+		{"TLS_AES_128_GCM_SHA256", Const, 12, ""},
+		{"TLS_AES_256_GCM_SHA384", Const, 12, ""},
+		{"TLS_CHACHA20_POLY1305_SHA256", Const, 12, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", Const, 2, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", Const, 8, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", Const, 2, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", Const, 2, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", Const, 5, ""},
+		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", Const, 8, ""},
+		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14, ""},
+		{"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", Const, 2, ""},
+		{"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", Const, 0, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", Const, 8, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", Const, 2, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", Const, 1, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", Const, 5, ""},
+		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", Const, 8, ""},
+		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14, ""},
+		{"TLS_ECDHE_RSA_WITH_RC4_128_SHA", Const, 0, ""},
+		{"TLS_FALLBACK_SCSV", Const, 4, ""},
+		{"TLS_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0, ""},
+		{"TLS_RSA_WITH_AES_128_CBC_SHA", Const, 0, ""},
+		{"TLS_RSA_WITH_AES_128_CBC_SHA256", Const, 8, ""},
+		{"TLS_RSA_WITH_AES_128_GCM_SHA256", Const, 6, ""},
+		{"TLS_RSA_WITH_AES_256_CBC_SHA", Const, 1, ""},
+		{"TLS_RSA_WITH_AES_256_GCM_SHA384", Const, 6, ""},
+		{"TLS_RSA_WITH_RC4_128_SHA", Const, 0, ""},
+		{"VerifyClientCertIfGiven", Const, 0, ""},
+		{"VersionName", Func, 21, "func(version uint16) string"},
+		{"VersionSSL30", Const, 2, ""},
+		{"VersionTLS10", Const, 2, ""},
+		{"VersionTLS11", Const, 2, ""},
+		{"VersionTLS12", Const, 2, ""},
+		{"VersionTLS13", Const, 12, ""},
+		{"X25519", Const, 8, ""},
+		{"X25519MLKEM768", Const, 24, ""},
+		{"X509KeyPair", Func, 0, "func(certPEMBlock []byte, keyPEMBlock []byte) (Certificate, error)"},
 	},
 	"crypto/x509": {
-		{"(*CertPool).AddCert", Method, 0},
-		{"(*CertPool).AddCertWithConstraint", Method, 22},
-		{"(*CertPool).AppendCertsFromPEM", Method, 0},
-		{"(*CertPool).Clone", Method, 19},
-		{"(*CertPool).Equal", Method, 19},
-		{"(*CertPool).Subjects", Method, 0},
-		{"(*Certificate).CheckCRLSignature", Method, 0},
-		{"(*Certificate).CheckSignature", Method, 0},
-		{"(*Certificate).CheckSignatureFrom", Method, 0},
-		{"(*Certificate).CreateCRL", Method, 0},
-		{"(*Certificate).Equal", Method, 0},
-		{"(*Certificate).Verify", Method, 0},
-		{"(*Certificate).VerifyHostname", Method, 0},
-		{"(*CertificateRequest).CheckSignature", Method, 5},
-		{"(*OID).UnmarshalBinary", Method, 23},
-		{"(*OID).UnmarshalText", Method, 23},
-		{"(*RevocationList).CheckSignatureFrom", Method, 19},
-		{"(CertificateInvalidError).Error", Method, 0},
-		{"(ConstraintViolationError).Error", Method, 0},
-		{"(HostnameError).Error", Method, 0},
-		{"(InsecureAlgorithmError).Error", Method, 6},
-		{"(OID).AppendBinary", Method, 24},
-		{"(OID).AppendText", Method, 24},
-		{"(OID).Equal", Method, 22},
-		{"(OID).EqualASN1OID", Method, 22},
-		{"(OID).MarshalBinary", Method, 23},
-		{"(OID).MarshalText", Method, 23},
-		{"(OID).String", Method, 22},
-		{"(PublicKeyAlgorithm).String", Method, 10},
-		{"(SignatureAlgorithm).String", Method, 6},
-		{"(SystemRootsError).Error", Method, 1},
-		{"(SystemRootsError).Unwrap", Method, 16},
-		{"(UnhandledCriticalExtension).Error", Method, 0},
-		{"(UnknownAuthorityError).Error", Method, 0},
-		{"CANotAuthorizedForExtKeyUsage", Const, 10},
-		{"CANotAuthorizedForThisName", Const, 0},
-		{"CertPool", Type, 0},
-		{"Certificate", Type, 0},
-		{"Certificate.AuthorityKeyId", Field, 0},
-		{"Certificate.BasicConstraintsValid", Field, 0},
-		{"Certificate.CRLDistributionPoints", Field, 2},
-		{"Certificate.DNSNames", Field, 0},
-		{"Certificate.EmailAddresses", Field, 0},
-		{"Certificate.ExcludedDNSDomains", Field, 9},
-		{"Certificate.ExcludedEmailAddresses", Field, 10},
-		{"Certificate.ExcludedIPRanges", Field, 10},
-		{"Certificate.ExcludedURIDomains", Field, 10},
-		{"Certificate.ExtKeyUsage", Field, 0},
-		{"Certificate.Extensions", Field, 2},
-		{"Certificate.ExtraExtensions", Field, 2},
-		{"Certificate.IPAddresses", Field, 1},
-		{"Certificate.InhibitAnyPolicy", Field, 24},
-		{"Certificate.InhibitAnyPolicyZero", Field, 24},
-		{"Certificate.InhibitPolicyMapping", Field, 24},
-		{"Certificate.InhibitPolicyMappingZero", Field, 24},
-		{"Certificate.IsCA", Field, 0},
-		{"Certificate.Issuer", Field, 0},
-		{"Certificate.IssuingCertificateURL", Field, 2},
-		{"Certificate.KeyUsage", Field, 0},
-		{"Certificate.MaxPathLen", Field, 0},
-		{"Certificate.MaxPathLenZero", Field, 4},
-		{"Certificate.NotAfter", Field, 0},
-		{"Certificate.NotBefore", Field, 0},
-		{"Certificate.OCSPServer", Field, 2},
-		{"Certificate.PermittedDNSDomains", Field, 0},
-		{"Certificate.PermittedDNSDomainsCritical", Field, 0},
-		{"Certificate.PermittedEmailAddresses", Field, 10},
-		{"Certificate.PermittedIPRanges", Field, 10},
-		{"Certificate.PermittedURIDomains", Field, 10},
-		{"Certificate.Policies", Field, 22},
-		{"Certificate.PolicyIdentifiers", Field, 0},
-		{"Certificate.PolicyMappings", Field, 24},
-		{"Certificate.PublicKey", Field, 0},
-		{"Certificate.PublicKeyAlgorithm", Field, 0},
-		{"Certificate.Raw", Field, 0},
-		{"Certificate.RawIssuer", Field, 0},
-		{"Certificate.RawSubject", Field, 0},
-		{"Certificate.RawSubjectPublicKeyInfo", Field, 0},
-		{"Certificate.RawTBSCertificate", Field, 0},
-		{"Certificate.RequireExplicitPolicy", Field, 24},
-		{"Certificate.RequireExplicitPolicyZero", Field, 24},
-		{"Certificate.SerialNumber", Field, 0},
-		{"Certificate.Signature", Field, 0},
-		{"Certificate.SignatureAlgorithm", Field, 0},
-		{"Certificate.Subject", Field, 0},
-		{"Certificate.SubjectKeyId", Field, 0},
-		{"Certificate.URIs", Field, 10},
-		{"Certificate.UnhandledCriticalExtensions", Field, 5},
-		{"Certificate.UnknownExtKeyUsage", Field, 0},
-		{"Certificate.Version", Field, 0},
-		{"CertificateInvalidError", Type, 0},
-		{"CertificateInvalidError.Cert", Field, 0},
-		{"CertificateInvalidError.Detail", Field, 10},
-		{"CertificateInvalidError.Reason", Field, 0},
-		{"CertificateRequest", Type, 3},
-		{"CertificateRequest.Attributes", Field, 3},
-		{"CertificateRequest.DNSNames", Field, 3},
-		{"CertificateRequest.EmailAddresses", Field, 3},
-		{"CertificateRequest.Extensions", Field, 3},
-		{"CertificateRequest.ExtraExtensions", Field, 3},
-		{"CertificateRequest.IPAddresses", Field, 3},
-		{"CertificateRequest.PublicKey", Field, 3},
-		{"CertificateRequest.PublicKeyAlgorithm", Field, 3},
-		{"CertificateRequest.Raw", Field, 3},
-		{"CertificateRequest.RawSubject", Field, 3},
-		{"CertificateRequest.RawSubjectPublicKeyInfo", Field, 3},
-		{"CertificateRequest.RawTBSCertificateRequest", Field, 3},
-		{"CertificateRequest.Signature", Field, 3},
-		{"CertificateRequest.SignatureAlgorithm", Field, 3},
-		{"CertificateRequest.Subject", Field, 3},
-		{"CertificateRequest.URIs", Field, 10},
-		{"CertificateRequest.Version", Field, 3},
-		{"ConstraintViolationError", Type, 0},
-		{"CreateCertificate", Func, 0},
-		{"CreateCertificateRequest", Func, 3},
-		{"CreateRevocationList", Func, 15},
-		{"DSA", Const, 0},
-		{"DSAWithSHA1", Const, 0},
-		{"DSAWithSHA256", Const, 0},
-		{"DecryptPEMBlock", Func, 1},
-		{"ECDSA", Const, 1},
-		{"ECDSAWithSHA1", Const, 1},
-		{"ECDSAWithSHA256", Const, 1},
-		{"ECDSAWithSHA384", Const, 1},
-		{"ECDSAWithSHA512", Const, 1},
-		{"Ed25519", Const, 13},
-		{"EncryptPEMBlock", Func, 1},
-		{"ErrUnsupportedAlgorithm", Var, 0},
-		{"Expired", Const, 0},
-		{"ExtKeyUsage", Type, 0},
-		{"ExtKeyUsageAny", Const, 0},
-		{"ExtKeyUsageClientAuth", Const, 0},
-		{"ExtKeyUsageCodeSigning", Const, 0},
-		{"ExtKeyUsageEmailProtection", Const, 0},
-		{"ExtKeyUsageIPSECEndSystem", Const, 1},
-		{"ExtKeyUsageIPSECTunnel", Const, 1},
-		{"ExtKeyUsageIPSECUser", Const, 1},
-		{"ExtKeyUsageMicrosoftCommercialCodeSigning", Const, 10},
-		{"ExtKeyUsageMicrosoftKernelCodeSigning", Const, 10},
-		{"ExtKeyUsageMicrosoftServerGatedCrypto", Const, 1},
-		{"ExtKeyUsageNetscapeServerGatedCrypto", Const, 1},
-		{"ExtKeyUsageOCSPSigning", Const, 0},
-		{"ExtKeyUsageServerAuth", Const, 0},
-		{"ExtKeyUsageTimeStamping", Const, 0},
-		{"HostnameError", Type, 0},
-		{"HostnameError.Certificate", Field, 0},
-		{"HostnameError.Host", Field, 0},
-		{"IncompatibleUsage", Const, 1},
-		{"IncorrectPasswordError", Var, 1},
-		{"InsecureAlgorithmError", Type, 6},
-		{"InvalidReason", Type, 0},
-		{"IsEncryptedPEMBlock", Func, 1},
-		{"KeyUsage", Type, 0},
-		{"KeyUsageCRLSign", Const, 0},
-		{"KeyUsageCertSign", Const, 0},
-		{"KeyUsageContentCommitment", Const, 0},
-		{"KeyUsageDataEncipherment", Const, 0},
-		{"KeyUsageDecipherOnly", Const, 0},
-		{"KeyUsageDigitalSignature", Const, 0},
-		{"KeyUsageEncipherOnly", Const, 0},
-		{"KeyUsageKeyAgreement", Const, 0},
-		{"KeyUsageKeyEncipherment", Const, 0},
-		{"MD2WithRSA", Const, 0},
-		{"MD5WithRSA", Const, 0},
-		{"MarshalECPrivateKey", Func, 2},
-		{"MarshalPKCS1PrivateKey", Func, 0},
-		{"MarshalPKCS1PublicKey", Func, 10},
-		{"MarshalPKCS8PrivateKey", Func, 10},
-		{"MarshalPKIXPublicKey", Func, 0},
-		{"NameConstraintsWithoutSANs", Const, 10},
-		{"NameMismatch", Const, 8},
-		{"NewCertPool", Func, 0},
-		{"NoValidChains", Const, 24},
-		{"NotAuthorizedToSign", Const, 0},
-		{"OID", Type, 22},
-		{"OIDFromInts", Func, 22},
-		{"PEMCipher", Type, 1},
-		{"PEMCipher3DES", Const, 1},
-		{"PEMCipherAES128", Const, 1},
-		{"PEMCipherAES192", Const, 1},
-		{"PEMCipherAES256", Const, 1},
-		{"PEMCipherDES", Const, 1},
-		{"ParseCRL", Func, 0},
-		{"ParseCertificate", Func, 0},
-		{"ParseCertificateRequest", Func, 3},
-		{"ParseCertificates", Func, 0},
-		{"ParseDERCRL", Func, 0},
-		{"ParseECPrivateKey", Func, 1},
-		{"ParseOID", Func, 23},
-		{"ParsePKCS1PrivateKey", Func, 0},
-		{"ParsePKCS1PublicKey", Func, 10},
-		{"ParsePKCS8PrivateKey", Func, 0},
-		{"ParsePKIXPublicKey", Func, 0},
-		{"ParseRevocationList", Func, 19},
-		{"PolicyMapping", Type, 24},
-		{"PolicyMapping.IssuerDomainPolicy", Field, 24},
-		{"PolicyMapping.SubjectDomainPolicy", Field, 24},
-		{"PublicKeyAlgorithm", Type, 0},
-		{"PureEd25519", Const, 13},
-		{"RSA", Const, 0},
-		{"RevocationList", Type, 15},
-		{"RevocationList.AuthorityKeyId", Field, 19},
-		{"RevocationList.Extensions", Field, 19},
-		{"RevocationList.ExtraExtensions", Field, 15},
-		{"RevocationList.Issuer", Field, 19},
-		{"RevocationList.NextUpdate", Field, 15},
-		{"RevocationList.Number", Field, 15},
-		{"RevocationList.Raw", Field, 19},
-		{"RevocationList.RawIssuer", Field, 19},
-		{"RevocationList.RawTBSRevocationList", Field, 19},
-		{"RevocationList.RevokedCertificateEntries", Field, 21},
-		{"RevocationList.RevokedCertificates", Field, 15},
-		{"RevocationList.Signature", Field, 19},
-		{"RevocationList.SignatureAlgorithm", Field, 15},
-		{"RevocationList.ThisUpdate", Field, 15},
-		{"RevocationListEntry", Type, 21},
-		{"RevocationListEntry.Extensions", Field, 21},
-		{"RevocationListEntry.ExtraExtensions", Field, 21},
-		{"RevocationListEntry.Raw", Field, 21},
-		{"RevocationListEntry.ReasonCode", Field, 21},
-		{"RevocationListEntry.RevocationTime", Field, 21},
-		{"RevocationListEntry.SerialNumber", Field, 21},
-		{"SHA1WithRSA", Const, 0},
-		{"SHA256WithRSA", Const, 0},
-		{"SHA256WithRSAPSS", Const, 8},
-		{"SHA384WithRSA", Const, 0},
-		{"SHA384WithRSAPSS", Const, 8},
-		{"SHA512WithRSA", Const, 0},
-		{"SHA512WithRSAPSS", Const, 8},
-		{"SetFallbackRoots", Func, 20},
-		{"SignatureAlgorithm", Type, 0},
-		{"SystemCertPool", Func, 7},
-		{"SystemRootsError", Type, 1},
-		{"SystemRootsError.Err", Field, 7},
-		{"TooManyConstraints", Const, 10},
-		{"TooManyIntermediates", Const, 0},
-		{"UnconstrainedName", Const, 10},
-		{"UnhandledCriticalExtension", Type, 0},
-		{"UnknownAuthorityError", Type, 0},
-		{"UnknownAuthorityError.Cert", Field, 8},
-		{"UnknownPublicKeyAlgorithm", Const, 0},
-		{"UnknownSignatureAlgorithm", Const, 0},
-		{"VerifyOptions", Type, 0},
-		{"VerifyOptions.CertificatePolicies", Field, 24},
-		{"VerifyOptions.CurrentTime", Field, 0},
-		{"VerifyOptions.DNSName", Field, 0},
-		{"VerifyOptions.Intermediates", Field, 0},
-		{"VerifyOptions.KeyUsages", Field, 1},
-		{"VerifyOptions.MaxConstraintComparisions", Field, 10},
-		{"VerifyOptions.Roots", Field, 0},
+		{"(*CertPool).AddCert", Method, 0, ""},
+		{"(*CertPool).AddCertWithConstraint", Method, 22, ""},
+		{"(*CertPool).AppendCertsFromPEM", Method, 0, ""},
+		{"(*CertPool).Clone", Method, 19, ""},
+		{"(*CertPool).Equal", Method, 19, ""},
+		{"(*CertPool).Subjects", Method, 0, ""},
+		{"(*Certificate).CheckCRLSignature", Method, 0, ""},
+		{"(*Certificate).CheckSignature", Method, 0, ""},
+		{"(*Certificate).CheckSignatureFrom", Method, 0, ""},
+		{"(*Certificate).CreateCRL", Method, 0, ""},
+		{"(*Certificate).Equal", Method, 0, ""},
+		{"(*Certificate).Verify", Method, 0, ""},
+		{"(*Certificate).VerifyHostname", Method, 0, ""},
+		{"(*CertificateRequest).CheckSignature", Method, 5, ""},
+		{"(*OID).UnmarshalBinary", Method, 23, ""},
+		{"(*OID).UnmarshalText", Method, 23, ""},
+		{"(*RevocationList).CheckSignatureFrom", Method, 19, ""},
+		{"(CertificateInvalidError).Error", Method, 0, ""},
+		{"(ConstraintViolationError).Error", Method, 0, ""},
+		{"(HostnameError).Error", Method, 0, ""},
+		{"(InsecureAlgorithmError).Error", Method, 6, ""},
+		{"(OID).AppendBinary", Method, 24, ""},
+		{"(OID).AppendText", Method, 24, ""},
+		{"(OID).Equal", Method, 22, ""},
+		{"(OID).EqualASN1OID", Method, 22, ""},
+		{"(OID).MarshalBinary", Method, 23, ""},
+		{"(OID).MarshalText", Method, 23, ""},
+		{"(OID).String", Method, 22, ""},
+		{"(PublicKeyAlgorithm).String", Method, 10, ""},
+		{"(SignatureAlgorithm).String", Method, 6, ""},
+		{"(SystemRootsError).Error", Method, 1, ""},
+		{"(SystemRootsError).Unwrap", Method, 16, ""},
+		{"(UnhandledCriticalExtension).Error", Method, 0, ""},
+		{"(UnknownAuthorityError).Error", Method, 0, ""},
+		{"CANotAuthorizedForExtKeyUsage", Const, 10, ""},
+		{"CANotAuthorizedForThisName", Const, 0, ""},
+		{"CertPool", Type, 0, ""},
+		{"Certificate", Type, 0, ""},
+		{"Certificate.AuthorityKeyId", Field, 0, ""},
+		{"Certificate.BasicConstraintsValid", Field, 0, ""},
+		{"Certificate.CRLDistributionPoints", Field, 2, ""},
+		{"Certificate.DNSNames", Field, 0, ""},
+		{"Certificate.EmailAddresses", Field, 0, ""},
+		{"Certificate.ExcludedDNSDomains", Field, 9, ""},
+		{"Certificate.ExcludedEmailAddresses", Field, 10, ""},
+		{"Certificate.ExcludedIPRanges", Field, 10, ""},
+		{"Certificate.ExcludedURIDomains", Field, 10, ""},
+		{"Certificate.ExtKeyUsage", Field, 0, ""},
+		{"Certificate.Extensions", Field, 2, ""},
+		{"Certificate.ExtraExtensions", Field, 2, ""},
+		{"Certificate.IPAddresses", Field, 1, ""},
+		{"Certificate.InhibitAnyPolicy", Field, 24, ""},
+		{"Certificate.InhibitAnyPolicyZero", Field, 24, ""},
+		{"Certificate.InhibitPolicyMapping", Field, 24, ""},
+		{"Certificate.InhibitPolicyMappingZero", Field, 24, ""},
+		{"Certificate.IsCA", Field, 0, ""},
+		{"Certificate.Issuer", Field, 0, ""},
+		{"Certificate.IssuingCertificateURL", Field, 2, ""},
+		{"Certificate.KeyUsage", Field, 0, ""},
+		{"Certificate.MaxPathLen", Field, 0, ""},
+		{"Certificate.MaxPathLenZero", Field, 4, ""},
+		{"Certificate.NotAfter", Field, 0, ""},
+		{"Certificate.NotBefore", Field, 0, ""},
+		{"Certificate.OCSPServer", Field, 2, ""},
+		{"Certificate.PermittedDNSDomains", Field, 0, ""},
+		{"Certificate.PermittedDNSDomainsCritical", Field, 0, ""},
+		{"Certificate.PermittedEmailAddresses", Field, 10, ""},
+		{"Certificate.PermittedIPRanges", Field, 10, ""},
+		{"Certificate.PermittedURIDomains", Field, 10, ""},
+		{"Certificate.Policies", Field, 22, ""},
+		{"Certificate.PolicyIdentifiers", Field, 0, ""},
+		{"Certificate.PolicyMappings", Field, 24, ""},
+		{"Certificate.PublicKey", Field, 0, ""},
+		{"Certificate.PublicKeyAlgorithm", Field, 0, ""},
+		{"Certificate.Raw", Field, 0, ""},
+		{"Certificate.RawIssuer", Field, 0, ""},
+		{"Certificate.RawSubject", Field, 0, ""},
+		{"Certificate.RawSubjectPublicKeyInfo", Field, 0, ""},
+		{"Certificate.RawTBSCertificate", Field, 0, ""},
+		{"Certificate.RequireExplicitPolicy", Field, 24, ""},
+		{"Certificate.RequireExplicitPolicyZero", Field, 24, ""},
+		{"Certificate.SerialNumber", Field, 0, ""},
+		{"Certificate.Signature", Field, 0, ""},
+		{"Certificate.SignatureAlgorithm", Field, 0, ""},
+		{"Certificate.Subject", Field, 0, ""},
+		{"Certificate.SubjectKeyId", Field, 0, ""},
+		{"Certificate.URIs", Field, 10, ""},
+		{"Certificate.UnhandledCriticalExtensions", Field, 5, ""},
+		{"Certificate.UnknownExtKeyUsage", Field, 0, ""},
+		{"Certificate.Version", Field, 0, ""},
+		{"CertificateInvalidError", Type, 0, ""},
+		{"CertificateInvalidError.Cert", Field, 0, ""},
+		{"CertificateInvalidError.Detail", Field, 10, ""},
+		{"CertificateInvalidError.Reason", Field, 0, ""},
+		{"CertificateRequest", Type, 3, ""},
+		{"CertificateRequest.Attributes", Field, 3, ""},
+		{"CertificateRequest.DNSNames", Field, 3, ""},
+		{"CertificateRequest.EmailAddresses", Field, 3, ""},
+		{"CertificateRequest.Extensions", Field, 3, ""},
+		{"CertificateRequest.ExtraExtensions", Field, 3, ""},
+		{"CertificateRequest.IPAddresses", Field, 3, ""},
+		{"CertificateRequest.PublicKey", Field, 3, ""},
+		{"CertificateRequest.PublicKeyAlgorithm", Field, 3, ""},
+		{"CertificateRequest.Raw", Field, 3, ""},
+		{"CertificateRequest.RawSubject", Field, 3, ""},
+		{"CertificateRequest.RawSubjectPublicKeyInfo", Field, 3, ""},
+		{"CertificateRequest.RawTBSCertificateRequest", Field, 3, ""},
+		{"CertificateRequest.Signature", Field, 3, ""},
+		{"CertificateRequest.SignatureAlgorithm", Field, 3, ""},
+		{"CertificateRequest.Subject", Field, 3, ""},
+		{"CertificateRequest.URIs", Field, 10, ""},
+		{"CertificateRequest.Version", Field, 3, ""},
+		{"ConstraintViolationError", Type, 0, ""},
+		{"CreateCertificate", Func, 0, "func(rand io.Reader, template *Certificate, parent *Certificate, pub any, priv any) ([]byte, error)"},
+		{"CreateCertificateRequest", Func, 3, "func(rand io.Reader, template *CertificateRequest, priv any) (csr []byte, err error)"},
+		{"CreateRevocationList", Func, 15, "func(rand io.Reader, template *RevocationList, issuer *Certificate, priv crypto.Signer) ([]byte, error)"},
+		{"DSA", Const, 0, ""},
+		{"DSAWithSHA1", Const, 0, ""},
+		{"DSAWithSHA256", Const, 0, ""},
+		{"DecryptPEMBlock", Func, 1, "func(b *pem.Block, password []byte) ([]byte, error)"},
+		{"ECDSA", Const, 1, ""},
+		{"ECDSAWithSHA1", Const, 1, ""},
+		{"ECDSAWithSHA256", Const, 1, ""},
+		{"ECDSAWithSHA384", Const, 1, ""},
+		{"ECDSAWithSHA512", Const, 1, ""},
+		{"Ed25519", Const, 13, ""},
+		{"EncryptPEMBlock", Func, 1, "func(rand io.Reader, blockType string, data []byte, password []byte, alg PEMCipher) (*pem.Block, error)"},
+		{"ErrUnsupportedAlgorithm", Var, 0, ""},
+		{"Expired", Const, 0, ""},
+		{"ExtKeyUsage", Type, 0, ""},
+		{"ExtKeyUsageAny", Const, 0, ""},
+		{"ExtKeyUsageClientAuth", Const, 0, ""},
+		{"ExtKeyUsageCodeSigning", Const, 0, ""},
+		{"ExtKeyUsageEmailProtection", Const, 0, ""},
+		{"ExtKeyUsageIPSECEndSystem", Const, 1, ""},
+		{"ExtKeyUsageIPSECTunnel", Const, 1, ""},
+		{"ExtKeyUsageIPSECUser", Const, 1, ""},
+		{"ExtKeyUsageMicrosoftCommercialCodeSigning", Const, 10, ""},
+		{"ExtKeyUsageMicrosoftKernelCodeSigning", Const, 10, ""},
+		{"ExtKeyUsageMicrosoftServerGatedCrypto", Const, 1, ""},
+		{"ExtKeyUsageNetscapeServerGatedCrypto", Const, 1, ""},
+		{"ExtKeyUsageOCSPSigning", Const, 0, ""},
+		{"ExtKeyUsageServerAuth", Const, 0, ""},
+		{"ExtKeyUsageTimeStamping", Const, 0, ""},
+		{"HostnameError", Type, 0, ""},
+		{"HostnameError.Certificate", Field, 0, ""},
+		{"HostnameError.Host", Field, 0, ""},
+		{"IncompatibleUsage", Const, 1, ""},
+		{"IncorrectPasswordError", Var, 1, ""},
+		{"InsecureAlgorithmError", Type, 6, ""},
+		{"InvalidReason", Type, 0, ""},
+		{"IsEncryptedPEMBlock", Func, 1, "func(b *pem.Block) bool"},
+		{"KeyUsage", Type, 0, ""},
+		{"KeyUsageCRLSign", Const, 0, ""},
+		{"KeyUsageCertSign", Const, 0, ""},
+		{"KeyUsageContentCommitment", Const, 0, ""},
+		{"KeyUsageDataEncipherment", Const, 0, ""},
+		{"KeyUsageDecipherOnly", Const, 0, ""},
+		{"KeyUsageDigitalSignature", Const, 0, ""},
+		{"KeyUsageEncipherOnly", Const, 0, ""},
+		{"KeyUsageKeyAgreement", Const, 0, ""},
+		{"KeyUsageKeyEncipherment", Const, 0, ""},
+		{"MD2WithRSA", Const, 0, ""},
+		{"MD5WithRSA", Const, 0, ""},
+		{"MarshalECPrivateKey", Func, 2, "func(key *ecdsa.PrivateKey) ([]byte, error)"},
+		{"MarshalPKCS1PrivateKey", Func, 0, "func(key *rsa.PrivateKey) []byte"},
+		{"MarshalPKCS1PublicKey", Func, 10, "func(key *rsa.PublicKey) []byte"},
+		{"MarshalPKCS8PrivateKey", Func, 10, "func(key any) ([]byte, error)"},
+		{"MarshalPKIXPublicKey", Func, 0, "func(pub any) ([]byte, error)"},
+		{"NameConstraintsWithoutSANs", Const, 10, ""},
+		{"NameMismatch", Const, 8, ""},
+		{"NewCertPool", Func, 0, "func() *CertPool"},
+		{"NoValidChains", Const, 24, ""},
+		{"NotAuthorizedToSign", Const, 0, ""},
+		{"OID", Type, 22, ""},
+		{"OIDFromInts", Func, 22, "func(oid []uint64) (OID, error)"},
+		{"PEMCipher", Type, 1, ""},
+		{"PEMCipher3DES", Const, 1, ""},
+		{"PEMCipherAES128", Const, 1, ""},
+		{"PEMCipherAES192", Const, 1, ""},
+		{"PEMCipherAES256", Const, 1, ""},
+		{"PEMCipherDES", Const, 1, ""},
+		{"ParseCRL", Func, 0, "func(crlBytes []byte) (*pkix.CertificateList, error)"},
+		{"ParseCertificate", Func, 0, "func(der []byte) (*Certificate, error)"},
+		{"ParseCertificateRequest", Func, 3, "func(asn1Data []byte) (*CertificateRequest, error)"},
+		{"ParseCertificates", Func, 0, "func(der []byte) ([]*Certificate, error)"},
+		{"ParseDERCRL", Func, 0, "func(derBytes []byte) (*pkix.CertificateList, error)"},
+		{"ParseECPrivateKey", Func, 1, "func(der []byte) (*ecdsa.PrivateKey, error)"},
+		{"ParseOID", Func, 23, "func(oid string) (OID, error)"},
+		{"ParsePKCS1PrivateKey", Func, 0, "func(der []byte) (*rsa.PrivateKey, error)"},
+		{"ParsePKCS1PublicKey", Func, 10, "func(der []byte) (*rsa.PublicKey, error)"},
+		{"ParsePKCS8PrivateKey", Func, 0, "func(der []byte) (key any, err error)"},
+		{"ParsePKIXPublicKey", Func, 0, "func(derBytes []byte) (pub any, err error)"},
+		{"ParseRevocationList", Func, 19, "func(der []byte) (*RevocationList, error)"},
+		{"PolicyMapping", Type, 24, ""},
+		{"PolicyMapping.IssuerDomainPolicy", Field, 24, ""},
+		{"PolicyMapping.SubjectDomainPolicy", Field, 24, ""},
+		{"PublicKeyAlgorithm", Type, 0, ""},
+		{"PureEd25519", Const, 13, ""},
+		{"RSA", Const, 0, ""},
+		{"RevocationList", Type, 15, ""},
+		{"RevocationList.AuthorityKeyId", Field, 19, ""},
+		{"RevocationList.Extensions", Field, 19, ""},
+		{"RevocationList.ExtraExtensions", Field, 15, ""},
+		{"RevocationList.Issuer", Field, 19, ""},
+		{"RevocationList.NextUpdate", Field, 15, ""},
+		{"RevocationList.Number", Field, 15, ""},
+		{"RevocationList.Raw", Field, 19, ""},
+		{"RevocationList.RawIssuer", Field, 19, ""},
+		{"RevocationList.RawTBSRevocationList", Field, 19, ""},
+		{"RevocationList.RevokedCertificateEntries", Field, 21, ""},
+		{"RevocationList.RevokedCertificates", Field, 15, ""},
+		{"RevocationList.Signature", Field, 19, ""},
+		{"RevocationList.SignatureAlgorithm", Field, 15, ""},
+		{"RevocationList.ThisUpdate", Field, 15, ""},
+		{"RevocationListEntry", Type, 21, ""},
+		{"RevocationListEntry.Extensions", Field, 21, ""},
+		{"RevocationListEntry.ExtraExtensions", Field, 21, ""},
+		{"RevocationListEntry.Raw", Field, 21, ""},
+		{"RevocationListEntry.ReasonCode", Field, 21, ""},
+		{"RevocationListEntry.RevocationTime", Field, 21, ""},
+		{"RevocationListEntry.SerialNumber", Field, 21, ""},
+		{"SHA1WithRSA", Const, 0, ""},
+		{"SHA256WithRSA", Const, 0, ""},
+		{"SHA256WithRSAPSS", Const, 8, ""},
+		{"SHA384WithRSA", Const, 0, ""},
+		{"SHA384WithRSAPSS", Const, 8, ""},
+		{"SHA512WithRSA", Const, 0, ""},
+		{"SHA512WithRSAPSS", Const, 8, ""},
+		{"SetFallbackRoots", Func, 20, "func(roots *CertPool)"},
+		{"SignatureAlgorithm", Type, 0, ""},
+		{"SystemCertPool", Func, 7, "func() (*CertPool, error)"},
+		{"SystemRootsError", Type, 1, ""},
+		{"SystemRootsError.Err", Field, 7, ""},
+		{"TooManyConstraints", Const, 10, ""},
+		{"TooManyIntermediates", Const, 0, ""},
+		{"UnconstrainedName", Const, 10, ""},
+		{"UnhandledCriticalExtension", Type, 0, ""},
+		{"UnknownAuthorityError", Type, 0, ""},
+		{"UnknownAuthorityError.Cert", Field, 8, ""},
+		{"UnknownPublicKeyAlgorithm", Const, 0, ""},
+		{"UnknownSignatureAlgorithm", Const, 0, ""},
+		{"VerifyOptions", Type, 0, ""},
+		{"VerifyOptions.CertificatePolicies", Field, 24, ""},
+		{"VerifyOptions.CurrentTime", Field, 0, ""},
+		{"VerifyOptions.DNSName", Field, 0, ""},
+		{"VerifyOptions.Intermediates", Field, 0, ""},
+		{"VerifyOptions.KeyUsages", Field, 1, ""},
+		{"VerifyOptions.MaxConstraintComparisions", Field, 10, ""},
+		{"VerifyOptions.Roots", Field, 0, ""},
 	},
 	"crypto/x509/pkix": {
-		{"(*CertificateList).HasExpired", Method, 0},
-		{"(*Name).FillFromRDNSequence", Method, 0},
-		{"(Name).String", Method, 10},
-		{"(Name).ToRDNSequence", Method, 0},
-		{"(RDNSequence).String", Method, 10},
-		{"AlgorithmIdentifier", Type, 0},
-		{"AlgorithmIdentifier.Algorithm", Field, 0},
-		{"AlgorithmIdentifier.Parameters", Field, 0},
-		{"AttributeTypeAndValue", Type, 0},
-		{"AttributeTypeAndValue.Type", Field, 0},
-		{"AttributeTypeAndValue.Value", Field, 0},
-		{"AttributeTypeAndValueSET", Type, 3},
-		{"AttributeTypeAndValueSET.Type", Field, 3},
-		{"AttributeTypeAndValueSET.Value", Field, 3},
-		{"CertificateList", Type, 0},
-		{"CertificateList.SignatureAlgorithm", Field, 0},
-		{"CertificateList.SignatureValue", Field, 0},
-		{"CertificateList.TBSCertList", Field, 0},
-		{"Extension", Type, 0},
-		{"Extension.Critical", Field, 0},
-		{"Extension.Id", Field, 0},
-		{"Extension.Value", Field, 0},
-		{"Name", Type, 0},
-		{"Name.CommonName", Field, 0},
-		{"Name.Country", Field, 0},
-		{"Name.ExtraNames", Field, 5},
-		{"Name.Locality", Field, 0},
-		{"Name.Names", Field, 0},
-		{"Name.Organization", Field, 0},
-		{"Name.OrganizationalUnit", Field, 0},
-		{"Name.PostalCode", Field, 0},
-		{"Name.Province", Field, 0},
-		{"Name.SerialNumber", Field, 0},
-		{"Name.StreetAddress", Field, 0},
-		{"RDNSequence", Type, 0},
-		{"RelativeDistinguishedNameSET", Type, 0},
-		{"RevokedCertificate", Type, 0},
-		{"RevokedCertificate.Extensions", Field, 0},
-		{"RevokedCertificate.RevocationTime", Field, 0},
-		{"RevokedCertificate.SerialNumber", Field, 0},
-		{"TBSCertificateList", Type, 0},
-		{"TBSCertificateList.Extensions", Field, 0},
-		{"TBSCertificateList.Issuer", Field, 0},
-		{"TBSCertificateList.NextUpdate", Field, 0},
-		{"TBSCertificateList.Raw", Field, 0},
-		{"TBSCertificateList.RevokedCertificates", Field, 0},
-		{"TBSCertificateList.Signature", Field, 0},
-		{"TBSCertificateList.ThisUpdate", Field, 0},
-		{"TBSCertificateList.Version", Field, 0},
+		{"(*CertificateList).HasExpired", Method, 0, ""},
+		{"(*Name).FillFromRDNSequence", Method, 0, ""},
+		{"(Name).String", Method, 10, ""},
+		{"(Name).ToRDNSequence", Method, 0, ""},
+		{"(RDNSequence).String", Method, 10, ""},
+		{"AlgorithmIdentifier", Type, 0, ""},
+		{"AlgorithmIdentifier.Algorithm", Field, 0, ""},
+		{"AlgorithmIdentifier.Parameters", Field, 0, ""},
+		{"AttributeTypeAndValue", Type, 0, ""},
+		{"AttributeTypeAndValue.Type", Field, 0, ""},
+		{"AttributeTypeAndValue.Value", Field, 0, ""},
+		{"AttributeTypeAndValueSET", Type, 3, ""},
+		{"AttributeTypeAndValueSET.Type", Field, 3, ""},
+		{"AttributeTypeAndValueSET.Value", Field, 3, ""},
+		{"CertificateList", Type, 0, ""},
+		{"CertificateList.SignatureAlgorithm", Field, 0, ""},
+		{"CertificateList.SignatureValue", Field, 0, ""},
+		{"CertificateList.TBSCertList", Field, 0, ""},
+		{"Extension", Type, 0, ""},
+		{"Extension.Critical", Field, 0, ""},
+		{"Extension.Id", Field, 0, ""},
+		{"Extension.Value", Field, 0, ""},
+		{"Name", Type, 0, ""},
+		{"Name.CommonName", Field, 0, ""},
+		{"Name.Country", Field, 0, ""},
+		{"Name.ExtraNames", Field, 5, ""},
+		{"Name.Locality", Field, 0, ""},
+		{"Name.Names", Field, 0, ""},
+		{"Name.Organization", Field, 0, ""},
+		{"Name.OrganizationalUnit", Field, 0, ""},
+		{"Name.PostalCode", Field, 0, ""},
+		{"Name.Province", Field, 0, ""},
+		{"Name.SerialNumber", Field, 0, ""},
+		{"Name.StreetAddress", Field, 0, ""},
+		{"RDNSequence", Type, 0, ""},
+		{"RelativeDistinguishedNameSET", Type, 0, ""},
+		{"RevokedCertificate", Type, 0, ""},
+		{"RevokedCertificate.Extensions", Field, 0, ""},
+		{"RevokedCertificate.RevocationTime", Field, 0, ""},
+		{"RevokedCertificate.SerialNumber", Field, 0, ""},
+		{"TBSCertificateList", Type, 0, ""},
+		{"TBSCertificateList.Extensions", Field, 0, ""},
+		{"TBSCertificateList.Issuer", Field, 0, ""},
+		{"TBSCertificateList.NextUpdate", Field, 0, ""},
+		{"TBSCertificateList.Raw", Field, 0, ""},
+		{"TBSCertificateList.RevokedCertificates", Field, 0, ""},
+		{"TBSCertificateList.Signature", Field, 0, ""},
+		{"TBSCertificateList.ThisUpdate", Field, 0, ""},
+		{"TBSCertificateList.Version", Field, 0, ""},
 	},
 	"database/sql": {
-		{"(*ColumnType).DatabaseTypeName", Method, 8},
-		{"(*ColumnType).DecimalSize", Method, 8},
-		{"(*ColumnType).Length", Method, 8},
-		{"(*ColumnType).Name", Method, 8},
-		{"(*ColumnType).Nullable", Method, 8},
-		{"(*ColumnType).ScanType", Method, 8},
-		{"(*Conn).BeginTx", Method, 9},
-		{"(*Conn).Close", Method, 9},
-		{"(*Conn).ExecContext", Method, 9},
-		{"(*Conn).PingContext", Method, 9},
-		{"(*Conn).PrepareContext", Method, 9},
-		{"(*Conn).QueryContext", Method, 9},
-		{"(*Conn).QueryRowContext", Method, 9},
-		{"(*Conn).Raw", Method, 13},
-		{"(*DB).Begin", Method, 0},
-		{"(*DB).BeginTx", Method, 8},
-		{"(*DB).Close", Method, 0},
-		{"(*DB).Conn", Method, 9},
-		{"(*DB).Driver", Method, 0},
-		{"(*DB).Exec", Method, 0},
-		{"(*DB).ExecContext", Method, 8},
-		{"(*DB).Ping", Method, 1},
-		{"(*DB).PingContext", Method, 8},
-		{"(*DB).Prepare", Method, 0},
-		{"(*DB).PrepareContext", Method, 8},
-		{"(*DB).Query", Method, 0},
-		{"(*DB).QueryContext", Method, 8},
-		{"(*DB).QueryRow", Method, 0},
-		{"(*DB).QueryRowContext", Method, 8},
-		{"(*DB).SetConnMaxIdleTime", Method, 15},
-		{"(*DB).SetConnMaxLifetime", Method, 6},
-		{"(*DB).SetMaxIdleConns", Method, 1},
-		{"(*DB).SetMaxOpenConns", Method, 2},
-		{"(*DB).Stats", Method, 5},
-		{"(*Null).Scan", Method, 22},
-		{"(*NullBool).Scan", Method, 0},
-		{"(*NullByte).Scan", Method, 17},
-		{"(*NullFloat64).Scan", Method, 0},
-		{"(*NullInt16).Scan", Method, 17},
-		{"(*NullInt32).Scan", Method, 13},
-		{"(*NullInt64).Scan", Method, 0},
-		{"(*NullString).Scan", Method, 0},
-		{"(*NullTime).Scan", Method, 13},
-		{"(*Row).Err", Method, 15},
-		{"(*Row).Scan", Method, 0},
-		{"(*Rows).Close", Method, 0},
-		{"(*Rows).ColumnTypes", Method, 8},
-		{"(*Rows).Columns", Method, 0},
-		{"(*Rows).Err", Method, 0},
-		{"(*Rows).Next", Method, 0},
-		{"(*Rows).NextResultSet", Method, 8},
-		{"(*Rows).Scan", Method, 0},
-		{"(*Stmt).Close", Method, 0},
-		{"(*Stmt).Exec", Method, 0},
-		{"(*Stmt).ExecContext", Method, 8},
-		{"(*Stmt).Query", Method, 0},
-		{"(*Stmt).QueryContext", Method, 8},
-		{"(*Stmt).QueryRow", Method, 0},
-		{"(*Stmt).QueryRowContext", Method, 8},
-		{"(*Tx).Commit", Method, 0},
-		{"(*Tx).Exec", Method, 0},
-		{"(*Tx).ExecContext", Method, 8},
-		{"(*Tx).Prepare", Method, 0},
-		{"(*Tx).PrepareContext", Method, 8},
-		{"(*Tx).Query", Method, 0},
-		{"(*Tx).QueryContext", Method, 8},
-		{"(*Tx).QueryRow", Method, 0},
-		{"(*Tx).QueryRowContext", Method, 8},
-		{"(*Tx).Rollback", Method, 0},
-		{"(*Tx).Stmt", Method, 0},
-		{"(*Tx).StmtContext", Method, 8},
-		{"(IsolationLevel).String", Method, 11},
-		{"(Null).Value", Method, 22},
-		{"(NullBool).Value", Method, 0},
-		{"(NullByte).Value", Method, 17},
-		{"(NullFloat64).Value", Method, 0},
-		{"(NullInt16).Value", Method, 17},
-		{"(NullInt32).Value", Method, 13},
-		{"(NullInt64).Value", Method, 0},
-		{"(NullString).Value", Method, 0},
-		{"(NullTime).Value", Method, 13},
-		{"ColumnType", Type, 8},
-		{"Conn", Type, 9},
-		{"DB", Type, 0},
-		{"DBStats", Type, 5},
-		{"DBStats.Idle", Field, 11},
-		{"DBStats.InUse", Field, 11},
-		{"DBStats.MaxIdleClosed", Field, 11},
-		{"DBStats.MaxIdleTimeClosed", Field, 15},
-		{"DBStats.MaxLifetimeClosed", Field, 11},
-		{"DBStats.MaxOpenConnections", Field, 11},
-		{"DBStats.OpenConnections", Field, 5},
-		{"DBStats.WaitCount", Field, 11},
-		{"DBStats.WaitDuration", Field, 11},
-		{"Drivers", Func, 4},
-		{"ErrConnDone", Var, 9},
-		{"ErrNoRows", Var, 0},
-		{"ErrTxDone", Var, 0},
-		{"IsolationLevel", Type, 8},
-		{"LevelDefault", Const, 8},
-		{"LevelLinearizable", Const, 8},
-		{"LevelReadCommitted", Const, 8},
-		{"LevelReadUncommitted", Const, 8},
-		{"LevelRepeatableRead", Const, 8},
-		{"LevelSerializable", Const, 8},
-		{"LevelSnapshot", Const, 8},
-		{"LevelWriteCommitted", Const, 8},
-		{"Named", Func, 8},
-		{"NamedArg", Type, 8},
-		{"NamedArg.Name", Field, 8},
-		{"NamedArg.Value", Field, 8},
-		{"Null", Type, 22},
-		{"Null.V", Field, 22},
-		{"Null.Valid", Field, 22},
-		{"NullBool", Type, 0},
-		{"NullBool.Bool", Field, 0},
-		{"NullBool.Valid", Field, 0},
-		{"NullByte", Type, 17},
-		{"NullByte.Byte", Field, 17},
-		{"NullByte.Valid", Field, 17},
-		{"NullFloat64", Type, 0},
-		{"NullFloat64.Float64", Field, 0},
-		{"NullFloat64.Valid", Field, 0},
-		{"NullInt16", Type, 17},
-		{"NullInt16.Int16", Field, 17},
-		{"NullInt16.Valid", Field, 17},
-		{"NullInt32", Type, 13},
-		{"NullInt32.Int32", Field, 13},
-		{"NullInt32.Valid", Field, 13},
-		{"NullInt64", Type, 0},
-		{"NullInt64.Int64", Field, 0},
-		{"NullInt64.Valid", Field, 0},
-		{"NullString", Type, 0},
-		{"NullString.String", Field, 0},
-		{"NullString.Valid", Field, 0},
-		{"NullTime", Type, 13},
-		{"NullTime.Time", Field, 13},
-		{"NullTime.Valid", Field, 13},
-		{"Open", Func, 0},
-		{"OpenDB", Func, 10},
-		{"Out", Type, 9},
-		{"Out.Dest", Field, 9},
-		{"Out.In", Field, 9},
-		{"RawBytes", Type, 0},
-		{"Register", Func, 0},
-		{"Result", Type, 0},
-		{"Row", Type, 0},
-		{"Rows", Type, 0},
-		{"Scanner", Type, 0},
-		{"Stmt", Type, 0},
-		{"Tx", Type, 0},
-		{"TxOptions", Type, 8},
-		{"TxOptions.Isolation", Field, 8},
-		{"TxOptions.ReadOnly", Field, 8},
+		{"(*ColumnType).DatabaseTypeName", Method, 8, ""},
+		{"(*ColumnType).DecimalSize", Method, 8, ""},
+		{"(*ColumnType).Length", Method, 8, ""},
+		{"(*ColumnType).Name", Method, 8, ""},
+		{"(*ColumnType).Nullable", Method, 8, ""},
+		{"(*ColumnType).ScanType", Method, 8, ""},
+		{"(*Conn).BeginTx", Method, 9, ""},
+		{"(*Conn).Close", Method, 9, ""},
+		{"(*Conn).ExecContext", Method, 9, ""},
+		{"(*Conn).PingContext", Method, 9, ""},
+		{"(*Conn).PrepareContext", Method, 9, ""},
+		{"(*Conn).QueryContext", Method, 9, ""},
+		{"(*Conn).QueryRowContext", Method, 9, ""},
+		{"(*Conn).Raw", Method, 13, ""},
+		{"(*DB).Begin", Method, 0, ""},
+		{"(*DB).BeginTx", Method, 8, ""},
+		{"(*DB).Close", Method, 0, ""},
+		{"(*DB).Conn", Method, 9, ""},
+		{"(*DB).Driver", Method, 0, ""},
+		{"(*DB).Exec", Method, 0, ""},
+		{"(*DB).ExecContext", Method, 8, ""},
+		{"(*DB).Ping", Method, 1, ""},
+		{"(*DB).PingContext", Method, 8, ""},
+		{"(*DB).Prepare", Method, 0, ""},
+		{"(*DB).PrepareContext", Method, 8, ""},
+		{"(*DB).Query", Method, 0, ""},
+		{"(*DB).QueryContext", Method, 8, ""},
+		{"(*DB).QueryRow", Method, 0, ""},
+		{"(*DB).QueryRowContext", Method, 8, ""},
+		{"(*DB).SetConnMaxIdleTime", Method, 15, ""},
+		{"(*DB).SetConnMaxLifetime", Method, 6, ""},
+		{"(*DB).SetMaxIdleConns", Method, 1, ""},
+		{"(*DB).SetMaxOpenConns", Method, 2, ""},
+		{"(*DB).Stats", Method, 5, ""},
+		{"(*Null).Scan", Method, 22, ""},
+		{"(*NullBool).Scan", Method, 0, ""},
+		{"(*NullByte).Scan", Method, 17, ""},
+		{"(*NullFloat64).Scan", Method, 0, ""},
+		{"(*NullInt16).Scan", Method, 17, ""},
+		{"(*NullInt32).Scan", Method, 13, ""},
+		{"(*NullInt64).Scan", Method, 0, ""},
+		{"(*NullString).Scan", Method, 0, ""},
+		{"(*NullTime).Scan", Method, 13, ""},
+		{"(*Row).Err", Method, 15, ""},
+		{"(*Row).Scan", Method, 0, ""},
+		{"(*Rows).Close", Method, 0, ""},
+		{"(*Rows).ColumnTypes", Method, 8, ""},
+		{"(*Rows).Columns", Method, 0, ""},
+		{"(*Rows).Err", Method, 0, ""},
+		{"(*Rows).Next", Method, 0, ""},
+		{"(*Rows).NextResultSet", Method, 8, ""},
+		{"(*Rows).Scan", Method, 0, ""},
+		{"(*Stmt).Close", Method, 0, ""},
+		{"(*Stmt).Exec", Method, 0, ""},
+		{"(*Stmt).ExecContext", Method, 8, ""},
+		{"(*Stmt).Query", Method, 0, ""},
+		{"(*Stmt).QueryContext", Method, 8, ""},
+		{"(*Stmt).QueryRow", Method, 0, ""},
+		{"(*Stmt).QueryRowContext", Method, 8, ""},
+		{"(*Tx).Commit", Method, 0, ""},
+		{"(*Tx).Exec", Method, 0, ""},
+		{"(*Tx).ExecContext", Method, 8, ""},
+		{"(*Tx).Prepare", Method, 0, ""},
+		{"(*Tx).PrepareContext", Method, 8, ""},
+		{"(*Tx).Query", Method, 0, ""},
+		{"(*Tx).QueryContext", Method, 8, ""},
+		{"(*Tx).QueryRow", Method, 0, ""},
+		{"(*Tx).QueryRowContext", Method, 8, ""},
+		{"(*Tx).Rollback", Method, 0, ""},
+		{"(*Tx).Stmt", Method, 0, ""},
+		{"(*Tx).StmtContext", Method, 8, ""},
+		{"(IsolationLevel).String", Method, 11, ""},
+		{"(Null).Value", Method, 22, ""},
+		{"(NullBool).Value", Method, 0, ""},
+		{"(NullByte).Value", Method, 17, ""},
+		{"(NullFloat64).Value", Method, 0, ""},
+		{"(NullInt16).Value", Method, 17, ""},
+		{"(NullInt32).Value", Method, 13, ""},
+		{"(NullInt64).Value", Method, 0, ""},
+		{"(NullString).Value", Method, 0, ""},
+		{"(NullTime).Value", Method, 13, ""},
+		{"ColumnType", Type, 8, ""},
+		{"Conn", Type, 9, ""},
+		{"DB", Type, 0, ""},
+		{"DBStats", Type, 5, ""},
+		{"DBStats.Idle", Field, 11, ""},
+		{"DBStats.InUse", Field, 11, ""},
+		{"DBStats.MaxIdleClosed", Field, 11, ""},
+		{"DBStats.MaxIdleTimeClosed", Field, 15, ""},
+		{"DBStats.MaxLifetimeClosed", Field, 11, ""},
+		{"DBStats.MaxOpenConnections", Field, 11, ""},
+		{"DBStats.OpenConnections", Field, 5, ""},
+		{"DBStats.WaitCount", Field, 11, ""},
+		{"DBStats.WaitDuration", Field, 11, ""},
+		{"Drivers", Func, 4, "func() []string"},
+		{"ErrConnDone", Var, 9, ""},
+		{"ErrNoRows", Var, 0, ""},
+		{"ErrTxDone", Var, 0, ""},
+		{"IsolationLevel", Type, 8, ""},
+		{"LevelDefault", Const, 8, ""},
+		{"LevelLinearizable", Const, 8, ""},
+		{"LevelReadCommitted", Const, 8, ""},
+		{"LevelReadUncommitted", Const, 8, ""},
+		{"LevelRepeatableRead", Const, 8, ""},
+		{"LevelSerializable", Const, 8, ""},
+		{"LevelSnapshot", Const, 8, ""},
+		{"LevelWriteCommitted", Const, 8, ""},
+		{"Named", Func, 8, "func(name string, value any) NamedArg"},
+		{"NamedArg", Type, 8, ""},
+		{"NamedArg.Name", Field, 8, ""},
+		{"NamedArg.Value", Field, 8, ""},
+		{"Null", Type, 22, ""},
+		{"Null.V", Field, 22, ""},
+		{"Null.Valid", Field, 22, ""},
+		{"NullBool", Type, 0, ""},
+		{"NullBool.Bool", Field, 0, ""},
+		{"NullBool.Valid", Field, 0, ""},
+		{"NullByte", Type, 17, ""},
+		{"NullByte.Byte", Field, 17, ""},
+		{"NullByte.Valid", Field, 17, ""},
+		{"NullFloat64", Type, 0, ""},
+		{"NullFloat64.Float64", Field, 0, ""},
+		{"NullFloat64.Valid", Field, 0, ""},
+		{"NullInt16", Type, 17, ""},
+		{"NullInt16.Int16", Field, 17, ""},
+		{"NullInt16.Valid", Field, 17, ""},
+		{"NullInt32", Type, 13, ""},
+		{"NullInt32.Int32", Field, 13, ""},
+		{"NullInt32.Valid", Field, 13, ""},
+		{"NullInt64", Type, 0, ""},
+		{"NullInt64.Int64", Field, 0, ""},
+		{"NullInt64.Valid", Field, 0, ""},
+		{"NullString", Type, 0, ""},
+		{"NullString.String", Field, 0, ""},
+		{"NullString.Valid", Field, 0, ""},
+		{"NullTime", Type, 13, ""},
+		{"NullTime.Time", Field, 13, ""},
+		{"NullTime.Valid", Field, 13, ""},
+		{"Open", Func, 0, "func(driverName string, dataSourceName string) (*DB, error)"},
+		{"OpenDB", Func, 10, "func(c driver.Connector) *DB"},
+		{"Out", Type, 9, ""},
+		{"Out.Dest", Field, 9, ""},
+		{"Out.In", Field, 9, ""},
+		{"RawBytes", Type, 0, ""},
+		{"Register", Func, 0, "func(name string, driver driver.Driver)"},
+		{"Result", Type, 0, ""},
+		{"Row", Type, 0, ""},
+		{"Rows", Type, 0, ""},
+		{"Scanner", Type, 0, ""},
+		{"Stmt", Type, 0, ""},
+		{"Tx", Type, 0, ""},
+		{"TxOptions", Type, 8, ""},
+		{"TxOptions.Isolation", Field, 8, ""},
+		{"TxOptions.ReadOnly", Field, 8, ""},
 	},
 	"database/sql/driver": {
-		{"(NotNull).ConvertValue", Method, 0},
-		{"(Null).ConvertValue", Method, 0},
-		{"(RowsAffected).LastInsertId", Method, 0},
-		{"(RowsAffected).RowsAffected", Method, 0},
-		{"Bool", Var, 0},
-		{"ColumnConverter", Type, 0},
-		{"Conn", Type, 0},
-		{"ConnBeginTx", Type, 8},
-		{"ConnPrepareContext", Type, 8},
-		{"Connector", Type, 10},
-		{"DefaultParameterConverter", Var, 0},
-		{"Driver", Type, 0},
-		{"DriverContext", Type, 10},
-		{"ErrBadConn", Var, 0},
-		{"ErrRemoveArgument", Var, 9},
-		{"ErrSkip", Var, 0},
-		{"Execer", Type, 0},
-		{"ExecerContext", Type, 8},
-		{"Int32", Var, 0},
-		{"IsScanValue", Func, 0},
-		{"IsValue", Func, 0},
-		{"IsolationLevel", Type, 8},
-		{"NamedValue", Type, 8},
-		{"NamedValue.Name", Field, 8},
-		{"NamedValue.Ordinal", Field, 8},
-		{"NamedValue.Value", Field, 8},
-		{"NamedValueChecker", Type, 9},
-		{"NotNull", Type, 0},
-		{"NotNull.Converter", Field, 0},
-		{"Null", Type, 0},
-		{"Null.Converter", Field, 0},
-		{"Pinger", Type, 8},
-		{"Queryer", Type, 1},
-		{"QueryerContext", Type, 8},
-		{"Result", Type, 0},
-		{"ResultNoRows", Var, 0},
-		{"Rows", Type, 0},
-		{"RowsAffected", Type, 0},
-		{"RowsColumnTypeDatabaseTypeName", Type, 8},
-		{"RowsColumnTypeLength", Type, 8},
-		{"RowsColumnTypeNullable", Type, 8},
-		{"RowsColumnTypePrecisionScale", Type, 8},
-		{"RowsColumnTypeScanType", Type, 8},
-		{"RowsNextResultSet", Type, 8},
-		{"SessionResetter", Type, 10},
-		{"Stmt", Type, 0},
-		{"StmtExecContext", Type, 8},
-		{"StmtQueryContext", Type, 8},
-		{"String", Var, 0},
-		{"Tx", Type, 0},
-		{"TxOptions", Type, 8},
-		{"TxOptions.Isolation", Field, 8},
-		{"TxOptions.ReadOnly", Field, 8},
-		{"Validator", Type, 15},
-		{"Value", Type, 0},
-		{"ValueConverter", Type, 0},
-		{"Valuer", Type, 0},
+		{"(NotNull).ConvertValue", Method, 0, ""},
+		{"(Null).ConvertValue", Method, 0, ""},
+		{"(RowsAffected).LastInsertId", Method, 0, ""},
+		{"(RowsAffected).RowsAffected", Method, 0, ""},
+		{"Bool", Var, 0, ""},
+		{"ColumnConverter", Type, 0, ""},
+		{"Conn", Type, 0, ""},
+		{"ConnBeginTx", Type, 8, ""},
+		{"ConnPrepareContext", Type, 8, ""},
+		{"Connector", Type, 10, ""},
+		{"DefaultParameterConverter", Var, 0, ""},
+		{"Driver", Type, 0, ""},
+		{"DriverContext", Type, 10, ""},
+		{"ErrBadConn", Var, 0, ""},
+		{"ErrRemoveArgument", Var, 9, ""},
+		{"ErrSkip", Var, 0, ""},
+		{"Execer", Type, 0, ""},
+		{"ExecerContext", Type, 8, ""},
+		{"Int32", Var, 0, ""},
+		{"IsScanValue", Func, 0, "func(v any) bool"},
+		{"IsValue", Func, 0, "func(v any) bool"},
+		{"IsolationLevel", Type, 8, ""},
+		{"NamedValue", Type, 8, ""},
+		{"NamedValue.Name", Field, 8, ""},
+		{"NamedValue.Ordinal", Field, 8, ""},
+		{"NamedValue.Value", Field, 8, ""},
+		{"NamedValueChecker", Type, 9, ""},
+		{"NotNull", Type, 0, ""},
+		{"NotNull.Converter", Field, 0, ""},
+		{"Null", Type, 0, ""},
+		{"Null.Converter", Field, 0, ""},
+		{"Pinger", Type, 8, ""},
+		{"Queryer", Type, 1, ""},
+		{"QueryerContext", Type, 8, ""},
+		{"Result", Type, 0, ""},
+		{"ResultNoRows", Var, 0, ""},
+		{"Rows", Type, 0, ""},
+		{"RowsAffected", Type, 0, ""},
+		{"RowsColumnTypeDatabaseTypeName", Type, 8, ""},
+		{"RowsColumnTypeLength", Type, 8, ""},
+		{"RowsColumnTypeNullable", Type, 8, ""},
+		{"RowsColumnTypePrecisionScale", Type, 8, ""},
+		{"RowsColumnTypeScanType", Type, 8, ""},
+		{"RowsNextResultSet", Type, 8, ""},
+		{"SessionResetter", Type, 10, ""},
+		{"Stmt", Type, 0, ""},
+		{"StmtExecContext", Type, 8, ""},
+		{"StmtQueryContext", Type, 8, ""},
+		{"String", Var, 0, ""},
+		{"Tx", Type, 0, ""},
+		{"TxOptions", Type, 8, ""},
+		{"TxOptions.Isolation", Field, 8, ""},
+		{"TxOptions.ReadOnly", Field, 8, ""},
+		{"Validator", Type, 15, ""},
+		{"Value", Type, 0, ""},
+		{"ValueConverter", Type, 0, ""},
+		{"Valuer", Type, 0, ""},
 	},
 	"debug/buildinfo": {
-		{"BuildInfo", Type, 18},
-		{"Read", Func, 18},
-		{"ReadFile", Func, 18},
+		{"BuildInfo", Type, 18, ""},
+		{"Read", Func, 18, "func(r io.ReaderAt) (*BuildInfo, error)"},
+		{"ReadFile", Func, 18, "func(name string) (info *BuildInfo, err error)"},
 	},
 	"debug/dwarf": {
-		{"(*AddrType).Basic", Method, 0},
-		{"(*AddrType).Common", Method, 0},
-		{"(*AddrType).Size", Method, 0},
-		{"(*AddrType).String", Method, 0},
-		{"(*ArrayType).Common", Method, 0},
-		{"(*ArrayType).Size", Method, 0},
-		{"(*ArrayType).String", Method, 0},
-		{"(*BasicType).Basic", Method, 0},
-		{"(*BasicType).Common", Method, 0},
-		{"(*BasicType).Size", Method, 0},
-		{"(*BasicType).String", Method, 0},
-		{"(*BoolType).Basic", Method, 0},
-		{"(*BoolType).Common", Method, 0},
-		{"(*BoolType).Size", Method, 0},
-		{"(*BoolType).String", Method, 0},
-		{"(*CharType).Basic", Method, 0},
-		{"(*CharType).Common", Method, 0},
-		{"(*CharType).Size", Method, 0},
-		{"(*CharType).String", Method, 0},
-		{"(*CommonType).Common", Method, 0},
-		{"(*CommonType).Size", Method, 0},
-		{"(*ComplexType).Basic", Method, 0},
-		{"(*ComplexType).Common", Method, 0},
-		{"(*ComplexType).Size", Method, 0},
-		{"(*ComplexType).String", Method, 0},
-		{"(*Data).AddSection", Method, 14},
-		{"(*Data).AddTypes", Method, 3},
-		{"(*Data).LineReader", Method, 5},
-		{"(*Data).Ranges", Method, 7},
-		{"(*Data).Reader", Method, 0},
-		{"(*Data).Type", Method, 0},
-		{"(*DotDotDotType).Common", Method, 0},
-		{"(*DotDotDotType).Size", Method, 0},
-		{"(*DotDotDotType).String", Method, 0},
-		{"(*Entry).AttrField", Method, 5},
-		{"(*Entry).Val", Method, 0},
-		{"(*EnumType).Common", Method, 0},
-		{"(*EnumType).Size", Method, 0},
-		{"(*EnumType).String", Method, 0},
-		{"(*FloatType).Basic", Method, 0},
-		{"(*FloatType).Common", Method, 0},
-		{"(*FloatType).Size", Method, 0},
-		{"(*FloatType).String", Method, 0},
-		{"(*FuncType).Common", Method, 0},
-		{"(*FuncType).Size", Method, 0},
-		{"(*FuncType).String", Method, 0},
-		{"(*IntType).Basic", Method, 0},
-		{"(*IntType).Common", Method, 0},
-		{"(*IntType).Size", Method, 0},
-		{"(*IntType).String", Method, 0},
-		{"(*LineReader).Files", Method, 14},
-		{"(*LineReader).Next", Method, 5},
-		{"(*LineReader).Reset", Method, 5},
-		{"(*LineReader).Seek", Method, 5},
-		{"(*LineReader).SeekPC", Method, 5},
-		{"(*LineReader).Tell", Method, 5},
-		{"(*PtrType).Common", Method, 0},
-		{"(*PtrType).Size", Method, 0},
-		{"(*PtrType).String", Method, 0},
-		{"(*QualType).Common", Method, 0},
-		{"(*QualType).Size", Method, 0},
-		{"(*QualType).String", Method, 0},
-		{"(*Reader).AddressSize", Method, 5},
-		{"(*Reader).ByteOrder", Method, 14},
-		{"(*Reader).Next", Method, 0},
-		{"(*Reader).Seek", Method, 0},
-		{"(*Reader).SeekPC", Method, 7},
-		{"(*Reader).SkipChildren", Method, 0},
-		{"(*StructType).Common", Method, 0},
-		{"(*StructType).Defn", Method, 0},
-		{"(*StructType).Size", Method, 0},
-		{"(*StructType).String", Method, 0},
-		{"(*TypedefType).Common", Method, 0},
-		{"(*TypedefType).Size", Method, 0},
-		{"(*TypedefType).String", Method, 0},
-		{"(*UcharType).Basic", Method, 0},
-		{"(*UcharType).Common", Method, 0},
-		{"(*UcharType).Size", Method, 0},
-		{"(*UcharType).String", Method, 0},
-		{"(*UintType).Basic", Method, 0},
-		{"(*UintType).Common", Method, 0},
-		{"(*UintType).Size", Method, 0},
-		{"(*UintType).String", Method, 0},
-		{"(*UnspecifiedType).Basic", Method, 4},
-		{"(*UnspecifiedType).Common", Method, 4},
-		{"(*UnspecifiedType).Size", Method, 4},
-		{"(*UnspecifiedType).String", Method, 4},
-		{"(*UnsupportedType).Common", Method, 13},
-		{"(*UnsupportedType).Size", Method, 13},
-		{"(*UnsupportedType).String", Method, 13},
-		{"(*VoidType).Common", Method, 0},
-		{"(*VoidType).Size", Method, 0},
-		{"(*VoidType).String", Method, 0},
-		{"(Attr).GoString", Method, 0},
-		{"(Attr).String", Method, 0},
-		{"(Class).GoString", Method, 5},
-		{"(Class).String", Method, 5},
-		{"(DecodeError).Error", Method, 0},
-		{"(Tag).GoString", Method, 0},
-		{"(Tag).String", Method, 0},
-		{"AddrType", Type, 0},
-		{"AddrType.BasicType", Field, 0},
-		{"ArrayType", Type, 0},
-		{"ArrayType.CommonType", Field, 0},
-		{"ArrayType.Count", Field, 0},
-		{"ArrayType.StrideBitSize", Field, 0},
-		{"ArrayType.Type", Field, 0},
-		{"Attr", Type, 0},
-		{"AttrAbstractOrigin", Const, 0},
-		{"AttrAccessibility", Const, 0},
-		{"AttrAddrBase", Const, 14},
-		{"AttrAddrClass", Const, 0},
-		{"AttrAlignment", Const, 14},
-		{"AttrAllocated", Const, 0},
-		{"AttrArtificial", Const, 0},
-		{"AttrAssociated", Const, 0},
-		{"AttrBaseTypes", Const, 0},
-		{"AttrBinaryScale", Const, 14},
-		{"AttrBitOffset", Const, 0},
-		{"AttrBitSize", Const, 0},
-		{"AttrByteSize", Const, 0},
-		{"AttrCallAllCalls", Const, 14},
-		{"AttrCallAllSourceCalls", Const, 14},
-		{"AttrCallAllTailCalls", Const, 14},
-		{"AttrCallColumn", Const, 0},
-		{"AttrCallDataLocation", Const, 14},
-		{"AttrCallDataValue", Const, 14},
-		{"AttrCallFile", Const, 0},
-		{"AttrCallLine", Const, 0},
-		{"AttrCallOrigin", Const, 14},
-		{"AttrCallPC", Const, 14},
-		{"AttrCallParameter", Const, 14},
-		{"AttrCallReturnPC", Const, 14},
-		{"AttrCallTailCall", Const, 14},
-		{"AttrCallTarget", Const, 14},
-		{"AttrCallTargetClobbered", Const, 14},
-		{"AttrCallValue", Const, 14},
-		{"AttrCalling", Const, 0},
-		{"AttrCommonRef", Const, 0},
-		{"AttrCompDir", Const, 0},
-		{"AttrConstExpr", Const, 14},
-		{"AttrConstValue", Const, 0},
-		{"AttrContainingType", Const, 0},
-		{"AttrCount", Const, 0},
-		{"AttrDataBitOffset", Const, 14},
-		{"AttrDataLocation", Const, 0},
-		{"AttrDataMemberLoc", Const, 0},
-		{"AttrDecimalScale", Const, 14},
-		{"AttrDecimalSign", Const, 14},
-		{"AttrDeclColumn", Const, 0},
-		{"AttrDeclFile", Const, 0},
-		{"AttrDeclLine", Const, 0},
-		{"AttrDeclaration", Const, 0},
-		{"AttrDefaultValue", Const, 0},
-		{"AttrDefaulted", Const, 14},
-		{"AttrDeleted", Const, 14},
-		{"AttrDescription", Const, 0},
-		{"AttrDigitCount", Const, 14},
-		{"AttrDiscr", Const, 0},
-		{"AttrDiscrList", Const, 0},
-		{"AttrDiscrValue", Const, 0},
-		{"AttrDwoName", Const, 14},
-		{"AttrElemental", Const, 14},
-		{"AttrEncoding", Const, 0},
-		{"AttrEndianity", Const, 14},
-		{"AttrEntrypc", Const, 0},
-		{"AttrEnumClass", Const, 14},
-		{"AttrExplicit", Const, 14},
-		{"AttrExportSymbols", Const, 14},
-		{"AttrExtension", Const, 0},
-		{"AttrExternal", Const, 0},
-		{"AttrFrameBase", Const, 0},
-		{"AttrFriend", Const, 0},
-		{"AttrHighpc", Const, 0},
-		{"AttrIdentifierCase", Const, 0},
-		{"AttrImport", Const, 0},
-		{"AttrInline", Const, 0},
-		{"AttrIsOptional", Const, 0},
-		{"AttrLanguage", Const, 0},
-		{"AttrLinkageName", Const, 14},
-		{"AttrLocation", Const, 0},
-		{"AttrLoclistsBase", Const, 14},
-		{"AttrLowerBound", Const, 0},
-		{"AttrLowpc", Const, 0},
-		{"AttrMacroInfo", Const, 0},
-		{"AttrMacros", Const, 14},
-		{"AttrMainSubprogram", Const, 14},
-		{"AttrMutable", Const, 14},
-		{"AttrName", Const, 0},
-		{"AttrNamelistItem", Const, 0},
-		{"AttrNoreturn", Const, 14},
-		{"AttrObjectPointer", Const, 14},
-		{"AttrOrdering", Const, 0},
-		{"AttrPictureString", Const, 14},
-		{"AttrPriority", Const, 0},
-		{"AttrProducer", Const, 0},
-		{"AttrPrototyped", Const, 0},
-		{"AttrPure", Const, 14},
-		{"AttrRanges", Const, 0},
-		{"AttrRank", Const, 14},
-		{"AttrRecursive", Const, 14},
-		{"AttrReference", Const, 14},
-		{"AttrReturnAddr", Const, 0},
-		{"AttrRnglistsBase", Const, 14},
-		{"AttrRvalueReference", Const, 14},
-		{"AttrSegment", Const, 0},
-		{"AttrSibling", Const, 0},
-		{"AttrSignature", Const, 14},
-		{"AttrSmall", Const, 14},
-		{"AttrSpecification", Const, 0},
-		{"AttrStartScope", Const, 0},
-		{"AttrStaticLink", Const, 0},
-		{"AttrStmtList", Const, 0},
-		{"AttrStrOffsetsBase", Const, 14},
-		{"AttrStride", Const, 0},
-		{"AttrStrideSize", Const, 0},
-		{"AttrStringLength", Const, 0},
-		{"AttrStringLengthBitSize", Const, 14},
-		{"AttrStringLengthByteSize", Const, 14},
-		{"AttrThreadsScaled", Const, 14},
-		{"AttrTrampoline", Const, 0},
-		{"AttrType", Const, 0},
-		{"AttrUpperBound", Const, 0},
-		{"AttrUseLocation", Const, 0},
-		{"AttrUseUTF8", Const, 0},
-		{"AttrVarParam", Const, 0},
-		{"AttrVirtuality", Const, 0},
-		{"AttrVisibility", Const, 0},
-		{"AttrVtableElemLoc", Const, 0},
-		{"BasicType", Type, 0},
-		{"BasicType.BitOffset", Field, 0},
-		{"BasicType.BitSize", Field, 0},
-		{"BasicType.CommonType", Field, 0},
-		{"BasicType.DataBitOffset", Field, 18},
-		{"BoolType", Type, 0},
-		{"BoolType.BasicType", Field, 0},
-		{"CharType", Type, 0},
-		{"CharType.BasicType", Field, 0},
-		{"Class", Type, 5},
-		{"ClassAddrPtr", Const, 14},
-		{"ClassAddress", Const, 5},
-		{"ClassBlock", Const, 5},
-		{"ClassConstant", Const, 5},
-		{"ClassExprLoc", Const, 5},
-		{"ClassFlag", Const, 5},
-		{"ClassLinePtr", Const, 5},
-		{"ClassLocList", Const, 14},
-		{"ClassLocListPtr", Const, 5},
-		{"ClassMacPtr", Const, 5},
-		{"ClassRangeListPtr", Const, 5},
-		{"ClassReference", Const, 5},
-		{"ClassReferenceAlt", Const, 5},
-		{"ClassReferenceSig", Const, 5},
-		{"ClassRngList", Const, 14},
-		{"ClassRngListsPtr", Const, 14},
-		{"ClassStrOffsetsPtr", Const, 14},
-		{"ClassString", Const, 5},
-		{"ClassStringAlt", Const, 5},
-		{"ClassUnknown", Const, 6},
-		{"CommonType", Type, 0},
-		{"CommonType.ByteSize", Field, 0},
-		{"CommonType.Name", Field, 0},
-		{"ComplexType", Type, 0},
-		{"ComplexType.BasicType", Field, 0},
-		{"Data", Type, 0},
-		{"DecodeError", Type, 0},
-		{"DecodeError.Err", Field, 0},
-		{"DecodeError.Name", Field, 0},
-		{"DecodeError.Offset", Field, 0},
-		{"DotDotDotType", Type, 0},
-		{"DotDotDotType.CommonType", Field, 0},
-		{"Entry", Type, 0},
-		{"Entry.Children", Field, 0},
-		{"Entry.Field", Field, 0},
-		{"Entry.Offset", Field, 0},
-		{"Entry.Tag", Field, 0},
-		{"EnumType", Type, 0},
-		{"EnumType.CommonType", Field, 0},
-		{"EnumType.EnumName", Field, 0},
-		{"EnumType.Val", Field, 0},
-		{"EnumValue", Type, 0},
-		{"EnumValue.Name", Field, 0},
-		{"EnumValue.Val", Field, 0},
-		{"ErrUnknownPC", Var, 5},
-		{"Field", Type, 0},
-		{"Field.Attr", Field, 0},
-		{"Field.Class", Field, 5},
-		{"Field.Val", Field, 0},
-		{"FloatType", Type, 0},
-		{"FloatType.BasicType", Field, 0},
-		{"FuncType", Type, 0},
-		{"FuncType.CommonType", Field, 0},
-		{"FuncType.ParamType", Field, 0},
-		{"FuncType.ReturnType", Field, 0},
-		{"IntType", Type, 0},
-		{"IntType.BasicType", Field, 0},
-		{"LineEntry", Type, 5},
-		{"LineEntry.Address", Field, 5},
-		{"LineEntry.BasicBlock", Field, 5},
-		{"LineEntry.Column", Field, 5},
-		{"LineEntry.Discriminator", Field, 5},
-		{"LineEntry.EndSequence", Field, 5},
-		{"LineEntry.EpilogueBegin", Field, 5},
-		{"LineEntry.File", Field, 5},
-		{"LineEntry.ISA", Field, 5},
-		{"LineEntry.IsStmt", Field, 5},
-		{"LineEntry.Line", Field, 5},
-		{"LineEntry.OpIndex", Field, 5},
-		{"LineEntry.PrologueEnd", Field, 5},
-		{"LineFile", Type, 5},
-		{"LineFile.Length", Field, 5},
-		{"LineFile.Mtime", Field, 5},
-		{"LineFile.Name", Field, 5},
-		{"LineReader", Type, 5},
-		{"LineReaderPos", Type, 5},
-		{"New", Func, 0},
-		{"Offset", Type, 0},
-		{"PtrType", Type, 0},
-		{"PtrType.CommonType", Field, 0},
-		{"PtrType.Type", Field, 0},
-		{"QualType", Type, 0},
-		{"QualType.CommonType", Field, 0},
-		{"QualType.Qual", Field, 0},
-		{"QualType.Type", Field, 0},
-		{"Reader", Type, 0},
-		{"StructField", Type, 0},
-		{"StructField.BitOffset", Field, 0},
-		{"StructField.BitSize", Field, 0},
-		{"StructField.ByteOffset", Field, 0},
-		{"StructField.ByteSize", Field, 0},
-		{"StructField.DataBitOffset", Field, 18},
-		{"StructField.Name", Field, 0},
-		{"StructField.Type", Field, 0},
-		{"StructType", Type, 0},
-		{"StructType.CommonType", Field, 0},
-		{"StructType.Field", Field, 0},
-		{"StructType.Incomplete", Field, 0},
-		{"StructType.Kind", Field, 0},
-		{"StructType.StructName", Field, 0},
-		{"Tag", Type, 0},
-		{"TagAccessDeclaration", Const, 0},
-		{"TagArrayType", Const, 0},
-		{"TagAtomicType", Const, 14},
-		{"TagBaseType", Const, 0},
-		{"TagCallSite", Const, 14},
-		{"TagCallSiteParameter", Const, 14},
-		{"TagCatchDwarfBlock", Const, 0},
-		{"TagClassType", Const, 0},
-		{"TagCoarrayType", Const, 14},
-		{"TagCommonDwarfBlock", Const, 0},
-		{"TagCommonInclusion", Const, 0},
-		{"TagCompileUnit", Const, 0},
-		{"TagCondition", Const, 3},
-		{"TagConstType", Const, 0},
-		{"TagConstant", Const, 0},
-		{"TagDwarfProcedure", Const, 0},
-		{"TagDynamicType", Const, 14},
-		{"TagEntryPoint", Const, 0},
-		{"TagEnumerationType", Const, 0},
-		{"TagEnumerator", Const, 0},
-		{"TagFileType", Const, 0},
-		{"TagFormalParameter", Const, 0},
-		{"TagFriend", Const, 0},
-		{"TagGenericSubrange", Const, 14},
-		{"TagImmutableType", Const, 14},
-		{"TagImportedDeclaration", Const, 0},
-		{"TagImportedModule", Const, 0},
-		{"TagImportedUnit", Const, 0},
-		{"TagInheritance", Const, 0},
-		{"TagInlinedSubroutine", Const, 0},
-		{"TagInterfaceType", Const, 0},
-		{"TagLabel", Const, 0},
-		{"TagLexDwarfBlock", Const, 0},
-		{"TagMember", Const, 0},
-		{"TagModule", Const, 0},
-		{"TagMutableType", Const, 0},
-		{"TagNamelist", Const, 0},
-		{"TagNamelistItem", Const, 0},
-		{"TagNamespace", Const, 0},
-		{"TagPackedType", Const, 0},
-		{"TagPartialUnit", Const, 0},
-		{"TagPointerType", Const, 0},
-		{"TagPtrToMemberType", Const, 0},
-		{"TagReferenceType", Const, 0},
-		{"TagRestrictType", Const, 0},
-		{"TagRvalueReferenceType", Const, 3},
-		{"TagSetType", Const, 0},
-		{"TagSharedType", Const, 3},
-		{"TagSkeletonUnit", Const, 14},
-		{"TagStringType", Const, 0},
-		{"TagStructType", Const, 0},
-		{"TagSubprogram", Const, 0},
-		{"TagSubrangeType", Const, 0},
-		{"TagSubroutineType", Const, 0},
-		{"TagTemplateAlias", Const, 3},
-		{"TagTemplateTypeParameter", Const, 0},
-		{"TagTemplateValueParameter", Const, 0},
-		{"TagThrownType", Const, 0},
-		{"TagTryDwarfBlock", Const, 0},
-		{"TagTypeUnit", Const, 3},
-		{"TagTypedef", Const, 0},
-		{"TagUnionType", Const, 0},
-		{"TagUnspecifiedParameters", Const, 0},
-		{"TagUnspecifiedType", Const, 0},
-		{"TagVariable", Const, 0},
-		{"TagVariant", Const, 0},
-		{"TagVariantPart", Const, 0},
-		{"TagVolatileType", Const, 0},
-		{"TagWithStmt", Const, 0},
-		{"Type", Type, 0},
-		{"TypedefType", Type, 0},
-		{"TypedefType.CommonType", Field, 0},
-		{"TypedefType.Type", Field, 0},
-		{"UcharType", Type, 0},
-		{"UcharType.BasicType", Field, 0},
-		{"UintType", Type, 0},
-		{"UintType.BasicType", Field, 0},
-		{"UnspecifiedType", Type, 4},
-		{"UnspecifiedType.BasicType", Field, 4},
-		{"UnsupportedType", Type, 13},
-		{"UnsupportedType.CommonType", Field, 13},
-		{"UnsupportedType.Tag", Field, 13},
-		{"VoidType", Type, 0},
-		{"VoidType.CommonType", Field, 0},
+		{"(*AddrType).Basic", Method, 0, ""},
+		{"(*AddrType).Common", Method, 0, ""},
+		{"(*AddrType).Size", Method, 0, ""},
+		{"(*AddrType).String", Method, 0, ""},
+		{"(*ArrayType).Common", Method, 0, ""},
+		{"(*ArrayType).Size", Method, 0, ""},
+		{"(*ArrayType).String", Method, 0, ""},
+		{"(*BasicType).Basic", Method, 0, ""},
+		{"(*BasicType).Common", Method, 0, ""},
+		{"(*BasicType).Size", Method, 0, ""},
+		{"(*BasicType).String", Method, 0, ""},
+		{"(*BoolType).Basic", Method, 0, ""},
+		{"(*BoolType).Common", Method, 0, ""},
+		{"(*BoolType).Size", Method, 0, ""},
+		{"(*BoolType).String", Method, 0, ""},
+		{"(*CharType).Basic", Method, 0, ""},
+		{"(*CharType).Common", Method, 0, ""},
+		{"(*CharType).Size", Method, 0, ""},
+		{"(*CharType).String", Method, 0, ""},
+		{"(*CommonType).Common", Method, 0, ""},
+		{"(*CommonType).Size", Method, 0, ""},
+		{"(*ComplexType).Basic", Method, 0, ""},
+		{"(*ComplexType).Common", Method, 0, ""},
+		{"(*ComplexType).Size", Method, 0, ""},
+		{"(*ComplexType).String", Method, 0, ""},
+		{"(*Data).AddSection", Method, 14, ""},
+		{"(*Data).AddTypes", Method, 3, ""},
+		{"(*Data).LineReader", Method, 5, ""},
+		{"(*Data).Ranges", Method, 7, ""},
+		{"(*Data).Reader", Method, 0, ""},
+		{"(*Data).Type", Method, 0, ""},
+		{"(*DotDotDotType).Common", Method, 0, ""},
+		{"(*DotDotDotType).Size", Method, 0, ""},
+		{"(*DotDotDotType).String", Method, 0, ""},
+		{"(*Entry).AttrField", Method, 5, ""},
+		{"(*Entry).Val", Method, 0, ""},
+		{"(*EnumType).Common", Method, 0, ""},
+		{"(*EnumType).Size", Method, 0, ""},
+		{"(*EnumType).String", Method, 0, ""},
+		{"(*FloatType).Basic", Method, 0, ""},
+		{"(*FloatType).Common", Method, 0, ""},
+		{"(*FloatType).Size", Method, 0, ""},
+		{"(*FloatType).String", Method, 0, ""},
+		{"(*FuncType).Common", Method, 0, ""},
+		{"(*FuncType).Size", Method, 0, ""},
+		{"(*FuncType).String", Method, 0, ""},
+		{"(*IntType).Basic", Method, 0, ""},
+		{"(*IntType).Common", Method, 0, ""},
+		{"(*IntType).Size", Method, 0, ""},
+		{"(*IntType).String", Method, 0, ""},
+		{"(*LineReader).Files", Method, 14, ""},
+		{"(*LineReader).Next", Method, 5, ""},
+		{"(*LineReader).Reset", Method, 5, ""},
+		{"(*LineReader).Seek", Method, 5, ""},
+		{"(*LineReader).SeekPC", Method, 5, ""},
+		{"(*LineReader).Tell", Method, 5, ""},
+		{"(*PtrType).Common", Method, 0, ""},
+		{"(*PtrType).Size", Method, 0, ""},
+		{"(*PtrType).String", Method, 0, ""},
+		{"(*QualType).Common", Method, 0, ""},
+		{"(*QualType).Size", Method, 0, ""},
+		{"(*QualType).String", Method, 0, ""},
+		{"(*Reader).AddressSize", Method, 5, ""},
+		{"(*Reader).ByteOrder", Method, 14, ""},
+		{"(*Reader).Next", Method, 0, ""},
+		{"(*Reader).Seek", Method, 0, ""},
+		{"(*Reader).SeekPC", Method, 7, ""},
+		{"(*Reader).SkipChildren", Method, 0, ""},
+		{"(*StructType).Common", Method, 0, ""},
+		{"(*StructType).Defn", Method, 0, ""},
+		{"(*StructType).Size", Method, 0, ""},
+		{"(*StructType).String", Method, 0, ""},
+		{"(*TypedefType).Common", Method, 0, ""},
+		{"(*TypedefType).Size", Method, 0, ""},
+		{"(*TypedefType).String", Method, 0, ""},
+		{"(*UcharType).Basic", Method, 0, ""},
+		{"(*UcharType).Common", Method, 0, ""},
+		{"(*UcharType).Size", Method, 0, ""},
+		{"(*UcharType).String", Method, 0, ""},
+		{"(*UintType).Basic", Method, 0, ""},
+		{"(*UintType).Common", Method, 0, ""},
+		{"(*UintType).Size", Method, 0, ""},
+		{"(*UintType).String", Method, 0, ""},
+		{"(*UnspecifiedType).Basic", Method, 4, ""},
+		{"(*UnspecifiedType).Common", Method, 4, ""},
+		{"(*UnspecifiedType).Size", Method, 4, ""},
+		{"(*UnspecifiedType).String", Method, 4, ""},
+		{"(*UnsupportedType).Common", Method, 13, ""},
+		{"(*UnsupportedType).Size", Method, 13, ""},
+		{"(*UnsupportedType).String", Method, 13, ""},
+		{"(*VoidType).Common", Method, 0, ""},
+		{"(*VoidType).Size", Method, 0, ""},
+		{"(*VoidType).String", Method, 0, ""},
+		{"(Attr).GoString", Method, 0, ""},
+		{"(Attr).String", Method, 0, ""},
+		{"(Class).GoString", Method, 5, ""},
+		{"(Class).String", Method, 5, ""},
+		{"(DecodeError).Error", Method, 0, ""},
+		{"(Tag).GoString", Method, 0, ""},
+		{"(Tag).String", Method, 0, ""},
+		{"AddrType", Type, 0, ""},
+		{"AddrType.BasicType", Field, 0, ""},
+		{"ArrayType", Type, 0, ""},
+		{"ArrayType.CommonType", Field, 0, ""},
+		{"ArrayType.Count", Field, 0, ""},
+		{"ArrayType.StrideBitSize", Field, 0, ""},
+		{"ArrayType.Type", Field, 0, ""},
+		{"Attr", Type, 0, ""},
+		{"AttrAbstractOrigin", Const, 0, ""},
+		{"AttrAccessibility", Const, 0, ""},
+		{"AttrAddrBase", Const, 14, ""},
+		{"AttrAddrClass", Const, 0, ""},
+		{"AttrAlignment", Const, 14, ""},
+		{"AttrAllocated", Const, 0, ""},
+		{"AttrArtificial", Const, 0, ""},
+		{"AttrAssociated", Const, 0, ""},
+		{"AttrBaseTypes", Const, 0, ""},
+		{"AttrBinaryScale", Const, 14, ""},
+		{"AttrBitOffset", Const, 0, ""},
+		{"AttrBitSize", Const, 0, ""},
+		{"AttrByteSize", Const, 0, ""},
+		{"AttrCallAllCalls", Const, 14, ""},
+		{"AttrCallAllSourceCalls", Const, 14, ""},
+		{"AttrCallAllTailCalls", Const, 14, ""},
+		{"AttrCallColumn", Const, 0, ""},
+		{"AttrCallDataLocation", Const, 14, ""},
+		{"AttrCallDataValue", Const, 14, ""},
+		{"AttrCallFile", Const, 0, ""},
+		{"AttrCallLine", Const, 0, ""},
+		{"AttrCallOrigin", Const, 14, ""},
+		{"AttrCallPC", Const, 14, ""},
+		{"AttrCallParameter", Const, 14, ""},
+		{"AttrCallReturnPC", Const, 14, ""},
+		{"AttrCallTailCall", Const, 14, ""},
+		{"AttrCallTarget", Const, 14, ""},
+		{"AttrCallTargetClobbered", Const, 14, ""},
+		{"AttrCallValue", Const, 14, ""},
+		{"AttrCalling", Const, 0, ""},
+		{"AttrCommonRef", Const, 0, ""},
+		{"AttrCompDir", Const, 0, ""},
+		{"AttrConstExpr", Const, 14, ""},
+		{"AttrConstValue", Const, 0, ""},
+		{"AttrContainingType", Const, 0, ""},
+		{"AttrCount", Const, 0, ""},
+		{"AttrDataBitOffset", Const, 14, ""},
+		{"AttrDataLocation", Const, 0, ""},
+		{"AttrDataMemberLoc", Const, 0, ""},
+		{"AttrDecimalScale", Const, 14, ""},
+		{"AttrDecimalSign", Const, 14, ""},
+		{"AttrDeclColumn", Const, 0, ""},
+		{"AttrDeclFile", Const, 0, ""},
+		{"AttrDeclLine", Const, 0, ""},
+		{"AttrDeclaration", Const, 0, ""},
+		{"AttrDefaultValue", Const, 0, ""},
+		{"AttrDefaulted", Const, 14, ""},
+		{"AttrDeleted", Const, 14, ""},
+		{"AttrDescription", Const, 0, ""},
+		{"AttrDigitCount", Const, 14, ""},
+		{"AttrDiscr", Const, 0, ""},
+		{"AttrDiscrList", Const, 0, ""},
+		{"AttrDiscrValue", Const, 0, ""},
+		{"AttrDwoName", Const, 14, ""},
+		{"AttrElemental", Const, 14, ""},
+		{"AttrEncoding", Const, 0, ""},
+		{"AttrEndianity", Const, 14, ""},
+		{"AttrEntrypc", Const, 0, ""},
+		{"AttrEnumClass", Const, 14, ""},
+		{"AttrExplicit", Const, 14, ""},
+		{"AttrExportSymbols", Const, 14, ""},
+		{"AttrExtension", Const, 0, ""},
+		{"AttrExternal", Const, 0, ""},
+		{"AttrFrameBase", Const, 0, ""},
+		{"AttrFriend", Const, 0, ""},
+		{"AttrHighpc", Const, 0, ""},
+		{"AttrIdentifierCase", Const, 0, ""},
+		{"AttrImport", Const, 0, ""},
+		{"AttrInline", Const, 0, ""},
+		{"AttrIsOptional", Const, 0, ""},
+		{"AttrLanguage", Const, 0, ""},
+		{"AttrLinkageName", Const, 14, ""},
+		{"AttrLocation", Const, 0, ""},
+		{"AttrLoclistsBase", Const, 14, ""},
+		{"AttrLowerBound", Const, 0, ""},
+		{"AttrLowpc", Const, 0, ""},
+		{"AttrMacroInfo", Const, 0, ""},
+		{"AttrMacros", Const, 14, ""},
+		{"AttrMainSubprogram", Const, 14, ""},
+		{"AttrMutable", Const, 14, ""},
+		{"AttrName", Const, 0, ""},
+		{"AttrNamelistItem", Const, 0, ""},
+		{"AttrNoreturn", Const, 14, ""},
+		{"AttrObjectPointer", Const, 14, ""},
+		{"AttrOrdering", Const, 0, ""},
+		{"AttrPictureString", Const, 14, ""},
+		{"AttrPriority", Const, 0, ""},
+		{"AttrProducer", Const, 0, ""},
+		{"AttrPrototyped", Const, 0, ""},
+		{"AttrPure", Const, 14, ""},
+		{"AttrRanges", Const, 0, ""},
+		{"AttrRank", Const, 14, ""},
+		{"AttrRecursive", Const, 14, ""},
+		{"AttrReference", Const, 14, ""},
+		{"AttrReturnAddr", Const, 0, ""},
+		{"AttrRnglistsBase", Const, 14, ""},
+		{"AttrRvalueReference", Const, 14, ""},
+		{"AttrSegment", Const, 0, ""},
+		{"AttrSibling", Const, 0, ""},
+		{"AttrSignature", Const, 14, ""},
+		{"AttrSmall", Const, 14, ""},
+		{"AttrSpecification", Const, 0, ""},
+		{"AttrStartScope", Const, 0, ""},
+		{"AttrStaticLink", Const, 0, ""},
+		{"AttrStmtList", Const, 0, ""},
+		{"AttrStrOffsetsBase", Const, 14, ""},
+		{"AttrStride", Const, 0, ""},
+		{"AttrStrideSize", Const, 0, ""},
+		{"AttrStringLength", Const, 0, ""},
+		{"AttrStringLengthBitSize", Const, 14, ""},
+		{"AttrStringLengthByteSize", Const, 14, ""},
+		{"AttrThreadsScaled", Const, 14, ""},
+		{"AttrTrampoline", Const, 0, ""},
+		{"AttrType", Const, 0, ""},
+		{"AttrUpperBound", Const, 0, ""},
+		{"AttrUseLocation", Const, 0, ""},
+		{"AttrUseUTF8", Const, 0, ""},
+		{"AttrVarParam", Const, 0, ""},
+		{"AttrVirtuality", Const, 0, ""},
+		{"AttrVisibility", Const, 0, ""},
+		{"AttrVtableElemLoc", Const, 0, ""},
+		{"BasicType", Type, 0, ""},
+		{"BasicType.BitOffset", Field, 0, ""},
+		{"BasicType.BitSize", Field, 0, ""},
+		{"BasicType.CommonType", Field, 0, ""},
+		{"BasicType.DataBitOffset", Field, 18, ""},
+		{"BoolType", Type, 0, ""},
+		{"BoolType.BasicType", Field, 0, ""},
+		{"CharType", Type, 0, ""},
+		{"CharType.BasicType", Field, 0, ""},
+		{"Class", Type, 5, ""},
+		{"ClassAddrPtr", Const, 14, ""},
+		{"ClassAddress", Const, 5, ""},
+		{"ClassBlock", Const, 5, ""},
+		{"ClassConstant", Const, 5, ""},
+		{"ClassExprLoc", Const, 5, ""},
+		{"ClassFlag", Const, 5, ""},
+		{"ClassLinePtr", Const, 5, ""},
+		{"ClassLocList", Const, 14, ""},
+		{"ClassLocListPtr", Const, 5, ""},
+		{"ClassMacPtr", Const, 5, ""},
+		{"ClassRangeListPtr", Const, 5, ""},
+		{"ClassReference", Const, 5, ""},
+		{"ClassReferenceAlt", Const, 5, ""},
+		{"ClassReferenceSig", Const, 5, ""},
+		{"ClassRngList", Const, 14, ""},
+		{"ClassRngListsPtr", Const, 14, ""},
+		{"ClassStrOffsetsPtr", Const, 14, ""},
+		{"ClassString", Const, 5, ""},
+		{"ClassStringAlt", Const, 5, ""},
+		{"ClassUnknown", Const, 6, ""},
+		{"CommonType", Type, 0, ""},
+		{"CommonType.ByteSize", Field, 0, ""},
+		{"CommonType.Name", Field, 0, ""},
+		{"ComplexType", Type, 0, ""},
+		{"ComplexType.BasicType", Field, 0, ""},
+		{"Data", Type, 0, ""},
+		{"DecodeError", Type, 0, ""},
+		{"DecodeError.Err", Field, 0, ""},
+		{"DecodeError.Name", Field, 0, ""},
+		{"DecodeError.Offset", Field, 0, ""},
+		{"DotDotDotType", Type, 0, ""},
+		{"DotDotDotType.CommonType", Field, 0, ""},
+		{"Entry", Type, 0, ""},
+		{"Entry.Children", Field, 0, ""},
+		{"Entry.Field", Field, 0, ""},
+		{"Entry.Offset", Field, 0, ""},
+		{"Entry.Tag", Field, 0, ""},
+		{"EnumType", Type, 0, ""},
+		{"EnumType.CommonType", Field, 0, ""},
+		{"EnumType.EnumName", Field, 0, ""},
+		{"EnumType.Val", Field, 0, ""},
+		{"EnumValue", Type, 0, ""},
+		{"EnumValue.Name", Field, 0, ""},
+		{"EnumValue.Val", Field, 0, ""},
+		{"ErrUnknownPC", Var, 5, ""},
+		{"Field", Type, 0, ""},
+		{"Field.Attr", Field, 0, ""},
+		{"Field.Class", Field, 5, ""},
+		{"Field.Val", Field, 0, ""},
+		{"FloatType", Type, 0, ""},
+		{"FloatType.BasicType", Field, 0, ""},
+		{"FuncType", Type, 0, ""},
+		{"FuncType.CommonType", Field, 0, ""},
+		{"FuncType.ParamType", Field, 0, ""},
+		{"FuncType.ReturnType", Field, 0, ""},
+		{"IntType", Type, 0, ""},
+		{"IntType.BasicType", Field, 0, ""},
+		{"LineEntry", Type, 5, ""},
+		{"LineEntry.Address", Field, 5, ""},
+		{"LineEntry.BasicBlock", Field, 5, ""},
+		{"LineEntry.Column", Field, 5, ""},
+		{"LineEntry.Discriminator", Field, 5, ""},
+		{"LineEntry.EndSequence", Field, 5, ""},
+		{"LineEntry.EpilogueBegin", Field, 5, ""},
+		{"LineEntry.File", Field, 5, ""},
+		{"LineEntry.ISA", Field, 5, ""},
+		{"LineEntry.IsStmt", Field, 5, ""},
+		{"LineEntry.Line", Field, 5, ""},
+		{"LineEntry.OpIndex", Field, 5, ""},
+		{"LineEntry.PrologueEnd", Field, 5, ""},
+		{"LineFile", Type, 5, ""},
+		{"LineFile.Length", Field, 5, ""},
+		{"LineFile.Mtime", Field, 5, ""},
+		{"LineFile.Name", Field, 5, ""},
+		{"LineReader", Type, 5, ""},
+		{"LineReaderPos", Type, 5, ""},
+		{"New", Func, 0, "func(abbrev []byte, aranges []byte, frame []byte, info []byte, line []byte, pubnames []byte, ranges []byte, str []byte) (*Data, error)"},
+		{"Offset", Type, 0, ""},
+		{"PtrType", Type, 0, ""},
+		{"PtrType.CommonType", Field, 0, ""},
+		{"PtrType.Type", Field, 0, ""},
+		{"QualType", Type, 0, ""},
+		{"QualType.CommonType", Field, 0, ""},
+		{"QualType.Qual", Field, 0, ""},
+		{"QualType.Type", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"StructField", Type, 0, ""},
+		{"StructField.BitOffset", Field, 0, ""},
+		{"StructField.BitSize", Field, 0, ""},
+		{"StructField.ByteOffset", Field, 0, ""},
+		{"StructField.ByteSize", Field, 0, ""},
+		{"StructField.DataBitOffset", Field, 18, ""},
+		{"StructField.Name", Field, 0, ""},
+		{"StructField.Type", Field, 0, ""},
+		{"StructType", Type, 0, ""},
+		{"StructType.CommonType", Field, 0, ""},
+		{"StructType.Field", Field, 0, ""},
+		{"StructType.Incomplete", Field, 0, ""},
+		{"StructType.Kind", Field, 0, ""},
+		{"StructType.StructName", Field, 0, ""},
+		{"Tag", Type, 0, ""},
+		{"TagAccessDeclaration", Const, 0, ""},
+		{"TagArrayType", Const, 0, ""},
+		{"TagAtomicType", Const, 14, ""},
+		{"TagBaseType", Const, 0, ""},
+		{"TagCallSite", Const, 14, ""},
+		{"TagCallSiteParameter", Const, 14, ""},
+		{"TagCatchDwarfBlock", Const, 0, ""},
+		{"TagClassType", Const, 0, ""},
+		{"TagCoarrayType", Const, 14, ""},
+		{"TagCommonDwarfBlock", Const, 0, ""},
+		{"TagCommonInclusion", Const, 0, ""},
+		{"TagCompileUnit", Const, 0, ""},
+		{"TagCondition", Const, 3, ""},
+		{"TagConstType", Const, 0, ""},
+		{"TagConstant", Const, 0, ""},
+		{"TagDwarfProcedure", Const, 0, ""},
+		{"TagDynamicType", Const, 14, ""},
+		{"TagEntryPoint", Const, 0, ""},
+		{"TagEnumerationType", Const, 0, ""},
+		{"TagEnumerator", Const, 0, ""},
+		{"TagFileType", Const, 0, ""},
+		{"TagFormalParameter", Const, 0, ""},
+		{"TagFriend", Const, 0, ""},
+		{"TagGenericSubrange", Const, 14, ""},
+		{"TagImmutableType", Const, 14, ""},
+		{"TagImportedDeclaration", Const, 0, ""},
+		{"TagImportedModule", Const, 0, ""},
+		{"TagImportedUnit", Const, 0, ""},
+		{"TagInheritance", Const, 0, ""},
+		{"TagInlinedSubroutine", Const, 0, ""},
+		{"TagInterfaceType", Const, 0, ""},
+		{"TagLabel", Const, 0, ""},
+		{"TagLexDwarfBlock", Const, 0, ""},
+		{"TagMember", Const, 0, ""},
+		{"TagModule", Const, 0, ""},
+		{"TagMutableType", Const, 0, ""},
+		{"TagNamelist", Const, 0, ""},
+		{"TagNamelistItem", Const, 0, ""},
+		{"TagNamespace", Const, 0, ""},
+		{"TagPackedType", Const, 0, ""},
+		{"TagPartialUnit", Const, 0, ""},
+		{"TagPointerType", Const, 0, ""},
+		{"TagPtrToMemberType", Const, 0, ""},
+		{"TagReferenceType", Const, 0, ""},
+		{"TagRestrictType", Const, 0, ""},
+		{"TagRvalueReferenceType", Const, 3, ""},
+		{"TagSetType", Const, 0, ""},
+		{"TagSharedType", Const, 3, ""},
+		{"TagSkeletonUnit", Const, 14, ""},
+		{"TagStringType", Const, 0, ""},
+		{"TagStructType", Const, 0, ""},
+		{"TagSubprogram", Const, 0, ""},
+		{"TagSubrangeType", Const, 0, ""},
+		{"TagSubroutineType", Const, 0, ""},
+		{"TagTemplateAlias", Const, 3, ""},
+		{"TagTemplateTypeParameter", Const, 0, ""},
+		{"TagTemplateValueParameter", Const, 0, ""},
+		{"TagThrownType", Const, 0, ""},
+		{"TagTryDwarfBlock", Const, 0, ""},
+		{"TagTypeUnit", Const, 3, ""},
+		{"TagTypedef", Const, 0, ""},
+		{"TagUnionType", Const, 0, ""},
+		{"TagUnspecifiedParameters", Const, 0, ""},
+		{"TagUnspecifiedType", Const, 0, ""},
+		{"TagVariable", Const, 0, ""},
+		{"TagVariant", Const, 0, ""},
+		{"TagVariantPart", Const, 0, ""},
+		{"TagVolatileType", Const, 0, ""},
+		{"TagWithStmt", Const, 0, ""},
+		{"Type", Type, 0, ""},
+		{"TypedefType", Type, 0, ""},
+		{"TypedefType.CommonType", Field, 0, ""},
+		{"TypedefType.Type", Field, 0, ""},
+		{"UcharType", Type, 0, ""},
+		{"UcharType.BasicType", Field, 0, ""},
+		{"UintType", Type, 0, ""},
+		{"UintType.BasicType", Field, 0, ""},
+		{"UnspecifiedType", Type, 4, ""},
+		{"UnspecifiedType.BasicType", Field, 4, ""},
+		{"UnsupportedType", Type, 13, ""},
+		{"UnsupportedType.CommonType", Field, 13, ""},
+		{"UnsupportedType.Tag", Field, 13, ""},
+		{"VoidType", Type, 0, ""},
+		{"VoidType.CommonType", Field, 0, ""},
 	},
 	"debug/elf": {
-		{"(*File).Close", Method, 0},
-		{"(*File).DWARF", Method, 0},
-		{"(*File).DynString", Method, 1},
-		{"(*File).DynValue", Method, 21},
-		{"(*File).DynamicSymbols", Method, 4},
-		{"(*File).DynamicVersionNeeds", Method, 24},
-		{"(*File).DynamicVersions", Method, 24},
-		{"(*File).ImportedLibraries", Method, 0},
-		{"(*File).ImportedSymbols", Method, 0},
-		{"(*File).Section", Method, 0},
-		{"(*File).SectionByType", Method, 0},
-		{"(*File).Symbols", Method, 0},
-		{"(*FormatError).Error", Method, 0},
-		{"(*Prog).Open", Method, 0},
-		{"(*Section).Data", Method, 0},
-		{"(*Section).Open", Method, 0},
-		{"(Class).GoString", Method, 0},
-		{"(Class).String", Method, 0},
-		{"(CompressionType).GoString", Method, 6},
-		{"(CompressionType).String", Method, 6},
-		{"(Data).GoString", Method, 0},
-		{"(Data).String", Method, 0},
-		{"(DynFlag).GoString", Method, 0},
-		{"(DynFlag).String", Method, 0},
-		{"(DynFlag1).GoString", Method, 21},
-		{"(DynFlag1).String", Method, 21},
-		{"(DynTag).GoString", Method, 0},
-		{"(DynTag).String", Method, 0},
-		{"(Machine).GoString", Method, 0},
-		{"(Machine).String", Method, 0},
-		{"(NType).GoString", Method, 0},
-		{"(NType).String", Method, 0},
-		{"(OSABI).GoString", Method, 0},
-		{"(OSABI).String", Method, 0},
-		{"(Prog).ReadAt", Method, 0},
-		{"(ProgFlag).GoString", Method, 0},
-		{"(ProgFlag).String", Method, 0},
-		{"(ProgType).GoString", Method, 0},
-		{"(ProgType).String", Method, 0},
-		{"(R_386).GoString", Method, 0},
-		{"(R_386).String", Method, 0},
-		{"(R_390).GoString", Method, 7},
-		{"(R_390).String", Method, 7},
-		{"(R_AARCH64).GoString", Method, 4},
-		{"(R_AARCH64).String", Method, 4},
-		{"(R_ALPHA).GoString", Method, 0},
-		{"(R_ALPHA).String", Method, 0},
-		{"(R_ARM).GoString", Method, 0},
-		{"(R_ARM).String", Method, 0},
-		{"(R_LARCH).GoString", Method, 19},
-		{"(R_LARCH).String", Method, 19},
-		{"(R_MIPS).GoString", Method, 6},
-		{"(R_MIPS).String", Method, 6},
-		{"(R_PPC).GoString", Method, 0},
-		{"(R_PPC).String", Method, 0},
-		{"(R_PPC64).GoString", Method, 5},
-		{"(R_PPC64).String", Method, 5},
-		{"(R_RISCV).GoString", Method, 11},
-		{"(R_RISCV).String", Method, 11},
-		{"(R_SPARC).GoString", Method, 0},
-		{"(R_SPARC).String", Method, 0},
-		{"(R_X86_64).GoString", Method, 0},
-		{"(R_X86_64).String", Method, 0},
-		{"(Section).ReadAt", Method, 0},
-		{"(SectionFlag).GoString", Method, 0},
-		{"(SectionFlag).String", Method, 0},
-		{"(SectionIndex).GoString", Method, 0},
-		{"(SectionIndex).String", Method, 0},
-		{"(SectionType).GoString", Method, 0},
-		{"(SectionType).String", Method, 0},
-		{"(SymBind).GoString", Method, 0},
-		{"(SymBind).String", Method, 0},
-		{"(SymType).GoString", Method, 0},
-		{"(SymType).String", Method, 0},
-		{"(SymVis).GoString", Method, 0},
-		{"(SymVis).String", Method, 0},
-		{"(Type).GoString", Method, 0},
-		{"(Type).String", Method, 0},
-		{"(Version).GoString", Method, 0},
-		{"(Version).String", Method, 0},
-		{"(VersionIndex).Index", Method, 24},
-		{"(VersionIndex).IsHidden", Method, 24},
-		{"ARM_MAGIC_TRAMP_NUMBER", Const, 0},
-		{"COMPRESS_HIOS", Const, 6},
-		{"COMPRESS_HIPROC", Const, 6},
-		{"COMPRESS_LOOS", Const, 6},
-		{"COMPRESS_LOPROC", Const, 6},
-		{"COMPRESS_ZLIB", Const, 6},
-		{"COMPRESS_ZSTD", Const, 21},
-		{"Chdr32", Type, 6},
-		{"Chdr32.Addralign", Field, 6},
-		{"Chdr32.Size", Field, 6},
-		{"Chdr32.Type", Field, 6},
-		{"Chdr64", Type, 6},
-		{"Chdr64.Addralign", Field, 6},
-		{"Chdr64.Size", Field, 6},
-		{"Chdr64.Type", Field, 6},
-		{"Class", Type, 0},
-		{"CompressionType", Type, 6},
-		{"DF_1_CONFALT", Const, 21},
-		{"DF_1_DIRECT", Const, 21},
-		{"DF_1_DISPRELDNE", Const, 21},
-		{"DF_1_DISPRELPND", Const, 21},
-		{"DF_1_EDITED", Const, 21},
-		{"DF_1_ENDFILTEE", Const, 21},
-		{"DF_1_GLOBAL", Const, 21},
-		{"DF_1_GLOBAUDIT", Const, 21},
-		{"DF_1_GROUP", Const, 21},
-		{"DF_1_IGNMULDEF", Const, 21},
-		{"DF_1_INITFIRST", Const, 21},
-		{"DF_1_INTERPOSE", Const, 21},
-		{"DF_1_KMOD", Const, 21},
-		{"DF_1_LOADFLTR", Const, 21},
-		{"DF_1_NOCOMMON", Const, 21},
-		{"DF_1_NODEFLIB", Const, 21},
-		{"DF_1_NODELETE", Const, 21},
-		{"DF_1_NODIRECT", Const, 21},
-		{"DF_1_NODUMP", Const, 21},
-		{"DF_1_NOHDR", Const, 21},
-		{"DF_1_NOKSYMS", Const, 21},
-		{"DF_1_NOOPEN", Const, 21},
-		{"DF_1_NORELOC", Const, 21},
-		{"DF_1_NOW", Const, 21},
-		{"DF_1_ORIGIN", Const, 21},
-		{"DF_1_PIE", Const, 21},
-		{"DF_1_SINGLETON", Const, 21},
-		{"DF_1_STUB", Const, 21},
-		{"DF_1_SYMINTPOSE", Const, 21},
-		{"DF_1_TRANS", Const, 21},
-		{"DF_1_WEAKFILTER", Const, 21},
-		{"DF_BIND_NOW", Const, 0},
-		{"DF_ORIGIN", Const, 0},
-		{"DF_STATIC_TLS", Const, 0},
-		{"DF_SYMBOLIC", Const, 0},
-		{"DF_TEXTREL", Const, 0},
-		{"DT_ADDRRNGHI", Const, 16},
-		{"DT_ADDRRNGLO", Const, 16},
-		{"DT_AUDIT", Const, 16},
-		{"DT_AUXILIARY", Const, 16},
-		{"DT_BIND_NOW", Const, 0},
-		{"DT_CHECKSUM", Const, 16},
-		{"DT_CONFIG", Const, 16},
-		{"DT_DEBUG", Const, 0},
-		{"DT_DEPAUDIT", Const, 16},
-		{"DT_ENCODING", Const, 0},
-		{"DT_FEATURE", Const, 16},
-		{"DT_FILTER", Const, 16},
-		{"DT_FINI", Const, 0},
-		{"DT_FINI_ARRAY", Const, 0},
-		{"DT_FINI_ARRAYSZ", Const, 0},
-		{"DT_FLAGS", Const, 0},
-		{"DT_FLAGS_1", Const, 16},
-		{"DT_GNU_CONFLICT", Const, 16},
-		{"DT_GNU_CONFLICTSZ", Const, 16},
-		{"DT_GNU_HASH", Const, 16},
-		{"DT_GNU_LIBLIST", Const, 16},
-		{"DT_GNU_LIBLISTSZ", Const, 16},
-		{"DT_GNU_PRELINKED", Const, 16},
-		{"DT_HASH", Const, 0},
-		{"DT_HIOS", Const, 0},
-		{"DT_HIPROC", Const, 0},
-		{"DT_INIT", Const, 0},
-		{"DT_INIT_ARRAY", Const, 0},
-		{"DT_INIT_ARRAYSZ", Const, 0},
-		{"DT_JMPREL", Const, 0},
-		{"DT_LOOS", Const, 0},
-		{"DT_LOPROC", Const, 0},
-		{"DT_MIPS_AUX_DYNAMIC", Const, 16},
-		{"DT_MIPS_BASE_ADDRESS", Const, 16},
-		{"DT_MIPS_COMPACT_SIZE", Const, 16},
-		{"DT_MIPS_CONFLICT", Const, 16},
-		{"DT_MIPS_CONFLICTNO", Const, 16},
-		{"DT_MIPS_CXX_FLAGS", Const, 16},
-		{"DT_MIPS_DELTA_CLASS", Const, 16},
-		{"DT_MIPS_DELTA_CLASSSYM", Const, 16},
-		{"DT_MIPS_DELTA_CLASSSYM_NO", Const, 16},
-		{"DT_MIPS_DELTA_CLASS_NO", Const, 16},
-		{"DT_MIPS_DELTA_INSTANCE", Const, 16},
-		{"DT_MIPS_DELTA_INSTANCE_NO", Const, 16},
-		{"DT_MIPS_DELTA_RELOC", Const, 16},
-		{"DT_MIPS_DELTA_RELOC_NO", Const, 16},
-		{"DT_MIPS_DELTA_SYM", Const, 16},
-		{"DT_MIPS_DELTA_SYM_NO", Const, 16},
-		{"DT_MIPS_DYNSTR_ALIGN", Const, 16},
-		{"DT_MIPS_FLAGS", Const, 16},
-		{"DT_MIPS_GOTSYM", Const, 16},
-		{"DT_MIPS_GP_VALUE", Const, 16},
-		{"DT_MIPS_HIDDEN_GOTIDX", Const, 16},
-		{"DT_MIPS_HIPAGENO", Const, 16},
-		{"DT_MIPS_ICHECKSUM", Const, 16},
-		{"DT_MIPS_INTERFACE", Const, 16},
-		{"DT_MIPS_INTERFACE_SIZE", Const, 16},
-		{"DT_MIPS_IVERSION", Const, 16},
-		{"DT_MIPS_LIBLIST", Const, 16},
-		{"DT_MIPS_LIBLISTNO", Const, 16},
-		{"DT_MIPS_LOCALPAGE_GOTIDX", Const, 16},
-		{"DT_MIPS_LOCAL_GOTIDX", Const, 16},
-		{"DT_MIPS_LOCAL_GOTNO", Const, 16},
-		{"DT_MIPS_MSYM", Const, 16},
-		{"DT_MIPS_OPTIONS", Const, 16},
-		{"DT_MIPS_PERF_SUFFIX", Const, 16},
-		{"DT_MIPS_PIXIE_INIT", Const, 16},
-		{"DT_MIPS_PLTGOT", Const, 16},
-		{"DT_MIPS_PROTECTED_GOTIDX", Const, 16},
-		{"DT_MIPS_RLD_MAP", Const, 16},
-		{"DT_MIPS_RLD_MAP_REL", Const, 16},
-		{"DT_MIPS_RLD_TEXT_RESOLVE_ADDR", Const, 16},
-		{"DT_MIPS_RLD_VERSION", Const, 16},
-		{"DT_MIPS_RWPLT", Const, 16},
-		{"DT_MIPS_SYMBOL_LIB", Const, 16},
-		{"DT_MIPS_SYMTABNO", Const, 16},
-		{"DT_MIPS_TIME_STAMP", Const, 16},
-		{"DT_MIPS_UNREFEXTNO", Const, 16},
-		{"DT_MOVEENT", Const, 16},
-		{"DT_MOVESZ", Const, 16},
-		{"DT_MOVETAB", Const, 16},
-		{"DT_NEEDED", Const, 0},
-		{"DT_NULL", Const, 0},
-		{"DT_PLTGOT", Const, 0},
-		{"DT_PLTPAD", Const, 16},
-		{"DT_PLTPADSZ", Const, 16},
-		{"DT_PLTREL", Const, 0},
-		{"DT_PLTRELSZ", Const, 0},
-		{"DT_POSFLAG_1", Const, 16},
-		{"DT_PPC64_GLINK", Const, 16},
-		{"DT_PPC64_OPD", Const, 16},
-		{"DT_PPC64_OPDSZ", Const, 16},
-		{"DT_PPC64_OPT", Const, 16},
-		{"DT_PPC_GOT", Const, 16},
-		{"DT_PPC_OPT", Const, 16},
-		{"DT_PREINIT_ARRAY", Const, 0},
-		{"DT_PREINIT_ARRAYSZ", Const, 0},
-		{"DT_REL", Const, 0},
-		{"DT_RELA", Const, 0},
-		{"DT_RELACOUNT", Const, 16},
-		{"DT_RELAENT", Const, 0},
-		{"DT_RELASZ", Const, 0},
-		{"DT_RELCOUNT", Const, 16},
-		{"DT_RELENT", Const, 0},
-		{"DT_RELSZ", Const, 0},
-		{"DT_RPATH", Const, 0},
-		{"DT_RUNPATH", Const, 0},
-		{"DT_SONAME", Const, 0},
-		{"DT_SPARC_REGISTER", Const, 16},
-		{"DT_STRSZ", Const, 0},
-		{"DT_STRTAB", Const, 0},
-		{"DT_SYMBOLIC", Const, 0},
-		{"DT_SYMENT", Const, 0},
-		{"DT_SYMINENT", Const, 16},
-		{"DT_SYMINFO", Const, 16},
-		{"DT_SYMINSZ", Const, 16},
-		{"DT_SYMTAB", Const, 0},
-		{"DT_SYMTAB_SHNDX", Const, 16},
-		{"DT_TEXTREL", Const, 0},
-		{"DT_TLSDESC_GOT", Const, 16},
-		{"DT_TLSDESC_PLT", Const, 16},
-		{"DT_USED", Const, 16},
-		{"DT_VALRNGHI", Const, 16},
-		{"DT_VALRNGLO", Const, 16},
-		{"DT_VERDEF", Const, 16},
-		{"DT_VERDEFNUM", Const, 16},
-		{"DT_VERNEED", Const, 0},
-		{"DT_VERNEEDNUM", Const, 0},
-		{"DT_VERSYM", Const, 0},
-		{"Data", Type, 0},
-		{"Dyn32", Type, 0},
-		{"Dyn32.Tag", Field, 0},
-		{"Dyn32.Val", Field, 0},
-		{"Dyn64", Type, 0},
-		{"Dyn64.Tag", Field, 0},
-		{"Dyn64.Val", Field, 0},
-		{"DynFlag", Type, 0},
-		{"DynFlag1", Type, 21},
-		{"DynTag", Type, 0},
-		{"DynamicVersion", Type, 24},
-		{"DynamicVersion.Deps", Field, 24},
-		{"DynamicVersion.Flags", Field, 24},
-		{"DynamicVersion.Index", Field, 24},
-		{"DynamicVersion.Name", Field, 24},
-		{"DynamicVersionDep", Type, 24},
-		{"DynamicVersionDep.Dep", Field, 24},
-		{"DynamicVersionDep.Flags", Field, 24},
-		{"DynamicVersionDep.Index", Field, 24},
-		{"DynamicVersionFlag", Type, 24},
-		{"DynamicVersionNeed", Type, 24},
-		{"DynamicVersionNeed.Name", Field, 24},
-		{"DynamicVersionNeed.Needs", Field, 24},
-		{"EI_ABIVERSION", Const, 0},
-		{"EI_CLASS", Const, 0},
-		{"EI_DATA", Const, 0},
-		{"EI_NIDENT", Const, 0},
-		{"EI_OSABI", Const, 0},
-		{"EI_PAD", Const, 0},
-		{"EI_VERSION", Const, 0},
-		{"ELFCLASS32", Const, 0},
-		{"ELFCLASS64", Const, 0},
-		{"ELFCLASSNONE", Const, 0},
-		{"ELFDATA2LSB", Const, 0},
-		{"ELFDATA2MSB", Const, 0},
-		{"ELFDATANONE", Const, 0},
-		{"ELFMAG", Const, 0},
-		{"ELFOSABI_86OPEN", Const, 0},
-		{"ELFOSABI_AIX", Const, 0},
-		{"ELFOSABI_ARM", Const, 0},
-		{"ELFOSABI_AROS", Const, 11},
-		{"ELFOSABI_CLOUDABI", Const, 11},
-		{"ELFOSABI_FENIXOS", Const, 11},
-		{"ELFOSABI_FREEBSD", Const, 0},
-		{"ELFOSABI_HPUX", Const, 0},
-		{"ELFOSABI_HURD", Const, 0},
-		{"ELFOSABI_IRIX", Const, 0},
-		{"ELFOSABI_LINUX", Const, 0},
-		{"ELFOSABI_MODESTO", Const, 0},
-		{"ELFOSABI_NETBSD", Const, 0},
-		{"ELFOSABI_NONE", Const, 0},
-		{"ELFOSABI_NSK", Const, 0},
-		{"ELFOSABI_OPENBSD", Const, 0},
-		{"ELFOSABI_OPENVMS", Const, 0},
-		{"ELFOSABI_SOLARIS", Const, 0},
-		{"ELFOSABI_STANDALONE", Const, 0},
-		{"ELFOSABI_TRU64", Const, 0},
-		{"EM_386", Const, 0},
-		{"EM_486", Const, 0},
-		{"EM_56800EX", Const, 11},
-		{"EM_68HC05", Const, 11},
-		{"EM_68HC08", Const, 11},
-		{"EM_68HC11", Const, 11},
-		{"EM_68HC12", Const, 0},
-		{"EM_68HC16", Const, 11},
-		{"EM_68K", Const, 0},
-		{"EM_78KOR", Const, 11},
-		{"EM_8051", Const, 11},
-		{"EM_860", Const, 0},
-		{"EM_88K", Const, 0},
-		{"EM_960", Const, 0},
-		{"EM_AARCH64", Const, 4},
-		{"EM_ALPHA", Const, 0},
-		{"EM_ALPHA_STD", Const, 0},
-		{"EM_ALTERA_NIOS2", Const, 11},
-		{"EM_AMDGPU", Const, 11},
-		{"EM_ARC", Const, 0},
-		{"EM_ARCA", Const, 11},
-		{"EM_ARC_COMPACT", Const, 11},
-		{"EM_ARC_COMPACT2", Const, 11},
-		{"EM_ARM", Const, 0},
-		{"EM_AVR", Const, 11},
-		{"EM_AVR32", Const, 11},
-		{"EM_BA1", Const, 11},
-		{"EM_BA2", Const, 11},
-		{"EM_BLACKFIN", Const, 11},
-		{"EM_BPF", Const, 11},
-		{"EM_C166", Const, 11},
-		{"EM_CDP", Const, 11},
-		{"EM_CE", Const, 11},
-		{"EM_CLOUDSHIELD", Const, 11},
-		{"EM_COGE", Const, 11},
-		{"EM_COLDFIRE", Const, 0},
-		{"EM_COOL", Const, 11},
-		{"EM_COREA_1ST", Const, 11},
-		{"EM_COREA_2ND", Const, 11},
-		{"EM_CR", Const, 11},
-		{"EM_CR16", Const, 11},
-		{"EM_CRAYNV2", Const, 11},
-		{"EM_CRIS", Const, 11},
-		{"EM_CRX", Const, 11},
-		{"EM_CSR_KALIMBA", Const, 11},
-		{"EM_CUDA", Const, 11},
-		{"EM_CYPRESS_M8C", Const, 11},
-		{"EM_D10V", Const, 11},
-		{"EM_D30V", Const, 11},
-		{"EM_DSP24", Const, 11},
-		{"EM_DSPIC30F", Const, 11},
-		{"EM_DXP", Const, 11},
-		{"EM_ECOG1", Const, 11},
-		{"EM_ECOG16", Const, 11},
-		{"EM_ECOG1X", Const, 11},
-		{"EM_ECOG2", Const, 11},
-		{"EM_ETPU", Const, 11},
-		{"EM_EXCESS", Const, 11},
-		{"EM_F2MC16", Const, 11},
-		{"EM_FIREPATH", Const, 11},
-		{"EM_FR20", Const, 0},
-		{"EM_FR30", Const, 11},
-		{"EM_FT32", Const, 11},
-		{"EM_FX66", Const, 11},
-		{"EM_H8S", Const, 0},
-		{"EM_H8_300", Const, 0},
-		{"EM_H8_300H", Const, 0},
-		{"EM_H8_500", Const, 0},
-		{"EM_HUANY", Const, 11},
-		{"EM_IA_64", Const, 0},
-		{"EM_INTEL205", Const, 11},
-		{"EM_INTEL206", Const, 11},
-		{"EM_INTEL207", Const, 11},
-		{"EM_INTEL208", Const, 11},
-		{"EM_INTEL209", Const, 11},
-		{"EM_IP2K", Const, 11},
-		{"EM_JAVELIN", Const, 11},
-		{"EM_K10M", Const, 11},
-		{"EM_KM32", Const, 11},
-		{"EM_KMX16", Const, 11},
-		{"EM_KMX32", Const, 11},
-		{"EM_KMX8", Const, 11},
-		{"EM_KVARC", Const, 11},
-		{"EM_L10M", Const, 11},
-		{"EM_LANAI", Const, 11},
-		{"EM_LATTICEMICO32", Const, 11},
-		{"EM_LOONGARCH", Const, 19},
-		{"EM_M16C", Const, 11},
-		{"EM_M32", Const, 0},
-		{"EM_M32C", Const, 11},
-		{"EM_M32R", Const, 11},
-		{"EM_MANIK", Const, 11},
-		{"EM_MAX", Const, 11},
-		{"EM_MAXQ30", Const, 11},
-		{"EM_MCHP_PIC", Const, 11},
-		{"EM_MCST_ELBRUS", Const, 11},
-		{"EM_ME16", Const, 0},
-		{"EM_METAG", Const, 11},
-		{"EM_MICROBLAZE", Const, 11},
-		{"EM_MIPS", Const, 0},
-		{"EM_MIPS_RS3_LE", Const, 0},
-		{"EM_MIPS_RS4_BE", Const, 0},
-		{"EM_MIPS_X", Const, 0},
-		{"EM_MMA", Const, 0},
-		{"EM_MMDSP_PLUS", Const, 11},
-		{"EM_MMIX", Const, 11},
-		{"EM_MN10200", Const, 11},
-		{"EM_MN10300", Const, 11},
-		{"EM_MOXIE", Const, 11},
-		{"EM_MSP430", Const, 11},
-		{"EM_NCPU", Const, 0},
-		{"EM_NDR1", Const, 0},
-		{"EM_NDS32", Const, 11},
-		{"EM_NONE", Const, 0},
-		{"EM_NORC", Const, 11},
-		{"EM_NS32K", Const, 11},
-		{"EM_OPEN8", Const, 11},
-		{"EM_OPENRISC", Const, 11},
-		{"EM_PARISC", Const, 0},
-		{"EM_PCP", Const, 0},
-		{"EM_PDP10", Const, 11},
-		{"EM_PDP11", Const, 11},
-		{"EM_PDSP", Const, 11},
-		{"EM_PJ", Const, 11},
-		{"EM_PPC", Const, 0},
-		{"EM_PPC64", Const, 0},
-		{"EM_PRISM", Const, 11},
-		{"EM_QDSP6", Const, 11},
-		{"EM_R32C", Const, 11},
-		{"EM_RCE", Const, 0},
-		{"EM_RH32", Const, 0},
-		{"EM_RISCV", Const, 11},
-		{"EM_RL78", Const, 11},
-		{"EM_RS08", Const, 11},
-		{"EM_RX", Const, 11},
-		{"EM_S370", Const, 0},
-		{"EM_S390", Const, 0},
-		{"EM_SCORE7", Const, 11},
-		{"EM_SEP", Const, 11},
-		{"EM_SE_C17", Const, 11},
-		{"EM_SE_C33", Const, 11},
-		{"EM_SH", Const, 0},
-		{"EM_SHARC", Const, 11},
-		{"EM_SLE9X", Const, 11},
-		{"EM_SNP1K", Const, 11},
-		{"EM_SPARC", Const, 0},
-		{"EM_SPARC32PLUS", Const, 0},
-		{"EM_SPARCV9", Const, 0},
-		{"EM_ST100", Const, 0},
-		{"EM_ST19", Const, 11},
-		{"EM_ST200", Const, 11},
-		{"EM_ST7", Const, 11},
-		{"EM_ST9PLUS", Const, 11},
-		{"EM_STARCORE", Const, 0},
-		{"EM_STM8", Const, 11},
-		{"EM_STXP7X", Const, 11},
-		{"EM_SVX", Const, 11},
-		{"EM_TILE64", Const, 11},
-		{"EM_TILEGX", Const, 11},
-		{"EM_TILEPRO", Const, 11},
-		{"EM_TINYJ", Const, 0},
-		{"EM_TI_ARP32", Const, 11},
-		{"EM_TI_C2000", Const, 11},
-		{"EM_TI_C5500", Const, 11},
-		{"EM_TI_C6000", Const, 11},
-		{"EM_TI_PRU", Const, 11},
-		{"EM_TMM_GPP", Const, 11},
-		{"EM_TPC", Const, 11},
-		{"EM_TRICORE", Const, 0},
-		{"EM_TRIMEDIA", Const, 11},
-		{"EM_TSK3000", Const, 11},
-		{"EM_UNICORE", Const, 11},
-		{"EM_V800", Const, 0},
-		{"EM_V850", Const, 11},
-		{"EM_VAX", Const, 11},
-		{"EM_VIDEOCORE", Const, 11},
-		{"EM_VIDEOCORE3", Const, 11},
-		{"EM_VIDEOCORE5", Const, 11},
-		{"EM_VISIUM", Const, 11},
-		{"EM_VPP500", Const, 0},
-		{"EM_X86_64", Const, 0},
-		{"EM_XCORE", Const, 11},
-		{"EM_XGATE", Const, 11},
-		{"EM_XIMO16", Const, 11},
-		{"EM_XTENSA", Const, 11},
-		{"EM_Z80", Const, 11},
-		{"EM_ZSP", Const, 11},
-		{"ET_CORE", Const, 0},
-		{"ET_DYN", Const, 0},
-		{"ET_EXEC", Const, 0},
-		{"ET_HIOS", Const, 0},
-		{"ET_HIPROC", Const, 0},
-		{"ET_LOOS", Const, 0},
-		{"ET_LOPROC", Const, 0},
-		{"ET_NONE", Const, 0},
-		{"ET_REL", Const, 0},
-		{"EV_CURRENT", Const, 0},
-		{"EV_NONE", Const, 0},
-		{"ErrNoSymbols", Var, 4},
-		{"File", Type, 0},
-		{"File.FileHeader", Field, 0},
-		{"File.Progs", Field, 0},
-		{"File.Sections", Field, 0},
-		{"FileHeader", Type, 0},
-		{"FileHeader.ABIVersion", Field, 0},
-		{"FileHeader.ByteOrder", Field, 0},
-		{"FileHeader.Class", Field, 0},
-		{"FileHeader.Data", Field, 0},
-		{"FileHeader.Entry", Field, 1},
-		{"FileHeader.Machine", Field, 0},
-		{"FileHeader.OSABI", Field, 0},
-		{"FileHeader.Type", Field, 0},
-		{"FileHeader.Version", Field, 0},
-		{"FormatError", Type, 0},
-		{"Header32", Type, 0},
-		{"Header32.Ehsize", Field, 0},
-		{"Header32.Entry", Field, 0},
-		{"Header32.Flags", Field, 0},
-		{"Header32.Ident", Field, 0},
-		{"Header32.Machine", Field, 0},
-		{"Header32.Phentsize", Field, 0},
-		{"Header32.Phnum", Field, 0},
-		{"Header32.Phoff", Field, 0},
-		{"Header32.Shentsize", Field, 0},
-		{"Header32.Shnum", Field, 0},
-		{"Header32.Shoff", Field, 0},
-		{"Header32.Shstrndx", Field, 0},
-		{"Header32.Type", Field, 0},
-		{"Header32.Version", Field, 0},
-		{"Header64", Type, 0},
-		{"Header64.Ehsize", Field, 0},
-		{"Header64.Entry", Field, 0},
-		{"Header64.Flags", Field, 0},
-		{"Header64.Ident", Field, 0},
-		{"Header64.Machine", Field, 0},
-		{"Header64.Phentsize", Field, 0},
-		{"Header64.Phnum", Field, 0},
-		{"Header64.Phoff", Field, 0},
-		{"Header64.Shentsize", Field, 0},
-		{"Header64.Shnum", Field, 0},
-		{"Header64.Shoff", Field, 0},
-		{"Header64.Shstrndx", Field, 0},
-		{"Header64.Type", Field, 0},
-		{"Header64.Version", Field, 0},
-		{"ImportedSymbol", Type, 0},
-		{"ImportedSymbol.Library", Field, 0},
-		{"ImportedSymbol.Name", Field, 0},
-		{"ImportedSymbol.Version", Field, 0},
-		{"Machine", Type, 0},
-		{"NT_FPREGSET", Const, 0},
-		{"NT_PRPSINFO", Const, 0},
-		{"NT_PRSTATUS", Const, 0},
-		{"NType", Type, 0},
-		{"NewFile", Func, 0},
-		{"OSABI", Type, 0},
-		{"Open", Func, 0},
-		{"PF_MASKOS", Const, 0},
-		{"PF_MASKPROC", Const, 0},
-		{"PF_R", Const, 0},
-		{"PF_W", Const, 0},
-		{"PF_X", Const, 0},
-		{"PT_AARCH64_ARCHEXT", Const, 16},
-		{"PT_AARCH64_UNWIND", Const, 16},
-		{"PT_ARM_ARCHEXT", Const, 16},
-		{"PT_ARM_EXIDX", Const, 16},
-		{"PT_DYNAMIC", Const, 0},
-		{"PT_GNU_EH_FRAME", Const, 16},
-		{"PT_GNU_MBIND_HI", Const, 16},
-		{"PT_GNU_MBIND_LO", Const, 16},
-		{"PT_GNU_PROPERTY", Const, 16},
-		{"PT_GNU_RELRO", Const, 16},
-		{"PT_GNU_STACK", Const, 16},
-		{"PT_HIOS", Const, 0},
-		{"PT_HIPROC", Const, 0},
-		{"PT_INTERP", Const, 0},
-		{"PT_LOAD", Const, 0},
-		{"PT_LOOS", Const, 0},
-		{"PT_LOPROC", Const, 0},
-		{"PT_MIPS_ABIFLAGS", Const, 16},
-		{"PT_MIPS_OPTIONS", Const, 16},
-		{"PT_MIPS_REGINFO", Const, 16},
-		{"PT_MIPS_RTPROC", Const, 16},
-		{"PT_NOTE", Const, 0},
-		{"PT_NULL", Const, 0},
-		{"PT_OPENBSD_BOOTDATA", Const, 16},
-		{"PT_OPENBSD_NOBTCFI", Const, 23},
-		{"PT_OPENBSD_RANDOMIZE", Const, 16},
-		{"PT_OPENBSD_WXNEEDED", Const, 16},
-		{"PT_PAX_FLAGS", Const, 16},
-		{"PT_PHDR", Const, 0},
-		{"PT_S390_PGSTE", Const, 16},
-		{"PT_SHLIB", Const, 0},
-		{"PT_SUNWSTACK", Const, 16},
-		{"PT_SUNW_EH_FRAME", Const, 16},
-		{"PT_TLS", Const, 0},
-		{"Prog", Type, 0},
-		{"Prog.ProgHeader", Field, 0},
-		{"Prog.ReaderAt", Field, 0},
-		{"Prog32", Type, 0},
-		{"Prog32.Align", Field, 0},
-		{"Prog32.Filesz", Field, 0},
-		{"Prog32.Flags", Field, 0},
-		{"Prog32.Memsz", Field, 0},
-		{"Prog32.Off", Field, 0},
-		{"Prog32.Paddr", Field, 0},
-		{"Prog32.Type", Field, 0},
-		{"Prog32.Vaddr", Field, 0},
-		{"Prog64", Type, 0},
-		{"Prog64.Align", Field, 0},
-		{"Prog64.Filesz", Field, 0},
-		{"Prog64.Flags", Field, 0},
-		{"Prog64.Memsz", Field, 0},
-		{"Prog64.Off", Field, 0},
-		{"Prog64.Paddr", Field, 0},
-		{"Prog64.Type", Field, 0},
-		{"Prog64.Vaddr", Field, 0},
-		{"ProgFlag", Type, 0},
-		{"ProgHeader", Type, 0},
-		{"ProgHeader.Align", Field, 0},
-		{"ProgHeader.Filesz", Field, 0},
-		{"ProgHeader.Flags", Field, 0},
-		{"ProgHeader.Memsz", Field, 0},
-		{"ProgHeader.Off", Field, 0},
-		{"ProgHeader.Paddr", Field, 0},
-		{"ProgHeader.Type", Field, 0},
-		{"ProgHeader.Vaddr", Field, 0},
-		{"ProgType", Type, 0},
-		{"R_386", Type, 0},
-		{"R_386_16", Const, 10},
-		{"R_386_32", Const, 0},
-		{"R_386_32PLT", Const, 10},
-		{"R_386_8", Const, 10},
-		{"R_386_COPY", Const, 0},
-		{"R_386_GLOB_DAT", Const, 0},
-		{"R_386_GOT32", Const, 0},
-		{"R_386_GOT32X", Const, 10},
-		{"R_386_GOTOFF", Const, 0},
-		{"R_386_GOTPC", Const, 0},
-		{"R_386_IRELATIVE", Const, 10},
-		{"R_386_JMP_SLOT", Const, 0},
-		{"R_386_NONE", Const, 0},
-		{"R_386_PC16", Const, 10},
-		{"R_386_PC32", Const, 0},
-		{"R_386_PC8", Const, 10},
-		{"R_386_PLT32", Const, 0},
-		{"R_386_RELATIVE", Const, 0},
-		{"R_386_SIZE32", Const, 10},
-		{"R_386_TLS_DESC", Const, 10},
-		{"R_386_TLS_DESC_CALL", Const, 10},
-		{"R_386_TLS_DTPMOD32", Const, 0},
-		{"R_386_TLS_DTPOFF32", Const, 0},
-		{"R_386_TLS_GD", Const, 0},
-		{"R_386_TLS_GD_32", Const, 0},
-		{"R_386_TLS_GD_CALL", Const, 0},
-		{"R_386_TLS_GD_POP", Const, 0},
-		{"R_386_TLS_GD_PUSH", Const, 0},
-		{"R_386_TLS_GOTDESC", Const, 10},
-		{"R_386_TLS_GOTIE", Const, 0},
-		{"R_386_TLS_IE", Const, 0},
-		{"R_386_TLS_IE_32", Const, 0},
-		{"R_386_TLS_LDM", Const, 0},
-		{"R_386_TLS_LDM_32", Const, 0},
-		{"R_386_TLS_LDM_CALL", Const, 0},
-		{"R_386_TLS_LDM_POP", Const, 0},
-		{"R_386_TLS_LDM_PUSH", Const, 0},
-		{"R_386_TLS_LDO_32", Const, 0},
-		{"R_386_TLS_LE", Const, 0},
-		{"R_386_TLS_LE_32", Const, 0},
-		{"R_386_TLS_TPOFF", Const, 0},
-		{"R_386_TLS_TPOFF32", Const, 0},
-		{"R_390", Type, 7},
-		{"R_390_12", Const, 7},
-		{"R_390_16", Const, 7},
-		{"R_390_20", Const, 7},
-		{"R_390_32", Const, 7},
-		{"R_390_64", Const, 7},
-		{"R_390_8", Const, 7},
-		{"R_390_COPY", Const, 7},
-		{"R_390_GLOB_DAT", Const, 7},
-		{"R_390_GOT12", Const, 7},
-		{"R_390_GOT16", Const, 7},
-		{"R_390_GOT20", Const, 7},
-		{"R_390_GOT32", Const, 7},
-		{"R_390_GOT64", Const, 7},
-		{"R_390_GOTENT", Const, 7},
-		{"R_390_GOTOFF", Const, 7},
-		{"R_390_GOTOFF16", Const, 7},
-		{"R_390_GOTOFF64", Const, 7},
-		{"R_390_GOTPC", Const, 7},
-		{"R_390_GOTPCDBL", Const, 7},
-		{"R_390_GOTPLT12", Const, 7},
-		{"R_390_GOTPLT16", Const, 7},
-		{"R_390_GOTPLT20", Const, 7},
-		{"R_390_GOTPLT32", Const, 7},
-		{"R_390_GOTPLT64", Const, 7},
-		{"R_390_GOTPLTENT", Const, 7},
-		{"R_390_GOTPLTOFF16", Const, 7},
-		{"R_390_GOTPLTOFF32", Const, 7},
-		{"R_390_GOTPLTOFF64", Const, 7},
-		{"R_390_JMP_SLOT", Const, 7},
-		{"R_390_NONE", Const, 7},
-		{"R_390_PC16", Const, 7},
-		{"R_390_PC16DBL", Const, 7},
-		{"R_390_PC32", Const, 7},
-		{"R_390_PC32DBL", Const, 7},
-		{"R_390_PC64", Const, 7},
-		{"R_390_PLT16DBL", Const, 7},
-		{"R_390_PLT32", Const, 7},
-		{"R_390_PLT32DBL", Const, 7},
-		{"R_390_PLT64", Const, 7},
-		{"R_390_RELATIVE", Const, 7},
-		{"R_390_TLS_DTPMOD", Const, 7},
-		{"R_390_TLS_DTPOFF", Const, 7},
-		{"R_390_TLS_GD32", Const, 7},
-		{"R_390_TLS_GD64", Const, 7},
-		{"R_390_TLS_GDCALL", Const, 7},
-		{"R_390_TLS_GOTIE12", Const, 7},
-		{"R_390_TLS_GOTIE20", Const, 7},
-		{"R_390_TLS_GOTIE32", Const, 7},
-		{"R_390_TLS_GOTIE64", Const, 7},
-		{"R_390_TLS_IE32", Const, 7},
-		{"R_390_TLS_IE64", Const, 7},
-		{"R_390_TLS_IEENT", Const, 7},
-		{"R_390_TLS_LDCALL", Const, 7},
-		{"R_390_TLS_LDM32", Const, 7},
-		{"R_390_TLS_LDM64", Const, 7},
-		{"R_390_TLS_LDO32", Const, 7},
-		{"R_390_TLS_LDO64", Const, 7},
-		{"R_390_TLS_LE32", Const, 7},
-		{"R_390_TLS_LE64", Const, 7},
-		{"R_390_TLS_LOAD", Const, 7},
-		{"R_390_TLS_TPOFF", Const, 7},
-		{"R_AARCH64", Type, 4},
-		{"R_AARCH64_ABS16", Const, 4},
-		{"R_AARCH64_ABS32", Const, 4},
-		{"R_AARCH64_ABS64", Const, 4},
-		{"R_AARCH64_ADD_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_ADR_GOT_PAGE", Const, 4},
-		{"R_AARCH64_ADR_PREL_LO21", Const, 4},
-		{"R_AARCH64_ADR_PREL_PG_HI21", Const, 4},
-		{"R_AARCH64_ADR_PREL_PG_HI21_NC", Const, 4},
-		{"R_AARCH64_CALL26", Const, 4},
-		{"R_AARCH64_CONDBR19", Const, 4},
-		{"R_AARCH64_COPY", Const, 4},
-		{"R_AARCH64_GLOB_DAT", Const, 4},
-		{"R_AARCH64_GOT_LD_PREL19", Const, 4},
-		{"R_AARCH64_IRELATIVE", Const, 4},
-		{"R_AARCH64_JUMP26", Const, 4},
-		{"R_AARCH64_JUMP_SLOT", Const, 4},
-		{"R_AARCH64_LD64_GOTOFF_LO15", Const, 10},
-		{"R_AARCH64_LD64_GOTPAGE_LO15", Const, 10},
-		{"R_AARCH64_LD64_GOT_LO12_NC", Const, 4},
-		{"R_AARCH64_LDST128_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_LDST16_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_LDST32_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_LDST64_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_LDST8_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_LD_PREL_LO19", Const, 4},
-		{"R_AARCH64_MOVW_SABS_G0", Const, 4},
-		{"R_AARCH64_MOVW_SABS_G1", Const, 4},
-		{"R_AARCH64_MOVW_SABS_G2", Const, 4},
-		{"R_AARCH64_MOVW_UABS_G0", Const, 4},
-		{"R_AARCH64_MOVW_UABS_G0_NC", Const, 4},
-		{"R_AARCH64_MOVW_UABS_G1", Const, 4},
-		{"R_AARCH64_MOVW_UABS_G1_NC", Const, 4},
-		{"R_AARCH64_MOVW_UABS_G2", Const, 4},
-		{"R_AARCH64_MOVW_UABS_G2_NC", Const, 4},
-		{"R_AARCH64_MOVW_UABS_G3", Const, 4},
-		{"R_AARCH64_NONE", Const, 4},
-		{"R_AARCH64_NULL", Const, 4},
-		{"R_AARCH64_P32_ABS16", Const, 4},
-		{"R_AARCH64_P32_ABS32", Const, 4},
-		{"R_AARCH64_P32_ADD_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_ADR_GOT_PAGE", Const, 4},
-		{"R_AARCH64_P32_ADR_PREL_LO21", Const, 4},
-		{"R_AARCH64_P32_ADR_PREL_PG_HI21", Const, 4},
-		{"R_AARCH64_P32_CALL26", Const, 4},
-		{"R_AARCH64_P32_CONDBR19", Const, 4},
-		{"R_AARCH64_P32_COPY", Const, 4},
-		{"R_AARCH64_P32_GLOB_DAT", Const, 4},
-		{"R_AARCH64_P32_GOT_LD_PREL19", Const, 4},
-		{"R_AARCH64_P32_IRELATIVE", Const, 4},
-		{"R_AARCH64_P32_JUMP26", Const, 4},
-		{"R_AARCH64_P32_JUMP_SLOT", Const, 4},
-		{"R_AARCH64_P32_LD32_GOT_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_LDST128_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_LDST16_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_LDST32_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_LDST64_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_LDST8_ABS_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_LD_PREL_LO19", Const, 4},
-		{"R_AARCH64_P32_MOVW_SABS_G0", Const, 4},
-		{"R_AARCH64_P32_MOVW_UABS_G0", Const, 4},
-		{"R_AARCH64_P32_MOVW_UABS_G0_NC", Const, 4},
-		{"R_AARCH64_P32_MOVW_UABS_G1", Const, 4},
-		{"R_AARCH64_P32_PREL16", Const, 4},
-		{"R_AARCH64_P32_PREL32", Const, 4},
-		{"R_AARCH64_P32_RELATIVE", Const, 4},
-		{"R_AARCH64_P32_TLSDESC", Const, 4},
-		{"R_AARCH64_P32_TLSDESC_ADD_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_TLSDESC_ADR_PAGE21", Const, 4},
-		{"R_AARCH64_P32_TLSDESC_ADR_PREL21", Const, 4},
-		{"R_AARCH64_P32_TLSDESC_CALL", Const, 4},
-		{"R_AARCH64_P32_TLSDESC_LD32_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_TLSDESC_LD_PREL19", Const, 4},
-		{"R_AARCH64_P32_TLSGD_ADD_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_TLSGD_ADR_PAGE21", Const, 4},
-		{"R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4},
-		{"R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19", Const, 4},
-		{"R_AARCH64_P32_TLSLE_ADD_TPREL_HI12", Const, 4},
-		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12", Const, 4},
-		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC", Const, 4},
-		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0", Const, 4},
-		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC", Const, 4},
-		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G1", Const, 4},
-		{"R_AARCH64_P32_TLS_DTPMOD", Const, 4},
-		{"R_AARCH64_P32_TLS_DTPREL", Const, 4},
-		{"R_AARCH64_P32_TLS_TPREL", Const, 4},
-		{"R_AARCH64_P32_TSTBR14", Const, 4},
-		{"R_AARCH64_PREL16", Const, 4},
-		{"R_AARCH64_PREL32", Const, 4},
-		{"R_AARCH64_PREL64", Const, 4},
-		{"R_AARCH64_RELATIVE", Const, 4},
-		{"R_AARCH64_TLSDESC", Const, 4},
-		{"R_AARCH64_TLSDESC_ADD", Const, 4},
-		{"R_AARCH64_TLSDESC_ADD_LO12_NC", Const, 4},
-		{"R_AARCH64_TLSDESC_ADR_PAGE21", Const, 4},
-		{"R_AARCH64_TLSDESC_ADR_PREL21", Const, 4},
-		{"R_AARCH64_TLSDESC_CALL", Const, 4},
-		{"R_AARCH64_TLSDESC_LD64_LO12_NC", Const, 4},
-		{"R_AARCH64_TLSDESC_LDR", Const, 4},
-		{"R_AARCH64_TLSDESC_LD_PREL19", Const, 4},
-		{"R_AARCH64_TLSDESC_OFF_G0_NC", Const, 4},
-		{"R_AARCH64_TLSDESC_OFF_G1", Const, 4},
-		{"R_AARCH64_TLSGD_ADD_LO12_NC", Const, 4},
-		{"R_AARCH64_TLSGD_ADR_PAGE21", Const, 4},
-		{"R_AARCH64_TLSGD_ADR_PREL21", Const, 10},
-		{"R_AARCH64_TLSGD_MOVW_G0_NC", Const, 10},
-		{"R_AARCH64_TLSGD_MOVW_G1", Const, 10},
-		{"R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4},
-		{"R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC", Const, 4},
-		{"R_AARCH64_TLSIE_LD_GOTTPREL_PREL19", Const, 4},
-		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", Const, 4},
-		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G1", Const, 4},
-		{"R_AARCH64_TLSLD_ADR_PAGE21", Const, 10},
-		{"R_AARCH64_TLSLD_ADR_PREL21", Const, 10},
-		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12", Const, 10},
-		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC", Const, 10},
-		{"R_AARCH64_TLSLE_ADD_TPREL_HI12", Const, 4},
-		{"R_AARCH64_TLSLE_ADD_TPREL_LO12", Const, 4},
-		{"R_AARCH64_TLSLE_ADD_TPREL_LO12_NC", Const, 4},
-		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12", Const, 10},
-		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC", Const, 10},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G0", Const, 4},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G0_NC", Const, 4},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G1", Const, 4},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G1_NC", Const, 4},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G2", Const, 4},
-		{"R_AARCH64_TLS_DTPMOD64", Const, 4},
-		{"R_AARCH64_TLS_DTPREL64", Const, 4},
-		{"R_AARCH64_TLS_TPREL64", Const, 4},
-		{"R_AARCH64_TSTBR14", Const, 4},
-		{"R_ALPHA", Type, 0},
-		{"R_ALPHA_BRADDR", Const, 0},
-		{"R_ALPHA_COPY", Const, 0},
-		{"R_ALPHA_GLOB_DAT", Const, 0},
-		{"R_ALPHA_GPDISP", Const, 0},
-		{"R_ALPHA_GPREL32", Const, 0},
-		{"R_ALPHA_GPRELHIGH", Const, 0},
-		{"R_ALPHA_GPRELLOW", Const, 0},
-		{"R_ALPHA_GPVALUE", Const, 0},
-		{"R_ALPHA_HINT", Const, 0},
-		{"R_ALPHA_IMMED_BR_HI32", Const, 0},
-		{"R_ALPHA_IMMED_GP_16", Const, 0},
-		{"R_ALPHA_IMMED_GP_HI32", Const, 0},
-		{"R_ALPHA_IMMED_LO32", Const, 0},
-		{"R_ALPHA_IMMED_SCN_HI32", Const, 0},
-		{"R_ALPHA_JMP_SLOT", Const, 0},
-		{"R_ALPHA_LITERAL", Const, 0},
-		{"R_ALPHA_LITUSE", Const, 0},
-		{"R_ALPHA_NONE", Const, 0},
-		{"R_ALPHA_OP_PRSHIFT", Const, 0},
-		{"R_ALPHA_OP_PSUB", Const, 0},
-		{"R_ALPHA_OP_PUSH", Const, 0},
-		{"R_ALPHA_OP_STORE", Const, 0},
-		{"R_ALPHA_REFLONG", Const, 0},
-		{"R_ALPHA_REFQUAD", Const, 0},
-		{"R_ALPHA_RELATIVE", Const, 0},
-		{"R_ALPHA_SREL16", Const, 0},
-		{"R_ALPHA_SREL32", Const, 0},
-		{"R_ALPHA_SREL64", Const, 0},
-		{"R_ARM", Type, 0},
-		{"R_ARM_ABS12", Const, 0},
-		{"R_ARM_ABS16", Const, 0},
-		{"R_ARM_ABS32", Const, 0},
-		{"R_ARM_ABS32_NOI", Const, 10},
-		{"R_ARM_ABS8", Const, 0},
-		{"R_ARM_ALU_PCREL_15_8", Const, 10},
-		{"R_ARM_ALU_PCREL_23_15", Const, 10},
-		{"R_ARM_ALU_PCREL_7_0", Const, 10},
-		{"R_ARM_ALU_PC_G0", Const, 10},
-		{"R_ARM_ALU_PC_G0_NC", Const, 10},
-		{"R_ARM_ALU_PC_G1", Const, 10},
-		{"R_ARM_ALU_PC_G1_NC", Const, 10},
-		{"R_ARM_ALU_PC_G2", Const, 10},
-		{"R_ARM_ALU_SBREL_19_12_NC", Const, 10},
-		{"R_ARM_ALU_SBREL_27_20_CK", Const, 10},
-		{"R_ARM_ALU_SB_G0", Const, 10},
-		{"R_ARM_ALU_SB_G0_NC", Const, 10},
-		{"R_ARM_ALU_SB_G1", Const, 10},
-		{"R_ARM_ALU_SB_G1_NC", Const, 10},
-		{"R_ARM_ALU_SB_G2", Const, 10},
-		{"R_ARM_AMP_VCALL9", Const, 0},
-		{"R_ARM_BASE_ABS", Const, 10},
-		{"R_ARM_CALL", Const, 10},
-		{"R_ARM_COPY", Const, 0},
-		{"R_ARM_GLOB_DAT", Const, 0},
-		{"R_ARM_GNU_VTENTRY", Const, 0},
-		{"R_ARM_GNU_VTINHERIT", Const, 0},
-		{"R_ARM_GOT32", Const, 0},
-		{"R_ARM_GOTOFF", Const, 0},
-		{"R_ARM_GOTOFF12", Const, 10},
-		{"R_ARM_GOTPC", Const, 0},
-		{"R_ARM_GOTRELAX", Const, 10},
-		{"R_ARM_GOT_ABS", Const, 10},
-		{"R_ARM_GOT_BREL12", Const, 10},
-		{"R_ARM_GOT_PREL", Const, 10},
-		{"R_ARM_IRELATIVE", Const, 10},
-		{"R_ARM_JUMP24", Const, 10},
-		{"R_ARM_JUMP_SLOT", Const, 0},
-		{"R_ARM_LDC_PC_G0", Const, 10},
-		{"R_ARM_LDC_PC_G1", Const, 10},
-		{"R_ARM_LDC_PC_G2", Const, 10},
-		{"R_ARM_LDC_SB_G0", Const, 10},
-		{"R_ARM_LDC_SB_G1", Const, 10},
-		{"R_ARM_LDC_SB_G2", Const, 10},
-		{"R_ARM_LDRS_PC_G0", Const, 10},
-		{"R_ARM_LDRS_PC_G1", Const, 10},
-		{"R_ARM_LDRS_PC_G2", Const, 10},
-		{"R_ARM_LDRS_SB_G0", Const, 10},
-		{"R_ARM_LDRS_SB_G1", Const, 10},
-		{"R_ARM_LDRS_SB_G2", Const, 10},
-		{"R_ARM_LDR_PC_G1", Const, 10},
-		{"R_ARM_LDR_PC_G2", Const, 10},
-		{"R_ARM_LDR_SBREL_11_10_NC", Const, 10},
-		{"R_ARM_LDR_SB_G0", Const, 10},
-		{"R_ARM_LDR_SB_G1", Const, 10},
-		{"R_ARM_LDR_SB_G2", Const, 10},
-		{"R_ARM_ME_TOO", Const, 10},
-		{"R_ARM_MOVT_ABS", Const, 10},
-		{"R_ARM_MOVT_BREL", Const, 10},
-		{"R_ARM_MOVT_PREL", Const, 10},
-		{"R_ARM_MOVW_ABS_NC", Const, 10},
-		{"R_ARM_MOVW_BREL", Const, 10},
-		{"R_ARM_MOVW_BREL_NC", Const, 10},
-		{"R_ARM_MOVW_PREL_NC", Const, 10},
-		{"R_ARM_NONE", Const, 0},
-		{"R_ARM_PC13", Const, 0},
-		{"R_ARM_PC24", Const, 0},
-		{"R_ARM_PLT32", Const, 0},
-		{"R_ARM_PLT32_ABS", Const, 10},
-		{"R_ARM_PREL31", Const, 10},
-		{"R_ARM_PRIVATE_0", Const, 10},
-		{"R_ARM_PRIVATE_1", Const, 10},
-		{"R_ARM_PRIVATE_10", Const, 10},
-		{"R_ARM_PRIVATE_11", Const, 10},
-		{"R_ARM_PRIVATE_12", Const, 10},
-		{"R_ARM_PRIVATE_13", Const, 10},
-		{"R_ARM_PRIVATE_14", Const, 10},
-		{"R_ARM_PRIVATE_15", Const, 10},
-		{"R_ARM_PRIVATE_2", Const, 10},
-		{"R_ARM_PRIVATE_3", Const, 10},
-		{"R_ARM_PRIVATE_4", Const, 10},
-		{"R_ARM_PRIVATE_5", Const, 10},
-		{"R_ARM_PRIVATE_6", Const, 10},
-		{"R_ARM_PRIVATE_7", Const, 10},
-		{"R_ARM_PRIVATE_8", Const, 10},
-		{"R_ARM_PRIVATE_9", Const, 10},
-		{"R_ARM_RABS32", Const, 0},
-		{"R_ARM_RBASE", Const, 0},
-		{"R_ARM_REL32", Const, 0},
-		{"R_ARM_REL32_NOI", Const, 10},
-		{"R_ARM_RELATIVE", Const, 0},
-		{"R_ARM_RPC24", Const, 0},
-		{"R_ARM_RREL32", Const, 0},
-		{"R_ARM_RSBREL32", Const, 0},
-		{"R_ARM_RXPC25", Const, 10},
-		{"R_ARM_SBREL31", Const, 10},
-		{"R_ARM_SBREL32", Const, 0},
-		{"R_ARM_SWI24", Const, 0},
-		{"R_ARM_TARGET1", Const, 10},
-		{"R_ARM_TARGET2", Const, 10},
-		{"R_ARM_THM_ABS5", Const, 0},
-		{"R_ARM_THM_ALU_ABS_G0_NC", Const, 10},
-		{"R_ARM_THM_ALU_ABS_G1_NC", Const, 10},
-		{"R_ARM_THM_ALU_ABS_G2_NC", Const, 10},
-		{"R_ARM_THM_ALU_ABS_G3", Const, 10},
-		{"R_ARM_THM_ALU_PREL_11_0", Const, 10},
-		{"R_ARM_THM_GOT_BREL12", Const, 10},
-		{"R_ARM_THM_JUMP11", Const, 10},
-		{"R_ARM_THM_JUMP19", Const, 10},
-		{"R_ARM_THM_JUMP24", Const, 10},
-		{"R_ARM_THM_JUMP6", Const, 10},
-		{"R_ARM_THM_JUMP8", Const, 10},
-		{"R_ARM_THM_MOVT_ABS", Const, 10},
-		{"R_ARM_THM_MOVT_BREL", Const, 10},
-		{"R_ARM_THM_MOVT_PREL", Const, 10},
-		{"R_ARM_THM_MOVW_ABS_NC", Const, 10},
-		{"R_ARM_THM_MOVW_BREL", Const, 10},
-		{"R_ARM_THM_MOVW_BREL_NC", Const, 10},
-		{"R_ARM_THM_MOVW_PREL_NC", Const, 10},
-		{"R_ARM_THM_PC12", Const, 10},
-		{"R_ARM_THM_PC22", Const, 0},
-		{"R_ARM_THM_PC8", Const, 0},
-		{"R_ARM_THM_RPC22", Const, 0},
-		{"R_ARM_THM_SWI8", Const, 0},
-		{"R_ARM_THM_TLS_CALL", Const, 10},
-		{"R_ARM_THM_TLS_DESCSEQ16", Const, 10},
-		{"R_ARM_THM_TLS_DESCSEQ32", Const, 10},
-		{"R_ARM_THM_XPC22", Const, 0},
-		{"R_ARM_TLS_CALL", Const, 10},
-		{"R_ARM_TLS_DESCSEQ", Const, 10},
-		{"R_ARM_TLS_DTPMOD32", Const, 10},
-		{"R_ARM_TLS_DTPOFF32", Const, 10},
-		{"R_ARM_TLS_GD32", Const, 10},
-		{"R_ARM_TLS_GOTDESC", Const, 10},
-		{"R_ARM_TLS_IE12GP", Const, 10},
-		{"R_ARM_TLS_IE32", Const, 10},
-		{"R_ARM_TLS_LDM32", Const, 10},
-		{"R_ARM_TLS_LDO12", Const, 10},
-		{"R_ARM_TLS_LDO32", Const, 10},
-		{"R_ARM_TLS_LE12", Const, 10},
-		{"R_ARM_TLS_LE32", Const, 10},
-		{"R_ARM_TLS_TPOFF32", Const, 10},
-		{"R_ARM_V4BX", Const, 10},
-		{"R_ARM_XPC25", Const, 0},
-		{"R_INFO", Func, 0},
-		{"R_INFO32", Func, 0},
-		{"R_LARCH", Type, 19},
-		{"R_LARCH_32", Const, 19},
-		{"R_LARCH_32_PCREL", Const, 20},
-		{"R_LARCH_64", Const, 19},
-		{"R_LARCH_64_PCREL", Const, 22},
-		{"R_LARCH_ABS64_HI12", Const, 20},
-		{"R_LARCH_ABS64_LO20", Const, 20},
-		{"R_LARCH_ABS_HI20", Const, 20},
-		{"R_LARCH_ABS_LO12", Const, 20},
-		{"R_LARCH_ADD16", Const, 19},
-		{"R_LARCH_ADD24", Const, 19},
-		{"R_LARCH_ADD32", Const, 19},
-		{"R_LARCH_ADD6", Const, 22},
-		{"R_LARCH_ADD64", Const, 19},
-		{"R_LARCH_ADD8", Const, 19},
-		{"R_LARCH_ADD_ULEB128", Const, 22},
-		{"R_LARCH_ALIGN", Const, 22},
-		{"R_LARCH_B16", Const, 20},
-		{"R_LARCH_B21", Const, 20},
-		{"R_LARCH_B26", Const, 20},
-		{"R_LARCH_CFA", Const, 22},
-		{"R_LARCH_COPY", Const, 19},
-		{"R_LARCH_DELETE", Const, 22},
-		{"R_LARCH_GNU_VTENTRY", Const, 20},
-		{"R_LARCH_GNU_VTINHERIT", Const, 20},
-		{"R_LARCH_GOT64_HI12", Const, 20},
-		{"R_LARCH_GOT64_LO20", Const, 20},
-		{"R_LARCH_GOT64_PC_HI12", Const, 20},
-		{"R_LARCH_GOT64_PC_LO20", Const, 20},
-		{"R_LARCH_GOT_HI20", Const, 20},
-		{"R_LARCH_GOT_LO12", Const, 20},
-		{"R_LARCH_GOT_PC_HI20", Const, 20},
-		{"R_LARCH_GOT_PC_LO12", Const, 20},
-		{"R_LARCH_IRELATIVE", Const, 19},
-		{"R_LARCH_JUMP_SLOT", Const, 19},
-		{"R_LARCH_MARK_LA", Const, 19},
-		{"R_LARCH_MARK_PCREL", Const, 19},
-		{"R_LARCH_NONE", Const, 19},
-		{"R_LARCH_PCALA64_HI12", Const, 20},
-		{"R_LARCH_PCALA64_LO20", Const, 20},
-		{"R_LARCH_PCALA_HI20", Const, 20},
-		{"R_LARCH_PCALA_LO12", Const, 20},
-		{"R_LARCH_PCREL20_S2", Const, 22},
-		{"R_LARCH_RELATIVE", Const, 19},
-		{"R_LARCH_RELAX", Const, 20},
-		{"R_LARCH_SOP_ADD", Const, 19},
-		{"R_LARCH_SOP_AND", Const, 19},
-		{"R_LARCH_SOP_ASSERT", Const, 19},
-		{"R_LARCH_SOP_IF_ELSE", Const, 19},
-		{"R_LARCH_SOP_NOT", Const, 19},
-		{"R_LARCH_SOP_POP_32_S_0_10_10_16_S2", Const, 19},
-		{"R_LARCH_SOP_POP_32_S_0_5_10_16_S2", Const, 19},
-		{"R_LARCH_SOP_POP_32_S_10_12", Const, 19},
-		{"R_LARCH_SOP_POP_32_S_10_16", Const, 19},
-		{"R_LARCH_SOP_POP_32_S_10_16_S2", Const, 19},
-		{"R_LARCH_SOP_POP_32_S_10_5", Const, 19},
-		{"R_LARCH_SOP_POP_32_S_5_20", Const, 19},
-		{"R_LARCH_SOP_POP_32_U", Const, 19},
-		{"R_LARCH_SOP_POP_32_U_10_12", Const, 19},
-		{"R_LARCH_SOP_PUSH_ABSOLUTE", Const, 19},
-		{"R_LARCH_SOP_PUSH_DUP", Const, 19},
-		{"R_LARCH_SOP_PUSH_GPREL", Const, 19},
-		{"R_LARCH_SOP_PUSH_PCREL", Const, 19},
-		{"R_LARCH_SOP_PUSH_PLT_PCREL", Const, 19},
-		{"R_LARCH_SOP_PUSH_TLS_GD", Const, 19},
-		{"R_LARCH_SOP_PUSH_TLS_GOT", Const, 19},
-		{"R_LARCH_SOP_PUSH_TLS_TPREL", Const, 19},
-		{"R_LARCH_SOP_SL", Const, 19},
-		{"R_LARCH_SOP_SR", Const, 19},
-		{"R_LARCH_SOP_SUB", Const, 19},
-		{"R_LARCH_SUB16", Const, 19},
-		{"R_LARCH_SUB24", Const, 19},
-		{"R_LARCH_SUB32", Const, 19},
-		{"R_LARCH_SUB6", Const, 22},
-		{"R_LARCH_SUB64", Const, 19},
-		{"R_LARCH_SUB8", Const, 19},
-		{"R_LARCH_SUB_ULEB128", Const, 22},
-		{"R_LARCH_TLS_DTPMOD32", Const, 19},
-		{"R_LARCH_TLS_DTPMOD64", Const, 19},
-		{"R_LARCH_TLS_DTPREL32", Const, 19},
-		{"R_LARCH_TLS_DTPREL64", Const, 19},
-		{"R_LARCH_TLS_GD_HI20", Const, 20},
-		{"R_LARCH_TLS_GD_PC_HI20", Const, 20},
-		{"R_LARCH_TLS_IE64_HI12", Const, 20},
-		{"R_LARCH_TLS_IE64_LO20", Const, 20},
-		{"R_LARCH_TLS_IE64_PC_HI12", Const, 20},
-		{"R_LARCH_TLS_IE64_PC_LO20", Const, 20},
-		{"R_LARCH_TLS_IE_HI20", Const, 20},
-		{"R_LARCH_TLS_IE_LO12", Const, 20},
-		{"R_LARCH_TLS_IE_PC_HI20", Const, 20},
-		{"R_LARCH_TLS_IE_PC_LO12", Const, 20},
-		{"R_LARCH_TLS_LD_HI20", Const, 20},
-		{"R_LARCH_TLS_LD_PC_HI20", Const, 20},
-		{"R_LARCH_TLS_LE64_HI12", Const, 20},
-		{"R_LARCH_TLS_LE64_LO20", Const, 20},
-		{"R_LARCH_TLS_LE_HI20", Const, 20},
-		{"R_LARCH_TLS_LE_LO12", Const, 20},
-		{"R_LARCH_TLS_TPREL32", Const, 19},
-		{"R_LARCH_TLS_TPREL64", Const, 19},
-		{"R_MIPS", Type, 6},
-		{"R_MIPS_16", Const, 6},
-		{"R_MIPS_26", Const, 6},
-		{"R_MIPS_32", Const, 6},
-		{"R_MIPS_64", Const, 6},
-		{"R_MIPS_ADD_IMMEDIATE", Const, 6},
-		{"R_MIPS_CALL16", Const, 6},
-		{"R_MIPS_CALL_HI16", Const, 6},
-		{"R_MIPS_CALL_LO16", Const, 6},
-		{"R_MIPS_DELETE", Const, 6},
-		{"R_MIPS_GOT16", Const, 6},
-		{"R_MIPS_GOT_DISP", Const, 6},
-		{"R_MIPS_GOT_HI16", Const, 6},
-		{"R_MIPS_GOT_LO16", Const, 6},
-		{"R_MIPS_GOT_OFST", Const, 6},
-		{"R_MIPS_GOT_PAGE", Const, 6},
-		{"R_MIPS_GPREL16", Const, 6},
-		{"R_MIPS_GPREL32", Const, 6},
-		{"R_MIPS_HI16", Const, 6},
-		{"R_MIPS_HIGHER", Const, 6},
-		{"R_MIPS_HIGHEST", Const, 6},
-		{"R_MIPS_INSERT_A", Const, 6},
-		{"R_MIPS_INSERT_B", Const, 6},
-		{"R_MIPS_JALR", Const, 6},
-		{"R_MIPS_LITERAL", Const, 6},
-		{"R_MIPS_LO16", Const, 6},
-		{"R_MIPS_NONE", Const, 6},
-		{"R_MIPS_PC16", Const, 6},
-		{"R_MIPS_PC32", Const, 22},
-		{"R_MIPS_PJUMP", Const, 6},
-		{"R_MIPS_REL16", Const, 6},
-		{"R_MIPS_REL32", Const, 6},
-		{"R_MIPS_RELGOT", Const, 6},
-		{"R_MIPS_SCN_DISP", Const, 6},
-		{"R_MIPS_SHIFT5", Const, 6},
-		{"R_MIPS_SHIFT6", Const, 6},
-		{"R_MIPS_SUB", Const, 6},
-		{"R_MIPS_TLS_DTPMOD32", Const, 6},
-		{"R_MIPS_TLS_DTPMOD64", Const, 6},
-		{"R_MIPS_TLS_DTPREL32", Const, 6},
-		{"R_MIPS_TLS_DTPREL64", Const, 6},
-		{"R_MIPS_TLS_DTPREL_HI16", Const, 6},
-		{"R_MIPS_TLS_DTPREL_LO16", Const, 6},
-		{"R_MIPS_TLS_GD", Const, 6},
-		{"R_MIPS_TLS_GOTTPREL", Const, 6},
-		{"R_MIPS_TLS_LDM", Const, 6},
-		{"R_MIPS_TLS_TPREL32", Const, 6},
-		{"R_MIPS_TLS_TPREL64", Const, 6},
-		{"R_MIPS_TLS_TPREL_HI16", Const, 6},
-		{"R_MIPS_TLS_TPREL_LO16", Const, 6},
-		{"R_PPC", Type, 0},
-		{"R_PPC64", Type, 5},
-		{"R_PPC64_ADDR14", Const, 5},
-		{"R_PPC64_ADDR14_BRNTAKEN", Const, 5},
-		{"R_PPC64_ADDR14_BRTAKEN", Const, 5},
-		{"R_PPC64_ADDR16", Const, 5},
-		{"R_PPC64_ADDR16_DS", Const, 5},
-		{"R_PPC64_ADDR16_HA", Const, 5},
-		{"R_PPC64_ADDR16_HI", Const, 5},
-		{"R_PPC64_ADDR16_HIGH", Const, 10},
-		{"R_PPC64_ADDR16_HIGHA", Const, 10},
-		{"R_PPC64_ADDR16_HIGHER", Const, 5},
-		{"R_PPC64_ADDR16_HIGHER34", Const, 20},
-		{"R_PPC64_ADDR16_HIGHERA", Const, 5},
-		{"R_PPC64_ADDR16_HIGHERA34", Const, 20},
-		{"R_PPC64_ADDR16_HIGHEST", Const, 5},
-		{"R_PPC64_ADDR16_HIGHEST34", Const, 20},
-		{"R_PPC64_ADDR16_HIGHESTA", Const, 5},
-		{"R_PPC64_ADDR16_HIGHESTA34", Const, 20},
-		{"R_PPC64_ADDR16_LO", Const, 5},
-		{"R_PPC64_ADDR16_LO_DS", Const, 5},
-		{"R_PPC64_ADDR24", Const, 5},
-		{"R_PPC64_ADDR32", Const, 5},
-		{"R_PPC64_ADDR64", Const, 5},
-		{"R_PPC64_ADDR64_LOCAL", Const, 10},
-		{"R_PPC64_COPY", Const, 20},
-		{"R_PPC64_D28", Const, 20},
-		{"R_PPC64_D34", Const, 20},
-		{"R_PPC64_D34_HA30", Const, 20},
-		{"R_PPC64_D34_HI30", Const, 20},
-		{"R_PPC64_D34_LO", Const, 20},
-		{"R_PPC64_DTPMOD64", Const, 5},
-		{"R_PPC64_DTPREL16", Const, 5},
-		{"R_PPC64_DTPREL16_DS", Const, 5},
-		{"R_PPC64_DTPREL16_HA", Const, 5},
-		{"R_PPC64_DTPREL16_HI", Const, 5},
-		{"R_PPC64_DTPREL16_HIGH", Const, 10},
-		{"R_PPC64_DTPREL16_HIGHA", Const, 10},
-		{"R_PPC64_DTPREL16_HIGHER", Const, 5},
-		{"R_PPC64_DTPREL16_HIGHERA", Const, 5},
-		{"R_PPC64_DTPREL16_HIGHEST", Const, 5},
-		{"R_PPC64_DTPREL16_HIGHESTA", Const, 5},
-		{"R_PPC64_DTPREL16_LO", Const, 5},
-		{"R_PPC64_DTPREL16_LO_DS", Const, 5},
-		{"R_PPC64_DTPREL34", Const, 20},
-		{"R_PPC64_DTPREL64", Const, 5},
-		{"R_PPC64_ENTRY", Const, 10},
-		{"R_PPC64_GLOB_DAT", Const, 20},
-		{"R_PPC64_GNU_VTENTRY", Const, 20},
-		{"R_PPC64_GNU_VTINHERIT", Const, 20},
-		{"R_PPC64_GOT16", Const, 5},
-		{"R_PPC64_GOT16_DS", Const, 5},
-		{"R_PPC64_GOT16_HA", Const, 5},
-		{"R_PPC64_GOT16_HI", Const, 5},
-		{"R_PPC64_GOT16_LO", Const, 5},
-		{"R_PPC64_GOT16_LO_DS", Const, 5},
-		{"R_PPC64_GOT_DTPREL16_DS", Const, 5},
-		{"R_PPC64_GOT_DTPREL16_HA", Const, 5},
-		{"R_PPC64_GOT_DTPREL16_HI", Const, 5},
-		{"R_PPC64_GOT_DTPREL16_LO_DS", Const, 5},
-		{"R_PPC64_GOT_DTPREL_PCREL34", Const, 20},
-		{"R_PPC64_GOT_PCREL34", Const, 20},
-		{"R_PPC64_GOT_TLSGD16", Const, 5},
-		{"R_PPC64_GOT_TLSGD16_HA", Const, 5},
-		{"R_PPC64_GOT_TLSGD16_HI", Const, 5},
-		{"R_PPC64_GOT_TLSGD16_LO", Const, 5},
-		{"R_PPC64_GOT_TLSGD_PCREL34", Const, 20},
-		{"R_PPC64_GOT_TLSLD16", Const, 5},
-		{"R_PPC64_GOT_TLSLD16_HA", Const, 5},
-		{"R_PPC64_GOT_TLSLD16_HI", Const, 5},
-		{"R_PPC64_GOT_TLSLD16_LO", Const, 5},
-		{"R_PPC64_GOT_TLSLD_PCREL34", Const, 20},
-		{"R_PPC64_GOT_TPREL16_DS", Const, 5},
-		{"R_PPC64_GOT_TPREL16_HA", Const, 5},
-		{"R_PPC64_GOT_TPREL16_HI", Const, 5},
-		{"R_PPC64_GOT_TPREL16_LO_DS", Const, 5},
-		{"R_PPC64_GOT_TPREL_PCREL34", Const, 20},
-		{"R_PPC64_IRELATIVE", Const, 10},
-		{"R_PPC64_JMP_IREL", Const, 10},
-		{"R_PPC64_JMP_SLOT", Const, 5},
-		{"R_PPC64_NONE", Const, 5},
-		{"R_PPC64_PCREL28", Const, 20},
-		{"R_PPC64_PCREL34", Const, 20},
-		{"R_PPC64_PCREL_OPT", Const, 20},
-		{"R_PPC64_PLT16_HA", Const, 20},
-		{"R_PPC64_PLT16_HI", Const, 20},
-		{"R_PPC64_PLT16_LO", Const, 20},
-		{"R_PPC64_PLT16_LO_DS", Const, 10},
-		{"R_PPC64_PLT32", Const, 20},
-		{"R_PPC64_PLT64", Const, 20},
-		{"R_PPC64_PLTCALL", Const, 20},
-		{"R_PPC64_PLTCALL_NOTOC", Const, 20},
-		{"R_PPC64_PLTGOT16", Const, 10},
-		{"R_PPC64_PLTGOT16_DS", Const, 10},
-		{"R_PPC64_PLTGOT16_HA", Const, 10},
-		{"R_PPC64_PLTGOT16_HI", Const, 10},
-		{"R_PPC64_PLTGOT16_LO", Const, 10},
-		{"R_PPC64_PLTGOT_LO_DS", Const, 10},
-		{"R_PPC64_PLTREL32", Const, 20},
-		{"R_PPC64_PLTREL64", Const, 20},
-		{"R_PPC64_PLTSEQ", Const, 20},
-		{"R_PPC64_PLTSEQ_NOTOC", Const, 20},
-		{"R_PPC64_PLT_PCREL34", Const, 20},
-		{"R_PPC64_PLT_PCREL34_NOTOC", Const, 20},
-		{"R_PPC64_REL14", Const, 5},
-		{"R_PPC64_REL14_BRNTAKEN", Const, 5},
-		{"R_PPC64_REL14_BRTAKEN", Const, 5},
-		{"R_PPC64_REL16", Const, 5},
-		{"R_PPC64_REL16DX_HA", Const, 10},
-		{"R_PPC64_REL16_HA", Const, 5},
-		{"R_PPC64_REL16_HI", Const, 5},
-		{"R_PPC64_REL16_HIGH", Const, 20},
-		{"R_PPC64_REL16_HIGHA", Const, 20},
-		{"R_PPC64_REL16_HIGHER", Const, 20},
-		{"R_PPC64_REL16_HIGHER34", Const, 20},
-		{"R_PPC64_REL16_HIGHERA", Const, 20},
-		{"R_PPC64_REL16_HIGHERA34", Const, 20},
-		{"R_PPC64_REL16_HIGHEST", Const, 20},
-		{"R_PPC64_REL16_HIGHEST34", Const, 20},
-		{"R_PPC64_REL16_HIGHESTA", Const, 20},
-		{"R_PPC64_REL16_HIGHESTA34", Const, 20},
-		{"R_PPC64_REL16_LO", Const, 5},
-		{"R_PPC64_REL24", Const, 5},
-		{"R_PPC64_REL24_NOTOC", Const, 10},
-		{"R_PPC64_REL24_P9NOTOC", Const, 21},
-		{"R_PPC64_REL30", Const, 20},
-		{"R_PPC64_REL32", Const, 5},
-		{"R_PPC64_REL64", Const, 5},
-		{"R_PPC64_RELATIVE", Const, 18},
-		{"R_PPC64_SECTOFF", Const, 20},
-		{"R_PPC64_SECTOFF_DS", Const, 10},
-		{"R_PPC64_SECTOFF_HA", Const, 20},
-		{"R_PPC64_SECTOFF_HI", Const, 20},
-		{"R_PPC64_SECTOFF_LO", Const, 20},
-		{"R_PPC64_SECTOFF_LO_DS", Const, 10},
-		{"R_PPC64_TLS", Const, 5},
-		{"R_PPC64_TLSGD", Const, 5},
-		{"R_PPC64_TLSLD", Const, 5},
-		{"R_PPC64_TOC", Const, 5},
-		{"R_PPC64_TOC16", Const, 5},
-		{"R_PPC64_TOC16_DS", Const, 5},
-		{"R_PPC64_TOC16_HA", Const, 5},
-		{"R_PPC64_TOC16_HI", Const, 5},
-		{"R_PPC64_TOC16_LO", Const, 5},
-		{"R_PPC64_TOC16_LO_DS", Const, 5},
-		{"R_PPC64_TOCSAVE", Const, 10},
-		{"R_PPC64_TPREL16", Const, 5},
-		{"R_PPC64_TPREL16_DS", Const, 5},
-		{"R_PPC64_TPREL16_HA", Const, 5},
-		{"R_PPC64_TPREL16_HI", Const, 5},
-		{"R_PPC64_TPREL16_HIGH", Const, 10},
-		{"R_PPC64_TPREL16_HIGHA", Const, 10},
-		{"R_PPC64_TPREL16_HIGHER", Const, 5},
-		{"R_PPC64_TPREL16_HIGHERA", Const, 5},
-		{"R_PPC64_TPREL16_HIGHEST", Const, 5},
-		{"R_PPC64_TPREL16_HIGHESTA", Const, 5},
-		{"R_PPC64_TPREL16_LO", Const, 5},
-		{"R_PPC64_TPREL16_LO_DS", Const, 5},
-		{"R_PPC64_TPREL34", Const, 20},
-		{"R_PPC64_TPREL64", Const, 5},
-		{"R_PPC64_UADDR16", Const, 20},
-		{"R_PPC64_UADDR32", Const, 20},
-		{"R_PPC64_UADDR64", Const, 20},
-		{"R_PPC_ADDR14", Const, 0},
-		{"R_PPC_ADDR14_BRNTAKEN", Const, 0},
-		{"R_PPC_ADDR14_BRTAKEN", Const, 0},
-		{"R_PPC_ADDR16", Const, 0},
-		{"R_PPC_ADDR16_HA", Const, 0},
-		{"R_PPC_ADDR16_HI", Const, 0},
-		{"R_PPC_ADDR16_LO", Const, 0},
-		{"R_PPC_ADDR24", Const, 0},
-		{"R_PPC_ADDR32", Const, 0},
-		{"R_PPC_COPY", Const, 0},
-		{"R_PPC_DTPMOD32", Const, 0},
-		{"R_PPC_DTPREL16", Const, 0},
-		{"R_PPC_DTPREL16_HA", Const, 0},
-		{"R_PPC_DTPREL16_HI", Const, 0},
-		{"R_PPC_DTPREL16_LO", Const, 0},
-		{"R_PPC_DTPREL32", Const, 0},
-		{"R_PPC_EMB_BIT_FLD", Const, 0},
-		{"R_PPC_EMB_MRKREF", Const, 0},
-		{"R_PPC_EMB_NADDR16", Const, 0},
-		{"R_PPC_EMB_NADDR16_HA", Const, 0},
-		{"R_PPC_EMB_NADDR16_HI", Const, 0},
-		{"R_PPC_EMB_NADDR16_LO", Const, 0},
-		{"R_PPC_EMB_NADDR32", Const, 0},
-		{"R_PPC_EMB_RELSDA", Const, 0},
-		{"R_PPC_EMB_RELSEC16", Const, 0},
-		{"R_PPC_EMB_RELST_HA", Const, 0},
-		{"R_PPC_EMB_RELST_HI", Const, 0},
-		{"R_PPC_EMB_RELST_LO", Const, 0},
-		{"R_PPC_EMB_SDA21", Const, 0},
-		{"R_PPC_EMB_SDA2I16", Const, 0},
-		{"R_PPC_EMB_SDA2REL", Const, 0},
-		{"R_PPC_EMB_SDAI16", Const, 0},
-		{"R_PPC_GLOB_DAT", Const, 0},
-		{"R_PPC_GOT16", Const, 0},
-		{"R_PPC_GOT16_HA", Const, 0},
-		{"R_PPC_GOT16_HI", Const, 0},
-		{"R_PPC_GOT16_LO", Const, 0},
-		{"R_PPC_GOT_TLSGD16", Const, 0},
-		{"R_PPC_GOT_TLSGD16_HA", Const, 0},
-		{"R_PPC_GOT_TLSGD16_HI", Const, 0},
-		{"R_PPC_GOT_TLSGD16_LO", Const, 0},
-		{"R_PPC_GOT_TLSLD16", Const, 0},
-		{"R_PPC_GOT_TLSLD16_HA", Const, 0},
-		{"R_PPC_GOT_TLSLD16_HI", Const, 0},
-		{"R_PPC_GOT_TLSLD16_LO", Const, 0},
-		{"R_PPC_GOT_TPREL16", Const, 0},
-		{"R_PPC_GOT_TPREL16_HA", Const, 0},
-		{"R_PPC_GOT_TPREL16_HI", Const, 0},
-		{"R_PPC_GOT_TPREL16_LO", Const, 0},
-		{"R_PPC_JMP_SLOT", Const, 0},
-		{"R_PPC_LOCAL24PC", Const, 0},
-		{"R_PPC_NONE", Const, 0},
-		{"R_PPC_PLT16_HA", Const, 0},
-		{"R_PPC_PLT16_HI", Const, 0},
-		{"R_PPC_PLT16_LO", Const, 0},
-		{"R_PPC_PLT32", Const, 0},
-		{"R_PPC_PLTREL24", Const, 0},
-		{"R_PPC_PLTREL32", Const, 0},
-		{"R_PPC_REL14", Const, 0},
-		{"R_PPC_REL14_BRNTAKEN", Const, 0},
-		{"R_PPC_REL14_BRTAKEN", Const, 0},
-		{"R_PPC_REL24", Const, 0},
-		{"R_PPC_REL32", Const, 0},
-		{"R_PPC_RELATIVE", Const, 0},
-		{"R_PPC_SDAREL16", Const, 0},
-		{"R_PPC_SECTOFF", Const, 0},
-		{"R_PPC_SECTOFF_HA", Const, 0},
-		{"R_PPC_SECTOFF_HI", Const, 0},
-		{"R_PPC_SECTOFF_LO", Const, 0},
-		{"R_PPC_TLS", Const, 0},
-		{"R_PPC_TPREL16", Const, 0},
-		{"R_PPC_TPREL16_HA", Const, 0},
-		{"R_PPC_TPREL16_HI", Const, 0},
-		{"R_PPC_TPREL16_LO", Const, 0},
-		{"R_PPC_TPREL32", Const, 0},
-		{"R_PPC_UADDR16", Const, 0},
-		{"R_PPC_UADDR32", Const, 0},
-		{"R_RISCV", Type, 11},
-		{"R_RISCV_32", Const, 11},
-		{"R_RISCV_32_PCREL", Const, 12},
-		{"R_RISCV_64", Const, 11},
-		{"R_RISCV_ADD16", Const, 11},
-		{"R_RISCV_ADD32", Const, 11},
-		{"R_RISCV_ADD64", Const, 11},
-		{"R_RISCV_ADD8", Const, 11},
-		{"R_RISCV_ALIGN", Const, 11},
-		{"R_RISCV_BRANCH", Const, 11},
-		{"R_RISCV_CALL", Const, 11},
-		{"R_RISCV_CALL_PLT", Const, 11},
-		{"R_RISCV_COPY", Const, 11},
-		{"R_RISCV_GNU_VTENTRY", Const, 11},
-		{"R_RISCV_GNU_VTINHERIT", Const, 11},
-		{"R_RISCV_GOT_HI20", Const, 11},
-		{"R_RISCV_GPREL_I", Const, 11},
-		{"R_RISCV_GPREL_S", Const, 11},
-		{"R_RISCV_HI20", Const, 11},
-		{"R_RISCV_JAL", Const, 11},
-		{"R_RISCV_JUMP_SLOT", Const, 11},
-		{"R_RISCV_LO12_I", Const, 11},
-		{"R_RISCV_LO12_S", Const, 11},
-		{"R_RISCV_NONE", Const, 11},
-		{"R_RISCV_PCREL_HI20", Const, 11},
-		{"R_RISCV_PCREL_LO12_I", Const, 11},
-		{"R_RISCV_PCREL_LO12_S", Const, 11},
-		{"R_RISCV_RELATIVE", Const, 11},
-		{"R_RISCV_RELAX", Const, 11},
-		{"R_RISCV_RVC_BRANCH", Const, 11},
-		{"R_RISCV_RVC_JUMP", Const, 11},
-		{"R_RISCV_RVC_LUI", Const, 11},
-		{"R_RISCV_SET16", Const, 11},
-		{"R_RISCV_SET32", Const, 11},
-		{"R_RISCV_SET6", Const, 11},
-		{"R_RISCV_SET8", Const, 11},
-		{"R_RISCV_SUB16", Const, 11},
-		{"R_RISCV_SUB32", Const, 11},
-		{"R_RISCV_SUB6", Const, 11},
-		{"R_RISCV_SUB64", Const, 11},
-		{"R_RISCV_SUB8", Const, 11},
-		{"R_RISCV_TLS_DTPMOD32", Const, 11},
-		{"R_RISCV_TLS_DTPMOD64", Const, 11},
-		{"R_RISCV_TLS_DTPREL32", Const, 11},
-		{"R_RISCV_TLS_DTPREL64", Const, 11},
-		{"R_RISCV_TLS_GD_HI20", Const, 11},
-		{"R_RISCV_TLS_GOT_HI20", Const, 11},
-		{"R_RISCV_TLS_TPREL32", Const, 11},
-		{"R_RISCV_TLS_TPREL64", Const, 11},
-		{"R_RISCV_TPREL_ADD", Const, 11},
-		{"R_RISCV_TPREL_HI20", Const, 11},
-		{"R_RISCV_TPREL_I", Const, 11},
-		{"R_RISCV_TPREL_LO12_I", Const, 11},
-		{"R_RISCV_TPREL_LO12_S", Const, 11},
-		{"R_RISCV_TPREL_S", Const, 11},
-		{"R_SPARC", Type, 0},
-		{"R_SPARC_10", Const, 0},
-		{"R_SPARC_11", Const, 0},
-		{"R_SPARC_13", Const, 0},
-		{"R_SPARC_16", Const, 0},
-		{"R_SPARC_22", Const, 0},
-		{"R_SPARC_32", Const, 0},
-		{"R_SPARC_5", Const, 0},
-		{"R_SPARC_6", Const, 0},
-		{"R_SPARC_64", Const, 0},
-		{"R_SPARC_7", Const, 0},
-		{"R_SPARC_8", Const, 0},
-		{"R_SPARC_COPY", Const, 0},
-		{"R_SPARC_DISP16", Const, 0},
-		{"R_SPARC_DISP32", Const, 0},
-		{"R_SPARC_DISP64", Const, 0},
-		{"R_SPARC_DISP8", Const, 0},
-		{"R_SPARC_GLOB_DAT", Const, 0},
-		{"R_SPARC_GLOB_JMP", Const, 0},
-		{"R_SPARC_GOT10", Const, 0},
-		{"R_SPARC_GOT13", Const, 0},
-		{"R_SPARC_GOT22", Const, 0},
-		{"R_SPARC_H44", Const, 0},
-		{"R_SPARC_HH22", Const, 0},
-		{"R_SPARC_HI22", Const, 0},
-		{"R_SPARC_HIPLT22", Const, 0},
-		{"R_SPARC_HIX22", Const, 0},
-		{"R_SPARC_HM10", Const, 0},
-		{"R_SPARC_JMP_SLOT", Const, 0},
-		{"R_SPARC_L44", Const, 0},
-		{"R_SPARC_LM22", Const, 0},
-		{"R_SPARC_LO10", Const, 0},
-		{"R_SPARC_LOPLT10", Const, 0},
-		{"R_SPARC_LOX10", Const, 0},
-		{"R_SPARC_M44", Const, 0},
-		{"R_SPARC_NONE", Const, 0},
-		{"R_SPARC_OLO10", Const, 0},
-		{"R_SPARC_PC10", Const, 0},
-		{"R_SPARC_PC22", Const, 0},
-		{"R_SPARC_PCPLT10", Const, 0},
-		{"R_SPARC_PCPLT22", Const, 0},
-		{"R_SPARC_PCPLT32", Const, 0},
-		{"R_SPARC_PC_HH22", Const, 0},
-		{"R_SPARC_PC_HM10", Const, 0},
-		{"R_SPARC_PC_LM22", Const, 0},
-		{"R_SPARC_PLT32", Const, 0},
-		{"R_SPARC_PLT64", Const, 0},
-		{"R_SPARC_REGISTER", Const, 0},
-		{"R_SPARC_RELATIVE", Const, 0},
-		{"R_SPARC_UA16", Const, 0},
-		{"R_SPARC_UA32", Const, 0},
-		{"R_SPARC_UA64", Const, 0},
-		{"R_SPARC_WDISP16", Const, 0},
-		{"R_SPARC_WDISP19", Const, 0},
-		{"R_SPARC_WDISP22", Const, 0},
-		{"R_SPARC_WDISP30", Const, 0},
-		{"R_SPARC_WPLT30", Const, 0},
-		{"R_SYM32", Func, 0},
-		{"R_SYM64", Func, 0},
-		{"R_TYPE32", Func, 0},
-		{"R_TYPE64", Func, 0},
-		{"R_X86_64", Type, 0},
-		{"R_X86_64_16", Const, 0},
-		{"R_X86_64_32", Const, 0},
-		{"R_X86_64_32S", Const, 0},
-		{"R_X86_64_64", Const, 0},
-		{"R_X86_64_8", Const, 0},
-		{"R_X86_64_COPY", Const, 0},
-		{"R_X86_64_DTPMOD64", Const, 0},
-		{"R_X86_64_DTPOFF32", Const, 0},
-		{"R_X86_64_DTPOFF64", Const, 0},
-		{"R_X86_64_GLOB_DAT", Const, 0},
-		{"R_X86_64_GOT32", Const, 0},
-		{"R_X86_64_GOT64", Const, 10},
-		{"R_X86_64_GOTOFF64", Const, 10},
-		{"R_X86_64_GOTPC32", Const, 10},
-		{"R_X86_64_GOTPC32_TLSDESC", Const, 10},
-		{"R_X86_64_GOTPC64", Const, 10},
-		{"R_X86_64_GOTPCREL", Const, 0},
-		{"R_X86_64_GOTPCREL64", Const, 10},
-		{"R_X86_64_GOTPCRELX", Const, 10},
-		{"R_X86_64_GOTPLT64", Const, 10},
-		{"R_X86_64_GOTTPOFF", Const, 0},
-		{"R_X86_64_IRELATIVE", Const, 10},
-		{"R_X86_64_JMP_SLOT", Const, 0},
-		{"R_X86_64_NONE", Const, 0},
-		{"R_X86_64_PC16", Const, 0},
-		{"R_X86_64_PC32", Const, 0},
-		{"R_X86_64_PC32_BND", Const, 10},
-		{"R_X86_64_PC64", Const, 10},
-		{"R_X86_64_PC8", Const, 0},
-		{"R_X86_64_PLT32", Const, 0},
-		{"R_X86_64_PLT32_BND", Const, 10},
-		{"R_X86_64_PLTOFF64", Const, 10},
-		{"R_X86_64_RELATIVE", Const, 0},
-		{"R_X86_64_RELATIVE64", Const, 10},
-		{"R_X86_64_REX_GOTPCRELX", Const, 10},
-		{"R_X86_64_SIZE32", Const, 10},
-		{"R_X86_64_SIZE64", Const, 10},
-		{"R_X86_64_TLSDESC", Const, 10},
-		{"R_X86_64_TLSDESC_CALL", Const, 10},
-		{"R_X86_64_TLSGD", Const, 0},
-		{"R_X86_64_TLSLD", Const, 0},
-		{"R_X86_64_TPOFF32", Const, 0},
-		{"R_X86_64_TPOFF64", Const, 0},
-		{"Rel32", Type, 0},
-		{"Rel32.Info", Field, 0},
-		{"Rel32.Off", Field, 0},
-		{"Rel64", Type, 0},
-		{"Rel64.Info", Field, 0},
-		{"Rel64.Off", Field, 0},
-		{"Rela32", Type, 0},
-		{"Rela32.Addend", Field, 0},
-		{"Rela32.Info", Field, 0},
-		{"Rela32.Off", Field, 0},
-		{"Rela64", Type, 0},
-		{"Rela64.Addend", Field, 0},
-		{"Rela64.Info", Field, 0},
-		{"Rela64.Off", Field, 0},
-		{"SHF_ALLOC", Const, 0},
-		{"SHF_COMPRESSED", Const, 6},
-		{"SHF_EXECINSTR", Const, 0},
-		{"SHF_GROUP", Const, 0},
-		{"SHF_INFO_LINK", Const, 0},
-		{"SHF_LINK_ORDER", Const, 0},
-		{"SHF_MASKOS", Const, 0},
-		{"SHF_MASKPROC", Const, 0},
-		{"SHF_MERGE", Const, 0},
-		{"SHF_OS_NONCONFORMING", Const, 0},
-		{"SHF_STRINGS", Const, 0},
-		{"SHF_TLS", Const, 0},
-		{"SHF_WRITE", Const, 0},
-		{"SHN_ABS", Const, 0},
-		{"SHN_COMMON", Const, 0},
-		{"SHN_HIOS", Const, 0},
-		{"SHN_HIPROC", Const, 0},
-		{"SHN_HIRESERVE", Const, 0},
-		{"SHN_LOOS", Const, 0},
-		{"SHN_LOPROC", Const, 0},
-		{"SHN_LORESERVE", Const, 0},
-		{"SHN_UNDEF", Const, 0},
-		{"SHN_XINDEX", Const, 0},
-		{"SHT_DYNAMIC", Const, 0},
-		{"SHT_DYNSYM", Const, 0},
-		{"SHT_FINI_ARRAY", Const, 0},
-		{"SHT_GNU_ATTRIBUTES", Const, 0},
-		{"SHT_GNU_HASH", Const, 0},
-		{"SHT_GNU_LIBLIST", Const, 0},
-		{"SHT_GNU_VERDEF", Const, 0},
-		{"SHT_GNU_VERNEED", Const, 0},
-		{"SHT_GNU_VERSYM", Const, 0},
-		{"SHT_GROUP", Const, 0},
-		{"SHT_HASH", Const, 0},
-		{"SHT_HIOS", Const, 0},
-		{"SHT_HIPROC", Const, 0},
-		{"SHT_HIUSER", Const, 0},
-		{"SHT_INIT_ARRAY", Const, 0},
-		{"SHT_LOOS", Const, 0},
-		{"SHT_LOPROC", Const, 0},
-		{"SHT_LOUSER", Const, 0},
-		{"SHT_MIPS_ABIFLAGS", Const, 17},
-		{"SHT_NOBITS", Const, 0},
-		{"SHT_NOTE", Const, 0},
-		{"SHT_NULL", Const, 0},
-		{"SHT_PREINIT_ARRAY", Const, 0},
-		{"SHT_PROGBITS", Const, 0},
-		{"SHT_REL", Const, 0},
-		{"SHT_RELA", Const, 0},
-		{"SHT_SHLIB", Const, 0},
-		{"SHT_STRTAB", Const, 0},
-		{"SHT_SYMTAB", Const, 0},
-		{"SHT_SYMTAB_SHNDX", Const, 0},
-		{"STB_GLOBAL", Const, 0},
-		{"STB_HIOS", Const, 0},
-		{"STB_HIPROC", Const, 0},
-		{"STB_LOCAL", Const, 0},
-		{"STB_LOOS", Const, 0},
-		{"STB_LOPROC", Const, 0},
-		{"STB_WEAK", Const, 0},
-		{"STT_COMMON", Const, 0},
-		{"STT_FILE", Const, 0},
-		{"STT_FUNC", Const, 0},
-		{"STT_GNU_IFUNC", Const, 23},
-		{"STT_HIOS", Const, 0},
-		{"STT_HIPROC", Const, 0},
-		{"STT_LOOS", Const, 0},
-		{"STT_LOPROC", Const, 0},
-		{"STT_NOTYPE", Const, 0},
-		{"STT_OBJECT", Const, 0},
-		{"STT_RELC", Const, 23},
-		{"STT_SECTION", Const, 0},
-		{"STT_SRELC", Const, 23},
-		{"STT_TLS", Const, 0},
-		{"STV_DEFAULT", Const, 0},
-		{"STV_HIDDEN", Const, 0},
-		{"STV_INTERNAL", Const, 0},
-		{"STV_PROTECTED", Const, 0},
-		{"ST_BIND", Func, 0},
-		{"ST_INFO", Func, 0},
-		{"ST_TYPE", Func, 0},
-		{"ST_VISIBILITY", Func, 0},
-		{"Section", Type, 0},
-		{"Section.ReaderAt", Field, 0},
-		{"Section.SectionHeader", Field, 0},
-		{"Section32", Type, 0},
-		{"Section32.Addr", Field, 0},
-		{"Section32.Addralign", Field, 0},
-		{"Section32.Entsize", Field, 0},
-		{"Section32.Flags", Field, 0},
-		{"Section32.Info", Field, 0},
-		{"Section32.Link", Field, 0},
-		{"Section32.Name", Field, 0},
-		{"Section32.Off", Field, 0},
-		{"Section32.Size", Field, 0},
-		{"Section32.Type", Field, 0},
-		{"Section64", Type, 0},
-		{"Section64.Addr", Field, 0},
-		{"Section64.Addralign", Field, 0},
-		{"Section64.Entsize", Field, 0},
-		{"Section64.Flags", Field, 0},
-		{"Section64.Info", Field, 0},
-		{"Section64.Link", Field, 0},
-		{"Section64.Name", Field, 0},
-		{"Section64.Off", Field, 0},
-		{"Section64.Size", Field, 0},
-		{"Section64.Type", Field, 0},
-		{"SectionFlag", Type, 0},
-		{"SectionHeader", Type, 0},
-		{"SectionHeader.Addr", Field, 0},
-		{"SectionHeader.Addralign", Field, 0},
-		{"SectionHeader.Entsize", Field, 0},
-		{"SectionHeader.FileSize", Field, 6},
-		{"SectionHeader.Flags", Field, 0},
-		{"SectionHeader.Info", Field, 0},
-		{"SectionHeader.Link", Field, 0},
-		{"SectionHeader.Name", Field, 0},
-		{"SectionHeader.Offset", Field, 0},
-		{"SectionHeader.Size", Field, 0},
-		{"SectionHeader.Type", Field, 0},
-		{"SectionIndex", Type, 0},
-		{"SectionType", Type, 0},
-		{"Sym32", Type, 0},
-		{"Sym32.Info", Field, 0},
-		{"Sym32.Name", Field, 0},
-		{"Sym32.Other", Field, 0},
-		{"Sym32.Shndx", Field, 0},
-		{"Sym32.Size", Field, 0},
-		{"Sym32.Value", Field, 0},
-		{"Sym32Size", Const, 0},
-		{"Sym64", Type, 0},
-		{"Sym64.Info", Field, 0},
-		{"Sym64.Name", Field, 0},
-		{"Sym64.Other", Field, 0},
-		{"Sym64.Shndx", Field, 0},
-		{"Sym64.Size", Field, 0},
-		{"Sym64.Value", Field, 0},
-		{"Sym64Size", Const, 0},
-		{"SymBind", Type, 0},
-		{"SymType", Type, 0},
-		{"SymVis", Type, 0},
-		{"Symbol", Type, 0},
-		{"Symbol.HasVersion", Field, 24},
-		{"Symbol.Info", Field, 0},
-		{"Symbol.Library", Field, 13},
-		{"Symbol.Name", Field, 0},
-		{"Symbol.Other", Field, 0},
-		{"Symbol.Section", Field, 0},
-		{"Symbol.Size", Field, 0},
-		{"Symbol.Value", Field, 0},
-		{"Symbol.Version", Field, 13},
-		{"Symbol.VersionIndex", Field, 24},
-		{"Type", Type, 0},
-		{"VER_FLG_BASE", Const, 24},
-		{"VER_FLG_INFO", Const, 24},
-		{"VER_FLG_WEAK", Const, 24},
-		{"Version", Type, 0},
-		{"VersionIndex", Type, 24},
+		{"(*File).Close", Method, 0, ""},
+		{"(*File).DWARF", Method, 0, ""},
+		{"(*File).DynString", Method, 1, ""},
+		{"(*File).DynValue", Method, 21, ""},
+		{"(*File).DynamicSymbols", Method, 4, ""},
+		{"(*File).DynamicVersionNeeds", Method, 24, ""},
+		{"(*File).DynamicVersions", Method, 24, ""},
+		{"(*File).ImportedLibraries", Method, 0, ""},
+		{"(*File).ImportedSymbols", Method, 0, ""},
+		{"(*File).Section", Method, 0, ""},
+		{"(*File).SectionByType", Method, 0, ""},
+		{"(*File).Symbols", Method, 0, ""},
+		{"(*FormatError).Error", Method, 0, ""},
+		{"(*Prog).Open", Method, 0, ""},
+		{"(*Section).Data", Method, 0, ""},
+		{"(*Section).Open", Method, 0, ""},
+		{"(Class).GoString", Method, 0, ""},
+		{"(Class).String", Method, 0, ""},
+		{"(CompressionType).GoString", Method, 6, ""},
+		{"(CompressionType).String", Method, 6, ""},
+		{"(Data).GoString", Method, 0, ""},
+		{"(Data).String", Method, 0, ""},
+		{"(DynFlag).GoString", Method, 0, ""},
+		{"(DynFlag).String", Method, 0, ""},
+		{"(DynFlag1).GoString", Method, 21, ""},
+		{"(DynFlag1).String", Method, 21, ""},
+		{"(DynTag).GoString", Method, 0, ""},
+		{"(DynTag).String", Method, 0, ""},
+		{"(Machine).GoString", Method, 0, ""},
+		{"(Machine).String", Method, 0, ""},
+		{"(NType).GoString", Method, 0, ""},
+		{"(NType).String", Method, 0, ""},
+		{"(OSABI).GoString", Method, 0, ""},
+		{"(OSABI).String", Method, 0, ""},
+		{"(Prog).ReadAt", Method, 0, ""},
+		{"(ProgFlag).GoString", Method, 0, ""},
+		{"(ProgFlag).String", Method, 0, ""},
+		{"(ProgType).GoString", Method, 0, ""},
+		{"(ProgType).String", Method, 0, ""},
+		{"(R_386).GoString", Method, 0, ""},
+		{"(R_386).String", Method, 0, ""},
+		{"(R_390).GoString", Method, 7, ""},
+		{"(R_390).String", Method, 7, ""},
+		{"(R_AARCH64).GoString", Method, 4, ""},
+		{"(R_AARCH64).String", Method, 4, ""},
+		{"(R_ALPHA).GoString", Method, 0, ""},
+		{"(R_ALPHA).String", Method, 0, ""},
+		{"(R_ARM).GoString", Method, 0, ""},
+		{"(R_ARM).String", Method, 0, ""},
+		{"(R_LARCH).GoString", Method, 19, ""},
+		{"(R_LARCH).String", Method, 19, ""},
+		{"(R_MIPS).GoString", Method, 6, ""},
+		{"(R_MIPS).String", Method, 6, ""},
+		{"(R_PPC).GoString", Method, 0, ""},
+		{"(R_PPC).String", Method, 0, ""},
+		{"(R_PPC64).GoString", Method, 5, ""},
+		{"(R_PPC64).String", Method, 5, ""},
+		{"(R_RISCV).GoString", Method, 11, ""},
+		{"(R_RISCV).String", Method, 11, ""},
+		{"(R_SPARC).GoString", Method, 0, ""},
+		{"(R_SPARC).String", Method, 0, ""},
+		{"(R_X86_64).GoString", Method, 0, ""},
+		{"(R_X86_64).String", Method, 0, ""},
+		{"(Section).ReadAt", Method, 0, ""},
+		{"(SectionFlag).GoString", Method, 0, ""},
+		{"(SectionFlag).String", Method, 0, ""},
+		{"(SectionIndex).GoString", Method, 0, ""},
+		{"(SectionIndex).String", Method, 0, ""},
+		{"(SectionType).GoString", Method, 0, ""},
+		{"(SectionType).String", Method, 0, ""},
+		{"(SymBind).GoString", Method, 0, ""},
+		{"(SymBind).String", Method, 0, ""},
+		{"(SymType).GoString", Method, 0, ""},
+		{"(SymType).String", Method, 0, ""},
+		{"(SymVis).GoString", Method, 0, ""},
+		{"(SymVis).String", Method, 0, ""},
+		{"(Type).GoString", Method, 0, ""},
+		{"(Type).String", Method, 0, ""},
+		{"(Version).GoString", Method, 0, ""},
+		{"(Version).String", Method, 0, ""},
+		{"(VersionIndex).Index", Method, 24, ""},
+		{"(VersionIndex).IsHidden", Method, 24, ""},
+		{"ARM_MAGIC_TRAMP_NUMBER", Const, 0, ""},
+		{"COMPRESS_HIOS", Const, 6, ""},
+		{"COMPRESS_HIPROC", Const, 6, ""},
+		{"COMPRESS_LOOS", Const, 6, ""},
+		{"COMPRESS_LOPROC", Const, 6, ""},
+		{"COMPRESS_ZLIB", Const, 6, ""},
+		{"COMPRESS_ZSTD", Const, 21, ""},
+		{"Chdr32", Type, 6, ""},
+		{"Chdr32.Addralign", Field, 6, ""},
+		{"Chdr32.Size", Field, 6, ""},
+		{"Chdr32.Type", Field, 6, ""},
+		{"Chdr64", Type, 6, ""},
+		{"Chdr64.Addralign", Field, 6, ""},
+		{"Chdr64.Size", Field, 6, ""},
+		{"Chdr64.Type", Field, 6, ""},
+		{"Class", Type, 0, ""},
+		{"CompressionType", Type, 6, ""},
+		{"DF_1_CONFALT", Const, 21, ""},
+		{"DF_1_DIRECT", Const, 21, ""},
+		{"DF_1_DISPRELDNE", Const, 21, ""},
+		{"DF_1_DISPRELPND", Const, 21, ""},
+		{"DF_1_EDITED", Const, 21, ""},
+		{"DF_1_ENDFILTEE", Const, 21, ""},
+		{"DF_1_GLOBAL", Const, 21, ""},
+		{"DF_1_GLOBAUDIT", Const, 21, ""},
+		{"DF_1_GROUP", Const, 21, ""},
+		{"DF_1_IGNMULDEF", Const, 21, ""},
+		{"DF_1_INITFIRST", Const, 21, ""},
+		{"DF_1_INTERPOSE", Const, 21, ""},
+		{"DF_1_KMOD", Const, 21, ""},
+		{"DF_1_LOADFLTR", Const, 21, ""},
+		{"DF_1_NOCOMMON", Const, 21, ""},
+		{"DF_1_NODEFLIB", Const, 21, ""},
+		{"DF_1_NODELETE", Const, 21, ""},
+		{"DF_1_NODIRECT", Const, 21, ""},
+		{"DF_1_NODUMP", Const, 21, ""},
+		{"DF_1_NOHDR", Const, 21, ""},
+		{"DF_1_NOKSYMS", Const, 21, ""},
+		{"DF_1_NOOPEN", Const, 21, ""},
+		{"DF_1_NORELOC", Const, 21, ""},
+		{"DF_1_NOW", Const, 21, ""},
+		{"DF_1_ORIGIN", Const, 21, ""},
+		{"DF_1_PIE", Const, 21, ""},
+		{"DF_1_SINGLETON", Const, 21, ""},
+		{"DF_1_STUB", Const, 21, ""},
+		{"DF_1_SYMINTPOSE", Const, 21, ""},
+		{"DF_1_TRANS", Const, 21, ""},
+		{"DF_1_WEAKFILTER", Const, 21, ""},
+		{"DF_BIND_NOW", Const, 0, ""},
+		{"DF_ORIGIN", Const, 0, ""},
+		{"DF_STATIC_TLS", Const, 0, ""},
+		{"DF_SYMBOLIC", Const, 0, ""},
+		{"DF_TEXTREL", Const, 0, ""},
+		{"DT_ADDRRNGHI", Const, 16, ""},
+		{"DT_ADDRRNGLO", Const, 16, ""},
+		{"DT_AUDIT", Const, 16, ""},
+		{"DT_AUXILIARY", Const, 16, ""},
+		{"DT_BIND_NOW", Const, 0, ""},
+		{"DT_CHECKSUM", Const, 16, ""},
+		{"DT_CONFIG", Const, 16, ""},
+		{"DT_DEBUG", Const, 0, ""},
+		{"DT_DEPAUDIT", Const, 16, ""},
+		{"DT_ENCODING", Const, 0, ""},
+		{"DT_FEATURE", Const, 16, ""},
+		{"DT_FILTER", Const, 16, ""},
+		{"DT_FINI", Const, 0, ""},
+		{"DT_FINI_ARRAY", Const, 0, ""},
+		{"DT_FINI_ARRAYSZ", Const, 0, ""},
+		{"DT_FLAGS", Const, 0, ""},
+		{"DT_FLAGS_1", Const, 16, ""},
+		{"DT_GNU_CONFLICT", Const, 16, ""},
+		{"DT_GNU_CONFLICTSZ", Const, 16, ""},
+		{"DT_GNU_HASH", Const, 16, ""},
+		{"DT_GNU_LIBLIST", Const, 16, ""},
+		{"DT_GNU_LIBLISTSZ", Const, 16, ""},
+		{"DT_GNU_PRELINKED", Const, 16, ""},
+		{"DT_HASH", Const, 0, ""},
+		{"DT_HIOS", Const, 0, ""},
+		{"DT_HIPROC", Const, 0, ""},
+		{"DT_INIT", Const, 0, ""},
+		{"DT_INIT_ARRAY", Const, 0, ""},
+		{"DT_INIT_ARRAYSZ", Const, 0, ""},
+		{"DT_JMPREL", Const, 0, ""},
+		{"DT_LOOS", Const, 0, ""},
+		{"DT_LOPROC", Const, 0, ""},
+		{"DT_MIPS_AUX_DYNAMIC", Const, 16, ""},
+		{"DT_MIPS_BASE_ADDRESS", Const, 16, ""},
+		{"DT_MIPS_COMPACT_SIZE", Const, 16, ""},
+		{"DT_MIPS_CONFLICT", Const, 16, ""},
+		{"DT_MIPS_CONFLICTNO", Const, 16, ""},
+		{"DT_MIPS_CXX_FLAGS", Const, 16, ""},
+		{"DT_MIPS_DELTA_CLASS", Const, 16, ""},
+		{"DT_MIPS_DELTA_CLASSSYM", Const, 16, ""},
+		{"DT_MIPS_DELTA_CLASSSYM_NO", Const, 16, ""},
+		{"DT_MIPS_DELTA_CLASS_NO", Const, 16, ""},
+		{"DT_MIPS_DELTA_INSTANCE", Const, 16, ""},
+		{"DT_MIPS_DELTA_INSTANCE_NO", Const, 16, ""},
+		{"DT_MIPS_DELTA_RELOC", Const, 16, ""},
+		{"DT_MIPS_DELTA_RELOC_NO", Const, 16, ""},
+		{"DT_MIPS_DELTA_SYM", Const, 16, ""},
+		{"DT_MIPS_DELTA_SYM_NO", Const, 16, ""},
+		{"DT_MIPS_DYNSTR_ALIGN", Const, 16, ""},
+		{"DT_MIPS_FLAGS", Const, 16, ""},
+		{"DT_MIPS_GOTSYM", Const, 16, ""},
+		{"DT_MIPS_GP_VALUE", Const, 16, ""},
+		{"DT_MIPS_HIDDEN_GOTIDX", Const, 16, ""},
+		{"DT_MIPS_HIPAGENO", Const, 16, ""},
+		{"DT_MIPS_ICHECKSUM", Const, 16, ""},
+		{"DT_MIPS_INTERFACE", Const, 16, ""},
+		{"DT_MIPS_INTERFACE_SIZE", Const, 16, ""},
+		{"DT_MIPS_IVERSION", Const, 16, ""},
+		{"DT_MIPS_LIBLIST", Const, 16, ""},
+		{"DT_MIPS_LIBLISTNO", Const, 16, ""},
+		{"DT_MIPS_LOCALPAGE_GOTIDX", Const, 16, ""},
+		{"DT_MIPS_LOCAL_GOTIDX", Const, 16, ""},
+		{"DT_MIPS_LOCAL_GOTNO", Const, 16, ""},
+		{"DT_MIPS_MSYM", Const, 16, ""},
+		{"DT_MIPS_OPTIONS", Const, 16, ""},
+		{"DT_MIPS_PERF_SUFFIX", Const, 16, ""},
+		{"DT_MIPS_PIXIE_INIT", Const, 16, ""},
+		{"DT_MIPS_PLTGOT", Const, 16, ""},
+		{"DT_MIPS_PROTECTED_GOTIDX", Const, 16, ""},
+		{"DT_MIPS_RLD_MAP", Const, 16, ""},
+		{"DT_MIPS_RLD_MAP_REL", Const, 16, ""},
+		{"DT_MIPS_RLD_TEXT_RESOLVE_ADDR", Const, 16, ""},
+		{"DT_MIPS_RLD_VERSION", Const, 16, ""},
+		{"DT_MIPS_RWPLT", Const, 16, ""},
+		{"DT_MIPS_SYMBOL_LIB", Const, 16, ""},
+		{"DT_MIPS_SYMTABNO", Const, 16, ""},
+		{"DT_MIPS_TIME_STAMP", Const, 16, ""},
+		{"DT_MIPS_UNREFEXTNO", Const, 16, ""},
+		{"DT_MOVEENT", Const, 16, ""},
+		{"DT_MOVESZ", Const, 16, ""},
+		{"DT_MOVETAB", Const, 16, ""},
+		{"DT_NEEDED", Const, 0, ""},
+		{"DT_NULL", Const, 0, ""},
+		{"DT_PLTGOT", Const, 0, ""},
+		{"DT_PLTPAD", Const, 16, ""},
+		{"DT_PLTPADSZ", Const, 16, ""},
+		{"DT_PLTREL", Const, 0, ""},
+		{"DT_PLTRELSZ", Const, 0, ""},
+		{"DT_POSFLAG_1", Const, 16, ""},
+		{"DT_PPC64_GLINK", Const, 16, ""},
+		{"DT_PPC64_OPD", Const, 16, ""},
+		{"DT_PPC64_OPDSZ", Const, 16, ""},
+		{"DT_PPC64_OPT", Const, 16, ""},
+		{"DT_PPC_GOT", Const, 16, ""},
+		{"DT_PPC_OPT", Const, 16, ""},
+		{"DT_PREINIT_ARRAY", Const, 0, ""},
+		{"DT_PREINIT_ARRAYSZ", Const, 0, ""},
+		{"DT_REL", Const, 0, ""},
+		{"DT_RELA", Const, 0, ""},
+		{"DT_RELACOUNT", Const, 16, ""},
+		{"DT_RELAENT", Const, 0, ""},
+		{"DT_RELASZ", Const, 0, ""},
+		{"DT_RELCOUNT", Const, 16, ""},
+		{"DT_RELENT", Const, 0, ""},
+		{"DT_RELSZ", Const, 0, ""},
+		{"DT_RPATH", Const, 0, ""},
+		{"DT_RUNPATH", Const, 0, ""},
+		{"DT_SONAME", Const, 0, ""},
+		{"DT_SPARC_REGISTER", Const, 16, ""},
+		{"DT_STRSZ", Const, 0, ""},
+		{"DT_STRTAB", Const, 0, ""},
+		{"DT_SYMBOLIC", Const, 0, ""},
+		{"DT_SYMENT", Const, 0, ""},
+		{"DT_SYMINENT", Const, 16, ""},
+		{"DT_SYMINFO", Const, 16, ""},
+		{"DT_SYMINSZ", Const, 16, ""},
+		{"DT_SYMTAB", Const, 0, ""},
+		{"DT_SYMTAB_SHNDX", Const, 16, ""},
+		{"DT_TEXTREL", Const, 0, ""},
+		{"DT_TLSDESC_GOT", Const, 16, ""},
+		{"DT_TLSDESC_PLT", Const, 16, ""},
+		{"DT_USED", Const, 16, ""},
+		{"DT_VALRNGHI", Const, 16, ""},
+		{"DT_VALRNGLO", Const, 16, ""},
+		{"DT_VERDEF", Const, 16, ""},
+		{"DT_VERDEFNUM", Const, 16, ""},
+		{"DT_VERNEED", Const, 0, ""},
+		{"DT_VERNEEDNUM", Const, 0, ""},
+		{"DT_VERSYM", Const, 0, ""},
+		{"Data", Type, 0, ""},
+		{"Dyn32", Type, 0, ""},
+		{"Dyn32.Tag", Field, 0, ""},
+		{"Dyn32.Val", Field, 0, ""},
+		{"Dyn64", Type, 0, ""},
+		{"Dyn64.Tag", Field, 0, ""},
+		{"Dyn64.Val", Field, 0, ""},
+		{"DynFlag", Type, 0, ""},
+		{"DynFlag1", Type, 21, ""},
+		{"DynTag", Type, 0, ""},
+		{"DynamicVersion", Type, 24, ""},
+		{"DynamicVersion.Deps", Field, 24, ""},
+		{"DynamicVersion.Flags", Field, 24, ""},
+		{"DynamicVersion.Index", Field, 24, ""},
+		{"DynamicVersion.Name", Field, 24, ""},
+		{"DynamicVersionDep", Type, 24, ""},
+		{"DynamicVersionDep.Dep", Field, 24, ""},
+		{"DynamicVersionDep.Flags", Field, 24, ""},
+		{"DynamicVersionDep.Index", Field, 24, ""},
+		{"DynamicVersionFlag", Type, 24, ""},
+		{"DynamicVersionNeed", Type, 24, ""},
+		{"DynamicVersionNeed.Name", Field, 24, ""},
+		{"DynamicVersionNeed.Needs", Field, 24, ""},
+		{"EI_ABIVERSION", Const, 0, ""},
+		{"EI_CLASS", Const, 0, ""},
+		{"EI_DATA", Const, 0, ""},
+		{"EI_NIDENT", Const, 0, ""},
+		{"EI_OSABI", Const, 0, ""},
+		{"EI_PAD", Const, 0, ""},
+		{"EI_VERSION", Const, 0, ""},
+		{"ELFCLASS32", Const, 0, ""},
+		{"ELFCLASS64", Const, 0, ""},
+		{"ELFCLASSNONE", Const, 0, ""},
+		{"ELFDATA2LSB", Const, 0, ""},
+		{"ELFDATA2MSB", Const, 0, ""},
+		{"ELFDATANONE", Const, 0, ""},
+		{"ELFMAG", Const, 0, ""},
+		{"ELFOSABI_86OPEN", Const, 0, ""},
+		{"ELFOSABI_AIX", Const, 0, ""},
+		{"ELFOSABI_ARM", Const, 0, ""},
+		{"ELFOSABI_AROS", Const, 11, ""},
+		{"ELFOSABI_CLOUDABI", Const, 11, ""},
+		{"ELFOSABI_FENIXOS", Const, 11, ""},
+		{"ELFOSABI_FREEBSD", Const, 0, ""},
+		{"ELFOSABI_HPUX", Const, 0, ""},
+		{"ELFOSABI_HURD", Const, 0, ""},
+		{"ELFOSABI_IRIX", Const, 0, ""},
+		{"ELFOSABI_LINUX", Const, 0, ""},
+		{"ELFOSABI_MODESTO", Const, 0, ""},
+		{"ELFOSABI_NETBSD", Const, 0, ""},
+		{"ELFOSABI_NONE", Const, 0, ""},
+		{"ELFOSABI_NSK", Const, 0, ""},
+		{"ELFOSABI_OPENBSD", Const, 0, ""},
+		{"ELFOSABI_OPENVMS", Const, 0, ""},
+		{"ELFOSABI_SOLARIS", Const, 0, ""},
+		{"ELFOSABI_STANDALONE", Const, 0, ""},
+		{"ELFOSABI_TRU64", Const, 0, ""},
+		{"EM_386", Const, 0, ""},
+		{"EM_486", Const, 0, ""},
+		{"EM_56800EX", Const, 11, ""},
+		{"EM_68HC05", Const, 11, ""},
+		{"EM_68HC08", Const, 11, ""},
+		{"EM_68HC11", Const, 11, ""},
+		{"EM_68HC12", Const, 0, ""},
+		{"EM_68HC16", Const, 11, ""},
+		{"EM_68K", Const, 0, ""},
+		{"EM_78KOR", Const, 11, ""},
+		{"EM_8051", Const, 11, ""},
+		{"EM_860", Const, 0, ""},
+		{"EM_88K", Const, 0, ""},
+		{"EM_960", Const, 0, ""},
+		{"EM_AARCH64", Const, 4, ""},
+		{"EM_ALPHA", Const, 0, ""},
+		{"EM_ALPHA_STD", Const, 0, ""},
+		{"EM_ALTERA_NIOS2", Const, 11, ""},
+		{"EM_AMDGPU", Const, 11, ""},
+		{"EM_ARC", Const, 0, ""},
+		{"EM_ARCA", Const, 11, ""},
+		{"EM_ARC_COMPACT", Const, 11, ""},
+		{"EM_ARC_COMPACT2", Const, 11, ""},
+		{"EM_ARM", Const, 0, ""},
+		{"EM_AVR", Const, 11, ""},
+		{"EM_AVR32", Const, 11, ""},
+		{"EM_BA1", Const, 11, ""},
+		{"EM_BA2", Const, 11, ""},
+		{"EM_BLACKFIN", Const, 11, ""},
+		{"EM_BPF", Const, 11, ""},
+		{"EM_C166", Const, 11, ""},
+		{"EM_CDP", Const, 11, ""},
+		{"EM_CE", Const, 11, ""},
+		{"EM_CLOUDSHIELD", Const, 11, ""},
+		{"EM_COGE", Const, 11, ""},
+		{"EM_COLDFIRE", Const, 0, ""},
+		{"EM_COOL", Const, 11, ""},
+		{"EM_COREA_1ST", Const, 11, ""},
+		{"EM_COREA_2ND", Const, 11, ""},
+		{"EM_CR", Const, 11, ""},
+		{"EM_CR16", Const, 11, ""},
+		{"EM_CRAYNV2", Const, 11, ""},
+		{"EM_CRIS", Const, 11, ""},
+		{"EM_CRX", Const, 11, ""},
+		{"EM_CSR_KALIMBA", Const, 11, ""},
+		{"EM_CUDA", Const, 11, ""},
+		{"EM_CYPRESS_M8C", Const, 11, ""},
+		{"EM_D10V", Const, 11, ""},
+		{"EM_D30V", Const, 11, ""},
+		{"EM_DSP24", Const, 11, ""},
+		{"EM_DSPIC30F", Const, 11, ""},
+		{"EM_DXP", Const, 11, ""},
+		{"EM_ECOG1", Const, 11, ""},
+		{"EM_ECOG16", Const, 11, ""},
+		{"EM_ECOG1X", Const, 11, ""},
+		{"EM_ECOG2", Const, 11, ""},
+		{"EM_ETPU", Const, 11, ""},
+		{"EM_EXCESS", Const, 11, ""},
+		{"EM_F2MC16", Const, 11, ""},
+		{"EM_FIREPATH", Const, 11, ""},
+		{"EM_FR20", Const, 0, ""},
+		{"EM_FR30", Const, 11, ""},
+		{"EM_FT32", Const, 11, ""},
+		{"EM_FX66", Const, 11, ""},
+		{"EM_H8S", Const, 0, ""},
+		{"EM_H8_300", Const, 0, ""},
+		{"EM_H8_300H", Const, 0, ""},
+		{"EM_H8_500", Const, 0, ""},
+		{"EM_HUANY", Const, 11, ""},
+		{"EM_IA_64", Const, 0, ""},
+		{"EM_INTEL205", Const, 11, ""},
+		{"EM_INTEL206", Const, 11, ""},
+		{"EM_INTEL207", Const, 11, ""},
+		{"EM_INTEL208", Const, 11, ""},
+		{"EM_INTEL209", Const, 11, ""},
+		{"EM_IP2K", Const, 11, ""},
+		{"EM_JAVELIN", Const, 11, ""},
+		{"EM_K10M", Const, 11, ""},
+		{"EM_KM32", Const, 11, ""},
+		{"EM_KMX16", Const, 11, ""},
+		{"EM_KMX32", Const, 11, ""},
+		{"EM_KMX8", Const, 11, ""},
+		{"EM_KVARC", Const, 11, ""},
+		{"EM_L10M", Const, 11, ""},
+		{"EM_LANAI", Const, 11, ""},
+		{"EM_LATTICEMICO32", Const, 11, ""},
+		{"EM_LOONGARCH", Const, 19, ""},
+		{"EM_M16C", Const, 11, ""},
+		{"EM_M32", Const, 0, ""},
+		{"EM_M32C", Const, 11, ""},
+		{"EM_M32R", Const, 11, ""},
+		{"EM_MANIK", Const, 11, ""},
+		{"EM_MAX", Const, 11, ""},
+		{"EM_MAXQ30", Const, 11, ""},
+		{"EM_MCHP_PIC", Const, 11, ""},
+		{"EM_MCST_ELBRUS", Const, 11, ""},
+		{"EM_ME16", Const, 0, ""},
+		{"EM_METAG", Const, 11, ""},
+		{"EM_MICROBLAZE", Const, 11, ""},
+		{"EM_MIPS", Const, 0, ""},
+		{"EM_MIPS_RS3_LE", Const, 0, ""},
+		{"EM_MIPS_RS4_BE", Const, 0, ""},
+		{"EM_MIPS_X", Const, 0, ""},
+		{"EM_MMA", Const, 0, ""},
+		{"EM_MMDSP_PLUS", Const, 11, ""},
+		{"EM_MMIX", Const, 11, ""},
+		{"EM_MN10200", Const, 11, ""},
+		{"EM_MN10300", Const, 11, ""},
+		{"EM_MOXIE", Const, 11, ""},
+		{"EM_MSP430", Const, 11, ""},
+		{"EM_NCPU", Const, 0, ""},
+		{"EM_NDR1", Const, 0, ""},
+		{"EM_NDS32", Const, 11, ""},
+		{"EM_NONE", Const, 0, ""},
+		{"EM_NORC", Const, 11, ""},
+		{"EM_NS32K", Const, 11, ""},
+		{"EM_OPEN8", Const, 11, ""},
+		{"EM_OPENRISC", Const, 11, ""},
+		{"EM_PARISC", Const, 0, ""},
+		{"EM_PCP", Const, 0, ""},
+		{"EM_PDP10", Const, 11, ""},
+		{"EM_PDP11", Const, 11, ""},
+		{"EM_PDSP", Const, 11, ""},
+		{"EM_PJ", Const, 11, ""},
+		{"EM_PPC", Const, 0, ""},
+		{"EM_PPC64", Const, 0, ""},
+		{"EM_PRISM", Const, 11, ""},
+		{"EM_QDSP6", Const, 11, ""},
+		{"EM_R32C", Const, 11, ""},
+		{"EM_RCE", Const, 0, ""},
+		{"EM_RH32", Const, 0, ""},
+		{"EM_RISCV", Const, 11, ""},
+		{"EM_RL78", Const, 11, ""},
+		{"EM_RS08", Const, 11, ""},
+		{"EM_RX", Const, 11, ""},
+		{"EM_S370", Const, 0, ""},
+		{"EM_S390", Const, 0, ""},
+		{"EM_SCORE7", Const, 11, ""},
+		{"EM_SEP", Const, 11, ""},
+		{"EM_SE_C17", Const, 11, ""},
+		{"EM_SE_C33", Const, 11, ""},
+		{"EM_SH", Const, 0, ""},
+		{"EM_SHARC", Const, 11, ""},
+		{"EM_SLE9X", Const, 11, ""},
+		{"EM_SNP1K", Const, 11, ""},
+		{"EM_SPARC", Const, 0, ""},
+		{"EM_SPARC32PLUS", Const, 0, ""},
+		{"EM_SPARCV9", Const, 0, ""},
+		{"EM_ST100", Const, 0, ""},
+		{"EM_ST19", Const, 11, ""},
+		{"EM_ST200", Const, 11, ""},
+		{"EM_ST7", Const, 11, ""},
+		{"EM_ST9PLUS", Const, 11, ""},
+		{"EM_STARCORE", Const, 0, ""},
+		{"EM_STM8", Const, 11, ""},
+		{"EM_STXP7X", Const, 11, ""},
+		{"EM_SVX", Const, 11, ""},
+		{"EM_TILE64", Const, 11, ""},
+		{"EM_TILEGX", Const, 11, ""},
+		{"EM_TILEPRO", Const, 11, ""},
+		{"EM_TINYJ", Const, 0, ""},
+		{"EM_TI_ARP32", Const, 11, ""},
+		{"EM_TI_C2000", Const, 11, ""},
+		{"EM_TI_C5500", Const, 11, ""},
+		{"EM_TI_C6000", Const, 11, ""},
+		{"EM_TI_PRU", Const, 11, ""},
+		{"EM_TMM_GPP", Const, 11, ""},
+		{"EM_TPC", Const, 11, ""},
+		{"EM_TRICORE", Const, 0, ""},
+		{"EM_TRIMEDIA", Const, 11, ""},
+		{"EM_TSK3000", Const, 11, ""},
+		{"EM_UNICORE", Const, 11, ""},
+		{"EM_V800", Const, 0, ""},
+		{"EM_V850", Const, 11, ""},
+		{"EM_VAX", Const, 11, ""},
+		{"EM_VIDEOCORE", Const, 11, ""},
+		{"EM_VIDEOCORE3", Const, 11, ""},
+		{"EM_VIDEOCORE5", Const, 11, ""},
+		{"EM_VISIUM", Const, 11, ""},
+		{"EM_VPP500", Const, 0, ""},
+		{"EM_X86_64", Const, 0, ""},
+		{"EM_XCORE", Const, 11, ""},
+		{"EM_XGATE", Const, 11, ""},
+		{"EM_XIMO16", Const, 11, ""},
+		{"EM_XTENSA", Const, 11, ""},
+		{"EM_Z80", Const, 11, ""},
+		{"EM_ZSP", Const, 11, ""},
+		{"ET_CORE", Const, 0, ""},
+		{"ET_DYN", Const, 0, ""},
+		{"ET_EXEC", Const, 0, ""},
+		{"ET_HIOS", Const, 0, ""},
+		{"ET_HIPROC", Const, 0, ""},
+		{"ET_LOOS", Const, 0, ""},
+		{"ET_LOPROC", Const, 0, ""},
+		{"ET_NONE", Const, 0, ""},
+		{"ET_REL", Const, 0, ""},
+		{"EV_CURRENT", Const, 0, ""},
+		{"EV_NONE", Const, 0, ""},
+		{"ErrNoSymbols", Var, 4, ""},
+		{"File", Type, 0, ""},
+		{"File.FileHeader", Field, 0, ""},
+		{"File.Progs", Field, 0, ""},
+		{"File.Sections", Field, 0, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.ABIVersion", Field, 0, ""},
+		{"FileHeader.ByteOrder", Field, 0, ""},
+		{"FileHeader.Class", Field, 0, ""},
+		{"FileHeader.Data", Field, 0, ""},
+		{"FileHeader.Entry", Field, 1, ""},
+		{"FileHeader.Machine", Field, 0, ""},
+		{"FileHeader.OSABI", Field, 0, ""},
+		{"FileHeader.Type", Field, 0, ""},
+		{"FileHeader.Version", Field, 0, ""},
+		{"FormatError", Type, 0, ""},
+		{"Header32", Type, 0, ""},
+		{"Header32.Ehsize", Field, 0, ""},
+		{"Header32.Entry", Field, 0, ""},
+		{"Header32.Flags", Field, 0, ""},
+		{"Header32.Ident", Field, 0, ""},
+		{"Header32.Machine", Field, 0, ""},
+		{"Header32.Phentsize", Field, 0, ""},
+		{"Header32.Phnum", Field, 0, ""},
+		{"Header32.Phoff", Field, 0, ""},
+		{"Header32.Shentsize", Field, 0, ""},
+		{"Header32.Shnum", Field, 0, ""},
+		{"Header32.Shoff", Field, 0, ""},
+		{"Header32.Shstrndx", Field, 0, ""},
+		{"Header32.Type", Field, 0, ""},
+		{"Header32.Version", Field, 0, ""},
+		{"Header64", Type, 0, ""},
+		{"Header64.Ehsize", Field, 0, ""},
+		{"Header64.Entry", Field, 0, ""},
+		{"Header64.Flags", Field, 0, ""},
+		{"Header64.Ident", Field, 0, ""},
+		{"Header64.Machine", Field, 0, ""},
+		{"Header64.Phentsize", Field, 0, ""},
+		{"Header64.Phnum", Field, 0, ""},
+		{"Header64.Phoff", Field, 0, ""},
+		{"Header64.Shentsize", Field, 0, ""},
+		{"Header64.Shnum", Field, 0, ""},
+		{"Header64.Shoff", Field, 0, ""},
+		{"Header64.Shstrndx", Field, 0, ""},
+		{"Header64.Type", Field, 0, ""},
+		{"Header64.Version", Field, 0, ""},
+		{"ImportedSymbol", Type, 0, ""},
+		{"ImportedSymbol.Library", Field, 0, ""},
+		{"ImportedSymbol.Name", Field, 0, ""},
+		{"ImportedSymbol.Version", Field, 0, ""},
+		{"Machine", Type, 0, ""},
+		{"NT_FPREGSET", Const, 0, ""},
+		{"NT_PRPSINFO", Const, 0, ""},
+		{"NT_PRSTATUS", Const, 0, ""},
+		{"NType", Type, 0, ""},
+		{"NewFile", Func, 0, "func(r io.ReaderAt) (*File, error)"},
+		{"OSABI", Type, 0, ""},
+		{"Open", Func, 0, "func(name string) (*File, error)"},
+		{"PF_MASKOS", Const, 0, ""},
+		{"PF_MASKPROC", Const, 0, ""},
+		{"PF_R", Const, 0, ""},
+		{"PF_W", Const, 0, ""},
+		{"PF_X", Const, 0, ""},
+		{"PT_AARCH64_ARCHEXT", Const, 16, ""},
+		{"PT_AARCH64_UNWIND", Const, 16, ""},
+		{"PT_ARM_ARCHEXT", Const, 16, ""},
+		{"PT_ARM_EXIDX", Const, 16, ""},
+		{"PT_DYNAMIC", Const, 0, ""},
+		{"PT_GNU_EH_FRAME", Const, 16, ""},
+		{"PT_GNU_MBIND_HI", Const, 16, ""},
+		{"PT_GNU_MBIND_LO", Const, 16, ""},
+		{"PT_GNU_PROPERTY", Const, 16, ""},
+		{"PT_GNU_RELRO", Const, 16, ""},
+		{"PT_GNU_STACK", Const, 16, ""},
+		{"PT_HIOS", Const, 0, ""},
+		{"PT_HIPROC", Const, 0, ""},
+		{"PT_INTERP", Const, 0, ""},
+		{"PT_LOAD", Const, 0, ""},
+		{"PT_LOOS", Const, 0, ""},
+		{"PT_LOPROC", Const, 0, ""},
+		{"PT_MIPS_ABIFLAGS", Const, 16, ""},
+		{"PT_MIPS_OPTIONS", Const, 16, ""},
+		{"PT_MIPS_REGINFO", Const, 16, ""},
+		{"PT_MIPS_RTPROC", Const, 16, ""},
+		{"PT_NOTE", Const, 0, ""},
+		{"PT_NULL", Const, 0, ""},
+		{"PT_OPENBSD_BOOTDATA", Const, 16, ""},
+		{"PT_OPENBSD_NOBTCFI", Const, 23, ""},
+		{"PT_OPENBSD_RANDOMIZE", Const, 16, ""},
+		{"PT_OPENBSD_WXNEEDED", Const, 16, ""},
+		{"PT_PAX_FLAGS", Const, 16, ""},
+		{"PT_PHDR", Const, 0, ""},
+		{"PT_RISCV_ATTRIBUTES", Const, 25, ""},
+		{"PT_S390_PGSTE", Const, 16, ""},
+		{"PT_SHLIB", Const, 0, ""},
+		{"PT_SUNWSTACK", Const, 16, ""},
+		{"PT_SUNW_EH_FRAME", Const, 16, ""},
+		{"PT_TLS", Const, 0, ""},
+		{"Prog", Type, 0, ""},
+		{"Prog.ProgHeader", Field, 0, ""},
+		{"Prog.ReaderAt", Field, 0, ""},
+		{"Prog32", Type, 0, ""},
+		{"Prog32.Align", Field, 0, ""},
+		{"Prog32.Filesz", Field, 0, ""},
+		{"Prog32.Flags", Field, 0, ""},
+		{"Prog32.Memsz", Field, 0, ""},
+		{"Prog32.Off", Field, 0, ""},
+		{"Prog32.Paddr", Field, 0, ""},
+		{"Prog32.Type", Field, 0, ""},
+		{"Prog32.Vaddr", Field, 0, ""},
+		{"Prog64", Type, 0, ""},
+		{"Prog64.Align", Field, 0, ""},
+		{"Prog64.Filesz", Field, 0, ""},
+		{"Prog64.Flags", Field, 0, ""},
+		{"Prog64.Memsz", Field, 0, ""},
+		{"Prog64.Off", Field, 0, ""},
+		{"Prog64.Paddr", Field, 0, ""},
+		{"Prog64.Type", Field, 0, ""},
+		{"Prog64.Vaddr", Field, 0, ""},
+		{"ProgFlag", Type, 0, ""},
+		{"ProgHeader", Type, 0, ""},
+		{"ProgHeader.Align", Field, 0, ""},
+		{"ProgHeader.Filesz", Field, 0, ""},
+		{"ProgHeader.Flags", Field, 0, ""},
+		{"ProgHeader.Memsz", Field, 0, ""},
+		{"ProgHeader.Off", Field, 0, ""},
+		{"ProgHeader.Paddr", Field, 0, ""},
+		{"ProgHeader.Type", Field, 0, ""},
+		{"ProgHeader.Vaddr", Field, 0, ""},
+		{"ProgType", Type, 0, ""},
+		{"R_386", Type, 0, ""},
+		{"R_386_16", Const, 10, ""},
+		{"R_386_32", Const, 0, ""},
+		{"R_386_32PLT", Const, 10, ""},
+		{"R_386_8", Const, 10, ""},
+		{"R_386_COPY", Const, 0, ""},
+		{"R_386_GLOB_DAT", Const, 0, ""},
+		{"R_386_GOT32", Const, 0, ""},
+		{"R_386_GOT32X", Const, 10, ""},
+		{"R_386_GOTOFF", Const, 0, ""},
+		{"R_386_GOTPC", Const, 0, ""},
+		{"R_386_IRELATIVE", Const, 10, ""},
+		{"R_386_JMP_SLOT", Const, 0, ""},
+		{"R_386_NONE", Const, 0, ""},
+		{"R_386_PC16", Const, 10, ""},
+		{"R_386_PC32", Const, 0, ""},
+		{"R_386_PC8", Const, 10, ""},
+		{"R_386_PLT32", Const, 0, ""},
+		{"R_386_RELATIVE", Const, 0, ""},
+		{"R_386_SIZE32", Const, 10, ""},
+		{"R_386_TLS_DESC", Const, 10, ""},
+		{"R_386_TLS_DESC_CALL", Const, 10, ""},
+		{"R_386_TLS_DTPMOD32", Const, 0, ""},
+		{"R_386_TLS_DTPOFF32", Const, 0, ""},
+		{"R_386_TLS_GD", Const, 0, ""},
+		{"R_386_TLS_GD_32", Const, 0, ""},
+		{"R_386_TLS_GD_CALL", Const, 0, ""},
+		{"R_386_TLS_GD_POP", Const, 0, ""},
+		{"R_386_TLS_GD_PUSH", Const, 0, ""},
+		{"R_386_TLS_GOTDESC", Const, 10, ""},
+		{"R_386_TLS_GOTIE", Const, 0, ""},
+		{"R_386_TLS_IE", Const, 0, ""},
+		{"R_386_TLS_IE_32", Const, 0, ""},
+		{"R_386_TLS_LDM", Const, 0, ""},
+		{"R_386_TLS_LDM_32", Const, 0, ""},
+		{"R_386_TLS_LDM_CALL", Const, 0, ""},
+		{"R_386_TLS_LDM_POP", Const, 0, ""},
+		{"R_386_TLS_LDM_PUSH", Const, 0, ""},
+		{"R_386_TLS_LDO_32", Const, 0, ""},
+		{"R_386_TLS_LE", Const, 0, ""},
+		{"R_386_TLS_LE_32", Const, 0, ""},
+		{"R_386_TLS_TPOFF", Const, 0, ""},
+		{"R_386_TLS_TPOFF32", Const, 0, ""},
+		{"R_390", Type, 7, ""},
+		{"R_390_12", Const, 7, ""},
+		{"R_390_16", Const, 7, ""},
+		{"R_390_20", Const, 7, ""},
+		{"R_390_32", Const, 7, ""},
+		{"R_390_64", Const, 7, ""},
+		{"R_390_8", Const, 7, ""},
+		{"R_390_COPY", Const, 7, ""},
+		{"R_390_GLOB_DAT", Const, 7, ""},
+		{"R_390_GOT12", Const, 7, ""},
+		{"R_390_GOT16", Const, 7, ""},
+		{"R_390_GOT20", Const, 7, ""},
+		{"R_390_GOT32", Const, 7, ""},
+		{"R_390_GOT64", Const, 7, ""},
+		{"R_390_GOTENT", Const, 7, ""},
+		{"R_390_GOTOFF", Const, 7, ""},
+		{"R_390_GOTOFF16", Const, 7, ""},
+		{"R_390_GOTOFF64", Const, 7, ""},
+		{"R_390_GOTPC", Const, 7, ""},
+		{"R_390_GOTPCDBL", Const, 7, ""},
+		{"R_390_GOTPLT12", Const, 7, ""},
+		{"R_390_GOTPLT16", Const, 7, ""},
+		{"R_390_GOTPLT20", Const, 7, ""},
+		{"R_390_GOTPLT32", Const, 7, ""},
+		{"R_390_GOTPLT64", Const, 7, ""},
+		{"R_390_GOTPLTENT", Const, 7, ""},
+		{"R_390_GOTPLTOFF16", Const, 7, ""},
+		{"R_390_GOTPLTOFF32", Const, 7, ""},
+		{"R_390_GOTPLTOFF64", Const, 7, ""},
+		{"R_390_JMP_SLOT", Const, 7, ""},
+		{"R_390_NONE", Const, 7, ""},
+		{"R_390_PC16", Const, 7, ""},
+		{"R_390_PC16DBL", Const, 7, ""},
+		{"R_390_PC32", Const, 7, ""},
+		{"R_390_PC32DBL", Const, 7, ""},
+		{"R_390_PC64", Const, 7, ""},
+		{"R_390_PLT16DBL", Const, 7, ""},
+		{"R_390_PLT32", Const, 7, ""},
+		{"R_390_PLT32DBL", Const, 7, ""},
+		{"R_390_PLT64", Const, 7, ""},
+		{"R_390_RELATIVE", Const, 7, ""},
+		{"R_390_TLS_DTPMOD", Const, 7, ""},
+		{"R_390_TLS_DTPOFF", Const, 7, ""},
+		{"R_390_TLS_GD32", Const, 7, ""},
+		{"R_390_TLS_GD64", Const, 7, ""},
+		{"R_390_TLS_GDCALL", Const, 7, ""},
+		{"R_390_TLS_GOTIE12", Const, 7, ""},
+		{"R_390_TLS_GOTIE20", Const, 7, ""},
+		{"R_390_TLS_GOTIE32", Const, 7, ""},
+		{"R_390_TLS_GOTIE64", Const, 7, ""},
+		{"R_390_TLS_IE32", Const, 7, ""},
+		{"R_390_TLS_IE64", Const, 7, ""},
+		{"R_390_TLS_IEENT", Const, 7, ""},
+		{"R_390_TLS_LDCALL", Const, 7, ""},
+		{"R_390_TLS_LDM32", Const, 7, ""},
+		{"R_390_TLS_LDM64", Const, 7, ""},
+		{"R_390_TLS_LDO32", Const, 7, ""},
+		{"R_390_TLS_LDO64", Const, 7, ""},
+		{"R_390_TLS_LE32", Const, 7, ""},
+		{"R_390_TLS_LE64", Const, 7, ""},
+		{"R_390_TLS_LOAD", Const, 7, ""},
+		{"R_390_TLS_TPOFF", Const, 7, ""},
+		{"R_AARCH64", Type, 4, ""},
+		{"R_AARCH64_ABS16", Const, 4, ""},
+		{"R_AARCH64_ABS32", Const, 4, ""},
+		{"R_AARCH64_ABS64", Const, 4, ""},
+		{"R_AARCH64_ADD_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_ADR_GOT_PAGE", Const, 4, ""},
+		{"R_AARCH64_ADR_PREL_LO21", Const, 4, ""},
+		{"R_AARCH64_ADR_PREL_PG_HI21", Const, 4, ""},
+		{"R_AARCH64_ADR_PREL_PG_HI21_NC", Const, 4, ""},
+		{"R_AARCH64_CALL26", Const, 4, ""},
+		{"R_AARCH64_CONDBR19", Const, 4, ""},
+		{"R_AARCH64_COPY", Const, 4, ""},
+		{"R_AARCH64_GLOB_DAT", Const, 4, ""},
+		{"R_AARCH64_GOT_LD_PREL19", Const, 4, ""},
+		{"R_AARCH64_IRELATIVE", Const, 4, ""},
+		{"R_AARCH64_JUMP26", Const, 4, ""},
+		{"R_AARCH64_JUMP_SLOT", Const, 4, ""},
+		{"R_AARCH64_LD64_GOTOFF_LO15", Const, 10, ""},
+		{"R_AARCH64_LD64_GOTPAGE_LO15", Const, 10, ""},
+		{"R_AARCH64_LD64_GOT_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST128_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST16_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST32_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST64_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST8_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LD_PREL_LO19", Const, 4, ""},
+		{"R_AARCH64_MOVW_SABS_G0", Const, 4, ""},
+		{"R_AARCH64_MOVW_SABS_G1", Const, 4, ""},
+		{"R_AARCH64_MOVW_SABS_G2", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G0", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G0_NC", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G1", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G1_NC", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G2", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G2_NC", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G3", Const, 4, ""},
+		{"R_AARCH64_NONE", Const, 4, ""},
+		{"R_AARCH64_NULL", Const, 4, ""},
+		{"R_AARCH64_P32_ABS16", Const, 4, ""},
+		{"R_AARCH64_P32_ABS32", Const, 4, ""},
+		{"R_AARCH64_P32_ADD_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_ADR_GOT_PAGE", Const, 4, ""},
+		{"R_AARCH64_P32_ADR_PREL_LO21", Const, 4, ""},
+		{"R_AARCH64_P32_ADR_PREL_PG_HI21", Const, 4, ""},
+		{"R_AARCH64_P32_CALL26", Const, 4, ""},
+		{"R_AARCH64_P32_CONDBR19", Const, 4, ""},
+		{"R_AARCH64_P32_COPY", Const, 4, ""},
+		{"R_AARCH64_P32_GLOB_DAT", Const, 4, ""},
+		{"R_AARCH64_P32_GOT_LD_PREL19", Const, 4, ""},
+		{"R_AARCH64_P32_IRELATIVE", Const, 4, ""},
+		{"R_AARCH64_P32_JUMP26", Const, 4, ""},
+		{"R_AARCH64_P32_JUMP_SLOT", Const, 4, ""},
+		{"R_AARCH64_P32_LD32_GOT_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST128_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST16_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST32_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST64_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST8_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LD_PREL_LO19", Const, 4, ""},
+		{"R_AARCH64_P32_MOVW_SABS_G0", Const, 4, ""},
+		{"R_AARCH64_P32_MOVW_UABS_G0", Const, 4, ""},
+		{"R_AARCH64_P32_MOVW_UABS_G0_NC", Const, 4, ""},
+		{"R_AARCH64_P32_MOVW_UABS_G1", Const, 4, ""},
+		{"R_AARCH64_P32_PREL16", Const, 4, ""},
+		{"R_AARCH64_P32_PREL32", Const, 4, ""},
+		{"R_AARCH64_P32_RELATIVE", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_ADD_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_ADR_PAGE21", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_ADR_PREL21", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_CALL", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_LD32_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_LD_PREL19", Const, 4, ""},
+		{"R_AARCH64_P32_TLSGD_ADD_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSGD_ADR_PAGE21", Const, 4, ""},
+		{"R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4, ""},
+		{"R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_ADD_TPREL_HI12", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G1", Const, 4, ""},
+		{"R_AARCH64_P32_TLS_DTPMOD", Const, 4, ""},
+		{"R_AARCH64_P32_TLS_DTPREL", Const, 4, ""},
+		{"R_AARCH64_P32_TLS_TPREL", Const, 4, ""},
+		{"R_AARCH64_P32_TSTBR14", Const, 4, ""},
+		{"R_AARCH64_PREL16", Const, 4, ""},
+		{"R_AARCH64_PREL32", Const, 4, ""},
+		{"R_AARCH64_PREL64", Const, 4, ""},
+		{"R_AARCH64_RELATIVE", Const, 4, ""},
+		{"R_AARCH64_TLSDESC", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_ADD", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_ADD_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_ADR_PAGE21", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_ADR_PREL21", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_CALL", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_LD64_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_LDR", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_LD_PREL19", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_OFF_G0_NC", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_OFF_G1", Const, 4, ""},
+		{"R_AARCH64_TLSGD_ADD_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSGD_ADR_PAGE21", Const, 4, ""},
+		{"R_AARCH64_TLSGD_ADR_PREL21", Const, 10, ""},
+		{"R_AARCH64_TLSGD_MOVW_G0_NC", Const, 10, ""},
+		{"R_AARCH64_TLSGD_MOVW_G1", Const, 10, ""},
+		{"R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4, ""},
+		{"R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSIE_LD_GOTTPREL_PREL19", Const, 4, ""},
+		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", Const, 4, ""},
+		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G1", Const, 4, ""},
+		{"R_AARCH64_TLSLD_ADR_PAGE21", Const, 10, ""},
+		{"R_AARCH64_TLSLD_ADR_PREL21", Const, 10, ""},
+		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12", Const, 10, ""},
+		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC", Const, 10, ""},
+		{"R_AARCH64_TLSLE_ADD_TPREL_HI12", Const, 4, ""},
+		{"R_AARCH64_TLSLE_ADD_TPREL_LO12", Const, 4, ""},
+		{"R_AARCH64_TLSLE_ADD_TPREL_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12", Const, 10, ""},
+		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC", Const, 10, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G0", Const, 4, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G0_NC", Const, 4, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G1", Const, 4, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G1_NC", Const, 4, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G2", Const, 4, ""},
+		{"R_AARCH64_TLS_DTPMOD64", Const, 4, ""},
+		{"R_AARCH64_TLS_DTPREL64", Const, 4, ""},
+		{"R_AARCH64_TLS_TPREL64", Const, 4, ""},
+		{"R_AARCH64_TSTBR14", Const, 4, ""},
+		{"R_ALPHA", Type, 0, ""},
+		{"R_ALPHA_BRADDR", Const, 0, ""},
+		{"R_ALPHA_COPY", Const, 0, ""},
+		{"R_ALPHA_GLOB_DAT", Const, 0, ""},
+		{"R_ALPHA_GPDISP", Const, 0, ""},
+		{"R_ALPHA_GPREL32", Const, 0, ""},
+		{"R_ALPHA_GPRELHIGH", Const, 0, ""},
+		{"R_ALPHA_GPRELLOW", Const, 0, ""},
+		{"R_ALPHA_GPVALUE", Const, 0, ""},
+		{"R_ALPHA_HINT", Const, 0, ""},
+		{"R_ALPHA_IMMED_BR_HI32", Const, 0, ""},
+		{"R_ALPHA_IMMED_GP_16", Const, 0, ""},
+		{"R_ALPHA_IMMED_GP_HI32", Const, 0, ""},
+		{"R_ALPHA_IMMED_LO32", Const, 0, ""},
+		{"R_ALPHA_IMMED_SCN_HI32", Const, 0, ""},
+		{"R_ALPHA_JMP_SLOT", Const, 0, ""},
+		{"R_ALPHA_LITERAL", Const, 0, ""},
+		{"R_ALPHA_LITUSE", Const, 0, ""},
+		{"R_ALPHA_NONE", Const, 0, ""},
+		{"R_ALPHA_OP_PRSHIFT", Const, 0, ""},
+		{"R_ALPHA_OP_PSUB", Const, 0, ""},
+		{"R_ALPHA_OP_PUSH", Const, 0, ""},
+		{"R_ALPHA_OP_STORE", Const, 0, ""},
+		{"R_ALPHA_REFLONG", Const, 0, ""},
+		{"R_ALPHA_REFQUAD", Const, 0, ""},
+		{"R_ALPHA_RELATIVE", Const, 0, ""},
+		{"R_ALPHA_SREL16", Const, 0, ""},
+		{"R_ALPHA_SREL32", Const, 0, ""},
+		{"R_ALPHA_SREL64", Const, 0, ""},
+		{"R_ARM", Type, 0, ""},
+		{"R_ARM_ABS12", Const, 0, ""},
+		{"R_ARM_ABS16", Const, 0, ""},
+		{"R_ARM_ABS32", Const, 0, ""},
+		{"R_ARM_ABS32_NOI", Const, 10, ""},
+		{"R_ARM_ABS8", Const, 0, ""},
+		{"R_ARM_ALU_PCREL_15_8", Const, 10, ""},
+		{"R_ARM_ALU_PCREL_23_15", Const, 10, ""},
+		{"R_ARM_ALU_PCREL_7_0", Const, 10, ""},
+		{"R_ARM_ALU_PC_G0", Const, 10, ""},
+		{"R_ARM_ALU_PC_G0_NC", Const, 10, ""},
+		{"R_ARM_ALU_PC_G1", Const, 10, ""},
+		{"R_ARM_ALU_PC_G1_NC", Const, 10, ""},
+		{"R_ARM_ALU_PC_G2", Const, 10, ""},
+		{"R_ARM_ALU_SBREL_19_12_NC", Const, 10, ""},
+		{"R_ARM_ALU_SBREL_27_20_CK", Const, 10, ""},
+		{"R_ARM_ALU_SB_G0", Const, 10, ""},
+		{"R_ARM_ALU_SB_G0_NC", Const, 10, ""},
+		{"R_ARM_ALU_SB_G1", Const, 10, ""},
+		{"R_ARM_ALU_SB_G1_NC", Const, 10, ""},
+		{"R_ARM_ALU_SB_G2", Const, 10, ""},
+		{"R_ARM_AMP_VCALL9", Const, 0, ""},
+		{"R_ARM_BASE_ABS", Const, 10, ""},
+		{"R_ARM_CALL", Const, 10, ""},
+		{"R_ARM_COPY", Const, 0, ""},
+		{"R_ARM_GLOB_DAT", Const, 0, ""},
+		{"R_ARM_GNU_VTENTRY", Const, 0, ""},
+		{"R_ARM_GNU_VTINHERIT", Const, 0, ""},
+		{"R_ARM_GOT32", Const, 0, ""},
+		{"R_ARM_GOTOFF", Const, 0, ""},
+		{"R_ARM_GOTOFF12", Const, 10, ""},
+		{"R_ARM_GOTPC", Const, 0, ""},
+		{"R_ARM_GOTRELAX", Const, 10, ""},
+		{"R_ARM_GOT_ABS", Const, 10, ""},
+		{"R_ARM_GOT_BREL12", Const, 10, ""},
+		{"R_ARM_GOT_PREL", Const, 10, ""},
+		{"R_ARM_IRELATIVE", Const, 10, ""},
+		{"R_ARM_JUMP24", Const, 10, ""},
+		{"R_ARM_JUMP_SLOT", Const, 0, ""},
+		{"R_ARM_LDC_PC_G0", Const, 10, ""},
+		{"R_ARM_LDC_PC_G1", Const, 10, ""},
+		{"R_ARM_LDC_PC_G2", Const, 10, ""},
+		{"R_ARM_LDC_SB_G0", Const, 10, ""},
+		{"R_ARM_LDC_SB_G1", Const, 10, ""},
+		{"R_ARM_LDC_SB_G2", Const, 10, ""},
+		{"R_ARM_LDRS_PC_G0", Const, 10, ""},
+		{"R_ARM_LDRS_PC_G1", Const, 10, ""},
+		{"R_ARM_LDRS_PC_G2", Const, 10, ""},
+		{"R_ARM_LDRS_SB_G0", Const, 10, ""},
+		{"R_ARM_LDRS_SB_G1", Const, 10, ""},
+		{"R_ARM_LDRS_SB_G2", Const, 10, ""},
+		{"R_ARM_LDR_PC_G1", Const, 10, ""},
+		{"R_ARM_LDR_PC_G2", Const, 10, ""},
+		{"R_ARM_LDR_SBREL_11_10_NC", Const, 10, ""},
+		{"R_ARM_LDR_SB_G0", Const, 10, ""},
+		{"R_ARM_LDR_SB_G1", Const, 10, ""},
+		{"R_ARM_LDR_SB_G2", Const, 10, ""},
+		{"R_ARM_ME_TOO", Const, 10, ""},
+		{"R_ARM_MOVT_ABS", Const, 10, ""},
+		{"R_ARM_MOVT_BREL", Const, 10, ""},
+		{"R_ARM_MOVT_PREL", Const, 10, ""},
+		{"R_ARM_MOVW_ABS_NC", Const, 10, ""},
+		{"R_ARM_MOVW_BREL", Const, 10, ""},
+		{"R_ARM_MOVW_BREL_NC", Const, 10, ""},
+		{"R_ARM_MOVW_PREL_NC", Const, 10, ""},
+		{"R_ARM_NONE", Const, 0, ""},
+		{"R_ARM_PC13", Const, 0, ""},
+		{"R_ARM_PC24", Const, 0, ""},
+		{"R_ARM_PLT32", Const, 0, ""},
+		{"R_ARM_PLT32_ABS", Const, 10, ""},
+		{"R_ARM_PREL31", Const, 10, ""},
+		{"R_ARM_PRIVATE_0", Const, 10, ""},
+		{"R_ARM_PRIVATE_1", Const, 10, ""},
+		{"R_ARM_PRIVATE_10", Const, 10, ""},
+		{"R_ARM_PRIVATE_11", Const, 10, ""},
+		{"R_ARM_PRIVATE_12", Const, 10, ""},
+		{"R_ARM_PRIVATE_13", Const, 10, ""},
+		{"R_ARM_PRIVATE_14", Const, 10, ""},
+		{"R_ARM_PRIVATE_15", Const, 10, ""},
+		{"R_ARM_PRIVATE_2", Const, 10, ""},
+		{"R_ARM_PRIVATE_3", Const, 10, ""},
+		{"R_ARM_PRIVATE_4", Const, 10, ""},
+		{"R_ARM_PRIVATE_5", Const, 10, ""},
+		{"R_ARM_PRIVATE_6", Const, 10, ""},
+		{"R_ARM_PRIVATE_7", Const, 10, ""},
+		{"R_ARM_PRIVATE_8", Const, 10, ""},
+		{"R_ARM_PRIVATE_9", Const, 10, ""},
+		{"R_ARM_RABS32", Const, 0, ""},
+		{"R_ARM_RBASE", Const, 0, ""},
+		{"R_ARM_REL32", Const, 0, ""},
+		{"R_ARM_REL32_NOI", Const, 10, ""},
+		{"R_ARM_RELATIVE", Const, 0, ""},
+		{"R_ARM_RPC24", Const, 0, ""},
+		{"R_ARM_RREL32", Const, 0, ""},
+		{"R_ARM_RSBREL32", Const, 0, ""},
+		{"R_ARM_RXPC25", Const, 10, ""},
+		{"R_ARM_SBREL31", Const, 10, ""},
+		{"R_ARM_SBREL32", Const, 0, ""},
+		{"R_ARM_SWI24", Const, 0, ""},
+		{"R_ARM_TARGET1", Const, 10, ""},
+		{"R_ARM_TARGET2", Const, 10, ""},
+		{"R_ARM_THM_ABS5", Const, 0, ""},
+		{"R_ARM_THM_ALU_ABS_G0_NC", Const, 10, ""},
+		{"R_ARM_THM_ALU_ABS_G1_NC", Const, 10, ""},
+		{"R_ARM_THM_ALU_ABS_G2_NC", Const, 10, ""},
+		{"R_ARM_THM_ALU_ABS_G3", Const, 10, ""},
+		{"R_ARM_THM_ALU_PREL_11_0", Const, 10, ""},
+		{"R_ARM_THM_GOT_BREL12", Const, 10, ""},
+		{"R_ARM_THM_JUMP11", Const, 10, ""},
+		{"R_ARM_THM_JUMP19", Const, 10, ""},
+		{"R_ARM_THM_JUMP24", Const, 10, ""},
+		{"R_ARM_THM_JUMP6", Const, 10, ""},
+		{"R_ARM_THM_JUMP8", Const, 10, ""},
+		{"R_ARM_THM_MOVT_ABS", Const, 10, ""},
+		{"R_ARM_THM_MOVT_BREL", Const, 10, ""},
+		{"R_ARM_THM_MOVT_PREL", Const, 10, ""},
+		{"R_ARM_THM_MOVW_ABS_NC", Const, 10, ""},
+		{"R_ARM_THM_MOVW_BREL", Const, 10, ""},
+		{"R_ARM_THM_MOVW_BREL_NC", Const, 10, ""},
+		{"R_ARM_THM_MOVW_PREL_NC", Const, 10, ""},
+		{"R_ARM_THM_PC12", Const, 10, ""},
+		{"R_ARM_THM_PC22", Const, 0, ""},
+		{"R_ARM_THM_PC8", Const, 0, ""},
+		{"R_ARM_THM_RPC22", Const, 0, ""},
+		{"R_ARM_THM_SWI8", Const, 0, ""},
+		{"R_ARM_THM_TLS_CALL", Const, 10, ""},
+		{"R_ARM_THM_TLS_DESCSEQ16", Const, 10, ""},
+		{"R_ARM_THM_TLS_DESCSEQ32", Const, 10, ""},
+		{"R_ARM_THM_XPC22", Const, 0, ""},
+		{"R_ARM_TLS_CALL", Const, 10, ""},
+		{"R_ARM_TLS_DESCSEQ", Const, 10, ""},
+		{"R_ARM_TLS_DTPMOD32", Const, 10, ""},
+		{"R_ARM_TLS_DTPOFF32", Const, 10, ""},
+		{"R_ARM_TLS_GD32", Const, 10, ""},
+		{"R_ARM_TLS_GOTDESC", Const, 10, ""},
+		{"R_ARM_TLS_IE12GP", Const, 10, ""},
+		{"R_ARM_TLS_IE32", Const, 10, ""},
+		{"R_ARM_TLS_LDM32", Const, 10, ""},
+		{"R_ARM_TLS_LDO12", Const, 10, ""},
+		{"R_ARM_TLS_LDO32", Const, 10, ""},
+		{"R_ARM_TLS_LE12", Const, 10, ""},
+		{"R_ARM_TLS_LE32", Const, 10, ""},
+		{"R_ARM_TLS_TPOFF32", Const, 10, ""},
+		{"R_ARM_V4BX", Const, 10, ""},
+		{"R_ARM_XPC25", Const, 0, ""},
+		{"R_INFO", Func, 0, "func(sym uint32, typ uint32) uint64"},
+		{"R_INFO32", Func, 0, "func(sym uint32, typ uint32) uint32"},
+		{"R_LARCH", Type, 19, ""},
+		{"R_LARCH_32", Const, 19, ""},
+		{"R_LARCH_32_PCREL", Const, 20, ""},
+		{"R_LARCH_64", Const, 19, ""},
+		{"R_LARCH_64_PCREL", Const, 22, ""},
+		{"R_LARCH_ABS64_HI12", Const, 20, ""},
+		{"R_LARCH_ABS64_LO20", Const, 20, ""},
+		{"R_LARCH_ABS_HI20", Const, 20, ""},
+		{"R_LARCH_ABS_LO12", Const, 20, ""},
+		{"R_LARCH_ADD16", Const, 19, ""},
+		{"R_LARCH_ADD24", Const, 19, ""},
+		{"R_LARCH_ADD32", Const, 19, ""},
+		{"R_LARCH_ADD6", Const, 22, ""},
+		{"R_LARCH_ADD64", Const, 19, ""},
+		{"R_LARCH_ADD8", Const, 19, ""},
+		{"R_LARCH_ADD_ULEB128", Const, 22, ""},
+		{"R_LARCH_ALIGN", Const, 22, ""},
+		{"R_LARCH_B16", Const, 20, ""},
+		{"R_LARCH_B21", Const, 20, ""},
+		{"R_LARCH_B26", Const, 20, ""},
+		{"R_LARCH_CFA", Const, 22, ""},
+		{"R_LARCH_COPY", Const, 19, ""},
+		{"R_LARCH_DELETE", Const, 22, ""},
+		{"R_LARCH_GNU_VTENTRY", Const, 20, ""},
+		{"R_LARCH_GNU_VTINHERIT", Const, 20, ""},
+		{"R_LARCH_GOT64_HI12", Const, 20, ""},
+		{"R_LARCH_GOT64_LO20", Const, 20, ""},
+		{"R_LARCH_GOT64_PC_HI12", Const, 20, ""},
+		{"R_LARCH_GOT64_PC_LO20", Const, 20, ""},
+		{"R_LARCH_GOT_HI20", Const, 20, ""},
+		{"R_LARCH_GOT_LO12", Const, 20, ""},
+		{"R_LARCH_GOT_PC_HI20", Const, 20, ""},
+		{"R_LARCH_GOT_PC_LO12", Const, 20, ""},
+		{"R_LARCH_IRELATIVE", Const, 19, ""},
+		{"R_LARCH_JUMP_SLOT", Const, 19, ""},
+		{"R_LARCH_MARK_LA", Const, 19, ""},
+		{"R_LARCH_MARK_PCREL", Const, 19, ""},
+		{"R_LARCH_NONE", Const, 19, ""},
+		{"R_LARCH_PCALA64_HI12", Const, 20, ""},
+		{"R_LARCH_PCALA64_LO20", Const, 20, ""},
+		{"R_LARCH_PCALA_HI20", Const, 20, ""},
+		{"R_LARCH_PCALA_LO12", Const, 20, ""},
+		{"R_LARCH_PCREL20_S2", Const, 22, ""},
+		{"R_LARCH_RELATIVE", Const, 19, ""},
+		{"R_LARCH_RELAX", Const, 20, ""},
+		{"R_LARCH_SOP_ADD", Const, 19, ""},
+		{"R_LARCH_SOP_AND", Const, 19, ""},
+		{"R_LARCH_SOP_ASSERT", Const, 19, ""},
+		{"R_LARCH_SOP_IF_ELSE", Const, 19, ""},
+		{"R_LARCH_SOP_NOT", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_0_10_10_16_S2", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_0_5_10_16_S2", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_10_12", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_10_16", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_10_16_S2", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_10_5", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_5_20", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_U", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_U_10_12", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_ABSOLUTE", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_DUP", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_GPREL", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_PCREL", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_PLT_PCREL", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_TLS_GD", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_TLS_GOT", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_TLS_TPREL", Const, 19, ""},
+		{"R_LARCH_SOP_SL", Const, 19, ""},
+		{"R_LARCH_SOP_SR", Const, 19, ""},
+		{"R_LARCH_SOP_SUB", Const, 19, ""},
+		{"R_LARCH_SUB16", Const, 19, ""},
+		{"R_LARCH_SUB24", Const, 19, ""},
+		{"R_LARCH_SUB32", Const, 19, ""},
+		{"R_LARCH_SUB6", Const, 22, ""},
+		{"R_LARCH_SUB64", Const, 19, ""},
+		{"R_LARCH_SUB8", Const, 19, ""},
+		{"R_LARCH_SUB_ULEB128", Const, 22, ""},
+		{"R_LARCH_TLS_DTPMOD32", Const, 19, ""},
+		{"R_LARCH_TLS_DTPMOD64", Const, 19, ""},
+		{"R_LARCH_TLS_DTPREL32", Const, 19, ""},
+		{"R_LARCH_TLS_DTPREL64", Const, 19, ""},
+		{"R_LARCH_TLS_GD_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_GD_PC_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_IE64_HI12", Const, 20, ""},
+		{"R_LARCH_TLS_IE64_LO20", Const, 20, ""},
+		{"R_LARCH_TLS_IE64_PC_HI12", Const, 20, ""},
+		{"R_LARCH_TLS_IE64_PC_LO20", Const, 20, ""},
+		{"R_LARCH_TLS_IE_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_IE_LO12", Const, 20, ""},
+		{"R_LARCH_TLS_IE_PC_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_IE_PC_LO12", Const, 20, ""},
+		{"R_LARCH_TLS_LD_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_LD_PC_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_LE64_HI12", Const, 20, ""},
+		{"R_LARCH_TLS_LE64_LO20", Const, 20, ""},
+		{"R_LARCH_TLS_LE_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_LE_LO12", Const, 20, ""},
+		{"R_LARCH_TLS_TPREL32", Const, 19, ""},
+		{"R_LARCH_TLS_TPREL64", Const, 19, ""},
+		{"R_MIPS", Type, 6, ""},
+		{"R_MIPS_16", Const, 6, ""},
+		{"R_MIPS_26", Const, 6, ""},
+		{"R_MIPS_32", Const, 6, ""},
+		{"R_MIPS_64", Const, 6, ""},
+		{"R_MIPS_ADD_IMMEDIATE", Const, 6, ""},
+		{"R_MIPS_CALL16", Const, 6, ""},
+		{"R_MIPS_CALL_HI16", Const, 6, ""},
+		{"R_MIPS_CALL_LO16", Const, 6, ""},
+		{"R_MIPS_DELETE", Const, 6, ""},
+		{"R_MIPS_GOT16", Const, 6, ""},
+		{"R_MIPS_GOT_DISP", Const, 6, ""},
+		{"R_MIPS_GOT_HI16", Const, 6, ""},
+		{"R_MIPS_GOT_LO16", Const, 6, ""},
+		{"R_MIPS_GOT_OFST", Const, 6, ""},
+		{"R_MIPS_GOT_PAGE", Const, 6, ""},
+		{"R_MIPS_GPREL16", Const, 6, ""},
+		{"R_MIPS_GPREL32", Const, 6, ""},
+		{"R_MIPS_HI16", Const, 6, ""},
+		{"R_MIPS_HIGHER", Const, 6, ""},
+		{"R_MIPS_HIGHEST", Const, 6, ""},
+		{"R_MIPS_INSERT_A", Const, 6, ""},
+		{"R_MIPS_INSERT_B", Const, 6, ""},
+		{"R_MIPS_JALR", Const, 6, ""},
+		{"R_MIPS_LITERAL", Const, 6, ""},
+		{"R_MIPS_LO16", Const, 6, ""},
+		{"R_MIPS_NONE", Const, 6, ""},
+		{"R_MIPS_PC16", Const, 6, ""},
+		{"R_MIPS_PC32", Const, 22, ""},
+		{"R_MIPS_PJUMP", Const, 6, ""},
+		{"R_MIPS_REL16", Const, 6, ""},
+		{"R_MIPS_REL32", Const, 6, ""},
+		{"R_MIPS_RELGOT", Const, 6, ""},
+		{"R_MIPS_SCN_DISP", Const, 6, ""},
+		{"R_MIPS_SHIFT5", Const, 6, ""},
+		{"R_MIPS_SHIFT6", Const, 6, ""},
+		{"R_MIPS_SUB", Const, 6, ""},
+		{"R_MIPS_TLS_DTPMOD32", Const, 6, ""},
+		{"R_MIPS_TLS_DTPMOD64", Const, 6, ""},
+		{"R_MIPS_TLS_DTPREL32", Const, 6, ""},
+		{"R_MIPS_TLS_DTPREL64", Const, 6, ""},
+		{"R_MIPS_TLS_DTPREL_HI16", Const, 6, ""},
+		{"R_MIPS_TLS_DTPREL_LO16", Const, 6, ""},
+		{"R_MIPS_TLS_GD", Const, 6, ""},
+		{"R_MIPS_TLS_GOTTPREL", Const, 6, ""},
+		{"R_MIPS_TLS_LDM", Const, 6, ""},
+		{"R_MIPS_TLS_TPREL32", Const, 6, ""},
+		{"R_MIPS_TLS_TPREL64", Const, 6, ""},
+		{"R_MIPS_TLS_TPREL_HI16", Const, 6, ""},
+		{"R_MIPS_TLS_TPREL_LO16", Const, 6, ""},
+		{"R_PPC", Type, 0, ""},
+		{"R_PPC64", Type, 5, ""},
+		{"R_PPC64_ADDR14", Const, 5, ""},
+		{"R_PPC64_ADDR14_BRNTAKEN", Const, 5, ""},
+		{"R_PPC64_ADDR14_BRTAKEN", Const, 5, ""},
+		{"R_PPC64_ADDR16", Const, 5, ""},
+		{"R_PPC64_ADDR16_DS", Const, 5, ""},
+		{"R_PPC64_ADDR16_HA", Const, 5, ""},
+		{"R_PPC64_ADDR16_HI", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGH", Const, 10, ""},
+		{"R_PPC64_ADDR16_HIGHA", Const, 10, ""},
+		{"R_PPC64_ADDR16_HIGHER", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGHER34", Const, 20, ""},
+		{"R_PPC64_ADDR16_HIGHERA", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGHERA34", Const, 20, ""},
+		{"R_PPC64_ADDR16_HIGHEST", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGHEST34", Const, 20, ""},
+		{"R_PPC64_ADDR16_HIGHESTA", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGHESTA34", Const, 20, ""},
+		{"R_PPC64_ADDR16_LO", Const, 5, ""},
+		{"R_PPC64_ADDR16_LO_DS", Const, 5, ""},
+		{"R_PPC64_ADDR24", Const, 5, ""},
+		{"R_PPC64_ADDR32", Const, 5, ""},
+		{"R_PPC64_ADDR64", Const, 5, ""},
+		{"R_PPC64_ADDR64_LOCAL", Const, 10, ""},
+		{"R_PPC64_COPY", Const, 20, ""},
+		{"R_PPC64_D28", Const, 20, ""},
+		{"R_PPC64_D34", Const, 20, ""},
+		{"R_PPC64_D34_HA30", Const, 20, ""},
+		{"R_PPC64_D34_HI30", Const, 20, ""},
+		{"R_PPC64_D34_LO", Const, 20, ""},
+		{"R_PPC64_DTPMOD64", Const, 5, ""},
+		{"R_PPC64_DTPREL16", Const, 5, ""},
+		{"R_PPC64_DTPREL16_DS", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HA", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HI", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HIGH", Const, 10, ""},
+		{"R_PPC64_DTPREL16_HIGHA", Const, 10, ""},
+		{"R_PPC64_DTPREL16_HIGHER", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HIGHERA", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HIGHEST", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HIGHESTA", Const, 5, ""},
+		{"R_PPC64_DTPREL16_LO", Const, 5, ""},
+		{"R_PPC64_DTPREL16_LO_DS", Const, 5, ""},
+		{"R_PPC64_DTPREL34", Const, 20, ""},
+		{"R_PPC64_DTPREL64", Const, 5, ""},
+		{"R_PPC64_ENTRY", Const, 10, ""},
+		{"R_PPC64_GLOB_DAT", Const, 20, ""},
+		{"R_PPC64_GNU_VTENTRY", Const, 20, ""},
+		{"R_PPC64_GNU_VTINHERIT", Const, 20, ""},
+		{"R_PPC64_GOT16", Const, 5, ""},
+		{"R_PPC64_GOT16_DS", Const, 5, ""},
+		{"R_PPC64_GOT16_HA", Const, 5, ""},
+		{"R_PPC64_GOT16_HI", Const, 5, ""},
+		{"R_PPC64_GOT16_LO", Const, 5, ""},
+		{"R_PPC64_GOT16_LO_DS", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL16_DS", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL16_HA", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL16_HI", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL16_LO_DS", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL_PCREL34", Const, 20, ""},
+		{"R_PPC64_GOT_PCREL34", Const, 20, ""},
+		{"R_PPC64_GOT_TLSGD16", Const, 5, ""},
+		{"R_PPC64_GOT_TLSGD16_HA", Const, 5, ""},
+		{"R_PPC64_GOT_TLSGD16_HI", Const, 5, ""},
+		{"R_PPC64_GOT_TLSGD16_LO", Const, 5, ""},
+		{"R_PPC64_GOT_TLSGD_PCREL34", Const, 20, ""},
+		{"R_PPC64_GOT_TLSLD16", Const, 5, ""},
+		{"R_PPC64_GOT_TLSLD16_HA", Const, 5, ""},
+		{"R_PPC64_GOT_TLSLD16_HI", Const, 5, ""},
+		{"R_PPC64_GOT_TLSLD16_LO", Const, 5, ""},
+		{"R_PPC64_GOT_TLSLD_PCREL34", Const, 20, ""},
+		{"R_PPC64_GOT_TPREL16_DS", Const, 5, ""},
+		{"R_PPC64_GOT_TPREL16_HA", Const, 5, ""},
+		{"R_PPC64_GOT_TPREL16_HI", Const, 5, ""},
+		{"R_PPC64_GOT_TPREL16_LO_DS", Const, 5, ""},
+		{"R_PPC64_GOT_TPREL_PCREL34", Const, 20, ""},
+		{"R_PPC64_IRELATIVE", Const, 10, ""},
+		{"R_PPC64_JMP_IREL", Const, 10, ""},
+		{"R_PPC64_JMP_SLOT", Const, 5, ""},
+		{"R_PPC64_NONE", Const, 5, ""},
+		{"R_PPC64_PCREL28", Const, 20, ""},
+		{"R_PPC64_PCREL34", Const, 20, ""},
+		{"R_PPC64_PCREL_OPT", Const, 20, ""},
+		{"R_PPC64_PLT16_HA", Const, 20, ""},
+		{"R_PPC64_PLT16_HI", Const, 20, ""},
+		{"R_PPC64_PLT16_LO", Const, 20, ""},
+		{"R_PPC64_PLT16_LO_DS", Const, 10, ""},
+		{"R_PPC64_PLT32", Const, 20, ""},
+		{"R_PPC64_PLT64", Const, 20, ""},
+		{"R_PPC64_PLTCALL", Const, 20, ""},
+		{"R_PPC64_PLTCALL_NOTOC", Const, 20, ""},
+		{"R_PPC64_PLTGOT16", Const, 10, ""},
+		{"R_PPC64_PLTGOT16_DS", Const, 10, ""},
+		{"R_PPC64_PLTGOT16_HA", Const, 10, ""},
+		{"R_PPC64_PLTGOT16_HI", Const, 10, ""},
+		{"R_PPC64_PLTGOT16_LO", Const, 10, ""},
+		{"R_PPC64_PLTGOT_LO_DS", Const, 10, ""},
+		{"R_PPC64_PLTREL32", Const, 20, ""},
+		{"R_PPC64_PLTREL64", Const, 20, ""},
+		{"R_PPC64_PLTSEQ", Const, 20, ""},
+		{"R_PPC64_PLTSEQ_NOTOC", Const, 20, ""},
+		{"R_PPC64_PLT_PCREL34", Const, 20, ""},
+		{"R_PPC64_PLT_PCREL34_NOTOC", Const, 20, ""},
+		{"R_PPC64_REL14", Const, 5, ""},
+		{"R_PPC64_REL14_BRNTAKEN", Const, 5, ""},
+		{"R_PPC64_REL14_BRTAKEN", Const, 5, ""},
+		{"R_PPC64_REL16", Const, 5, ""},
+		{"R_PPC64_REL16DX_HA", Const, 10, ""},
+		{"R_PPC64_REL16_HA", Const, 5, ""},
+		{"R_PPC64_REL16_HI", Const, 5, ""},
+		{"R_PPC64_REL16_HIGH", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHA", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHER", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHER34", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHERA", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHERA34", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHEST", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHEST34", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHESTA", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHESTA34", Const, 20, ""},
+		{"R_PPC64_REL16_LO", Const, 5, ""},
+		{"R_PPC64_REL24", Const, 5, ""},
+		{"R_PPC64_REL24_NOTOC", Const, 10, ""},
+		{"R_PPC64_REL24_P9NOTOC", Const, 21, ""},
+		{"R_PPC64_REL30", Const, 20, ""},
+		{"R_PPC64_REL32", Const, 5, ""},
+		{"R_PPC64_REL64", Const, 5, ""},
+		{"R_PPC64_RELATIVE", Const, 18, ""},
+		{"R_PPC64_SECTOFF", Const, 20, ""},
+		{"R_PPC64_SECTOFF_DS", Const, 10, ""},
+		{"R_PPC64_SECTOFF_HA", Const, 20, ""},
+		{"R_PPC64_SECTOFF_HI", Const, 20, ""},
+		{"R_PPC64_SECTOFF_LO", Const, 20, ""},
+		{"R_PPC64_SECTOFF_LO_DS", Const, 10, ""},
+		{"R_PPC64_TLS", Const, 5, ""},
+		{"R_PPC64_TLSGD", Const, 5, ""},
+		{"R_PPC64_TLSLD", Const, 5, ""},
+		{"R_PPC64_TOC", Const, 5, ""},
+		{"R_PPC64_TOC16", Const, 5, ""},
+		{"R_PPC64_TOC16_DS", Const, 5, ""},
+		{"R_PPC64_TOC16_HA", Const, 5, ""},
+		{"R_PPC64_TOC16_HI", Const, 5, ""},
+		{"R_PPC64_TOC16_LO", Const, 5, ""},
+		{"R_PPC64_TOC16_LO_DS", Const, 5, ""},
+		{"R_PPC64_TOCSAVE", Const, 10, ""},
+		{"R_PPC64_TPREL16", Const, 5, ""},
+		{"R_PPC64_TPREL16_DS", Const, 5, ""},
+		{"R_PPC64_TPREL16_HA", Const, 5, ""},
+		{"R_PPC64_TPREL16_HI", Const, 5, ""},
+		{"R_PPC64_TPREL16_HIGH", Const, 10, ""},
+		{"R_PPC64_TPREL16_HIGHA", Const, 10, ""},
+		{"R_PPC64_TPREL16_HIGHER", Const, 5, ""},
+		{"R_PPC64_TPREL16_HIGHERA", Const, 5, ""},
+		{"R_PPC64_TPREL16_HIGHEST", Const, 5, ""},
+		{"R_PPC64_TPREL16_HIGHESTA", Const, 5, ""},
+		{"R_PPC64_TPREL16_LO", Const, 5, ""},
+		{"R_PPC64_TPREL16_LO_DS", Const, 5, ""},
+		{"R_PPC64_TPREL34", Const, 20, ""},
+		{"R_PPC64_TPREL64", Const, 5, ""},
+		{"R_PPC64_UADDR16", Const, 20, ""},
+		{"R_PPC64_UADDR32", Const, 20, ""},
+		{"R_PPC64_UADDR64", Const, 20, ""},
+		{"R_PPC_ADDR14", Const, 0, ""},
+		{"R_PPC_ADDR14_BRNTAKEN", Const, 0, ""},
+		{"R_PPC_ADDR14_BRTAKEN", Const, 0, ""},
+		{"R_PPC_ADDR16", Const, 0, ""},
+		{"R_PPC_ADDR16_HA", Const, 0, ""},
+		{"R_PPC_ADDR16_HI", Const, 0, ""},
+		{"R_PPC_ADDR16_LO", Const, 0, ""},
+		{"R_PPC_ADDR24", Const, 0, ""},
+		{"R_PPC_ADDR32", Const, 0, ""},
+		{"R_PPC_COPY", Const, 0, ""},
+		{"R_PPC_DTPMOD32", Const, 0, ""},
+		{"R_PPC_DTPREL16", Const, 0, ""},
+		{"R_PPC_DTPREL16_HA", Const, 0, ""},
+		{"R_PPC_DTPREL16_HI", Const, 0, ""},
+		{"R_PPC_DTPREL16_LO", Const, 0, ""},
+		{"R_PPC_DTPREL32", Const, 0, ""},
+		{"R_PPC_EMB_BIT_FLD", Const, 0, ""},
+		{"R_PPC_EMB_MRKREF", Const, 0, ""},
+		{"R_PPC_EMB_NADDR16", Const, 0, ""},
+		{"R_PPC_EMB_NADDR16_HA", Const, 0, ""},
+		{"R_PPC_EMB_NADDR16_HI", Const, 0, ""},
+		{"R_PPC_EMB_NADDR16_LO", Const, 0, ""},
+		{"R_PPC_EMB_NADDR32", Const, 0, ""},
+		{"R_PPC_EMB_RELSDA", Const, 0, ""},
+		{"R_PPC_EMB_RELSEC16", Const, 0, ""},
+		{"R_PPC_EMB_RELST_HA", Const, 0, ""},
+		{"R_PPC_EMB_RELST_HI", Const, 0, ""},
+		{"R_PPC_EMB_RELST_LO", Const, 0, ""},
+		{"R_PPC_EMB_SDA21", Const, 0, ""},
+		{"R_PPC_EMB_SDA2I16", Const, 0, ""},
+		{"R_PPC_EMB_SDA2REL", Const, 0, ""},
+		{"R_PPC_EMB_SDAI16", Const, 0, ""},
+		{"R_PPC_GLOB_DAT", Const, 0, ""},
+		{"R_PPC_GOT16", Const, 0, ""},
+		{"R_PPC_GOT16_HA", Const, 0, ""},
+		{"R_PPC_GOT16_HI", Const, 0, ""},
+		{"R_PPC_GOT16_LO", Const, 0, ""},
+		{"R_PPC_GOT_TLSGD16", Const, 0, ""},
+		{"R_PPC_GOT_TLSGD16_HA", Const, 0, ""},
+		{"R_PPC_GOT_TLSGD16_HI", Const, 0, ""},
+		{"R_PPC_GOT_TLSGD16_LO", Const, 0, ""},
+		{"R_PPC_GOT_TLSLD16", Const, 0, ""},
+		{"R_PPC_GOT_TLSLD16_HA", Const, 0, ""},
+		{"R_PPC_GOT_TLSLD16_HI", Const, 0, ""},
+		{"R_PPC_GOT_TLSLD16_LO", Const, 0, ""},
+		{"R_PPC_GOT_TPREL16", Const, 0, ""},
+		{"R_PPC_GOT_TPREL16_HA", Const, 0, ""},
+		{"R_PPC_GOT_TPREL16_HI", Const, 0, ""},
+		{"R_PPC_GOT_TPREL16_LO", Const, 0, ""},
+		{"R_PPC_JMP_SLOT", Const, 0, ""},
+		{"R_PPC_LOCAL24PC", Const, 0, ""},
+		{"R_PPC_NONE", Const, 0, ""},
+		{"R_PPC_PLT16_HA", Const, 0, ""},
+		{"R_PPC_PLT16_HI", Const, 0, ""},
+		{"R_PPC_PLT16_LO", Const, 0, ""},
+		{"R_PPC_PLT32", Const, 0, ""},
+		{"R_PPC_PLTREL24", Const, 0, ""},
+		{"R_PPC_PLTREL32", Const, 0, ""},
+		{"R_PPC_REL14", Const, 0, ""},
+		{"R_PPC_REL14_BRNTAKEN", Const, 0, ""},
+		{"R_PPC_REL14_BRTAKEN", Const, 0, ""},
+		{"R_PPC_REL24", Const, 0, ""},
+		{"R_PPC_REL32", Const, 0, ""},
+		{"R_PPC_RELATIVE", Const, 0, ""},
+		{"R_PPC_SDAREL16", Const, 0, ""},
+		{"R_PPC_SECTOFF", Const, 0, ""},
+		{"R_PPC_SECTOFF_HA", Const, 0, ""},
+		{"R_PPC_SECTOFF_HI", Const, 0, ""},
+		{"R_PPC_SECTOFF_LO", Const, 0, ""},
+		{"R_PPC_TLS", Const, 0, ""},
+		{"R_PPC_TPREL16", Const, 0, ""},
+		{"R_PPC_TPREL16_HA", Const, 0, ""},
+		{"R_PPC_TPREL16_HI", Const, 0, ""},
+		{"R_PPC_TPREL16_LO", Const, 0, ""},
+		{"R_PPC_TPREL32", Const, 0, ""},
+		{"R_PPC_UADDR16", Const, 0, ""},
+		{"R_PPC_UADDR32", Const, 0, ""},
+		{"R_RISCV", Type, 11, ""},
+		{"R_RISCV_32", Const, 11, ""},
+		{"R_RISCV_32_PCREL", Const, 12, ""},
+		{"R_RISCV_64", Const, 11, ""},
+		{"R_RISCV_ADD16", Const, 11, ""},
+		{"R_RISCV_ADD32", Const, 11, ""},
+		{"R_RISCV_ADD64", Const, 11, ""},
+		{"R_RISCV_ADD8", Const, 11, ""},
+		{"R_RISCV_ALIGN", Const, 11, ""},
+		{"R_RISCV_BRANCH", Const, 11, ""},
+		{"R_RISCV_CALL", Const, 11, ""},
+		{"R_RISCV_CALL_PLT", Const, 11, ""},
+		{"R_RISCV_COPY", Const, 11, ""},
+		{"R_RISCV_GNU_VTENTRY", Const, 11, ""},
+		{"R_RISCV_GNU_VTINHERIT", Const, 11, ""},
+		{"R_RISCV_GOT_HI20", Const, 11, ""},
+		{"R_RISCV_GPREL_I", Const, 11, ""},
+		{"R_RISCV_GPREL_S", Const, 11, ""},
+		{"R_RISCV_HI20", Const, 11, ""},
+		{"R_RISCV_JAL", Const, 11, ""},
+		{"R_RISCV_JUMP_SLOT", Const, 11, ""},
+		{"R_RISCV_LO12_I", Const, 11, ""},
+		{"R_RISCV_LO12_S", Const, 11, ""},
+		{"R_RISCV_NONE", Const, 11, ""},
+		{"R_RISCV_PCREL_HI20", Const, 11, ""},
+		{"R_RISCV_PCREL_LO12_I", Const, 11, ""},
+		{"R_RISCV_PCREL_LO12_S", Const, 11, ""},
+		{"R_RISCV_RELATIVE", Const, 11, ""},
+		{"R_RISCV_RELAX", Const, 11, ""},
+		{"R_RISCV_RVC_BRANCH", Const, 11, ""},
+		{"R_RISCV_RVC_JUMP", Const, 11, ""},
+		{"R_RISCV_RVC_LUI", Const, 11, ""},
+		{"R_RISCV_SET16", Const, 11, ""},
+		{"R_RISCV_SET32", Const, 11, ""},
+		{"R_RISCV_SET6", Const, 11, ""},
+		{"R_RISCV_SET8", Const, 11, ""},
+		{"R_RISCV_SUB16", Const, 11, ""},
+		{"R_RISCV_SUB32", Const, 11, ""},
+		{"R_RISCV_SUB6", Const, 11, ""},
+		{"R_RISCV_SUB64", Const, 11, ""},
+		{"R_RISCV_SUB8", Const, 11, ""},
+		{"R_RISCV_TLS_DTPMOD32", Const, 11, ""},
+		{"R_RISCV_TLS_DTPMOD64", Const, 11, ""},
+		{"R_RISCV_TLS_DTPREL32", Const, 11, ""},
+		{"R_RISCV_TLS_DTPREL64", Const, 11, ""},
+		{"R_RISCV_TLS_GD_HI20", Const, 11, ""},
+		{"R_RISCV_TLS_GOT_HI20", Const, 11, ""},
+		{"R_RISCV_TLS_TPREL32", Const, 11, ""},
+		{"R_RISCV_TLS_TPREL64", Const, 11, ""},
+		{"R_RISCV_TPREL_ADD", Const, 11, ""},
+		{"R_RISCV_TPREL_HI20", Const, 11, ""},
+		{"R_RISCV_TPREL_I", Const, 11, ""},
+		{"R_RISCV_TPREL_LO12_I", Const, 11, ""},
+		{"R_RISCV_TPREL_LO12_S", Const, 11, ""},
+		{"R_RISCV_TPREL_S", Const, 11, ""},
+		{"R_SPARC", Type, 0, ""},
+		{"R_SPARC_10", Const, 0, ""},
+		{"R_SPARC_11", Const, 0, ""},
+		{"R_SPARC_13", Const, 0, ""},
+		{"R_SPARC_16", Const, 0, ""},
+		{"R_SPARC_22", Const, 0, ""},
+		{"R_SPARC_32", Const, 0, ""},
+		{"R_SPARC_5", Const, 0, ""},
+		{"R_SPARC_6", Const, 0, ""},
+		{"R_SPARC_64", Const, 0, ""},
+		{"R_SPARC_7", Const, 0, ""},
+		{"R_SPARC_8", Const, 0, ""},
+		{"R_SPARC_COPY", Const, 0, ""},
+		{"R_SPARC_DISP16", Const, 0, ""},
+		{"R_SPARC_DISP32", Const, 0, ""},
+		{"R_SPARC_DISP64", Const, 0, ""},
+		{"R_SPARC_DISP8", Const, 0, ""},
+		{"R_SPARC_GLOB_DAT", Const, 0, ""},
+		{"R_SPARC_GLOB_JMP", Const, 0, ""},
+		{"R_SPARC_GOT10", Const, 0, ""},
+		{"R_SPARC_GOT13", Const, 0, ""},
+		{"R_SPARC_GOT22", Const, 0, ""},
+		{"R_SPARC_H44", Const, 0, ""},
+		{"R_SPARC_HH22", Const, 0, ""},
+		{"R_SPARC_HI22", Const, 0, ""},
+		{"R_SPARC_HIPLT22", Const, 0, ""},
+		{"R_SPARC_HIX22", Const, 0, ""},
+		{"R_SPARC_HM10", Const, 0, ""},
+		{"R_SPARC_JMP_SLOT", Const, 0, ""},
+		{"R_SPARC_L44", Const, 0, ""},
+		{"R_SPARC_LM22", Const, 0, ""},
+		{"R_SPARC_LO10", Const, 0, ""},
+		{"R_SPARC_LOPLT10", Const, 0, ""},
+		{"R_SPARC_LOX10", Const, 0, ""},
+		{"R_SPARC_M44", Const, 0, ""},
+		{"R_SPARC_NONE", Const, 0, ""},
+		{"R_SPARC_OLO10", Const, 0, ""},
+		{"R_SPARC_PC10", Const, 0, ""},
+		{"R_SPARC_PC22", Const, 0, ""},
+		{"R_SPARC_PCPLT10", Const, 0, ""},
+		{"R_SPARC_PCPLT22", Const, 0, ""},
+		{"R_SPARC_PCPLT32", Const, 0, ""},
+		{"R_SPARC_PC_HH22", Const, 0, ""},
+		{"R_SPARC_PC_HM10", Const, 0, ""},
+		{"R_SPARC_PC_LM22", Const, 0, ""},
+		{"R_SPARC_PLT32", Const, 0, ""},
+		{"R_SPARC_PLT64", Const, 0, ""},
+		{"R_SPARC_REGISTER", Const, 0, ""},
+		{"R_SPARC_RELATIVE", Const, 0, ""},
+		{"R_SPARC_UA16", Const, 0, ""},
+		{"R_SPARC_UA32", Const, 0, ""},
+		{"R_SPARC_UA64", Const, 0, ""},
+		{"R_SPARC_WDISP16", Const, 0, ""},
+		{"R_SPARC_WDISP19", Const, 0, ""},
+		{"R_SPARC_WDISP22", Const, 0, ""},
+		{"R_SPARC_WDISP30", Const, 0, ""},
+		{"R_SPARC_WPLT30", Const, 0, ""},
+		{"R_SYM32", Func, 0, "func(info uint32) uint32"},
+		{"R_SYM64", Func, 0, "func(info uint64) uint32"},
+		{"R_TYPE32", Func, 0, "func(info uint32) uint32"},
+		{"R_TYPE64", Func, 0, "func(info uint64) uint32"},
+		{"R_X86_64", Type, 0, ""},
+		{"R_X86_64_16", Const, 0, ""},
+		{"R_X86_64_32", Const, 0, ""},
+		{"R_X86_64_32S", Const, 0, ""},
+		{"R_X86_64_64", Const, 0, ""},
+		{"R_X86_64_8", Const, 0, ""},
+		{"R_X86_64_COPY", Const, 0, ""},
+		{"R_X86_64_DTPMOD64", Const, 0, ""},
+		{"R_X86_64_DTPOFF32", Const, 0, ""},
+		{"R_X86_64_DTPOFF64", Const, 0, ""},
+		{"R_X86_64_GLOB_DAT", Const, 0, ""},
+		{"R_X86_64_GOT32", Const, 0, ""},
+		{"R_X86_64_GOT64", Const, 10, ""},
+		{"R_X86_64_GOTOFF64", Const, 10, ""},
+		{"R_X86_64_GOTPC32", Const, 10, ""},
+		{"R_X86_64_GOTPC32_TLSDESC", Const, 10, ""},
+		{"R_X86_64_GOTPC64", Const, 10, ""},
+		{"R_X86_64_GOTPCREL", Const, 0, ""},
+		{"R_X86_64_GOTPCREL64", Const, 10, ""},
+		{"R_X86_64_GOTPCRELX", Const, 10, ""},
+		{"R_X86_64_GOTPLT64", Const, 10, ""},
+		{"R_X86_64_GOTTPOFF", Const, 0, ""},
+		{"R_X86_64_IRELATIVE", Const, 10, ""},
+		{"R_X86_64_JMP_SLOT", Const, 0, ""},
+		{"R_X86_64_NONE", Const, 0, ""},
+		{"R_X86_64_PC16", Const, 0, ""},
+		{"R_X86_64_PC32", Const, 0, ""},
+		{"R_X86_64_PC32_BND", Const, 10, ""},
+		{"R_X86_64_PC64", Const, 10, ""},
+		{"R_X86_64_PC8", Const, 0, ""},
+		{"R_X86_64_PLT32", Const, 0, ""},
+		{"R_X86_64_PLT32_BND", Const, 10, ""},
+		{"R_X86_64_PLTOFF64", Const, 10, ""},
+		{"R_X86_64_RELATIVE", Const, 0, ""},
+		{"R_X86_64_RELATIVE64", Const, 10, ""},
+		{"R_X86_64_REX_GOTPCRELX", Const, 10, ""},
+		{"R_X86_64_SIZE32", Const, 10, ""},
+		{"R_X86_64_SIZE64", Const, 10, ""},
+		{"R_X86_64_TLSDESC", Const, 10, ""},
+		{"R_X86_64_TLSDESC_CALL", Const, 10, ""},
+		{"R_X86_64_TLSGD", Const, 0, ""},
+		{"R_X86_64_TLSLD", Const, 0, ""},
+		{"R_X86_64_TPOFF32", Const, 0, ""},
+		{"R_X86_64_TPOFF64", Const, 0, ""},
+		{"Rel32", Type, 0, ""},
+		{"Rel32.Info", Field, 0, ""},
+		{"Rel32.Off", Field, 0, ""},
+		{"Rel64", Type, 0, ""},
+		{"Rel64.Info", Field, 0, ""},
+		{"Rel64.Off", Field, 0, ""},
+		{"Rela32", Type, 0, ""},
+		{"Rela32.Addend", Field, 0, ""},
+		{"Rela32.Info", Field, 0, ""},
+		{"Rela32.Off", Field, 0, ""},
+		{"Rela64", Type, 0, ""},
+		{"Rela64.Addend", Field, 0, ""},
+		{"Rela64.Info", Field, 0, ""},
+		{"Rela64.Off", Field, 0, ""},
+		{"SHF_ALLOC", Const, 0, ""},
+		{"SHF_COMPRESSED", Const, 6, ""},
+		{"SHF_EXECINSTR", Const, 0, ""},
+		{"SHF_GROUP", Const, 0, ""},
+		{"SHF_INFO_LINK", Const, 0, ""},
+		{"SHF_LINK_ORDER", Const, 0, ""},
+		{"SHF_MASKOS", Const, 0, ""},
+		{"SHF_MASKPROC", Const, 0, ""},
+		{"SHF_MERGE", Const, 0, ""},
+		{"SHF_OS_NONCONFORMING", Const, 0, ""},
+		{"SHF_STRINGS", Const, 0, ""},
+		{"SHF_TLS", Const, 0, ""},
+		{"SHF_WRITE", Const, 0, ""},
+		{"SHN_ABS", Const, 0, ""},
+		{"SHN_COMMON", Const, 0, ""},
+		{"SHN_HIOS", Const, 0, ""},
+		{"SHN_HIPROC", Const, 0, ""},
+		{"SHN_HIRESERVE", Const, 0, ""},
+		{"SHN_LOOS", Const, 0, ""},
+		{"SHN_LOPROC", Const, 0, ""},
+		{"SHN_LORESERVE", Const, 0, ""},
+		{"SHN_UNDEF", Const, 0, ""},
+		{"SHN_XINDEX", Const, 0, ""},
+		{"SHT_DYNAMIC", Const, 0, ""},
+		{"SHT_DYNSYM", Const, 0, ""},
+		{"SHT_FINI_ARRAY", Const, 0, ""},
+		{"SHT_GNU_ATTRIBUTES", Const, 0, ""},
+		{"SHT_GNU_HASH", Const, 0, ""},
+		{"SHT_GNU_LIBLIST", Const, 0, ""},
+		{"SHT_GNU_VERDEF", Const, 0, ""},
+		{"SHT_GNU_VERNEED", Const, 0, ""},
+		{"SHT_GNU_VERSYM", Const, 0, ""},
+		{"SHT_GROUP", Const, 0, ""},
+		{"SHT_HASH", Const, 0, ""},
+		{"SHT_HIOS", Const, 0, ""},
+		{"SHT_HIPROC", Const, 0, ""},
+		{"SHT_HIUSER", Const, 0, ""},
+		{"SHT_INIT_ARRAY", Const, 0, ""},
+		{"SHT_LOOS", Const, 0, ""},
+		{"SHT_LOPROC", Const, 0, ""},
+		{"SHT_LOUSER", Const, 0, ""},
+		{"SHT_MIPS_ABIFLAGS", Const, 17, ""},
+		{"SHT_NOBITS", Const, 0, ""},
+		{"SHT_NOTE", Const, 0, ""},
+		{"SHT_NULL", Const, 0, ""},
+		{"SHT_PREINIT_ARRAY", Const, 0, ""},
+		{"SHT_PROGBITS", Const, 0, ""},
+		{"SHT_REL", Const, 0, ""},
+		{"SHT_RELA", Const, 0, ""},
+		{"SHT_RISCV_ATTRIBUTES", Const, 25, ""},
+		{"SHT_SHLIB", Const, 0, ""},
+		{"SHT_STRTAB", Const, 0, ""},
+		{"SHT_SYMTAB", Const, 0, ""},
+		{"SHT_SYMTAB_SHNDX", Const, 0, ""},
+		{"STB_GLOBAL", Const, 0, ""},
+		{"STB_HIOS", Const, 0, ""},
+		{"STB_HIPROC", Const, 0, ""},
+		{"STB_LOCAL", Const, 0, ""},
+		{"STB_LOOS", Const, 0, ""},
+		{"STB_LOPROC", Const, 0, ""},
+		{"STB_WEAK", Const, 0, ""},
+		{"STT_COMMON", Const, 0, ""},
+		{"STT_FILE", Const, 0, ""},
+		{"STT_FUNC", Const, 0, ""},
+		{"STT_GNU_IFUNC", Const, 23, ""},
+		{"STT_HIOS", Const, 0, ""},
+		{"STT_HIPROC", Const, 0, ""},
+		{"STT_LOOS", Const, 0, ""},
+		{"STT_LOPROC", Const, 0, ""},
+		{"STT_NOTYPE", Const, 0, ""},
+		{"STT_OBJECT", Const, 0, ""},
+		{"STT_RELC", Const, 23, ""},
+		{"STT_SECTION", Const, 0, ""},
+		{"STT_SRELC", Const, 23, ""},
+		{"STT_TLS", Const, 0, ""},
+		{"STV_DEFAULT", Const, 0, ""},
+		{"STV_HIDDEN", Const, 0, ""},
+		{"STV_INTERNAL", Const, 0, ""},
+		{"STV_PROTECTED", Const, 0, ""},
+		{"ST_BIND", Func, 0, "func(info uint8) SymBind"},
+		{"ST_INFO", Func, 0, "func(bind SymBind, typ SymType) uint8"},
+		{"ST_TYPE", Func, 0, "func(info uint8) SymType"},
+		{"ST_VISIBILITY", Func, 0, "func(other uint8) SymVis"},
+		{"Section", Type, 0, ""},
+		{"Section.ReaderAt", Field, 0, ""},
+		{"Section.SectionHeader", Field, 0, ""},
+		{"Section32", Type, 0, ""},
+		{"Section32.Addr", Field, 0, ""},
+		{"Section32.Addralign", Field, 0, ""},
+		{"Section32.Entsize", Field, 0, ""},
+		{"Section32.Flags", Field, 0, ""},
+		{"Section32.Info", Field, 0, ""},
+		{"Section32.Link", Field, 0, ""},
+		{"Section32.Name", Field, 0, ""},
+		{"Section32.Off", Field, 0, ""},
+		{"Section32.Size", Field, 0, ""},
+		{"Section32.Type", Field, 0, ""},
+		{"Section64", Type, 0, ""},
+		{"Section64.Addr", Field, 0, ""},
+		{"Section64.Addralign", Field, 0, ""},
+		{"Section64.Entsize", Field, 0, ""},
+		{"Section64.Flags", Field, 0, ""},
+		{"Section64.Info", Field, 0, ""},
+		{"Section64.Link", Field, 0, ""},
+		{"Section64.Name", Field, 0, ""},
+		{"Section64.Off", Field, 0, ""},
+		{"Section64.Size", Field, 0, ""},
+		{"Section64.Type", Field, 0, ""},
+		{"SectionFlag", Type, 0, ""},
+		{"SectionHeader", Type, 0, ""},
+		{"SectionHeader.Addr", Field, 0, ""},
+		{"SectionHeader.Addralign", Field, 0, ""},
+		{"SectionHeader.Entsize", Field, 0, ""},
+		{"SectionHeader.FileSize", Field, 6, ""},
+		{"SectionHeader.Flags", Field, 0, ""},
+		{"SectionHeader.Info", Field, 0, ""},
+		{"SectionHeader.Link", Field, 0, ""},
+		{"SectionHeader.Name", Field, 0, ""},
+		{"SectionHeader.Offset", Field, 0, ""},
+		{"SectionHeader.Size", Field, 0, ""},
+		{"SectionHeader.Type", Field, 0, ""},
+		{"SectionIndex", Type, 0, ""},
+		{"SectionType", Type, 0, ""},
+		{"Sym32", Type, 0, ""},
+		{"Sym32.Info", Field, 0, ""},
+		{"Sym32.Name", Field, 0, ""},
+		{"Sym32.Other", Field, 0, ""},
+		{"Sym32.Shndx", Field, 0, ""},
+		{"Sym32.Size", Field, 0, ""},
+		{"Sym32.Value", Field, 0, ""},
+		{"Sym32Size", Const, 0, ""},
+		{"Sym64", Type, 0, ""},
+		{"Sym64.Info", Field, 0, ""},
+		{"Sym64.Name", Field, 0, ""},
+		{"Sym64.Other", Field, 0, ""},
+		{"Sym64.Shndx", Field, 0, ""},
+		{"Sym64.Size", Field, 0, ""},
+		{"Sym64.Value", Field, 0, ""},
+		{"Sym64Size", Const, 0, ""},
+		{"SymBind", Type, 0, ""},
+		{"SymType", Type, 0, ""},
+		{"SymVis", Type, 0, ""},
+		{"Symbol", Type, 0, ""},
+		{"Symbol.HasVersion", Field, 24, ""},
+		{"Symbol.Info", Field, 0, ""},
+		{"Symbol.Library", Field, 13, ""},
+		{"Symbol.Name", Field, 0, ""},
+		{"Symbol.Other", Field, 0, ""},
+		{"Symbol.Section", Field, 0, ""},
+		{"Symbol.Size", Field, 0, ""},
+		{"Symbol.Value", Field, 0, ""},
+		{"Symbol.Version", Field, 13, ""},
+		{"Symbol.VersionIndex", Field, 24, ""},
+		{"Type", Type, 0, ""},
+		{"VER_FLG_BASE", Const, 24, ""},
+		{"VER_FLG_INFO", Const, 24, ""},
+		{"VER_FLG_WEAK", Const, 24, ""},
+		{"Version", Type, 0, ""},
+		{"VersionIndex", Type, 24, ""},
 	},
 	"debug/gosym": {
-		{"(*DecodingError).Error", Method, 0},
-		{"(*LineTable).LineToPC", Method, 0},
-		{"(*LineTable).PCToLine", Method, 0},
-		{"(*Sym).BaseName", Method, 0},
-		{"(*Sym).PackageName", Method, 0},
-		{"(*Sym).ReceiverName", Method, 0},
-		{"(*Sym).Static", Method, 0},
-		{"(*Table).LineToPC", Method, 0},
-		{"(*Table).LookupFunc", Method, 0},
-		{"(*Table).LookupSym", Method, 0},
-		{"(*Table).PCToFunc", Method, 0},
-		{"(*Table).PCToLine", Method, 0},
-		{"(*Table).SymByAddr", Method, 0},
-		{"(*UnknownLineError).Error", Method, 0},
-		{"(Func).BaseName", Method, 0},
-		{"(Func).PackageName", Method, 0},
-		{"(Func).ReceiverName", Method, 0},
-		{"(Func).Static", Method, 0},
-		{"(UnknownFileError).Error", Method, 0},
-		{"DecodingError", Type, 0},
-		{"Func", Type, 0},
-		{"Func.End", Field, 0},
-		{"Func.Entry", Field, 0},
-		{"Func.FrameSize", Field, 0},
-		{"Func.LineTable", Field, 0},
-		{"Func.Locals", Field, 0},
-		{"Func.Obj", Field, 0},
-		{"Func.Params", Field, 0},
-		{"Func.Sym", Field, 0},
-		{"LineTable", Type, 0},
-		{"LineTable.Data", Field, 0},
-		{"LineTable.Line", Field, 0},
-		{"LineTable.PC", Field, 0},
-		{"NewLineTable", Func, 0},
-		{"NewTable", Func, 0},
-		{"Obj", Type, 0},
-		{"Obj.Funcs", Field, 0},
-		{"Obj.Paths", Field, 0},
-		{"Sym", Type, 0},
-		{"Sym.Func", Field, 0},
-		{"Sym.GoType", Field, 0},
-		{"Sym.Name", Field, 0},
-		{"Sym.Type", Field, 0},
-		{"Sym.Value", Field, 0},
-		{"Table", Type, 0},
-		{"Table.Files", Field, 0},
-		{"Table.Funcs", Field, 0},
-		{"Table.Objs", Field, 0},
-		{"Table.Syms", Field, 0},
-		{"UnknownFileError", Type, 0},
-		{"UnknownLineError", Type, 0},
-		{"UnknownLineError.File", Field, 0},
-		{"UnknownLineError.Line", Field, 0},
+		{"(*DecodingError).Error", Method, 0, ""},
+		{"(*LineTable).LineToPC", Method, 0, ""},
+		{"(*LineTable).PCToLine", Method, 0, ""},
+		{"(*Sym).BaseName", Method, 0, ""},
+		{"(*Sym).PackageName", Method, 0, ""},
+		{"(*Sym).ReceiverName", Method, 0, ""},
+		{"(*Sym).Static", Method, 0, ""},
+		{"(*Table).LineToPC", Method, 0, ""},
+		{"(*Table).LookupFunc", Method, 0, ""},
+		{"(*Table).LookupSym", Method, 0, ""},
+		{"(*Table).PCToFunc", Method, 0, ""},
+		{"(*Table).PCToLine", Method, 0, ""},
+		{"(*Table).SymByAddr", Method, 0, ""},
+		{"(*UnknownLineError).Error", Method, 0, ""},
+		{"(Func).BaseName", Method, 0, ""},
+		{"(Func).PackageName", Method, 0, ""},
+		{"(Func).ReceiverName", Method, 0, ""},
+		{"(Func).Static", Method, 0, ""},
+		{"(UnknownFileError).Error", Method, 0, ""},
+		{"DecodingError", Type, 0, ""},
+		{"Func", Type, 0, ""},
+		{"Func.End", Field, 0, ""},
+		{"Func.Entry", Field, 0, ""},
+		{"Func.FrameSize", Field, 0, ""},
+		{"Func.LineTable", Field, 0, ""},
+		{"Func.Locals", Field, 0, ""},
+		{"Func.Obj", Field, 0, ""},
+		{"Func.Params", Field, 0, ""},
+		{"Func.Sym", Field, 0, ""},
+		{"LineTable", Type, 0, ""},
+		{"LineTable.Data", Field, 0, ""},
+		{"LineTable.Line", Field, 0, ""},
+		{"LineTable.PC", Field, 0, ""},
+		{"NewLineTable", Func, 0, "func(data []byte, text uint64) *LineTable"},
+		{"NewTable", Func, 0, "func(symtab []byte, pcln *LineTable) (*Table, error)"},
+		{"Obj", Type, 0, ""},
+		{"Obj.Funcs", Field, 0, ""},
+		{"Obj.Paths", Field, 0, ""},
+		{"Sym", Type, 0, ""},
+		{"Sym.Func", Field, 0, ""},
+		{"Sym.GoType", Field, 0, ""},
+		{"Sym.Name", Field, 0, ""},
+		{"Sym.Type", Field, 0, ""},
+		{"Sym.Value", Field, 0, ""},
+		{"Table", Type, 0, ""},
+		{"Table.Files", Field, 0, ""},
+		{"Table.Funcs", Field, 0, ""},
+		{"Table.Objs", Field, 0, ""},
+		{"Table.Syms", Field, 0, ""},
+		{"UnknownFileError", Type, 0, ""},
+		{"UnknownLineError", Type, 0, ""},
+		{"UnknownLineError.File", Field, 0, ""},
+		{"UnknownLineError.Line", Field, 0, ""},
 	},
 	"debug/macho": {
-		{"(*FatFile).Close", Method, 3},
-		{"(*File).Close", Method, 0},
-		{"(*File).DWARF", Method, 0},
-		{"(*File).ImportedLibraries", Method, 0},
-		{"(*File).ImportedSymbols", Method, 0},
-		{"(*File).Section", Method, 0},
-		{"(*File).Segment", Method, 0},
-		{"(*FormatError).Error", Method, 0},
-		{"(*Section).Data", Method, 0},
-		{"(*Section).Open", Method, 0},
-		{"(*Segment).Data", Method, 0},
-		{"(*Segment).Open", Method, 0},
-		{"(Cpu).GoString", Method, 0},
-		{"(Cpu).String", Method, 0},
-		{"(Dylib).Raw", Method, 0},
-		{"(Dysymtab).Raw", Method, 0},
-		{"(FatArch).Close", Method, 3},
-		{"(FatArch).DWARF", Method, 3},
-		{"(FatArch).ImportedLibraries", Method, 3},
-		{"(FatArch).ImportedSymbols", Method, 3},
-		{"(FatArch).Section", Method, 3},
-		{"(FatArch).Segment", Method, 3},
-		{"(LoadBytes).Raw", Method, 0},
-		{"(LoadCmd).GoString", Method, 0},
-		{"(LoadCmd).String", Method, 0},
-		{"(RelocTypeARM).GoString", Method, 10},
-		{"(RelocTypeARM).String", Method, 10},
-		{"(RelocTypeARM64).GoString", Method, 10},
-		{"(RelocTypeARM64).String", Method, 10},
-		{"(RelocTypeGeneric).GoString", Method, 10},
-		{"(RelocTypeGeneric).String", Method, 10},
-		{"(RelocTypeX86_64).GoString", Method, 10},
-		{"(RelocTypeX86_64).String", Method, 10},
-		{"(Rpath).Raw", Method, 10},
-		{"(Section).ReadAt", Method, 0},
-		{"(Segment).Raw", Method, 0},
-		{"(Segment).ReadAt", Method, 0},
-		{"(Symtab).Raw", Method, 0},
-		{"(Type).GoString", Method, 10},
-		{"(Type).String", Method, 10},
-		{"ARM64_RELOC_ADDEND", Const, 10},
-		{"ARM64_RELOC_BRANCH26", Const, 10},
-		{"ARM64_RELOC_GOT_LOAD_PAGE21", Const, 10},
-		{"ARM64_RELOC_GOT_LOAD_PAGEOFF12", Const, 10},
-		{"ARM64_RELOC_PAGE21", Const, 10},
-		{"ARM64_RELOC_PAGEOFF12", Const, 10},
-		{"ARM64_RELOC_POINTER_TO_GOT", Const, 10},
-		{"ARM64_RELOC_SUBTRACTOR", Const, 10},
-		{"ARM64_RELOC_TLVP_LOAD_PAGE21", Const, 10},
-		{"ARM64_RELOC_TLVP_LOAD_PAGEOFF12", Const, 10},
-		{"ARM64_RELOC_UNSIGNED", Const, 10},
-		{"ARM_RELOC_BR24", Const, 10},
-		{"ARM_RELOC_HALF", Const, 10},
-		{"ARM_RELOC_HALF_SECTDIFF", Const, 10},
-		{"ARM_RELOC_LOCAL_SECTDIFF", Const, 10},
-		{"ARM_RELOC_PAIR", Const, 10},
-		{"ARM_RELOC_PB_LA_PTR", Const, 10},
-		{"ARM_RELOC_SECTDIFF", Const, 10},
-		{"ARM_RELOC_VANILLA", Const, 10},
-		{"ARM_THUMB_32BIT_BRANCH", Const, 10},
-		{"ARM_THUMB_RELOC_BR22", Const, 10},
-		{"Cpu", Type, 0},
-		{"Cpu386", Const, 0},
-		{"CpuAmd64", Const, 0},
-		{"CpuArm", Const, 3},
-		{"CpuArm64", Const, 11},
-		{"CpuPpc", Const, 3},
-		{"CpuPpc64", Const, 3},
-		{"Dylib", Type, 0},
-		{"Dylib.CompatVersion", Field, 0},
-		{"Dylib.CurrentVersion", Field, 0},
-		{"Dylib.LoadBytes", Field, 0},
-		{"Dylib.Name", Field, 0},
-		{"Dylib.Time", Field, 0},
-		{"DylibCmd", Type, 0},
-		{"DylibCmd.Cmd", Field, 0},
-		{"DylibCmd.CompatVersion", Field, 0},
-		{"DylibCmd.CurrentVersion", Field, 0},
-		{"DylibCmd.Len", Field, 0},
-		{"DylibCmd.Name", Field, 0},
-		{"DylibCmd.Time", Field, 0},
-		{"Dysymtab", Type, 0},
-		{"Dysymtab.DysymtabCmd", Field, 0},
-		{"Dysymtab.IndirectSyms", Field, 0},
-		{"Dysymtab.LoadBytes", Field, 0},
-		{"DysymtabCmd", Type, 0},
-		{"DysymtabCmd.Cmd", Field, 0},
-		{"DysymtabCmd.Extrefsymoff", Field, 0},
-		{"DysymtabCmd.Extreloff", Field, 0},
-		{"DysymtabCmd.Iextdefsym", Field, 0},
-		{"DysymtabCmd.Ilocalsym", Field, 0},
-		{"DysymtabCmd.Indirectsymoff", Field, 0},
-		{"DysymtabCmd.Iundefsym", Field, 0},
-		{"DysymtabCmd.Len", Field, 0},
-		{"DysymtabCmd.Locreloff", Field, 0},
-		{"DysymtabCmd.Modtaboff", Field, 0},
-		{"DysymtabCmd.Nextdefsym", Field, 0},
-		{"DysymtabCmd.Nextrefsyms", Field, 0},
-		{"DysymtabCmd.Nextrel", Field, 0},
-		{"DysymtabCmd.Nindirectsyms", Field, 0},
-		{"DysymtabCmd.Nlocalsym", Field, 0},
-		{"DysymtabCmd.Nlocrel", Field, 0},
-		{"DysymtabCmd.Nmodtab", Field, 0},
-		{"DysymtabCmd.Ntoc", Field, 0},
-		{"DysymtabCmd.Nundefsym", Field, 0},
-		{"DysymtabCmd.Tocoffset", Field, 0},
-		{"ErrNotFat", Var, 3},
-		{"FatArch", Type, 3},
-		{"FatArch.FatArchHeader", Field, 3},
-		{"FatArch.File", Field, 3},
-		{"FatArchHeader", Type, 3},
-		{"FatArchHeader.Align", Field, 3},
-		{"FatArchHeader.Cpu", Field, 3},
-		{"FatArchHeader.Offset", Field, 3},
-		{"FatArchHeader.Size", Field, 3},
-		{"FatArchHeader.SubCpu", Field, 3},
-		{"FatFile", Type, 3},
-		{"FatFile.Arches", Field, 3},
-		{"FatFile.Magic", Field, 3},
-		{"File", Type, 0},
-		{"File.ByteOrder", Field, 0},
-		{"File.Dysymtab", Field, 0},
-		{"File.FileHeader", Field, 0},
-		{"File.Loads", Field, 0},
-		{"File.Sections", Field, 0},
-		{"File.Symtab", Field, 0},
-		{"FileHeader", Type, 0},
-		{"FileHeader.Cmdsz", Field, 0},
-		{"FileHeader.Cpu", Field, 0},
-		{"FileHeader.Flags", Field, 0},
-		{"FileHeader.Magic", Field, 0},
-		{"FileHeader.Ncmd", Field, 0},
-		{"FileHeader.SubCpu", Field, 0},
-		{"FileHeader.Type", Field, 0},
-		{"FlagAllModsBound", Const, 10},
-		{"FlagAllowStackExecution", Const, 10},
-		{"FlagAppExtensionSafe", Const, 10},
-		{"FlagBindAtLoad", Const, 10},
-		{"FlagBindsToWeak", Const, 10},
-		{"FlagCanonical", Const, 10},
-		{"FlagDeadStrippableDylib", Const, 10},
-		{"FlagDyldLink", Const, 10},
-		{"FlagForceFlat", Const, 10},
-		{"FlagHasTLVDescriptors", Const, 10},
-		{"FlagIncrLink", Const, 10},
-		{"FlagLazyInit", Const, 10},
-		{"FlagNoFixPrebinding", Const, 10},
-		{"FlagNoHeapExecution", Const, 10},
-		{"FlagNoMultiDefs", Const, 10},
-		{"FlagNoReexportedDylibs", Const, 10},
-		{"FlagNoUndefs", Const, 10},
-		{"FlagPIE", Const, 10},
-		{"FlagPrebindable", Const, 10},
-		{"FlagPrebound", Const, 10},
-		{"FlagRootSafe", Const, 10},
-		{"FlagSetuidSafe", Const, 10},
-		{"FlagSplitSegs", Const, 10},
-		{"FlagSubsectionsViaSymbols", Const, 10},
-		{"FlagTwoLevel", Const, 10},
-		{"FlagWeakDefines", Const, 10},
-		{"FormatError", Type, 0},
-		{"GENERIC_RELOC_LOCAL_SECTDIFF", Const, 10},
-		{"GENERIC_RELOC_PAIR", Const, 10},
-		{"GENERIC_RELOC_PB_LA_PTR", Const, 10},
-		{"GENERIC_RELOC_SECTDIFF", Const, 10},
-		{"GENERIC_RELOC_TLV", Const, 10},
-		{"GENERIC_RELOC_VANILLA", Const, 10},
-		{"Load", Type, 0},
-		{"LoadBytes", Type, 0},
-		{"LoadCmd", Type, 0},
-		{"LoadCmdDylib", Const, 0},
-		{"LoadCmdDylinker", Const, 0},
-		{"LoadCmdDysymtab", Const, 0},
-		{"LoadCmdRpath", Const, 10},
-		{"LoadCmdSegment", Const, 0},
-		{"LoadCmdSegment64", Const, 0},
-		{"LoadCmdSymtab", Const, 0},
-		{"LoadCmdThread", Const, 0},
-		{"LoadCmdUnixThread", Const, 0},
-		{"Magic32", Const, 0},
-		{"Magic64", Const, 0},
-		{"MagicFat", Const, 3},
-		{"NewFatFile", Func, 3},
-		{"NewFile", Func, 0},
-		{"Nlist32", Type, 0},
-		{"Nlist32.Desc", Field, 0},
-		{"Nlist32.Name", Field, 0},
-		{"Nlist32.Sect", Field, 0},
-		{"Nlist32.Type", Field, 0},
-		{"Nlist32.Value", Field, 0},
-		{"Nlist64", Type, 0},
-		{"Nlist64.Desc", Field, 0},
-		{"Nlist64.Name", Field, 0},
-		{"Nlist64.Sect", Field, 0},
-		{"Nlist64.Type", Field, 0},
-		{"Nlist64.Value", Field, 0},
-		{"Open", Func, 0},
-		{"OpenFat", Func, 3},
-		{"Regs386", Type, 0},
-		{"Regs386.AX", Field, 0},
-		{"Regs386.BP", Field, 0},
-		{"Regs386.BX", Field, 0},
-		{"Regs386.CS", Field, 0},
-		{"Regs386.CX", Field, 0},
-		{"Regs386.DI", Field, 0},
-		{"Regs386.DS", Field, 0},
-		{"Regs386.DX", Field, 0},
-		{"Regs386.ES", Field, 0},
-		{"Regs386.FLAGS", Field, 0},
-		{"Regs386.FS", Field, 0},
-		{"Regs386.GS", Field, 0},
-		{"Regs386.IP", Field, 0},
-		{"Regs386.SI", Field, 0},
-		{"Regs386.SP", Field, 0},
-		{"Regs386.SS", Field, 0},
-		{"RegsAMD64", Type, 0},
-		{"RegsAMD64.AX", Field, 0},
-		{"RegsAMD64.BP", Field, 0},
-		{"RegsAMD64.BX", Field, 0},
-		{"RegsAMD64.CS", Field, 0},
-		{"RegsAMD64.CX", Field, 0},
-		{"RegsAMD64.DI", Field, 0},
-		{"RegsAMD64.DX", Field, 0},
-		{"RegsAMD64.FLAGS", Field, 0},
-		{"RegsAMD64.FS", Field, 0},
-		{"RegsAMD64.GS", Field, 0},
-		{"RegsAMD64.IP", Field, 0},
-		{"RegsAMD64.R10", Field, 0},
-		{"RegsAMD64.R11", Field, 0},
-		{"RegsAMD64.R12", Field, 0},
-		{"RegsAMD64.R13", Field, 0},
-		{"RegsAMD64.R14", Field, 0},
-		{"RegsAMD64.R15", Field, 0},
-		{"RegsAMD64.R8", Field, 0},
-		{"RegsAMD64.R9", Field, 0},
-		{"RegsAMD64.SI", Field, 0},
-		{"RegsAMD64.SP", Field, 0},
-		{"Reloc", Type, 10},
-		{"Reloc.Addr", Field, 10},
-		{"Reloc.Extern", Field, 10},
-		{"Reloc.Len", Field, 10},
-		{"Reloc.Pcrel", Field, 10},
-		{"Reloc.Scattered", Field, 10},
-		{"Reloc.Type", Field, 10},
-		{"Reloc.Value", Field, 10},
-		{"RelocTypeARM", Type, 10},
-		{"RelocTypeARM64", Type, 10},
-		{"RelocTypeGeneric", Type, 10},
-		{"RelocTypeX86_64", Type, 10},
-		{"Rpath", Type, 10},
-		{"Rpath.LoadBytes", Field, 10},
-		{"Rpath.Path", Field, 10},
-		{"RpathCmd", Type, 10},
-		{"RpathCmd.Cmd", Field, 10},
-		{"RpathCmd.Len", Field, 10},
-		{"RpathCmd.Path", Field, 10},
-		{"Section", Type, 0},
-		{"Section.ReaderAt", Field, 0},
-		{"Section.Relocs", Field, 10},
-		{"Section.SectionHeader", Field, 0},
-		{"Section32", Type, 0},
-		{"Section32.Addr", Field, 0},
-		{"Section32.Align", Field, 0},
-		{"Section32.Flags", Field, 0},
-		{"Section32.Name", Field, 0},
-		{"Section32.Nreloc", Field, 0},
-		{"Section32.Offset", Field, 0},
-		{"Section32.Reloff", Field, 0},
-		{"Section32.Reserve1", Field, 0},
-		{"Section32.Reserve2", Field, 0},
-		{"Section32.Seg", Field, 0},
-		{"Section32.Size", Field, 0},
-		{"Section64", Type, 0},
-		{"Section64.Addr", Field, 0},
-		{"Section64.Align", Field, 0},
-		{"Section64.Flags", Field, 0},
-		{"Section64.Name", Field, 0},
-		{"Section64.Nreloc", Field, 0},
-		{"Section64.Offset", Field, 0},
-		{"Section64.Reloff", Field, 0},
-		{"Section64.Reserve1", Field, 0},
-		{"Section64.Reserve2", Field, 0},
-		{"Section64.Reserve3", Field, 0},
-		{"Section64.Seg", Field, 0},
-		{"Section64.Size", Field, 0},
-		{"SectionHeader", Type, 0},
-		{"SectionHeader.Addr", Field, 0},
-		{"SectionHeader.Align", Field, 0},
-		{"SectionHeader.Flags", Field, 0},
-		{"SectionHeader.Name", Field, 0},
-		{"SectionHeader.Nreloc", Field, 0},
-		{"SectionHeader.Offset", Field, 0},
-		{"SectionHeader.Reloff", Field, 0},
-		{"SectionHeader.Seg", Field, 0},
-		{"SectionHeader.Size", Field, 0},
-		{"Segment", Type, 0},
-		{"Segment.LoadBytes", Field, 0},
-		{"Segment.ReaderAt", Field, 0},
-		{"Segment.SegmentHeader", Field, 0},
-		{"Segment32", Type, 0},
-		{"Segment32.Addr", Field, 0},
-		{"Segment32.Cmd", Field, 0},
-		{"Segment32.Filesz", Field, 0},
-		{"Segment32.Flag", Field, 0},
-		{"Segment32.Len", Field, 0},
-		{"Segment32.Maxprot", Field, 0},
-		{"Segment32.Memsz", Field, 0},
-		{"Segment32.Name", Field, 0},
-		{"Segment32.Nsect", Field, 0},
-		{"Segment32.Offset", Field, 0},
-		{"Segment32.Prot", Field, 0},
-		{"Segment64", Type, 0},
-		{"Segment64.Addr", Field, 0},
-		{"Segment64.Cmd", Field, 0},
-		{"Segment64.Filesz", Field, 0},
-		{"Segment64.Flag", Field, 0},
-		{"Segment64.Len", Field, 0},
-		{"Segment64.Maxprot", Field, 0},
-		{"Segment64.Memsz", Field, 0},
-		{"Segment64.Name", Field, 0},
-		{"Segment64.Nsect", Field, 0},
-		{"Segment64.Offset", Field, 0},
-		{"Segment64.Prot", Field, 0},
-		{"SegmentHeader", Type, 0},
-		{"SegmentHeader.Addr", Field, 0},
-		{"SegmentHeader.Cmd", Field, 0},
-		{"SegmentHeader.Filesz", Field, 0},
-		{"SegmentHeader.Flag", Field, 0},
-		{"SegmentHeader.Len", Field, 0},
-		{"SegmentHeader.Maxprot", Field, 0},
-		{"SegmentHeader.Memsz", Field, 0},
-		{"SegmentHeader.Name", Field, 0},
-		{"SegmentHeader.Nsect", Field, 0},
-		{"SegmentHeader.Offset", Field, 0},
-		{"SegmentHeader.Prot", Field, 0},
-		{"Symbol", Type, 0},
-		{"Symbol.Desc", Field, 0},
-		{"Symbol.Name", Field, 0},
-		{"Symbol.Sect", Field, 0},
-		{"Symbol.Type", Field, 0},
-		{"Symbol.Value", Field, 0},
-		{"Symtab", Type, 0},
-		{"Symtab.LoadBytes", Field, 0},
-		{"Symtab.Syms", Field, 0},
-		{"Symtab.SymtabCmd", Field, 0},
-		{"SymtabCmd", Type, 0},
-		{"SymtabCmd.Cmd", Field, 0},
-		{"SymtabCmd.Len", Field, 0},
-		{"SymtabCmd.Nsyms", Field, 0},
-		{"SymtabCmd.Stroff", Field, 0},
-		{"SymtabCmd.Strsize", Field, 0},
-		{"SymtabCmd.Symoff", Field, 0},
-		{"Thread", Type, 0},
-		{"Thread.Cmd", Field, 0},
-		{"Thread.Data", Field, 0},
-		{"Thread.Len", Field, 0},
-		{"Thread.Type", Field, 0},
-		{"Type", Type, 0},
-		{"TypeBundle", Const, 3},
-		{"TypeDylib", Const, 3},
-		{"TypeExec", Const, 0},
-		{"TypeObj", Const, 0},
-		{"X86_64_RELOC_BRANCH", Const, 10},
-		{"X86_64_RELOC_GOT", Const, 10},
-		{"X86_64_RELOC_GOT_LOAD", Const, 10},
-		{"X86_64_RELOC_SIGNED", Const, 10},
-		{"X86_64_RELOC_SIGNED_1", Const, 10},
-		{"X86_64_RELOC_SIGNED_2", Const, 10},
-		{"X86_64_RELOC_SIGNED_4", Const, 10},
-		{"X86_64_RELOC_SUBTRACTOR", Const, 10},
-		{"X86_64_RELOC_TLV", Const, 10},
-		{"X86_64_RELOC_UNSIGNED", Const, 10},
+		{"(*FatFile).Close", Method, 3, ""},
+		{"(*File).Close", Method, 0, ""},
+		{"(*File).DWARF", Method, 0, ""},
+		{"(*File).ImportedLibraries", Method, 0, ""},
+		{"(*File).ImportedSymbols", Method, 0, ""},
+		{"(*File).Section", Method, 0, ""},
+		{"(*File).Segment", Method, 0, ""},
+		{"(*FormatError).Error", Method, 0, ""},
+		{"(*Section).Data", Method, 0, ""},
+		{"(*Section).Open", Method, 0, ""},
+		{"(*Segment).Data", Method, 0, ""},
+		{"(*Segment).Open", Method, 0, ""},
+		{"(Cpu).GoString", Method, 0, ""},
+		{"(Cpu).String", Method, 0, ""},
+		{"(Dylib).Raw", Method, 0, ""},
+		{"(Dysymtab).Raw", Method, 0, ""},
+		{"(FatArch).Close", Method, 3, ""},
+		{"(FatArch).DWARF", Method, 3, ""},
+		{"(FatArch).ImportedLibraries", Method, 3, ""},
+		{"(FatArch).ImportedSymbols", Method, 3, ""},
+		{"(FatArch).Section", Method, 3, ""},
+		{"(FatArch).Segment", Method, 3, ""},
+		{"(LoadBytes).Raw", Method, 0, ""},
+		{"(LoadCmd).GoString", Method, 0, ""},
+		{"(LoadCmd).String", Method, 0, ""},
+		{"(RelocTypeARM).GoString", Method, 10, ""},
+		{"(RelocTypeARM).String", Method, 10, ""},
+		{"(RelocTypeARM64).GoString", Method, 10, ""},
+		{"(RelocTypeARM64).String", Method, 10, ""},
+		{"(RelocTypeGeneric).GoString", Method, 10, ""},
+		{"(RelocTypeGeneric).String", Method, 10, ""},
+		{"(RelocTypeX86_64).GoString", Method, 10, ""},
+		{"(RelocTypeX86_64).String", Method, 10, ""},
+		{"(Rpath).Raw", Method, 10, ""},
+		{"(Section).ReadAt", Method, 0, ""},
+		{"(Segment).Raw", Method, 0, ""},
+		{"(Segment).ReadAt", Method, 0, ""},
+		{"(Symtab).Raw", Method, 0, ""},
+		{"(Type).GoString", Method, 10, ""},
+		{"(Type).String", Method, 10, ""},
+		{"ARM64_RELOC_ADDEND", Const, 10, ""},
+		{"ARM64_RELOC_BRANCH26", Const, 10, ""},
+		{"ARM64_RELOC_GOT_LOAD_PAGE21", Const, 10, ""},
+		{"ARM64_RELOC_GOT_LOAD_PAGEOFF12", Const, 10, ""},
+		{"ARM64_RELOC_PAGE21", Const, 10, ""},
+		{"ARM64_RELOC_PAGEOFF12", Const, 10, ""},
+		{"ARM64_RELOC_POINTER_TO_GOT", Const, 10, ""},
+		{"ARM64_RELOC_SUBTRACTOR", Const, 10, ""},
+		{"ARM64_RELOC_TLVP_LOAD_PAGE21", Const, 10, ""},
+		{"ARM64_RELOC_TLVP_LOAD_PAGEOFF12", Const, 10, ""},
+		{"ARM64_RELOC_UNSIGNED", Const, 10, ""},
+		{"ARM_RELOC_BR24", Const, 10, ""},
+		{"ARM_RELOC_HALF", Const, 10, ""},
+		{"ARM_RELOC_HALF_SECTDIFF", Const, 10, ""},
+		{"ARM_RELOC_LOCAL_SECTDIFF", Const, 10, ""},
+		{"ARM_RELOC_PAIR", Const, 10, ""},
+		{"ARM_RELOC_PB_LA_PTR", Const, 10, ""},
+		{"ARM_RELOC_SECTDIFF", Const, 10, ""},
+		{"ARM_RELOC_VANILLA", Const, 10, ""},
+		{"ARM_THUMB_32BIT_BRANCH", Const, 10, ""},
+		{"ARM_THUMB_RELOC_BR22", Const, 10, ""},
+		{"Cpu", Type, 0, ""},
+		{"Cpu386", Const, 0, ""},
+		{"CpuAmd64", Const, 0, ""},
+		{"CpuArm", Const, 3, ""},
+		{"CpuArm64", Const, 11, ""},
+		{"CpuPpc", Const, 3, ""},
+		{"CpuPpc64", Const, 3, ""},
+		{"Dylib", Type, 0, ""},
+		{"Dylib.CompatVersion", Field, 0, ""},
+		{"Dylib.CurrentVersion", Field, 0, ""},
+		{"Dylib.LoadBytes", Field, 0, ""},
+		{"Dylib.Name", Field, 0, ""},
+		{"Dylib.Time", Field, 0, ""},
+		{"DylibCmd", Type, 0, ""},
+		{"DylibCmd.Cmd", Field, 0, ""},
+		{"DylibCmd.CompatVersion", Field, 0, ""},
+		{"DylibCmd.CurrentVersion", Field, 0, ""},
+		{"DylibCmd.Len", Field, 0, ""},
+		{"DylibCmd.Name", Field, 0, ""},
+		{"DylibCmd.Time", Field, 0, ""},
+		{"Dysymtab", Type, 0, ""},
+		{"Dysymtab.DysymtabCmd", Field, 0, ""},
+		{"Dysymtab.IndirectSyms", Field, 0, ""},
+		{"Dysymtab.LoadBytes", Field, 0, ""},
+		{"DysymtabCmd", Type, 0, ""},
+		{"DysymtabCmd.Cmd", Field, 0, ""},
+		{"DysymtabCmd.Extrefsymoff", Field, 0, ""},
+		{"DysymtabCmd.Extreloff", Field, 0, ""},
+		{"DysymtabCmd.Iextdefsym", Field, 0, ""},
+		{"DysymtabCmd.Ilocalsym", Field, 0, ""},
+		{"DysymtabCmd.Indirectsymoff", Field, 0, ""},
+		{"DysymtabCmd.Iundefsym", Field, 0, ""},
+		{"DysymtabCmd.Len", Field, 0, ""},
+		{"DysymtabCmd.Locreloff", Field, 0, ""},
+		{"DysymtabCmd.Modtaboff", Field, 0, ""},
+		{"DysymtabCmd.Nextdefsym", Field, 0, ""},
+		{"DysymtabCmd.Nextrefsyms", Field, 0, ""},
+		{"DysymtabCmd.Nextrel", Field, 0, ""},
+		{"DysymtabCmd.Nindirectsyms", Field, 0, ""},
+		{"DysymtabCmd.Nlocalsym", Field, 0, ""},
+		{"DysymtabCmd.Nlocrel", Field, 0, ""},
+		{"DysymtabCmd.Nmodtab", Field, 0, ""},
+		{"DysymtabCmd.Ntoc", Field, 0, ""},
+		{"DysymtabCmd.Nundefsym", Field, 0, ""},
+		{"DysymtabCmd.Tocoffset", Field, 0, ""},
+		{"ErrNotFat", Var, 3, ""},
+		{"FatArch", Type, 3, ""},
+		{"FatArch.FatArchHeader", Field, 3, ""},
+		{"FatArch.File", Field, 3, ""},
+		{"FatArchHeader", Type, 3, ""},
+		{"FatArchHeader.Align", Field, 3, ""},
+		{"FatArchHeader.Cpu", Field, 3, ""},
+		{"FatArchHeader.Offset", Field, 3, ""},
+		{"FatArchHeader.Size", Field, 3, ""},
+		{"FatArchHeader.SubCpu", Field, 3, ""},
+		{"FatFile", Type, 3, ""},
+		{"FatFile.Arches", Field, 3, ""},
+		{"FatFile.Magic", Field, 3, ""},
+		{"File", Type, 0, ""},
+		{"File.ByteOrder", Field, 0, ""},
+		{"File.Dysymtab", Field, 0, ""},
+		{"File.FileHeader", Field, 0, ""},
+		{"File.Loads", Field, 0, ""},
+		{"File.Sections", Field, 0, ""},
+		{"File.Symtab", Field, 0, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.Cmdsz", Field, 0, ""},
+		{"FileHeader.Cpu", Field, 0, ""},
+		{"FileHeader.Flags", Field, 0, ""},
+		{"FileHeader.Magic", Field, 0, ""},
+		{"FileHeader.Ncmd", Field, 0, ""},
+		{"FileHeader.SubCpu", Field, 0, ""},
+		{"FileHeader.Type", Field, 0, ""},
+		{"FlagAllModsBound", Const, 10, ""},
+		{"FlagAllowStackExecution", Const, 10, ""},
+		{"FlagAppExtensionSafe", Const, 10, ""},
+		{"FlagBindAtLoad", Const, 10, ""},
+		{"FlagBindsToWeak", Const, 10, ""},
+		{"FlagCanonical", Const, 10, ""},
+		{"FlagDeadStrippableDylib", Const, 10, ""},
+		{"FlagDyldLink", Const, 10, ""},
+		{"FlagForceFlat", Const, 10, ""},
+		{"FlagHasTLVDescriptors", Const, 10, ""},
+		{"FlagIncrLink", Const, 10, ""},
+		{"FlagLazyInit", Const, 10, ""},
+		{"FlagNoFixPrebinding", Const, 10, ""},
+		{"FlagNoHeapExecution", Const, 10, ""},
+		{"FlagNoMultiDefs", Const, 10, ""},
+		{"FlagNoReexportedDylibs", Const, 10, ""},
+		{"FlagNoUndefs", Const, 10, ""},
+		{"FlagPIE", Const, 10, ""},
+		{"FlagPrebindable", Const, 10, ""},
+		{"FlagPrebound", Const, 10, ""},
+		{"FlagRootSafe", Const, 10, ""},
+		{"FlagSetuidSafe", Const, 10, ""},
+		{"FlagSplitSegs", Const, 10, ""},
+		{"FlagSubsectionsViaSymbols", Const, 10, ""},
+		{"FlagTwoLevel", Const, 10, ""},
+		{"FlagWeakDefines", Const, 10, ""},
+		{"FormatError", Type, 0, ""},
+		{"GENERIC_RELOC_LOCAL_SECTDIFF", Const, 10, ""},
+		{"GENERIC_RELOC_PAIR", Const, 10, ""},
+		{"GENERIC_RELOC_PB_LA_PTR", Const, 10, ""},
+		{"GENERIC_RELOC_SECTDIFF", Const, 10, ""},
+		{"GENERIC_RELOC_TLV", Const, 10, ""},
+		{"GENERIC_RELOC_VANILLA", Const, 10, ""},
+		{"Load", Type, 0, ""},
+		{"LoadBytes", Type, 0, ""},
+		{"LoadCmd", Type, 0, ""},
+		{"LoadCmdDylib", Const, 0, ""},
+		{"LoadCmdDylinker", Const, 0, ""},
+		{"LoadCmdDysymtab", Const, 0, ""},
+		{"LoadCmdRpath", Const, 10, ""},
+		{"LoadCmdSegment", Const, 0, ""},
+		{"LoadCmdSegment64", Const, 0, ""},
+		{"LoadCmdSymtab", Const, 0, ""},
+		{"LoadCmdThread", Const, 0, ""},
+		{"LoadCmdUnixThread", Const, 0, ""},
+		{"Magic32", Const, 0, ""},
+		{"Magic64", Const, 0, ""},
+		{"MagicFat", Const, 3, ""},
+		{"NewFatFile", Func, 3, "func(r io.ReaderAt) (*FatFile, error)"},
+		{"NewFile", Func, 0, "func(r io.ReaderAt) (*File, error)"},
+		{"Nlist32", Type, 0, ""},
+		{"Nlist32.Desc", Field, 0, ""},
+		{"Nlist32.Name", Field, 0, ""},
+		{"Nlist32.Sect", Field, 0, ""},
+		{"Nlist32.Type", Field, 0, ""},
+		{"Nlist32.Value", Field, 0, ""},
+		{"Nlist64", Type, 0, ""},
+		{"Nlist64.Desc", Field, 0, ""},
+		{"Nlist64.Name", Field, 0, ""},
+		{"Nlist64.Sect", Field, 0, ""},
+		{"Nlist64.Type", Field, 0, ""},
+		{"Nlist64.Value", Field, 0, ""},
+		{"Open", Func, 0, "func(name string) (*File, error)"},
+		{"OpenFat", Func, 3, "func(name string) (*FatFile, error)"},
+		{"Regs386", Type, 0, ""},
+		{"Regs386.AX", Field, 0, ""},
+		{"Regs386.BP", Field, 0, ""},
+		{"Regs386.BX", Field, 0, ""},
+		{"Regs386.CS", Field, 0, ""},
+		{"Regs386.CX", Field, 0, ""},
+		{"Regs386.DI", Field, 0, ""},
+		{"Regs386.DS", Field, 0, ""},
+		{"Regs386.DX", Field, 0, ""},
+		{"Regs386.ES", Field, 0, ""},
+		{"Regs386.FLAGS", Field, 0, ""},
+		{"Regs386.FS", Field, 0, ""},
+		{"Regs386.GS", Field, 0, ""},
+		{"Regs386.IP", Field, 0, ""},
+		{"Regs386.SI", Field, 0, ""},
+		{"Regs386.SP", Field, 0, ""},
+		{"Regs386.SS", Field, 0, ""},
+		{"RegsAMD64", Type, 0, ""},
+		{"RegsAMD64.AX", Field, 0, ""},
+		{"RegsAMD64.BP", Field, 0, ""},
+		{"RegsAMD64.BX", Field, 0, ""},
+		{"RegsAMD64.CS", Field, 0, ""},
+		{"RegsAMD64.CX", Field, 0, ""},
+		{"RegsAMD64.DI", Field, 0, ""},
+		{"RegsAMD64.DX", Field, 0, ""},
+		{"RegsAMD64.FLAGS", Field, 0, ""},
+		{"RegsAMD64.FS", Field, 0, ""},
+		{"RegsAMD64.GS", Field, 0, ""},
+		{"RegsAMD64.IP", Field, 0, ""},
+		{"RegsAMD64.R10", Field, 0, ""},
+		{"RegsAMD64.R11", Field, 0, ""},
+		{"RegsAMD64.R12", Field, 0, ""},
+		{"RegsAMD64.R13", Field, 0, ""},
+		{"RegsAMD64.R14", Field, 0, ""},
+		{"RegsAMD64.R15", Field, 0, ""},
+		{"RegsAMD64.R8", Field, 0, ""},
+		{"RegsAMD64.R9", Field, 0, ""},
+		{"RegsAMD64.SI", Field, 0, ""},
+		{"RegsAMD64.SP", Field, 0, ""},
+		{"Reloc", Type, 10, ""},
+		{"Reloc.Addr", Field, 10, ""},
+		{"Reloc.Extern", Field, 10, ""},
+		{"Reloc.Len", Field, 10, ""},
+		{"Reloc.Pcrel", Field, 10, ""},
+		{"Reloc.Scattered", Field, 10, ""},
+		{"Reloc.Type", Field, 10, ""},
+		{"Reloc.Value", Field, 10, ""},
+		{"RelocTypeARM", Type, 10, ""},
+		{"RelocTypeARM64", Type, 10, ""},
+		{"RelocTypeGeneric", Type, 10, ""},
+		{"RelocTypeX86_64", Type, 10, ""},
+		{"Rpath", Type, 10, ""},
+		{"Rpath.LoadBytes", Field, 10, ""},
+		{"Rpath.Path", Field, 10, ""},
+		{"RpathCmd", Type, 10, ""},
+		{"RpathCmd.Cmd", Field, 10, ""},
+		{"RpathCmd.Len", Field, 10, ""},
+		{"RpathCmd.Path", Field, 10, ""},
+		{"Section", Type, 0, ""},
+		{"Section.ReaderAt", Field, 0, ""},
+		{"Section.Relocs", Field, 10, ""},
+		{"Section.SectionHeader", Field, 0, ""},
+		{"Section32", Type, 0, ""},
+		{"Section32.Addr", Field, 0, ""},
+		{"Section32.Align", Field, 0, ""},
+		{"Section32.Flags", Field, 0, ""},
+		{"Section32.Name", Field, 0, ""},
+		{"Section32.Nreloc", Field, 0, ""},
+		{"Section32.Offset", Field, 0, ""},
+		{"Section32.Reloff", Field, 0, ""},
+		{"Section32.Reserve1", Field, 0, ""},
+		{"Section32.Reserve2", Field, 0, ""},
+		{"Section32.Seg", Field, 0, ""},
+		{"Section32.Size", Field, 0, ""},
+		{"Section64", Type, 0, ""},
+		{"Section64.Addr", Field, 0, ""},
+		{"Section64.Align", Field, 0, ""},
+		{"Section64.Flags", Field, 0, ""},
+		{"Section64.Name", Field, 0, ""},
+		{"Section64.Nreloc", Field, 0, ""},
+		{"Section64.Offset", Field, 0, ""},
+		{"Section64.Reloff", Field, 0, ""},
+		{"Section64.Reserve1", Field, 0, ""},
+		{"Section64.Reserve2", Field, 0, ""},
+		{"Section64.Reserve3", Field, 0, ""},
+		{"Section64.Seg", Field, 0, ""},
+		{"Section64.Size", Field, 0, ""},
+		{"SectionHeader", Type, 0, ""},
+		{"SectionHeader.Addr", Field, 0, ""},
+		{"SectionHeader.Align", Field, 0, ""},
+		{"SectionHeader.Flags", Field, 0, ""},
+		{"SectionHeader.Name", Field, 0, ""},
+		{"SectionHeader.Nreloc", Field, 0, ""},
+		{"SectionHeader.Offset", Field, 0, ""},
+		{"SectionHeader.Reloff", Field, 0, ""},
+		{"SectionHeader.Seg", Field, 0, ""},
+		{"SectionHeader.Size", Field, 0, ""},
+		{"Segment", Type, 0, ""},
+		{"Segment.LoadBytes", Field, 0, ""},
+		{"Segment.ReaderAt", Field, 0, ""},
+		{"Segment.SegmentHeader", Field, 0, ""},
+		{"Segment32", Type, 0, ""},
+		{"Segment32.Addr", Field, 0, ""},
+		{"Segment32.Cmd", Field, 0, ""},
+		{"Segment32.Filesz", Field, 0, ""},
+		{"Segment32.Flag", Field, 0, ""},
+		{"Segment32.Len", Field, 0, ""},
+		{"Segment32.Maxprot", Field, 0, ""},
+		{"Segment32.Memsz", Field, 0, ""},
+		{"Segment32.Name", Field, 0, ""},
+		{"Segment32.Nsect", Field, 0, ""},
+		{"Segment32.Offset", Field, 0, ""},
+		{"Segment32.Prot", Field, 0, ""},
+		{"Segment64", Type, 0, ""},
+		{"Segment64.Addr", Field, 0, ""},
+		{"Segment64.Cmd", Field, 0, ""},
+		{"Segment64.Filesz", Field, 0, ""},
+		{"Segment64.Flag", Field, 0, ""},
+		{"Segment64.Len", Field, 0, ""},
+		{"Segment64.Maxprot", Field, 0, ""},
+		{"Segment64.Memsz", Field, 0, ""},
+		{"Segment64.Name", Field, 0, ""},
+		{"Segment64.Nsect", Field, 0, ""},
+		{"Segment64.Offset", Field, 0, ""},
+		{"Segment64.Prot", Field, 0, ""},
+		{"SegmentHeader", Type, 0, ""},
+		{"SegmentHeader.Addr", Field, 0, ""},
+		{"SegmentHeader.Cmd", Field, 0, ""},
+		{"SegmentHeader.Filesz", Field, 0, ""},
+		{"SegmentHeader.Flag", Field, 0, ""},
+		{"SegmentHeader.Len", Field, 0, ""},
+		{"SegmentHeader.Maxprot", Field, 0, ""},
+		{"SegmentHeader.Memsz", Field, 0, ""},
+		{"SegmentHeader.Name", Field, 0, ""},
+		{"SegmentHeader.Nsect", Field, 0, ""},
+		{"SegmentHeader.Offset", Field, 0, ""},
+		{"SegmentHeader.Prot", Field, 0, ""},
+		{"Symbol", Type, 0, ""},
+		{"Symbol.Desc", Field, 0, ""},
+		{"Symbol.Name", Field, 0, ""},
+		{"Symbol.Sect", Field, 0, ""},
+		{"Symbol.Type", Field, 0, ""},
+		{"Symbol.Value", Field, 0, ""},
+		{"Symtab", Type, 0, ""},
+		{"Symtab.LoadBytes", Field, 0, ""},
+		{"Symtab.Syms", Field, 0, ""},
+		{"Symtab.SymtabCmd", Field, 0, ""},
+		{"SymtabCmd", Type, 0, ""},
+		{"SymtabCmd.Cmd", Field, 0, ""},
+		{"SymtabCmd.Len", Field, 0, ""},
+		{"SymtabCmd.Nsyms", Field, 0, ""},
+		{"SymtabCmd.Stroff", Field, 0, ""},
+		{"SymtabCmd.Strsize", Field, 0, ""},
+		{"SymtabCmd.Symoff", Field, 0, ""},
+		{"Thread", Type, 0, ""},
+		{"Thread.Cmd", Field, 0, ""},
+		{"Thread.Data", Field, 0, ""},
+		{"Thread.Len", Field, 0, ""},
+		{"Thread.Type", Field, 0, ""},
+		{"Type", Type, 0, ""},
+		{"TypeBundle", Const, 3, ""},
+		{"TypeDylib", Const, 3, ""},
+		{"TypeExec", Const, 0, ""},
+		{"TypeObj", Const, 0, ""},
+		{"X86_64_RELOC_BRANCH", Const, 10, ""},
+		{"X86_64_RELOC_GOT", Const, 10, ""},
+		{"X86_64_RELOC_GOT_LOAD", Const, 10, ""},
+		{"X86_64_RELOC_SIGNED", Const, 10, ""},
+		{"X86_64_RELOC_SIGNED_1", Const, 10, ""},
+		{"X86_64_RELOC_SIGNED_2", Const, 10, ""},
+		{"X86_64_RELOC_SIGNED_4", Const, 10, ""},
+		{"X86_64_RELOC_SUBTRACTOR", Const, 10, ""},
+		{"X86_64_RELOC_TLV", Const, 10, ""},
+		{"X86_64_RELOC_UNSIGNED", Const, 10, ""},
 	},
 	"debug/pe": {
-		{"(*COFFSymbol).FullName", Method, 8},
-		{"(*File).COFFSymbolReadSectionDefAux", Method, 19},
-		{"(*File).Close", Method, 0},
-		{"(*File).DWARF", Method, 0},
-		{"(*File).ImportedLibraries", Method, 0},
-		{"(*File).ImportedSymbols", Method, 0},
-		{"(*File).Section", Method, 0},
-		{"(*FormatError).Error", Method, 0},
-		{"(*Section).Data", Method, 0},
-		{"(*Section).Open", Method, 0},
-		{"(Section).ReadAt", Method, 0},
-		{"(StringTable).String", Method, 8},
-		{"COFFSymbol", Type, 1},
-		{"COFFSymbol.Name", Field, 1},
-		{"COFFSymbol.NumberOfAuxSymbols", Field, 1},
-		{"COFFSymbol.SectionNumber", Field, 1},
-		{"COFFSymbol.StorageClass", Field, 1},
-		{"COFFSymbol.Type", Field, 1},
-		{"COFFSymbol.Value", Field, 1},
-		{"COFFSymbolAuxFormat5", Type, 19},
-		{"COFFSymbolAuxFormat5.Checksum", Field, 19},
-		{"COFFSymbolAuxFormat5.NumLineNumbers", Field, 19},
-		{"COFFSymbolAuxFormat5.NumRelocs", Field, 19},
-		{"COFFSymbolAuxFormat5.SecNum", Field, 19},
-		{"COFFSymbolAuxFormat5.Selection", Field, 19},
-		{"COFFSymbolAuxFormat5.Size", Field, 19},
-		{"COFFSymbolSize", Const, 1},
-		{"DataDirectory", Type, 3},
-		{"DataDirectory.Size", Field, 3},
-		{"DataDirectory.VirtualAddress", Field, 3},
-		{"File", Type, 0},
-		{"File.COFFSymbols", Field, 8},
-		{"File.FileHeader", Field, 0},
-		{"File.OptionalHeader", Field, 3},
-		{"File.Sections", Field, 0},
-		{"File.StringTable", Field, 8},
-		{"File.Symbols", Field, 1},
-		{"FileHeader", Type, 0},
-		{"FileHeader.Characteristics", Field, 0},
-		{"FileHeader.Machine", Field, 0},
-		{"FileHeader.NumberOfSections", Field, 0},
-		{"FileHeader.NumberOfSymbols", Field, 0},
-		{"FileHeader.PointerToSymbolTable", Field, 0},
-		{"FileHeader.SizeOfOptionalHeader", Field, 0},
-		{"FileHeader.TimeDateStamp", Field, 0},
-		{"FormatError", Type, 0},
-		{"IMAGE_COMDAT_SELECT_ANY", Const, 19},
-		{"IMAGE_COMDAT_SELECT_ASSOCIATIVE", Const, 19},
-		{"IMAGE_COMDAT_SELECT_EXACT_MATCH", Const, 19},
-		{"IMAGE_COMDAT_SELECT_LARGEST", Const, 19},
-		{"IMAGE_COMDAT_SELECT_NODUPLICATES", Const, 19},
-		{"IMAGE_COMDAT_SELECT_SAME_SIZE", Const, 19},
-		{"IMAGE_DIRECTORY_ENTRY_ARCHITECTURE", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_BASERELOC", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_DEBUG", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_EXCEPTION", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_EXPORT", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_GLOBALPTR", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_IAT", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_IMPORT", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_RESOURCE", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_SECURITY", Const, 11},
-		{"IMAGE_DIRECTORY_ENTRY_TLS", Const, 11},
-		{"IMAGE_DLLCHARACTERISTICS_APPCONTAINER", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_GUARD_CF", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_NO_BIND", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_NO_ISOLATION", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_NO_SEH", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_NX_COMPAT", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE", Const, 15},
-		{"IMAGE_DLLCHARACTERISTICS_WDM_DRIVER", Const, 15},
-		{"IMAGE_FILE_32BIT_MACHINE", Const, 15},
-		{"IMAGE_FILE_AGGRESIVE_WS_TRIM", Const, 15},
-		{"IMAGE_FILE_BYTES_REVERSED_HI", Const, 15},
-		{"IMAGE_FILE_BYTES_REVERSED_LO", Const, 15},
-		{"IMAGE_FILE_DEBUG_STRIPPED", Const, 15},
-		{"IMAGE_FILE_DLL", Const, 15},
-		{"IMAGE_FILE_EXECUTABLE_IMAGE", Const, 15},
-		{"IMAGE_FILE_LARGE_ADDRESS_AWARE", Const, 15},
-		{"IMAGE_FILE_LINE_NUMS_STRIPPED", Const, 15},
-		{"IMAGE_FILE_LOCAL_SYMS_STRIPPED", Const, 15},
-		{"IMAGE_FILE_MACHINE_AM33", Const, 0},
-		{"IMAGE_FILE_MACHINE_AMD64", Const, 0},
-		{"IMAGE_FILE_MACHINE_ARM", Const, 0},
-		{"IMAGE_FILE_MACHINE_ARM64", Const, 11},
-		{"IMAGE_FILE_MACHINE_ARMNT", Const, 12},
-		{"IMAGE_FILE_MACHINE_EBC", Const, 0},
-		{"IMAGE_FILE_MACHINE_I386", Const, 0},
-		{"IMAGE_FILE_MACHINE_IA64", Const, 0},
-		{"IMAGE_FILE_MACHINE_LOONGARCH32", Const, 19},
-		{"IMAGE_FILE_MACHINE_LOONGARCH64", Const, 19},
-		{"IMAGE_FILE_MACHINE_M32R", Const, 0},
-		{"IMAGE_FILE_MACHINE_MIPS16", Const, 0},
-		{"IMAGE_FILE_MACHINE_MIPSFPU", Const, 0},
-		{"IMAGE_FILE_MACHINE_MIPSFPU16", Const, 0},
-		{"IMAGE_FILE_MACHINE_POWERPC", Const, 0},
-		{"IMAGE_FILE_MACHINE_POWERPCFP", Const, 0},
-		{"IMAGE_FILE_MACHINE_R4000", Const, 0},
-		{"IMAGE_FILE_MACHINE_RISCV128", Const, 20},
-		{"IMAGE_FILE_MACHINE_RISCV32", Const, 20},
-		{"IMAGE_FILE_MACHINE_RISCV64", Const, 20},
-		{"IMAGE_FILE_MACHINE_SH3", Const, 0},
-		{"IMAGE_FILE_MACHINE_SH3DSP", Const, 0},
-		{"IMAGE_FILE_MACHINE_SH4", Const, 0},
-		{"IMAGE_FILE_MACHINE_SH5", Const, 0},
-		{"IMAGE_FILE_MACHINE_THUMB", Const, 0},
-		{"IMAGE_FILE_MACHINE_UNKNOWN", Const, 0},
-		{"IMAGE_FILE_MACHINE_WCEMIPSV2", Const, 0},
-		{"IMAGE_FILE_NET_RUN_FROM_SWAP", Const, 15},
-		{"IMAGE_FILE_RELOCS_STRIPPED", Const, 15},
-		{"IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP", Const, 15},
-		{"IMAGE_FILE_SYSTEM", Const, 15},
-		{"IMAGE_FILE_UP_SYSTEM_ONLY", Const, 15},
-		{"IMAGE_SCN_CNT_CODE", Const, 19},
-		{"IMAGE_SCN_CNT_INITIALIZED_DATA", Const, 19},
-		{"IMAGE_SCN_CNT_UNINITIALIZED_DATA", Const, 19},
-		{"IMAGE_SCN_LNK_COMDAT", Const, 19},
-		{"IMAGE_SCN_MEM_DISCARDABLE", Const, 19},
-		{"IMAGE_SCN_MEM_EXECUTE", Const, 19},
-		{"IMAGE_SCN_MEM_READ", Const, 19},
-		{"IMAGE_SCN_MEM_WRITE", Const, 19},
-		{"IMAGE_SUBSYSTEM_EFI_APPLICATION", Const, 15},
-		{"IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER", Const, 15},
-		{"IMAGE_SUBSYSTEM_EFI_ROM", Const, 15},
-		{"IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER", Const, 15},
-		{"IMAGE_SUBSYSTEM_NATIVE", Const, 15},
-		{"IMAGE_SUBSYSTEM_NATIVE_WINDOWS", Const, 15},
-		{"IMAGE_SUBSYSTEM_OS2_CUI", Const, 15},
-		{"IMAGE_SUBSYSTEM_POSIX_CUI", Const, 15},
-		{"IMAGE_SUBSYSTEM_UNKNOWN", Const, 15},
-		{"IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION", Const, 15},
-		{"IMAGE_SUBSYSTEM_WINDOWS_CE_GUI", Const, 15},
-		{"IMAGE_SUBSYSTEM_WINDOWS_CUI", Const, 15},
-		{"IMAGE_SUBSYSTEM_WINDOWS_GUI", Const, 15},
-		{"IMAGE_SUBSYSTEM_XBOX", Const, 15},
-		{"ImportDirectory", Type, 0},
-		{"ImportDirectory.FirstThunk", Field, 0},
-		{"ImportDirectory.ForwarderChain", Field, 0},
-		{"ImportDirectory.Name", Field, 0},
-		{"ImportDirectory.OriginalFirstThunk", Field, 0},
-		{"ImportDirectory.TimeDateStamp", Field, 0},
-		{"NewFile", Func, 0},
-		{"Open", Func, 0},
-		{"OptionalHeader32", Type, 3},
-		{"OptionalHeader32.AddressOfEntryPoint", Field, 3},
-		{"OptionalHeader32.BaseOfCode", Field, 3},
-		{"OptionalHeader32.BaseOfData", Field, 3},
-		{"OptionalHeader32.CheckSum", Field, 3},
-		{"OptionalHeader32.DataDirectory", Field, 3},
-		{"OptionalHeader32.DllCharacteristics", Field, 3},
-		{"OptionalHeader32.FileAlignment", Field, 3},
-		{"OptionalHeader32.ImageBase", Field, 3},
-		{"OptionalHeader32.LoaderFlags", Field, 3},
-		{"OptionalHeader32.Magic", Field, 3},
-		{"OptionalHeader32.MajorImageVersion", Field, 3},
-		{"OptionalHeader32.MajorLinkerVersion", Field, 3},
-		{"OptionalHeader32.MajorOperatingSystemVersion", Field, 3},
-		{"OptionalHeader32.MajorSubsystemVersion", Field, 3},
-		{"OptionalHeader32.MinorImageVersion", Field, 3},
-		{"OptionalHeader32.MinorLinkerVersion", Field, 3},
-		{"OptionalHeader32.MinorOperatingSystemVersion", Field, 3},
-		{"OptionalHeader32.MinorSubsystemVersion", Field, 3},
-		{"OptionalHeader32.NumberOfRvaAndSizes", Field, 3},
-		{"OptionalHeader32.SectionAlignment", Field, 3},
-		{"OptionalHeader32.SizeOfCode", Field, 3},
-		{"OptionalHeader32.SizeOfHeaders", Field, 3},
-		{"OptionalHeader32.SizeOfHeapCommit", Field, 3},
-		{"OptionalHeader32.SizeOfHeapReserve", Field, 3},
-		{"OptionalHeader32.SizeOfImage", Field, 3},
-		{"OptionalHeader32.SizeOfInitializedData", Field, 3},
-		{"OptionalHeader32.SizeOfStackCommit", Field, 3},
-		{"OptionalHeader32.SizeOfStackReserve", Field, 3},
-		{"OptionalHeader32.SizeOfUninitializedData", Field, 3},
-		{"OptionalHeader32.Subsystem", Field, 3},
-		{"OptionalHeader32.Win32VersionValue", Field, 3},
-		{"OptionalHeader64", Type, 3},
-		{"OptionalHeader64.AddressOfEntryPoint", Field, 3},
-		{"OptionalHeader64.BaseOfCode", Field, 3},
-		{"OptionalHeader64.CheckSum", Field, 3},
-		{"OptionalHeader64.DataDirectory", Field, 3},
-		{"OptionalHeader64.DllCharacteristics", Field, 3},
-		{"OptionalHeader64.FileAlignment", Field, 3},
-		{"OptionalHeader64.ImageBase", Field, 3},
-		{"OptionalHeader64.LoaderFlags", Field, 3},
-		{"OptionalHeader64.Magic", Field, 3},
-		{"OptionalHeader64.MajorImageVersion", Field, 3},
-		{"OptionalHeader64.MajorLinkerVersion", Field, 3},
-		{"OptionalHeader64.MajorOperatingSystemVersion", Field, 3},
-		{"OptionalHeader64.MajorSubsystemVersion", Field, 3},
-		{"OptionalHeader64.MinorImageVersion", Field, 3},
-		{"OptionalHeader64.MinorLinkerVersion", Field, 3},
-		{"OptionalHeader64.MinorOperatingSystemVersion", Field, 3},
-		{"OptionalHeader64.MinorSubsystemVersion", Field, 3},
-		{"OptionalHeader64.NumberOfRvaAndSizes", Field, 3},
-		{"OptionalHeader64.SectionAlignment", Field, 3},
-		{"OptionalHeader64.SizeOfCode", Field, 3},
-		{"OptionalHeader64.SizeOfHeaders", Field, 3},
-		{"OptionalHeader64.SizeOfHeapCommit", Field, 3},
-		{"OptionalHeader64.SizeOfHeapReserve", Field, 3},
-		{"OptionalHeader64.SizeOfImage", Field, 3},
-		{"OptionalHeader64.SizeOfInitializedData", Field, 3},
-		{"OptionalHeader64.SizeOfStackCommit", Field, 3},
-		{"OptionalHeader64.SizeOfStackReserve", Field, 3},
-		{"OptionalHeader64.SizeOfUninitializedData", Field, 3},
-		{"OptionalHeader64.Subsystem", Field, 3},
-		{"OptionalHeader64.Win32VersionValue", Field, 3},
-		{"Reloc", Type, 8},
-		{"Reloc.SymbolTableIndex", Field, 8},
-		{"Reloc.Type", Field, 8},
-		{"Reloc.VirtualAddress", Field, 8},
-		{"Section", Type, 0},
-		{"Section.ReaderAt", Field, 0},
-		{"Section.Relocs", Field, 8},
-		{"Section.SectionHeader", Field, 0},
-		{"SectionHeader", Type, 0},
-		{"SectionHeader.Characteristics", Field, 0},
-		{"SectionHeader.Name", Field, 0},
-		{"SectionHeader.NumberOfLineNumbers", Field, 0},
-		{"SectionHeader.NumberOfRelocations", Field, 0},
-		{"SectionHeader.Offset", Field, 0},
-		{"SectionHeader.PointerToLineNumbers", Field, 0},
-		{"SectionHeader.PointerToRelocations", Field, 0},
-		{"SectionHeader.Size", Field, 0},
-		{"SectionHeader.VirtualAddress", Field, 0},
-		{"SectionHeader.VirtualSize", Field, 0},
-		{"SectionHeader32", Type, 0},
-		{"SectionHeader32.Characteristics", Field, 0},
-		{"SectionHeader32.Name", Field, 0},
-		{"SectionHeader32.NumberOfLineNumbers", Field, 0},
-		{"SectionHeader32.NumberOfRelocations", Field, 0},
-		{"SectionHeader32.PointerToLineNumbers", Field, 0},
-		{"SectionHeader32.PointerToRawData", Field, 0},
-		{"SectionHeader32.PointerToRelocations", Field, 0},
-		{"SectionHeader32.SizeOfRawData", Field, 0},
-		{"SectionHeader32.VirtualAddress", Field, 0},
-		{"SectionHeader32.VirtualSize", Field, 0},
-		{"StringTable", Type, 8},
-		{"Symbol", Type, 1},
-		{"Symbol.Name", Field, 1},
-		{"Symbol.SectionNumber", Field, 1},
-		{"Symbol.StorageClass", Field, 1},
-		{"Symbol.Type", Field, 1},
-		{"Symbol.Value", Field, 1},
+		{"(*COFFSymbol).FullName", Method, 8, ""},
+		{"(*File).COFFSymbolReadSectionDefAux", Method, 19, ""},
+		{"(*File).Close", Method, 0, ""},
+		{"(*File).DWARF", Method, 0, ""},
+		{"(*File).ImportedLibraries", Method, 0, ""},
+		{"(*File).ImportedSymbols", Method, 0, ""},
+		{"(*File).Section", Method, 0, ""},
+		{"(*FormatError).Error", Method, 0, ""},
+		{"(*Section).Data", Method, 0, ""},
+		{"(*Section).Open", Method, 0, ""},
+		{"(Section).ReadAt", Method, 0, ""},
+		{"(StringTable).String", Method, 8, ""},
+		{"COFFSymbol", Type, 1, ""},
+		{"COFFSymbol.Name", Field, 1, ""},
+		{"COFFSymbol.NumberOfAuxSymbols", Field, 1, ""},
+		{"COFFSymbol.SectionNumber", Field, 1, ""},
+		{"COFFSymbol.StorageClass", Field, 1, ""},
+		{"COFFSymbol.Type", Field, 1, ""},
+		{"COFFSymbol.Value", Field, 1, ""},
+		{"COFFSymbolAuxFormat5", Type, 19, ""},
+		{"COFFSymbolAuxFormat5.Checksum", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.NumLineNumbers", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.NumRelocs", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.SecNum", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.Selection", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.Size", Field, 19, ""},
+		{"COFFSymbolSize", Const, 1, ""},
+		{"DataDirectory", Type, 3, ""},
+		{"DataDirectory.Size", Field, 3, ""},
+		{"DataDirectory.VirtualAddress", Field, 3, ""},
+		{"File", Type, 0, ""},
+		{"File.COFFSymbols", Field, 8, ""},
+		{"File.FileHeader", Field, 0, ""},
+		{"File.OptionalHeader", Field, 3, ""},
+		{"File.Sections", Field, 0, ""},
+		{"File.StringTable", Field, 8, ""},
+		{"File.Symbols", Field, 1, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.Characteristics", Field, 0, ""},
+		{"FileHeader.Machine", Field, 0, ""},
+		{"FileHeader.NumberOfSections", Field, 0, ""},
+		{"FileHeader.NumberOfSymbols", Field, 0, ""},
+		{"FileHeader.PointerToSymbolTable", Field, 0, ""},
+		{"FileHeader.SizeOfOptionalHeader", Field, 0, ""},
+		{"FileHeader.TimeDateStamp", Field, 0, ""},
+		{"FormatError", Type, 0, ""},
+		{"IMAGE_COMDAT_SELECT_ANY", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_ASSOCIATIVE", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_EXACT_MATCH", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_LARGEST", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_NODUPLICATES", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_SAME_SIZE", Const, 19, ""},
+		{"IMAGE_DIRECTORY_ENTRY_ARCHITECTURE", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_BASERELOC", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_DEBUG", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_EXCEPTION", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_EXPORT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_GLOBALPTR", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_IAT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_IMPORT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_RESOURCE", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_SECURITY", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_TLS", Const, 11, ""},
+		{"IMAGE_DLLCHARACTERISTICS_APPCONTAINER", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_GUARD_CF", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_NO_BIND", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_NO_ISOLATION", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_NO_SEH", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_NX_COMPAT", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_WDM_DRIVER", Const, 15, ""},
+		{"IMAGE_FILE_32BIT_MACHINE", Const, 15, ""},
+		{"IMAGE_FILE_AGGRESIVE_WS_TRIM", Const, 15, ""},
+		{"IMAGE_FILE_BYTES_REVERSED_HI", Const, 15, ""},
+		{"IMAGE_FILE_BYTES_REVERSED_LO", Const, 15, ""},
+		{"IMAGE_FILE_DEBUG_STRIPPED", Const, 15, ""},
+		{"IMAGE_FILE_DLL", Const, 15, ""},
+		{"IMAGE_FILE_EXECUTABLE_IMAGE", Const, 15, ""},
+		{"IMAGE_FILE_LARGE_ADDRESS_AWARE", Const, 15, ""},
+		{"IMAGE_FILE_LINE_NUMS_STRIPPED", Const, 15, ""},
+		{"IMAGE_FILE_LOCAL_SYMS_STRIPPED", Const, 15, ""},
+		{"IMAGE_FILE_MACHINE_AM33", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_AMD64", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_ARM", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_ARM64", Const, 11, ""},
+		{"IMAGE_FILE_MACHINE_ARMNT", Const, 12, ""},
+		{"IMAGE_FILE_MACHINE_EBC", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_I386", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_IA64", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_LOONGARCH32", Const, 19, ""},
+		{"IMAGE_FILE_MACHINE_LOONGARCH64", Const, 19, ""},
+		{"IMAGE_FILE_MACHINE_M32R", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_MIPS16", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_MIPSFPU", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_MIPSFPU16", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_POWERPC", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_POWERPCFP", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_R4000", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_RISCV128", Const, 20, ""},
+		{"IMAGE_FILE_MACHINE_RISCV32", Const, 20, ""},
+		{"IMAGE_FILE_MACHINE_RISCV64", Const, 20, ""},
+		{"IMAGE_FILE_MACHINE_SH3", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_SH3DSP", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_SH4", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_SH5", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_THUMB", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_UNKNOWN", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_WCEMIPSV2", Const, 0, ""},
+		{"IMAGE_FILE_NET_RUN_FROM_SWAP", Const, 15, ""},
+		{"IMAGE_FILE_RELOCS_STRIPPED", Const, 15, ""},
+		{"IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP", Const, 15, ""},
+		{"IMAGE_FILE_SYSTEM", Const, 15, ""},
+		{"IMAGE_FILE_UP_SYSTEM_ONLY", Const, 15, ""},
+		{"IMAGE_SCN_CNT_CODE", Const, 19, ""},
+		{"IMAGE_SCN_CNT_INITIALIZED_DATA", Const, 19, ""},
+		{"IMAGE_SCN_CNT_UNINITIALIZED_DATA", Const, 19, ""},
+		{"IMAGE_SCN_LNK_COMDAT", Const, 19, ""},
+		{"IMAGE_SCN_MEM_DISCARDABLE", Const, 19, ""},
+		{"IMAGE_SCN_MEM_EXECUTE", Const, 19, ""},
+		{"IMAGE_SCN_MEM_READ", Const, 19, ""},
+		{"IMAGE_SCN_MEM_WRITE", Const, 19, ""},
+		{"IMAGE_SUBSYSTEM_EFI_APPLICATION", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_EFI_ROM", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_NATIVE", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_NATIVE_WINDOWS", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_OS2_CUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_POSIX_CUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_UNKNOWN", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_WINDOWS_CE_GUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_WINDOWS_CUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_WINDOWS_GUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_XBOX", Const, 15, ""},
+		{"ImportDirectory", Type, 0, ""},
+		{"ImportDirectory.FirstThunk", Field, 0, ""},
+		{"ImportDirectory.ForwarderChain", Field, 0, ""},
+		{"ImportDirectory.Name", Field, 0, ""},
+		{"ImportDirectory.OriginalFirstThunk", Field, 0, ""},
+		{"ImportDirectory.TimeDateStamp", Field, 0, ""},
+		{"NewFile", Func, 0, "func(r io.ReaderAt) (*File, error)"},
+		{"Open", Func, 0, "func(name string) (*File, error)"},
+		{"OptionalHeader32", Type, 3, ""},
+		{"OptionalHeader32.AddressOfEntryPoint", Field, 3, ""},
+		{"OptionalHeader32.BaseOfCode", Field, 3, ""},
+		{"OptionalHeader32.BaseOfData", Field, 3, ""},
+		{"OptionalHeader32.CheckSum", Field, 3, ""},
+		{"OptionalHeader32.DataDirectory", Field, 3, ""},
+		{"OptionalHeader32.DllCharacteristics", Field, 3, ""},
+		{"OptionalHeader32.FileAlignment", Field, 3, ""},
+		{"OptionalHeader32.ImageBase", Field, 3, ""},
+		{"OptionalHeader32.LoaderFlags", Field, 3, ""},
+		{"OptionalHeader32.Magic", Field, 3, ""},
+		{"OptionalHeader32.MajorImageVersion", Field, 3, ""},
+		{"OptionalHeader32.MajorLinkerVersion", Field, 3, ""},
+		{"OptionalHeader32.MajorOperatingSystemVersion", Field, 3, ""},
+		{"OptionalHeader32.MajorSubsystemVersion", Field, 3, ""},
+		{"OptionalHeader32.MinorImageVersion", Field, 3, ""},
+		{"OptionalHeader32.MinorLinkerVersion", Field, 3, ""},
+		{"OptionalHeader32.MinorOperatingSystemVersion", Field, 3, ""},
+		{"OptionalHeader32.MinorSubsystemVersion", Field, 3, ""},
+		{"OptionalHeader32.NumberOfRvaAndSizes", Field, 3, ""},
+		{"OptionalHeader32.SectionAlignment", Field, 3, ""},
+		{"OptionalHeader32.SizeOfCode", Field, 3, ""},
+		{"OptionalHeader32.SizeOfHeaders", Field, 3, ""},
+		{"OptionalHeader32.SizeOfHeapCommit", Field, 3, ""},
+		{"OptionalHeader32.SizeOfHeapReserve", Field, 3, ""},
+		{"OptionalHeader32.SizeOfImage", Field, 3, ""},
+		{"OptionalHeader32.SizeOfInitializedData", Field, 3, ""},
+		{"OptionalHeader32.SizeOfStackCommit", Field, 3, ""},
+		{"OptionalHeader32.SizeOfStackReserve", Field, 3, ""},
+		{"OptionalHeader32.SizeOfUninitializedData", Field, 3, ""},
+		{"OptionalHeader32.Subsystem", Field, 3, ""},
+		{"OptionalHeader32.Win32VersionValue", Field, 3, ""},
+		{"OptionalHeader64", Type, 3, ""},
+		{"OptionalHeader64.AddressOfEntryPoint", Field, 3, ""},
+		{"OptionalHeader64.BaseOfCode", Field, 3, ""},
+		{"OptionalHeader64.CheckSum", Field, 3, ""},
+		{"OptionalHeader64.DataDirectory", Field, 3, ""},
+		{"OptionalHeader64.DllCharacteristics", Field, 3, ""},
+		{"OptionalHeader64.FileAlignment", Field, 3, ""},
+		{"OptionalHeader64.ImageBase", Field, 3, ""},
+		{"OptionalHeader64.LoaderFlags", Field, 3, ""},
+		{"OptionalHeader64.Magic", Field, 3, ""},
+		{"OptionalHeader64.MajorImageVersion", Field, 3, ""},
+		{"OptionalHeader64.MajorLinkerVersion", Field, 3, ""},
+		{"OptionalHeader64.MajorOperatingSystemVersion", Field, 3, ""},
+		{"OptionalHeader64.MajorSubsystemVersion", Field, 3, ""},
+		{"OptionalHeader64.MinorImageVersion", Field, 3, ""},
+		{"OptionalHeader64.MinorLinkerVersion", Field, 3, ""},
+		{"OptionalHeader64.MinorOperatingSystemVersion", Field, 3, ""},
+		{"OptionalHeader64.MinorSubsystemVersion", Field, 3, ""},
+		{"OptionalHeader64.NumberOfRvaAndSizes", Field, 3, ""},
+		{"OptionalHeader64.SectionAlignment", Field, 3, ""},
+		{"OptionalHeader64.SizeOfCode", Field, 3, ""},
+		{"OptionalHeader64.SizeOfHeaders", Field, 3, ""},
+		{"OptionalHeader64.SizeOfHeapCommit", Field, 3, ""},
+		{"OptionalHeader64.SizeOfHeapReserve", Field, 3, ""},
+		{"OptionalHeader64.SizeOfImage", Field, 3, ""},
+		{"OptionalHeader64.SizeOfInitializedData", Field, 3, ""},
+		{"OptionalHeader64.SizeOfStackCommit", Field, 3, ""},
+		{"OptionalHeader64.SizeOfStackReserve", Field, 3, ""},
+		{"OptionalHeader64.SizeOfUninitializedData", Field, 3, ""},
+		{"OptionalHeader64.Subsystem", Field, 3, ""},
+		{"OptionalHeader64.Win32VersionValue", Field, 3, ""},
+		{"Reloc", Type, 8, ""},
+		{"Reloc.SymbolTableIndex", Field, 8, ""},
+		{"Reloc.Type", Field, 8, ""},
+		{"Reloc.VirtualAddress", Field, 8, ""},
+		{"Section", Type, 0, ""},
+		{"Section.ReaderAt", Field, 0, ""},
+		{"Section.Relocs", Field, 8, ""},
+		{"Section.SectionHeader", Field, 0, ""},
+		{"SectionHeader", Type, 0, ""},
+		{"SectionHeader.Characteristics", Field, 0, ""},
+		{"SectionHeader.Name", Field, 0, ""},
+		{"SectionHeader.NumberOfLineNumbers", Field, 0, ""},
+		{"SectionHeader.NumberOfRelocations", Field, 0, ""},
+		{"SectionHeader.Offset", Field, 0, ""},
+		{"SectionHeader.PointerToLineNumbers", Field, 0, ""},
+		{"SectionHeader.PointerToRelocations", Field, 0, ""},
+		{"SectionHeader.Size", Field, 0, ""},
+		{"SectionHeader.VirtualAddress", Field, 0, ""},
+		{"SectionHeader.VirtualSize", Field, 0, ""},
+		{"SectionHeader32", Type, 0, ""},
+		{"SectionHeader32.Characteristics", Field, 0, ""},
+		{"SectionHeader32.Name", Field, 0, ""},
+		{"SectionHeader32.NumberOfLineNumbers", Field, 0, ""},
+		{"SectionHeader32.NumberOfRelocations", Field, 0, ""},
+		{"SectionHeader32.PointerToLineNumbers", Field, 0, ""},
+		{"SectionHeader32.PointerToRawData", Field, 0, ""},
+		{"SectionHeader32.PointerToRelocations", Field, 0, ""},
+		{"SectionHeader32.SizeOfRawData", Field, 0, ""},
+		{"SectionHeader32.VirtualAddress", Field, 0, ""},
+		{"SectionHeader32.VirtualSize", Field, 0, ""},
+		{"StringTable", Type, 8, ""},
+		{"Symbol", Type, 1, ""},
+		{"Symbol.Name", Field, 1, ""},
+		{"Symbol.SectionNumber", Field, 1, ""},
+		{"Symbol.StorageClass", Field, 1, ""},
+		{"Symbol.Type", Field, 1, ""},
+		{"Symbol.Value", Field, 1, ""},
 	},
 	"debug/plan9obj": {
-		{"(*File).Close", Method, 3},
-		{"(*File).Section", Method, 3},
-		{"(*File).Symbols", Method, 3},
-		{"(*Section).Data", Method, 3},
-		{"(*Section).Open", Method, 3},
-		{"(Section).ReadAt", Method, 3},
-		{"ErrNoSymbols", Var, 18},
-		{"File", Type, 3},
-		{"File.FileHeader", Field, 3},
-		{"File.Sections", Field, 3},
-		{"FileHeader", Type, 3},
-		{"FileHeader.Bss", Field, 3},
-		{"FileHeader.Entry", Field, 3},
-		{"FileHeader.HdrSize", Field, 4},
-		{"FileHeader.LoadAddress", Field, 4},
-		{"FileHeader.Magic", Field, 3},
-		{"FileHeader.PtrSize", Field, 3},
-		{"Magic386", Const, 3},
-		{"Magic64", Const, 3},
-		{"MagicAMD64", Const, 3},
-		{"MagicARM", Const, 3},
-		{"NewFile", Func, 3},
-		{"Open", Func, 3},
-		{"Section", Type, 3},
-		{"Section.ReaderAt", Field, 3},
-		{"Section.SectionHeader", Field, 3},
-		{"SectionHeader", Type, 3},
-		{"SectionHeader.Name", Field, 3},
-		{"SectionHeader.Offset", Field, 3},
-		{"SectionHeader.Size", Field, 3},
-		{"Sym", Type, 3},
-		{"Sym.Name", Field, 3},
-		{"Sym.Type", Field, 3},
-		{"Sym.Value", Field, 3},
+		{"(*File).Close", Method, 3, ""},
+		{"(*File).Section", Method, 3, ""},
+		{"(*File).Symbols", Method, 3, ""},
+		{"(*Section).Data", Method, 3, ""},
+		{"(*Section).Open", Method, 3, ""},
+		{"(Section).ReadAt", Method, 3, ""},
+		{"ErrNoSymbols", Var, 18, ""},
+		{"File", Type, 3, ""},
+		{"File.FileHeader", Field, 3, ""},
+		{"File.Sections", Field, 3, ""},
+		{"FileHeader", Type, 3, ""},
+		{"FileHeader.Bss", Field, 3, ""},
+		{"FileHeader.Entry", Field, 3, ""},
+		{"FileHeader.HdrSize", Field, 4, ""},
+		{"FileHeader.LoadAddress", Field, 4, ""},
+		{"FileHeader.Magic", Field, 3, ""},
+		{"FileHeader.PtrSize", Field, 3, ""},
+		{"Magic386", Const, 3, ""},
+		{"Magic64", Const, 3, ""},
+		{"MagicAMD64", Const, 3, ""},
+		{"MagicARM", Const, 3, ""},
+		{"NewFile", Func, 3, "func(r io.ReaderAt) (*File, error)"},
+		{"Open", Func, 3, "func(name string) (*File, error)"},
+		{"Section", Type, 3, ""},
+		{"Section.ReaderAt", Field, 3, ""},
+		{"Section.SectionHeader", Field, 3, ""},
+		{"SectionHeader", Type, 3, ""},
+		{"SectionHeader.Name", Field, 3, ""},
+		{"SectionHeader.Offset", Field, 3, ""},
+		{"SectionHeader.Size", Field, 3, ""},
+		{"Sym", Type, 3, ""},
+		{"Sym.Name", Field, 3, ""},
+		{"Sym.Type", Field, 3, ""},
+		{"Sym.Value", Field, 3, ""},
 	},
 	"embed": {
-		{"(FS).Open", Method, 16},
-		{"(FS).ReadDir", Method, 16},
-		{"(FS).ReadFile", Method, 16},
-		{"FS", Type, 16},
+		{"(FS).Open", Method, 16, ""},
+		{"(FS).ReadDir", Method, 16, ""},
+		{"(FS).ReadFile", Method, 16, ""},
+		{"FS", Type, 16, ""},
 	},
 	"encoding": {
-		{"BinaryAppender", Type, 24},
-		{"BinaryMarshaler", Type, 2},
-		{"BinaryUnmarshaler", Type, 2},
-		{"TextAppender", Type, 24},
-		{"TextMarshaler", Type, 2},
-		{"TextUnmarshaler", Type, 2},
+		{"BinaryAppender", Type, 24, ""},
+		{"BinaryMarshaler", Type, 2, ""},
+		{"BinaryUnmarshaler", Type, 2, ""},
+		{"TextAppender", Type, 24, ""},
+		{"TextMarshaler", Type, 2, ""},
+		{"TextUnmarshaler", Type, 2, ""},
 	},
 	"encoding/ascii85": {
-		{"(CorruptInputError).Error", Method, 0},
-		{"CorruptInputError", Type, 0},
-		{"Decode", Func, 0},
-		{"Encode", Func, 0},
-		{"MaxEncodedLen", Func, 0},
-		{"NewDecoder", Func, 0},
-		{"NewEncoder", Func, 0},
+		{"(CorruptInputError).Error", Method, 0, ""},
+		{"CorruptInputError", Type, 0, ""},
+		{"Decode", Func, 0, "func(dst []byte, src []byte, flush bool) (ndst int, nsrc int, err error)"},
+		{"Encode", Func, 0, "func(dst []byte, src []byte) int"},
+		{"MaxEncodedLen", Func, 0, "func(n int) int"},
+		{"NewDecoder", Func, 0, "func(r io.Reader) io.Reader"},
+		{"NewEncoder", Func, 0, "func(w io.Writer) io.WriteCloser"},
 	},
 	"encoding/asn1": {
-		{"(BitString).At", Method, 0},
-		{"(BitString).RightAlign", Method, 0},
-		{"(ObjectIdentifier).Equal", Method, 0},
-		{"(ObjectIdentifier).String", Method, 3},
-		{"(StructuralError).Error", Method, 0},
-		{"(SyntaxError).Error", Method, 0},
-		{"BitString", Type, 0},
-		{"BitString.BitLength", Field, 0},
-		{"BitString.Bytes", Field, 0},
-		{"ClassApplication", Const, 6},
-		{"ClassContextSpecific", Const, 6},
-		{"ClassPrivate", Const, 6},
-		{"ClassUniversal", Const, 6},
-		{"Enumerated", Type, 0},
-		{"Flag", Type, 0},
-		{"Marshal", Func, 0},
-		{"MarshalWithParams", Func, 10},
-		{"NullBytes", Var, 9},
-		{"NullRawValue", Var, 9},
-		{"ObjectIdentifier", Type, 0},
-		{"RawContent", Type, 0},
-		{"RawValue", Type, 0},
-		{"RawValue.Bytes", Field, 0},
-		{"RawValue.Class", Field, 0},
-		{"RawValue.FullBytes", Field, 0},
-		{"RawValue.IsCompound", Field, 0},
-		{"RawValue.Tag", Field, 0},
-		{"StructuralError", Type, 0},
-		{"StructuralError.Msg", Field, 0},
-		{"SyntaxError", Type, 0},
-		{"SyntaxError.Msg", Field, 0},
-		{"TagBMPString", Const, 14},
-		{"TagBitString", Const, 6},
-		{"TagBoolean", Const, 6},
-		{"TagEnum", Const, 6},
-		{"TagGeneralString", Const, 6},
-		{"TagGeneralizedTime", Const, 6},
-		{"TagIA5String", Const, 6},
-		{"TagInteger", Const, 6},
-		{"TagNull", Const, 9},
-		{"TagNumericString", Const, 10},
-		{"TagOID", Const, 6},
-		{"TagOctetString", Const, 6},
-		{"TagPrintableString", Const, 6},
-		{"TagSequence", Const, 6},
-		{"TagSet", Const, 6},
-		{"TagT61String", Const, 6},
-		{"TagUTCTime", Const, 6},
-		{"TagUTF8String", Const, 6},
-		{"Unmarshal", Func, 0},
-		{"UnmarshalWithParams", Func, 0},
+		{"(BitString).At", Method, 0, ""},
+		{"(BitString).RightAlign", Method, 0, ""},
+		{"(ObjectIdentifier).Equal", Method, 0, ""},
+		{"(ObjectIdentifier).String", Method, 3, ""},
+		{"(StructuralError).Error", Method, 0, ""},
+		{"(SyntaxError).Error", Method, 0, ""},
+		{"BitString", Type, 0, ""},
+		{"BitString.BitLength", Field, 0, ""},
+		{"BitString.Bytes", Field, 0, ""},
+		{"ClassApplication", Const, 6, ""},
+		{"ClassContextSpecific", Const, 6, ""},
+		{"ClassPrivate", Const, 6, ""},
+		{"ClassUniversal", Const, 6, ""},
+		{"Enumerated", Type, 0, ""},
+		{"Flag", Type, 0, ""},
+		{"Marshal", Func, 0, "func(val any) ([]byte, error)"},
+		{"MarshalWithParams", Func, 10, "func(val any, params string) ([]byte, error)"},
+		{"NullBytes", Var, 9, ""},
+		{"NullRawValue", Var, 9, ""},
+		{"ObjectIdentifier", Type, 0, ""},
+		{"RawContent", Type, 0, ""},
+		{"RawValue", Type, 0, ""},
+		{"RawValue.Bytes", Field, 0, ""},
+		{"RawValue.Class", Field, 0, ""},
+		{"RawValue.FullBytes", Field, 0, ""},
+		{"RawValue.IsCompound", Field, 0, ""},
+		{"RawValue.Tag", Field, 0, ""},
+		{"StructuralError", Type, 0, ""},
+		{"StructuralError.Msg", Field, 0, ""},
+		{"SyntaxError", Type, 0, ""},
+		{"SyntaxError.Msg", Field, 0, ""},
+		{"TagBMPString", Const, 14, ""},
+		{"TagBitString", Const, 6, ""},
+		{"TagBoolean", Const, 6, ""},
+		{"TagEnum", Const, 6, ""},
+		{"TagGeneralString", Const, 6, ""},
+		{"TagGeneralizedTime", Const, 6, ""},
+		{"TagIA5String", Const, 6, ""},
+		{"TagInteger", Const, 6, ""},
+		{"TagNull", Const, 9, ""},
+		{"TagNumericString", Const, 10, ""},
+		{"TagOID", Const, 6, ""},
+		{"TagOctetString", Const, 6, ""},
+		{"TagPrintableString", Const, 6, ""},
+		{"TagSequence", Const, 6, ""},
+		{"TagSet", Const, 6, ""},
+		{"TagT61String", Const, 6, ""},
+		{"TagUTCTime", Const, 6, ""},
+		{"TagUTF8String", Const, 6, ""},
+		{"Unmarshal", Func, 0, "func(b []byte, val any) (rest []byte, err error)"},
+		{"UnmarshalWithParams", Func, 0, "func(b []byte, val any, params string) (rest []byte, err error)"},
 	},
 	"encoding/base32": {
-		{"(*Encoding).AppendDecode", Method, 22},
-		{"(*Encoding).AppendEncode", Method, 22},
-		{"(*Encoding).Decode", Method, 0},
-		{"(*Encoding).DecodeString", Method, 0},
-		{"(*Encoding).DecodedLen", Method, 0},
-		{"(*Encoding).Encode", Method, 0},
-		{"(*Encoding).EncodeToString", Method, 0},
-		{"(*Encoding).EncodedLen", Method, 0},
-		{"(CorruptInputError).Error", Method, 0},
-		{"(Encoding).WithPadding", Method, 9},
-		{"CorruptInputError", Type, 0},
-		{"Encoding", Type, 0},
-		{"HexEncoding", Var, 0},
-		{"NewDecoder", Func, 0},
-		{"NewEncoder", Func, 0},
-		{"NewEncoding", Func, 0},
-		{"NoPadding", Const, 9},
-		{"StdEncoding", Var, 0},
-		{"StdPadding", Const, 9},
+		{"(*Encoding).AppendDecode", Method, 22, ""},
+		{"(*Encoding).AppendEncode", Method, 22, ""},
+		{"(*Encoding).Decode", Method, 0, ""},
+		{"(*Encoding).DecodeString", Method, 0, ""},
+		{"(*Encoding).DecodedLen", Method, 0, ""},
+		{"(*Encoding).Encode", Method, 0, ""},
+		{"(*Encoding).EncodeToString", Method, 0, ""},
+		{"(*Encoding).EncodedLen", Method, 0, ""},
+		{"(CorruptInputError).Error", Method, 0, ""},
+		{"(Encoding).WithPadding", Method, 9, ""},
+		{"CorruptInputError", Type, 0, ""},
+		{"Encoding", Type, 0, ""},
+		{"HexEncoding", Var, 0, ""},
+		{"NewDecoder", Func, 0, "func(enc *Encoding, r io.Reader) io.Reader"},
+		{"NewEncoder", Func, 0, "func(enc *Encoding, w io.Writer) io.WriteCloser"},
+		{"NewEncoding", Func, 0, "func(encoder string) *Encoding"},
+		{"NoPadding", Const, 9, ""},
+		{"StdEncoding", Var, 0, ""},
+		{"StdPadding", Const, 9, ""},
 	},
 	"encoding/base64": {
-		{"(*Encoding).AppendDecode", Method, 22},
-		{"(*Encoding).AppendEncode", Method, 22},
-		{"(*Encoding).Decode", Method, 0},
-		{"(*Encoding).DecodeString", Method, 0},
-		{"(*Encoding).DecodedLen", Method, 0},
-		{"(*Encoding).Encode", Method, 0},
-		{"(*Encoding).EncodeToString", Method, 0},
-		{"(*Encoding).EncodedLen", Method, 0},
-		{"(CorruptInputError).Error", Method, 0},
-		{"(Encoding).Strict", Method, 8},
-		{"(Encoding).WithPadding", Method, 5},
-		{"CorruptInputError", Type, 0},
-		{"Encoding", Type, 0},
-		{"NewDecoder", Func, 0},
-		{"NewEncoder", Func, 0},
-		{"NewEncoding", Func, 0},
-		{"NoPadding", Const, 5},
-		{"RawStdEncoding", Var, 5},
-		{"RawURLEncoding", Var, 5},
-		{"StdEncoding", Var, 0},
-		{"StdPadding", Const, 5},
-		{"URLEncoding", Var, 0},
+		{"(*Encoding).AppendDecode", Method, 22, ""},
+		{"(*Encoding).AppendEncode", Method, 22, ""},
+		{"(*Encoding).Decode", Method, 0, ""},
+		{"(*Encoding).DecodeString", Method, 0, ""},
+		{"(*Encoding).DecodedLen", Method, 0, ""},
+		{"(*Encoding).Encode", Method, 0, ""},
+		{"(*Encoding).EncodeToString", Method, 0, ""},
+		{"(*Encoding).EncodedLen", Method, 0, ""},
+		{"(CorruptInputError).Error", Method, 0, ""},
+		{"(Encoding).Strict", Method, 8, ""},
+		{"(Encoding).WithPadding", Method, 5, ""},
+		{"CorruptInputError", Type, 0, ""},
+		{"Encoding", Type, 0, ""},
+		{"NewDecoder", Func, 0, "func(enc *Encoding, r io.Reader) io.Reader"},
+		{"NewEncoder", Func, 0, "func(enc *Encoding, w io.Writer) io.WriteCloser"},
+		{"NewEncoding", Func, 0, "func(encoder string) *Encoding"},
+		{"NoPadding", Const, 5, ""},
+		{"RawStdEncoding", Var, 5, ""},
+		{"RawURLEncoding", Var, 5, ""},
+		{"StdEncoding", Var, 0, ""},
+		{"StdPadding", Const, 5, ""},
+		{"URLEncoding", Var, 0, ""},
 	},
 	"encoding/binary": {
-		{"Append", Func, 23},
-		{"AppendByteOrder", Type, 19},
-		{"AppendUvarint", Func, 19},
-		{"AppendVarint", Func, 19},
-		{"BigEndian", Var, 0},
-		{"ByteOrder", Type, 0},
-		{"Decode", Func, 23},
-		{"Encode", Func, 23},
-		{"LittleEndian", Var, 0},
-		{"MaxVarintLen16", Const, 0},
-		{"MaxVarintLen32", Const, 0},
-		{"MaxVarintLen64", Const, 0},
-		{"NativeEndian", Var, 21},
-		{"PutUvarint", Func, 0},
-		{"PutVarint", Func, 0},
-		{"Read", Func, 0},
-		{"ReadUvarint", Func, 0},
-		{"ReadVarint", Func, 0},
-		{"Size", Func, 0},
-		{"Uvarint", Func, 0},
-		{"Varint", Func, 0},
-		{"Write", Func, 0},
+		{"Append", Func, 23, "func(buf []byte, order ByteOrder, data any) ([]byte, error)"},
+		{"AppendByteOrder", Type, 19, ""},
+		{"AppendUvarint", Func, 19, "func(buf []byte, x uint64) []byte"},
+		{"AppendVarint", Func, 19, "func(buf []byte, x int64) []byte"},
+		{"BigEndian", Var, 0, ""},
+		{"ByteOrder", Type, 0, ""},
+		{"Decode", Func, 23, "func(buf []byte, order ByteOrder, data any) (int, error)"},
+		{"Encode", Func, 23, "func(buf []byte, order ByteOrder, data any) (int, error)"},
+		{"LittleEndian", Var, 0, ""},
+		{"MaxVarintLen16", Const, 0, ""},
+		{"MaxVarintLen32", Const, 0, ""},
+		{"MaxVarintLen64", Const, 0, ""},
+		{"NativeEndian", Var, 21, ""},
+		{"PutUvarint", Func, 0, "func(buf []byte, x uint64) int"},
+		{"PutVarint", Func, 0, "func(buf []byte, x int64) int"},
+		{"Read", Func, 0, "func(r io.Reader, order ByteOrder, data any) error"},
+		{"ReadUvarint", Func, 0, "func(r io.ByteReader) (uint64, error)"},
+		{"ReadVarint", Func, 0, "func(r io.ByteReader) (int64, error)"},
+		{"Size", Func, 0, "func(v any) int"},
+		{"Uvarint", Func, 0, "func(buf []byte) (uint64, int)"},
+		{"Varint", Func, 0, "func(buf []byte) (int64, int)"},
+		{"Write", Func, 0, "func(w io.Writer, order ByteOrder, data any) error"},
 	},
 	"encoding/csv": {
-		{"(*ParseError).Error", Method, 0},
-		{"(*ParseError).Unwrap", Method, 13},
-		{"(*Reader).FieldPos", Method, 17},
-		{"(*Reader).InputOffset", Method, 19},
-		{"(*Reader).Read", Method, 0},
-		{"(*Reader).ReadAll", Method, 0},
-		{"(*Writer).Error", Method, 1},
-		{"(*Writer).Flush", Method, 0},
-		{"(*Writer).Write", Method, 0},
-		{"(*Writer).WriteAll", Method, 0},
-		{"ErrBareQuote", Var, 0},
-		{"ErrFieldCount", Var, 0},
-		{"ErrQuote", Var, 0},
-		{"ErrTrailingComma", Var, 0},
-		{"NewReader", Func, 0},
-		{"NewWriter", Func, 0},
-		{"ParseError", Type, 0},
-		{"ParseError.Column", Field, 0},
-		{"ParseError.Err", Field, 0},
-		{"ParseError.Line", Field, 0},
-		{"ParseError.StartLine", Field, 10},
-		{"Reader", Type, 0},
-		{"Reader.Comma", Field, 0},
-		{"Reader.Comment", Field, 0},
-		{"Reader.FieldsPerRecord", Field, 0},
-		{"Reader.LazyQuotes", Field, 0},
-		{"Reader.ReuseRecord", Field, 9},
-		{"Reader.TrailingComma", Field, 0},
-		{"Reader.TrimLeadingSpace", Field, 0},
-		{"Writer", Type, 0},
-		{"Writer.Comma", Field, 0},
-		{"Writer.UseCRLF", Field, 0},
+		{"(*ParseError).Error", Method, 0, ""},
+		{"(*ParseError).Unwrap", Method, 13, ""},
+		{"(*Reader).FieldPos", Method, 17, ""},
+		{"(*Reader).InputOffset", Method, 19, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).ReadAll", Method, 0, ""},
+		{"(*Writer).Error", Method, 1, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"(*Writer).WriteAll", Method, 0, ""},
+		{"ErrBareQuote", Var, 0, ""},
+		{"ErrFieldCount", Var, 0, ""},
+		{"ErrQuote", Var, 0, ""},
+		{"ErrTrailingComma", Var, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) *Reader"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"ParseError", Type, 0, ""},
+		{"ParseError.Column", Field, 0, ""},
+		{"ParseError.Err", Field, 0, ""},
+		{"ParseError.Line", Field, 0, ""},
+		{"ParseError.StartLine", Field, 10, ""},
+		{"Reader", Type, 0, ""},
+		{"Reader.Comma", Field, 0, ""},
+		{"Reader.Comment", Field, 0, ""},
+		{"Reader.FieldsPerRecord", Field, 0, ""},
+		{"Reader.LazyQuotes", Field, 0, ""},
+		{"Reader.ReuseRecord", Field, 9, ""},
+		{"Reader.TrailingComma", Field, 0, ""},
+		{"Reader.TrimLeadingSpace", Field, 0, ""},
+		{"Writer", Type, 0, ""},
+		{"Writer.Comma", Field, 0, ""},
+		{"Writer.UseCRLF", Field, 0, ""},
 	},
 	"encoding/gob": {
-		{"(*Decoder).Decode", Method, 0},
-		{"(*Decoder).DecodeValue", Method, 0},
-		{"(*Encoder).Encode", Method, 0},
-		{"(*Encoder).EncodeValue", Method, 0},
-		{"CommonType", Type, 0},
-		{"CommonType.Id", Field, 0},
-		{"CommonType.Name", Field, 0},
-		{"Decoder", Type, 0},
-		{"Encoder", Type, 0},
-		{"GobDecoder", Type, 0},
-		{"GobEncoder", Type, 0},
-		{"NewDecoder", Func, 0},
-		{"NewEncoder", Func, 0},
-		{"Register", Func, 0},
-		{"RegisterName", Func, 0},
+		{"(*Decoder).Decode", Method, 0, ""},
+		{"(*Decoder).DecodeValue", Method, 0, ""},
+		{"(*Encoder).Encode", Method, 0, ""},
+		{"(*Encoder).EncodeValue", Method, 0, ""},
+		{"CommonType", Type, 0, ""},
+		{"CommonType.Id", Field, 0, ""},
+		{"CommonType.Name", Field, 0, ""},
+		{"Decoder", Type, 0, ""},
+		{"Encoder", Type, 0, ""},
+		{"GobDecoder", Type, 0, ""},
+		{"GobEncoder", Type, 0, ""},
+		{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
+		{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
+		{"Register", Func, 0, "func(value any)"},
+		{"RegisterName", Func, 0, "func(name string, value any)"},
 	},
 	"encoding/hex": {
-		{"(InvalidByteError).Error", Method, 0},
-		{"AppendDecode", Func, 22},
-		{"AppendEncode", Func, 22},
-		{"Decode", Func, 0},
-		{"DecodeString", Func, 0},
-		{"DecodedLen", Func, 0},
-		{"Dump", Func, 0},
-		{"Dumper", Func, 0},
-		{"Encode", Func, 0},
-		{"EncodeToString", Func, 0},
-		{"EncodedLen", Func, 0},
-		{"ErrLength", Var, 0},
-		{"InvalidByteError", Type, 0},
-		{"NewDecoder", Func, 10},
-		{"NewEncoder", Func, 10},
+		{"(InvalidByteError).Error", Method, 0, ""},
+		{"AppendDecode", Func, 22, "func(dst []byte, src []byte) ([]byte, error)"},
+		{"AppendEncode", Func, 22, "func(dst []byte, src []byte) []byte"},
+		{"Decode", Func, 0, "func(dst []byte, src []byte) (int, error)"},
+		{"DecodeString", Func, 0, "func(s string) ([]byte, error)"},
+		{"DecodedLen", Func, 0, "func(x int) int"},
+		{"Dump", Func, 0, "func(data []byte) string"},
+		{"Dumper", Func, 0, "func(w io.Writer) io.WriteCloser"},
+		{"Encode", Func, 0, "func(dst []byte, src []byte) int"},
+		{"EncodeToString", Func, 0, "func(src []byte) string"},
+		{"EncodedLen", Func, 0, "func(n int) int"},
+		{"ErrLength", Var, 0, ""},
+		{"InvalidByteError", Type, 0, ""},
+		{"NewDecoder", Func, 10, "func(r io.Reader) io.Reader"},
+		{"NewEncoder", Func, 10, "func(w io.Writer) io.Writer"},
 	},
 	"encoding/json": {
-		{"(*Decoder).Buffered", Method, 1},
-		{"(*Decoder).Decode", Method, 0},
-		{"(*Decoder).DisallowUnknownFields", Method, 10},
-		{"(*Decoder).InputOffset", Method, 14},
-		{"(*Decoder).More", Method, 5},
-		{"(*Decoder).Token", Method, 5},
-		{"(*Decoder).UseNumber", Method, 1},
-		{"(*Encoder).Encode", Method, 0},
-		{"(*Encoder).SetEscapeHTML", Method, 7},
-		{"(*Encoder).SetIndent", Method, 7},
-		{"(*InvalidUTF8Error).Error", Method, 0},
-		{"(*InvalidUnmarshalError).Error", Method, 0},
-		{"(*MarshalerError).Error", Method, 0},
-		{"(*MarshalerError).Unwrap", Method, 13},
-		{"(*RawMessage).MarshalJSON", Method, 0},
-		{"(*RawMessage).UnmarshalJSON", Method, 0},
-		{"(*SyntaxError).Error", Method, 0},
-		{"(*UnmarshalFieldError).Error", Method, 0},
-		{"(*UnmarshalTypeError).Error", Method, 0},
-		{"(*UnsupportedTypeError).Error", Method, 0},
-		{"(*UnsupportedValueError).Error", Method, 0},
-		{"(Delim).String", Method, 5},
-		{"(Number).Float64", Method, 1},
-		{"(Number).Int64", Method, 1},
-		{"(Number).String", Method, 1},
-		{"(RawMessage).MarshalJSON", Method, 8},
-		{"Compact", Func, 0},
-		{"Decoder", Type, 0},
-		{"Delim", Type, 5},
-		{"Encoder", Type, 0},
-		{"HTMLEscape", Func, 0},
-		{"Indent", Func, 0},
-		{"InvalidUTF8Error", Type, 0},
-		{"InvalidUTF8Error.S", Field, 0},
-		{"InvalidUnmarshalError", Type, 0},
-		{"InvalidUnmarshalError.Type", Field, 0},
-		{"Marshal", Func, 0},
-		{"MarshalIndent", Func, 0},
-		{"Marshaler", Type, 0},
-		{"MarshalerError", Type, 0},
-		{"MarshalerError.Err", Field, 0},
-		{"MarshalerError.Type", Field, 0},
-		{"NewDecoder", Func, 0},
-		{"NewEncoder", Func, 0},
-		{"Number", Type, 1},
-		{"RawMessage", Type, 0},
-		{"SyntaxError", Type, 0},
-		{"SyntaxError.Offset", Field, 0},
-		{"Token", Type, 5},
-		{"Unmarshal", Func, 0},
-		{"UnmarshalFieldError", Type, 0},
-		{"UnmarshalFieldError.Field", Field, 0},
-		{"UnmarshalFieldError.Key", Field, 0},
-		{"UnmarshalFieldError.Type", Field, 0},
-		{"UnmarshalTypeError", Type, 0},
-		{"UnmarshalTypeError.Field", Field, 8},
-		{"UnmarshalTypeError.Offset", Field, 5},
-		{"UnmarshalTypeError.Struct", Field, 8},
-		{"UnmarshalTypeError.Type", Field, 0},
-		{"UnmarshalTypeError.Value", Field, 0},
-		{"Unmarshaler", Type, 0},
-		{"UnsupportedTypeError", Type, 0},
-		{"UnsupportedTypeError.Type", Field, 0},
-		{"UnsupportedValueError", Type, 0},
-		{"UnsupportedValueError.Str", Field, 0},
-		{"UnsupportedValueError.Value", Field, 0},
-		{"Valid", Func, 9},
+		{"(*Decoder).Buffered", Method, 1, ""},
+		{"(*Decoder).Decode", Method, 0, ""},
+		{"(*Decoder).DisallowUnknownFields", Method, 10, ""},
+		{"(*Decoder).InputOffset", Method, 14, ""},
+		{"(*Decoder).More", Method, 5, ""},
+		{"(*Decoder).Token", Method, 5, ""},
+		{"(*Decoder).UseNumber", Method, 1, ""},
+		{"(*Encoder).Encode", Method, 0, ""},
+		{"(*Encoder).SetEscapeHTML", Method, 7, ""},
+		{"(*Encoder).SetIndent", Method, 7, ""},
+		{"(*InvalidUTF8Error).Error", Method, 0, ""},
+		{"(*InvalidUnmarshalError).Error", Method, 0, ""},
+		{"(*MarshalerError).Error", Method, 0, ""},
+		{"(*MarshalerError).Unwrap", Method, 13, ""},
+		{"(*RawMessage).MarshalJSON", Method, 0, ""},
+		{"(*RawMessage).UnmarshalJSON", Method, 0, ""},
+		{"(*SyntaxError).Error", Method, 0, ""},
+		{"(*UnmarshalFieldError).Error", Method, 0, ""},
+		{"(*UnmarshalTypeError).Error", Method, 0, ""},
+		{"(*UnsupportedTypeError).Error", Method, 0, ""},
+		{"(*UnsupportedValueError).Error", Method, 0, ""},
+		{"(Delim).String", Method, 5, ""},
+		{"(Number).Float64", Method, 1, ""},
+		{"(Number).Int64", Method, 1, ""},
+		{"(Number).String", Method, 1, ""},
+		{"(RawMessage).MarshalJSON", Method, 8, ""},
+		{"Compact", Func, 0, "func(dst *bytes.Buffer, src []byte) error"},
+		{"Decoder", Type, 0, ""},
+		{"Delim", Type, 5, ""},
+		{"Encoder", Type, 0, ""},
+		{"HTMLEscape", Func, 0, "func(dst *bytes.Buffer, src []byte)"},
+		{"Indent", Func, 0, "func(dst *bytes.Buffer, src []byte, prefix string, indent string) error"},
+		{"InvalidUTF8Error", Type, 0, ""},
+		{"InvalidUTF8Error.S", Field, 0, ""},
+		{"InvalidUnmarshalError", Type, 0, ""},
+		{"InvalidUnmarshalError.Type", Field, 0, ""},
+		{"Marshal", Func, 0, "func(v any) ([]byte, error)"},
+		{"MarshalIndent", Func, 0, "func(v any, prefix string, indent string) ([]byte, error)"},
+		{"Marshaler", Type, 0, ""},
+		{"MarshalerError", Type, 0, ""},
+		{"MarshalerError.Err", Field, 0, ""},
+		{"MarshalerError.Type", Field, 0, ""},
+		{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
+		{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
+		{"Number", Type, 1, ""},
+		{"RawMessage", Type, 0, ""},
+		{"SyntaxError", Type, 0, ""},
+		{"SyntaxError.Offset", Field, 0, ""},
+		{"Token", Type, 5, ""},
+		{"Unmarshal", Func, 0, "func(data []byte, v any) error"},
+		{"UnmarshalFieldError", Type, 0, ""},
+		{"UnmarshalFieldError.Field", Field, 0, ""},
+		{"UnmarshalFieldError.Key", Field, 0, ""},
+		{"UnmarshalFieldError.Type", Field, 0, ""},
+		{"UnmarshalTypeError", Type, 0, ""},
+		{"UnmarshalTypeError.Field", Field, 8, ""},
+		{"UnmarshalTypeError.Offset", Field, 5, ""},
+		{"UnmarshalTypeError.Struct", Field, 8, ""},
+		{"UnmarshalTypeError.Type", Field, 0, ""},
+		{"UnmarshalTypeError.Value", Field, 0, ""},
+		{"Unmarshaler", Type, 0, ""},
+		{"UnsupportedTypeError", Type, 0, ""},
+		{"UnsupportedTypeError.Type", Field, 0, ""},
+		{"UnsupportedValueError", Type, 0, ""},
+		{"UnsupportedValueError.Str", Field, 0, ""},
+		{"UnsupportedValueError.Value", Field, 0, ""},
+		{"Valid", Func, 9, "func(data []byte) bool"},
 	},
 	"encoding/pem": {
-		{"Block", Type, 0},
-		{"Block.Bytes", Field, 0},
-		{"Block.Headers", Field, 0},
-		{"Block.Type", Field, 0},
-		{"Decode", Func, 0},
-		{"Encode", Func, 0},
-		{"EncodeToMemory", Func, 0},
+		{"Block", Type, 0, ""},
+		{"Block.Bytes", Field, 0, ""},
+		{"Block.Headers", Field, 0, ""},
+		{"Block.Type", Field, 0, ""},
+		{"Decode", Func, 0, "func(data []byte) (p *Block, rest []byte)"},
+		{"Encode", Func, 0, "func(out io.Writer, b *Block) error"},
+		{"EncodeToMemory", Func, 0, "func(b *Block) []byte"},
 	},
 	"encoding/xml": {
-		{"(*Decoder).Decode", Method, 0},
-		{"(*Decoder).DecodeElement", Method, 0},
-		{"(*Decoder).InputOffset", Method, 4},
-		{"(*Decoder).InputPos", Method, 19},
-		{"(*Decoder).RawToken", Method, 0},
-		{"(*Decoder).Skip", Method, 0},
-		{"(*Decoder).Token", Method, 0},
-		{"(*Encoder).Close", Method, 20},
-		{"(*Encoder).Encode", Method, 0},
-		{"(*Encoder).EncodeElement", Method, 2},
-		{"(*Encoder).EncodeToken", Method, 2},
-		{"(*Encoder).Flush", Method, 2},
-		{"(*Encoder).Indent", Method, 1},
-		{"(*SyntaxError).Error", Method, 0},
-		{"(*TagPathError).Error", Method, 0},
-		{"(*UnsupportedTypeError).Error", Method, 0},
-		{"(CharData).Copy", Method, 0},
-		{"(Comment).Copy", Method, 0},
-		{"(Directive).Copy", Method, 0},
-		{"(ProcInst).Copy", Method, 0},
-		{"(StartElement).Copy", Method, 0},
-		{"(StartElement).End", Method, 2},
-		{"(UnmarshalError).Error", Method, 0},
-		{"Attr", Type, 0},
-		{"Attr.Name", Field, 0},
-		{"Attr.Value", Field, 0},
-		{"CharData", Type, 0},
-		{"Comment", Type, 0},
-		{"CopyToken", Func, 0},
-		{"Decoder", Type, 0},
-		{"Decoder.AutoClose", Field, 0},
-		{"Decoder.CharsetReader", Field, 0},
-		{"Decoder.DefaultSpace", Field, 1},
-		{"Decoder.Entity", Field, 0},
-		{"Decoder.Strict", Field, 0},
-		{"Directive", Type, 0},
-		{"Encoder", Type, 0},
-		{"EndElement", Type, 0},
-		{"EndElement.Name", Field, 0},
-		{"Escape", Func, 0},
-		{"EscapeText", Func, 1},
-		{"HTMLAutoClose", Var, 0},
-		{"HTMLEntity", Var, 0},
-		{"Header", Const, 0},
-		{"Marshal", Func, 0},
-		{"MarshalIndent", Func, 0},
-		{"Marshaler", Type, 2},
-		{"MarshalerAttr", Type, 2},
-		{"Name", Type, 0},
-		{"Name.Local", Field, 0},
-		{"Name.Space", Field, 0},
-		{"NewDecoder", Func, 0},
-		{"NewEncoder", Func, 0},
-		{"NewTokenDecoder", Func, 10},
-		{"ProcInst", Type, 0},
-		{"ProcInst.Inst", Field, 0},
-		{"ProcInst.Target", Field, 0},
-		{"StartElement", Type, 0},
-		{"StartElement.Attr", Field, 0},
-		{"StartElement.Name", Field, 0},
-		{"SyntaxError", Type, 0},
-		{"SyntaxError.Line", Field, 0},
-		{"SyntaxError.Msg", Field, 0},
-		{"TagPathError", Type, 0},
-		{"TagPathError.Field1", Field, 0},
-		{"TagPathError.Field2", Field, 0},
-		{"TagPathError.Struct", Field, 0},
-		{"TagPathError.Tag1", Field, 0},
-		{"TagPathError.Tag2", Field, 0},
-		{"Token", Type, 0},
-		{"TokenReader", Type, 10},
-		{"Unmarshal", Func, 0},
-		{"UnmarshalError", Type, 0},
-		{"Unmarshaler", Type, 2},
-		{"UnmarshalerAttr", Type, 2},
-		{"UnsupportedTypeError", Type, 0},
-		{"UnsupportedTypeError.Type", Field, 0},
+		{"(*Decoder).Decode", Method, 0, ""},
+		{"(*Decoder).DecodeElement", Method, 0, ""},
+		{"(*Decoder).InputOffset", Method, 4, ""},
+		{"(*Decoder).InputPos", Method, 19, ""},
+		{"(*Decoder).RawToken", Method, 0, ""},
+		{"(*Decoder).Skip", Method, 0, ""},
+		{"(*Decoder).Token", Method, 0, ""},
+		{"(*Encoder).Close", Method, 20, ""},
+		{"(*Encoder).Encode", Method, 0, ""},
+		{"(*Encoder).EncodeElement", Method, 2, ""},
+		{"(*Encoder).EncodeToken", Method, 2, ""},
+		{"(*Encoder).Flush", Method, 2, ""},
+		{"(*Encoder).Indent", Method, 1, ""},
+		{"(*SyntaxError).Error", Method, 0, ""},
+		{"(*TagPathError).Error", Method, 0, ""},
+		{"(*UnsupportedTypeError).Error", Method, 0, ""},
+		{"(CharData).Copy", Method, 0, ""},
+		{"(Comment).Copy", Method, 0, ""},
+		{"(Directive).Copy", Method, 0, ""},
+		{"(ProcInst).Copy", Method, 0, ""},
+		{"(StartElement).Copy", Method, 0, ""},
+		{"(StartElement).End", Method, 2, ""},
+		{"(UnmarshalError).Error", Method, 0, ""},
+		{"Attr", Type, 0, ""},
+		{"Attr.Name", Field, 0, ""},
+		{"Attr.Value", Field, 0, ""},
+		{"CharData", Type, 0, ""},
+		{"Comment", Type, 0, ""},
+		{"CopyToken", Func, 0, "func(t Token) Token"},
+		{"Decoder", Type, 0, ""},
+		{"Decoder.AutoClose", Field, 0, ""},
+		{"Decoder.CharsetReader", Field, 0, ""},
+		{"Decoder.DefaultSpace", Field, 1, ""},
+		{"Decoder.Entity", Field, 0, ""},
+		{"Decoder.Strict", Field, 0, ""},
+		{"Directive", Type, 0, ""},
+		{"Encoder", Type, 0, ""},
+		{"EndElement", Type, 0, ""},
+		{"EndElement.Name", Field, 0, ""},
+		{"Escape", Func, 0, "func(w io.Writer, s []byte)"},
+		{"EscapeText", Func, 1, "func(w io.Writer, s []byte) error"},
+		{"HTMLAutoClose", Var, 0, ""},
+		{"HTMLEntity", Var, 0, ""},
+		{"Header", Const, 0, ""},
+		{"Marshal", Func, 0, "func(v any) ([]byte, error)"},
+		{"MarshalIndent", Func, 0, "func(v any, prefix string, indent string) ([]byte, error)"},
+		{"Marshaler", Type, 2, ""},
+		{"MarshalerAttr", Type, 2, ""},
+		{"Name", Type, 0, ""},
+		{"Name.Local", Field, 0, ""},
+		{"Name.Space", Field, 0, ""},
+		{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
+		{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
+		{"NewTokenDecoder", Func, 10, "func(t TokenReader) *Decoder"},
+		{"ProcInst", Type, 0, ""},
+		{"ProcInst.Inst", Field, 0, ""},
+		{"ProcInst.Target", Field, 0, ""},
+		{"StartElement", Type, 0, ""},
+		{"StartElement.Attr", Field, 0, ""},
+		{"StartElement.Name", Field, 0, ""},
+		{"SyntaxError", Type, 0, ""},
+		{"SyntaxError.Line", Field, 0, ""},
+		{"SyntaxError.Msg", Field, 0, ""},
+		{"TagPathError", Type, 0, ""},
+		{"TagPathError.Field1", Field, 0, ""},
+		{"TagPathError.Field2", Field, 0, ""},
+		{"TagPathError.Struct", Field, 0, ""},
+		{"TagPathError.Tag1", Field, 0, ""},
+		{"TagPathError.Tag2", Field, 0, ""},
+		{"Token", Type, 0, ""},
+		{"TokenReader", Type, 10, ""},
+		{"Unmarshal", Func, 0, "func(data []byte, v any) error"},
+		{"UnmarshalError", Type, 0, ""},
+		{"Unmarshaler", Type, 2, ""},
+		{"UnmarshalerAttr", Type, 2, ""},
+		{"UnsupportedTypeError", Type, 0, ""},
+		{"UnsupportedTypeError.Type", Field, 0, ""},
 	},
 	"errors": {
-		{"As", Func, 13},
-		{"ErrUnsupported", Var, 21},
-		{"Is", Func, 13},
-		{"Join", Func, 20},
-		{"New", Func, 0},
-		{"Unwrap", Func, 13},
+		{"As", Func, 13, "func(err error, target any) bool"},
+		{"ErrUnsupported", Var, 21, ""},
+		{"Is", Func, 13, "func(err error, target error) bool"},
+		{"Join", Func, 20, "func(errs ...error) error"},
+		{"New", Func, 0, "func(text string) error"},
+		{"Unwrap", Func, 13, "func(err error) error"},
 	},
 	"expvar": {
-		{"(*Float).Add", Method, 0},
-		{"(*Float).Set", Method, 0},
-		{"(*Float).String", Method, 0},
-		{"(*Float).Value", Method, 8},
-		{"(*Int).Add", Method, 0},
-		{"(*Int).Set", Method, 0},
-		{"(*Int).String", Method, 0},
-		{"(*Int).Value", Method, 8},
-		{"(*Map).Add", Method, 0},
-		{"(*Map).AddFloat", Method, 0},
-		{"(*Map).Delete", Method, 12},
-		{"(*Map).Do", Method, 0},
-		{"(*Map).Get", Method, 0},
-		{"(*Map).Init", Method, 0},
-		{"(*Map).Set", Method, 0},
-		{"(*Map).String", Method, 0},
-		{"(*String).Set", Method, 0},
-		{"(*String).String", Method, 0},
-		{"(*String).Value", Method, 8},
-		{"(Func).String", Method, 0},
-		{"(Func).Value", Method, 8},
-		{"Do", Func, 0},
-		{"Float", Type, 0},
-		{"Func", Type, 0},
-		{"Get", Func, 0},
-		{"Handler", Func, 8},
-		{"Int", Type, 0},
-		{"KeyValue", Type, 0},
-		{"KeyValue.Key", Field, 0},
-		{"KeyValue.Value", Field, 0},
-		{"Map", Type, 0},
-		{"NewFloat", Func, 0},
-		{"NewInt", Func, 0},
-		{"NewMap", Func, 0},
-		{"NewString", Func, 0},
-		{"Publish", Func, 0},
-		{"String", Type, 0},
-		{"Var", Type, 0},
+		{"(*Float).Add", Method, 0, ""},
+		{"(*Float).Set", Method, 0, ""},
+		{"(*Float).String", Method, 0, ""},
+		{"(*Float).Value", Method, 8, ""},
+		{"(*Int).Add", Method, 0, ""},
+		{"(*Int).Set", Method, 0, ""},
+		{"(*Int).String", Method, 0, ""},
+		{"(*Int).Value", Method, 8, ""},
+		{"(*Map).Add", Method, 0, ""},
+		{"(*Map).AddFloat", Method, 0, ""},
+		{"(*Map).Delete", Method, 12, ""},
+		{"(*Map).Do", Method, 0, ""},
+		{"(*Map).Get", Method, 0, ""},
+		{"(*Map).Init", Method, 0, ""},
+		{"(*Map).Set", Method, 0, ""},
+		{"(*Map).String", Method, 0, ""},
+		{"(*String).Set", Method, 0, ""},
+		{"(*String).String", Method, 0, ""},
+		{"(*String).Value", Method, 8, ""},
+		{"(Func).String", Method, 0, ""},
+		{"(Func).Value", Method, 8, ""},
+		{"Do", Func, 0, "func(f func(KeyValue))"},
+		{"Float", Type, 0, ""},
+		{"Func", Type, 0, ""},
+		{"Get", Func, 0, "func(name string) Var"},
+		{"Handler", Func, 8, "func() http.Handler"},
+		{"Int", Type, 0, ""},
+		{"KeyValue", Type, 0, ""},
+		{"KeyValue.Key", Field, 0, ""},
+		{"KeyValue.Value", Field, 0, ""},
+		{"Map", Type, 0, ""},
+		{"NewFloat", Func, 0, "func(name string) *Float"},
+		{"NewInt", Func, 0, "func(name string) *Int"},
+		{"NewMap", Func, 0, "func(name string) *Map"},
+		{"NewString", Func, 0, "func(name string) *String"},
+		{"Publish", Func, 0, "func(name string, v Var)"},
+		{"String", Type, 0, ""},
+		{"Var", Type, 0, ""},
 	},
 	"flag": {
-		{"(*FlagSet).Arg", Method, 0},
-		{"(*FlagSet).Args", Method, 0},
-		{"(*FlagSet).Bool", Method, 0},
-		{"(*FlagSet).BoolFunc", Method, 21},
-		{"(*FlagSet).BoolVar", Method, 0},
-		{"(*FlagSet).Duration", Method, 0},
-		{"(*FlagSet).DurationVar", Method, 0},
-		{"(*FlagSet).ErrorHandling", Method, 10},
-		{"(*FlagSet).Float64", Method, 0},
-		{"(*FlagSet).Float64Var", Method, 0},
-		{"(*FlagSet).Func", Method, 16},
-		{"(*FlagSet).Init", Method, 0},
-		{"(*FlagSet).Int", Method, 0},
-		{"(*FlagSet).Int64", Method, 0},
-		{"(*FlagSet).Int64Var", Method, 0},
-		{"(*FlagSet).IntVar", Method, 0},
-		{"(*FlagSet).Lookup", Method, 0},
-		{"(*FlagSet).NArg", Method, 0},
-		{"(*FlagSet).NFlag", Method, 0},
-		{"(*FlagSet).Name", Method, 10},
-		{"(*FlagSet).Output", Method, 10},
-		{"(*FlagSet).Parse", Method, 0},
-		{"(*FlagSet).Parsed", Method, 0},
-		{"(*FlagSet).PrintDefaults", Method, 0},
-		{"(*FlagSet).Set", Method, 0},
-		{"(*FlagSet).SetOutput", Method, 0},
-		{"(*FlagSet).String", Method, 0},
-		{"(*FlagSet).StringVar", Method, 0},
-		{"(*FlagSet).TextVar", Method, 19},
-		{"(*FlagSet).Uint", Method, 0},
-		{"(*FlagSet).Uint64", Method, 0},
-		{"(*FlagSet).Uint64Var", Method, 0},
-		{"(*FlagSet).UintVar", Method, 0},
-		{"(*FlagSet).Var", Method, 0},
-		{"(*FlagSet).Visit", Method, 0},
-		{"(*FlagSet).VisitAll", Method, 0},
-		{"Arg", Func, 0},
-		{"Args", Func, 0},
-		{"Bool", Func, 0},
-		{"BoolFunc", Func, 21},
-		{"BoolVar", Func, 0},
-		{"CommandLine", Var, 2},
-		{"ContinueOnError", Const, 0},
-		{"Duration", Func, 0},
-		{"DurationVar", Func, 0},
-		{"ErrHelp", Var, 0},
-		{"ErrorHandling", Type, 0},
-		{"ExitOnError", Const, 0},
-		{"Flag", Type, 0},
-		{"Flag.DefValue", Field, 0},
-		{"Flag.Name", Field, 0},
-		{"Flag.Usage", Field, 0},
-		{"Flag.Value", Field, 0},
-		{"FlagSet", Type, 0},
-		{"FlagSet.Usage", Field, 0},
-		{"Float64", Func, 0},
-		{"Float64Var", Func, 0},
-		{"Func", Func, 16},
-		{"Getter", Type, 2},
-		{"Int", Func, 0},
-		{"Int64", Func, 0},
-		{"Int64Var", Func, 0},
-		{"IntVar", Func, 0},
-		{"Lookup", Func, 0},
-		{"NArg", Func, 0},
-		{"NFlag", Func, 0},
-		{"NewFlagSet", Func, 0},
-		{"PanicOnError", Const, 0},
-		{"Parse", Func, 0},
-		{"Parsed", Func, 0},
-		{"PrintDefaults", Func, 0},
-		{"Set", Func, 0},
-		{"String", Func, 0},
-		{"StringVar", Func, 0},
-		{"TextVar", Func, 19},
-		{"Uint", Func, 0},
-		{"Uint64", Func, 0},
-		{"Uint64Var", Func, 0},
-		{"UintVar", Func, 0},
-		{"UnquoteUsage", Func, 5},
-		{"Usage", Var, 0},
-		{"Value", Type, 0},
-		{"Var", Func, 0},
-		{"Visit", Func, 0},
-		{"VisitAll", Func, 0},
+		{"(*FlagSet).Arg", Method, 0, ""},
+		{"(*FlagSet).Args", Method, 0, ""},
+		{"(*FlagSet).Bool", Method, 0, ""},
+		{"(*FlagSet).BoolFunc", Method, 21, ""},
+		{"(*FlagSet).BoolVar", Method, 0, ""},
+		{"(*FlagSet).Duration", Method, 0, ""},
+		{"(*FlagSet).DurationVar", Method, 0, ""},
+		{"(*FlagSet).ErrorHandling", Method, 10, ""},
+		{"(*FlagSet).Float64", Method, 0, ""},
+		{"(*FlagSet).Float64Var", Method, 0, ""},
+		{"(*FlagSet).Func", Method, 16, ""},
+		{"(*FlagSet).Init", Method, 0, ""},
+		{"(*FlagSet).Int", Method, 0, ""},
+		{"(*FlagSet).Int64", Method, 0, ""},
+		{"(*FlagSet).Int64Var", Method, 0, ""},
+		{"(*FlagSet).IntVar", Method, 0, ""},
+		{"(*FlagSet).Lookup", Method, 0, ""},
+		{"(*FlagSet).NArg", Method, 0, ""},
+		{"(*FlagSet).NFlag", Method, 0, ""},
+		{"(*FlagSet).Name", Method, 10, ""},
+		{"(*FlagSet).Output", Method, 10, ""},
+		{"(*FlagSet).Parse", Method, 0, ""},
+		{"(*FlagSet).Parsed", Method, 0, ""},
+		{"(*FlagSet).PrintDefaults", Method, 0, ""},
+		{"(*FlagSet).Set", Method, 0, ""},
+		{"(*FlagSet).SetOutput", Method, 0, ""},
+		{"(*FlagSet).String", Method, 0, ""},
+		{"(*FlagSet).StringVar", Method, 0, ""},
+		{"(*FlagSet).TextVar", Method, 19, ""},
+		{"(*FlagSet).Uint", Method, 0, ""},
+		{"(*FlagSet).Uint64", Method, 0, ""},
+		{"(*FlagSet).Uint64Var", Method, 0, ""},
+		{"(*FlagSet).UintVar", Method, 0, ""},
+		{"(*FlagSet).Var", Method, 0, ""},
+		{"(*FlagSet).Visit", Method, 0, ""},
+		{"(*FlagSet).VisitAll", Method, 0, ""},
+		{"Arg", Func, 0, "func(i int) string"},
+		{"Args", Func, 0, "func() []string"},
+		{"Bool", Func, 0, "func(name string, value bool, usage string) *bool"},
+		{"BoolFunc", Func, 21, "func(name string, usage string, fn func(string) error)"},
+		{"BoolVar", Func, 0, "func(p *bool, name string, value bool, usage string)"},
+		{"CommandLine", Var, 2, ""},
+		{"ContinueOnError", Const, 0, ""},
+		{"Duration", Func, 0, "func(name string, value time.Duration, usage string) *time.Duration"},
+		{"DurationVar", Func, 0, "func(p *time.Duration, name string, value time.Duration, usage string)"},
+		{"ErrHelp", Var, 0, ""},
+		{"ErrorHandling", Type, 0, ""},
+		{"ExitOnError", Const, 0, ""},
+		{"Flag", Type, 0, ""},
+		{"Flag.DefValue", Field, 0, ""},
+		{"Flag.Name", Field, 0, ""},
+		{"Flag.Usage", Field, 0, ""},
+		{"Flag.Value", Field, 0, ""},
+		{"FlagSet", Type, 0, ""},
+		{"FlagSet.Usage", Field, 0, ""},
+		{"Float64", Func, 0, "func(name string, value float64, usage string) *float64"},
+		{"Float64Var", Func, 0, "func(p *float64, name string, value float64, usage string)"},
+		{"Func", Func, 16, "func(name string, usage string, fn func(string) error)"},
+		{"Getter", Type, 2, ""},
+		{"Int", Func, 0, "func(name string, value int, usage string) *int"},
+		{"Int64", Func, 0, "func(name string, value int64, usage string) *int64"},
+		{"Int64Var", Func, 0, "func(p *int64, name string, value int64, usage string)"},
+		{"IntVar", Func, 0, "func(p *int, name string, value int, usage string)"},
+		{"Lookup", Func, 0, "func(name string) *Flag"},
+		{"NArg", Func, 0, "func() int"},
+		{"NFlag", Func, 0, "func() int"},
+		{"NewFlagSet", Func, 0, "func(name string, errorHandling ErrorHandling) *FlagSet"},
+		{"PanicOnError", Const, 0, ""},
+		{"Parse", Func, 0, "func()"},
+		{"Parsed", Func, 0, "func() bool"},
+		{"PrintDefaults", Func, 0, "func()"},
+		{"Set", Func, 0, "func(name string, value string) error"},
+		{"String", Func, 0, "func(name string, value string, usage string) *string"},
+		{"StringVar", Func, 0, "func(p *string, name string, value string, usage string)"},
+		{"TextVar", Func, 19, "func(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string)"},
+		{"Uint", Func, 0, "func(name string, value uint, usage string) *uint"},
+		{"Uint64", Func, 0, "func(name string, value uint64, usage string) *uint64"},
+		{"Uint64Var", Func, 0, "func(p *uint64, name string, value uint64, usage string)"},
+		{"UintVar", Func, 0, "func(p *uint, name string, value uint, usage string)"},
+		{"UnquoteUsage", Func, 5, "func(flag *Flag) (name string, usage string)"},
+		{"Usage", Var, 0, ""},
+		{"Value", Type, 0, ""},
+		{"Var", Func, 0, "func(value Value, name string, usage string)"},
+		{"Visit", Func, 0, "func(fn func(*Flag))"},
+		{"VisitAll", Func, 0, "func(fn func(*Flag))"},
 	},
 	"fmt": {
-		{"Append", Func, 19},
-		{"Appendf", Func, 19},
-		{"Appendln", Func, 19},
-		{"Errorf", Func, 0},
-		{"FormatString", Func, 20},
-		{"Formatter", Type, 0},
-		{"Fprint", Func, 0},
-		{"Fprintf", Func, 0},
-		{"Fprintln", Func, 0},
-		{"Fscan", Func, 0},
-		{"Fscanf", Func, 0},
-		{"Fscanln", Func, 0},
-		{"GoStringer", Type, 0},
-		{"Print", Func, 0},
-		{"Printf", Func, 0},
-		{"Println", Func, 0},
-		{"Scan", Func, 0},
-		{"ScanState", Type, 0},
-		{"Scanf", Func, 0},
-		{"Scanln", Func, 0},
-		{"Scanner", Type, 0},
-		{"Sprint", Func, 0},
-		{"Sprintf", Func, 0},
-		{"Sprintln", Func, 0},
-		{"Sscan", Func, 0},
-		{"Sscanf", Func, 0},
-		{"Sscanln", Func, 0},
-		{"State", Type, 0},
-		{"Stringer", Type, 0},
+		{"Append", Func, 19, "func(b []byte, a ...any) []byte"},
+		{"Appendf", Func, 19, "func(b []byte, format string, a ...any) []byte"},
+		{"Appendln", Func, 19, "func(b []byte, a ...any) []byte"},
+		{"Errorf", Func, 0, "func(format string, a ...any) error"},
+		{"FormatString", Func, 20, "func(state State, verb rune) string"},
+		{"Formatter", Type, 0, ""},
+		{"Fprint", Func, 0, "func(w io.Writer, a ...any) (n int, err error)"},
+		{"Fprintf", Func, 0, "func(w io.Writer, format string, a ...any) (n int, err error)"},
+		{"Fprintln", Func, 0, "func(w io.Writer, a ...any) (n int, err error)"},
+		{"Fscan", Func, 0, "func(r io.Reader, a ...any) (n int, err error)"},
+		{"Fscanf", Func, 0, "func(r io.Reader, format string, a ...any) (n int, err error)"},
+		{"Fscanln", Func, 0, "func(r io.Reader, a ...any) (n int, err error)"},
+		{"GoStringer", Type, 0, ""},
+		{"Print", Func, 0, "func(a ...any) (n int, err error)"},
+		{"Printf", Func, 0, "func(format string, a ...any) (n int, err error)"},
+		{"Println", Func, 0, "func(a ...any) (n int, err error)"},
+		{"Scan", Func, 0, "func(a ...any) (n int, err error)"},
+		{"ScanState", Type, 0, ""},
+		{"Scanf", Func, 0, "func(format string, a ...any) (n int, err error)"},
+		{"Scanln", Func, 0, "func(a ...any) (n int, err error)"},
+		{"Scanner", Type, 0, ""},
+		{"Sprint", Func, 0, "func(a ...any) string"},
+		{"Sprintf", Func, 0, "func(format string, a ...any) string"},
+		{"Sprintln", Func, 0, "func(a ...any) string"},
+		{"Sscan", Func, 0, "func(str string, a ...any) (n int, err error)"},
+		{"Sscanf", Func, 0, "func(str string, format string, a ...any) (n int, err error)"},
+		{"Sscanln", Func, 0, "func(str string, a ...any) (n int, err error)"},
+		{"State", Type, 0, ""},
+		{"Stringer", Type, 0, ""},
 	},
 	"go/ast": {
-		{"(*ArrayType).End", Method, 0},
-		{"(*ArrayType).Pos", Method, 0},
-		{"(*AssignStmt).End", Method, 0},
-		{"(*AssignStmt).Pos", Method, 0},
-		{"(*BadDecl).End", Method, 0},
-		{"(*BadDecl).Pos", Method, 0},
-		{"(*BadExpr).End", Method, 0},
-		{"(*BadExpr).Pos", Method, 0},
-		{"(*BadStmt).End", Method, 0},
-		{"(*BadStmt).Pos", Method, 0},
-		{"(*BasicLit).End", Method, 0},
-		{"(*BasicLit).Pos", Method, 0},
-		{"(*BinaryExpr).End", Method, 0},
-		{"(*BinaryExpr).Pos", Method, 0},
-		{"(*BlockStmt).End", Method, 0},
-		{"(*BlockStmt).Pos", Method, 0},
-		{"(*BranchStmt).End", Method, 0},
-		{"(*BranchStmt).Pos", Method, 0},
-		{"(*CallExpr).End", Method, 0},
-		{"(*CallExpr).Pos", Method, 0},
-		{"(*CaseClause).End", Method, 0},
-		{"(*CaseClause).Pos", Method, 0},
-		{"(*ChanType).End", Method, 0},
-		{"(*ChanType).Pos", Method, 0},
-		{"(*CommClause).End", Method, 0},
-		{"(*CommClause).Pos", Method, 0},
-		{"(*Comment).End", Method, 0},
-		{"(*Comment).Pos", Method, 0},
-		{"(*CommentGroup).End", Method, 0},
-		{"(*CommentGroup).Pos", Method, 0},
-		{"(*CommentGroup).Text", Method, 0},
-		{"(*CompositeLit).End", Method, 0},
-		{"(*CompositeLit).Pos", Method, 0},
-		{"(*DeclStmt).End", Method, 0},
-		{"(*DeclStmt).Pos", Method, 0},
-		{"(*DeferStmt).End", Method, 0},
-		{"(*DeferStmt).Pos", Method, 0},
-		{"(*Ellipsis).End", Method, 0},
-		{"(*Ellipsis).Pos", Method, 0},
-		{"(*EmptyStmt).End", Method, 0},
-		{"(*EmptyStmt).Pos", Method, 0},
-		{"(*ExprStmt).End", Method, 0},
-		{"(*ExprStmt).Pos", Method, 0},
-		{"(*Field).End", Method, 0},
-		{"(*Field).Pos", Method, 0},
-		{"(*FieldList).End", Method, 0},
-		{"(*FieldList).NumFields", Method, 0},
-		{"(*FieldList).Pos", Method, 0},
-		{"(*File).End", Method, 0},
-		{"(*File).Pos", Method, 0},
-		{"(*ForStmt).End", Method, 0},
-		{"(*ForStmt).Pos", Method, 0},
-		{"(*FuncDecl).End", Method, 0},
-		{"(*FuncDecl).Pos", Method, 0},
-		{"(*FuncLit).End", Method, 0},
-		{"(*FuncLit).Pos", Method, 0},
-		{"(*FuncType).End", Method, 0},
-		{"(*FuncType).Pos", Method, 0},
-		{"(*GenDecl).End", Method, 0},
-		{"(*GenDecl).Pos", Method, 0},
-		{"(*GoStmt).End", Method, 0},
-		{"(*GoStmt).Pos", Method, 0},
-		{"(*Ident).End", Method, 0},
-		{"(*Ident).IsExported", Method, 0},
-		{"(*Ident).Pos", Method, 0},
-		{"(*Ident).String", Method, 0},
-		{"(*IfStmt).End", Method, 0},
-		{"(*IfStmt).Pos", Method, 0},
-		{"(*ImportSpec).End", Method, 0},
-		{"(*ImportSpec).Pos", Method, 0},
-		{"(*IncDecStmt).End", Method, 0},
-		{"(*IncDecStmt).Pos", Method, 0},
-		{"(*IndexExpr).End", Method, 0},
-		{"(*IndexExpr).Pos", Method, 0},
-		{"(*IndexListExpr).End", Method, 18},
-		{"(*IndexListExpr).Pos", Method, 18},
-		{"(*InterfaceType).End", Method, 0},
-		{"(*InterfaceType).Pos", Method, 0},
-		{"(*KeyValueExpr).End", Method, 0},
-		{"(*KeyValueExpr).Pos", Method, 0},
-		{"(*LabeledStmt).End", Method, 0},
-		{"(*LabeledStmt).Pos", Method, 0},
-		{"(*MapType).End", Method, 0},
-		{"(*MapType).Pos", Method, 0},
-		{"(*Object).Pos", Method, 0},
-		{"(*Package).End", Method, 0},
-		{"(*Package).Pos", Method, 0},
-		{"(*ParenExpr).End", Method, 0},
-		{"(*ParenExpr).Pos", Method, 0},
-		{"(*RangeStmt).End", Method, 0},
-		{"(*RangeStmt).Pos", Method, 0},
-		{"(*ReturnStmt).End", Method, 0},
-		{"(*ReturnStmt).Pos", Method, 0},
-		{"(*Scope).Insert", Method, 0},
-		{"(*Scope).Lookup", Method, 0},
-		{"(*Scope).String", Method, 0},
-		{"(*SelectStmt).End", Method, 0},
-		{"(*SelectStmt).Pos", Method, 0},
-		{"(*SelectorExpr).End", Method, 0},
-		{"(*SelectorExpr).Pos", Method, 0},
-		{"(*SendStmt).End", Method, 0},
-		{"(*SendStmt).Pos", Method, 0},
-		{"(*SliceExpr).End", Method, 0},
-		{"(*SliceExpr).Pos", Method, 0},
-		{"(*StarExpr).End", Method, 0},
-		{"(*StarExpr).Pos", Method, 0},
-		{"(*StructType).End", Method, 0},
-		{"(*StructType).Pos", Method, 0},
-		{"(*SwitchStmt).End", Method, 0},
-		{"(*SwitchStmt).Pos", Method, 0},
-		{"(*TypeAssertExpr).End", Method, 0},
-		{"(*TypeAssertExpr).Pos", Method, 0},
-		{"(*TypeSpec).End", Method, 0},
-		{"(*TypeSpec).Pos", Method, 0},
-		{"(*TypeSwitchStmt).End", Method, 0},
-		{"(*TypeSwitchStmt).Pos", Method, 0},
-		{"(*UnaryExpr).End", Method, 0},
-		{"(*UnaryExpr).Pos", Method, 0},
-		{"(*ValueSpec).End", Method, 0},
-		{"(*ValueSpec).Pos", Method, 0},
-		{"(CommentMap).Comments", Method, 1},
-		{"(CommentMap).Filter", Method, 1},
-		{"(CommentMap).String", Method, 1},
-		{"(CommentMap).Update", Method, 1},
-		{"(ObjKind).String", Method, 0},
-		{"ArrayType", Type, 0},
-		{"ArrayType.Elt", Field, 0},
-		{"ArrayType.Lbrack", Field, 0},
-		{"ArrayType.Len", Field, 0},
-		{"AssignStmt", Type, 0},
-		{"AssignStmt.Lhs", Field, 0},
-		{"AssignStmt.Rhs", Field, 0},
-		{"AssignStmt.Tok", Field, 0},
-		{"AssignStmt.TokPos", Field, 0},
-		{"Bad", Const, 0},
-		{"BadDecl", Type, 0},
-		{"BadDecl.From", Field, 0},
-		{"BadDecl.To", Field, 0},
-		{"BadExpr", Type, 0},
-		{"BadExpr.From", Field, 0},
-		{"BadExpr.To", Field, 0},
-		{"BadStmt", Type, 0},
-		{"BadStmt.From", Field, 0},
-		{"BadStmt.To", Field, 0},
-		{"BasicLit", Type, 0},
-		{"BasicLit.Kind", Field, 0},
-		{"BasicLit.Value", Field, 0},
-		{"BasicLit.ValuePos", Field, 0},
-		{"BinaryExpr", Type, 0},
-		{"BinaryExpr.Op", Field, 0},
-		{"BinaryExpr.OpPos", Field, 0},
-		{"BinaryExpr.X", Field, 0},
-		{"BinaryExpr.Y", Field, 0},
-		{"BlockStmt", Type, 0},
-		{"BlockStmt.Lbrace", Field, 0},
-		{"BlockStmt.List", Field, 0},
-		{"BlockStmt.Rbrace", Field, 0},
-		{"BranchStmt", Type, 0},
-		{"BranchStmt.Label", Field, 0},
-		{"BranchStmt.Tok", Field, 0},
-		{"BranchStmt.TokPos", Field, 0},
-		{"CallExpr", Type, 0},
-		{"CallExpr.Args", Field, 0},
-		{"CallExpr.Ellipsis", Field, 0},
-		{"CallExpr.Fun", Field, 0},
-		{"CallExpr.Lparen", Field, 0},
-		{"CallExpr.Rparen", Field, 0},
-		{"CaseClause", Type, 0},
-		{"CaseClause.Body", Field, 0},
-		{"CaseClause.Case", Field, 0},
-		{"CaseClause.Colon", Field, 0},
-		{"CaseClause.List", Field, 0},
-		{"ChanDir", Type, 0},
-		{"ChanType", Type, 0},
-		{"ChanType.Arrow", Field, 1},
-		{"ChanType.Begin", Field, 0},
-		{"ChanType.Dir", Field, 0},
-		{"ChanType.Value", Field, 0},
-		{"CommClause", Type, 0},
-		{"CommClause.Body", Field, 0},
-		{"CommClause.Case", Field, 0},
-		{"CommClause.Colon", Field, 0},
-		{"CommClause.Comm", Field, 0},
-		{"Comment", Type, 0},
-		{"Comment.Slash", Field, 0},
-		{"Comment.Text", Field, 0},
-		{"CommentGroup", Type, 0},
-		{"CommentGroup.List", Field, 0},
-		{"CommentMap", Type, 1},
-		{"CompositeLit", Type, 0},
-		{"CompositeLit.Elts", Field, 0},
-		{"CompositeLit.Incomplete", Field, 11},
-		{"CompositeLit.Lbrace", Field, 0},
-		{"CompositeLit.Rbrace", Field, 0},
-		{"CompositeLit.Type", Field, 0},
-		{"Con", Const, 0},
-		{"Decl", Type, 0},
-		{"DeclStmt", Type, 0},
-		{"DeclStmt.Decl", Field, 0},
-		{"DeferStmt", Type, 0},
-		{"DeferStmt.Call", Field, 0},
-		{"DeferStmt.Defer", Field, 0},
-		{"Ellipsis", Type, 0},
-		{"Ellipsis.Ellipsis", Field, 0},
-		{"Ellipsis.Elt", Field, 0},
-		{"EmptyStmt", Type, 0},
-		{"EmptyStmt.Implicit", Field, 5},
-		{"EmptyStmt.Semicolon", Field, 0},
-		{"Expr", Type, 0},
-		{"ExprStmt", Type, 0},
-		{"ExprStmt.X", Field, 0},
-		{"Field", Type, 0},
-		{"Field.Comment", Field, 0},
-		{"Field.Doc", Field, 0},
-		{"Field.Names", Field, 0},
-		{"Field.Tag", Field, 0},
-		{"Field.Type", Field, 0},
-		{"FieldFilter", Type, 0},
-		{"FieldList", Type, 0},
-		{"FieldList.Closing", Field, 0},
-		{"FieldList.List", Field, 0},
-		{"FieldList.Opening", Field, 0},
-		{"File", Type, 0},
-		{"File.Comments", Field, 0},
-		{"File.Decls", Field, 0},
-		{"File.Doc", Field, 0},
-		{"File.FileEnd", Field, 20},
-		{"File.FileStart", Field, 20},
-		{"File.GoVersion", Field, 21},
-		{"File.Imports", Field, 0},
-		{"File.Name", Field, 0},
-		{"File.Package", Field, 0},
-		{"File.Scope", Field, 0},
-		{"File.Unresolved", Field, 0},
-		{"FileExports", Func, 0},
-		{"Filter", Type, 0},
-		{"FilterDecl", Func, 0},
-		{"FilterFile", Func, 0},
-		{"FilterFuncDuplicates", Const, 0},
-		{"FilterImportDuplicates", Const, 0},
-		{"FilterPackage", Func, 0},
-		{"FilterUnassociatedComments", Const, 0},
-		{"ForStmt", Type, 0},
-		{"ForStmt.Body", Field, 0},
-		{"ForStmt.Cond", Field, 0},
-		{"ForStmt.For", Field, 0},
-		{"ForStmt.Init", Field, 0},
-		{"ForStmt.Post", Field, 0},
-		{"Fprint", Func, 0},
-		{"Fun", Const, 0},
-		{"FuncDecl", Type, 0},
-		{"FuncDecl.Body", Field, 0},
-		{"FuncDecl.Doc", Field, 0},
-		{"FuncDecl.Name", Field, 0},
-		{"FuncDecl.Recv", Field, 0},
-		{"FuncDecl.Type", Field, 0},
-		{"FuncLit", Type, 0},
-		{"FuncLit.Body", Field, 0},
-		{"FuncLit.Type", Field, 0},
-		{"FuncType", Type, 0},
-		{"FuncType.Func", Field, 0},
-		{"FuncType.Params", Field, 0},
-		{"FuncType.Results", Field, 0},
-		{"FuncType.TypeParams", Field, 18},
-		{"GenDecl", Type, 0},
-		{"GenDecl.Doc", Field, 0},
-		{"GenDecl.Lparen", Field, 0},
-		{"GenDecl.Rparen", Field, 0},
-		{"GenDecl.Specs", Field, 0},
-		{"GenDecl.Tok", Field, 0},
-		{"GenDecl.TokPos", Field, 0},
-		{"GoStmt", Type, 0},
-		{"GoStmt.Call", Field, 0},
-		{"GoStmt.Go", Field, 0},
-		{"Ident", Type, 0},
-		{"Ident.Name", Field, 0},
-		{"Ident.NamePos", Field, 0},
-		{"Ident.Obj", Field, 0},
-		{"IfStmt", Type, 0},
-		{"IfStmt.Body", Field, 0},
-		{"IfStmt.Cond", Field, 0},
-		{"IfStmt.Else", Field, 0},
-		{"IfStmt.If", Field, 0},
-		{"IfStmt.Init", Field, 0},
-		{"ImportSpec", Type, 0},
-		{"ImportSpec.Comment", Field, 0},
-		{"ImportSpec.Doc", Field, 0},
-		{"ImportSpec.EndPos", Field, 0},
-		{"ImportSpec.Name", Field, 0},
-		{"ImportSpec.Path", Field, 0},
-		{"Importer", Type, 0},
-		{"IncDecStmt", Type, 0},
-		{"IncDecStmt.Tok", Field, 0},
-		{"IncDecStmt.TokPos", Field, 0},
-		{"IncDecStmt.X", Field, 0},
-		{"IndexExpr", Type, 0},
-		{"IndexExpr.Index", Field, 0},
-		{"IndexExpr.Lbrack", Field, 0},
-		{"IndexExpr.Rbrack", Field, 0},
-		{"IndexExpr.X", Field, 0},
-		{"IndexListExpr", Type, 18},
-		{"IndexListExpr.Indices", Field, 18},
-		{"IndexListExpr.Lbrack", Field, 18},
-		{"IndexListExpr.Rbrack", Field, 18},
-		{"IndexListExpr.X", Field, 18},
-		{"Inspect", Func, 0},
-		{"InterfaceType", Type, 0},
-		{"InterfaceType.Incomplete", Field, 0},
-		{"InterfaceType.Interface", Field, 0},
-		{"InterfaceType.Methods", Field, 0},
-		{"IsExported", Func, 0},
-		{"IsGenerated", Func, 21},
-		{"KeyValueExpr", Type, 0},
-		{"KeyValueExpr.Colon", Field, 0},
-		{"KeyValueExpr.Key", Field, 0},
-		{"KeyValueExpr.Value", Field, 0},
-		{"LabeledStmt", Type, 0},
-		{"LabeledStmt.Colon", Field, 0},
-		{"LabeledStmt.Label", Field, 0},
-		{"LabeledStmt.Stmt", Field, 0},
-		{"Lbl", Const, 0},
-		{"MapType", Type, 0},
-		{"MapType.Key", Field, 0},
-		{"MapType.Map", Field, 0},
-		{"MapType.Value", Field, 0},
-		{"MergeMode", Type, 0},
-		{"MergePackageFiles", Func, 0},
-		{"NewCommentMap", Func, 1},
-		{"NewIdent", Func, 0},
-		{"NewObj", Func, 0},
-		{"NewPackage", Func, 0},
-		{"NewScope", Func, 0},
-		{"Node", Type, 0},
-		{"NotNilFilter", Func, 0},
-		{"ObjKind", Type, 0},
-		{"Object", Type, 0},
-		{"Object.Data", Field, 0},
-		{"Object.Decl", Field, 0},
-		{"Object.Kind", Field, 0},
-		{"Object.Name", Field, 0},
-		{"Object.Type", Field, 0},
-		{"Package", Type, 0},
-		{"Package.Files", Field, 0},
-		{"Package.Imports", Field, 0},
-		{"Package.Name", Field, 0},
-		{"Package.Scope", Field, 0},
-		{"PackageExports", Func, 0},
-		{"ParenExpr", Type, 0},
-		{"ParenExpr.Lparen", Field, 0},
-		{"ParenExpr.Rparen", Field, 0},
-		{"ParenExpr.X", Field, 0},
-		{"Pkg", Const, 0},
-		{"Preorder", Func, 23},
-		{"Print", Func, 0},
-		{"RECV", Const, 0},
-		{"RangeStmt", Type, 0},
-		{"RangeStmt.Body", Field, 0},
-		{"RangeStmt.For", Field, 0},
-		{"RangeStmt.Key", Field, 0},
-		{"RangeStmt.Range", Field, 20},
-		{"RangeStmt.Tok", Field, 0},
-		{"RangeStmt.TokPos", Field, 0},
-		{"RangeStmt.Value", Field, 0},
-		{"RangeStmt.X", Field, 0},
-		{"ReturnStmt", Type, 0},
-		{"ReturnStmt.Results", Field, 0},
-		{"ReturnStmt.Return", Field, 0},
-		{"SEND", Const, 0},
-		{"Scope", Type, 0},
-		{"Scope.Objects", Field, 0},
-		{"Scope.Outer", Field, 0},
-		{"SelectStmt", Type, 0},
-		{"SelectStmt.Body", Field, 0},
-		{"SelectStmt.Select", Field, 0},
-		{"SelectorExpr", Type, 0},
-		{"SelectorExpr.Sel", Field, 0},
-		{"SelectorExpr.X", Field, 0},
-		{"SendStmt", Type, 0},
-		{"SendStmt.Arrow", Field, 0},
-		{"SendStmt.Chan", Field, 0},
-		{"SendStmt.Value", Field, 0},
-		{"SliceExpr", Type, 0},
-		{"SliceExpr.High", Field, 0},
-		{"SliceExpr.Lbrack", Field, 0},
-		{"SliceExpr.Low", Field, 0},
-		{"SliceExpr.Max", Field, 2},
-		{"SliceExpr.Rbrack", Field, 0},
-		{"SliceExpr.Slice3", Field, 2},
-		{"SliceExpr.X", Field, 0},
-		{"SortImports", Func, 0},
-		{"Spec", Type, 0},
-		{"StarExpr", Type, 0},
-		{"StarExpr.Star", Field, 0},
-		{"StarExpr.X", Field, 0},
-		{"Stmt", Type, 0},
-		{"StructType", Type, 0},
-		{"StructType.Fields", Field, 0},
-		{"StructType.Incomplete", Field, 0},
-		{"StructType.Struct", Field, 0},
-		{"SwitchStmt", Type, 0},
-		{"SwitchStmt.Body", Field, 0},
-		{"SwitchStmt.Init", Field, 0},
-		{"SwitchStmt.Switch", Field, 0},
-		{"SwitchStmt.Tag", Field, 0},
-		{"Typ", Const, 0},
-		{"TypeAssertExpr", Type, 0},
-		{"TypeAssertExpr.Lparen", Field, 2},
-		{"TypeAssertExpr.Rparen", Field, 2},
-		{"TypeAssertExpr.Type", Field, 0},
-		{"TypeAssertExpr.X", Field, 0},
-		{"TypeSpec", Type, 0},
-		{"TypeSpec.Assign", Field, 9},
-		{"TypeSpec.Comment", Field, 0},
-		{"TypeSpec.Doc", Field, 0},
-		{"TypeSpec.Name", Field, 0},
-		{"TypeSpec.Type", Field, 0},
-		{"TypeSpec.TypeParams", Field, 18},
-		{"TypeSwitchStmt", Type, 0},
-		{"TypeSwitchStmt.Assign", Field, 0},
-		{"TypeSwitchStmt.Body", Field, 0},
-		{"TypeSwitchStmt.Init", Field, 0},
-		{"TypeSwitchStmt.Switch", Field, 0},
-		{"UnaryExpr", Type, 0},
-		{"UnaryExpr.Op", Field, 0},
-		{"UnaryExpr.OpPos", Field, 0},
-		{"UnaryExpr.X", Field, 0},
-		{"Unparen", Func, 22},
-		{"ValueSpec", Type, 0},
-		{"ValueSpec.Comment", Field, 0},
-		{"ValueSpec.Doc", Field, 0},
-		{"ValueSpec.Names", Field, 0},
-		{"ValueSpec.Type", Field, 0},
-		{"ValueSpec.Values", Field, 0},
-		{"Var", Const, 0},
-		{"Visitor", Type, 0},
-		{"Walk", Func, 0},
+		{"(*ArrayType).End", Method, 0, ""},
+		{"(*ArrayType).Pos", Method, 0, ""},
+		{"(*AssignStmt).End", Method, 0, ""},
+		{"(*AssignStmt).Pos", Method, 0, ""},
+		{"(*BadDecl).End", Method, 0, ""},
+		{"(*BadDecl).Pos", Method, 0, ""},
+		{"(*BadExpr).End", Method, 0, ""},
+		{"(*BadExpr).Pos", Method, 0, ""},
+		{"(*BadStmt).End", Method, 0, ""},
+		{"(*BadStmt).Pos", Method, 0, ""},
+		{"(*BasicLit).End", Method, 0, ""},
+		{"(*BasicLit).Pos", Method, 0, ""},
+		{"(*BinaryExpr).End", Method, 0, ""},
+		{"(*BinaryExpr).Pos", Method, 0, ""},
+		{"(*BlockStmt).End", Method, 0, ""},
+		{"(*BlockStmt).Pos", Method, 0, ""},
+		{"(*BranchStmt).End", Method, 0, ""},
+		{"(*BranchStmt).Pos", Method, 0, ""},
+		{"(*CallExpr).End", Method, 0, ""},
+		{"(*CallExpr).Pos", Method, 0, ""},
+		{"(*CaseClause).End", Method, 0, ""},
+		{"(*CaseClause).Pos", Method, 0, ""},
+		{"(*ChanType).End", Method, 0, ""},
+		{"(*ChanType).Pos", Method, 0, ""},
+		{"(*CommClause).End", Method, 0, ""},
+		{"(*CommClause).Pos", Method, 0, ""},
+		{"(*Comment).End", Method, 0, ""},
+		{"(*Comment).Pos", Method, 0, ""},
+		{"(*CommentGroup).End", Method, 0, ""},
+		{"(*CommentGroup).Pos", Method, 0, ""},
+		{"(*CommentGroup).Text", Method, 0, ""},
+		{"(*CompositeLit).End", Method, 0, ""},
+		{"(*CompositeLit).Pos", Method, 0, ""},
+		{"(*DeclStmt).End", Method, 0, ""},
+		{"(*DeclStmt).Pos", Method, 0, ""},
+		{"(*DeferStmt).End", Method, 0, ""},
+		{"(*DeferStmt).Pos", Method, 0, ""},
+		{"(*Ellipsis).End", Method, 0, ""},
+		{"(*Ellipsis).Pos", Method, 0, ""},
+		{"(*EmptyStmt).End", Method, 0, ""},
+		{"(*EmptyStmt).Pos", Method, 0, ""},
+		{"(*ExprStmt).End", Method, 0, ""},
+		{"(*ExprStmt).Pos", Method, 0, ""},
+		{"(*Field).End", Method, 0, ""},
+		{"(*Field).Pos", Method, 0, ""},
+		{"(*FieldList).End", Method, 0, ""},
+		{"(*FieldList).NumFields", Method, 0, ""},
+		{"(*FieldList).Pos", Method, 0, ""},
+		{"(*File).End", Method, 0, ""},
+		{"(*File).Pos", Method, 0, ""},
+		{"(*ForStmt).End", Method, 0, ""},
+		{"(*ForStmt).Pos", Method, 0, ""},
+		{"(*FuncDecl).End", Method, 0, ""},
+		{"(*FuncDecl).Pos", Method, 0, ""},
+		{"(*FuncLit).End", Method, 0, ""},
+		{"(*FuncLit).Pos", Method, 0, ""},
+		{"(*FuncType).End", Method, 0, ""},
+		{"(*FuncType).Pos", Method, 0, ""},
+		{"(*GenDecl).End", Method, 0, ""},
+		{"(*GenDecl).Pos", Method, 0, ""},
+		{"(*GoStmt).End", Method, 0, ""},
+		{"(*GoStmt).Pos", Method, 0, ""},
+		{"(*Ident).End", Method, 0, ""},
+		{"(*Ident).IsExported", Method, 0, ""},
+		{"(*Ident).Pos", Method, 0, ""},
+		{"(*Ident).String", Method, 0, ""},
+		{"(*IfStmt).End", Method, 0, ""},
+		{"(*IfStmt).Pos", Method, 0, ""},
+		{"(*ImportSpec).End", Method, 0, ""},
+		{"(*ImportSpec).Pos", Method, 0, ""},
+		{"(*IncDecStmt).End", Method, 0, ""},
+		{"(*IncDecStmt).Pos", Method, 0, ""},
+		{"(*IndexExpr).End", Method, 0, ""},
+		{"(*IndexExpr).Pos", Method, 0, ""},
+		{"(*IndexListExpr).End", Method, 18, ""},
+		{"(*IndexListExpr).Pos", Method, 18, ""},
+		{"(*InterfaceType).End", Method, 0, ""},
+		{"(*InterfaceType).Pos", Method, 0, ""},
+		{"(*KeyValueExpr).End", Method, 0, ""},
+		{"(*KeyValueExpr).Pos", Method, 0, ""},
+		{"(*LabeledStmt).End", Method, 0, ""},
+		{"(*LabeledStmt).Pos", Method, 0, ""},
+		{"(*MapType).End", Method, 0, ""},
+		{"(*MapType).Pos", Method, 0, ""},
+		{"(*Object).Pos", Method, 0, ""},
+		{"(*Package).End", Method, 0, ""},
+		{"(*Package).Pos", Method, 0, ""},
+		{"(*ParenExpr).End", Method, 0, ""},
+		{"(*ParenExpr).Pos", Method, 0, ""},
+		{"(*RangeStmt).End", Method, 0, ""},
+		{"(*RangeStmt).Pos", Method, 0, ""},
+		{"(*ReturnStmt).End", Method, 0, ""},
+		{"(*ReturnStmt).Pos", Method, 0, ""},
+		{"(*Scope).Insert", Method, 0, ""},
+		{"(*Scope).Lookup", Method, 0, ""},
+		{"(*Scope).String", Method, 0, ""},
+		{"(*SelectStmt).End", Method, 0, ""},
+		{"(*SelectStmt).Pos", Method, 0, ""},
+		{"(*SelectorExpr).End", Method, 0, ""},
+		{"(*SelectorExpr).Pos", Method, 0, ""},
+		{"(*SendStmt).End", Method, 0, ""},
+		{"(*SendStmt).Pos", Method, 0, ""},
+		{"(*SliceExpr).End", Method, 0, ""},
+		{"(*SliceExpr).Pos", Method, 0, ""},
+		{"(*StarExpr).End", Method, 0, ""},
+		{"(*StarExpr).Pos", Method, 0, ""},
+		{"(*StructType).End", Method, 0, ""},
+		{"(*StructType).Pos", Method, 0, ""},
+		{"(*SwitchStmt).End", Method, 0, ""},
+		{"(*SwitchStmt).Pos", Method, 0, ""},
+		{"(*TypeAssertExpr).End", Method, 0, ""},
+		{"(*TypeAssertExpr).Pos", Method, 0, ""},
+		{"(*TypeSpec).End", Method, 0, ""},
+		{"(*TypeSpec).Pos", Method, 0, ""},
+		{"(*TypeSwitchStmt).End", Method, 0, ""},
+		{"(*TypeSwitchStmt).Pos", Method, 0, ""},
+		{"(*UnaryExpr).End", Method, 0, ""},
+		{"(*UnaryExpr).Pos", Method, 0, ""},
+		{"(*ValueSpec).End", Method, 0, ""},
+		{"(*ValueSpec).Pos", Method, 0, ""},
+		{"(CommentMap).Comments", Method, 1, ""},
+		{"(CommentMap).Filter", Method, 1, ""},
+		{"(CommentMap).String", Method, 1, ""},
+		{"(CommentMap).Update", Method, 1, ""},
+		{"(ObjKind).String", Method, 0, ""},
+		{"ArrayType", Type, 0, ""},
+		{"ArrayType.Elt", Field, 0, ""},
+		{"ArrayType.Lbrack", Field, 0, ""},
+		{"ArrayType.Len", Field, 0, ""},
+		{"AssignStmt", Type, 0, ""},
+		{"AssignStmt.Lhs", Field, 0, ""},
+		{"AssignStmt.Rhs", Field, 0, ""},
+		{"AssignStmt.Tok", Field, 0, ""},
+		{"AssignStmt.TokPos", Field, 0, ""},
+		{"Bad", Const, 0, ""},
+		{"BadDecl", Type, 0, ""},
+		{"BadDecl.From", Field, 0, ""},
+		{"BadDecl.To", Field, 0, ""},
+		{"BadExpr", Type, 0, ""},
+		{"BadExpr.From", Field, 0, ""},
+		{"BadExpr.To", Field, 0, ""},
+		{"BadStmt", Type, 0, ""},
+		{"BadStmt.From", Field, 0, ""},
+		{"BadStmt.To", Field, 0, ""},
+		{"BasicLit", Type, 0, ""},
+		{"BasicLit.Kind", Field, 0, ""},
+		{"BasicLit.Value", Field, 0, ""},
+		{"BasicLit.ValuePos", Field, 0, ""},
+		{"BinaryExpr", Type, 0, ""},
+		{"BinaryExpr.Op", Field, 0, ""},
+		{"BinaryExpr.OpPos", Field, 0, ""},
+		{"BinaryExpr.X", Field, 0, ""},
+		{"BinaryExpr.Y", Field, 0, ""},
+		{"BlockStmt", Type, 0, ""},
+		{"BlockStmt.Lbrace", Field, 0, ""},
+		{"BlockStmt.List", Field, 0, ""},
+		{"BlockStmt.Rbrace", Field, 0, ""},
+		{"BranchStmt", Type, 0, ""},
+		{"BranchStmt.Label", Field, 0, ""},
+		{"BranchStmt.Tok", Field, 0, ""},
+		{"BranchStmt.TokPos", Field, 0, ""},
+		{"CallExpr", Type, 0, ""},
+		{"CallExpr.Args", Field, 0, ""},
+		{"CallExpr.Ellipsis", Field, 0, ""},
+		{"CallExpr.Fun", Field, 0, ""},
+		{"CallExpr.Lparen", Field, 0, ""},
+		{"CallExpr.Rparen", Field, 0, ""},
+		{"CaseClause", Type, 0, ""},
+		{"CaseClause.Body", Field, 0, ""},
+		{"CaseClause.Case", Field, 0, ""},
+		{"CaseClause.Colon", Field, 0, ""},
+		{"CaseClause.List", Field, 0, ""},
+		{"ChanDir", Type, 0, ""},
+		{"ChanType", Type, 0, ""},
+		{"ChanType.Arrow", Field, 1, ""},
+		{"ChanType.Begin", Field, 0, ""},
+		{"ChanType.Dir", Field, 0, ""},
+		{"ChanType.Value", Field, 0, ""},
+		{"CommClause", Type, 0, ""},
+		{"CommClause.Body", Field, 0, ""},
+		{"CommClause.Case", Field, 0, ""},
+		{"CommClause.Colon", Field, 0, ""},
+		{"CommClause.Comm", Field, 0, ""},
+		{"Comment", Type, 0, ""},
+		{"Comment.Slash", Field, 0, ""},
+		{"Comment.Text", Field, 0, ""},
+		{"CommentGroup", Type, 0, ""},
+		{"CommentGroup.List", Field, 0, ""},
+		{"CommentMap", Type, 1, ""},
+		{"CompositeLit", Type, 0, ""},
+		{"CompositeLit.Elts", Field, 0, ""},
+		{"CompositeLit.Incomplete", Field, 11, ""},
+		{"CompositeLit.Lbrace", Field, 0, ""},
+		{"CompositeLit.Rbrace", Field, 0, ""},
+		{"CompositeLit.Type", Field, 0, ""},
+		{"Con", Const, 0, ""},
+		{"Decl", Type, 0, ""},
+		{"DeclStmt", Type, 0, ""},
+		{"DeclStmt.Decl", Field, 0, ""},
+		{"DeferStmt", Type, 0, ""},
+		{"DeferStmt.Call", Field, 0, ""},
+		{"DeferStmt.Defer", Field, 0, ""},
+		{"Ellipsis", Type, 0, ""},
+		{"Ellipsis.Ellipsis", Field, 0, ""},
+		{"Ellipsis.Elt", Field, 0, ""},
+		{"EmptyStmt", Type, 0, ""},
+		{"EmptyStmt.Implicit", Field, 5, ""},
+		{"EmptyStmt.Semicolon", Field, 0, ""},
+		{"Expr", Type, 0, ""},
+		{"ExprStmt", Type, 0, ""},
+		{"ExprStmt.X", Field, 0, ""},
+		{"Field", Type, 0, ""},
+		{"Field.Comment", Field, 0, ""},
+		{"Field.Doc", Field, 0, ""},
+		{"Field.Names", Field, 0, ""},
+		{"Field.Tag", Field, 0, ""},
+		{"Field.Type", Field, 0, ""},
+		{"FieldFilter", Type, 0, ""},
+		{"FieldList", Type, 0, ""},
+		{"FieldList.Closing", Field, 0, ""},
+		{"FieldList.List", Field, 0, ""},
+		{"FieldList.Opening", Field, 0, ""},
+		{"File", Type, 0, ""},
+		{"File.Comments", Field, 0, ""},
+		{"File.Decls", Field, 0, ""},
+		{"File.Doc", Field, 0, ""},
+		{"File.FileEnd", Field, 20, ""},
+		{"File.FileStart", Field, 20, ""},
+		{"File.GoVersion", Field, 21, ""},
+		{"File.Imports", Field, 0, ""},
+		{"File.Name", Field, 0, ""},
+		{"File.Package", Field, 0, ""},
+		{"File.Scope", Field, 0, ""},
+		{"File.Unresolved", Field, 0, ""},
+		{"FileExports", Func, 0, "func(src *File) bool"},
+		{"Filter", Type, 0, ""},
+		{"FilterDecl", Func, 0, "func(decl Decl, f Filter) bool"},
+		{"FilterFile", Func, 0, "func(src *File, f Filter) bool"},
+		{"FilterFuncDuplicates", Const, 0, ""},
+		{"FilterImportDuplicates", Const, 0, ""},
+		{"FilterPackage", Func, 0, "func(pkg *Package, f Filter) bool"},
+		{"FilterUnassociatedComments", Const, 0, ""},
+		{"ForStmt", Type, 0, ""},
+		{"ForStmt.Body", Field, 0, ""},
+		{"ForStmt.Cond", Field, 0, ""},
+		{"ForStmt.For", Field, 0, ""},
+		{"ForStmt.Init", Field, 0, ""},
+		{"ForStmt.Post", Field, 0, ""},
+		{"Fprint", Func, 0, "func(w io.Writer, fset *token.FileSet, x any, f FieldFilter) error"},
+		{"Fun", Const, 0, ""},
+		{"FuncDecl", Type, 0, ""},
+		{"FuncDecl.Body", Field, 0, ""},
+		{"FuncDecl.Doc", Field, 0, ""},
+		{"FuncDecl.Name", Field, 0, ""},
+		{"FuncDecl.Recv", Field, 0, ""},
+		{"FuncDecl.Type", Field, 0, ""},
+		{"FuncLit", Type, 0, ""},
+		{"FuncLit.Body", Field, 0, ""},
+		{"FuncLit.Type", Field, 0, ""},
+		{"FuncType", Type, 0, ""},
+		{"FuncType.Func", Field, 0, ""},
+		{"FuncType.Params", Field, 0, ""},
+		{"FuncType.Results", Field, 0, ""},
+		{"FuncType.TypeParams", Field, 18, ""},
+		{"GenDecl", Type, 0, ""},
+		{"GenDecl.Doc", Field, 0, ""},
+		{"GenDecl.Lparen", Field, 0, ""},
+		{"GenDecl.Rparen", Field, 0, ""},
+		{"GenDecl.Specs", Field, 0, ""},
+		{"GenDecl.Tok", Field, 0, ""},
+		{"GenDecl.TokPos", Field, 0, ""},
+		{"GoStmt", Type, 0, ""},
+		{"GoStmt.Call", Field, 0, ""},
+		{"GoStmt.Go", Field, 0, ""},
+		{"Ident", Type, 0, ""},
+		{"Ident.Name", Field, 0, ""},
+		{"Ident.NamePos", Field, 0, ""},
+		{"Ident.Obj", Field, 0, ""},
+		{"IfStmt", Type, 0, ""},
+		{"IfStmt.Body", Field, 0, ""},
+		{"IfStmt.Cond", Field, 0, ""},
+		{"IfStmt.Else", Field, 0, ""},
+		{"IfStmt.If", Field, 0, ""},
+		{"IfStmt.Init", Field, 0, ""},
+		{"ImportSpec", Type, 0, ""},
+		{"ImportSpec.Comment", Field, 0, ""},
+		{"ImportSpec.Doc", Field, 0, ""},
+		{"ImportSpec.EndPos", Field, 0, ""},
+		{"ImportSpec.Name", Field, 0, ""},
+		{"ImportSpec.Path", Field, 0, ""},
+		{"Importer", Type, 0, ""},
+		{"IncDecStmt", Type, 0, ""},
+		{"IncDecStmt.Tok", Field, 0, ""},
+		{"IncDecStmt.TokPos", Field, 0, ""},
+		{"IncDecStmt.X", Field, 0, ""},
+		{"IndexExpr", Type, 0, ""},
+		{"IndexExpr.Index", Field, 0, ""},
+		{"IndexExpr.Lbrack", Field, 0, ""},
+		{"IndexExpr.Rbrack", Field, 0, ""},
+		{"IndexExpr.X", Field, 0, ""},
+		{"IndexListExpr", Type, 18, ""},
+		{"IndexListExpr.Indices", Field, 18, ""},
+		{"IndexListExpr.Lbrack", Field, 18, ""},
+		{"IndexListExpr.Rbrack", Field, 18, ""},
+		{"IndexListExpr.X", Field, 18, ""},
+		{"Inspect", Func, 0, "func(node Node, f func(Node) bool)"},
+		{"InterfaceType", Type, 0, ""},
+		{"InterfaceType.Incomplete", Field, 0, ""},
+		{"InterfaceType.Interface", Field, 0, ""},
+		{"InterfaceType.Methods", Field, 0, ""},
+		{"IsExported", Func, 0, "func(name string) bool"},
+		{"IsGenerated", Func, 21, "func(file *File) bool"},
+		{"KeyValueExpr", Type, 0, ""},
+		{"KeyValueExpr.Colon", Field, 0, ""},
+		{"KeyValueExpr.Key", Field, 0, ""},
+		{"KeyValueExpr.Value", Field, 0, ""},
+		{"LabeledStmt", Type, 0, ""},
+		{"LabeledStmt.Colon", Field, 0, ""},
+		{"LabeledStmt.Label", Field, 0, ""},
+		{"LabeledStmt.Stmt", Field, 0, ""},
+		{"Lbl", Const, 0, ""},
+		{"MapType", Type, 0, ""},
+		{"MapType.Key", Field, 0, ""},
+		{"MapType.Map", Field, 0, ""},
+		{"MapType.Value", Field, 0, ""},
+		{"MergeMode", Type, 0, ""},
+		{"MergePackageFiles", Func, 0, "func(pkg *Package, mode MergeMode) *File"},
+		{"NewCommentMap", Func, 1, "func(fset *token.FileSet, node Node, comments []*CommentGroup) CommentMap"},
+		{"NewIdent", Func, 0, "func(name string) *Ident"},
+		{"NewObj", Func, 0, "func(kind ObjKind, name string) *Object"},
+		{"NewPackage", Func, 0, "func(fset *token.FileSet, files map[string]*File, importer Importer, universe *Scope) (*Package, error)"},
+		{"NewScope", Func, 0, "func(outer *Scope) *Scope"},
+		{"Node", Type, 0, ""},
+		{"NotNilFilter", Func, 0, "func(_ string, v reflect.Value) bool"},
+		{"ObjKind", Type, 0, ""},
+		{"Object", Type, 0, ""},
+		{"Object.Data", Field, 0, ""},
+		{"Object.Decl", Field, 0, ""},
+		{"Object.Kind", Field, 0, ""},
+		{"Object.Name", Field, 0, ""},
+		{"Object.Type", Field, 0, ""},
+		{"Package", Type, 0, ""},
+		{"Package.Files", Field, 0, ""},
+		{"Package.Imports", Field, 0, ""},
+		{"Package.Name", Field, 0, ""},
+		{"Package.Scope", Field, 0, ""},
+		{"PackageExports", Func, 0, "func(pkg *Package) bool"},
+		{"ParenExpr", Type, 0, ""},
+		{"ParenExpr.Lparen", Field, 0, ""},
+		{"ParenExpr.Rparen", Field, 0, ""},
+		{"ParenExpr.X", Field, 0, ""},
+		{"Pkg", Const, 0, ""},
+		{"Preorder", Func, 23, "func(root Node) iter.Seq[Node]"},
+		{"Print", Func, 0, "func(fset *token.FileSet, x any) error"},
+		{"RECV", Const, 0, ""},
+		{"RangeStmt", Type, 0, ""},
+		{"RangeStmt.Body", Field, 0, ""},
+		{"RangeStmt.For", Field, 0, ""},
+		{"RangeStmt.Key", Field, 0, ""},
+		{"RangeStmt.Range", Field, 20, ""},
+		{"RangeStmt.Tok", Field, 0, ""},
+		{"RangeStmt.TokPos", Field, 0, ""},
+		{"RangeStmt.Value", Field, 0, ""},
+		{"RangeStmt.X", Field, 0, ""},
+		{"ReturnStmt", Type, 0, ""},
+		{"ReturnStmt.Results", Field, 0, ""},
+		{"ReturnStmt.Return", Field, 0, ""},
+		{"SEND", Const, 0, ""},
+		{"Scope", Type, 0, ""},
+		{"Scope.Objects", Field, 0, ""},
+		{"Scope.Outer", Field, 0, ""},
+		{"SelectStmt", Type, 0, ""},
+		{"SelectStmt.Body", Field, 0, ""},
+		{"SelectStmt.Select", Field, 0, ""},
+		{"SelectorExpr", Type, 0, ""},
+		{"SelectorExpr.Sel", Field, 0, ""},
+		{"SelectorExpr.X", Field, 0, ""},
+		{"SendStmt", Type, 0, ""},
+		{"SendStmt.Arrow", Field, 0, ""},
+		{"SendStmt.Chan", Field, 0, ""},
+		{"SendStmt.Value", Field, 0, ""},
+		{"SliceExpr", Type, 0, ""},
+		{"SliceExpr.High", Field, 0, ""},
+		{"SliceExpr.Lbrack", Field, 0, ""},
+		{"SliceExpr.Low", Field, 0, ""},
+		{"SliceExpr.Max", Field, 2, ""},
+		{"SliceExpr.Rbrack", Field, 0, ""},
+		{"SliceExpr.Slice3", Field, 2, ""},
+		{"SliceExpr.X", Field, 0, ""},
+		{"SortImports", Func, 0, "func(fset *token.FileSet, f *File)"},
+		{"Spec", Type, 0, ""},
+		{"StarExpr", Type, 0, ""},
+		{"StarExpr.Star", Field, 0, ""},
+		{"StarExpr.X", Field, 0, ""},
+		{"Stmt", Type, 0, ""},
+		{"StructType", Type, 0, ""},
+		{"StructType.Fields", Field, 0, ""},
+		{"StructType.Incomplete", Field, 0, ""},
+		{"StructType.Struct", Field, 0, ""},
+		{"SwitchStmt", Type, 0, ""},
+		{"SwitchStmt.Body", Field, 0, ""},
+		{"SwitchStmt.Init", Field, 0, ""},
+		{"SwitchStmt.Switch", Field, 0, ""},
+		{"SwitchStmt.Tag", Field, 0, ""},
+		{"Typ", Const, 0, ""},
+		{"TypeAssertExpr", Type, 0, ""},
+		{"TypeAssertExpr.Lparen", Field, 2, ""},
+		{"TypeAssertExpr.Rparen", Field, 2, ""},
+		{"TypeAssertExpr.Type", Field, 0, ""},
+		{"TypeAssertExpr.X", Field, 0, ""},
+		{"TypeSpec", Type, 0, ""},
+		{"TypeSpec.Assign", Field, 9, ""},
+		{"TypeSpec.Comment", Field, 0, ""},
+		{"TypeSpec.Doc", Field, 0, ""},
+		{"TypeSpec.Name", Field, 0, ""},
+		{"TypeSpec.Type", Field, 0, ""},
+		{"TypeSpec.TypeParams", Field, 18, ""},
+		{"TypeSwitchStmt", Type, 0, ""},
+		{"TypeSwitchStmt.Assign", Field, 0, ""},
+		{"TypeSwitchStmt.Body", Field, 0, ""},
+		{"TypeSwitchStmt.Init", Field, 0, ""},
+		{"TypeSwitchStmt.Switch", Field, 0, ""},
+		{"UnaryExpr", Type, 0, ""},
+		{"UnaryExpr.Op", Field, 0, ""},
+		{"UnaryExpr.OpPos", Field, 0, ""},
+		{"UnaryExpr.X", Field, 0, ""},
+		{"Unparen", Func, 22, "func(e Expr) Expr"},
+		{"ValueSpec", Type, 0, ""},
+		{"ValueSpec.Comment", Field, 0, ""},
+		{"ValueSpec.Doc", Field, 0, ""},
+		{"ValueSpec.Names", Field, 0, ""},
+		{"ValueSpec.Type", Field, 0, ""},
+		{"ValueSpec.Values", Field, 0, ""},
+		{"Var", Const, 0, ""},
+		{"Visitor", Type, 0, ""},
+		{"Walk", Func, 0, "func(v Visitor, node Node)"},
 	},
 	"go/build": {
-		{"(*Context).Import", Method, 0},
-		{"(*Context).ImportDir", Method, 0},
-		{"(*Context).MatchFile", Method, 2},
-		{"(*Context).SrcDirs", Method, 0},
-		{"(*MultiplePackageError).Error", Method, 4},
-		{"(*NoGoError).Error", Method, 0},
-		{"(*Package).IsCommand", Method, 0},
-		{"AllowBinary", Const, 0},
-		{"ArchChar", Func, 0},
-		{"Context", Type, 0},
-		{"Context.BuildTags", Field, 0},
-		{"Context.CgoEnabled", Field, 0},
-		{"Context.Compiler", Field, 0},
-		{"Context.Dir", Field, 14},
-		{"Context.GOARCH", Field, 0},
-		{"Context.GOOS", Field, 0},
-		{"Context.GOPATH", Field, 0},
-		{"Context.GOROOT", Field, 0},
-		{"Context.HasSubdir", Field, 0},
-		{"Context.InstallSuffix", Field, 1},
-		{"Context.IsAbsPath", Field, 0},
-		{"Context.IsDir", Field, 0},
-		{"Context.JoinPath", Field, 0},
-		{"Context.OpenFile", Field, 0},
-		{"Context.ReadDir", Field, 0},
-		{"Context.ReleaseTags", Field, 1},
-		{"Context.SplitPathList", Field, 0},
-		{"Context.ToolTags", Field, 17},
-		{"Context.UseAllFiles", Field, 0},
-		{"Default", Var, 0},
-		{"Directive", Type, 21},
-		{"Directive.Pos", Field, 21},
-		{"Directive.Text", Field, 21},
-		{"FindOnly", Const, 0},
-		{"IgnoreVendor", Const, 6},
-		{"Import", Func, 0},
-		{"ImportComment", Const, 4},
-		{"ImportDir", Func, 0},
-		{"ImportMode", Type, 0},
-		{"IsLocalImport", Func, 0},
-		{"MultiplePackageError", Type, 4},
-		{"MultiplePackageError.Dir", Field, 4},
-		{"MultiplePackageError.Files", Field, 4},
-		{"MultiplePackageError.Packages", Field, 4},
-		{"NoGoError", Type, 0},
-		{"NoGoError.Dir", Field, 0},
-		{"Package", Type, 0},
-		{"Package.AllTags", Field, 2},
-		{"Package.BinDir", Field, 0},
-		{"Package.BinaryOnly", Field, 7},
-		{"Package.CFiles", Field, 0},
-		{"Package.CXXFiles", Field, 2},
-		{"Package.CgoCFLAGS", Field, 0},
-		{"Package.CgoCPPFLAGS", Field, 2},
-		{"Package.CgoCXXFLAGS", Field, 2},
-		{"Package.CgoFFLAGS", Field, 7},
-		{"Package.CgoFiles", Field, 0},
-		{"Package.CgoLDFLAGS", Field, 0},
-		{"Package.CgoPkgConfig", Field, 0},
-		{"Package.ConflictDir", Field, 2},
-		{"Package.Dir", Field, 0},
-		{"Package.Directives", Field, 21},
-		{"Package.Doc", Field, 0},
-		{"Package.EmbedPatternPos", Field, 16},
-		{"Package.EmbedPatterns", Field, 16},
-		{"Package.FFiles", Field, 7},
-		{"Package.GoFiles", Field, 0},
-		{"Package.Goroot", Field, 0},
-		{"Package.HFiles", Field, 0},
-		{"Package.IgnoredGoFiles", Field, 1},
-		{"Package.IgnoredOtherFiles", Field, 16},
-		{"Package.ImportComment", Field, 4},
-		{"Package.ImportPath", Field, 0},
-		{"Package.ImportPos", Field, 0},
-		{"Package.Imports", Field, 0},
-		{"Package.InvalidGoFiles", Field, 6},
-		{"Package.MFiles", Field, 3},
-		{"Package.Name", Field, 0},
-		{"Package.PkgObj", Field, 0},
-		{"Package.PkgRoot", Field, 0},
-		{"Package.PkgTargetRoot", Field, 5},
-		{"Package.Root", Field, 0},
-		{"Package.SFiles", Field, 0},
-		{"Package.SrcRoot", Field, 0},
-		{"Package.SwigCXXFiles", Field, 1},
-		{"Package.SwigFiles", Field, 1},
-		{"Package.SysoFiles", Field, 0},
-		{"Package.TestDirectives", Field, 21},
-		{"Package.TestEmbedPatternPos", Field, 16},
-		{"Package.TestEmbedPatterns", Field, 16},
-		{"Package.TestGoFiles", Field, 0},
-		{"Package.TestImportPos", Field, 0},
-		{"Package.TestImports", Field, 0},
-		{"Package.XTestDirectives", Field, 21},
-		{"Package.XTestEmbedPatternPos", Field, 16},
-		{"Package.XTestEmbedPatterns", Field, 16},
-		{"Package.XTestGoFiles", Field, 0},
-		{"Package.XTestImportPos", Field, 0},
-		{"Package.XTestImports", Field, 0},
-		{"ToolDir", Var, 0},
+		{"(*Context).Import", Method, 0, ""},
+		{"(*Context).ImportDir", Method, 0, ""},
+		{"(*Context).MatchFile", Method, 2, ""},
+		{"(*Context).SrcDirs", Method, 0, ""},
+		{"(*MultiplePackageError).Error", Method, 4, ""},
+		{"(*NoGoError).Error", Method, 0, ""},
+		{"(*Package).IsCommand", Method, 0, ""},
+		{"AllowBinary", Const, 0, ""},
+		{"ArchChar", Func, 0, "func(goarch string) (string, error)"},
+		{"Context", Type, 0, ""},
+		{"Context.BuildTags", Field, 0, ""},
+		{"Context.CgoEnabled", Field, 0, ""},
+		{"Context.Compiler", Field, 0, ""},
+		{"Context.Dir", Field, 14, ""},
+		{"Context.GOARCH", Field, 0, ""},
+		{"Context.GOOS", Field, 0, ""},
+		{"Context.GOPATH", Field, 0, ""},
+		{"Context.GOROOT", Field, 0, ""},
+		{"Context.HasSubdir", Field, 0, ""},
+		{"Context.InstallSuffix", Field, 1, ""},
+		{"Context.IsAbsPath", Field, 0, ""},
+		{"Context.IsDir", Field, 0, ""},
+		{"Context.JoinPath", Field, 0, ""},
+		{"Context.OpenFile", Field, 0, ""},
+		{"Context.ReadDir", Field, 0, ""},
+		{"Context.ReleaseTags", Field, 1, ""},
+		{"Context.SplitPathList", Field, 0, ""},
+		{"Context.ToolTags", Field, 17, ""},
+		{"Context.UseAllFiles", Field, 0, ""},
+		{"Default", Var, 0, ""},
+		{"Directive", Type, 21, ""},
+		{"Directive.Pos", Field, 21, ""},
+		{"Directive.Text", Field, 21, ""},
+		{"FindOnly", Const, 0, ""},
+		{"IgnoreVendor", Const, 6, ""},
+		{"Import", Func, 0, "func(path string, srcDir string, mode ImportMode) (*Package, error)"},
+		{"ImportComment", Const, 4, ""},
+		{"ImportDir", Func, 0, "func(dir string, mode ImportMode) (*Package, error)"},
+		{"ImportMode", Type, 0, ""},
+		{"IsLocalImport", Func, 0, "func(path string) bool"},
+		{"MultiplePackageError", Type, 4, ""},
+		{"MultiplePackageError.Dir", Field, 4, ""},
+		{"MultiplePackageError.Files", Field, 4, ""},
+		{"MultiplePackageError.Packages", Field, 4, ""},
+		{"NoGoError", Type, 0, ""},
+		{"NoGoError.Dir", Field, 0, ""},
+		{"Package", Type, 0, ""},
+		{"Package.AllTags", Field, 2, ""},
+		{"Package.BinDir", Field, 0, ""},
+		{"Package.BinaryOnly", Field, 7, ""},
+		{"Package.CFiles", Field, 0, ""},
+		{"Package.CXXFiles", Field, 2, ""},
+		{"Package.CgoCFLAGS", Field, 0, ""},
+		{"Package.CgoCPPFLAGS", Field, 2, ""},
+		{"Package.CgoCXXFLAGS", Field, 2, ""},
+		{"Package.CgoFFLAGS", Field, 7, ""},
+		{"Package.CgoFiles", Field, 0, ""},
+		{"Package.CgoLDFLAGS", Field, 0, ""},
+		{"Package.CgoPkgConfig", Field, 0, ""},
+		{"Package.ConflictDir", Field, 2, ""},
+		{"Package.Dir", Field, 0, ""},
+		{"Package.Directives", Field, 21, ""},
+		{"Package.Doc", Field, 0, ""},
+		{"Package.EmbedPatternPos", Field, 16, ""},
+		{"Package.EmbedPatterns", Field, 16, ""},
+		{"Package.FFiles", Field, 7, ""},
+		{"Package.GoFiles", Field, 0, ""},
+		{"Package.Goroot", Field, 0, ""},
+		{"Package.HFiles", Field, 0, ""},
+		{"Package.IgnoredGoFiles", Field, 1, ""},
+		{"Package.IgnoredOtherFiles", Field, 16, ""},
+		{"Package.ImportComment", Field, 4, ""},
+		{"Package.ImportPath", Field, 0, ""},
+		{"Package.ImportPos", Field, 0, ""},
+		{"Package.Imports", Field, 0, ""},
+		{"Package.InvalidGoFiles", Field, 6, ""},
+		{"Package.MFiles", Field, 3, ""},
+		{"Package.Name", Field, 0, ""},
+		{"Package.PkgObj", Field, 0, ""},
+		{"Package.PkgRoot", Field, 0, ""},
+		{"Package.PkgTargetRoot", Field, 5, ""},
+		{"Package.Root", Field, 0, ""},
+		{"Package.SFiles", Field, 0, ""},
+		{"Package.SrcRoot", Field, 0, ""},
+		{"Package.SwigCXXFiles", Field, 1, ""},
+		{"Package.SwigFiles", Field, 1, ""},
+		{"Package.SysoFiles", Field, 0, ""},
+		{"Package.TestDirectives", Field, 21, ""},
+		{"Package.TestEmbedPatternPos", Field, 16, ""},
+		{"Package.TestEmbedPatterns", Field, 16, ""},
+		{"Package.TestGoFiles", Field, 0, ""},
+		{"Package.TestImportPos", Field, 0, ""},
+		{"Package.TestImports", Field, 0, ""},
+		{"Package.XTestDirectives", Field, 21, ""},
+		{"Package.XTestEmbedPatternPos", Field, 16, ""},
+		{"Package.XTestEmbedPatterns", Field, 16, ""},
+		{"Package.XTestGoFiles", Field, 0, ""},
+		{"Package.XTestImportPos", Field, 0, ""},
+		{"Package.XTestImports", Field, 0, ""},
+		{"ToolDir", Var, 0, ""},
 	},
 	"go/build/constraint": {
-		{"(*AndExpr).Eval", Method, 16},
-		{"(*AndExpr).String", Method, 16},
-		{"(*NotExpr).Eval", Method, 16},
-		{"(*NotExpr).String", Method, 16},
-		{"(*OrExpr).Eval", Method, 16},
-		{"(*OrExpr).String", Method, 16},
-		{"(*SyntaxError).Error", Method, 16},
-		{"(*TagExpr).Eval", Method, 16},
-		{"(*TagExpr).String", Method, 16},
-		{"AndExpr", Type, 16},
-		{"AndExpr.X", Field, 16},
-		{"AndExpr.Y", Field, 16},
-		{"Expr", Type, 16},
-		{"GoVersion", Func, 21},
-		{"IsGoBuild", Func, 16},
-		{"IsPlusBuild", Func, 16},
-		{"NotExpr", Type, 16},
-		{"NotExpr.X", Field, 16},
-		{"OrExpr", Type, 16},
-		{"OrExpr.X", Field, 16},
-		{"OrExpr.Y", Field, 16},
-		{"Parse", Func, 16},
-		{"PlusBuildLines", Func, 16},
-		{"SyntaxError", Type, 16},
-		{"SyntaxError.Err", Field, 16},
-		{"SyntaxError.Offset", Field, 16},
-		{"TagExpr", Type, 16},
-		{"TagExpr.Tag", Field, 16},
+		{"(*AndExpr).Eval", Method, 16, ""},
+		{"(*AndExpr).String", Method, 16, ""},
+		{"(*NotExpr).Eval", Method, 16, ""},
+		{"(*NotExpr).String", Method, 16, ""},
+		{"(*OrExpr).Eval", Method, 16, ""},
+		{"(*OrExpr).String", Method, 16, ""},
+		{"(*SyntaxError).Error", Method, 16, ""},
+		{"(*TagExpr).Eval", Method, 16, ""},
+		{"(*TagExpr).String", Method, 16, ""},
+		{"AndExpr", Type, 16, ""},
+		{"AndExpr.X", Field, 16, ""},
+		{"AndExpr.Y", Field, 16, ""},
+		{"Expr", Type, 16, ""},
+		{"GoVersion", Func, 21, "func(x Expr) string"},
+		{"IsGoBuild", Func, 16, "func(line string) bool"},
+		{"IsPlusBuild", Func, 16, "func(line string) bool"},
+		{"NotExpr", Type, 16, ""},
+		{"NotExpr.X", Field, 16, ""},
+		{"OrExpr", Type, 16, ""},
+		{"OrExpr.X", Field, 16, ""},
+		{"OrExpr.Y", Field, 16, ""},
+		{"Parse", Func, 16, "func(line string) (Expr, error)"},
+		{"PlusBuildLines", Func, 16, "func(x Expr) ([]string, error)"},
+		{"SyntaxError", Type, 16, ""},
+		{"SyntaxError.Err", Field, 16, ""},
+		{"SyntaxError.Offset", Field, 16, ""},
+		{"TagExpr", Type, 16, ""},
+		{"TagExpr.Tag", Field, 16, ""},
 	},
 	"go/constant": {
-		{"(Kind).String", Method, 18},
-		{"BinaryOp", Func, 5},
-		{"BitLen", Func, 5},
-		{"Bool", Const, 5},
-		{"BoolVal", Func, 5},
-		{"Bytes", Func, 5},
-		{"Compare", Func, 5},
-		{"Complex", Const, 5},
-		{"Denom", Func, 5},
-		{"Float", Const, 5},
-		{"Float32Val", Func, 5},
-		{"Float64Val", Func, 5},
-		{"Imag", Func, 5},
-		{"Int", Const, 5},
-		{"Int64Val", Func, 5},
-		{"Kind", Type, 5},
-		{"Make", Func, 13},
-		{"MakeBool", Func, 5},
-		{"MakeFloat64", Func, 5},
-		{"MakeFromBytes", Func, 5},
-		{"MakeFromLiteral", Func, 5},
-		{"MakeImag", Func, 5},
-		{"MakeInt64", Func, 5},
-		{"MakeString", Func, 5},
-		{"MakeUint64", Func, 5},
-		{"MakeUnknown", Func, 5},
-		{"Num", Func, 5},
-		{"Real", Func, 5},
-		{"Shift", Func, 5},
-		{"Sign", Func, 5},
-		{"String", Const, 5},
-		{"StringVal", Func, 5},
-		{"ToComplex", Func, 6},
-		{"ToFloat", Func, 6},
-		{"ToInt", Func, 6},
-		{"Uint64Val", Func, 5},
-		{"UnaryOp", Func, 5},
-		{"Unknown", Const, 5},
-		{"Val", Func, 13},
-		{"Value", Type, 5},
+		{"(Kind).String", Method, 18, ""},
+		{"BinaryOp", Func, 5, "func(x_ Value, op token.Token, y_ Value) Value"},
+		{"BitLen", Func, 5, "func(x Value) int"},
+		{"Bool", Const, 5, ""},
+		{"BoolVal", Func, 5, "func(x Value) bool"},
+		{"Bytes", Func, 5, "func(x Value) []byte"},
+		{"Compare", Func, 5, "func(x_ Value, op token.Token, y_ Value) bool"},
+		{"Complex", Const, 5, ""},
+		{"Denom", Func, 5, "func(x Value) Value"},
+		{"Float", Const, 5, ""},
+		{"Float32Val", Func, 5, "func(x Value) (float32, bool)"},
+		{"Float64Val", Func, 5, "func(x Value) (float64, bool)"},
+		{"Imag", Func, 5, "func(x Value) Value"},
+		{"Int", Const, 5, ""},
+		{"Int64Val", Func, 5, "func(x Value) (int64, bool)"},
+		{"Kind", Type, 5, ""},
+		{"Make", Func, 13, "func(x any) Value"},
+		{"MakeBool", Func, 5, "func(b bool) Value"},
+		{"MakeFloat64", Func, 5, "func(x float64) Value"},
+		{"MakeFromBytes", Func, 5, "func(bytes []byte) Value"},
+		{"MakeFromLiteral", Func, 5, "func(lit string, tok token.Token, zero uint) Value"},
+		{"MakeImag", Func, 5, "func(x Value) Value"},
+		{"MakeInt64", Func, 5, "func(x int64) Value"},
+		{"MakeString", Func, 5, "func(s string) Value"},
+		{"MakeUint64", Func, 5, "func(x uint64) Value"},
+		{"MakeUnknown", Func, 5, "func() Value"},
+		{"Num", Func, 5, "func(x Value) Value"},
+		{"Real", Func, 5, "func(x Value) Value"},
+		{"Shift", Func, 5, "func(x Value, op token.Token, s uint) Value"},
+		{"Sign", Func, 5, "func(x Value) int"},
+		{"String", Const, 5, ""},
+		{"StringVal", Func, 5, "func(x Value) string"},
+		{"ToComplex", Func, 6, "func(x Value) Value"},
+		{"ToFloat", Func, 6, "func(x Value) Value"},
+		{"ToInt", Func, 6, "func(x Value) Value"},
+		{"Uint64Val", Func, 5, "func(x Value) (uint64, bool)"},
+		{"UnaryOp", Func, 5, "func(op token.Token, y Value, prec uint) Value"},
+		{"Unknown", Const, 5, ""},
+		{"Val", Func, 13, "func(x Value) any"},
+		{"Value", Type, 5, ""},
 	},
 	"go/doc": {
-		{"(*Package).Filter", Method, 0},
-		{"(*Package).HTML", Method, 19},
-		{"(*Package).Markdown", Method, 19},
-		{"(*Package).Parser", Method, 19},
-		{"(*Package).Printer", Method, 19},
-		{"(*Package).Synopsis", Method, 19},
-		{"(*Package).Text", Method, 19},
-		{"AllDecls", Const, 0},
-		{"AllMethods", Const, 0},
-		{"Example", Type, 0},
-		{"Example.Code", Field, 0},
-		{"Example.Comments", Field, 0},
-		{"Example.Doc", Field, 0},
-		{"Example.EmptyOutput", Field, 1},
-		{"Example.Name", Field, 0},
-		{"Example.Order", Field, 1},
-		{"Example.Output", Field, 0},
-		{"Example.Play", Field, 1},
-		{"Example.Suffix", Field, 14},
-		{"Example.Unordered", Field, 7},
-		{"Examples", Func, 0},
-		{"Filter", Type, 0},
-		{"Func", Type, 0},
-		{"Func.Decl", Field, 0},
-		{"Func.Doc", Field, 0},
-		{"Func.Examples", Field, 14},
-		{"Func.Level", Field, 0},
-		{"Func.Name", Field, 0},
-		{"Func.Orig", Field, 0},
-		{"Func.Recv", Field, 0},
-		{"IllegalPrefixes", Var, 1},
-		{"IsPredeclared", Func, 8},
-		{"Mode", Type, 0},
-		{"New", Func, 0},
-		{"NewFromFiles", Func, 14},
-		{"Note", Type, 1},
-		{"Note.Body", Field, 1},
-		{"Note.End", Field, 1},
-		{"Note.Pos", Field, 1},
-		{"Note.UID", Field, 1},
-		{"Package", Type, 0},
-		{"Package.Bugs", Field, 0},
-		{"Package.Consts", Field, 0},
-		{"Package.Doc", Field, 0},
-		{"Package.Examples", Field, 14},
-		{"Package.Filenames", Field, 0},
-		{"Package.Funcs", Field, 0},
-		{"Package.ImportPath", Field, 0},
-		{"Package.Imports", Field, 0},
-		{"Package.Name", Field, 0},
-		{"Package.Notes", Field, 1},
-		{"Package.Types", Field, 0},
-		{"Package.Vars", Field, 0},
-		{"PreserveAST", Const, 12},
-		{"Synopsis", Func, 0},
-		{"ToHTML", Func, 0},
-		{"ToText", Func, 0},
-		{"Type", Type, 0},
-		{"Type.Consts", Field, 0},
-		{"Type.Decl", Field, 0},
-		{"Type.Doc", Field, 0},
-		{"Type.Examples", Field, 14},
-		{"Type.Funcs", Field, 0},
-		{"Type.Methods", Field, 0},
-		{"Type.Name", Field, 0},
-		{"Type.Vars", Field, 0},
-		{"Value", Type, 0},
-		{"Value.Decl", Field, 0},
-		{"Value.Doc", Field, 0},
-		{"Value.Names", Field, 0},
+		{"(*Package).Filter", Method, 0, ""},
+		{"(*Package).HTML", Method, 19, ""},
+		{"(*Package).Markdown", Method, 19, ""},
+		{"(*Package).Parser", Method, 19, ""},
+		{"(*Package).Printer", Method, 19, ""},
+		{"(*Package).Synopsis", Method, 19, ""},
+		{"(*Package).Text", Method, 19, ""},
+		{"AllDecls", Const, 0, ""},
+		{"AllMethods", Const, 0, ""},
+		{"Example", Type, 0, ""},
+		{"Example.Code", Field, 0, ""},
+		{"Example.Comments", Field, 0, ""},
+		{"Example.Doc", Field, 0, ""},
+		{"Example.EmptyOutput", Field, 1, ""},
+		{"Example.Name", Field, 0, ""},
+		{"Example.Order", Field, 1, ""},
+		{"Example.Output", Field, 0, ""},
+		{"Example.Play", Field, 1, ""},
+		{"Example.Suffix", Field, 14, ""},
+		{"Example.Unordered", Field, 7, ""},
+		{"Examples", Func, 0, "func(testFiles ...*ast.File) []*Example"},
+		{"Filter", Type, 0, ""},
+		{"Func", Type, 0, ""},
+		{"Func.Decl", Field, 0, ""},
+		{"Func.Doc", Field, 0, ""},
+		{"Func.Examples", Field, 14, ""},
+		{"Func.Level", Field, 0, ""},
+		{"Func.Name", Field, 0, ""},
+		{"Func.Orig", Field, 0, ""},
+		{"Func.Recv", Field, 0, ""},
+		{"IllegalPrefixes", Var, 1, ""},
+		{"IsPredeclared", Func, 8, "func(s string) bool"},
+		{"Mode", Type, 0, ""},
+		{"New", Func, 0, "func(pkg *ast.Package, importPath string, mode Mode) *Package"},
+		{"NewFromFiles", Func, 14, "func(fset *token.FileSet, files []*ast.File, importPath string, opts ...any) (*Package, error)"},
+		{"Note", Type, 1, ""},
+		{"Note.Body", Field, 1, ""},
+		{"Note.End", Field, 1, ""},
+		{"Note.Pos", Field, 1, ""},
+		{"Note.UID", Field, 1, ""},
+		{"Package", Type, 0, ""},
+		{"Package.Bugs", Field, 0, ""},
+		{"Package.Consts", Field, 0, ""},
+		{"Package.Doc", Field, 0, ""},
+		{"Package.Examples", Field, 14, ""},
+		{"Package.Filenames", Field, 0, ""},
+		{"Package.Funcs", Field, 0, ""},
+		{"Package.ImportPath", Field, 0, ""},
+		{"Package.Imports", Field, 0, ""},
+		{"Package.Name", Field, 0, ""},
+		{"Package.Notes", Field, 1, ""},
+		{"Package.Types", Field, 0, ""},
+		{"Package.Vars", Field, 0, ""},
+		{"PreserveAST", Const, 12, ""},
+		{"Synopsis", Func, 0, "func(text string) string"},
+		{"ToHTML", Func, 0, "func(w io.Writer, text string, words map[string]string)"},
+		{"ToText", Func, 0, "func(w io.Writer, text string, prefix string, codePrefix string, width int)"},
+		{"Type", Type, 0, ""},
+		{"Type.Consts", Field, 0, ""},
+		{"Type.Decl", Field, 0, ""},
+		{"Type.Doc", Field, 0, ""},
+		{"Type.Examples", Field, 14, ""},
+		{"Type.Funcs", Field, 0, ""},
+		{"Type.Methods", Field, 0, ""},
+		{"Type.Name", Field, 0, ""},
+		{"Type.Vars", Field, 0, ""},
+		{"Value", Type, 0, ""},
+		{"Value.Decl", Field, 0, ""},
+		{"Value.Doc", Field, 0, ""},
+		{"Value.Names", Field, 0, ""},
 	},
 	"go/doc/comment": {
-		{"(*DocLink).DefaultURL", Method, 19},
-		{"(*Heading).DefaultID", Method, 19},
-		{"(*List).BlankBefore", Method, 19},
-		{"(*List).BlankBetween", Method, 19},
-		{"(*Parser).Parse", Method, 19},
-		{"(*Printer).Comment", Method, 19},
-		{"(*Printer).HTML", Method, 19},
-		{"(*Printer).Markdown", Method, 19},
-		{"(*Printer).Text", Method, 19},
-		{"Block", Type, 19},
-		{"Code", Type, 19},
-		{"Code.Text", Field, 19},
-		{"DefaultLookupPackage", Func, 19},
-		{"Doc", Type, 19},
-		{"Doc.Content", Field, 19},
-		{"Doc.Links", Field, 19},
-		{"DocLink", Type, 19},
-		{"DocLink.ImportPath", Field, 19},
-		{"DocLink.Name", Field, 19},
-		{"DocLink.Recv", Field, 19},
-		{"DocLink.Text", Field, 19},
-		{"Heading", Type, 19},
-		{"Heading.Text", Field, 19},
-		{"Italic", Type, 19},
-		{"Link", Type, 19},
-		{"Link.Auto", Field, 19},
-		{"Link.Text", Field, 19},
-		{"Link.URL", Field, 19},
-		{"LinkDef", Type, 19},
-		{"LinkDef.Text", Field, 19},
-		{"LinkDef.URL", Field, 19},
-		{"LinkDef.Used", Field, 19},
-		{"List", Type, 19},
-		{"List.ForceBlankBefore", Field, 19},
-		{"List.ForceBlankBetween", Field, 19},
-		{"List.Items", Field, 19},
-		{"ListItem", Type, 19},
-		{"ListItem.Content", Field, 19},
-		{"ListItem.Number", Field, 19},
-		{"Paragraph", Type, 19},
-		{"Paragraph.Text", Field, 19},
-		{"Parser", Type, 19},
-		{"Parser.LookupPackage", Field, 19},
-		{"Parser.LookupSym", Field, 19},
-		{"Parser.Words", Field, 19},
-		{"Plain", Type, 19},
-		{"Printer", Type, 19},
-		{"Printer.DocLinkBaseURL", Field, 19},
-		{"Printer.DocLinkURL", Field, 19},
-		{"Printer.HeadingID", Field, 19},
-		{"Printer.HeadingLevel", Field, 19},
-		{"Printer.TextCodePrefix", Field, 19},
-		{"Printer.TextPrefix", Field, 19},
-		{"Printer.TextWidth", Field, 19},
-		{"Text", Type, 19},
+		{"(*DocLink).DefaultURL", Method, 19, ""},
+		{"(*Heading).DefaultID", Method, 19, ""},
+		{"(*List).BlankBefore", Method, 19, ""},
+		{"(*List).BlankBetween", Method, 19, ""},
+		{"(*Parser).Parse", Method, 19, ""},
+		{"(*Printer).Comment", Method, 19, ""},
+		{"(*Printer).HTML", Method, 19, ""},
+		{"(*Printer).Markdown", Method, 19, ""},
+		{"(*Printer).Text", Method, 19, ""},
+		{"Block", Type, 19, ""},
+		{"Code", Type, 19, ""},
+		{"Code.Text", Field, 19, ""},
+		{"DefaultLookupPackage", Func, 19, "func(name string) (importPath string, ok bool)"},
+		{"Doc", Type, 19, ""},
+		{"Doc.Content", Field, 19, ""},
+		{"Doc.Links", Field, 19, ""},
+		{"DocLink", Type, 19, ""},
+		{"DocLink.ImportPath", Field, 19, ""},
+		{"DocLink.Name", Field, 19, ""},
+		{"DocLink.Recv", Field, 19, ""},
+		{"DocLink.Text", Field, 19, ""},
+		{"Heading", Type, 19, ""},
+		{"Heading.Text", Field, 19, ""},
+		{"Italic", Type, 19, ""},
+		{"Link", Type, 19, ""},
+		{"Link.Auto", Field, 19, ""},
+		{"Link.Text", Field, 19, ""},
+		{"Link.URL", Field, 19, ""},
+		{"LinkDef", Type, 19, ""},
+		{"LinkDef.Text", Field, 19, ""},
+		{"LinkDef.URL", Field, 19, ""},
+		{"LinkDef.Used", Field, 19, ""},
+		{"List", Type, 19, ""},
+		{"List.ForceBlankBefore", Field, 19, ""},
+		{"List.ForceBlankBetween", Field, 19, ""},
+		{"List.Items", Field, 19, ""},
+		{"ListItem", Type, 19, ""},
+		{"ListItem.Content", Field, 19, ""},
+		{"ListItem.Number", Field, 19, ""},
+		{"Paragraph", Type, 19, ""},
+		{"Paragraph.Text", Field, 19, ""},
+		{"Parser", Type, 19, ""},
+		{"Parser.LookupPackage", Field, 19, ""},
+		{"Parser.LookupSym", Field, 19, ""},
+		{"Parser.Words", Field, 19, ""},
+		{"Plain", Type, 19, ""},
+		{"Printer", Type, 19, ""},
+		{"Printer.DocLinkBaseURL", Field, 19, ""},
+		{"Printer.DocLinkURL", Field, 19, ""},
+		{"Printer.HeadingID", Field, 19, ""},
+		{"Printer.HeadingLevel", Field, 19, ""},
+		{"Printer.TextCodePrefix", Field, 19, ""},
+		{"Printer.TextPrefix", Field, 19, ""},
+		{"Printer.TextWidth", Field, 19, ""},
+		{"Text", Type, 19, ""},
 	},
 	"go/format": {
-		{"Node", Func, 1},
-		{"Source", Func, 1},
+		{"Node", Func, 1, "func(dst io.Writer, fset *token.FileSet, node any) error"},
+		{"Source", Func, 1, "func(src []byte) ([]byte, error)"},
 	},
 	"go/importer": {
-		{"Default", Func, 5},
-		{"For", Func, 5},
-		{"ForCompiler", Func, 12},
-		{"Lookup", Type, 5},
+		{"Default", Func, 5, "func() types.Importer"},
+		{"For", Func, 5, "func(compiler string, lookup Lookup) types.Importer"},
+		{"ForCompiler", Func, 12, "func(fset *token.FileSet, compiler string, lookup Lookup) types.Importer"},
+		{"Lookup", Type, 5, ""},
 	},
 	"go/parser": {
-		{"AllErrors", Const, 1},
-		{"DeclarationErrors", Const, 0},
-		{"ImportsOnly", Const, 0},
-		{"Mode", Type, 0},
-		{"PackageClauseOnly", Const, 0},
-		{"ParseComments", Const, 0},
-		{"ParseDir", Func, 0},
-		{"ParseExpr", Func, 0},
-		{"ParseExprFrom", Func, 5},
-		{"ParseFile", Func, 0},
-		{"SkipObjectResolution", Const, 17},
-		{"SpuriousErrors", Const, 0},
-		{"Trace", Const, 0},
+		{"AllErrors", Const, 1, ""},
+		{"DeclarationErrors", Const, 0, ""},
+		{"ImportsOnly", Const, 0, ""},
+		{"Mode", Type, 0, ""},
+		{"PackageClauseOnly", Const, 0, ""},
+		{"ParseComments", Const, 0, ""},
+		{"ParseDir", Func, 0, "func(fset *token.FileSet, path string, filter func(fs.FileInfo) bool, mode Mode) (pkgs map[string]*ast.Package, first error)"},
+		{"ParseExpr", Func, 0, "func(x string) (ast.Expr, error)"},
+		{"ParseExprFrom", Func, 5, "func(fset *token.FileSet, filename string, src any, mode Mode) (expr ast.Expr, err error)"},
+		{"ParseFile", Func, 0, "func(fset *token.FileSet, filename string, src any, mode Mode) (f *ast.File, err error)"},
+		{"SkipObjectResolution", Const, 17, ""},
+		{"SpuriousErrors", Const, 0, ""},
+		{"Trace", Const, 0, ""},
 	},
 	"go/printer": {
-		{"(*Config).Fprint", Method, 0},
-		{"CommentedNode", Type, 0},
-		{"CommentedNode.Comments", Field, 0},
-		{"CommentedNode.Node", Field, 0},
-		{"Config", Type, 0},
-		{"Config.Indent", Field, 1},
-		{"Config.Mode", Field, 0},
-		{"Config.Tabwidth", Field, 0},
-		{"Fprint", Func, 0},
-		{"Mode", Type, 0},
-		{"RawFormat", Const, 0},
-		{"SourcePos", Const, 0},
-		{"TabIndent", Const, 0},
-		{"UseSpaces", Const, 0},
+		{"(*Config).Fprint", Method, 0, ""},
+		{"CommentedNode", Type, 0, ""},
+		{"CommentedNode.Comments", Field, 0, ""},
+		{"CommentedNode.Node", Field, 0, ""},
+		{"Config", Type, 0, ""},
+		{"Config.Indent", Field, 1, ""},
+		{"Config.Mode", Field, 0, ""},
+		{"Config.Tabwidth", Field, 0, ""},
+		{"Fprint", Func, 0, "func(output io.Writer, fset *token.FileSet, node any) error"},
+		{"Mode", Type, 0, ""},
+		{"RawFormat", Const, 0, ""},
+		{"SourcePos", Const, 0, ""},
+		{"TabIndent", Const, 0, ""},
+		{"UseSpaces", Const, 0, ""},
 	},
 	"go/scanner": {
-		{"(*ErrorList).Add", Method, 0},
-		{"(*ErrorList).RemoveMultiples", Method, 0},
-		{"(*ErrorList).Reset", Method, 0},
-		{"(*Scanner).Init", Method, 0},
-		{"(*Scanner).Scan", Method, 0},
-		{"(Error).Error", Method, 0},
-		{"(ErrorList).Err", Method, 0},
-		{"(ErrorList).Error", Method, 0},
-		{"(ErrorList).Len", Method, 0},
-		{"(ErrorList).Less", Method, 0},
-		{"(ErrorList).Sort", Method, 0},
-		{"(ErrorList).Swap", Method, 0},
-		{"Error", Type, 0},
-		{"Error.Msg", Field, 0},
-		{"Error.Pos", Field, 0},
-		{"ErrorHandler", Type, 0},
-		{"ErrorList", Type, 0},
-		{"Mode", Type, 0},
-		{"PrintError", Func, 0},
-		{"ScanComments", Const, 0},
-		{"Scanner", Type, 0},
-		{"Scanner.ErrorCount", Field, 0},
+		{"(*ErrorList).Add", Method, 0, ""},
+		{"(*ErrorList).RemoveMultiples", Method, 0, ""},
+		{"(*ErrorList).Reset", Method, 0, ""},
+		{"(*Scanner).Init", Method, 0, ""},
+		{"(*Scanner).Scan", Method, 0, ""},
+		{"(Error).Error", Method, 0, ""},
+		{"(ErrorList).Err", Method, 0, ""},
+		{"(ErrorList).Error", Method, 0, ""},
+		{"(ErrorList).Len", Method, 0, ""},
+		{"(ErrorList).Less", Method, 0, ""},
+		{"(ErrorList).Sort", Method, 0, ""},
+		{"(ErrorList).Swap", Method, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Msg", Field, 0, ""},
+		{"Error.Pos", Field, 0, ""},
+		{"ErrorHandler", Type, 0, ""},
+		{"ErrorList", Type, 0, ""},
+		{"Mode", Type, 0, ""},
+		{"PrintError", Func, 0, "func(w io.Writer, err error)"},
+		{"ScanComments", Const, 0, ""},
+		{"Scanner", Type, 0, ""},
+		{"Scanner.ErrorCount", Field, 0, ""},
 	},
 	"go/token": {
-		{"(*File).AddLine", Method, 0},
-		{"(*File).AddLineColumnInfo", Method, 11},
-		{"(*File).AddLineInfo", Method, 0},
-		{"(*File).Base", Method, 0},
-		{"(*File).Line", Method, 0},
-		{"(*File).LineCount", Method, 0},
-		{"(*File).LineStart", Method, 12},
-		{"(*File).Lines", Method, 21},
-		{"(*File).MergeLine", Method, 2},
-		{"(*File).Name", Method, 0},
-		{"(*File).Offset", Method, 0},
-		{"(*File).Pos", Method, 0},
-		{"(*File).Position", Method, 0},
-		{"(*File).PositionFor", Method, 4},
-		{"(*File).SetLines", Method, 0},
-		{"(*File).SetLinesForContent", Method, 0},
-		{"(*File).Size", Method, 0},
-		{"(*FileSet).AddFile", Method, 0},
-		{"(*FileSet).Base", Method, 0},
-		{"(*FileSet).File", Method, 0},
-		{"(*FileSet).Iterate", Method, 0},
-		{"(*FileSet).Position", Method, 0},
-		{"(*FileSet).PositionFor", Method, 4},
-		{"(*FileSet).Read", Method, 0},
-		{"(*FileSet).RemoveFile", Method, 20},
-		{"(*FileSet).Write", Method, 0},
-		{"(*Position).IsValid", Method, 0},
-		{"(Pos).IsValid", Method, 0},
-		{"(Position).String", Method, 0},
-		{"(Token).IsKeyword", Method, 0},
-		{"(Token).IsLiteral", Method, 0},
-		{"(Token).IsOperator", Method, 0},
-		{"(Token).Precedence", Method, 0},
-		{"(Token).String", Method, 0},
-		{"ADD", Const, 0},
-		{"ADD_ASSIGN", Const, 0},
-		{"AND", Const, 0},
-		{"AND_ASSIGN", Const, 0},
-		{"AND_NOT", Const, 0},
-		{"AND_NOT_ASSIGN", Const, 0},
-		{"ARROW", Const, 0},
-		{"ASSIGN", Const, 0},
-		{"BREAK", Const, 0},
-		{"CASE", Const, 0},
-		{"CHAN", Const, 0},
-		{"CHAR", Const, 0},
-		{"COLON", Const, 0},
-		{"COMMA", Const, 0},
-		{"COMMENT", Const, 0},
-		{"CONST", Const, 0},
-		{"CONTINUE", Const, 0},
-		{"DEC", Const, 0},
-		{"DEFAULT", Const, 0},
-		{"DEFER", Const, 0},
-		{"DEFINE", Const, 0},
-		{"ELLIPSIS", Const, 0},
-		{"ELSE", Const, 0},
-		{"EOF", Const, 0},
-		{"EQL", Const, 0},
-		{"FALLTHROUGH", Const, 0},
-		{"FLOAT", Const, 0},
-		{"FOR", Const, 0},
-		{"FUNC", Const, 0},
-		{"File", Type, 0},
-		{"FileSet", Type, 0},
-		{"GEQ", Const, 0},
-		{"GO", Const, 0},
-		{"GOTO", Const, 0},
-		{"GTR", Const, 0},
-		{"HighestPrec", Const, 0},
-		{"IDENT", Const, 0},
-		{"IF", Const, 0},
-		{"ILLEGAL", Const, 0},
-		{"IMAG", Const, 0},
-		{"IMPORT", Const, 0},
-		{"INC", Const, 0},
-		{"INT", Const, 0},
-		{"INTERFACE", Const, 0},
-		{"IsExported", Func, 13},
-		{"IsIdentifier", Func, 13},
-		{"IsKeyword", Func, 13},
-		{"LAND", Const, 0},
-		{"LBRACE", Const, 0},
-		{"LBRACK", Const, 0},
-		{"LEQ", Const, 0},
-		{"LOR", Const, 0},
-		{"LPAREN", Const, 0},
-		{"LSS", Const, 0},
-		{"Lookup", Func, 0},
-		{"LowestPrec", Const, 0},
-		{"MAP", Const, 0},
-		{"MUL", Const, 0},
-		{"MUL_ASSIGN", Const, 0},
-		{"NEQ", Const, 0},
-		{"NOT", Const, 0},
-		{"NewFileSet", Func, 0},
-		{"NoPos", Const, 0},
-		{"OR", Const, 0},
-		{"OR_ASSIGN", Const, 0},
-		{"PACKAGE", Const, 0},
-		{"PERIOD", Const, 0},
-		{"Pos", Type, 0},
-		{"Position", Type, 0},
-		{"Position.Column", Field, 0},
-		{"Position.Filename", Field, 0},
-		{"Position.Line", Field, 0},
-		{"Position.Offset", Field, 0},
-		{"QUO", Const, 0},
-		{"QUO_ASSIGN", Const, 0},
-		{"RANGE", Const, 0},
-		{"RBRACE", Const, 0},
-		{"RBRACK", Const, 0},
-		{"REM", Const, 0},
-		{"REM_ASSIGN", Const, 0},
-		{"RETURN", Const, 0},
-		{"RPAREN", Const, 0},
-		{"SELECT", Const, 0},
-		{"SEMICOLON", Const, 0},
-		{"SHL", Const, 0},
-		{"SHL_ASSIGN", Const, 0},
-		{"SHR", Const, 0},
-		{"SHR_ASSIGN", Const, 0},
-		{"STRING", Const, 0},
-		{"STRUCT", Const, 0},
-		{"SUB", Const, 0},
-		{"SUB_ASSIGN", Const, 0},
-		{"SWITCH", Const, 0},
-		{"TILDE", Const, 18},
-		{"TYPE", Const, 0},
-		{"Token", Type, 0},
-		{"UnaryPrec", Const, 0},
-		{"VAR", Const, 0},
-		{"XOR", Const, 0},
-		{"XOR_ASSIGN", Const, 0},
+		{"(*File).AddLine", Method, 0, ""},
+		{"(*File).AddLineColumnInfo", Method, 11, ""},
+		{"(*File).AddLineInfo", Method, 0, ""},
+		{"(*File).Base", Method, 0, ""},
+		{"(*File).Line", Method, 0, ""},
+		{"(*File).LineCount", Method, 0, ""},
+		{"(*File).LineStart", Method, 12, ""},
+		{"(*File).Lines", Method, 21, ""},
+		{"(*File).MergeLine", Method, 2, ""},
+		{"(*File).Name", Method, 0, ""},
+		{"(*File).Offset", Method, 0, ""},
+		{"(*File).Pos", Method, 0, ""},
+		{"(*File).Position", Method, 0, ""},
+		{"(*File).PositionFor", Method, 4, ""},
+		{"(*File).SetLines", Method, 0, ""},
+		{"(*File).SetLinesForContent", Method, 0, ""},
+		{"(*File).Size", Method, 0, ""},
+		{"(*FileSet).AddFile", Method, 0, ""},
+		{"(*FileSet).Base", Method, 0, ""},
+		{"(*FileSet).File", Method, 0, ""},
+		{"(*FileSet).Iterate", Method, 0, ""},
+		{"(*FileSet).Position", Method, 0, ""},
+		{"(*FileSet).PositionFor", Method, 4, ""},
+		{"(*FileSet).Read", Method, 0, ""},
+		{"(*FileSet).RemoveFile", Method, 20, ""},
+		{"(*FileSet).Write", Method, 0, ""},
+		{"(*Position).IsValid", Method, 0, ""},
+		{"(Pos).IsValid", Method, 0, ""},
+		{"(Position).String", Method, 0, ""},
+		{"(Token).IsKeyword", Method, 0, ""},
+		{"(Token).IsLiteral", Method, 0, ""},
+		{"(Token).IsOperator", Method, 0, ""},
+		{"(Token).Precedence", Method, 0, ""},
+		{"(Token).String", Method, 0, ""},
+		{"ADD", Const, 0, ""},
+		{"ADD_ASSIGN", Const, 0, ""},
+		{"AND", Const, 0, ""},
+		{"AND_ASSIGN", Const, 0, ""},
+		{"AND_NOT", Const, 0, ""},
+		{"AND_NOT_ASSIGN", Const, 0, ""},
+		{"ARROW", Const, 0, ""},
+		{"ASSIGN", Const, 0, ""},
+		{"BREAK", Const, 0, ""},
+		{"CASE", Const, 0, ""},
+		{"CHAN", Const, 0, ""},
+		{"CHAR", Const, 0, ""},
+		{"COLON", Const, 0, ""},
+		{"COMMA", Const, 0, ""},
+		{"COMMENT", Const, 0, ""},
+		{"CONST", Const, 0, ""},
+		{"CONTINUE", Const, 0, ""},
+		{"DEC", Const, 0, ""},
+		{"DEFAULT", Const, 0, ""},
+		{"DEFER", Const, 0, ""},
+		{"DEFINE", Const, 0, ""},
+		{"ELLIPSIS", Const, 0, ""},
+		{"ELSE", Const, 0, ""},
+		{"EOF", Const, 0, ""},
+		{"EQL", Const, 0, ""},
+		{"FALLTHROUGH", Const, 0, ""},
+		{"FLOAT", Const, 0, ""},
+		{"FOR", Const, 0, ""},
+		{"FUNC", Const, 0, ""},
+		{"File", Type, 0, ""},
+		{"FileSet", Type, 0, ""},
+		{"GEQ", Const, 0, ""},
+		{"GO", Const, 0, ""},
+		{"GOTO", Const, 0, ""},
+		{"GTR", Const, 0, ""},
+		{"HighestPrec", Const, 0, ""},
+		{"IDENT", Const, 0, ""},
+		{"IF", Const, 0, ""},
+		{"ILLEGAL", Const, 0, ""},
+		{"IMAG", Const, 0, ""},
+		{"IMPORT", Const, 0, ""},
+		{"INC", Const, 0, ""},
+		{"INT", Const, 0, ""},
+		{"INTERFACE", Const, 0, ""},
+		{"IsExported", Func, 13, "func(name string) bool"},
+		{"IsIdentifier", Func, 13, "func(name string) bool"},
+		{"IsKeyword", Func, 13, "func(name string) bool"},
+		{"LAND", Const, 0, ""},
+		{"LBRACE", Const, 0, ""},
+		{"LBRACK", Const, 0, ""},
+		{"LEQ", Const, 0, ""},
+		{"LOR", Const, 0, ""},
+		{"LPAREN", Const, 0, ""},
+		{"LSS", Const, 0, ""},
+		{"Lookup", Func, 0, "func(ident string) Token"},
+		{"LowestPrec", Const, 0, ""},
+		{"MAP", Const, 0, ""},
+		{"MUL", Const, 0, ""},
+		{"MUL_ASSIGN", Const, 0, ""},
+		{"NEQ", Const, 0, ""},
+		{"NOT", Const, 0, ""},
+		{"NewFileSet", Func, 0, "func() *FileSet"},
+		{"NoPos", Const, 0, ""},
+		{"OR", Const, 0, ""},
+		{"OR_ASSIGN", Const, 0, ""},
+		{"PACKAGE", Const, 0, ""},
+		{"PERIOD", Const, 0, ""},
+		{"Pos", Type, 0, ""},
+		{"Position", Type, 0, ""},
+		{"Position.Column", Field, 0, ""},
+		{"Position.Filename", Field, 0, ""},
+		{"Position.Line", Field, 0, ""},
+		{"Position.Offset", Field, 0, ""},
+		{"QUO", Const, 0, ""},
+		{"QUO_ASSIGN", Const, 0, ""},
+		{"RANGE", Const, 0, ""},
+		{"RBRACE", Const, 0, ""},
+		{"RBRACK", Const, 0, ""},
+		{"REM", Const, 0, ""},
+		{"REM_ASSIGN", Const, 0, ""},
+		{"RETURN", Const, 0, ""},
+		{"RPAREN", Const, 0, ""},
+		{"SELECT", Const, 0, ""},
+		{"SEMICOLON", Const, 0, ""},
+		{"SHL", Const, 0, ""},
+		{"SHL_ASSIGN", Const, 0, ""},
+		{"SHR", Const, 0, ""},
+		{"SHR_ASSIGN", Const, 0, ""},
+		{"STRING", Const, 0, ""},
+		{"STRUCT", Const, 0, ""},
+		{"SUB", Const, 0, ""},
+		{"SUB_ASSIGN", Const, 0, ""},
+		{"SWITCH", Const, 0, ""},
+		{"TILDE", Const, 18, ""},
+		{"TYPE", Const, 0, ""},
+		{"Token", Type, 0, ""},
+		{"UnaryPrec", Const, 0, ""},
+		{"VAR", Const, 0, ""},
+		{"XOR", Const, 0, ""},
+		{"XOR_ASSIGN", Const, 0, ""},
 	},
 	"go/types": {
-		{"(*Alias).Obj", Method, 22},
-		{"(*Alias).Origin", Method, 23},
-		{"(*Alias).Rhs", Method, 23},
-		{"(*Alias).SetTypeParams", Method, 23},
-		{"(*Alias).String", Method, 22},
-		{"(*Alias).TypeArgs", Method, 23},
-		{"(*Alias).TypeParams", Method, 23},
-		{"(*Alias).Underlying", Method, 22},
-		{"(*ArgumentError).Error", Method, 18},
-		{"(*ArgumentError).Unwrap", Method, 18},
-		{"(*Array).Elem", Method, 5},
-		{"(*Array).Len", Method, 5},
-		{"(*Array).String", Method, 5},
-		{"(*Array).Underlying", Method, 5},
-		{"(*Basic).Info", Method, 5},
-		{"(*Basic).Kind", Method, 5},
-		{"(*Basic).Name", Method, 5},
-		{"(*Basic).String", Method, 5},
-		{"(*Basic).Underlying", Method, 5},
-		{"(*Builtin).Exported", Method, 5},
-		{"(*Builtin).Id", Method, 5},
-		{"(*Builtin).Name", Method, 5},
-		{"(*Builtin).Parent", Method, 5},
-		{"(*Builtin).Pkg", Method, 5},
-		{"(*Builtin).Pos", Method, 5},
-		{"(*Builtin).String", Method, 5},
-		{"(*Builtin).Type", Method, 5},
-		{"(*Chan).Dir", Method, 5},
-		{"(*Chan).Elem", Method, 5},
-		{"(*Chan).String", Method, 5},
-		{"(*Chan).Underlying", Method, 5},
-		{"(*Checker).Files", Method, 5},
-		{"(*Config).Check", Method, 5},
-		{"(*Const).Exported", Method, 5},
-		{"(*Const).Id", Method, 5},
-		{"(*Const).Name", Method, 5},
-		{"(*Const).Parent", Method, 5},
-		{"(*Const).Pkg", Method, 5},
-		{"(*Const).Pos", Method, 5},
-		{"(*Const).String", Method, 5},
-		{"(*Const).Type", Method, 5},
-		{"(*Const).Val", Method, 5},
-		{"(*Func).Exported", Method, 5},
-		{"(*Func).FullName", Method, 5},
-		{"(*Func).Id", Method, 5},
-		{"(*Func).Name", Method, 5},
-		{"(*Func).Origin", Method, 19},
-		{"(*Func).Parent", Method, 5},
-		{"(*Func).Pkg", Method, 5},
-		{"(*Func).Pos", Method, 5},
-		{"(*Func).Scope", Method, 5},
-		{"(*Func).Signature", Method, 23},
-		{"(*Func).String", Method, 5},
-		{"(*Func).Type", Method, 5},
-		{"(*Info).ObjectOf", Method, 5},
-		{"(*Info).PkgNameOf", Method, 22},
-		{"(*Info).TypeOf", Method, 5},
-		{"(*Initializer).String", Method, 5},
-		{"(*Interface).Complete", Method, 5},
-		{"(*Interface).Embedded", Method, 5},
-		{"(*Interface).EmbeddedType", Method, 11},
-		{"(*Interface).EmbeddedTypes", Method, 24},
-		{"(*Interface).Empty", Method, 5},
-		{"(*Interface).ExplicitMethod", Method, 5},
-		{"(*Interface).ExplicitMethods", Method, 24},
-		{"(*Interface).IsComparable", Method, 18},
-		{"(*Interface).IsImplicit", Method, 18},
-		{"(*Interface).IsMethodSet", Method, 18},
-		{"(*Interface).MarkImplicit", Method, 18},
-		{"(*Interface).Method", Method, 5},
-		{"(*Interface).Methods", Method, 24},
-		{"(*Interface).NumEmbeddeds", Method, 5},
-		{"(*Interface).NumExplicitMethods", Method, 5},
-		{"(*Interface).NumMethods", Method, 5},
-		{"(*Interface).String", Method, 5},
-		{"(*Interface).Underlying", Method, 5},
-		{"(*Label).Exported", Method, 5},
-		{"(*Label).Id", Method, 5},
-		{"(*Label).Name", Method, 5},
-		{"(*Label).Parent", Method, 5},
-		{"(*Label).Pkg", Method, 5},
-		{"(*Label).Pos", Method, 5},
-		{"(*Label).String", Method, 5},
-		{"(*Label).Type", Method, 5},
-		{"(*Map).Elem", Method, 5},
-		{"(*Map).Key", Method, 5},
-		{"(*Map).String", Method, 5},
-		{"(*Map).Underlying", Method, 5},
-		{"(*MethodSet).At", Method, 5},
-		{"(*MethodSet).Len", Method, 5},
-		{"(*MethodSet).Lookup", Method, 5},
-		{"(*MethodSet).Methods", Method, 24},
-		{"(*MethodSet).String", Method, 5},
-		{"(*Named).AddMethod", Method, 5},
-		{"(*Named).Method", Method, 5},
-		{"(*Named).Methods", Method, 24},
-		{"(*Named).NumMethods", Method, 5},
-		{"(*Named).Obj", Method, 5},
-		{"(*Named).Origin", Method, 18},
-		{"(*Named).SetTypeParams", Method, 18},
-		{"(*Named).SetUnderlying", Method, 5},
-		{"(*Named).String", Method, 5},
-		{"(*Named).TypeArgs", Method, 18},
-		{"(*Named).TypeParams", Method, 18},
-		{"(*Named).Underlying", Method, 5},
-		{"(*Nil).Exported", Method, 5},
-		{"(*Nil).Id", Method, 5},
-		{"(*Nil).Name", Method, 5},
-		{"(*Nil).Parent", Method, 5},
-		{"(*Nil).Pkg", Method, 5},
-		{"(*Nil).Pos", Method, 5},
-		{"(*Nil).String", Method, 5},
-		{"(*Nil).Type", Method, 5},
-		{"(*Package).Complete", Method, 5},
-		{"(*Package).GoVersion", Method, 21},
-		{"(*Package).Imports", Method, 5},
-		{"(*Package).MarkComplete", Method, 5},
-		{"(*Package).Name", Method, 5},
-		{"(*Package).Path", Method, 5},
-		{"(*Package).Scope", Method, 5},
-		{"(*Package).SetImports", Method, 5},
-		{"(*Package).SetName", Method, 6},
-		{"(*Package).String", Method, 5},
-		{"(*PkgName).Exported", Method, 5},
-		{"(*PkgName).Id", Method, 5},
-		{"(*PkgName).Imported", Method, 5},
-		{"(*PkgName).Name", Method, 5},
-		{"(*PkgName).Parent", Method, 5},
-		{"(*PkgName).Pkg", Method, 5},
-		{"(*PkgName).Pos", Method, 5},
-		{"(*PkgName).String", Method, 5},
-		{"(*PkgName).Type", Method, 5},
-		{"(*Pointer).Elem", Method, 5},
-		{"(*Pointer).String", Method, 5},
-		{"(*Pointer).Underlying", Method, 5},
-		{"(*Scope).Child", Method, 5},
-		{"(*Scope).Children", Method, 24},
-		{"(*Scope).Contains", Method, 5},
-		{"(*Scope).End", Method, 5},
-		{"(*Scope).Innermost", Method, 5},
-		{"(*Scope).Insert", Method, 5},
-		{"(*Scope).Len", Method, 5},
-		{"(*Scope).Lookup", Method, 5},
-		{"(*Scope).LookupParent", Method, 5},
-		{"(*Scope).Names", Method, 5},
-		{"(*Scope).NumChildren", Method, 5},
-		{"(*Scope).Parent", Method, 5},
-		{"(*Scope).Pos", Method, 5},
-		{"(*Scope).String", Method, 5},
-		{"(*Scope).WriteTo", Method, 5},
-		{"(*Selection).Index", Method, 5},
-		{"(*Selection).Indirect", Method, 5},
-		{"(*Selection).Kind", Method, 5},
-		{"(*Selection).Obj", Method, 5},
-		{"(*Selection).Recv", Method, 5},
-		{"(*Selection).String", Method, 5},
-		{"(*Selection).Type", Method, 5},
-		{"(*Signature).Params", Method, 5},
-		{"(*Signature).Recv", Method, 5},
-		{"(*Signature).RecvTypeParams", Method, 18},
-		{"(*Signature).Results", Method, 5},
-		{"(*Signature).String", Method, 5},
-		{"(*Signature).TypeParams", Method, 18},
-		{"(*Signature).Underlying", Method, 5},
-		{"(*Signature).Variadic", Method, 5},
-		{"(*Slice).Elem", Method, 5},
-		{"(*Slice).String", Method, 5},
-		{"(*Slice).Underlying", Method, 5},
-		{"(*StdSizes).Alignof", Method, 5},
-		{"(*StdSizes).Offsetsof", Method, 5},
-		{"(*StdSizes).Sizeof", Method, 5},
-		{"(*Struct).Field", Method, 5},
-		{"(*Struct).Fields", Method, 24},
-		{"(*Struct).NumFields", Method, 5},
-		{"(*Struct).String", Method, 5},
-		{"(*Struct).Tag", Method, 5},
-		{"(*Struct).Underlying", Method, 5},
-		{"(*Term).String", Method, 18},
-		{"(*Term).Tilde", Method, 18},
-		{"(*Term).Type", Method, 18},
-		{"(*Tuple).At", Method, 5},
-		{"(*Tuple).Len", Method, 5},
-		{"(*Tuple).String", Method, 5},
-		{"(*Tuple).Underlying", Method, 5},
-		{"(*Tuple).Variables", Method, 24},
-		{"(*TypeList).At", Method, 18},
-		{"(*TypeList).Len", Method, 18},
-		{"(*TypeList).Types", Method, 24},
-		{"(*TypeName).Exported", Method, 5},
-		{"(*TypeName).Id", Method, 5},
-		{"(*TypeName).IsAlias", Method, 9},
-		{"(*TypeName).Name", Method, 5},
-		{"(*TypeName).Parent", Method, 5},
-		{"(*TypeName).Pkg", Method, 5},
-		{"(*TypeName).Pos", Method, 5},
-		{"(*TypeName).String", Method, 5},
-		{"(*TypeName).Type", Method, 5},
-		{"(*TypeParam).Constraint", Method, 18},
-		{"(*TypeParam).Index", Method, 18},
-		{"(*TypeParam).Obj", Method, 18},
-		{"(*TypeParam).SetConstraint", Method, 18},
-		{"(*TypeParam).String", Method, 18},
-		{"(*TypeParam).Underlying", Method, 18},
-		{"(*TypeParamList).At", Method, 18},
-		{"(*TypeParamList).Len", Method, 18},
-		{"(*TypeParamList).TypeParams", Method, 24},
-		{"(*Union).Len", Method, 18},
-		{"(*Union).String", Method, 18},
-		{"(*Union).Term", Method, 18},
-		{"(*Union).Terms", Method, 24},
-		{"(*Union).Underlying", Method, 18},
-		{"(*Var).Anonymous", Method, 5},
-		{"(*Var).Embedded", Method, 11},
-		{"(*Var).Exported", Method, 5},
-		{"(*Var).Id", Method, 5},
-		{"(*Var).IsField", Method, 5},
-		{"(*Var).Name", Method, 5},
-		{"(*Var).Origin", Method, 19},
-		{"(*Var).Parent", Method, 5},
-		{"(*Var).Pkg", Method, 5},
-		{"(*Var).Pos", Method, 5},
-		{"(*Var).String", Method, 5},
-		{"(*Var).Type", Method, 5},
-		{"(Checker).ObjectOf", Method, 5},
-		{"(Checker).PkgNameOf", Method, 22},
-		{"(Checker).TypeOf", Method, 5},
-		{"(Error).Error", Method, 5},
-		{"(TypeAndValue).Addressable", Method, 5},
-		{"(TypeAndValue).Assignable", Method, 5},
-		{"(TypeAndValue).HasOk", Method, 5},
-		{"(TypeAndValue).IsBuiltin", Method, 5},
-		{"(TypeAndValue).IsNil", Method, 5},
-		{"(TypeAndValue).IsType", Method, 5},
-		{"(TypeAndValue).IsValue", Method, 5},
-		{"(TypeAndValue).IsVoid", Method, 5},
-		{"Alias", Type, 22},
-		{"ArgumentError", Type, 18},
-		{"ArgumentError.Err", Field, 18},
-		{"ArgumentError.Index", Field, 18},
-		{"Array", Type, 5},
-		{"AssertableTo", Func, 5},
-		{"AssignableTo", Func, 5},
-		{"Basic", Type, 5},
-		{"BasicInfo", Type, 5},
-		{"BasicKind", Type, 5},
-		{"Bool", Const, 5},
-		{"Builtin", Type, 5},
-		{"Byte", Const, 5},
-		{"Chan", Type, 5},
-		{"ChanDir", Type, 5},
-		{"CheckExpr", Func, 13},
-		{"Checker", Type, 5},
-		{"Checker.Info", Field, 5},
-		{"Comparable", Func, 5},
-		{"Complex128", Const, 5},
-		{"Complex64", Const, 5},
-		{"Config", Type, 5},
-		{"Config.Context", Field, 18},
-		{"Config.DisableUnusedImportCheck", Field, 5},
-		{"Config.Error", Field, 5},
-		{"Config.FakeImportC", Field, 5},
-		{"Config.GoVersion", Field, 18},
-		{"Config.IgnoreFuncBodies", Field, 5},
-		{"Config.Importer", Field, 5},
-		{"Config.Sizes", Field, 5},
-		{"Const", Type, 5},
-		{"Context", Type, 18},
-		{"ConvertibleTo", Func, 5},
-		{"DefPredeclaredTestFuncs", Func, 5},
-		{"Default", Func, 8},
-		{"Error", Type, 5},
-		{"Error.Fset", Field, 5},
-		{"Error.Msg", Field, 5},
-		{"Error.Pos", Field, 5},
-		{"Error.Soft", Field, 5},
-		{"Eval", Func, 5},
-		{"ExprString", Func, 5},
-		{"FieldVal", Const, 5},
-		{"Float32", Const, 5},
-		{"Float64", Const, 5},
-		{"Func", Type, 5},
-		{"Id", Func, 5},
-		{"Identical", Func, 5},
-		{"IdenticalIgnoreTags", Func, 8},
-		{"Implements", Func, 5},
-		{"ImportMode", Type, 6},
-		{"Importer", Type, 5},
-		{"ImporterFrom", Type, 6},
-		{"Info", Type, 5},
-		{"Info.Defs", Field, 5},
-		{"Info.FileVersions", Field, 22},
-		{"Info.Implicits", Field, 5},
-		{"Info.InitOrder", Field, 5},
-		{"Info.Instances", Field, 18},
-		{"Info.Scopes", Field, 5},
-		{"Info.Selections", Field, 5},
-		{"Info.Types", Field, 5},
-		{"Info.Uses", Field, 5},
-		{"Initializer", Type, 5},
-		{"Initializer.Lhs", Field, 5},
-		{"Initializer.Rhs", Field, 5},
-		{"Instance", Type, 18},
-		{"Instance.Type", Field, 18},
-		{"Instance.TypeArgs", Field, 18},
-		{"Instantiate", Func, 18},
-		{"Int", Const, 5},
-		{"Int16", Const, 5},
-		{"Int32", Const, 5},
-		{"Int64", Const, 5},
-		{"Int8", Const, 5},
-		{"Interface", Type, 5},
-		{"Invalid", Const, 5},
-		{"IsBoolean", Const, 5},
-		{"IsComplex", Const, 5},
-		{"IsConstType", Const, 5},
-		{"IsFloat", Const, 5},
-		{"IsInteger", Const, 5},
-		{"IsInterface", Func, 5},
-		{"IsNumeric", Const, 5},
-		{"IsOrdered", Const, 5},
-		{"IsString", Const, 5},
-		{"IsUnsigned", Const, 5},
-		{"IsUntyped", Const, 5},
-		{"Label", Type, 5},
-		{"LookupFieldOrMethod", Func, 5},
-		{"Map", Type, 5},
-		{"MethodExpr", Const, 5},
-		{"MethodSet", Type, 5},
-		{"MethodVal", Const, 5},
-		{"MissingMethod", Func, 5},
-		{"Named", Type, 5},
-		{"NewAlias", Func, 22},
-		{"NewArray", Func, 5},
-		{"NewChan", Func, 5},
-		{"NewChecker", Func, 5},
-		{"NewConst", Func, 5},
-		{"NewContext", Func, 18},
-		{"NewField", Func, 5},
-		{"NewFunc", Func, 5},
-		{"NewInterface", Func, 5},
-		{"NewInterfaceType", Func, 11},
-		{"NewLabel", Func, 5},
-		{"NewMap", Func, 5},
-		{"NewMethodSet", Func, 5},
-		{"NewNamed", Func, 5},
-		{"NewPackage", Func, 5},
-		{"NewParam", Func, 5},
-		{"NewPkgName", Func, 5},
-		{"NewPointer", Func, 5},
-		{"NewScope", Func, 5},
-		{"NewSignature", Func, 5},
-		{"NewSignatureType", Func, 18},
-		{"NewSlice", Func, 5},
-		{"NewStruct", Func, 5},
-		{"NewTerm", Func, 18},
-		{"NewTuple", Func, 5},
-		{"NewTypeName", Func, 5},
-		{"NewTypeParam", Func, 18},
-		{"NewUnion", Func, 18},
-		{"NewVar", Func, 5},
-		{"Nil", Type, 5},
-		{"Object", Type, 5},
-		{"ObjectString", Func, 5},
-		{"Package", Type, 5},
-		{"PkgName", Type, 5},
-		{"Pointer", Type, 5},
-		{"Qualifier", Type, 5},
-		{"RecvOnly", Const, 5},
-		{"RelativeTo", Func, 5},
-		{"Rune", Const, 5},
-		{"Satisfies", Func, 20},
-		{"Scope", Type, 5},
-		{"Selection", Type, 5},
-		{"SelectionKind", Type, 5},
-		{"SelectionString", Func, 5},
-		{"SendOnly", Const, 5},
-		{"SendRecv", Const, 5},
-		{"Signature", Type, 5},
-		{"Sizes", Type, 5},
-		{"SizesFor", Func, 9},
-		{"Slice", Type, 5},
-		{"StdSizes", Type, 5},
-		{"StdSizes.MaxAlign", Field, 5},
-		{"StdSizes.WordSize", Field, 5},
-		{"String", Const, 5},
-		{"Struct", Type, 5},
-		{"Term", Type, 18},
-		{"Tuple", Type, 5},
-		{"Typ", Var, 5},
-		{"Type", Type, 5},
-		{"TypeAndValue", Type, 5},
-		{"TypeAndValue.Type", Field, 5},
-		{"TypeAndValue.Value", Field, 5},
-		{"TypeList", Type, 18},
-		{"TypeName", Type, 5},
-		{"TypeParam", Type, 18},
-		{"TypeParamList", Type, 18},
-		{"TypeString", Func, 5},
-		{"Uint", Const, 5},
-		{"Uint16", Const, 5},
-		{"Uint32", Const, 5},
-		{"Uint64", Const, 5},
-		{"Uint8", Const, 5},
-		{"Uintptr", Const, 5},
-		{"Unalias", Func, 22},
-		{"Union", Type, 18},
-		{"Universe", Var, 5},
-		{"Unsafe", Var, 5},
-		{"UnsafePointer", Const, 5},
-		{"UntypedBool", Const, 5},
-		{"UntypedComplex", Const, 5},
-		{"UntypedFloat", Const, 5},
-		{"UntypedInt", Const, 5},
-		{"UntypedNil", Const, 5},
-		{"UntypedRune", Const, 5},
-		{"UntypedString", Const, 5},
-		{"Var", Type, 5},
-		{"WriteExpr", Func, 5},
-		{"WriteSignature", Func, 5},
-		{"WriteType", Func, 5},
+		{"(*Alias).Obj", Method, 22, ""},
+		{"(*Alias).Origin", Method, 23, ""},
+		{"(*Alias).Rhs", Method, 23, ""},
+		{"(*Alias).SetTypeParams", Method, 23, ""},
+		{"(*Alias).String", Method, 22, ""},
+		{"(*Alias).TypeArgs", Method, 23, ""},
+		{"(*Alias).TypeParams", Method, 23, ""},
+		{"(*Alias).Underlying", Method, 22, ""},
+		{"(*ArgumentError).Error", Method, 18, ""},
+		{"(*ArgumentError).Unwrap", Method, 18, ""},
+		{"(*Array).Elem", Method, 5, ""},
+		{"(*Array).Len", Method, 5, ""},
+		{"(*Array).String", Method, 5, ""},
+		{"(*Array).Underlying", Method, 5, ""},
+		{"(*Basic).Info", Method, 5, ""},
+		{"(*Basic).Kind", Method, 5, ""},
+		{"(*Basic).Name", Method, 5, ""},
+		{"(*Basic).String", Method, 5, ""},
+		{"(*Basic).Underlying", Method, 5, ""},
+		{"(*Builtin).Exported", Method, 5, ""},
+		{"(*Builtin).Id", Method, 5, ""},
+		{"(*Builtin).Name", Method, 5, ""},
+		{"(*Builtin).Parent", Method, 5, ""},
+		{"(*Builtin).Pkg", Method, 5, ""},
+		{"(*Builtin).Pos", Method, 5, ""},
+		{"(*Builtin).String", Method, 5, ""},
+		{"(*Builtin).Type", Method, 5, ""},
+		{"(*Chan).Dir", Method, 5, ""},
+		{"(*Chan).Elem", Method, 5, ""},
+		{"(*Chan).String", Method, 5, ""},
+		{"(*Chan).Underlying", Method, 5, ""},
+		{"(*Checker).Files", Method, 5, ""},
+		{"(*Config).Check", Method, 5, ""},
+		{"(*Const).Exported", Method, 5, ""},
+		{"(*Const).Id", Method, 5, ""},
+		{"(*Const).Name", Method, 5, ""},
+		{"(*Const).Parent", Method, 5, ""},
+		{"(*Const).Pkg", Method, 5, ""},
+		{"(*Const).Pos", Method, 5, ""},
+		{"(*Const).String", Method, 5, ""},
+		{"(*Const).Type", Method, 5, ""},
+		{"(*Const).Val", Method, 5, ""},
+		{"(*Func).Exported", Method, 5, ""},
+		{"(*Func).FullName", Method, 5, ""},
+		{"(*Func).Id", Method, 5, ""},
+		{"(*Func).Name", Method, 5, ""},
+		{"(*Func).Origin", Method, 19, ""},
+		{"(*Func).Parent", Method, 5, ""},
+		{"(*Func).Pkg", Method, 5, ""},
+		{"(*Func).Pos", Method, 5, ""},
+		{"(*Func).Scope", Method, 5, ""},
+		{"(*Func).Signature", Method, 23, ""},
+		{"(*Func).String", Method, 5, ""},
+		{"(*Func).Type", Method, 5, ""},
+		{"(*Info).ObjectOf", Method, 5, ""},
+		{"(*Info).PkgNameOf", Method, 22, ""},
+		{"(*Info).TypeOf", Method, 5, ""},
+		{"(*Initializer).String", Method, 5, ""},
+		{"(*Interface).Complete", Method, 5, ""},
+		{"(*Interface).Embedded", Method, 5, ""},
+		{"(*Interface).EmbeddedType", Method, 11, ""},
+		{"(*Interface).EmbeddedTypes", Method, 24, ""},
+		{"(*Interface).Empty", Method, 5, ""},
+		{"(*Interface).ExplicitMethod", Method, 5, ""},
+		{"(*Interface).ExplicitMethods", Method, 24, ""},
+		{"(*Interface).IsComparable", Method, 18, ""},
+		{"(*Interface).IsImplicit", Method, 18, ""},
+		{"(*Interface).IsMethodSet", Method, 18, ""},
+		{"(*Interface).MarkImplicit", Method, 18, ""},
+		{"(*Interface).Method", Method, 5, ""},
+		{"(*Interface).Methods", Method, 24, ""},
+		{"(*Interface).NumEmbeddeds", Method, 5, ""},
+		{"(*Interface).NumExplicitMethods", Method, 5, ""},
+		{"(*Interface).NumMethods", Method, 5, ""},
+		{"(*Interface).String", Method, 5, ""},
+		{"(*Interface).Underlying", Method, 5, ""},
+		{"(*Label).Exported", Method, 5, ""},
+		{"(*Label).Id", Method, 5, ""},
+		{"(*Label).Name", Method, 5, ""},
+		{"(*Label).Parent", Method, 5, ""},
+		{"(*Label).Pkg", Method, 5, ""},
+		{"(*Label).Pos", Method, 5, ""},
+		{"(*Label).String", Method, 5, ""},
+		{"(*Label).Type", Method, 5, ""},
+		{"(*Map).Elem", Method, 5, ""},
+		{"(*Map).Key", Method, 5, ""},
+		{"(*Map).String", Method, 5, ""},
+		{"(*Map).Underlying", Method, 5, ""},
+		{"(*MethodSet).At", Method, 5, ""},
+		{"(*MethodSet).Len", Method, 5, ""},
+		{"(*MethodSet).Lookup", Method, 5, ""},
+		{"(*MethodSet).Methods", Method, 24, ""},
+		{"(*MethodSet).String", Method, 5, ""},
+		{"(*Named).AddMethod", Method, 5, ""},
+		{"(*Named).Method", Method, 5, ""},
+		{"(*Named).Methods", Method, 24, ""},
+		{"(*Named).NumMethods", Method, 5, ""},
+		{"(*Named).Obj", Method, 5, ""},
+		{"(*Named).Origin", Method, 18, ""},
+		{"(*Named).SetTypeParams", Method, 18, ""},
+		{"(*Named).SetUnderlying", Method, 5, ""},
+		{"(*Named).String", Method, 5, ""},
+		{"(*Named).TypeArgs", Method, 18, ""},
+		{"(*Named).TypeParams", Method, 18, ""},
+		{"(*Named).Underlying", Method, 5, ""},
+		{"(*Nil).Exported", Method, 5, ""},
+		{"(*Nil).Id", Method, 5, ""},
+		{"(*Nil).Name", Method, 5, ""},
+		{"(*Nil).Parent", Method, 5, ""},
+		{"(*Nil).Pkg", Method, 5, ""},
+		{"(*Nil).Pos", Method, 5, ""},
+		{"(*Nil).String", Method, 5, ""},
+		{"(*Nil).Type", Method, 5, ""},
+		{"(*Package).Complete", Method, 5, ""},
+		{"(*Package).GoVersion", Method, 21, ""},
+		{"(*Package).Imports", Method, 5, ""},
+		{"(*Package).MarkComplete", Method, 5, ""},
+		{"(*Package).Name", Method, 5, ""},
+		{"(*Package).Path", Method, 5, ""},
+		{"(*Package).Scope", Method, 5, ""},
+		{"(*Package).SetImports", Method, 5, ""},
+		{"(*Package).SetName", Method, 6, ""},
+		{"(*Package).String", Method, 5, ""},
+		{"(*PkgName).Exported", Method, 5, ""},
+		{"(*PkgName).Id", Method, 5, ""},
+		{"(*PkgName).Imported", Method, 5, ""},
+		{"(*PkgName).Name", Method, 5, ""},
+		{"(*PkgName).Parent", Method, 5, ""},
+		{"(*PkgName).Pkg", Method, 5, ""},
+		{"(*PkgName).Pos", Method, 5, ""},
+		{"(*PkgName).String", Method, 5, ""},
+		{"(*PkgName).Type", Method, 5, ""},
+		{"(*Pointer).Elem", Method, 5, ""},
+		{"(*Pointer).String", Method, 5, ""},
+		{"(*Pointer).Underlying", Method, 5, ""},
+		{"(*Scope).Child", Method, 5, ""},
+		{"(*Scope).Children", Method, 24, ""},
+		{"(*Scope).Contains", Method, 5, ""},
+		{"(*Scope).End", Method, 5, ""},
+		{"(*Scope).Innermost", Method, 5, ""},
+		{"(*Scope).Insert", Method, 5, ""},
+		{"(*Scope).Len", Method, 5, ""},
+		{"(*Scope).Lookup", Method, 5, ""},
+		{"(*Scope).LookupParent", Method, 5, ""},
+		{"(*Scope).Names", Method, 5, ""},
+		{"(*Scope).NumChildren", Method, 5, ""},
+		{"(*Scope).Parent", Method, 5, ""},
+		{"(*Scope).Pos", Method, 5, ""},
+		{"(*Scope).String", Method, 5, ""},
+		{"(*Scope).WriteTo", Method, 5, ""},
+		{"(*Selection).Index", Method, 5, ""},
+		{"(*Selection).Indirect", Method, 5, ""},
+		{"(*Selection).Kind", Method, 5, ""},
+		{"(*Selection).Obj", Method, 5, ""},
+		{"(*Selection).Recv", Method, 5, ""},
+		{"(*Selection).String", Method, 5, ""},
+		{"(*Selection).Type", Method, 5, ""},
+		{"(*Signature).Params", Method, 5, ""},
+		{"(*Signature).Recv", Method, 5, ""},
+		{"(*Signature).RecvTypeParams", Method, 18, ""},
+		{"(*Signature).Results", Method, 5, ""},
+		{"(*Signature).String", Method, 5, ""},
+		{"(*Signature).TypeParams", Method, 18, ""},
+		{"(*Signature).Underlying", Method, 5, ""},
+		{"(*Signature).Variadic", Method, 5, ""},
+		{"(*Slice).Elem", Method, 5, ""},
+		{"(*Slice).String", Method, 5, ""},
+		{"(*Slice).Underlying", Method, 5, ""},
+		{"(*StdSizes).Alignof", Method, 5, ""},
+		{"(*StdSizes).Offsetsof", Method, 5, ""},
+		{"(*StdSizes).Sizeof", Method, 5, ""},
+		{"(*Struct).Field", Method, 5, ""},
+		{"(*Struct).Fields", Method, 24, ""},
+		{"(*Struct).NumFields", Method, 5, ""},
+		{"(*Struct).String", Method, 5, ""},
+		{"(*Struct).Tag", Method, 5, ""},
+		{"(*Struct).Underlying", Method, 5, ""},
+		{"(*Term).String", Method, 18, ""},
+		{"(*Term).Tilde", Method, 18, ""},
+		{"(*Term).Type", Method, 18, ""},
+		{"(*Tuple).At", Method, 5, ""},
+		{"(*Tuple).Len", Method, 5, ""},
+		{"(*Tuple).String", Method, 5, ""},
+		{"(*Tuple).Underlying", Method, 5, ""},
+		{"(*Tuple).Variables", Method, 24, ""},
+		{"(*TypeList).At", Method, 18, ""},
+		{"(*TypeList).Len", Method, 18, ""},
+		{"(*TypeList).Types", Method, 24, ""},
+		{"(*TypeName).Exported", Method, 5, ""},
+		{"(*TypeName).Id", Method, 5, ""},
+		{"(*TypeName).IsAlias", Method, 9, ""},
+		{"(*TypeName).Name", Method, 5, ""},
+		{"(*TypeName).Parent", Method, 5, ""},
+		{"(*TypeName).Pkg", Method, 5, ""},
+		{"(*TypeName).Pos", Method, 5, ""},
+		{"(*TypeName).String", Method, 5, ""},
+		{"(*TypeName).Type", Method, 5, ""},
+		{"(*TypeParam).Constraint", Method, 18, ""},
+		{"(*TypeParam).Index", Method, 18, ""},
+		{"(*TypeParam).Obj", Method, 18, ""},
+		{"(*TypeParam).SetConstraint", Method, 18, ""},
+		{"(*TypeParam).String", Method, 18, ""},
+		{"(*TypeParam).Underlying", Method, 18, ""},
+		{"(*TypeParamList).At", Method, 18, ""},
+		{"(*TypeParamList).Len", Method, 18, ""},
+		{"(*TypeParamList).TypeParams", Method, 24, ""},
+		{"(*Union).Len", Method, 18, ""},
+		{"(*Union).String", Method, 18, ""},
+		{"(*Union).Term", Method, 18, ""},
+		{"(*Union).Terms", Method, 24, ""},
+		{"(*Union).Underlying", Method, 18, ""},
+		{"(*Var).Anonymous", Method, 5, ""},
+		{"(*Var).Embedded", Method, 11, ""},
+		{"(*Var).Exported", Method, 5, ""},
+		{"(*Var).Id", Method, 5, ""},
+		{"(*Var).IsField", Method, 5, ""},
+		{"(*Var).Kind", Method, 25, ""},
+		{"(*Var).Name", Method, 5, ""},
+		{"(*Var).Origin", Method, 19, ""},
+		{"(*Var).Parent", Method, 5, ""},
+		{"(*Var).Pkg", Method, 5, ""},
+		{"(*Var).Pos", Method, 5, ""},
+		{"(*Var).SetKind", Method, 25, ""},
+		{"(*Var).String", Method, 5, ""},
+		{"(*Var).Type", Method, 5, ""},
+		{"(Checker).ObjectOf", Method, 5, ""},
+		{"(Checker).PkgNameOf", Method, 22, ""},
+		{"(Checker).TypeOf", Method, 5, ""},
+		{"(Error).Error", Method, 5, ""},
+		{"(TypeAndValue).Addressable", Method, 5, ""},
+		{"(TypeAndValue).Assignable", Method, 5, ""},
+		{"(TypeAndValue).HasOk", Method, 5, ""},
+		{"(TypeAndValue).IsBuiltin", Method, 5, ""},
+		{"(TypeAndValue).IsNil", Method, 5, ""},
+		{"(TypeAndValue).IsType", Method, 5, ""},
+		{"(TypeAndValue).IsValue", Method, 5, ""},
+		{"(TypeAndValue).IsVoid", Method, 5, ""},
+		{"(VarKind).String", Method, 25, ""},
+		{"Alias", Type, 22, ""},
+		{"ArgumentError", Type, 18, ""},
+		{"ArgumentError.Err", Field, 18, ""},
+		{"ArgumentError.Index", Field, 18, ""},
+		{"Array", Type, 5, ""},
+		{"AssertableTo", Func, 5, "func(V *Interface, T Type) bool"},
+		{"AssignableTo", Func, 5, "func(V Type, T Type) bool"},
+		{"Basic", Type, 5, ""},
+		{"BasicInfo", Type, 5, ""},
+		{"BasicKind", Type, 5, ""},
+		{"Bool", Const, 5, ""},
+		{"Builtin", Type, 5, ""},
+		{"Byte", Const, 5, ""},
+		{"Chan", Type, 5, ""},
+		{"ChanDir", Type, 5, ""},
+		{"CheckExpr", Func, 13, "func(fset *token.FileSet, pkg *Package, pos token.Pos, expr ast.Expr, info *Info) (err error)"},
+		{"Checker", Type, 5, ""},
+		{"Checker.Info", Field, 5, ""},
+		{"Comparable", Func, 5, "func(T Type) bool"},
+		{"Complex128", Const, 5, ""},
+		{"Complex64", Const, 5, ""},
+		{"Config", Type, 5, ""},
+		{"Config.Context", Field, 18, ""},
+		{"Config.DisableUnusedImportCheck", Field, 5, ""},
+		{"Config.Error", Field, 5, ""},
+		{"Config.FakeImportC", Field, 5, ""},
+		{"Config.GoVersion", Field, 18, ""},
+		{"Config.IgnoreFuncBodies", Field, 5, ""},
+		{"Config.Importer", Field, 5, ""},
+		{"Config.Sizes", Field, 5, ""},
+		{"Const", Type, 5, ""},
+		{"Context", Type, 18, ""},
+		{"ConvertibleTo", Func, 5, "func(V Type, T Type) bool"},
+		{"DefPredeclaredTestFuncs", Func, 5, "func()"},
+		{"Default", Func, 8, "func(t Type) Type"},
+		{"Error", Type, 5, ""},
+		{"Error.Fset", Field, 5, ""},
+		{"Error.Msg", Field, 5, ""},
+		{"Error.Pos", Field, 5, ""},
+		{"Error.Soft", Field, 5, ""},
+		{"Eval", Func, 5, "func(fset *token.FileSet, pkg *Package, pos token.Pos, expr string) (_ TypeAndValue, err error)"},
+		{"ExprString", Func, 5, "func(x ast.Expr) string"},
+		{"FieldVal", Const, 5, ""},
+		{"FieldVar", Const, 25, ""},
+		{"Float32", Const, 5, ""},
+		{"Float64", Const, 5, ""},
+		{"Func", Type, 5, ""},
+		{"Id", Func, 5, "func(pkg *Package, name string) string"},
+		{"Identical", Func, 5, "func(x Type, y Type) bool"},
+		{"IdenticalIgnoreTags", Func, 8, "func(x Type, y Type) bool"},
+		{"Implements", Func, 5, "func(V Type, T *Interface) bool"},
+		{"ImportMode", Type, 6, ""},
+		{"Importer", Type, 5, ""},
+		{"ImporterFrom", Type, 6, ""},
+		{"Info", Type, 5, ""},
+		{"Info.Defs", Field, 5, ""},
+		{"Info.FileVersions", Field, 22, ""},
+		{"Info.Implicits", Field, 5, ""},
+		{"Info.InitOrder", Field, 5, ""},
+		{"Info.Instances", Field, 18, ""},
+		{"Info.Scopes", Field, 5, ""},
+		{"Info.Selections", Field, 5, ""},
+		{"Info.Types", Field, 5, ""},
+		{"Info.Uses", Field, 5, ""},
+		{"Initializer", Type, 5, ""},
+		{"Initializer.Lhs", Field, 5, ""},
+		{"Initializer.Rhs", Field, 5, ""},
+		{"Instance", Type, 18, ""},
+		{"Instance.Type", Field, 18, ""},
+		{"Instance.TypeArgs", Field, 18, ""},
+		{"Instantiate", Func, 18, "func(ctxt *Context, orig Type, targs []Type, validate bool) (Type, error)"},
+		{"Int", Const, 5, ""},
+		{"Int16", Const, 5, ""},
+		{"Int32", Const, 5, ""},
+		{"Int64", Const, 5, ""},
+		{"Int8", Const, 5, ""},
+		{"Interface", Type, 5, ""},
+		{"Invalid", Const, 5, ""},
+		{"IsBoolean", Const, 5, ""},
+		{"IsComplex", Const, 5, ""},
+		{"IsConstType", Const, 5, ""},
+		{"IsFloat", Const, 5, ""},
+		{"IsInteger", Const, 5, ""},
+		{"IsInterface", Func, 5, "func(t Type) bool"},
+		{"IsNumeric", Const, 5, ""},
+		{"IsOrdered", Const, 5, ""},
+		{"IsString", Const, 5, ""},
+		{"IsUnsigned", Const, 5, ""},
+		{"IsUntyped", Const, 5, ""},
+		{"Label", Type, 5, ""},
+		{"LocalVar", Const, 25, ""},
+		{"LookupFieldOrMethod", Func, 5, "func(T Type, addressable bool, pkg *Package, name string) (obj Object, index []int, indirect bool)"},
+		{"LookupSelection", Func, 25, ""},
+		{"Map", Type, 5, ""},
+		{"MethodExpr", Const, 5, ""},
+		{"MethodSet", Type, 5, ""},
+		{"MethodVal", Const, 5, ""},
+		{"MissingMethod", Func, 5, "func(V Type, T *Interface, static bool) (method *Func, wrongType bool)"},
+		{"Named", Type, 5, ""},
+		{"NewAlias", Func, 22, "func(obj *TypeName, rhs Type) *Alias"},
+		{"NewArray", Func, 5, "func(elem Type, len int64) *Array"},
+		{"NewChan", Func, 5, "func(dir ChanDir, elem Type) *Chan"},
+		{"NewChecker", Func, 5, "func(conf *Config, fset *token.FileSet, pkg *Package, info *Info) *Checker"},
+		{"NewConst", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type, val constant.Value) *Const"},
+		{"NewContext", Func, 18, "func() *Context"},
+		{"NewField", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type, embedded bool) *Var"},
+		{"NewFunc", Func, 5, "func(pos token.Pos, pkg *Package, name string, sig *Signature) *Func"},
+		{"NewInterface", Func, 5, "func(methods []*Func, embeddeds []*Named) *Interface"},
+		{"NewInterfaceType", Func, 11, "func(methods []*Func, embeddeds []Type) *Interface"},
+		{"NewLabel", Func, 5, "func(pos token.Pos, pkg *Package, name string) *Label"},
+		{"NewMap", Func, 5, "func(key Type, elem Type) *Map"},
+		{"NewMethodSet", Func, 5, "func(T Type) *MethodSet"},
+		{"NewNamed", Func, 5, "func(obj *TypeName, underlying Type, methods []*Func) *Named"},
+		{"NewPackage", Func, 5, "func(path string, name string) *Package"},
+		{"NewParam", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type) *Var"},
+		{"NewPkgName", Func, 5, "func(pos token.Pos, pkg *Package, name string, imported *Package) *PkgName"},
+		{"NewPointer", Func, 5, "func(elem Type) *Pointer"},
+		{"NewScope", Func, 5, "func(parent *Scope, pos token.Pos, end token.Pos, comment string) *Scope"},
+		{"NewSignature", Func, 5, "func(recv *Var, params *Tuple, results *Tuple, variadic bool) *Signature"},
+		{"NewSignatureType", Func, 18, "func(recv *Var, recvTypeParams []*TypeParam, typeParams []*TypeParam, params *Tuple, results *Tuple, variadic bool) *Signature"},
+		{"NewSlice", Func, 5, "func(elem Type) *Slice"},
+		{"NewStruct", Func, 5, "func(fields []*Var, tags []string) *Struct"},
+		{"NewTerm", Func, 18, "func(tilde bool, typ Type) *Term"},
+		{"NewTuple", Func, 5, "func(x ...*Var) *Tuple"},
+		{"NewTypeName", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type) *TypeName"},
+		{"NewTypeParam", Func, 18, "func(obj *TypeName, constraint Type) *TypeParam"},
+		{"NewUnion", Func, 18, "func(terms []*Term) *Union"},
+		{"NewVar", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type) *Var"},
+		{"Nil", Type, 5, ""},
+		{"Object", Type, 5, ""},
+		{"ObjectString", Func, 5, "func(obj Object, qf Qualifier) string"},
+		{"Package", Type, 5, ""},
+		{"PackageVar", Const, 25, ""},
+		{"ParamVar", Const, 25, ""},
+		{"PkgName", Type, 5, ""},
+		{"Pointer", Type, 5, ""},
+		{"Qualifier", Type, 5, ""},
+		{"RecvOnly", Const, 5, ""},
+		{"RecvVar", Const, 25, ""},
+		{"RelativeTo", Func, 5, "func(pkg *Package) Qualifier"},
+		{"ResultVar", Const, 25, ""},
+		{"Rune", Const, 5, ""},
+		{"Satisfies", Func, 20, "func(V Type, T *Interface) bool"},
+		{"Scope", Type, 5, ""},
+		{"Selection", Type, 5, ""},
+		{"SelectionKind", Type, 5, ""},
+		{"SelectionString", Func, 5, "func(s *Selection, qf Qualifier) string"},
+		{"SendOnly", Const, 5, ""},
+		{"SendRecv", Const, 5, ""},
+		{"Signature", Type, 5, ""},
+		{"Sizes", Type, 5, ""},
+		{"SizesFor", Func, 9, "func(compiler string, arch string) Sizes"},
+		{"Slice", Type, 5, ""},
+		{"StdSizes", Type, 5, ""},
+		{"StdSizes.MaxAlign", Field, 5, ""},
+		{"StdSizes.WordSize", Field, 5, ""},
+		{"String", Const, 5, ""},
+		{"Struct", Type, 5, ""},
+		{"Term", Type, 18, ""},
+		{"Tuple", Type, 5, ""},
+		{"Typ", Var, 5, ""},
+		{"Type", Type, 5, ""},
+		{"TypeAndValue", Type, 5, ""},
+		{"TypeAndValue.Type", Field, 5, ""},
+		{"TypeAndValue.Value", Field, 5, ""},
+		{"TypeList", Type, 18, ""},
+		{"TypeName", Type, 5, ""},
+		{"TypeParam", Type, 18, ""},
+		{"TypeParamList", Type, 18, ""},
+		{"TypeString", Func, 5, "func(typ Type, qf Qualifier) string"},
+		{"Uint", Const, 5, ""},
+		{"Uint16", Const, 5, ""},
+		{"Uint32", Const, 5, ""},
+		{"Uint64", Const, 5, ""},
+		{"Uint8", Const, 5, ""},
+		{"Uintptr", Const, 5, ""},
+		{"Unalias", Func, 22, "func(t Type) Type"},
+		{"Union", Type, 18, ""},
+		{"Universe", Var, 5, ""},
+		{"Unsafe", Var, 5, ""},
+		{"UnsafePointer", Const, 5, ""},
+		{"UntypedBool", Const, 5, ""},
+		{"UntypedComplex", Const, 5, ""},
+		{"UntypedFloat", Const, 5, ""},
+		{"UntypedInt", Const, 5, ""},
+		{"UntypedNil", Const, 5, ""},
+		{"UntypedRune", Const, 5, ""},
+		{"UntypedString", Const, 5, ""},
+		{"Var", Type, 5, ""},
+		{"VarKind", Type, 25, ""},
+		{"WriteExpr", Func, 5, "func(buf *bytes.Buffer, x ast.Expr)"},
+		{"WriteSignature", Func, 5, "func(buf *bytes.Buffer, sig *Signature, qf Qualifier)"},
+		{"WriteType", Func, 5, "func(buf *bytes.Buffer, typ Type, qf Qualifier)"},
 	},
 	"go/version": {
-		{"Compare", Func, 22},
-		{"IsValid", Func, 22},
-		{"Lang", Func, 22},
+		{"Compare", Func, 22, "func(x string, y string) int"},
+		{"IsValid", Func, 22, "func(x string) bool"},
+		{"Lang", Func, 22, "func(x string) string"},
 	},
 	"hash": {
-		{"Hash", Type, 0},
-		{"Hash32", Type, 0},
-		{"Hash64", Type, 0},
+		{"Hash", Type, 0, ""},
+		{"Hash32", Type, 0, ""},
+		{"Hash64", Type, 0, ""},
 	},
 	"hash/adler32": {
-		{"Checksum", Func, 0},
-		{"New", Func, 0},
-		{"Size", Const, 0},
+		{"Checksum", Func, 0, "func(data []byte) uint32"},
+		{"New", Func, 0, "func() hash.Hash32"},
+		{"Size", Const, 0, ""},
 	},
 	"hash/crc32": {
-		{"Castagnoli", Const, 0},
-		{"Checksum", Func, 0},
-		{"ChecksumIEEE", Func, 0},
-		{"IEEE", Const, 0},
-		{"IEEETable", Var, 0},
-		{"Koopman", Const, 0},
-		{"MakeTable", Func, 0},
-		{"New", Func, 0},
-		{"NewIEEE", Func, 0},
-		{"Size", Const, 0},
-		{"Table", Type, 0},
-		{"Update", Func, 0},
+		{"Castagnoli", Const, 0, ""},
+		{"Checksum", Func, 0, "func(data []byte, tab *Table) uint32"},
+		{"ChecksumIEEE", Func, 0, "func(data []byte) uint32"},
+		{"IEEE", Const, 0, ""},
+		{"IEEETable", Var, 0, ""},
+		{"Koopman", Const, 0, ""},
+		{"MakeTable", Func, 0, "func(poly uint32) *Table"},
+		{"New", Func, 0, "func(tab *Table) hash.Hash32"},
+		{"NewIEEE", Func, 0, "func() hash.Hash32"},
+		{"Size", Const, 0, ""},
+		{"Table", Type, 0, ""},
+		{"Update", Func, 0, "func(crc uint32, tab *Table, p []byte) uint32"},
 	},
 	"hash/crc64": {
-		{"Checksum", Func, 0},
-		{"ECMA", Const, 0},
-		{"ISO", Const, 0},
-		{"MakeTable", Func, 0},
-		{"New", Func, 0},
-		{"Size", Const, 0},
-		{"Table", Type, 0},
-		{"Update", Func, 0},
+		{"Checksum", Func, 0, "func(data []byte, tab *Table) uint64"},
+		{"ECMA", Const, 0, ""},
+		{"ISO", Const, 0, ""},
+		{"MakeTable", Func, 0, "func(poly uint64) *Table"},
+		{"New", Func, 0, "func(tab *Table) hash.Hash64"},
+		{"Size", Const, 0, ""},
+		{"Table", Type, 0, ""},
+		{"Update", Func, 0, "func(crc uint64, tab *Table, p []byte) uint64"},
 	},
 	"hash/fnv": {
-		{"New128", Func, 9},
-		{"New128a", Func, 9},
-		{"New32", Func, 0},
-		{"New32a", Func, 0},
-		{"New64", Func, 0},
-		{"New64a", Func, 0},
+		{"New128", Func, 9, "func() hash.Hash"},
+		{"New128a", Func, 9, "func() hash.Hash"},
+		{"New32", Func, 0, "func() hash.Hash32"},
+		{"New32a", Func, 0, "func() hash.Hash32"},
+		{"New64", Func, 0, "func() hash.Hash64"},
+		{"New64a", Func, 0, "func() hash.Hash64"},
 	},
 	"hash/maphash": {
-		{"(*Hash).BlockSize", Method, 14},
-		{"(*Hash).Reset", Method, 14},
-		{"(*Hash).Seed", Method, 14},
-		{"(*Hash).SetSeed", Method, 14},
-		{"(*Hash).Size", Method, 14},
-		{"(*Hash).Sum", Method, 14},
-		{"(*Hash).Sum64", Method, 14},
-		{"(*Hash).Write", Method, 14},
-		{"(*Hash).WriteByte", Method, 14},
-		{"(*Hash).WriteString", Method, 14},
-		{"Bytes", Func, 19},
-		{"Comparable", Func, 24},
-		{"Hash", Type, 14},
-		{"MakeSeed", Func, 14},
-		{"Seed", Type, 14},
-		{"String", Func, 19},
-		{"WriteComparable", Func, 24},
+		{"(*Hash).BlockSize", Method, 14, ""},
+		{"(*Hash).Reset", Method, 14, ""},
+		{"(*Hash).Seed", Method, 14, ""},
+		{"(*Hash).SetSeed", Method, 14, ""},
+		{"(*Hash).Size", Method, 14, ""},
+		{"(*Hash).Sum", Method, 14, ""},
+		{"(*Hash).Sum64", Method, 14, ""},
+		{"(*Hash).Write", Method, 14, ""},
+		{"(*Hash).WriteByte", Method, 14, ""},
+		{"(*Hash).WriteString", Method, 14, ""},
+		{"Bytes", Func, 19, "func(seed Seed, b []byte) uint64"},
+		{"Comparable", Func, 24, "func[T comparable](seed Seed, v T) uint64"},
+		{"Hash", Type, 14, ""},
+		{"MakeSeed", Func, 14, "func() Seed"},
+		{"Seed", Type, 14, ""},
+		{"String", Func, 19, "func(seed Seed, s string) uint64"},
+		{"WriteComparable", Func, 24, "func[T comparable](h *Hash, x T)"},
 	},
 	"html": {
-		{"EscapeString", Func, 0},
-		{"UnescapeString", Func, 0},
+		{"EscapeString", Func, 0, "func(s string) string"},
+		{"UnescapeString", Func, 0, "func(s string) string"},
 	},
 	"html/template": {
-		{"(*Error).Error", Method, 0},
-		{"(*Template).AddParseTree", Method, 0},
-		{"(*Template).Clone", Method, 0},
-		{"(*Template).DefinedTemplates", Method, 6},
-		{"(*Template).Delims", Method, 0},
-		{"(*Template).Execute", Method, 0},
-		{"(*Template).ExecuteTemplate", Method, 0},
-		{"(*Template).Funcs", Method, 0},
-		{"(*Template).Lookup", Method, 0},
-		{"(*Template).Name", Method, 0},
-		{"(*Template).New", Method, 0},
-		{"(*Template).Option", Method, 5},
-		{"(*Template).Parse", Method, 0},
-		{"(*Template).ParseFS", Method, 16},
-		{"(*Template).ParseFiles", Method, 0},
-		{"(*Template).ParseGlob", Method, 0},
-		{"(*Template).Templates", Method, 0},
-		{"CSS", Type, 0},
-		{"ErrAmbigContext", Const, 0},
-		{"ErrBadHTML", Const, 0},
-		{"ErrBranchEnd", Const, 0},
-		{"ErrEndContext", Const, 0},
-		{"ErrJSTemplate", Const, 21},
-		{"ErrNoSuchTemplate", Const, 0},
-		{"ErrOutputContext", Const, 0},
-		{"ErrPartialCharset", Const, 0},
-		{"ErrPartialEscape", Const, 0},
-		{"ErrPredefinedEscaper", Const, 9},
-		{"ErrRangeLoopReentry", Const, 0},
-		{"ErrSlashAmbig", Const, 0},
-		{"Error", Type, 0},
-		{"Error.Description", Field, 0},
-		{"Error.ErrorCode", Field, 0},
-		{"Error.Line", Field, 0},
-		{"Error.Name", Field, 0},
-		{"Error.Node", Field, 4},
-		{"ErrorCode", Type, 0},
-		{"FuncMap", Type, 0},
-		{"HTML", Type, 0},
-		{"HTMLAttr", Type, 0},
-		{"HTMLEscape", Func, 0},
-		{"HTMLEscapeString", Func, 0},
-		{"HTMLEscaper", Func, 0},
-		{"IsTrue", Func, 6},
-		{"JS", Type, 0},
-		{"JSEscape", Func, 0},
-		{"JSEscapeString", Func, 0},
-		{"JSEscaper", Func, 0},
-		{"JSStr", Type, 0},
-		{"Must", Func, 0},
-		{"New", Func, 0},
-		{"OK", Const, 0},
-		{"ParseFS", Func, 16},
-		{"ParseFiles", Func, 0},
-		{"ParseGlob", Func, 0},
-		{"Srcset", Type, 10},
-		{"Template", Type, 0},
-		{"Template.Tree", Field, 2},
-		{"URL", Type, 0},
-		{"URLQueryEscaper", Func, 0},
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Template).AddParseTree", Method, 0, ""},
+		{"(*Template).Clone", Method, 0, ""},
+		{"(*Template).DefinedTemplates", Method, 6, ""},
+		{"(*Template).Delims", Method, 0, ""},
+		{"(*Template).Execute", Method, 0, ""},
+		{"(*Template).ExecuteTemplate", Method, 0, ""},
+		{"(*Template).Funcs", Method, 0, ""},
+		{"(*Template).Lookup", Method, 0, ""},
+		{"(*Template).Name", Method, 0, ""},
+		{"(*Template).New", Method, 0, ""},
+		{"(*Template).Option", Method, 5, ""},
+		{"(*Template).Parse", Method, 0, ""},
+		{"(*Template).ParseFS", Method, 16, ""},
+		{"(*Template).ParseFiles", Method, 0, ""},
+		{"(*Template).ParseGlob", Method, 0, ""},
+		{"(*Template).Templates", Method, 0, ""},
+		{"CSS", Type, 0, ""},
+		{"ErrAmbigContext", Const, 0, ""},
+		{"ErrBadHTML", Const, 0, ""},
+		{"ErrBranchEnd", Const, 0, ""},
+		{"ErrEndContext", Const, 0, ""},
+		{"ErrJSTemplate", Const, 21, ""},
+		{"ErrNoSuchTemplate", Const, 0, ""},
+		{"ErrOutputContext", Const, 0, ""},
+		{"ErrPartialCharset", Const, 0, ""},
+		{"ErrPartialEscape", Const, 0, ""},
+		{"ErrPredefinedEscaper", Const, 9, ""},
+		{"ErrRangeLoopReentry", Const, 0, ""},
+		{"ErrSlashAmbig", Const, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Description", Field, 0, ""},
+		{"Error.ErrorCode", Field, 0, ""},
+		{"Error.Line", Field, 0, ""},
+		{"Error.Name", Field, 0, ""},
+		{"Error.Node", Field, 4, ""},
+		{"ErrorCode", Type, 0, ""},
+		{"FuncMap", Type, 0, ""},
+		{"HTML", Type, 0, ""},
+		{"HTMLAttr", Type, 0, ""},
+		{"HTMLEscape", Func, 0, "func(w io.Writer, b []byte)"},
+		{"HTMLEscapeString", Func, 0, "func(s string) string"},
+		{"HTMLEscaper", Func, 0, "func(args ...any) string"},
+		{"IsTrue", Func, 6, "func(val any) (truth bool, ok bool)"},
+		{"JS", Type, 0, ""},
+		{"JSEscape", Func, 0, "func(w io.Writer, b []byte)"},
+		{"JSEscapeString", Func, 0, "func(s string) string"},
+		{"JSEscaper", Func, 0, "func(args ...any) string"},
+		{"JSStr", Type, 0, ""},
+		{"Must", Func, 0, "func(t *Template, err error) *Template"},
+		{"New", Func, 0, "func(name string) *Template"},
+		{"OK", Const, 0, ""},
+		{"ParseFS", Func, 16, "func(fs fs.FS, patterns ...string) (*Template, error)"},
+		{"ParseFiles", Func, 0, "func(filenames ...string) (*Template, error)"},
+		{"ParseGlob", Func, 0, "func(pattern string) (*Template, error)"},
+		{"Srcset", Type, 10, ""},
+		{"Template", Type, 0, ""},
+		{"Template.Tree", Field, 2, ""},
+		{"URL", Type, 0, ""},
+		{"URLQueryEscaper", Func, 0, "func(args ...any) string"},
 	},
 	"image": {
-		{"(*Alpha).AlphaAt", Method, 4},
-		{"(*Alpha).At", Method, 0},
-		{"(*Alpha).Bounds", Method, 0},
-		{"(*Alpha).ColorModel", Method, 0},
-		{"(*Alpha).Opaque", Method, 0},
-		{"(*Alpha).PixOffset", Method, 0},
-		{"(*Alpha).RGBA64At", Method, 17},
-		{"(*Alpha).Set", Method, 0},
-		{"(*Alpha).SetAlpha", Method, 0},
-		{"(*Alpha).SetRGBA64", Method, 17},
-		{"(*Alpha).SubImage", Method, 0},
-		{"(*Alpha16).Alpha16At", Method, 4},
-		{"(*Alpha16).At", Method, 0},
-		{"(*Alpha16).Bounds", Method, 0},
-		{"(*Alpha16).ColorModel", Method, 0},
-		{"(*Alpha16).Opaque", Method, 0},
-		{"(*Alpha16).PixOffset", Method, 0},
-		{"(*Alpha16).RGBA64At", Method, 17},
-		{"(*Alpha16).Set", Method, 0},
-		{"(*Alpha16).SetAlpha16", Method, 0},
-		{"(*Alpha16).SetRGBA64", Method, 17},
-		{"(*Alpha16).SubImage", Method, 0},
-		{"(*CMYK).At", Method, 5},
-		{"(*CMYK).Bounds", Method, 5},
-		{"(*CMYK).CMYKAt", Method, 5},
-		{"(*CMYK).ColorModel", Method, 5},
-		{"(*CMYK).Opaque", Method, 5},
-		{"(*CMYK).PixOffset", Method, 5},
-		{"(*CMYK).RGBA64At", Method, 17},
-		{"(*CMYK).Set", Method, 5},
-		{"(*CMYK).SetCMYK", Method, 5},
-		{"(*CMYK).SetRGBA64", Method, 17},
-		{"(*CMYK).SubImage", Method, 5},
-		{"(*Gray).At", Method, 0},
-		{"(*Gray).Bounds", Method, 0},
-		{"(*Gray).ColorModel", Method, 0},
-		{"(*Gray).GrayAt", Method, 4},
-		{"(*Gray).Opaque", Method, 0},
-		{"(*Gray).PixOffset", Method, 0},
-		{"(*Gray).RGBA64At", Method, 17},
-		{"(*Gray).Set", Method, 0},
-		{"(*Gray).SetGray", Method, 0},
-		{"(*Gray).SetRGBA64", Method, 17},
-		{"(*Gray).SubImage", Method, 0},
-		{"(*Gray16).At", Method, 0},
-		{"(*Gray16).Bounds", Method, 0},
-		{"(*Gray16).ColorModel", Method, 0},
-		{"(*Gray16).Gray16At", Method, 4},
-		{"(*Gray16).Opaque", Method, 0},
-		{"(*Gray16).PixOffset", Method, 0},
-		{"(*Gray16).RGBA64At", Method, 17},
-		{"(*Gray16).Set", Method, 0},
-		{"(*Gray16).SetGray16", Method, 0},
-		{"(*Gray16).SetRGBA64", Method, 17},
-		{"(*Gray16).SubImage", Method, 0},
-		{"(*NRGBA).At", Method, 0},
-		{"(*NRGBA).Bounds", Method, 0},
-		{"(*NRGBA).ColorModel", Method, 0},
-		{"(*NRGBA).NRGBAAt", Method, 4},
-		{"(*NRGBA).Opaque", Method, 0},
-		{"(*NRGBA).PixOffset", Method, 0},
-		{"(*NRGBA).RGBA64At", Method, 17},
-		{"(*NRGBA).Set", Method, 0},
-		{"(*NRGBA).SetNRGBA", Method, 0},
-		{"(*NRGBA).SetRGBA64", Method, 17},
-		{"(*NRGBA).SubImage", Method, 0},
-		{"(*NRGBA64).At", Method, 0},
-		{"(*NRGBA64).Bounds", Method, 0},
-		{"(*NRGBA64).ColorModel", Method, 0},
-		{"(*NRGBA64).NRGBA64At", Method, 4},
-		{"(*NRGBA64).Opaque", Method, 0},
-		{"(*NRGBA64).PixOffset", Method, 0},
-		{"(*NRGBA64).RGBA64At", Method, 17},
-		{"(*NRGBA64).Set", Method, 0},
-		{"(*NRGBA64).SetNRGBA64", Method, 0},
-		{"(*NRGBA64).SetRGBA64", Method, 17},
-		{"(*NRGBA64).SubImage", Method, 0},
-		{"(*NYCbCrA).AOffset", Method, 6},
-		{"(*NYCbCrA).At", Method, 6},
-		{"(*NYCbCrA).Bounds", Method, 6},
-		{"(*NYCbCrA).COffset", Method, 6},
-		{"(*NYCbCrA).ColorModel", Method, 6},
-		{"(*NYCbCrA).NYCbCrAAt", Method, 6},
-		{"(*NYCbCrA).Opaque", Method, 6},
-		{"(*NYCbCrA).RGBA64At", Method, 17},
-		{"(*NYCbCrA).SubImage", Method, 6},
-		{"(*NYCbCrA).YCbCrAt", Method, 6},
-		{"(*NYCbCrA).YOffset", Method, 6},
-		{"(*Paletted).At", Method, 0},
-		{"(*Paletted).Bounds", Method, 0},
-		{"(*Paletted).ColorIndexAt", Method, 0},
-		{"(*Paletted).ColorModel", Method, 0},
-		{"(*Paletted).Opaque", Method, 0},
-		{"(*Paletted).PixOffset", Method, 0},
-		{"(*Paletted).RGBA64At", Method, 17},
-		{"(*Paletted).Set", Method, 0},
-		{"(*Paletted).SetColorIndex", Method, 0},
-		{"(*Paletted).SetRGBA64", Method, 17},
-		{"(*Paletted).SubImage", Method, 0},
-		{"(*RGBA).At", Method, 0},
-		{"(*RGBA).Bounds", Method, 0},
-		{"(*RGBA).ColorModel", Method, 0},
-		{"(*RGBA).Opaque", Method, 0},
-		{"(*RGBA).PixOffset", Method, 0},
-		{"(*RGBA).RGBA64At", Method, 17},
-		{"(*RGBA).RGBAAt", Method, 4},
-		{"(*RGBA).Set", Method, 0},
-		{"(*RGBA).SetRGBA", Method, 0},
-		{"(*RGBA).SetRGBA64", Method, 17},
-		{"(*RGBA).SubImage", Method, 0},
-		{"(*RGBA64).At", Method, 0},
-		{"(*RGBA64).Bounds", Method, 0},
-		{"(*RGBA64).ColorModel", Method, 0},
-		{"(*RGBA64).Opaque", Method, 0},
-		{"(*RGBA64).PixOffset", Method, 0},
-		{"(*RGBA64).RGBA64At", Method, 4},
-		{"(*RGBA64).Set", Method, 0},
-		{"(*RGBA64).SetRGBA64", Method, 0},
-		{"(*RGBA64).SubImage", Method, 0},
-		{"(*Uniform).At", Method, 0},
-		{"(*Uniform).Bounds", Method, 0},
-		{"(*Uniform).ColorModel", Method, 0},
-		{"(*Uniform).Convert", Method, 0},
-		{"(*Uniform).Opaque", Method, 0},
-		{"(*Uniform).RGBA", Method, 0},
-		{"(*Uniform).RGBA64At", Method, 17},
-		{"(*YCbCr).At", Method, 0},
-		{"(*YCbCr).Bounds", Method, 0},
-		{"(*YCbCr).COffset", Method, 0},
-		{"(*YCbCr).ColorModel", Method, 0},
-		{"(*YCbCr).Opaque", Method, 0},
-		{"(*YCbCr).RGBA64At", Method, 17},
-		{"(*YCbCr).SubImage", Method, 0},
-		{"(*YCbCr).YCbCrAt", Method, 4},
-		{"(*YCbCr).YOffset", Method, 0},
-		{"(Point).Add", Method, 0},
-		{"(Point).Div", Method, 0},
-		{"(Point).Eq", Method, 0},
-		{"(Point).In", Method, 0},
-		{"(Point).Mod", Method, 0},
-		{"(Point).Mul", Method, 0},
-		{"(Point).String", Method, 0},
-		{"(Point).Sub", Method, 0},
-		{"(Rectangle).Add", Method, 0},
-		{"(Rectangle).At", Method, 5},
-		{"(Rectangle).Bounds", Method, 5},
-		{"(Rectangle).Canon", Method, 0},
-		{"(Rectangle).ColorModel", Method, 5},
-		{"(Rectangle).Dx", Method, 0},
-		{"(Rectangle).Dy", Method, 0},
-		{"(Rectangle).Empty", Method, 0},
-		{"(Rectangle).Eq", Method, 0},
-		{"(Rectangle).In", Method, 0},
-		{"(Rectangle).Inset", Method, 0},
-		{"(Rectangle).Intersect", Method, 0},
-		{"(Rectangle).Overlaps", Method, 0},
-		{"(Rectangle).RGBA64At", Method, 17},
-		{"(Rectangle).Size", Method, 0},
-		{"(Rectangle).String", Method, 0},
-		{"(Rectangle).Sub", Method, 0},
-		{"(Rectangle).Union", Method, 0},
-		{"(YCbCrSubsampleRatio).String", Method, 0},
-		{"Alpha", Type, 0},
-		{"Alpha.Pix", Field, 0},
-		{"Alpha.Rect", Field, 0},
-		{"Alpha.Stride", Field, 0},
-		{"Alpha16", Type, 0},
-		{"Alpha16.Pix", Field, 0},
-		{"Alpha16.Rect", Field, 0},
-		{"Alpha16.Stride", Field, 0},
-		{"Black", Var, 0},
-		{"CMYK", Type, 5},
-		{"CMYK.Pix", Field, 5},
-		{"CMYK.Rect", Field, 5},
-		{"CMYK.Stride", Field, 5},
-		{"Config", Type, 0},
-		{"Config.ColorModel", Field, 0},
-		{"Config.Height", Field, 0},
-		{"Config.Width", Field, 0},
-		{"Decode", Func, 0},
-		{"DecodeConfig", Func, 0},
-		{"ErrFormat", Var, 0},
-		{"Gray", Type, 0},
-		{"Gray.Pix", Field, 0},
-		{"Gray.Rect", Field, 0},
-		{"Gray.Stride", Field, 0},
-		{"Gray16", Type, 0},
-		{"Gray16.Pix", Field, 0},
-		{"Gray16.Rect", Field, 0},
-		{"Gray16.Stride", Field, 0},
-		{"Image", Type, 0},
-		{"NRGBA", Type, 0},
-		{"NRGBA.Pix", Field, 0},
-		{"NRGBA.Rect", Field, 0},
-		{"NRGBA.Stride", Field, 0},
-		{"NRGBA64", Type, 0},
-		{"NRGBA64.Pix", Field, 0},
-		{"NRGBA64.Rect", Field, 0},
-		{"NRGBA64.Stride", Field, 0},
-		{"NYCbCrA", Type, 6},
-		{"NYCbCrA.A", Field, 6},
-		{"NYCbCrA.AStride", Field, 6},
-		{"NYCbCrA.YCbCr", Field, 6},
-		{"NewAlpha", Func, 0},
-		{"NewAlpha16", Func, 0},
-		{"NewCMYK", Func, 5},
-		{"NewGray", Func, 0},
-		{"NewGray16", Func, 0},
-		{"NewNRGBA", Func, 0},
-		{"NewNRGBA64", Func, 0},
-		{"NewNYCbCrA", Func, 6},
-		{"NewPaletted", Func, 0},
-		{"NewRGBA", Func, 0},
-		{"NewRGBA64", Func, 0},
-		{"NewUniform", Func, 0},
-		{"NewYCbCr", Func, 0},
-		{"Opaque", Var, 0},
-		{"Paletted", Type, 0},
-		{"Paletted.Palette", Field, 0},
-		{"Paletted.Pix", Field, 0},
-		{"Paletted.Rect", Field, 0},
-		{"Paletted.Stride", Field, 0},
-		{"PalettedImage", Type, 0},
-		{"Point", Type, 0},
-		{"Point.X", Field, 0},
-		{"Point.Y", Field, 0},
-		{"Pt", Func, 0},
-		{"RGBA", Type, 0},
-		{"RGBA.Pix", Field, 0},
-		{"RGBA.Rect", Field, 0},
-		{"RGBA.Stride", Field, 0},
-		{"RGBA64", Type, 0},
-		{"RGBA64.Pix", Field, 0},
-		{"RGBA64.Rect", Field, 0},
-		{"RGBA64.Stride", Field, 0},
-		{"RGBA64Image", Type, 17},
-		{"Rect", Func, 0},
-		{"Rectangle", Type, 0},
-		{"Rectangle.Max", Field, 0},
-		{"Rectangle.Min", Field, 0},
-		{"RegisterFormat", Func, 0},
-		{"Transparent", Var, 0},
-		{"Uniform", Type, 0},
-		{"Uniform.C", Field, 0},
-		{"White", Var, 0},
-		{"YCbCr", Type, 0},
-		{"YCbCr.CStride", Field, 0},
-		{"YCbCr.Cb", Field, 0},
-		{"YCbCr.Cr", Field, 0},
-		{"YCbCr.Rect", Field, 0},
-		{"YCbCr.SubsampleRatio", Field, 0},
-		{"YCbCr.Y", Field, 0},
-		{"YCbCr.YStride", Field, 0},
-		{"YCbCrSubsampleRatio", Type, 0},
-		{"YCbCrSubsampleRatio410", Const, 5},
-		{"YCbCrSubsampleRatio411", Const, 5},
-		{"YCbCrSubsampleRatio420", Const, 0},
-		{"YCbCrSubsampleRatio422", Const, 0},
-		{"YCbCrSubsampleRatio440", Const, 1},
-		{"YCbCrSubsampleRatio444", Const, 0},
-		{"ZP", Var, 0},
-		{"ZR", Var, 0},
+		{"(*Alpha).AlphaAt", Method, 4, ""},
+		{"(*Alpha).At", Method, 0, ""},
+		{"(*Alpha).Bounds", Method, 0, ""},
+		{"(*Alpha).ColorModel", Method, 0, ""},
+		{"(*Alpha).Opaque", Method, 0, ""},
+		{"(*Alpha).PixOffset", Method, 0, ""},
+		{"(*Alpha).RGBA64At", Method, 17, ""},
+		{"(*Alpha).Set", Method, 0, ""},
+		{"(*Alpha).SetAlpha", Method, 0, ""},
+		{"(*Alpha).SetRGBA64", Method, 17, ""},
+		{"(*Alpha).SubImage", Method, 0, ""},
+		{"(*Alpha16).Alpha16At", Method, 4, ""},
+		{"(*Alpha16).At", Method, 0, ""},
+		{"(*Alpha16).Bounds", Method, 0, ""},
+		{"(*Alpha16).ColorModel", Method, 0, ""},
+		{"(*Alpha16).Opaque", Method, 0, ""},
+		{"(*Alpha16).PixOffset", Method, 0, ""},
+		{"(*Alpha16).RGBA64At", Method, 17, ""},
+		{"(*Alpha16).Set", Method, 0, ""},
+		{"(*Alpha16).SetAlpha16", Method, 0, ""},
+		{"(*Alpha16).SetRGBA64", Method, 17, ""},
+		{"(*Alpha16).SubImage", Method, 0, ""},
+		{"(*CMYK).At", Method, 5, ""},
+		{"(*CMYK).Bounds", Method, 5, ""},
+		{"(*CMYK).CMYKAt", Method, 5, ""},
+		{"(*CMYK).ColorModel", Method, 5, ""},
+		{"(*CMYK).Opaque", Method, 5, ""},
+		{"(*CMYK).PixOffset", Method, 5, ""},
+		{"(*CMYK).RGBA64At", Method, 17, ""},
+		{"(*CMYK).Set", Method, 5, ""},
+		{"(*CMYK).SetCMYK", Method, 5, ""},
+		{"(*CMYK).SetRGBA64", Method, 17, ""},
+		{"(*CMYK).SubImage", Method, 5, ""},
+		{"(*Gray).At", Method, 0, ""},
+		{"(*Gray).Bounds", Method, 0, ""},
+		{"(*Gray).ColorModel", Method, 0, ""},
+		{"(*Gray).GrayAt", Method, 4, ""},
+		{"(*Gray).Opaque", Method, 0, ""},
+		{"(*Gray).PixOffset", Method, 0, ""},
+		{"(*Gray).RGBA64At", Method, 17, ""},
+		{"(*Gray).Set", Method, 0, ""},
+		{"(*Gray).SetGray", Method, 0, ""},
+		{"(*Gray).SetRGBA64", Method, 17, ""},
+		{"(*Gray).SubImage", Method, 0, ""},
+		{"(*Gray16).At", Method, 0, ""},
+		{"(*Gray16).Bounds", Method, 0, ""},
+		{"(*Gray16).ColorModel", Method, 0, ""},
+		{"(*Gray16).Gray16At", Method, 4, ""},
+		{"(*Gray16).Opaque", Method, 0, ""},
+		{"(*Gray16).PixOffset", Method, 0, ""},
+		{"(*Gray16).RGBA64At", Method, 17, ""},
+		{"(*Gray16).Set", Method, 0, ""},
+		{"(*Gray16).SetGray16", Method, 0, ""},
+		{"(*Gray16).SetRGBA64", Method, 17, ""},
+		{"(*Gray16).SubImage", Method, 0, ""},
+		{"(*NRGBA).At", Method, 0, ""},
+		{"(*NRGBA).Bounds", Method, 0, ""},
+		{"(*NRGBA).ColorModel", Method, 0, ""},
+		{"(*NRGBA).NRGBAAt", Method, 4, ""},
+		{"(*NRGBA).Opaque", Method, 0, ""},
+		{"(*NRGBA).PixOffset", Method, 0, ""},
+		{"(*NRGBA).RGBA64At", Method, 17, ""},
+		{"(*NRGBA).Set", Method, 0, ""},
+		{"(*NRGBA).SetNRGBA", Method, 0, ""},
+		{"(*NRGBA).SetRGBA64", Method, 17, ""},
+		{"(*NRGBA).SubImage", Method, 0, ""},
+		{"(*NRGBA64).At", Method, 0, ""},
+		{"(*NRGBA64).Bounds", Method, 0, ""},
+		{"(*NRGBA64).ColorModel", Method, 0, ""},
+		{"(*NRGBA64).NRGBA64At", Method, 4, ""},
+		{"(*NRGBA64).Opaque", Method, 0, ""},
+		{"(*NRGBA64).PixOffset", Method, 0, ""},
+		{"(*NRGBA64).RGBA64At", Method, 17, ""},
+		{"(*NRGBA64).Set", Method, 0, ""},
+		{"(*NRGBA64).SetNRGBA64", Method, 0, ""},
+		{"(*NRGBA64).SetRGBA64", Method, 17, ""},
+		{"(*NRGBA64).SubImage", Method, 0, ""},
+		{"(*NYCbCrA).AOffset", Method, 6, ""},
+		{"(*NYCbCrA).At", Method, 6, ""},
+		{"(*NYCbCrA).Bounds", Method, 6, ""},
+		{"(*NYCbCrA).COffset", Method, 6, ""},
+		{"(*NYCbCrA).ColorModel", Method, 6, ""},
+		{"(*NYCbCrA).NYCbCrAAt", Method, 6, ""},
+		{"(*NYCbCrA).Opaque", Method, 6, ""},
+		{"(*NYCbCrA).RGBA64At", Method, 17, ""},
+		{"(*NYCbCrA).SubImage", Method, 6, ""},
+		{"(*NYCbCrA).YCbCrAt", Method, 6, ""},
+		{"(*NYCbCrA).YOffset", Method, 6, ""},
+		{"(*Paletted).At", Method, 0, ""},
+		{"(*Paletted).Bounds", Method, 0, ""},
+		{"(*Paletted).ColorIndexAt", Method, 0, ""},
+		{"(*Paletted).ColorModel", Method, 0, ""},
+		{"(*Paletted).Opaque", Method, 0, ""},
+		{"(*Paletted).PixOffset", Method, 0, ""},
+		{"(*Paletted).RGBA64At", Method, 17, ""},
+		{"(*Paletted).Set", Method, 0, ""},
+		{"(*Paletted).SetColorIndex", Method, 0, ""},
+		{"(*Paletted).SetRGBA64", Method, 17, ""},
+		{"(*Paletted).SubImage", Method, 0, ""},
+		{"(*RGBA).At", Method, 0, ""},
+		{"(*RGBA).Bounds", Method, 0, ""},
+		{"(*RGBA).ColorModel", Method, 0, ""},
+		{"(*RGBA).Opaque", Method, 0, ""},
+		{"(*RGBA).PixOffset", Method, 0, ""},
+		{"(*RGBA).RGBA64At", Method, 17, ""},
+		{"(*RGBA).RGBAAt", Method, 4, ""},
+		{"(*RGBA).Set", Method, 0, ""},
+		{"(*RGBA).SetRGBA", Method, 0, ""},
+		{"(*RGBA).SetRGBA64", Method, 17, ""},
+		{"(*RGBA).SubImage", Method, 0, ""},
+		{"(*RGBA64).At", Method, 0, ""},
+		{"(*RGBA64).Bounds", Method, 0, ""},
+		{"(*RGBA64).ColorModel", Method, 0, ""},
+		{"(*RGBA64).Opaque", Method, 0, ""},
+		{"(*RGBA64).PixOffset", Method, 0, ""},
+		{"(*RGBA64).RGBA64At", Method, 4, ""},
+		{"(*RGBA64).Set", Method, 0, ""},
+		{"(*RGBA64).SetRGBA64", Method, 0, ""},
+		{"(*RGBA64).SubImage", Method, 0, ""},
+		{"(*Uniform).At", Method, 0, ""},
+		{"(*Uniform).Bounds", Method, 0, ""},
+		{"(*Uniform).ColorModel", Method, 0, ""},
+		{"(*Uniform).Convert", Method, 0, ""},
+		{"(*Uniform).Opaque", Method, 0, ""},
+		{"(*Uniform).RGBA", Method, 0, ""},
+		{"(*Uniform).RGBA64At", Method, 17, ""},
+		{"(*YCbCr).At", Method, 0, ""},
+		{"(*YCbCr).Bounds", Method, 0, ""},
+		{"(*YCbCr).COffset", Method, 0, ""},
+		{"(*YCbCr).ColorModel", Method, 0, ""},
+		{"(*YCbCr).Opaque", Method, 0, ""},
+		{"(*YCbCr).RGBA64At", Method, 17, ""},
+		{"(*YCbCr).SubImage", Method, 0, ""},
+		{"(*YCbCr).YCbCrAt", Method, 4, ""},
+		{"(*YCbCr).YOffset", Method, 0, ""},
+		{"(Point).Add", Method, 0, ""},
+		{"(Point).Div", Method, 0, ""},
+		{"(Point).Eq", Method, 0, ""},
+		{"(Point).In", Method, 0, ""},
+		{"(Point).Mod", Method, 0, ""},
+		{"(Point).Mul", Method, 0, ""},
+		{"(Point).String", Method, 0, ""},
+		{"(Point).Sub", Method, 0, ""},
+		{"(Rectangle).Add", Method, 0, ""},
+		{"(Rectangle).At", Method, 5, ""},
+		{"(Rectangle).Bounds", Method, 5, ""},
+		{"(Rectangle).Canon", Method, 0, ""},
+		{"(Rectangle).ColorModel", Method, 5, ""},
+		{"(Rectangle).Dx", Method, 0, ""},
+		{"(Rectangle).Dy", Method, 0, ""},
+		{"(Rectangle).Empty", Method, 0, ""},
+		{"(Rectangle).Eq", Method, 0, ""},
+		{"(Rectangle).In", Method, 0, ""},
+		{"(Rectangle).Inset", Method, 0, ""},
+		{"(Rectangle).Intersect", Method, 0, ""},
+		{"(Rectangle).Overlaps", Method, 0, ""},
+		{"(Rectangle).RGBA64At", Method, 17, ""},
+		{"(Rectangle).Size", Method, 0, ""},
+		{"(Rectangle).String", Method, 0, ""},
+		{"(Rectangle).Sub", Method, 0, ""},
+		{"(Rectangle).Union", Method, 0, ""},
+		{"(YCbCrSubsampleRatio).String", Method, 0, ""},
+		{"Alpha", Type, 0, ""},
+		{"Alpha.Pix", Field, 0, ""},
+		{"Alpha.Rect", Field, 0, ""},
+		{"Alpha.Stride", Field, 0, ""},
+		{"Alpha16", Type, 0, ""},
+		{"Alpha16.Pix", Field, 0, ""},
+		{"Alpha16.Rect", Field, 0, ""},
+		{"Alpha16.Stride", Field, 0, ""},
+		{"Black", Var, 0, ""},
+		{"CMYK", Type, 5, ""},
+		{"CMYK.Pix", Field, 5, ""},
+		{"CMYK.Rect", Field, 5, ""},
+		{"CMYK.Stride", Field, 5, ""},
+		{"Config", Type, 0, ""},
+		{"Config.ColorModel", Field, 0, ""},
+		{"Config.Height", Field, 0, ""},
+		{"Config.Width", Field, 0, ""},
+		{"Decode", Func, 0, "func(r io.Reader) (Image, string, error)"},
+		{"DecodeConfig", Func, 0, "func(r io.Reader) (Config, string, error)"},
+		{"ErrFormat", Var, 0, ""},
+		{"Gray", Type, 0, ""},
+		{"Gray.Pix", Field, 0, ""},
+		{"Gray.Rect", Field, 0, ""},
+		{"Gray.Stride", Field, 0, ""},
+		{"Gray16", Type, 0, ""},
+		{"Gray16.Pix", Field, 0, ""},
+		{"Gray16.Rect", Field, 0, ""},
+		{"Gray16.Stride", Field, 0, ""},
+		{"Image", Type, 0, ""},
+		{"NRGBA", Type, 0, ""},
+		{"NRGBA.Pix", Field, 0, ""},
+		{"NRGBA.Rect", Field, 0, ""},
+		{"NRGBA.Stride", Field, 0, ""},
+		{"NRGBA64", Type, 0, ""},
+		{"NRGBA64.Pix", Field, 0, ""},
+		{"NRGBA64.Rect", Field, 0, ""},
+		{"NRGBA64.Stride", Field, 0, ""},
+		{"NYCbCrA", Type, 6, ""},
+		{"NYCbCrA.A", Field, 6, ""},
+		{"NYCbCrA.AStride", Field, 6, ""},
+		{"NYCbCrA.YCbCr", Field, 6, ""},
+		{"NewAlpha", Func, 0, "func(r Rectangle) *Alpha"},
+		{"NewAlpha16", Func, 0, "func(r Rectangle) *Alpha16"},
+		{"NewCMYK", Func, 5, "func(r Rectangle) *CMYK"},
+		{"NewGray", Func, 0, "func(r Rectangle) *Gray"},
+		{"NewGray16", Func, 0, "func(r Rectangle) *Gray16"},
+		{"NewNRGBA", Func, 0, "func(r Rectangle) *NRGBA"},
+		{"NewNRGBA64", Func, 0, "func(r Rectangle) *NRGBA64"},
+		{"NewNYCbCrA", Func, 6, "func(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *NYCbCrA"},
+		{"NewPaletted", Func, 0, "func(r Rectangle, p color.Palette) *Paletted"},
+		{"NewRGBA", Func, 0, "func(r Rectangle) *RGBA"},
+		{"NewRGBA64", Func, 0, "func(r Rectangle) *RGBA64"},
+		{"NewUniform", Func, 0, "func(c color.Color) *Uniform"},
+		{"NewYCbCr", Func, 0, "func(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *YCbCr"},
+		{"Opaque", Var, 0, ""},
+		{"Paletted", Type, 0, ""},
+		{"Paletted.Palette", Field, 0, ""},
+		{"Paletted.Pix", Field, 0, ""},
+		{"Paletted.Rect", Field, 0, ""},
+		{"Paletted.Stride", Field, 0, ""},
+		{"PalettedImage", Type, 0, ""},
+		{"Point", Type, 0, ""},
+		{"Point.X", Field, 0, ""},
+		{"Point.Y", Field, 0, ""},
+		{"Pt", Func, 0, "func(X int, Y int) Point"},
+		{"RGBA", Type, 0, ""},
+		{"RGBA.Pix", Field, 0, ""},
+		{"RGBA.Rect", Field, 0, ""},
+		{"RGBA.Stride", Field, 0, ""},
+		{"RGBA64", Type, 0, ""},
+		{"RGBA64.Pix", Field, 0, ""},
+		{"RGBA64.Rect", Field, 0, ""},
+		{"RGBA64.Stride", Field, 0, ""},
+		{"RGBA64Image", Type, 17, ""},
+		{"Rect", Func, 0, "func(x0 int, y0 int, x1 int, y1 int) Rectangle"},
+		{"Rectangle", Type, 0, ""},
+		{"Rectangle.Max", Field, 0, ""},
+		{"Rectangle.Min", Field, 0, ""},
+		{"RegisterFormat", Func, 0, "func(name string, magic string, decode func(io.Reader) (Image, error), decodeConfig func(io.Reader) (Config, error))"},
+		{"Transparent", Var, 0, ""},
+		{"Uniform", Type, 0, ""},
+		{"Uniform.C", Field, 0, ""},
+		{"White", Var, 0, ""},
+		{"YCbCr", Type, 0, ""},
+		{"YCbCr.CStride", Field, 0, ""},
+		{"YCbCr.Cb", Field, 0, ""},
+		{"YCbCr.Cr", Field, 0, ""},
+		{"YCbCr.Rect", Field, 0, ""},
+		{"YCbCr.SubsampleRatio", Field, 0, ""},
+		{"YCbCr.Y", Field, 0, ""},
+		{"YCbCr.YStride", Field, 0, ""},
+		{"YCbCrSubsampleRatio", Type, 0, ""},
+		{"YCbCrSubsampleRatio410", Const, 5, ""},
+		{"YCbCrSubsampleRatio411", Const, 5, ""},
+		{"YCbCrSubsampleRatio420", Const, 0, ""},
+		{"YCbCrSubsampleRatio422", Const, 0, ""},
+		{"YCbCrSubsampleRatio440", Const, 1, ""},
+		{"YCbCrSubsampleRatio444", Const, 0, ""},
+		{"ZP", Var, 0, ""},
+		{"ZR", Var, 0, ""},
 	},
 	"image/color": {
-		{"(Alpha).RGBA", Method, 0},
-		{"(Alpha16).RGBA", Method, 0},
-		{"(CMYK).RGBA", Method, 5},
-		{"(Gray).RGBA", Method, 0},
-		{"(Gray16).RGBA", Method, 0},
-		{"(NRGBA).RGBA", Method, 0},
-		{"(NRGBA64).RGBA", Method, 0},
-		{"(NYCbCrA).RGBA", Method, 6},
-		{"(Palette).Convert", Method, 0},
-		{"(Palette).Index", Method, 0},
-		{"(RGBA).RGBA", Method, 0},
-		{"(RGBA64).RGBA", Method, 0},
-		{"(YCbCr).RGBA", Method, 0},
-		{"Alpha", Type, 0},
-		{"Alpha.A", Field, 0},
-		{"Alpha16", Type, 0},
-		{"Alpha16.A", Field, 0},
-		{"Alpha16Model", Var, 0},
-		{"AlphaModel", Var, 0},
-		{"Black", Var, 0},
-		{"CMYK", Type, 5},
-		{"CMYK.C", Field, 5},
-		{"CMYK.K", Field, 5},
-		{"CMYK.M", Field, 5},
-		{"CMYK.Y", Field, 5},
-		{"CMYKModel", Var, 5},
-		{"CMYKToRGB", Func, 5},
-		{"Color", Type, 0},
-		{"Gray", Type, 0},
-		{"Gray.Y", Field, 0},
-		{"Gray16", Type, 0},
-		{"Gray16.Y", Field, 0},
-		{"Gray16Model", Var, 0},
-		{"GrayModel", Var, 0},
-		{"Model", Type, 0},
-		{"ModelFunc", Func, 0},
-		{"NRGBA", Type, 0},
-		{"NRGBA.A", Field, 0},
-		{"NRGBA.B", Field, 0},
-		{"NRGBA.G", Field, 0},
-		{"NRGBA.R", Field, 0},
-		{"NRGBA64", Type, 0},
-		{"NRGBA64.A", Field, 0},
-		{"NRGBA64.B", Field, 0},
-		{"NRGBA64.G", Field, 0},
-		{"NRGBA64.R", Field, 0},
-		{"NRGBA64Model", Var, 0},
-		{"NRGBAModel", Var, 0},
-		{"NYCbCrA", Type, 6},
-		{"NYCbCrA.A", Field, 6},
-		{"NYCbCrA.YCbCr", Field, 6},
-		{"NYCbCrAModel", Var, 6},
-		{"Opaque", Var, 0},
-		{"Palette", Type, 0},
-		{"RGBA", Type, 0},
-		{"RGBA.A", Field, 0},
-		{"RGBA.B", Field, 0},
-		{"RGBA.G", Field, 0},
-		{"RGBA.R", Field, 0},
-		{"RGBA64", Type, 0},
-		{"RGBA64.A", Field, 0},
-		{"RGBA64.B", Field, 0},
-		{"RGBA64.G", Field, 0},
-		{"RGBA64.R", Field, 0},
-		{"RGBA64Model", Var, 0},
-		{"RGBAModel", Var, 0},
-		{"RGBToCMYK", Func, 5},
-		{"RGBToYCbCr", Func, 0},
-		{"Transparent", Var, 0},
-		{"White", Var, 0},
-		{"YCbCr", Type, 0},
-		{"YCbCr.Cb", Field, 0},
-		{"YCbCr.Cr", Field, 0},
-		{"YCbCr.Y", Field, 0},
-		{"YCbCrModel", Var, 0},
-		{"YCbCrToRGB", Func, 0},
+		{"(Alpha).RGBA", Method, 0, ""},
+		{"(Alpha16).RGBA", Method, 0, ""},
+		{"(CMYK).RGBA", Method, 5, ""},
+		{"(Gray).RGBA", Method, 0, ""},
+		{"(Gray16).RGBA", Method, 0, ""},
+		{"(NRGBA).RGBA", Method, 0, ""},
+		{"(NRGBA64).RGBA", Method, 0, ""},
+		{"(NYCbCrA).RGBA", Method, 6, ""},
+		{"(Palette).Convert", Method, 0, ""},
+		{"(Palette).Index", Method, 0, ""},
+		{"(RGBA).RGBA", Method, 0, ""},
+		{"(RGBA64).RGBA", Method, 0, ""},
+		{"(YCbCr).RGBA", Method, 0, ""},
+		{"Alpha", Type, 0, ""},
+		{"Alpha.A", Field, 0, ""},
+		{"Alpha16", Type, 0, ""},
+		{"Alpha16.A", Field, 0, ""},
+		{"Alpha16Model", Var, 0, ""},
+		{"AlphaModel", Var, 0, ""},
+		{"Black", Var, 0, ""},
+		{"CMYK", Type, 5, ""},
+		{"CMYK.C", Field, 5, ""},
+		{"CMYK.K", Field, 5, ""},
+		{"CMYK.M", Field, 5, ""},
+		{"CMYK.Y", Field, 5, ""},
+		{"CMYKModel", Var, 5, ""},
+		{"CMYKToRGB", Func, 5, "func(c uint8, m uint8, y uint8, k uint8) (uint8, uint8, uint8)"},
+		{"Color", Type, 0, ""},
+		{"Gray", Type, 0, ""},
+		{"Gray.Y", Field, 0, ""},
+		{"Gray16", Type, 0, ""},
+		{"Gray16.Y", Field, 0, ""},
+		{"Gray16Model", Var, 0, ""},
+		{"GrayModel", Var, 0, ""},
+		{"Model", Type, 0, ""},
+		{"ModelFunc", Func, 0, "func(f func(Color) Color) Model"},
+		{"NRGBA", Type, 0, ""},
+		{"NRGBA.A", Field, 0, ""},
+		{"NRGBA.B", Field, 0, ""},
+		{"NRGBA.G", Field, 0, ""},
+		{"NRGBA.R", Field, 0, ""},
+		{"NRGBA64", Type, 0, ""},
+		{"NRGBA64.A", Field, 0, ""},
+		{"NRGBA64.B", Field, 0, ""},
+		{"NRGBA64.G", Field, 0, ""},
+		{"NRGBA64.R", Field, 0, ""},
+		{"NRGBA64Model", Var, 0, ""},
+		{"NRGBAModel", Var, 0, ""},
+		{"NYCbCrA", Type, 6, ""},
+		{"NYCbCrA.A", Field, 6, ""},
+		{"NYCbCrA.YCbCr", Field, 6, ""},
+		{"NYCbCrAModel", Var, 6, ""},
+		{"Opaque", Var, 0, ""},
+		{"Palette", Type, 0, ""},
+		{"RGBA", Type, 0, ""},
+		{"RGBA.A", Field, 0, ""},
+		{"RGBA.B", Field, 0, ""},
+		{"RGBA.G", Field, 0, ""},
+		{"RGBA.R", Field, 0, ""},
+		{"RGBA64", Type, 0, ""},
+		{"RGBA64.A", Field, 0, ""},
+		{"RGBA64.B", Field, 0, ""},
+		{"RGBA64.G", Field, 0, ""},
+		{"RGBA64.R", Field, 0, ""},
+		{"RGBA64Model", Var, 0, ""},
+		{"RGBAModel", Var, 0, ""},
+		{"RGBToCMYK", Func, 5, "func(r uint8, g uint8, b uint8) (uint8, uint8, uint8, uint8)"},
+		{"RGBToYCbCr", Func, 0, "func(r uint8, g uint8, b uint8) (uint8, uint8, uint8)"},
+		{"Transparent", Var, 0, ""},
+		{"White", Var, 0, ""},
+		{"YCbCr", Type, 0, ""},
+		{"YCbCr.Cb", Field, 0, ""},
+		{"YCbCr.Cr", Field, 0, ""},
+		{"YCbCr.Y", Field, 0, ""},
+		{"YCbCrModel", Var, 0, ""},
+		{"YCbCrToRGB", Func, 0, "func(y uint8, cb uint8, cr uint8) (uint8, uint8, uint8)"},
 	},
 	"image/color/palette": {
-		{"Plan9", Var, 2},
-		{"WebSafe", Var, 2},
+		{"Plan9", Var, 2, ""},
+		{"WebSafe", Var, 2, ""},
 	},
 	"image/draw": {
-		{"(Op).Draw", Method, 2},
-		{"Draw", Func, 0},
-		{"DrawMask", Func, 0},
-		{"Drawer", Type, 2},
-		{"FloydSteinberg", Var, 2},
-		{"Image", Type, 0},
-		{"Op", Type, 0},
-		{"Over", Const, 0},
-		{"Quantizer", Type, 2},
-		{"RGBA64Image", Type, 17},
-		{"Src", Const, 0},
+		{"(Op).Draw", Method, 2, ""},
+		{"Draw", Func, 0, "func(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op)"},
+		{"DrawMask", Func, 0, "func(dst Image, r image.Rectangle, src image.Image, sp image.Point, mask image.Image, mp image.Point, op Op)"},
+		{"Drawer", Type, 2, ""},
+		{"FloydSteinberg", Var, 2, ""},
+		{"Image", Type, 0, ""},
+		{"Op", Type, 0, ""},
+		{"Over", Const, 0, ""},
+		{"Quantizer", Type, 2, ""},
+		{"RGBA64Image", Type, 17, ""},
+		{"Src", Const, 0, ""},
 	},
 	"image/gif": {
-		{"Decode", Func, 0},
-		{"DecodeAll", Func, 0},
-		{"DecodeConfig", Func, 0},
-		{"DisposalBackground", Const, 5},
-		{"DisposalNone", Const, 5},
-		{"DisposalPrevious", Const, 5},
-		{"Encode", Func, 2},
-		{"EncodeAll", Func, 2},
-		{"GIF", Type, 0},
-		{"GIF.BackgroundIndex", Field, 5},
-		{"GIF.Config", Field, 5},
-		{"GIF.Delay", Field, 0},
-		{"GIF.Disposal", Field, 5},
-		{"GIF.Image", Field, 0},
-		{"GIF.LoopCount", Field, 0},
-		{"Options", Type, 2},
-		{"Options.Drawer", Field, 2},
-		{"Options.NumColors", Field, 2},
-		{"Options.Quantizer", Field, 2},
+		{"Decode", Func, 0, "func(r io.Reader) (image.Image, error)"},
+		{"DecodeAll", Func, 0, "func(r io.Reader) (*GIF, error)"},
+		{"DecodeConfig", Func, 0, "func(r io.Reader) (image.Config, error)"},
+		{"DisposalBackground", Const, 5, ""},
+		{"DisposalNone", Const, 5, ""},
+		{"DisposalPrevious", Const, 5, ""},
+		{"Encode", Func, 2, "func(w io.Writer, m image.Image, o *Options) error"},
+		{"EncodeAll", Func, 2, "func(w io.Writer, g *GIF) error"},
+		{"GIF", Type, 0, ""},
+		{"GIF.BackgroundIndex", Field, 5, ""},
+		{"GIF.Config", Field, 5, ""},
+		{"GIF.Delay", Field, 0, ""},
+		{"GIF.Disposal", Field, 5, ""},
+		{"GIF.Image", Field, 0, ""},
+		{"GIF.LoopCount", Field, 0, ""},
+		{"Options", Type, 2, ""},
+		{"Options.Drawer", Field, 2, ""},
+		{"Options.NumColors", Field, 2, ""},
+		{"Options.Quantizer", Field, 2, ""},
 	},
 	"image/jpeg": {
-		{"(FormatError).Error", Method, 0},
-		{"(UnsupportedError).Error", Method, 0},
-		{"Decode", Func, 0},
-		{"DecodeConfig", Func, 0},
-		{"DefaultQuality", Const, 0},
-		{"Encode", Func, 0},
-		{"FormatError", Type, 0},
-		{"Options", Type, 0},
-		{"Options.Quality", Field, 0},
-		{"Reader", Type, 0},
-		{"UnsupportedError", Type, 0},
+		{"(FormatError).Error", Method, 0, ""},
+		{"(UnsupportedError).Error", Method, 0, ""},
+		{"Decode", Func, 0, "func(r io.Reader) (image.Image, error)"},
+		{"DecodeConfig", Func, 0, "func(r io.Reader) (image.Config, error)"},
+		{"DefaultQuality", Const, 0, ""},
+		{"Encode", Func, 0, "func(w io.Writer, m image.Image, o *Options) error"},
+		{"FormatError", Type, 0, ""},
+		{"Options", Type, 0, ""},
+		{"Options.Quality", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"UnsupportedError", Type, 0, ""},
 	},
 	"image/png": {
-		{"(*Encoder).Encode", Method, 4},
-		{"(FormatError).Error", Method, 0},
-		{"(UnsupportedError).Error", Method, 0},
-		{"BestCompression", Const, 4},
-		{"BestSpeed", Const, 4},
-		{"CompressionLevel", Type, 4},
-		{"Decode", Func, 0},
-		{"DecodeConfig", Func, 0},
-		{"DefaultCompression", Const, 4},
-		{"Encode", Func, 0},
-		{"Encoder", Type, 4},
-		{"Encoder.BufferPool", Field, 9},
-		{"Encoder.CompressionLevel", Field, 4},
-		{"EncoderBuffer", Type, 9},
-		{"EncoderBufferPool", Type, 9},
-		{"FormatError", Type, 0},
-		{"NoCompression", Const, 4},
-		{"UnsupportedError", Type, 0},
+		{"(*Encoder).Encode", Method, 4, ""},
+		{"(FormatError).Error", Method, 0, ""},
+		{"(UnsupportedError).Error", Method, 0, ""},
+		{"BestCompression", Const, 4, ""},
+		{"BestSpeed", Const, 4, ""},
+		{"CompressionLevel", Type, 4, ""},
+		{"Decode", Func, 0, "func(r io.Reader) (image.Image, error)"},
+		{"DecodeConfig", Func, 0, "func(r io.Reader) (image.Config, error)"},
+		{"DefaultCompression", Const, 4, ""},
+		{"Encode", Func, 0, "func(w io.Writer, m image.Image) error"},
+		{"Encoder", Type, 4, ""},
+		{"Encoder.BufferPool", Field, 9, ""},
+		{"Encoder.CompressionLevel", Field, 4, ""},
+		{"EncoderBuffer", Type, 9, ""},
+		{"EncoderBufferPool", Type, 9, ""},
+		{"FormatError", Type, 0, ""},
+		{"NoCompression", Const, 4, ""},
+		{"UnsupportedError", Type, 0, ""},
 	},
 	"index/suffixarray": {
-		{"(*Index).Bytes", Method, 0},
-		{"(*Index).FindAllIndex", Method, 0},
-		{"(*Index).Lookup", Method, 0},
-		{"(*Index).Read", Method, 0},
-		{"(*Index).Write", Method, 0},
-		{"Index", Type, 0},
-		{"New", Func, 0},
+		{"(*Index).Bytes", Method, 0, ""},
+		{"(*Index).FindAllIndex", Method, 0, ""},
+		{"(*Index).Lookup", Method, 0, ""},
+		{"(*Index).Read", Method, 0, ""},
+		{"(*Index).Write", Method, 0, ""},
+		{"Index", Type, 0, ""},
+		{"New", Func, 0, "func(data []byte) *Index"},
 	},
 	"io": {
-		{"(*LimitedReader).Read", Method, 0},
-		{"(*OffsetWriter).Seek", Method, 20},
-		{"(*OffsetWriter).Write", Method, 20},
-		{"(*OffsetWriter).WriteAt", Method, 20},
-		{"(*PipeReader).Close", Method, 0},
-		{"(*PipeReader).CloseWithError", Method, 0},
-		{"(*PipeReader).Read", Method, 0},
-		{"(*PipeWriter).Close", Method, 0},
-		{"(*PipeWriter).CloseWithError", Method, 0},
-		{"(*PipeWriter).Write", Method, 0},
-		{"(*SectionReader).Outer", Method, 22},
-		{"(*SectionReader).Read", Method, 0},
-		{"(*SectionReader).ReadAt", Method, 0},
-		{"(*SectionReader).Seek", Method, 0},
-		{"(*SectionReader).Size", Method, 0},
-		{"ByteReader", Type, 0},
-		{"ByteScanner", Type, 0},
-		{"ByteWriter", Type, 1},
-		{"Closer", Type, 0},
-		{"Copy", Func, 0},
-		{"CopyBuffer", Func, 5},
-		{"CopyN", Func, 0},
-		{"Discard", Var, 16},
-		{"EOF", Var, 0},
-		{"ErrClosedPipe", Var, 0},
-		{"ErrNoProgress", Var, 1},
-		{"ErrShortBuffer", Var, 0},
-		{"ErrShortWrite", Var, 0},
-		{"ErrUnexpectedEOF", Var, 0},
-		{"LimitReader", Func, 0},
-		{"LimitedReader", Type, 0},
-		{"LimitedReader.N", Field, 0},
-		{"LimitedReader.R", Field, 0},
-		{"MultiReader", Func, 0},
-		{"MultiWriter", Func, 0},
-		{"NewOffsetWriter", Func, 20},
-		{"NewSectionReader", Func, 0},
-		{"NopCloser", Func, 16},
-		{"OffsetWriter", Type, 20},
-		{"Pipe", Func, 0},
-		{"PipeReader", Type, 0},
-		{"PipeWriter", Type, 0},
-		{"ReadAll", Func, 16},
-		{"ReadAtLeast", Func, 0},
-		{"ReadCloser", Type, 0},
-		{"ReadFull", Func, 0},
-		{"ReadSeekCloser", Type, 16},
-		{"ReadSeeker", Type, 0},
-		{"ReadWriteCloser", Type, 0},
-		{"ReadWriteSeeker", Type, 0},
-		{"ReadWriter", Type, 0},
-		{"Reader", Type, 0},
-		{"ReaderAt", Type, 0},
-		{"ReaderFrom", Type, 0},
-		{"RuneReader", Type, 0},
-		{"RuneScanner", Type, 0},
-		{"SectionReader", Type, 0},
-		{"SeekCurrent", Const, 7},
-		{"SeekEnd", Const, 7},
-		{"SeekStart", Const, 7},
-		{"Seeker", Type, 0},
-		{"StringWriter", Type, 12},
-		{"TeeReader", Func, 0},
-		{"WriteCloser", Type, 0},
-		{"WriteSeeker", Type, 0},
-		{"WriteString", Func, 0},
-		{"Writer", Type, 0},
-		{"WriterAt", Type, 0},
-		{"WriterTo", Type, 0},
+		{"(*LimitedReader).Read", Method, 0, ""},
+		{"(*OffsetWriter).Seek", Method, 20, ""},
+		{"(*OffsetWriter).Write", Method, 20, ""},
+		{"(*OffsetWriter).WriteAt", Method, 20, ""},
+		{"(*PipeReader).Close", Method, 0, ""},
+		{"(*PipeReader).CloseWithError", Method, 0, ""},
+		{"(*PipeReader).Read", Method, 0, ""},
+		{"(*PipeWriter).Close", Method, 0, ""},
+		{"(*PipeWriter).CloseWithError", Method, 0, ""},
+		{"(*PipeWriter).Write", Method, 0, ""},
+		{"(*SectionReader).Outer", Method, 22, ""},
+		{"(*SectionReader).Read", Method, 0, ""},
+		{"(*SectionReader).ReadAt", Method, 0, ""},
+		{"(*SectionReader).Seek", Method, 0, ""},
+		{"(*SectionReader).Size", Method, 0, ""},
+		{"ByteReader", Type, 0, ""},
+		{"ByteScanner", Type, 0, ""},
+		{"ByteWriter", Type, 1, ""},
+		{"Closer", Type, 0, ""},
+		{"Copy", Func, 0, "func(dst Writer, src Reader) (written int64, err error)"},
+		{"CopyBuffer", Func, 5, "func(dst Writer, src Reader, buf []byte) (written int64, err error)"},
+		{"CopyN", Func, 0, "func(dst Writer, src Reader, n int64) (written int64, err error)"},
+		{"Discard", Var, 16, ""},
+		{"EOF", Var, 0, ""},
+		{"ErrClosedPipe", Var, 0, ""},
+		{"ErrNoProgress", Var, 1, ""},
+		{"ErrShortBuffer", Var, 0, ""},
+		{"ErrShortWrite", Var, 0, ""},
+		{"ErrUnexpectedEOF", Var, 0, ""},
+		{"LimitReader", Func, 0, "func(r Reader, n int64) Reader"},
+		{"LimitedReader", Type, 0, ""},
+		{"LimitedReader.N", Field, 0, ""},
+		{"LimitedReader.R", Field, 0, ""},
+		{"MultiReader", Func, 0, "func(readers ...Reader) Reader"},
+		{"MultiWriter", Func, 0, "func(writers ...Writer) Writer"},
+		{"NewOffsetWriter", Func, 20, "func(w WriterAt, off int64) *OffsetWriter"},
+		{"NewSectionReader", Func, 0, "func(r ReaderAt, off int64, n int64) *SectionReader"},
+		{"NopCloser", Func, 16, "func(r Reader) ReadCloser"},
+		{"OffsetWriter", Type, 20, ""},
+		{"Pipe", Func, 0, "func() (*PipeReader, *PipeWriter)"},
+		{"PipeReader", Type, 0, ""},
+		{"PipeWriter", Type, 0, ""},
+		{"ReadAll", Func, 16, "func(r Reader) ([]byte, error)"},
+		{"ReadAtLeast", Func, 0, "func(r Reader, buf []byte, min int) (n int, err error)"},
+		{"ReadCloser", Type, 0, ""},
+		{"ReadFull", Func, 0, "func(r Reader, buf []byte) (n int, err error)"},
+		{"ReadSeekCloser", Type, 16, ""},
+		{"ReadSeeker", Type, 0, ""},
+		{"ReadWriteCloser", Type, 0, ""},
+		{"ReadWriteSeeker", Type, 0, ""},
+		{"ReadWriter", Type, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"ReaderAt", Type, 0, ""},
+		{"ReaderFrom", Type, 0, ""},
+		{"RuneReader", Type, 0, ""},
+		{"RuneScanner", Type, 0, ""},
+		{"SectionReader", Type, 0, ""},
+		{"SeekCurrent", Const, 7, ""},
+		{"SeekEnd", Const, 7, ""},
+		{"SeekStart", Const, 7, ""},
+		{"Seeker", Type, 0, ""},
+		{"StringWriter", Type, 12, ""},
+		{"TeeReader", Func, 0, "func(r Reader, w Writer) Reader"},
+		{"WriteCloser", Type, 0, ""},
+		{"WriteSeeker", Type, 0, ""},
+		{"WriteString", Func, 0, "func(w Writer, s string) (n int, err error)"},
+		{"Writer", Type, 0, ""},
+		{"WriterAt", Type, 0, ""},
+		{"WriterTo", Type, 0, ""},
 	},
 	"io/fs": {
-		{"(*PathError).Error", Method, 16},
-		{"(*PathError).Timeout", Method, 16},
-		{"(*PathError).Unwrap", Method, 16},
-		{"(FileMode).IsDir", Method, 16},
-		{"(FileMode).IsRegular", Method, 16},
-		{"(FileMode).Perm", Method, 16},
-		{"(FileMode).String", Method, 16},
-		{"(FileMode).Type", Method, 16},
-		{"DirEntry", Type, 16},
-		{"ErrClosed", Var, 16},
-		{"ErrExist", Var, 16},
-		{"ErrInvalid", Var, 16},
-		{"ErrNotExist", Var, 16},
-		{"ErrPermission", Var, 16},
-		{"FS", Type, 16},
-		{"File", Type, 16},
-		{"FileInfo", Type, 16},
-		{"FileInfoToDirEntry", Func, 17},
-		{"FileMode", Type, 16},
-		{"FormatDirEntry", Func, 21},
-		{"FormatFileInfo", Func, 21},
-		{"Glob", Func, 16},
-		{"GlobFS", Type, 16},
-		{"ModeAppend", Const, 16},
-		{"ModeCharDevice", Const, 16},
-		{"ModeDevice", Const, 16},
-		{"ModeDir", Const, 16},
-		{"ModeExclusive", Const, 16},
-		{"ModeIrregular", Const, 16},
-		{"ModeNamedPipe", Const, 16},
-		{"ModePerm", Const, 16},
-		{"ModeSetgid", Const, 16},
-		{"ModeSetuid", Const, 16},
-		{"ModeSocket", Const, 16},
-		{"ModeSticky", Const, 16},
-		{"ModeSymlink", Const, 16},
-		{"ModeTemporary", Const, 16},
-		{"ModeType", Const, 16},
-		{"PathError", Type, 16},
-		{"PathError.Err", Field, 16},
-		{"PathError.Op", Field, 16},
-		{"PathError.Path", Field, 16},
-		{"ReadDir", Func, 16},
-		{"ReadDirFS", Type, 16},
-		{"ReadDirFile", Type, 16},
-		{"ReadFile", Func, 16},
-		{"ReadFileFS", Type, 16},
-		{"SkipAll", Var, 20},
-		{"SkipDir", Var, 16},
-		{"Stat", Func, 16},
-		{"StatFS", Type, 16},
-		{"Sub", Func, 16},
-		{"SubFS", Type, 16},
-		{"ValidPath", Func, 16},
-		{"WalkDir", Func, 16},
-		{"WalkDirFunc", Type, 16},
+		{"(*PathError).Error", Method, 16, ""},
+		{"(*PathError).Timeout", Method, 16, ""},
+		{"(*PathError).Unwrap", Method, 16, ""},
+		{"(FileMode).IsDir", Method, 16, ""},
+		{"(FileMode).IsRegular", Method, 16, ""},
+		{"(FileMode).Perm", Method, 16, ""},
+		{"(FileMode).String", Method, 16, ""},
+		{"(FileMode).Type", Method, 16, ""},
+		{"DirEntry", Type, 16, ""},
+		{"ErrClosed", Var, 16, ""},
+		{"ErrExist", Var, 16, ""},
+		{"ErrInvalid", Var, 16, ""},
+		{"ErrNotExist", Var, 16, ""},
+		{"ErrPermission", Var, 16, ""},
+		{"FS", Type, 16, ""},
+		{"File", Type, 16, ""},
+		{"FileInfo", Type, 16, ""},
+		{"FileInfoToDirEntry", Func, 17, "func(info FileInfo) DirEntry"},
+		{"FileMode", Type, 16, ""},
+		{"FormatDirEntry", Func, 21, "func(dir DirEntry) string"},
+		{"FormatFileInfo", Func, 21, "func(info FileInfo) string"},
+		{"Glob", Func, 16, "func(fsys FS, pattern string) (matches []string, err error)"},
+		{"GlobFS", Type, 16, ""},
+		{"Lstat", Func, 25, ""},
+		{"ModeAppend", Const, 16, ""},
+		{"ModeCharDevice", Const, 16, ""},
+		{"ModeDevice", Const, 16, ""},
+		{"ModeDir", Const, 16, ""},
+		{"ModeExclusive", Const, 16, ""},
+		{"ModeIrregular", Const, 16, ""},
+		{"ModeNamedPipe", Const, 16, ""},
+		{"ModePerm", Const, 16, ""},
+		{"ModeSetgid", Const, 16, ""},
+		{"ModeSetuid", Const, 16, ""},
+		{"ModeSocket", Const, 16, ""},
+		{"ModeSticky", Const, 16, ""},
+		{"ModeSymlink", Const, 16, ""},
+		{"ModeTemporary", Const, 16, ""},
+		{"ModeType", Const, 16, ""},
+		{"PathError", Type, 16, ""},
+		{"PathError.Err", Field, 16, ""},
+		{"PathError.Op", Field, 16, ""},
+		{"PathError.Path", Field, 16, ""},
+		{"ReadDir", Func, 16, "func(fsys FS, name string) ([]DirEntry, error)"},
+		{"ReadDirFS", Type, 16, ""},
+		{"ReadDirFile", Type, 16, ""},
+		{"ReadFile", Func, 16, "func(fsys FS, name string) ([]byte, error)"},
+		{"ReadFileFS", Type, 16, ""},
+		{"ReadLink", Func, 25, ""},
+		{"ReadLinkFS", Type, 25, ""},
+		{"SkipAll", Var, 20, ""},
+		{"SkipDir", Var, 16, ""},
+		{"Stat", Func, 16, "func(fsys FS, name string) (FileInfo, error)"},
+		{"StatFS", Type, 16, ""},
+		{"Sub", Func, 16, "func(fsys FS, dir string) (FS, error)"},
+		{"SubFS", Type, 16, ""},
+		{"ValidPath", Func, 16, "func(name string) bool"},
+		{"WalkDir", Func, 16, "func(fsys FS, root string, fn WalkDirFunc) error"},
+		{"WalkDirFunc", Type, 16, ""},
 	},
 	"io/ioutil": {
-		{"Discard", Var, 0},
-		{"NopCloser", Func, 0},
-		{"ReadAll", Func, 0},
-		{"ReadDir", Func, 0},
-		{"ReadFile", Func, 0},
-		{"TempDir", Func, 0},
-		{"TempFile", Func, 0},
-		{"WriteFile", Func, 0},
+		{"Discard", Var, 0, ""},
+		{"NopCloser", Func, 0, "func(r io.Reader) io.ReadCloser"},
+		{"ReadAll", Func, 0, "func(r io.Reader) ([]byte, error)"},
+		{"ReadDir", Func, 0, "func(dirname string) ([]fs.FileInfo, error)"},
+		{"ReadFile", Func, 0, "func(filename string) ([]byte, error)"},
+		{"TempDir", Func, 0, "func(dir string, pattern string) (name string, err error)"},
+		{"TempFile", Func, 0, "func(dir string, pattern string) (f *os.File, err error)"},
+		{"WriteFile", Func, 0, "func(filename string, data []byte, perm fs.FileMode) error"},
 	},
 	"iter": {
-		{"Pull", Func, 23},
-		{"Pull2", Func, 23},
-		{"Seq", Type, 23},
-		{"Seq2", Type, 23},
+		{"Pull", Func, 23, "func[V any](seq Seq[V]) (next func() (V, bool), stop func())"},
+		{"Pull2", Func, 23, "func[K, V any](seq Seq2[K, V]) (next func() (K, V, bool), stop func())"},
+		{"Seq", Type, 23, ""},
+		{"Seq2", Type, 23, ""},
 	},
 	"log": {
-		{"(*Logger).Fatal", Method, 0},
-		{"(*Logger).Fatalf", Method, 0},
-		{"(*Logger).Fatalln", Method, 0},
-		{"(*Logger).Flags", Method, 0},
-		{"(*Logger).Output", Method, 0},
-		{"(*Logger).Panic", Method, 0},
-		{"(*Logger).Panicf", Method, 0},
-		{"(*Logger).Panicln", Method, 0},
-		{"(*Logger).Prefix", Method, 0},
-		{"(*Logger).Print", Method, 0},
-		{"(*Logger).Printf", Method, 0},
-		{"(*Logger).Println", Method, 0},
-		{"(*Logger).SetFlags", Method, 0},
-		{"(*Logger).SetOutput", Method, 5},
-		{"(*Logger).SetPrefix", Method, 0},
-		{"(*Logger).Writer", Method, 12},
-		{"Default", Func, 16},
-		{"Fatal", Func, 0},
-		{"Fatalf", Func, 0},
-		{"Fatalln", Func, 0},
-		{"Flags", Func, 0},
-		{"LUTC", Const, 5},
-		{"Ldate", Const, 0},
-		{"Llongfile", Const, 0},
-		{"Lmicroseconds", Const, 0},
-		{"Lmsgprefix", Const, 14},
-		{"Logger", Type, 0},
-		{"Lshortfile", Const, 0},
-		{"LstdFlags", Const, 0},
-		{"Ltime", Const, 0},
-		{"New", Func, 0},
-		{"Output", Func, 5},
-		{"Panic", Func, 0},
-		{"Panicf", Func, 0},
-		{"Panicln", Func, 0},
-		{"Prefix", Func, 0},
-		{"Print", Func, 0},
-		{"Printf", Func, 0},
-		{"Println", Func, 0},
-		{"SetFlags", Func, 0},
-		{"SetOutput", Func, 0},
-		{"SetPrefix", Func, 0},
-		{"Writer", Func, 13},
+		{"(*Logger).Fatal", Method, 0, ""},
+		{"(*Logger).Fatalf", Method, 0, ""},
+		{"(*Logger).Fatalln", Method, 0, ""},
+		{"(*Logger).Flags", Method, 0, ""},
+		{"(*Logger).Output", Method, 0, ""},
+		{"(*Logger).Panic", Method, 0, ""},
+		{"(*Logger).Panicf", Method, 0, ""},
+		{"(*Logger).Panicln", Method, 0, ""},
+		{"(*Logger).Prefix", Method, 0, ""},
+		{"(*Logger).Print", Method, 0, ""},
+		{"(*Logger).Printf", Method, 0, ""},
+		{"(*Logger).Println", Method, 0, ""},
+		{"(*Logger).SetFlags", Method, 0, ""},
+		{"(*Logger).SetOutput", Method, 5, ""},
+		{"(*Logger).SetPrefix", Method, 0, ""},
+		{"(*Logger).Writer", Method, 12, ""},
+		{"Default", Func, 16, "func() *Logger"},
+		{"Fatal", Func, 0, "func(v ...any)"},
+		{"Fatalf", Func, 0, "func(format string, v ...any)"},
+		{"Fatalln", Func, 0, "func(v ...any)"},
+		{"Flags", Func, 0, "func() int"},
+		{"LUTC", Const, 5, ""},
+		{"Ldate", Const, 0, ""},
+		{"Llongfile", Const, 0, ""},
+		{"Lmicroseconds", Const, 0, ""},
+		{"Lmsgprefix", Const, 14, ""},
+		{"Logger", Type, 0, ""},
+		{"Lshortfile", Const, 0, ""},
+		{"LstdFlags", Const, 0, ""},
+		{"Ltime", Const, 0, ""},
+		{"New", Func, 0, "func(out io.Writer, prefix string, flag int) *Logger"},
+		{"Output", Func, 5, "func(calldepth int, s string) error"},
+		{"Panic", Func, 0, "func(v ...any)"},
+		{"Panicf", Func, 0, "func(format string, v ...any)"},
+		{"Panicln", Func, 0, "func(v ...any)"},
+		{"Prefix", Func, 0, "func() string"},
+		{"Print", Func, 0, "func(v ...any)"},
+		{"Printf", Func, 0, "func(format string, v ...any)"},
+		{"Println", Func, 0, "func(v ...any)"},
+		{"SetFlags", Func, 0, "func(flag int)"},
+		{"SetOutput", Func, 0, "func(w io.Writer)"},
+		{"SetPrefix", Func, 0, "func(prefix string)"},
+		{"Writer", Func, 13, "func() io.Writer"},
 	},
 	"log/slog": {
-		{"(*JSONHandler).Enabled", Method, 21},
-		{"(*JSONHandler).Handle", Method, 21},
-		{"(*JSONHandler).WithAttrs", Method, 21},
-		{"(*JSONHandler).WithGroup", Method, 21},
-		{"(*Level).UnmarshalJSON", Method, 21},
-		{"(*Level).UnmarshalText", Method, 21},
-		{"(*LevelVar).AppendText", Method, 24},
-		{"(*LevelVar).Level", Method, 21},
-		{"(*LevelVar).MarshalText", Method, 21},
-		{"(*LevelVar).Set", Method, 21},
-		{"(*LevelVar).String", Method, 21},
-		{"(*LevelVar).UnmarshalText", Method, 21},
-		{"(*Logger).Debug", Method, 21},
-		{"(*Logger).DebugContext", Method, 21},
-		{"(*Logger).Enabled", Method, 21},
-		{"(*Logger).Error", Method, 21},
-		{"(*Logger).ErrorContext", Method, 21},
-		{"(*Logger).Handler", Method, 21},
-		{"(*Logger).Info", Method, 21},
-		{"(*Logger).InfoContext", Method, 21},
-		{"(*Logger).Log", Method, 21},
-		{"(*Logger).LogAttrs", Method, 21},
-		{"(*Logger).Warn", Method, 21},
-		{"(*Logger).WarnContext", Method, 21},
-		{"(*Logger).With", Method, 21},
-		{"(*Logger).WithGroup", Method, 21},
-		{"(*Record).Add", Method, 21},
-		{"(*Record).AddAttrs", Method, 21},
-		{"(*TextHandler).Enabled", Method, 21},
-		{"(*TextHandler).Handle", Method, 21},
-		{"(*TextHandler).WithAttrs", Method, 21},
-		{"(*TextHandler).WithGroup", Method, 21},
-		{"(Attr).Equal", Method, 21},
-		{"(Attr).String", Method, 21},
-		{"(Kind).String", Method, 21},
-		{"(Level).AppendText", Method, 24},
-		{"(Level).Level", Method, 21},
-		{"(Level).MarshalJSON", Method, 21},
-		{"(Level).MarshalText", Method, 21},
-		{"(Level).String", Method, 21},
-		{"(Record).Attrs", Method, 21},
-		{"(Record).Clone", Method, 21},
-		{"(Record).NumAttrs", Method, 21},
-		{"(Value).Any", Method, 21},
-		{"(Value).Bool", Method, 21},
-		{"(Value).Duration", Method, 21},
-		{"(Value).Equal", Method, 21},
-		{"(Value).Float64", Method, 21},
-		{"(Value).Group", Method, 21},
-		{"(Value).Int64", Method, 21},
-		{"(Value).Kind", Method, 21},
-		{"(Value).LogValuer", Method, 21},
-		{"(Value).Resolve", Method, 21},
-		{"(Value).String", Method, 21},
-		{"(Value).Time", Method, 21},
-		{"(Value).Uint64", Method, 21},
-		{"Any", Func, 21},
-		{"AnyValue", Func, 21},
-		{"Attr", Type, 21},
-		{"Attr.Key", Field, 21},
-		{"Attr.Value", Field, 21},
-		{"Bool", Func, 21},
-		{"BoolValue", Func, 21},
-		{"Debug", Func, 21},
-		{"DebugContext", Func, 21},
-		{"Default", Func, 21},
-		{"DiscardHandler", Var, 24},
-		{"Duration", Func, 21},
-		{"DurationValue", Func, 21},
-		{"Error", Func, 21},
-		{"ErrorContext", Func, 21},
-		{"Float64", Func, 21},
-		{"Float64Value", Func, 21},
-		{"Group", Func, 21},
-		{"GroupValue", Func, 21},
-		{"Handler", Type, 21},
-		{"HandlerOptions", Type, 21},
-		{"HandlerOptions.AddSource", Field, 21},
-		{"HandlerOptions.Level", Field, 21},
-		{"HandlerOptions.ReplaceAttr", Field, 21},
-		{"Info", Func, 21},
-		{"InfoContext", Func, 21},
-		{"Int", Func, 21},
-		{"Int64", Func, 21},
-		{"Int64Value", Func, 21},
-		{"IntValue", Func, 21},
-		{"JSONHandler", Type, 21},
-		{"Kind", Type, 21},
-		{"KindAny", Const, 21},
-		{"KindBool", Const, 21},
-		{"KindDuration", Const, 21},
-		{"KindFloat64", Const, 21},
-		{"KindGroup", Const, 21},
-		{"KindInt64", Const, 21},
-		{"KindLogValuer", Const, 21},
-		{"KindString", Const, 21},
-		{"KindTime", Const, 21},
-		{"KindUint64", Const, 21},
-		{"Level", Type, 21},
-		{"LevelDebug", Const, 21},
-		{"LevelError", Const, 21},
-		{"LevelInfo", Const, 21},
-		{"LevelKey", Const, 21},
-		{"LevelVar", Type, 21},
-		{"LevelWarn", Const, 21},
-		{"Leveler", Type, 21},
-		{"Log", Func, 21},
-		{"LogAttrs", Func, 21},
-		{"LogValuer", Type, 21},
-		{"Logger", Type, 21},
-		{"MessageKey", Const, 21},
-		{"New", Func, 21},
-		{"NewJSONHandler", Func, 21},
-		{"NewLogLogger", Func, 21},
-		{"NewRecord", Func, 21},
-		{"NewTextHandler", Func, 21},
-		{"Record", Type, 21},
-		{"Record.Level", Field, 21},
-		{"Record.Message", Field, 21},
-		{"Record.PC", Field, 21},
-		{"Record.Time", Field, 21},
-		{"SetDefault", Func, 21},
-		{"SetLogLoggerLevel", Func, 22},
-		{"Source", Type, 21},
-		{"Source.File", Field, 21},
-		{"Source.Function", Field, 21},
-		{"Source.Line", Field, 21},
-		{"SourceKey", Const, 21},
-		{"String", Func, 21},
-		{"StringValue", Func, 21},
-		{"TextHandler", Type, 21},
-		{"Time", Func, 21},
-		{"TimeKey", Const, 21},
-		{"TimeValue", Func, 21},
-		{"Uint64", Func, 21},
-		{"Uint64Value", Func, 21},
-		{"Value", Type, 21},
-		{"Warn", Func, 21},
-		{"WarnContext", Func, 21},
-		{"With", Func, 21},
+		{"(*JSONHandler).Enabled", Method, 21, ""},
+		{"(*JSONHandler).Handle", Method, 21, ""},
+		{"(*JSONHandler).WithAttrs", Method, 21, ""},
+		{"(*JSONHandler).WithGroup", Method, 21, ""},
+		{"(*Level).UnmarshalJSON", Method, 21, ""},
+		{"(*Level).UnmarshalText", Method, 21, ""},
+		{"(*LevelVar).AppendText", Method, 24, ""},
+		{"(*LevelVar).Level", Method, 21, ""},
+		{"(*LevelVar).MarshalText", Method, 21, ""},
+		{"(*LevelVar).Set", Method, 21, ""},
+		{"(*LevelVar).String", Method, 21, ""},
+		{"(*LevelVar).UnmarshalText", Method, 21, ""},
+		{"(*Logger).Debug", Method, 21, ""},
+		{"(*Logger).DebugContext", Method, 21, ""},
+		{"(*Logger).Enabled", Method, 21, ""},
+		{"(*Logger).Error", Method, 21, ""},
+		{"(*Logger).ErrorContext", Method, 21, ""},
+		{"(*Logger).Handler", Method, 21, ""},
+		{"(*Logger).Info", Method, 21, ""},
+		{"(*Logger).InfoContext", Method, 21, ""},
+		{"(*Logger).Log", Method, 21, ""},
+		{"(*Logger).LogAttrs", Method, 21, ""},
+		{"(*Logger).Warn", Method, 21, ""},
+		{"(*Logger).WarnContext", Method, 21, ""},
+		{"(*Logger).With", Method, 21, ""},
+		{"(*Logger).WithGroup", Method, 21, ""},
+		{"(*Record).Add", Method, 21, ""},
+		{"(*Record).AddAttrs", Method, 21, ""},
+		{"(*TextHandler).Enabled", Method, 21, ""},
+		{"(*TextHandler).Handle", Method, 21, ""},
+		{"(*TextHandler).WithAttrs", Method, 21, ""},
+		{"(*TextHandler).WithGroup", Method, 21, ""},
+		{"(Attr).Equal", Method, 21, ""},
+		{"(Attr).String", Method, 21, ""},
+		{"(Kind).String", Method, 21, ""},
+		{"(Level).AppendText", Method, 24, ""},
+		{"(Level).Level", Method, 21, ""},
+		{"(Level).MarshalJSON", Method, 21, ""},
+		{"(Level).MarshalText", Method, 21, ""},
+		{"(Level).String", Method, 21, ""},
+		{"(Record).Attrs", Method, 21, ""},
+		{"(Record).Clone", Method, 21, ""},
+		{"(Record).NumAttrs", Method, 21, ""},
+		{"(Value).Any", Method, 21, ""},
+		{"(Value).Bool", Method, 21, ""},
+		{"(Value).Duration", Method, 21, ""},
+		{"(Value).Equal", Method, 21, ""},
+		{"(Value).Float64", Method, 21, ""},
+		{"(Value).Group", Method, 21, ""},
+		{"(Value).Int64", Method, 21, ""},
+		{"(Value).Kind", Method, 21, ""},
+		{"(Value).LogValuer", Method, 21, ""},
+		{"(Value).Resolve", Method, 21, ""},
+		{"(Value).String", Method, 21, ""},
+		{"(Value).Time", Method, 21, ""},
+		{"(Value).Uint64", Method, 21, ""},
+		{"Any", Func, 21, "func(key string, value any) Attr"},
+		{"AnyValue", Func, 21, "func(v any) Value"},
+		{"Attr", Type, 21, ""},
+		{"Attr.Key", Field, 21, ""},
+		{"Attr.Value", Field, 21, ""},
+		{"Bool", Func, 21, "func(key string, v bool) Attr"},
+		{"BoolValue", Func, 21, "func(v bool) Value"},
+		{"Debug", Func, 21, "func(msg string, args ...any)"},
+		{"DebugContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
+		{"Default", Func, 21, "func() *Logger"},
+		{"DiscardHandler", Var, 24, ""},
+		{"Duration", Func, 21, "func(key string, v time.Duration) Attr"},
+		{"DurationValue", Func, 21, "func(v time.Duration) Value"},
+		{"Error", Func, 21, "func(msg string, args ...any)"},
+		{"ErrorContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
+		{"Float64", Func, 21, "func(key string, v float64) Attr"},
+		{"Float64Value", Func, 21, "func(v float64) Value"},
+		{"Group", Func, 21, "func(key string, args ...any) Attr"},
+		{"GroupValue", Func, 21, "func(as ...Attr) Value"},
+		{"Handler", Type, 21, ""},
+		{"HandlerOptions", Type, 21, ""},
+		{"HandlerOptions.AddSource", Field, 21, ""},
+		{"HandlerOptions.Level", Field, 21, ""},
+		{"HandlerOptions.ReplaceAttr", Field, 21, ""},
+		{"Info", Func, 21, "func(msg string, args ...any)"},
+		{"InfoContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
+		{"Int", Func, 21, "func(key string, value int) Attr"},
+		{"Int64", Func, 21, "func(key string, value int64) Attr"},
+		{"Int64Value", Func, 21, "func(v int64) Value"},
+		{"IntValue", Func, 21, "func(v int) Value"},
+		{"JSONHandler", Type, 21, ""},
+		{"Kind", Type, 21, ""},
+		{"KindAny", Const, 21, ""},
+		{"KindBool", Const, 21, ""},
+		{"KindDuration", Const, 21, ""},
+		{"KindFloat64", Const, 21, ""},
+		{"KindGroup", Const, 21, ""},
+		{"KindInt64", Const, 21, ""},
+		{"KindLogValuer", Const, 21, ""},
+		{"KindString", Const, 21, ""},
+		{"KindTime", Const, 21, ""},
+		{"KindUint64", Const, 21, ""},
+		{"Level", Type, 21, ""},
+		{"LevelDebug", Const, 21, ""},
+		{"LevelError", Const, 21, ""},
+		{"LevelInfo", Const, 21, ""},
+		{"LevelKey", Const, 21, ""},
+		{"LevelVar", Type, 21, ""},
+		{"LevelWarn", Const, 21, ""},
+		{"Leveler", Type, 21, ""},
+		{"Log", Func, 21, "func(ctx context.Context, level Level, msg string, args ...any)"},
+		{"LogAttrs", Func, 21, "func(ctx context.Context, level Level, msg string, attrs ...Attr)"},
+		{"LogValuer", Type, 21, ""},
+		{"Logger", Type, 21, ""},
+		{"MessageKey", Const, 21, ""},
+		{"New", Func, 21, "func(h Handler) *Logger"},
+		{"NewJSONHandler", Func, 21, "func(w io.Writer, opts *HandlerOptions) *JSONHandler"},
+		{"NewLogLogger", Func, 21, "func(h Handler, level Level) *log.Logger"},
+		{"NewRecord", Func, 21, "func(t time.Time, level Level, msg string, pc uintptr) Record"},
+		{"NewTextHandler", Func, 21, "func(w io.Writer, opts *HandlerOptions) *TextHandler"},
+		{"Record", Type, 21, ""},
+		{"Record.Level", Field, 21, ""},
+		{"Record.Message", Field, 21, ""},
+		{"Record.PC", Field, 21, ""},
+		{"Record.Time", Field, 21, ""},
+		{"SetDefault", Func, 21, "func(l *Logger)"},
+		{"SetLogLoggerLevel", Func, 22, "func(level Level) (oldLevel Level)"},
+		{"Source", Type, 21, ""},
+		{"Source.File", Field, 21, ""},
+		{"Source.Function", Field, 21, ""},
+		{"Source.Line", Field, 21, ""},
+		{"SourceKey", Const, 21, ""},
+		{"String", Func, 21, "func(key string, value string) Attr"},
+		{"StringValue", Func, 21, "func(value string) Value"},
+		{"TextHandler", Type, 21, ""},
+		{"Time", Func, 21, "func(key string, v time.Time) Attr"},
+		{"TimeKey", Const, 21, ""},
+		{"TimeValue", Func, 21, "func(v time.Time) Value"},
+		{"Uint64", Func, 21, "func(key string, v uint64) Attr"},
+		{"Uint64Value", Func, 21, "func(v uint64) Value"},
+		{"Value", Type, 21, ""},
+		{"Warn", Func, 21, "func(msg string, args ...any)"},
+		{"WarnContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
+		{"With", Func, 21, "func(args ...any) *Logger"},
 	},
 	"log/syslog": {
-		{"(*Writer).Alert", Method, 0},
-		{"(*Writer).Close", Method, 0},
-		{"(*Writer).Crit", Method, 0},
-		{"(*Writer).Debug", Method, 0},
-		{"(*Writer).Emerg", Method, 0},
-		{"(*Writer).Err", Method, 0},
-		{"(*Writer).Info", Method, 0},
-		{"(*Writer).Notice", Method, 0},
-		{"(*Writer).Warning", Method, 0},
-		{"(*Writer).Write", Method, 0},
-		{"Dial", Func, 0},
-		{"LOG_ALERT", Const, 0},
-		{"LOG_AUTH", Const, 1},
-		{"LOG_AUTHPRIV", Const, 1},
-		{"LOG_CRIT", Const, 0},
-		{"LOG_CRON", Const, 1},
-		{"LOG_DAEMON", Const, 1},
-		{"LOG_DEBUG", Const, 0},
-		{"LOG_EMERG", Const, 0},
-		{"LOG_ERR", Const, 0},
-		{"LOG_FTP", Const, 1},
-		{"LOG_INFO", Const, 0},
-		{"LOG_KERN", Const, 1},
-		{"LOG_LOCAL0", Const, 1},
-		{"LOG_LOCAL1", Const, 1},
-		{"LOG_LOCAL2", Const, 1},
-		{"LOG_LOCAL3", Const, 1},
-		{"LOG_LOCAL4", Const, 1},
-		{"LOG_LOCAL5", Const, 1},
-		{"LOG_LOCAL6", Const, 1},
-		{"LOG_LOCAL7", Const, 1},
-		{"LOG_LPR", Const, 1},
-		{"LOG_MAIL", Const, 1},
-		{"LOG_NEWS", Const, 1},
-		{"LOG_NOTICE", Const, 0},
-		{"LOG_SYSLOG", Const, 1},
-		{"LOG_USER", Const, 1},
-		{"LOG_UUCP", Const, 1},
-		{"LOG_WARNING", Const, 0},
-		{"New", Func, 0},
-		{"NewLogger", Func, 0},
-		{"Priority", Type, 0},
-		{"Writer", Type, 0},
+		{"(*Writer).Alert", Method, 0, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Crit", Method, 0, ""},
+		{"(*Writer).Debug", Method, 0, ""},
+		{"(*Writer).Emerg", Method, 0, ""},
+		{"(*Writer).Err", Method, 0, ""},
+		{"(*Writer).Info", Method, 0, ""},
+		{"(*Writer).Notice", Method, 0, ""},
+		{"(*Writer).Warning", Method, 0, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"Dial", Func, 0, "func(network string, raddr string, priority Priority, tag string) (*Writer, error)"},
+		{"LOG_ALERT", Const, 0, ""},
+		{"LOG_AUTH", Const, 1, ""},
+		{"LOG_AUTHPRIV", Const, 1, ""},
+		{"LOG_CRIT", Const, 0, ""},
+		{"LOG_CRON", Const, 1, ""},
+		{"LOG_DAEMON", Const, 1, ""},
+		{"LOG_DEBUG", Const, 0, ""},
+		{"LOG_EMERG", Const, 0, ""},
+		{"LOG_ERR", Const, 0, ""},
+		{"LOG_FTP", Const, 1, ""},
+		{"LOG_INFO", Const, 0, ""},
+		{"LOG_KERN", Const, 1, ""},
+		{"LOG_LOCAL0", Const, 1, ""},
+		{"LOG_LOCAL1", Const, 1, ""},
+		{"LOG_LOCAL2", Const, 1, ""},
+		{"LOG_LOCAL3", Const, 1, ""},
+		{"LOG_LOCAL4", Const, 1, ""},
+		{"LOG_LOCAL5", Const, 1, ""},
+		{"LOG_LOCAL6", Const, 1, ""},
+		{"LOG_LOCAL7", Const, 1, ""},
+		{"LOG_LPR", Const, 1, ""},
+		{"LOG_MAIL", Const, 1, ""},
+		{"LOG_NEWS", Const, 1, ""},
+		{"LOG_NOTICE", Const, 0, ""},
+		{"LOG_SYSLOG", Const, 1, ""},
+		{"LOG_USER", Const, 1, ""},
+		{"LOG_UUCP", Const, 1, ""},
+		{"LOG_WARNING", Const, 0, ""},
+		{"New", Func, 0, "func(priority Priority, tag string) (*Writer, error)"},
+		{"NewLogger", Func, 0, "func(p Priority, logFlag int) (*log.Logger, error)"},
+		{"Priority", Type, 0, ""},
+		{"Writer", Type, 0, ""},
 	},
 	"maps": {
-		{"All", Func, 23},
-		{"Clone", Func, 21},
-		{"Collect", Func, 23},
-		{"Copy", Func, 21},
-		{"DeleteFunc", Func, 21},
-		{"Equal", Func, 21},
-		{"EqualFunc", Func, 21},
-		{"Insert", Func, 23},
-		{"Keys", Func, 23},
-		{"Values", Func, 23},
+		{"All", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map) iter.Seq2[K, V]"},
+		{"Clone", Func, 21, "func[M ~map[K]V, K comparable, V any](m M) M"},
+		{"Collect", Func, 23, "func[K comparable, V any](seq iter.Seq2[K, V]) map[K]V"},
+		{"Copy", Func, 21, "func[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2)"},
+		{"DeleteFunc", Func, 21, "func[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool)"},
+		{"Equal", Func, 21, "func[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool"},
+		{"EqualFunc", Func, 21, "func[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool"},
+		{"Insert", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map, seq iter.Seq2[K, V])"},
+		{"Keys", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map) iter.Seq[K]"},
+		{"Values", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map) iter.Seq[V]"},
 	},
 	"math": {
-		{"Abs", Func, 0},
-		{"Acos", Func, 0},
-		{"Acosh", Func, 0},
-		{"Asin", Func, 0},
-		{"Asinh", Func, 0},
-		{"Atan", Func, 0},
-		{"Atan2", Func, 0},
-		{"Atanh", Func, 0},
-		{"Cbrt", Func, 0},
-		{"Ceil", Func, 0},
-		{"Copysign", Func, 0},
-		{"Cos", Func, 0},
-		{"Cosh", Func, 0},
-		{"Dim", Func, 0},
-		{"E", Const, 0},
-		{"Erf", Func, 0},
-		{"Erfc", Func, 0},
-		{"Erfcinv", Func, 10},
-		{"Erfinv", Func, 10},
-		{"Exp", Func, 0},
-		{"Exp2", Func, 0},
-		{"Expm1", Func, 0},
-		{"FMA", Func, 14},
-		{"Float32bits", Func, 0},
-		{"Float32frombits", Func, 0},
-		{"Float64bits", Func, 0},
-		{"Float64frombits", Func, 0},
-		{"Floor", Func, 0},
-		{"Frexp", Func, 0},
-		{"Gamma", Func, 0},
-		{"Hypot", Func, 0},
-		{"Ilogb", Func, 0},
-		{"Inf", Func, 0},
-		{"IsInf", Func, 0},
-		{"IsNaN", Func, 0},
-		{"J0", Func, 0},
-		{"J1", Func, 0},
-		{"Jn", Func, 0},
-		{"Ldexp", Func, 0},
-		{"Lgamma", Func, 0},
-		{"Ln10", Const, 0},
-		{"Ln2", Const, 0},
-		{"Log", Func, 0},
-		{"Log10", Func, 0},
-		{"Log10E", Const, 0},
-		{"Log1p", Func, 0},
-		{"Log2", Func, 0},
-		{"Log2E", Const, 0},
-		{"Logb", Func, 0},
-		{"Max", Func, 0},
-		{"MaxFloat32", Const, 0},
-		{"MaxFloat64", Const, 0},
-		{"MaxInt", Const, 17},
-		{"MaxInt16", Const, 0},
-		{"MaxInt32", Const, 0},
-		{"MaxInt64", Const, 0},
-		{"MaxInt8", Const, 0},
-		{"MaxUint", Const, 17},
-		{"MaxUint16", Const, 0},
-		{"MaxUint32", Const, 0},
-		{"MaxUint64", Const, 0},
-		{"MaxUint8", Const, 0},
-		{"Min", Func, 0},
-		{"MinInt", Const, 17},
-		{"MinInt16", Const, 0},
-		{"MinInt32", Const, 0},
-		{"MinInt64", Const, 0},
-		{"MinInt8", Const, 0},
-		{"Mod", Func, 0},
-		{"Modf", Func, 0},
-		{"NaN", Func, 0},
-		{"Nextafter", Func, 0},
-		{"Nextafter32", Func, 4},
-		{"Phi", Const, 0},
-		{"Pi", Const, 0},
-		{"Pow", Func, 0},
-		{"Pow10", Func, 0},
-		{"Remainder", Func, 0},
-		{"Round", Func, 10},
-		{"RoundToEven", Func, 10},
-		{"Signbit", Func, 0},
-		{"Sin", Func, 0},
-		{"Sincos", Func, 0},
-		{"Sinh", Func, 0},
-		{"SmallestNonzeroFloat32", Const, 0},
-		{"SmallestNonzeroFloat64", Const, 0},
-		{"Sqrt", Func, 0},
-		{"Sqrt2", Const, 0},
-		{"SqrtE", Const, 0},
-		{"SqrtPhi", Const, 0},
-		{"SqrtPi", Const, 0},
-		{"Tan", Func, 0},
-		{"Tanh", Func, 0},
-		{"Trunc", Func, 0},
-		{"Y0", Func, 0},
-		{"Y1", Func, 0},
-		{"Yn", Func, 0},
+		{"Abs", Func, 0, "func(x float64) float64"},
+		{"Acos", Func, 0, "func(x float64) float64"},
+		{"Acosh", Func, 0, "func(x float64) float64"},
+		{"Asin", Func, 0, "func(x float64) float64"},
+		{"Asinh", Func, 0, "func(x float64) float64"},
+		{"Atan", Func, 0, "func(x float64) float64"},
+		{"Atan2", Func, 0, "func(y float64, x float64) float64"},
+		{"Atanh", Func, 0, "func(x float64) float64"},
+		{"Cbrt", Func, 0, "func(x float64) float64"},
+		{"Ceil", Func, 0, "func(x float64) float64"},
+		{"Copysign", Func, 0, "func(f float64, sign float64) float64"},
+		{"Cos", Func, 0, "func(x float64) float64"},
+		{"Cosh", Func, 0, "func(x float64) float64"},
+		{"Dim", Func, 0, "func(x float64, y float64) float64"},
+		{"E", Const, 0, ""},
+		{"Erf", Func, 0, "func(x float64) float64"},
+		{"Erfc", Func, 0, "func(x float64) float64"},
+		{"Erfcinv", Func, 10, "func(x float64) float64"},
+		{"Erfinv", Func, 10, "func(x float64) float64"},
+		{"Exp", Func, 0, "func(x float64) float64"},
+		{"Exp2", Func, 0, "func(x float64) float64"},
+		{"Expm1", Func, 0, "func(x float64) float64"},
+		{"FMA", Func, 14, "func(x float64, y float64, z float64) float64"},
+		{"Float32bits", Func, 0, "func(f float32) uint32"},
+		{"Float32frombits", Func, 0, "func(b uint32) float32"},
+		{"Float64bits", Func, 0, "func(f float64) uint64"},
+		{"Float64frombits", Func, 0, "func(b uint64) float64"},
+		{"Floor", Func, 0, "func(x float64) float64"},
+		{"Frexp", Func, 0, "func(f float64) (frac float64, exp int)"},
+		{"Gamma", Func, 0, "func(x float64) float64"},
+		{"Hypot", Func, 0, "func(p float64, q float64) float64"},
+		{"Ilogb", Func, 0, "func(x float64) int"},
+		{"Inf", Func, 0, "func(sign int) float64"},
+		{"IsInf", Func, 0, "func(f float64, sign int) bool"},
+		{"IsNaN", Func, 0, "func(f float64) (is bool)"},
+		{"J0", Func, 0, "func(x float64) float64"},
+		{"J1", Func, 0, "func(x float64) float64"},
+		{"Jn", Func, 0, "func(n int, x float64) float64"},
+		{"Ldexp", Func, 0, "func(frac float64, exp int) float64"},
+		{"Lgamma", Func, 0, "func(x float64) (lgamma float64, sign int)"},
+		{"Ln10", Const, 0, ""},
+		{"Ln2", Const, 0, ""},
+		{"Log", Func, 0, "func(x float64) float64"},
+		{"Log10", Func, 0, "func(x float64) float64"},
+		{"Log10E", Const, 0, ""},
+		{"Log1p", Func, 0, "func(x float64) float64"},
+		{"Log2", Func, 0, "func(x float64) float64"},
+		{"Log2E", Const, 0, ""},
+		{"Logb", Func, 0, "func(x float64) float64"},
+		{"Max", Func, 0, "func(x float64, y float64) float64"},
+		{"MaxFloat32", Const, 0, ""},
+		{"MaxFloat64", Const, 0, ""},
+		{"MaxInt", Const, 17, ""},
+		{"MaxInt16", Const, 0, ""},
+		{"MaxInt32", Const, 0, ""},
+		{"MaxInt64", Const, 0, ""},
+		{"MaxInt8", Const, 0, ""},
+		{"MaxUint", Const, 17, ""},
+		{"MaxUint16", Const, 0, ""},
+		{"MaxUint32", Const, 0, ""},
+		{"MaxUint64", Const, 0, ""},
+		{"MaxUint8", Const, 0, ""},
+		{"Min", Func, 0, "func(x float64, y float64) float64"},
+		{"MinInt", Const, 17, ""},
+		{"MinInt16", Const, 0, ""},
+		{"MinInt32", Const, 0, ""},
+		{"MinInt64", Const, 0, ""},
+		{"MinInt8", Const, 0, ""},
+		{"Mod", Func, 0, "func(x float64, y float64) float64"},
+		{"Modf", Func, 0, "func(f float64) (int float64, frac float64)"},
+		{"NaN", Func, 0, "func() float64"},
+		{"Nextafter", Func, 0, "func(x float64, y float64) (r float64)"},
+		{"Nextafter32", Func, 4, "func(x float32, y float32) (r float32)"},
+		{"Phi", Const, 0, ""},
+		{"Pi", Const, 0, ""},
+		{"Pow", Func, 0, "func(x float64, y float64) float64"},
+		{"Pow10", Func, 0, "func(n int) float64"},
+		{"Remainder", Func, 0, "func(x float64, y float64) float64"},
+		{"Round", Func, 10, "func(x float64) float64"},
+		{"RoundToEven", Func, 10, "func(x float64) float64"},
+		{"Signbit", Func, 0, "func(x float64) bool"},
+		{"Sin", Func, 0, "func(x float64) float64"},
+		{"Sincos", Func, 0, "func(x float64) (sin float64, cos float64)"},
+		{"Sinh", Func, 0, "func(x float64) float64"},
+		{"SmallestNonzeroFloat32", Const, 0, ""},
+		{"SmallestNonzeroFloat64", Const, 0, ""},
+		{"Sqrt", Func, 0, "func(x float64) float64"},
+		{"Sqrt2", Const, 0, ""},
+		{"SqrtE", Const, 0, ""},
+		{"SqrtPhi", Const, 0, ""},
+		{"SqrtPi", Const, 0, ""},
+		{"Tan", Func, 0, "func(x float64) float64"},
+		{"Tanh", Func, 0, "func(x float64) float64"},
+		{"Trunc", Func, 0, "func(x float64) float64"},
+		{"Y0", Func, 0, "func(x float64) float64"},
+		{"Y1", Func, 0, "func(x float64) float64"},
+		{"Yn", Func, 0, "func(n int, x float64) float64"},
 	},
 	"math/big": {
-		{"(*Float).Abs", Method, 5},
-		{"(*Float).Acc", Method, 5},
-		{"(*Float).Add", Method, 5},
-		{"(*Float).Append", Method, 5},
-		{"(*Float).AppendText", Method, 24},
-		{"(*Float).Cmp", Method, 5},
-		{"(*Float).Copy", Method, 5},
-		{"(*Float).Float32", Method, 5},
-		{"(*Float).Float64", Method, 5},
-		{"(*Float).Format", Method, 5},
-		{"(*Float).GobDecode", Method, 7},
-		{"(*Float).GobEncode", Method, 7},
-		{"(*Float).Int", Method, 5},
-		{"(*Float).Int64", Method, 5},
-		{"(*Float).IsInf", Method, 5},
-		{"(*Float).IsInt", Method, 5},
-		{"(*Float).MantExp", Method, 5},
-		{"(*Float).MarshalText", Method, 6},
-		{"(*Float).MinPrec", Method, 5},
-		{"(*Float).Mode", Method, 5},
-		{"(*Float).Mul", Method, 5},
-		{"(*Float).Neg", Method, 5},
-		{"(*Float).Parse", Method, 5},
-		{"(*Float).Prec", Method, 5},
-		{"(*Float).Quo", Method, 5},
-		{"(*Float).Rat", Method, 5},
-		{"(*Float).Scan", Method, 8},
-		{"(*Float).Set", Method, 5},
-		{"(*Float).SetFloat64", Method, 5},
-		{"(*Float).SetInf", Method, 5},
-		{"(*Float).SetInt", Method, 5},
-		{"(*Float).SetInt64", Method, 5},
-		{"(*Float).SetMantExp", Method, 5},
-		{"(*Float).SetMode", Method, 5},
-		{"(*Float).SetPrec", Method, 5},
-		{"(*Float).SetRat", Method, 5},
-		{"(*Float).SetString", Method, 5},
-		{"(*Float).SetUint64", Method, 5},
-		{"(*Float).Sign", Method, 5},
-		{"(*Float).Signbit", Method, 5},
-		{"(*Float).Sqrt", Method, 10},
-		{"(*Float).String", Method, 5},
-		{"(*Float).Sub", Method, 5},
-		{"(*Float).Text", Method, 5},
-		{"(*Float).Uint64", Method, 5},
-		{"(*Float).UnmarshalText", Method, 6},
-		{"(*Int).Abs", Method, 0},
-		{"(*Int).Add", Method, 0},
-		{"(*Int).And", Method, 0},
-		{"(*Int).AndNot", Method, 0},
-		{"(*Int).Append", Method, 6},
-		{"(*Int).AppendText", Method, 24},
-		{"(*Int).Binomial", Method, 0},
-		{"(*Int).Bit", Method, 0},
-		{"(*Int).BitLen", Method, 0},
-		{"(*Int).Bits", Method, 0},
-		{"(*Int).Bytes", Method, 0},
-		{"(*Int).Cmp", Method, 0},
-		{"(*Int).CmpAbs", Method, 10},
-		{"(*Int).Div", Method, 0},
-		{"(*Int).DivMod", Method, 0},
-		{"(*Int).Exp", Method, 0},
-		{"(*Int).FillBytes", Method, 15},
-		{"(*Int).Float64", Method, 21},
-		{"(*Int).Format", Method, 0},
-		{"(*Int).GCD", Method, 0},
-		{"(*Int).GobDecode", Method, 0},
-		{"(*Int).GobEncode", Method, 0},
-		{"(*Int).Int64", Method, 0},
-		{"(*Int).IsInt64", Method, 9},
-		{"(*Int).IsUint64", Method, 9},
-		{"(*Int).Lsh", Method, 0},
-		{"(*Int).MarshalJSON", Method, 1},
-		{"(*Int).MarshalText", Method, 3},
-		{"(*Int).Mod", Method, 0},
-		{"(*Int).ModInverse", Method, 0},
-		{"(*Int).ModSqrt", Method, 5},
-		{"(*Int).Mul", Method, 0},
-		{"(*Int).MulRange", Method, 0},
-		{"(*Int).Neg", Method, 0},
-		{"(*Int).Not", Method, 0},
-		{"(*Int).Or", Method, 0},
-		{"(*Int).ProbablyPrime", Method, 0},
-		{"(*Int).Quo", Method, 0},
-		{"(*Int).QuoRem", Method, 0},
-		{"(*Int).Rand", Method, 0},
-		{"(*Int).Rem", Method, 0},
-		{"(*Int).Rsh", Method, 0},
-		{"(*Int).Scan", Method, 0},
-		{"(*Int).Set", Method, 0},
-		{"(*Int).SetBit", Method, 0},
-		{"(*Int).SetBits", Method, 0},
-		{"(*Int).SetBytes", Method, 0},
-		{"(*Int).SetInt64", Method, 0},
-		{"(*Int).SetString", Method, 0},
-		{"(*Int).SetUint64", Method, 1},
-		{"(*Int).Sign", Method, 0},
-		{"(*Int).Sqrt", Method, 8},
-		{"(*Int).String", Method, 0},
-		{"(*Int).Sub", Method, 0},
-		{"(*Int).Text", Method, 6},
-		{"(*Int).TrailingZeroBits", Method, 13},
-		{"(*Int).Uint64", Method, 1},
-		{"(*Int).UnmarshalJSON", Method, 1},
-		{"(*Int).UnmarshalText", Method, 3},
-		{"(*Int).Xor", Method, 0},
-		{"(*Rat).Abs", Method, 0},
-		{"(*Rat).Add", Method, 0},
-		{"(*Rat).AppendText", Method, 24},
-		{"(*Rat).Cmp", Method, 0},
-		{"(*Rat).Denom", Method, 0},
-		{"(*Rat).Float32", Method, 4},
-		{"(*Rat).Float64", Method, 1},
-		{"(*Rat).FloatPrec", Method, 22},
-		{"(*Rat).FloatString", Method, 0},
-		{"(*Rat).GobDecode", Method, 0},
-		{"(*Rat).GobEncode", Method, 0},
-		{"(*Rat).Inv", Method, 0},
-		{"(*Rat).IsInt", Method, 0},
-		{"(*Rat).MarshalText", Method, 3},
-		{"(*Rat).Mul", Method, 0},
-		{"(*Rat).Neg", Method, 0},
-		{"(*Rat).Num", Method, 0},
-		{"(*Rat).Quo", Method, 0},
-		{"(*Rat).RatString", Method, 0},
-		{"(*Rat).Scan", Method, 0},
-		{"(*Rat).Set", Method, 0},
-		{"(*Rat).SetFloat64", Method, 1},
-		{"(*Rat).SetFrac", Method, 0},
-		{"(*Rat).SetFrac64", Method, 0},
-		{"(*Rat).SetInt", Method, 0},
-		{"(*Rat).SetInt64", Method, 0},
-		{"(*Rat).SetString", Method, 0},
-		{"(*Rat).SetUint64", Method, 13},
-		{"(*Rat).Sign", Method, 0},
-		{"(*Rat).String", Method, 0},
-		{"(*Rat).Sub", Method, 0},
-		{"(*Rat).UnmarshalText", Method, 3},
-		{"(Accuracy).String", Method, 5},
-		{"(ErrNaN).Error", Method, 5},
-		{"(RoundingMode).String", Method, 5},
-		{"Above", Const, 5},
-		{"Accuracy", Type, 5},
-		{"AwayFromZero", Const, 5},
-		{"Below", Const, 5},
-		{"ErrNaN", Type, 5},
-		{"Exact", Const, 5},
-		{"Float", Type, 5},
-		{"Int", Type, 0},
-		{"Jacobi", Func, 5},
-		{"MaxBase", Const, 0},
-		{"MaxExp", Const, 5},
-		{"MaxPrec", Const, 5},
-		{"MinExp", Const, 5},
-		{"NewFloat", Func, 5},
-		{"NewInt", Func, 0},
-		{"NewRat", Func, 0},
-		{"ParseFloat", Func, 5},
-		{"Rat", Type, 0},
-		{"RoundingMode", Type, 5},
-		{"ToNearestAway", Const, 5},
-		{"ToNearestEven", Const, 5},
-		{"ToNegativeInf", Const, 5},
-		{"ToPositiveInf", Const, 5},
-		{"ToZero", Const, 5},
-		{"Word", Type, 0},
+		{"(*Float).Abs", Method, 5, ""},
+		{"(*Float).Acc", Method, 5, ""},
+		{"(*Float).Add", Method, 5, ""},
+		{"(*Float).Append", Method, 5, ""},
+		{"(*Float).AppendText", Method, 24, ""},
+		{"(*Float).Cmp", Method, 5, ""},
+		{"(*Float).Copy", Method, 5, ""},
+		{"(*Float).Float32", Method, 5, ""},
+		{"(*Float).Float64", Method, 5, ""},
+		{"(*Float).Format", Method, 5, ""},
+		{"(*Float).GobDecode", Method, 7, ""},
+		{"(*Float).GobEncode", Method, 7, ""},
+		{"(*Float).Int", Method, 5, ""},
+		{"(*Float).Int64", Method, 5, ""},
+		{"(*Float).IsInf", Method, 5, ""},
+		{"(*Float).IsInt", Method, 5, ""},
+		{"(*Float).MantExp", Method, 5, ""},
+		{"(*Float).MarshalText", Method, 6, ""},
+		{"(*Float).MinPrec", Method, 5, ""},
+		{"(*Float).Mode", Method, 5, ""},
+		{"(*Float).Mul", Method, 5, ""},
+		{"(*Float).Neg", Method, 5, ""},
+		{"(*Float).Parse", Method, 5, ""},
+		{"(*Float).Prec", Method, 5, ""},
+		{"(*Float).Quo", Method, 5, ""},
+		{"(*Float).Rat", Method, 5, ""},
+		{"(*Float).Scan", Method, 8, ""},
+		{"(*Float).Set", Method, 5, ""},
+		{"(*Float).SetFloat64", Method, 5, ""},
+		{"(*Float).SetInf", Method, 5, ""},
+		{"(*Float).SetInt", Method, 5, ""},
+		{"(*Float).SetInt64", Method, 5, ""},
+		{"(*Float).SetMantExp", Method, 5, ""},
+		{"(*Float).SetMode", Method, 5, ""},
+		{"(*Float).SetPrec", Method, 5, ""},
+		{"(*Float).SetRat", Method, 5, ""},
+		{"(*Float).SetString", Method, 5, ""},
+		{"(*Float).SetUint64", Method, 5, ""},
+		{"(*Float).Sign", Method, 5, ""},
+		{"(*Float).Signbit", Method, 5, ""},
+		{"(*Float).Sqrt", Method, 10, ""},
+		{"(*Float).String", Method, 5, ""},
+		{"(*Float).Sub", Method, 5, ""},
+		{"(*Float).Text", Method, 5, ""},
+		{"(*Float).Uint64", Method, 5, ""},
+		{"(*Float).UnmarshalText", Method, 6, ""},
+		{"(*Int).Abs", Method, 0, ""},
+		{"(*Int).Add", Method, 0, ""},
+		{"(*Int).And", Method, 0, ""},
+		{"(*Int).AndNot", Method, 0, ""},
+		{"(*Int).Append", Method, 6, ""},
+		{"(*Int).AppendText", Method, 24, ""},
+		{"(*Int).Binomial", Method, 0, ""},
+		{"(*Int).Bit", Method, 0, ""},
+		{"(*Int).BitLen", Method, 0, ""},
+		{"(*Int).Bits", Method, 0, ""},
+		{"(*Int).Bytes", Method, 0, ""},
+		{"(*Int).Cmp", Method, 0, ""},
+		{"(*Int).CmpAbs", Method, 10, ""},
+		{"(*Int).Div", Method, 0, ""},
+		{"(*Int).DivMod", Method, 0, ""},
+		{"(*Int).Exp", Method, 0, ""},
+		{"(*Int).FillBytes", Method, 15, ""},
+		{"(*Int).Float64", Method, 21, ""},
+		{"(*Int).Format", Method, 0, ""},
+		{"(*Int).GCD", Method, 0, ""},
+		{"(*Int).GobDecode", Method, 0, ""},
+		{"(*Int).GobEncode", Method, 0, ""},
+		{"(*Int).Int64", Method, 0, ""},
+		{"(*Int).IsInt64", Method, 9, ""},
+		{"(*Int).IsUint64", Method, 9, ""},
+		{"(*Int).Lsh", Method, 0, ""},
+		{"(*Int).MarshalJSON", Method, 1, ""},
+		{"(*Int).MarshalText", Method, 3, ""},
+		{"(*Int).Mod", Method, 0, ""},
+		{"(*Int).ModInverse", Method, 0, ""},
+		{"(*Int).ModSqrt", Method, 5, ""},
+		{"(*Int).Mul", Method, 0, ""},
+		{"(*Int).MulRange", Method, 0, ""},
+		{"(*Int).Neg", Method, 0, ""},
+		{"(*Int).Not", Method, 0, ""},
+		{"(*Int).Or", Method, 0, ""},
+		{"(*Int).ProbablyPrime", Method, 0, ""},
+		{"(*Int).Quo", Method, 0, ""},
+		{"(*Int).QuoRem", Method, 0, ""},
+		{"(*Int).Rand", Method, 0, ""},
+		{"(*Int).Rem", Method, 0, ""},
+		{"(*Int).Rsh", Method, 0, ""},
+		{"(*Int).Scan", Method, 0, ""},
+		{"(*Int).Set", Method, 0, ""},
+		{"(*Int).SetBit", Method, 0, ""},
+		{"(*Int).SetBits", Method, 0, ""},
+		{"(*Int).SetBytes", Method, 0, ""},
+		{"(*Int).SetInt64", Method, 0, ""},
+		{"(*Int).SetString", Method, 0, ""},
+		{"(*Int).SetUint64", Method, 1, ""},
+		{"(*Int).Sign", Method, 0, ""},
+		{"(*Int).Sqrt", Method, 8, ""},
+		{"(*Int).String", Method, 0, ""},
+		{"(*Int).Sub", Method, 0, ""},
+		{"(*Int).Text", Method, 6, ""},
+		{"(*Int).TrailingZeroBits", Method, 13, ""},
+		{"(*Int).Uint64", Method, 1, ""},
+		{"(*Int).UnmarshalJSON", Method, 1, ""},
+		{"(*Int).UnmarshalText", Method, 3, ""},
+		{"(*Int).Xor", Method, 0, ""},
+		{"(*Rat).Abs", Method, 0, ""},
+		{"(*Rat).Add", Method, 0, ""},
+		{"(*Rat).AppendText", Method, 24, ""},
+		{"(*Rat).Cmp", Method, 0, ""},
+		{"(*Rat).Denom", Method, 0, ""},
+		{"(*Rat).Float32", Method, 4, ""},
+		{"(*Rat).Float64", Method, 1, ""},
+		{"(*Rat).FloatPrec", Method, 22, ""},
+		{"(*Rat).FloatString", Method, 0, ""},
+		{"(*Rat).GobDecode", Method, 0, ""},
+		{"(*Rat).GobEncode", Method, 0, ""},
+		{"(*Rat).Inv", Method, 0, ""},
+		{"(*Rat).IsInt", Method, 0, ""},
+		{"(*Rat).MarshalText", Method, 3, ""},
+		{"(*Rat).Mul", Method, 0, ""},
+		{"(*Rat).Neg", Method, 0, ""},
+		{"(*Rat).Num", Method, 0, ""},
+		{"(*Rat).Quo", Method, 0, ""},
+		{"(*Rat).RatString", Method, 0, ""},
+		{"(*Rat).Scan", Method, 0, ""},
+		{"(*Rat).Set", Method, 0, ""},
+		{"(*Rat).SetFloat64", Method, 1, ""},
+		{"(*Rat).SetFrac", Method, 0, ""},
+		{"(*Rat).SetFrac64", Method, 0, ""},
+		{"(*Rat).SetInt", Method, 0, ""},
+		{"(*Rat).SetInt64", Method, 0, ""},
+		{"(*Rat).SetString", Method, 0, ""},
+		{"(*Rat).SetUint64", Method, 13, ""},
+		{"(*Rat).Sign", Method, 0, ""},
+		{"(*Rat).String", Method, 0, ""},
+		{"(*Rat).Sub", Method, 0, ""},
+		{"(*Rat).UnmarshalText", Method, 3, ""},
+		{"(Accuracy).String", Method, 5, ""},
+		{"(ErrNaN).Error", Method, 5, ""},
+		{"(RoundingMode).String", Method, 5, ""},
+		{"Above", Const, 5, ""},
+		{"Accuracy", Type, 5, ""},
+		{"AwayFromZero", Const, 5, ""},
+		{"Below", Const, 5, ""},
+		{"ErrNaN", Type, 5, ""},
+		{"Exact", Const, 5, ""},
+		{"Float", Type, 5, ""},
+		{"Int", Type, 0, ""},
+		{"Jacobi", Func, 5, "func(x *Int, y *Int) int"},
+		{"MaxBase", Const, 0, ""},
+		{"MaxExp", Const, 5, ""},
+		{"MaxPrec", Const, 5, ""},
+		{"MinExp", Const, 5, ""},
+		{"NewFloat", Func, 5, "func(x float64) *Float"},
+		{"NewInt", Func, 0, "func(x int64) *Int"},
+		{"NewRat", Func, 0, "func(a int64, b int64) *Rat"},
+		{"ParseFloat", Func, 5, "func(s string, base int, prec uint, mode RoundingMode) (f *Float, b int, err error)"},
+		{"Rat", Type, 0, ""},
+		{"RoundingMode", Type, 5, ""},
+		{"ToNearestAway", Const, 5, ""},
+		{"ToNearestEven", Const, 5, ""},
+		{"ToNegativeInf", Const, 5, ""},
+		{"ToPositiveInf", Const, 5, ""},
+		{"ToZero", Const, 5, ""},
+		{"Word", Type, 0, ""},
 	},
 	"math/bits": {
-		{"Add", Func, 12},
-		{"Add32", Func, 12},
-		{"Add64", Func, 12},
-		{"Div", Func, 12},
-		{"Div32", Func, 12},
-		{"Div64", Func, 12},
-		{"LeadingZeros", Func, 9},
-		{"LeadingZeros16", Func, 9},
-		{"LeadingZeros32", Func, 9},
-		{"LeadingZeros64", Func, 9},
-		{"LeadingZeros8", Func, 9},
-		{"Len", Func, 9},
-		{"Len16", Func, 9},
-		{"Len32", Func, 9},
-		{"Len64", Func, 9},
-		{"Len8", Func, 9},
-		{"Mul", Func, 12},
-		{"Mul32", Func, 12},
-		{"Mul64", Func, 12},
-		{"OnesCount", Func, 9},
-		{"OnesCount16", Func, 9},
-		{"OnesCount32", Func, 9},
-		{"OnesCount64", Func, 9},
-		{"OnesCount8", Func, 9},
-		{"Rem", Func, 14},
-		{"Rem32", Func, 14},
-		{"Rem64", Func, 14},
-		{"Reverse", Func, 9},
-		{"Reverse16", Func, 9},
-		{"Reverse32", Func, 9},
-		{"Reverse64", Func, 9},
-		{"Reverse8", Func, 9},
-		{"ReverseBytes", Func, 9},
-		{"ReverseBytes16", Func, 9},
-		{"ReverseBytes32", Func, 9},
-		{"ReverseBytes64", Func, 9},
-		{"RotateLeft", Func, 9},
-		{"RotateLeft16", Func, 9},
-		{"RotateLeft32", Func, 9},
-		{"RotateLeft64", Func, 9},
-		{"RotateLeft8", Func, 9},
-		{"Sub", Func, 12},
-		{"Sub32", Func, 12},
-		{"Sub64", Func, 12},
-		{"TrailingZeros", Func, 9},
-		{"TrailingZeros16", Func, 9},
-		{"TrailingZeros32", Func, 9},
-		{"TrailingZeros64", Func, 9},
-		{"TrailingZeros8", Func, 9},
-		{"UintSize", Const, 9},
+		{"Add", Func, 12, "func(x uint, y uint, carry uint) (sum uint, carryOut uint)"},
+		{"Add32", Func, 12, "func(x uint32, y uint32, carry uint32) (sum uint32, carryOut uint32)"},
+		{"Add64", Func, 12, "func(x uint64, y uint64, carry uint64) (sum uint64, carryOut uint64)"},
+		{"Div", Func, 12, "func(hi uint, lo uint, y uint) (quo uint, rem uint)"},
+		{"Div32", Func, 12, "func(hi uint32, lo uint32, y uint32) (quo uint32, rem uint32)"},
+		{"Div64", Func, 12, "func(hi uint64, lo uint64, y uint64) (quo uint64, rem uint64)"},
+		{"LeadingZeros", Func, 9, "func(x uint) int"},
+		{"LeadingZeros16", Func, 9, "func(x uint16) int"},
+		{"LeadingZeros32", Func, 9, "func(x uint32) int"},
+		{"LeadingZeros64", Func, 9, "func(x uint64) int"},
+		{"LeadingZeros8", Func, 9, "func(x uint8) int"},
+		{"Len", Func, 9, "func(x uint) int"},
+		{"Len16", Func, 9, "func(x uint16) (n int)"},
+		{"Len32", Func, 9, "func(x uint32) (n int)"},
+		{"Len64", Func, 9, "func(x uint64) (n int)"},
+		{"Len8", Func, 9, "func(x uint8) int"},
+		{"Mul", Func, 12, "func(x uint, y uint) (hi uint, lo uint)"},
+		{"Mul32", Func, 12, "func(x uint32, y uint32) (hi uint32, lo uint32)"},
+		{"Mul64", Func, 12, "func(x uint64, y uint64) (hi uint64, lo uint64)"},
+		{"OnesCount", Func, 9, "func(x uint) int"},
+		{"OnesCount16", Func, 9, "func(x uint16) int"},
+		{"OnesCount32", Func, 9, "func(x uint32) int"},
+		{"OnesCount64", Func, 9, "func(x uint64) int"},
+		{"OnesCount8", Func, 9, "func(x uint8) int"},
+		{"Rem", Func, 14, "func(hi uint, lo uint, y uint) uint"},
+		{"Rem32", Func, 14, "func(hi uint32, lo uint32, y uint32) uint32"},
+		{"Rem64", Func, 14, "func(hi uint64, lo uint64, y uint64) uint64"},
+		{"Reverse", Func, 9, "func(x uint) uint"},
+		{"Reverse16", Func, 9, "func(x uint16) uint16"},
+		{"Reverse32", Func, 9, "func(x uint32) uint32"},
+		{"Reverse64", Func, 9, "func(x uint64) uint64"},
+		{"Reverse8", Func, 9, "func(x uint8) uint8"},
+		{"ReverseBytes", Func, 9, "func(x uint) uint"},
+		{"ReverseBytes16", Func, 9, "func(x uint16) uint16"},
+		{"ReverseBytes32", Func, 9, "func(x uint32) uint32"},
+		{"ReverseBytes64", Func, 9, "func(x uint64) uint64"},
+		{"RotateLeft", Func, 9, "func(x uint, k int) uint"},
+		{"RotateLeft16", Func, 9, "func(x uint16, k int) uint16"},
+		{"RotateLeft32", Func, 9, "func(x uint32, k int) uint32"},
+		{"RotateLeft64", Func, 9, "func(x uint64, k int) uint64"},
+		{"RotateLeft8", Func, 9, "func(x uint8, k int) uint8"},
+		{"Sub", Func, 12, "func(x uint, y uint, borrow uint) (diff uint, borrowOut uint)"},
+		{"Sub32", Func, 12, "func(x uint32, y uint32, borrow uint32) (diff uint32, borrowOut uint32)"},
+		{"Sub64", Func, 12, "func(x uint64, y uint64, borrow uint64) (diff uint64, borrowOut uint64)"},
+		{"TrailingZeros", Func, 9, "func(x uint) int"},
+		{"TrailingZeros16", Func, 9, "func(x uint16) int"},
+		{"TrailingZeros32", Func, 9, "func(x uint32) int"},
+		{"TrailingZeros64", Func, 9, "func(x uint64) int"},
+		{"TrailingZeros8", Func, 9, "func(x uint8) int"},
+		{"UintSize", Const, 9, ""},
 	},
 	"math/cmplx": {
-		{"Abs", Func, 0},
-		{"Acos", Func, 0},
-		{"Acosh", Func, 0},
-		{"Asin", Func, 0},
-		{"Asinh", Func, 0},
-		{"Atan", Func, 0},
-		{"Atanh", Func, 0},
-		{"Conj", Func, 0},
-		{"Cos", Func, 0},
-		{"Cosh", Func, 0},
-		{"Cot", Func, 0},
-		{"Exp", Func, 0},
-		{"Inf", Func, 0},
-		{"IsInf", Func, 0},
-		{"IsNaN", Func, 0},
-		{"Log", Func, 0},
-		{"Log10", Func, 0},
-		{"NaN", Func, 0},
-		{"Phase", Func, 0},
-		{"Polar", Func, 0},
-		{"Pow", Func, 0},
-		{"Rect", Func, 0},
-		{"Sin", Func, 0},
-		{"Sinh", Func, 0},
-		{"Sqrt", Func, 0},
-		{"Tan", Func, 0},
-		{"Tanh", Func, 0},
+		{"Abs", Func, 0, "func(x complex128) float64"},
+		{"Acos", Func, 0, "func(x complex128) complex128"},
+		{"Acosh", Func, 0, "func(x complex128) complex128"},
+		{"Asin", Func, 0, "func(x complex128) complex128"},
+		{"Asinh", Func, 0, "func(x complex128) complex128"},
+		{"Atan", Func, 0, "func(x complex128) complex128"},
+		{"Atanh", Func, 0, "func(x complex128) complex128"},
+		{"Conj", Func, 0, "func(x complex128) complex128"},
+		{"Cos", Func, 0, "func(x complex128) complex128"},
+		{"Cosh", Func, 0, "func(x complex128) complex128"},
+		{"Cot", Func, 0, "func(x complex128) complex128"},
+		{"Exp", Func, 0, "func(x complex128) complex128"},
+		{"Inf", Func, 0, "func() complex128"},
+		{"IsInf", Func, 0, "func(x complex128) bool"},
+		{"IsNaN", Func, 0, "func(x complex128) bool"},
+		{"Log", Func, 0, "func(x complex128) complex128"},
+		{"Log10", Func, 0, "func(x complex128) complex128"},
+		{"NaN", Func, 0, "func() complex128"},
+		{"Phase", Func, 0, "func(x complex128) float64"},
+		{"Polar", Func, 0, "func(x complex128) (r float64, θ float64)"},
+		{"Pow", Func, 0, "func(x complex128, y complex128) complex128"},
+		{"Rect", Func, 0, "func(r float64, θ float64) complex128"},
+		{"Sin", Func, 0, "func(x complex128) complex128"},
+		{"Sinh", Func, 0, "func(x complex128) complex128"},
+		{"Sqrt", Func, 0, "func(x complex128) complex128"},
+		{"Tan", Func, 0, "func(x complex128) complex128"},
+		{"Tanh", Func, 0, "func(x complex128) complex128"},
 	},
 	"math/rand": {
-		{"(*Rand).ExpFloat64", Method, 0},
-		{"(*Rand).Float32", Method, 0},
-		{"(*Rand).Float64", Method, 0},
-		{"(*Rand).Int", Method, 0},
-		{"(*Rand).Int31", Method, 0},
-		{"(*Rand).Int31n", Method, 0},
-		{"(*Rand).Int63", Method, 0},
-		{"(*Rand).Int63n", Method, 0},
-		{"(*Rand).Intn", Method, 0},
-		{"(*Rand).NormFloat64", Method, 0},
-		{"(*Rand).Perm", Method, 0},
-		{"(*Rand).Read", Method, 6},
-		{"(*Rand).Seed", Method, 0},
-		{"(*Rand).Shuffle", Method, 10},
-		{"(*Rand).Uint32", Method, 0},
-		{"(*Rand).Uint64", Method, 8},
-		{"(*Zipf).Uint64", Method, 0},
-		{"ExpFloat64", Func, 0},
-		{"Float32", Func, 0},
-		{"Float64", Func, 0},
-		{"Int", Func, 0},
-		{"Int31", Func, 0},
-		{"Int31n", Func, 0},
-		{"Int63", Func, 0},
-		{"Int63n", Func, 0},
-		{"Intn", Func, 0},
-		{"New", Func, 0},
-		{"NewSource", Func, 0},
-		{"NewZipf", Func, 0},
-		{"NormFloat64", Func, 0},
-		{"Perm", Func, 0},
-		{"Rand", Type, 0},
-		{"Read", Func, 6},
-		{"Seed", Func, 0},
-		{"Shuffle", Func, 10},
-		{"Source", Type, 0},
-		{"Source64", Type, 8},
-		{"Uint32", Func, 0},
-		{"Uint64", Func, 8},
-		{"Zipf", Type, 0},
+		{"(*Rand).ExpFloat64", Method, 0, ""},
+		{"(*Rand).Float32", Method, 0, ""},
+		{"(*Rand).Float64", Method, 0, ""},
+		{"(*Rand).Int", Method, 0, ""},
+		{"(*Rand).Int31", Method, 0, ""},
+		{"(*Rand).Int31n", Method, 0, ""},
+		{"(*Rand).Int63", Method, 0, ""},
+		{"(*Rand).Int63n", Method, 0, ""},
+		{"(*Rand).Intn", Method, 0, ""},
+		{"(*Rand).NormFloat64", Method, 0, ""},
+		{"(*Rand).Perm", Method, 0, ""},
+		{"(*Rand).Read", Method, 6, ""},
+		{"(*Rand).Seed", Method, 0, ""},
+		{"(*Rand).Shuffle", Method, 10, ""},
+		{"(*Rand).Uint32", Method, 0, ""},
+		{"(*Rand).Uint64", Method, 8, ""},
+		{"(*Zipf).Uint64", Method, 0, ""},
+		{"ExpFloat64", Func, 0, "func() float64"},
+		{"Float32", Func, 0, "func() float32"},
+		{"Float64", Func, 0, "func() float64"},
+		{"Int", Func, 0, "func() int"},
+		{"Int31", Func, 0, "func() int32"},
+		{"Int31n", Func, 0, "func(n int32) int32"},
+		{"Int63", Func, 0, "func() int64"},
+		{"Int63n", Func, 0, "func(n int64) int64"},
+		{"Intn", Func, 0, "func(n int) int"},
+		{"New", Func, 0, "func(src Source) *Rand"},
+		{"NewSource", Func, 0, "func(seed int64) Source"},
+		{"NewZipf", Func, 0, "func(r *Rand, s float64, v float64, imax uint64) *Zipf"},
+		{"NormFloat64", Func, 0, "func() float64"},
+		{"Perm", Func, 0, "func(n int) []int"},
+		{"Rand", Type, 0, ""},
+		{"Read", Func, 6, "func(p []byte) (n int, err error)"},
+		{"Seed", Func, 0, "func(seed int64)"},
+		{"Shuffle", Func, 10, "func(n int, swap func(i int, j int))"},
+		{"Source", Type, 0, ""},
+		{"Source64", Type, 8, ""},
+		{"Uint32", Func, 0, "func() uint32"},
+		{"Uint64", Func, 8, "func() uint64"},
+		{"Zipf", Type, 0, ""},
 	},
 	"math/rand/v2": {
-		{"(*ChaCha8).AppendBinary", Method, 24},
-		{"(*ChaCha8).MarshalBinary", Method, 22},
-		{"(*ChaCha8).Read", Method, 23},
-		{"(*ChaCha8).Seed", Method, 22},
-		{"(*ChaCha8).Uint64", Method, 22},
-		{"(*ChaCha8).UnmarshalBinary", Method, 22},
-		{"(*PCG).AppendBinary", Method, 24},
-		{"(*PCG).MarshalBinary", Method, 22},
-		{"(*PCG).Seed", Method, 22},
-		{"(*PCG).Uint64", Method, 22},
-		{"(*PCG).UnmarshalBinary", Method, 22},
-		{"(*Rand).ExpFloat64", Method, 22},
-		{"(*Rand).Float32", Method, 22},
-		{"(*Rand).Float64", Method, 22},
-		{"(*Rand).Int", Method, 22},
-		{"(*Rand).Int32", Method, 22},
-		{"(*Rand).Int32N", Method, 22},
-		{"(*Rand).Int64", Method, 22},
-		{"(*Rand).Int64N", Method, 22},
-		{"(*Rand).IntN", Method, 22},
-		{"(*Rand).NormFloat64", Method, 22},
-		{"(*Rand).Perm", Method, 22},
-		{"(*Rand).Shuffle", Method, 22},
-		{"(*Rand).Uint", Method, 23},
-		{"(*Rand).Uint32", Method, 22},
-		{"(*Rand).Uint32N", Method, 22},
-		{"(*Rand).Uint64", Method, 22},
-		{"(*Rand).Uint64N", Method, 22},
-		{"(*Rand).UintN", Method, 22},
-		{"(*Zipf).Uint64", Method, 22},
-		{"ChaCha8", Type, 22},
-		{"ExpFloat64", Func, 22},
-		{"Float32", Func, 22},
-		{"Float64", Func, 22},
-		{"Int", Func, 22},
-		{"Int32", Func, 22},
-		{"Int32N", Func, 22},
-		{"Int64", Func, 22},
-		{"Int64N", Func, 22},
-		{"IntN", Func, 22},
-		{"N", Func, 22},
-		{"New", Func, 22},
-		{"NewChaCha8", Func, 22},
-		{"NewPCG", Func, 22},
-		{"NewZipf", Func, 22},
-		{"NormFloat64", Func, 22},
-		{"PCG", Type, 22},
-		{"Perm", Func, 22},
-		{"Rand", Type, 22},
-		{"Shuffle", Func, 22},
-		{"Source", Type, 22},
-		{"Uint", Func, 23},
-		{"Uint32", Func, 22},
-		{"Uint32N", Func, 22},
-		{"Uint64", Func, 22},
-		{"Uint64N", Func, 22},
-		{"UintN", Func, 22},
-		{"Zipf", Type, 22},
+		{"(*ChaCha8).AppendBinary", Method, 24, ""},
+		{"(*ChaCha8).MarshalBinary", Method, 22, ""},
+		{"(*ChaCha8).Read", Method, 23, ""},
+		{"(*ChaCha8).Seed", Method, 22, ""},
+		{"(*ChaCha8).Uint64", Method, 22, ""},
+		{"(*ChaCha8).UnmarshalBinary", Method, 22, ""},
+		{"(*PCG).AppendBinary", Method, 24, ""},
+		{"(*PCG).MarshalBinary", Method, 22, ""},
+		{"(*PCG).Seed", Method, 22, ""},
+		{"(*PCG).Uint64", Method, 22, ""},
+		{"(*PCG).UnmarshalBinary", Method, 22, ""},
+		{"(*Rand).ExpFloat64", Method, 22, ""},
+		{"(*Rand).Float32", Method, 22, ""},
+		{"(*Rand).Float64", Method, 22, ""},
+		{"(*Rand).Int", Method, 22, ""},
+		{"(*Rand).Int32", Method, 22, ""},
+		{"(*Rand).Int32N", Method, 22, ""},
+		{"(*Rand).Int64", Method, 22, ""},
+		{"(*Rand).Int64N", Method, 22, ""},
+		{"(*Rand).IntN", Method, 22, ""},
+		{"(*Rand).NormFloat64", Method, 22, ""},
+		{"(*Rand).Perm", Method, 22, ""},
+		{"(*Rand).Shuffle", Method, 22, ""},
+		{"(*Rand).Uint", Method, 23, ""},
+		{"(*Rand).Uint32", Method, 22, ""},
+		{"(*Rand).Uint32N", Method, 22, ""},
+		{"(*Rand).Uint64", Method, 22, ""},
+		{"(*Rand).Uint64N", Method, 22, ""},
+		{"(*Rand).UintN", Method, 22, ""},
+		{"(*Zipf).Uint64", Method, 22, ""},
+		{"ChaCha8", Type, 22, ""},
+		{"ExpFloat64", Func, 22, "func() float64"},
+		{"Float32", Func, 22, "func() float32"},
+		{"Float64", Func, 22, "func() float64"},
+		{"Int", Func, 22, "func() int"},
+		{"Int32", Func, 22, "func() int32"},
+		{"Int32N", Func, 22, "func(n int32) int32"},
+		{"Int64", Func, 22, "func() int64"},
+		{"Int64N", Func, 22, "func(n int64) int64"},
+		{"IntN", Func, 22, "func(n int) int"},
+		{"N", Func, 22, "func[Int intType](n Int) Int"},
+		{"New", Func, 22, "func(src Source) *Rand"},
+		{"NewChaCha8", Func, 22, "func(seed [32]byte) *ChaCha8"},
+		{"NewPCG", Func, 22, "func(seed1 uint64, seed2 uint64) *PCG"},
+		{"NewZipf", Func, 22, "func(r *Rand, s float64, v float64, imax uint64) *Zipf"},
+		{"NormFloat64", Func, 22, "func() float64"},
+		{"PCG", Type, 22, ""},
+		{"Perm", Func, 22, "func(n int) []int"},
+		{"Rand", Type, 22, ""},
+		{"Shuffle", Func, 22, "func(n int, swap func(i int, j int))"},
+		{"Source", Type, 22, ""},
+		{"Uint", Func, 23, "func() uint"},
+		{"Uint32", Func, 22, "func() uint32"},
+		{"Uint32N", Func, 22, "func(n uint32) uint32"},
+		{"Uint64", Func, 22, "func() uint64"},
+		{"Uint64N", Func, 22, "func(n uint64) uint64"},
+		{"UintN", Func, 22, "func(n uint) uint"},
+		{"Zipf", Type, 22, ""},
 	},
 	"mime": {
-		{"(*WordDecoder).Decode", Method, 5},
-		{"(*WordDecoder).DecodeHeader", Method, 5},
-		{"(WordEncoder).Encode", Method, 5},
-		{"AddExtensionType", Func, 0},
-		{"BEncoding", Const, 5},
-		{"ErrInvalidMediaParameter", Var, 9},
-		{"ExtensionsByType", Func, 5},
-		{"FormatMediaType", Func, 0},
-		{"ParseMediaType", Func, 0},
-		{"QEncoding", Const, 5},
-		{"TypeByExtension", Func, 0},
-		{"WordDecoder", Type, 5},
-		{"WordDecoder.CharsetReader", Field, 5},
-		{"WordEncoder", Type, 5},
+		{"(*WordDecoder).Decode", Method, 5, ""},
+		{"(*WordDecoder).DecodeHeader", Method, 5, ""},
+		{"(WordEncoder).Encode", Method, 5, ""},
+		{"AddExtensionType", Func, 0, "func(ext string, typ string) error"},
+		{"BEncoding", Const, 5, ""},
+		{"ErrInvalidMediaParameter", Var, 9, ""},
+		{"ExtensionsByType", Func, 5, "func(typ string) ([]string, error)"},
+		{"FormatMediaType", Func, 0, "func(t string, param map[string]string) string"},
+		{"ParseMediaType", Func, 0, "func(v string) (mediatype string, params map[string]string, err error)"},
+		{"QEncoding", Const, 5, ""},
+		{"TypeByExtension", Func, 0, "func(ext string) string"},
+		{"WordDecoder", Type, 5, ""},
+		{"WordDecoder.CharsetReader", Field, 5, ""},
+		{"WordEncoder", Type, 5, ""},
 	},
 	"mime/multipart": {
-		{"(*FileHeader).Open", Method, 0},
-		{"(*Form).RemoveAll", Method, 0},
-		{"(*Part).Close", Method, 0},
-		{"(*Part).FileName", Method, 0},
-		{"(*Part).FormName", Method, 0},
-		{"(*Part).Read", Method, 0},
-		{"(*Reader).NextPart", Method, 0},
-		{"(*Reader).NextRawPart", Method, 14},
-		{"(*Reader).ReadForm", Method, 0},
-		{"(*Writer).Boundary", Method, 0},
-		{"(*Writer).Close", Method, 0},
-		{"(*Writer).CreateFormField", Method, 0},
-		{"(*Writer).CreateFormFile", Method, 0},
-		{"(*Writer).CreatePart", Method, 0},
-		{"(*Writer).FormDataContentType", Method, 0},
-		{"(*Writer).SetBoundary", Method, 1},
-		{"(*Writer).WriteField", Method, 0},
-		{"ErrMessageTooLarge", Var, 9},
-		{"File", Type, 0},
-		{"FileHeader", Type, 0},
-		{"FileHeader.Filename", Field, 0},
-		{"FileHeader.Header", Field, 0},
-		{"FileHeader.Size", Field, 9},
-		{"Form", Type, 0},
-		{"Form.File", Field, 0},
-		{"Form.Value", Field, 0},
-		{"NewReader", Func, 0},
-		{"NewWriter", Func, 0},
-		{"Part", Type, 0},
-		{"Part.Header", Field, 0},
-		{"Reader", Type, 0},
-		{"Writer", Type, 0},
+		{"(*FileHeader).Open", Method, 0, ""},
+		{"(*Form).RemoveAll", Method, 0, ""},
+		{"(*Part).Close", Method, 0, ""},
+		{"(*Part).FileName", Method, 0, ""},
+		{"(*Part).FormName", Method, 0, ""},
+		{"(*Part).Read", Method, 0, ""},
+		{"(*Reader).NextPart", Method, 0, ""},
+		{"(*Reader).NextRawPart", Method, 14, ""},
+		{"(*Reader).ReadForm", Method, 0, ""},
+		{"(*Writer).Boundary", Method, 0, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).CreateFormField", Method, 0, ""},
+		{"(*Writer).CreateFormFile", Method, 0, ""},
+		{"(*Writer).CreatePart", Method, 0, ""},
+		{"(*Writer).FormDataContentType", Method, 0, ""},
+		{"(*Writer).SetBoundary", Method, 1, ""},
+		{"(*Writer).WriteField", Method, 0, ""},
+		{"ErrMessageTooLarge", Var, 9, ""},
+		{"File", Type, 0, ""},
+		{"FileContentDisposition", Func, 25, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.Filename", Field, 0, ""},
+		{"FileHeader.Header", Field, 0, ""},
+		{"FileHeader.Size", Field, 9, ""},
+		{"Form", Type, 0, ""},
+		{"Form.File", Field, 0, ""},
+		{"Form.Value", Field, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader, boundary string) *Reader"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"Part", Type, 0, ""},
+		{"Part.Header", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Writer", Type, 0, ""},
 	},
 	"mime/quotedprintable": {
-		{"(*Reader).Read", Method, 5},
-		{"(*Writer).Close", Method, 5},
-		{"(*Writer).Write", Method, 5},
-		{"NewReader", Func, 5},
-		{"NewWriter", Func, 5},
-		{"Reader", Type, 5},
-		{"Writer", Type, 5},
-		{"Writer.Binary", Field, 5},
+		{"(*Reader).Read", Method, 5, ""},
+		{"(*Writer).Close", Method, 5, ""},
+		{"(*Writer).Write", Method, 5, ""},
+		{"NewReader", Func, 5, "func(r io.Reader) *Reader"},
+		{"NewWriter", Func, 5, "func(w io.Writer) *Writer"},
+		{"Reader", Type, 5, ""},
+		{"Writer", Type, 5, ""},
+		{"Writer.Binary", Field, 5, ""},
 	},
 	"net": {
-		{"(*AddrError).Error", Method, 0},
-		{"(*AddrError).Temporary", Method, 0},
-		{"(*AddrError).Timeout", Method, 0},
-		{"(*Buffers).Read", Method, 8},
-		{"(*Buffers).WriteTo", Method, 8},
-		{"(*DNSConfigError).Error", Method, 0},
-		{"(*DNSConfigError).Temporary", Method, 0},
-		{"(*DNSConfigError).Timeout", Method, 0},
-		{"(*DNSConfigError).Unwrap", Method, 13},
-		{"(*DNSError).Error", Method, 0},
-		{"(*DNSError).Temporary", Method, 0},
-		{"(*DNSError).Timeout", Method, 0},
-		{"(*DNSError).Unwrap", Method, 23},
-		{"(*Dialer).Dial", Method, 1},
-		{"(*Dialer).DialContext", Method, 7},
-		{"(*Dialer).MultipathTCP", Method, 21},
-		{"(*Dialer).SetMultipathTCP", Method, 21},
-		{"(*IP).UnmarshalText", Method, 2},
-		{"(*IPAddr).Network", Method, 0},
-		{"(*IPAddr).String", Method, 0},
-		{"(*IPConn).Close", Method, 0},
-		{"(*IPConn).File", Method, 0},
-		{"(*IPConn).LocalAddr", Method, 0},
-		{"(*IPConn).Read", Method, 0},
-		{"(*IPConn).ReadFrom", Method, 0},
-		{"(*IPConn).ReadFromIP", Method, 0},
-		{"(*IPConn).ReadMsgIP", Method, 1},
-		{"(*IPConn).RemoteAddr", Method, 0},
-		{"(*IPConn).SetDeadline", Method, 0},
-		{"(*IPConn).SetReadBuffer", Method, 0},
-		{"(*IPConn).SetReadDeadline", Method, 0},
-		{"(*IPConn).SetWriteBuffer", Method, 0},
-		{"(*IPConn).SetWriteDeadline", Method, 0},
-		{"(*IPConn).SyscallConn", Method, 9},
-		{"(*IPConn).Write", Method, 0},
-		{"(*IPConn).WriteMsgIP", Method, 1},
-		{"(*IPConn).WriteTo", Method, 0},
-		{"(*IPConn).WriteToIP", Method, 0},
-		{"(*IPNet).Contains", Method, 0},
-		{"(*IPNet).Network", Method, 0},
-		{"(*IPNet).String", Method, 0},
-		{"(*Interface).Addrs", Method, 0},
-		{"(*Interface).MulticastAddrs", Method, 0},
-		{"(*ListenConfig).Listen", Method, 11},
-		{"(*ListenConfig).ListenPacket", Method, 11},
-		{"(*ListenConfig).MultipathTCP", Method, 21},
-		{"(*ListenConfig).SetMultipathTCP", Method, 21},
-		{"(*OpError).Error", Method, 0},
-		{"(*OpError).Temporary", Method, 0},
-		{"(*OpError).Timeout", Method, 0},
-		{"(*OpError).Unwrap", Method, 13},
-		{"(*ParseError).Error", Method, 0},
-		{"(*ParseError).Temporary", Method, 17},
-		{"(*ParseError).Timeout", Method, 17},
-		{"(*Resolver).LookupAddr", Method, 8},
-		{"(*Resolver).LookupCNAME", Method, 8},
-		{"(*Resolver).LookupHost", Method, 8},
-		{"(*Resolver).LookupIP", Method, 15},
-		{"(*Resolver).LookupIPAddr", Method, 8},
-		{"(*Resolver).LookupMX", Method, 8},
-		{"(*Resolver).LookupNS", Method, 8},
-		{"(*Resolver).LookupNetIP", Method, 18},
-		{"(*Resolver).LookupPort", Method, 8},
-		{"(*Resolver).LookupSRV", Method, 8},
-		{"(*Resolver).LookupTXT", Method, 8},
-		{"(*TCPAddr).AddrPort", Method, 18},
-		{"(*TCPAddr).Network", Method, 0},
-		{"(*TCPAddr).String", Method, 0},
-		{"(*TCPConn).Close", Method, 0},
-		{"(*TCPConn).CloseRead", Method, 0},
-		{"(*TCPConn).CloseWrite", Method, 0},
-		{"(*TCPConn).File", Method, 0},
-		{"(*TCPConn).LocalAddr", Method, 0},
-		{"(*TCPConn).MultipathTCP", Method, 21},
-		{"(*TCPConn).Read", Method, 0},
-		{"(*TCPConn).ReadFrom", Method, 0},
-		{"(*TCPConn).RemoteAddr", Method, 0},
-		{"(*TCPConn).SetDeadline", Method, 0},
-		{"(*TCPConn).SetKeepAlive", Method, 0},
-		{"(*TCPConn).SetKeepAliveConfig", Method, 23},
-		{"(*TCPConn).SetKeepAlivePeriod", Method, 2},
-		{"(*TCPConn).SetLinger", Method, 0},
-		{"(*TCPConn).SetNoDelay", Method, 0},
-		{"(*TCPConn).SetReadBuffer", Method, 0},
-		{"(*TCPConn).SetReadDeadline", Method, 0},
-		{"(*TCPConn).SetWriteBuffer", Method, 0},
-		{"(*TCPConn).SetWriteDeadline", Method, 0},
-		{"(*TCPConn).SyscallConn", Method, 9},
-		{"(*TCPConn).Write", Method, 0},
-		{"(*TCPConn).WriteTo", Method, 22},
-		{"(*TCPListener).Accept", Method, 0},
-		{"(*TCPListener).AcceptTCP", Method, 0},
-		{"(*TCPListener).Addr", Method, 0},
-		{"(*TCPListener).Close", Method, 0},
-		{"(*TCPListener).File", Method, 0},
-		{"(*TCPListener).SetDeadline", Method, 0},
-		{"(*TCPListener).SyscallConn", Method, 10},
-		{"(*UDPAddr).AddrPort", Method, 18},
-		{"(*UDPAddr).Network", Method, 0},
-		{"(*UDPAddr).String", Method, 0},
-		{"(*UDPConn).Close", Method, 0},
-		{"(*UDPConn).File", Method, 0},
-		{"(*UDPConn).LocalAddr", Method, 0},
-		{"(*UDPConn).Read", Method, 0},
-		{"(*UDPConn).ReadFrom", Method, 0},
-		{"(*UDPConn).ReadFromUDP", Method, 0},
-		{"(*UDPConn).ReadFromUDPAddrPort", Method, 18},
-		{"(*UDPConn).ReadMsgUDP", Method, 1},
-		{"(*UDPConn).ReadMsgUDPAddrPort", Method, 18},
-		{"(*UDPConn).RemoteAddr", Method, 0},
-		{"(*UDPConn).SetDeadline", Method, 0},
-		{"(*UDPConn).SetReadBuffer", Method, 0},
-		{"(*UDPConn).SetReadDeadline", Method, 0},
-		{"(*UDPConn).SetWriteBuffer", Method, 0},
-		{"(*UDPConn).SetWriteDeadline", Method, 0},
-		{"(*UDPConn).SyscallConn", Method, 9},
-		{"(*UDPConn).Write", Method, 0},
-		{"(*UDPConn).WriteMsgUDP", Method, 1},
-		{"(*UDPConn).WriteMsgUDPAddrPort", Method, 18},
-		{"(*UDPConn).WriteTo", Method, 0},
-		{"(*UDPConn).WriteToUDP", Method, 0},
-		{"(*UDPConn).WriteToUDPAddrPort", Method, 18},
-		{"(*UnixAddr).Network", Method, 0},
-		{"(*UnixAddr).String", Method, 0},
-		{"(*UnixConn).Close", Method, 0},
-		{"(*UnixConn).CloseRead", Method, 1},
-		{"(*UnixConn).CloseWrite", Method, 1},
-		{"(*UnixConn).File", Method, 0},
-		{"(*UnixConn).LocalAddr", Method, 0},
-		{"(*UnixConn).Read", Method, 0},
-		{"(*UnixConn).ReadFrom", Method, 0},
-		{"(*UnixConn).ReadFromUnix", Method, 0},
-		{"(*UnixConn).ReadMsgUnix", Method, 0},
-		{"(*UnixConn).RemoteAddr", Method, 0},
-		{"(*UnixConn).SetDeadline", Method, 0},
-		{"(*UnixConn).SetReadBuffer", Method, 0},
-		{"(*UnixConn).SetReadDeadline", Method, 0},
-		{"(*UnixConn).SetWriteBuffer", Method, 0},
-		{"(*UnixConn).SetWriteDeadline", Method, 0},
-		{"(*UnixConn).SyscallConn", Method, 9},
-		{"(*UnixConn).Write", Method, 0},
-		{"(*UnixConn).WriteMsgUnix", Method, 0},
-		{"(*UnixConn).WriteTo", Method, 0},
-		{"(*UnixConn).WriteToUnix", Method, 0},
-		{"(*UnixListener).Accept", Method, 0},
-		{"(*UnixListener).AcceptUnix", Method, 0},
-		{"(*UnixListener).Addr", Method, 0},
-		{"(*UnixListener).Close", Method, 0},
-		{"(*UnixListener).File", Method, 0},
-		{"(*UnixListener).SetDeadline", Method, 0},
-		{"(*UnixListener).SetUnlinkOnClose", Method, 8},
-		{"(*UnixListener).SyscallConn", Method, 10},
-		{"(Flags).String", Method, 0},
-		{"(HardwareAddr).String", Method, 0},
-		{"(IP).AppendText", Method, 24},
-		{"(IP).DefaultMask", Method, 0},
-		{"(IP).Equal", Method, 0},
-		{"(IP).IsGlobalUnicast", Method, 0},
-		{"(IP).IsInterfaceLocalMulticast", Method, 0},
-		{"(IP).IsLinkLocalMulticast", Method, 0},
-		{"(IP).IsLinkLocalUnicast", Method, 0},
-		{"(IP).IsLoopback", Method, 0},
-		{"(IP).IsMulticast", Method, 0},
-		{"(IP).IsPrivate", Method, 17},
-		{"(IP).IsUnspecified", Method, 0},
-		{"(IP).MarshalText", Method, 2},
-		{"(IP).Mask", Method, 0},
-		{"(IP).String", Method, 0},
-		{"(IP).To16", Method, 0},
-		{"(IP).To4", Method, 0},
-		{"(IPMask).Size", Method, 0},
-		{"(IPMask).String", Method, 0},
-		{"(InvalidAddrError).Error", Method, 0},
-		{"(InvalidAddrError).Temporary", Method, 0},
-		{"(InvalidAddrError).Timeout", Method, 0},
-		{"(UnknownNetworkError).Error", Method, 0},
-		{"(UnknownNetworkError).Temporary", Method, 0},
-		{"(UnknownNetworkError).Timeout", Method, 0},
-		{"Addr", Type, 0},
-		{"AddrError", Type, 0},
-		{"AddrError.Addr", Field, 0},
-		{"AddrError.Err", Field, 0},
-		{"Buffers", Type, 8},
-		{"CIDRMask", Func, 0},
-		{"Conn", Type, 0},
-		{"DNSConfigError", Type, 0},
-		{"DNSConfigError.Err", Field, 0},
-		{"DNSError", Type, 0},
-		{"DNSError.Err", Field, 0},
-		{"DNSError.IsNotFound", Field, 13},
-		{"DNSError.IsTemporary", Field, 6},
-		{"DNSError.IsTimeout", Field, 0},
-		{"DNSError.Name", Field, 0},
-		{"DNSError.Server", Field, 0},
-		{"DNSError.UnwrapErr", Field, 23},
-		{"DefaultResolver", Var, 8},
-		{"Dial", Func, 0},
-		{"DialIP", Func, 0},
-		{"DialTCP", Func, 0},
-		{"DialTimeout", Func, 0},
-		{"DialUDP", Func, 0},
-		{"DialUnix", Func, 0},
-		{"Dialer", Type, 1},
-		{"Dialer.Cancel", Field, 6},
-		{"Dialer.Control", Field, 11},
-		{"Dialer.ControlContext", Field, 20},
-		{"Dialer.Deadline", Field, 1},
-		{"Dialer.DualStack", Field, 2},
-		{"Dialer.FallbackDelay", Field, 5},
-		{"Dialer.KeepAlive", Field, 3},
-		{"Dialer.KeepAliveConfig", Field, 23},
-		{"Dialer.LocalAddr", Field, 1},
-		{"Dialer.Resolver", Field, 8},
-		{"Dialer.Timeout", Field, 1},
-		{"ErrClosed", Var, 16},
-		{"ErrWriteToConnected", Var, 0},
-		{"Error", Type, 0},
-		{"FileConn", Func, 0},
-		{"FileListener", Func, 0},
-		{"FilePacketConn", Func, 0},
-		{"FlagBroadcast", Const, 0},
-		{"FlagLoopback", Const, 0},
-		{"FlagMulticast", Const, 0},
-		{"FlagPointToPoint", Const, 0},
-		{"FlagRunning", Const, 20},
-		{"FlagUp", Const, 0},
-		{"Flags", Type, 0},
-		{"HardwareAddr", Type, 0},
-		{"IP", Type, 0},
-		{"IPAddr", Type, 0},
-		{"IPAddr.IP", Field, 0},
-		{"IPAddr.Zone", Field, 1},
-		{"IPConn", Type, 0},
-		{"IPMask", Type, 0},
-		{"IPNet", Type, 0},
-		{"IPNet.IP", Field, 0},
-		{"IPNet.Mask", Field, 0},
-		{"IPv4", Func, 0},
-		{"IPv4Mask", Func, 0},
-		{"IPv4allrouter", Var, 0},
-		{"IPv4allsys", Var, 0},
-		{"IPv4bcast", Var, 0},
-		{"IPv4len", Const, 0},
-		{"IPv4zero", Var, 0},
-		{"IPv6interfacelocalallnodes", Var, 0},
-		{"IPv6len", Const, 0},
-		{"IPv6linklocalallnodes", Var, 0},
-		{"IPv6linklocalallrouters", Var, 0},
-		{"IPv6loopback", Var, 0},
-		{"IPv6unspecified", Var, 0},
-		{"IPv6zero", Var, 0},
-		{"Interface", Type, 0},
-		{"Interface.Flags", Field, 0},
-		{"Interface.HardwareAddr", Field, 0},
-		{"Interface.Index", Field, 0},
-		{"Interface.MTU", Field, 0},
-		{"Interface.Name", Field, 0},
-		{"InterfaceAddrs", Func, 0},
-		{"InterfaceByIndex", Func, 0},
-		{"InterfaceByName", Func, 0},
-		{"Interfaces", Func, 0},
-		{"InvalidAddrError", Type, 0},
-		{"JoinHostPort", Func, 0},
-		{"KeepAliveConfig", Type, 23},
-		{"KeepAliveConfig.Count", Field, 23},
-		{"KeepAliveConfig.Enable", Field, 23},
-		{"KeepAliveConfig.Idle", Field, 23},
-		{"KeepAliveConfig.Interval", Field, 23},
-		{"Listen", Func, 0},
-		{"ListenConfig", Type, 11},
-		{"ListenConfig.Control", Field, 11},
-		{"ListenConfig.KeepAlive", Field, 13},
-		{"ListenConfig.KeepAliveConfig", Field, 23},
-		{"ListenIP", Func, 0},
-		{"ListenMulticastUDP", Func, 0},
-		{"ListenPacket", Func, 0},
-		{"ListenTCP", Func, 0},
-		{"ListenUDP", Func, 0},
-		{"ListenUnix", Func, 0},
-		{"ListenUnixgram", Func, 0},
-		{"Listener", Type, 0},
-		{"LookupAddr", Func, 0},
-		{"LookupCNAME", Func, 0},
-		{"LookupHost", Func, 0},
-		{"LookupIP", Func, 0},
-		{"LookupMX", Func, 0},
-		{"LookupNS", Func, 1},
-		{"LookupPort", Func, 0},
-		{"LookupSRV", Func, 0},
-		{"LookupTXT", Func, 0},
-		{"MX", Type, 0},
-		{"MX.Host", Field, 0},
-		{"MX.Pref", Field, 0},
-		{"NS", Type, 1},
-		{"NS.Host", Field, 1},
-		{"OpError", Type, 0},
-		{"OpError.Addr", Field, 0},
-		{"OpError.Err", Field, 0},
-		{"OpError.Net", Field, 0},
-		{"OpError.Op", Field, 0},
-		{"OpError.Source", Field, 5},
-		{"PacketConn", Type, 0},
-		{"ParseCIDR", Func, 0},
-		{"ParseError", Type, 0},
-		{"ParseError.Text", Field, 0},
-		{"ParseError.Type", Field, 0},
-		{"ParseIP", Func, 0},
-		{"ParseMAC", Func, 0},
-		{"Pipe", Func, 0},
-		{"ResolveIPAddr", Func, 0},
-		{"ResolveTCPAddr", Func, 0},
-		{"ResolveUDPAddr", Func, 0},
-		{"ResolveUnixAddr", Func, 0},
-		{"Resolver", Type, 8},
-		{"Resolver.Dial", Field, 9},
-		{"Resolver.PreferGo", Field, 8},
-		{"Resolver.StrictErrors", Field, 9},
-		{"SRV", Type, 0},
-		{"SRV.Port", Field, 0},
-		{"SRV.Priority", Field, 0},
-		{"SRV.Target", Field, 0},
-		{"SRV.Weight", Field, 0},
-		{"SplitHostPort", Func, 0},
-		{"TCPAddr", Type, 0},
-		{"TCPAddr.IP", Field, 0},
-		{"TCPAddr.Port", Field, 0},
-		{"TCPAddr.Zone", Field, 1},
-		{"TCPAddrFromAddrPort", Func, 18},
-		{"TCPConn", Type, 0},
-		{"TCPListener", Type, 0},
-		{"UDPAddr", Type, 0},
-		{"UDPAddr.IP", Field, 0},
-		{"UDPAddr.Port", Field, 0},
-		{"UDPAddr.Zone", Field, 1},
-		{"UDPAddrFromAddrPort", Func, 18},
-		{"UDPConn", Type, 0},
-		{"UnixAddr", Type, 0},
-		{"UnixAddr.Name", Field, 0},
-		{"UnixAddr.Net", Field, 0},
-		{"UnixConn", Type, 0},
-		{"UnixListener", Type, 0},
-		{"UnknownNetworkError", Type, 0},
+		{"(*AddrError).Error", Method, 0, ""},
+		{"(*AddrError).Temporary", Method, 0, ""},
+		{"(*AddrError).Timeout", Method, 0, ""},
+		{"(*Buffers).Read", Method, 8, ""},
+		{"(*Buffers).WriteTo", Method, 8, ""},
+		{"(*DNSConfigError).Error", Method, 0, ""},
+		{"(*DNSConfigError).Temporary", Method, 0, ""},
+		{"(*DNSConfigError).Timeout", Method, 0, ""},
+		{"(*DNSConfigError).Unwrap", Method, 13, ""},
+		{"(*DNSError).Error", Method, 0, ""},
+		{"(*DNSError).Temporary", Method, 0, ""},
+		{"(*DNSError).Timeout", Method, 0, ""},
+		{"(*DNSError).Unwrap", Method, 23, ""},
+		{"(*Dialer).Dial", Method, 1, ""},
+		{"(*Dialer).DialContext", Method, 7, ""},
+		{"(*Dialer).MultipathTCP", Method, 21, ""},
+		{"(*Dialer).SetMultipathTCP", Method, 21, ""},
+		{"(*IP).UnmarshalText", Method, 2, ""},
+		{"(*IPAddr).Network", Method, 0, ""},
+		{"(*IPAddr).String", Method, 0, ""},
+		{"(*IPConn).Close", Method, 0, ""},
+		{"(*IPConn).File", Method, 0, ""},
+		{"(*IPConn).LocalAddr", Method, 0, ""},
+		{"(*IPConn).Read", Method, 0, ""},
+		{"(*IPConn).ReadFrom", Method, 0, ""},
+		{"(*IPConn).ReadFromIP", Method, 0, ""},
+		{"(*IPConn).ReadMsgIP", Method, 1, ""},
+		{"(*IPConn).RemoteAddr", Method, 0, ""},
+		{"(*IPConn).SetDeadline", Method, 0, ""},
+		{"(*IPConn).SetReadBuffer", Method, 0, ""},
+		{"(*IPConn).SetReadDeadline", Method, 0, ""},
+		{"(*IPConn).SetWriteBuffer", Method, 0, ""},
+		{"(*IPConn).SetWriteDeadline", Method, 0, ""},
+		{"(*IPConn).SyscallConn", Method, 9, ""},
+		{"(*IPConn).Write", Method, 0, ""},
+		{"(*IPConn).WriteMsgIP", Method, 1, ""},
+		{"(*IPConn).WriteTo", Method, 0, ""},
+		{"(*IPConn).WriteToIP", Method, 0, ""},
+		{"(*IPNet).Contains", Method, 0, ""},
+		{"(*IPNet).Network", Method, 0, ""},
+		{"(*IPNet).String", Method, 0, ""},
+		{"(*Interface).Addrs", Method, 0, ""},
+		{"(*Interface).MulticastAddrs", Method, 0, ""},
+		{"(*ListenConfig).Listen", Method, 11, ""},
+		{"(*ListenConfig).ListenPacket", Method, 11, ""},
+		{"(*ListenConfig).MultipathTCP", Method, 21, ""},
+		{"(*ListenConfig).SetMultipathTCP", Method, 21, ""},
+		{"(*OpError).Error", Method, 0, ""},
+		{"(*OpError).Temporary", Method, 0, ""},
+		{"(*OpError).Timeout", Method, 0, ""},
+		{"(*OpError).Unwrap", Method, 13, ""},
+		{"(*ParseError).Error", Method, 0, ""},
+		{"(*ParseError).Temporary", Method, 17, ""},
+		{"(*ParseError).Timeout", Method, 17, ""},
+		{"(*Resolver).LookupAddr", Method, 8, ""},
+		{"(*Resolver).LookupCNAME", Method, 8, ""},
+		{"(*Resolver).LookupHost", Method, 8, ""},
+		{"(*Resolver).LookupIP", Method, 15, ""},
+		{"(*Resolver).LookupIPAddr", Method, 8, ""},
+		{"(*Resolver).LookupMX", Method, 8, ""},
+		{"(*Resolver).LookupNS", Method, 8, ""},
+		{"(*Resolver).LookupNetIP", Method, 18, ""},
+		{"(*Resolver).LookupPort", Method, 8, ""},
+		{"(*Resolver).LookupSRV", Method, 8, ""},
+		{"(*Resolver).LookupTXT", Method, 8, ""},
+		{"(*TCPAddr).AddrPort", Method, 18, ""},
+		{"(*TCPAddr).Network", Method, 0, ""},
+		{"(*TCPAddr).String", Method, 0, ""},
+		{"(*TCPConn).Close", Method, 0, ""},
+		{"(*TCPConn).CloseRead", Method, 0, ""},
+		{"(*TCPConn).CloseWrite", Method, 0, ""},
+		{"(*TCPConn).File", Method, 0, ""},
+		{"(*TCPConn).LocalAddr", Method, 0, ""},
+		{"(*TCPConn).MultipathTCP", Method, 21, ""},
+		{"(*TCPConn).Read", Method, 0, ""},
+		{"(*TCPConn).ReadFrom", Method, 0, ""},
+		{"(*TCPConn).RemoteAddr", Method, 0, ""},
+		{"(*TCPConn).SetDeadline", Method, 0, ""},
+		{"(*TCPConn).SetKeepAlive", Method, 0, ""},
+		{"(*TCPConn).SetKeepAliveConfig", Method, 23, ""},
+		{"(*TCPConn).SetKeepAlivePeriod", Method, 2, ""},
+		{"(*TCPConn).SetLinger", Method, 0, ""},
+		{"(*TCPConn).SetNoDelay", Method, 0, ""},
+		{"(*TCPConn).SetReadBuffer", Method, 0, ""},
+		{"(*TCPConn).SetReadDeadline", Method, 0, ""},
+		{"(*TCPConn).SetWriteBuffer", Method, 0, ""},
+		{"(*TCPConn).SetWriteDeadline", Method, 0, ""},
+		{"(*TCPConn).SyscallConn", Method, 9, ""},
+		{"(*TCPConn).Write", Method, 0, ""},
+		{"(*TCPConn).WriteTo", Method, 22, ""},
+		{"(*TCPListener).Accept", Method, 0, ""},
+		{"(*TCPListener).AcceptTCP", Method, 0, ""},
+		{"(*TCPListener).Addr", Method, 0, ""},
+		{"(*TCPListener).Close", Method, 0, ""},
+		{"(*TCPListener).File", Method, 0, ""},
+		{"(*TCPListener).SetDeadline", Method, 0, ""},
+		{"(*TCPListener).SyscallConn", Method, 10, ""},
+		{"(*UDPAddr).AddrPort", Method, 18, ""},
+		{"(*UDPAddr).Network", Method, 0, ""},
+		{"(*UDPAddr).String", Method, 0, ""},
+		{"(*UDPConn).Close", Method, 0, ""},
+		{"(*UDPConn).File", Method, 0, ""},
+		{"(*UDPConn).LocalAddr", Method, 0, ""},
+		{"(*UDPConn).Read", Method, 0, ""},
+		{"(*UDPConn).ReadFrom", Method, 0, ""},
+		{"(*UDPConn).ReadFromUDP", Method, 0, ""},
+		{"(*UDPConn).ReadFromUDPAddrPort", Method, 18, ""},
+		{"(*UDPConn).ReadMsgUDP", Method, 1, ""},
+		{"(*UDPConn).ReadMsgUDPAddrPort", Method, 18, ""},
+		{"(*UDPConn).RemoteAddr", Method, 0, ""},
+		{"(*UDPConn).SetDeadline", Method, 0, ""},
+		{"(*UDPConn).SetReadBuffer", Method, 0, ""},
+		{"(*UDPConn).SetReadDeadline", Method, 0, ""},
+		{"(*UDPConn).SetWriteBuffer", Method, 0, ""},
+		{"(*UDPConn).SetWriteDeadline", Method, 0, ""},
+		{"(*UDPConn).SyscallConn", Method, 9, ""},
+		{"(*UDPConn).Write", Method, 0, ""},
+		{"(*UDPConn).WriteMsgUDP", Method, 1, ""},
+		{"(*UDPConn).WriteMsgUDPAddrPort", Method, 18, ""},
+		{"(*UDPConn).WriteTo", Method, 0, ""},
+		{"(*UDPConn).WriteToUDP", Method, 0, ""},
+		{"(*UDPConn).WriteToUDPAddrPort", Method, 18, ""},
+		{"(*UnixAddr).Network", Method, 0, ""},
+		{"(*UnixAddr).String", Method, 0, ""},
+		{"(*UnixConn).Close", Method, 0, ""},
+		{"(*UnixConn).CloseRead", Method, 1, ""},
+		{"(*UnixConn).CloseWrite", Method, 1, ""},
+		{"(*UnixConn).File", Method, 0, ""},
+		{"(*UnixConn).LocalAddr", Method, 0, ""},
+		{"(*UnixConn).Read", Method, 0, ""},
+		{"(*UnixConn).ReadFrom", Method, 0, ""},
+		{"(*UnixConn).ReadFromUnix", Method, 0, ""},
+		{"(*UnixConn).ReadMsgUnix", Method, 0, ""},
+		{"(*UnixConn).RemoteAddr", Method, 0, ""},
+		{"(*UnixConn).SetDeadline", Method, 0, ""},
+		{"(*UnixConn).SetReadBuffer", Method, 0, ""},
+		{"(*UnixConn).SetReadDeadline", Method, 0, ""},
+		{"(*UnixConn).SetWriteBuffer", Method, 0, ""},
+		{"(*UnixConn).SetWriteDeadline", Method, 0, ""},
+		{"(*UnixConn).SyscallConn", Method, 9, ""},
+		{"(*UnixConn).Write", Method, 0, ""},
+		{"(*UnixConn).WriteMsgUnix", Method, 0, ""},
+		{"(*UnixConn).WriteTo", Method, 0, ""},
+		{"(*UnixConn).WriteToUnix", Method, 0, ""},
+		{"(*UnixListener).Accept", Method, 0, ""},
+		{"(*UnixListener).AcceptUnix", Method, 0, ""},
+		{"(*UnixListener).Addr", Method, 0, ""},
+		{"(*UnixListener).Close", Method, 0, ""},
+		{"(*UnixListener).File", Method, 0, ""},
+		{"(*UnixListener).SetDeadline", Method, 0, ""},
+		{"(*UnixListener).SetUnlinkOnClose", Method, 8, ""},
+		{"(*UnixListener).SyscallConn", Method, 10, ""},
+		{"(Flags).String", Method, 0, ""},
+		{"(HardwareAddr).String", Method, 0, ""},
+		{"(IP).AppendText", Method, 24, ""},
+		{"(IP).DefaultMask", Method, 0, ""},
+		{"(IP).Equal", Method, 0, ""},
+		{"(IP).IsGlobalUnicast", Method, 0, ""},
+		{"(IP).IsInterfaceLocalMulticast", Method, 0, ""},
+		{"(IP).IsLinkLocalMulticast", Method, 0, ""},
+		{"(IP).IsLinkLocalUnicast", Method, 0, ""},
+		{"(IP).IsLoopback", Method, 0, ""},
+		{"(IP).IsMulticast", Method, 0, ""},
+		{"(IP).IsPrivate", Method, 17, ""},
+		{"(IP).IsUnspecified", Method, 0, ""},
+		{"(IP).MarshalText", Method, 2, ""},
+		{"(IP).Mask", Method, 0, ""},
+		{"(IP).String", Method, 0, ""},
+		{"(IP).To16", Method, 0, ""},
+		{"(IP).To4", Method, 0, ""},
+		{"(IPMask).Size", Method, 0, ""},
+		{"(IPMask).String", Method, 0, ""},
+		{"(InvalidAddrError).Error", Method, 0, ""},
+		{"(InvalidAddrError).Temporary", Method, 0, ""},
+		{"(InvalidAddrError).Timeout", Method, 0, ""},
+		{"(UnknownNetworkError).Error", Method, 0, ""},
+		{"(UnknownNetworkError).Temporary", Method, 0, ""},
+		{"(UnknownNetworkError).Timeout", Method, 0, ""},
+		{"Addr", Type, 0, ""},
+		{"AddrError", Type, 0, ""},
+		{"AddrError.Addr", Field, 0, ""},
+		{"AddrError.Err", Field, 0, ""},
+		{"Buffers", Type, 8, ""},
+		{"CIDRMask", Func, 0, "func(ones int, bits int) IPMask"},
+		{"Conn", Type, 0, ""},
+		{"DNSConfigError", Type, 0, ""},
+		{"DNSConfigError.Err", Field, 0, ""},
+		{"DNSError", Type, 0, ""},
+		{"DNSError.Err", Field, 0, ""},
+		{"DNSError.IsNotFound", Field, 13, ""},
+		{"DNSError.IsTemporary", Field, 6, ""},
+		{"DNSError.IsTimeout", Field, 0, ""},
+		{"DNSError.Name", Field, 0, ""},
+		{"DNSError.Server", Field, 0, ""},
+		{"DNSError.UnwrapErr", Field, 23, ""},
+		{"DefaultResolver", Var, 8, ""},
+		{"Dial", Func, 0, "func(network string, address string) (Conn, error)"},
+		{"DialIP", Func, 0, "func(network string, laddr *IPAddr, raddr *IPAddr) (*IPConn, error)"},
+		{"DialTCP", Func, 0, "func(network string, laddr *TCPAddr, raddr *TCPAddr) (*TCPConn, error)"},
+		{"DialTimeout", Func, 0, "func(network string, address string, timeout time.Duration) (Conn, error)"},
+		{"DialUDP", Func, 0, "func(network string, laddr *UDPAddr, raddr *UDPAddr) (*UDPConn, error)"},
+		{"DialUnix", Func, 0, "func(network string, laddr *UnixAddr, raddr *UnixAddr) (*UnixConn, error)"},
+		{"Dialer", Type, 1, ""},
+		{"Dialer.Cancel", Field, 6, ""},
+		{"Dialer.Control", Field, 11, ""},
+		{"Dialer.ControlContext", Field, 20, ""},
+		{"Dialer.Deadline", Field, 1, ""},
+		{"Dialer.DualStack", Field, 2, ""},
+		{"Dialer.FallbackDelay", Field, 5, ""},
+		{"Dialer.KeepAlive", Field, 3, ""},
+		{"Dialer.KeepAliveConfig", Field, 23, ""},
+		{"Dialer.LocalAddr", Field, 1, ""},
+		{"Dialer.Resolver", Field, 8, ""},
+		{"Dialer.Timeout", Field, 1, ""},
+		{"ErrClosed", Var, 16, ""},
+		{"ErrWriteToConnected", Var, 0, ""},
+		{"Error", Type, 0, ""},
+		{"FileConn", Func, 0, "func(f *os.File) (c Conn, err error)"},
+		{"FileListener", Func, 0, "func(f *os.File) (ln Listener, err error)"},
+		{"FilePacketConn", Func, 0, "func(f *os.File) (c PacketConn, err error)"},
+		{"FlagBroadcast", Const, 0, ""},
+		{"FlagLoopback", Const, 0, ""},
+		{"FlagMulticast", Const, 0, ""},
+		{"FlagPointToPoint", Const, 0, ""},
+		{"FlagRunning", Const, 20, ""},
+		{"FlagUp", Const, 0, ""},
+		{"Flags", Type, 0, ""},
+		{"HardwareAddr", Type, 0, ""},
+		{"IP", Type, 0, ""},
+		{"IPAddr", Type, 0, ""},
+		{"IPAddr.IP", Field, 0, ""},
+		{"IPAddr.Zone", Field, 1, ""},
+		{"IPConn", Type, 0, ""},
+		{"IPMask", Type, 0, ""},
+		{"IPNet", Type, 0, ""},
+		{"IPNet.IP", Field, 0, ""},
+		{"IPNet.Mask", Field, 0, ""},
+		{"IPv4", Func, 0, "func(a byte, b byte, c byte, d byte) IP"},
+		{"IPv4Mask", Func, 0, "func(a byte, b byte, c byte, d byte) IPMask"},
+		{"IPv4allrouter", Var, 0, ""},
+		{"IPv4allsys", Var, 0, ""},
+		{"IPv4bcast", Var, 0, ""},
+		{"IPv4len", Const, 0, ""},
+		{"IPv4zero", Var, 0, ""},
+		{"IPv6interfacelocalallnodes", Var, 0, ""},
+		{"IPv6len", Const, 0, ""},
+		{"IPv6linklocalallnodes", Var, 0, ""},
+		{"IPv6linklocalallrouters", Var, 0, ""},
+		{"IPv6loopback", Var, 0, ""},
+		{"IPv6unspecified", Var, 0, ""},
+		{"IPv6zero", Var, 0, ""},
+		{"Interface", Type, 0, ""},
+		{"Interface.Flags", Field, 0, ""},
+		{"Interface.HardwareAddr", Field, 0, ""},
+		{"Interface.Index", Field, 0, ""},
+		{"Interface.MTU", Field, 0, ""},
+		{"Interface.Name", Field, 0, ""},
+		{"InterfaceAddrs", Func, 0, "func() ([]Addr, error)"},
+		{"InterfaceByIndex", Func, 0, "func(index int) (*Interface, error)"},
+		{"InterfaceByName", Func, 0, "func(name string) (*Interface, error)"},
+		{"Interfaces", Func, 0, "func() ([]Interface, error)"},
+		{"InvalidAddrError", Type, 0, ""},
+		{"JoinHostPort", Func, 0, "func(host string, port string) string"},
+		{"KeepAliveConfig", Type, 23, ""},
+		{"KeepAliveConfig.Count", Field, 23, ""},
+		{"KeepAliveConfig.Enable", Field, 23, ""},
+		{"KeepAliveConfig.Idle", Field, 23, ""},
+		{"KeepAliveConfig.Interval", Field, 23, ""},
+		{"Listen", Func, 0, "func(network string, address string) (Listener, error)"},
+		{"ListenConfig", Type, 11, ""},
+		{"ListenConfig.Control", Field, 11, ""},
+		{"ListenConfig.KeepAlive", Field, 13, ""},
+		{"ListenConfig.KeepAliveConfig", Field, 23, ""},
+		{"ListenIP", Func, 0, "func(network string, laddr *IPAddr) (*IPConn, error)"},
+		{"ListenMulticastUDP", Func, 0, "func(network string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, error)"},
+		{"ListenPacket", Func, 0, "func(network string, address string) (PacketConn, error)"},
+		{"ListenTCP", Func, 0, "func(network string, laddr *TCPAddr) (*TCPListener, error)"},
+		{"ListenUDP", Func, 0, "func(network string, laddr *UDPAddr) (*UDPConn, error)"},
+		{"ListenUnix", Func, 0, "func(network string, laddr *UnixAddr) (*UnixListener, error)"},
+		{"ListenUnixgram", Func, 0, "func(network string, laddr *UnixAddr) (*UnixConn, error)"},
+		{"Listener", Type, 0, ""},
+		{"LookupAddr", Func, 0, "func(addr string) (names []string, err error)"},
+		{"LookupCNAME", Func, 0, "func(host string) (cname string, err error)"},
+		{"LookupHost", Func, 0, "func(host string) (addrs []string, err error)"},
+		{"LookupIP", Func, 0, "func(host string) ([]IP, error)"},
+		{"LookupMX", Func, 0, "func(name string) ([]*MX, error)"},
+		{"LookupNS", Func, 1, "func(name string) ([]*NS, error)"},
+		{"LookupPort", Func, 0, "func(network string, service string) (port int, err error)"},
+		{"LookupSRV", Func, 0, "func(service string, proto string, name string) (cname string, addrs []*SRV, err error)"},
+		{"LookupTXT", Func, 0, "func(name string) ([]string, error)"},
+		{"MX", Type, 0, ""},
+		{"MX.Host", Field, 0, ""},
+		{"MX.Pref", Field, 0, ""},
+		{"NS", Type, 1, ""},
+		{"NS.Host", Field, 1, ""},
+		{"OpError", Type, 0, ""},
+		{"OpError.Addr", Field, 0, ""},
+		{"OpError.Err", Field, 0, ""},
+		{"OpError.Net", Field, 0, ""},
+		{"OpError.Op", Field, 0, ""},
+		{"OpError.Source", Field, 5, ""},
+		{"PacketConn", Type, 0, ""},
+		{"ParseCIDR", Func, 0, "func(s string) (IP, *IPNet, error)"},
+		{"ParseError", Type, 0, ""},
+		{"ParseError.Text", Field, 0, ""},
+		{"ParseError.Type", Field, 0, ""},
+		{"ParseIP", Func, 0, "func(s string) IP"},
+		{"ParseMAC", Func, 0, "func(s string) (hw HardwareAddr, err error)"},
+		{"Pipe", Func, 0, "func() (Conn, Conn)"},
+		{"ResolveIPAddr", Func, 0, "func(network string, address string) (*IPAddr, error)"},
+		{"ResolveTCPAddr", Func, 0, "func(network string, address string) (*TCPAddr, error)"},
+		{"ResolveUDPAddr", Func, 0, "func(network string, address string) (*UDPAddr, error)"},
+		{"ResolveUnixAddr", Func, 0, "func(network string, address string) (*UnixAddr, error)"},
+		{"Resolver", Type, 8, ""},
+		{"Resolver.Dial", Field, 9, ""},
+		{"Resolver.PreferGo", Field, 8, ""},
+		{"Resolver.StrictErrors", Field, 9, ""},
+		{"SRV", Type, 0, ""},
+		{"SRV.Port", Field, 0, ""},
+		{"SRV.Priority", Field, 0, ""},
+		{"SRV.Target", Field, 0, ""},
+		{"SRV.Weight", Field, 0, ""},
+		{"SplitHostPort", Func, 0, "func(hostport string) (host string, port string, err error)"},
+		{"TCPAddr", Type, 0, ""},
+		{"TCPAddr.IP", Field, 0, ""},
+		{"TCPAddr.Port", Field, 0, ""},
+		{"TCPAddr.Zone", Field, 1, ""},
+		{"TCPAddrFromAddrPort", Func, 18, "func(addr netip.AddrPort) *TCPAddr"},
+		{"TCPConn", Type, 0, ""},
+		{"TCPListener", Type, 0, ""},
+		{"UDPAddr", Type, 0, ""},
+		{"UDPAddr.IP", Field, 0, ""},
+		{"UDPAddr.Port", Field, 0, ""},
+		{"UDPAddr.Zone", Field, 1, ""},
+		{"UDPAddrFromAddrPort", Func, 18, "func(addr netip.AddrPort) *UDPAddr"},
+		{"UDPConn", Type, 0, ""},
+		{"UnixAddr", Type, 0, ""},
+		{"UnixAddr.Name", Field, 0, ""},
+		{"UnixAddr.Net", Field, 0, ""},
+		{"UnixConn", Type, 0, ""},
+		{"UnixListener", Type, 0, ""},
+		{"UnknownNetworkError", Type, 0, ""},
 	},
 	"net/http": {
-		{"(*Client).CloseIdleConnections", Method, 12},
-		{"(*Client).Do", Method, 0},
-		{"(*Client).Get", Method, 0},
-		{"(*Client).Head", Method, 0},
-		{"(*Client).Post", Method, 0},
-		{"(*Client).PostForm", Method, 0},
-		{"(*Cookie).String", Method, 0},
-		{"(*Cookie).Valid", Method, 18},
-		{"(*MaxBytesError).Error", Method, 19},
-		{"(*ProtocolError).Error", Method, 0},
-		{"(*ProtocolError).Is", Method, 21},
-		{"(*Protocols).SetHTTP1", Method, 24},
-		{"(*Protocols).SetHTTP2", Method, 24},
-		{"(*Protocols).SetUnencryptedHTTP2", Method, 24},
-		{"(*Request).AddCookie", Method, 0},
-		{"(*Request).BasicAuth", Method, 4},
-		{"(*Request).Clone", Method, 13},
-		{"(*Request).Context", Method, 7},
-		{"(*Request).Cookie", Method, 0},
-		{"(*Request).Cookies", Method, 0},
-		{"(*Request).CookiesNamed", Method, 23},
-		{"(*Request).FormFile", Method, 0},
-		{"(*Request).FormValue", Method, 0},
-		{"(*Request).MultipartReader", Method, 0},
-		{"(*Request).ParseForm", Method, 0},
-		{"(*Request).ParseMultipartForm", Method, 0},
-		{"(*Request).PathValue", Method, 22},
-		{"(*Request).PostFormValue", Method, 1},
-		{"(*Request).ProtoAtLeast", Method, 0},
-		{"(*Request).Referer", Method, 0},
-		{"(*Request).SetBasicAuth", Method, 0},
-		{"(*Request).SetPathValue", Method, 22},
-		{"(*Request).UserAgent", Method, 0},
-		{"(*Request).WithContext", Method, 7},
-		{"(*Request).Write", Method, 0},
-		{"(*Request).WriteProxy", Method, 0},
-		{"(*Response).Cookies", Method, 0},
-		{"(*Response).Location", Method, 0},
-		{"(*Response).ProtoAtLeast", Method, 0},
-		{"(*Response).Write", Method, 0},
-		{"(*ResponseController).EnableFullDuplex", Method, 21},
-		{"(*ResponseController).Flush", Method, 20},
-		{"(*ResponseController).Hijack", Method, 20},
-		{"(*ResponseController).SetReadDeadline", Method, 20},
-		{"(*ResponseController).SetWriteDeadline", Method, 20},
-		{"(*ServeMux).Handle", Method, 0},
-		{"(*ServeMux).HandleFunc", Method, 0},
-		{"(*ServeMux).Handler", Method, 1},
-		{"(*ServeMux).ServeHTTP", Method, 0},
-		{"(*Server).Close", Method, 8},
-		{"(*Server).ListenAndServe", Method, 0},
-		{"(*Server).ListenAndServeTLS", Method, 0},
-		{"(*Server).RegisterOnShutdown", Method, 9},
-		{"(*Server).Serve", Method, 0},
-		{"(*Server).ServeTLS", Method, 9},
-		{"(*Server).SetKeepAlivesEnabled", Method, 3},
-		{"(*Server).Shutdown", Method, 8},
-		{"(*Transport).CancelRequest", Method, 1},
-		{"(*Transport).Clone", Method, 13},
-		{"(*Transport).CloseIdleConnections", Method, 0},
-		{"(*Transport).RegisterProtocol", Method, 0},
-		{"(*Transport).RoundTrip", Method, 0},
-		{"(ConnState).String", Method, 3},
-		{"(Dir).Open", Method, 0},
-		{"(HandlerFunc).ServeHTTP", Method, 0},
-		{"(Header).Add", Method, 0},
-		{"(Header).Clone", Method, 13},
-		{"(Header).Del", Method, 0},
-		{"(Header).Get", Method, 0},
-		{"(Header).Set", Method, 0},
-		{"(Header).Values", Method, 14},
-		{"(Header).Write", Method, 0},
-		{"(Header).WriteSubset", Method, 0},
-		{"(Protocols).HTTP1", Method, 24},
-		{"(Protocols).HTTP2", Method, 24},
-		{"(Protocols).String", Method, 24},
-		{"(Protocols).UnencryptedHTTP2", Method, 24},
-		{"AllowQuerySemicolons", Func, 17},
-		{"CanonicalHeaderKey", Func, 0},
-		{"Client", Type, 0},
-		{"Client.CheckRedirect", Field, 0},
-		{"Client.Jar", Field, 0},
-		{"Client.Timeout", Field, 3},
-		{"Client.Transport", Field, 0},
-		{"CloseNotifier", Type, 1},
-		{"ConnState", Type, 3},
-		{"Cookie", Type, 0},
-		{"Cookie.Domain", Field, 0},
-		{"Cookie.Expires", Field, 0},
-		{"Cookie.HttpOnly", Field, 0},
-		{"Cookie.MaxAge", Field, 0},
-		{"Cookie.Name", Field, 0},
-		{"Cookie.Partitioned", Field, 23},
-		{"Cookie.Path", Field, 0},
-		{"Cookie.Quoted", Field, 23},
-		{"Cookie.Raw", Field, 0},
-		{"Cookie.RawExpires", Field, 0},
-		{"Cookie.SameSite", Field, 11},
-		{"Cookie.Secure", Field, 0},
-		{"Cookie.Unparsed", Field, 0},
-		{"Cookie.Value", Field, 0},
-		{"CookieJar", Type, 0},
-		{"DefaultClient", Var, 0},
-		{"DefaultMaxHeaderBytes", Const, 0},
-		{"DefaultMaxIdleConnsPerHost", Const, 0},
-		{"DefaultServeMux", Var, 0},
-		{"DefaultTransport", Var, 0},
-		{"DetectContentType", Func, 0},
-		{"Dir", Type, 0},
-		{"ErrAbortHandler", Var, 8},
-		{"ErrBodyNotAllowed", Var, 0},
-		{"ErrBodyReadAfterClose", Var, 0},
-		{"ErrContentLength", Var, 0},
-		{"ErrHandlerTimeout", Var, 0},
-		{"ErrHeaderTooLong", Var, 0},
-		{"ErrHijacked", Var, 0},
-		{"ErrLineTooLong", Var, 0},
-		{"ErrMissingBoundary", Var, 0},
-		{"ErrMissingContentLength", Var, 0},
-		{"ErrMissingFile", Var, 0},
-		{"ErrNoCookie", Var, 0},
-		{"ErrNoLocation", Var, 0},
-		{"ErrNotMultipart", Var, 0},
-		{"ErrNotSupported", Var, 0},
-		{"ErrSchemeMismatch", Var, 21},
-		{"ErrServerClosed", Var, 8},
-		{"ErrShortBody", Var, 0},
-		{"ErrSkipAltProtocol", Var, 6},
-		{"ErrUnexpectedTrailer", Var, 0},
-		{"ErrUseLastResponse", Var, 7},
-		{"ErrWriteAfterFlush", Var, 0},
-		{"Error", Func, 0},
-		{"FS", Func, 16},
-		{"File", Type, 0},
-		{"FileServer", Func, 0},
-		{"FileServerFS", Func, 22},
-		{"FileSystem", Type, 0},
-		{"Flusher", Type, 0},
-		{"Get", Func, 0},
-		{"HTTP2Config", Type, 24},
-		{"HTTP2Config.CountError", Field, 24},
-		{"HTTP2Config.MaxConcurrentStreams", Field, 24},
-		{"HTTP2Config.MaxDecoderHeaderTableSize", Field, 24},
-		{"HTTP2Config.MaxEncoderHeaderTableSize", Field, 24},
-		{"HTTP2Config.MaxReadFrameSize", Field, 24},
-		{"HTTP2Config.MaxReceiveBufferPerConnection", Field, 24},
-		{"HTTP2Config.MaxReceiveBufferPerStream", Field, 24},
-		{"HTTP2Config.PermitProhibitedCipherSuites", Field, 24},
-		{"HTTP2Config.PingTimeout", Field, 24},
-		{"HTTP2Config.SendPingTimeout", Field, 24},
-		{"HTTP2Config.WriteByteTimeout", Field, 24},
-		{"Handle", Func, 0},
-		{"HandleFunc", Func, 0},
-		{"Handler", Type, 0},
-		{"HandlerFunc", Type, 0},
-		{"Head", Func, 0},
-		{"Header", Type, 0},
-		{"Hijacker", Type, 0},
-		{"ListenAndServe", Func, 0},
-		{"ListenAndServeTLS", Func, 0},
-		{"LocalAddrContextKey", Var, 7},
-		{"MaxBytesError", Type, 19},
-		{"MaxBytesError.Limit", Field, 19},
-		{"MaxBytesHandler", Func, 18},
-		{"MaxBytesReader", Func, 0},
-		{"MethodConnect", Const, 6},
-		{"MethodDelete", Const, 6},
-		{"MethodGet", Const, 6},
-		{"MethodHead", Const, 6},
-		{"MethodOptions", Const, 6},
-		{"MethodPatch", Const, 6},
-		{"MethodPost", Const, 6},
-		{"MethodPut", Const, 6},
-		{"MethodTrace", Const, 6},
-		{"NewFileTransport", Func, 0},
-		{"NewFileTransportFS", Func, 22},
-		{"NewRequest", Func, 0},
-		{"NewRequestWithContext", Func, 13},
-		{"NewResponseController", Func, 20},
-		{"NewServeMux", Func, 0},
-		{"NoBody", Var, 8},
-		{"NotFound", Func, 0},
-		{"NotFoundHandler", Func, 0},
-		{"ParseCookie", Func, 23},
-		{"ParseHTTPVersion", Func, 0},
-		{"ParseSetCookie", Func, 23},
-		{"ParseTime", Func, 1},
-		{"Post", Func, 0},
-		{"PostForm", Func, 0},
-		{"ProtocolError", Type, 0},
-		{"ProtocolError.ErrorString", Field, 0},
-		{"Protocols", Type, 24},
-		{"ProxyFromEnvironment", Func, 0},
-		{"ProxyURL", Func, 0},
-		{"PushOptions", Type, 8},
-		{"PushOptions.Header", Field, 8},
-		{"PushOptions.Method", Field, 8},
-		{"Pusher", Type, 8},
-		{"ReadRequest", Func, 0},
-		{"ReadResponse", Func, 0},
-		{"Redirect", Func, 0},
-		{"RedirectHandler", Func, 0},
-		{"Request", Type, 0},
-		{"Request.Body", Field, 0},
-		{"Request.Cancel", Field, 5},
-		{"Request.Close", Field, 0},
-		{"Request.ContentLength", Field, 0},
-		{"Request.Form", Field, 0},
-		{"Request.GetBody", Field, 8},
-		{"Request.Header", Field, 0},
-		{"Request.Host", Field, 0},
-		{"Request.Method", Field, 0},
-		{"Request.MultipartForm", Field, 0},
-		{"Request.Pattern", Field, 23},
-		{"Request.PostForm", Field, 1},
-		{"Request.Proto", Field, 0},
-		{"Request.ProtoMajor", Field, 0},
-		{"Request.ProtoMinor", Field, 0},
-		{"Request.RemoteAddr", Field, 0},
-		{"Request.RequestURI", Field, 0},
-		{"Request.Response", Field, 7},
-		{"Request.TLS", Field, 0},
-		{"Request.Trailer", Field, 0},
-		{"Request.TransferEncoding", Field, 0},
-		{"Request.URL", Field, 0},
-		{"Response", Type, 0},
-		{"Response.Body", Field, 0},
-		{"Response.Close", Field, 0},
-		{"Response.ContentLength", Field, 0},
-		{"Response.Header", Field, 0},
-		{"Response.Proto", Field, 0},
-		{"Response.ProtoMajor", Field, 0},
-		{"Response.ProtoMinor", Field, 0},
-		{"Response.Request", Field, 0},
-		{"Response.Status", Field, 0},
-		{"Response.StatusCode", Field, 0},
-		{"Response.TLS", Field, 3},
-		{"Response.Trailer", Field, 0},
-		{"Response.TransferEncoding", Field, 0},
-		{"Response.Uncompressed", Field, 7},
-		{"ResponseController", Type, 20},
-		{"ResponseWriter", Type, 0},
-		{"RoundTripper", Type, 0},
-		{"SameSite", Type, 11},
-		{"SameSiteDefaultMode", Const, 11},
-		{"SameSiteLaxMode", Const, 11},
-		{"SameSiteNoneMode", Const, 13},
-		{"SameSiteStrictMode", Const, 11},
-		{"Serve", Func, 0},
-		{"ServeContent", Func, 0},
-		{"ServeFile", Func, 0},
-		{"ServeFileFS", Func, 22},
-		{"ServeMux", Type, 0},
-		{"ServeTLS", Func, 9},
-		{"Server", Type, 0},
-		{"Server.Addr", Field, 0},
-		{"Server.BaseContext", Field, 13},
-		{"Server.ConnContext", Field, 13},
-		{"Server.ConnState", Field, 3},
-		{"Server.DisableGeneralOptionsHandler", Field, 20},
-		{"Server.ErrorLog", Field, 3},
-		{"Server.HTTP2", Field, 24},
-		{"Server.Handler", Field, 0},
-		{"Server.IdleTimeout", Field, 8},
-		{"Server.MaxHeaderBytes", Field, 0},
-		{"Server.Protocols", Field, 24},
-		{"Server.ReadHeaderTimeout", Field, 8},
-		{"Server.ReadTimeout", Field, 0},
-		{"Server.TLSConfig", Field, 0},
-		{"Server.TLSNextProto", Field, 1},
-		{"Server.WriteTimeout", Field, 0},
-		{"ServerContextKey", Var, 7},
-		{"SetCookie", Func, 0},
-		{"StateActive", Const, 3},
-		{"StateClosed", Const, 3},
-		{"StateHijacked", Const, 3},
-		{"StateIdle", Const, 3},
-		{"StateNew", Const, 3},
-		{"StatusAccepted", Const, 0},
-		{"StatusAlreadyReported", Const, 7},
-		{"StatusBadGateway", Const, 0},
-		{"StatusBadRequest", Const, 0},
-		{"StatusConflict", Const, 0},
-		{"StatusContinue", Const, 0},
-		{"StatusCreated", Const, 0},
-		{"StatusEarlyHints", Const, 13},
-		{"StatusExpectationFailed", Const, 0},
-		{"StatusFailedDependency", Const, 7},
-		{"StatusForbidden", Const, 0},
-		{"StatusFound", Const, 0},
-		{"StatusGatewayTimeout", Const, 0},
-		{"StatusGone", Const, 0},
-		{"StatusHTTPVersionNotSupported", Const, 0},
-		{"StatusIMUsed", Const, 7},
-		{"StatusInsufficientStorage", Const, 7},
-		{"StatusInternalServerError", Const, 0},
-		{"StatusLengthRequired", Const, 0},
-		{"StatusLocked", Const, 7},
-		{"StatusLoopDetected", Const, 7},
-		{"StatusMethodNotAllowed", Const, 0},
-		{"StatusMisdirectedRequest", Const, 11},
-		{"StatusMovedPermanently", Const, 0},
-		{"StatusMultiStatus", Const, 7},
-		{"StatusMultipleChoices", Const, 0},
-		{"StatusNetworkAuthenticationRequired", Const, 6},
-		{"StatusNoContent", Const, 0},
-		{"StatusNonAuthoritativeInfo", Const, 0},
-		{"StatusNotAcceptable", Const, 0},
-		{"StatusNotExtended", Const, 7},
-		{"StatusNotFound", Const, 0},
-		{"StatusNotImplemented", Const, 0},
-		{"StatusNotModified", Const, 0},
-		{"StatusOK", Const, 0},
-		{"StatusPartialContent", Const, 0},
-		{"StatusPaymentRequired", Const, 0},
-		{"StatusPermanentRedirect", Const, 7},
-		{"StatusPreconditionFailed", Const, 0},
-		{"StatusPreconditionRequired", Const, 6},
-		{"StatusProcessing", Const, 7},
-		{"StatusProxyAuthRequired", Const, 0},
-		{"StatusRequestEntityTooLarge", Const, 0},
-		{"StatusRequestHeaderFieldsTooLarge", Const, 6},
-		{"StatusRequestTimeout", Const, 0},
-		{"StatusRequestURITooLong", Const, 0},
-		{"StatusRequestedRangeNotSatisfiable", Const, 0},
-		{"StatusResetContent", Const, 0},
-		{"StatusSeeOther", Const, 0},
-		{"StatusServiceUnavailable", Const, 0},
-		{"StatusSwitchingProtocols", Const, 0},
-		{"StatusTeapot", Const, 0},
-		{"StatusTemporaryRedirect", Const, 0},
-		{"StatusText", Func, 0},
-		{"StatusTooEarly", Const, 12},
-		{"StatusTooManyRequests", Const, 6},
-		{"StatusUnauthorized", Const, 0},
-		{"StatusUnavailableForLegalReasons", Const, 6},
-		{"StatusUnprocessableEntity", Const, 7},
-		{"StatusUnsupportedMediaType", Const, 0},
-		{"StatusUpgradeRequired", Const, 7},
-		{"StatusUseProxy", Const, 0},
-		{"StatusVariantAlsoNegotiates", Const, 7},
-		{"StripPrefix", Func, 0},
-		{"TimeFormat", Const, 0},
-		{"TimeoutHandler", Func, 0},
-		{"TrailerPrefix", Const, 8},
-		{"Transport", Type, 0},
-		{"Transport.Dial", Field, 0},
-		{"Transport.DialContext", Field, 7},
-		{"Transport.DialTLS", Field, 4},
-		{"Transport.DialTLSContext", Field, 14},
-		{"Transport.DisableCompression", Field, 0},
-		{"Transport.DisableKeepAlives", Field, 0},
-		{"Transport.ExpectContinueTimeout", Field, 6},
-		{"Transport.ForceAttemptHTTP2", Field, 13},
-		{"Transport.GetProxyConnectHeader", Field, 16},
-		{"Transport.HTTP2", Field, 24},
-		{"Transport.IdleConnTimeout", Field, 7},
-		{"Transport.MaxConnsPerHost", Field, 11},
-		{"Transport.MaxIdleConns", Field, 7},
-		{"Transport.MaxIdleConnsPerHost", Field, 0},
-		{"Transport.MaxResponseHeaderBytes", Field, 7},
-		{"Transport.OnProxyConnectResponse", Field, 20},
-		{"Transport.Protocols", Field, 24},
-		{"Transport.Proxy", Field, 0},
-		{"Transport.ProxyConnectHeader", Field, 8},
-		{"Transport.ReadBufferSize", Field, 13},
-		{"Transport.ResponseHeaderTimeout", Field, 1},
-		{"Transport.TLSClientConfig", Field, 0},
-		{"Transport.TLSHandshakeTimeout", Field, 3},
-		{"Transport.TLSNextProto", Field, 6},
-		{"Transport.WriteBufferSize", Field, 13},
+		{"(*Client).CloseIdleConnections", Method, 12, ""},
+		{"(*Client).Do", Method, 0, ""},
+		{"(*Client).Get", Method, 0, ""},
+		{"(*Client).Head", Method, 0, ""},
+		{"(*Client).Post", Method, 0, ""},
+		{"(*Client).PostForm", Method, 0, ""},
+		{"(*Cookie).String", Method, 0, ""},
+		{"(*Cookie).Valid", Method, 18, ""},
+		{"(*MaxBytesError).Error", Method, 19, ""},
+		{"(*ProtocolError).Error", Method, 0, ""},
+		{"(*ProtocolError).Is", Method, 21, ""},
+		{"(*Protocols).SetHTTP1", Method, 24, ""},
+		{"(*Protocols).SetHTTP2", Method, 24, ""},
+		{"(*Protocols).SetUnencryptedHTTP2", Method, 24, ""},
+		{"(*Request).AddCookie", Method, 0, ""},
+		{"(*Request).BasicAuth", Method, 4, ""},
+		{"(*Request).Clone", Method, 13, ""},
+		{"(*Request).Context", Method, 7, ""},
+		{"(*Request).Cookie", Method, 0, ""},
+		{"(*Request).Cookies", Method, 0, ""},
+		{"(*Request).CookiesNamed", Method, 23, ""},
+		{"(*Request).FormFile", Method, 0, ""},
+		{"(*Request).FormValue", Method, 0, ""},
+		{"(*Request).MultipartReader", Method, 0, ""},
+		{"(*Request).ParseForm", Method, 0, ""},
+		{"(*Request).ParseMultipartForm", Method, 0, ""},
+		{"(*Request).PathValue", Method, 22, ""},
+		{"(*Request).PostFormValue", Method, 1, ""},
+		{"(*Request).ProtoAtLeast", Method, 0, ""},
+		{"(*Request).Referer", Method, 0, ""},
+		{"(*Request).SetBasicAuth", Method, 0, ""},
+		{"(*Request).SetPathValue", Method, 22, ""},
+		{"(*Request).UserAgent", Method, 0, ""},
+		{"(*Request).WithContext", Method, 7, ""},
+		{"(*Request).Write", Method, 0, ""},
+		{"(*Request).WriteProxy", Method, 0, ""},
+		{"(*Response).Cookies", Method, 0, ""},
+		{"(*Response).Location", Method, 0, ""},
+		{"(*Response).ProtoAtLeast", Method, 0, ""},
+		{"(*Response).Write", Method, 0, ""},
+		{"(*ResponseController).EnableFullDuplex", Method, 21, ""},
+		{"(*ResponseController).Flush", Method, 20, ""},
+		{"(*ResponseController).Hijack", Method, 20, ""},
+		{"(*ResponseController).SetReadDeadline", Method, 20, ""},
+		{"(*ResponseController).SetWriteDeadline", Method, 20, ""},
+		{"(*ServeMux).Handle", Method, 0, ""},
+		{"(*ServeMux).HandleFunc", Method, 0, ""},
+		{"(*ServeMux).Handler", Method, 1, ""},
+		{"(*ServeMux).ServeHTTP", Method, 0, ""},
+		{"(*Server).Close", Method, 8, ""},
+		{"(*Server).ListenAndServe", Method, 0, ""},
+		{"(*Server).ListenAndServeTLS", Method, 0, ""},
+		{"(*Server).RegisterOnShutdown", Method, 9, ""},
+		{"(*Server).Serve", Method, 0, ""},
+		{"(*Server).ServeTLS", Method, 9, ""},
+		{"(*Server).SetKeepAlivesEnabled", Method, 3, ""},
+		{"(*Server).Shutdown", Method, 8, ""},
+		{"(*Transport).CancelRequest", Method, 1, ""},
+		{"(*Transport).Clone", Method, 13, ""},
+		{"(*Transport).CloseIdleConnections", Method, 0, ""},
+		{"(*Transport).RegisterProtocol", Method, 0, ""},
+		{"(*Transport).RoundTrip", Method, 0, ""},
+		{"(ConnState).String", Method, 3, ""},
+		{"(Dir).Open", Method, 0, ""},
+		{"(HandlerFunc).ServeHTTP", Method, 0, ""},
+		{"(Header).Add", Method, 0, ""},
+		{"(Header).Clone", Method, 13, ""},
+		{"(Header).Del", Method, 0, ""},
+		{"(Header).Get", Method, 0, ""},
+		{"(Header).Set", Method, 0, ""},
+		{"(Header).Values", Method, 14, ""},
+		{"(Header).Write", Method, 0, ""},
+		{"(Header).WriteSubset", Method, 0, ""},
+		{"(Protocols).HTTP1", Method, 24, ""},
+		{"(Protocols).HTTP2", Method, 24, ""},
+		{"(Protocols).String", Method, 24, ""},
+		{"(Protocols).UnencryptedHTTP2", Method, 24, ""},
+		{"AllowQuerySemicolons", Func, 17, "func(h Handler) Handler"},
+		{"CanonicalHeaderKey", Func, 0, "func(s string) string"},
+		{"Client", Type, 0, ""},
+		{"Client.CheckRedirect", Field, 0, ""},
+		{"Client.Jar", Field, 0, ""},
+		{"Client.Timeout", Field, 3, ""},
+		{"Client.Transport", Field, 0, ""},
+		{"CloseNotifier", Type, 1, ""},
+		{"ConnState", Type, 3, ""},
+		{"Cookie", Type, 0, ""},
+		{"Cookie.Domain", Field, 0, ""},
+		{"Cookie.Expires", Field, 0, ""},
+		{"Cookie.HttpOnly", Field, 0, ""},
+		{"Cookie.MaxAge", Field, 0, ""},
+		{"Cookie.Name", Field, 0, ""},
+		{"Cookie.Partitioned", Field, 23, ""},
+		{"Cookie.Path", Field, 0, ""},
+		{"Cookie.Quoted", Field, 23, ""},
+		{"Cookie.Raw", Field, 0, ""},
+		{"Cookie.RawExpires", Field, 0, ""},
+		{"Cookie.SameSite", Field, 11, ""},
+		{"Cookie.Secure", Field, 0, ""},
+		{"Cookie.Unparsed", Field, 0, ""},
+		{"Cookie.Value", Field, 0, ""},
+		{"CookieJar", Type, 0, ""},
+		{"DefaultClient", Var, 0, ""},
+		{"DefaultMaxHeaderBytes", Const, 0, ""},
+		{"DefaultMaxIdleConnsPerHost", Const, 0, ""},
+		{"DefaultServeMux", Var, 0, ""},
+		{"DefaultTransport", Var, 0, ""},
+		{"DetectContentType", Func, 0, "func(data []byte) string"},
+		{"Dir", Type, 0, ""},
+		{"ErrAbortHandler", Var, 8, ""},
+		{"ErrBodyNotAllowed", Var, 0, ""},
+		{"ErrBodyReadAfterClose", Var, 0, ""},
+		{"ErrContentLength", Var, 0, ""},
+		{"ErrHandlerTimeout", Var, 0, ""},
+		{"ErrHeaderTooLong", Var, 0, ""},
+		{"ErrHijacked", Var, 0, ""},
+		{"ErrLineTooLong", Var, 0, ""},
+		{"ErrMissingBoundary", Var, 0, ""},
+		{"ErrMissingContentLength", Var, 0, ""},
+		{"ErrMissingFile", Var, 0, ""},
+		{"ErrNoCookie", Var, 0, ""},
+		{"ErrNoLocation", Var, 0, ""},
+		{"ErrNotMultipart", Var, 0, ""},
+		{"ErrNotSupported", Var, 0, ""},
+		{"ErrSchemeMismatch", Var, 21, ""},
+		{"ErrServerClosed", Var, 8, ""},
+		{"ErrShortBody", Var, 0, ""},
+		{"ErrSkipAltProtocol", Var, 6, ""},
+		{"ErrUnexpectedTrailer", Var, 0, ""},
+		{"ErrUseLastResponse", Var, 7, ""},
+		{"ErrWriteAfterFlush", Var, 0, ""},
+		{"Error", Func, 0, "func(w ResponseWriter, error string, code int)"},
+		{"FS", Func, 16, "func(fsys fs.FS) FileSystem"},
+		{"File", Type, 0, ""},
+		{"FileServer", Func, 0, "func(root FileSystem) Handler"},
+		{"FileServerFS", Func, 22, "func(root fs.FS) Handler"},
+		{"FileSystem", Type, 0, ""},
+		{"Flusher", Type, 0, ""},
+		{"Get", Func, 0, "func(url string) (resp *Response, err error)"},
+		{"HTTP2Config", Type, 24, ""},
+		{"HTTP2Config.CountError", Field, 24, ""},
+		{"HTTP2Config.MaxConcurrentStreams", Field, 24, ""},
+		{"HTTP2Config.MaxDecoderHeaderTableSize", Field, 24, ""},
+		{"HTTP2Config.MaxEncoderHeaderTableSize", Field, 24, ""},
+		{"HTTP2Config.MaxReadFrameSize", Field, 24, ""},
+		{"HTTP2Config.MaxReceiveBufferPerConnection", Field, 24, ""},
+		{"HTTP2Config.MaxReceiveBufferPerStream", Field, 24, ""},
+		{"HTTP2Config.PermitProhibitedCipherSuites", Field, 24, ""},
+		{"HTTP2Config.PingTimeout", Field, 24, ""},
+		{"HTTP2Config.SendPingTimeout", Field, 24, ""},
+		{"HTTP2Config.WriteByteTimeout", Field, 24, ""},
+		{"Handle", Func, 0, "func(pattern string, handler Handler)"},
+		{"HandleFunc", Func, 0, "func(pattern string, handler func(ResponseWriter, *Request))"},
+		{"Handler", Type, 0, ""},
+		{"HandlerFunc", Type, 0, ""},
+		{"Head", Func, 0, "func(url string) (resp *Response, err error)"},
+		{"Header", Type, 0, ""},
+		{"Hijacker", Type, 0, ""},
+		{"ListenAndServe", Func, 0, "func(addr string, handler Handler) error"},
+		{"ListenAndServeTLS", Func, 0, "func(addr string, certFile string, keyFile string, handler Handler) error"},
+		{"LocalAddrContextKey", Var, 7, ""},
+		{"MaxBytesError", Type, 19, ""},
+		{"MaxBytesError.Limit", Field, 19, ""},
+		{"MaxBytesHandler", Func, 18, "func(h Handler, n int64) Handler"},
+		{"MaxBytesReader", Func, 0, "func(w ResponseWriter, r io.ReadCloser, n int64) io.ReadCloser"},
+		{"MethodConnect", Const, 6, ""},
+		{"MethodDelete", Const, 6, ""},
+		{"MethodGet", Const, 6, ""},
+		{"MethodHead", Const, 6, ""},
+		{"MethodOptions", Const, 6, ""},
+		{"MethodPatch", Const, 6, ""},
+		{"MethodPost", Const, 6, ""},
+		{"MethodPut", Const, 6, ""},
+		{"MethodTrace", Const, 6, ""},
+		{"NewFileTransport", Func, 0, "func(fs FileSystem) RoundTripper"},
+		{"NewFileTransportFS", Func, 22, "func(fsys fs.FS) RoundTripper"},
+		{"NewRequest", Func, 0, "func(method string, url string, body io.Reader) (*Request, error)"},
+		{"NewRequestWithContext", Func, 13, "func(ctx context.Context, method string, url string, body io.Reader) (*Request, error)"},
+		{"NewResponseController", Func, 20, "func(rw ResponseWriter) *ResponseController"},
+		{"NewServeMux", Func, 0, "func() *ServeMux"},
+		{"NoBody", Var, 8, ""},
+		{"NotFound", Func, 0, "func(w ResponseWriter, r *Request)"},
+		{"NotFoundHandler", Func, 0, "func() Handler"},
+		{"ParseCookie", Func, 23, "func(line string) ([]*Cookie, error)"},
+		{"ParseHTTPVersion", Func, 0, "func(vers string) (major int, minor int, ok bool)"},
+		{"ParseSetCookie", Func, 23, "func(line string) (*Cookie, error)"},
+		{"ParseTime", Func, 1, "func(text string) (t time.Time, err error)"},
+		{"Post", Func, 0, "func(url string, contentType string, body io.Reader) (resp *Response, err error)"},
+		{"PostForm", Func, 0, "func(url string, data url.Values) (resp *Response, err error)"},
+		{"ProtocolError", Type, 0, ""},
+		{"ProtocolError.ErrorString", Field, 0, ""},
+		{"Protocols", Type, 24, ""},
+		{"ProxyFromEnvironment", Func, 0, "func(req *Request) (*url.URL, error)"},
+		{"ProxyURL", Func, 0, "func(fixedURL *url.URL) func(*Request) (*url.URL, error)"},
+		{"PushOptions", Type, 8, ""},
+		{"PushOptions.Header", Field, 8, ""},
+		{"PushOptions.Method", Field, 8, ""},
+		{"Pusher", Type, 8, ""},
+		{"ReadRequest", Func, 0, "func(b *bufio.Reader) (*Request, error)"},
+		{"ReadResponse", Func, 0, "func(r *bufio.Reader, req *Request) (*Response, error)"},
+		{"Redirect", Func, 0, "func(w ResponseWriter, r *Request, url string, code int)"},
+		{"RedirectHandler", Func, 0, "func(url string, code int) Handler"},
+		{"Request", Type, 0, ""},
+		{"Request.Body", Field, 0, ""},
+		{"Request.Cancel", Field, 5, ""},
+		{"Request.Close", Field, 0, ""},
+		{"Request.ContentLength", Field, 0, ""},
+		{"Request.Form", Field, 0, ""},
+		{"Request.GetBody", Field, 8, ""},
+		{"Request.Header", Field, 0, ""},
+		{"Request.Host", Field, 0, ""},
+		{"Request.Method", Field, 0, ""},
+		{"Request.MultipartForm", Field, 0, ""},
+		{"Request.Pattern", Field, 23, ""},
+		{"Request.PostForm", Field, 1, ""},
+		{"Request.Proto", Field, 0, ""},
+		{"Request.ProtoMajor", Field, 0, ""},
+		{"Request.ProtoMinor", Field, 0, ""},
+		{"Request.RemoteAddr", Field, 0, ""},
+		{"Request.RequestURI", Field, 0, ""},
+		{"Request.Response", Field, 7, ""},
+		{"Request.TLS", Field, 0, ""},
+		{"Request.Trailer", Field, 0, ""},
+		{"Request.TransferEncoding", Field, 0, ""},
+		{"Request.URL", Field, 0, ""},
+		{"Response", Type, 0, ""},
+		{"Response.Body", Field, 0, ""},
+		{"Response.Close", Field, 0, ""},
+		{"Response.ContentLength", Field, 0, ""},
+		{"Response.Header", Field, 0, ""},
+		{"Response.Proto", Field, 0, ""},
+		{"Response.ProtoMajor", Field, 0, ""},
+		{"Response.ProtoMinor", Field, 0, ""},
+		{"Response.Request", Field, 0, ""},
+		{"Response.Status", Field, 0, ""},
+		{"Response.StatusCode", Field, 0, ""},
+		{"Response.TLS", Field, 3, ""},
+		{"Response.Trailer", Field, 0, ""},
+		{"Response.TransferEncoding", Field, 0, ""},
+		{"Response.Uncompressed", Field, 7, ""},
+		{"ResponseController", Type, 20, ""},
+		{"ResponseWriter", Type, 0, ""},
+		{"RoundTripper", Type, 0, ""},
+		{"SameSite", Type, 11, ""},
+		{"SameSiteDefaultMode", Const, 11, ""},
+		{"SameSiteLaxMode", Const, 11, ""},
+		{"SameSiteNoneMode", Const, 13, ""},
+		{"SameSiteStrictMode", Const, 11, ""},
+		{"Serve", Func, 0, "func(l net.Listener, handler Handler) error"},
+		{"ServeContent", Func, 0, "func(w ResponseWriter, req *Request, name string, modtime time.Time, content io.ReadSeeker)"},
+		{"ServeFile", Func, 0, "func(w ResponseWriter, r *Request, name string)"},
+		{"ServeFileFS", Func, 22, "func(w ResponseWriter, r *Request, fsys fs.FS, name string)"},
+		{"ServeMux", Type, 0, ""},
+		{"ServeTLS", Func, 9, "func(l net.Listener, handler Handler, certFile string, keyFile string) error"},
+		{"Server", Type, 0, ""},
+		{"Server.Addr", Field, 0, ""},
+		{"Server.BaseContext", Field, 13, ""},
+		{"Server.ConnContext", Field, 13, ""},
+		{"Server.ConnState", Field, 3, ""},
+		{"Server.DisableGeneralOptionsHandler", Field, 20, ""},
+		{"Server.ErrorLog", Field, 3, ""},
+		{"Server.HTTP2", Field, 24, ""},
+		{"Server.Handler", Field, 0, ""},
+		{"Server.IdleTimeout", Field, 8, ""},
+		{"Server.MaxHeaderBytes", Field, 0, ""},
+		{"Server.Protocols", Field, 24, ""},
+		{"Server.ReadHeaderTimeout", Field, 8, ""},
+		{"Server.ReadTimeout", Field, 0, ""},
+		{"Server.TLSConfig", Field, 0, ""},
+		{"Server.TLSNextProto", Field, 1, ""},
+		{"Server.WriteTimeout", Field, 0, ""},
+		{"ServerContextKey", Var, 7, ""},
+		{"SetCookie", Func, 0, "func(w ResponseWriter, cookie *Cookie)"},
+		{"StateActive", Const, 3, ""},
+		{"StateClosed", Const, 3, ""},
+		{"StateHijacked", Const, 3, ""},
+		{"StateIdle", Const, 3, ""},
+		{"StateNew", Const, 3, ""},
+		{"StatusAccepted", Const, 0, ""},
+		{"StatusAlreadyReported", Const, 7, ""},
+		{"StatusBadGateway", Const, 0, ""},
+		{"StatusBadRequest", Const, 0, ""},
+		{"StatusConflict", Const, 0, ""},
+		{"StatusContinue", Const, 0, ""},
+		{"StatusCreated", Const, 0, ""},
+		{"StatusEarlyHints", Const, 13, ""},
+		{"StatusExpectationFailed", Const, 0, ""},
+		{"StatusFailedDependency", Const, 7, ""},
+		{"StatusForbidden", Const, 0, ""},
+		{"StatusFound", Const, 0, ""},
+		{"StatusGatewayTimeout", Const, 0, ""},
+		{"StatusGone", Const, 0, ""},
+		{"StatusHTTPVersionNotSupported", Const, 0, ""},
+		{"StatusIMUsed", Const, 7, ""},
+		{"StatusInsufficientStorage", Const, 7, ""},
+		{"StatusInternalServerError", Const, 0, ""},
+		{"StatusLengthRequired", Const, 0, ""},
+		{"StatusLocked", Const, 7, ""},
+		{"StatusLoopDetected", Const, 7, ""},
+		{"StatusMethodNotAllowed", Const, 0, ""},
+		{"StatusMisdirectedRequest", Const, 11, ""},
+		{"StatusMovedPermanently", Const, 0, ""},
+		{"StatusMultiStatus", Const, 7, ""},
+		{"StatusMultipleChoices", Const, 0, ""},
+		{"StatusNetworkAuthenticationRequired", Const, 6, ""},
+		{"StatusNoContent", Const, 0, ""},
+		{"StatusNonAuthoritativeInfo", Const, 0, ""},
+		{"StatusNotAcceptable", Const, 0, ""},
+		{"StatusNotExtended", Const, 7, ""},
+		{"StatusNotFound", Const, 0, ""},
+		{"StatusNotImplemented", Const, 0, ""},
+		{"StatusNotModified", Const, 0, ""},
+		{"StatusOK", Const, 0, ""},
+		{"StatusPartialContent", Const, 0, ""},
+		{"StatusPaymentRequired", Const, 0, ""},
+		{"StatusPermanentRedirect", Const, 7, ""},
+		{"StatusPreconditionFailed", Const, 0, ""},
+		{"StatusPreconditionRequired", Const, 6, ""},
+		{"StatusProcessing", Const, 7, ""},
+		{"StatusProxyAuthRequired", Const, 0, ""},
+		{"StatusRequestEntityTooLarge", Const, 0, ""},
+		{"StatusRequestHeaderFieldsTooLarge", Const, 6, ""},
+		{"StatusRequestTimeout", Const, 0, ""},
+		{"StatusRequestURITooLong", Const, 0, ""},
+		{"StatusRequestedRangeNotSatisfiable", Const, 0, ""},
+		{"StatusResetContent", Const, 0, ""},
+		{"StatusSeeOther", Const, 0, ""},
+		{"StatusServiceUnavailable", Const, 0, ""},
+		{"StatusSwitchingProtocols", Const, 0, ""},
+		{"StatusTeapot", Const, 0, ""},
+		{"StatusTemporaryRedirect", Const, 0, ""},
+		{"StatusText", Func, 0, "func(code int) string"},
+		{"StatusTooEarly", Const, 12, ""},
+		{"StatusTooManyRequests", Const, 6, ""},
+		{"StatusUnauthorized", Const, 0, ""},
+		{"StatusUnavailableForLegalReasons", Const, 6, ""},
+		{"StatusUnprocessableEntity", Const, 7, ""},
+		{"StatusUnsupportedMediaType", Const, 0, ""},
+		{"StatusUpgradeRequired", Const, 7, ""},
+		{"StatusUseProxy", Const, 0, ""},
+		{"StatusVariantAlsoNegotiates", Const, 7, ""},
+		{"StripPrefix", Func, 0, "func(prefix string, h Handler) Handler"},
+		{"TimeFormat", Const, 0, ""},
+		{"TimeoutHandler", Func, 0, "func(h Handler, dt time.Duration, msg string) Handler"},
+		{"TrailerPrefix", Const, 8, ""},
+		{"Transport", Type, 0, ""},
+		{"Transport.Dial", Field, 0, ""},
+		{"Transport.DialContext", Field, 7, ""},
+		{"Transport.DialTLS", Field, 4, ""},
+		{"Transport.DialTLSContext", Field, 14, ""},
+		{"Transport.DisableCompression", Field, 0, ""},
+		{"Transport.DisableKeepAlives", Field, 0, ""},
+		{"Transport.ExpectContinueTimeout", Field, 6, ""},
+		{"Transport.ForceAttemptHTTP2", Field, 13, ""},
+		{"Transport.GetProxyConnectHeader", Field, 16, ""},
+		{"Transport.HTTP2", Field, 24, ""},
+		{"Transport.IdleConnTimeout", Field, 7, ""},
+		{"Transport.MaxConnsPerHost", Field, 11, ""},
+		{"Transport.MaxIdleConns", Field, 7, ""},
+		{"Transport.MaxIdleConnsPerHost", Field, 0, ""},
+		{"Transport.MaxResponseHeaderBytes", Field, 7, ""},
+		{"Transport.OnProxyConnectResponse", Field, 20, ""},
+		{"Transport.Protocols", Field, 24, ""},
+		{"Transport.Proxy", Field, 0, ""},
+		{"Transport.ProxyConnectHeader", Field, 8, ""},
+		{"Transport.ReadBufferSize", Field, 13, ""},
+		{"Transport.ResponseHeaderTimeout", Field, 1, ""},
+		{"Transport.TLSClientConfig", Field, 0, ""},
+		{"Transport.TLSHandshakeTimeout", Field, 3, ""},
+		{"Transport.TLSNextProto", Field, 6, ""},
+		{"Transport.WriteBufferSize", Field, 13, ""},
 	},
 	"net/http/cgi": {
-		{"(*Handler).ServeHTTP", Method, 0},
-		{"Handler", Type, 0},
-		{"Handler.Args", Field, 0},
-		{"Handler.Dir", Field, 0},
-		{"Handler.Env", Field, 0},
-		{"Handler.InheritEnv", Field, 0},
-		{"Handler.Logger", Field, 0},
-		{"Handler.Path", Field, 0},
-		{"Handler.PathLocationHandler", Field, 0},
-		{"Handler.Root", Field, 0},
-		{"Handler.Stderr", Field, 7},
-		{"Request", Func, 0},
-		{"RequestFromMap", Func, 0},
-		{"Serve", Func, 0},
+		{"(*Handler).ServeHTTP", Method, 0, ""},
+		{"Handler", Type, 0, ""},
+		{"Handler.Args", Field, 0, ""},
+		{"Handler.Dir", Field, 0, ""},
+		{"Handler.Env", Field, 0, ""},
+		{"Handler.InheritEnv", Field, 0, ""},
+		{"Handler.Logger", Field, 0, ""},
+		{"Handler.Path", Field, 0, ""},
+		{"Handler.PathLocationHandler", Field, 0, ""},
+		{"Handler.Root", Field, 0, ""},
+		{"Handler.Stderr", Field, 7, ""},
+		{"Request", Func, 0, "func() (*http.Request, error)"},
+		{"RequestFromMap", Func, 0, "func(params map[string]string) (*http.Request, error)"},
+		{"Serve", Func, 0, "func(handler http.Handler) error"},
 	},
 	"net/http/cookiejar": {
-		{"(*Jar).Cookies", Method, 1},
-		{"(*Jar).SetCookies", Method, 1},
-		{"Jar", Type, 1},
-		{"New", Func, 1},
-		{"Options", Type, 1},
-		{"Options.PublicSuffixList", Field, 1},
-		{"PublicSuffixList", Type, 1},
+		{"(*Jar).Cookies", Method, 1, ""},
+		{"(*Jar).SetCookies", Method, 1, ""},
+		{"Jar", Type, 1, ""},
+		{"New", Func, 1, "func(o *Options) (*Jar, error)"},
+		{"Options", Type, 1, ""},
+		{"Options.PublicSuffixList", Field, 1, ""},
+		{"PublicSuffixList", Type, 1, ""},
 	},
 	"net/http/fcgi": {
-		{"ErrConnClosed", Var, 5},
-		{"ErrRequestAborted", Var, 5},
-		{"ProcessEnv", Func, 9},
-		{"Serve", Func, 0},
+		{"ErrConnClosed", Var, 5, ""},
+		{"ErrRequestAborted", Var, 5, ""},
+		{"ProcessEnv", Func, 9, "func(r *http.Request) map[string]string"},
+		{"Serve", Func, 0, "func(l net.Listener, handler http.Handler) error"},
 	},
 	"net/http/httptest": {
-		{"(*ResponseRecorder).Flush", Method, 0},
-		{"(*ResponseRecorder).Header", Method, 0},
-		{"(*ResponseRecorder).Result", Method, 7},
-		{"(*ResponseRecorder).Write", Method, 0},
-		{"(*ResponseRecorder).WriteHeader", Method, 0},
-		{"(*ResponseRecorder).WriteString", Method, 6},
-		{"(*Server).Certificate", Method, 9},
-		{"(*Server).Client", Method, 9},
-		{"(*Server).Close", Method, 0},
-		{"(*Server).CloseClientConnections", Method, 0},
-		{"(*Server).Start", Method, 0},
-		{"(*Server).StartTLS", Method, 0},
-		{"DefaultRemoteAddr", Const, 0},
-		{"NewRecorder", Func, 0},
-		{"NewRequest", Func, 7},
-		{"NewRequestWithContext", Func, 23},
-		{"NewServer", Func, 0},
-		{"NewTLSServer", Func, 0},
-		{"NewUnstartedServer", Func, 0},
-		{"ResponseRecorder", Type, 0},
-		{"ResponseRecorder.Body", Field, 0},
-		{"ResponseRecorder.Code", Field, 0},
-		{"ResponseRecorder.Flushed", Field, 0},
-		{"ResponseRecorder.HeaderMap", Field, 0},
-		{"Server", Type, 0},
-		{"Server.Config", Field, 0},
-		{"Server.EnableHTTP2", Field, 14},
-		{"Server.Listener", Field, 0},
-		{"Server.TLS", Field, 0},
-		{"Server.URL", Field, 0},
+		{"(*ResponseRecorder).Flush", Method, 0, ""},
+		{"(*ResponseRecorder).Header", Method, 0, ""},
+		{"(*ResponseRecorder).Result", Method, 7, ""},
+		{"(*ResponseRecorder).Write", Method, 0, ""},
+		{"(*ResponseRecorder).WriteHeader", Method, 0, ""},
+		{"(*ResponseRecorder).WriteString", Method, 6, ""},
+		{"(*Server).Certificate", Method, 9, ""},
+		{"(*Server).Client", Method, 9, ""},
+		{"(*Server).Close", Method, 0, ""},
+		{"(*Server).CloseClientConnections", Method, 0, ""},
+		{"(*Server).Start", Method, 0, ""},
+		{"(*Server).StartTLS", Method, 0, ""},
+		{"DefaultRemoteAddr", Const, 0, ""},
+		{"NewRecorder", Func, 0, "func() *ResponseRecorder"},
+		{"NewRequest", Func, 7, "func(method string, target string, body io.Reader) *http.Request"},
+		{"NewRequestWithContext", Func, 23, "func(ctx context.Context, method string, target string, body io.Reader) *http.Request"},
+		{"NewServer", Func, 0, "func(handler http.Handler) *Server"},
+		{"NewTLSServer", Func, 0, "func(handler http.Handler) *Server"},
+		{"NewUnstartedServer", Func, 0, "func(handler http.Handler) *Server"},
+		{"ResponseRecorder", Type, 0, ""},
+		{"ResponseRecorder.Body", Field, 0, ""},
+		{"ResponseRecorder.Code", Field, 0, ""},
+		{"ResponseRecorder.Flushed", Field, 0, ""},
+		{"ResponseRecorder.HeaderMap", Field, 0, ""},
+		{"Server", Type, 0, ""},
+		{"Server.Config", Field, 0, ""},
+		{"Server.EnableHTTP2", Field, 14, ""},
+		{"Server.Listener", Field, 0, ""},
+		{"Server.TLS", Field, 0, ""},
+		{"Server.URL", Field, 0, ""},
 	},
 	"net/http/httptrace": {
-		{"ClientTrace", Type, 7},
-		{"ClientTrace.ConnectDone", Field, 7},
-		{"ClientTrace.ConnectStart", Field, 7},
-		{"ClientTrace.DNSDone", Field, 7},
-		{"ClientTrace.DNSStart", Field, 7},
-		{"ClientTrace.GetConn", Field, 7},
-		{"ClientTrace.Got100Continue", Field, 7},
-		{"ClientTrace.Got1xxResponse", Field, 11},
-		{"ClientTrace.GotConn", Field, 7},
-		{"ClientTrace.GotFirstResponseByte", Field, 7},
-		{"ClientTrace.PutIdleConn", Field, 7},
-		{"ClientTrace.TLSHandshakeDone", Field, 8},
-		{"ClientTrace.TLSHandshakeStart", Field, 8},
-		{"ClientTrace.Wait100Continue", Field, 7},
-		{"ClientTrace.WroteHeaderField", Field, 11},
-		{"ClientTrace.WroteHeaders", Field, 7},
-		{"ClientTrace.WroteRequest", Field, 7},
-		{"ContextClientTrace", Func, 7},
-		{"DNSDoneInfo", Type, 7},
-		{"DNSDoneInfo.Addrs", Field, 7},
-		{"DNSDoneInfo.Coalesced", Field, 7},
-		{"DNSDoneInfo.Err", Field, 7},
-		{"DNSStartInfo", Type, 7},
-		{"DNSStartInfo.Host", Field, 7},
-		{"GotConnInfo", Type, 7},
-		{"GotConnInfo.Conn", Field, 7},
-		{"GotConnInfo.IdleTime", Field, 7},
-		{"GotConnInfo.Reused", Field, 7},
-		{"GotConnInfo.WasIdle", Field, 7},
-		{"WithClientTrace", Func, 7},
-		{"WroteRequestInfo", Type, 7},
-		{"WroteRequestInfo.Err", Field, 7},
+		{"ClientTrace", Type, 7, ""},
+		{"ClientTrace.ConnectDone", Field, 7, ""},
+		{"ClientTrace.ConnectStart", Field, 7, ""},
+		{"ClientTrace.DNSDone", Field, 7, ""},
+		{"ClientTrace.DNSStart", Field, 7, ""},
+		{"ClientTrace.GetConn", Field, 7, ""},
+		{"ClientTrace.Got100Continue", Field, 7, ""},
+		{"ClientTrace.Got1xxResponse", Field, 11, ""},
+		{"ClientTrace.GotConn", Field, 7, ""},
+		{"ClientTrace.GotFirstResponseByte", Field, 7, ""},
+		{"ClientTrace.PutIdleConn", Field, 7, ""},
+		{"ClientTrace.TLSHandshakeDone", Field, 8, ""},
+		{"ClientTrace.TLSHandshakeStart", Field, 8, ""},
+		{"ClientTrace.Wait100Continue", Field, 7, ""},
+		{"ClientTrace.WroteHeaderField", Field, 11, ""},
+		{"ClientTrace.WroteHeaders", Field, 7, ""},
+		{"ClientTrace.WroteRequest", Field, 7, ""},
+		{"ContextClientTrace", Func, 7, "func(ctx context.Context) *ClientTrace"},
+		{"DNSDoneInfo", Type, 7, ""},
+		{"DNSDoneInfo.Addrs", Field, 7, ""},
+		{"DNSDoneInfo.Coalesced", Field, 7, ""},
+		{"DNSDoneInfo.Err", Field, 7, ""},
+		{"DNSStartInfo", Type, 7, ""},
+		{"DNSStartInfo.Host", Field, 7, ""},
+		{"GotConnInfo", Type, 7, ""},
+		{"GotConnInfo.Conn", Field, 7, ""},
+		{"GotConnInfo.IdleTime", Field, 7, ""},
+		{"GotConnInfo.Reused", Field, 7, ""},
+		{"GotConnInfo.WasIdle", Field, 7, ""},
+		{"WithClientTrace", Func, 7, "func(ctx context.Context, trace *ClientTrace) context.Context"},
+		{"WroteRequestInfo", Type, 7, ""},
+		{"WroteRequestInfo.Err", Field, 7, ""},
 	},
 	"net/http/httputil": {
-		{"(*ClientConn).Close", Method, 0},
-		{"(*ClientConn).Do", Method, 0},
-		{"(*ClientConn).Hijack", Method, 0},
-		{"(*ClientConn).Pending", Method, 0},
-		{"(*ClientConn).Read", Method, 0},
-		{"(*ClientConn).Write", Method, 0},
-		{"(*ProxyRequest).SetURL", Method, 20},
-		{"(*ProxyRequest).SetXForwarded", Method, 20},
-		{"(*ReverseProxy).ServeHTTP", Method, 0},
-		{"(*ServerConn).Close", Method, 0},
-		{"(*ServerConn).Hijack", Method, 0},
-		{"(*ServerConn).Pending", Method, 0},
-		{"(*ServerConn).Read", Method, 0},
-		{"(*ServerConn).Write", Method, 0},
-		{"BufferPool", Type, 6},
-		{"ClientConn", Type, 0},
-		{"DumpRequest", Func, 0},
-		{"DumpRequestOut", Func, 0},
-		{"DumpResponse", Func, 0},
-		{"ErrClosed", Var, 0},
-		{"ErrLineTooLong", Var, 0},
-		{"ErrPersistEOF", Var, 0},
-		{"ErrPipeline", Var, 0},
-		{"NewChunkedReader", Func, 0},
-		{"NewChunkedWriter", Func, 0},
-		{"NewClientConn", Func, 0},
-		{"NewProxyClientConn", Func, 0},
-		{"NewServerConn", Func, 0},
-		{"NewSingleHostReverseProxy", Func, 0},
-		{"ProxyRequest", Type, 20},
-		{"ProxyRequest.In", Field, 20},
-		{"ProxyRequest.Out", Field, 20},
-		{"ReverseProxy", Type, 0},
-		{"ReverseProxy.BufferPool", Field, 6},
-		{"ReverseProxy.Director", Field, 0},
-		{"ReverseProxy.ErrorHandler", Field, 11},
-		{"ReverseProxy.ErrorLog", Field, 4},
-		{"ReverseProxy.FlushInterval", Field, 0},
-		{"ReverseProxy.ModifyResponse", Field, 8},
-		{"ReverseProxy.Rewrite", Field, 20},
-		{"ReverseProxy.Transport", Field, 0},
-		{"ServerConn", Type, 0},
+		{"(*ClientConn).Close", Method, 0, ""},
+		{"(*ClientConn).Do", Method, 0, ""},
+		{"(*ClientConn).Hijack", Method, 0, ""},
+		{"(*ClientConn).Pending", Method, 0, ""},
+		{"(*ClientConn).Read", Method, 0, ""},
+		{"(*ClientConn).Write", Method, 0, ""},
+		{"(*ProxyRequest).SetURL", Method, 20, ""},
+		{"(*ProxyRequest).SetXForwarded", Method, 20, ""},
+		{"(*ReverseProxy).ServeHTTP", Method, 0, ""},
+		{"(*ServerConn).Close", Method, 0, ""},
+		{"(*ServerConn).Hijack", Method, 0, ""},
+		{"(*ServerConn).Pending", Method, 0, ""},
+		{"(*ServerConn).Read", Method, 0, ""},
+		{"(*ServerConn).Write", Method, 0, ""},
+		{"BufferPool", Type, 6, ""},
+		{"ClientConn", Type, 0, ""},
+		{"DumpRequest", Func, 0, "func(req *http.Request, body bool) ([]byte, error)"},
+		{"DumpRequestOut", Func, 0, "func(req *http.Request, body bool) ([]byte, error)"},
+		{"DumpResponse", Func, 0, "func(resp *http.Response, body bool) ([]byte, error)"},
+		{"ErrClosed", Var, 0, ""},
+		{"ErrLineTooLong", Var, 0, ""},
+		{"ErrPersistEOF", Var, 0, ""},
+		{"ErrPipeline", Var, 0, ""},
+		{"NewChunkedReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"NewChunkedWriter", Func, 0, "func(w io.Writer) io.WriteCloser"},
+		{"NewClientConn", Func, 0, "func(c net.Conn, r *bufio.Reader) *ClientConn"},
+		{"NewProxyClientConn", Func, 0, "func(c net.Conn, r *bufio.Reader) *ClientConn"},
+		{"NewServerConn", Func, 0, "func(c net.Conn, r *bufio.Reader) *ServerConn"},
+		{"NewSingleHostReverseProxy", Func, 0, "func(target *url.URL) *ReverseProxy"},
+		{"ProxyRequest", Type, 20, ""},
+		{"ProxyRequest.In", Field, 20, ""},
+		{"ProxyRequest.Out", Field, 20, ""},
+		{"ReverseProxy", Type, 0, ""},
+		{"ReverseProxy.BufferPool", Field, 6, ""},
+		{"ReverseProxy.Director", Field, 0, ""},
+		{"ReverseProxy.ErrorHandler", Field, 11, ""},
+		{"ReverseProxy.ErrorLog", Field, 4, ""},
+		{"ReverseProxy.FlushInterval", Field, 0, ""},
+		{"ReverseProxy.ModifyResponse", Field, 8, ""},
+		{"ReverseProxy.Rewrite", Field, 20, ""},
+		{"ReverseProxy.Transport", Field, 0, ""},
+		{"ServerConn", Type, 0, ""},
 	},
 	"net/http/pprof": {
-		{"Cmdline", Func, 0},
-		{"Handler", Func, 0},
-		{"Index", Func, 0},
-		{"Profile", Func, 0},
-		{"Symbol", Func, 0},
-		{"Trace", Func, 5},
+		{"Cmdline", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
+		{"Handler", Func, 0, "func(name string) http.Handler"},
+		{"Index", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
+		{"Profile", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
+		{"Symbol", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
+		{"Trace", Func, 5, "func(w http.ResponseWriter, r *http.Request)"},
 	},
 	"net/mail": {
-		{"(*Address).String", Method, 0},
-		{"(*AddressParser).Parse", Method, 5},
-		{"(*AddressParser).ParseList", Method, 5},
-		{"(Header).AddressList", Method, 0},
-		{"(Header).Date", Method, 0},
-		{"(Header).Get", Method, 0},
-		{"Address", Type, 0},
-		{"Address.Address", Field, 0},
-		{"Address.Name", Field, 0},
-		{"AddressParser", Type, 5},
-		{"AddressParser.WordDecoder", Field, 5},
-		{"ErrHeaderNotPresent", Var, 0},
-		{"Header", Type, 0},
-		{"Message", Type, 0},
-		{"Message.Body", Field, 0},
-		{"Message.Header", Field, 0},
-		{"ParseAddress", Func, 1},
-		{"ParseAddressList", Func, 1},
-		{"ParseDate", Func, 8},
-		{"ReadMessage", Func, 0},
+		{"(*Address).String", Method, 0, ""},
+		{"(*AddressParser).Parse", Method, 5, ""},
+		{"(*AddressParser).ParseList", Method, 5, ""},
+		{"(Header).AddressList", Method, 0, ""},
+		{"(Header).Date", Method, 0, ""},
+		{"(Header).Get", Method, 0, ""},
+		{"Address", Type, 0, ""},
+		{"Address.Address", Field, 0, ""},
+		{"Address.Name", Field, 0, ""},
+		{"AddressParser", Type, 5, ""},
+		{"AddressParser.WordDecoder", Field, 5, ""},
+		{"ErrHeaderNotPresent", Var, 0, ""},
+		{"Header", Type, 0, ""},
+		{"Message", Type, 0, ""},
+		{"Message.Body", Field, 0, ""},
+		{"Message.Header", Field, 0, ""},
+		{"ParseAddress", Func, 1, "func(address string) (*Address, error)"},
+		{"ParseAddressList", Func, 1, "func(list string) ([]*Address, error)"},
+		{"ParseDate", Func, 8, "func(date string) (time.Time, error)"},
+		{"ReadMessage", Func, 0, "func(r io.Reader) (msg *Message, err error)"},
 	},
 	"net/netip": {
-		{"(*Addr).UnmarshalBinary", Method, 18},
-		{"(*Addr).UnmarshalText", Method, 18},
-		{"(*AddrPort).UnmarshalBinary", Method, 18},
-		{"(*AddrPort).UnmarshalText", Method, 18},
-		{"(*Prefix).UnmarshalBinary", Method, 18},
-		{"(*Prefix).UnmarshalText", Method, 18},
-		{"(Addr).AppendBinary", Method, 24},
-		{"(Addr).AppendText", Method, 24},
-		{"(Addr).AppendTo", Method, 18},
-		{"(Addr).As16", Method, 18},
-		{"(Addr).As4", Method, 18},
-		{"(Addr).AsSlice", Method, 18},
-		{"(Addr).BitLen", Method, 18},
-		{"(Addr).Compare", Method, 18},
-		{"(Addr).Is4", Method, 18},
-		{"(Addr).Is4In6", Method, 18},
-		{"(Addr).Is6", Method, 18},
-		{"(Addr).IsGlobalUnicast", Method, 18},
-		{"(Addr).IsInterfaceLocalMulticast", Method, 18},
-		{"(Addr).IsLinkLocalMulticast", Method, 18},
-		{"(Addr).IsLinkLocalUnicast", Method, 18},
-		{"(Addr).IsLoopback", Method, 18},
-		{"(Addr).IsMulticast", Method, 18},
-		{"(Addr).IsPrivate", Method, 18},
-		{"(Addr).IsUnspecified", Method, 18},
-		{"(Addr).IsValid", Method, 18},
-		{"(Addr).Less", Method, 18},
-		{"(Addr).MarshalBinary", Method, 18},
-		{"(Addr).MarshalText", Method, 18},
-		{"(Addr).Next", Method, 18},
-		{"(Addr).Prefix", Method, 18},
-		{"(Addr).Prev", Method, 18},
-		{"(Addr).String", Method, 18},
-		{"(Addr).StringExpanded", Method, 18},
-		{"(Addr).Unmap", Method, 18},
-		{"(Addr).WithZone", Method, 18},
-		{"(Addr).Zone", Method, 18},
-		{"(AddrPort).Addr", Method, 18},
-		{"(AddrPort).AppendBinary", Method, 24},
-		{"(AddrPort).AppendText", Method, 24},
-		{"(AddrPort).AppendTo", Method, 18},
-		{"(AddrPort).Compare", Method, 22},
-		{"(AddrPort).IsValid", Method, 18},
-		{"(AddrPort).MarshalBinary", Method, 18},
-		{"(AddrPort).MarshalText", Method, 18},
-		{"(AddrPort).Port", Method, 18},
-		{"(AddrPort).String", Method, 18},
-		{"(Prefix).Addr", Method, 18},
-		{"(Prefix).AppendBinary", Method, 24},
-		{"(Prefix).AppendText", Method, 24},
-		{"(Prefix).AppendTo", Method, 18},
-		{"(Prefix).Bits", Method, 18},
-		{"(Prefix).Contains", Method, 18},
-		{"(Prefix).IsSingleIP", Method, 18},
-		{"(Prefix).IsValid", Method, 18},
-		{"(Prefix).MarshalBinary", Method, 18},
-		{"(Prefix).MarshalText", Method, 18},
-		{"(Prefix).Masked", Method, 18},
-		{"(Prefix).Overlaps", Method, 18},
-		{"(Prefix).String", Method, 18},
-		{"Addr", Type, 18},
-		{"AddrFrom16", Func, 18},
-		{"AddrFrom4", Func, 18},
-		{"AddrFromSlice", Func, 18},
-		{"AddrPort", Type, 18},
-		{"AddrPortFrom", Func, 18},
-		{"IPv4Unspecified", Func, 18},
-		{"IPv6LinkLocalAllNodes", Func, 18},
-		{"IPv6LinkLocalAllRouters", Func, 20},
-		{"IPv6Loopback", Func, 20},
-		{"IPv6Unspecified", Func, 18},
-		{"MustParseAddr", Func, 18},
-		{"MustParseAddrPort", Func, 18},
-		{"MustParsePrefix", Func, 18},
-		{"ParseAddr", Func, 18},
-		{"ParseAddrPort", Func, 18},
-		{"ParsePrefix", Func, 18},
-		{"Prefix", Type, 18},
-		{"PrefixFrom", Func, 18},
+		{"(*Addr).UnmarshalBinary", Method, 18, ""},
+		{"(*Addr).UnmarshalText", Method, 18, ""},
+		{"(*AddrPort).UnmarshalBinary", Method, 18, ""},
+		{"(*AddrPort).UnmarshalText", Method, 18, ""},
+		{"(*Prefix).UnmarshalBinary", Method, 18, ""},
+		{"(*Prefix).UnmarshalText", Method, 18, ""},
+		{"(Addr).AppendBinary", Method, 24, ""},
+		{"(Addr).AppendText", Method, 24, ""},
+		{"(Addr).AppendTo", Method, 18, ""},
+		{"(Addr).As16", Method, 18, ""},
+		{"(Addr).As4", Method, 18, ""},
+		{"(Addr).AsSlice", Method, 18, ""},
+		{"(Addr).BitLen", Method, 18, ""},
+		{"(Addr).Compare", Method, 18, ""},
+		{"(Addr).Is4", Method, 18, ""},
+		{"(Addr).Is4In6", Method, 18, ""},
+		{"(Addr).Is6", Method, 18, ""},
+		{"(Addr).IsGlobalUnicast", Method, 18, ""},
+		{"(Addr).IsInterfaceLocalMulticast", Method, 18, ""},
+		{"(Addr).IsLinkLocalMulticast", Method, 18, ""},
+		{"(Addr).IsLinkLocalUnicast", Method, 18, ""},
+		{"(Addr).IsLoopback", Method, 18, ""},
+		{"(Addr).IsMulticast", Method, 18, ""},
+		{"(Addr).IsPrivate", Method, 18, ""},
+		{"(Addr).IsUnspecified", Method, 18, ""},
+		{"(Addr).IsValid", Method, 18, ""},
+		{"(Addr).Less", Method, 18, ""},
+		{"(Addr).MarshalBinary", Method, 18, ""},
+		{"(Addr).MarshalText", Method, 18, ""},
+		{"(Addr).Next", Method, 18, ""},
+		{"(Addr).Prefix", Method, 18, ""},
+		{"(Addr).Prev", Method, 18, ""},
+		{"(Addr).String", Method, 18, ""},
+		{"(Addr).StringExpanded", Method, 18, ""},
+		{"(Addr).Unmap", Method, 18, ""},
+		{"(Addr).WithZone", Method, 18, ""},
+		{"(Addr).Zone", Method, 18, ""},
+		{"(AddrPort).Addr", Method, 18, ""},
+		{"(AddrPort).AppendBinary", Method, 24, ""},
+		{"(AddrPort).AppendText", Method, 24, ""},
+		{"(AddrPort).AppendTo", Method, 18, ""},
+		{"(AddrPort).Compare", Method, 22, ""},
+		{"(AddrPort).IsValid", Method, 18, ""},
+		{"(AddrPort).MarshalBinary", Method, 18, ""},
+		{"(AddrPort).MarshalText", Method, 18, ""},
+		{"(AddrPort).Port", Method, 18, ""},
+		{"(AddrPort).String", Method, 18, ""},
+		{"(Prefix).Addr", Method, 18, ""},
+		{"(Prefix).AppendBinary", Method, 24, ""},
+		{"(Prefix).AppendText", Method, 24, ""},
+		{"(Prefix).AppendTo", Method, 18, ""},
+		{"(Prefix).Bits", Method, 18, ""},
+		{"(Prefix).Contains", Method, 18, ""},
+		{"(Prefix).IsSingleIP", Method, 18, ""},
+		{"(Prefix).IsValid", Method, 18, ""},
+		{"(Prefix).MarshalBinary", Method, 18, ""},
+		{"(Prefix).MarshalText", Method, 18, ""},
+		{"(Prefix).Masked", Method, 18, ""},
+		{"(Prefix).Overlaps", Method, 18, ""},
+		{"(Prefix).String", Method, 18, ""},
+		{"Addr", Type, 18, ""},
+		{"AddrFrom16", Func, 18, "func(addr [16]byte) Addr"},
+		{"AddrFrom4", Func, 18, "func(addr [4]byte) Addr"},
+		{"AddrFromSlice", Func, 18, "func(slice []byte) (ip Addr, ok bool)"},
+		{"AddrPort", Type, 18, ""},
+		{"AddrPortFrom", Func, 18, "func(ip Addr, port uint16) AddrPort"},
+		{"IPv4Unspecified", Func, 18, "func() Addr"},
+		{"IPv6LinkLocalAllNodes", Func, 18, "func() Addr"},
+		{"IPv6LinkLocalAllRouters", Func, 20, "func() Addr"},
+		{"IPv6Loopback", Func, 20, "func() Addr"},
+		{"IPv6Unspecified", Func, 18, "func() Addr"},
+		{"MustParseAddr", Func, 18, "func(s string) Addr"},
+		{"MustParseAddrPort", Func, 18, "func(s string) AddrPort"},
+		{"MustParsePrefix", Func, 18, "func(s string) Prefix"},
+		{"ParseAddr", Func, 18, "func(s string) (Addr, error)"},
+		{"ParseAddrPort", Func, 18, "func(s string) (AddrPort, error)"},
+		{"ParsePrefix", Func, 18, "func(s string) (Prefix, error)"},
+		{"Prefix", Type, 18, ""},
+		{"PrefixFrom", Func, 18, "func(ip Addr, bits int) Prefix"},
 	},
 	"net/rpc": {
-		{"(*Client).Call", Method, 0},
-		{"(*Client).Close", Method, 0},
-		{"(*Client).Go", Method, 0},
-		{"(*Server).Accept", Method, 0},
-		{"(*Server).HandleHTTP", Method, 0},
-		{"(*Server).Register", Method, 0},
-		{"(*Server).RegisterName", Method, 0},
-		{"(*Server).ServeCodec", Method, 0},
-		{"(*Server).ServeConn", Method, 0},
-		{"(*Server).ServeHTTP", Method, 0},
-		{"(*Server).ServeRequest", Method, 0},
-		{"(ServerError).Error", Method, 0},
-		{"Accept", Func, 0},
-		{"Call", Type, 0},
-		{"Call.Args", Field, 0},
-		{"Call.Done", Field, 0},
-		{"Call.Error", Field, 0},
-		{"Call.Reply", Field, 0},
-		{"Call.ServiceMethod", Field, 0},
-		{"Client", Type, 0},
-		{"ClientCodec", Type, 0},
-		{"DefaultDebugPath", Const, 0},
-		{"DefaultRPCPath", Const, 0},
-		{"DefaultServer", Var, 0},
-		{"Dial", Func, 0},
-		{"DialHTTP", Func, 0},
-		{"DialHTTPPath", Func, 0},
-		{"ErrShutdown", Var, 0},
-		{"HandleHTTP", Func, 0},
-		{"NewClient", Func, 0},
-		{"NewClientWithCodec", Func, 0},
-		{"NewServer", Func, 0},
-		{"Register", Func, 0},
-		{"RegisterName", Func, 0},
-		{"Request", Type, 0},
-		{"Request.Seq", Field, 0},
-		{"Request.ServiceMethod", Field, 0},
-		{"Response", Type, 0},
-		{"Response.Error", Field, 0},
-		{"Response.Seq", Field, 0},
-		{"Response.ServiceMethod", Field, 0},
-		{"ServeCodec", Func, 0},
-		{"ServeConn", Func, 0},
-		{"ServeRequest", Func, 0},
-		{"Server", Type, 0},
-		{"ServerCodec", Type, 0},
-		{"ServerError", Type, 0},
+		{"(*Client).Call", Method, 0, ""},
+		{"(*Client).Close", Method, 0, ""},
+		{"(*Client).Go", Method, 0, ""},
+		{"(*Server).Accept", Method, 0, ""},
+		{"(*Server).HandleHTTP", Method, 0, ""},
+		{"(*Server).Register", Method, 0, ""},
+		{"(*Server).RegisterName", Method, 0, ""},
+		{"(*Server).ServeCodec", Method, 0, ""},
+		{"(*Server).ServeConn", Method, 0, ""},
+		{"(*Server).ServeHTTP", Method, 0, ""},
+		{"(*Server).ServeRequest", Method, 0, ""},
+		{"(ServerError).Error", Method, 0, ""},
+		{"Accept", Func, 0, "func(lis net.Listener)"},
+		{"Call", Type, 0, ""},
+		{"Call.Args", Field, 0, ""},
+		{"Call.Done", Field, 0, ""},
+		{"Call.Error", Field, 0, ""},
+		{"Call.Reply", Field, 0, ""},
+		{"Call.ServiceMethod", Field, 0, ""},
+		{"Client", Type, 0, ""},
+		{"ClientCodec", Type, 0, ""},
+		{"DefaultDebugPath", Const, 0, ""},
+		{"DefaultRPCPath", Const, 0, ""},
+		{"DefaultServer", Var, 0, ""},
+		{"Dial", Func, 0, "func(network string, address string) (*Client, error)"},
+		{"DialHTTP", Func, 0, "func(network string, address string) (*Client, error)"},
+		{"DialHTTPPath", Func, 0, "func(network string, address string, path string) (*Client, error)"},
+		{"ErrShutdown", Var, 0, ""},
+		{"HandleHTTP", Func, 0, "func()"},
+		{"NewClient", Func, 0, "func(conn io.ReadWriteCloser) *Client"},
+		{"NewClientWithCodec", Func, 0, "func(codec ClientCodec) *Client"},
+		{"NewServer", Func, 0, "func() *Server"},
+		{"Register", Func, 0, "func(rcvr any) error"},
+		{"RegisterName", Func, 0, "func(name string, rcvr any) error"},
+		{"Request", Type, 0, ""},
+		{"Request.Seq", Field, 0, ""},
+		{"Request.ServiceMethod", Field, 0, ""},
+		{"Response", Type, 0, ""},
+		{"Response.Error", Field, 0, ""},
+		{"Response.Seq", Field, 0, ""},
+		{"Response.ServiceMethod", Field, 0, ""},
+		{"ServeCodec", Func, 0, "func(codec ServerCodec)"},
+		{"ServeConn", Func, 0, "func(conn io.ReadWriteCloser)"},
+		{"ServeRequest", Func, 0, "func(codec ServerCodec) error"},
+		{"Server", Type, 0, ""},
+		{"ServerCodec", Type, 0, ""},
+		{"ServerError", Type, 0, ""},
 	},
 	"net/rpc/jsonrpc": {
-		{"Dial", Func, 0},
-		{"NewClient", Func, 0},
-		{"NewClientCodec", Func, 0},
-		{"NewServerCodec", Func, 0},
-		{"ServeConn", Func, 0},
+		{"Dial", Func, 0, "func(network string, address string) (*rpc.Client, error)"},
+		{"NewClient", Func, 0, "func(conn io.ReadWriteCloser) *rpc.Client"},
+		{"NewClientCodec", Func, 0, "func(conn io.ReadWriteCloser) rpc.ClientCodec"},
+		{"NewServerCodec", Func, 0, "func(conn io.ReadWriteCloser) rpc.ServerCodec"},
+		{"ServeConn", Func, 0, "func(conn io.ReadWriteCloser)"},
 	},
 	"net/smtp": {
-		{"(*Client).Auth", Method, 0},
-		{"(*Client).Close", Method, 2},
-		{"(*Client).Data", Method, 0},
-		{"(*Client).Extension", Method, 0},
-		{"(*Client).Hello", Method, 1},
-		{"(*Client).Mail", Method, 0},
-		{"(*Client).Noop", Method, 10},
-		{"(*Client).Quit", Method, 0},
-		{"(*Client).Rcpt", Method, 0},
-		{"(*Client).Reset", Method, 0},
-		{"(*Client).StartTLS", Method, 0},
-		{"(*Client).TLSConnectionState", Method, 5},
-		{"(*Client).Verify", Method, 0},
-		{"Auth", Type, 0},
-		{"CRAMMD5Auth", Func, 0},
-		{"Client", Type, 0},
-		{"Client.Text", Field, 0},
-		{"Dial", Func, 0},
-		{"NewClient", Func, 0},
-		{"PlainAuth", Func, 0},
-		{"SendMail", Func, 0},
-		{"ServerInfo", Type, 0},
-		{"ServerInfo.Auth", Field, 0},
-		{"ServerInfo.Name", Field, 0},
-		{"ServerInfo.TLS", Field, 0},
+		{"(*Client).Auth", Method, 0, ""},
+		{"(*Client).Close", Method, 2, ""},
+		{"(*Client).Data", Method, 0, ""},
+		{"(*Client).Extension", Method, 0, ""},
+		{"(*Client).Hello", Method, 1, ""},
+		{"(*Client).Mail", Method, 0, ""},
+		{"(*Client).Noop", Method, 10, ""},
+		{"(*Client).Quit", Method, 0, ""},
+		{"(*Client).Rcpt", Method, 0, ""},
+		{"(*Client).Reset", Method, 0, ""},
+		{"(*Client).StartTLS", Method, 0, ""},
+		{"(*Client).TLSConnectionState", Method, 5, ""},
+		{"(*Client).Verify", Method, 0, ""},
+		{"Auth", Type, 0, ""},
+		{"CRAMMD5Auth", Func, 0, "func(username string, secret string) Auth"},
+		{"Client", Type, 0, ""},
+		{"Client.Text", Field, 0, ""},
+		{"Dial", Func, 0, "func(addr string) (*Client, error)"},
+		{"NewClient", Func, 0, "func(conn net.Conn, host string) (*Client, error)"},
+		{"PlainAuth", Func, 0, "func(identity string, username string, password string, host string) Auth"},
+		{"SendMail", Func, 0, "func(addr string, a Auth, from string, to []string, msg []byte) error"},
+		{"ServerInfo", Type, 0, ""},
+		{"ServerInfo.Auth", Field, 0, ""},
+		{"ServerInfo.Name", Field, 0, ""},
+		{"ServerInfo.TLS", Field, 0, ""},
 	},
 	"net/textproto": {
-		{"(*Conn).Close", Method, 0},
-		{"(*Conn).Cmd", Method, 0},
-		{"(*Conn).DotReader", Method, 0},
-		{"(*Conn).DotWriter", Method, 0},
-		{"(*Conn).EndRequest", Method, 0},
-		{"(*Conn).EndResponse", Method, 0},
-		{"(*Conn).Next", Method, 0},
-		{"(*Conn).PrintfLine", Method, 0},
-		{"(*Conn).ReadCodeLine", Method, 0},
-		{"(*Conn).ReadContinuedLine", Method, 0},
-		{"(*Conn).ReadContinuedLineBytes", Method, 0},
-		{"(*Conn).ReadDotBytes", Method, 0},
-		{"(*Conn).ReadDotLines", Method, 0},
-		{"(*Conn).ReadLine", Method, 0},
-		{"(*Conn).ReadLineBytes", Method, 0},
-		{"(*Conn).ReadMIMEHeader", Method, 0},
-		{"(*Conn).ReadResponse", Method, 0},
-		{"(*Conn).StartRequest", Method, 0},
-		{"(*Conn).StartResponse", Method, 0},
-		{"(*Error).Error", Method, 0},
-		{"(*Pipeline).EndRequest", Method, 0},
-		{"(*Pipeline).EndResponse", Method, 0},
-		{"(*Pipeline).Next", Method, 0},
-		{"(*Pipeline).StartRequest", Method, 0},
-		{"(*Pipeline).StartResponse", Method, 0},
-		{"(*Reader).DotReader", Method, 0},
-		{"(*Reader).ReadCodeLine", Method, 0},
-		{"(*Reader).ReadContinuedLine", Method, 0},
-		{"(*Reader).ReadContinuedLineBytes", Method, 0},
-		{"(*Reader).ReadDotBytes", Method, 0},
-		{"(*Reader).ReadDotLines", Method, 0},
-		{"(*Reader).ReadLine", Method, 0},
-		{"(*Reader).ReadLineBytes", Method, 0},
-		{"(*Reader).ReadMIMEHeader", Method, 0},
-		{"(*Reader).ReadResponse", Method, 0},
-		{"(*Writer).DotWriter", Method, 0},
-		{"(*Writer).PrintfLine", Method, 0},
-		{"(MIMEHeader).Add", Method, 0},
-		{"(MIMEHeader).Del", Method, 0},
-		{"(MIMEHeader).Get", Method, 0},
-		{"(MIMEHeader).Set", Method, 0},
-		{"(MIMEHeader).Values", Method, 14},
-		{"(ProtocolError).Error", Method, 0},
-		{"CanonicalMIMEHeaderKey", Func, 0},
-		{"Conn", Type, 0},
-		{"Conn.Pipeline", Field, 0},
-		{"Conn.Reader", Field, 0},
-		{"Conn.Writer", Field, 0},
-		{"Dial", Func, 0},
-		{"Error", Type, 0},
-		{"Error.Code", Field, 0},
-		{"Error.Msg", Field, 0},
-		{"MIMEHeader", Type, 0},
-		{"NewConn", Func, 0},
-		{"NewReader", Func, 0},
-		{"NewWriter", Func, 0},
-		{"Pipeline", Type, 0},
-		{"ProtocolError", Type, 0},
-		{"Reader", Type, 0},
-		{"Reader.R", Field, 0},
-		{"TrimBytes", Func, 1},
-		{"TrimString", Func, 1},
-		{"Writer", Type, 0},
-		{"Writer.W", Field, 0},
+		{"(*Conn).Close", Method, 0, ""},
+		{"(*Conn).Cmd", Method, 0, ""},
+		{"(*Conn).DotReader", Method, 0, ""},
+		{"(*Conn).DotWriter", Method, 0, ""},
+		{"(*Conn).EndRequest", Method, 0, ""},
+		{"(*Conn).EndResponse", Method, 0, ""},
+		{"(*Conn).Next", Method, 0, ""},
+		{"(*Conn).PrintfLine", Method, 0, ""},
+		{"(*Conn).ReadCodeLine", Method, 0, ""},
+		{"(*Conn).ReadContinuedLine", Method, 0, ""},
+		{"(*Conn).ReadContinuedLineBytes", Method, 0, ""},
+		{"(*Conn).ReadDotBytes", Method, 0, ""},
+		{"(*Conn).ReadDotLines", Method, 0, ""},
+		{"(*Conn).ReadLine", Method, 0, ""},
+		{"(*Conn).ReadLineBytes", Method, 0, ""},
+		{"(*Conn).ReadMIMEHeader", Method, 0, ""},
+		{"(*Conn).ReadResponse", Method, 0, ""},
+		{"(*Conn).StartRequest", Method, 0, ""},
+		{"(*Conn).StartResponse", Method, 0, ""},
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Pipeline).EndRequest", Method, 0, ""},
+		{"(*Pipeline).EndResponse", Method, 0, ""},
+		{"(*Pipeline).Next", Method, 0, ""},
+		{"(*Pipeline).StartRequest", Method, 0, ""},
+		{"(*Pipeline).StartResponse", Method, 0, ""},
+		{"(*Reader).DotReader", Method, 0, ""},
+		{"(*Reader).ReadCodeLine", Method, 0, ""},
+		{"(*Reader).ReadContinuedLine", Method, 0, ""},
+		{"(*Reader).ReadContinuedLineBytes", Method, 0, ""},
+		{"(*Reader).ReadDotBytes", Method, 0, ""},
+		{"(*Reader).ReadDotLines", Method, 0, ""},
+		{"(*Reader).ReadLine", Method, 0, ""},
+		{"(*Reader).ReadLineBytes", Method, 0, ""},
+		{"(*Reader).ReadMIMEHeader", Method, 0, ""},
+		{"(*Reader).ReadResponse", Method, 0, ""},
+		{"(*Writer).DotWriter", Method, 0, ""},
+		{"(*Writer).PrintfLine", Method, 0, ""},
+		{"(MIMEHeader).Add", Method, 0, ""},
+		{"(MIMEHeader).Del", Method, 0, ""},
+		{"(MIMEHeader).Get", Method, 0, ""},
+		{"(MIMEHeader).Set", Method, 0, ""},
+		{"(MIMEHeader).Values", Method, 14, ""},
+		{"(ProtocolError).Error", Method, 0, ""},
+		{"CanonicalMIMEHeaderKey", Func, 0, "func(s string) string"},
+		{"Conn", Type, 0, ""},
+		{"Conn.Pipeline", Field, 0, ""},
+		{"Conn.Reader", Field, 0, ""},
+		{"Conn.Writer", Field, 0, ""},
+		{"Dial", Func, 0, "func(network string, addr string) (*Conn, error)"},
+		{"Error", Type, 0, ""},
+		{"Error.Code", Field, 0, ""},
+		{"Error.Msg", Field, 0, ""},
+		{"MIMEHeader", Type, 0, ""},
+		{"NewConn", Func, 0, "func(conn io.ReadWriteCloser) *Conn"},
+		{"NewReader", Func, 0, "func(r *bufio.Reader) *Reader"},
+		{"NewWriter", Func, 0, "func(w *bufio.Writer) *Writer"},
+		{"Pipeline", Type, 0, ""},
+		{"ProtocolError", Type, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Reader.R", Field, 0, ""},
+		{"TrimBytes", Func, 1, "func(b []byte) []byte"},
+		{"TrimString", Func, 1, "func(s string) string"},
+		{"Writer", Type, 0, ""},
+		{"Writer.W", Field, 0, ""},
 	},
 	"net/url": {
-		{"(*Error).Error", Method, 0},
-		{"(*Error).Temporary", Method, 6},
-		{"(*Error).Timeout", Method, 6},
-		{"(*Error).Unwrap", Method, 13},
-		{"(*URL).AppendBinary", Method, 24},
-		{"(*URL).EscapedFragment", Method, 15},
-		{"(*URL).EscapedPath", Method, 5},
-		{"(*URL).Hostname", Method, 8},
-		{"(*URL).IsAbs", Method, 0},
-		{"(*URL).JoinPath", Method, 19},
-		{"(*URL).MarshalBinary", Method, 8},
-		{"(*URL).Parse", Method, 0},
-		{"(*URL).Port", Method, 8},
-		{"(*URL).Query", Method, 0},
-		{"(*URL).Redacted", Method, 15},
-		{"(*URL).RequestURI", Method, 0},
-		{"(*URL).ResolveReference", Method, 0},
-		{"(*URL).String", Method, 0},
-		{"(*URL).UnmarshalBinary", Method, 8},
-		{"(*Userinfo).Password", Method, 0},
-		{"(*Userinfo).String", Method, 0},
-		{"(*Userinfo).Username", Method, 0},
-		{"(EscapeError).Error", Method, 0},
-		{"(InvalidHostError).Error", Method, 6},
-		{"(Values).Add", Method, 0},
-		{"(Values).Del", Method, 0},
-		{"(Values).Encode", Method, 0},
-		{"(Values).Get", Method, 0},
-		{"(Values).Has", Method, 17},
-		{"(Values).Set", Method, 0},
-		{"Error", Type, 0},
-		{"Error.Err", Field, 0},
-		{"Error.Op", Field, 0},
-		{"Error.URL", Field, 0},
-		{"EscapeError", Type, 0},
-		{"InvalidHostError", Type, 6},
-		{"JoinPath", Func, 19},
-		{"Parse", Func, 0},
-		{"ParseQuery", Func, 0},
-		{"ParseRequestURI", Func, 0},
-		{"PathEscape", Func, 8},
-		{"PathUnescape", Func, 8},
-		{"QueryEscape", Func, 0},
-		{"QueryUnescape", Func, 0},
-		{"URL", Type, 0},
-		{"URL.ForceQuery", Field, 7},
-		{"URL.Fragment", Field, 0},
-		{"URL.Host", Field, 0},
-		{"URL.OmitHost", Field, 19},
-		{"URL.Opaque", Field, 0},
-		{"URL.Path", Field, 0},
-		{"URL.RawFragment", Field, 15},
-		{"URL.RawPath", Field, 5},
-		{"URL.RawQuery", Field, 0},
-		{"URL.Scheme", Field, 0},
-		{"URL.User", Field, 0},
-		{"User", Func, 0},
-		{"UserPassword", Func, 0},
-		{"Userinfo", Type, 0},
-		{"Values", Type, 0},
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Error).Temporary", Method, 6, ""},
+		{"(*Error).Timeout", Method, 6, ""},
+		{"(*Error).Unwrap", Method, 13, ""},
+		{"(*URL).AppendBinary", Method, 24, ""},
+		{"(*URL).EscapedFragment", Method, 15, ""},
+		{"(*URL).EscapedPath", Method, 5, ""},
+		{"(*URL).Hostname", Method, 8, ""},
+		{"(*URL).IsAbs", Method, 0, ""},
+		{"(*URL).JoinPath", Method, 19, ""},
+		{"(*URL).MarshalBinary", Method, 8, ""},
+		{"(*URL).Parse", Method, 0, ""},
+		{"(*URL).Port", Method, 8, ""},
+		{"(*URL).Query", Method, 0, ""},
+		{"(*URL).Redacted", Method, 15, ""},
+		{"(*URL).RequestURI", Method, 0, ""},
+		{"(*URL).ResolveReference", Method, 0, ""},
+		{"(*URL).String", Method, 0, ""},
+		{"(*URL).UnmarshalBinary", Method, 8, ""},
+		{"(*Userinfo).Password", Method, 0, ""},
+		{"(*Userinfo).String", Method, 0, ""},
+		{"(*Userinfo).Username", Method, 0, ""},
+		{"(EscapeError).Error", Method, 0, ""},
+		{"(InvalidHostError).Error", Method, 6, ""},
+		{"(Values).Add", Method, 0, ""},
+		{"(Values).Del", Method, 0, ""},
+		{"(Values).Encode", Method, 0, ""},
+		{"(Values).Get", Method, 0, ""},
+		{"(Values).Has", Method, 17, ""},
+		{"(Values).Set", Method, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Err", Field, 0, ""},
+		{"Error.Op", Field, 0, ""},
+		{"Error.URL", Field, 0, ""},
+		{"EscapeError", Type, 0, ""},
+		{"InvalidHostError", Type, 6, ""},
+		{"JoinPath", Func, 19, "func(base string, elem ...string) (result string, err error)"},
+		{"Parse", Func, 0, "func(rawURL string) (*URL, error)"},
+		{"ParseQuery", Func, 0, "func(query string) (Values, error)"},
+		{"ParseRequestURI", Func, 0, "func(rawURL string) (*URL, error)"},
+		{"PathEscape", Func, 8, "func(s string) string"},
+		{"PathUnescape", Func, 8, "func(s string) (string, error)"},
+		{"QueryEscape", Func, 0, "func(s string) string"},
+		{"QueryUnescape", Func, 0, "func(s string) (string, error)"},
+		{"URL", Type, 0, ""},
+		{"URL.ForceQuery", Field, 7, ""},
+		{"URL.Fragment", Field, 0, ""},
+		{"URL.Host", Field, 0, ""},
+		{"URL.OmitHost", Field, 19, ""},
+		{"URL.Opaque", Field, 0, ""},
+		{"URL.Path", Field, 0, ""},
+		{"URL.RawFragment", Field, 15, ""},
+		{"URL.RawPath", Field, 5, ""},
+		{"URL.RawQuery", Field, 0, ""},
+		{"URL.Scheme", Field, 0, ""},
+		{"URL.User", Field, 0, ""},
+		{"User", Func, 0, "func(username string) *Userinfo"},
+		{"UserPassword", Func, 0, "func(username string, password string) *Userinfo"},
+		{"Userinfo", Type, 0, ""},
+		{"Values", Type, 0, ""},
 	},
 	"os": {
-		{"(*File).Chdir", Method, 0},
-		{"(*File).Chmod", Method, 0},
-		{"(*File).Chown", Method, 0},
-		{"(*File).Close", Method, 0},
-		{"(*File).Fd", Method, 0},
-		{"(*File).Name", Method, 0},
-		{"(*File).Read", Method, 0},
-		{"(*File).ReadAt", Method, 0},
-		{"(*File).ReadDir", Method, 16},
-		{"(*File).ReadFrom", Method, 15},
-		{"(*File).Readdir", Method, 0},
-		{"(*File).Readdirnames", Method, 0},
-		{"(*File).Seek", Method, 0},
-		{"(*File).SetDeadline", Method, 10},
-		{"(*File).SetReadDeadline", Method, 10},
-		{"(*File).SetWriteDeadline", Method, 10},
-		{"(*File).Stat", Method, 0},
-		{"(*File).Sync", Method, 0},
-		{"(*File).SyscallConn", Method, 12},
-		{"(*File).Truncate", Method, 0},
-		{"(*File).Write", Method, 0},
-		{"(*File).WriteAt", Method, 0},
-		{"(*File).WriteString", Method, 0},
-		{"(*File).WriteTo", Method, 22},
-		{"(*LinkError).Error", Method, 0},
-		{"(*LinkError).Unwrap", Method, 13},
-		{"(*PathError).Error", Method, 0},
-		{"(*PathError).Timeout", Method, 10},
-		{"(*PathError).Unwrap", Method, 13},
-		{"(*Process).Kill", Method, 0},
-		{"(*Process).Release", Method, 0},
-		{"(*Process).Signal", Method, 0},
-		{"(*Process).Wait", Method, 0},
-		{"(*ProcessState).ExitCode", Method, 12},
-		{"(*ProcessState).Exited", Method, 0},
-		{"(*ProcessState).Pid", Method, 0},
-		{"(*ProcessState).String", Method, 0},
-		{"(*ProcessState).Success", Method, 0},
-		{"(*ProcessState).Sys", Method, 0},
-		{"(*ProcessState).SysUsage", Method, 0},
-		{"(*ProcessState).SystemTime", Method, 0},
-		{"(*ProcessState).UserTime", Method, 0},
-		{"(*Root).Close", Method, 24},
-		{"(*Root).Create", Method, 24},
-		{"(*Root).FS", Method, 24},
-		{"(*Root).Lstat", Method, 24},
-		{"(*Root).Mkdir", Method, 24},
-		{"(*Root).Name", Method, 24},
-		{"(*Root).Open", Method, 24},
-		{"(*Root).OpenFile", Method, 24},
-		{"(*Root).OpenRoot", Method, 24},
-		{"(*Root).Remove", Method, 24},
-		{"(*Root).Stat", Method, 24},
-		{"(*SyscallError).Error", Method, 0},
-		{"(*SyscallError).Timeout", Method, 10},
-		{"(*SyscallError).Unwrap", Method, 13},
-		{"(FileMode).IsDir", Method, 0},
-		{"(FileMode).IsRegular", Method, 1},
-		{"(FileMode).Perm", Method, 0},
-		{"(FileMode).String", Method, 0},
-		{"Args", Var, 0},
-		{"Chdir", Func, 0},
-		{"Chmod", Func, 0},
-		{"Chown", Func, 0},
-		{"Chtimes", Func, 0},
-		{"Clearenv", Func, 0},
-		{"CopyFS", Func, 23},
-		{"Create", Func, 0},
-		{"CreateTemp", Func, 16},
-		{"DevNull", Const, 0},
-		{"DirEntry", Type, 16},
-		{"DirFS", Func, 16},
-		{"Environ", Func, 0},
-		{"ErrClosed", Var, 8},
-		{"ErrDeadlineExceeded", Var, 15},
-		{"ErrExist", Var, 0},
-		{"ErrInvalid", Var, 0},
-		{"ErrNoDeadline", Var, 10},
-		{"ErrNotExist", Var, 0},
-		{"ErrPermission", Var, 0},
-		{"ErrProcessDone", Var, 16},
-		{"Executable", Func, 8},
-		{"Exit", Func, 0},
-		{"Expand", Func, 0},
-		{"ExpandEnv", Func, 0},
-		{"File", Type, 0},
-		{"FileInfo", Type, 0},
-		{"FileMode", Type, 0},
-		{"FindProcess", Func, 0},
-		{"Getegid", Func, 0},
-		{"Getenv", Func, 0},
-		{"Geteuid", Func, 0},
-		{"Getgid", Func, 0},
-		{"Getgroups", Func, 0},
-		{"Getpagesize", Func, 0},
-		{"Getpid", Func, 0},
-		{"Getppid", Func, 0},
-		{"Getuid", Func, 0},
-		{"Getwd", Func, 0},
-		{"Hostname", Func, 0},
-		{"Interrupt", Var, 0},
-		{"IsExist", Func, 0},
-		{"IsNotExist", Func, 0},
-		{"IsPathSeparator", Func, 0},
-		{"IsPermission", Func, 0},
-		{"IsTimeout", Func, 10},
-		{"Kill", Var, 0},
-		{"Lchown", Func, 0},
-		{"Link", Func, 0},
-		{"LinkError", Type, 0},
-		{"LinkError.Err", Field, 0},
-		{"LinkError.New", Field, 0},
-		{"LinkError.Old", Field, 0},
-		{"LinkError.Op", Field, 0},
-		{"LookupEnv", Func, 5},
-		{"Lstat", Func, 0},
-		{"Mkdir", Func, 0},
-		{"MkdirAll", Func, 0},
-		{"MkdirTemp", Func, 16},
-		{"ModeAppend", Const, 0},
-		{"ModeCharDevice", Const, 0},
-		{"ModeDevice", Const, 0},
-		{"ModeDir", Const, 0},
-		{"ModeExclusive", Const, 0},
-		{"ModeIrregular", Const, 11},
-		{"ModeNamedPipe", Const, 0},
-		{"ModePerm", Const, 0},
-		{"ModeSetgid", Const, 0},
-		{"ModeSetuid", Const, 0},
-		{"ModeSocket", Const, 0},
-		{"ModeSticky", Const, 0},
-		{"ModeSymlink", Const, 0},
-		{"ModeTemporary", Const, 0},
-		{"ModeType", Const, 0},
-		{"NewFile", Func, 0},
-		{"NewSyscallError", Func, 0},
-		{"O_APPEND", Const, 0},
-		{"O_CREATE", Const, 0},
-		{"O_EXCL", Const, 0},
-		{"O_RDONLY", Const, 0},
-		{"O_RDWR", Const, 0},
-		{"O_SYNC", Const, 0},
-		{"O_TRUNC", Const, 0},
-		{"O_WRONLY", Const, 0},
-		{"Open", Func, 0},
-		{"OpenFile", Func, 0},
-		{"OpenInRoot", Func, 24},
-		{"OpenRoot", Func, 24},
-		{"PathError", Type, 0},
-		{"PathError.Err", Field, 0},
-		{"PathError.Op", Field, 0},
-		{"PathError.Path", Field, 0},
-		{"PathListSeparator", Const, 0},
-		{"PathSeparator", Const, 0},
-		{"Pipe", Func, 0},
-		{"ProcAttr", Type, 0},
-		{"ProcAttr.Dir", Field, 0},
-		{"ProcAttr.Env", Field, 0},
-		{"ProcAttr.Files", Field, 0},
-		{"ProcAttr.Sys", Field, 0},
-		{"Process", Type, 0},
-		{"Process.Pid", Field, 0},
-		{"ProcessState", Type, 0},
-		{"ReadDir", Func, 16},
-		{"ReadFile", Func, 16},
-		{"Readlink", Func, 0},
-		{"Remove", Func, 0},
-		{"RemoveAll", Func, 0},
-		{"Rename", Func, 0},
-		{"Root", Type, 24},
-		{"SEEK_CUR", Const, 0},
-		{"SEEK_END", Const, 0},
-		{"SEEK_SET", Const, 0},
-		{"SameFile", Func, 0},
-		{"Setenv", Func, 0},
-		{"Signal", Type, 0},
-		{"StartProcess", Func, 0},
-		{"Stat", Func, 0},
-		{"Stderr", Var, 0},
-		{"Stdin", Var, 0},
-		{"Stdout", Var, 0},
-		{"Symlink", Func, 0},
-		{"SyscallError", Type, 0},
-		{"SyscallError.Err", Field, 0},
-		{"SyscallError.Syscall", Field, 0},
-		{"TempDir", Func, 0},
-		{"Truncate", Func, 0},
-		{"Unsetenv", Func, 4},
-		{"UserCacheDir", Func, 11},
-		{"UserConfigDir", Func, 13},
-		{"UserHomeDir", Func, 12},
-		{"WriteFile", Func, 16},
+		{"(*File).Chdir", Method, 0, ""},
+		{"(*File).Chmod", Method, 0, ""},
+		{"(*File).Chown", Method, 0, ""},
+		{"(*File).Close", Method, 0, ""},
+		{"(*File).Fd", Method, 0, ""},
+		{"(*File).Name", Method, 0, ""},
+		{"(*File).Read", Method, 0, ""},
+		{"(*File).ReadAt", Method, 0, ""},
+		{"(*File).ReadDir", Method, 16, ""},
+		{"(*File).ReadFrom", Method, 15, ""},
+		{"(*File).Readdir", Method, 0, ""},
+		{"(*File).Readdirnames", Method, 0, ""},
+		{"(*File).Seek", Method, 0, ""},
+		{"(*File).SetDeadline", Method, 10, ""},
+		{"(*File).SetReadDeadline", Method, 10, ""},
+		{"(*File).SetWriteDeadline", Method, 10, ""},
+		{"(*File).Stat", Method, 0, ""},
+		{"(*File).Sync", Method, 0, ""},
+		{"(*File).SyscallConn", Method, 12, ""},
+		{"(*File).Truncate", Method, 0, ""},
+		{"(*File).Write", Method, 0, ""},
+		{"(*File).WriteAt", Method, 0, ""},
+		{"(*File).WriteString", Method, 0, ""},
+		{"(*File).WriteTo", Method, 22, ""},
+		{"(*LinkError).Error", Method, 0, ""},
+		{"(*LinkError).Unwrap", Method, 13, ""},
+		{"(*PathError).Error", Method, 0, ""},
+		{"(*PathError).Timeout", Method, 10, ""},
+		{"(*PathError).Unwrap", Method, 13, ""},
+		{"(*Process).Kill", Method, 0, ""},
+		{"(*Process).Release", Method, 0, ""},
+		{"(*Process).Signal", Method, 0, ""},
+		{"(*Process).Wait", Method, 0, ""},
+		{"(*ProcessState).ExitCode", Method, 12, ""},
+		{"(*ProcessState).Exited", Method, 0, ""},
+		{"(*ProcessState).Pid", Method, 0, ""},
+		{"(*ProcessState).String", Method, 0, ""},
+		{"(*ProcessState).Success", Method, 0, ""},
+		{"(*ProcessState).Sys", Method, 0, ""},
+		{"(*ProcessState).SysUsage", Method, 0, ""},
+		{"(*ProcessState).SystemTime", Method, 0, ""},
+		{"(*ProcessState).UserTime", Method, 0, ""},
+		{"(*Root).Chmod", Method, 25, ""},
+		{"(*Root).Chown", Method, 25, ""},
+		{"(*Root).Chtimes", Method, 25, ""},
+		{"(*Root).Close", Method, 24, ""},
+		{"(*Root).Create", Method, 24, ""},
+		{"(*Root).FS", Method, 24, ""},
+		{"(*Root).Lchown", Method, 25, ""},
+		{"(*Root).Link", Method, 25, ""},
+		{"(*Root).Lstat", Method, 24, ""},
+		{"(*Root).Mkdir", Method, 24, ""},
+		{"(*Root).Name", Method, 24, ""},
+		{"(*Root).Open", Method, 24, ""},
+		{"(*Root).OpenFile", Method, 24, ""},
+		{"(*Root).OpenRoot", Method, 24, ""},
+		{"(*Root).Readlink", Method, 25, ""},
+		{"(*Root).Remove", Method, 24, ""},
+		{"(*Root).Rename", Method, 25, ""},
+		{"(*Root).Stat", Method, 24, ""},
+		{"(*Root).Symlink", Method, 25, ""},
+		{"(*SyscallError).Error", Method, 0, ""},
+		{"(*SyscallError).Timeout", Method, 10, ""},
+		{"(*SyscallError).Unwrap", Method, 13, ""},
+		{"(FileMode).IsDir", Method, 0, ""},
+		{"(FileMode).IsRegular", Method, 1, ""},
+		{"(FileMode).Perm", Method, 0, ""},
+		{"(FileMode).String", Method, 0, ""},
+		{"Args", Var, 0, ""},
+		{"Chdir", Func, 0, "func(dir string) error"},
+		{"Chmod", Func, 0, "func(name string, mode FileMode) error"},
+		{"Chown", Func, 0, "func(name string, uid int, gid int) error"},
+		{"Chtimes", Func, 0, "func(name string, atime time.Time, mtime time.Time) error"},
+		{"Clearenv", Func, 0, "func()"},
+		{"CopyFS", Func, 23, "func(dir string, fsys fs.FS) error"},
+		{"Create", Func, 0, "func(name string) (*File, error)"},
+		{"CreateTemp", Func, 16, "func(dir string, pattern string) (*File, error)"},
+		{"DevNull", Const, 0, ""},
+		{"DirEntry", Type, 16, ""},
+		{"DirFS", Func, 16, "func(dir string) fs.FS"},
+		{"Environ", Func, 0, "func() []string"},
+		{"ErrClosed", Var, 8, ""},
+		{"ErrDeadlineExceeded", Var, 15, ""},
+		{"ErrExist", Var, 0, ""},
+		{"ErrInvalid", Var, 0, ""},
+		{"ErrNoDeadline", Var, 10, ""},
+		{"ErrNotExist", Var, 0, ""},
+		{"ErrPermission", Var, 0, ""},
+		{"ErrProcessDone", Var, 16, ""},
+		{"Executable", Func, 8, "func() (string, error)"},
+		{"Exit", Func, 0, "func(code int)"},
+		{"Expand", Func, 0, "func(s string, mapping func(string) string) string"},
+		{"ExpandEnv", Func, 0, "func(s string) string"},
+		{"File", Type, 0, ""},
+		{"FileInfo", Type, 0, ""},
+		{"FileMode", Type, 0, ""},
+		{"FindProcess", Func, 0, "func(pid int) (*Process, error)"},
+		{"Getegid", Func, 0, "func() int"},
+		{"Getenv", Func, 0, "func(key string) string"},
+		{"Geteuid", Func, 0, "func() int"},
+		{"Getgid", Func, 0, "func() int"},
+		{"Getgroups", Func, 0, "func() ([]int, error)"},
+		{"Getpagesize", Func, 0, "func() int"},
+		{"Getpid", Func, 0, "func() int"},
+		{"Getppid", Func, 0, "func() int"},
+		{"Getuid", Func, 0, "func() int"},
+		{"Getwd", Func, 0, "func() (dir string, err error)"},
+		{"Hostname", Func, 0, "func() (name string, err error)"},
+		{"Interrupt", Var, 0, ""},
+		{"IsExist", Func, 0, "func(err error) bool"},
+		{"IsNotExist", Func, 0, "func(err error) bool"},
+		{"IsPathSeparator", Func, 0, "func(c uint8) bool"},
+		{"IsPermission", Func, 0, "func(err error) bool"},
+		{"IsTimeout", Func, 10, "func(err error) bool"},
+		{"Kill", Var, 0, ""},
+		{"Lchown", Func, 0, "func(name string, uid int, gid int) error"},
+		{"Link", Func, 0, "func(oldname string, newname string) error"},
+		{"LinkError", Type, 0, ""},
+		{"LinkError.Err", Field, 0, ""},
+		{"LinkError.New", Field, 0, ""},
+		{"LinkError.Old", Field, 0, ""},
+		{"LinkError.Op", Field, 0, ""},
+		{"LookupEnv", Func, 5, "func(key string) (string, bool)"},
+		{"Lstat", Func, 0, "func(name string) (FileInfo, error)"},
+		{"Mkdir", Func, 0, "func(name string, perm FileMode) error"},
+		{"MkdirAll", Func, 0, "func(path string, perm FileMode) error"},
+		{"MkdirTemp", Func, 16, "func(dir string, pattern string) (string, error)"},
+		{"ModeAppend", Const, 0, ""},
+		{"ModeCharDevice", Const, 0, ""},
+		{"ModeDevice", Const, 0, ""},
+		{"ModeDir", Const, 0, ""},
+		{"ModeExclusive", Const, 0, ""},
+		{"ModeIrregular", Const, 11, ""},
+		{"ModeNamedPipe", Const, 0, ""},
+		{"ModePerm", Const, 0, ""},
+		{"ModeSetgid", Const, 0, ""},
+		{"ModeSetuid", Const, 0, ""},
+		{"ModeSocket", Const, 0, ""},
+		{"ModeSticky", Const, 0, ""},
+		{"ModeSymlink", Const, 0, ""},
+		{"ModeTemporary", Const, 0, ""},
+		{"ModeType", Const, 0, ""},
+		{"NewFile", Func, 0, "func(fd uintptr, name string) *File"},
+		{"NewSyscallError", Func, 0, "func(syscall string, err error) error"},
+		{"O_APPEND", Const, 0, ""},
+		{"O_CREATE", Const, 0, ""},
+		{"O_EXCL", Const, 0, ""},
+		{"O_RDONLY", Const, 0, ""},
+		{"O_RDWR", Const, 0, ""},
+		{"O_SYNC", Const, 0, ""},
+		{"O_TRUNC", Const, 0, ""},
+		{"O_WRONLY", Const, 0, ""},
+		{"Open", Func, 0, "func(name string) (*File, error)"},
+		{"OpenFile", Func, 0, "func(name string, flag int, perm FileMode) (*File, error)"},
+		{"OpenInRoot", Func, 24, "func(dir string, name string) (*File, error)"},
+		{"OpenRoot", Func, 24, "func(name string) (*Root, error)"},
+		{"PathError", Type, 0, ""},
+		{"PathError.Err", Field, 0, ""},
+		{"PathError.Op", Field, 0, ""},
+		{"PathError.Path", Field, 0, ""},
+		{"PathListSeparator", Const, 0, ""},
+		{"PathSeparator", Const, 0, ""},
+		{"Pipe", Func, 0, "func() (r *File, w *File, err error)"},
+		{"ProcAttr", Type, 0, ""},
+		{"ProcAttr.Dir", Field, 0, ""},
+		{"ProcAttr.Env", Field, 0, ""},
+		{"ProcAttr.Files", Field, 0, ""},
+		{"ProcAttr.Sys", Field, 0, ""},
+		{"Process", Type, 0, ""},
+		{"Process.Pid", Field, 0, ""},
+		{"ProcessState", Type, 0, ""},
+		{"ReadDir", Func, 16, "func(name string) ([]DirEntry, error)"},
+		{"ReadFile", Func, 16, "func(name string) ([]byte, error)"},
+		{"Readlink", Func, 0, "func(name string) (string, error)"},
+		{"Remove", Func, 0, "func(name string) error"},
+		{"RemoveAll", Func, 0, "func(path string) error"},
+		{"Rename", Func, 0, "func(oldpath string, newpath string) error"},
+		{"Root", Type, 24, ""},
+		{"SEEK_CUR", Const, 0, ""},
+		{"SEEK_END", Const, 0, ""},
+		{"SEEK_SET", Const, 0, ""},
+		{"SameFile", Func, 0, "func(fi1 FileInfo, fi2 FileInfo) bool"},
+		{"Setenv", Func, 0, "func(key string, value string) error"},
+		{"Signal", Type, 0, ""},
+		{"StartProcess", Func, 0, "func(name string, argv []string, attr *ProcAttr) (*Process, error)"},
+		{"Stat", Func, 0, "func(name string) (FileInfo, error)"},
+		{"Stderr", Var, 0, ""},
+		{"Stdin", Var, 0, ""},
+		{"Stdout", Var, 0, ""},
+		{"Symlink", Func, 0, "func(oldname string, newname string) error"},
+		{"SyscallError", Type, 0, ""},
+		{"SyscallError.Err", Field, 0, ""},
+		{"SyscallError.Syscall", Field, 0, ""},
+		{"TempDir", Func, 0, "func() string"},
+		{"Truncate", Func, 0, "func(name string, size int64) error"},
+		{"Unsetenv", Func, 4, "func(key string) error"},
+		{"UserCacheDir", Func, 11, "func() (string, error)"},
+		{"UserConfigDir", Func, 13, "func() (string, error)"},
+		{"UserHomeDir", Func, 12, "func() (string, error)"},
+		{"WriteFile", Func, 16, "func(name string, data []byte, perm FileMode) error"},
 	},
 	"os/exec": {
-		{"(*Cmd).CombinedOutput", Method, 0},
-		{"(*Cmd).Environ", Method, 19},
-		{"(*Cmd).Output", Method, 0},
-		{"(*Cmd).Run", Method, 0},
-		{"(*Cmd).Start", Method, 0},
-		{"(*Cmd).StderrPipe", Method, 0},
-		{"(*Cmd).StdinPipe", Method, 0},
-		{"(*Cmd).StdoutPipe", Method, 0},
-		{"(*Cmd).String", Method, 13},
-		{"(*Cmd).Wait", Method, 0},
-		{"(*Error).Error", Method, 0},
-		{"(*Error).Unwrap", Method, 13},
-		{"(*ExitError).Error", Method, 0},
-		{"(ExitError).ExitCode", Method, 12},
-		{"(ExitError).Exited", Method, 0},
-		{"(ExitError).Pid", Method, 0},
-		{"(ExitError).String", Method, 0},
-		{"(ExitError).Success", Method, 0},
-		{"(ExitError).Sys", Method, 0},
-		{"(ExitError).SysUsage", Method, 0},
-		{"(ExitError).SystemTime", Method, 0},
-		{"(ExitError).UserTime", Method, 0},
-		{"Cmd", Type, 0},
-		{"Cmd.Args", Field, 0},
-		{"Cmd.Cancel", Field, 20},
-		{"Cmd.Dir", Field, 0},
-		{"Cmd.Env", Field, 0},
-		{"Cmd.Err", Field, 19},
-		{"Cmd.ExtraFiles", Field, 0},
-		{"Cmd.Path", Field, 0},
-		{"Cmd.Process", Field, 0},
-		{"Cmd.ProcessState", Field, 0},
-		{"Cmd.Stderr", Field, 0},
-		{"Cmd.Stdin", Field, 0},
-		{"Cmd.Stdout", Field, 0},
-		{"Cmd.SysProcAttr", Field, 0},
-		{"Cmd.WaitDelay", Field, 20},
-		{"Command", Func, 0},
-		{"CommandContext", Func, 7},
-		{"ErrDot", Var, 19},
-		{"ErrNotFound", Var, 0},
-		{"ErrWaitDelay", Var, 20},
-		{"Error", Type, 0},
-		{"Error.Err", Field, 0},
-		{"Error.Name", Field, 0},
-		{"ExitError", Type, 0},
-		{"ExitError.ProcessState", Field, 0},
-		{"ExitError.Stderr", Field, 6},
-		{"LookPath", Func, 0},
+		{"(*Cmd).CombinedOutput", Method, 0, ""},
+		{"(*Cmd).Environ", Method, 19, ""},
+		{"(*Cmd).Output", Method, 0, ""},
+		{"(*Cmd).Run", Method, 0, ""},
+		{"(*Cmd).Start", Method, 0, ""},
+		{"(*Cmd).StderrPipe", Method, 0, ""},
+		{"(*Cmd).StdinPipe", Method, 0, ""},
+		{"(*Cmd).StdoutPipe", Method, 0, ""},
+		{"(*Cmd).String", Method, 13, ""},
+		{"(*Cmd).Wait", Method, 0, ""},
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Error).Unwrap", Method, 13, ""},
+		{"(*ExitError).Error", Method, 0, ""},
+		{"(ExitError).ExitCode", Method, 12, ""},
+		{"(ExitError).Exited", Method, 0, ""},
+		{"(ExitError).Pid", Method, 0, ""},
+		{"(ExitError).String", Method, 0, ""},
+		{"(ExitError).Success", Method, 0, ""},
+		{"(ExitError).Sys", Method, 0, ""},
+		{"(ExitError).SysUsage", Method, 0, ""},
+		{"(ExitError).SystemTime", Method, 0, ""},
+		{"(ExitError).UserTime", Method, 0, ""},
+		{"Cmd", Type, 0, ""},
+		{"Cmd.Args", Field, 0, ""},
+		{"Cmd.Cancel", Field, 20, ""},
+		{"Cmd.Dir", Field, 0, ""},
+		{"Cmd.Env", Field, 0, ""},
+		{"Cmd.Err", Field, 19, ""},
+		{"Cmd.ExtraFiles", Field, 0, ""},
+		{"Cmd.Path", Field, 0, ""},
+		{"Cmd.Process", Field, 0, ""},
+		{"Cmd.ProcessState", Field, 0, ""},
+		{"Cmd.Stderr", Field, 0, ""},
+		{"Cmd.Stdin", Field, 0, ""},
+		{"Cmd.Stdout", Field, 0, ""},
+		{"Cmd.SysProcAttr", Field, 0, ""},
+		{"Cmd.WaitDelay", Field, 20, ""},
+		{"Command", Func, 0, "func(name string, arg ...string) *Cmd"},
+		{"CommandContext", Func, 7, "func(ctx context.Context, name string, arg ...string) *Cmd"},
+		{"ErrDot", Var, 19, ""},
+		{"ErrNotFound", Var, 0, ""},
+		{"ErrWaitDelay", Var, 20, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Err", Field, 0, ""},
+		{"Error.Name", Field, 0, ""},
+		{"ExitError", Type, 0, ""},
+		{"ExitError.ProcessState", Field, 0, ""},
+		{"ExitError.Stderr", Field, 6, ""},
+		{"LookPath", Func, 0, "func(file string) (string, error)"},
 	},
 	"os/signal": {
-		{"Ignore", Func, 5},
-		{"Ignored", Func, 11},
-		{"Notify", Func, 0},
-		{"NotifyContext", Func, 16},
-		{"Reset", Func, 5},
-		{"Stop", Func, 1},
+		{"Ignore", Func, 5, "func(sig ...os.Signal)"},
+		{"Ignored", Func, 11, "func(sig os.Signal) bool"},
+		{"Notify", Func, 0, "func(c chan<- os.Signal, sig ...os.Signal)"},
+		{"NotifyContext", Func, 16, "func(parent context.Context, signals ...os.Signal) (ctx context.Context, stop context.CancelFunc)"},
+		{"Reset", Func, 5, "func(sig ...os.Signal)"},
+		{"Stop", Func, 1, "func(c chan<- os.Signal)"},
 	},
 	"os/user": {
-		{"(*User).GroupIds", Method, 7},
-		{"(UnknownGroupError).Error", Method, 7},
-		{"(UnknownGroupIdError).Error", Method, 7},
-		{"(UnknownUserError).Error", Method, 0},
-		{"(UnknownUserIdError).Error", Method, 0},
-		{"Current", Func, 0},
-		{"Group", Type, 7},
-		{"Group.Gid", Field, 7},
-		{"Group.Name", Field, 7},
-		{"Lookup", Func, 0},
-		{"LookupGroup", Func, 7},
-		{"LookupGroupId", Func, 7},
-		{"LookupId", Func, 0},
-		{"UnknownGroupError", Type, 7},
-		{"UnknownGroupIdError", Type, 7},
-		{"UnknownUserError", Type, 0},
-		{"UnknownUserIdError", Type, 0},
-		{"User", Type, 0},
-		{"User.Gid", Field, 0},
-		{"User.HomeDir", Field, 0},
-		{"User.Name", Field, 0},
-		{"User.Uid", Field, 0},
-		{"User.Username", Field, 0},
+		{"(*User).GroupIds", Method, 7, ""},
+		{"(UnknownGroupError).Error", Method, 7, ""},
+		{"(UnknownGroupIdError).Error", Method, 7, ""},
+		{"(UnknownUserError).Error", Method, 0, ""},
+		{"(UnknownUserIdError).Error", Method, 0, ""},
+		{"Current", Func, 0, "func() (*User, error)"},
+		{"Group", Type, 7, ""},
+		{"Group.Gid", Field, 7, ""},
+		{"Group.Name", Field, 7, ""},
+		{"Lookup", Func, 0, "func(username string) (*User, error)"},
+		{"LookupGroup", Func, 7, "func(name string) (*Group, error)"},
+		{"LookupGroupId", Func, 7, "func(gid string) (*Group, error)"},
+		{"LookupId", Func, 0, "func(uid string) (*User, error)"},
+		{"UnknownGroupError", Type, 7, ""},
+		{"UnknownGroupIdError", Type, 7, ""},
+		{"UnknownUserError", Type, 0, ""},
+		{"UnknownUserIdError", Type, 0, ""},
+		{"User", Type, 0, ""},
+		{"User.Gid", Field, 0, ""},
+		{"User.HomeDir", Field, 0, ""},
+		{"User.Name", Field, 0, ""},
+		{"User.Uid", Field, 0, ""},
+		{"User.Username", Field, 0, ""},
 	},
 	"path": {
-		{"Base", Func, 0},
-		{"Clean", Func, 0},
-		{"Dir", Func, 0},
-		{"ErrBadPattern", Var, 0},
-		{"Ext", Func, 0},
-		{"IsAbs", Func, 0},
-		{"Join", Func, 0},
-		{"Match", Func, 0},
-		{"Split", Func, 0},
+		{"Base", Func, 0, "func(path string) string"},
+		{"Clean", Func, 0, "func(path string) string"},
+		{"Dir", Func, 0, "func(path string) string"},
+		{"ErrBadPattern", Var, 0, ""},
+		{"Ext", Func, 0, "func(path string) string"},
+		{"IsAbs", Func, 0, "func(path string) bool"},
+		{"Join", Func, 0, "func(elem ...string) string"},
+		{"Match", Func, 0, "func(pattern string, name string) (matched bool, err error)"},
+		{"Split", Func, 0, "func(path string) (dir string, file string)"},
 	},
 	"path/filepath": {
-		{"Abs", Func, 0},
-		{"Base", Func, 0},
-		{"Clean", Func, 0},
-		{"Dir", Func, 0},
-		{"ErrBadPattern", Var, 0},
-		{"EvalSymlinks", Func, 0},
-		{"Ext", Func, 0},
-		{"FromSlash", Func, 0},
-		{"Glob", Func, 0},
-		{"HasPrefix", Func, 0},
-		{"IsAbs", Func, 0},
-		{"IsLocal", Func, 20},
-		{"Join", Func, 0},
-		{"ListSeparator", Const, 0},
-		{"Localize", Func, 23},
-		{"Match", Func, 0},
-		{"Rel", Func, 0},
-		{"Separator", Const, 0},
-		{"SkipAll", Var, 20},
-		{"SkipDir", Var, 0},
-		{"Split", Func, 0},
-		{"SplitList", Func, 0},
-		{"ToSlash", Func, 0},
-		{"VolumeName", Func, 0},
-		{"Walk", Func, 0},
-		{"WalkDir", Func, 16},
-		{"WalkFunc", Type, 0},
+		{"Abs", Func, 0, "func(path string) (string, error)"},
+		{"Base", Func, 0, "func(path string) string"},
+		{"Clean", Func, 0, "func(path string) string"},
+		{"Dir", Func, 0, "func(path string) string"},
+		{"ErrBadPattern", Var, 0, ""},
+		{"EvalSymlinks", Func, 0, "func(path string) (string, error)"},
+		{"Ext", Func, 0, "func(path string) string"},
+		{"FromSlash", Func, 0, "func(path string) string"},
+		{"Glob", Func, 0, "func(pattern string) (matches []string, err error)"},
+		{"HasPrefix", Func, 0, "func(p string, prefix string) bool"},
+		{"IsAbs", Func, 0, "func(path string) bool"},
+		{"IsLocal", Func, 20, "func(path string) bool"},
+		{"Join", Func, 0, "func(elem ...string) string"},
+		{"ListSeparator", Const, 0, ""},
+		{"Localize", Func, 23, "func(path string) (string, error)"},
+		{"Match", Func, 0, "func(pattern string, name string) (matched bool, err error)"},
+		{"Rel", Func, 0, "func(basepath string, targpath string) (string, error)"},
+		{"Separator", Const, 0, ""},
+		{"SkipAll", Var, 20, ""},
+		{"SkipDir", Var, 0, ""},
+		{"Split", Func, 0, "func(path string) (dir string, file string)"},
+		{"SplitList", Func, 0, "func(path string) []string"},
+		{"ToSlash", Func, 0, "func(path string) string"},
+		{"VolumeName", Func, 0, "func(path string) string"},
+		{"Walk", Func, 0, "func(root string, fn WalkFunc) error"},
+		{"WalkDir", Func, 16, "func(root string, fn fs.WalkDirFunc) error"},
+		{"WalkFunc", Type, 0, ""},
 	},
 	"plugin": {
-		{"(*Plugin).Lookup", Method, 8},
-		{"Open", Func, 8},
-		{"Plugin", Type, 8},
-		{"Symbol", Type, 8},
+		{"(*Plugin).Lookup", Method, 8, ""},
+		{"Open", Func, 8, "func(path string) (*Plugin, error)"},
+		{"Plugin", Type, 8, ""},
+		{"Symbol", Type, 8, ""},
 	},
 	"reflect": {
-		{"(*MapIter).Key", Method, 12},
-		{"(*MapIter).Next", Method, 12},
-		{"(*MapIter).Reset", Method, 18},
-		{"(*MapIter).Value", Method, 12},
-		{"(*ValueError).Error", Method, 0},
-		{"(ChanDir).String", Method, 0},
-		{"(Kind).String", Method, 0},
-		{"(Method).IsExported", Method, 17},
-		{"(StructField).IsExported", Method, 17},
-		{"(StructTag).Get", Method, 0},
-		{"(StructTag).Lookup", Method, 7},
-		{"(Value).Addr", Method, 0},
-		{"(Value).Bool", Method, 0},
-		{"(Value).Bytes", Method, 0},
-		{"(Value).Call", Method, 0},
-		{"(Value).CallSlice", Method, 0},
-		{"(Value).CanAddr", Method, 0},
-		{"(Value).CanComplex", Method, 18},
-		{"(Value).CanConvert", Method, 17},
-		{"(Value).CanFloat", Method, 18},
-		{"(Value).CanInt", Method, 18},
-		{"(Value).CanInterface", Method, 0},
-		{"(Value).CanSet", Method, 0},
-		{"(Value).CanUint", Method, 18},
-		{"(Value).Cap", Method, 0},
-		{"(Value).Clear", Method, 21},
-		{"(Value).Close", Method, 0},
-		{"(Value).Comparable", Method, 20},
-		{"(Value).Complex", Method, 0},
-		{"(Value).Convert", Method, 1},
-		{"(Value).Elem", Method, 0},
-		{"(Value).Equal", Method, 20},
-		{"(Value).Field", Method, 0},
-		{"(Value).FieldByIndex", Method, 0},
-		{"(Value).FieldByIndexErr", Method, 18},
-		{"(Value).FieldByName", Method, 0},
-		{"(Value).FieldByNameFunc", Method, 0},
-		{"(Value).Float", Method, 0},
-		{"(Value).Grow", Method, 20},
-		{"(Value).Index", Method, 0},
-		{"(Value).Int", Method, 0},
-		{"(Value).Interface", Method, 0},
-		{"(Value).InterfaceData", Method, 0},
-		{"(Value).IsNil", Method, 0},
-		{"(Value).IsValid", Method, 0},
-		{"(Value).IsZero", Method, 13},
-		{"(Value).Kind", Method, 0},
-		{"(Value).Len", Method, 0},
-		{"(Value).MapIndex", Method, 0},
-		{"(Value).MapKeys", Method, 0},
-		{"(Value).MapRange", Method, 12},
-		{"(Value).Method", Method, 0},
-		{"(Value).MethodByName", Method, 0},
-		{"(Value).NumField", Method, 0},
-		{"(Value).NumMethod", Method, 0},
-		{"(Value).OverflowComplex", Method, 0},
-		{"(Value).OverflowFloat", Method, 0},
-		{"(Value).OverflowInt", Method, 0},
-		{"(Value).OverflowUint", Method, 0},
-		{"(Value).Pointer", Method, 0},
-		{"(Value).Recv", Method, 0},
-		{"(Value).Send", Method, 0},
-		{"(Value).Seq", Method, 23},
-		{"(Value).Seq2", Method, 23},
-		{"(Value).Set", Method, 0},
-		{"(Value).SetBool", Method, 0},
-		{"(Value).SetBytes", Method, 0},
-		{"(Value).SetCap", Method, 2},
-		{"(Value).SetComplex", Method, 0},
-		{"(Value).SetFloat", Method, 0},
-		{"(Value).SetInt", Method, 0},
-		{"(Value).SetIterKey", Method, 18},
-		{"(Value).SetIterValue", Method, 18},
-		{"(Value).SetLen", Method, 0},
-		{"(Value).SetMapIndex", Method, 0},
-		{"(Value).SetPointer", Method, 0},
-		{"(Value).SetString", Method, 0},
-		{"(Value).SetUint", Method, 0},
-		{"(Value).SetZero", Method, 20},
-		{"(Value).Slice", Method, 0},
-		{"(Value).Slice3", Method, 2},
-		{"(Value).String", Method, 0},
-		{"(Value).TryRecv", Method, 0},
-		{"(Value).TrySend", Method, 0},
-		{"(Value).Type", Method, 0},
-		{"(Value).Uint", Method, 0},
-		{"(Value).UnsafeAddr", Method, 0},
-		{"(Value).UnsafePointer", Method, 18},
-		{"Append", Func, 0},
-		{"AppendSlice", Func, 0},
-		{"Array", Const, 0},
-		{"ArrayOf", Func, 5},
-		{"Bool", Const, 0},
-		{"BothDir", Const, 0},
-		{"Chan", Const, 0},
-		{"ChanDir", Type, 0},
-		{"ChanOf", Func, 1},
-		{"Complex128", Const, 0},
-		{"Complex64", Const, 0},
-		{"Copy", Func, 0},
-		{"DeepEqual", Func, 0},
-		{"Float32", Const, 0},
-		{"Float64", Const, 0},
-		{"Func", Const, 0},
-		{"FuncOf", Func, 5},
-		{"Indirect", Func, 0},
-		{"Int", Const, 0},
-		{"Int16", Const, 0},
-		{"Int32", Const, 0},
-		{"Int64", Const, 0},
-		{"Int8", Const, 0},
-		{"Interface", Const, 0},
-		{"Invalid", Const, 0},
-		{"Kind", Type, 0},
-		{"MakeChan", Func, 0},
-		{"MakeFunc", Func, 1},
-		{"MakeMap", Func, 0},
-		{"MakeMapWithSize", Func, 9},
-		{"MakeSlice", Func, 0},
-		{"Map", Const, 0},
-		{"MapIter", Type, 12},
-		{"MapOf", Func, 1},
-		{"Method", Type, 0},
-		{"Method.Func", Field, 0},
-		{"Method.Index", Field, 0},
-		{"Method.Name", Field, 0},
-		{"Method.PkgPath", Field, 0},
-		{"Method.Type", Field, 0},
-		{"New", Func, 0},
-		{"NewAt", Func, 0},
-		{"Pointer", Const, 18},
-		{"PointerTo", Func, 18},
-		{"Ptr", Const, 0},
-		{"PtrTo", Func, 0},
-		{"RecvDir", Const, 0},
-		{"Select", Func, 1},
-		{"SelectCase", Type, 1},
-		{"SelectCase.Chan", Field, 1},
-		{"SelectCase.Dir", Field, 1},
-		{"SelectCase.Send", Field, 1},
-		{"SelectDefault", Const, 1},
-		{"SelectDir", Type, 1},
-		{"SelectRecv", Const, 1},
-		{"SelectSend", Const, 1},
-		{"SendDir", Const, 0},
-		{"Slice", Const, 0},
-		{"SliceAt", Func, 23},
-		{"SliceHeader", Type, 0},
-		{"SliceHeader.Cap", Field, 0},
-		{"SliceHeader.Data", Field, 0},
-		{"SliceHeader.Len", Field, 0},
-		{"SliceOf", Func, 1},
-		{"String", Const, 0},
-		{"StringHeader", Type, 0},
-		{"StringHeader.Data", Field, 0},
-		{"StringHeader.Len", Field, 0},
-		{"Struct", Const, 0},
-		{"StructField", Type, 0},
-		{"StructField.Anonymous", Field, 0},
-		{"StructField.Index", Field, 0},
-		{"StructField.Name", Field, 0},
-		{"StructField.Offset", Field, 0},
-		{"StructField.PkgPath", Field, 0},
-		{"StructField.Tag", Field, 0},
-		{"StructField.Type", Field, 0},
-		{"StructOf", Func, 7},
-		{"StructTag", Type, 0},
-		{"Swapper", Func, 8},
-		{"Type", Type, 0},
-		{"TypeFor", Func, 22},
-		{"TypeOf", Func, 0},
-		{"Uint", Const, 0},
-		{"Uint16", Const, 0},
-		{"Uint32", Const, 0},
-		{"Uint64", Const, 0},
-		{"Uint8", Const, 0},
-		{"Uintptr", Const, 0},
-		{"UnsafePointer", Const, 0},
-		{"Value", Type, 0},
-		{"ValueError", Type, 0},
-		{"ValueError.Kind", Field, 0},
-		{"ValueError.Method", Field, 0},
-		{"ValueOf", Func, 0},
-		{"VisibleFields", Func, 17},
-		{"Zero", Func, 0},
+		{"(*MapIter).Key", Method, 12, ""},
+		{"(*MapIter).Next", Method, 12, ""},
+		{"(*MapIter).Reset", Method, 18, ""},
+		{"(*MapIter).Value", Method, 12, ""},
+		{"(*ValueError).Error", Method, 0, ""},
+		{"(ChanDir).String", Method, 0, ""},
+		{"(Kind).String", Method, 0, ""},
+		{"(Method).IsExported", Method, 17, ""},
+		{"(StructField).IsExported", Method, 17, ""},
+		{"(StructTag).Get", Method, 0, ""},
+		{"(StructTag).Lookup", Method, 7, ""},
+		{"(Value).Addr", Method, 0, ""},
+		{"(Value).Bool", Method, 0, ""},
+		{"(Value).Bytes", Method, 0, ""},
+		{"(Value).Call", Method, 0, ""},
+		{"(Value).CallSlice", Method, 0, ""},
+		{"(Value).CanAddr", Method, 0, ""},
+		{"(Value).CanComplex", Method, 18, ""},
+		{"(Value).CanConvert", Method, 17, ""},
+		{"(Value).CanFloat", Method, 18, ""},
+		{"(Value).CanInt", Method, 18, ""},
+		{"(Value).CanInterface", Method, 0, ""},
+		{"(Value).CanSet", Method, 0, ""},
+		{"(Value).CanUint", Method, 18, ""},
+		{"(Value).Cap", Method, 0, ""},
+		{"(Value).Clear", Method, 21, ""},
+		{"(Value).Close", Method, 0, ""},
+		{"(Value).Comparable", Method, 20, ""},
+		{"(Value).Complex", Method, 0, ""},
+		{"(Value).Convert", Method, 1, ""},
+		{"(Value).Elem", Method, 0, ""},
+		{"(Value).Equal", Method, 20, ""},
+		{"(Value).Field", Method, 0, ""},
+		{"(Value).FieldByIndex", Method, 0, ""},
+		{"(Value).FieldByIndexErr", Method, 18, ""},
+		{"(Value).FieldByName", Method, 0, ""},
+		{"(Value).FieldByNameFunc", Method, 0, ""},
+		{"(Value).Float", Method, 0, ""},
+		{"(Value).Grow", Method, 20, ""},
+		{"(Value).Index", Method, 0, ""},
+		{"(Value).Int", Method, 0, ""},
+		{"(Value).Interface", Method, 0, ""},
+		{"(Value).InterfaceData", Method, 0, ""},
+		{"(Value).IsNil", Method, 0, ""},
+		{"(Value).IsValid", Method, 0, ""},
+		{"(Value).IsZero", Method, 13, ""},
+		{"(Value).Kind", Method, 0, ""},
+		{"(Value).Len", Method, 0, ""},
+		{"(Value).MapIndex", Method, 0, ""},
+		{"(Value).MapKeys", Method, 0, ""},
+		{"(Value).MapRange", Method, 12, ""},
+		{"(Value).Method", Method, 0, ""},
+		{"(Value).MethodByName", Method, 0, ""},
+		{"(Value).NumField", Method, 0, ""},
+		{"(Value).NumMethod", Method, 0, ""},
+		{"(Value).OverflowComplex", Method, 0, ""},
+		{"(Value).OverflowFloat", Method, 0, ""},
+		{"(Value).OverflowInt", Method, 0, ""},
+		{"(Value).OverflowUint", Method, 0, ""},
+		{"(Value).Pointer", Method, 0, ""},
+		{"(Value).Recv", Method, 0, ""},
+		{"(Value).Send", Method, 0, ""},
+		{"(Value).Seq", Method, 23, ""},
+		{"(Value).Seq2", Method, 23, ""},
+		{"(Value).Set", Method, 0, ""},
+		{"(Value).SetBool", Method, 0, ""},
+		{"(Value).SetBytes", Method, 0, ""},
+		{"(Value).SetCap", Method, 2, ""},
+		{"(Value).SetComplex", Method, 0, ""},
+		{"(Value).SetFloat", Method, 0, ""},
+		{"(Value).SetInt", Method, 0, ""},
+		{"(Value).SetIterKey", Method, 18, ""},
+		{"(Value).SetIterValue", Method, 18, ""},
+		{"(Value).SetLen", Method, 0, ""},
+		{"(Value).SetMapIndex", Method, 0, ""},
+		{"(Value).SetPointer", Method, 0, ""},
+		{"(Value).SetString", Method, 0, ""},
+		{"(Value).SetUint", Method, 0, ""},
+		{"(Value).SetZero", Method, 20, ""},
+		{"(Value).Slice", Method, 0, ""},
+		{"(Value).Slice3", Method, 2, ""},
+		{"(Value).String", Method, 0, ""},
+		{"(Value).TryRecv", Method, 0, ""},
+		{"(Value).TrySend", Method, 0, ""},
+		{"(Value).Type", Method, 0, ""},
+		{"(Value).Uint", Method, 0, ""},
+		{"(Value).UnsafeAddr", Method, 0, ""},
+		{"(Value).UnsafePointer", Method, 18, ""},
+		{"Append", Func, 0, "func(s Value, x ...Value) Value"},
+		{"AppendSlice", Func, 0, "func(s Value, t Value) Value"},
+		{"Array", Const, 0, ""},
+		{"ArrayOf", Func, 5, "func(length int, elem Type) Type"},
+		{"Bool", Const, 0, ""},
+		{"BothDir", Const, 0, ""},
+		{"Chan", Const, 0, ""},
+		{"ChanDir", Type, 0, ""},
+		{"ChanOf", Func, 1, "func(dir ChanDir, t Type) Type"},
+		{"Complex128", Const, 0, ""},
+		{"Complex64", Const, 0, ""},
+		{"Copy", Func, 0, "func(dst Value, src Value) int"},
+		{"DeepEqual", Func, 0, "func(x any, y any) bool"},
+		{"Float32", Const, 0, ""},
+		{"Float64", Const, 0, ""},
+		{"Func", Const, 0, ""},
+		{"FuncOf", Func, 5, "func(in []Type, out []Type, variadic bool) Type"},
+		{"Indirect", Func, 0, "func(v Value) Value"},
+		{"Int", Const, 0, ""},
+		{"Int16", Const, 0, ""},
+		{"Int32", Const, 0, ""},
+		{"Int64", Const, 0, ""},
+		{"Int8", Const, 0, ""},
+		{"Interface", Const, 0, ""},
+		{"Invalid", Const, 0, ""},
+		{"Kind", Type, 0, ""},
+		{"MakeChan", Func, 0, "func(typ Type, buffer int) Value"},
+		{"MakeFunc", Func, 1, "func(typ Type, fn func(args []Value) (results []Value)) Value"},
+		{"MakeMap", Func, 0, "func(typ Type) Value"},
+		{"MakeMapWithSize", Func, 9, "func(typ Type, n int) Value"},
+		{"MakeSlice", Func, 0, "func(typ Type, len int, cap int) Value"},
+		{"Map", Const, 0, ""},
+		{"MapIter", Type, 12, ""},
+		{"MapOf", Func, 1, "func(key Type, elem Type) Type"},
+		{"Method", Type, 0, ""},
+		{"Method.Func", Field, 0, ""},
+		{"Method.Index", Field, 0, ""},
+		{"Method.Name", Field, 0, ""},
+		{"Method.PkgPath", Field, 0, ""},
+		{"Method.Type", Field, 0, ""},
+		{"New", Func, 0, "func(typ Type) Value"},
+		{"NewAt", Func, 0, "func(typ Type, p unsafe.Pointer) Value"},
+		{"Pointer", Const, 18, ""},
+		{"PointerTo", Func, 18, "func(t Type) Type"},
+		{"Ptr", Const, 0, ""},
+		{"PtrTo", Func, 0, "func(t Type) Type"},
+		{"RecvDir", Const, 0, ""},
+		{"Select", Func, 1, "func(cases []SelectCase) (chosen int, recv Value, recvOK bool)"},
+		{"SelectCase", Type, 1, ""},
+		{"SelectCase.Chan", Field, 1, ""},
+		{"SelectCase.Dir", Field, 1, ""},
+		{"SelectCase.Send", Field, 1, ""},
+		{"SelectDefault", Const, 1, ""},
+		{"SelectDir", Type, 1, ""},
+		{"SelectRecv", Const, 1, ""},
+		{"SelectSend", Const, 1, ""},
+		{"SendDir", Const, 0, ""},
+		{"Slice", Const, 0, ""},
+		{"SliceAt", Func, 23, "func(typ Type, p unsafe.Pointer, n int) Value"},
+		{"SliceHeader", Type, 0, ""},
+		{"SliceHeader.Cap", Field, 0, ""},
+		{"SliceHeader.Data", Field, 0, ""},
+		{"SliceHeader.Len", Field, 0, ""},
+		{"SliceOf", Func, 1, "func(t Type) Type"},
+		{"String", Const, 0, ""},
+		{"StringHeader", Type, 0, ""},
+		{"StringHeader.Data", Field, 0, ""},
+		{"StringHeader.Len", Field, 0, ""},
+		{"Struct", Const, 0, ""},
+		{"StructField", Type, 0, ""},
+		{"StructField.Anonymous", Field, 0, ""},
+		{"StructField.Index", Field, 0, ""},
+		{"StructField.Name", Field, 0, ""},
+		{"StructField.Offset", Field, 0, ""},
+		{"StructField.PkgPath", Field, 0, ""},
+		{"StructField.Tag", Field, 0, ""},
+		{"StructField.Type", Field, 0, ""},
+		{"StructOf", Func, 7, "func(fields []StructField) Type"},
+		{"StructTag", Type, 0, ""},
+		{"Swapper", Func, 8, "func(slice any) func(i int, j int)"},
+		{"Type", Type, 0, ""},
+		{"TypeFor", Func, 22, "func[T any]() Type"},
+		{"TypeOf", Func, 0, "func(i any) Type"},
+		{"Uint", Const, 0, ""},
+		{"Uint16", Const, 0, ""},
+		{"Uint32", Const, 0, ""},
+		{"Uint64", Const, 0, ""},
+		{"Uint8", Const, 0, ""},
+		{"Uintptr", Const, 0, ""},
+		{"UnsafePointer", Const, 0, ""},
+		{"Value", Type, 0, ""},
+		{"ValueError", Type, 0, ""},
+		{"ValueError.Kind", Field, 0, ""},
+		{"ValueError.Method", Field, 0, ""},
+		{"ValueOf", Func, 0, "func(i any) Value"},
+		{"VisibleFields", Func, 17, "func(t Type) []StructField"},
+		{"Zero", Func, 0, "func(typ Type) Value"},
 	},
 	"regexp": {
-		{"(*Regexp).AppendText", Method, 24},
-		{"(*Regexp).Copy", Method, 6},
-		{"(*Regexp).Expand", Method, 0},
-		{"(*Regexp).ExpandString", Method, 0},
-		{"(*Regexp).Find", Method, 0},
-		{"(*Regexp).FindAll", Method, 0},
-		{"(*Regexp).FindAllIndex", Method, 0},
-		{"(*Regexp).FindAllString", Method, 0},
-		{"(*Regexp).FindAllStringIndex", Method, 0},
-		{"(*Regexp).FindAllStringSubmatch", Method, 0},
-		{"(*Regexp).FindAllStringSubmatchIndex", Method, 0},
-		{"(*Regexp).FindAllSubmatch", Method, 0},
-		{"(*Regexp).FindAllSubmatchIndex", Method, 0},
-		{"(*Regexp).FindIndex", Method, 0},
-		{"(*Regexp).FindReaderIndex", Method, 0},
-		{"(*Regexp).FindReaderSubmatchIndex", Method, 0},
-		{"(*Regexp).FindString", Method, 0},
-		{"(*Regexp).FindStringIndex", Method, 0},
-		{"(*Regexp).FindStringSubmatch", Method, 0},
-		{"(*Regexp).FindStringSubmatchIndex", Method, 0},
-		{"(*Regexp).FindSubmatch", Method, 0},
-		{"(*Regexp).FindSubmatchIndex", Method, 0},
-		{"(*Regexp).LiteralPrefix", Method, 0},
-		{"(*Regexp).Longest", Method, 1},
-		{"(*Regexp).MarshalText", Method, 21},
-		{"(*Regexp).Match", Method, 0},
-		{"(*Regexp).MatchReader", Method, 0},
-		{"(*Regexp).MatchString", Method, 0},
-		{"(*Regexp).NumSubexp", Method, 0},
-		{"(*Regexp).ReplaceAll", Method, 0},
-		{"(*Regexp).ReplaceAllFunc", Method, 0},
-		{"(*Regexp).ReplaceAllLiteral", Method, 0},
-		{"(*Regexp).ReplaceAllLiteralString", Method, 0},
-		{"(*Regexp).ReplaceAllString", Method, 0},
-		{"(*Regexp).ReplaceAllStringFunc", Method, 0},
-		{"(*Regexp).Split", Method, 1},
-		{"(*Regexp).String", Method, 0},
-		{"(*Regexp).SubexpIndex", Method, 15},
-		{"(*Regexp).SubexpNames", Method, 0},
-		{"(*Regexp).UnmarshalText", Method, 21},
-		{"Compile", Func, 0},
-		{"CompilePOSIX", Func, 0},
-		{"Match", Func, 0},
-		{"MatchReader", Func, 0},
-		{"MatchString", Func, 0},
-		{"MustCompile", Func, 0},
-		{"MustCompilePOSIX", Func, 0},
-		{"QuoteMeta", Func, 0},
-		{"Regexp", Type, 0},
+		{"(*Regexp).AppendText", Method, 24, ""},
+		{"(*Regexp).Copy", Method, 6, ""},
+		{"(*Regexp).Expand", Method, 0, ""},
+		{"(*Regexp).ExpandString", Method, 0, ""},
+		{"(*Regexp).Find", Method, 0, ""},
+		{"(*Regexp).FindAll", Method, 0, ""},
+		{"(*Regexp).FindAllIndex", Method, 0, ""},
+		{"(*Regexp).FindAllString", Method, 0, ""},
+		{"(*Regexp).FindAllStringIndex", Method, 0, ""},
+		{"(*Regexp).FindAllStringSubmatch", Method, 0, ""},
+		{"(*Regexp).FindAllStringSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).FindAllSubmatch", Method, 0, ""},
+		{"(*Regexp).FindAllSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).FindIndex", Method, 0, ""},
+		{"(*Regexp).FindReaderIndex", Method, 0, ""},
+		{"(*Regexp).FindReaderSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).FindString", Method, 0, ""},
+		{"(*Regexp).FindStringIndex", Method, 0, ""},
+		{"(*Regexp).FindStringSubmatch", Method, 0, ""},
+		{"(*Regexp).FindStringSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).FindSubmatch", Method, 0, ""},
+		{"(*Regexp).FindSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).LiteralPrefix", Method, 0, ""},
+		{"(*Regexp).Longest", Method, 1, ""},
+		{"(*Regexp).MarshalText", Method, 21, ""},
+		{"(*Regexp).Match", Method, 0, ""},
+		{"(*Regexp).MatchReader", Method, 0, ""},
+		{"(*Regexp).MatchString", Method, 0, ""},
+		{"(*Regexp).NumSubexp", Method, 0, ""},
+		{"(*Regexp).ReplaceAll", Method, 0, ""},
+		{"(*Regexp).ReplaceAllFunc", Method, 0, ""},
+		{"(*Regexp).ReplaceAllLiteral", Method, 0, ""},
+		{"(*Regexp).ReplaceAllLiteralString", Method, 0, ""},
+		{"(*Regexp).ReplaceAllString", Method, 0, ""},
+		{"(*Regexp).ReplaceAllStringFunc", Method, 0, ""},
+		{"(*Regexp).Split", Method, 1, ""},
+		{"(*Regexp).String", Method, 0, ""},
+		{"(*Regexp).SubexpIndex", Method, 15, ""},
+		{"(*Regexp).SubexpNames", Method, 0, ""},
+		{"(*Regexp).UnmarshalText", Method, 21, ""},
+		{"Compile", Func, 0, "func(expr string) (*Regexp, error)"},
+		{"CompilePOSIX", Func, 0, "func(expr string) (*Regexp, error)"},
+		{"Match", Func, 0, "func(pattern string, b []byte) (matched bool, err error)"},
+		{"MatchReader", Func, 0, "func(pattern string, r io.RuneReader) (matched bool, err error)"},
+		{"MatchString", Func, 0, "func(pattern string, s string) (matched bool, err error)"},
+		{"MustCompile", Func, 0, "func(str string) *Regexp"},
+		{"MustCompilePOSIX", Func, 0, "func(str string) *Regexp"},
+		{"QuoteMeta", Func, 0, "func(s string) string"},
+		{"Regexp", Type, 0, ""},
 	},
 	"regexp/syntax": {
-		{"(*Error).Error", Method, 0},
-		{"(*Inst).MatchEmptyWidth", Method, 0},
-		{"(*Inst).MatchRune", Method, 0},
-		{"(*Inst).MatchRunePos", Method, 3},
-		{"(*Inst).String", Method, 0},
-		{"(*Prog).Prefix", Method, 0},
-		{"(*Prog).StartCond", Method, 0},
-		{"(*Prog).String", Method, 0},
-		{"(*Regexp).CapNames", Method, 0},
-		{"(*Regexp).Equal", Method, 0},
-		{"(*Regexp).MaxCap", Method, 0},
-		{"(*Regexp).Simplify", Method, 0},
-		{"(*Regexp).String", Method, 0},
-		{"(ErrorCode).String", Method, 0},
-		{"(InstOp).String", Method, 3},
-		{"(Op).String", Method, 11},
-		{"ClassNL", Const, 0},
-		{"Compile", Func, 0},
-		{"DotNL", Const, 0},
-		{"EmptyBeginLine", Const, 0},
-		{"EmptyBeginText", Const, 0},
-		{"EmptyEndLine", Const, 0},
-		{"EmptyEndText", Const, 0},
-		{"EmptyNoWordBoundary", Const, 0},
-		{"EmptyOp", Type, 0},
-		{"EmptyOpContext", Func, 0},
-		{"EmptyWordBoundary", Const, 0},
-		{"ErrInternalError", Const, 0},
-		{"ErrInvalidCharClass", Const, 0},
-		{"ErrInvalidCharRange", Const, 0},
-		{"ErrInvalidEscape", Const, 0},
-		{"ErrInvalidNamedCapture", Const, 0},
-		{"ErrInvalidPerlOp", Const, 0},
-		{"ErrInvalidRepeatOp", Const, 0},
-		{"ErrInvalidRepeatSize", Const, 0},
-		{"ErrInvalidUTF8", Const, 0},
-		{"ErrLarge", Const, 20},
-		{"ErrMissingBracket", Const, 0},
-		{"ErrMissingParen", Const, 0},
-		{"ErrMissingRepeatArgument", Const, 0},
-		{"ErrNestingDepth", Const, 19},
-		{"ErrTrailingBackslash", Const, 0},
-		{"ErrUnexpectedParen", Const, 1},
-		{"Error", Type, 0},
-		{"Error.Code", Field, 0},
-		{"Error.Expr", Field, 0},
-		{"ErrorCode", Type, 0},
-		{"Flags", Type, 0},
-		{"FoldCase", Const, 0},
-		{"Inst", Type, 0},
-		{"Inst.Arg", Field, 0},
-		{"Inst.Op", Field, 0},
-		{"Inst.Out", Field, 0},
-		{"Inst.Rune", Field, 0},
-		{"InstAlt", Const, 0},
-		{"InstAltMatch", Const, 0},
-		{"InstCapture", Const, 0},
-		{"InstEmptyWidth", Const, 0},
-		{"InstFail", Const, 0},
-		{"InstMatch", Const, 0},
-		{"InstNop", Const, 0},
-		{"InstOp", Type, 0},
-		{"InstRune", Const, 0},
-		{"InstRune1", Const, 0},
-		{"InstRuneAny", Const, 0},
-		{"InstRuneAnyNotNL", Const, 0},
-		{"IsWordChar", Func, 0},
-		{"Literal", Const, 0},
-		{"MatchNL", Const, 0},
-		{"NonGreedy", Const, 0},
-		{"OneLine", Const, 0},
-		{"Op", Type, 0},
-		{"OpAlternate", Const, 0},
-		{"OpAnyChar", Const, 0},
-		{"OpAnyCharNotNL", Const, 0},
-		{"OpBeginLine", Const, 0},
-		{"OpBeginText", Const, 0},
-		{"OpCapture", Const, 0},
-		{"OpCharClass", Const, 0},
-		{"OpConcat", Const, 0},
-		{"OpEmptyMatch", Const, 0},
-		{"OpEndLine", Const, 0},
-		{"OpEndText", Const, 0},
-		{"OpLiteral", Const, 0},
-		{"OpNoMatch", Const, 0},
-		{"OpNoWordBoundary", Const, 0},
-		{"OpPlus", Const, 0},
-		{"OpQuest", Const, 0},
-		{"OpRepeat", Const, 0},
-		{"OpStar", Const, 0},
-		{"OpWordBoundary", Const, 0},
-		{"POSIX", Const, 0},
-		{"Parse", Func, 0},
-		{"Perl", Const, 0},
-		{"PerlX", Const, 0},
-		{"Prog", Type, 0},
-		{"Prog.Inst", Field, 0},
-		{"Prog.NumCap", Field, 0},
-		{"Prog.Start", Field, 0},
-		{"Regexp", Type, 0},
-		{"Regexp.Cap", Field, 0},
-		{"Regexp.Flags", Field, 0},
-		{"Regexp.Max", Field, 0},
-		{"Regexp.Min", Field, 0},
-		{"Regexp.Name", Field, 0},
-		{"Regexp.Op", Field, 0},
-		{"Regexp.Rune", Field, 0},
-		{"Regexp.Rune0", Field, 0},
-		{"Regexp.Sub", Field, 0},
-		{"Regexp.Sub0", Field, 0},
-		{"Simple", Const, 0},
-		{"UnicodeGroups", Const, 0},
-		{"WasDollar", Const, 0},
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Inst).MatchEmptyWidth", Method, 0, ""},
+		{"(*Inst).MatchRune", Method, 0, ""},
+		{"(*Inst).MatchRunePos", Method, 3, ""},
+		{"(*Inst).String", Method, 0, ""},
+		{"(*Prog).Prefix", Method, 0, ""},
+		{"(*Prog).StartCond", Method, 0, ""},
+		{"(*Prog).String", Method, 0, ""},
+		{"(*Regexp).CapNames", Method, 0, ""},
+		{"(*Regexp).Equal", Method, 0, ""},
+		{"(*Regexp).MaxCap", Method, 0, ""},
+		{"(*Regexp).Simplify", Method, 0, ""},
+		{"(*Regexp).String", Method, 0, ""},
+		{"(ErrorCode).String", Method, 0, ""},
+		{"(InstOp).String", Method, 3, ""},
+		{"(Op).String", Method, 11, ""},
+		{"ClassNL", Const, 0, ""},
+		{"Compile", Func, 0, "func(re *Regexp) (*Prog, error)"},
+		{"DotNL", Const, 0, ""},
+		{"EmptyBeginLine", Const, 0, ""},
+		{"EmptyBeginText", Const, 0, ""},
+		{"EmptyEndLine", Const, 0, ""},
+		{"EmptyEndText", Const, 0, ""},
+		{"EmptyNoWordBoundary", Const, 0, ""},
+		{"EmptyOp", Type, 0, ""},
+		{"EmptyOpContext", Func, 0, "func(r1 rune, r2 rune) EmptyOp"},
+		{"EmptyWordBoundary", Const, 0, ""},
+		{"ErrInternalError", Const, 0, ""},
+		{"ErrInvalidCharClass", Const, 0, ""},
+		{"ErrInvalidCharRange", Const, 0, ""},
+		{"ErrInvalidEscape", Const, 0, ""},
+		{"ErrInvalidNamedCapture", Const, 0, ""},
+		{"ErrInvalidPerlOp", Const, 0, ""},
+		{"ErrInvalidRepeatOp", Const, 0, ""},
+		{"ErrInvalidRepeatSize", Const, 0, ""},
+		{"ErrInvalidUTF8", Const, 0, ""},
+		{"ErrLarge", Const, 20, ""},
+		{"ErrMissingBracket", Const, 0, ""},
+		{"ErrMissingParen", Const, 0, ""},
+		{"ErrMissingRepeatArgument", Const, 0, ""},
+		{"ErrNestingDepth", Const, 19, ""},
+		{"ErrTrailingBackslash", Const, 0, ""},
+		{"ErrUnexpectedParen", Const, 1, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Code", Field, 0, ""},
+		{"Error.Expr", Field, 0, ""},
+		{"ErrorCode", Type, 0, ""},
+		{"Flags", Type, 0, ""},
+		{"FoldCase", Const, 0, ""},
+		{"Inst", Type, 0, ""},
+		{"Inst.Arg", Field, 0, ""},
+		{"Inst.Op", Field, 0, ""},
+		{"Inst.Out", Field, 0, ""},
+		{"Inst.Rune", Field, 0, ""},
+		{"InstAlt", Const, 0, ""},
+		{"InstAltMatch", Const, 0, ""},
+		{"InstCapture", Const, 0, ""},
+		{"InstEmptyWidth", Const, 0, ""},
+		{"InstFail", Const, 0, ""},
+		{"InstMatch", Const, 0, ""},
+		{"InstNop", Const, 0, ""},
+		{"InstOp", Type, 0, ""},
+		{"InstRune", Const, 0, ""},
+		{"InstRune1", Const, 0, ""},
+		{"InstRuneAny", Const, 0, ""},
+		{"InstRuneAnyNotNL", Const, 0, ""},
+		{"IsWordChar", Func, 0, "func(r rune) bool"},
+		{"Literal", Const, 0, ""},
+		{"MatchNL", Const, 0, ""},
+		{"NonGreedy", Const, 0, ""},
+		{"OneLine", Const, 0, ""},
+		{"Op", Type, 0, ""},
+		{"OpAlternate", Const, 0, ""},
+		{"OpAnyChar", Const, 0, ""},
+		{"OpAnyCharNotNL", Const, 0, ""},
+		{"OpBeginLine", Const, 0, ""},
+		{"OpBeginText", Const, 0, ""},
+		{"OpCapture", Const, 0, ""},
+		{"OpCharClass", Const, 0, ""},
+		{"OpConcat", Const, 0, ""},
+		{"OpEmptyMatch", Const, 0, ""},
+		{"OpEndLine", Const, 0, ""},
+		{"OpEndText", Const, 0, ""},
+		{"OpLiteral", Const, 0, ""},
+		{"OpNoMatch", Const, 0, ""},
+		{"OpNoWordBoundary", Const, 0, ""},
+		{"OpPlus", Const, 0, ""},
+		{"OpQuest", Const, 0, ""},
+		{"OpRepeat", Const, 0, ""},
+		{"OpStar", Const, 0, ""},
+		{"OpWordBoundary", Const, 0, ""},
+		{"POSIX", Const, 0, ""},
+		{"Parse", Func, 0, "func(s string, flags Flags) (*Regexp, error)"},
+		{"Perl", Const, 0, ""},
+		{"PerlX", Const, 0, ""},
+		{"Prog", Type, 0, ""},
+		{"Prog.Inst", Field, 0, ""},
+		{"Prog.NumCap", Field, 0, ""},
+		{"Prog.Start", Field, 0, ""},
+		{"Regexp", Type, 0, ""},
+		{"Regexp.Cap", Field, 0, ""},
+		{"Regexp.Flags", Field, 0, ""},
+		{"Regexp.Max", Field, 0, ""},
+		{"Regexp.Min", Field, 0, ""},
+		{"Regexp.Name", Field, 0, ""},
+		{"Regexp.Op", Field, 0, ""},
+		{"Regexp.Rune", Field, 0, ""},
+		{"Regexp.Rune0", Field, 0, ""},
+		{"Regexp.Sub", Field, 0, ""},
+		{"Regexp.Sub0", Field, 0, ""},
+		{"Simple", Const, 0, ""},
+		{"UnicodeGroups", Const, 0, ""},
+		{"WasDollar", Const, 0, ""},
 	},
 	"runtime": {
-		{"(*BlockProfileRecord).Stack", Method, 1},
-		{"(*Frames).Next", Method, 7},
-		{"(*Func).Entry", Method, 0},
-		{"(*Func).FileLine", Method, 0},
-		{"(*Func).Name", Method, 0},
-		{"(*MemProfileRecord).InUseBytes", Method, 0},
-		{"(*MemProfileRecord).InUseObjects", Method, 0},
-		{"(*MemProfileRecord).Stack", Method, 0},
-		{"(*PanicNilError).Error", Method, 21},
-		{"(*PanicNilError).RuntimeError", Method, 21},
-		{"(*Pinner).Pin", Method, 21},
-		{"(*Pinner).Unpin", Method, 21},
-		{"(*StackRecord).Stack", Method, 0},
-		{"(*TypeAssertionError).Error", Method, 0},
-		{"(*TypeAssertionError).RuntimeError", Method, 0},
-		{"(Cleanup).Stop", Method, 24},
-		{"AddCleanup", Func, 24},
-		{"BlockProfile", Func, 1},
-		{"BlockProfileRecord", Type, 1},
-		{"BlockProfileRecord.Count", Field, 1},
-		{"BlockProfileRecord.Cycles", Field, 1},
-		{"BlockProfileRecord.StackRecord", Field, 1},
-		{"Breakpoint", Func, 0},
-		{"CPUProfile", Func, 0},
-		{"Caller", Func, 0},
-		{"Callers", Func, 0},
-		{"CallersFrames", Func, 7},
-		{"Cleanup", Type, 24},
-		{"Compiler", Const, 0},
-		{"Error", Type, 0},
-		{"Frame", Type, 7},
-		{"Frame.Entry", Field, 7},
-		{"Frame.File", Field, 7},
-		{"Frame.Func", Field, 7},
-		{"Frame.Function", Field, 7},
-		{"Frame.Line", Field, 7},
-		{"Frame.PC", Field, 7},
-		{"Frames", Type, 7},
-		{"Func", Type, 0},
-		{"FuncForPC", Func, 0},
-		{"GC", Func, 0},
-		{"GOARCH", Const, 0},
-		{"GOMAXPROCS", Func, 0},
-		{"GOOS", Const, 0},
-		{"GOROOT", Func, 0},
-		{"Goexit", Func, 0},
-		{"GoroutineProfile", Func, 0},
-		{"Gosched", Func, 0},
-		{"KeepAlive", Func, 7},
-		{"LockOSThread", Func, 0},
-		{"MemProfile", Func, 0},
-		{"MemProfileRate", Var, 0},
-		{"MemProfileRecord", Type, 0},
-		{"MemProfileRecord.AllocBytes", Field, 0},
-		{"MemProfileRecord.AllocObjects", Field, 0},
-		{"MemProfileRecord.FreeBytes", Field, 0},
-		{"MemProfileRecord.FreeObjects", Field, 0},
-		{"MemProfileRecord.Stack0", Field, 0},
-		{"MemStats", Type, 0},
-		{"MemStats.Alloc", Field, 0},
-		{"MemStats.BuckHashSys", Field, 0},
-		{"MemStats.BySize", Field, 0},
-		{"MemStats.DebugGC", Field, 0},
-		{"MemStats.EnableGC", Field, 0},
-		{"MemStats.Frees", Field, 0},
-		{"MemStats.GCCPUFraction", Field, 5},
-		{"MemStats.GCSys", Field, 2},
-		{"MemStats.HeapAlloc", Field, 0},
-		{"MemStats.HeapIdle", Field, 0},
-		{"MemStats.HeapInuse", Field, 0},
-		{"MemStats.HeapObjects", Field, 0},
-		{"MemStats.HeapReleased", Field, 0},
-		{"MemStats.HeapSys", Field, 0},
-		{"MemStats.LastGC", Field, 0},
-		{"MemStats.Lookups", Field, 0},
-		{"MemStats.MCacheInuse", Field, 0},
-		{"MemStats.MCacheSys", Field, 0},
-		{"MemStats.MSpanInuse", Field, 0},
-		{"MemStats.MSpanSys", Field, 0},
-		{"MemStats.Mallocs", Field, 0},
-		{"MemStats.NextGC", Field, 0},
-		{"MemStats.NumForcedGC", Field, 8},
-		{"MemStats.NumGC", Field, 0},
-		{"MemStats.OtherSys", Field, 2},
-		{"MemStats.PauseEnd", Field, 4},
-		{"MemStats.PauseNs", Field, 0},
-		{"MemStats.PauseTotalNs", Field, 0},
-		{"MemStats.StackInuse", Field, 0},
-		{"MemStats.StackSys", Field, 0},
-		{"MemStats.Sys", Field, 0},
-		{"MemStats.TotalAlloc", Field, 0},
-		{"MutexProfile", Func, 8},
-		{"NumCPU", Func, 0},
-		{"NumCgoCall", Func, 0},
-		{"NumGoroutine", Func, 0},
-		{"PanicNilError", Type, 21},
-		{"Pinner", Type, 21},
-		{"ReadMemStats", Func, 0},
-		{"ReadTrace", Func, 5},
-		{"SetBlockProfileRate", Func, 1},
-		{"SetCPUProfileRate", Func, 0},
-		{"SetCgoTraceback", Func, 7},
-		{"SetFinalizer", Func, 0},
-		{"SetMutexProfileFraction", Func, 8},
-		{"Stack", Func, 0},
-		{"StackRecord", Type, 0},
-		{"StackRecord.Stack0", Field, 0},
-		{"StartTrace", Func, 5},
-		{"StopTrace", Func, 5},
-		{"ThreadCreateProfile", Func, 0},
-		{"TypeAssertionError", Type, 0},
-		{"UnlockOSThread", Func, 0},
-		{"Version", Func, 0},
+		{"(*BlockProfileRecord).Stack", Method, 1, ""},
+		{"(*Frames).Next", Method, 7, ""},
+		{"(*Func).Entry", Method, 0, ""},
+		{"(*Func).FileLine", Method, 0, ""},
+		{"(*Func).Name", Method, 0, ""},
+		{"(*MemProfileRecord).InUseBytes", Method, 0, ""},
+		{"(*MemProfileRecord).InUseObjects", Method, 0, ""},
+		{"(*MemProfileRecord).Stack", Method, 0, ""},
+		{"(*PanicNilError).Error", Method, 21, ""},
+		{"(*PanicNilError).RuntimeError", Method, 21, ""},
+		{"(*Pinner).Pin", Method, 21, ""},
+		{"(*Pinner).Unpin", Method, 21, ""},
+		{"(*StackRecord).Stack", Method, 0, ""},
+		{"(*TypeAssertionError).Error", Method, 0, ""},
+		{"(*TypeAssertionError).RuntimeError", Method, 0, ""},
+		{"(Cleanup).Stop", Method, 24, ""},
+		{"AddCleanup", Func, 24, "func[T, S any](ptr *T, cleanup func(S), arg S) Cleanup"},
+		{"BlockProfile", Func, 1, "func(p []BlockProfileRecord) (n int, ok bool)"},
+		{"BlockProfileRecord", Type, 1, ""},
+		{"BlockProfileRecord.Count", Field, 1, ""},
+		{"BlockProfileRecord.Cycles", Field, 1, ""},
+		{"BlockProfileRecord.StackRecord", Field, 1, ""},
+		{"Breakpoint", Func, 0, "func()"},
+		{"CPUProfile", Func, 0, "func() []byte"},
+		{"Caller", Func, 0, "func(skip int) (pc uintptr, file string, line int, ok bool)"},
+		{"Callers", Func, 0, "func(skip int, pc []uintptr) int"},
+		{"CallersFrames", Func, 7, "func(callers []uintptr) *Frames"},
+		{"Cleanup", Type, 24, ""},
+		{"Compiler", Const, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Frame", Type, 7, ""},
+		{"Frame.Entry", Field, 7, ""},
+		{"Frame.File", Field, 7, ""},
+		{"Frame.Func", Field, 7, ""},
+		{"Frame.Function", Field, 7, ""},
+		{"Frame.Line", Field, 7, ""},
+		{"Frame.PC", Field, 7, ""},
+		{"Frames", Type, 7, ""},
+		{"Func", Type, 0, ""},
+		{"FuncForPC", Func, 0, "func(pc uintptr) *Func"},
+		{"GC", Func, 0, "func()"},
+		{"GOARCH", Const, 0, ""},
+		{"GOMAXPROCS", Func, 0, "func(n int) int"},
+		{"GOOS", Const, 0, ""},
+		{"GOROOT", Func, 0, "func() string"},
+		{"Goexit", Func, 0, "func()"},
+		{"GoroutineProfile", Func, 0, "func(p []StackRecord) (n int, ok bool)"},
+		{"Gosched", Func, 0, "func()"},
+		{"KeepAlive", Func, 7, "func(x any)"},
+		{"LockOSThread", Func, 0, "func()"},
+		{"MemProfile", Func, 0, "func(p []MemProfileRecord, inuseZero bool) (n int, ok bool)"},
+		{"MemProfileRate", Var, 0, ""},
+		{"MemProfileRecord", Type, 0, ""},
+		{"MemProfileRecord.AllocBytes", Field, 0, ""},
+		{"MemProfileRecord.AllocObjects", Field, 0, ""},
+		{"MemProfileRecord.FreeBytes", Field, 0, ""},
+		{"MemProfileRecord.FreeObjects", Field, 0, ""},
+		{"MemProfileRecord.Stack0", Field, 0, ""},
+		{"MemStats", Type, 0, ""},
+		{"MemStats.Alloc", Field, 0, ""},
+		{"MemStats.BuckHashSys", Field, 0, ""},
+		{"MemStats.BySize", Field, 0, ""},
+		{"MemStats.DebugGC", Field, 0, ""},
+		{"MemStats.EnableGC", Field, 0, ""},
+		{"MemStats.Frees", Field, 0, ""},
+		{"MemStats.GCCPUFraction", Field, 5, ""},
+		{"MemStats.GCSys", Field, 2, ""},
+		{"MemStats.HeapAlloc", Field, 0, ""},
+		{"MemStats.HeapIdle", Field, 0, ""},
+		{"MemStats.HeapInuse", Field, 0, ""},
+		{"MemStats.HeapObjects", Field, 0, ""},
+		{"MemStats.HeapReleased", Field, 0, ""},
+		{"MemStats.HeapSys", Field, 0, ""},
+		{"MemStats.LastGC", Field, 0, ""},
+		{"MemStats.Lookups", Field, 0, ""},
+		{"MemStats.MCacheInuse", Field, 0, ""},
+		{"MemStats.MCacheSys", Field, 0, ""},
+		{"MemStats.MSpanInuse", Field, 0, ""},
+		{"MemStats.MSpanSys", Field, 0, ""},
+		{"MemStats.Mallocs", Field, 0, ""},
+		{"MemStats.NextGC", Field, 0, ""},
+		{"MemStats.NumForcedGC", Field, 8, ""},
+		{"MemStats.NumGC", Field, 0, ""},
+		{"MemStats.OtherSys", Field, 2, ""},
+		{"MemStats.PauseEnd", Field, 4, ""},
+		{"MemStats.PauseNs", Field, 0, ""},
+		{"MemStats.PauseTotalNs", Field, 0, ""},
+		{"MemStats.StackInuse", Field, 0, ""},
+		{"MemStats.StackSys", Field, 0, ""},
+		{"MemStats.Sys", Field, 0, ""},
+		{"MemStats.TotalAlloc", Field, 0, ""},
+		{"MutexProfile", Func, 8, "func(p []BlockProfileRecord) (n int, ok bool)"},
+		{"NumCPU", Func, 0, "func() int"},
+		{"NumCgoCall", Func, 0, "func() int64"},
+		{"NumGoroutine", Func, 0, "func() int"},
+		{"PanicNilError", Type, 21, ""},
+		{"Pinner", Type, 21, ""},
+		{"ReadMemStats", Func, 0, "func(m *MemStats)"},
+		{"ReadTrace", Func, 5, "func() []byte"},
+		{"SetBlockProfileRate", Func, 1, "func(rate int)"},
+		{"SetCPUProfileRate", Func, 0, "func(hz int)"},
+		{"SetCgoTraceback", Func, 7, "func(version int, traceback unsafe.Pointer, context unsafe.Pointer, symbolizer unsafe.Pointer)"},
+		{"SetFinalizer", Func, 0, "func(obj any, finalizer any)"},
+		{"SetMutexProfileFraction", Func, 8, "func(rate int) int"},
+		{"Stack", Func, 0, "func(buf []byte, all bool) int"},
+		{"StackRecord", Type, 0, ""},
+		{"StackRecord.Stack0", Field, 0, ""},
+		{"StartTrace", Func, 5, "func() error"},
+		{"StopTrace", Func, 5, "func()"},
+		{"ThreadCreateProfile", Func, 0, "func(p []StackRecord) (n int, ok bool)"},
+		{"TypeAssertionError", Type, 0, ""},
+		{"UnlockOSThread", Func, 0, "func()"},
+		{"Version", Func, 0, "func() string"},
 	},
 	"runtime/cgo": {
-		{"(Handle).Delete", Method, 17},
-		{"(Handle).Value", Method, 17},
-		{"Handle", Type, 17},
-		{"Incomplete", Type, 20},
-		{"NewHandle", Func, 17},
+		{"(Handle).Delete", Method, 17, ""},
+		{"(Handle).Value", Method, 17, ""},
+		{"Handle", Type, 17, ""},
+		{"Incomplete", Type, 20, ""},
+		{"NewHandle", Func, 17, ""},
 	},
 	"runtime/coverage": {
-		{"ClearCounters", Func, 20},
-		{"WriteCounters", Func, 20},
-		{"WriteCountersDir", Func, 20},
-		{"WriteMeta", Func, 20},
-		{"WriteMetaDir", Func, 20},
+		{"ClearCounters", Func, 20, "func() error"},
+		{"WriteCounters", Func, 20, "func(w io.Writer) error"},
+		{"WriteCountersDir", Func, 20, "func(dir string) error"},
+		{"WriteMeta", Func, 20, "func(w io.Writer) error"},
+		{"WriteMetaDir", Func, 20, "func(dir string) error"},
 	},
 	"runtime/debug": {
-		{"(*BuildInfo).String", Method, 18},
-		{"BuildInfo", Type, 12},
-		{"BuildInfo.Deps", Field, 12},
-		{"BuildInfo.GoVersion", Field, 18},
-		{"BuildInfo.Main", Field, 12},
-		{"BuildInfo.Path", Field, 12},
-		{"BuildInfo.Settings", Field, 18},
-		{"BuildSetting", Type, 18},
-		{"BuildSetting.Key", Field, 18},
-		{"BuildSetting.Value", Field, 18},
-		{"CrashOptions", Type, 23},
-		{"FreeOSMemory", Func, 1},
-		{"GCStats", Type, 1},
-		{"GCStats.LastGC", Field, 1},
-		{"GCStats.NumGC", Field, 1},
-		{"GCStats.Pause", Field, 1},
-		{"GCStats.PauseEnd", Field, 4},
-		{"GCStats.PauseQuantiles", Field, 1},
-		{"GCStats.PauseTotal", Field, 1},
-		{"Module", Type, 12},
-		{"Module.Path", Field, 12},
-		{"Module.Replace", Field, 12},
-		{"Module.Sum", Field, 12},
-		{"Module.Version", Field, 12},
-		{"ParseBuildInfo", Func, 18},
-		{"PrintStack", Func, 0},
-		{"ReadBuildInfo", Func, 12},
-		{"ReadGCStats", Func, 1},
-		{"SetCrashOutput", Func, 23},
-		{"SetGCPercent", Func, 1},
-		{"SetMaxStack", Func, 2},
-		{"SetMaxThreads", Func, 2},
-		{"SetMemoryLimit", Func, 19},
-		{"SetPanicOnFault", Func, 3},
-		{"SetTraceback", Func, 6},
-		{"Stack", Func, 0},
-		{"WriteHeapDump", Func, 3},
+		{"(*BuildInfo).String", Method, 18, ""},
+		{"BuildInfo", Type, 12, ""},
+		{"BuildInfo.Deps", Field, 12, ""},
+		{"BuildInfo.GoVersion", Field, 18, ""},
+		{"BuildInfo.Main", Field, 12, ""},
+		{"BuildInfo.Path", Field, 12, ""},
+		{"BuildInfo.Settings", Field, 18, ""},
+		{"BuildSetting", Type, 18, ""},
+		{"BuildSetting.Key", Field, 18, ""},
+		{"BuildSetting.Value", Field, 18, ""},
+		{"CrashOptions", Type, 23, ""},
+		{"FreeOSMemory", Func, 1, "func()"},
+		{"GCStats", Type, 1, ""},
+		{"GCStats.LastGC", Field, 1, ""},
+		{"GCStats.NumGC", Field, 1, ""},
+		{"GCStats.Pause", Field, 1, ""},
+		{"GCStats.PauseEnd", Field, 4, ""},
+		{"GCStats.PauseQuantiles", Field, 1, ""},
+		{"GCStats.PauseTotal", Field, 1, ""},
+		{"Module", Type, 12, ""},
+		{"Module.Path", Field, 12, ""},
+		{"Module.Replace", Field, 12, ""},
+		{"Module.Sum", Field, 12, ""},
+		{"Module.Version", Field, 12, ""},
+		{"ParseBuildInfo", Func, 18, "func(data string) (bi *BuildInfo, err error)"},
+		{"PrintStack", Func, 0, "func()"},
+		{"ReadBuildInfo", Func, 12, "func() (info *BuildInfo, ok bool)"},
+		{"ReadGCStats", Func, 1, "func(stats *GCStats)"},
+		{"SetCrashOutput", Func, 23, "func(f *os.File, opts CrashOptions) error"},
+		{"SetGCPercent", Func, 1, "func(percent int) int"},
+		{"SetMaxStack", Func, 2, "func(bytes int) int"},
+		{"SetMaxThreads", Func, 2, "func(threads int) int"},
+		{"SetMemoryLimit", Func, 19, "func(limit int64) int64"},
+		{"SetPanicOnFault", Func, 3, "func(enabled bool) bool"},
+		{"SetTraceback", Func, 6, "func(level string)"},
+		{"Stack", Func, 0, "func() []byte"},
+		{"WriteHeapDump", Func, 3, "func(fd uintptr)"},
 	},
 	"runtime/metrics": {
-		{"(Value).Float64", Method, 16},
-		{"(Value).Float64Histogram", Method, 16},
-		{"(Value).Kind", Method, 16},
-		{"(Value).Uint64", Method, 16},
-		{"All", Func, 16},
-		{"Description", Type, 16},
-		{"Description.Cumulative", Field, 16},
-		{"Description.Description", Field, 16},
-		{"Description.Kind", Field, 16},
-		{"Description.Name", Field, 16},
-		{"Float64Histogram", Type, 16},
-		{"Float64Histogram.Buckets", Field, 16},
-		{"Float64Histogram.Counts", Field, 16},
-		{"KindBad", Const, 16},
-		{"KindFloat64", Const, 16},
-		{"KindFloat64Histogram", Const, 16},
-		{"KindUint64", Const, 16},
-		{"Read", Func, 16},
-		{"Sample", Type, 16},
-		{"Sample.Name", Field, 16},
-		{"Sample.Value", Field, 16},
-		{"Value", Type, 16},
-		{"ValueKind", Type, 16},
+		{"(Value).Float64", Method, 16, ""},
+		{"(Value).Float64Histogram", Method, 16, ""},
+		{"(Value).Kind", Method, 16, ""},
+		{"(Value).Uint64", Method, 16, ""},
+		{"All", Func, 16, "func() []Description"},
+		{"Description", Type, 16, ""},
+		{"Description.Cumulative", Field, 16, ""},
+		{"Description.Description", Field, 16, ""},
+		{"Description.Kind", Field, 16, ""},
+		{"Description.Name", Field, 16, ""},
+		{"Float64Histogram", Type, 16, ""},
+		{"Float64Histogram.Buckets", Field, 16, ""},
+		{"Float64Histogram.Counts", Field, 16, ""},
+		{"KindBad", Const, 16, ""},
+		{"KindFloat64", Const, 16, ""},
+		{"KindFloat64Histogram", Const, 16, ""},
+		{"KindUint64", Const, 16, ""},
+		{"Read", Func, 16, "func(m []Sample)"},
+		{"Sample", Type, 16, ""},
+		{"Sample.Name", Field, 16, ""},
+		{"Sample.Value", Field, 16, ""},
+		{"Value", Type, 16, ""},
+		{"ValueKind", Type, 16, ""},
 	},
 	"runtime/pprof": {
-		{"(*Profile).Add", Method, 0},
-		{"(*Profile).Count", Method, 0},
-		{"(*Profile).Name", Method, 0},
-		{"(*Profile).Remove", Method, 0},
-		{"(*Profile).WriteTo", Method, 0},
-		{"Do", Func, 9},
-		{"ForLabels", Func, 9},
-		{"Label", Func, 9},
-		{"LabelSet", Type, 9},
-		{"Labels", Func, 9},
-		{"Lookup", Func, 0},
-		{"NewProfile", Func, 0},
-		{"Profile", Type, 0},
-		{"Profiles", Func, 0},
-		{"SetGoroutineLabels", Func, 9},
-		{"StartCPUProfile", Func, 0},
-		{"StopCPUProfile", Func, 0},
-		{"WithLabels", Func, 9},
-		{"WriteHeapProfile", Func, 0},
+		{"(*Profile).Add", Method, 0, ""},
+		{"(*Profile).Count", Method, 0, ""},
+		{"(*Profile).Name", Method, 0, ""},
+		{"(*Profile).Remove", Method, 0, ""},
+		{"(*Profile).WriteTo", Method, 0, ""},
+		{"Do", Func, 9, "func(ctx context.Context, labels LabelSet, f func(context.Context))"},
+		{"ForLabels", Func, 9, "func(ctx context.Context, f func(key string, value string) bool)"},
+		{"Label", Func, 9, "func(ctx context.Context, key string) (string, bool)"},
+		{"LabelSet", Type, 9, ""},
+		{"Labels", Func, 9, "func(args ...string) LabelSet"},
+		{"Lookup", Func, 0, "func(name string) *Profile"},
+		{"NewProfile", Func, 0, "func(name string) *Profile"},
+		{"Profile", Type, 0, ""},
+		{"Profiles", Func, 0, "func() []*Profile"},
+		{"SetGoroutineLabels", Func, 9, "func(ctx context.Context)"},
+		{"StartCPUProfile", Func, 0, "func(w io.Writer) error"},
+		{"StopCPUProfile", Func, 0, "func()"},
+		{"WithLabels", Func, 9, "func(ctx context.Context, labels LabelSet) context.Context"},
+		{"WriteHeapProfile", Func, 0, "func(w io.Writer) error"},
 	},
 	"runtime/trace": {
-		{"(*Region).End", Method, 11},
-		{"(*Task).End", Method, 11},
-		{"IsEnabled", Func, 11},
-		{"Log", Func, 11},
-		{"Logf", Func, 11},
-		{"NewTask", Func, 11},
-		{"Region", Type, 11},
-		{"Start", Func, 5},
-		{"StartRegion", Func, 11},
-		{"Stop", Func, 5},
-		{"Task", Type, 11},
-		{"WithRegion", Func, 11},
+		{"(*Region).End", Method, 11, ""},
+		{"(*Task).End", Method, 11, ""},
+		{"IsEnabled", Func, 11, "func() bool"},
+		{"Log", Func, 11, "func(ctx context.Context, category string, message string)"},
+		{"Logf", Func, 11, "func(ctx context.Context, category string, format string, args ...any)"},
+		{"NewTask", Func, 11, "func(pctx context.Context, taskType string) (ctx context.Context, task *Task)"},
+		{"Region", Type, 11, ""},
+		{"Start", Func, 5, "func(w io.Writer) error"},
+		{"StartRegion", Func, 11, "func(ctx context.Context, regionType string) *Region"},
+		{"Stop", Func, 5, "func()"},
+		{"Task", Type, 11, ""},
+		{"WithRegion", Func, 11, "func(ctx context.Context, regionType string, fn func())"},
 	},
 	"slices": {
-		{"All", Func, 23},
-		{"AppendSeq", Func, 23},
-		{"Backward", Func, 23},
-		{"BinarySearch", Func, 21},
-		{"BinarySearchFunc", Func, 21},
-		{"Chunk", Func, 23},
-		{"Clip", Func, 21},
-		{"Clone", Func, 21},
-		{"Collect", Func, 23},
-		{"Compact", Func, 21},
-		{"CompactFunc", Func, 21},
-		{"Compare", Func, 21},
-		{"CompareFunc", Func, 21},
-		{"Concat", Func, 22},
-		{"Contains", Func, 21},
-		{"ContainsFunc", Func, 21},
-		{"Delete", Func, 21},
-		{"DeleteFunc", Func, 21},
-		{"Equal", Func, 21},
-		{"EqualFunc", Func, 21},
-		{"Grow", Func, 21},
-		{"Index", Func, 21},
-		{"IndexFunc", Func, 21},
-		{"Insert", Func, 21},
-		{"IsSorted", Func, 21},
-		{"IsSortedFunc", Func, 21},
-		{"Max", Func, 21},
-		{"MaxFunc", Func, 21},
-		{"Min", Func, 21},
-		{"MinFunc", Func, 21},
-		{"Repeat", Func, 23},
-		{"Replace", Func, 21},
-		{"Reverse", Func, 21},
-		{"Sort", Func, 21},
-		{"SortFunc", Func, 21},
-		{"SortStableFunc", Func, 21},
-		{"Sorted", Func, 23},
-		{"SortedFunc", Func, 23},
-		{"SortedStableFunc", Func, 23},
-		{"Values", Func, 23},
+		{"All", Func, 23, "func[Slice ~[]E, E any](s Slice) iter.Seq2[int, E]"},
+		{"AppendSeq", Func, 23, "func[Slice ~[]E, E any](s Slice, seq iter.Seq[E]) Slice"},
+		{"Backward", Func, 23, "func[Slice ~[]E, E any](s Slice) iter.Seq2[int, E]"},
+		{"BinarySearch", Func, 21, "func[S ~[]E, E cmp.Ordered](x S, target E) (int, bool)"},
+		{"BinarySearchFunc", Func, 21, "func[S ~[]E, E, T any](x S, target T, cmp func(E, T) int) (int, bool)"},
+		{"Chunk", Func, 23, "func[Slice ~[]E, E any](s Slice, n int) iter.Seq[Slice]"},
+		{"Clip", Func, 21, "func[S ~[]E, E any](s S) S"},
+		{"Clone", Func, 21, "func[S ~[]E, E any](s S) S"},
+		{"Collect", Func, 23, "func[E any](seq iter.Seq[E]) []E"},
+		{"Compact", Func, 21, "func[S ~[]E, E comparable](s S) S"},
+		{"CompactFunc", Func, 21, "func[S ~[]E, E any](s S, eq func(E, E) bool) S"},
+		{"Compare", Func, 21, "func[S ~[]E, E cmp.Ordered](s1 S, s2 S) int"},
+		{"CompareFunc", Func, 21, "func[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, cmp func(E1, E2) int) int"},
+		{"Concat", Func, 22, "func[S ~[]E, E any](slices ...S) S"},
+		{"Contains", Func, 21, "func[S ~[]E, E comparable](s S, v E) bool"},
+		{"ContainsFunc", Func, 21, "func[S ~[]E, E any](s S, f func(E) bool) bool"},
+		{"Delete", Func, 21, "func[S ~[]E, E any](s S, i int, j int) S"},
+		{"DeleteFunc", Func, 21, "func[S ~[]E, E any](s S, del func(E) bool) S"},
+		{"Equal", Func, 21, "func[S ~[]E, E comparable](s1 S, s2 S) bool"},
+		{"EqualFunc", Func, 21, "func[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, eq func(E1, E2) bool) bool"},
+		{"Grow", Func, 21, "func[S ~[]E, E any](s S, n int) S"},
+		{"Index", Func, 21, "func[S ~[]E, E comparable](s S, v E) int"},
+		{"IndexFunc", Func, 21, "func[S ~[]E, E any](s S, f func(E) bool) int"},
+		{"Insert", Func, 21, "func[S ~[]E, E any](s S, i int, v ...E) S"},
+		{"IsSorted", Func, 21, "func[S ~[]E, E cmp.Ordered](x S) bool"},
+		{"IsSortedFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int) bool"},
+		{"Max", Func, 21, "func[S ~[]E, E cmp.Ordered](x S) E"},
+		{"MaxFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int) E"},
+		{"Min", Func, 21, "func[S ~[]E, E cmp.Ordered](x S) E"},
+		{"MinFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int) E"},
+		{"Repeat", Func, 23, "func[S ~[]E, E any](x S, count int) S"},
+		{"Replace", Func, 21, "func[S ~[]E, E any](s S, i int, j int, v ...E) S"},
+		{"Reverse", Func, 21, "func[S ~[]E, E any](s S)"},
+		{"Sort", Func, 21, "func[S ~[]E, E cmp.Ordered](x S)"},
+		{"SortFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int)"},
+		{"SortStableFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int)"},
+		{"Sorted", Func, 23, "func[E cmp.Ordered](seq iter.Seq[E]) []E"},
+		{"SortedFunc", Func, 23, "func[E any](seq iter.Seq[E], cmp func(E, E) int) []E"},
+		{"SortedStableFunc", Func, 23, "func[E any](seq iter.Seq[E], cmp func(E, E) int) []E"},
+		{"Values", Func, 23, "func[Slice ~[]E, E any](s Slice) iter.Seq[E]"},
 	},
 	"sort": {
-		{"(Float64Slice).Len", Method, 0},
-		{"(Float64Slice).Less", Method, 0},
-		{"(Float64Slice).Search", Method, 0},
-		{"(Float64Slice).Sort", Method, 0},
-		{"(Float64Slice).Swap", Method, 0},
-		{"(IntSlice).Len", Method, 0},
-		{"(IntSlice).Less", Method, 0},
-		{"(IntSlice).Search", Method, 0},
-		{"(IntSlice).Sort", Method, 0},
-		{"(IntSlice).Swap", Method, 0},
-		{"(StringSlice).Len", Method, 0},
-		{"(StringSlice).Less", Method, 0},
-		{"(StringSlice).Search", Method, 0},
-		{"(StringSlice).Sort", Method, 0},
-		{"(StringSlice).Swap", Method, 0},
-		{"Find", Func, 19},
-		{"Float64Slice", Type, 0},
-		{"Float64s", Func, 0},
-		{"Float64sAreSorted", Func, 0},
-		{"IntSlice", Type, 0},
-		{"Interface", Type, 0},
-		{"Ints", Func, 0},
-		{"IntsAreSorted", Func, 0},
-		{"IsSorted", Func, 0},
-		{"Reverse", Func, 1},
-		{"Search", Func, 0},
-		{"SearchFloat64s", Func, 0},
-		{"SearchInts", Func, 0},
-		{"SearchStrings", Func, 0},
-		{"Slice", Func, 8},
-		{"SliceIsSorted", Func, 8},
-		{"SliceStable", Func, 8},
-		{"Sort", Func, 0},
-		{"Stable", Func, 2},
-		{"StringSlice", Type, 0},
-		{"Strings", Func, 0},
-		{"StringsAreSorted", Func, 0},
+		{"(Float64Slice).Len", Method, 0, ""},
+		{"(Float64Slice).Less", Method, 0, ""},
+		{"(Float64Slice).Search", Method, 0, ""},
+		{"(Float64Slice).Sort", Method, 0, ""},
+		{"(Float64Slice).Swap", Method, 0, ""},
+		{"(IntSlice).Len", Method, 0, ""},
+		{"(IntSlice).Less", Method, 0, ""},
+		{"(IntSlice).Search", Method, 0, ""},
+		{"(IntSlice).Sort", Method, 0, ""},
+		{"(IntSlice).Swap", Method, 0, ""},
+		{"(StringSlice).Len", Method, 0, ""},
+		{"(StringSlice).Less", Method, 0, ""},
+		{"(StringSlice).Search", Method, 0, ""},
+		{"(StringSlice).Sort", Method, 0, ""},
+		{"(StringSlice).Swap", Method, 0, ""},
+		{"Find", Func, 19, "func(n int, cmp func(int) int) (i int, found bool)"},
+		{"Float64Slice", Type, 0, ""},
+		{"Float64s", Func, 0, "func(x []float64)"},
+		{"Float64sAreSorted", Func, 0, "func(x []float64) bool"},
+		{"IntSlice", Type, 0, ""},
+		{"Interface", Type, 0, ""},
+		{"Ints", Func, 0, "func(x []int)"},
+		{"IntsAreSorted", Func, 0, "func(x []int) bool"},
+		{"IsSorted", Func, 0, "func(data Interface) bool"},
+		{"Reverse", Func, 1, "func(data Interface) Interface"},
+		{"Search", Func, 0, "func(n int, f func(int) bool) int"},
+		{"SearchFloat64s", Func, 0, "func(a []float64, x float64) int"},
+		{"SearchInts", Func, 0, "func(a []int, x int) int"},
+		{"SearchStrings", Func, 0, "func(a []string, x string) int"},
+		{"Slice", Func, 8, "func(x any, less func(i int, j int) bool)"},
+		{"SliceIsSorted", Func, 8, "func(x any, less func(i int, j int) bool) bool"},
+		{"SliceStable", Func, 8, "func(x any, less func(i int, j int) bool)"},
+		{"Sort", Func, 0, "func(data Interface)"},
+		{"Stable", Func, 2, "func(data Interface)"},
+		{"StringSlice", Type, 0, ""},
+		{"Strings", Func, 0, "func(x []string)"},
+		{"StringsAreSorted", Func, 0, "func(x []string) bool"},
 	},
 	"strconv": {
-		{"(*NumError).Error", Method, 0},
-		{"(*NumError).Unwrap", Method, 14},
-		{"AppendBool", Func, 0},
-		{"AppendFloat", Func, 0},
-		{"AppendInt", Func, 0},
-		{"AppendQuote", Func, 0},
-		{"AppendQuoteRune", Func, 0},
-		{"AppendQuoteRuneToASCII", Func, 0},
-		{"AppendQuoteRuneToGraphic", Func, 6},
-		{"AppendQuoteToASCII", Func, 0},
-		{"AppendQuoteToGraphic", Func, 6},
-		{"AppendUint", Func, 0},
-		{"Atoi", Func, 0},
-		{"CanBackquote", Func, 0},
-		{"ErrRange", Var, 0},
-		{"ErrSyntax", Var, 0},
-		{"FormatBool", Func, 0},
-		{"FormatComplex", Func, 15},
-		{"FormatFloat", Func, 0},
-		{"FormatInt", Func, 0},
-		{"FormatUint", Func, 0},
-		{"IntSize", Const, 0},
-		{"IsGraphic", Func, 6},
-		{"IsPrint", Func, 0},
-		{"Itoa", Func, 0},
-		{"NumError", Type, 0},
-		{"NumError.Err", Field, 0},
-		{"NumError.Func", Field, 0},
-		{"NumError.Num", Field, 0},
-		{"ParseBool", Func, 0},
-		{"ParseComplex", Func, 15},
-		{"ParseFloat", Func, 0},
-		{"ParseInt", Func, 0},
-		{"ParseUint", Func, 0},
-		{"Quote", Func, 0},
-		{"QuoteRune", Func, 0},
-		{"QuoteRuneToASCII", Func, 0},
-		{"QuoteRuneToGraphic", Func, 6},
-		{"QuoteToASCII", Func, 0},
-		{"QuoteToGraphic", Func, 6},
-		{"QuotedPrefix", Func, 17},
-		{"Unquote", Func, 0},
-		{"UnquoteChar", Func, 0},
+		{"(*NumError).Error", Method, 0, ""},
+		{"(*NumError).Unwrap", Method, 14, ""},
+		{"AppendBool", Func, 0, "func(dst []byte, b bool) []byte"},
+		{"AppendFloat", Func, 0, "func(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte"},
+		{"AppendInt", Func, 0, "func(dst []byte, i int64, base int) []byte"},
+		{"AppendQuote", Func, 0, "func(dst []byte, s string) []byte"},
+		{"AppendQuoteRune", Func, 0, "func(dst []byte, r rune) []byte"},
+		{"AppendQuoteRuneToASCII", Func, 0, "func(dst []byte, r rune) []byte"},
+		{"AppendQuoteRuneToGraphic", Func, 6, "func(dst []byte, r rune) []byte"},
+		{"AppendQuoteToASCII", Func, 0, "func(dst []byte, s string) []byte"},
+		{"AppendQuoteToGraphic", Func, 6, "func(dst []byte, s string) []byte"},
+		{"AppendUint", Func, 0, "func(dst []byte, i uint64, base int) []byte"},
+		{"Atoi", Func, 0, "func(s string) (int, error)"},
+		{"CanBackquote", Func, 0, "func(s string) bool"},
+		{"ErrRange", Var, 0, ""},
+		{"ErrSyntax", Var, 0, ""},
+		{"FormatBool", Func, 0, "func(b bool) string"},
+		{"FormatComplex", Func, 15, "func(c complex128, fmt byte, prec int, bitSize int) string"},
+		{"FormatFloat", Func, 0, "func(f float64, fmt byte, prec int, bitSize int) string"},
+		{"FormatInt", Func, 0, "func(i int64, base int) string"},
+		{"FormatUint", Func, 0, "func(i uint64, base int) string"},
+		{"IntSize", Const, 0, ""},
+		{"IsGraphic", Func, 6, "func(r rune) bool"},
+		{"IsPrint", Func, 0, "func(r rune) bool"},
+		{"Itoa", Func, 0, "func(i int) string"},
+		{"NumError", Type, 0, ""},
+		{"NumError.Err", Field, 0, ""},
+		{"NumError.Func", Field, 0, ""},
+		{"NumError.Num", Field, 0, ""},
+		{"ParseBool", Func, 0, "func(str string) (bool, error)"},
+		{"ParseComplex", Func, 15, "func(s string, bitSize int) (complex128, error)"},
+		{"ParseFloat", Func, 0, "func(s string, bitSize int) (float64, error)"},
+		{"ParseInt", Func, 0, "func(s string, base int, bitSize int) (i int64, err error)"},
+		{"ParseUint", Func, 0, "func(s string, base int, bitSize int) (uint64, error)"},
+		{"Quote", Func, 0, "func(s string) string"},
+		{"QuoteRune", Func, 0, "func(r rune) string"},
+		{"QuoteRuneToASCII", Func, 0, "func(r rune) string"},
+		{"QuoteRuneToGraphic", Func, 6, "func(r rune) string"},
+		{"QuoteToASCII", Func, 0, "func(s string) string"},
+		{"QuoteToGraphic", Func, 6, "func(s string) string"},
+		{"QuotedPrefix", Func, 17, "func(s string) (string, error)"},
+		{"Unquote", Func, 0, "func(s string) (string, error)"},
+		{"UnquoteChar", Func, 0, "func(s string, quote byte) (value rune, multibyte bool, tail string, err error)"},
 	},
 	"strings": {
-		{"(*Builder).Cap", Method, 12},
-		{"(*Builder).Grow", Method, 10},
-		{"(*Builder).Len", Method, 10},
-		{"(*Builder).Reset", Method, 10},
-		{"(*Builder).String", Method, 10},
-		{"(*Builder).Write", Method, 10},
-		{"(*Builder).WriteByte", Method, 10},
-		{"(*Builder).WriteRune", Method, 10},
-		{"(*Builder).WriteString", Method, 10},
-		{"(*Reader).Len", Method, 0},
-		{"(*Reader).Read", Method, 0},
-		{"(*Reader).ReadAt", Method, 0},
-		{"(*Reader).ReadByte", Method, 0},
-		{"(*Reader).ReadRune", Method, 0},
-		{"(*Reader).Reset", Method, 7},
-		{"(*Reader).Seek", Method, 0},
-		{"(*Reader).Size", Method, 5},
-		{"(*Reader).UnreadByte", Method, 0},
-		{"(*Reader).UnreadRune", Method, 0},
-		{"(*Reader).WriteTo", Method, 1},
-		{"(*Replacer).Replace", Method, 0},
-		{"(*Replacer).WriteString", Method, 0},
-		{"Builder", Type, 10},
-		{"Clone", Func, 18},
-		{"Compare", Func, 5},
-		{"Contains", Func, 0},
-		{"ContainsAny", Func, 0},
-		{"ContainsFunc", Func, 21},
-		{"ContainsRune", Func, 0},
-		{"Count", Func, 0},
-		{"Cut", Func, 18},
-		{"CutPrefix", Func, 20},
-		{"CutSuffix", Func, 20},
-		{"EqualFold", Func, 0},
-		{"Fields", Func, 0},
-		{"FieldsFunc", Func, 0},
-		{"FieldsFuncSeq", Func, 24},
-		{"FieldsSeq", Func, 24},
-		{"HasPrefix", Func, 0},
-		{"HasSuffix", Func, 0},
-		{"Index", Func, 0},
-		{"IndexAny", Func, 0},
-		{"IndexByte", Func, 2},
-		{"IndexFunc", Func, 0},
-		{"IndexRune", Func, 0},
-		{"Join", Func, 0},
-		{"LastIndex", Func, 0},
-		{"LastIndexAny", Func, 0},
-		{"LastIndexByte", Func, 5},
-		{"LastIndexFunc", Func, 0},
-		{"Lines", Func, 24},
-		{"Map", Func, 0},
-		{"NewReader", Func, 0},
-		{"NewReplacer", Func, 0},
-		{"Reader", Type, 0},
-		{"Repeat", Func, 0},
-		{"Replace", Func, 0},
-		{"ReplaceAll", Func, 12},
-		{"Replacer", Type, 0},
-		{"Split", Func, 0},
-		{"SplitAfter", Func, 0},
-		{"SplitAfterN", Func, 0},
-		{"SplitAfterSeq", Func, 24},
-		{"SplitN", Func, 0},
-		{"SplitSeq", Func, 24},
-		{"Title", Func, 0},
-		{"ToLower", Func, 0},
-		{"ToLowerSpecial", Func, 0},
-		{"ToTitle", Func, 0},
-		{"ToTitleSpecial", Func, 0},
-		{"ToUpper", Func, 0},
-		{"ToUpperSpecial", Func, 0},
-		{"ToValidUTF8", Func, 13},
-		{"Trim", Func, 0},
-		{"TrimFunc", Func, 0},
-		{"TrimLeft", Func, 0},
-		{"TrimLeftFunc", Func, 0},
-		{"TrimPrefix", Func, 1},
-		{"TrimRight", Func, 0},
-		{"TrimRightFunc", Func, 0},
-		{"TrimSpace", Func, 0},
-		{"TrimSuffix", Func, 1},
+		{"(*Builder).Cap", Method, 12, ""},
+		{"(*Builder).Grow", Method, 10, ""},
+		{"(*Builder).Len", Method, 10, ""},
+		{"(*Builder).Reset", Method, 10, ""},
+		{"(*Builder).String", Method, 10, ""},
+		{"(*Builder).Write", Method, 10, ""},
+		{"(*Builder).WriteByte", Method, 10, ""},
+		{"(*Builder).WriteRune", Method, 10, ""},
+		{"(*Builder).WriteString", Method, 10, ""},
+		{"(*Reader).Len", Method, 0, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).ReadAt", Method, 0, ""},
+		{"(*Reader).ReadByte", Method, 0, ""},
+		{"(*Reader).ReadRune", Method, 0, ""},
+		{"(*Reader).Reset", Method, 7, ""},
+		{"(*Reader).Seek", Method, 0, ""},
+		{"(*Reader).Size", Method, 5, ""},
+		{"(*Reader).UnreadByte", Method, 0, ""},
+		{"(*Reader).UnreadRune", Method, 0, ""},
+		{"(*Reader).WriteTo", Method, 1, ""},
+		{"(*Replacer).Replace", Method, 0, ""},
+		{"(*Replacer).WriteString", Method, 0, ""},
+		{"Builder", Type, 10, ""},
+		{"Clone", Func, 18, "func(s string) string"},
+		{"Compare", Func, 5, "func(a string, b string) int"},
+		{"Contains", Func, 0, "func(s string, substr string) bool"},
+		{"ContainsAny", Func, 0, "func(s string, chars string) bool"},
+		{"ContainsFunc", Func, 21, "func(s string, f func(rune) bool) bool"},
+		{"ContainsRune", Func, 0, "func(s string, r rune) bool"},
+		{"Count", Func, 0, "func(s string, substr string) int"},
+		{"Cut", Func, 18, "func(s string, sep string) (before string, after string, found bool)"},
+		{"CutPrefix", Func, 20, "func(s string, prefix string) (after string, found bool)"},
+		{"CutSuffix", Func, 20, "func(s string, suffix string) (before string, found bool)"},
+		{"EqualFold", Func, 0, "func(s string, t string) bool"},
+		{"Fields", Func, 0, "func(s string) []string"},
+		{"FieldsFunc", Func, 0, "func(s string, f func(rune) bool) []string"},
+		{"FieldsFuncSeq", Func, 24, "func(s string, f func(rune) bool) iter.Seq[string]"},
+		{"FieldsSeq", Func, 24, "func(s string) iter.Seq[string]"},
+		{"HasPrefix", Func, 0, "func(s string, prefix string) bool"},
+		{"HasSuffix", Func, 0, "func(s string, suffix string) bool"},
+		{"Index", Func, 0, "func(s string, substr string) int"},
+		{"IndexAny", Func, 0, "func(s string, chars string) int"},
+		{"IndexByte", Func, 2, "func(s string, c byte) int"},
+		{"IndexFunc", Func, 0, "func(s string, f func(rune) bool) int"},
+		{"IndexRune", Func, 0, "func(s string, r rune) int"},
+		{"Join", Func, 0, "func(elems []string, sep string) string"},
+		{"LastIndex", Func, 0, "func(s string, substr string) int"},
+		{"LastIndexAny", Func, 0, "func(s string, chars string) int"},
+		{"LastIndexByte", Func, 5, "func(s string, c byte) int"},
+		{"LastIndexFunc", Func, 0, "func(s string, f func(rune) bool) int"},
+		{"Lines", Func, 24, "func(s string) iter.Seq[string]"},
+		{"Map", Func, 0, "func(mapping func(rune) rune, s string) string"},
+		{"NewReader", Func, 0, "func(s string) *Reader"},
+		{"NewReplacer", Func, 0, "func(oldnew ...string) *Replacer"},
+		{"Reader", Type, 0, ""},
+		{"Repeat", Func, 0, "func(s string, count int) string"},
+		{"Replace", Func, 0, "func(s string, old string, new string, n int) string"},
+		{"ReplaceAll", Func, 12, "func(s string, old string, new string) string"},
+		{"Replacer", Type, 0, ""},
+		{"Split", Func, 0, "func(s string, sep string) []string"},
+		{"SplitAfter", Func, 0, "func(s string, sep string) []string"},
+		{"SplitAfterN", Func, 0, "func(s string, sep string, n int) []string"},
+		{"SplitAfterSeq", Func, 24, "func(s string, sep string) iter.Seq[string]"},
+		{"SplitN", Func, 0, "func(s string, sep string, n int) []string"},
+		{"SplitSeq", Func, 24, "func(s string, sep string) iter.Seq[string]"},
+		{"Title", Func, 0, "func(s string) string"},
+		{"ToLower", Func, 0, "func(s string) string"},
+		{"ToLowerSpecial", Func, 0, "func(c unicode.SpecialCase, s string) string"},
+		{"ToTitle", Func, 0, "func(s string) string"},
+		{"ToTitleSpecial", Func, 0, "func(c unicode.SpecialCase, s string) string"},
+		{"ToUpper", Func, 0, "func(s string) string"},
+		{"ToUpperSpecial", Func, 0, "func(c unicode.SpecialCase, s string) string"},
+		{"ToValidUTF8", Func, 13, "func(s string, replacement string) string"},
+		{"Trim", Func, 0, "func(s string, cutset string) string"},
+		{"TrimFunc", Func, 0, "func(s string, f func(rune) bool) string"},
+		{"TrimLeft", Func, 0, "func(s string, cutset string) string"},
+		{"TrimLeftFunc", Func, 0, "func(s string, f func(rune) bool) string"},
+		{"TrimPrefix", Func, 1, "func(s string, prefix string) string"},
+		{"TrimRight", Func, 0, "func(s string, cutset string) string"},
+		{"TrimRightFunc", Func, 0, "func(s string, f func(rune) bool) string"},
+		{"TrimSpace", Func, 0, "func(s string) string"},
+		{"TrimSuffix", Func, 1, "func(s string, suffix string) string"},
 	},
 	"structs": {
-		{"HostLayout", Type, 23},
+		{"HostLayout", Type, 23, ""},
 	},
 	"sync": {
-		{"(*Cond).Broadcast", Method, 0},
-		{"(*Cond).Signal", Method, 0},
-		{"(*Cond).Wait", Method, 0},
-		{"(*Map).Clear", Method, 23},
-		{"(*Map).CompareAndDelete", Method, 20},
-		{"(*Map).CompareAndSwap", Method, 20},
-		{"(*Map).Delete", Method, 9},
-		{"(*Map).Load", Method, 9},
-		{"(*Map).LoadAndDelete", Method, 15},
-		{"(*Map).LoadOrStore", Method, 9},
-		{"(*Map).Range", Method, 9},
-		{"(*Map).Store", Method, 9},
-		{"(*Map).Swap", Method, 20},
-		{"(*Mutex).Lock", Method, 0},
-		{"(*Mutex).TryLock", Method, 18},
-		{"(*Mutex).Unlock", Method, 0},
-		{"(*Once).Do", Method, 0},
-		{"(*Pool).Get", Method, 3},
-		{"(*Pool).Put", Method, 3},
-		{"(*RWMutex).Lock", Method, 0},
-		{"(*RWMutex).RLock", Method, 0},
-		{"(*RWMutex).RLocker", Method, 0},
-		{"(*RWMutex).RUnlock", Method, 0},
-		{"(*RWMutex).TryLock", Method, 18},
-		{"(*RWMutex).TryRLock", Method, 18},
-		{"(*RWMutex).Unlock", Method, 0},
-		{"(*WaitGroup).Add", Method, 0},
-		{"(*WaitGroup).Done", Method, 0},
-		{"(*WaitGroup).Wait", Method, 0},
-		{"Cond", Type, 0},
-		{"Cond.L", Field, 0},
-		{"Locker", Type, 0},
-		{"Map", Type, 9},
-		{"Mutex", Type, 0},
-		{"NewCond", Func, 0},
-		{"Once", Type, 0},
-		{"OnceFunc", Func, 21},
-		{"OnceValue", Func, 21},
-		{"OnceValues", Func, 21},
-		{"Pool", Type, 3},
-		{"Pool.New", Field, 3},
-		{"RWMutex", Type, 0},
-		{"WaitGroup", Type, 0},
+		{"(*Cond).Broadcast", Method, 0, ""},
+		{"(*Cond).Signal", Method, 0, ""},
+		{"(*Cond).Wait", Method, 0, ""},
+		{"(*Map).Clear", Method, 23, ""},
+		{"(*Map).CompareAndDelete", Method, 20, ""},
+		{"(*Map).CompareAndSwap", Method, 20, ""},
+		{"(*Map).Delete", Method, 9, ""},
+		{"(*Map).Load", Method, 9, ""},
+		{"(*Map).LoadAndDelete", Method, 15, ""},
+		{"(*Map).LoadOrStore", Method, 9, ""},
+		{"(*Map).Range", Method, 9, ""},
+		{"(*Map).Store", Method, 9, ""},
+		{"(*Map).Swap", Method, 20, ""},
+		{"(*Mutex).Lock", Method, 0, ""},
+		{"(*Mutex).TryLock", Method, 18, ""},
+		{"(*Mutex).Unlock", Method, 0, ""},
+		{"(*Once).Do", Method, 0, ""},
+		{"(*Pool).Get", Method, 3, ""},
+		{"(*Pool).Put", Method, 3, ""},
+		{"(*RWMutex).Lock", Method, 0, ""},
+		{"(*RWMutex).RLock", Method, 0, ""},
+		{"(*RWMutex).RLocker", Method, 0, ""},
+		{"(*RWMutex).RUnlock", Method, 0, ""},
+		{"(*RWMutex).TryLock", Method, 18, ""},
+		{"(*RWMutex).TryRLock", Method, 18, ""},
+		{"(*RWMutex).Unlock", Method, 0, ""},
+		{"(*WaitGroup).Add", Method, 0, ""},
+		{"(*WaitGroup).Done", Method, 0, ""},
+		{"(*WaitGroup).Go", Method, 25, ""},
+		{"(*WaitGroup).Wait", Method, 0, ""},
+		{"Cond", Type, 0, ""},
+		{"Cond.L", Field, 0, ""},
+		{"Locker", Type, 0, ""},
+		{"Map", Type, 9, ""},
+		{"Mutex", Type, 0, ""},
+		{"NewCond", Func, 0, "func(l Locker) *Cond"},
+		{"Once", Type, 0, ""},
+		{"OnceFunc", Func, 21, "func(f func()) func()"},
+		{"OnceValue", Func, 21, "func[T any](f func() T) func() T"},
+		{"OnceValues", Func, 21, "func[T1, T2 any](f func() (T1, T2)) func() (T1, T2)"},
+		{"Pool", Type, 3, ""},
+		{"Pool.New", Field, 3, ""},
+		{"RWMutex", Type, 0, ""},
+		{"WaitGroup", Type, 0, ""},
 	},
 	"sync/atomic": {
-		{"(*Bool).CompareAndSwap", Method, 19},
-		{"(*Bool).Load", Method, 19},
-		{"(*Bool).Store", Method, 19},
-		{"(*Bool).Swap", Method, 19},
-		{"(*Int32).Add", Method, 19},
-		{"(*Int32).And", Method, 23},
-		{"(*Int32).CompareAndSwap", Method, 19},
-		{"(*Int32).Load", Method, 19},
-		{"(*Int32).Or", Method, 23},
-		{"(*Int32).Store", Method, 19},
-		{"(*Int32).Swap", Method, 19},
-		{"(*Int64).Add", Method, 19},
-		{"(*Int64).And", Method, 23},
-		{"(*Int64).CompareAndSwap", Method, 19},
-		{"(*Int64).Load", Method, 19},
-		{"(*Int64).Or", Method, 23},
-		{"(*Int64).Store", Method, 19},
-		{"(*Int64).Swap", Method, 19},
-		{"(*Pointer).CompareAndSwap", Method, 19},
-		{"(*Pointer).Load", Method, 19},
-		{"(*Pointer).Store", Method, 19},
-		{"(*Pointer).Swap", Method, 19},
-		{"(*Uint32).Add", Method, 19},
-		{"(*Uint32).And", Method, 23},
-		{"(*Uint32).CompareAndSwap", Method, 19},
-		{"(*Uint32).Load", Method, 19},
-		{"(*Uint32).Or", Method, 23},
-		{"(*Uint32).Store", Method, 19},
-		{"(*Uint32).Swap", Method, 19},
-		{"(*Uint64).Add", Method, 19},
-		{"(*Uint64).And", Method, 23},
-		{"(*Uint64).CompareAndSwap", Method, 19},
-		{"(*Uint64).Load", Method, 19},
-		{"(*Uint64).Or", Method, 23},
-		{"(*Uint64).Store", Method, 19},
-		{"(*Uint64).Swap", Method, 19},
-		{"(*Uintptr).Add", Method, 19},
-		{"(*Uintptr).And", Method, 23},
-		{"(*Uintptr).CompareAndSwap", Method, 19},
-		{"(*Uintptr).Load", Method, 19},
-		{"(*Uintptr).Or", Method, 23},
-		{"(*Uintptr).Store", Method, 19},
-		{"(*Uintptr).Swap", Method, 19},
-		{"(*Value).CompareAndSwap", Method, 17},
-		{"(*Value).Load", Method, 4},
-		{"(*Value).Store", Method, 4},
-		{"(*Value).Swap", Method, 17},
-		{"AddInt32", Func, 0},
-		{"AddInt64", Func, 0},
-		{"AddUint32", Func, 0},
-		{"AddUint64", Func, 0},
-		{"AddUintptr", Func, 0},
-		{"AndInt32", Func, 23},
-		{"AndInt64", Func, 23},
-		{"AndUint32", Func, 23},
-		{"AndUint64", Func, 23},
-		{"AndUintptr", Func, 23},
-		{"Bool", Type, 19},
-		{"CompareAndSwapInt32", Func, 0},
-		{"CompareAndSwapInt64", Func, 0},
-		{"CompareAndSwapPointer", Func, 0},
-		{"CompareAndSwapUint32", Func, 0},
-		{"CompareAndSwapUint64", Func, 0},
-		{"CompareAndSwapUintptr", Func, 0},
-		{"Int32", Type, 19},
-		{"Int64", Type, 19},
-		{"LoadInt32", Func, 0},
-		{"LoadInt64", Func, 0},
-		{"LoadPointer", Func, 0},
-		{"LoadUint32", Func, 0},
-		{"LoadUint64", Func, 0},
-		{"LoadUintptr", Func, 0},
-		{"OrInt32", Func, 23},
-		{"OrInt64", Func, 23},
-		{"OrUint32", Func, 23},
-		{"OrUint64", Func, 23},
-		{"OrUintptr", Func, 23},
-		{"Pointer", Type, 19},
-		{"StoreInt32", Func, 0},
-		{"StoreInt64", Func, 0},
-		{"StorePointer", Func, 0},
-		{"StoreUint32", Func, 0},
-		{"StoreUint64", Func, 0},
-		{"StoreUintptr", Func, 0},
-		{"SwapInt32", Func, 2},
-		{"SwapInt64", Func, 2},
-		{"SwapPointer", Func, 2},
-		{"SwapUint32", Func, 2},
-		{"SwapUint64", Func, 2},
-		{"SwapUintptr", Func, 2},
-		{"Uint32", Type, 19},
-		{"Uint64", Type, 19},
-		{"Uintptr", Type, 19},
-		{"Value", Type, 4},
+		{"(*Bool).CompareAndSwap", Method, 19, ""},
+		{"(*Bool).Load", Method, 19, ""},
+		{"(*Bool).Store", Method, 19, ""},
+		{"(*Bool).Swap", Method, 19, ""},
+		{"(*Int32).Add", Method, 19, ""},
+		{"(*Int32).And", Method, 23, ""},
+		{"(*Int32).CompareAndSwap", Method, 19, ""},
+		{"(*Int32).Load", Method, 19, ""},
+		{"(*Int32).Or", Method, 23, ""},
+		{"(*Int32).Store", Method, 19, ""},
+		{"(*Int32).Swap", Method, 19, ""},
+		{"(*Int64).Add", Method, 19, ""},
+		{"(*Int64).And", Method, 23, ""},
+		{"(*Int64).CompareAndSwap", Method, 19, ""},
+		{"(*Int64).Load", Method, 19, ""},
+		{"(*Int64).Or", Method, 23, ""},
+		{"(*Int64).Store", Method, 19, ""},
+		{"(*Int64).Swap", Method, 19, ""},
+		{"(*Pointer).CompareAndSwap", Method, 19, ""},
+		{"(*Pointer).Load", Method, 19, ""},
+		{"(*Pointer).Store", Method, 19, ""},
+		{"(*Pointer).Swap", Method, 19, ""},
+		{"(*Uint32).Add", Method, 19, ""},
+		{"(*Uint32).And", Method, 23, ""},
+		{"(*Uint32).CompareAndSwap", Method, 19, ""},
+		{"(*Uint32).Load", Method, 19, ""},
+		{"(*Uint32).Or", Method, 23, ""},
+		{"(*Uint32).Store", Method, 19, ""},
+		{"(*Uint32).Swap", Method, 19, ""},
+		{"(*Uint64).Add", Method, 19, ""},
+		{"(*Uint64).And", Method, 23, ""},
+		{"(*Uint64).CompareAndSwap", Method, 19, ""},
+		{"(*Uint64).Load", Method, 19, ""},
+		{"(*Uint64).Or", Method, 23, ""},
+		{"(*Uint64).Store", Method, 19, ""},
+		{"(*Uint64).Swap", Method, 19, ""},
+		{"(*Uintptr).Add", Method, 19, ""},
+		{"(*Uintptr).And", Method, 23, ""},
+		{"(*Uintptr).CompareAndSwap", Method, 19, ""},
+		{"(*Uintptr).Load", Method, 19, ""},
+		{"(*Uintptr).Or", Method, 23, ""},
+		{"(*Uintptr).Store", Method, 19, ""},
+		{"(*Uintptr).Swap", Method, 19, ""},
+		{"(*Value).CompareAndSwap", Method, 17, ""},
+		{"(*Value).Load", Method, 4, ""},
+		{"(*Value).Store", Method, 4, ""},
+		{"(*Value).Swap", Method, 17, ""},
+		{"AddInt32", Func, 0, "func(addr *int32, delta int32) (new int32)"},
+		{"AddInt64", Func, 0, "func(addr *int64, delta int64) (new int64)"},
+		{"AddUint32", Func, 0, "func(addr *uint32, delta uint32) (new uint32)"},
+		{"AddUint64", Func, 0, "func(addr *uint64, delta uint64) (new uint64)"},
+		{"AddUintptr", Func, 0, "func(addr *uintptr, delta uintptr) (new uintptr)"},
+		{"AndInt32", Func, 23, "func(addr *int32, mask int32) (old int32)"},
+		{"AndInt64", Func, 23, "func(addr *int64, mask int64) (old int64)"},
+		{"AndUint32", Func, 23, "func(addr *uint32, mask uint32) (old uint32)"},
+		{"AndUint64", Func, 23, "func(addr *uint64, mask uint64) (old uint64)"},
+		{"AndUintptr", Func, 23, "func(addr *uintptr, mask uintptr) (old uintptr)"},
+		{"Bool", Type, 19, ""},
+		{"CompareAndSwapInt32", Func, 0, "func(addr *int32, old int32, new int32) (swapped bool)"},
+		{"CompareAndSwapInt64", Func, 0, "func(addr *int64, old int64, new int64) (swapped bool)"},
+		{"CompareAndSwapPointer", Func, 0, "func(addr *unsafe.Pointer, old unsafe.Pointer, new unsafe.Pointer) (swapped bool)"},
+		{"CompareAndSwapUint32", Func, 0, "func(addr *uint32, old uint32, new uint32) (swapped bool)"},
+		{"CompareAndSwapUint64", Func, 0, "func(addr *uint64, old uint64, new uint64) (swapped bool)"},
+		{"CompareAndSwapUintptr", Func, 0, "func(addr *uintptr, old uintptr, new uintptr) (swapped bool)"},
+		{"Int32", Type, 19, ""},
+		{"Int64", Type, 19, ""},
+		{"LoadInt32", Func, 0, "func(addr *int32) (val int32)"},
+		{"LoadInt64", Func, 0, "func(addr *int64) (val int64)"},
+		{"LoadPointer", Func, 0, "func(addr *unsafe.Pointer) (val unsafe.Pointer)"},
+		{"LoadUint32", Func, 0, "func(addr *uint32) (val uint32)"},
+		{"LoadUint64", Func, 0, "func(addr *uint64) (val uint64)"},
+		{"LoadUintptr", Func, 0, "func(addr *uintptr) (val uintptr)"},
+		{"OrInt32", Func, 23, "func(addr *int32, mask int32) (old int32)"},
+		{"OrInt64", Func, 23, "func(addr *int64, mask int64) (old int64)"},
+		{"OrUint32", Func, 23, "func(addr *uint32, mask uint32) (old uint32)"},
+		{"OrUint64", Func, 23, "func(addr *uint64, mask uint64) (old uint64)"},
+		{"OrUintptr", Func, 23, "func(addr *uintptr, mask uintptr) (old uintptr)"},
+		{"Pointer", Type, 19, ""},
+		{"StoreInt32", Func, 0, "func(addr *int32, val int32)"},
+		{"StoreInt64", Func, 0, "func(addr *int64, val int64)"},
+		{"StorePointer", Func, 0, "func(addr *unsafe.Pointer, val unsafe.Pointer)"},
+		{"StoreUint32", Func, 0, "func(addr *uint32, val uint32)"},
+		{"StoreUint64", Func, 0, "func(addr *uint64, val uint64)"},
+		{"StoreUintptr", Func, 0, "func(addr *uintptr, val uintptr)"},
+		{"SwapInt32", Func, 2, "func(addr *int32, new int32) (old int32)"},
+		{"SwapInt64", Func, 2, "func(addr *int64, new int64) (old int64)"},
+		{"SwapPointer", Func, 2, "func(addr *unsafe.Pointer, new unsafe.Pointer) (old unsafe.Pointer)"},
+		{"SwapUint32", Func, 2, "func(addr *uint32, new uint32) (old uint32)"},
+		{"SwapUint64", Func, 2, "func(addr *uint64, new uint64) (old uint64)"},
+		{"SwapUintptr", Func, 2, "func(addr *uintptr, new uintptr) (old uintptr)"},
+		{"Uint32", Type, 19, ""},
+		{"Uint64", Type, 19, ""},
+		{"Uintptr", Type, 19, ""},
+		{"Value", Type, 4, ""},
 	},
 	"syscall": {
-		{"(*Cmsghdr).SetLen", Method, 0},
-		{"(*DLL).FindProc", Method, 0},
-		{"(*DLL).MustFindProc", Method, 0},
-		{"(*DLL).Release", Method, 0},
-		{"(*DLLError).Error", Method, 0},
-		{"(*DLLError).Unwrap", Method, 16},
-		{"(*Filetime).Nanoseconds", Method, 0},
-		{"(*Iovec).SetLen", Method, 0},
-		{"(*LazyDLL).Handle", Method, 0},
-		{"(*LazyDLL).Load", Method, 0},
-		{"(*LazyDLL).NewProc", Method, 0},
-		{"(*LazyProc).Addr", Method, 0},
-		{"(*LazyProc).Call", Method, 0},
-		{"(*LazyProc).Find", Method, 0},
-		{"(*Msghdr).SetControllen", Method, 0},
-		{"(*Proc).Addr", Method, 0},
-		{"(*Proc).Call", Method, 0},
-		{"(*PtraceRegs).PC", Method, 0},
-		{"(*PtraceRegs).SetPC", Method, 0},
-		{"(*RawSockaddrAny).Sockaddr", Method, 0},
-		{"(*SID).Copy", Method, 0},
-		{"(*SID).Len", Method, 0},
-		{"(*SID).LookupAccount", Method, 0},
-		{"(*SID).String", Method, 0},
-		{"(*Timespec).Nano", Method, 0},
-		{"(*Timespec).Unix", Method, 0},
-		{"(*Timeval).Nano", Method, 0},
-		{"(*Timeval).Nanoseconds", Method, 0},
-		{"(*Timeval).Unix", Method, 0},
-		{"(Errno).Error", Method, 0},
-		{"(Errno).Is", Method, 13},
-		{"(Errno).Temporary", Method, 0},
-		{"(Errno).Timeout", Method, 0},
-		{"(Signal).Signal", Method, 0},
-		{"(Signal).String", Method, 0},
-		{"(Token).Close", Method, 0},
-		{"(Token).GetTokenPrimaryGroup", Method, 0},
-		{"(Token).GetTokenUser", Method, 0},
-		{"(Token).GetUserProfileDirectory", Method, 0},
-		{"(WaitStatus).Continued", Method, 0},
-		{"(WaitStatus).CoreDump", Method, 0},
-		{"(WaitStatus).ExitStatus", Method, 0},
-		{"(WaitStatus).Exited", Method, 0},
-		{"(WaitStatus).Signal", Method, 0},
-		{"(WaitStatus).Signaled", Method, 0},
-		{"(WaitStatus).StopSignal", Method, 0},
-		{"(WaitStatus).Stopped", Method, 0},
-		{"(WaitStatus).TrapCause", Method, 0},
-		{"AF_ALG", Const, 0},
-		{"AF_APPLETALK", Const, 0},
-		{"AF_ARP", Const, 0},
-		{"AF_ASH", Const, 0},
-		{"AF_ATM", Const, 0},
-		{"AF_ATMPVC", Const, 0},
-		{"AF_ATMSVC", Const, 0},
-		{"AF_AX25", Const, 0},
-		{"AF_BLUETOOTH", Const, 0},
-		{"AF_BRIDGE", Const, 0},
-		{"AF_CAIF", Const, 0},
-		{"AF_CAN", Const, 0},
-		{"AF_CCITT", Const, 0},
-		{"AF_CHAOS", Const, 0},
-		{"AF_CNT", Const, 0},
-		{"AF_COIP", Const, 0},
-		{"AF_DATAKIT", Const, 0},
-		{"AF_DECnet", Const, 0},
-		{"AF_DLI", Const, 0},
-		{"AF_E164", Const, 0},
-		{"AF_ECMA", Const, 0},
-		{"AF_ECONET", Const, 0},
-		{"AF_ENCAP", Const, 1},
-		{"AF_FILE", Const, 0},
-		{"AF_HYLINK", Const, 0},
-		{"AF_IEEE80211", Const, 0},
-		{"AF_IEEE802154", Const, 0},
-		{"AF_IMPLINK", Const, 0},
-		{"AF_INET", Const, 0},
-		{"AF_INET6", Const, 0},
-		{"AF_INET6_SDP", Const, 3},
-		{"AF_INET_SDP", Const, 3},
-		{"AF_IPX", Const, 0},
-		{"AF_IRDA", Const, 0},
-		{"AF_ISDN", Const, 0},
-		{"AF_ISO", Const, 0},
-		{"AF_IUCV", Const, 0},
-		{"AF_KEY", Const, 0},
-		{"AF_LAT", Const, 0},
-		{"AF_LINK", Const, 0},
-		{"AF_LLC", Const, 0},
-		{"AF_LOCAL", Const, 0},
-		{"AF_MAX", Const, 0},
-		{"AF_MPLS", Const, 1},
-		{"AF_NATM", Const, 0},
-		{"AF_NDRV", Const, 0},
-		{"AF_NETBEUI", Const, 0},
-		{"AF_NETBIOS", Const, 0},
-		{"AF_NETGRAPH", Const, 0},
-		{"AF_NETLINK", Const, 0},
-		{"AF_NETROM", Const, 0},
-		{"AF_NS", Const, 0},
-		{"AF_OROUTE", Const, 1},
-		{"AF_OSI", Const, 0},
-		{"AF_PACKET", Const, 0},
-		{"AF_PHONET", Const, 0},
-		{"AF_PPP", Const, 0},
-		{"AF_PPPOX", Const, 0},
-		{"AF_PUP", Const, 0},
-		{"AF_RDS", Const, 0},
-		{"AF_RESERVED_36", Const, 0},
-		{"AF_ROSE", Const, 0},
-		{"AF_ROUTE", Const, 0},
-		{"AF_RXRPC", Const, 0},
-		{"AF_SCLUSTER", Const, 0},
-		{"AF_SECURITY", Const, 0},
-		{"AF_SIP", Const, 0},
-		{"AF_SLOW", Const, 0},
-		{"AF_SNA", Const, 0},
-		{"AF_SYSTEM", Const, 0},
-		{"AF_TIPC", Const, 0},
-		{"AF_UNIX", Const, 0},
-		{"AF_UNSPEC", Const, 0},
-		{"AF_UTUN", Const, 16},
-		{"AF_VENDOR00", Const, 0},
-		{"AF_VENDOR01", Const, 0},
-		{"AF_VENDOR02", Const, 0},
-		{"AF_VENDOR03", Const, 0},
-		{"AF_VENDOR04", Const, 0},
-		{"AF_VENDOR05", Const, 0},
-		{"AF_VENDOR06", Const, 0},
-		{"AF_VENDOR07", Const, 0},
-		{"AF_VENDOR08", Const, 0},
-		{"AF_VENDOR09", Const, 0},
-		{"AF_VENDOR10", Const, 0},
-		{"AF_VENDOR11", Const, 0},
-		{"AF_VENDOR12", Const, 0},
-		{"AF_VENDOR13", Const, 0},
-		{"AF_VENDOR14", Const, 0},
-		{"AF_VENDOR15", Const, 0},
-		{"AF_VENDOR16", Const, 0},
-		{"AF_VENDOR17", Const, 0},
-		{"AF_VENDOR18", Const, 0},
-		{"AF_VENDOR19", Const, 0},
-		{"AF_VENDOR20", Const, 0},
-		{"AF_VENDOR21", Const, 0},
-		{"AF_VENDOR22", Const, 0},
-		{"AF_VENDOR23", Const, 0},
-		{"AF_VENDOR24", Const, 0},
-		{"AF_VENDOR25", Const, 0},
-		{"AF_VENDOR26", Const, 0},
-		{"AF_VENDOR27", Const, 0},
-		{"AF_VENDOR28", Const, 0},
-		{"AF_VENDOR29", Const, 0},
-		{"AF_VENDOR30", Const, 0},
-		{"AF_VENDOR31", Const, 0},
-		{"AF_VENDOR32", Const, 0},
-		{"AF_VENDOR33", Const, 0},
-		{"AF_VENDOR34", Const, 0},
-		{"AF_VENDOR35", Const, 0},
-		{"AF_VENDOR36", Const, 0},
-		{"AF_VENDOR37", Const, 0},
-		{"AF_VENDOR38", Const, 0},
-		{"AF_VENDOR39", Const, 0},
-		{"AF_VENDOR40", Const, 0},
-		{"AF_VENDOR41", Const, 0},
-		{"AF_VENDOR42", Const, 0},
-		{"AF_VENDOR43", Const, 0},
-		{"AF_VENDOR44", Const, 0},
-		{"AF_VENDOR45", Const, 0},
-		{"AF_VENDOR46", Const, 0},
-		{"AF_VENDOR47", Const, 0},
-		{"AF_WANPIPE", Const, 0},
-		{"AF_X25", Const, 0},
-		{"AI_CANONNAME", Const, 1},
-		{"AI_NUMERICHOST", Const, 1},
-		{"AI_PASSIVE", Const, 1},
-		{"APPLICATION_ERROR", Const, 0},
-		{"ARPHRD_ADAPT", Const, 0},
-		{"ARPHRD_APPLETLK", Const, 0},
-		{"ARPHRD_ARCNET", Const, 0},
-		{"ARPHRD_ASH", Const, 0},
-		{"ARPHRD_ATM", Const, 0},
-		{"ARPHRD_AX25", Const, 0},
-		{"ARPHRD_BIF", Const, 0},
-		{"ARPHRD_CHAOS", Const, 0},
-		{"ARPHRD_CISCO", Const, 0},
-		{"ARPHRD_CSLIP", Const, 0},
-		{"ARPHRD_CSLIP6", Const, 0},
-		{"ARPHRD_DDCMP", Const, 0},
-		{"ARPHRD_DLCI", Const, 0},
-		{"ARPHRD_ECONET", Const, 0},
-		{"ARPHRD_EETHER", Const, 0},
-		{"ARPHRD_ETHER", Const, 0},
-		{"ARPHRD_EUI64", Const, 0},
-		{"ARPHRD_FCAL", Const, 0},
-		{"ARPHRD_FCFABRIC", Const, 0},
-		{"ARPHRD_FCPL", Const, 0},
-		{"ARPHRD_FCPP", Const, 0},
-		{"ARPHRD_FDDI", Const, 0},
-		{"ARPHRD_FRAD", Const, 0},
-		{"ARPHRD_FRELAY", Const, 1},
-		{"ARPHRD_HDLC", Const, 0},
-		{"ARPHRD_HIPPI", Const, 0},
-		{"ARPHRD_HWX25", Const, 0},
-		{"ARPHRD_IEEE1394", Const, 0},
-		{"ARPHRD_IEEE802", Const, 0},
-		{"ARPHRD_IEEE80211", Const, 0},
-		{"ARPHRD_IEEE80211_PRISM", Const, 0},
-		{"ARPHRD_IEEE80211_RADIOTAP", Const, 0},
-		{"ARPHRD_IEEE802154", Const, 0},
-		{"ARPHRD_IEEE802154_PHY", Const, 0},
-		{"ARPHRD_IEEE802_TR", Const, 0},
-		{"ARPHRD_INFINIBAND", Const, 0},
-		{"ARPHRD_IPDDP", Const, 0},
-		{"ARPHRD_IPGRE", Const, 0},
-		{"ARPHRD_IRDA", Const, 0},
-		{"ARPHRD_LAPB", Const, 0},
-		{"ARPHRD_LOCALTLK", Const, 0},
-		{"ARPHRD_LOOPBACK", Const, 0},
-		{"ARPHRD_METRICOM", Const, 0},
-		{"ARPHRD_NETROM", Const, 0},
-		{"ARPHRD_NONE", Const, 0},
-		{"ARPHRD_PIMREG", Const, 0},
-		{"ARPHRD_PPP", Const, 0},
-		{"ARPHRD_PRONET", Const, 0},
-		{"ARPHRD_RAWHDLC", Const, 0},
-		{"ARPHRD_ROSE", Const, 0},
-		{"ARPHRD_RSRVD", Const, 0},
-		{"ARPHRD_SIT", Const, 0},
-		{"ARPHRD_SKIP", Const, 0},
-		{"ARPHRD_SLIP", Const, 0},
-		{"ARPHRD_SLIP6", Const, 0},
-		{"ARPHRD_STRIP", Const, 1},
-		{"ARPHRD_TUNNEL", Const, 0},
-		{"ARPHRD_TUNNEL6", Const, 0},
-		{"ARPHRD_VOID", Const, 0},
-		{"ARPHRD_X25", Const, 0},
-		{"AUTHTYPE_CLIENT", Const, 0},
-		{"AUTHTYPE_SERVER", Const, 0},
-		{"Accept", Func, 0},
-		{"Accept4", Func, 1},
-		{"AcceptEx", Func, 0},
-		{"Access", Func, 0},
-		{"Acct", Func, 0},
-		{"AddrinfoW", Type, 1},
-		{"AddrinfoW.Addr", Field, 1},
-		{"AddrinfoW.Addrlen", Field, 1},
-		{"AddrinfoW.Canonname", Field, 1},
-		{"AddrinfoW.Family", Field, 1},
-		{"AddrinfoW.Flags", Field, 1},
-		{"AddrinfoW.Next", Field, 1},
-		{"AddrinfoW.Protocol", Field, 1},
-		{"AddrinfoW.Socktype", Field, 1},
-		{"Adjtime", Func, 0},
-		{"Adjtimex", Func, 0},
-		{"AllThreadsSyscall", Func, 16},
-		{"AllThreadsSyscall6", Func, 16},
-		{"AttachLsf", Func, 0},
-		{"B0", Const, 0},
-		{"B1000000", Const, 0},
-		{"B110", Const, 0},
-		{"B115200", Const, 0},
-		{"B1152000", Const, 0},
-		{"B1200", Const, 0},
-		{"B134", Const, 0},
-		{"B14400", Const, 1},
-		{"B150", Const, 0},
-		{"B1500000", Const, 0},
-		{"B1800", Const, 0},
-		{"B19200", Const, 0},
-		{"B200", Const, 0},
-		{"B2000000", Const, 0},
-		{"B230400", Const, 0},
-		{"B2400", Const, 0},
-		{"B2500000", Const, 0},
-		{"B28800", Const, 1},
-		{"B300", Const, 0},
-		{"B3000000", Const, 0},
-		{"B3500000", Const, 0},
-		{"B38400", Const, 0},
-		{"B4000000", Const, 0},
-		{"B460800", Const, 0},
-		{"B4800", Const, 0},
-		{"B50", Const, 0},
-		{"B500000", Const, 0},
-		{"B57600", Const, 0},
-		{"B576000", Const, 0},
-		{"B600", Const, 0},
-		{"B7200", Const, 1},
-		{"B75", Const, 0},
-		{"B76800", Const, 1},
-		{"B921600", Const, 0},
-		{"B9600", Const, 0},
-		{"BASE_PROTOCOL", Const, 2},
-		{"BIOCFEEDBACK", Const, 0},
-		{"BIOCFLUSH", Const, 0},
-		{"BIOCGBLEN", Const, 0},
-		{"BIOCGDIRECTION", Const, 0},
-		{"BIOCGDIRFILT", Const, 1},
-		{"BIOCGDLT", Const, 0},
-		{"BIOCGDLTLIST", Const, 0},
-		{"BIOCGETBUFMODE", Const, 0},
-		{"BIOCGETIF", Const, 0},
-		{"BIOCGETZMAX", Const, 0},
-		{"BIOCGFEEDBACK", Const, 1},
-		{"BIOCGFILDROP", Const, 1},
-		{"BIOCGHDRCMPLT", Const, 0},
-		{"BIOCGRSIG", Const, 0},
-		{"BIOCGRTIMEOUT", Const, 0},
-		{"BIOCGSEESENT", Const, 0},
-		{"BIOCGSTATS", Const, 0},
-		{"BIOCGSTATSOLD", Const, 1},
-		{"BIOCGTSTAMP", Const, 1},
-		{"BIOCIMMEDIATE", Const, 0},
-		{"BIOCLOCK", Const, 0},
-		{"BIOCPROMISC", Const, 0},
-		{"BIOCROTZBUF", Const, 0},
-		{"BIOCSBLEN", Const, 0},
-		{"BIOCSDIRECTION", Const, 0},
-		{"BIOCSDIRFILT", Const, 1},
-		{"BIOCSDLT", Const, 0},
-		{"BIOCSETBUFMODE", Const, 0},
-		{"BIOCSETF", Const, 0},
-		{"BIOCSETFNR", Const, 0},
-		{"BIOCSETIF", Const, 0},
-		{"BIOCSETWF", Const, 0},
-		{"BIOCSETZBUF", Const, 0},
-		{"BIOCSFEEDBACK", Const, 1},
-		{"BIOCSFILDROP", Const, 1},
-		{"BIOCSHDRCMPLT", Const, 0},
-		{"BIOCSRSIG", Const, 0},
-		{"BIOCSRTIMEOUT", Const, 0},
-		{"BIOCSSEESENT", Const, 0},
-		{"BIOCSTCPF", Const, 1},
-		{"BIOCSTSTAMP", Const, 1},
-		{"BIOCSUDPF", Const, 1},
-		{"BIOCVERSION", Const, 0},
-		{"BPF_A", Const, 0},
-		{"BPF_ABS", Const, 0},
-		{"BPF_ADD", Const, 0},
-		{"BPF_ALIGNMENT", Const, 0},
-		{"BPF_ALIGNMENT32", Const, 1},
-		{"BPF_ALU", Const, 0},
-		{"BPF_AND", Const, 0},
-		{"BPF_B", Const, 0},
-		{"BPF_BUFMODE_BUFFER", Const, 0},
-		{"BPF_BUFMODE_ZBUF", Const, 0},
-		{"BPF_DFLTBUFSIZE", Const, 1},
-		{"BPF_DIRECTION_IN", Const, 1},
-		{"BPF_DIRECTION_OUT", Const, 1},
-		{"BPF_DIV", Const, 0},
-		{"BPF_H", Const, 0},
-		{"BPF_IMM", Const, 0},
-		{"BPF_IND", Const, 0},
-		{"BPF_JA", Const, 0},
-		{"BPF_JEQ", Const, 0},
-		{"BPF_JGE", Const, 0},
-		{"BPF_JGT", Const, 0},
-		{"BPF_JMP", Const, 0},
-		{"BPF_JSET", Const, 0},
-		{"BPF_K", Const, 0},
-		{"BPF_LD", Const, 0},
-		{"BPF_LDX", Const, 0},
-		{"BPF_LEN", Const, 0},
-		{"BPF_LSH", Const, 0},
-		{"BPF_MAJOR_VERSION", Const, 0},
-		{"BPF_MAXBUFSIZE", Const, 0},
-		{"BPF_MAXINSNS", Const, 0},
-		{"BPF_MEM", Const, 0},
-		{"BPF_MEMWORDS", Const, 0},
-		{"BPF_MINBUFSIZE", Const, 0},
-		{"BPF_MINOR_VERSION", Const, 0},
-		{"BPF_MISC", Const, 0},
-		{"BPF_MSH", Const, 0},
-		{"BPF_MUL", Const, 0},
-		{"BPF_NEG", Const, 0},
-		{"BPF_OR", Const, 0},
-		{"BPF_RELEASE", Const, 0},
-		{"BPF_RET", Const, 0},
-		{"BPF_RSH", Const, 0},
-		{"BPF_ST", Const, 0},
-		{"BPF_STX", Const, 0},
-		{"BPF_SUB", Const, 0},
-		{"BPF_TAX", Const, 0},
-		{"BPF_TXA", Const, 0},
-		{"BPF_T_BINTIME", Const, 1},
-		{"BPF_T_BINTIME_FAST", Const, 1},
-		{"BPF_T_BINTIME_MONOTONIC", Const, 1},
-		{"BPF_T_BINTIME_MONOTONIC_FAST", Const, 1},
-		{"BPF_T_FAST", Const, 1},
-		{"BPF_T_FLAG_MASK", Const, 1},
-		{"BPF_T_FORMAT_MASK", Const, 1},
-		{"BPF_T_MICROTIME", Const, 1},
-		{"BPF_T_MICROTIME_FAST", Const, 1},
-		{"BPF_T_MICROTIME_MONOTONIC", Const, 1},
-		{"BPF_T_MICROTIME_MONOTONIC_FAST", Const, 1},
-		{"BPF_T_MONOTONIC", Const, 1},
-		{"BPF_T_MONOTONIC_FAST", Const, 1},
-		{"BPF_T_NANOTIME", Const, 1},
-		{"BPF_T_NANOTIME_FAST", Const, 1},
-		{"BPF_T_NANOTIME_MONOTONIC", Const, 1},
-		{"BPF_T_NANOTIME_MONOTONIC_FAST", Const, 1},
-		{"BPF_T_NONE", Const, 1},
-		{"BPF_T_NORMAL", Const, 1},
-		{"BPF_W", Const, 0},
-		{"BPF_X", Const, 0},
-		{"BRKINT", Const, 0},
-		{"Bind", Func, 0},
-		{"BindToDevice", Func, 0},
-		{"BpfBuflen", Func, 0},
-		{"BpfDatalink", Func, 0},
-		{"BpfHdr", Type, 0},
-		{"BpfHdr.Caplen", Field, 0},
-		{"BpfHdr.Datalen", Field, 0},
-		{"BpfHdr.Hdrlen", Field, 0},
-		{"BpfHdr.Pad_cgo_0", Field, 0},
-		{"BpfHdr.Tstamp", Field, 0},
-		{"BpfHeadercmpl", Func, 0},
-		{"BpfInsn", Type, 0},
-		{"BpfInsn.Code", Field, 0},
-		{"BpfInsn.Jf", Field, 0},
-		{"BpfInsn.Jt", Field, 0},
-		{"BpfInsn.K", Field, 0},
-		{"BpfInterface", Func, 0},
-		{"BpfJump", Func, 0},
-		{"BpfProgram", Type, 0},
-		{"BpfProgram.Insns", Field, 0},
-		{"BpfProgram.Len", Field, 0},
-		{"BpfProgram.Pad_cgo_0", Field, 0},
-		{"BpfStat", Type, 0},
-		{"BpfStat.Capt", Field, 2},
-		{"BpfStat.Drop", Field, 0},
-		{"BpfStat.Padding", Field, 2},
-		{"BpfStat.Recv", Field, 0},
-		{"BpfStats", Func, 0},
-		{"BpfStmt", Func, 0},
-		{"BpfTimeout", Func, 0},
-		{"BpfTimeval", Type, 2},
-		{"BpfTimeval.Sec", Field, 2},
-		{"BpfTimeval.Usec", Field, 2},
-		{"BpfVersion", Type, 0},
-		{"BpfVersion.Major", Field, 0},
-		{"BpfVersion.Minor", Field, 0},
-		{"BpfZbuf", Type, 0},
-		{"BpfZbuf.Bufa", Field, 0},
-		{"BpfZbuf.Bufb", Field, 0},
-		{"BpfZbuf.Buflen", Field, 0},
-		{"BpfZbufHeader", Type, 0},
-		{"BpfZbufHeader.Kernel_gen", Field, 0},
-		{"BpfZbufHeader.Kernel_len", Field, 0},
-		{"BpfZbufHeader.User_gen", Field, 0},
-		{"BpfZbufHeader.X_bzh_pad", Field, 0},
-		{"ByHandleFileInformation", Type, 0},
-		{"ByHandleFileInformation.CreationTime", Field, 0},
-		{"ByHandleFileInformation.FileAttributes", Field, 0},
-		{"ByHandleFileInformation.FileIndexHigh", Field, 0},
-		{"ByHandleFileInformation.FileIndexLow", Field, 0},
-		{"ByHandleFileInformation.FileSizeHigh", Field, 0},
-		{"ByHandleFileInformation.FileSizeLow", Field, 0},
-		{"ByHandleFileInformation.LastAccessTime", Field, 0},
-		{"ByHandleFileInformation.LastWriteTime", Field, 0},
-		{"ByHandleFileInformation.NumberOfLinks", Field, 0},
-		{"ByHandleFileInformation.VolumeSerialNumber", Field, 0},
-		{"BytePtrFromString", Func, 1},
-		{"ByteSliceFromString", Func, 1},
-		{"CCR0_FLUSH", Const, 1},
-		{"CERT_CHAIN_POLICY_AUTHENTICODE", Const, 0},
-		{"CERT_CHAIN_POLICY_AUTHENTICODE_TS", Const, 0},
-		{"CERT_CHAIN_POLICY_BASE", Const, 0},
-		{"CERT_CHAIN_POLICY_BASIC_CONSTRAINTS", Const, 0},
-		{"CERT_CHAIN_POLICY_EV", Const, 0},
-		{"CERT_CHAIN_POLICY_MICROSOFT_ROOT", Const, 0},
-		{"CERT_CHAIN_POLICY_NT_AUTH", Const, 0},
-		{"CERT_CHAIN_POLICY_SSL", Const, 0},
-		{"CERT_E_CN_NO_MATCH", Const, 0},
-		{"CERT_E_EXPIRED", Const, 0},
-		{"CERT_E_PURPOSE", Const, 0},
-		{"CERT_E_ROLE", Const, 0},
-		{"CERT_E_UNTRUSTEDROOT", Const, 0},
-		{"CERT_STORE_ADD_ALWAYS", Const, 0},
-		{"CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG", Const, 0},
-		{"CERT_STORE_PROV_MEMORY", Const, 0},
-		{"CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT", Const, 0},
-		{"CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT", Const, 0},
-		{"CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT", Const, 0},
-		{"CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT", Const, 0},
-		{"CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT", Const, 0},
-		{"CERT_TRUST_INVALID_BASIC_CONSTRAINTS", Const, 0},
-		{"CERT_TRUST_INVALID_EXTENSION", Const, 0},
-		{"CERT_TRUST_INVALID_NAME_CONSTRAINTS", Const, 0},
-		{"CERT_TRUST_INVALID_POLICY_CONSTRAINTS", Const, 0},
-		{"CERT_TRUST_IS_CYCLIC", Const, 0},
-		{"CERT_TRUST_IS_EXPLICIT_DISTRUST", Const, 0},
-		{"CERT_TRUST_IS_NOT_SIGNATURE_VALID", Const, 0},
-		{"CERT_TRUST_IS_NOT_TIME_VALID", Const, 0},
-		{"CERT_TRUST_IS_NOT_VALID_FOR_USAGE", Const, 0},
-		{"CERT_TRUST_IS_OFFLINE_REVOCATION", Const, 0},
-		{"CERT_TRUST_IS_REVOKED", Const, 0},
-		{"CERT_TRUST_IS_UNTRUSTED_ROOT", Const, 0},
-		{"CERT_TRUST_NO_ERROR", Const, 0},
-		{"CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY", Const, 0},
-		{"CERT_TRUST_REVOCATION_STATUS_UNKNOWN", Const, 0},
-		{"CFLUSH", Const, 1},
-		{"CLOCAL", Const, 0},
-		{"CLONE_CHILD_CLEARTID", Const, 2},
-		{"CLONE_CHILD_SETTID", Const, 2},
-		{"CLONE_CLEAR_SIGHAND", Const, 20},
-		{"CLONE_CSIGNAL", Const, 3},
-		{"CLONE_DETACHED", Const, 2},
-		{"CLONE_FILES", Const, 2},
-		{"CLONE_FS", Const, 2},
-		{"CLONE_INTO_CGROUP", Const, 20},
-		{"CLONE_IO", Const, 2},
-		{"CLONE_NEWCGROUP", Const, 20},
-		{"CLONE_NEWIPC", Const, 2},
-		{"CLONE_NEWNET", Const, 2},
-		{"CLONE_NEWNS", Const, 2},
-		{"CLONE_NEWPID", Const, 2},
-		{"CLONE_NEWTIME", Const, 20},
-		{"CLONE_NEWUSER", Const, 2},
-		{"CLONE_NEWUTS", Const, 2},
-		{"CLONE_PARENT", Const, 2},
-		{"CLONE_PARENT_SETTID", Const, 2},
-		{"CLONE_PID", Const, 3},
-		{"CLONE_PIDFD", Const, 20},
-		{"CLONE_PTRACE", Const, 2},
-		{"CLONE_SETTLS", Const, 2},
-		{"CLONE_SIGHAND", Const, 2},
-		{"CLONE_SYSVSEM", Const, 2},
-		{"CLONE_THREAD", Const, 2},
-		{"CLONE_UNTRACED", Const, 2},
-		{"CLONE_VFORK", Const, 2},
-		{"CLONE_VM", Const, 2},
-		{"CPUID_CFLUSH", Const, 1},
-		{"CREAD", Const, 0},
-		{"CREATE_ALWAYS", Const, 0},
-		{"CREATE_NEW", Const, 0},
-		{"CREATE_NEW_PROCESS_GROUP", Const, 1},
-		{"CREATE_UNICODE_ENVIRONMENT", Const, 0},
-		{"CRYPT_DEFAULT_CONTAINER_OPTIONAL", Const, 0},
-		{"CRYPT_DELETEKEYSET", Const, 0},
-		{"CRYPT_MACHINE_KEYSET", Const, 0},
-		{"CRYPT_NEWKEYSET", Const, 0},
-		{"CRYPT_SILENT", Const, 0},
-		{"CRYPT_VERIFYCONTEXT", Const, 0},
-		{"CS5", Const, 0},
-		{"CS6", Const, 0},
-		{"CS7", Const, 0},
-		{"CS8", Const, 0},
-		{"CSIZE", Const, 0},
-		{"CSTART", Const, 1},
-		{"CSTATUS", Const, 1},
-		{"CSTOP", Const, 1},
-		{"CSTOPB", Const, 0},
-		{"CSUSP", Const, 1},
-		{"CTL_MAXNAME", Const, 0},
-		{"CTL_NET", Const, 0},
-		{"CTL_QUERY", Const, 1},
-		{"CTRL_BREAK_EVENT", Const, 1},
-		{"CTRL_CLOSE_EVENT", Const, 14},
-		{"CTRL_C_EVENT", Const, 1},
-		{"CTRL_LOGOFF_EVENT", Const, 14},
-		{"CTRL_SHUTDOWN_EVENT", Const, 14},
-		{"CancelIo", Func, 0},
-		{"CancelIoEx", Func, 1},
-		{"CertAddCertificateContextToStore", Func, 0},
-		{"CertChainContext", Type, 0},
-		{"CertChainContext.ChainCount", Field, 0},
-		{"CertChainContext.Chains", Field, 0},
-		{"CertChainContext.HasRevocationFreshnessTime", Field, 0},
-		{"CertChainContext.LowerQualityChainCount", Field, 0},
-		{"CertChainContext.LowerQualityChains", Field, 0},
-		{"CertChainContext.RevocationFreshnessTime", Field, 0},
-		{"CertChainContext.Size", Field, 0},
-		{"CertChainContext.TrustStatus", Field, 0},
-		{"CertChainElement", Type, 0},
-		{"CertChainElement.ApplicationUsage", Field, 0},
-		{"CertChainElement.CertContext", Field, 0},
-		{"CertChainElement.ExtendedErrorInfo", Field, 0},
-		{"CertChainElement.IssuanceUsage", Field, 0},
-		{"CertChainElement.RevocationInfo", Field, 0},
-		{"CertChainElement.Size", Field, 0},
-		{"CertChainElement.TrustStatus", Field, 0},
-		{"CertChainPara", Type, 0},
-		{"CertChainPara.CacheResync", Field, 0},
-		{"CertChainPara.CheckRevocationFreshnessTime", Field, 0},
-		{"CertChainPara.RequestedUsage", Field, 0},
-		{"CertChainPara.RequstedIssuancePolicy", Field, 0},
-		{"CertChainPara.RevocationFreshnessTime", Field, 0},
-		{"CertChainPara.Size", Field, 0},
-		{"CertChainPara.URLRetrievalTimeout", Field, 0},
-		{"CertChainPolicyPara", Type, 0},
-		{"CertChainPolicyPara.ExtraPolicyPara", Field, 0},
-		{"CertChainPolicyPara.Flags", Field, 0},
-		{"CertChainPolicyPara.Size", Field, 0},
-		{"CertChainPolicyStatus", Type, 0},
-		{"CertChainPolicyStatus.ChainIndex", Field, 0},
-		{"CertChainPolicyStatus.ElementIndex", Field, 0},
-		{"CertChainPolicyStatus.Error", Field, 0},
-		{"CertChainPolicyStatus.ExtraPolicyStatus", Field, 0},
-		{"CertChainPolicyStatus.Size", Field, 0},
-		{"CertCloseStore", Func, 0},
-		{"CertContext", Type, 0},
-		{"CertContext.CertInfo", Field, 0},
-		{"CertContext.EncodedCert", Field, 0},
-		{"CertContext.EncodingType", Field, 0},
-		{"CertContext.Length", Field, 0},
-		{"CertContext.Store", Field, 0},
-		{"CertCreateCertificateContext", Func, 0},
-		{"CertEnhKeyUsage", Type, 0},
-		{"CertEnhKeyUsage.Length", Field, 0},
-		{"CertEnhKeyUsage.UsageIdentifiers", Field, 0},
-		{"CertEnumCertificatesInStore", Func, 0},
-		{"CertFreeCertificateChain", Func, 0},
-		{"CertFreeCertificateContext", Func, 0},
-		{"CertGetCertificateChain", Func, 0},
-		{"CertInfo", Type, 11},
-		{"CertOpenStore", Func, 0},
-		{"CertOpenSystemStore", Func, 0},
-		{"CertRevocationCrlInfo", Type, 11},
-		{"CertRevocationInfo", Type, 0},
-		{"CertRevocationInfo.CrlInfo", Field, 0},
-		{"CertRevocationInfo.FreshnessTime", Field, 0},
-		{"CertRevocationInfo.HasFreshnessTime", Field, 0},
-		{"CertRevocationInfo.OidSpecificInfo", Field, 0},
-		{"CertRevocationInfo.RevocationOid", Field, 0},
-		{"CertRevocationInfo.RevocationResult", Field, 0},
-		{"CertRevocationInfo.Size", Field, 0},
-		{"CertSimpleChain", Type, 0},
-		{"CertSimpleChain.Elements", Field, 0},
-		{"CertSimpleChain.HasRevocationFreshnessTime", Field, 0},
-		{"CertSimpleChain.NumElements", Field, 0},
-		{"CertSimpleChain.RevocationFreshnessTime", Field, 0},
-		{"CertSimpleChain.Size", Field, 0},
-		{"CertSimpleChain.TrustListInfo", Field, 0},
-		{"CertSimpleChain.TrustStatus", Field, 0},
-		{"CertTrustListInfo", Type, 11},
-		{"CertTrustStatus", Type, 0},
-		{"CertTrustStatus.ErrorStatus", Field, 0},
-		{"CertTrustStatus.InfoStatus", Field, 0},
-		{"CertUsageMatch", Type, 0},
-		{"CertUsageMatch.Type", Field, 0},
-		{"CertUsageMatch.Usage", Field, 0},
-		{"CertVerifyCertificateChainPolicy", Func, 0},
-		{"Chdir", Func, 0},
-		{"CheckBpfVersion", Func, 0},
-		{"Chflags", Func, 0},
-		{"Chmod", Func, 0},
-		{"Chown", Func, 0},
-		{"Chroot", Func, 0},
-		{"Clearenv", Func, 0},
-		{"Close", Func, 0},
-		{"CloseHandle", Func, 0},
-		{"CloseOnExec", Func, 0},
-		{"Closesocket", Func, 0},
-		{"CmsgLen", Func, 0},
-		{"CmsgSpace", Func, 0},
-		{"Cmsghdr", Type, 0},
-		{"Cmsghdr.Len", Field, 0},
-		{"Cmsghdr.Level", Field, 0},
-		{"Cmsghdr.Type", Field, 0},
-		{"Cmsghdr.X__cmsg_data", Field, 0},
-		{"CommandLineToArgv", Func, 0},
-		{"ComputerName", Func, 0},
-		{"Conn", Type, 9},
-		{"Connect", Func, 0},
-		{"ConnectEx", Func, 1},
-		{"ConvertSidToStringSid", Func, 0},
-		{"ConvertStringSidToSid", Func, 0},
-		{"CopySid", Func, 0},
-		{"Creat", Func, 0},
-		{"CreateDirectory", Func, 0},
-		{"CreateFile", Func, 0},
-		{"CreateFileMapping", Func, 0},
-		{"CreateHardLink", Func, 4},
-		{"CreateIoCompletionPort", Func, 0},
-		{"CreatePipe", Func, 0},
-		{"CreateProcess", Func, 0},
-		{"CreateProcessAsUser", Func, 10},
-		{"CreateSymbolicLink", Func, 4},
-		{"CreateToolhelp32Snapshot", Func, 4},
-		{"Credential", Type, 0},
-		{"Credential.Gid", Field, 0},
-		{"Credential.Groups", Field, 0},
-		{"Credential.NoSetGroups", Field, 9},
-		{"Credential.Uid", Field, 0},
-		{"CryptAcquireContext", Func, 0},
-		{"CryptGenRandom", Func, 0},
-		{"CryptReleaseContext", Func, 0},
-		{"DIOCBSFLUSH", Const, 1},
-		{"DIOCOSFPFLUSH", Const, 1},
-		{"DLL", Type, 0},
-		{"DLL.Handle", Field, 0},
-		{"DLL.Name", Field, 0},
-		{"DLLError", Type, 0},
-		{"DLLError.Err", Field, 0},
-		{"DLLError.Msg", Field, 0},
-		{"DLLError.ObjName", Field, 0},
-		{"DLT_A429", Const, 0},
-		{"DLT_A653_ICM", Const, 0},
-		{"DLT_AIRONET_HEADER", Const, 0},
-		{"DLT_AOS", Const, 1},
-		{"DLT_APPLE_IP_OVER_IEEE1394", Const, 0},
-		{"DLT_ARCNET", Const, 0},
-		{"DLT_ARCNET_LINUX", Const, 0},
-		{"DLT_ATM_CLIP", Const, 0},
-		{"DLT_ATM_RFC1483", Const, 0},
-		{"DLT_AURORA", Const, 0},
-		{"DLT_AX25", Const, 0},
-		{"DLT_AX25_KISS", Const, 0},
-		{"DLT_BACNET_MS_TP", Const, 0},
-		{"DLT_BLUETOOTH_HCI_H4", Const, 0},
-		{"DLT_BLUETOOTH_HCI_H4_WITH_PHDR", Const, 0},
-		{"DLT_CAN20B", Const, 0},
-		{"DLT_CAN_SOCKETCAN", Const, 1},
-		{"DLT_CHAOS", Const, 0},
-		{"DLT_CHDLC", Const, 0},
-		{"DLT_CISCO_IOS", Const, 0},
-		{"DLT_C_HDLC", Const, 0},
-		{"DLT_C_HDLC_WITH_DIR", Const, 0},
-		{"DLT_DBUS", Const, 1},
-		{"DLT_DECT", Const, 1},
-		{"DLT_DOCSIS", Const, 0},
-		{"DLT_DVB_CI", Const, 1},
-		{"DLT_ECONET", Const, 0},
-		{"DLT_EN10MB", Const, 0},
-		{"DLT_EN3MB", Const, 0},
-		{"DLT_ENC", Const, 0},
-		{"DLT_ERF", Const, 0},
-		{"DLT_ERF_ETH", Const, 0},
-		{"DLT_ERF_POS", Const, 0},
-		{"DLT_FC_2", Const, 1},
-		{"DLT_FC_2_WITH_FRAME_DELIMS", Const, 1},
-		{"DLT_FDDI", Const, 0},
-		{"DLT_FLEXRAY", Const, 0},
-		{"DLT_FRELAY", Const, 0},
-		{"DLT_FRELAY_WITH_DIR", Const, 0},
-		{"DLT_GCOM_SERIAL", Const, 0},
-		{"DLT_GCOM_T1E1", Const, 0},
-		{"DLT_GPF_F", Const, 0},
-		{"DLT_GPF_T", Const, 0},
-		{"DLT_GPRS_LLC", Const, 0},
-		{"DLT_GSMTAP_ABIS", Const, 1},
-		{"DLT_GSMTAP_UM", Const, 1},
-		{"DLT_HDLC", Const, 1},
-		{"DLT_HHDLC", Const, 0},
-		{"DLT_HIPPI", Const, 1},
-		{"DLT_IBM_SN", Const, 0},
-		{"DLT_IBM_SP", Const, 0},
-		{"DLT_IEEE802", Const, 0},
-		{"DLT_IEEE802_11", Const, 0},
-		{"DLT_IEEE802_11_RADIO", Const, 0},
-		{"DLT_IEEE802_11_RADIO_AVS", Const, 0},
-		{"DLT_IEEE802_15_4", Const, 0},
-		{"DLT_IEEE802_15_4_LINUX", Const, 0},
-		{"DLT_IEEE802_15_4_NOFCS", Const, 1},
-		{"DLT_IEEE802_15_4_NONASK_PHY", Const, 0},
-		{"DLT_IEEE802_16_MAC_CPS", Const, 0},
-		{"DLT_IEEE802_16_MAC_CPS_RADIO", Const, 0},
-		{"DLT_IPFILTER", Const, 0},
-		{"DLT_IPMB", Const, 0},
-		{"DLT_IPMB_LINUX", Const, 0},
-		{"DLT_IPNET", Const, 1},
-		{"DLT_IPOIB", Const, 1},
-		{"DLT_IPV4", Const, 1},
-		{"DLT_IPV6", Const, 1},
-		{"DLT_IP_OVER_FC", Const, 0},
-		{"DLT_JUNIPER_ATM1", Const, 0},
-		{"DLT_JUNIPER_ATM2", Const, 0},
-		{"DLT_JUNIPER_ATM_CEMIC", Const, 1},
-		{"DLT_JUNIPER_CHDLC", Const, 0},
-		{"DLT_JUNIPER_ES", Const, 0},
-		{"DLT_JUNIPER_ETHER", Const, 0},
-		{"DLT_JUNIPER_FIBRECHANNEL", Const, 1},
-		{"DLT_JUNIPER_FRELAY", Const, 0},
-		{"DLT_JUNIPER_GGSN", Const, 0},
-		{"DLT_JUNIPER_ISM", Const, 0},
-		{"DLT_JUNIPER_MFR", Const, 0},
-		{"DLT_JUNIPER_MLFR", Const, 0},
-		{"DLT_JUNIPER_MLPPP", Const, 0},
-		{"DLT_JUNIPER_MONITOR", Const, 0},
-		{"DLT_JUNIPER_PIC_PEER", Const, 0},
-		{"DLT_JUNIPER_PPP", Const, 0},
-		{"DLT_JUNIPER_PPPOE", Const, 0},
-		{"DLT_JUNIPER_PPPOE_ATM", Const, 0},
-		{"DLT_JUNIPER_SERVICES", Const, 0},
-		{"DLT_JUNIPER_SRX_E2E", Const, 1},
-		{"DLT_JUNIPER_ST", Const, 0},
-		{"DLT_JUNIPER_VP", Const, 0},
-		{"DLT_JUNIPER_VS", Const, 1},
-		{"DLT_LAPB_WITH_DIR", Const, 0},
-		{"DLT_LAPD", Const, 0},
-		{"DLT_LIN", Const, 0},
-		{"DLT_LINUX_EVDEV", Const, 1},
-		{"DLT_LINUX_IRDA", Const, 0},
-		{"DLT_LINUX_LAPD", Const, 0},
-		{"DLT_LINUX_PPP_WITHDIRECTION", Const, 0},
-		{"DLT_LINUX_SLL", Const, 0},
-		{"DLT_LOOP", Const, 0},
-		{"DLT_LTALK", Const, 0},
-		{"DLT_MATCHING_MAX", Const, 1},
-		{"DLT_MATCHING_MIN", Const, 1},
-		{"DLT_MFR", Const, 0},
-		{"DLT_MOST", Const, 0},
-		{"DLT_MPEG_2_TS", Const, 1},
-		{"DLT_MPLS", Const, 1},
-		{"DLT_MTP2", Const, 0},
-		{"DLT_MTP2_WITH_PHDR", Const, 0},
-		{"DLT_MTP3", Const, 0},
-		{"DLT_MUX27010", Const, 1},
-		{"DLT_NETANALYZER", Const, 1},
-		{"DLT_NETANALYZER_TRANSPARENT", Const, 1},
-		{"DLT_NFC_LLCP", Const, 1},
-		{"DLT_NFLOG", Const, 1},
-		{"DLT_NG40", Const, 1},
-		{"DLT_NULL", Const, 0},
-		{"DLT_PCI_EXP", Const, 0},
-		{"DLT_PFLOG", Const, 0},
-		{"DLT_PFSYNC", Const, 0},
-		{"DLT_PPI", Const, 0},
-		{"DLT_PPP", Const, 0},
-		{"DLT_PPP_BSDOS", Const, 0},
-		{"DLT_PPP_ETHER", Const, 0},
-		{"DLT_PPP_PPPD", Const, 0},
-		{"DLT_PPP_SERIAL", Const, 0},
-		{"DLT_PPP_WITH_DIR", Const, 0},
-		{"DLT_PPP_WITH_DIRECTION", Const, 0},
-		{"DLT_PRISM_HEADER", Const, 0},
-		{"DLT_PRONET", Const, 0},
-		{"DLT_RAIF1", Const, 0},
-		{"DLT_RAW", Const, 0},
-		{"DLT_RAWAF_MASK", Const, 1},
-		{"DLT_RIO", Const, 0},
-		{"DLT_SCCP", Const, 0},
-		{"DLT_SITA", Const, 0},
-		{"DLT_SLIP", Const, 0},
-		{"DLT_SLIP_BSDOS", Const, 0},
-		{"DLT_STANAG_5066_D_PDU", Const, 1},
-		{"DLT_SUNATM", Const, 0},
-		{"DLT_SYMANTEC_FIREWALL", Const, 0},
-		{"DLT_TZSP", Const, 0},
-		{"DLT_USB", Const, 0},
-		{"DLT_USB_LINUX", Const, 0},
-		{"DLT_USB_LINUX_MMAPPED", Const, 1},
-		{"DLT_USER0", Const, 0},
-		{"DLT_USER1", Const, 0},
-		{"DLT_USER10", Const, 0},
-		{"DLT_USER11", Const, 0},
-		{"DLT_USER12", Const, 0},
-		{"DLT_USER13", Const, 0},
-		{"DLT_USER14", Const, 0},
-		{"DLT_USER15", Const, 0},
-		{"DLT_USER2", Const, 0},
-		{"DLT_USER3", Const, 0},
-		{"DLT_USER4", Const, 0},
-		{"DLT_USER5", Const, 0},
-		{"DLT_USER6", Const, 0},
-		{"DLT_USER7", Const, 0},
-		{"DLT_USER8", Const, 0},
-		{"DLT_USER9", Const, 0},
-		{"DLT_WIHART", Const, 1},
-		{"DLT_X2E_SERIAL", Const, 0},
-		{"DLT_X2E_XORAYA", Const, 0},
-		{"DNSMXData", Type, 0},
-		{"DNSMXData.NameExchange", Field, 0},
-		{"DNSMXData.Pad", Field, 0},
-		{"DNSMXData.Preference", Field, 0},
-		{"DNSPTRData", Type, 0},
-		{"DNSPTRData.Host", Field, 0},
-		{"DNSRecord", Type, 0},
-		{"DNSRecord.Data", Field, 0},
-		{"DNSRecord.Dw", Field, 0},
-		{"DNSRecord.Length", Field, 0},
-		{"DNSRecord.Name", Field, 0},
-		{"DNSRecord.Next", Field, 0},
-		{"DNSRecord.Reserved", Field, 0},
-		{"DNSRecord.Ttl", Field, 0},
-		{"DNSRecord.Type", Field, 0},
-		{"DNSSRVData", Type, 0},
-		{"DNSSRVData.Pad", Field, 0},
-		{"DNSSRVData.Port", Field, 0},
-		{"DNSSRVData.Priority", Field, 0},
-		{"DNSSRVData.Target", Field, 0},
-		{"DNSSRVData.Weight", Field, 0},
-		{"DNSTXTData", Type, 0},
-		{"DNSTXTData.StringArray", Field, 0},
-		{"DNSTXTData.StringCount", Field, 0},
-		{"DNS_INFO_NO_RECORDS", Const, 4},
-		{"DNS_TYPE_A", Const, 0},
-		{"DNS_TYPE_A6", Const, 0},
-		{"DNS_TYPE_AAAA", Const, 0},
-		{"DNS_TYPE_ADDRS", Const, 0},
-		{"DNS_TYPE_AFSDB", Const, 0},
-		{"DNS_TYPE_ALL", Const, 0},
-		{"DNS_TYPE_ANY", Const, 0},
-		{"DNS_TYPE_ATMA", Const, 0},
-		{"DNS_TYPE_AXFR", Const, 0},
-		{"DNS_TYPE_CERT", Const, 0},
-		{"DNS_TYPE_CNAME", Const, 0},
-		{"DNS_TYPE_DHCID", Const, 0},
-		{"DNS_TYPE_DNAME", Const, 0},
-		{"DNS_TYPE_DNSKEY", Const, 0},
-		{"DNS_TYPE_DS", Const, 0},
-		{"DNS_TYPE_EID", Const, 0},
-		{"DNS_TYPE_GID", Const, 0},
-		{"DNS_TYPE_GPOS", Const, 0},
-		{"DNS_TYPE_HINFO", Const, 0},
-		{"DNS_TYPE_ISDN", Const, 0},
-		{"DNS_TYPE_IXFR", Const, 0},
-		{"DNS_TYPE_KEY", Const, 0},
-		{"DNS_TYPE_KX", Const, 0},
-		{"DNS_TYPE_LOC", Const, 0},
-		{"DNS_TYPE_MAILA", Const, 0},
-		{"DNS_TYPE_MAILB", Const, 0},
-		{"DNS_TYPE_MB", Const, 0},
-		{"DNS_TYPE_MD", Const, 0},
-		{"DNS_TYPE_MF", Const, 0},
-		{"DNS_TYPE_MG", Const, 0},
-		{"DNS_TYPE_MINFO", Const, 0},
-		{"DNS_TYPE_MR", Const, 0},
-		{"DNS_TYPE_MX", Const, 0},
-		{"DNS_TYPE_NAPTR", Const, 0},
-		{"DNS_TYPE_NBSTAT", Const, 0},
-		{"DNS_TYPE_NIMLOC", Const, 0},
-		{"DNS_TYPE_NS", Const, 0},
-		{"DNS_TYPE_NSAP", Const, 0},
-		{"DNS_TYPE_NSAPPTR", Const, 0},
-		{"DNS_TYPE_NSEC", Const, 0},
-		{"DNS_TYPE_NULL", Const, 0},
-		{"DNS_TYPE_NXT", Const, 0},
-		{"DNS_TYPE_OPT", Const, 0},
-		{"DNS_TYPE_PTR", Const, 0},
-		{"DNS_TYPE_PX", Const, 0},
-		{"DNS_TYPE_RP", Const, 0},
-		{"DNS_TYPE_RRSIG", Const, 0},
-		{"DNS_TYPE_RT", Const, 0},
-		{"DNS_TYPE_SIG", Const, 0},
-		{"DNS_TYPE_SINK", Const, 0},
-		{"DNS_TYPE_SOA", Const, 0},
-		{"DNS_TYPE_SRV", Const, 0},
-		{"DNS_TYPE_TEXT", Const, 0},
-		{"DNS_TYPE_TKEY", Const, 0},
-		{"DNS_TYPE_TSIG", Const, 0},
-		{"DNS_TYPE_UID", Const, 0},
-		{"DNS_TYPE_UINFO", Const, 0},
-		{"DNS_TYPE_UNSPEC", Const, 0},
-		{"DNS_TYPE_WINS", Const, 0},
-		{"DNS_TYPE_WINSR", Const, 0},
-		{"DNS_TYPE_WKS", Const, 0},
-		{"DNS_TYPE_X25", Const, 0},
-		{"DT_BLK", Const, 0},
-		{"DT_CHR", Const, 0},
-		{"DT_DIR", Const, 0},
-		{"DT_FIFO", Const, 0},
-		{"DT_LNK", Const, 0},
-		{"DT_REG", Const, 0},
-		{"DT_SOCK", Const, 0},
-		{"DT_UNKNOWN", Const, 0},
-		{"DT_WHT", Const, 0},
-		{"DUPLICATE_CLOSE_SOURCE", Const, 0},
-		{"DUPLICATE_SAME_ACCESS", Const, 0},
-		{"DeleteFile", Func, 0},
-		{"DetachLsf", Func, 0},
-		{"DeviceIoControl", Func, 4},
-		{"Dirent", Type, 0},
-		{"Dirent.Fileno", Field, 0},
-		{"Dirent.Ino", Field, 0},
-		{"Dirent.Name", Field, 0},
-		{"Dirent.Namlen", Field, 0},
-		{"Dirent.Off", Field, 0},
-		{"Dirent.Pad0", Field, 12},
-		{"Dirent.Pad1", Field, 12},
-		{"Dirent.Pad_cgo_0", Field, 0},
-		{"Dirent.Reclen", Field, 0},
-		{"Dirent.Seekoff", Field, 0},
-		{"Dirent.Type", Field, 0},
-		{"Dirent.X__d_padding", Field, 3},
-		{"DnsNameCompare", Func, 4},
-		{"DnsQuery", Func, 0},
-		{"DnsRecordListFree", Func, 0},
-		{"DnsSectionAdditional", Const, 4},
-		{"DnsSectionAnswer", Const, 4},
-		{"DnsSectionAuthority", Const, 4},
-		{"DnsSectionQuestion", Const, 4},
-		{"Dup", Func, 0},
-		{"Dup2", Func, 0},
-		{"Dup3", Func, 2},
-		{"DuplicateHandle", Func, 0},
-		{"E2BIG", Const, 0},
-		{"EACCES", Const, 0},
-		{"EADDRINUSE", Const, 0},
-		{"EADDRNOTAVAIL", Const, 0},
-		{"EADV", Const, 0},
-		{"EAFNOSUPPORT", Const, 0},
-		{"EAGAIN", Const, 0},
-		{"EALREADY", Const, 0},
-		{"EAUTH", Const, 0},
-		{"EBADARCH", Const, 0},
-		{"EBADE", Const, 0},
-		{"EBADEXEC", Const, 0},
-		{"EBADF", Const, 0},
-		{"EBADFD", Const, 0},
-		{"EBADMACHO", Const, 0},
-		{"EBADMSG", Const, 0},
-		{"EBADR", Const, 0},
-		{"EBADRPC", Const, 0},
-		{"EBADRQC", Const, 0},
-		{"EBADSLT", Const, 0},
-		{"EBFONT", Const, 0},
-		{"EBUSY", Const, 0},
-		{"ECANCELED", Const, 0},
-		{"ECAPMODE", Const, 1},
-		{"ECHILD", Const, 0},
-		{"ECHO", Const, 0},
-		{"ECHOCTL", Const, 0},
-		{"ECHOE", Const, 0},
-		{"ECHOK", Const, 0},
-		{"ECHOKE", Const, 0},
-		{"ECHONL", Const, 0},
-		{"ECHOPRT", Const, 0},
-		{"ECHRNG", Const, 0},
-		{"ECOMM", Const, 0},
-		{"ECONNABORTED", Const, 0},
-		{"ECONNREFUSED", Const, 0},
-		{"ECONNRESET", Const, 0},
-		{"EDEADLK", Const, 0},
-		{"EDEADLOCK", Const, 0},
-		{"EDESTADDRREQ", Const, 0},
-		{"EDEVERR", Const, 0},
-		{"EDOM", Const, 0},
-		{"EDOOFUS", Const, 0},
-		{"EDOTDOT", Const, 0},
-		{"EDQUOT", Const, 0},
-		{"EEXIST", Const, 0},
-		{"EFAULT", Const, 0},
-		{"EFBIG", Const, 0},
-		{"EFER_LMA", Const, 1},
-		{"EFER_LME", Const, 1},
-		{"EFER_NXE", Const, 1},
-		{"EFER_SCE", Const, 1},
-		{"EFTYPE", Const, 0},
-		{"EHOSTDOWN", Const, 0},
-		{"EHOSTUNREACH", Const, 0},
-		{"EHWPOISON", Const, 0},
-		{"EIDRM", Const, 0},
-		{"EILSEQ", Const, 0},
-		{"EINPROGRESS", Const, 0},
-		{"EINTR", Const, 0},
-		{"EINVAL", Const, 0},
-		{"EIO", Const, 0},
-		{"EIPSEC", Const, 1},
-		{"EISCONN", Const, 0},
-		{"EISDIR", Const, 0},
-		{"EISNAM", Const, 0},
-		{"EKEYEXPIRED", Const, 0},
-		{"EKEYREJECTED", Const, 0},
-		{"EKEYREVOKED", Const, 0},
-		{"EL2HLT", Const, 0},
-		{"EL2NSYNC", Const, 0},
-		{"EL3HLT", Const, 0},
-		{"EL3RST", Const, 0},
-		{"ELAST", Const, 0},
-		{"ELF_NGREG", Const, 0},
-		{"ELF_PRARGSZ", Const, 0},
-		{"ELIBACC", Const, 0},
-		{"ELIBBAD", Const, 0},
-		{"ELIBEXEC", Const, 0},
-		{"ELIBMAX", Const, 0},
-		{"ELIBSCN", Const, 0},
-		{"ELNRNG", Const, 0},
-		{"ELOOP", Const, 0},
-		{"EMEDIUMTYPE", Const, 0},
-		{"EMFILE", Const, 0},
-		{"EMLINK", Const, 0},
-		{"EMSGSIZE", Const, 0},
-		{"EMT_TAGOVF", Const, 1},
-		{"EMULTIHOP", Const, 0},
-		{"EMUL_ENABLED", Const, 1},
-		{"EMUL_LINUX", Const, 1},
-		{"EMUL_LINUX32", Const, 1},
-		{"EMUL_MAXID", Const, 1},
-		{"EMUL_NATIVE", Const, 1},
-		{"ENAMETOOLONG", Const, 0},
-		{"ENAVAIL", Const, 0},
-		{"ENDRUNDISC", Const, 1},
-		{"ENEEDAUTH", Const, 0},
-		{"ENETDOWN", Const, 0},
-		{"ENETRESET", Const, 0},
-		{"ENETUNREACH", Const, 0},
-		{"ENFILE", Const, 0},
-		{"ENOANO", Const, 0},
-		{"ENOATTR", Const, 0},
-		{"ENOBUFS", Const, 0},
-		{"ENOCSI", Const, 0},
-		{"ENODATA", Const, 0},
-		{"ENODEV", Const, 0},
-		{"ENOENT", Const, 0},
-		{"ENOEXEC", Const, 0},
-		{"ENOKEY", Const, 0},
-		{"ENOLCK", Const, 0},
-		{"ENOLINK", Const, 0},
-		{"ENOMEDIUM", Const, 0},
-		{"ENOMEM", Const, 0},
-		{"ENOMSG", Const, 0},
-		{"ENONET", Const, 0},
-		{"ENOPKG", Const, 0},
-		{"ENOPOLICY", Const, 0},
-		{"ENOPROTOOPT", Const, 0},
-		{"ENOSPC", Const, 0},
-		{"ENOSR", Const, 0},
-		{"ENOSTR", Const, 0},
-		{"ENOSYS", Const, 0},
-		{"ENOTBLK", Const, 0},
-		{"ENOTCAPABLE", Const, 0},
-		{"ENOTCONN", Const, 0},
-		{"ENOTDIR", Const, 0},
-		{"ENOTEMPTY", Const, 0},
-		{"ENOTNAM", Const, 0},
-		{"ENOTRECOVERABLE", Const, 0},
-		{"ENOTSOCK", Const, 0},
-		{"ENOTSUP", Const, 0},
-		{"ENOTTY", Const, 0},
-		{"ENOTUNIQ", Const, 0},
-		{"ENXIO", Const, 0},
-		{"EN_SW_CTL_INF", Const, 1},
-		{"EN_SW_CTL_PREC", Const, 1},
-		{"EN_SW_CTL_ROUND", Const, 1},
-		{"EN_SW_DATACHAIN", Const, 1},
-		{"EN_SW_DENORM", Const, 1},
-		{"EN_SW_INVOP", Const, 1},
-		{"EN_SW_OVERFLOW", Const, 1},
-		{"EN_SW_PRECLOSS", Const, 1},
-		{"EN_SW_UNDERFLOW", Const, 1},
-		{"EN_SW_ZERODIV", Const, 1},
-		{"EOPNOTSUPP", Const, 0},
-		{"EOVERFLOW", Const, 0},
-		{"EOWNERDEAD", Const, 0},
-		{"EPERM", Const, 0},
-		{"EPFNOSUPPORT", Const, 0},
-		{"EPIPE", Const, 0},
-		{"EPOLLERR", Const, 0},
-		{"EPOLLET", Const, 0},
-		{"EPOLLHUP", Const, 0},
-		{"EPOLLIN", Const, 0},
-		{"EPOLLMSG", Const, 0},
-		{"EPOLLONESHOT", Const, 0},
-		{"EPOLLOUT", Const, 0},
-		{"EPOLLPRI", Const, 0},
-		{"EPOLLRDBAND", Const, 0},
-		{"EPOLLRDHUP", Const, 0},
-		{"EPOLLRDNORM", Const, 0},
-		{"EPOLLWRBAND", Const, 0},
-		{"EPOLLWRNORM", Const, 0},
-		{"EPOLL_CLOEXEC", Const, 0},
-		{"EPOLL_CTL_ADD", Const, 0},
-		{"EPOLL_CTL_DEL", Const, 0},
-		{"EPOLL_CTL_MOD", Const, 0},
-		{"EPOLL_NONBLOCK", Const, 0},
-		{"EPROCLIM", Const, 0},
-		{"EPROCUNAVAIL", Const, 0},
-		{"EPROGMISMATCH", Const, 0},
-		{"EPROGUNAVAIL", Const, 0},
-		{"EPROTO", Const, 0},
-		{"EPROTONOSUPPORT", Const, 0},
-		{"EPROTOTYPE", Const, 0},
-		{"EPWROFF", Const, 0},
-		{"EQFULL", Const, 16},
-		{"ERANGE", Const, 0},
-		{"EREMCHG", Const, 0},
-		{"EREMOTE", Const, 0},
-		{"EREMOTEIO", Const, 0},
-		{"ERESTART", Const, 0},
-		{"ERFKILL", Const, 0},
-		{"EROFS", Const, 0},
-		{"ERPCMISMATCH", Const, 0},
-		{"ERROR_ACCESS_DENIED", Const, 0},
-		{"ERROR_ALREADY_EXISTS", Const, 0},
-		{"ERROR_BROKEN_PIPE", Const, 0},
-		{"ERROR_BUFFER_OVERFLOW", Const, 0},
-		{"ERROR_DIR_NOT_EMPTY", Const, 8},
-		{"ERROR_ENVVAR_NOT_FOUND", Const, 0},
-		{"ERROR_FILE_EXISTS", Const, 0},
-		{"ERROR_FILE_NOT_FOUND", Const, 0},
-		{"ERROR_HANDLE_EOF", Const, 2},
-		{"ERROR_INSUFFICIENT_BUFFER", Const, 0},
-		{"ERROR_IO_PENDING", Const, 0},
-		{"ERROR_MOD_NOT_FOUND", Const, 0},
-		{"ERROR_MORE_DATA", Const, 3},
-		{"ERROR_NETNAME_DELETED", Const, 3},
-		{"ERROR_NOT_FOUND", Const, 1},
-		{"ERROR_NO_MORE_FILES", Const, 0},
-		{"ERROR_OPERATION_ABORTED", Const, 0},
-		{"ERROR_PATH_NOT_FOUND", Const, 0},
-		{"ERROR_PRIVILEGE_NOT_HELD", Const, 4},
-		{"ERROR_PROC_NOT_FOUND", Const, 0},
-		{"ESHLIBVERS", Const, 0},
-		{"ESHUTDOWN", Const, 0},
-		{"ESOCKTNOSUPPORT", Const, 0},
-		{"ESPIPE", Const, 0},
-		{"ESRCH", Const, 0},
-		{"ESRMNT", Const, 0},
-		{"ESTALE", Const, 0},
-		{"ESTRPIPE", Const, 0},
-		{"ETHERCAP_JUMBO_MTU", Const, 1},
-		{"ETHERCAP_VLAN_HWTAGGING", Const, 1},
-		{"ETHERCAP_VLAN_MTU", Const, 1},
-		{"ETHERMIN", Const, 1},
-		{"ETHERMTU", Const, 1},
-		{"ETHERMTU_JUMBO", Const, 1},
-		{"ETHERTYPE_8023", Const, 1},
-		{"ETHERTYPE_AARP", Const, 1},
-		{"ETHERTYPE_ACCTON", Const, 1},
-		{"ETHERTYPE_AEONIC", Const, 1},
-		{"ETHERTYPE_ALPHA", Const, 1},
-		{"ETHERTYPE_AMBER", Const, 1},
-		{"ETHERTYPE_AMOEBA", Const, 1},
-		{"ETHERTYPE_AOE", Const, 1},
-		{"ETHERTYPE_APOLLO", Const, 1},
-		{"ETHERTYPE_APOLLODOMAIN", Const, 1},
-		{"ETHERTYPE_APPLETALK", Const, 1},
-		{"ETHERTYPE_APPLITEK", Const, 1},
-		{"ETHERTYPE_ARGONAUT", Const, 1},
-		{"ETHERTYPE_ARP", Const, 1},
-		{"ETHERTYPE_AT", Const, 1},
-		{"ETHERTYPE_ATALK", Const, 1},
-		{"ETHERTYPE_ATOMIC", Const, 1},
-		{"ETHERTYPE_ATT", Const, 1},
-		{"ETHERTYPE_ATTSTANFORD", Const, 1},
-		{"ETHERTYPE_AUTOPHON", Const, 1},
-		{"ETHERTYPE_AXIS", Const, 1},
-		{"ETHERTYPE_BCLOOP", Const, 1},
-		{"ETHERTYPE_BOFL", Const, 1},
-		{"ETHERTYPE_CABLETRON", Const, 1},
-		{"ETHERTYPE_CHAOS", Const, 1},
-		{"ETHERTYPE_COMDESIGN", Const, 1},
-		{"ETHERTYPE_COMPUGRAPHIC", Const, 1},
-		{"ETHERTYPE_COUNTERPOINT", Const, 1},
-		{"ETHERTYPE_CRONUS", Const, 1},
-		{"ETHERTYPE_CRONUSVLN", Const, 1},
-		{"ETHERTYPE_DCA", Const, 1},
-		{"ETHERTYPE_DDE", Const, 1},
-		{"ETHERTYPE_DEBNI", Const, 1},
-		{"ETHERTYPE_DECAM", Const, 1},
-		{"ETHERTYPE_DECCUST", Const, 1},
-		{"ETHERTYPE_DECDIAG", Const, 1},
-		{"ETHERTYPE_DECDNS", Const, 1},
-		{"ETHERTYPE_DECDTS", Const, 1},
-		{"ETHERTYPE_DECEXPER", Const, 1},
-		{"ETHERTYPE_DECLAST", Const, 1},
-		{"ETHERTYPE_DECLTM", Const, 1},
-		{"ETHERTYPE_DECMUMPS", Const, 1},
-		{"ETHERTYPE_DECNETBIOS", Const, 1},
-		{"ETHERTYPE_DELTACON", Const, 1},
-		{"ETHERTYPE_DIDDLE", Const, 1},
-		{"ETHERTYPE_DLOG1", Const, 1},
-		{"ETHERTYPE_DLOG2", Const, 1},
-		{"ETHERTYPE_DN", Const, 1},
-		{"ETHERTYPE_DOGFIGHT", Const, 1},
-		{"ETHERTYPE_DSMD", Const, 1},
-		{"ETHERTYPE_ECMA", Const, 1},
-		{"ETHERTYPE_ENCRYPT", Const, 1},
-		{"ETHERTYPE_ES", Const, 1},
-		{"ETHERTYPE_EXCELAN", Const, 1},
-		{"ETHERTYPE_EXPERDATA", Const, 1},
-		{"ETHERTYPE_FLIP", Const, 1},
-		{"ETHERTYPE_FLOWCONTROL", Const, 1},
-		{"ETHERTYPE_FRARP", Const, 1},
-		{"ETHERTYPE_GENDYN", Const, 1},
-		{"ETHERTYPE_HAYES", Const, 1},
-		{"ETHERTYPE_HIPPI_FP", Const, 1},
-		{"ETHERTYPE_HITACHI", Const, 1},
-		{"ETHERTYPE_HP", Const, 1},
-		{"ETHERTYPE_IEEEPUP", Const, 1},
-		{"ETHERTYPE_IEEEPUPAT", Const, 1},
-		{"ETHERTYPE_IMLBL", Const, 1},
-		{"ETHERTYPE_IMLBLDIAG", Const, 1},
-		{"ETHERTYPE_IP", Const, 1},
-		{"ETHERTYPE_IPAS", Const, 1},
-		{"ETHERTYPE_IPV6", Const, 1},
-		{"ETHERTYPE_IPX", Const, 1},
-		{"ETHERTYPE_IPXNEW", Const, 1},
-		{"ETHERTYPE_KALPANA", Const, 1},
-		{"ETHERTYPE_LANBRIDGE", Const, 1},
-		{"ETHERTYPE_LANPROBE", Const, 1},
-		{"ETHERTYPE_LAT", Const, 1},
-		{"ETHERTYPE_LBACK", Const, 1},
-		{"ETHERTYPE_LITTLE", Const, 1},
-		{"ETHERTYPE_LLDP", Const, 1},
-		{"ETHERTYPE_LOGICRAFT", Const, 1},
-		{"ETHERTYPE_LOOPBACK", Const, 1},
-		{"ETHERTYPE_MATRA", Const, 1},
-		{"ETHERTYPE_MAX", Const, 1},
-		{"ETHERTYPE_MERIT", Const, 1},
-		{"ETHERTYPE_MICP", Const, 1},
-		{"ETHERTYPE_MOPDL", Const, 1},
-		{"ETHERTYPE_MOPRC", Const, 1},
-		{"ETHERTYPE_MOTOROLA", Const, 1},
-		{"ETHERTYPE_MPLS", Const, 1},
-		{"ETHERTYPE_MPLS_MCAST", Const, 1},
-		{"ETHERTYPE_MUMPS", Const, 1},
-		{"ETHERTYPE_NBPCC", Const, 1},
-		{"ETHERTYPE_NBPCLAIM", Const, 1},
-		{"ETHERTYPE_NBPCLREQ", Const, 1},
-		{"ETHERTYPE_NBPCLRSP", Const, 1},
-		{"ETHERTYPE_NBPCREQ", Const, 1},
-		{"ETHERTYPE_NBPCRSP", Const, 1},
-		{"ETHERTYPE_NBPDG", Const, 1},
-		{"ETHERTYPE_NBPDGB", Const, 1},
-		{"ETHERTYPE_NBPDLTE", Const, 1},
-		{"ETHERTYPE_NBPRAR", Const, 1},
-		{"ETHERTYPE_NBPRAS", Const, 1},
-		{"ETHERTYPE_NBPRST", Const, 1},
-		{"ETHERTYPE_NBPSCD", Const, 1},
-		{"ETHERTYPE_NBPVCD", Const, 1},
-		{"ETHERTYPE_NBS", Const, 1},
-		{"ETHERTYPE_NCD", Const, 1},
-		{"ETHERTYPE_NESTAR", Const, 1},
-		{"ETHERTYPE_NETBEUI", Const, 1},
-		{"ETHERTYPE_NOVELL", Const, 1},
-		{"ETHERTYPE_NS", Const, 1},
-		{"ETHERTYPE_NSAT", Const, 1},
-		{"ETHERTYPE_NSCOMPAT", Const, 1},
-		{"ETHERTYPE_NTRAILER", Const, 1},
-		{"ETHERTYPE_OS9", Const, 1},
-		{"ETHERTYPE_OS9NET", Const, 1},
-		{"ETHERTYPE_PACER", Const, 1},
-		{"ETHERTYPE_PAE", Const, 1},
-		{"ETHERTYPE_PCS", Const, 1},
-		{"ETHERTYPE_PLANNING", Const, 1},
-		{"ETHERTYPE_PPP", Const, 1},
-		{"ETHERTYPE_PPPOE", Const, 1},
-		{"ETHERTYPE_PPPOEDISC", Const, 1},
-		{"ETHERTYPE_PRIMENTS", Const, 1},
-		{"ETHERTYPE_PUP", Const, 1},
-		{"ETHERTYPE_PUPAT", Const, 1},
-		{"ETHERTYPE_QINQ", Const, 1},
-		{"ETHERTYPE_RACAL", Const, 1},
-		{"ETHERTYPE_RATIONAL", Const, 1},
-		{"ETHERTYPE_RAWFR", Const, 1},
-		{"ETHERTYPE_RCL", Const, 1},
-		{"ETHERTYPE_RDP", Const, 1},
-		{"ETHERTYPE_RETIX", Const, 1},
-		{"ETHERTYPE_REVARP", Const, 1},
-		{"ETHERTYPE_SCA", Const, 1},
-		{"ETHERTYPE_SECTRA", Const, 1},
-		{"ETHERTYPE_SECUREDATA", Const, 1},
-		{"ETHERTYPE_SGITW", Const, 1},
-		{"ETHERTYPE_SG_BOUNCE", Const, 1},
-		{"ETHERTYPE_SG_DIAG", Const, 1},
-		{"ETHERTYPE_SG_NETGAMES", Const, 1},
-		{"ETHERTYPE_SG_RESV", Const, 1},
-		{"ETHERTYPE_SIMNET", Const, 1},
-		{"ETHERTYPE_SLOW", Const, 1},
-		{"ETHERTYPE_SLOWPROTOCOLS", Const, 1},
-		{"ETHERTYPE_SNA", Const, 1},
-		{"ETHERTYPE_SNMP", Const, 1},
-		{"ETHERTYPE_SONIX", Const, 1},
-		{"ETHERTYPE_SPIDER", Const, 1},
-		{"ETHERTYPE_SPRITE", Const, 1},
-		{"ETHERTYPE_STP", Const, 1},
-		{"ETHERTYPE_TALARIS", Const, 1},
-		{"ETHERTYPE_TALARISMC", Const, 1},
-		{"ETHERTYPE_TCPCOMP", Const, 1},
-		{"ETHERTYPE_TCPSM", Const, 1},
-		{"ETHERTYPE_TEC", Const, 1},
-		{"ETHERTYPE_TIGAN", Const, 1},
-		{"ETHERTYPE_TRAIL", Const, 1},
-		{"ETHERTYPE_TRANSETHER", Const, 1},
-		{"ETHERTYPE_TYMSHARE", Const, 1},
-		{"ETHERTYPE_UBBST", Const, 1},
-		{"ETHERTYPE_UBDEBUG", Const, 1},
-		{"ETHERTYPE_UBDIAGLOOP", Const, 1},
-		{"ETHERTYPE_UBDL", Const, 1},
-		{"ETHERTYPE_UBNIU", Const, 1},
-		{"ETHERTYPE_UBNMC", Const, 1},
-		{"ETHERTYPE_VALID", Const, 1},
-		{"ETHERTYPE_VARIAN", Const, 1},
-		{"ETHERTYPE_VAXELN", Const, 1},
-		{"ETHERTYPE_VEECO", Const, 1},
-		{"ETHERTYPE_VEXP", Const, 1},
-		{"ETHERTYPE_VGLAB", Const, 1},
-		{"ETHERTYPE_VINES", Const, 1},
-		{"ETHERTYPE_VINESECHO", Const, 1},
-		{"ETHERTYPE_VINESLOOP", Const, 1},
-		{"ETHERTYPE_VITAL", Const, 1},
-		{"ETHERTYPE_VLAN", Const, 1},
-		{"ETHERTYPE_VLTLMAN", Const, 1},
-		{"ETHERTYPE_VPROD", Const, 1},
-		{"ETHERTYPE_VURESERVED", Const, 1},
-		{"ETHERTYPE_WATERLOO", Const, 1},
-		{"ETHERTYPE_WELLFLEET", Const, 1},
-		{"ETHERTYPE_X25", Const, 1},
-		{"ETHERTYPE_X75", Const, 1},
-		{"ETHERTYPE_XNSSM", Const, 1},
-		{"ETHERTYPE_XTP", Const, 1},
-		{"ETHER_ADDR_LEN", Const, 1},
-		{"ETHER_ALIGN", Const, 1},
-		{"ETHER_CRC_LEN", Const, 1},
-		{"ETHER_CRC_POLY_BE", Const, 1},
-		{"ETHER_CRC_POLY_LE", Const, 1},
-		{"ETHER_HDR_LEN", Const, 1},
-		{"ETHER_MAX_DIX_LEN", Const, 1},
-		{"ETHER_MAX_LEN", Const, 1},
-		{"ETHER_MAX_LEN_JUMBO", Const, 1},
-		{"ETHER_MIN_LEN", Const, 1},
-		{"ETHER_PPPOE_ENCAP_LEN", Const, 1},
-		{"ETHER_TYPE_LEN", Const, 1},
-		{"ETHER_VLAN_ENCAP_LEN", Const, 1},
-		{"ETH_P_1588", Const, 0},
-		{"ETH_P_8021Q", Const, 0},
-		{"ETH_P_802_2", Const, 0},
-		{"ETH_P_802_3", Const, 0},
-		{"ETH_P_AARP", Const, 0},
-		{"ETH_P_ALL", Const, 0},
-		{"ETH_P_AOE", Const, 0},
-		{"ETH_P_ARCNET", Const, 0},
-		{"ETH_P_ARP", Const, 0},
-		{"ETH_P_ATALK", Const, 0},
-		{"ETH_P_ATMFATE", Const, 0},
-		{"ETH_P_ATMMPOA", Const, 0},
-		{"ETH_P_AX25", Const, 0},
-		{"ETH_P_BPQ", Const, 0},
-		{"ETH_P_CAIF", Const, 0},
-		{"ETH_P_CAN", Const, 0},
-		{"ETH_P_CONTROL", Const, 0},
-		{"ETH_P_CUST", Const, 0},
-		{"ETH_P_DDCMP", Const, 0},
-		{"ETH_P_DEC", Const, 0},
-		{"ETH_P_DIAG", Const, 0},
-		{"ETH_P_DNA_DL", Const, 0},
-		{"ETH_P_DNA_RC", Const, 0},
-		{"ETH_P_DNA_RT", Const, 0},
-		{"ETH_P_DSA", Const, 0},
-		{"ETH_P_ECONET", Const, 0},
-		{"ETH_P_EDSA", Const, 0},
-		{"ETH_P_FCOE", Const, 0},
-		{"ETH_P_FIP", Const, 0},
-		{"ETH_P_HDLC", Const, 0},
-		{"ETH_P_IEEE802154", Const, 0},
-		{"ETH_P_IEEEPUP", Const, 0},
-		{"ETH_P_IEEEPUPAT", Const, 0},
-		{"ETH_P_IP", Const, 0},
-		{"ETH_P_IPV6", Const, 0},
-		{"ETH_P_IPX", Const, 0},
-		{"ETH_P_IRDA", Const, 0},
-		{"ETH_P_LAT", Const, 0},
-		{"ETH_P_LINK_CTL", Const, 0},
-		{"ETH_P_LOCALTALK", Const, 0},
-		{"ETH_P_LOOP", Const, 0},
-		{"ETH_P_MOBITEX", Const, 0},
-		{"ETH_P_MPLS_MC", Const, 0},
-		{"ETH_P_MPLS_UC", Const, 0},
-		{"ETH_P_PAE", Const, 0},
-		{"ETH_P_PAUSE", Const, 0},
-		{"ETH_P_PHONET", Const, 0},
-		{"ETH_P_PPPTALK", Const, 0},
-		{"ETH_P_PPP_DISC", Const, 0},
-		{"ETH_P_PPP_MP", Const, 0},
-		{"ETH_P_PPP_SES", Const, 0},
-		{"ETH_P_PUP", Const, 0},
-		{"ETH_P_PUPAT", Const, 0},
-		{"ETH_P_RARP", Const, 0},
-		{"ETH_P_SCA", Const, 0},
-		{"ETH_P_SLOW", Const, 0},
-		{"ETH_P_SNAP", Const, 0},
-		{"ETH_P_TEB", Const, 0},
-		{"ETH_P_TIPC", Const, 0},
-		{"ETH_P_TRAILER", Const, 0},
-		{"ETH_P_TR_802_2", Const, 0},
-		{"ETH_P_WAN_PPP", Const, 0},
-		{"ETH_P_WCCP", Const, 0},
-		{"ETH_P_X25", Const, 0},
-		{"ETIME", Const, 0},
-		{"ETIMEDOUT", Const, 0},
-		{"ETOOMANYREFS", Const, 0},
-		{"ETXTBSY", Const, 0},
-		{"EUCLEAN", Const, 0},
-		{"EUNATCH", Const, 0},
-		{"EUSERS", Const, 0},
-		{"EVFILT_AIO", Const, 0},
-		{"EVFILT_FS", Const, 0},
-		{"EVFILT_LIO", Const, 0},
-		{"EVFILT_MACHPORT", Const, 0},
-		{"EVFILT_PROC", Const, 0},
-		{"EVFILT_READ", Const, 0},
-		{"EVFILT_SIGNAL", Const, 0},
-		{"EVFILT_SYSCOUNT", Const, 0},
-		{"EVFILT_THREADMARKER", Const, 0},
-		{"EVFILT_TIMER", Const, 0},
-		{"EVFILT_USER", Const, 0},
-		{"EVFILT_VM", Const, 0},
-		{"EVFILT_VNODE", Const, 0},
-		{"EVFILT_WRITE", Const, 0},
-		{"EV_ADD", Const, 0},
-		{"EV_CLEAR", Const, 0},
-		{"EV_DELETE", Const, 0},
-		{"EV_DISABLE", Const, 0},
-		{"EV_DISPATCH", Const, 0},
-		{"EV_DROP", Const, 3},
-		{"EV_ENABLE", Const, 0},
-		{"EV_EOF", Const, 0},
-		{"EV_ERROR", Const, 0},
-		{"EV_FLAG0", Const, 0},
-		{"EV_FLAG1", Const, 0},
-		{"EV_ONESHOT", Const, 0},
-		{"EV_OOBAND", Const, 0},
-		{"EV_POLL", Const, 0},
-		{"EV_RECEIPT", Const, 0},
-		{"EV_SYSFLAGS", Const, 0},
-		{"EWINDOWS", Const, 0},
-		{"EWOULDBLOCK", Const, 0},
-		{"EXDEV", Const, 0},
-		{"EXFULL", Const, 0},
-		{"EXTA", Const, 0},
-		{"EXTB", Const, 0},
-		{"EXTPROC", Const, 0},
-		{"Environ", Func, 0},
-		{"EpollCreate", Func, 0},
-		{"EpollCreate1", Func, 0},
-		{"EpollCtl", Func, 0},
-		{"EpollEvent", Type, 0},
-		{"EpollEvent.Events", Field, 0},
-		{"EpollEvent.Fd", Field, 0},
-		{"EpollEvent.Pad", Field, 0},
-		{"EpollEvent.PadFd", Field, 0},
-		{"EpollWait", Func, 0},
-		{"Errno", Type, 0},
-		{"EscapeArg", Func, 0},
-		{"Exchangedata", Func, 0},
-		{"Exec", Func, 0},
-		{"Exit", Func, 0},
-		{"ExitProcess", Func, 0},
-		{"FD_CLOEXEC", Const, 0},
-		{"FD_SETSIZE", Const, 0},
-		{"FILE_ACTION_ADDED", Const, 0},
-		{"FILE_ACTION_MODIFIED", Const, 0},
-		{"FILE_ACTION_REMOVED", Const, 0},
-		{"FILE_ACTION_RENAMED_NEW_NAME", Const, 0},
-		{"FILE_ACTION_RENAMED_OLD_NAME", Const, 0},
-		{"FILE_APPEND_DATA", Const, 0},
-		{"FILE_ATTRIBUTE_ARCHIVE", Const, 0},
-		{"FILE_ATTRIBUTE_DIRECTORY", Const, 0},
-		{"FILE_ATTRIBUTE_HIDDEN", Const, 0},
-		{"FILE_ATTRIBUTE_NORMAL", Const, 0},
-		{"FILE_ATTRIBUTE_READONLY", Const, 0},
-		{"FILE_ATTRIBUTE_REPARSE_POINT", Const, 4},
-		{"FILE_ATTRIBUTE_SYSTEM", Const, 0},
-		{"FILE_BEGIN", Const, 0},
-		{"FILE_CURRENT", Const, 0},
-		{"FILE_END", Const, 0},
-		{"FILE_FLAG_BACKUP_SEMANTICS", Const, 0},
-		{"FILE_FLAG_OPEN_REPARSE_POINT", Const, 4},
-		{"FILE_FLAG_OVERLAPPED", Const, 0},
-		{"FILE_LIST_DIRECTORY", Const, 0},
-		{"FILE_MAP_COPY", Const, 0},
-		{"FILE_MAP_EXECUTE", Const, 0},
-		{"FILE_MAP_READ", Const, 0},
-		{"FILE_MAP_WRITE", Const, 0},
-		{"FILE_NOTIFY_CHANGE_ATTRIBUTES", Const, 0},
-		{"FILE_NOTIFY_CHANGE_CREATION", Const, 0},
-		{"FILE_NOTIFY_CHANGE_DIR_NAME", Const, 0},
-		{"FILE_NOTIFY_CHANGE_FILE_NAME", Const, 0},
-		{"FILE_NOTIFY_CHANGE_LAST_ACCESS", Const, 0},
-		{"FILE_NOTIFY_CHANGE_LAST_WRITE", Const, 0},
-		{"FILE_NOTIFY_CHANGE_SIZE", Const, 0},
-		{"FILE_SHARE_DELETE", Const, 0},
-		{"FILE_SHARE_READ", Const, 0},
-		{"FILE_SHARE_WRITE", Const, 0},
-		{"FILE_SKIP_COMPLETION_PORT_ON_SUCCESS", Const, 2},
-		{"FILE_SKIP_SET_EVENT_ON_HANDLE", Const, 2},
-		{"FILE_TYPE_CHAR", Const, 0},
-		{"FILE_TYPE_DISK", Const, 0},
-		{"FILE_TYPE_PIPE", Const, 0},
-		{"FILE_TYPE_REMOTE", Const, 0},
-		{"FILE_TYPE_UNKNOWN", Const, 0},
-		{"FILE_WRITE_ATTRIBUTES", Const, 0},
-		{"FLUSHO", Const, 0},
-		{"FORMAT_MESSAGE_ALLOCATE_BUFFER", Const, 0},
-		{"FORMAT_MESSAGE_ARGUMENT_ARRAY", Const, 0},
-		{"FORMAT_MESSAGE_FROM_HMODULE", Const, 0},
-		{"FORMAT_MESSAGE_FROM_STRING", Const, 0},
-		{"FORMAT_MESSAGE_FROM_SYSTEM", Const, 0},
-		{"FORMAT_MESSAGE_IGNORE_INSERTS", Const, 0},
-		{"FORMAT_MESSAGE_MAX_WIDTH_MASK", Const, 0},
-		{"FSCTL_GET_REPARSE_POINT", Const, 4},
-		{"F_ADDFILESIGS", Const, 0},
-		{"F_ADDSIGS", Const, 0},
-		{"F_ALLOCATEALL", Const, 0},
-		{"F_ALLOCATECONTIG", Const, 0},
-		{"F_CANCEL", Const, 0},
-		{"F_CHKCLEAN", Const, 0},
-		{"F_CLOSEM", Const, 1},
-		{"F_DUP2FD", Const, 0},
-		{"F_DUP2FD_CLOEXEC", Const, 1},
-		{"F_DUPFD", Const, 0},
-		{"F_DUPFD_CLOEXEC", Const, 0},
-		{"F_EXLCK", Const, 0},
-		{"F_FINDSIGS", Const, 16},
-		{"F_FLUSH_DATA", Const, 0},
-		{"F_FREEZE_FS", Const, 0},
-		{"F_FSCTL", Const, 1},
-		{"F_FSDIRMASK", Const, 1},
-		{"F_FSIN", Const, 1},
-		{"F_FSINOUT", Const, 1},
-		{"F_FSOUT", Const, 1},
-		{"F_FSPRIV", Const, 1},
-		{"F_FSVOID", Const, 1},
-		{"F_FULLFSYNC", Const, 0},
-		{"F_GETCODEDIR", Const, 16},
-		{"F_GETFD", Const, 0},
-		{"F_GETFL", Const, 0},
-		{"F_GETLEASE", Const, 0},
-		{"F_GETLK", Const, 0},
-		{"F_GETLK64", Const, 0},
-		{"F_GETLKPID", Const, 0},
-		{"F_GETNOSIGPIPE", Const, 0},
-		{"F_GETOWN", Const, 0},
-		{"F_GETOWN_EX", Const, 0},
-		{"F_GETPATH", Const, 0},
-		{"F_GETPATH_MTMINFO", Const, 0},
-		{"F_GETPIPE_SZ", Const, 0},
-		{"F_GETPROTECTIONCLASS", Const, 0},
-		{"F_GETPROTECTIONLEVEL", Const, 16},
-		{"F_GETSIG", Const, 0},
-		{"F_GLOBAL_NOCACHE", Const, 0},
-		{"F_LOCK", Const, 0},
-		{"F_LOG2PHYS", Const, 0},
-		{"F_LOG2PHYS_EXT", Const, 0},
-		{"F_MARKDEPENDENCY", Const, 0},
-		{"F_MAXFD", Const, 1},
-		{"F_NOCACHE", Const, 0},
-		{"F_NODIRECT", Const, 0},
-		{"F_NOTIFY", Const, 0},
-		{"F_OGETLK", Const, 0},
-		{"F_OK", Const, 0},
-		{"F_OSETLK", Const, 0},
-		{"F_OSETLKW", Const, 0},
-		{"F_PARAM_MASK", Const, 1},
-		{"F_PARAM_MAX", Const, 1},
-		{"F_PATHPKG_CHECK", Const, 0},
-		{"F_PEOFPOSMODE", Const, 0},
-		{"F_PREALLOCATE", Const, 0},
-		{"F_RDADVISE", Const, 0},
-		{"F_RDAHEAD", Const, 0},
-		{"F_RDLCK", Const, 0},
-		{"F_READAHEAD", Const, 0},
-		{"F_READBOOTSTRAP", Const, 0},
-		{"F_SETBACKINGSTORE", Const, 0},
-		{"F_SETFD", Const, 0},
-		{"F_SETFL", Const, 0},
-		{"F_SETLEASE", Const, 0},
-		{"F_SETLK", Const, 0},
-		{"F_SETLK64", Const, 0},
-		{"F_SETLKW", Const, 0},
-		{"F_SETLKW64", Const, 0},
-		{"F_SETLKWTIMEOUT", Const, 16},
-		{"F_SETLK_REMOTE", Const, 0},
-		{"F_SETNOSIGPIPE", Const, 0},
-		{"F_SETOWN", Const, 0},
-		{"F_SETOWN_EX", Const, 0},
-		{"F_SETPIPE_SZ", Const, 0},
-		{"F_SETPROTECTIONCLASS", Const, 0},
-		{"F_SETSIG", Const, 0},
-		{"F_SETSIZE", Const, 0},
-		{"F_SHLCK", Const, 0},
-		{"F_SINGLE_WRITER", Const, 16},
-		{"F_TEST", Const, 0},
-		{"F_THAW_FS", Const, 0},
-		{"F_TLOCK", Const, 0},
-		{"F_TRANSCODEKEY", Const, 16},
-		{"F_ULOCK", Const, 0},
-		{"F_UNLCK", Const, 0},
-		{"F_UNLCKSYS", Const, 0},
-		{"F_VOLPOSMODE", Const, 0},
-		{"F_WRITEBOOTSTRAP", Const, 0},
-		{"F_WRLCK", Const, 0},
-		{"Faccessat", Func, 0},
-		{"Fallocate", Func, 0},
-		{"Fbootstraptransfer_t", Type, 0},
-		{"Fbootstraptransfer_t.Buffer", Field, 0},
-		{"Fbootstraptransfer_t.Length", Field, 0},
-		{"Fbootstraptransfer_t.Offset", Field, 0},
-		{"Fchdir", Func, 0},
-		{"Fchflags", Func, 0},
-		{"Fchmod", Func, 0},
-		{"Fchmodat", Func, 0},
-		{"Fchown", Func, 0},
-		{"Fchownat", Func, 0},
-		{"FcntlFlock", Func, 3},
-		{"FdSet", Type, 0},
-		{"FdSet.Bits", Field, 0},
-		{"FdSet.X__fds_bits", Field, 0},
-		{"Fdatasync", Func, 0},
-		{"FileNotifyInformation", Type, 0},
-		{"FileNotifyInformation.Action", Field, 0},
-		{"FileNotifyInformation.FileName", Field, 0},
-		{"FileNotifyInformation.FileNameLength", Field, 0},
-		{"FileNotifyInformation.NextEntryOffset", Field, 0},
-		{"Filetime", Type, 0},
-		{"Filetime.HighDateTime", Field, 0},
-		{"Filetime.LowDateTime", Field, 0},
-		{"FindClose", Func, 0},
-		{"FindFirstFile", Func, 0},
-		{"FindNextFile", Func, 0},
-		{"Flock", Func, 0},
-		{"Flock_t", Type, 0},
-		{"Flock_t.Len", Field, 0},
-		{"Flock_t.Pad_cgo_0", Field, 0},
-		{"Flock_t.Pad_cgo_1", Field, 3},
-		{"Flock_t.Pid", Field, 0},
-		{"Flock_t.Start", Field, 0},
-		{"Flock_t.Sysid", Field, 0},
-		{"Flock_t.Type", Field, 0},
-		{"Flock_t.Whence", Field, 0},
-		{"FlushBpf", Func, 0},
-		{"FlushFileBuffers", Func, 0},
-		{"FlushViewOfFile", Func, 0},
-		{"ForkExec", Func, 0},
-		{"ForkLock", Var, 0},
-		{"FormatMessage", Func, 0},
-		{"Fpathconf", Func, 0},
-		{"FreeAddrInfoW", Func, 1},
-		{"FreeEnvironmentStrings", Func, 0},
-		{"FreeLibrary", Func, 0},
-		{"Fsid", Type, 0},
-		{"Fsid.Val", Field, 0},
-		{"Fsid.X__fsid_val", Field, 2},
-		{"Fsid.X__val", Field, 0},
-		{"Fstat", Func, 0},
-		{"Fstatat", Func, 12},
-		{"Fstatfs", Func, 0},
-		{"Fstore_t", Type, 0},
-		{"Fstore_t.Bytesalloc", Field, 0},
-		{"Fstore_t.Flags", Field, 0},
-		{"Fstore_t.Length", Field, 0},
-		{"Fstore_t.Offset", Field, 0},
-		{"Fstore_t.Posmode", Field, 0},
-		{"Fsync", Func, 0},
-		{"Ftruncate", Func, 0},
-		{"FullPath", Func, 4},
-		{"Futimes", Func, 0},
-		{"Futimesat", Func, 0},
-		{"GENERIC_ALL", Const, 0},
-		{"GENERIC_EXECUTE", Const, 0},
-		{"GENERIC_READ", Const, 0},
-		{"GENERIC_WRITE", Const, 0},
-		{"GUID", Type, 1},
-		{"GUID.Data1", Field, 1},
-		{"GUID.Data2", Field, 1},
-		{"GUID.Data3", Field, 1},
-		{"GUID.Data4", Field, 1},
-		{"GetAcceptExSockaddrs", Func, 0},
-		{"GetAdaptersInfo", Func, 0},
-		{"GetAddrInfoW", Func, 1},
-		{"GetCommandLine", Func, 0},
-		{"GetComputerName", Func, 0},
-		{"GetConsoleMode", Func, 1},
-		{"GetCurrentDirectory", Func, 0},
-		{"GetCurrentProcess", Func, 0},
-		{"GetEnvironmentStrings", Func, 0},
-		{"GetEnvironmentVariable", Func, 0},
-		{"GetExitCodeProcess", Func, 0},
-		{"GetFileAttributes", Func, 0},
-		{"GetFileAttributesEx", Func, 0},
-		{"GetFileExInfoStandard", Const, 0},
-		{"GetFileExMaxInfoLevel", Const, 0},
-		{"GetFileInformationByHandle", Func, 0},
-		{"GetFileType", Func, 0},
-		{"GetFullPathName", Func, 0},
-		{"GetHostByName", Func, 0},
-		{"GetIfEntry", Func, 0},
-		{"GetLastError", Func, 0},
-		{"GetLengthSid", Func, 0},
-		{"GetLongPathName", Func, 0},
-		{"GetProcAddress", Func, 0},
-		{"GetProcessTimes", Func, 0},
-		{"GetProtoByName", Func, 0},
-		{"GetQueuedCompletionStatus", Func, 0},
-		{"GetServByName", Func, 0},
-		{"GetShortPathName", Func, 0},
-		{"GetStartupInfo", Func, 0},
-		{"GetStdHandle", Func, 0},
-		{"GetSystemTimeAsFileTime", Func, 0},
-		{"GetTempPath", Func, 0},
-		{"GetTimeZoneInformation", Func, 0},
-		{"GetTokenInformation", Func, 0},
-		{"GetUserNameEx", Func, 0},
-		{"GetUserProfileDirectory", Func, 0},
-		{"GetVersion", Func, 0},
-		{"Getcwd", Func, 0},
-		{"Getdents", Func, 0},
-		{"Getdirentries", Func, 0},
-		{"Getdtablesize", Func, 0},
-		{"Getegid", Func, 0},
-		{"Getenv", Func, 0},
-		{"Geteuid", Func, 0},
-		{"Getfsstat", Func, 0},
-		{"Getgid", Func, 0},
-		{"Getgroups", Func, 0},
-		{"Getpagesize", Func, 0},
-		{"Getpeername", Func, 0},
-		{"Getpgid", Func, 0},
-		{"Getpgrp", Func, 0},
-		{"Getpid", Func, 0},
-		{"Getppid", Func, 0},
-		{"Getpriority", Func, 0},
-		{"Getrlimit", Func, 0},
-		{"Getrusage", Func, 0},
-		{"Getsid", Func, 0},
-		{"Getsockname", Func, 0},
-		{"Getsockopt", Func, 1},
-		{"GetsockoptByte", Func, 0},
-		{"GetsockoptICMPv6Filter", Func, 2},
-		{"GetsockoptIPMreq", Func, 0},
-		{"GetsockoptIPMreqn", Func, 0},
-		{"GetsockoptIPv6MTUInfo", Func, 2},
-		{"GetsockoptIPv6Mreq", Func, 0},
-		{"GetsockoptInet4Addr", Func, 0},
-		{"GetsockoptInt", Func, 0},
-		{"GetsockoptUcred", Func, 1},
-		{"Gettid", Func, 0},
-		{"Gettimeofday", Func, 0},
-		{"Getuid", Func, 0},
-		{"Getwd", Func, 0},
-		{"Getxattr", Func, 1},
-		{"HANDLE_FLAG_INHERIT", Const, 0},
-		{"HKEY_CLASSES_ROOT", Const, 0},
-		{"HKEY_CURRENT_CONFIG", Const, 0},
-		{"HKEY_CURRENT_USER", Const, 0},
-		{"HKEY_DYN_DATA", Const, 0},
-		{"HKEY_LOCAL_MACHINE", Const, 0},
-		{"HKEY_PERFORMANCE_DATA", Const, 0},
-		{"HKEY_USERS", Const, 0},
-		{"HUPCL", Const, 0},
-		{"Handle", Type, 0},
-		{"Hostent", Type, 0},
-		{"Hostent.AddrList", Field, 0},
-		{"Hostent.AddrType", Field, 0},
-		{"Hostent.Aliases", Field, 0},
-		{"Hostent.Length", Field, 0},
-		{"Hostent.Name", Field, 0},
-		{"ICANON", Const, 0},
-		{"ICMP6_FILTER", Const, 2},
-		{"ICMPV6_FILTER", Const, 2},
-		{"ICMPv6Filter", Type, 2},
-		{"ICMPv6Filter.Data", Field, 2},
-		{"ICMPv6Filter.Filt", Field, 2},
-		{"ICRNL", Const, 0},
-		{"IEXTEN", Const, 0},
-		{"IFAN_ARRIVAL", Const, 1},
-		{"IFAN_DEPARTURE", Const, 1},
-		{"IFA_ADDRESS", Const, 0},
-		{"IFA_ANYCAST", Const, 0},
-		{"IFA_BROADCAST", Const, 0},
-		{"IFA_CACHEINFO", Const, 0},
-		{"IFA_F_DADFAILED", Const, 0},
-		{"IFA_F_DEPRECATED", Const, 0},
-		{"IFA_F_HOMEADDRESS", Const, 0},
-		{"IFA_F_NODAD", Const, 0},
-		{"IFA_F_OPTIMISTIC", Const, 0},
-		{"IFA_F_PERMANENT", Const, 0},
-		{"IFA_F_SECONDARY", Const, 0},
-		{"IFA_F_TEMPORARY", Const, 0},
-		{"IFA_F_TENTATIVE", Const, 0},
-		{"IFA_LABEL", Const, 0},
-		{"IFA_LOCAL", Const, 0},
-		{"IFA_MAX", Const, 0},
-		{"IFA_MULTICAST", Const, 0},
-		{"IFA_ROUTE", Const, 1},
-		{"IFA_UNSPEC", Const, 0},
-		{"IFF_ALLMULTI", Const, 0},
-		{"IFF_ALTPHYS", Const, 0},
-		{"IFF_AUTOMEDIA", Const, 0},
-		{"IFF_BROADCAST", Const, 0},
-		{"IFF_CANTCHANGE", Const, 0},
-		{"IFF_CANTCONFIG", Const, 1},
-		{"IFF_DEBUG", Const, 0},
-		{"IFF_DRV_OACTIVE", Const, 0},
-		{"IFF_DRV_RUNNING", Const, 0},
-		{"IFF_DYING", Const, 0},
-		{"IFF_DYNAMIC", Const, 0},
-		{"IFF_LINK0", Const, 0},
-		{"IFF_LINK1", Const, 0},
-		{"IFF_LINK2", Const, 0},
-		{"IFF_LOOPBACK", Const, 0},
-		{"IFF_MASTER", Const, 0},
-		{"IFF_MONITOR", Const, 0},
-		{"IFF_MULTICAST", Const, 0},
-		{"IFF_NOARP", Const, 0},
-		{"IFF_NOTRAILERS", Const, 0},
-		{"IFF_NO_PI", Const, 0},
-		{"IFF_OACTIVE", Const, 0},
-		{"IFF_ONE_QUEUE", Const, 0},
-		{"IFF_POINTOPOINT", Const, 0},
-		{"IFF_POINTTOPOINT", Const, 0},
-		{"IFF_PORTSEL", Const, 0},
-		{"IFF_PPROMISC", Const, 0},
-		{"IFF_PROMISC", Const, 0},
-		{"IFF_RENAMING", Const, 0},
-		{"IFF_RUNNING", Const, 0},
-		{"IFF_SIMPLEX", Const, 0},
-		{"IFF_SLAVE", Const, 0},
-		{"IFF_SMART", Const, 0},
-		{"IFF_STATICARP", Const, 0},
-		{"IFF_TAP", Const, 0},
-		{"IFF_TUN", Const, 0},
-		{"IFF_TUN_EXCL", Const, 0},
-		{"IFF_UP", Const, 0},
-		{"IFF_VNET_HDR", Const, 0},
-		{"IFLA_ADDRESS", Const, 0},
-		{"IFLA_BROADCAST", Const, 0},
-		{"IFLA_COST", Const, 0},
-		{"IFLA_IFALIAS", Const, 0},
-		{"IFLA_IFNAME", Const, 0},
-		{"IFLA_LINK", Const, 0},
-		{"IFLA_LINKINFO", Const, 0},
-		{"IFLA_LINKMODE", Const, 0},
-		{"IFLA_MAP", Const, 0},
-		{"IFLA_MASTER", Const, 0},
-		{"IFLA_MAX", Const, 0},
-		{"IFLA_MTU", Const, 0},
-		{"IFLA_NET_NS_PID", Const, 0},
-		{"IFLA_OPERSTATE", Const, 0},
-		{"IFLA_PRIORITY", Const, 0},
-		{"IFLA_PROTINFO", Const, 0},
-		{"IFLA_QDISC", Const, 0},
-		{"IFLA_STATS", Const, 0},
-		{"IFLA_TXQLEN", Const, 0},
-		{"IFLA_UNSPEC", Const, 0},
-		{"IFLA_WEIGHT", Const, 0},
-		{"IFLA_WIRELESS", Const, 0},
-		{"IFNAMSIZ", Const, 0},
-		{"IFT_1822", Const, 0},
-		{"IFT_A12MPPSWITCH", Const, 0},
-		{"IFT_AAL2", Const, 0},
-		{"IFT_AAL5", Const, 0},
-		{"IFT_ADSL", Const, 0},
-		{"IFT_AFLANE8023", Const, 0},
-		{"IFT_AFLANE8025", Const, 0},
-		{"IFT_ARAP", Const, 0},
-		{"IFT_ARCNET", Const, 0},
-		{"IFT_ARCNETPLUS", Const, 0},
-		{"IFT_ASYNC", Const, 0},
-		{"IFT_ATM", Const, 0},
-		{"IFT_ATMDXI", Const, 0},
-		{"IFT_ATMFUNI", Const, 0},
-		{"IFT_ATMIMA", Const, 0},
-		{"IFT_ATMLOGICAL", Const, 0},
-		{"IFT_ATMRADIO", Const, 0},
-		{"IFT_ATMSUBINTERFACE", Const, 0},
-		{"IFT_ATMVCIENDPT", Const, 0},
-		{"IFT_ATMVIRTUAL", Const, 0},
-		{"IFT_BGPPOLICYACCOUNTING", Const, 0},
-		{"IFT_BLUETOOTH", Const, 1},
-		{"IFT_BRIDGE", Const, 0},
-		{"IFT_BSC", Const, 0},
-		{"IFT_CARP", Const, 0},
-		{"IFT_CCTEMUL", Const, 0},
-		{"IFT_CELLULAR", Const, 0},
-		{"IFT_CEPT", Const, 0},
-		{"IFT_CES", Const, 0},
-		{"IFT_CHANNEL", Const, 0},
-		{"IFT_CNR", Const, 0},
-		{"IFT_COFFEE", Const, 0},
-		{"IFT_COMPOSITELINK", Const, 0},
-		{"IFT_DCN", Const, 0},
-		{"IFT_DIGITALPOWERLINE", Const, 0},
-		{"IFT_DIGITALWRAPPEROVERHEADCHANNEL", Const, 0},
-		{"IFT_DLSW", Const, 0},
-		{"IFT_DOCSCABLEDOWNSTREAM", Const, 0},
-		{"IFT_DOCSCABLEMACLAYER", Const, 0},
-		{"IFT_DOCSCABLEUPSTREAM", Const, 0},
-		{"IFT_DOCSCABLEUPSTREAMCHANNEL", Const, 1},
-		{"IFT_DS0", Const, 0},
-		{"IFT_DS0BUNDLE", Const, 0},
-		{"IFT_DS1FDL", Const, 0},
-		{"IFT_DS3", Const, 0},
-		{"IFT_DTM", Const, 0},
-		{"IFT_DUMMY", Const, 1},
-		{"IFT_DVBASILN", Const, 0},
-		{"IFT_DVBASIOUT", Const, 0},
-		{"IFT_DVBRCCDOWNSTREAM", Const, 0},
-		{"IFT_DVBRCCMACLAYER", Const, 0},
-		{"IFT_DVBRCCUPSTREAM", Const, 0},
-		{"IFT_ECONET", Const, 1},
-		{"IFT_ENC", Const, 0},
-		{"IFT_EON", Const, 0},
-		{"IFT_EPLRS", Const, 0},
-		{"IFT_ESCON", Const, 0},
-		{"IFT_ETHER", Const, 0},
-		{"IFT_FAITH", Const, 0},
-		{"IFT_FAST", Const, 0},
-		{"IFT_FASTETHER", Const, 0},
-		{"IFT_FASTETHERFX", Const, 0},
-		{"IFT_FDDI", Const, 0},
-		{"IFT_FIBRECHANNEL", Const, 0},
-		{"IFT_FRAMERELAYINTERCONNECT", Const, 0},
-		{"IFT_FRAMERELAYMPI", Const, 0},
-		{"IFT_FRDLCIENDPT", Const, 0},
-		{"IFT_FRELAY", Const, 0},
-		{"IFT_FRELAYDCE", Const, 0},
-		{"IFT_FRF16MFRBUNDLE", Const, 0},
-		{"IFT_FRFORWARD", Const, 0},
-		{"IFT_G703AT2MB", Const, 0},
-		{"IFT_G703AT64K", Const, 0},
-		{"IFT_GIF", Const, 0},
-		{"IFT_GIGABITETHERNET", Const, 0},
-		{"IFT_GR303IDT", Const, 0},
-		{"IFT_GR303RDT", Const, 0},
-		{"IFT_H323GATEKEEPER", Const, 0},
-		{"IFT_H323PROXY", Const, 0},
-		{"IFT_HDH1822", Const, 0},
-		{"IFT_HDLC", Const, 0},
-		{"IFT_HDSL2", Const, 0},
-		{"IFT_HIPERLAN2", Const, 0},
-		{"IFT_HIPPI", Const, 0},
-		{"IFT_HIPPIINTERFACE", Const, 0},
-		{"IFT_HOSTPAD", Const, 0},
-		{"IFT_HSSI", Const, 0},
-		{"IFT_HY", Const, 0},
-		{"IFT_IBM370PARCHAN", Const, 0},
-		{"IFT_IDSL", Const, 0},
-		{"IFT_IEEE1394", Const, 0},
-		{"IFT_IEEE80211", Const, 0},
-		{"IFT_IEEE80212", Const, 0},
-		{"IFT_IEEE8023ADLAG", Const, 0},
-		{"IFT_IFGSN", Const, 0},
-		{"IFT_IMT", Const, 0},
-		{"IFT_INFINIBAND", Const, 1},
-		{"IFT_INTERLEAVE", Const, 0},
-		{"IFT_IP", Const, 0},
-		{"IFT_IPFORWARD", Const, 0},
-		{"IFT_IPOVERATM", Const, 0},
-		{"IFT_IPOVERCDLC", Const, 0},
-		{"IFT_IPOVERCLAW", Const, 0},
-		{"IFT_IPSWITCH", Const, 0},
-		{"IFT_IPXIP", Const, 0},
-		{"IFT_ISDN", Const, 0},
-		{"IFT_ISDNBASIC", Const, 0},
-		{"IFT_ISDNPRIMARY", Const, 0},
-		{"IFT_ISDNS", Const, 0},
-		{"IFT_ISDNU", Const, 0},
-		{"IFT_ISO88022LLC", Const, 0},
-		{"IFT_ISO88023", Const, 0},
-		{"IFT_ISO88024", Const, 0},
-		{"IFT_ISO88025", Const, 0},
-		{"IFT_ISO88025CRFPINT", Const, 0},
-		{"IFT_ISO88025DTR", Const, 0},
-		{"IFT_ISO88025FIBER", Const, 0},
-		{"IFT_ISO88026", Const, 0},
-		{"IFT_ISUP", Const, 0},
-		{"IFT_L2VLAN", Const, 0},
-		{"IFT_L3IPVLAN", Const, 0},
-		{"IFT_L3IPXVLAN", Const, 0},
-		{"IFT_LAPB", Const, 0},
-		{"IFT_LAPD", Const, 0},
-		{"IFT_LAPF", Const, 0},
-		{"IFT_LINEGROUP", Const, 1},
-		{"IFT_LOCALTALK", Const, 0},
-		{"IFT_LOOP", Const, 0},
-		{"IFT_MEDIAMAILOVERIP", Const, 0},
-		{"IFT_MFSIGLINK", Const, 0},
-		{"IFT_MIOX25", Const, 0},
-		{"IFT_MODEM", Const, 0},
-		{"IFT_MPC", Const, 0},
-		{"IFT_MPLS", Const, 0},
-		{"IFT_MPLSTUNNEL", Const, 0},
-		{"IFT_MSDSL", Const, 0},
-		{"IFT_MVL", Const, 0},
-		{"IFT_MYRINET", Const, 0},
-		{"IFT_NFAS", Const, 0},
-		{"IFT_NSIP", Const, 0},
-		{"IFT_OPTICALCHANNEL", Const, 0},
-		{"IFT_OPTICALTRANSPORT", Const, 0},
-		{"IFT_OTHER", Const, 0},
-		{"IFT_P10", Const, 0},
-		{"IFT_P80", Const, 0},
-		{"IFT_PARA", Const, 0},
-		{"IFT_PDP", Const, 0},
-		{"IFT_PFLOG", Const, 0},
-		{"IFT_PFLOW", Const, 1},
-		{"IFT_PFSYNC", Const, 0},
-		{"IFT_PLC", Const, 0},
-		{"IFT_PON155", Const, 1},
-		{"IFT_PON622", Const, 1},
-		{"IFT_POS", Const, 0},
-		{"IFT_PPP", Const, 0},
-		{"IFT_PPPMULTILINKBUNDLE", Const, 0},
-		{"IFT_PROPATM", Const, 1},
-		{"IFT_PROPBWAP2MP", Const, 0},
-		{"IFT_PROPCNLS", Const, 0},
-		{"IFT_PROPDOCSWIRELESSDOWNSTREAM", Const, 0},
-		{"IFT_PROPDOCSWIRELESSMACLAYER", Const, 0},
-		{"IFT_PROPDOCSWIRELESSUPSTREAM", Const, 0},
-		{"IFT_PROPMUX", Const, 0},
-		{"IFT_PROPVIRTUAL", Const, 0},
-		{"IFT_PROPWIRELESSP2P", Const, 0},
-		{"IFT_PTPSERIAL", Const, 0},
-		{"IFT_PVC", Const, 0},
-		{"IFT_Q2931", Const, 1},
-		{"IFT_QLLC", Const, 0},
-		{"IFT_RADIOMAC", Const, 0},
-		{"IFT_RADSL", Const, 0},
-		{"IFT_REACHDSL", Const, 0},
-		{"IFT_RFC1483", Const, 0},
-		{"IFT_RS232", Const, 0},
-		{"IFT_RSRB", Const, 0},
-		{"IFT_SDLC", Const, 0},
-		{"IFT_SDSL", Const, 0},
-		{"IFT_SHDSL", Const, 0},
-		{"IFT_SIP", Const, 0},
-		{"IFT_SIPSIG", Const, 1},
-		{"IFT_SIPTG", Const, 1},
-		{"IFT_SLIP", Const, 0},
-		{"IFT_SMDSDXI", Const, 0},
-		{"IFT_SMDSICIP", Const, 0},
-		{"IFT_SONET", Const, 0},
-		{"IFT_SONETOVERHEADCHANNEL", Const, 0},
-		{"IFT_SONETPATH", Const, 0},
-		{"IFT_SONETVT", Const, 0},
-		{"IFT_SRP", Const, 0},
-		{"IFT_SS7SIGLINK", Const, 0},
-		{"IFT_STACKTOSTACK", Const, 0},
-		{"IFT_STARLAN", Const, 0},
-		{"IFT_STF", Const, 0},
-		{"IFT_T1", Const, 0},
-		{"IFT_TDLC", Const, 0},
-		{"IFT_TELINK", Const, 1},
-		{"IFT_TERMPAD", Const, 0},
-		{"IFT_TR008", Const, 0},
-		{"IFT_TRANSPHDLC", Const, 0},
-		{"IFT_TUNNEL", Const, 0},
-		{"IFT_ULTRA", Const, 0},
-		{"IFT_USB", Const, 0},
-		{"IFT_V11", Const, 0},
-		{"IFT_V35", Const, 0},
-		{"IFT_V36", Const, 0},
-		{"IFT_V37", Const, 0},
-		{"IFT_VDSL", Const, 0},
-		{"IFT_VIRTUALIPADDRESS", Const, 0},
-		{"IFT_VIRTUALTG", Const, 1},
-		{"IFT_VOICEDID", Const, 1},
-		{"IFT_VOICEEM", Const, 0},
-		{"IFT_VOICEEMFGD", Const, 1},
-		{"IFT_VOICEENCAP", Const, 0},
-		{"IFT_VOICEFGDEANA", Const, 1},
-		{"IFT_VOICEFXO", Const, 0},
-		{"IFT_VOICEFXS", Const, 0},
-		{"IFT_VOICEOVERATM", Const, 0},
-		{"IFT_VOICEOVERCABLE", Const, 1},
-		{"IFT_VOICEOVERFRAMERELAY", Const, 0},
-		{"IFT_VOICEOVERIP", Const, 0},
-		{"IFT_X213", Const, 0},
-		{"IFT_X25", Const, 0},
-		{"IFT_X25DDN", Const, 0},
-		{"IFT_X25HUNTGROUP", Const, 0},
-		{"IFT_X25MLP", Const, 0},
-		{"IFT_X25PLE", Const, 0},
-		{"IFT_XETHER", Const, 0},
-		{"IGNBRK", Const, 0},
-		{"IGNCR", Const, 0},
-		{"IGNORE", Const, 0},
-		{"IGNPAR", Const, 0},
-		{"IMAXBEL", Const, 0},
-		{"INFINITE", Const, 0},
-		{"INLCR", Const, 0},
-		{"INPCK", Const, 0},
-		{"INVALID_FILE_ATTRIBUTES", Const, 0},
-		{"IN_ACCESS", Const, 0},
-		{"IN_ALL_EVENTS", Const, 0},
-		{"IN_ATTRIB", Const, 0},
-		{"IN_CLASSA_HOST", Const, 0},
-		{"IN_CLASSA_MAX", Const, 0},
-		{"IN_CLASSA_NET", Const, 0},
-		{"IN_CLASSA_NSHIFT", Const, 0},
-		{"IN_CLASSB_HOST", Const, 0},
-		{"IN_CLASSB_MAX", Const, 0},
-		{"IN_CLASSB_NET", Const, 0},
-		{"IN_CLASSB_NSHIFT", Const, 0},
-		{"IN_CLASSC_HOST", Const, 0},
-		{"IN_CLASSC_NET", Const, 0},
-		{"IN_CLASSC_NSHIFT", Const, 0},
-		{"IN_CLASSD_HOST", Const, 0},
-		{"IN_CLASSD_NET", Const, 0},
-		{"IN_CLASSD_NSHIFT", Const, 0},
-		{"IN_CLOEXEC", Const, 0},
-		{"IN_CLOSE", Const, 0},
-		{"IN_CLOSE_NOWRITE", Const, 0},
-		{"IN_CLOSE_WRITE", Const, 0},
-		{"IN_CREATE", Const, 0},
-		{"IN_DELETE", Const, 0},
-		{"IN_DELETE_SELF", Const, 0},
-		{"IN_DONT_FOLLOW", Const, 0},
-		{"IN_EXCL_UNLINK", Const, 0},
-		{"IN_IGNORED", Const, 0},
-		{"IN_ISDIR", Const, 0},
-		{"IN_LINKLOCALNETNUM", Const, 0},
-		{"IN_LOOPBACKNET", Const, 0},
-		{"IN_MASK_ADD", Const, 0},
-		{"IN_MODIFY", Const, 0},
-		{"IN_MOVE", Const, 0},
-		{"IN_MOVED_FROM", Const, 0},
-		{"IN_MOVED_TO", Const, 0},
-		{"IN_MOVE_SELF", Const, 0},
-		{"IN_NONBLOCK", Const, 0},
-		{"IN_ONESHOT", Const, 0},
-		{"IN_ONLYDIR", Const, 0},
-		{"IN_OPEN", Const, 0},
-		{"IN_Q_OVERFLOW", Const, 0},
-		{"IN_RFC3021_HOST", Const, 1},
-		{"IN_RFC3021_MASK", Const, 1},
-		{"IN_RFC3021_NET", Const, 1},
-		{"IN_RFC3021_NSHIFT", Const, 1},
-		{"IN_UNMOUNT", Const, 0},
-		{"IOC_IN", Const, 1},
-		{"IOC_INOUT", Const, 1},
-		{"IOC_OUT", Const, 1},
-		{"IOC_VENDOR", Const, 3},
-		{"IOC_WS2", Const, 1},
-		{"IO_REPARSE_TAG_SYMLINK", Const, 4},
-		{"IPMreq", Type, 0},
-		{"IPMreq.Interface", Field, 0},
-		{"IPMreq.Multiaddr", Field, 0},
-		{"IPMreqn", Type, 0},
-		{"IPMreqn.Address", Field, 0},
-		{"IPMreqn.Ifindex", Field, 0},
-		{"IPMreqn.Multiaddr", Field, 0},
-		{"IPPROTO_3PC", Const, 0},
-		{"IPPROTO_ADFS", Const, 0},
-		{"IPPROTO_AH", Const, 0},
-		{"IPPROTO_AHIP", Const, 0},
-		{"IPPROTO_APES", Const, 0},
-		{"IPPROTO_ARGUS", Const, 0},
-		{"IPPROTO_AX25", Const, 0},
-		{"IPPROTO_BHA", Const, 0},
-		{"IPPROTO_BLT", Const, 0},
-		{"IPPROTO_BRSATMON", Const, 0},
-		{"IPPROTO_CARP", Const, 0},
-		{"IPPROTO_CFTP", Const, 0},
-		{"IPPROTO_CHAOS", Const, 0},
-		{"IPPROTO_CMTP", Const, 0},
-		{"IPPROTO_COMP", Const, 0},
-		{"IPPROTO_CPHB", Const, 0},
-		{"IPPROTO_CPNX", Const, 0},
-		{"IPPROTO_DCCP", Const, 0},
-		{"IPPROTO_DDP", Const, 0},
-		{"IPPROTO_DGP", Const, 0},
-		{"IPPROTO_DIVERT", Const, 0},
-		{"IPPROTO_DIVERT_INIT", Const, 3},
-		{"IPPROTO_DIVERT_RESP", Const, 3},
-		{"IPPROTO_DONE", Const, 0},
-		{"IPPROTO_DSTOPTS", Const, 0},
-		{"IPPROTO_EGP", Const, 0},
-		{"IPPROTO_EMCON", Const, 0},
-		{"IPPROTO_ENCAP", Const, 0},
-		{"IPPROTO_EON", Const, 0},
-		{"IPPROTO_ESP", Const, 0},
-		{"IPPROTO_ETHERIP", Const, 0},
-		{"IPPROTO_FRAGMENT", Const, 0},
-		{"IPPROTO_GGP", Const, 0},
-		{"IPPROTO_GMTP", Const, 0},
-		{"IPPROTO_GRE", Const, 0},
-		{"IPPROTO_HELLO", Const, 0},
-		{"IPPROTO_HMP", Const, 0},
-		{"IPPROTO_HOPOPTS", Const, 0},
-		{"IPPROTO_ICMP", Const, 0},
-		{"IPPROTO_ICMPV6", Const, 0},
-		{"IPPROTO_IDP", Const, 0},
-		{"IPPROTO_IDPR", Const, 0},
-		{"IPPROTO_IDRP", Const, 0},
-		{"IPPROTO_IGMP", Const, 0},
-		{"IPPROTO_IGP", Const, 0},
-		{"IPPROTO_IGRP", Const, 0},
-		{"IPPROTO_IL", Const, 0},
-		{"IPPROTO_INLSP", Const, 0},
-		{"IPPROTO_INP", Const, 0},
-		{"IPPROTO_IP", Const, 0},
-		{"IPPROTO_IPCOMP", Const, 0},
-		{"IPPROTO_IPCV", Const, 0},
-		{"IPPROTO_IPEIP", Const, 0},
-		{"IPPROTO_IPIP", Const, 0},
-		{"IPPROTO_IPPC", Const, 0},
-		{"IPPROTO_IPV4", Const, 0},
-		{"IPPROTO_IPV6", Const, 0},
-		{"IPPROTO_IPV6_ICMP", Const, 1},
-		{"IPPROTO_IRTP", Const, 0},
-		{"IPPROTO_KRYPTOLAN", Const, 0},
-		{"IPPROTO_LARP", Const, 0},
-		{"IPPROTO_LEAF1", Const, 0},
-		{"IPPROTO_LEAF2", Const, 0},
-		{"IPPROTO_MAX", Const, 0},
-		{"IPPROTO_MAXID", Const, 0},
-		{"IPPROTO_MEAS", Const, 0},
-		{"IPPROTO_MH", Const, 1},
-		{"IPPROTO_MHRP", Const, 0},
-		{"IPPROTO_MICP", Const, 0},
-		{"IPPROTO_MOBILE", Const, 0},
-		{"IPPROTO_MPLS", Const, 1},
-		{"IPPROTO_MTP", Const, 0},
-		{"IPPROTO_MUX", Const, 0},
-		{"IPPROTO_ND", Const, 0},
-		{"IPPROTO_NHRP", Const, 0},
-		{"IPPROTO_NONE", Const, 0},
-		{"IPPROTO_NSP", Const, 0},
-		{"IPPROTO_NVPII", Const, 0},
-		{"IPPROTO_OLD_DIVERT", Const, 0},
-		{"IPPROTO_OSPFIGP", Const, 0},
-		{"IPPROTO_PFSYNC", Const, 0},
-		{"IPPROTO_PGM", Const, 0},
-		{"IPPROTO_PIGP", Const, 0},
-		{"IPPROTO_PIM", Const, 0},
-		{"IPPROTO_PRM", Const, 0},
-		{"IPPROTO_PUP", Const, 0},
-		{"IPPROTO_PVP", Const, 0},
-		{"IPPROTO_RAW", Const, 0},
-		{"IPPROTO_RCCMON", Const, 0},
-		{"IPPROTO_RDP", Const, 0},
-		{"IPPROTO_ROUTING", Const, 0},
-		{"IPPROTO_RSVP", Const, 0},
-		{"IPPROTO_RVD", Const, 0},
-		{"IPPROTO_SATEXPAK", Const, 0},
-		{"IPPROTO_SATMON", Const, 0},
-		{"IPPROTO_SCCSP", Const, 0},
-		{"IPPROTO_SCTP", Const, 0},
-		{"IPPROTO_SDRP", Const, 0},
-		{"IPPROTO_SEND", Const, 1},
-		{"IPPROTO_SEP", Const, 0},
-		{"IPPROTO_SKIP", Const, 0},
-		{"IPPROTO_SPACER", Const, 0},
-		{"IPPROTO_SRPC", Const, 0},
-		{"IPPROTO_ST", Const, 0},
-		{"IPPROTO_SVMTP", Const, 0},
-		{"IPPROTO_SWIPE", Const, 0},
-		{"IPPROTO_TCF", Const, 0},
-		{"IPPROTO_TCP", Const, 0},
-		{"IPPROTO_TLSP", Const, 0},
-		{"IPPROTO_TP", Const, 0},
-		{"IPPROTO_TPXX", Const, 0},
-		{"IPPROTO_TRUNK1", Const, 0},
-		{"IPPROTO_TRUNK2", Const, 0},
-		{"IPPROTO_TTP", Const, 0},
-		{"IPPROTO_UDP", Const, 0},
-		{"IPPROTO_UDPLITE", Const, 0},
-		{"IPPROTO_VINES", Const, 0},
-		{"IPPROTO_VISA", Const, 0},
-		{"IPPROTO_VMTP", Const, 0},
-		{"IPPROTO_VRRP", Const, 1},
-		{"IPPROTO_WBEXPAK", Const, 0},
-		{"IPPROTO_WBMON", Const, 0},
-		{"IPPROTO_WSN", Const, 0},
-		{"IPPROTO_XNET", Const, 0},
-		{"IPPROTO_XTP", Const, 0},
-		{"IPV6_2292DSTOPTS", Const, 0},
-		{"IPV6_2292HOPLIMIT", Const, 0},
-		{"IPV6_2292HOPOPTS", Const, 0},
-		{"IPV6_2292NEXTHOP", Const, 0},
-		{"IPV6_2292PKTINFO", Const, 0},
-		{"IPV6_2292PKTOPTIONS", Const, 0},
-		{"IPV6_2292RTHDR", Const, 0},
-		{"IPV6_ADDRFORM", Const, 0},
-		{"IPV6_ADD_MEMBERSHIP", Const, 0},
-		{"IPV6_AUTHHDR", Const, 0},
-		{"IPV6_AUTH_LEVEL", Const, 1},
-		{"IPV6_AUTOFLOWLABEL", Const, 0},
-		{"IPV6_BINDANY", Const, 0},
-		{"IPV6_BINDV6ONLY", Const, 0},
-		{"IPV6_BOUND_IF", Const, 0},
-		{"IPV6_CHECKSUM", Const, 0},
-		{"IPV6_DEFAULT_MULTICAST_HOPS", Const, 0},
-		{"IPV6_DEFAULT_MULTICAST_LOOP", Const, 0},
-		{"IPV6_DEFHLIM", Const, 0},
-		{"IPV6_DONTFRAG", Const, 0},
-		{"IPV6_DROP_MEMBERSHIP", Const, 0},
-		{"IPV6_DSTOPTS", Const, 0},
-		{"IPV6_ESP_NETWORK_LEVEL", Const, 1},
-		{"IPV6_ESP_TRANS_LEVEL", Const, 1},
-		{"IPV6_FAITH", Const, 0},
-		{"IPV6_FLOWINFO_MASK", Const, 0},
-		{"IPV6_FLOWLABEL_MASK", Const, 0},
-		{"IPV6_FRAGTTL", Const, 0},
-		{"IPV6_FW_ADD", Const, 0},
-		{"IPV6_FW_DEL", Const, 0},
-		{"IPV6_FW_FLUSH", Const, 0},
-		{"IPV6_FW_GET", Const, 0},
-		{"IPV6_FW_ZERO", Const, 0},
-		{"IPV6_HLIMDEC", Const, 0},
-		{"IPV6_HOPLIMIT", Const, 0},
-		{"IPV6_HOPOPTS", Const, 0},
-		{"IPV6_IPCOMP_LEVEL", Const, 1},
-		{"IPV6_IPSEC_POLICY", Const, 0},
-		{"IPV6_JOIN_ANYCAST", Const, 0},
-		{"IPV6_JOIN_GROUP", Const, 0},
-		{"IPV6_LEAVE_ANYCAST", Const, 0},
-		{"IPV6_LEAVE_GROUP", Const, 0},
-		{"IPV6_MAXHLIM", Const, 0},
-		{"IPV6_MAXOPTHDR", Const, 0},
-		{"IPV6_MAXPACKET", Const, 0},
-		{"IPV6_MAX_GROUP_SRC_FILTER", Const, 0},
-		{"IPV6_MAX_MEMBERSHIPS", Const, 0},
-		{"IPV6_MAX_SOCK_SRC_FILTER", Const, 0},
-		{"IPV6_MIN_MEMBERSHIPS", Const, 0},
-		{"IPV6_MMTU", Const, 0},
-		{"IPV6_MSFILTER", Const, 0},
-		{"IPV6_MTU", Const, 0},
-		{"IPV6_MTU_DISCOVER", Const, 0},
-		{"IPV6_MULTICAST_HOPS", Const, 0},
-		{"IPV6_MULTICAST_IF", Const, 0},
-		{"IPV6_MULTICAST_LOOP", Const, 0},
-		{"IPV6_NEXTHOP", Const, 0},
-		{"IPV6_OPTIONS", Const, 1},
-		{"IPV6_PATHMTU", Const, 0},
-		{"IPV6_PIPEX", Const, 1},
-		{"IPV6_PKTINFO", Const, 0},
-		{"IPV6_PMTUDISC_DO", Const, 0},
-		{"IPV6_PMTUDISC_DONT", Const, 0},
-		{"IPV6_PMTUDISC_PROBE", Const, 0},
-		{"IPV6_PMTUDISC_WANT", Const, 0},
-		{"IPV6_PORTRANGE", Const, 0},
-		{"IPV6_PORTRANGE_DEFAULT", Const, 0},
-		{"IPV6_PORTRANGE_HIGH", Const, 0},
-		{"IPV6_PORTRANGE_LOW", Const, 0},
-		{"IPV6_PREFER_TEMPADDR", Const, 0},
-		{"IPV6_RECVDSTOPTS", Const, 0},
-		{"IPV6_RECVDSTPORT", Const, 3},
-		{"IPV6_RECVERR", Const, 0},
-		{"IPV6_RECVHOPLIMIT", Const, 0},
-		{"IPV6_RECVHOPOPTS", Const, 0},
-		{"IPV6_RECVPATHMTU", Const, 0},
-		{"IPV6_RECVPKTINFO", Const, 0},
-		{"IPV6_RECVRTHDR", Const, 0},
-		{"IPV6_RECVTCLASS", Const, 0},
-		{"IPV6_ROUTER_ALERT", Const, 0},
-		{"IPV6_RTABLE", Const, 1},
-		{"IPV6_RTHDR", Const, 0},
-		{"IPV6_RTHDRDSTOPTS", Const, 0},
-		{"IPV6_RTHDR_LOOSE", Const, 0},
-		{"IPV6_RTHDR_STRICT", Const, 0},
-		{"IPV6_RTHDR_TYPE_0", Const, 0},
-		{"IPV6_RXDSTOPTS", Const, 0},
-		{"IPV6_RXHOPOPTS", Const, 0},
-		{"IPV6_SOCKOPT_RESERVED1", Const, 0},
-		{"IPV6_TCLASS", Const, 0},
-		{"IPV6_UNICAST_HOPS", Const, 0},
-		{"IPV6_USE_MIN_MTU", Const, 0},
-		{"IPV6_V6ONLY", Const, 0},
-		{"IPV6_VERSION", Const, 0},
-		{"IPV6_VERSION_MASK", Const, 0},
-		{"IPV6_XFRM_POLICY", Const, 0},
-		{"IP_ADD_MEMBERSHIP", Const, 0},
-		{"IP_ADD_SOURCE_MEMBERSHIP", Const, 0},
-		{"IP_AUTH_LEVEL", Const, 1},
-		{"IP_BINDANY", Const, 0},
-		{"IP_BLOCK_SOURCE", Const, 0},
-		{"IP_BOUND_IF", Const, 0},
-		{"IP_DEFAULT_MULTICAST_LOOP", Const, 0},
-		{"IP_DEFAULT_MULTICAST_TTL", Const, 0},
-		{"IP_DF", Const, 0},
-		{"IP_DIVERTFL", Const, 3},
-		{"IP_DONTFRAG", Const, 0},
-		{"IP_DROP_MEMBERSHIP", Const, 0},
-		{"IP_DROP_SOURCE_MEMBERSHIP", Const, 0},
-		{"IP_DUMMYNET3", Const, 0},
-		{"IP_DUMMYNET_CONFIGURE", Const, 0},
-		{"IP_DUMMYNET_DEL", Const, 0},
-		{"IP_DUMMYNET_FLUSH", Const, 0},
-		{"IP_DUMMYNET_GET", Const, 0},
-		{"IP_EF", Const, 1},
-		{"IP_ERRORMTU", Const, 1},
-		{"IP_ESP_NETWORK_LEVEL", Const, 1},
-		{"IP_ESP_TRANS_LEVEL", Const, 1},
-		{"IP_FAITH", Const, 0},
-		{"IP_FREEBIND", Const, 0},
-		{"IP_FW3", Const, 0},
-		{"IP_FW_ADD", Const, 0},
-		{"IP_FW_DEL", Const, 0},
-		{"IP_FW_FLUSH", Const, 0},
-		{"IP_FW_GET", Const, 0},
-		{"IP_FW_NAT_CFG", Const, 0},
-		{"IP_FW_NAT_DEL", Const, 0},
-		{"IP_FW_NAT_GET_CONFIG", Const, 0},
-		{"IP_FW_NAT_GET_LOG", Const, 0},
-		{"IP_FW_RESETLOG", Const, 0},
-		{"IP_FW_TABLE_ADD", Const, 0},
-		{"IP_FW_TABLE_DEL", Const, 0},
-		{"IP_FW_TABLE_FLUSH", Const, 0},
-		{"IP_FW_TABLE_GETSIZE", Const, 0},
-		{"IP_FW_TABLE_LIST", Const, 0},
-		{"IP_FW_ZERO", Const, 0},
-		{"IP_HDRINCL", Const, 0},
-		{"IP_IPCOMP_LEVEL", Const, 1},
-		{"IP_IPSECFLOWINFO", Const, 1},
-		{"IP_IPSEC_LOCAL_AUTH", Const, 1},
-		{"IP_IPSEC_LOCAL_CRED", Const, 1},
-		{"IP_IPSEC_LOCAL_ID", Const, 1},
-		{"IP_IPSEC_POLICY", Const, 0},
-		{"IP_IPSEC_REMOTE_AUTH", Const, 1},
-		{"IP_IPSEC_REMOTE_CRED", Const, 1},
-		{"IP_IPSEC_REMOTE_ID", Const, 1},
-		{"IP_MAXPACKET", Const, 0},
-		{"IP_MAX_GROUP_SRC_FILTER", Const, 0},
-		{"IP_MAX_MEMBERSHIPS", Const, 0},
-		{"IP_MAX_SOCK_MUTE_FILTER", Const, 0},
-		{"IP_MAX_SOCK_SRC_FILTER", Const, 0},
-		{"IP_MAX_SOURCE_FILTER", Const, 0},
-		{"IP_MF", Const, 0},
-		{"IP_MINFRAGSIZE", Const, 1},
-		{"IP_MINTTL", Const, 0},
-		{"IP_MIN_MEMBERSHIPS", Const, 0},
-		{"IP_MSFILTER", Const, 0},
-		{"IP_MSS", Const, 0},
-		{"IP_MTU", Const, 0},
-		{"IP_MTU_DISCOVER", Const, 0},
-		{"IP_MULTICAST_IF", Const, 0},
-		{"IP_MULTICAST_IFINDEX", Const, 0},
-		{"IP_MULTICAST_LOOP", Const, 0},
-		{"IP_MULTICAST_TTL", Const, 0},
-		{"IP_MULTICAST_VIF", Const, 0},
-		{"IP_NAT__XXX", Const, 0},
-		{"IP_OFFMASK", Const, 0},
-		{"IP_OLD_FW_ADD", Const, 0},
-		{"IP_OLD_FW_DEL", Const, 0},
-		{"IP_OLD_FW_FLUSH", Const, 0},
-		{"IP_OLD_FW_GET", Const, 0},
-		{"IP_OLD_FW_RESETLOG", Const, 0},
-		{"IP_OLD_FW_ZERO", Const, 0},
-		{"IP_ONESBCAST", Const, 0},
-		{"IP_OPTIONS", Const, 0},
-		{"IP_ORIGDSTADDR", Const, 0},
-		{"IP_PASSSEC", Const, 0},
-		{"IP_PIPEX", Const, 1},
-		{"IP_PKTINFO", Const, 0},
-		{"IP_PKTOPTIONS", Const, 0},
-		{"IP_PMTUDISC", Const, 0},
-		{"IP_PMTUDISC_DO", Const, 0},
-		{"IP_PMTUDISC_DONT", Const, 0},
-		{"IP_PMTUDISC_PROBE", Const, 0},
-		{"IP_PMTUDISC_WANT", Const, 0},
-		{"IP_PORTRANGE", Const, 0},
-		{"IP_PORTRANGE_DEFAULT", Const, 0},
-		{"IP_PORTRANGE_HIGH", Const, 0},
-		{"IP_PORTRANGE_LOW", Const, 0},
-		{"IP_RECVDSTADDR", Const, 0},
-		{"IP_RECVDSTPORT", Const, 1},
-		{"IP_RECVERR", Const, 0},
-		{"IP_RECVIF", Const, 0},
-		{"IP_RECVOPTS", Const, 0},
-		{"IP_RECVORIGDSTADDR", Const, 0},
-		{"IP_RECVPKTINFO", Const, 0},
-		{"IP_RECVRETOPTS", Const, 0},
-		{"IP_RECVRTABLE", Const, 1},
-		{"IP_RECVTOS", Const, 0},
-		{"IP_RECVTTL", Const, 0},
-		{"IP_RETOPTS", Const, 0},
-		{"IP_RF", Const, 0},
-		{"IP_ROUTER_ALERT", Const, 0},
-		{"IP_RSVP_OFF", Const, 0},
-		{"IP_RSVP_ON", Const, 0},
-		{"IP_RSVP_VIF_OFF", Const, 0},
-		{"IP_RSVP_VIF_ON", Const, 0},
-		{"IP_RTABLE", Const, 1},
-		{"IP_SENDSRCADDR", Const, 0},
-		{"IP_STRIPHDR", Const, 0},
-		{"IP_TOS", Const, 0},
-		{"IP_TRAFFIC_MGT_BACKGROUND", Const, 0},
-		{"IP_TRANSPARENT", Const, 0},
-		{"IP_TTL", Const, 0},
-		{"IP_UNBLOCK_SOURCE", Const, 0},
-		{"IP_XFRM_POLICY", Const, 0},
-		{"IPv6MTUInfo", Type, 2},
-		{"IPv6MTUInfo.Addr", Field, 2},
-		{"IPv6MTUInfo.Mtu", Field, 2},
-		{"IPv6Mreq", Type, 0},
-		{"IPv6Mreq.Interface", Field, 0},
-		{"IPv6Mreq.Multiaddr", Field, 0},
-		{"ISIG", Const, 0},
-		{"ISTRIP", Const, 0},
-		{"IUCLC", Const, 0},
-		{"IUTF8", Const, 0},
-		{"IXANY", Const, 0},
-		{"IXOFF", Const, 0},
-		{"IXON", Const, 0},
-		{"IfAddrmsg", Type, 0},
-		{"IfAddrmsg.Family", Field, 0},
-		{"IfAddrmsg.Flags", Field, 0},
-		{"IfAddrmsg.Index", Field, 0},
-		{"IfAddrmsg.Prefixlen", Field, 0},
-		{"IfAddrmsg.Scope", Field, 0},
-		{"IfAnnounceMsghdr", Type, 1},
-		{"IfAnnounceMsghdr.Hdrlen", Field, 2},
-		{"IfAnnounceMsghdr.Index", Field, 1},
-		{"IfAnnounceMsghdr.Msglen", Field, 1},
-		{"IfAnnounceMsghdr.Name", Field, 1},
-		{"IfAnnounceMsghdr.Type", Field, 1},
-		{"IfAnnounceMsghdr.Version", Field, 1},
-		{"IfAnnounceMsghdr.What", Field, 1},
-		{"IfData", Type, 0},
-		{"IfData.Addrlen", Field, 0},
-		{"IfData.Baudrate", Field, 0},
-		{"IfData.Capabilities", Field, 2},
-		{"IfData.Collisions", Field, 0},
-		{"IfData.Datalen", Field, 0},
-		{"IfData.Epoch", Field, 0},
-		{"IfData.Hdrlen", Field, 0},
-		{"IfData.Hwassist", Field, 0},
-		{"IfData.Ibytes", Field, 0},
-		{"IfData.Ierrors", Field, 0},
-		{"IfData.Imcasts", Field, 0},
-		{"IfData.Ipackets", Field, 0},
-		{"IfData.Iqdrops", Field, 0},
-		{"IfData.Lastchange", Field, 0},
-		{"IfData.Link_state", Field, 0},
-		{"IfData.Mclpool", Field, 2},
-		{"IfData.Metric", Field, 0},
-		{"IfData.Mtu", Field, 0},
-		{"IfData.Noproto", Field, 0},
-		{"IfData.Obytes", Field, 0},
-		{"IfData.Oerrors", Field, 0},
-		{"IfData.Omcasts", Field, 0},
-		{"IfData.Opackets", Field, 0},
-		{"IfData.Pad", Field, 2},
-		{"IfData.Pad_cgo_0", Field, 2},
-		{"IfData.Pad_cgo_1", Field, 2},
-		{"IfData.Physical", Field, 0},
-		{"IfData.Recvquota", Field, 0},
-		{"IfData.Recvtiming", Field, 0},
-		{"IfData.Reserved1", Field, 0},
-		{"IfData.Reserved2", Field, 0},
-		{"IfData.Spare_char1", Field, 0},
-		{"IfData.Spare_char2", Field, 0},
-		{"IfData.Type", Field, 0},
-		{"IfData.Typelen", Field, 0},
-		{"IfData.Unused1", Field, 0},
-		{"IfData.Unused2", Field, 0},
-		{"IfData.Xmitquota", Field, 0},
-		{"IfData.Xmittiming", Field, 0},
-		{"IfInfomsg", Type, 0},
-		{"IfInfomsg.Change", Field, 0},
-		{"IfInfomsg.Family", Field, 0},
-		{"IfInfomsg.Flags", Field, 0},
-		{"IfInfomsg.Index", Field, 0},
-		{"IfInfomsg.Type", Field, 0},
-		{"IfInfomsg.X__ifi_pad", Field, 0},
-		{"IfMsghdr", Type, 0},
-		{"IfMsghdr.Addrs", Field, 0},
-		{"IfMsghdr.Data", Field, 0},
-		{"IfMsghdr.Flags", Field, 0},
-		{"IfMsghdr.Hdrlen", Field, 2},
-		{"IfMsghdr.Index", Field, 0},
-		{"IfMsghdr.Msglen", Field, 0},
-		{"IfMsghdr.Pad1", Field, 2},
-		{"IfMsghdr.Pad2", Field, 2},
-		{"IfMsghdr.Pad_cgo_0", Field, 0},
-		{"IfMsghdr.Pad_cgo_1", Field, 2},
-		{"IfMsghdr.Tableid", Field, 2},
-		{"IfMsghdr.Type", Field, 0},
-		{"IfMsghdr.Version", Field, 0},
-		{"IfMsghdr.Xflags", Field, 2},
-		{"IfaMsghdr", Type, 0},
-		{"IfaMsghdr.Addrs", Field, 0},
-		{"IfaMsghdr.Flags", Field, 0},
-		{"IfaMsghdr.Hdrlen", Field, 2},
-		{"IfaMsghdr.Index", Field, 0},
-		{"IfaMsghdr.Metric", Field, 0},
-		{"IfaMsghdr.Msglen", Field, 0},
-		{"IfaMsghdr.Pad1", Field, 2},
-		{"IfaMsghdr.Pad2", Field, 2},
-		{"IfaMsghdr.Pad_cgo_0", Field, 0},
-		{"IfaMsghdr.Tableid", Field, 2},
-		{"IfaMsghdr.Type", Field, 0},
-		{"IfaMsghdr.Version", Field, 0},
-		{"IfmaMsghdr", Type, 0},
-		{"IfmaMsghdr.Addrs", Field, 0},
-		{"IfmaMsghdr.Flags", Field, 0},
-		{"IfmaMsghdr.Index", Field, 0},
-		{"IfmaMsghdr.Msglen", Field, 0},
-		{"IfmaMsghdr.Pad_cgo_0", Field, 0},
-		{"IfmaMsghdr.Type", Field, 0},
-		{"IfmaMsghdr.Version", Field, 0},
-		{"IfmaMsghdr2", Type, 0},
-		{"IfmaMsghdr2.Addrs", Field, 0},
-		{"IfmaMsghdr2.Flags", Field, 0},
-		{"IfmaMsghdr2.Index", Field, 0},
-		{"IfmaMsghdr2.Msglen", Field, 0},
-		{"IfmaMsghdr2.Pad_cgo_0", Field, 0},
-		{"IfmaMsghdr2.Refcount", Field, 0},
-		{"IfmaMsghdr2.Type", Field, 0},
-		{"IfmaMsghdr2.Version", Field, 0},
-		{"ImplementsGetwd", Const, 0},
-		{"Inet4Pktinfo", Type, 0},
-		{"Inet4Pktinfo.Addr", Field, 0},
-		{"Inet4Pktinfo.Ifindex", Field, 0},
-		{"Inet4Pktinfo.Spec_dst", Field, 0},
-		{"Inet6Pktinfo", Type, 0},
-		{"Inet6Pktinfo.Addr", Field, 0},
-		{"Inet6Pktinfo.Ifindex", Field, 0},
-		{"InotifyAddWatch", Func, 0},
-		{"InotifyEvent", Type, 0},
-		{"InotifyEvent.Cookie", Field, 0},
-		{"InotifyEvent.Len", Field, 0},
-		{"InotifyEvent.Mask", Field, 0},
-		{"InotifyEvent.Name", Field, 0},
-		{"InotifyEvent.Wd", Field, 0},
-		{"InotifyInit", Func, 0},
-		{"InotifyInit1", Func, 0},
-		{"InotifyRmWatch", Func, 0},
-		{"InterfaceAddrMessage", Type, 0},
-		{"InterfaceAddrMessage.Data", Field, 0},
-		{"InterfaceAddrMessage.Header", Field, 0},
-		{"InterfaceAnnounceMessage", Type, 1},
-		{"InterfaceAnnounceMessage.Header", Field, 1},
-		{"InterfaceInfo", Type, 0},
-		{"InterfaceInfo.Address", Field, 0},
-		{"InterfaceInfo.BroadcastAddress", Field, 0},
-		{"InterfaceInfo.Flags", Field, 0},
-		{"InterfaceInfo.Netmask", Field, 0},
-		{"InterfaceMessage", Type, 0},
-		{"InterfaceMessage.Data", Field, 0},
-		{"InterfaceMessage.Header", Field, 0},
-		{"InterfaceMulticastAddrMessage", Type, 0},
-		{"InterfaceMulticastAddrMessage.Data", Field, 0},
-		{"InterfaceMulticastAddrMessage.Header", Field, 0},
-		{"InvalidHandle", Const, 0},
-		{"Ioperm", Func, 0},
-		{"Iopl", Func, 0},
-		{"Iovec", Type, 0},
-		{"Iovec.Base", Field, 0},
-		{"Iovec.Len", Field, 0},
-		{"IpAdapterInfo", Type, 0},
-		{"IpAdapterInfo.AdapterName", Field, 0},
-		{"IpAdapterInfo.Address", Field, 0},
-		{"IpAdapterInfo.AddressLength", Field, 0},
-		{"IpAdapterInfo.ComboIndex", Field, 0},
-		{"IpAdapterInfo.CurrentIpAddress", Field, 0},
-		{"IpAdapterInfo.Description", Field, 0},
-		{"IpAdapterInfo.DhcpEnabled", Field, 0},
-		{"IpAdapterInfo.DhcpServer", Field, 0},
-		{"IpAdapterInfo.GatewayList", Field, 0},
-		{"IpAdapterInfo.HaveWins", Field, 0},
-		{"IpAdapterInfo.Index", Field, 0},
-		{"IpAdapterInfo.IpAddressList", Field, 0},
-		{"IpAdapterInfo.LeaseExpires", Field, 0},
-		{"IpAdapterInfo.LeaseObtained", Field, 0},
-		{"IpAdapterInfo.Next", Field, 0},
-		{"IpAdapterInfo.PrimaryWinsServer", Field, 0},
-		{"IpAdapterInfo.SecondaryWinsServer", Field, 0},
-		{"IpAdapterInfo.Type", Field, 0},
-		{"IpAddrString", Type, 0},
-		{"IpAddrString.Context", Field, 0},
-		{"IpAddrString.IpAddress", Field, 0},
-		{"IpAddrString.IpMask", Field, 0},
-		{"IpAddrString.Next", Field, 0},
-		{"IpAddressString", Type, 0},
-		{"IpAddressString.String", Field, 0},
-		{"IpMaskString", Type, 0},
-		{"IpMaskString.String", Field, 2},
-		{"Issetugid", Func, 0},
-		{"KEY_ALL_ACCESS", Const, 0},
-		{"KEY_CREATE_LINK", Const, 0},
-		{"KEY_CREATE_SUB_KEY", Const, 0},
-		{"KEY_ENUMERATE_SUB_KEYS", Const, 0},
-		{"KEY_EXECUTE", Const, 0},
-		{"KEY_NOTIFY", Const, 0},
-		{"KEY_QUERY_VALUE", Const, 0},
-		{"KEY_READ", Const, 0},
-		{"KEY_SET_VALUE", Const, 0},
-		{"KEY_WOW64_32KEY", Const, 0},
-		{"KEY_WOW64_64KEY", Const, 0},
-		{"KEY_WRITE", Const, 0},
-		{"Kevent", Func, 0},
-		{"Kevent_t", Type, 0},
-		{"Kevent_t.Data", Field, 0},
-		{"Kevent_t.Fflags", Field, 0},
-		{"Kevent_t.Filter", Field, 0},
-		{"Kevent_t.Flags", Field, 0},
-		{"Kevent_t.Ident", Field, 0},
-		{"Kevent_t.Pad_cgo_0", Field, 2},
-		{"Kevent_t.Udata", Field, 0},
-		{"Kill", Func, 0},
-		{"Klogctl", Func, 0},
-		{"Kqueue", Func, 0},
-		{"LANG_ENGLISH", Const, 0},
-		{"LAYERED_PROTOCOL", Const, 2},
-		{"LCNT_OVERLOAD_FLUSH", Const, 1},
-		{"LINUX_REBOOT_CMD_CAD_OFF", Const, 0},
-		{"LINUX_REBOOT_CMD_CAD_ON", Const, 0},
-		{"LINUX_REBOOT_CMD_HALT", Const, 0},
-		{"LINUX_REBOOT_CMD_KEXEC", Const, 0},
-		{"LINUX_REBOOT_CMD_POWER_OFF", Const, 0},
-		{"LINUX_REBOOT_CMD_RESTART", Const, 0},
-		{"LINUX_REBOOT_CMD_RESTART2", Const, 0},
-		{"LINUX_REBOOT_CMD_SW_SUSPEND", Const, 0},
-		{"LINUX_REBOOT_MAGIC1", Const, 0},
-		{"LINUX_REBOOT_MAGIC2", Const, 0},
-		{"LOCK_EX", Const, 0},
-		{"LOCK_NB", Const, 0},
-		{"LOCK_SH", Const, 0},
-		{"LOCK_UN", Const, 0},
-		{"LazyDLL", Type, 0},
-		{"LazyDLL.Name", Field, 0},
-		{"LazyProc", Type, 0},
-		{"LazyProc.Name", Field, 0},
-		{"Lchown", Func, 0},
-		{"Linger", Type, 0},
-		{"Linger.Linger", Field, 0},
-		{"Linger.Onoff", Field, 0},
-		{"Link", Func, 0},
-		{"Listen", Func, 0},
-		{"Listxattr", Func, 1},
-		{"LoadCancelIoEx", Func, 1},
-		{"LoadConnectEx", Func, 1},
-		{"LoadCreateSymbolicLink", Func, 4},
-		{"LoadDLL", Func, 0},
-		{"LoadGetAddrInfo", Func, 1},
-		{"LoadLibrary", Func, 0},
-		{"LoadSetFileCompletionNotificationModes", Func, 2},
-		{"LocalFree", Func, 0},
-		{"Log2phys_t", Type, 0},
-		{"Log2phys_t.Contigbytes", Field, 0},
-		{"Log2phys_t.Devoffset", Field, 0},
-		{"Log2phys_t.Flags", Field, 0},
-		{"LookupAccountName", Func, 0},
-		{"LookupAccountSid", Func, 0},
-		{"LookupSID", Func, 0},
-		{"LsfJump", Func, 0},
-		{"LsfSocket", Func, 0},
-		{"LsfStmt", Func, 0},
-		{"Lstat", Func, 0},
-		{"MADV_AUTOSYNC", Const, 1},
-		{"MADV_CAN_REUSE", Const, 0},
-		{"MADV_CORE", Const, 1},
-		{"MADV_DOFORK", Const, 0},
-		{"MADV_DONTFORK", Const, 0},
-		{"MADV_DONTNEED", Const, 0},
-		{"MADV_FREE", Const, 0},
-		{"MADV_FREE_REUSABLE", Const, 0},
-		{"MADV_FREE_REUSE", Const, 0},
-		{"MADV_HUGEPAGE", Const, 0},
-		{"MADV_HWPOISON", Const, 0},
-		{"MADV_MERGEABLE", Const, 0},
-		{"MADV_NOCORE", Const, 1},
-		{"MADV_NOHUGEPAGE", Const, 0},
-		{"MADV_NORMAL", Const, 0},
-		{"MADV_NOSYNC", Const, 1},
-		{"MADV_PROTECT", Const, 1},
-		{"MADV_RANDOM", Const, 0},
-		{"MADV_REMOVE", Const, 0},
-		{"MADV_SEQUENTIAL", Const, 0},
-		{"MADV_SPACEAVAIL", Const, 3},
-		{"MADV_UNMERGEABLE", Const, 0},
-		{"MADV_WILLNEED", Const, 0},
-		{"MADV_ZERO_WIRED_PAGES", Const, 0},
-		{"MAP_32BIT", Const, 0},
-		{"MAP_ALIGNED_SUPER", Const, 3},
-		{"MAP_ALIGNMENT_16MB", Const, 3},
-		{"MAP_ALIGNMENT_1TB", Const, 3},
-		{"MAP_ALIGNMENT_256TB", Const, 3},
-		{"MAP_ALIGNMENT_4GB", Const, 3},
-		{"MAP_ALIGNMENT_64KB", Const, 3},
-		{"MAP_ALIGNMENT_64PB", Const, 3},
-		{"MAP_ALIGNMENT_MASK", Const, 3},
-		{"MAP_ALIGNMENT_SHIFT", Const, 3},
-		{"MAP_ANON", Const, 0},
-		{"MAP_ANONYMOUS", Const, 0},
-		{"MAP_COPY", Const, 0},
-		{"MAP_DENYWRITE", Const, 0},
-		{"MAP_EXECUTABLE", Const, 0},
-		{"MAP_FILE", Const, 0},
-		{"MAP_FIXED", Const, 0},
-		{"MAP_FLAGMASK", Const, 3},
-		{"MAP_GROWSDOWN", Const, 0},
-		{"MAP_HASSEMAPHORE", Const, 0},
-		{"MAP_HUGETLB", Const, 0},
-		{"MAP_INHERIT", Const, 3},
-		{"MAP_INHERIT_COPY", Const, 3},
-		{"MAP_INHERIT_DEFAULT", Const, 3},
-		{"MAP_INHERIT_DONATE_COPY", Const, 3},
-		{"MAP_INHERIT_NONE", Const, 3},
-		{"MAP_INHERIT_SHARE", Const, 3},
-		{"MAP_JIT", Const, 0},
-		{"MAP_LOCKED", Const, 0},
-		{"MAP_NOCACHE", Const, 0},
-		{"MAP_NOCORE", Const, 1},
-		{"MAP_NOEXTEND", Const, 0},
-		{"MAP_NONBLOCK", Const, 0},
-		{"MAP_NORESERVE", Const, 0},
-		{"MAP_NOSYNC", Const, 1},
-		{"MAP_POPULATE", Const, 0},
-		{"MAP_PREFAULT_READ", Const, 1},
-		{"MAP_PRIVATE", Const, 0},
-		{"MAP_RENAME", Const, 0},
-		{"MAP_RESERVED0080", Const, 0},
-		{"MAP_RESERVED0100", Const, 1},
-		{"MAP_SHARED", Const, 0},
-		{"MAP_STACK", Const, 0},
-		{"MAP_TRYFIXED", Const, 3},
-		{"MAP_TYPE", Const, 0},
-		{"MAP_WIRED", Const, 3},
-		{"MAXIMUM_REPARSE_DATA_BUFFER_SIZE", Const, 4},
-		{"MAXLEN_IFDESCR", Const, 0},
-		{"MAXLEN_PHYSADDR", Const, 0},
-		{"MAX_ADAPTER_ADDRESS_LENGTH", Const, 0},
-		{"MAX_ADAPTER_DESCRIPTION_LENGTH", Const, 0},
-		{"MAX_ADAPTER_NAME_LENGTH", Const, 0},
-		{"MAX_COMPUTERNAME_LENGTH", Const, 0},
-		{"MAX_INTERFACE_NAME_LEN", Const, 0},
-		{"MAX_LONG_PATH", Const, 0},
-		{"MAX_PATH", Const, 0},
-		{"MAX_PROTOCOL_CHAIN", Const, 2},
-		{"MCL_CURRENT", Const, 0},
-		{"MCL_FUTURE", Const, 0},
-		{"MNT_DETACH", Const, 0},
-		{"MNT_EXPIRE", Const, 0},
-		{"MNT_FORCE", Const, 0},
-		{"MSG_BCAST", Const, 1},
-		{"MSG_CMSG_CLOEXEC", Const, 0},
-		{"MSG_COMPAT", Const, 0},
-		{"MSG_CONFIRM", Const, 0},
-		{"MSG_CONTROLMBUF", Const, 1},
-		{"MSG_CTRUNC", Const, 0},
-		{"MSG_DONTROUTE", Const, 0},
-		{"MSG_DONTWAIT", Const, 0},
-		{"MSG_EOF", Const, 0},
-		{"MSG_EOR", Const, 0},
-		{"MSG_ERRQUEUE", Const, 0},
-		{"MSG_FASTOPEN", Const, 1},
-		{"MSG_FIN", Const, 0},
-		{"MSG_FLUSH", Const, 0},
-		{"MSG_HAVEMORE", Const, 0},
-		{"MSG_HOLD", Const, 0},
-		{"MSG_IOVUSRSPACE", Const, 1},
-		{"MSG_LENUSRSPACE", Const, 1},
-		{"MSG_MCAST", Const, 1},
-		{"MSG_MORE", Const, 0},
-		{"MSG_NAMEMBUF", Const, 1},
-		{"MSG_NBIO", Const, 0},
-		{"MSG_NEEDSA", Const, 0},
-		{"MSG_NOSIGNAL", Const, 0},
-		{"MSG_NOTIFICATION", Const, 0},
-		{"MSG_OOB", Const, 0},
-		{"MSG_PEEK", Const, 0},
-		{"MSG_PROXY", Const, 0},
-		{"MSG_RCVMORE", Const, 0},
-		{"MSG_RST", Const, 0},
-		{"MSG_SEND", Const, 0},
-		{"MSG_SYN", Const, 0},
-		{"MSG_TRUNC", Const, 0},
-		{"MSG_TRYHARD", Const, 0},
-		{"MSG_USERFLAGS", Const, 1},
-		{"MSG_WAITALL", Const, 0},
-		{"MSG_WAITFORONE", Const, 0},
-		{"MSG_WAITSTREAM", Const, 0},
-		{"MS_ACTIVE", Const, 0},
-		{"MS_ASYNC", Const, 0},
-		{"MS_BIND", Const, 0},
-		{"MS_DEACTIVATE", Const, 0},
-		{"MS_DIRSYNC", Const, 0},
-		{"MS_INVALIDATE", Const, 0},
-		{"MS_I_VERSION", Const, 0},
-		{"MS_KERNMOUNT", Const, 0},
-		{"MS_KILLPAGES", Const, 0},
-		{"MS_MANDLOCK", Const, 0},
-		{"MS_MGC_MSK", Const, 0},
-		{"MS_MGC_VAL", Const, 0},
-		{"MS_MOVE", Const, 0},
-		{"MS_NOATIME", Const, 0},
-		{"MS_NODEV", Const, 0},
-		{"MS_NODIRATIME", Const, 0},
-		{"MS_NOEXEC", Const, 0},
-		{"MS_NOSUID", Const, 0},
-		{"MS_NOUSER", Const, 0},
-		{"MS_POSIXACL", Const, 0},
-		{"MS_PRIVATE", Const, 0},
-		{"MS_RDONLY", Const, 0},
-		{"MS_REC", Const, 0},
-		{"MS_RELATIME", Const, 0},
-		{"MS_REMOUNT", Const, 0},
-		{"MS_RMT_MASK", Const, 0},
-		{"MS_SHARED", Const, 0},
-		{"MS_SILENT", Const, 0},
-		{"MS_SLAVE", Const, 0},
-		{"MS_STRICTATIME", Const, 0},
-		{"MS_SYNC", Const, 0},
-		{"MS_SYNCHRONOUS", Const, 0},
-		{"MS_UNBINDABLE", Const, 0},
-		{"Madvise", Func, 0},
-		{"MapViewOfFile", Func, 0},
-		{"MaxTokenInfoClass", Const, 0},
-		{"Mclpool", Type, 2},
-		{"Mclpool.Alive", Field, 2},
-		{"Mclpool.Cwm", Field, 2},
-		{"Mclpool.Grown", Field, 2},
-		{"Mclpool.Hwm", Field, 2},
-		{"Mclpool.Lwm", Field, 2},
-		{"MibIfRow", Type, 0},
-		{"MibIfRow.AdminStatus", Field, 0},
-		{"MibIfRow.Descr", Field, 0},
-		{"MibIfRow.DescrLen", Field, 0},
-		{"MibIfRow.InDiscards", Field, 0},
-		{"MibIfRow.InErrors", Field, 0},
-		{"MibIfRow.InNUcastPkts", Field, 0},
-		{"MibIfRow.InOctets", Field, 0},
-		{"MibIfRow.InUcastPkts", Field, 0},
-		{"MibIfRow.InUnknownProtos", Field, 0},
-		{"MibIfRow.Index", Field, 0},
-		{"MibIfRow.LastChange", Field, 0},
-		{"MibIfRow.Mtu", Field, 0},
-		{"MibIfRow.Name", Field, 0},
-		{"MibIfRow.OperStatus", Field, 0},
-		{"MibIfRow.OutDiscards", Field, 0},
-		{"MibIfRow.OutErrors", Field, 0},
-		{"MibIfRow.OutNUcastPkts", Field, 0},
-		{"MibIfRow.OutOctets", Field, 0},
-		{"MibIfRow.OutQLen", Field, 0},
-		{"MibIfRow.OutUcastPkts", Field, 0},
-		{"MibIfRow.PhysAddr", Field, 0},
-		{"MibIfRow.PhysAddrLen", Field, 0},
-		{"MibIfRow.Speed", Field, 0},
-		{"MibIfRow.Type", Field, 0},
-		{"Mkdir", Func, 0},
-		{"Mkdirat", Func, 0},
-		{"Mkfifo", Func, 0},
-		{"Mknod", Func, 0},
-		{"Mknodat", Func, 0},
-		{"Mlock", Func, 0},
-		{"Mlockall", Func, 0},
-		{"Mmap", Func, 0},
-		{"Mount", Func, 0},
-		{"MoveFile", Func, 0},
-		{"Mprotect", Func, 0},
-		{"Msghdr", Type, 0},
-		{"Msghdr.Control", Field, 0},
-		{"Msghdr.Controllen", Field, 0},
-		{"Msghdr.Flags", Field, 0},
-		{"Msghdr.Iov", Field, 0},
-		{"Msghdr.Iovlen", Field, 0},
-		{"Msghdr.Name", Field, 0},
-		{"Msghdr.Namelen", Field, 0},
-		{"Msghdr.Pad_cgo_0", Field, 0},
-		{"Msghdr.Pad_cgo_1", Field, 0},
-		{"Munlock", Func, 0},
-		{"Munlockall", Func, 0},
-		{"Munmap", Func, 0},
-		{"MustLoadDLL", Func, 0},
-		{"NAME_MAX", Const, 0},
-		{"NETLINK_ADD_MEMBERSHIP", Const, 0},
-		{"NETLINK_AUDIT", Const, 0},
-		{"NETLINK_BROADCAST_ERROR", Const, 0},
-		{"NETLINK_CONNECTOR", Const, 0},
-		{"NETLINK_DNRTMSG", Const, 0},
-		{"NETLINK_DROP_MEMBERSHIP", Const, 0},
-		{"NETLINK_ECRYPTFS", Const, 0},
-		{"NETLINK_FIB_LOOKUP", Const, 0},
-		{"NETLINK_FIREWALL", Const, 0},
-		{"NETLINK_GENERIC", Const, 0},
-		{"NETLINK_INET_DIAG", Const, 0},
-		{"NETLINK_IP6_FW", Const, 0},
-		{"NETLINK_ISCSI", Const, 0},
-		{"NETLINK_KOBJECT_UEVENT", Const, 0},
-		{"NETLINK_NETFILTER", Const, 0},
-		{"NETLINK_NFLOG", Const, 0},
-		{"NETLINK_NO_ENOBUFS", Const, 0},
-		{"NETLINK_PKTINFO", Const, 0},
-		{"NETLINK_RDMA", Const, 0},
-		{"NETLINK_ROUTE", Const, 0},
-		{"NETLINK_SCSITRANSPORT", Const, 0},
-		{"NETLINK_SELINUX", Const, 0},
-		{"NETLINK_UNUSED", Const, 0},
-		{"NETLINK_USERSOCK", Const, 0},
-		{"NETLINK_XFRM", Const, 0},
-		{"NET_RT_DUMP", Const, 0},
-		{"NET_RT_DUMP2", Const, 0},
-		{"NET_RT_FLAGS", Const, 0},
-		{"NET_RT_IFLIST", Const, 0},
-		{"NET_RT_IFLIST2", Const, 0},
-		{"NET_RT_IFLISTL", Const, 1},
-		{"NET_RT_IFMALIST", Const, 0},
-		{"NET_RT_MAXID", Const, 0},
-		{"NET_RT_OIFLIST", Const, 1},
-		{"NET_RT_OOIFLIST", Const, 1},
-		{"NET_RT_STAT", Const, 0},
-		{"NET_RT_STATS", Const, 1},
-		{"NET_RT_TABLE", Const, 1},
-		{"NET_RT_TRASH", Const, 0},
-		{"NLA_ALIGNTO", Const, 0},
-		{"NLA_F_NESTED", Const, 0},
-		{"NLA_F_NET_BYTEORDER", Const, 0},
-		{"NLA_HDRLEN", Const, 0},
-		{"NLMSG_ALIGNTO", Const, 0},
-		{"NLMSG_DONE", Const, 0},
-		{"NLMSG_ERROR", Const, 0},
-		{"NLMSG_HDRLEN", Const, 0},
-		{"NLMSG_MIN_TYPE", Const, 0},
-		{"NLMSG_NOOP", Const, 0},
-		{"NLMSG_OVERRUN", Const, 0},
-		{"NLM_F_ACK", Const, 0},
-		{"NLM_F_APPEND", Const, 0},
-		{"NLM_F_ATOMIC", Const, 0},
-		{"NLM_F_CREATE", Const, 0},
-		{"NLM_F_DUMP", Const, 0},
-		{"NLM_F_ECHO", Const, 0},
-		{"NLM_F_EXCL", Const, 0},
-		{"NLM_F_MATCH", Const, 0},
-		{"NLM_F_MULTI", Const, 0},
-		{"NLM_F_REPLACE", Const, 0},
-		{"NLM_F_REQUEST", Const, 0},
-		{"NLM_F_ROOT", Const, 0},
-		{"NOFLSH", Const, 0},
-		{"NOTE_ABSOLUTE", Const, 0},
-		{"NOTE_ATTRIB", Const, 0},
-		{"NOTE_BACKGROUND", Const, 16},
-		{"NOTE_CHILD", Const, 0},
-		{"NOTE_CRITICAL", Const, 16},
-		{"NOTE_DELETE", Const, 0},
-		{"NOTE_EOF", Const, 1},
-		{"NOTE_EXEC", Const, 0},
-		{"NOTE_EXIT", Const, 0},
-		{"NOTE_EXITSTATUS", Const, 0},
-		{"NOTE_EXIT_CSERROR", Const, 16},
-		{"NOTE_EXIT_DECRYPTFAIL", Const, 16},
-		{"NOTE_EXIT_DETAIL", Const, 16},
-		{"NOTE_EXIT_DETAIL_MASK", Const, 16},
-		{"NOTE_EXIT_MEMORY", Const, 16},
-		{"NOTE_EXIT_REPARENTED", Const, 16},
-		{"NOTE_EXTEND", Const, 0},
-		{"NOTE_FFAND", Const, 0},
-		{"NOTE_FFCOPY", Const, 0},
-		{"NOTE_FFCTRLMASK", Const, 0},
-		{"NOTE_FFLAGSMASK", Const, 0},
-		{"NOTE_FFNOP", Const, 0},
-		{"NOTE_FFOR", Const, 0},
-		{"NOTE_FORK", Const, 0},
-		{"NOTE_LEEWAY", Const, 16},
-		{"NOTE_LINK", Const, 0},
-		{"NOTE_LOWAT", Const, 0},
-		{"NOTE_NONE", Const, 0},
-		{"NOTE_NSECONDS", Const, 0},
-		{"NOTE_PCTRLMASK", Const, 0},
-		{"NOTE_PDATAMASK", Const, 0},
-		{"NOTE_REAP", Const, 0},
-		{"NOTE_RENAME", Const, 0},
-		{"NOTE_RESOURCEEND", Const, 0},
-		{"NOTE_REVOKE", Const, 0},
-		{"NOTE_SECONDS", Const, 0},
-		{"NOTE_SIGNAL", Const, 0},
-		{"NOTE_TRACK", Const, 0},
-		{"NOTE_TRACKERR", Const, 0},
-		{"NOTE_TRIGGER", Const, 0},
-		{"NOTE_TRUNCATE", Const, 1},
-		{"NOTE_USECONDS", Const, 0},
-		{"NOTE_VM_ERROR", Const, 0},
-		{"NOTE_VM_PRESSURE", Const, 0},
-		{"NOTE_VM_PRESSURE_SUDDEN_TERMINATE", Const, 0},
-		{"NOTE_VM_PRESSURE_TERMINATE", Const, 0},
-		{"NOTE_WRITE", Const, 0},
-		{"NameCanonical", Const, 0},
-		{"NameCanonicalEx", Const, 0},
-		{"NameDisplay", Const, 0},
-		{"NameDnsDomain", Const, 0},
-		{"NameFullyQualifiedDN", Const, 0},
-		{"NameSamCompatible", Const, 0},
-		{"NameServicePrincipal", Const, 0},
-		{"NameUniqueId", Const, 0},
-		{"NameUnknown", Const, 0},
-		{"NameUserPrincipal", Const, 0},
-		{"Nanosleep", Func, 0},
-		{"NetApiBufferFree", Func, 0},
-		{"NetGetJoinInformation", Func, 2},
-		{"NetSetupDomainName", Const, 2},
-		{"NetSetupUnjoined", Const, 2},
-		{"NetSetupUnknownStatus", Const, 2},
-		{"NetSetupWorkgroupName", Const, 2},
-		{"NetUserGetInfo", Func, 0},
-		{"NetlinkMessage", Type, 0},
-		{"NetlinkMessage.Data", Field, 0},
-		{"NetlinkMessage.Header", Field, 0},
-		{"NetlinkRIB", Func, 0},
-		{"NetlinkRouteAttr", Type, 0},
-		{"NetlinkRouteAttr.Attr", Field, 0},
-		{"NetlinkRouteAttr.Value", Field, 0},
-		{"NetlinkRouteRequest", Type, 0},
-		{"NetlinkRouteRequest.Data", Field, 0},
-		{"NetlinkRouteRequest.Header", Field, 0},
-		{"NewCallback", Func, 0},
-		{"NewCallbackCDecl", Func, 3},
-		{"NewLazyDLL", Func, 0},
-		{"NlAttr", Type, 0},
-		{"NlAttr.Len", Field, 0},
-		{"NlAttr.Type", Field, 0},
-		{"NlMsgerr", Type, 0},
-		{"NlMsgerr.Error", Field, 0},
-		{"NlMsgerr.Msg", Field, 0},
-		{"NlMsghdr", Type, 0},
-		{"NlMsghdr.Flags", Field, 0},
-		{"NlMsghdr.Len", Field, 0},
-		{"NlMsghdr.Pid", Field, 0},
-		{"NlMsghdr.Seq", Field, 0},
-		{"NlMsghdr.Type", Field, 0},
-		{"NsecToFiletime", Func, 0},
-		{"NsecToTimespec", Func, 0},
-		{"NsecToTimeval", Func, 0},
-		{"Ntohs", Func, 0},
-		{"OCRNL", Const, 0},
-		{"OFDEL", Const, 0},
-		{"OFILL", Const, 0},
-		{"OFIOGETBMAP", Const, 1},
-		{"OID_PKIX_KP_SERVER_AUTH", Var, 0},
-		{"OID_SERVER_GATED_CRYPTO", Var, 0},
-		{"OID_SGC_NETSCAPE", Var, 0},
-		{"OLCUC", Const, 0},
-		{"ONLCR", Const, 0},
-		{"ONLRET", Const, 0},
-		{"ONOCR", Const, 0},
-		{"ONOEOT", Const, 1},
-		{"OPEN_ALWAYS", Const, 0},
-		{"OPEN_EXISTING", Const, 0},
-		{"OPOST", Const, 0},
-		{"O_ACCMODE", Const, 0},
-		{"O_ALERT", Const, 0},
-		{"O_ALT_IO", Const, 1},
-		{"O_APPEND", Const, 0},
-		{"O_ASYNC", Const, 0},
-		{"O_CLOEXEC", Const, 0},
-		{"O_CREAT", Const, 0},
-		{"O_DIRECT", Const, 0},
-		{"O_DIRECTORY", Const, 0},
-		{"O_DP_GETRAWENCRYPTED", Const, 16},
-		{"O_DSYNC", Const, 0},
-		{"O_EVTONLY", Const, 0},
-		{"O_EXCL", Const, 0},
-		{"O_EXEC", Const, 0},
-		{"O_EXLOCK", Const, 0},
-		{"O_FSYNC", Const, 0},
-		{"O_LARGEFILE", Const, 0},
-		{"O_NDELAY", Const, 0},
-		{"O_NOATIME", Const, 0},
-		{"O_NOCTTY", Const, 0},
-		{"O_NOFOLLOW", Const, 0},
-		{"O_NONBLOCK", Const, 0},
-		{"O_NOSIGPIPE", Const, 1},
-		{"O_POPUP", Const, 0},
-		{"O_RDONLY", Const, 0},
-		{"O_RDWR", Const, 0},
-		{"O_RSYNC", Const, 0},
-		{"O_SHLOCK", Const, 0},
-		{"O_SYMLINK", Const, 0},
-		{"O_SYNC", Const, 0},
-		{"O_TRUNC", Const, 0},
-		{"O_TTY_INIT", Const, 0},
-		{"O_WRONLY", Const, 0},
-		{"Open", Func, 0},
-		{"OpenCurrentProcessToken", Func, 0},
-		{"OpenProcess", Func, 0},
-		{"OpenProcessToken", Func, 0},
-		{"Openat", Func, 0},
-		{"Overlapped", Type, 0},
-		{"Overlapped.HEvent", Field, 0},
-		{"Overlapped.Internal", Field, 0},
-		{"Overlapped.InternalHigh", Field, 0},
-		{"Overlapped.Offset", Field, 0},
-		{"Overlapped.OffsetHigh", Field, 0},
-		{"PACKET_ADD_MEMBERSHIP", Const, 0},
-		{"PACKET_BROADCAST", Const, 0},
-		{"PACKET_DROP_MEMBERSHIP", Const, 0},
-		{"PACKET_FASTROUTE", Const, 0},
-		{"PACKET_HOST", Const, 0},
-		{"PACKET_LOOPBACK", Const, 0},
-		{"PACKET_MR_ALLMULTI", Const, 0},
-		{"PACKET_MR_MULTICAST", Const, 0},
-		{"PACKET_MR_PROMISC", Const, 0},
-		{"PACKET_MULTICAST", Const, 0},
-		{"PACKET_OTHERHOST", Const, 0},
-		{"PACKET_OUTGOING", Const, 0},
-		{"PACKET_RECV_OUTPUT", Const, 0},
-		{"PACKET_RX_RING", Const, 0},
-		{"PACKET_STATISTICS", Const, 0},
-		{"PAGE_EXECUTE_READ", Const, 0},
-		{"PAGE_EXECUTE_READWRITE", Const, 0},
-		{"PAGE_EXECUTE_WRITECOPY", Const, 0},
-		{"PAGE_READONLY", Const, 0},
-		{"PAGE_READWRITE", Const, 0},
-		{"PAGE_WRITECOPY", Const, 0},
-		{"PARENB", Const, 0},
-		{"PARMRK", Const, 0},
-		{"PARODD", Const, 0},
-		{"PENDIN", Const, 0},
-		{"PFL_HIDDEN", Const, 2},
-		{"PFL_MATCHES_PROTOCOL_ZERO", Const, 2},
-		{"PFL_MULTIPLE_PROTO_ENTRIES", Const, 2},
-		{"PFL_NETWORKDIRECT_PROVIDER", Const, 2},
-		{"PFL_RECOMMENDED_PROTO_ENTRY", Const, 2},
-		{"PF_FLUSH", Const, 1},
-		{"PKCS_7_ASN_ENCODING", Const, 0},
-		{"PMC5_PIPELINE_FLUSH", Const, 1},
-		{"PRIO_PGRP", Const, 2},
-		{"PRIO_PROCESS", Const, 2},
-		{"PRIO_USER", Const, 2},
-		{"PRI_IOFLUSH", Const, 1},
-		{"PROCESS_QUERY_INFORMATION", Const, 0},
-		{"PROCESS_TERMINATE", Const, 2},
-		{"PROT_EXEC", Const, 0},
-		{"PROT_GROWSDOWN", Const, 0},
-		{"PROT_GROWSUP", Const, 0},
-		{"PROT_NONE", Const, 0},
-		{"PROT_READ", Const, 0},
-		{"PROT_WRITE", Const, 0},
-		{"PROV_DH_SCHANNEL", Const, 0},
-		{"PROV_DSS", Const, 0},
-		{"PROV_DSS_DH", Const, 0},
-		{"PROV_EC_ECDSA_FULL", Const, 0},
-		{"PROV_EC_ECDSA_SIG", Const, 0},
-		{"PROV_EC_ECNRA_FULL", Const, 0},
-		{"PROV_EC_ECNRA_SIG", Const, 0},
-		{"PROV_FORTEZZA", Const, 0},
-		{"PROV_INTEL_SEC", Const, 0},
-		{"PROV_MS_EXCHANGE", Const, 0},
-		{"PROV_REPLACE_OWF", Const, 0},
-		{"PROV_RNG", Const, 0},
-		{"PROV_RSA_AES", Const, 0},
-		{"PROV_RSA_FULL", Const, 0},
-		{"PROV_RSA_SCHANNEL", Const, 0},
-		{"PROV_RSA_SIG", Const, 0},
-		{"PROV_SPYRUS_LYNKS", Const, 0},
-		{"PROV_SSL", Const, 0},
-		{"PR_CAPBSET_DROP", Const, 0},
-		{"PR_CAPBSET_READ", Const, 0},
-		{"PR_CLEAR_SECCOMP_FILTER", Const, 0},
-		{"PR_ENDIAN_BIG", Const, 0},
-		{"PR_ENDIAN_LITTLE", Const, 0},
-		{"PR_ENDIAN_PPC_LITTLE", Const, 0},
-		{"PR_FPEMU_NOPRINT", Const, 0},
-		{"PR_FPEMU_SIGFPE", Const, 0},
-		{"PR_FP_EXC_ASYNC", Const, 0},
-		{"PR_FP_EXC_DISABLED", Const, 0},
-		{"PR_FP_EXC_DIV", Const, 0},
-		{"PR_FP_EXC_INV", Const, 0},
-		{"PR_FP_EXC_NONRECOV", Const, 0},
-		{"PR_FP_EXC_OVF", Const, 0},
-		{"PR_FP_EXC_PRECISE", Const, 0},
-		{"PR_FP_EXC_RES", Const, 0},
-		{"PR_FP_EXC_SW_ENABLE", Const, 0},
-		{"PR_FP_EXC_UND", Const, 0},
-		{"PR_GET_DUMPABLE", Const, 0},
-		{"PR_GET_ENDIAN", Const, 0},
-		{"PR_GET_FPEMU", Const, 0},
-		{"PR_GET_FPEXC", Const, 0},
-		{"PR_GET_KEEPCAPS", Const, 0},
-		{"PR_GET_NAME", Const, 0},
-		{"PR_GET_PDEATHSIG", Const, 0},
-		{"PR_GET_SECCOMP", Const, 0},
-		{"PR_GET_SECCOMP_FILTER", Const, 0},
-		{"PR_GET_SECUREBITS", Const, 0},
-		{"PR_GET_TIMERSLACK", Const, 0},
-		{"PR_GET_TIMING", Const, 0},
-		{"PR_GET_TSC", Const, 0},
-		{"PR_GET_UNALIGN", Const, 0},
-		{"PR_MCE_KILL", Const, 0},
-		{"PR_MCE_KILL_CLEAR", Const, 0},
-		{"PR_MCE_KILL_DEFAULT", Const, 0},
-		{"PR_MCE_KILL_EARLY", Const, 0},
-		{"PR_MCE_KILL_GET", Const, 0},
-		{"PR_MCE_KILL_LATE", Const, 0},
-		{"PR_MCE_KILL_SET", Const, 0},
-		{"PR_SECCOMP_FILTER_EVENT", Const, 0},
-		{"PR_SECCOMP_FILTER_SYSCALL", Const, 0},
-		{"PR_SET_DUMPABLE", Const, 0},
-		{"PR_SET_ENDIAN", Const, 0},
-		{"PR_SET_FPEMU", Const, 0},
-		{"PR_SET_FPEXC", Const, 0},
-		{"PR_SET_KEEPCAPS", Const, 0},
-		{"PR_SET_NAME", Const, 0},
-		{"PR_SET_PDEATHSIG", Const, 0},
-		{"PR_SET_PTRACER", Const, 0},
-		{"PR_SET_SECCOMP", Const, 0},
-		{"PR_SET_SECCOMP_FILTER", Const, 0},
-		{"PR_SET_SECUREBITS", Const, 0},
-		{"PR_SET_TIMERSLACK", Const, 0},
-		{"PR_SET_TIMING", Const, 0},
-		{"PR_SET_TSC", Const, 0},
-		{"PR_SET_UNALIGN", Const, 0},
-		{"PR_TASK_PERF_EVENTS_DISABLE", Const, 0},
-		{"PR_TASK_PERF_EVENTS_ENABLE", Const, 0},
-		{"PR_TIMING_STATISTICAL", Const, 0},
-		{"PR_TIMING_TIMESTAMP", Const, 0},
-		{"PR_TSC_ENABLE", Const, 0},
-		{"PR_TSC_SIGSEGV", Const, 0},
-		{"PR_UNALIGN_NOPRINT", Const, 0},
-		{"PR_UNALIGN_SIGBUS", Const, 0},
-		{"PTRACE_ARCH_PRCTL", Const, 0},
-		{"PTRACE_ATTACH", Const, 0},
-		{"PTRACE_CONT", Const, 0},
-		{"PTRACE_DETACH", Const, 0},
-		{"PTRACE_EVENT_CLONE", Const, 0},
-		{"PTRACE_EVENT_EXEC", Const, 0},
-		{"PTRACE_EVENT_EXIT", Const, 0},
-		{"PTRACE_EVENT_FORK", Const, 0},
-		{"PTRACE_EVENT_VFORK", Const, 0},
-		{"PTRACE_EVENT_VFORK_DONE", Const, 0},
-		{"PTRACE_GETCRUNCHREGS", Const, 0},
-		{"PTRACE_GETEVENTMSG", Const, 0},
-		{"PTRACE_GETFPREGS", Const, 0},
-		{"PTRACE_GETFPXREGS", Const, 0},
-		{"PTRACE_GETHBPREGS", Const, 0},
-		{"PTRACE_GETREGS", Const, 0},
-		{"PTRACE_GETREGSET", Const, 0},
-		{"PTRACE_GETSIGINFO", Const, 0},
-		{"PTRACE_GETVFPREGS", Const, 0},
-		{"PTRACE_GETWMMXREGS", Const, 0},
-		{"PTRACE_GET_THREAD_AREA", Const, 0},
-		{"PTRACE_KILL", Const, 0},
-		{"PTRACE_OLDSETOPTIONS", Const, 0},
-		{"PTRACE_O_MASK", Const, 0},
-		{"PTRACE_O_TRACECLONE", Const, 0},
-		{"PTRACE_O_TRACEEXEC", Const, 0},
-		{"PTRACE_O_TRACEEXIT", Const, 0},
-		{"PTRACE_O_TRACEFORK", Const, 0},
-		{"PTRACE_O_TRACESYSGOOD", Const, 0},
-		{"PTRACE_O_TRACEVFORK", Const, 0},
-		{"PTRACE_O_TRACEVFORKDONE", Const, 0},
-		{"PTRACE_PEEKDATA", Const, 0},
-		{"PTRACE_PEEKTEXT", Const, 0},
-		{"PTRACE_PEEKUSR", Const, 0},
-		{"PTRACE_POKEDATA", Const, 0},
-		{"PTRACE_POKETEXT", Const, 0},
-		{"PTRACE_POKEUSR", Const, 0},
-		{"PTRACE_SETCRUNCHREGS", Const, 0},
-		{"PTRACE_SETFPREGS", Const, 0},
-		{"PTRACE_SETFPXREGS", Const, 0},
-		{"PTRACE_SETHBPREGS", Const, 0},
-		{"PTRACE_SETOPTIONS", Const, 0},
-		{"PTRACE_SETREGS", Const, 0},
-		{"PTRACE_SETREGSET", Const, 0},
-		{"PTRACE_SETSIGINFO", Const, 0},
-		{"PTRACE_SETVFPREGS", Const, 0},
-		{"PTRACE_SETWMMXREGS", Const, 0},
-		{"PTRACE_SET_SYSCALL", Const, 0},
-		{"PTRACE_SET_THREAD_AREA", Const, 0},
-		{"PTRACE_SINGLEBLOCK", Const, 0},
-		{"PTRACE_SINGLESTEP", Const, 0},
-		{"PTRACE_SYSCALL", Const, 0},
-		{"PTRACE_SYSEMU", Const, 0},
-		{"PTRACE_SYSEMU_SINGLESTEP", Const, 0},
-		{"PTRACE_TRACEME", Const, 0},
-		{"PT_ATTACH", Const, 0},
-		{"PT_ATTACHEXC", Const, 0},
-		{"PT_CONTINUE", Const, 0},
-		{"PT_DATA_ADDR", Const, 0},
-		{"PT_DENY_ATTACH", Const, 0},
-		{"PT_DETACH", Const, 0},
-		{"PT_FIRSTMACH", Const, 0},
-		{"PT_FORCEQUOTA", Const, 0},
-		{"PT_KILL", Const, 0},
-		{"PT_MASK", Const, 1},
-		{"PT_READ_D", Const, 0},
-		{"PT_READ_I", Const, 0},
-		{"PT_READ_U", Const, 0},
-		{"PT_SIGEXC", Const, 0},
-		{"PT_STEP", Const, 0},
-		{"PT_TEXT_ADDR", Const, 0},
-		{"PT_TEXT_END_ADDR", Const, 0},
-		{"PT_THUPDATE", Const, 0},
-		{"PT_TRACE_ME", Const, 0},
-		{"PT_WRITE_D", Const, 0},
-		{"PT_WRITE_I", Const, 0},
-		{"PT_WRITE_U", Const, 0},
-		{"ParseDirent", Func, 0},
-		{"ParseNetlinkMessage", Func, 0},
-		{"ParseNetlinkRouteAttr", Func, 0},
-		{"ParseRoutingMessage", Func, 0},
-		{"ParseRoutingSockaddr", Func, 0},
-		{"ParseSocketControlMessage", Func, 0},
-		{"ParseUnixCredentials", Func, 0},
-		{"ParseUnixRights", Func, 0},
-		{"PathMax", Const, 0},
-		{"Pathconf", Func, 0},
-		{"Pause", Func, 0},
-		{"Pipe", Func, 0},
-		{"Pipe2", Func, 1},
-		{"PivotRoot", Func, 0},
-		{"Pointer", Type, 11},
-		{"PostQueuedCompletionStatus", Func, 0},
-		{"Pread", Func, 0},
-		{"Proc", Type, 0},
-		{"Proc.Dll", Field, 0},
-		{"Proc.Name", Field, 0},
-		{"ProcAttr", Type, 0},
-		{"ProcAttr.Dir", Field, 0},
-		{"ProcAttr.Env", Field, 0},
-		{"ProcAttr.Files", Field, 0},
-		{"ProcAttr.Sys", Field, 0},
-		{"Process32First", Func, 4},
-		{"Process32Next", Func, 4},
-		{"ProcessEntry32", Type, 4},
-		{"ProcessEntry32.DefaultHeapID", Field, 4},
-		{"ProcessEntry32.ExeFile", Field, 4},
-		{"ProcessEntry32.Flags", Field, 4},
-		{"ProcessEntry32.ModuleID", Field, 4},
-		{"ProcessEntry32.ParentProcessID", Field, 4},
-		{"ProcessEntry32.PriClassBase", Field, 4},
-		{"ProcessEntry32.ProcessID", Field, 4},
-		{"ProcessEntry32.Size", Field, 4},
-		{"ProcessEntry32.Threads", Field, 4},
-		{"ProcessEntry32.Usage", Field, 4},
-		{"ProcessInformation", Type, 0},
-		{"ProcessInformation.Process", Field, 0},
-		{"ProcessInformation.ProcessId", Field, 0},
-		{"ProcessInformation.Thread", Field, 0},
-		{"ProcessInformation.ThreadId", Field, 0},
-		{"Protoent", Type, 0},
-		{"Protoent.Aliases", Field, 0},
-		{"Protoent.Name", Field, 0},
-		{"Protoent.Proto", Field, 0},
-		{"PtraceAttach", Func, 0},
-		{"PtraceCont", Func, 0},
-		{"PtraceDetach", Func, 0},
-		{"PtraceGetEventMsg", Func, 0},
-		{"PtraceGetRegs", Func, 0},
-		{"PtracePeekData", Func, 0},
-		{"PtracePeekText", Func, 0},
-		{"PtracePokeData", Func, 0},
-		{"PtracePokeText", Func, 0},
-		{"PtraceRegs", Type, 0},
-		{"PtraceRegs.Cs", Field, 0},
-		{"PtraceRegs.Ds", Field, 0},
-		{"PtraceRegs.Eax", Field, 0},
-		{"PtraceRegs.Ebp", Field, 0},
-		{"PtraceRegs.Ebx", Field, 0},
-		{"PtraceRegs.Ecx", Field, 0},
-		{"PtraceRegs.Edi", Field, 0},
-		{"PtraceRegs.Edx", Field, 0},
-		{"PtraceRegs.Eflags", Field, 0},
-		{"PtraceRegs.Eip", Field, 0},
-		{"PtraceRegs.Es", Field, 0},
-		{"PtraceRegs.Esi", Field, 0},
-		{"PtraceRegs.Esp", Field, 0},
-		{"PtraceRegs.Fs", Field, 0},
-		{"PtraceRegs.Fs_base", Field, 0},
-		{"PtraceRegs.Gs", Field, 0},
-		{"PtraceRegs.Gs_base", Field, 0},
-		{"PtraceRegs.Orig_eax", Field, 0},
-		{"PtraceRegs.Orig_rax", Field, 0},
-		{"PtraceRegs.R10", Field, 0},
-		{"PtraceRegs.R11", Field, 0},
-		{"PtraceRegs.R12", Field, 0},
-		{"PtraceRegs.R13", Field, 0},
-		{"PtraceRegs.R14", Field, 0},
-		{"PtraceRegs.R15", Field, 0},
-		{"PtraceRegs.R8", Field, 0},
-		{"PtraceRegs.R9", Field, 0},
-		{"PtraceRegs.Rax", Field, 0},
-		{"PtraceRegs.Rbp", Field, 0},
-		{"PtraceRegs.Rbx", Field, 0},
-		{"PtraceRegs.Rcx", Field, 0},
-		{"PtraceRegs.Rdi", Field, 0},
-		{"PtraceRegs.Rdx", Field, 0},
-		{"PtraceRegs.Rip", Field, 0},
-		{"PtraceRegs.Rsi", Field, 0},
-		{"PtraceRegs.Rsp", Field, 0},
-		{"PtraceRegs.Ss", Field, 0},
-		{"PtraceRegs.Uregs", Field, 0},
-		{"PtraceRegs.Xcs", Field, 0},
-		{"PtraceRegs.Xds", Field, 0},
-		{"PtraceRegs.Xes", Field, 0},
-		{"PtraceRegs.Xfs", Field, 0},
-		{"PtraceRegs.Xgs", Field, 0},
-		{"PtraceRegs.Xss", Field, 0},
-		{"PtraceSetOptions", Func, 0},
-		{"PtraceSetRegs", Func, 0},
-		{"PtraceSingleStep", Func, 0},
-		{"PtraceSyscall", Func, 1},
-		{"Pwrite", Func, 0},
-		{"REG_BINARY", Const, 0},
-		{"REG_DWORD", Const, 0},
-		{"REG_DWORD_BIG_ENDIAN", Const, 0},
-		{"REG_DWORD_LITTLE_ENDIAN", Const, 0},
-		{"REG_EXPAND_SZ", Const, 0},
-		{"REG_FULL_RESOURCE_DESCRIPTOR", Const, 0},
-		{"REG_LINK", Const, 0},
-		{"REG_MULTI_SZ", Const, 0},
-		{"REG_NONE", Const, 0},
-		{"REG_QWORD", Const, 0},
-		{"REG_QWORD_LITTLE_ENDIAN", Const, 0},
-		{"REG_RESOURCE_LIST", Const, 0},
-		{"REG_RESOURCE_REQUIREMENTS_LIST", Const, 0},
-		{"REG_SZ", Const, 0},
-		{"RLIMIT_AS", Const, 0},
-		{"RLIMIT_CORE", Const, 0},
-		{"RLIMIT_CPU", Const, 0},
-		{"RLIMIT_CPU_USAGE_MONITOR", Const, 16},
-		{"RLIMIT_DATA", Const, 0},
-		{"RLIMIT_FSIZE", Const, 0},
-		{"RLIMIT_NOFILE", Const, 0},
-		{"RLIMIT_STACK", Const, 0},
-		{"RLIM_INFINITY", Const, 0},
-		{"RTAX_ADVMSS", Const, 0},
-		{"RTAX_AUTHOR", Const, 0},
-		{"RTAX_BRD", Const, 0},
-		{"RTAX_CWND", Const, 0},
-		{"RTAX_DST", Const, 0},
-		{"RTAX_FEATURES", Const, 0},
-		{"RTAX_FEATURE_ALLFRAG", Const, 0},
-		{"RTAX_FEATURE_ECN", Const, 0},
-		{"RTAX_FEATURE_SACK", Const, 0},
-		{"RTAX_FEATURE_TIMESTAMP", Const, 0},
-		{"RTAX_GATEWAY", Const, 0},
-		{"RTAX_GENMASK", Const, 0},
-		{"RTAX_HOPLIMIT", Const, 0},
-		{"RTAX_IFA", Const, 0},
-		{"RTAX_IFP", Const, 0},
-		{"RTAX_INITCWND", Const, 0},
-		{"RTAX_INITRWND", Const, 0},
-		{"RTAX_LABEL", Const, 1},
-		{"RTAX_LOCK", Const, 0},
-		{"RTAX_MAX", Const, 0},
-		{"RTAX_MTU", Const, 0},
-		{"RTAX_NETMASK", Const, 0},
-		{"RTAX_REORDERING", Const, 0},
-		{"RTAX_RTO_MIN", Const, 0},
-		{"RTAX_RTT", Const, 0},
-		{"RTAX_RTTVAR", Const, 0},
-		{"RTAX_SRC", Const, 1},
-		{"RTAX_SRCMASK", Const, 1},
-		{"RTAX_SSTHRESH", Const, 0},
-		{"RTAX_TAG", Const, 1},
-		{"RTAX_UNSPEC", Const, 0},
-		{"RTAX_WINDOW", Const, 0},
-		{"RTA_ALIGNTO", Const, 0},
-		{"RTA_AUTHOR", Const, 0},
-		{"RTA_BRD", Const, 0},
-		{"RTA_CACHEINFO", Const, 0},
-		{"RTA_DST", Const, 0},
-		{"RTA_FLOW", Const, 0},
-		{"RTA_GATEWAY", Const, 0},
-		{"RTA_GENMASK", Const, 0},
-		{"RTA_IFA", Const, 0},
-		{"RTA_IFP", Const, 0},
-		{"RTA_IIF", Const, 0},
-		{"RTA_LABEL", Const, 1},
-		{"RTA_MAX", Const, 0},
-		{"RTA_METRICS", Const, 0},
-		{"RTA_MULTIPATH", Const, 0},
-		{"RTA_NETMASK", Const, 0},
-		{"RTA_OIF", Const, 0},
-		{"RTA_PREFSRC", Const, 0},
-		{"RTA_PRIORITY", Const, 0},
-		{"RTA_SRC", Const, 0},
-		{"RTA_SRCMASK", Const, 1},
-		{"RTA_TABLE", Const, 0},
-		{"RTA_TAG", Const, 1},
-		{"RTA_UNSPEC", Const, 0},
-		{"RTCF_DIRECTSRC", Const, 0},
-		{"RTCF_DOREDIRECT", Const, 0},
-		{"RTCF_LOG", Const, 0},
-		{"RTCF_MASQ", Const, 0},
-		{"RTCF_NAT", Const, 0},
-		{"RTCF_VALVE", Const, 0},
-		{"RTF_ADDRCLASSMASK", Const, 0},
-		{"RTF_ADDRCONF", Const, 0},
-		{"RTF_ALLONLINK", Const, 0},
-		{"RTF_ANNOUNCE", Const, 1},
-		{"RTF_BLACKHOLE", Const, 0},
-		{"RTF_BROADCAST", Const, 0},
-		{"RTF_CACHE", Const, 0},
-		{"RTF_CLONED", Const, 1},
-		{"RTF_CLONING", Const, 0},
-		{"RTF_CONDEMNED", Const, 0},
-		{"RTF_DEFAULT", Const, 0},
-		{"RTF_DELCLONE", Const, 0},
-		{"RTF_DONE", Const, 0},
-		{"RTF_DYNAMIC", Const, 0},
-		{"RTF_FLOW", Const, 0},
-		{"RTF_FMASK", Const, 0},
-		{"RTF_GATEWAY", Const, 0},
-		{"RTF_GWFLAG_COMPAT", Const, 3},
-		{"RTF_HOST", Const, 0},
-		{"RTF_IFREF", Const, 0},
-		{"RTF_IFSCOPE", Const, 0},
-		{"RTF_INTERFACE", Const, 0},
-		{"RTF_IRTT", Const, 0},
-		{"RTF_LINKRT", Const, 0},
-		{"RTF_LLDATA", Const, 0},
-		{"RTF_LLINFO", Const, 0},
-		{"RTF_LOCAL", Const, 0},
-		{"RTF_MASK", Const, 1},
-		{"RTF_MODIFIED", Const, 0},
-		{"RTF_MPATH", Const, 1},
-		{"RTF_MPLS", Const, 1},
-		{"RTF_MSS", Const, 0},
-		{"RTF_MTU", Const, 0},
-		{"RTF_MULTICAST", Const, 0},
-		{"RTF_NAT", Const, 0},
-		{"RTF_NOFORWARD", Const, 0},
-		{"RTF_NONEXTHOP", Const, 0},
-		{"RTF_NOPMTUDISC", Const, 0},
-		{"RTF_PERMANENT_ARP", Const, 1},
-		{"RTF_PINNED", Const, 0},
-		{"RTF_POLICY", Const, 0},
-		{"RTF_PRCLONING", Const, 0},
-		{"RTF_PROTO1", Const, 0},
-		{"RTF_PROTO2", Const, 0},
-		{"RTF_PROTO3", Const, 0},
-		{"RTF_PROXY", Const, 16},
-		{"RTF_REINSTATE", Const, 0},
-		{"RTF_REJECT", Const, 0},
-		{"RTF_RNH_LOCKED", Const, 0},
-		{"RTF_ROUTER", Const, 16},
-		{"RTF_SOURCE", Const, 1},
-		{"RTF_SRC", Const, 1},
-		{"RTF_STATIC", Const, 0},
-		{"RTF_STICKY", Const, 0},
-		{"RTF_THROW", Const, 0},
-		{"RTF_TUNNEL", Const, 1},
-		{"RTF_UP", Const, 0},
-		{"RTF_USETRAILERS", Const, 1},
-		{"RTF_WASCLONED", Const, 0},
-		{"RTF_WINDOW", Const, 0},
-		{"RTF_XRESOLVE", Const, 0},
-		{"RTM_ADD", Const, 0},
-		{"RTM_BASE", Const, 0},
-		{"RTM_CHANGE", Const, 0},
-		{"RTM_CHGADDR", Const, 1},
-		{"RTM_DELACTION", Const, 0},
-		{"RTM_DELADDR", Const, 0},
-		{"RTM_DELADDRLABEL", Const, 0},
-		{"RTM_DELETE", Const, 0},
-		{"RTM_DELLINK", Const, 0},
-		{"RTM_DELMADDR", Const, 0},
-		{"RTM_DELNEIGH", Const, 0},
-		{"RTM_DELQDISC", Const, 0},
-		{"RTM_DELROUTE", Const, 0},
-		{"RTM_DELRULE", Const, 0},
-		{"RTM_DELTCLASS", Const, 0},
-		{"RTM_DELTFILTER", Const, 0},
-		{"RTM_DESYNC", Const, 1},
-		{"RTM_F_CLONED", Const, 0},
-		{"RTM_F_EQUALIZE", Const, 0},
-		{"RTM_F_NOTIFY", Const, 0},
-		{"RTM_F_PREFIX", Const, 0},
-		{"RTM_GET", Const, 0},
-		{"RTM_GET2", Const, 0},
-		{"RTM_GETACTION", Const, 0},
-		{"RTM_GETADDR", Const, 0},
-		{"RTM_GETADDRLABEL", Const, 0},
-		{"RTM_GETANYCAST", Const, 0},
-		{"RTM_GETDCB", Const, 0},
-		{"RTM_GETLINK", Const, 0},
-		{"RTM_GETMULTICAST", Const, 0},
-		{"RTM_GETNEIGH", Const, 0},
-		{"RTM_GETNEIGHTBL", Const, 0},
-		{"RTM_GETQDISC", Const, 0},
-		{"RTM_GETROUTE", Const, 0},
-		{"RTM_GETRULE", Const, 0},
-		{"RTM_GETTCLASS", Const, 0},
-		{"RTM_GETTFILTER", Const, 0},
-		{"RTM_IEEE80211", Const, 0},
-		{"RTM_IFANNOUNCE", Const, 0},
-		{"RTM_IFINFO", Const, 0},
-		{"RTM_IFINFO2", Const, 0},
-		{"RTM_LLINFO_UPD", Const, 1},
-		{"RTM_LOCK", Const, 0},
-		{"RTM_LOSING", Const, 0},
-		{"RTM_MAX", Const, 0},
-		{"RTM_MAXSIZE", Const, 1},
-		{"RTM_MISS", Const, 0},
-		{"RTM_NEWACTION", Const, 0},
-		{"RTM_NEWADDR", Const, 0},
-		{"RTM_NEWADDRLABEL", Const, 0},
-		{"RTM_NEWLINK", Const, 0},
-		{"RTM_NEWMADDR", Const, 0},
-		{"RTM_NEWMADDR2", Const, 0},
-		{"RTM_NEWNDUSEROPT", Const, 0},
-		{"RTM_NEWNEIGH", Const, 0},
-		{"RTM_NEWNEIGHTBL", Const, 0},
-		{"RTM_NEWPREFIX", Const, 0},
-		{"RTM_NEWQDISC", Const, 0},
-		{"RTM_NEWROUTE", Const, 0},
-		{"RTM_NEWRULE", Const, 0},
-		{"RTM_NEWTCLASS", Const, 0},
-		{"RTM_NEWTFILTER", Const, 0},
-		{"RTM_NR_FAMILIES", Const, 0},
-		{"RTM_NR_MSGTYPES", Const, 0},
-		{"RTM_OIFINFO", Const, 1},
-		{"RTM_OLDADD", Const, 0},
-		{"RTM_OLDDEL", Const, 0},
-		{"RTM_OOIFINFO", Const, 1},
-		{"RTM_REDIRECT", Const, 0},
-		{"RTM_RESOLVE", Const, 0},
-		{"RTM_RTTUNIT", Const, 0},
-		{"RTM_SETDCB", Const, 0},
-		{"RTM_SETGATE", Const, 1},
-		{"RTM_SETLINK", Const, 0},
-		{"RTM_SETNEIGHTBL", Const, 0},
-		{"RTM_VERSION", Const, 0},
-		{"RTNH_ALIGNTO", Const, 0},
-		{"RTNH_F_DEAD", Const, 0},
-		{"RTNH_F_ONLINK", Const, 0},
-		{"RTNH_F_PERVASIVE", Const, 0},
-		{"RTNLGRP_IPV4_IFADDR", Const, 1},
-		{"RTNLGRP_IPV4_MROUTE", Const, 1},
-		{"RTNLGRP_IPV4_ROUTE", Const, 1},
-		{"RTNLGRP_IPV4_RULE", Const, 1},
-		{"RTNLGRP_IPV6_IFADDR", Const, 1},
-		{"RTNLGRP_IPV6_IFINFO", Const, 1},
-		{"RTNLGRP_IPV6_MROUTE", Const, 1},
-		{"RTNLGRP_IPV6_PREFIX", Const, 1},
-		{"RTNLGRP_IPV6_ROUTE", Const, 1},
-		{"RTNLGRP_IPV6_RULE", Const, 1},
-		{"RTNLGRP_LINK", Const, 1},
-		{"RTNLGRP_ND_USEROPT", Const, 1},
-		{"RTNLGRP_NEIGH", Const, 1},
-		{"RTNLGRP_NONE", Const, 1},
-		{"RTNLGRP_NOTIFY", Const, 1},
-		{"RTNLGRP_TC", Const, 1},
-		{"RTN_ANYCAST", Const, 0},
-		{"RTN_BLACKHOLE", Const, 0},
-		{"RTN_BROADCAST", Const, 0},
-		{"RTN_LOCAL", Const, 0},
-		{"RTN_MAX", Const, 0},
-		{"RTN_MULTICAST", Const, 0},
-		{"RTN_NAT", Const, 0},
-		{"RTN_PROHIBIT", Const, 0},
-		{"RTN_THROW", Const, 0},
-		{"RTN_UNICAST", Const, 0},
-		{"RTN_UNREACHABLE", Const, 0},
-		{"RTN_UNSPEC", Const, 0},
-		{"RTN_XRESOLVE", Const, 0},
-		{"RTPROT_BIRD", Const, 0},
-		{"RTPROT_BOOT", Const, 0},
-		{"RTPROT_DHCP", Const, 0},
-		{"RTPROT_DNROUTED", Const, 0},
-		{"RTPROT_GATED", Const, 0},
-		{"RTPROT_KERNEL", Const, 0},
-		{"RTPROT_MRT", Const, 0},
-		{"RTPROT_NTK", Const, 0},
-		{"RTPROT_RA", Const, 0},
-		{"RTPROT_REDIRECT", Const, 0},
-		{"RTPROT_STATIC", Const, 0},
-		{"RTPROT_UNSPEC", Const, 0},
-		{"RTPROT_XORP", Const, 0},
-		{"RTPROT_ZEBRA", Const, 0},
-		{"RTV_EXPIRE", Const, 0},
-		{"RTV_HOPCOUNT", Const, 0},
-		{"RTV_MTU", Const, 0},
-		{"RTV_RPIPE", Const, 0},
-		{"RTV_RTT", Const, 0},
-		{"RTV_RTTVAR", Const, 0},
-		{"RTV_SPIPE", Const, 0},
-		{"RTV_SSTHRESH", Const, 0},
-		{"RTV_WEIGHT", Const, 0},
-		{"RT_CACHING_CONTEXT", Const, 1},
-		{"RT_CLASS_DEFAULT", Const, 0},
-		{"RT_CLASS_LOCAL", Const, 0},
-		{"RT_CLASS_MAIN", Const, 0},
-		{"RT_CLASS_MAX", Const, 0},
-		{"RT_CLASS_UNSPEC", Const, 0},
-		{"RT_DEFAULT_FIB", Const, 1},
-		{"RT_NORTREF", Const, 1},
-		{"RT_SCOPE_HOST", Const, 0},
-		{"RT_SCOPE_LINK", Const, 0},
-		{"RT_SCOPE_NOWHERE", Const, 0},
-		{"RT_SCOPE_SITE", Const, 0},
-		{"RT_SCOPE_UNIVERSE", Const, 0},
-		{"RT_TABLEID_MAX", Const, 1},
-		{"RT_TABLE_COMPAT", Const, 0},
-		{"RT_TABLE_DEFAULT", Const, 0},
-		{"RT_TABLE_LOCAL", Const, 0},
-		{"RT_TABLE_MAIN", Const, 0},
-		{"RT_TABLE_MAX", Const, 0},
-		{"RT_TABLE_UNSPEC", Const, 0},
-		{"RUSAGE_CHILDREN", Const, 0},
-		{"RUSAGE_SELF", Const, 0},
-		{"RUSAGE_THREAD", Const, 0},
-		{"Radvisory_t", Type, 0},
-		{"Radvisory_t.Count", Field, 0},
-		{"Radvisory_t.Offset", Field, 0},
-		{"Radvisory_t.Pad_cgo_0", Field, 0},
-		{"RawConn", Type, 9},
-		{"RawSockaddr", Type, 0},
-		{"RawSockaddr.Data", Field, 0},
-		{"RawSockaddr.Family", Field, 0},
-		{"RawSockaddr.Len", Field, 0},
-		{"RawSockaddrAny", Type, 0},
-		{"RawSockaddrAny.Addr", Field, 0},
-		{"RawSockaddrAny.Pad", Field, 0},
-		{"RawSockaddrDatalink", Type, 0},
-		{"RawSockaddrDatalink.Alen", Field, 0},
-		{"RawSockaddrDatalink.Data", Field, 0},
-		{"RawSockaddrDatalink.Family", Field, 0},
-		{"RawSockaddrDatalink.Index", Field, 0},
-		{"RawSockaddrDatalink.Len", Field, 0},
-		{"RawSockaddrDatalink.Nlen", Field, 0},
-		{"RawSockaddrDatalink.Pad_cgo_0", Field, 2},
-		{"RawSockaddrDatalink.Slen", Field, 0},
-		{"RawSockaddrDatalink.Type", Field, 0},
-		{"RawSockaddrInet4", Type, 0},
-		{"RawSockaddrInet4.Addr", Field, 0},
-		{"RawSockaddrInet4.Family", Field, 0},
-		{"RawSockaddrInet4.Len", Field, 0},
-		{"RawSockaddrInet4.Port", Field, 0},
-		{"RawSockaddrInet4.Zero", Field, 0},
-		{"RawSockaddrInet6", Type, 0},
-		{"RawSockaddrInet6.Addr", Field, 0},
-		{"RawSockaddrInet6.Family", Field, 0},
-		{"RawSockaddrInet6.Flowinfo", Field, 0},
-		{"RawSockaddrInet6.Len", Field, 0},
-		{"RawSockaddrInet6.Port", Field, 0},
-		{"RawSockaddrInet6.Scope_id", Field, 0},
-		{"RawSockaddrLinklayer", Type, 0},
-		{"RawSockaddrLinklayer.Addr", Field, 0},
-		{"RawSockaddrLinklayer.Family", Field, 0},
-		{"RawSockaddrLinklayer.Halen", Field, 0},
-		{"RawSockaddrLinklayer.Hatype", Field, 0},
-		{"RawSockaddrLinklayer.Ifindex", Field, 0},
-		{"RawSockaddrLinklayer.Pkttype", Field, 0},
-		{"RawSockaddrLinklayer.Protocol", Field, 0},
-		{"RawSockaddrNetlink", Type, 0},
-		{"RawSockaddrNetlink.Family", Field, 0},
-		{"RawSockaddrNetlink.Groups", Field, 0},
-		{"RawSockaddrNetlink.Pad", Field, 0},
-		{"RawSockaddrNetlink.Pid", Field, 0},
-		{"RawSockaddrUnix", Type, 0},
-		{"RawSockaddrUnix.Family", Field, 0},
-		{"RawSockaddrUnix.Len", Field, 0},
-		{"RawSockaddrUnix.Pad_cgo_0", Field, 2},
-		{"RawSockaddrUnix.Path", Field, 0},
-		{"RawSyscall", Func, 0},
-		{"RawSyscall6", Func, 0},
-		{"Read", Func, 0},
-		{"ReadConsole", Func, 1},
-		{"ReadDirectoryChanges", Func, 0},
-		{"ReadDirent", Func, 0},
-		{"ReadFile", Func, 0},
-		{"Readlink", Func, 0},
-		{"Reboot", Func, 0},
-		{"Recvfrom", Func, 0},
-		{"Recvmsg", Func, 0},
-		{"RegCloseKey", Func, 0},
-		{"RegEnumKeyEx", Func, 0},
-		{"RegOpenKeyEx", Func, 0},
-		{"RegQueryInfoKey", Func, 0},
-		{"RegQueryValueEx", Func, 0},
-		{"RemoveDirectory", Func, 0},
-		{"Removexattr", Func, 1},
-		{"Rename", Func, 0},
-		{"Renameat", Func, 0},
-		{"Revoke", Func, 0},
-		{"Rlimit", Type, 0},
-		{"Rlimit.Cur", Field, 0},
-		{"Rlimit.Max", Field, 0},
-		{"Rmdir", Func, 0},
-		{"RouteMessage", Type, 0},
-		{"RouteMessage.Data", Field, 0},
-		{"RouteMessage.Header", Field, 0},
-		{"RouteRIB", Func, 0},
-		{"RoutingMessage", Type, 0},
-		{"RtAttr", Type, 0},
-		{"RtAttr.Len", Field, 0},
-		{"RtAttr.Type", Field, 0},
-		{"RtGenmsg", Type, 0},
-		{"RtGenmsg.Family", Field, 0},
-		{"RtMetrics", Type, 0},
-		{"RtMetrics.Expire", Field, 0},
-		{"RtMetrics.Filler", Field, 0},
-		{"RtMetrics.Hopcount", Field, 0},
-		{"RtMetrics.Locks", Field, 0},
-		{"RtMetrics.Mtu", Field, 0},
-		{"RtMetrics.Pad", Field, 3},
-		{"RtMetrics.Pksent", Field, 0},
-		{"RtMetrics.Recvpipe", Field, 0},
-		{"RtMetrics.Refcnt", Field, 2},
-		{"RtMetrics.Rtt", Field, 0},
-		{"RtMetrics.Rttvar", Field, 0},
-		{"RtMetrics.Sendpipe", Field, 0},
-		{"RtMetrics.Ssthresh", Field, 0},
-		{"RtMetrics.Weight", Field, 0},
-		{"RtMsg", Type, 0},
-		{"RtMsg.Dst_len", Field, 0},
-		{"RtMsg.Family", Field, 0},
-		{"RtMsg.Flags", Field, 0},
-		{"RtMsg.Protocol", Field, 0},
-		{"RtMsg.Scope", Field, 0},
-		{"RtMsg.Src_len", Field, 0},
-		{"RtMsg.Table", Field, 0},
-		{"RtMsg.Tos", Field, 0},
-		{"RtMsg.Type", Field, 0},
-		{"RtMsghdr", Type, 0},
-		{"RtMsghdr.Addrs", Field, 0},
-		{"RtMsghdr.Errno", Field, 0},
-		{"RtMsghdr.Flags", Field, 0},
-		{"RtMsghdr.Fmask", Field, 0},
-		{"RtMsghdr.Hdrlen", Field, 2},
-		{"RtMsghdr.Index", Field, 0},
-		{"RtMsghdr.Inits", Field, 0},
-		{"RtMsghdr.Mpls", Field, 2},
-		{"RtMsghdr.Msglen", Field, 0},
-		{"RtMsghdr.Pad_cgo_0", Field, 0},
-		{"RtMsghdr.Pad_cgo_1", Field, 2},
-		{"RtMsghdr.Pid", Field, 0},
-		{"RtMsghdr.Priority", Field, 2},
-		{"RtMsghdr.Rmx", Field, 0},
-		{"RtMsghdr.Seq", Field, 0},
-		{"RtMsghdr.Tableid", Field, 2},
-		{"RtMsghdr.Type", Field, 0},
-		{"RtMsghdr.Use", Field, 0},
-		{"RtMsghdr.Version", Field, 0},
-		{"RtNexthop", Type, 0},
-		{"RtNexthop.Flags", Field, 0},
-		{"RtNexthop.Hops", Field, 0},
-		{"RtNexthop.Ifindex", Field, 0},
-		{"RtNexthop.Len", Field, 0},
-		{"Rusage", Type, 0},
-		{"Rusage.CreationTime", Field, 0},
-		{"Rusage.ExitTime", Field, 0},
-		{"Rusage.Idrss", Field, 0},
-		{"Rusage.Inblock", Field, 0},
-		{"Rusage.Isrss", Field, 0},
-		{"Rusage.Ixrss", Field, 0},
-		{"Rusage.KernelTime", Field, 0},
-		{"Rusage.Majflt", Field, 0},
-		{"Rusage.Maxrss", Field, 0},
-		{"Rusage.Minflt", Field, 0},
-		{"Rusage.Msgrcv", Field, 0},
-		{"Rusage.Msgsnd", Field, 0},
-		{"Rusage.Nivcsw", Field, 0},
-		{"Rusage.Nsignals", Field, 0},
-		{"Rusage.Nswap", Field, 0},
-		{"Rusage.Nvcsw", Field, 0},
-		{"Rusage.Oublock", Field, 0},
-		{"Rusage.Stime", Field, 0},
-		{"Rusage.UserTime", Field, 0},
-		{"Rusage.Utime", Field, 0},
-		{"SCM_BINTIME", Const, 0},
-		{"SCM_CREDENTIALS", Const, 0},
-		{"SCM_CREDS", Const, 0},
-		{"SCM_RIGHTS", Const, 0},
-		{"SCM_TIMESTAMP", Const, 0},
-		{"SCM_TIMESTAMPING", Const, 0},
-		{"SCM_TIMESTAMPNS", Const, 0},
-		{"SCM_TIMESTAMP_MONOTONIC", Const, 0},
-		{"SHUT_RD", Const, 0},
-		{"SHUT_RDWR", Const, 0},
-		{"SHUT_WR", Const, 0},
-		{"SID", Type, 0},
-		{"SIDAndAttributes", Type, 0},
-		{"SIDAndAttributes.Attributes", Field, 0},
-		{"SIDAndAttributes.Sid", Field, 0},
-		{"SIGABRT", Const, 0},
-		{"SIGALRM", Const, 0},
-		{"SIGBUS", Const, 0},
-		{"SIGCHLD", Const, 0},
-		{"SIGCLD", Const, 0},
-		{"SIGCONT", Const, 0},
-		{"SIGEMT", Const, 0},
-		{"SIGFPE", Const, 0},
-		{"SIGHUP", Const, 0},
-		{"SIGILL", Const, 0},
-		{"SIGINFO", Const, 0},
-		{"SIGINT", Const, 0},
-		{"SIGIO", Const, 0},
-		{"SIGIOT", Const, 0},
-		{"SIGKILL", Const, 0},
-		{"SIGLIBRT", Const, 1},
-		{"SIGLWP", Const, 0},
-		{"SIGPIPE", Const, 0},
-		{"SIGPOLL", Const, 0},
-		{"SIGPROF", Const, 0},
-		{"SIGPWR", Const, 0},
-		{"SIGQUIT", Const, 0},
-		{"SIGSEGV", Const, 0},
-		{"SIGSTKFLT", Const, 0},
-		{"SIGSTOP", Const, 0},
-		{"SIGSYS", Const, 0},
-		{"SIGTERM", Const, 0},
-		{"SIGTHR", Const, 0},
-		{"SIGTRAP", Const, 0},
-		{"SIGTSTP", Const, 0},
-		{"SIGTTIN", Const, 0},
-		{"SIGTTOU", Const, 0},
-		{"SIGUNUSED", Const, 0},
-		{"SIGURG", Const, 0},
-		{"SIGUSR1", Const, 0},
-		{"SIGUSR2", Const, 0},
-		{"SIGVTALRM", Const, 0},
-		{"SIGWINCH", Const, 0},
-		{"SIGXCPU", Const, 0},
-		{"SIGXFSZ", Const, 0},
-		{"SIOCADDDLCI", Const, 0},
-		{"SIOCADDMULTI", Const, 0},
-		{"SIOCADDRT", Const, 0},
-		{"SIOCAIFADDR", Const, 0},
-		{"SIOCAIFGROUP", Const, 0},
-		{"SIOCALIFADDR", Const, 0},
-		{"SIOCARPIPLL", Const, 0},
-		{"SIOCATMARK", Const, 0},
-		{"SIOCAUTOADDR", Const, 0},
-		{"SIOCAUTONETMASK", Const, 0},
-		{"SIOCBRDGADD", Const, 1},
-		{"SIOCBRDGADDS", Const, 1},
-		{"SIOCBRDGARL", Const, 1},
-		{"SIOCBRDGDADDR", Const, 1},
-		{"SIOCBRDGDEL", Const, 1},
-		{"SIOCBRDGDELS", Const, 1},
-		{"SIOCBRDGFLUSH", Const, 1},
-		{"SIOCBRDGFRL", Const, 1},
-		{"SIOCBRDGGCACHE", Const, 1},
-		{"SIOCBRDGGFD", Const, 1},
-		{"SIOCBRDGGHT", Const, 1},
-		{"SIOCBRDGGIFFLGS", Const, 1},
-		{"SIOCBRDGGMA", Const, 1},
-		{"SIOCBRDGGPARAM", Const, 1},
-		{"SIOCBRDGGPRI", Const, 1},
-		{"SIOCBRDGGRL", Const, 1},
-		{"SIOCBRDGGSIFS", Const, 1},
-		{"SIOCBRDGGTO", Const, 1},
-		{"SIOCBRDGIFS", Const, 1},
-		{"SIOCBRDGRTS", Const, 1},
-		{"SIOCBRDGSADDR", Const, 1},
-		{"SIOCBRDGSCACHE", Const, 1},
-		{"SIOCBRDGSFD", Const, 1},
-		{"SIOCBRDGSHT", Const, 1},
-		{"SIOCBRDGSIFCOST", Const, 1},
-		{"SIOCBRDGSIFFLGS", Const, 1},
-		{"SIOCBRDGSIFPRIO", Const, 1},
-		{"SIOCBRDGSMA", Const, 1},
-		{"SIOCBRDGSPRI", Const, 1},
-		{"SIOCBRDGSPROTO", Const, 1},
-		{"SIOCBRDGSTO", Const, 1},
-		{"SIOCBRDGSTXHC", Const, 1},
-		{"SIOCDARP", Const, 0},
-		{"SIOCDELDLCI", Const, 0},
-		{"SIOCDELMULTI", Const, 0},
-		{"SIOCDELRT", Const, 0},
-		{"SIOCDEVPRIVATE", Const, 0},
-		{"SIOCDIFADDR", Const, 0},
-		{"SIOCDIFGROUP", Const, 0},
-		{"SIOCDIFPHYADDR", Const, 0},
-		{"SIOCDLIFADDR", Const, 0},
-		{"SIOCDRARP", Const, 0},
-		{"SIOCGARP", Const, 0},
-		{"SIOCGDRVSPEC", Const, 0},
-		{"SIOCGETKALIVE", Const, 1},
-		{"SIOCGETLABEL", Const, 1},
-		{"SIOCGETPFLOW", Const, 1},
-		{"SIOCGETPFSYNC", Const, 1},
-		{"SIOCGETSGCNT", Const, 0},
-		{"SIOCGETVIFCNT", Const, 0},
-		{"SIOCGETVLAN", Const, 0},
-		{"SIOCGHIWAT", Const, 0},
-		{"SIOCGIFADDR", Const, 0},
-		{"SIOCGIFADDRPREF", Const, 1},
-		{"SIOCGIFALIAS", Const, 1},
-		{"SIOCGIFALTMTU", Const, 0},
-		{"SIOCGIFASYNCMAP", Const, 0},
-		{"SIOCGIFBOND", Const, 0},
-		{"SIOCGIFBR", Const, 0},
-		{"SIOCGIFBRDADDR", Const, 0},
-		{"SIOCGIFCAP", Const, 0},
-		{"SIOCGIFCONF", Const, 0},
-		{"SIOCGIFCOUNT", Const, 0},
-		{"SIOCGIFDATA", Const, 1},
-		{"SIOCGIFDESCR", Const, 0},
-		{"SIOCGIFDEVMTU", Const, 0},
-		{"SIOCGIFDLT", Const, 1},
-		{"SIOCGIFDSTADDR", Const, 0},
-		{"SIOCGIFENCAP", Const, 0},
-		{"SIOCGIFFIB", Const, 1},
-		{"SIOCGIFFLAGS", Const, 0},
-		{"SIOCGIFGATTR", Const, 1},
-		{"SIOCGIFGENERIC", Const, 0},
-		{"SIOCGIFGMEMB", Const, 0},
-		{"SIOCGIFGROUP", Const, 0},
-		{"SIOCGIFHARDMTU", Const, 3},
-		{"SIOCGIFHWADDR", Const, 0},
-		{"SIOCGIFINDEX", Const, 0},
-		{"SIOCGIFKPI", Const, 0},
-		{"SIOCGIFMAC", Const, 0},
-		{"SIOCGIFMAP", Const, 0},
-		{"SIOCGIFMEDIA", Const, 0},
-		{"SIOCGIFMEM", Const, 0},
-		{"SIOCGIFMETRIC", Const, 0},
-		{"SIOCGIFMTU", Const, 0},
-		{"SIOCGIFNAME", Const, 0},
-		{"SIOCGIFNETMASK", Const, 0},
-		{"SIOCGIFPDSTADDR", Const, 0},
-		{"SIOCGIFPFLAGS", Const, 0},
-		{"SIOCGIFPHYS", Const, 0},
-		{"SIOCGIFPRIORITY", Const, 1},
-		{"SIOCGIFPSRCADDR", Const, 0},
-		{"SIOCGIFRDOMAIN", Const, 1},
-		{"SIOCGIFRTLABEL", Const, 1},
-		{"SIOCGIFSLAVE", Const, 0},
-		{"SIOCGIFSTATUS", Const, 0},
-		{"SIOCGIFTIMESLOT", Const, 1},
-		{"SIOCGIFTXQLEN", Const, 0},
-		{"SIOCGIFVLAN", Const, 0},
-		{"SIOCGIFWAKEFLAGS", Const, 0},
-		{"SIOCGIFXFLAGS", Const, 1},
-		{"SIOCGLIFADDR", Const, 0},
-		{"SIOCGLIFPHYADDR", Const, 0},
-		{"SIOCGLIFPHYRTABLE", Const, 1},
-		{"SIOCGLIFPHYTTL", Const, 3},
-		{"SIOCGLINKSTR", Const, 1},
-		{"SIOCGLOWAT", Const, 0},
-		{"SIOCGPGRP", Const, 0},
-		{"SIOCGPRIVATE_0", Const, 0},
-		{"SIOCGPRIVATE_1", Const, 0},
-		{"SIOCGRARP", Const, 0},
-		{"SIOCGSPPPPARAMS", Const, 3},
-		{"SIOCGSTAMP", Const, 0},
-		{"SIOCGSTAMPNS", Const, 0},
-		{"SIOCGVH", Const, 1},
-		{"SIOCGVNETID", Const, 3},
-		{"SIOCIFCREATE", Const, 0},
-		{"SIOCIFCREATE2", Const, 0},
-		{"SIOCIFDESTROY", Const, 0},
-		{"SIOCIFGCLONERS", Const, 0},
-		{"SIOCINITIFADDR", Const, 1},
-		{"SIOCPROTOPRIVATE", Const, 0},
-		{"SIOCRSLVMULTI", Const, 0},
-		{"SIOCRTMSG", Const, 0},
-		{"SIOCSARP", Const, 0},
-		{"SIOCSDRVSPEC", Const, 0},
-		{"SIOCSETKALIVE", Const, 1},
-		{"SIOCSETLABEL", Const, 1},
-		{"SIOCSETPFLOW", Const, 1},
-		{"SIOCSETPFSYNC", Const, 1},
-		{"SIOCSETVLAN", Const, 0},
-		{"SIOCSHIWAT", Const, 0},
-		{"SIOCSIFADDR", Const, 0},
-		{"SIOCSIFADDRPREF", Const, 1},
-		{"SIOCSIFALTMTU", Const, 0},
-		{"SIOCSIFASYNCMAP", Const, 0},
-		{"SIOCSIFBOND", Const, 0},
-		{"SIOCSIFBR", Const, 0},
-		{"SIOCSIFBRDADDR", Const, 0},
-		{"SIOCSIFCAP", Const, 0},
-		{"SIOCSIFDESCR", Const, 0},
-		{"SIOCSIFDSTADDR", Const, 0},
-		{"SIOCSIFENCAP", Const, 0},
-		{"SIOCSIFFIB", Const, 1},
-		{"SIOCSIFFLAGS", Const, 0},
-		{"SIOCSIFGATTR", Const, 1},
-		{"SIOCSIFGENERIC", Const, 0},
-		{"SIOCSIFHWADDR", Const, 0},
-		{"SIOCSIFHWBROADCAST", Const, 0},
-		{"SIOCSIFKPI", Const, 0},
-		{"SIOCSIFLINK", Const, 0},
-		{"SIOCSIFLLADDR", Const, 0},
-		{"SIOCSIFMAC", Const, 0},
-		{"SIOCSIFMAP", Const, 0},
-		{"SIOCSIFMEDIA", Const, 0},
-		{"SIOCSIFMEM", Const, 0},
-		{"SIOCSIFMETRIC", Const, 0},
-		{"SIOCSIFMTU", Const, 0},
-		{"SIOCSIFNAME", Const, 0},
-		{"SIOCSIFNETMASK", Const, 0},
-		{"SIOCSIFPFLAGS", Const, 0},
-		{"SIOCSIFPHYADDR", Const, 0},
-		{"SIOCSIFPHYS", Const, 0},
-		{"SIOCSIFPRIORITY", Const, 1},
-		{"SIOCSIFRDOMAIN", Const, 1},
-		{"SIOCSIFRTLABEL", Const, 1},
-		{"SIOCSIFRVNET", Const, 0},
-		{"SIOCSIFSLAVE", Const, 0},
-		{"SIOCSIFTIMESLOT", Const, 1},
-		{"SIOCSIFTXQLEN", Const, 0},
-		{"SIOCSIFVLAN", Const, 0},
-		{"SIOCSIFVNET", Const, 0},
-		{"SIOCSIFXFLAGS", Const, 1},
-		{"SIOCSLIFPHYADDR", Const, 0},
-		{"SIOCSLIFPHYRTABLE", Const, 1},
-		{"SIOCSLIFPHYTTL", Const, 3},
-		{"SIOCSLINKSTR", Const, 1},
-		{"SIOCSLOWAT", Const, 0},
-		{"SIOCSPGRP", Const, 0},
-		{"SIOCSRARP", Const, 0},
-		{"SIOCSSPPPPARAMS", Const, 3},
-		{"SIOCSVH", Const, 1},
-		{"SIOCSVNETID", Const, 3},
-		{"SIOCZIFDATA", Const, 1},
-		{"SIO_GET_EXTENSION_FUNCTION_POINTER", Const, 1},
-		{"SIO_GET_INTERFACE_LIST", Const, 0},
-		{"SIO_KEEPALIVE_VALS", Const, 3},
-		{"SIO_UDP_CONNRESET", Const, 4},
-		{"SOCK_CLOEXEC", Const, 0},
-		{"SOCK_DCCP", Const, 0},
-		{"SOCK_DGRAM", Const, 0},
-		{"SOCK_FLAGS_MASK", Const, 1},
-		{"SOCK_MAXADDRLEN", Const, 0},
-		{"SOCK_NONBLOCK", Const, 0},
-		{"SOCK_NOSIGPIPE", Const, 1},
-		{"SOCK_PACKET", Const, 0},
-		{"SOCK_RAW", Const, 0},
-		{"SOCK_RDM", Const, 0},
-		{"SOCK_SEQPACKET", Const, 0},
-		{"SOCK_STREAM", Const, 0},
-		{"SOL_AAL", Const, 0},
-		{"SOL_ATM", Const, 0},
-		{"SOL_DECNET", Const, 0},
-		{"SOL_ICMPV6", Const, 0},
-		{"SOL_IP", Const, 0},
-		{"SOL_IPV6", Const, 0},
-		{"SOL_IRDA", Const, 0},
-		{"SOL_PACKET", Const, 0},
-		{"SOL_RAW", Const, 0},
-		{"SOL_SOCKET", Const, 0},
-		{"SOL_TCP", Const, 0},
-		{"SOL_X25", Const, 0},
-		{"SOMAXCONN", Const, 0},
-		{"SO_ACCEPTCONN", Const, 0},
-		{"SO_ACCEPTFILTER", Const, 0},
-		{"SO_ATTACH_FILTER", Const, 0},
-		{"SO_BINDANY", Const, 1},
-		{"SO_BINDTODEVICE", Const, 0},
-		{"SO_BINTIME", Const, 0},
-		{"SO_BROADCAST", Const, 0},
-		{"SO_BSDCOMPAT", Const, 0},
-		{"SO_DEBUG", Const, 0},
-		{"SO_DETACH_FILTER", Const, 0},
-		{"SO_DOMAIN", Const, 0},
-		{"SO_DONTROUTE", Const, 0},
-		{"SO_DONTTRUNC", Const, 0},
-		{"SO_ERROR", Const, 0},
-		{"SO_KEEPALIVE", Const, 0},
-		{"SO_LABEL", Const, 0},
-		{"SO_LINGER", Const, 0},
-		{"SO_LINGER_SEC", Const, 0},
-		{"SO_LISTENINCQLEN", Const, 0},
-		{"SO_LISTENQLEN", Const, 0},
-		{"SO_LISTENQLIMIT", Const, 0},
-		{"SO_MARK", Const, 0},
-		{"SO_NETPROC", Const, 1},
-		{"SO_NKE", Const, 0},
-		{"SO_NOADDRERR", Const, 0},
-		{"SO_NOHEADER", Const, 1},
-		{"SO_NOSIGPIPE", Const, 0},
-		{"SO_NOTIFYCONFLICT", Const, 0},
-		{"SO_NO_CHECK", Const, 0},
-		{"SO_NO_DDP", Const, 0},
-		{"SO_NO_OFFLOAD", Const, 0},
-		{"SO_NP_EXTENSIONS", Const, 0},
-		{"SO_NREAD", Const, 0},
-		{"SO_NUMRCVPKT", Const, 16},
-		{"SO_NWRITE", Const, 0},
-		{"SO_OOBINLINE", Const, 0},
-		{"SO_OVERFLOWED", Const, 1},
-		{"SO_PASSCRED", Const, 0},
-		{"SO_PASSSEC", Const, 0},
-		{"SO_PEERCRED", Const, 0},
-		{"SO_PEERLABEL", Const, 0},
-		{"SO_PEERNAME", Const, 0},
-		{"SO_PEERSEC", Const, 0},
-		{"SO_PRIORITY", Const, 0},
-		{"SO_PROTOCOL", Const, 0},
-		{"SO_PROTOTYPE", Const, 1},
-		{"SO_RANDOMPORT", Const, 0},
-		{"SO_RCVBUF", Const, 0},
-		{"SO_RCVBUFFORCE", Const, 0},
-		{"SO_RCVLOWAT", Const, 0},
-		{"SO_RCVTIMEO", Const, 0},
-		{"SO_RESTRICTIONS", Const, 0},
-		{"SO_RESTRICT_DENYIN", Const, 0},
-		{"SO_RESTRICT_DENYOUT", Const, 0},
-		{"SO_RESTRICT_DENYSET", Const, 0},
-		{"SO_REUSEADDR", Const, 0},
-		{"SO_REUSEPORT", Const, 0},
-		{"SO_REUSESHAREUID", Const, 0},
-		{"SO_RTABLE", Const, 1},
-		{"SO_RXQ_OVFL", Const, 0},
-		{"SO_SECURITY_AUTHENTICATION", Const, 0},
-		{"SO_SECURITY_ENCRYPTION_NETWORK", Const, 0},
-		{"SO_SECURITY_ENCRYPTION_TRANSPORT", Const, 0},
-		{"SO_SETFIB", Const, 0},
-		{"SO_SNDBUF", Const, 0},
-		{"SO_SNDBUFFORCE", Const, 0},
-		{"SO_SNDLOWAT", Const, 0},
-		{"SO_SNDTIMEO", Const, 0},
-		{"SO_SPLICE", Const, 1},
-		{"SO_TIMESTAMP", Const, 0},
-		{"SO_TIMESTAMPING", Const, 0},
-		{"SO_TIMESTAMPNS", Const, 0},
-		{"SO_TIMESTAMP_MONOTONIC", Const, 0},
-		{"SO_TYPE", Const, 0},
-		{"SO_UPCALLCLOSEWAIT", Const, 0},
-		{"SO_UPDATE_ACCEPT_CONTEXT", Const, 0},
-		{"SO_UPDATE_CONNECT_CONTEXT", Const, 1},
-		{"SO_USELOOPBACK", Const, 0},
-		{"SO_USER_COOKIE", Const, 1},
-		{"SO_VENDOR", Const, 3},
-		{"SO_WANTMORE", Const, 0},
-		{"SO_WANTOOBFLAG", Const, 0},
-		{"SSLExtraCertChainPolicyPara", Type, 0},
-		{"SSLExtraCertChainPolicyPara.AuthType", Field, 0},
-		{"SSLExtraCertChainPolicyPara.Checks", Field, 0},
-		{"SSLExtraCertChainPolicyPara.ServerName", Field, 0},
-		{"SSLExtraCertChainPolicyPara.Size", Field, 0},
-		{"STANDARD_RIGHTS_ALL", Const, 0},
-		{"STANDARD_RIGHTS_EXECUTE", Const, 0},
-		{"STANDARD_RIGHTS_READ", Const, 0},
-		{"STANDARD_RIGHTS_REQUIRED", Const, 0},
-		{"STANDARD_RIGHTS_WRITE", Const, 0},
-		{"STARTF_USESHOWWINDOW", Const, 0},
-		{"STARTF_USESTDHANDLES", Const, 0},
-		{"STD_ERROR_HANDLE", Const, 0},
-		{"STD_INPUT_HANDLE", Const, 0},
-		{"STD_OUTPUT_HANDLE", Const, 0},
-		{"SUBLANG_ENGLISH_US", Const, 0},
-		{"SW_FORCEMINIMIZE", Const, 0},
-		{"SW_HIDE", Const, 0},
-		{"SW_MAXIMIZE", Const, 0},
-		{"SW_MINIMIZE", Const, 0},
-		{"SW_NORMAL", Const, 0},
-		{"SW_RESTORE", Const, 0},
-		{"SW_SHOW", Const, 0},
-		{"SW_SHOWDEFAULT", Const, 0},
-		{"SW_SHOWMAXIMIZED", Const, 0},
-		{"SW_SHOWMINIMIZED", Const, 0},
-		{"SW_SHOWMINNOACTIVE", Const, 0},
-		{"SW_SHOWNA", Const, 0},
-		{"SW_SHOWNOACTIVATE", Const, 0},
-		{"SW_SHOWNORMAL", Const, 0},
-		{"SYMBOLIC_LINK_FLAG_DIRECTORY", Const, 4},
-		{"SYNCHRONIZE", Const, 0},
-		{"SYSCTL_VERSION", Const, 1},
-		{"SYSCTL_VERS_0", Const, 1},
-		{"SYSCTL_VERS_1", Const, 1},
-		{"SYSCTL_VERS_MASK", Const, 1},
-		{"SYS_ABORT2", Const, 0},
-		{"SYS_ACCEPT", Const, 0},
-		{"SYS_ACCEPT4", Const, 0},
-		{"SYS_ACCEPT_NOCANCEL", Const, 0},
-		{"SYS_ACCESS", Const, 0},
-		{"SYS_ACCESS_EXTENDED", Const, 0},
-		{"SYS_ACCT", Const, 0},
-		{"SYS_ADD_KEY", Const, 0},
-		{"SYS_ADD_PROFIL", Const, 0},
-		{"SYS_ADJFREQ", Const, 1},
-		{"SYS_ADJTIME", Const, 0},
-		{"SYS_ADJTIMEX", Const, 0},
-		{"SYS_AFS_SYSCALL", Const, 0},
-		{"SYS_AIO_CANCEL", Const, 0},
-		{"SYS_AIO_ERROR", Const, 0},
-		{"SYS_AIO_FSYNC", Const, 0},
-		{"SYS_AIO_MLOCK", Const, 14},
-		{"SYS_AIO_READ", Const, 0},
-		{"SYS_AIO_RETURN", Const, 0},
-		{"SYS_AIO_SUSPEND", Const, 0},
-		{"SYS_AIO_SUSPEND_NOCANCEL", Const, 0},
-		{"SYS_AIO_WAITCOMPLETE", Const, 14},
-		{"SYS_AIO_WRITE", Const, 0},
-		{"SYS_ALARM", Const, 0},
-		{"SYS_ARCH_PRCTL", Const, 0},
-		{"SYS_ARM_FADVISE64_64", Const, 0},
-		{"SYS_ARM_SYNC_FILE_RANGE", Const, 0},
-		{"SYS_ATGETMSG", Const, 0},
-		{"SYS_ATPGETREQ", Const, 0},
-		{"SYS_ATPGETRSP", Const, 0},
-		{"SYS_ATPSNDREQ", Const, 0},
-		{"SYS_ATPSNDRSP", Const, 0},
-		{"SYS_ATPUTMSG", Const, 0},
-		{"SYS_ATSOCKET", Const, 0},
-		{"SYS_AUDIT", Const, 0},
-		{"SYS_AUDITCTL", Const, 0},
-		{"SYS_AUDITON", Const, 0},
-		{"SYS_AUDIT_SESSION_JOIN", Const, 0},
-		{"SYS_AUDIT_SESSION_PORT", Const, 0},
-		{"SYS_AUDIT_SESSION_SELF", Const, 0},
-		{"SYS_BDFLUSH", Const, 0},
-		{"SYS_BIND", Const, 0},
-		{"SYS_BINDAT", Const, 3},
-		{"SYS_BREAK", Const, 0},
-		{"SYS_BRK", Const, 0},
-		{"SYS_BSDTHREAD_CREATE", Const, 0},
-		{"SYS_BSDTHREAD_REGISTER", Const, 0},
-		{"SYS_BSDTHREAD_TERMINATE", Const, 0},
-		{"SYS_CAPGET", Const, 0},
-		{"SYS_CAPSET", Const, 0},
-		{"SYS_CAP_ENTER", Const, 0},
-		{"SYS_CAP_FCNTLS_GET", Const, 1},
-		{"SYS_CAP_FCNTLS_LIMIT", Const, 1},
-		{"SYS_CAP_GETMODE", Const, 0},
-		{"SYS_CAP_GETRIGHTS", Const, 0},
-		{"SYS_CAP_IOCTLS_GET", Const, 1},
-		{"SYS_CAP_IOCTLS_LIMIT", Const, 1},
-		{"SYS_CAP_NEW", Const, 0},
-		{"SYS_CAP_RIGHTS_GET", Const, 1},
-		{"SYS_CAP_RIGHTS_LIMIT", Const, 1},
-		{"SYS_CHDIR", Const, 0},
-		{"SYS_CHFLAGS", Const, 0},
-		{"SYS_CHFLAGSAT", Const, 3},
-		{"SYS_CHMOD", Const, 0},
-		{"SYS_CHMOD_EXTENDED", Const, 0},
-		{"SYS_CHOWN", Const, 0},
-		{"SYS_CHOWN32", Const, 0},
-		{"SYS_CHROOT", Const, 0},
-		{"SYS_CHUD", Const, 0},
-		{"SYS_CLOCK_ADJTIME", Const, 0},
-		{"SYS_CLOCK_GETCPUCLOCKID2", Const, 1},
-		{"SYS_CLOCK_GETRES", Const, 0},
-		{"SYS_CLOCK_GETTIME", Const, 0},
-		{"SYS_CLOCK_NANOSLEEP", Const, 0},
-		{"SYS_CLOCK_SETTIME", Const, 0},
-		{"SYS_CLONE", Const, 0},
-		{"SYS_CLOSE", Const, 0},
-		{"SYS_CLOSEFROM", Const, 0},
-		{"SYS_CLOSE_NOCANCEL", Const, 0},
-		{"SYS_CONNECT", Const, 0},
-		{"SYS_CONNECTAT", Const, 3},
-		{"SYS_CONNECT_NOCANCEL", Const, 0},
-		{"SYS_COPYFILE", Const, 0},
-		{"SYS_CPUSET", Const, 0},
-		{"SYS_CPUSET_GETAFFINITY", Const, 0},
-		{"SYS_CPUSET_GETID", Const, 0},
-		{"SYS_CPUSET_SETAFFINITY", Const, 0},
-		{"SYS_CPUSET_SETID", Const, 0},
-		{"SYS_CREAT", Const, 0},
-		{"SYS_CREATE_MODULE", Const, 0},
-		{"SYS_CSOPS", Const, 0},
-		{"SYS_CSOPS_AUDITTOKEN", Const, 16},
-		{"SYS_DELETE", Const, 0},
-		{"SYS_DELETE_MODULE", Const, 0},
-		{"SYS_DUP", Const, 0},
-		{"SYS_DUP2", Const, 0},
-		{"SYS_DUP3", Const, 0},
-		{"SYS_EACCESS", Const, 0},
-		{"SYS_EPOLL_CREATE", Const, 0},
-		{"SYS_EPOLL_CREATE1", Const, 0},
-		{"SYS_EPOLL_CTL", Const, 0},
-		{"SYS_EPOLL_CTL_OLD", Const, 0},
-		{"SYS_EPOLL_PWAIT", Const, 0},
-		{"SYS_EPOLL_WAIT", Const, 0},
-		{"SYS_EPOLL_WAIT_OLD", Const, 0},
-		{"SYS_EVENTFD", Const, 0},
-		{"SYS_EVENTFD2", Const, 0},
-		{"SYS_EXCHANGEDATA", Const, 0},
-		{"SYS_EXECVE", Const, 0},
-		{"SYS_EXIT", Const, 0},
-		{"SYS_EXIT_GROUP", Const, 0},
-		{"SYS_EXTATTRCTL", Const, 0},
-		{"SYS_EXTATTR_DELETE_FD", Const, 0},
-		{"SYS_EXTATTR_DELETE_FILE", Const, 0},
-		{"SYS_EXTATTR_DELETE_LINK", Const, 0},
-		{"SYS_EXTATTR_GET_FD", Const, 0},
-		{"SYS_EXTATTR_GET_FILE", Const, 0},
-		{"SYS_EXTATTR_GET_LINK", Const, 0},
-		{"SYS_EXTATTR_LIST_FD", Const, 0},
-		{"SYS_EXTATTR_LIST_FILE", Const, 0},
-		{"SYS_EXTATTR_LIST_LINK", Const, 0},
-		{"SYS_EXTATTR_SET_FD", Const, 0},
-		{"SYS_EXTATTR_SET_FILE", Const, 0},
-		{"SYS_EXTATTR_SET_LINK", Const, 0},
-		{"SYS_FACCESSAT", Const, 0},
-		{"SYS_FADVISE64", Const, 0},
-		{"SYS_FADVISE64_64", Const, 0},
-		{"SYS_FALLOCATE", Const, 0},
-		{"SYS_FANOTIFY_INIT", Const, 0},
-		{"SYS_FANOTIFY_MARK", Const, 0},
-		{"SYS_FCHDIR", Const, 0},
-		{"SYS_FCHFLAGS", Const, 0},
-		{"SYS_FCHMOD", Const, 0},
-		{"SYS_FCHMODAT", Const, 0},
-		{"SYS_FCHMOD_EXTENDED", Const, 0},
-		{"SYS_FCHOWN", Const, 0},
-		{"SYS_FCHOWN32", Const, 0},
-		{"SYS_FCHOWNAT", Const, 0},
-		{"SYS_FCHROOT", Const, 1},
-		{"SYS_FCNTL", Const, 0},
-		{"SYS_FCNTL64", Const, 0},
-		{"SYS_FCNTL_NOCANCEL", Const, 0},
-		{"SYS_FDATASYNC", Const, 0},
-		{"SYS_FEXECVE", Const, 0},
-		{"SYS_FFCLOCK_GETCOUNTER", Const, 0},
-		{"SYS_FFCLOCK_GETESTIMATE", Const, 0},
-		{"SYS_FFCLOCK_SETESTIMATE", Const, 0},
-		{"SYS_FFSCTL", Const, 0},
-		{"SYS_FGETATTRLIST", Const, 0},
-		{"SYS_FGETXATTR", Const, 0},
-		{"SYS_FHOPEN", Const, 0},
-		{"SYS_FHSTAT", Const, 0},
-		{"SYS_FHSTATFS", Const, 0},
-		{"SYS_FILEPORT_MAKEFD", Const, 0},
-		{"SYS_FILEPORT_MAKEPORT", Const, 0},
-		{"SYS_FKTRACE", Const, 1},
-		{"SYS_FLISTXATTR", Const, 0},
-		{"SYS_FLOCK", Const, 0},
-		{"SYS_FORK", Const, 0},
-		{"SYS_FPATHCONF", Const, 0},
-		{"SYS_FREEBSD6_FTRUNCATE", Const, 0},
-		{"SYS_FREEBSD6_LSEEK", Const, 0},
-		{"SYS_FREEBSD6_MMAP", Const, 0},
-		{"SYS_FREEBSD6_PREAD", Const, 0},
-		{"SYS_FREEBSD6_PWRITE", Const, 0},
-		{"SYS_FREEBSD6_TRUNCATE", Const, 0},
-		{"SYS_FREMOVEXATTR", Const, 0},
-		{"SYS_FSCTL", Const, 0},
-		{"SYS_FSETATTRLIST", Const, 0},
-		{"SYS_FSETXATTR", Const, 0},
-		{"SYS_FSGETPATH", Const, 0},
-		{"SYS_FSTAT", Const, 0},
-		{"SYS_FSTAT64", Const, 0},
-		{"SYS_FSTAT64_EXTENDED", Const, 0},
-		{"SYS_FSTATAT", Const, 0},
-		{"SYS_FSTATAT64", Const, 0},
-		{"SYS_FSTATFS", Const, 0},
-		{"SYS_FSTATFS64", Const, 0},
-		{"SYS_FSTATV", Const, 0},
-		{"SYS_FSTATVFS1", Const, 1},
-		{"SYS_FSTAT_EXTENDED", Const, 0},
-		{"SYS_FSYNC", Const, 0},
-		{"SYS_FSYNC_NOCANCEL", Const, 0},
-		{"SYS_FSYNC_RANGE", Const, 1},
-		{"SYS_FTIME", Const, 0},
-		{"SYS_FTRUNCATE", Const, 0},
-		{"SYS_FTRUNCATE64", Const, 0},
-		{"SYS_FUTEX", Const, 0},
-		{"SYS_FUTIMENS", Const, 1},
-		{"SYS_FUTIMES", Const, 0},
-		{"SYS_FUTIMESAT", Const, 0},
-		{"SYS_GETATTRLIST", Const, 0},
-		{"SYS_GETAUDIT", Const, 0},
-		{"SYS_GETAUDIT_ADDR", Const, 0},
-		{"SYS_GETAUID", Const, 0},
-		{"SYS_GETCONTEXT", Const, 0},
-		{"SYS_GETCPU", Const, 0},
-		{"SYS_GETCWD", Const, 0},
-		{"SYS_GETDENTS", Const, 0},
-		{"SYS_GETDENTS64", Const, 0},
-		{"SYS_GETDIRENTRIES", Const, 0},
-		{"SYS_GETDIRENTRIES64", Const, 0},
-		{"SYS_GETDIRENTRIESATTR", Const, 0},
-		{"SYS_GETDTABLECOUNT", Const, 1},
-		{"SYS_GETDTABLESIZE", Const, 0},
-		{"SYS_GETEGID", Const, 0},
-		{"SYS_GETEGID32", Const, 0},
-		{"SYS_GETEUID", Const, 0},
-		{"SYS_GETEUID32", Const, 0},
-		{"SYS_GETFH", Const, 0},
-		{"SYS_GETFSSTAT", Const, 0},
-		{"SYS_GETFSSTAT64", Const, 0},
-		{"SYS_GETGID", Const, 0},
-		{"SYS_GETGID32", Const, 0},
-		{"SYS_GETGROUPS", Const, 0},
-		{"SYS_GETGROUPS32", Const, 0},
-		{"SYS_GETHOSTUUID", Const, 0},
-		{"SYS_GETITIMER", Const, 0},
-		{"SYS_GETLCID", Const, 0},
-		{"SYS_GETLOGIN", Const, 0},
-		{"SYS_GETLOGINCLASS", Const, 0},
-		{"SYS_GETPEERNAME", Const, 0},
-		{"SYS_GETPGID", Const, 0},
-		{"SYS_GETPGRP", Const, 0},
-		{"SYS_GETPID", Const, 0},
-		{"SYS_GETPMSG", Const, 0},
-		{"SYS_GETPPID", Const, 0},
-		{"SYS_GETPRIORITY", Const, 0},
-		{"SYS_GETRESGID", Const, 0},
-		{"SYS_GETRESGID32", Const, 0},
-		{"SYS_GETRESUID", Const, 0},
-		{"SYS_GETRESUID32", Const, 0},
-		{"SYS_GETRLIMIT", Const, 0},
-		{"SYS_GETRTABLE", Const, 1},
-		{"SYS_GETRUSAGE", Const, 0},
-		{"SYS_GETSGROUPS", Const, 0},
-		{"SYS_GETSID", Const, 0},
-		{"SYS_GETSOCKNAME", Const, 0},
-		{"SYS_GETSOCKOPT", Const, 0},
-		{"SYS_GETTHRID", Const, 1},
-		{"SYS_GETTID", Const, 0},
-		{"SYS_GETTIMEOFDAY", Const, 0},
-		{"SYS_GETUID", Const, 0},
-		{"SYS_GETUID32", Const, 0},
-		{"SYS_GETVFSSTAT", Const, 1},
-		{"SYS_GETWGROUPS", Const, 0},
-		{"SYS_GETXATTR", Const, 0},
-		{"SYS_GET_KERNEL_SYMS", Const, 0},
-		{"SYS_GET_MEMPOLICY", Const, 0},
-		{"SYS_GET_ROBUST_LIST", Const, 0},
-		{"SYS_GET_THREAD_AREA", Const, 0},
-		{"SYS_GSSD_SYSCALL", Const, 14},
-		{"SYS_GTTY", Const, 0},
-		{"SYS_IDENTITYSVC", Const, 0},
-		{"SYS_IDLE", Const, 0},
-		{"SYS_INITGROUPS", Const, 0},
-		{"SYS_INIT_MODULE", Const, 0},
-		{"SYS_INOTIFY_ADD_WATCH", Const, 0},
-		{"SYS_INOTIFY_INIT", Const, 0},
-		{"SYS_INOTIFY_INIT1", Const, 0},
-		{"SYS_INOTIFY_RM_WATCH", Const, 0},
-		{"SYS_IOCTL", Const, 0},
-		{"SYS_IOPERM", Const, 0},
-		{"SYS_IOPL", Const, 0},
-		{"SYS_IOPOLICYSYS", Const, 0},
-		{"SYS_IOPRIO_GET", Const, 0},
-		{"SYS_IOPRIO_SET", Const, 0},
-		{"SYS_IO_CANCEL", Const, 0},
-		{"SYS_IO_DESTROY", Const, 0},
-		{"SYS_IO_GETEVENTS", Const, 0},
-		{"SYS_IO_SETUP", Const, 0},
-		{"SYS_IO_SUBMIT", Const, 0},
-		{"SYS_IPC", Const, 0},
-		{"SYS_ISSETUGID", Const, 0},
-		{"SYS_JAIL", Const, 0},
-		{"SYS_JAIL_ATTACH", Const, 0},
-		{"SYS_JAIL_GET", Const, 0},
-		{"SYS_JAIL_REMOVE", Const, 0},
-		{"SYS_JAIL_SET", Const, 0},
-		{"SYS_KAS_INFO", Const, 16},
-		{"SYS_KDEBUG_TRACE", Const, 0},
-		{"SYS_KENV", Const, 0},
-		{"SYS_KEVENT", Const, 0},
-		{"SYS_KEVENT64", Const, 0},
-		{"SYS_KEXEC_LOAD", Const, 0},
-		{"SYS_KEYCTL", Const, 0},
-		{"SYS_KILL", Const, 0},
-		{"SYS_KLDFIND", Const, 0},
-		{"SYS_KLDFIRSTMOD", Const, 0},
-		{"SYS_KLDLOAD", Const, 0},
-		{"SYS_KLDNEXT", Const, 0},
-		{"SYS_KLDSTAT", Const, 0},
-		{"SYS_KLDSYM", Const, 0},
-		{"SYS_KLDUNLOAD", Const, 0},
-		{"SYS_KLDUNLOADF", Const, 0},
-		{"SYS_KMQ_NOTIFY", Const, 14},
-		{"SYS_KMQ_OPEN", Const, 14},
-		{"SYS_KMQ_SETATTR", Const, 14},
-		{"SYS_KMQ_TIMEDRECEIVE", Const, 14},
-		{"SYS_KMQ_TIMEDSEND", Const, 14},
-		{"SYS_KMQ_UNLINK", Const, 14},
-		{"SYS_KQUEUE", Const, 0},
-		{"SYS_KQUEUE1", Const, 1},
-		{"SYS_KSEM_CLOSE", Const, 14},
-		{"SYS_KSEM_DESTROY", Const, 14},
-		{"SYS_KSEM_GETVALUE", Const, 14},
-		{"SYS_KSEM_INIT", Const, 14},
-		{"SYS_KSEM_OPEN", Const, 14},
-		{"SYS_KSEM_POST", Const, 14},
-		{"SYS_KSEM_TIMEDWAIT", Const, 14},
-		{"SYS_KSEM_TRYWAIT", Const, 14},
-		{"SYS_KSEM_UNLINK", Const, 14},
-		{"SYS_KSEM_WAIT", Const, 14},
-		{"SYS_KTIMER_CREATE", Const, 0},
-		{"SYS_KTIMER_DELETE", Const, 0},
-		{"SYS_KTIMER_GETOVERRUN", Const, 0},
-		{"SYS_KTIMER_GETTIME", Const, 0},
-		{"SYS_KTIMER_SETTIME", Const, 0},
-		{"SYS_KTRACE", Const, 0},
-		{"SYS_LCHFLAGS", Const, 0},
-		{"SYS_LCHMOD", Const, 0},
-		{"SYS_LCHOWN", Const, 0},
-		{"SYS_LCHOWN32", Const, 0},
-		{"SYS_LEDGER", Const, 16},
-		{"SYS_LGETFH", Const, 0},
-		{"SYS_LGETXATTR", Const, 0},
-		{"SYS_LINK", Const, 0},
-		{"SYS_LINKAT", Const, 0},
-		{"SYS_LIO_LISTIO", Const, 0},
-		{"SYS_LISTEN", Const, 0},
-		{"SYS_LISTXATTR", Const, 0},
-		{"SYS_LLISTXATTR", Const, 0},
-		{"SYS_LOCK", Const, 0},
-		{"SYS_LOOKUP_DCOOKIE", Const, 0},
-		{"SYS_LPATHCONF", Const, 0},
-		{"SYS_LREMOVEXATTR", Const, 0},
-		{"SYS_LSEEK", Const, 0},
-		{"SYS_LSETXATTR", Const, 0},
-		{"SYS_LSTAT", Const, 0},
-		{"SYS_LSTAT64", Const, 0},
-		{"SYS_LSTAT64_EXTENDED", Const, 0},
-		{"SYS_LSTATV", Const, 0},
-		{"SYS_LSTAT_EXTENDED", Const, 0},
-		{"SYS_LUTIMES", Const, 0},
-		{"SYS_MAC_SYSCALL", Const, 0},
-		{"SYS_MADVISE", Const, 0},
-		{"SYS_MADVISE1", Const, 0},
-		{"SYS_MAXSYSCALL", Const, 0},
-		{"SYS_MBIND", Const, 0},
-		{"SYS_MIGRATE_PAGES", Const, 0},
-		{"SYS_MINCORE", Const, 0},
-		{"SYS_MINHERIT", Const, 0},
-		{"SYS_MKCOMPLEX", Const, 0},
-		{"SYS_MKDIR", Const, 0},
-		{"SYS_MKDIRAT", Const, 0},
-		{"SYS_MKDIR_EXTENDED", Const, 0},
-		{"SYS_MKFIFO", Const, 0},
-		{"SYS_MKFIFOAT", Const, 0},
-		{"SYS_MKFIFO_EXTENDED", Const, 0},
-		{"SYS_MKNOD", Const, 0},
-		{"SYS_MKNODAT", Const, 0},
-		{"SYS_MLOCK", Const, 0},
-		{"SYS_MLOCKALL", Const, 0},
-		{"SYS_MMAP", Const, 0},
-		{"SYS_MMAP2", Const, 0},
-		{"SYS_MODCTL", Const, 1},
-		{"SYS_MODFIND", Const, 0},
-		{"SYS_MODFNEXT", Const, 0},
-		{"SYS_MODIFY_LDT", Const, 0},
-		{"SYS_MODNEXT", Const, 0},
-		{"SYS_MODSTAT", Const, 0},
-		{"SYS_MODWATCH", Const, 0},
-		{"SYS_MOUNT", Const, 0},
-		{"SYS_MOVE_PAGES", Const, 0},
-		{"SYS_MPROTECT", Const, 0},
-		{"SYS_MPX", Const, 0},
-		{"SYS_MQUERY", Const, 1},
-		{"SYS_MQ_GETSETATTR", Const, 0},
-		{"SYS_MQ_NOTIFY", Const, 0},
-		{"SYS_MQ_OPEN", Const, 0},
-		{"SYS_MQ_TIMEDRECEIVE", Const, 0},
-		{"SYS_MQ_TIMEDSEND", Const, 0},
-		{"SYS_MQ_UNLINK", Const, 0},
-		{"SYS_MREMAP", Const, 0},
-		{"SYS_MSGCTL", Const, 0},
-		{"SYS_MSGGET", Const, 0},
-		{"SYS_MSGRCV", Const, 0},
-		{"SYS_MSGRCV_NOCANCEL", Const, 0},
-		{"SYS_MSGSND", Const, 0},
-		{"SYS_MSGSND_NOCANCEL", Const, 0},
-		{"SYS_MSGSYS", Const, 0},
-		{"SYS_MSYNC", Const, 0},
-		{"SYS_MSYNC_NOCANCEL", Const, 0},
-		{"SYS_MUNLOCK", Const, 0},
-		{"SYS_MUNLOCKALL", Const, 0},
-		{"SYS_MUNMAP", Const, 0},
-		{"SYS_NAME_TO_HANDLE_AT", Const, 0},
-		{"SYS_NANOSLEEP", Const, 0},
-		{"SYS_NEWFSTATAT", Const, 0},
-		{"SYS_NFSCLNT", Const, 0},
-		{"SYS_NFSSERVCTL", Const, 0},
-		{"SYS_NFSSVC", Const, 0},
-		{"SYS_NFSTAT", Const, 0},
-		{"SYS_NICE", Const, 0},
-		{"SYS_NLM_SYSCALL", Const, 14},
-		{"SYS_NLSTAT", Const, 0},
-		{"SYS_NMOUNT", Const, 0},
-		{"SYS_NSTAT", Const, 0},
-		{"SYS_NTP_ADJTIME", Const, 0},
-		{"SYS_NTP_GETTIME", Const, 0},
-		{"SYS_NUMA_GETAFFINITY", Const, 14},
-		{"SYS_NUMA_SETAFFINITY", Const, 14},
-		{"SYS_OABI_SYSCALL_BASE", Const, 0},
-		{"SYS_OBREAK", Const, 0},
-		{"SYS_OLDFSTAT", Const, 0},
-		{"SYS_OLDLSTAT", Const, 0},
-		{"SYS_OLDOLDUNAME", Const, 0},
-		{"SYS_OLDSTAT", Const, 0},
-		{"SYS_OLDUNAME", Const, 0},
-		{"SYS_OPEN", Const, 0},
-		{"SYS_OPENAT", Const, 0},
-		{"SYS_OPENBSD_POLL", Const, 0},
-		{"SYS_OPEN_BY_HANDLE_AT", Const, 0},
-		{"SYS_OPEN_DPROTECTED_NP", Const, 16},
-		{"SYS_OPEN_EXTENDED", Const, 0},
-		{"SYS_OPEN_NOCANCEL", Const, 0},
-		{"SYS_OVADVISE", Const, 0},
-		{"SYS_PACCEPT", Const, 1},
-		{"SYS_PATHCONF", Const, 0},
-		{"SYS_PAUSE", Const, 0},
-		{"SYS_PCICONFIG_IOBASE", Const, 0},
-		{"SYS_PCICONFIG_READ", Const, 0},
-		{"SYS_PCICONFIG_WRITE", Const, 0},
-		{"SYS_PDFORK", Const, 0},
-		{"SYS_PDGETPID", Const, 0},
-		{"SYS_PDKILL", Const, 0},
-		{"SYS_PERF_EVENT_OPEN", Const, 0},
-		{"SYS_PERSONALITY", Const, 0},
-		{"SYS_PID_HIBERNATE", Const, 0},
-		{"SYS_PID_RESUME", Const, 0},
-		{"SYS_PID_SHUTDOWN_SOCKETS", Const, 0},
-		{"SYS_PID_SUSPEND", Const, 0},
-		{"SYS_PIPE", Const, 0},
-		{"SYS_PIPE2", Const, 0},
-		{"SYS_PIVOT_ROOT", Const, 0},
-		{"SYS_PMC_CONTROL", Const, 1},
-		{"SYS_PMC_GET_INFO", Const, 1},
-		{"SYS_POLL", Const, 0},
-		{"SYS_POLLTS", Const, 1},
-		{"SYS_POLL_NOCANCEL", Const, 0},
-		{"SYS_POSIX_FADVISE", Const, 0},
-		{"SYS_POSIX_FALLOCATE", Const, 0},
-		{"SYS_POSIX_OPENPT", Const, 0},
-		{"SYS_POSIX_SPAWN", Const, 0},
-		{"SYS_PPOLL", Const, 0},
-		{"SYS_PRCTL", Const, 0},
-		{"SYS_PREAD", Const, 0},
-		{"SYS_PREAD64", Const, 0},
-		{"SYS_PREADV", Const, 0},
-		{"SYS_PREAD_NOCANCEL", Const, 0},
-		{"SYS_PRLIMIT64", Const, 0},
-		{"SYS_PROCCTL", Const, 3},
-		{"SYS_PROCESS_POLICY", Const, 0},
-		{"SYS_PROCESS_VM_READV", Const, 0},
-		{"SYS_PROCESS_VM_WRITEV", Const, 0},
-		{"SYS_PROC_INFO", Const, 0},
-		{"SYS_PROF", Const, 0},
-		{"SYS_PROFIL", Const, 0},
-		{"SYS_PSELECT", Const, 0},
-		{"SYS_PSELECT6", Const, 0},
-		{"SYS_PSET_ASSIGN", Const, 1},
-		{"SYS_PSET_CREATE", Const, 1},
-		{"SYS_PSET_DESTROY", Const, 1},
-		{"SYS_PSYNCH_CVBROAD", Const, 0},
-		{"SYS_PSYNCH_CVCLRPREPOST", Const, 0},
-		{"SYS_PSYNCH_CVSIGNAL", Const, 0},
-		{"SYS_PSYNCH_CVWAIT", Const, 0},
-		{"SYS_PSYNCH_MUTEXDROP", Const, 0},
-		{"SYS_PSYNCH_MUTEXWAIT", Const, 0},
-		{"SYS_PSYNCH_RW_DOWNGRADE", Const, 0},
-		{"SYS_PSYNCH_RW_LONGRDLOCK", Const, 0},
-		{"SYS_PSYNCH_RW_RDLOCK", Const, 0},
-		{"SYS_PSYNCH_RW_UNLOCK", Const, 0},
-		{"SYS_PSYNCH_RW_UNLOCK2", Const, 0},
-		{"SYS_PSYNCH_RW_UPGRADE", Const, 0},
-		{"SYS_PSYNCH_RW_WRLOCK", Const, 0},
-		{"SYS_PSYNCH_RW_YIELDWRLOCK", Const, 0},
-		{"SYS_PTRACE", Const, 0},
-		{"SYS_PUTPMSG", Const, 0},
-		{"SYS_PWRITE", Const, 0},
-		{"SYS_PWRITE64", Const, 0},
-		{"SYS_PWRITEV", Const, 0},
-		{"SYS_PWRITE_NOCANCEL", Const, 0},
-		{"SYS_QUERY_MODULE", Const, 0},
-		{"SYS_QUOTACTL", Const, 0},
-		{"SYS_RASCTL", Const, 1},
-		{"SYS_RCTL_ADD_RULE", Const, 0},
-		{"SYS_RCTL_GET_LIMITS", Const, 0},
-		{"SYS_RCTL_GET_RACCT", Const, 0},
-		{"SYS_RCTL_GET_RULES", Const, 0},
-		{"SYS_RCTL_REMOVE_RULE", Const, 0},
-		{"SYS_READ", Const, 0},
-		{"SYS_READAHEAD", Const, 0},
-		{"SYS_READDIR", Const, 0},
-		{"SYS_READLINK", Const, 0},
-		{"SYS_READLINKAT", Const, 0},
-		{"SYS_READV", Const, 0},
-		{"SYS_READV_NOCANCEL", Const, 0},
-		{"SYS_READ_NOCANCEL", Const, 0},
-		{"SYS_REBOOT", Const, 0},
-		{"SYS_RECV", Const, 0},
-		{"SYS_RECVFROM", Const, 0},
-		{"SYS_RECVFROM_NOCANCEL", Const, 0},
-		{"SYS_RECVMMSG", Const, 0},
-		{"SYS_RECVMSG", Const, 0},
-		{"SYS_RECVMSG_NOCANCEL", Const, 0},
-		{"SYS_REMAP_FILE_PAGES", Const, 0},
-		{"SYS_REMOVEXATTR", Const, 0},
-		{"SYS_RENAME", Const, 0},
-		{"SYS_RENAMEAT", Const, 0},
-		{"SYS_REQUEST_KEY", Const, 0},
-		{"SYS_RESTART_SYSCALL", Const, 0},
-		{"SYS_REVOKE", Const, 0},
-		{"SYS_RFORK", Const, 0},
-		{"SYS_RMDIR", Const, 0},
-		{"SYS_RTPRIO", Const, 0},
-		{"SYS_RTPRIO_THREAD", Const, 0},
-		{"SYS_RT_SIGACTION", Const, 0},
-		{"SYS_RT_SIGPENDING", Const, 0},
-		{"SYS_RT_SIGPROCMASK", Const, 0},
-		{"SYS_RT_SIGQUEUEINFO", Const, 0},
-		{"SYS_RT_SIGRETURN", Const, 0},
-		{"SYS_RT_SIGSUSPEND", Const, 0},
-		{"SYS_RT_SIGTIMEDWAIT", Const, 0},
-		{"SYS_RT_TGSIGQUEUEINFO", Const, 0},
-		{"SYS_SBRK", Const, 0},
-		{"SYS_SCHED_GETAFFINITY", Const, 0},
-		{"SYS_SCHED_GETPARAM", Const, 0},
-		{"SYS_SCHED_GETSCHEDULER", Const, 0},
-		{"SYS_SCHED_GET_PRIORITY_MAX", Const, 0},
-		{"SYS_SCHED_GET_PRIORITY_MIN", Const, 0},
-		{"SYS_SCHED_RR_GET_INTERVAL", Const, 0},
-		{"SYS_SCHED_SETAFFINITY", Const, 0},
-		{"SYS_SCHED_SETPARAM", Const, 0},
-		{"SYS_SCHED_SETSCHEDULER", Const, 0},
-		{"SYS_SCHED_YIELD", Const, 0},
-		{"SYS_SCTP_GENERIC_RECVMSG", Const, 0},
-		{"SYS_SCTP_GENERIC_SENDMSG", Const, 0},
-		{"SYS_SCTP_GENERIC_SENDMSG_IOV", Const, 0},
-		{"SYS_SCTP_PEELOFF", Const, 0},
-		{"SYS_SEARCHFS", Const, 0},
-		{"SYS_SECURITY", Const, 0},
-		{"SYS_SELECT", Const, 0},
-		{"SYS_SELECT_NOCANCEL", Const, 0},
-		{"SYS_SEMCONFIG", Const, 1},
-		{"SYS_SEMCTL", Const, 0},
-		{"SYS_SEMGET", Const, 0},
-		{"SYS_SEMOP", Const, 0},
-		{"SYS_SEMSYS", Const, 0},
-		{"SYS_SEMTIMEDOP", Const, 0},
-		{"SYS_SEM_CLOSE", Const, 0},
-		{"SYS_SEM_DESTROY", Const, 0},
-		{"SYS_SEM_GETVALUE", Const, 0},
-		{"SYS_SEM_INIT", Const, 0},
-		{"SYS_SEM_OPEN", Const, 0},
-		{"SYS_SEM_POST", Const, 0},
-		{"SYS_SEM_TRYWAIT", Const, 0},
-		{"SYS_SEM_UNLINK", Const, 0},
-		{"SYS_SEM_WAIT", Const, 0},
-		{"SYS_SEM_WAIT_NOCANCEL", Const, 0},
-		{"SYS_SEND", Const, 0},
-		{"SYS_SENDFILE", Const, 0},
-		{"SYS_SENDFILE64", Const, 0},
-		{"SYS_SENDMMSG", Const, 0},
-		{"SYS_SENDMSG", Const, 0},
-		{"SYS_SENDMSG_NOCANCEL", Const, 0},
-		{"SYS_SENDTO", Const, 0},
-		{"SYS_SENDTO_NOCANCEL", Const, 0},
-		{"SYS_SETATTRLIST", Const, 0},
-		{"SYS_SETAUDIT", Const, 0},
-		{"SYS_SETAUDIT_ADDR", Const, 0},
-		{"SYS_SETAUID", Const, 0},
-		{"SYS_SETCONTEXT", Const, 0},
-		{"SYS_SETDOMAINNAME", Const, 0},
-		{"SYS_SETEGID", Const, 0},
-		{"SYS_SETEUID", Const, 0},
-		{"SYS_SETFIB", Const, 0},
-		{"SYS_SETFSGID", Const, 0},
-		{"SYS_SETFSGID32", Const, 0},
-		{"SYS_SETFSUID", Const, 0},
-		{"SYS_SETFSUID32", Const, 0},
-		{"SYS_SETGID", Const, 0},
-		{"SYS_SETGID32", Const, 0},
-		{"SYS_SETGROUPS", Const, 0},
-		{"SYS_SETGROUPS32", Const, 0},
-		{"SYS_SETHOSTNAME", Const, 0},
-		{"SYS_SETITIMER", Const, 0},
-		{"SYS_SETLCID", Const, 0},
-		{"SYS_SETLOGIN", Const, 0},
-		{"SYS_SETLOGINCLASS", Const, 0},
-		{"SYS_SETNS", Const, 0},
-		{"SYS_SETPGID", Const, 0},
-		{"SYS_SETPRIORITY", Const, 0},
-		{"SYS_SETPRIVEXEC", Const, 0},
-		{"SYS_SETREGID", Const, 0},
-		{"SYS_SETREGID32", Const, 0},
-		{"SYS_SETRESGID", Const, 0},
-		{"SYS_SETRESGID32", Const, 0},
-		{"SYS_SETRESUID", Const, 0},
-		{"SYS_SETRESUID32", Const, 0},
-		{"SYS_SETREUID", Const, 0},
-		{"SYS_SETREUID32", Const, 0},
-		{"SYS_SETRLIMIT", Const, 0},
-		{"SYS_SETRTABLE", Const, 1},
-		{"SYS_SETSGROUPS", Const, 0},
-		{"SYS_SETSID", Const, 0},
-		{"SYS_SETSOCKOPT", Const, 0},
-		{"SYS_SETTID", Const, 0},
-		{"SYS_SETTID_WITH_PID", Const, 0},
-		{"SYS_SETTIMEOFDAY", Const, 0},
-		{"SYS_SETUID", Const, 0},
-		{"SYS_SETUID32", Const, 0},
-		{"SYS_SETWGROUPS", Const, 0},
-		{"SYS_SETXATTR", Const, 0},
-		{"SYS_SET_MEMPOLICY", Const, 0},
-		{"SYS_SET_ROBUST_LIST", Const, 0},
-		{"SYS_SET_THREAD_AREA", Const, 0},
-		{"SYS_SET_TID_ADDRESS", Const, 0},
-		{"SYS_SGETMASK", Const, 0},
-		{"SYS_SHARED_REGION_CHECK_NP", Const, 0},
-		{"SYS_SHARED_REGION_MAP_AND_SLIDE_NP", Const, 0},
-		{"SYS_SHMAT", Const, 0},
-		{"SYS_SHMCTL", Const, 0},
-		{"SYS_SHMDT", Const, 0},
-		{"SYS_SHMGET", Const, 0},
-		{"SYS_SHMSYS", Const, 0},
-		{"SYS_SHM_OPEN", Const, 0},
-		{"SYS_SHM_UNLINK", Const, 0},
-		{"SYS_SHUTDOWN", Const, 0},
-		{"SYS_SIGACTION", Const, 0},
-		{"SYS_SIGALTSTACK", Const, 0},
-		{"SYS_SIGNAL", Const, 0},
-		{"SYS_SIGNALFD", Const, 0},
-		{"SYS_SIGNALFD4", Const, 0},
-		{"SYS_SIGPENDING", Const, 0},
-		{"SYS_SIGPROCMASK", Const, 0},
-		{"SYS_SIGQUEUE", Const, 0},
-		{"SYS_SIGQUEUEINFO", Const, 1},
-		{"SYS_SIGRETURN", Const, 0},
-		{"SYS_SIGSUSPEND", Const, 0},
-		{"SYS_SIGSUSPEND_NOCANCEL", Const, 0},
-		{"SYS_SIGTIMEDWAIT", Const, 0},
-		{"SYS_SIGWAIT", Const, 0},
-		{"SYS_SIGWAITINFO", Const, 0},
-		{"SYS_SOCKET", Const, 0},
-		{"SYS_SOCKETCALL", Const, 0},
-		{"SYS_SOCKETPAIR", Const, 0},
-		{"SYS_SPLICE", Const, 0},
-		{"SYS_SSETMASK", Const, 0},
-		{"SYS_SSTK", Const, 0},
-		{"SYS_STACK_SNAPSHOT", Const, 0},
-		{"SYS_STAT", Const, 0},
-		{"SYS_STAT64", Const, 0},
-		{"SYS_STAT64_EXTENDED", Const, 0},
-		{"SYS_STATFS", Const, 0},
-		{"SYS_STATFS64", Const, 0},
-		{"SYS_STATV", Const, 0},
-		{"SYS_STATVFS1", Const, 1},
-		{"SYS_STAT_EXTENDED", Const, 0},
-		{"SYS_STIME", Const, 0},
-		{"SYS_STTY", Const, 0},
-		{"SYS_SWAPCONTEXT", Const, 0},
-		{"SYS_SWAPCTL", Const, 1},
-		{"SYS_SWAPOFF", Const, 0},
-		{"SYS_SWAPON", Const, 0},
-		{"SYS_SYMLINK", Const, 0},
-		{"SYS_SYMLINKAT", Const, 0},
-		{"SYS_SYNC", Const, 0},
-		{"SYS_SYNCFS", Const, 0},
-		{"SYS_SYNC_FILE_RANGE", Const, 0},
-		{"SYS_SYSARCH", Const, 0},
-		{"SYS_SYSCALL", Const, 0},
-		{"SYS_SYSCALL_BASE", Const, 0},
-		{"SYS_SYSFS", Const, 0},
-		{"SYS_SYSINFO", Const, 0},
-		{"SYS_SYSLOG", Const, 0},
-		{"SYS_TEE", Const, 0},
-		{"SYS_TGKILL", Const, 0},
-		{"SYS_THREAD_SELFID", Const, 0},
-		{"SYS_THR_CREATE", Const, 0},
-		{"SYS_THR_EXIT", Const, 0},
-		{"SYS_THR_KILL", Const, 0},
-		{"SYS_THR_KILL2", Const, 0},
-		{"SYS_THR_NEW", Const, 0},
-		{"SYS_THR_SELF", Const, 0},
-		{"SYS_THR_SET_NAME", Const, 0},
-		{"SYS_THR_SUSPEND", Const, 0},
-		{"SYS_THR_WAKE", Const, 0},
-		{"SYS_TIME", Const, 0},
-		{"SYS_TIMERFD_CREATE", Const, 0},
-		{"SYS_TIMERFD_GETTIME", Const, 0},
-		{"SYS_TIMERFD_SETTIME", Const, 0},
-		{"SYS_TIMER_CREATE", Const, 0},
-		{"SYS_TIMER_DELETE", Const, 0},
-		{"SYS_TIMER_GETOVERRUN", Const, 0},
-		{"SYS_TIMER_GETTIME", Const, 0},
-		{"SYS_TIMER_SETTIME", Const, 0},
-		{"SYS_TIMES", Const, 0},
-		{"SYS_TKILL", Const, 0},
-		{"SYS_TRUNCATE", Const, 0},
-		{"SYS_TRUNCATE64", Const, 0},
-		{"SYS_TUXCALL", Const, 0},
-		{"SYS_UGETRLIMIT", Const, 0},
-		{"SYS_ULIMIT", Const, 0},
-		{"SYS_UMASK", Const, 0},
-		{"SYS_UMASK_EXTENDED", Const, 0},
-		{"SYS_UMOUNT", Const, 0},
-		{"SYS_UMOUNT2", Const, 0},
-		{"SYS_UNAME", Const, 0},
-		{"SYS_UNDELETE", Const, 0},
-		{"SYS_UNLINK", Const, 0},
-		{"SYS_UNLINKAT", Const, 0},
-		{"SYS_UNMOUNT", Const, 0},
-		{"SYS_UNSHARE", Const, 0},
-		{"SYS_USELIB", Const, 0},
-		{"SYS_USTAT", Const, 0},
-		{"SYS_UTIME", Const, 0},
-		{"SYS_UTIMENSAT", Const, 0},
-		{"SYS_UTIMES", Const, 0},
-		{"SYS_UTRACE", Const, 0},
-		{"SYS_UUIDGEN", Const, 0},
-		{"SYS_VADVISE", Const, 1},
-		{"SYS_VFORK", Const, 0},
-		{"SYS_VHANGUP", Const, 0},
-		{"SYS_VM86", Const, 0},
-		{"SYS_VM86OLD", Const, 0},
-		{"SYS_VMSPLICE", Const, 0},
-		{"SYS_VM_PRESSURE_MONITOR", Const, 0},
-		{"SYS_VSERVER", Const, 0},
-		{"SYS_WAIT4", Const, 0},
-		{"SYS_WAIT4_NOCANCEL", Const, 0},
-		{"SYS_WAIT6", Const, 1},
-		{"SYS_WAITEVENT", Const, 0},
-		{"SYS_WAITID", Const, 0},
-		{"SYS_WAITID_NOCANCEL", Const, 0},
-		{"SYS_WAITPID", Const, 0},
-		{"SYS_WATCHEVENT", Const, 0},
-		{"SYS_WORKQ_KERNRETURN", Const, 0},
-		{"SYS_WORKQ_OPEN", Const, 0},
-		{"SYS_WRITE", Const, 0},
-		{"SYS_WRITEV", Const, 0},
-		{"SYS_WRITEV_NOCANCEL", Const, 0},
-		{"SYS_WRITE_NOCANCEL", Const, 0},
-		{"SYS_YIELD", Const, 0},
-		{"SYS__LLSEEK", Const, 0},
-		{"SYS__LWP_CONTINUE", Const, 1},
-		{"SYS__LWP_CREATE", Const, 1},
-		{"SYS__LWP_CTL", Const, 1},
-		{"SYS__LWP_DETACH", Const, 1},
-		{"SYS__LWP_EXIT", Const, 1},
-		{"SYS__LWP_GETNAME", Const, 1},
-		{"SYS__LWP_GETPRIVATE", Const, 1},
-		{"SYS__LWP_KILL", Const, 1},
-		{"SYS__LWP_PARK", Const, 1},
-		{"SYS__LWP_SELF", Const, 1},
-		{"SYS__LWP_SETNAME", Const, 1},
-		{"SYS__LWP_SETPRIVATE", Const, 1},
-		{"SYS__LWP_SUSPEND", Const, 1},
-		{"SYS__LWP_UNPARK", Const, 1},
-		{"SYS__LWP_UNPARK_ALL", Const, 1},
-		{"SYS__LWP_WAIT", Const, 1},
-		{"SYS__LWP_WAKEUP", Const, 1},
-		{"SYS__NEWSELECT", Const, 0},
-		{"SYS__PSET_BIND", Const, 1},
-		{"SYS__SCHED_GETAFFINITY", Const, 1},
-		{"SYS__SCHED_GETPARAM", Const, 1},
-		{"SYS__SCHED_SETAFFINITY", Const, 1},
-		{"SYS__SCHED_SETPARAM", Const, 1},
-		{"SYS__SYSCTL", Const, 0},
-		{"SYS__UMTX_LOCK", Const, 0},
-		{"SYS__UMTX_OP", Const, 0},
-		{"SYS__UMTX_UNLOCK", Const, 0},
-		{"SYS___ACL_ACLCHECK_FD", Const, 0},
-		{"SYS___ACL_ACLCHECK_FILE", Const, 0},
-		{"SYS___ACL_ACLCHECK_LINK", Const, 0},
-		{"SYS___ACL_DELETE_FD", Const, 0},
-		{"SYS___ACL_DELETE_FILE", Const, 0},
-		{"SYS___ACL_DELETE_LINK", Const, 0},
-		{"SYS___ACL_GET_FD", Const, 0},
-		{"SYS___ACL_GET_FILE", Const, 0},
-		{"SYS___ACL_GET_LINK", Const, 0},
-		{"SYS___ACL_SET_FD", Const, 0},
-		{"SYS___ACL_SET_FILE", Const, 0},
-		{"SYS___ACL_SET_LINK", Const, 0},
-		{"SYS___CAP_RIGHTS_GET", Const, 14},
-		{"SYS___CLONE", Const, 1},
-		{"SYS___DISABLE_THREADSIGNAL", Const, 0},
-		{"SYS___GETCWD", Const, 0},
-		{"SYS___GETLOGIN", Const, 1},
-		{"SYS___GET_TCB", Const, 1},
-		{"SYS___MAC_EXECVE", Const, 0},
-		{"SYS___MAC_GETFSSTAT", Const, 0},
-		{"SYS___MAC_GET_FD", Const, 0},
-		{"SYS___MAC_GET_FILE", Const, 0},
-		{"SYS___MAC_GET_LCID", Const, 0},
-		{"SYS___MAC_GET_LCTX", Const, 0},
-		{"SYS___MAC_GET_LINK", Const, 0},
-		{"SYS___MAC_GET_MOUNT", Const, 0},
-		{"SYS___MAC_GET_PID", Const, 0},
-		{"SYS___MAC_GET_PROC", Const, 0},
-		{"SYS___MAC_MOUNT", Const, 0},
-		{"SYS___MAC_SET_FD", Const, 0},
-		{"SYS___MAC_SET_FILE", Const, 0},
-		{"SYS___MAC_SET_LCTX", Const, 0},
-		{"SYS___MAC_SET_LINK", Const, 0},
-		{"SYS___MAC_SET_PROC", Const, 0},
-		{"SYS___MAC_SYSCALL", Const, 0},
-		{"SYS___OLD_SEMWAIT_SIGNAL", Const, 0},
-		{"SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL", Const, 0},
-		{"SYS___POSIX_CHOWN", Const, 1},
-		{"SYS___POSIX_FCHOWN", Const, 1},
-		{"SYS___POSIX_LCHOWN", Const, 1},
-		{"SYS___POSIX_RENAME", Const, 1},
-		{"SYS___PTHREAD_CANCELED", Const, 0},
-		{"SYS___PTHREAD_CHDIR", Const, 0},
-		{"SYS___PTHREAD_FCHDIR", Const, 0},
-		{"SYS___PTHREAD_KILL", Const, 0},
-		{"SYS___PTHREAD_MARKCANCEL", Const, 0},
-		{"SYS___PTHREAD_SIGMASK", Const, 0},
-		{"SYS___QUOTACTL", Const, 1},
-		{"SYS___SEMCTL", Const, 1},
-		{"SYS___SEMWAIT_SIGNAL", Const, 0},
-		{"SYS___SEMWAIT_SIGNAL_NOCANCEL", Const, 0},
-		{"SYS___SETLOGIN", Const, 1},
-		{"SYS___SETUGID", Const, 0},
-		{"SYS___SET_TCB", Const, 1},
-		{"SYS___SIGACTION_SIGTRAMP", Const, 1},
-		{"SYS___SIGTIMEDWAIT", Const, 1},
-		{"SYS___SIGWAIT", Const, 0},
-		{"SYS___SIGWAIT_NOCANCEL", Const, 0},
-		{"SYS___SYSCTL", Const, 0},
-		{"SYS___TFORK", Const, 1},
-		{"SYS___THREXIT", Const, 1},
-		{"SYS___THRSIGDIVERT", Const, 1},
-		{"SYS___THRSLEEP", Const, 1},
-		{"SYS___THRWAKEUP", Const, 1},
-		{"S_ARCH1", Const, 1},
-		{"S_ARCH2", Const, 1},
-		{"S_BLKSIZE", Const, 0},
-		{"S_IEXEC", Const, 0},
-		{"S_IFBLK", Const, 0},
-		{"S_IFCHR", Const, 0},
-		{"S_IFDIR", Const, 0},
-		{"S_IFIFO", Const, 0},
-		{"S_IFLNK", Const, 0},
-		{"S_IFMT", Const, 0},
-		{"S_IFREG", Const, 0},
-		{"S_IFSOCK", Const, 0},
-		{"S_IFWHT", Const, 0},
-		{"S_IREAD", Const, 0},
-		{"S_IRGRP", Const, 0},
-		{"S_IROTH", Const, 0},
-		{"S_IRUSR", Const, 0},
-		{"S_IRWXG", Const, 0},
-		{"S_IRWXO", Const, 0},
-		{"S_IRWXU", Const, 0},
-		{"S_ISGID", Const, 0},
-		{"S_ISTXT", Const, 0},
-		{"S_ISUID", Const, 0},
-		{"S_ISVTX", Const, 0},
-		{"S_IWGRP", Const, 0},
-		{"S_IWOTH", Const, 0},
-		{"S_IWRITE", Const, 0},
-		{"S_IWUSR", Const, 0},
-		{"S_IXGRP", Const, 0},
-		{"S_IXOTH", Const, 0},
-		{"S_IXUSR", Const, 0},
-		{"S_LOGIN_SET", Const, 1},
-		{"SecurityAttributes", Type, 0},
-		{"SecurityAttributes.InheritHandle", Field, 0},
-		{"SecurityAttributes.Length", Field, 0},
-		{"SecurityAttributes.SecurityDescriptor", Field, 0},
-		{"Seek", Func, 0},
-		{"Select", Func, 0},
-		{"Sendfile", Func, 0},
-		{"Sendmsg", Func, 0},
-		{"SendmsgN", Func, 3},
-		{"Sendto", Func, 0},
-		{"Servent", Type, 0},
-		{"Servent.Aliases", Field, 0},
-		{"Servent.Name", Field, 0},
-		{"Servent.Port", Field, 0},
-		{"Servent.Proto", Field, 0},
-		{"SetBpf", Func, 0},
-		{"SetBpfBuflen", Func, 0},
-		{"SetBpfDatalink", Func, 0},
-		{"SetBpfHeadercmpl", Func, 0},
-		{"SetBpfImmediate", Func, 0},
-		{"SetBpfInterface", Func, 0},
-		{"SetBpfPromisc", Func, 0},
-		{"SetBpfTimeout", Func, 0},
-		{"SetCurrentDirectory", Func, 0},
-		{"SetEndOfFile", Func, 0},
-		{"SetEnvironmentVariable", Func, 0},
-		{"SetFileAttributes", Func, 0},
-		{"SetFileCompletionNotificationModes", Func, 2},
-		{"SetFilePointer", Func, 0},
-		{"SetFileTime", Func, 0},
-		{"SetHandleInformation", Func, 0},
-		{"SetKevent", Func, 0},
-		{"SetLsfPromisc", Func, 0},
-		{"SetNonblock", Func, 0},
-		{"Setdomainname", Func, 0},
-		{"Setegid", Func, 0},
-		{"Setenv", Func, 0},
-		{"Seteuid", Func, 0},
-		{"Setfsgid", Func, 0},
-		{"Setfsuid", Func, 0},
-		{"Setgid", Func, 0},
-		{"Setgroups", Func, 0},
-		{"Sethostname", Func, 0},
-		{"Setlogin", Func, 0},
-		{"Setpgid", Func, 0},
-		{"Setpriority", Func, 0},
-		{"Setprivexec", Func, 0},
-		{"Setregid", Func, 0},
-		{"Setresgid", Func, 0},
-		{"Setresuid", Func, 0},
-		{"Setreuid", Func, 0},
-		{"Setrlimit", Func, 0},
-		{"Setsid", Func, 0},
-		{"Setsockopt", Func, 0},
-		{"SetsockoptByte", Func, 0},
-		{"SetsockoptICMPv6Filter", Func, 2},
-		{"SetsockoptIPMreq", Func, 0},
-		{"SetsockoptIPMreqn", Func, 0},
-		{"SetsockoptIPv6Mreq", Func, 0},
-		{"SetsockoptInet4Addr", Func, 0},
-		{"SetsockoptInt", Func, 0},
-		{"SetsockoptLinger", Func, 0},
-		{"SetsockoptString", Func, 0},
-		{"SetsockoptTimeval", Func, 0},
-		{"Settimeofday", Func, 0},
-		{"Setuid", Func, 0},
-		{"Setxattr", Func, 1},
-		{"Shutdown", Func, 0},
-		{"SidTypeAlias", Const, 0},
-		{"SidTypeComputer", Const, 0},
-		{"SidTypeDeletedAccount", Const, 0},
-		{"SidTypeDomain", Const, 0},
-		{"SidTypeGroup", Const, 0},
-		{"SidTypeInvalid", Const, 0},
-		{"SidTypeLabel", Const, 0},
-		{"SidTypeUnknown", Const, 0},
-		{"SidTypeUser", Const, 0},
-		{"SidTypeWellKnownGroup", Const, 0},
-		{"Signal", Type, 0},
-		{"SizeofBpfHdr", Const, 0},
-		{"SizeofBpfInsn", Const, 0},
-		{"SizeofBpfProgram", Const, 0},
-		{"SizeofBpfStat", Const, 0},
-		{"SizeofBpfVersion", Const, 0},
-		{"SizeofBpfZbuf", Const, 0},
-		{"SizeofBpfZbufHeader", Const, 0},
-		{"SizeofCmsghdr", Const, 0},
-		{"SizeofICMPv6Filter", Const, 2},
-		{"SizeofIPMreq", Const, 0},
-		{"SizeofIPMreqn", Const, 0},
-		{"SizeofIPv6MTUInfo", Const, 2},
-		{"SizeofIPv6Mreq", Const, 0},
-		{"SizeofIfAddrmsg", Const, 0},
-		{"SizeofIfAnnounceMsghdr", Const, 1},
-		{"SizeofIfData", Const, 0},
-		{"SizeofIfInfomsg", Const, 0},
-		{"SizeofIfMsghdr", Const, 0},
-		{"SizeofIfaMsghdr", Const, 0},
-		{"SizeofIfmaMsghdr", Const, 0},
-		{"SizeofIfmaMsghdr2", Const, 0},
-		{"SizeofInet4Pktinfo", Const, 0},
-		{"SizeofInet6Pktinfo", Const, 0},
-		{"SizeofInotifyEvent", Const, 0},
-		{"SizeofLinger", Const, 0},
-		{"SizeofMsghdr", Const, 0},
-		{"SizeofNlAttr", Const, 0},
-		{"SizeofNlMsgerr", Const, 0},
-		{"SizeofNlMsghdr", Const, 0},
-		{"SizeofRtAttr", Const, 0},
-		{"SizeofRtGenmsg", Const, 0},
-		{"SizeofRtMetrics", Const, 0},
-		{"SizeofRtMsg", Const, 0},
-		{"SizeofRtMsghdr", Const, 0},
-		{"SizeofRtNexthop", Const, 0},
-		{"SizeofSockFilter", Const, 0},
-		{"SizeofSockFprog", Const, 0},
-		{"SizeofSockaddrAny", Const, 0},
-		{"SizeofSockaddrDatalink", Const, 0},
-		{"SizeofSockaddrInet4", Const, 0},
-		{"SizeofSockaddrInet6", Const, 0},
-		{"SizeofSockaddrLinklayer", Const, 0},
-		{"SizeofSockaddrNetlink", Const, 0},
-		{"SizeofSockaddrUnix", Const, 0},
-		{"SizeofTCPInfo", Const, 1},
-		{"SizeofUcred", Const, 0},
-		{"SlicePtrFromStrings", Func, 1},
-		{"SockFilter", Type, 0},
-		{"SockFilter.Code", Field, 0},
-		{"SockFilter.Jf", Field, 0},
-		{"SockFilter.Jt", Field, 0},
-		{"SockFilter.K", Field, 0},
-		{"SockFprog", Type, 0},
-		{"SockFprog.Filter", Field, 0},
-		{"SockFprog.Len", Field, 0},
-		{"SockFprog.Pad_cgo_0", Field, 0},
-		{"Sockaddr", Type, 0},
-		{"SockaddrDatalink", Type, 0},
-		{"SockaddrDatalink.Alen", Field, 0},
-		{"SockaddrDatalink.Data", Field, 0},
-		{"SockaddrDatalink.Family", Field, 0},
-		{"SockaddrDatalink.Index", Field, 0},
-		{"SockaddrDatalink.Len", Field, 0},
-		{"SockaddrDatalink.Nlen", Field, 0},
-		{"SockaddrDatalink.Slen", Field, 0},
-		{"SockaddrDatalink.Type", Field, 0},
-		{"SockaddrGen", Type, 0},
-		{"SockaddrInet4", Type, 0},
-		{"SockaddrInet4.Addr", Field, 0},
-		{"SockaddrInet4.Port", Field, 0},
-		{"SockaddrInet6", Type, 0},
-		{"SockaddrInet6.Addr", Field, 0},
-		{"SockaddrInet6.Port", Field, 0},
-		{"SockaddrInet6.ZoneId", Field, 0},
-		{"SockaddrLinklayer", Type, 0},
-		{"SockaddrLinklayer.Addr", Field, 0},
-		{"SockaddrLinklayer.Halen", Field, 0},
-		{"SockaddrLinklayer.Hatype", Field, 0},
-		{"SockaddrLinklayer.Ifindex", Field, 0},
-		{"SockaddrLinklayer.Pkttype", Field, 0},
-		{"SockaddrLinklayer.Protocol", Field, 0},
-		{"SockaddrNetlink", Type, 0},
-		{"SockaddrNetlink.Family", Field, 0},
-		{"SockaddrNetlink.Groups", Field, 0},
-		{"SockaddrNetlink.Pad", Field, 0},
-		{"SockaddrNetlink.Pid", Field, 0},
-		{"SockaddrUnix", Type, 0},
-		{"SockaddrUnix.Name", Field, 0},
-		{"Socket", Func, 0},
-		{"SocketControlMessage", Type, 0},
-		{"SocketControlMessage.Data", Field, 0},
-		{"SocketControlMessage.Header", Field, 0},
-		{"SocketDisableIPv6", Var, 0},
-		{"Socketpair", Func, 0},
-		{"Splice", Func, 0},
-		{"StartProcess", Func, 0},
-		{"StartupInfo", Type, 0},
-		{"StartupInfo.Cb", Field, 0},
-		{"StartupInfo.Desktop", Field, 0},
-		{"StartupInfo.FillAttribute", Field, 0},
-		{"StartupInfo.Flags", Field, 0},
-		{"StartupInfo.ShowWindow", Field, 0},
-		{"StartupInfo.StdErr", Field, 0},
-		{"StartupInfo.StdInput", Field, 0},
-		{"StartupInfo.StdOutput", Field, 0},
-		{"StartupInfo.Title", Field, 0},
-		{"StartupInfo.X", Field, 0},
-		{"StartupInfo.XCountChars", Field, 0},
-		{"StartupInfo.XSize", Field, 0},
-		{"StartupInfo.Y", Field, 0},
-		{"StartupInfo.YCountChars", Field, 0},
-		{"StartupInfo.YSize", Field, 0},
-		{"Stat", Func, 0},
-		{"Stat_t", Type, 0},
-		{"Stat_t.Atim", Field, 0},
-		{"Stat_t.Atim_ext", Field, 12},
-		{"Stat_t.Atimespec", Field, 0},
-		{"Stat_t.Birthtimespec", Field, 0},
-		{"Stat_t.Blksize", Field, 0},
-		{"Stat_t.Blocks", Field, 0},
-		{"Stat_t.Btim_ext", Field, 12},
-		{"Stat_t.Ctim", Field, 0},
-		{"Stat_t.Ctim_ext", Field, 12},
-		{"Stat_t.Ctimespec", Field, 0},
-		{"Stat_t.Dev", Field, 0},
-		{"Stat_t.Flags", Field, 0},
-		{"Stat_t.Gen", Field, 0},
-		{"Stat_t.Gid", Field, 0},
-		{"Stat_t.Ino", Field, 0},
-		{"Stat_t.Lspare", Field, 0},
-		{"Stat_t.Lspare0", Field, 2},
-		{"Stat_t.Lspare1", Field, 2},
-		{"Stat_t.Mode", Field, 0},
-		{"Stat_t.Mtim", Field, 0},
-		{"Stat_t.Mtim_ext", Field, 12},
-		{"Stat_t.Mtimespec", Field, 0},
-		{"Stat_t.Nlink", Field, 0},
-		{"Stat_t.Pad_cgo_0", Field, 0},
-		{"Stat_t.Pad_cgo_1", Field, 0},
-		{"Stat_t.Pad_cgo_2", Field, 0},
-		{"Stat_t.Padding0", Field, 12},
-		{"Stat_t.Padding1", Field, 12},
-		{"Stat_t.Qspare", Field, 0},
-		{"Stat_t.Rdev", Field, 0},
-		{"Stat_t.Size", Field, 0},
-		{"Stat_t.Spare", Field, 2},
-		{"Stat_t.Uid", Field, 0},
-		{"Stat_t.X__pad0", Field, 0},
-		{"Stat_t.X__pad1", Field, 0},
-		{"Stat_t.X__pad2", Field, 0},
-		{"Stat_t.X__st_birthtim", Field, 2},
-		{"Stat_t.X__st_ino", Field, 0},
-		{"Stat_t.X__unused", Field, 0},
-		{"Statfs", Func, 0},
-		{"Statfs_t", Type, 0},
-		{"Statfs_t.Asyncreads", Field, 0},
-		{"Statfs_t.Asyncwrites", Field, 0},
-		{"Statfs_t.Bavail", Field, 0},
-		{"Statfs_t.Bfree", Field, 0},
-		{"Statfs_t.Blocks", Field, 0},
-		{"Statfs_t.Bsize", Field, 0},
-		{"Statfs_t.Charspare", Field, 0},
-		{"Statfs_t.F_asyncreads", Field, 2},
-		{"Statfs_t.F_asyncwrites", Field, 2},
-		{"Statfs_t.F_bavail", Field, 2},
-		{"Statfs_t.F_bfree", Field, 2},
-		{"Statfs_t.F_blocks", Field, 2},
-		{"Statfs_t.F_bsize", Field, 2},
-		{"Statfs_t.F_ctime", Field, 2},
-		{"Statfs_t.F_favail", Field, 2},
-		{"Statfs_t.F_ffree", Field, 2},
-		{"Statfs_t.F_files", Field, 2},
-		{"Statfs_t.F_flags", Field, 2},
-		{"Statfs_t.F_fsid", Field, 2},
-		{"Statfs_t.F_fstypename", Field, 2},
-		{"Statfs_t.F_iosize", Field, 2},
-		{"Statfs_t.F_mntfromname", Field, 2},
-		{"Statfs_t.F_mntfromspec", Field, 3},
-		{"Statfs_t.F_mntonname", Field, 2},
-		{"Statfs_t.F_namemax", Field, 2},
-		{"Statfs_t.F_owner", Field, 2},
-		{"Statfs_t.F_spare", Field, 2},
-		{"Statfs_t.F_syncreads", Field, 2},
-		{"Statfs_t.F_syncwrites", Field, 2},
-		{"Statfs_t.Ffree", Field, 0},
-		{"Statfs_t.Files", Field, 0},
-		{"Statfs_t.Flags", Field, 0},
-		{"Statfs_t.Frsize", Field, 0},
-		{"Statfs_t.Fsid", Field, 0},
-		{"Statfs_t.Fssubtype", Field, 0},
-		{"Statfs_t.Fstypename", Field, 0},
-		{"Statfs_t.Iosize", Field, 0},
-		{"Statfs_t.Mntfromname", Field, 0},
-		{"Statfs_t.Mntonname", Field, 0},
-		{"Statfs_t.Mount_info", Field, 2},
-		{"Statfs_t.Namelen", Field, 0},
-		{"Statfs_t.Namemax", Field, 0},
-		{"Statfs_t.Owner", Field, 0},
-		{"Statfs_t.Pad_cgo_0", Field, 0},
-		{"Statfs_t.Pad_cgo_1", Field, 2},
-		{"Statfs_t.Reserved", Field, 0},
-		{"Statfs_t.Spare", Field, 0},
-		{"Statfs_t.Syncreads", Field, 0},
-		{"Statfs_t.Syncwrites", Field, 0},
-		{"Statfs_t.Type", Field, 0},
-		{"Statfs_t.Version", Field, 0},
-		{"Stderr", Var, 0},
-		{"Stdin", Var, 0},
-		{"Stdout", Var, 0},
-		{"StringBytePtr", Func, 0},
-		{"StringByteSlice", Func, 0},
-		{"StringSlicePtr", Func, 0},
-		{"StringToSid", Func, 0},
-		{"StringToUTF16", Func, 0},
-		{"StringToUTF16Ptr", Func, 0},
-		{"Symlink", Func, 0},
-		{"Sync", Func, 0},
-		{"SyncFileRange", Func, 0},
-		{"SysProcAttr", Type, 0},
-		{"SysProcAttr.AdditionalInheritedHandles", Field, 17},
-		{"SysProcAttr.AmbientCaps", Field, 9},
-		{"SysProcAttr.CgroupFD", Field, 20},
-		{"SysProcAttr.Chroot", Field, 0},
-		{"SysProcAttr.Cloneflags", Field, 2},
-		{"SysProcAttr.CmdLine", Field, 0},
-		{"SysProcAttr.CreationFlags", Field, 1},
-		{"SysProcAttr.Credential", Field, 0},
-		{"SysProcAttr.Ctty", Field, 1},
-		{"SysProcAttr.Foreground", Field, 5},
-		{"SysProcAttr.GidMappings", Field, 4},
-		{"SysProcAttr.GidMappingsEnableSetgroups", Field, 5},
-		{"SysProcAttr.HideWindow", Field, 0},
-		{"SysProcAttr.Jail", Field, 21},
-		{"SysProcAttr.NoInheritHandles", Field, 16},
-		{"SysProcAttr.Noctty", Field, 0},
-		{"SysProcAttr.ParentProcess", Field, 17},
-		{"SysProcAttr.Pdeathsig", Field, 0},
-		{"SysProcAttr.Pgid", Field, 5},
-		{"SysProcAttr.PidFD", Field, 22},
-		{"SysProcAttr.ProcessAttributes", Field, 13},
-		{"SysProcAttr.Ptrace", Field, 0},
-		{"SysProcAttr.Setctty", Field, 0},
-		{"SysProcAttr.Setpgid", Field, 0},
-		{"SysProcAttr.Setsid", Field, 0},
-		{"SysProcAttr.ThreadAttributes", Field, 13},
-		{"SysProcAttr.Token", Field, 10},
-		{"SysProcAttr.UidMappings", Field, 4},
-		{"SysProcAttr.Unshareflags", Field, 7},
-		{"SysProcAttr.UseCgroupFD", Field, 20},
-		{"SysProcIDMap", Type, 4},
-		{"SysProcIDMap.ContainerID", Field, 4},
-		{"SysProcIDMap.HostID", Field, 4},
-		{"SysProcIDMap.Size", Field, 4},
-		{"Syscall", Func, 0},
-		{"Syscall12", Func, 0},
-		{"Syscall15", Func, 0},
-		{"Syscall18", Func, 12},
-		{"Syscall6", Func, 0},
-		{"Syscall9", Func, 0},
-		{"SyscallN", Func, 18},
-		{"Sysctl", Func, 0},
-		{"SysctlUint32", Func, 0},
-		{"Sysctlnode", Type, 2},
-		{"Sysctlnode.Flags", Field, 2},
-		{"Sysctlnode.Name", Field, 2},
-		{"Sysctlnode.Num", Field, 2},
-		{"Sysctlnode.Un", Field, 2},
-		{"Sysctlnode.Ver", Field, 2},
-		{"Sysctlnode.X__rsvd", Field, 2},
-		{"Sysctlnode.X_sysctl_desc", Field, 2},
-		{"Sysctlnode.X_sysctl_func", Field, 2},
-		{"Sysctlnode.X_sysctl_parent", Field, 2},
-		{"Sysctlnode.X_sysctl_size", Field, 2},
-		{"Sysinfo", Func, 0},
-		{"Sysinfo_t", Type, 0},
-		{"Sysinfo_t.Bufferram", Field, 0},
-		{"Sysinfo_t.Freehigh", Field, 0},
-		{"Sysinfo_t.Freeram", Field, 0},
-		{"Sysinfo_t.Freeswap", Field, 0},
-		{"Sysinfo_t.Loads", Field, 0},
-		{"Sysinfo_t.Pad", Field, 0},
-		{"Sysinfo_t.Pad_cgo_0", Field, 0},
-		{"Sysinfo_t.Pad_cgo_1", Field, 0},
-		{"Sysinfo_t.Procs", Field, 0},
-		{"Sysinfo_t.Sharedram", Field, 0},
-		{"Sysinfo_t.Totalhigh", Field, 0},
-		{"Sysinfo_t.Totalram", Field, 0},
-		{"Sysinfo_t.Totalswap", Field, 0},
-		{"Sysinfo_t.Unit", Field, 0},
-		{"Sysinfo_t.Uptime", Field, 0},
-		{"Sysinfo_t.X_f", Field, 0},
-		{"Systemtime", Type, 0},
-		{"Systemtime.Day", Field, 0},
-		{"Systemtime.DayOfWeek", Field, 0},
-		{"Systemtime.Hour", Field, 0},
-		{"Systemtime.Milliseconds", Field, 0},
-		{"Systemtime.Minute", Field, 0},
-		{"Systemtime.Month", Field, 0},
-		{"Systemtime.Second", Field, 0},
-		{"Systemtime.Year", Field, 0},
-		{"TCGETS", Const, 0},
-		{"TCIFLUSH", Const, 1},
-		{"TCIOFLUSH", Const, 1},
-		{"TCOFLUSH", Const, 1},
-		{"TCPInfo", Type, 1},
-		{"TCPInfo.Advmss", Field, 1},
-		{"TCPInfo.Ato", Field, 1},
-		{"TCPInfo.Backoff", Field, 1},
-		{"TCPInfo.Ca_state", Field, 1},
-		{"TCPInfo.Fackets", Field, 1},
-		{"TCPInfo.Last_ack_recv", Field, 1},
-		{"TCPInfo.Last_ack_sent", Field, 1},
-		{"TCPInfo.Last_data_recv", Field, 1},
-		{"TCPInfo.Last_data_sent", Field, 1},
-		{"TCPInfo.Lost", Field, 1},
-		{"TCPInfo.Options", Field, 1},
-		{"TCPInfo.Pad_cgo_0", Field, 1},
-		{"TCPInfo.Pmtu", Field, 1},
-		{"TCPInfo.Probes", Field, 1},
-		{"TCPInfo.Rcv_mss", Field, 1},
-		{"TCPInfo.Rcv_rtt", Field, 1},
-		{"TCPInfo.Rcv_space", Field, 1},
-		{"TCPInfo.Rcv_ssthresh", Field, 1},
-		{"TCPInfo.Reordering", Field, 1},
-		{"TCPInfo.Retrans", Field, 1},
-		{"TCPInfo.Retransmits", Field, 1},
-		{"TCPInfo.Rto", Field, 1},
-		{"TCPInfo.Rtt", Field, 1},
-		{"TCPInfo.Rttvar", Field, 1},
-		{"TCPInfo.Sacked", Field, 1},
-		{"TCPInfo.Snd_cwnd", Field, 1},
-		{"TCPInfo.Snd_mss", Field, 1},
-		{"TCPInfo.Snd_ssthresh", Field, 1},
-		{"TCPInfo.State", Field, 1},
-		{"TCPInfo.Total_retrans", Field, 1},
-		{"TCPInfo.Unacked", Field, 1},
-		{"TCPKeepalive", Type, 3},
-		{"TCPKeepalive.Interval", Field, 3},
-		{"TCPKeepalive.OnOff", Field, 3},
-		{"TCPKeepalive.Time", Field, 3},
-		{"TCP_CA_NAME_MAX", Const, 0},
-		{"TCP_CONGCTL", Const, 1},
-		{"TCP_CONGESTION", Const, 0},
-		{"TCP_CONNECTIONTIMEOUT", Const, 0},
-		{"TCP_CORK", Const, 0},
-		{"TCP_DEFER_ACCEPT", Const, 0},
-		{"TCP_ENABLE_ECN", Const, 16},
-		{"TCP_INFO", Const, 0},
-		{"TCP_KEEPALIVE", Const, 0},
-		{"TCP_KEEPCNT", Const, 0},
-		{"TCP_KEEPIDLE", Const, 0},
-		{"TCP_KEEPINIT", Const, 1},
-		{"TCP_KEEPINTVL", Const, 0},
-		{"TCP_LINGER2", Const, 0},
-		{"TCP_MAXBURST", Const, 0},
-		{"TCP_MAXHLEN", Const, 0},
-		{"TCP_MAXOLEN", Const, 0},
-		{"TCP_MAXSEG", Const, 0},
-		{"TCP_MAXWIN", Const, 0},
-		{"TCP_MAX_SACK", Const, 0},
-		{"TCP_MAX_WINSHIFT", Const, 0},
-		{"TCP_MD5SIG", Const, 0},
-		{"TCP_MD5SIG_MAXKEYLEN", Const, 0},
-		{"TCP_MINMSS", Const, 0},
-		{"TCP_MINMSSOVERLOAD", Const, 0},
-		{"TCP_MSS", Const, 0},
-		{"TCP_NODELAY", Const, 0},
-		{"TCP_NOOPT", Const, 0},
-		{"TCP_NOPUSH", Const, 0},
-		{"TCP_NOTSENT_LOWAT", Const, 16},
-		{"TCP_NSTATES", Const, 1},
-		{"TCP_QUICKACK", Const, 0},
-		{"TCP_RXT_CONNDROPTIME", Const, 0},
-		{"TCP_RXT_FINDROP", Const, 0},
-		{"TCP_SACK_ENABLE", Const, 1},
-		{"TCP_SENDMOREACKS", Const, 16},
-		{"TCP_SYNCNT", Const, 0},
-		{"TCP_VENDOR", Const, 3},
-		{"TCP_WINDOW_CLAMP", Const, 0},
-		{"TCSAFLUSH", Const, 1},
-		{"TCSETS", Const, 0},
-		{"TF_DISCONNECT", Const, 0},
-		{"TF_REUSE_SOCKET", Const, 0},
-		{"TF_USE_DEFAULT_WORKER", Const, 0},
-		{"TF_USE_KERNEL_APC", Const, 0},
-		{"TF_USE_SYSTEM_THREAD", Const, 0},
-		{"TF_WRITE_BEHIND", Const, 0},
-		{"TH32CS_INHERIT", Const, 4},
-		{"TH32CS_SNAPALL", Const, 4},
-		{"TH32CS_SNAPHEAPLIST", Const, 4},
-		{"TH32CS_SNAPMODULE", Const, 4},
-		{"TH32CS_SNAPMODULE32", Const, 4},
-		{"TH32CS_SNAPPROCESS", Const, 4},
-		{"TH32CS_SNAPTHREAD", Const, 4},
-		{"TIME_ZONE_ID_DAYLIGHT", Const, 0},
-		{"TIME_ZONE_ID_STANDARD", Const, 0},
-		{"TIME_ZONE_ID_UNKNOWN", Const, 0},
-		{"TIOCCBRK", Const, 0},
-		{"TIOCCDTR", Const, 0},
-		{"TIOCCONS", Const, 0},
-		{"TIOCDCDTIMESTAMP", Const, 0},
-		{"TIOCDRAIN", Const, 0},
-		{"TIOCDSIMICROCODE", Const, 0},
-		{"TIOCEXCL", Const, 0},
-		{"TIOCEXT", Const, 0},
-		{"TIOCFLAG_CDTRCTS", Const, 1},
-		{"TIOCFLAG_CLOCAL", Const, 1},
-		{"TIOCFLAG_CRTSCTS", Const, 1},
-		{"TIOCFLAG_MDMBUF", Const, 1},
-		{"TIOCFLAG_PPS", Const, 1},
-		{"TIOCFLAG_SOFTCAR", Const, 1},
-		{"TIOCFLUSH", Const, 0},
-		{"TIOCGDEV", Const, 0},
-		{"TIOCGDRAINWAIT", Const, 0},
-		{"TIOCGETA", Const, 0},
-		{"TIOCGETD", Const, 0},
-		{"TIOCGFLAGS", Const, 1},
-		{"TIOCGICOUNT", Const, 0},
-		{"TIOCGLCKTRMIOS", Const, 0},
-		{"TIOCGLINED", Const, 1},
-		{"TIOCGPGRP", Const, 0},
-		{"TIOCGPTN", Const, 0},
-		{"TIOCGQSIZE", Const, 1},
-		{"TIOCGRANTPT", Const, 1},
-		{"TIOCGRS485", Const, 0},
-		{"TIOCGSERIAL", Const, 0},
-		{"TIOCGSID", Const, 0},
-		{"TIOCGSIZE", Const, 1},
-		{"TIOCGSOFTCAR", Const, 0},
-		{"TIOCGTSTAMP", Const, 1},
-		{"TIOCGWINSZ", Const, 0},
-		{"TIOCINQ", Const, 0},
-		{"TIOCIXOFF", Const, 0},
-		{"TIOCIXON", Const, 0},
-		{"TIOCLINUX", Const, 0},
-		{"TIOCMBIC", Const, 0},
-		{"TIOCMBIS", Const, 0},
-		{"TIOCMGDTRWAIT", Const, 0},
-		{"TIOCMGET", Const, 0},
-		{"TIOCMIWAIT", Const, 0},
-		{"TIOCMODG", Const, 0},
-		{"TIOCMODS", Const, 0},
-		{"TIOCMSDTRWAIT", Const, 0},
-		{"TIOCMSET", Const, 0},
-		{"TIOCM_CAR", Const, 0},
-		{"TIOCM_CD", Const, 0},
-		{"TIOCM_CTS", Const, 0},
-		{"TIOCM_DCD", Const, 0},
-		{"TIOCM_DSR", Const, 0},
-		{"TIOCM_DTR", Const, 0},
-		{"TIOCM_LE", Const, 0},
-		{"TIOCM_RI", Const, 0},
-		{"TIOCM_RNG", Const, 0},
-		{"TIOCM_RTS", Const, 0},
-		{"TIOCM_SR", Const, 0},
-		{"TIOCM_ST", Const, 0},
-		{"TIOCNOTTY", Const, 0},
-		{"TIOCNXCL", Const, 0},
-		{"TIOCOUTQ", Const, 0},
-		{"TIOCPKT", Const, 0},
-		{"TIOCPKT_DATA", Const, 0},
-		{"TIOCPKT_DOSTOP", Const, 0},
-		{"TIOCPKT_FLUSHREAD", Const, 0},
-		{"TIOCPKT_FLUSHWRITE", Const, 0},
-		{"TIOCPKT_IOCTL", Const, 0},
-		{"TIOCPKT_NOSTOP", Const, 0},
-		{"TIOCPKT_START", Const, 0},
-		{"TIOCPKT_STOP", Const, 0},
-		{"TIOCPTMASTER", Const, 0},
-		{"TIOCPTMGET", Const, 1},
-		{"TIOCPTSNAME", Const, 1},
-		{"TIOCPTYGNAME", Const, 0},
-		{"TIOCPTYGRANT", Const, 0},
-		{"TIOCPTYUNLK", Const, 0},
-		{"TIOCRCVFRAME", Const, 1},
-		{"TIOCREMOTE", Const, 0},
-		{"TIOCSBRK", Const, 0},
-		{"TIOCSCONS", Const, 0},
-		{"TIOCSCTTY", Const, 0},
-		{"TIOCSDRAINWAIT", Const, 0},
-		{"TIOCSDTR", Const, 0},
-		{"TIOCSERCONFIG", Const, 0},
-		{"TIOCSERGETLSR", Const, 0},
-		{"TIOCSERGETMULTI", Const, 0},
-		{"TIOCSERGSTRUCT", Const, 0},
-		{"TIOCSERGWILD", Const, 0},
-		{"TIOCSERSETMULTI", Const, 0},
-		{"TIOCSERSWILD", Const, 0},
-		{"TIOCSER_TEMT", Const, 0},
-		{"TIOCSETA", Const, 0},
-		{"TIOCSETAF", Const, 0},
-		{"TIOCSETAW", Const, 0},
-		{"TIOCSETD", Const, 0},
-		{"TIOCSFLAGS", Const, 1},
-		{"TIOCSIG", Const, 0},
-		{"TIOCSLCKTRMIOS", Const, 0},
-		{"TIOCSLINED", Const, 1},
-		{"TIOCSPGRP", Const, 0},
-		{"TIOCSPTLCK", Const, 0},
-		{"TIOCSQSIZE", Const, 1},
-		{"TIOCSRS485", Const, 0},
-		{"TIOCSSERIAL", Const, 0},
-		{"TIOCSSIZE", Const, 1},
-		{"TIOCSSOFTCAR", Const, 0},
-		{"TIOCSTART", Const, 0},
-		{"TIOCSTAT", Const, 0},
-		{"TIOCSTI", Const, 0},
-		{"TIOCSTOP", Const, 0},
-		{"TIOCSTSTAMP", Const, 1},
-		{"TIOCSWINSZ", Const, 0},
-		{"TIOCTIMESTAMP", Const, 0},
-		{"TIOCUCNTL", Const, 0},
-		{"TIOCVHANGUP", Const, 0},
-		{"TIOCXMTFRAME", Const, 1},
-		{"TOKEN_ADJUST_DEFAULT", Const, 0},
-		{"TOKEN_ADJUST_GROUPS", Const, 0},
-		{"TOKEN_ADJUST_PRIVILEGES", Const, 0},
-		{"TOKEN_ADJUST_SESSIONID", Const, 11},
-		{"TOKEN_ALL_ACCESS", Const, 0},
-		{"TOKEN_ASSIGN_PRIMARY", Const, 0},
-		{"TOKEN_DUPLICATE", Const, 0},
-		{"TOKEN_EXECUTE", Const, 0},
-		{"TOKEN_IMPERSONATE", Const, 0},
-		{"TOKEN_QUERY", Const, 0},
-		{"TOKEN_QUERY_SOURCE", Const, 0},
-		{"TOKEN_READ", Const, 0},
-		{"TOKEN_WRITE", Const, 0},
-		{"TOSTOP", Const, 0},
-		{"TRUNCATE_EXISTING", Const, 0},
-		{"TUNATTACHFILTER", Const, 0},
-		{"TUNDETACHFILTER", Const, 0},
-		{"TUNGETFEATURES", Const, 0},
-		{"TUNGETIFF", Const, 0},
-		{"TUNGETSNDBUF", Const, 0},
-		{"TUNGETVNETHDRSZ", Const, 0},
-		{"TUNSETDEBUG", Const, 0},
-		{"TUNSETGROUP", Const, 0},
-		{"TUNSETIFF", Const, 0},
-		{"TUNSETLINK", Const, 0},
-		{"TUNSETNOCSUM", Const, 0},
-		{"TUNSETOFFLOAD", Const, 0},
-		{"TUNSETOWNER", Const, 0},
-		{"TUNSETPERSIST", Const, 0},
-		{"TUNSETSNDBUF", Const, 0},
-		{"TUNSETTXFILTER", Const, 0},
-		{"TUNSETVNETHDRSZ", Const, 0},
-		{"Tee", Func, 0},
-		{"TerminateProcess", Func, 0},
-		{"Termios", Type, 0},
-		{"Termios.Cc", Field, 0},
-		{"Termios.Cflag", Field, 0},
-		{"Termios.Iflag", Field, 0},
-		{"Termios.Ispeed", Field, 0},
-		{"Termios.Lflag", Field, 0},
-		{"Termios.Line", Field, 0},
-		{"Termios.Oflag", Field, 0},
-		{"Termios.Ospeed", Field, 0},
-		{"Termios.Pad_cgo_0", Field, 0},
-		{"Tgkill", Func, 0},
-		{"Time", Func, 0},
-		{"Time_t", Type, 0},
-		{"Times", Func, 0},
-		{"Timespec", Type, 0},
-		{"Timespec.Nsec", Field, 0},
-		{"Timespec.Pad_cgo_0", Field, 2},
-		{"Timespec.Sec", Field, 0},
-		{"TimespecToNsec", Func, 0},
-		{"Timeval", Type, 0},
-		{"Timeval.Pad_cgo_0", Field, 0},
-		{"Timeval.Sec", Field, 0},
-		{"Timeval.Usec", Field, 0},
-		{"Timeval32", Type, 0},
-		{"Timeval32.Sec", Field, 0},
-		{"Timeval32.Usec", Field, 0},
-		{"TimevalToNsec", Func, 0},
-		{"Timex", Type, 0},
-		{"Timex.Calcnt", Field, 0},
-		{"Timex.Constant", Field, 0},
-		{"Timex.Errcnt", Field, 0},
-		{"Timex.Esterror", Field, 0},
-		{"Timex.Freq", Field, 0},
-		{"Timex.Jitcnt", Field, 0},
-		{"Timex.Jitter", Field, 0},
-		{"Timex.Maxerror", Field, 0},
-		{"Timex.Modes", Field, 0},
-		{"Timex.Offset", Field, 0},
-		{"Timex.Pad_cgo_0", Field, 0},
-		{"Timex.Pad_cgo_1", Field, 0},
-		{"Timex.Pad_cgo_2", Field, 0},
-		{"Timex.Pad_cgo_3", Field, 0},
-		{"Timex.Ppsfreq", Field, 0},
-		{"Timex.Precision", Field, 0},
-		{"Timex.Shift", Field, 0},
-		{"Timex.Stabil", Field, 0},
-		{"Timex.Status", Field, 0},
-		{"Timex.Stbcnt", Field, 0},
-		{"Timex.Tai", Field, 0},
-		{"Timex.Tick", Field, 0},
-		{"Timex.Time", Field, 0},
-		{"Timex.Tolerance", Field, 0},
-		{"Timezoneinformation", Type, 0},
-		{"Timezoneinformation.Bias", Field, 0},
-		{"Timezoneinformation.DaylightBias", Field, 0},
-		{"Timezoneinformation.DaylightDate", Field, 0},
-		{"Timezoneinformation.DaylightName", Field, 0},
-		{"Timezoneinformation.StandardBias", Field, 0},
-		{"Timezoneinformation.StandardDate", Field, 0},
-		{"Timezoneinformation.StandardName", Field, 0},
-		{"Tms", Type, 0},
-		{"Tms.Cstime", Field, 0},
-		{"Tms.Cutime", Field, 0},
-		{"Tms.Stime", Field, 0},
-		{"Tms.Utime", Field, 0},
-		{"Token", Type, 0},
-		{"TokenAccessInformation", Const, 0},
-		{"TokenAuditPolicy", Const, 0},
-		{"TokenDefaultDacl", Const, 0},
-		{"TokenElevation", Const, 0},
-		{"TokenElevationType", Const, 0},
-		{"TokenGroups", Const, 0},
-		{"TokenGroupsAndPrivileges", Const, 0},
-		{"TokenHasRestrictions", Const, 0},
-		{"TokenImpersonationLevel", Const, 0},
-		{"TokenIntegrityLevel", Const, 0},
-		{"TokenLinkedToken", Const, 0},
-		{"TokenLogonSid", Const, 0},
-		{"TokenMandatoryPolicy", Const, 0},
-		{"TokenOrigin", Const, 0},
-		{"TokenOwner", Const, 0},
-		{"TokenPrimaryGroup", Const, 0},
-		{"TokenPrivileges", Const, 0},
-		{"TokenRestrictedSids", Const, 0},
-		{"TokenSandBoxInert", Const, 0},
-		{"TokenSessionId", Const, 0},
-		{"TokenSessionReference", Const, 0},
-		{"TokenSource", Const, 0},
-		{"TokenStatistics", Const, 0},
-		{"TokenType", Const, 0},
-		{"TokenUIAccess", Const, 0},
-		{"TokenUser", Const, 0},
-		{"TokenVirtualizationAllowed", Const, 0},
-		{"TokenVirtualizationEnabled", Const, 0},
-		{"Tokenprimarygroup", Type, 0},
-		{"Tokenprimarygroup.PrimaryGroup", Field, 0},
-		{"Tokenuser", Type, 0},
-		{"Tokenuser.User", Field, 0},
-		{"TranslateAccountName", Func, 0},
-		{"TranslateName", Func, 0},
-		{"TransmitFile", Func, 0},
-		{"TransmitFileBuffers", Type, 0},
-		{"TransmitFileBuffers.Head", Field, 0},
-		{"TransmitFileBuffers.HeadLength", Field, 0},
-		{"TransmitFileBuffers.Tail", Field, 0},
-		{"TransmitFileBuffers.TailLength", Field, 0},
-		{"Truncate", Func, 0},
-		{"UNIX_PATH_MAX", Const, 12},
-		{"USAGE_MATCH_TYPE_AND", Const, 0},
-		{"USAGE_MATCH_TYPE_OR", Const, 0},
-		{"UTF16FromString", Func, 1},
-		{"UTF16PtrFromString", Func, 1},
-		{"UTF16ToString", Func, 0},
-		{"Ucred", Type, 0},
-		{"Ucred.Gid", Field, 0},
-		{"Ucred.Pid", Field, 0},
-		{"Ucred.Uid", Field, 0},
-		{"Umask", Func, 0},
-		{"Uname", Func, 0},
-		{"Undelete", Func, 0},
-		{"UnixCredentials", Func, 0},
-		{"UnixRights", Func, 0},
-		{"Unlink", Func, 0},
-		{"Unlinkat", Func, 0},
-		{"UnmapViewOfFile", Func, 0},
-		{"Unmount", Func, 0},
-		{"Unsetenv", Func, 4},
-		{"Unshare", Func, 0},
-		{"UserInfo10", Type, 0},
-		{"UserInfo10.Comment", Field, 0},
-		{"UserInfo10.FullName", Field, 0},
-		{"UserInfo10.Name", Field, 0},
-		{"UserInfo10.UsrComment", Field, 0},
-		{"Ustat", Func, 0},
-		{"Ustat_t", Type, 0},
-		{"Ustat_t.Fname", Field, 0},
-		{"Ustat_t.Fpack", Field, 0},
-		{"Ustat_t.Pad_cgo_0", Field, 0},
-		{"Ustat_t.Pad_cgo_1", Field, 0},
-		{"Ustat_t.Tfree", Field, 0},
-		{"Ustat_t.Tinode", Field, 0},
-		{"Utimbuf", Type, 0},
-		{"Utimbuf.Actime", Field, 0},
-		{"Utimbuf.Modtime", Field, 0},
-		{"Utime", Func, 0},
-		{"Utimes", Func, 0},
-		{"UtimesNano", Func, 1},
-		{"Utsname", Type, 0},
-		{"Utsname.Domainname", Field, 0},
-		{"Utsname.Machine", Field, 0},
-		{"Utsname.Nodename", Field, 0},
-		{"Utsname.Release", Field, 0},
-		{"Utsname.Sysname", Field, 0},
-		{"Utsname.Version", Field, 0},
-		{"VDISCARD", Const, 0},
-		{"VDSUSP", Const, 1},
-		{"VEOF", Const, 0},
-		{"VEOL", Const, 0},
-		{"VEOL2", Const, 0},
-		{"VERASE", Const, 0},
-		{"VERASE2", Const, 1},
-		{"VINTR", Const, 0},
-		{"VKILL", Const, 0},
-		{"VLNEXT", Const, 0},
-		{"VMIN", Const, 0},
-		{"VQUIT", Const, 0},
-		{"VREPRINT", Const, 0},
-		{"VSTART", Const, 0},
-		{"VSTATUS", Const, 1},
-		{"VSTOP", Const, 0},
-		{"VSUSP", Const, 0},
-		{"VSWTC", Const, 0},
-		{"VT0", Const, 1},
-		{"VT1", Const, 1},
-		{"VTDLY", Const, 1},
-		{"VTIME", Const, 0},
-		{"VWERASE", Const, 0},
-		{"VirtualLock", Func, 0},
-		{"VirtualUnlock", Func, 0},
-		{"WAIT_ABANDONED", Const, 0},
-		{"WAIT_FAILED", Const, 0},
-		{"WAIT_OBJECT_0", Const, 0},
-		{"WAIT_TIMEOUT", Const, 0},
-		{"WALL", Const, 0},
-		{"WALLSIG", Const, 1},
-		{"WALTSIG", Const, 1},
-		{"WCLONE", Const, 0},
-		{"WCONTINUED", Const, 0},
-		{"WCOREFLAG", Const, 0},
-		{"WEXITED", Const, 0},
-		{"WLINUXCLONE", Const, 0},
-		{"WNOHANG", Const, 0},
-		{"WNOTHREAD", Const, 0},
-		{"WNOWAIT", Const, 0},
-		{"WNOZOMBIE", Const, 1},
-		{"WOPTSCHECKED", Const, 1},
-		{"WORDSIZE", Const, 0},
-		{"WSABuf", Type, 0},
-		{"WSABuf.Buf", Field, 0},
-		{"WSABuf.Len", Field, 0},
-		{"WSACleanup", Func, 0},
-		{"WSADESCRIPTION_LEN", Const, 0},
-		{"WSAData", Type, 0},
-		{"WSAData.Description", Field, 0},
-		{"WSAData.HighVersion", Field, 0},
-		{"WSAData.MaxSockets", Field, 0},
-		{"WSAData.MaxUdpDg", Field, 0},
-		{"WSAData.SystemStatus", Field, 0},
-		{"WSAData.VendorInfo", Field, 0},
-		{"WSAData.Version", Field, 0},
-		{"WSAEACCES", Const, 2},
-		{"WSAECONNABORTED", Const, 9},
-		{"WSAECONNRESET", Const, 3},
-		{"WSAENOPROTOOPT", Const, 23},
-		{"WSAEnumProtocols", Func, 2},
-		{"WSAID_CONNECTEX", Var, 1},
-		{"WSAIoctl", Func, 0},
-		{"WSAPROTOCOL_LEN", Const, 2},
-		{"WSAProtocolChain", Type, 2},
-		{"WSAProtocolChain.ChainEntries", Field, 2},
-		{"WSAProtocolChain.ChainLen", Field, 2},
-		{"WSAProtocolInfo", Type, 2},
-		{"WSAProtocolInfo.AddressFamily", Field, 2},
-		{"WSAProtocolInfo.CatalogEntryId", Field, 2},
-		{"WSAProtocolInfo.MaxSockAddr", Field, 2},
-		{"WSAProtocolInfo.MessageSize", Field, 2},
-		{"WSAProtocolInfo.MinSockAddr", Field, 2},
-		{"WSAProtocolInfo.NetworkByteOrder", Field, 2},
-		{"WSAProtocolInfo.Protocol", Field, 2},
-		{"WSAProtocolInfo.ProtocolChain", Field, 2},
-		{"WSAProtocolInfo.ProtocolMaxOffset", Field, 2},
-		{"WSAProtocolInfo.ProtocolName", Field, 2},
-		{"WSAProtocolInfo.ProviderFlags", Field, 2},
-		{"WSAProtocolInfo.ProviderId", Field, 2},
-		{"WSAProtocolInfo.ProviderReserved", Field, 2},
-		{"WSAProtocolInfo.SecurityScheme", Field, 2},
-		{"WSAProtocolInfo.ServiceFlags1", Field, 2},
-		{"WSAProtocolInfo.ServiceFlags2", Field, 2},
-		{"WSAProtocolInfo.ServiceFlags3", Field, 2},
-		{"WSAProtocolInfo.ServiceFlags4", Field, 2},
-		{"WSAProtocolInfo.SocketType", Field, 2},
-		{"WSAProtocolInfo.Version", Field, 2},
-		{"WSARecv", Func, 0},
-		{"WSARecvFrom", Func, 0},
-		{"WSASYS_STATUS_LEN", Const, 0},
-		{"WSASend", Func, 0},
-		{"WSASendTo", Func, 0},
-		{"WSASendto", Func, 0},
-		{"WSAStartup", Func, 0},
-		{"WSTOPPED", Const, 0},
-		{"WTRAPPED", Const, 1},
-		{"WUNTRACED", Const, 0},
-		{"Wait4", Func, 0},
-		{"WaitForSingleObject", Func, 0},
-		{"WaitStatus", Type, 0},
-		{"WaitStatus.ExitCode", Field, 0},
-		{"Win32FileAttributeData", Type, 0},
-		{"Win32FileAttributeData.CreationTime", Field, 0},
-		{"Win32FileAttributeData.FileAttributes", Field, 0},
-		{"Win32FileAttributeData.FileSizeHigh", Field, 0},
-		{"Win32FileAttributeData.FileSizeLow", Field, 0},
-		{"Win32FileAttributeData.LastAccessTime", Field, 0},
-		{"Win32FileAttributeData.LastWriteTime", Field, 0},
-		{"Win32finddata", Type, 0},
-		{"Win32finddata.AlternateFileName", Field, 0},
-		{"Win32finddata.CreationTime", Field, 0},
-		{"Win32finddata.FileAttributes", Field, 0},
-		{"Win32finddata.FileName", Field, 0},
-		{"Win32finddata.FileSizeHigh", Field, 0},
-		{"Win32finddata.FileSizeLow", Field, 0},
-		{"Win32finddata.LastAccessTime", Field, 0},
-		{"Win32finddata.LastWriteTime", Field, 0},
-		{"Win32finddata.Reserved0", Field, 0},
-		{"Win32finddata.Reserved1", Field, 0},
-		{"Write", Func, 0},
-		{"WriteConsole", Func, 1},
-		{"WriteFile", Func, 0},
-		{"X509_ASN_ENCODING", Const, 0},
-		{"XCASE", Const, 0},
-		{"XP1_CONNECTIONLESS", Const, 2},
-		{"XP1_CONNECT_DATA", Const, 2},
-		{"XP1_DISCONNECT_DATA", Const, 2},
-		{"XP1_EXPEDITED_DATA", Const, 2},
-		{"XP1_GRACEFUL_CLOSE", Const, 2},
-		{"XP1_GUARANTEED_DELIVERY", Const, 2},
-		{"XP1_GUARANTEED_ORDER", Const, 2},
-		{"XP1_IFS_HANDLES", Const, 2},
-		{"XP1_MESSAGE_ORIENTED", Const, 2},
-		{"XP1_MULTIPOINT_CONTROL_PLANE", Const, 2},
-		{"XP1_MULTIPOINT_DATA_PLANE", Const, 2},
-		{"XP1_PARTIAL_MESSAGE", Const, 2},
-		{"XP1_PSEUDO_STREAM", Const, 2},
-		{"XP1_QOS_SUPPORTED", Const, 2},
-		{"XP1_SAN_SUPPORT_SDP", Const, 2},
-		{"XP1_SUPPORT_BROADCAST", Const, 2},
-		{"XP1_SUPPORT_MULTIPOINT", Const, 2},
-		{"XP1_UNI_RECV", Const, 2},
-		{"XP1_UNI_SEND", Const, 2},
+		{"(*Cmsghdr).SetLen", Method, 0, ""},
+		{"(*DLL).FindProc", Method, 0, ""},
+		{"(*DLL).MustFindProc", Method, 0, ""},
+		{"(*DLL).Release", Method, 0, ""},
+		{"(*DLLError).Error", Method, 0, ""},
+		{"(*DLLError).Unwrap", Method, 16, ""},
+		{"(*Filetime).Nanoseconds", Method, 0, ""},
+		{"(*Iovec).SetLen", Method, 0, ""},
+		{"(*LazyDLL).Handle", Method, 0, ""},
+		{"(*LazyDLL).Load", Method, 0, ""},
+		{"(*LazyDLL).NewProc", Method, 0, ""},
+		{"(*LazyProc).Addr", Method, 0, ""},
+		{"(*LazyProc).Call", Method, 0, ""},
+		{"(*LazyProc).Find", Method, 0, ""},
+		{"(*Msghdr).SetControllen", Method, 0, ""},
+		{"(*Proc).Addr", Method, 0, ""},
+		{"(*Proc).Call", Method, 0, ""},
+		{"(*PtraceRegs).PC", Method, 0, ""},
+		{"(*PtraceRegs).SetPC", Method, 0, ""},
+		{"(*RawSockaddrAny).Sockaddr", Method, 0, ""},
+		{"(*SID).Copy", Method, 0, ""},
+		{"(*SID).Len", Method, 0, ""},
+		{"(*SID).LookupAccount", Method, 0, ""},
+		{"(*SID).String", Method, 0, ""},
+		{"(*Timespec).Nano", Method, 0, ""},
+		{"(*Timespec).Unix", Method, 0, ""},
+		{"(*Timeval).Nano", Method, 0, ""},
+		{"(*Timeval).Nanoseconds", Method, 0, ""},
+		{"(*Timeval).Unix", Method, 0, ""},
+		{"(Errno).Error", Method, 0, ""},
+		{"(Errno).Is", Method, 13, ""},
+		{"(Errno).Temporary", Method, 0, ""},
+		{"(Errno).Timeout", Method, 0, ""},
+		{"(Signal).Signal", Method, 0, ""},
+		{"(Signal).String", Method, 0, ""},
+		{"(Token).Close", Method, 0, ""},
+		{"(Token).GetTokenPrimaryGroup", Method, 0, ""},
+		{"(Token).GetTokenUser", Method, 0, ""},
+		{"(Token).GetUserProfileDirectory", Method, 0, ""},
+		{"(WaitStatus).Continued", Method, 0, ""},
+		{"(WaitStatus).CoreDump", Method, 0, ""},
+		{"(WaitStatus).ExitStatus", Method, 0, ""},
+		{"(WaitStatus).Exited", Method, 0, ""},
+		{"(WaitStatus).Signal", Method, 0, ""},
+		{"(WaitStatus).Signaled", Method, 0, ""},
+		{"(WaitStatus).StopSignal", Method, 0, ""},
+		{"(WaitStatus).Stopped", Method, 0, ""},
+		{"(WaitStatus).TrapCause", Method, 0, ""},
+		{"AF_ALG", Const, 0, ""},
+		{"AF_APPLETALK", Const, 0, ""},
+		{"AF_ARP", Const, 0, ""},
+		{"AF_ASH", Const, 0, ""},
+		{"AF_ATM", Const, 0, ""},
+		{"AF_ATMPVC", Const, 0, ""},
+		{"AF_ATMSVC", Const, 0, ""},
+		{"AF_AX25", Const, 0, ""},
+		{"AF_BLUETOOTH", Const, 0, ""},
+		{"AF_BRIDGE", Const, 0, ""},
+		{"AF_CAIF", Const, 0, ""},
+		{"AF_CAN", Const, 0, ""},
+		{"AF_CCITT", Const, 0, ""},
+		{"AF_CHAOS", Const, 0, ""},
+		{"AF_CNT", Const, 0, ""},
+		{"AF_COIP", Const, 0, ""},
+		{"AF_DATAKIT", Const, 0, ""},
+		{"AF_DECnet", Const, 0, ""},
+		{"AF_DLI", Const, 0, ""},
+		{"AF_E164", Const, 0, ""},
+		{"AF_ECMA", Const, 0, ""},
+		{"AF_ECONET", Const, 0, ""},
+		{"AF_ENCAP", Const, 1, ""},
+		{"AF_FILE", Const, 0, ""},
+		{"AF_HYLINK", Const, 0, ""},
+		{"AF_IEEE80211", Const, 0, ""},
+		{"AF_IEEE802154", Const, 0, ""},
+		{"AF_IMPLINK", Const, 0, ""},
+		{"AF_INET", Const, 0, ""},
+		{"AF_INET6", Const, 0, ""},
+		{"AF_INET6_SDP", Const, 3, ""},
+		{"AF_INET_SDP", Const, 3, ""},
+		{"AF_IPX", Const, 0, ""},
+		{"AF_IRDA", Const, 0, ""},
+		{"AF_ISDN", Const, 0, ""},
+		{"AF_ISO", Const, 0, ""},
+		{"AF_IUCV", Const, 0, ""},
+		{"AF_KEY", Const, 0, ""},
+		{"AF_LAT", Const, 0, ""},
+		{"AF_LINK", Const, 0, ""},
+		{"AF_LLC", Const, 0, ""},
+		{"AF_LOCAL", Const, 0, ""},
+		{"AF_MAX", Const, 0, ""},
+		{"AF_MPLS", Const, 1, ""},
+		{"AF_NATM", Const, 0, ""},
+		{"AF_NDRV", Const, 0, ""},
+		{"AF_NETBEUI", Const, 0, ""},
+		{"AF_NETBIOS", Const, 0, ""},
+		{"AF_NETGRAPH", Const, 0, ""},
+		{"AF_NETLINK", Const, 0, ""},
+		{"AF_NETROM", Const, 0, ""},
+		{"AF_NS", Const, 0, ""},
+		{"AF_OROUTE", Const, 1, ""},
+		{"AF_OSI", Const, 0, ""},
+		{"AF_PACKET", Const, 0, ""},
+		{"AF_PHONET", Const, 0, ""},
+		{"AF_PPP", Const, 0, ""},
+		{"AF_PPPOX", Const, 0, ""},
+		{"AF_PUP", Const, 0, ""},
+		{"AF_RDS", Const, 0, ""},
+		{"AF_RESERVED_36", Const, 0, ""},
+		{"AF_ROSE", Const, 0, ""},
+		{"AF_ROUTE", Const, 0, ""},
+		{"AF_RXRPC", Const, 0, ""},
+		{"AF_SCLUSTER", Const, 0, ""},
+		{"AF_SECURITY", Const, 0, ""},
+		{"AF_SIP", Const, 0, ""},
+		{"AF_SLOW", Const, 0, ""},
+		{"AF_SNA", Const, 0, ""},
+		{"AF_SYSTEM", Const, 0, ""},
+		{"AF_TIPC", Const, 0, ""},
+		{"AF_UNIX", Const, 0, ""},
+		{"AF_UNSPEC", Const, 0, ""},
+		{"AF_UTUN", Const, 16, ""},
+		{"AF_VENDOR00", Const, 0, ""},
+		{"AF_VENDOR01", Const, 0, ""},
+		{"AF_VENDOR02", Const, 0, ""},
+		{"AF_VENDOR03", Const, 0, ""},
+		{"AF_VENDOR04", Const, 0, ""},
+		{"AF_VENDOR05", Const, 0, ""},
+		{"AF_VENDOR06", Const, 0, ""},
+		{"AF_VENDOR07", Const, 0, ""},
+		{"AF_VENDOR08", Const, 0, ""},
+		{"AF_VENDOR09", Const, 0, ""},
+		{"AF_VENDOR10", Const, 0, ""},
+		{"AF_VENDOR11", Const, 0, ""},
+		{"AF_VENDOR12", Const, 0, ""},
+		{"AF_VENDOR13", Const, 0, ""},
+		{"AF_VENDOR14", Const, 0, ""},
+		{"AF_VENDOR15", Const, 0, ""},
+		{"AF_VENDOR16", Const, 0, ""},
+		{"AF_VENDOR17", Const, 0, ""},
+		{"AF_VENDOR18", Const, 0, ""},
+		{"AF_VENDOR19", Const, 0, ""},
+		{"AF_VENDOR20", Const, 0, ""},
+		{"AF_VENDOR21", Const, 0, ""},
+		{"AF_VENDOR22", Const, 0, ""},
+		{"AF_VENDOR23", Const, 0, ""},
+		{"AF_VENDOR24", Const, 0, ""},
+		{"AF_VENDOR25", Const, 0, ""},
+		{"AF_VENDOR26", Const, 0, ""},
+		{"AF_VENDOR27", Const, 0, ""},
+		{"AF_VENDOR28", Const, 0, ""},
+		{"AF_VENDOR29", Const, 0, ""},
+		{"AF_VENDOR30", Const, 0, ""},
+		{"AF_VENDOR31", Const, 0, ""},
+		{"AF_VENDOR32", Const, 0, ""},
+		{"AF_VENDOR33", Const, 0, ""},
+		{"AF_VENDOR34", Const, 0, ""},
+		{"AF_VENDOR35", Const, 0, ""},
+		{"AF_VENDOR36", Const, 0, ""},
+		{"AF_VENDOR37", Const, 0, ""},
+		{"AF_VENDOR38", Const, 0, ""},
+		{"AF_VENDOR39", Const, 0, ""},
+		{"AF_VENDOR40", Const, 0, ""},
+		{"AF_VENDOR41", Const, 0, ""},
+		{"AF_VENDOR42", Const, 0, ""},
+		{"AF_VENDOR43", Const, 0, ""},
+		{"AF_VENDOR44", Const, 0, ""},
+		{"AF_VENDOR45", Const, 0, ""},
+		{"AF_VENDOR46", Const, 0, ""},
+		{"AF_VENDOR47", Const, 0, ""},
+		{"AF_WANPIPE", Const, 0, ""},
+		{"AF_X25", Const, 0, ""},
+		{"AI_CANONNAME", Const, 1, ""},
+		{"AI_NUMERICHOST", Const, 1, ""},
+		{"AI_PASSIVE", Const, 1, ""},
+		{"APPLICATION_ERROR", Const, 0, ""},
+		{"ARPHRD_ADAPT", Const, 0, ""},
+		{"ARPHRD_APPLETLK", Const, 0, ""},
+		{"ARPHRD_ARCNET", Const, 0, ""},
+		{"ARPHRD_ASH", Const, 0, ""},
+		{"ARPHRD_ATM", Const, 0, ""},
+		{"ARPHRD_AX25", Const, 0, ""},
+		{"ARPHRD_BIF", Const, 0, ""},
+		{"ARPHRD_CHAOS", Const, 0, ""},
+		{"ARPHRD_CISCO", Const, 0, ""},
+		{"ARPHRD_CSLIP", Const, 0, ""},
+		{"ARPHRD_CSLIP6", Const, 0, ""},
+		{"ARPHRD_DDCMP", Const, 0, ""},
+		{"ARPHRD_DLCI", Const, 0, ""},
+		{"ARPHRD_ECONET", Const, 0, ""},
+		{"ARPHRD_EETHER", Const, 0, ""},
+		{"ARPHRD_ETHER", Const, 0, ""},
+		{"ARPHRD_EUI64", Const, 0, ""},
+		{"ARPHRD_FCAL", Const, 0, ""},
+		{"ARPHRD_FCFABRIC", Const, 0, ""},
+		{"ARPHRD_FCPL", Const, 0, ""},
+		{"ARPHRD_FCPP", Const, 0, ""},
+		{"ARPHRD_FDDI", Const, 0, ""},
+		{"ARPHRD_FRAD", Const, 0, ""},
+		{"ARPHRD_FRELAY", Const, 1, ""},
+		{"ARPHRD_HDLC", Const, 0, ""},
+		{"ARPHRD_HIPPI", Const, 0, ""},
+		{"ARPHRD_HWX25", Const, 0, ""},
+		{"ARPHRD_IEEE1394", Const, 0, ""},
+		{"ARPHRD_IEEE802", Const, 0, ""},
+		{"ARPHRD_IEEE80211", Const, 0, ""},
+		{"ARPHRD_IEEE80211_PRISM", Const, 0, ""},
+		{"ARPHRD_IEEE80211_RADIOTAP", Const, 0, ""},
+		{"ARPHRD_IEEE802154", Const, 0, ""},
+		{"ARPHRD_IEEE802154_PHY", Const, 0, ""},
+		{"ARPHRD_IEEE802_TR", Const, 0, ""},
+		{"ARPHRD_INFINIBAND", Const, 0, ""},
+		{"ARPHRD_IPDDP", Const, 0, ""},
+		{"ARPHRD_IPGRE", Const, 0, ""},
+		{"ARPHRD_IRDA", Const, 0, ""},
+		{"ARPHRD_LAPB", Const, 0, ""},
+		{"ARPHRD_LOCALTLK", Const, 0, ""},
+		{"ARPHRD_LOOPBACK", Const, 0, ""},
+		{"ARPHRD_METRICOM", Const, 0, ""},
+		{"ARPHRD_NETROM", Const, 0, ""},
+		{"ARPHRD_NONE", Const, 0, ""},
+		{"ARPHRD_PIMREG", Const, 0, ""},
+		{"ARPHRD_PPP", Const, 0, ""},
+		{"ARPHRD_PRONET", Const, 0, ""},
+		{"ARPHRD_RAWHDLC", Const, 0, ""},
+		{"ARPHRD_ROSE", Const, 0, ""},
+		{"ARPHRD_RSRVD", Const, 0, ""},
+		{"ARPHRD_SIT", Const, 0, ""},
+		{"ARPHRD_SKIP", Const, 0, ""},
+		{"ARPHRD_SLIP", Const, 0, ""},
+		{"ARPHRD_SLIP6", Const, 0, ""},
+		{"ARPHRD_STRIP", Const, 1, ""},
+		{"ARPHRD_TUNNEL", Const, 0, ""},
+		{"ARPHRD_TUNNEL6", Const, 0, ""},
+		{"ARPHRD_VOID", Const, 0, ""},
+		{"ARPHRD_X25", Const, 0, ""},
+		{"AUTHTYPE_CLIENT", Const, 0, ""},
+		{"AUTHTYPE_SERVER", Const, 0, ""},
+		{"Accept", Func, 0, "func(fd int) (nfd int, sa Sockaddr, err error)"},
+		{"Accept4", Func, 1, "func(fd int, flags int) (nfd int, sa Sockaddr, err error)"},
+		{"AcceptEx", Func, 0, ""},
+		{"Access", Func, 0, "func(path string, mode uint32) (err error)"},
+		{"Acct", Func, 0, "func(path string) (err error)"},
+		{"AddrinfoW", Type, 1, ""},
+		{"AddrinfoW.Addr", Field, 1, ""},
+		{"AddrinfoW.Addrlen", Field, 1, ""},
+		{"AddrinfoW.Canonname", Field, 1, ""},
+		{"AddrinfoW.Family", Field, 1, ""},
+		{"AddrinfoW.Flags", Field, 1, ""},
+		{"AddrinfoW.Next", Field, 1, ""},
+		{"AddrinfoW.Protocol", Field, 1, ""},
+		{"AddrinfoW.Socktype", Field, 1, ""},
+		{"Adjtime", Func, 0, ""},
+		{"Adjtimex", Func, 0, "func(buf *Timex) (state int, err error)"},
+		{"AllThreadsSyscall", Func, 16, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"AllThreadsSyscall6", Func, 16, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"AttachLsf", Func, 0, "func(fd int, i []SockFilter) error"},
+		{"B0", Const, 0, ""},
+		{"B1000000", Const, 0, ""},
+		{"B110", Const, 0, ""},
+		{"B115200", Const, 0, ""},
+		{"B1152000", Const, 0, ""},
+		{"B1200", Const, 0, ""},
+		{"B134", Const, 0, ""},
+		{"B14400", Const, 1, ""},
+		{"B150", Const, 0, ""},
+		{"B1500000", Const, 0, ""},
+		{"B1800", Const, 0, ""},
+		{"B19200", Const, 0, ""},
+		{"B200", Const, 0, ""},
+		{"B2000000", Const, 0, ""},
+		{"B230400", Const, 0, ""},
+		{"B2400", Const, 0, ""},
+		{"B2500000", Const, 0, ""},
+		{"B28800", Const, 1, ""},
+		{"B300", Const, 0, ""},
+		{"B3000000", Const, 0, ""},
+		{"B3500000", Const, 0, ""},
+		{"B38400", Const, 0, ""},
+		{"B4000000", Const, 0, ""},
+		{"B460800", Const, 0, ""},
+		{"B4800", Const, 0, ""},
+		{"B50", Const, 0, ""},
+		{"B500000", Const, 0, ""},
+		{"B57600", Const, 0, ""},
+		{"B576000", Const, 0, ""},
+		{"B600", Const, 0, ""},
+		{"B7200", Const, 1, ""},
+		{"B75", Const, 0, ""},
+		{"B76800", Const, 1, ""},
+		{"B921600", Const, 0, ""},
+		{"B9600", Const, 0, ""},
+		{"BASE_PROTOCOL", Const, 2, ""},
+		{"BIOCFEEDBACK", Const, 0, ""},
+		{"BIOCFLUSH", Const, 0, ""},
+		{"BIOCGBLEN", Const, 0, ""},
+		{"BIOCGDIRECTION", Const, 0, ""},
+		{"BIOCGDIRFILT", Const, 1, ""},
+		{"BIOCGDLT", Const, 0, ""},
+		{"BIOCGDLTLIST", Const, 0, ""},
+		{"BIOCGETBUFMODE", Const, 0, ""},
+		{"BIOCGETIF", Const, 0, ""},
+		{"BIOCGETZMAX", Const, 0, ""},
+		{"BIOCGFEEDBACK", Const, 1, ""},
+		{"BIOCGFILDROP", Const, 1, ""},
+		{"BIOCGHDRCMPLT", Const, 0, ""},
+		{"BIOCGRSIG", Const, 0, ""},
+		{"BIOCGRTIMEOUT", Const, 0, ""},
+		{"BIOCGSEESENT", Const, 0, ""},
+		{"BIOCGSTATS", Const, 0, ""},
+		{"BIOCGSTATSOLD", Const, 1, ""},
+		{"BIOCGTSTAMP", Const, 1, ""},
+		{"BIOCIMMEDIATE", Const, 0, ""},
+		{"BIOCLOCK", Const, 0, ""},
+		{"BIOCPROMISC", Const, 0, ""},
+		{"BIOCROTZBUF", Const, 0, ""},
+		{"BIOCSBLEN", Const, 0, ""},
+		{"BIOCSDIRECTION", Const, 0, ""},
+		{"BIOCSDIRFILT", Const, 1, ""},
+		{"BIOCSDLT", Const, 0, ""},
+		{"BIOCSETBUFMODE", Const, 0, ""},
+		{"BIOCSETF", Const, 0, ""},
+		{"BIOCSETFNR", Const, 0, ""},
+		{"BIOCSETIF", Const, 0, ""},
+		{"BIOCSETWF", Const, 0, ""},
+		{"BIOCSETZBUF", Const, 0, ""},
+		{"BIOCSFEEDBACK", Const, 1, ""},
+		{"BIOCSFILDROP", Const, 1, ""},
+		{"BIOCSHDRCMPLT", Const, 0, ""},
+		{"BIOCSRSIG", Const, 0, ""},
+		{"BIOCSRTIMEOUT", Const, 0, ""},
+		{"BIOCSSEESENT", Const, 0, ""},
+		{"BIOCSTCPF", Const, 1, ""},
+		{"BIOCSTSTAMP", Const, 1, ""},
+		{"BIOCSUDPF", Const, 1, ""},
+		{"BIOCVERSION", Const, 0, ""},
+		{"BPF_A", Const, 0, ""},
+		{"BPF_ABS", Const, 0, ""},
+		{"BPF_ADD", Const, 0, ""},
+		{"BPF_ALIGNMENT", Const, 0, ""},
+		{"BPF_ALIGNMENT32", Const, 1, ""},
+		{"BPF_ALU", Const, 0, ""},
+		{"BPF_AND", Const, 0, ""},
+		{"BPF_B", Const, 0, ""},
+		{"BPF_BUFMODE_BUFFER", Const, 0, ""},
+		{"BPF_BUFMODE_ZBUF", Const, 0, ""},
+		{"BPF_DFLTBUFSIZE", Const, 1, ""},
+		{"BPF_DIRECTION_IN", Const, 1, ""},
+		{"BPF_DIRECTION_OUT", Const, 1, ""},
+		{"BPF_DIV", Const, 0, ""},
+		{"BPF_H", Const, 0, ""},
+		{"BPF_IMM", Const, 0, ""},
+		{"BPF_IND", Const, 0, ""},
+		{"BPF_JA", Const, 0, ""},
+		{"BPF_JEQ", Const, 0, ""},
+		{"BPF_JGE", Const, 0, ""},
+		{"BPF_JGT", Const, 0, ""},
+		{"BPF_JMP", Const, 0, ""},
+		{"BPF_JSET", Const, 0, ""},
+		{"BPF_K", Const, 0, ""},
+		{"BPF_LD", Const, 0, ""},
+		{"BPF_LDX", Const, 0, ""},
+		{"BPF_LEN", Const, 0, ""},
+		{"BPF_LSH", Const, 0, ""},
+		{"BPF_MAJOR_VERSION", Const, 0, ""},
+		{"BPF_MAXBUFSIZE", Const, 0, ""},
+		{"BPF_MAXINSNS", Const, 0, ""},
+		{"BPF_MEM", Const, 0, ""},
+		{"BPF_MEMWORDS", Const, 0, ""},
+		{"BPF_MINBUFSIZE", Const, 0, ""},
+		{"BPF_MINOR_VERSION", Const, 0, ""},
+		{"BPF_MISC", Const, 0, ""},
+		{"BPF_MSH", Const, 0, ""},
+		{"BPF_MUL", Const, 0, ""},
+		{"BPF_NEG", Const, 0, ""},
+		{"BPF_OR", Const, 0, ""},
+		{"BPF_RELEASE", Const, 0, ""},
+		{"BPF_RET", Const, 0, ""},
+		{"BPF_RSH", Const, 0, ""},
+		{"BPF_ST", Const, 0, ""},
+		{"BPF_STX", Const, 0, ""},
+		{"BPF_SUB", Const, 0, ""},
+		{"BPF_TAX", Const, 0, ""},
+		{"BPF_TXA", Const, 0, ""},
+		{"BPF_T_BINTIME", Const, 1, ""},
+		{"BPF_T_BINTIME_FAST", Const, 1, ""},
+		{"BPF_T_BINTIME_MONOTONIC", Const, 1, ""},
+		{"BPF_T_BINTIME_MONOTONIC_FAST", Const, 1, ""},
+		{"BPF_T_FAST", Const, 1, ""},
+		{"BPF_T_FLAG_MASK", Const, 1, ""},
+		{"BPF_T_FORMAT_MASK", Const, 1, ""},
+		{"BPF_T_MICROTIME", Const, 1, ""},
+		{"BPF_T_MICROTIME_FAST", Const, 1, ""},
+		{"BPF_T_MICROTIME_MONOTONIC", Const, 1, ""},
+		{"BPF_T_MICROTIME_MONOTONIC_FAST", Const, 1, ""},
+		{"BPF_T_MONOTONIC", Const, 1, ""},
+		{"BPF_T_MONOTONIC_FAST", Const, 1, ""},
+		{"BPF_T_NANOTIME", Const, 1, ""},
+		{"BPF_T_NANOTIME_FAST", Const, 1, ""},
+		{"BPF_T_NANOTIME_MONOTONIC", Const, 1, ""},
+		{"BPF_T_NANOTIME_MONOTONIC_FAST", Const, 1, ""},
+		{"BPF_T_NONE", Const, 1, ""},
+		{"BPF_T_NORMAL", Const, 1, ""},
+		{"BPF_W", Const, 0, ""},
+		{"BPF_X", Const, 0, ""},
+		{"BRKINT", Const, 0, ""},
+		{"Bind", Func, 0, "func(fd int, sa Sockaddr) (err error)"},
+		{"BindToDevice", Func, 0, "func(fd int, device string) (err error)"},
+		{"BpfBuflen", Func, 0, ""},
+		{"BpfDatalink", Func, 0, ""},
+		{"BpfHdr", Type, 0, ""},
+		{"BpfHdr.Caplen", Field, 0, ""},
+		{"BpfHdr.Datalen", Field, 0, ""},
+		{"BpfHdr.Hdrlen", Field, 0, ""},
+		{"BpfHdr.Pad_cgo_0", Field, 0, ""},
+		{"BpfHdr.Tstamp", Field, 0, ""},
+		{"BpfHeadercmpl", Func, 0, ""},
+		{"BpfInsn", Type, 0, ""},
+		{"BpfInsn.Code", Field, 0, ""},
+		{"BpfInsn.Jf", Field, 0, ""},
+		{"BpfInsn.Jt", Field, 0, ""},
+		{"BpfInsn.K", Field, 0, ""},
+		{"BpfInterface", Func, 0, ""},
+		{"BpfJump", Func, 0, ""},
+		{"BpfProgram", Type, 0, ""},
+		{"BpfProgram.Insns", Field, 0, ""},
+		{"BpfProgram.Len", Field, 0, ""},
+		{"BpfProgram.Pad_cgo_0", Field, 0, ""},
+		{"BpfStat", Type, 0, ""},
+		{"BpfStat.Capt", Field, 2, ""},
+		{"BpfStat.Drop", Field, 0, ""},
+		{"BpfStat.Padding", Field, 2, ""},
+		{"BpfStat.Recv", Field, 0, ""},
+		{"BpfStats", Func, 0, ""},
+		{"BpfStmt", Func, 0, ""},
+		{"BpfTimeout", Func, 0, ""},
+		{"BpfTimeval", Type, 2, ""},
+		{"BpfTimeval.Sec", Field, 2, ""},
+		{"BpfTimeval.Usec", Field, 2, ""},
+		{"BpfVersion", Type, 0, ""},
+		{"BpfVersion.Major", Field, 0, ""},
+		{"BpfVersion.Minor", Field, 0, ""},
+		{"BpfZbuf", Type, 0, ""},
+		{"BpfZbuf.Bufa", Field, 0, ""},
+		{"BpfZbuf.Bufb", Field, 0, ""},
+		{"BpfZbuf.Buflen", Field, 0, ""},
+		{"BpfZbufHeader", Type, 0, ""},
+		{"BpfZbufHeader.Kernel_gen", Field, 0, ""},
+		{"BpfZbufHeader.Kernel_len", Field, 0, ""},
+		{"BpfZbufHeader.User_gen", Field, 0, ""},
+		{"BpfZbufHeader.X_bzh_pad", Field, 0, ""},
+		{"ByHandleFileInformation", Type, 0, ""},
+		{"ByHandleFileInformation.CreationTime", Field, 0, ""},
+		{"ByHandleFileInformation.FileAttributes", Field, 0, ""},
+		{"ByHandleFileInformation.FileIndexHigh", Field, 0, ""},
+		{"ByHandleFileInformation.FileIndexLow", Field, 0, ""},
+		{"ByHandleFileInformation.FileSizeHigh", Field, 0, ""},
+		{"ByHandleFileInformation.FileSizeLow", Field, 0, ""},
+		{"ByHandleFileInformation.LastAccessTime", Field, 0, ""},
+		{"ByHandleFileInformation.LastWriteTime", Field, 0, ""},
+		{"ByHandleFileInformation.NumberOfLinks", Field, 0, ""},
+		{"ByHandleFileInformation.VolumeSerialNumber", Field, 0, ""},
+		{"BytePtrFromString", Func, 1, "func(s string) (*byte, error)"},
+		{"ByteSliceFromString", Func, 1, "func(s string) ([]byte, error)"},
+		{"CCR0_FLUSH", Const, 1, ""},
+		{"CERT_CHAIN_POLICY_AUTHENTICODE", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_AUTHENTICODE_TS", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_BASE", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_BASIC_CONSTRAINTS", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_EV", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_MICROSOFT_ROOT", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_NT_AUTH", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_SSL", Const, 0, ""},
+		{"CERT_E_CN_NO_MATCH", Const, 0, ""},
+		{"CERT_E_EXPIRED", Const, 0, ""},
+		{"CERT_E_PURPOSE", Const, 0, ""},
+		{"CERT_E_ROLE", Const, 0, ""},
+		{"CERT_E_UNTRUSTEDROOT", Const, 0, ""},
+		{"CERT_STORE_ADD_ALWAYS", Const, 0, ""},
+		{"CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG", Const, 0, ""},
+		{"CERT_STORE_PROV_MEMORY", Const, 0, ""},
+		{"CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT", Const, 0, ""},
+		{"CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT", Const, 0, ""},
+		{"CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT", Const, 0, ""},
+		{"CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT", Const, 0, ""},
+		{"CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT", Const, 0, ""},
+		{"CERT_TRUST_INVALID_BASIC_CONSTRAINTS", Const, 0, ""},
+		{"CERT_TRUST_INVALID_EXTENSION", Const, 0, ""},
+		{"CERT_TRUST_INVALID_NAME_CONSTRAINTS", Const, 0, ""},
+		{"CERT_TRUST_INVALID_POLICY_CONSTRAINTS", Const, 0, ""},
+		{"CERT_TRUST_IS_CYCLIC", Const, 0, ""},
+		{"CERT_TRUST_IS_EXPLICIT_DISTRUST", Const, 0, ""},
+		{"CERT_TRUST_IS_NOT_SIGNATURE_VALID", Const, 0, ""},
+		{"CERT_TRUST_IS_NOT_TIME_VALID", Const, 0, ""},
+		{"CERT_TRUST_IS_NOT_VALID_FOR_USAGE", Const, 0, ""},
+		{"CERT_TRUST_IS_OFFLINE_REVOCATION", Const, 0, ""},
+		{"CERT_TRUST_IS_REVOKED", Const, 0, ""},
+		{"CERT_TRUST_IS_UNTRUSTED_ROOT", Const, 0, ""},
+		{"CERT_TRUST_NO_ERROR", Const, 0, ""},
+		{"CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY", Const, 0, ""},
+		{"CERT_TRUST_REVOCATION_STATUS_UNKNOWN", Const, 0, ""},
+		{"CFLUSH", Const, 1, ""},
+		{"CLOCAL", Const, 0, ""},
+		{"CLONE_CHILD_CLEARTID", Const, 2, ""},
+		{"CLONE_CHILD_SETTID", Const, 2, ""},
+		{"CLONE_CLEAR_SIGHAND", Const, 20, ""},
+		{"CLONE_CSIGNAL", Const, 3, ""},
+		{"CLONE_DETACHED", Const, 2, ""},
+		{"CLONE_FILES", Const, 2, ""},
+		{"CLONE_FS", Const, 2, ""},
+		{"CLONE_INTO_CGROUP", Const, 20, ""},
+		{"CLONE_IO", Const, 2, ""},
+		{"CLONE_NEWCGROUP", Const, 20, ""},
+		{"CLONE_NEWIPC", Const, 2, ""},
+		{"CLONE_NEWNET", Const, 2, ""},
+		{"CLONE_NEWNS", Const, 2, ""},
+		{"CLONE_NEWPID", Const, 2, ""},
+		{"CLONE_NEWTIME", Const, 20, ""},
+		{"CLONE_NEWUSER", Const, 2, ""},
+		{"CLONE_NEWUTS", Const, 2, ""},
+		{"CLONE_PARENT", Const, 2, ""},
+		{"CLONE_PARENT_SETTID", Const, 2, ""},
+		{"CLONE_PID", Const, 3, ""},
+		{"CLONE_PIDFD", Const, 20, ""},
+		{"CLONE_PTRACE", Const, 2, ""},
+		{"CLONE_SETTLS", Const, 2, ""},
+		{"CLONE_SIGHAND", Const, 2, ""},
+		{"CLONE_SYSVSEM", Const, 2, ""},
+		{"CLONE_THREAD", Const, 2, ""},
+		{"CLONE_UNTRACED", Const, 2, ""},
+		{"CLONE_VFORK", Const, 2, ""},
+		{"CLONE_VM", Const, 2, ""},
+		{"CPUID_CFLUSH", Const, 1, ""},
+		{"CREAD", Const, 0, ""},
+		{"CREATE_ALWAYS", Const, 0, ""},
+		{"CREATE_NEW", Const, 0, ""},
+		{"CREATE_NEW_PROCESS_GROUP", Const, 1, ""},
+		{"CREATE_UNICODE_ENVIRONMENT", Const, 0, ""},
+		{"CRYPT_DEFAULT_CONTAINER_OPTIONAL", Const, 0, ""},
+		{"CRYPT_DELETEKEYSET", Const, 0, ""},
+		{"CRYPT_MACHINE_KEYSET", Const, 0, ""},
+		{"CRYPT_NEWKEYSET", Const, 0, ""},
+		{"CRYPT_SILENT", Const, 0, ""},
+		{"CRYPT_VERIFYCONTEXT", Const, 0, ""},
+		{"CS5", Const, 0, ""},
+		{"CS6", Const, 0, ""},
+		{"CS7", Const, 0, ""},
+		{"CS8", Const, 0, ""},
+		{"CSIZE", Const, 0, ""},
+		{"CSTART", Const, 1, ""},
+		{"CSTATUS", Const, 1, ""},
+		{"CSTOP", Const, 1, ""},
+		{"CSTOPB", Const, 0, ""},
+		{"CSUSP", Const, 1, ""},
+		{"CTL_MAXNAME", Const, 0, ""},
+		{"CTL_NET", Const, 0, ""},
+		{"CTL_QUERY", Const, 1, ""},
+		{"CTRL_BREAK_EVENT", Const, 1, ""},
+		{"CTRL_CLOSE_EVENT", Const, 14, ""},
+		{"CTRL_C_EVENT", Const, 1, ""},
+		{"CTRL_LOGOFF_EVENT", Const, 14, ""},
+		{"CTRL_SHUTDOWN_EVENT", Const, 14, ""},
+		{"CancelIo", Func, 0, ""},
+		{"CancelIoEx", Func, 1, ""},
+		{"CertAddCertificateContextToStore", Func, 0, ""},
+		{"CertChainContext", Type, 0, ""},
+		{"CertChainContext.ChainCount", Field, 0, ""},
+		{"CertChainContext.Chains", Field, 0, ""},
+		{"CertChainContext.HasRevocationFreshnessTime", Field, 0, ""},
+		{"CertChainContext.LowerQualityChainCount", Field, 0, ""},
+		{"CertChainContext.LowerQualityChains", Field, 0, ""},
+		{"CertChainContext.RevocationFreshnessTime", Field, 0, ""},
+		{"CertChainContext.Size", Field, 0, ""},
+		{"CertChainContext.TrustStatus", Field, 0, ""},
+		{"CertChainElement", Type, 0, ""},
+		{"CertChainElement.ApplicationUsage", Field, 0, ""},
+		{"CertChainElement.CertContext", Field, 0, ""},
+		{"CertChainElement.ExtendedErrorInfo", Field, 0, ""},
+		{"CertChainElement.IssuanceUsage", Field, 0, ""},
+		{"CertChainElement.RevocationInfo", Field, 0, ""},
+		{"CertChainElement.Size", Field, 0, ""},
+		{"CertChainElement.TrustStatus", Field, 0, ""},
+		{"CertChainPara", Type, 0, ""},
+		{"CertChainPara.CacheResync", Field, 0, ""},
+		{"CertChainPara.CheckRevocationFreshnessTime", Field, 0, ""},
+		{"CertChainPara.RequestedUsage", Field, 0, ""},
+		{"CertChainPara.RequstedIssuancePolicy", Field, 0, ""},
+		{"CertChainPara.RevocationFreshnessTime", Field, 0, ""},
+		{"CertChainPara.Size", Field, 0, ""},
+		{"CertChainPara.URLRetrievalTimeout", Field, 0, ""},
+		{"CertChainPolicyPara", Type, 0, ""},
+		{"CertChainPolicyPara.ExtraPolicyPara", Field, 0, ""},
+		{"CertChainPolicyPara.Flags", Field, 0, ""},
+		{"CertChainPolicyPara.Size", Field, 0, ""},
+		{"CertChainPolicyStatus", Type, 0, ""},
+		{"CertChainPolicyStatus.ChainIndex", Field, 0, ""},
+		{"CertChainPolicyStatus.ElementIndex", Field, 0, ""},
+		{"CertChainPolicyStatus.Error", Field, 0, ""},
+		{"CertChainPolicyStatus.ExtraPolicyStatus", Field, 0, ""},
+		{"CertChainPolicyStatus.Size", Field, 0, ""},
+		{"CertCloseStore", Func, 0, ""},
+		{"CertContext", Type, 0, ""},
+		{"CertContext.CertInfo", Field, 0, ""},
+		{"CertContext.EncodedCert", Field, 0, ""},
+		{"CertContext.EncodingType", Field, 0, ""},
+		{"CertContext.Length", Field, 0, ""},
+		{"CertContext.Store", Field, 0, ""},
+		{"CertCreateCertificateContext", Func, 0, ""},
+		{"CertEnhKeyUsage", Type, 0, ""},
+		{"CertEnhKeyUsage.Length", Field, 0, ""},
+		{"CertEnhKeyUsage.UsageIdentifiers", Field, 0, ""},
+		{"CertEnumCertificatesInStore", Func, 0, ""},
+		{"CertFreeCertificateChain", Func, 0, ""},
+		{"CertFreeCertificateContext", Func, 0, ""},
+		{"CertGetCertificateChain", Func, 0, ""},
+		{"CertInfo", Type, 11, ""},
+		{"CertOpenStore", Func, 0, ""},
+		{"CertOpenSystemStore", Func, 0, ""},
+		{"CertRevocationCrlInfo", Type, 11, ""},
+		{"CertRevocationInfo", Type, 0, ""},
+		{"CertRevocationInfo.CrlInfo", Field, 0, ""},
+		{"CertRevocationInfo.FreshnessTime", Field, 0, ""},
+		{"CertRevocationInfo.HasFreshnessTime", Field, 0, ""},
+		{"CertRevocationInfo.OidSpecificInfo", Field, 0, ""},
+		{"CertRevocationInfo.RevocationOid", Field, 0, ""},
+		{"CertRevocationInfo.RevocationResult", Field, 0, ""},
+		{"CertRevocationInfo.Size", Field, 0, ""},
+		{"CertSimpleChain", Type, 0, ""},
+		{"CertSimpleChain.Elements", Field, 0, ""},
+		{"CertSimpleChain.HasRevocationFreshnessTime", Field, 0, ""},
+		{"CertSimpleChain.NumElements", Field, 0, ""},
+		{"CertSimpleChain.RevocationFreshnessTime", Field, 0, ""},
+		{"CertSimpleChain.Size", Field, 0, ""},
+		{"CertSimpleChain.TrustListInfo", Field, 0, ""},
+		{"CertSimpleChain.TrustStatus", Field, 0, ""},
+		{"CertTrustListInfo", Type, 11, ""},
+		{"CertTrustStatus", Type, 0, ""},
+		{"CertTrustStatus.ErrorStatus", Field, 0, ""},
+		{"CertTrustStatus.InfoStatus", Field, 0, ""},
+		{"CertUsageMatch", Type, 0, ""},
+		{"CertUsageMatch.Type", Field, 0, ""},
+		{"CertUsageMatch.Usage", Field, 0, ""},
+		{"CertVerifyCertificateChainPolicy", Func, 0, ""},
+		{"Chdir", Func, 0, "func(path string) (err error)"},
+		{"CheckBpfVersion", Func, 0, ""},
+		{"Chflags", Func, 0, ""},
+		{"Chmod", Func, 0, "func(path string, mode uint32) (err error)"},
+		{"Chown", Func, 0, "func(path string, uid int, gid int) (err error)"},
+		{"Chroot", Func, 0, "func(path string) (err error)"},
+		{"Clearenv", Func, 0, "func()"},
+		{"Close", Func, 0, "func(fd int) (err error)"},
+		{"CloseHandle", Func, 0, ""},
+		{"CloseOnExec", Func, 0, "func(fd int)"},
+		{"Closesocket", Func, 0, ""},
+		{"CmsgLen", Func, 0, "func(datalen int) int"},
+		{"CmsgSpace", Func, 0, "func(datalen int) int"},
+		{"Cmsghdr", Type, 0, ""},
+		{"Cmsghdr.Len", Field, 0, ""},
+		{"Cmsghdr.Level", Field, 0, ""},
+		{"Cmsghdr.Type", Field, 0, ""},
+		{"Cmsghdr.X__cmsg_data", Field, 0, ""},
+		{"CommandLineToArgv", Func, 0, ""},
+		{"ComputerName", Func, 0, ""},
+		{"Conn", Type, 9, ""},
+		{"Connect", Func, 0, "func(fd int, sa Sockaddr) (err error)"},
+		{"ConnectEx", Func, 1, ""},
+		{"ConvertSidToStringSid", Func, 0, ""},
+		{"ConvertStringSidToSid", Func, 0, ""},
+		{"CopySid", Func, 0, ""},
+		{"Creat", Func, 0, "func(path string, mode uint32) (fd int, err error)"},
+		{"CreateDirectory", Func, 0, ""},
+		{"CreateFile", Func, 0, ""},
+		{"CreateFileMapping", Func, 0, ""},
+		{"CreateHardLink", Func, 4, ""},
+		{"CreateIoCompletionPort", Func, 0, ""},
+		{"CreatePipe", Func, 0, ""},
+		{"CreateProcess", Func, 0, ""},
+		{"CreateProcessAsUser", Func, 10, ""},
+		{"CreateSymbolicLink", Func, 4, ""},
+		{"CreateToolhelp32Snapshot", Func, 4, ""},
+		{"Credential", Type, 0, ""},
+		{"Credential.Gid", Field, 0, ""},
+		{"Credential.Groups", Field, 0, ""},
+		{"Credential.NoSetGroups", Field, 9, ""},
+		{"Credential.Uid", Field, 0, ""},
+		{"CryptAcquireContext", Func, 0, ""},
+		{"CryptGenRandom", Func, 0, ""},
+		{"CryptReleaseContext", Func, 0, ""},
+		{"DIOCBSFLUSH", Const, 1, ""},
+		{"DIOCOSFPFLUSH", Const, 1, ""},
+		{"DLL", Type, 0, ""},
+		{"DLL.Handle", Field, 0, ""},
+		{"DLL.Name", Field, 0, ""},
+		{"DLLError", Type, 0, ""},
+		{"DLLError.Err", Field, 0, ""},
+		{"DLLError.Msg", Field, 0, ""},
+		{"DLLError.ObjName", Field, 0, ""},
+		{"DLT_A429", Const, 0, ""},
+		{"DLT_A653_ICM", Const, 0, ""},
+		{"DLT_AIRONET_HEADER", Const, 0, ""},
+		{"DLT_AOS", Const, 1, ""},
+		{"DLT_APPLE_IP_OVER_IEEE1394", Const, 0, ""},
+		{"DLT_ARCNET", Const, 0, ""},
+		{"DLT_ARCNET_LINUX", Const, 0, ""},
+		{"DLT_ATM_CLIP", Const, 0, ""},
+		{"DLT_ATM_RFC1483", Const, 0, ""},
+		{"DLT_AURORA", Const, 0, ""},
+		{"DLT_AX25", Const, 0, ""},
+		{"DLT_AX25_KISS", Const, 0, ""},
+		{"DLT_BACNET_MS_TP", Const, 0, ""},
+		{"DLT_BLUETOOTH_HCI_H4", Const, 0, ""},
+		{"DLT_BLUETOOTH_HCI_H4_WITH_PHDR", Const, 0, ""},
+		{"DLT_CAN20B", Const, 0, ""},
+		{"DLT_CAN_SOCKETCAN", Const, 1, ""},
+		{"DLT_CHAOS", Const, 0, ""},
+		{"DLT_CHDLC", Const, 0, ""},
+		{"DLT_CISCO_IOS", Const, 0, ""},
+		{"DLT_C_HDLC", Const, 0, ""},
+		{"DLT_C_HDLC_WITH_DIR", Const, 0, ""},
+		{"DLT_DBUS", Const, 1, ""},
+		{"DLT_DECT", Const, 1, ""},
+		{"DLT_DOCSIS", Const, 0, ""},
+		{"DLT_DVB_CI", Const, 1, ""},
+		{"DLT_ECONET", Const, 0, ""},
+		{"DLT_EN10MB", Const, 0, ""},
+		{"DLT_EN3MB", Const, 0, ""},
+		{"DLT_ENC", Const, 0, ""},
+		{"DLT_ERF", Const, 0, ""},
+		{"DLT_ERF_ETH", Const, 0, ""},
+		{"DLT_ERF_POS", Const, 0, ""},
+		{"DLT_FC_2", Const, 1, ""},
+		{"DLT_FC_2_WITH_FRAME_DELIMS", Const, 1, ""},
+		{"DLT_FDDI", Const, 0, ""},
+		{"DLT_FLEXRAY", Const, 0, ""},
+		{"DLT_FRELAY", Const, 0, ""},
+		{"DLT_FRELAY_WITH_DIR", Const, 0, ""},
+		{"DLT_GCOM_SERIAL", Const, 0, ""},
+		{"DLT_GCOM_T1E1", Const, 0, ""},
+		{"DLT_GPF_F", Const, 0, ""},
+		{"DLT_GPF_T", Const, 0, ""},
+		{"DLT_GPRS_LLC", Const, 0, ""},
+		{"DLT_GSMTAP_ABIS", Const, 1, ""},
+		{"DLT_GSMTAP_UM", Const, 1, ""},
+		{"DLT_HDLC", Const, 1, ""},
+		{"DLT_HHDLC", Const, 0, ""},
+		{"DLT_HIPPI", Const, 1, ""},
+		{"DLT_IBM_SN", Const, 0, ""},
+		{"DLT_IBM_SP", Const, 0, ""},
+		{"DLT_IEEE802", Const, 0, ""},
+		{"DLT_IEEE802_11", Const, 0, ""},
+		{"DLT_IEEE802_11_RADIO", Const, 0, ""},
+		{"DLT_IEEE802_11_RADIO_AVS", Const, 0, ""},
+		{"DLT_IEEE802_15_4", Const, 0, ""},
+		{"DLT_IEEE802_15_4_LINUX", Const, 0, ""},
+		{"DLT_IEEE802_15_4_NOFCS", Const, 1, ""},
+		{"DLT_IEEE802_15_4_NONASK_PHY", Const, 0, ""},
+		{"DLT_IEEE802_16_MAC_CPS", Const, 0, ""},
+		{"DLT_IEEE802_16_MAC_CPS_RADIO", Const, 0, ""},
+		{"DLT_IPFILTER", Const, 0, ""},
+		{"DLT_IPMB", Const, 0, ""},
+		{"DLT_IPMB_LINUX", Const, 0, ""},
+		{"DLT_IPNET", Const, 1, ""},
+		{"DLT_IPOIB", Const, 1, ""},
+		{"DLT_IPV4", Const, 1, ""},
+		{"DLT_IPV6", Const, 1, ""},
+		{"DLT_IP_OVER_FC", Const, 0, ""},
+		{"DLT_JUNIPER_ATM1", Const, 0, ""},
+		{"DLT_JUNIPER_ATM2", Const, 0, ""},
+		{"DLT_JUNIPER_ATM_CEMIC", Const, 1, ""},
+		{"DLT_JUNIPER_CHDLC", Const, 0, ""},
+		{"DLT_JUNIPER_ES", Const, 0, ""},
+		{"DLT_JUNIPER_ETHER", Const, 0, ""},
+		{"DLT_JUNIPER_FIBRECHANNEL", Const, 1, ""},
+		{"DLT_JUNIPER_FRELAY", Const, 0, ""},
+		{"DLT_JUNIPER_GGSN", Const, 0, ""},
+		{"DLT_JUNIPER_ISM", Const, 0, ""},
+		{"DLT_JUNIPER_MFR", Const, 0, ""},
+		{"DLT_JUNIPER_MLFR", Const, 0, ""},
+		{"DLT_JUNIPER_MLPPP", Const, 0, ""},
+		{"DLT_JUNIPER_MONITOR", Const, 0, ""},
+		{"DLT_JUNIPER_PIC_PEER", Const, 0, ""},
+		{"DLT_JUNIPER_PPP", Const, 0, ""},
+		{"DLT_JUNIPER_PPPOE", Const, 0, ""},
+		{"DLT_JUNIPER_PPPOE_ATM", Const, 0, ""},
+		{"DLT_JUNIPER_SERVICES", Const, 0, ""},
+		{"DLT_JUNIPER_SRX_E2E", Const, 1, ""},
+		{"DLT_JUNIPER_ST", Const, 0, ""},
+		{"DLT_JUNIPER_VP", Const, 0, ""},
+		{"DLT_JUNIPER_VS", Const, 1, ""},
+		{"DLT_LAPB_WITH_DIR", Const, 0, ""},
+		{"DLT_LAPD", Const, 0, ""},
+		{"DLT_LIN", Const, 0, ""},
+		{"DLT_LINUX_EVDEV", Const, 1, ""},
+		{"DLT_LINUX_IRDA", Const, 0, ""},
+		{"DLT_LINUX_LAPD", Const, 0, ""},
+		{"DLT_LINUX_PPP_WITHDIRECTION", Const, 0, ""},
+		{"DLT_LINUX_SLL", Const, 0, ""},
+		{"DLT_LOOP", Const, 0, ""},
+		{"DLT_LTALK", Const, 0, ""},
+		{"DLT_MATCHING_MAX", Const, 1, ""},
+		{"DLT_MATCHING_MIN", Const, 1, ""},
+		{"DLT_MFR", Const, 0, ""},
+		{"DLT_MOST", Const, 0, ""},
+		{"DLT_MPEG_2_TS", Const, 1, ""},
+		{"DLT_MPLS", Const, 1, ""},
+		{"DLT_MTP2", Const, 0, ""},
+		{"DLT_MTP2_WITH_PHDR", Const, 0, ""},
+		{"DLT_MTP3", Const, 0, ""},
+		{"DLT_MUX27010", Const, 1, ""},
+		{"DLT_NETANALYZER", Const, 1, ""},
+		{"DLT_NETANALYZER_TRANSPARENT", Const, 1, ""},
+		{"DLT_NFC_LLCP", Const, 1, ""},
+		{"DLT_NFLOG", Const, 1, ""},
+		{"DLT_NG40", Const, 1, ""},
+		{"DLT_NULL", Const, 0, ""},
+		{"DLT_PCI_EXP", Const, 0, ""},
+		{"DLT_PFLOG", Const, 0, ""},
+		{"DLT_PFSYNC", Const, 0, ""},
+		{"DLT_PPI", Const, 0, ""},
+		{"DLT_PPP", Const, 0, ""},
+		{"DLT_PPP_BSDOS", Const, 0, ""},
+		{"DLT_PPP_ETHER", Const, 0, ""},
+		{"DLT_PPP_PPPD", Const, 0, ""},
+		{"DLT_PPP_SERIAL", Const, 0, ""},
+		{"DLT_PPP_WITH_DIR", Const, 0, ""},
+		{"DLT_PPP_WITH_DIRECTION", Const, 0, ""},
+		{"DLT_PRISM_HEADER", Const, 0, ""},
+		{"DLT_PRONET", Const, 0, ""},
+		{"DLT_RAIF1", Const, 0, ""},
+		{"DLT_RAW", Const, 0, ""},
+		{"DLT_RAWAF_MASK", Const, 1, ""},
+		{"DLT_RIO", Const, 0, ""},
+		{"DLT_SCCP", Const, 0, ""},
+		{"DLT_SITA", Const, 0, ""},
+		{"DLT_SLIP", Const, 0, ""},
+		{"DLT_SLIP_BSDOS", Const, 0, ""},
+		{"DLT_STANAG_5066_D_PDU", Const, 1, ""},
+		{"DLT_SUNATM", Const, 0, ""},
+		{"DLT_SYMANTEC_FIREWALL", Const, 0, ""},
+		{"DLT_TZSP", Const, 0, ""},
+		{"DLT_USB", Const, 0, ""},
+		{"DLT_USB_LINUX", Const, 0, ""},
+		{"DLT_USB_LINUX_MMAPPED", Const, 1, ""},
+		{"DLT_USER0", Const, 0, ""},
+		{"DLT_USER1", Const, 0, ""},
+		{"DLT_USER10", Const, 0, ""},
+		{"DLT_USER11", Const, 0, ""},
+		{"DLT_USER12", Const, 0, ""},
+		{"DLT_USER13", Const, 0, ""},
+		{"DLT_USER14", Const, 0, ""},
+		{"DLT_USER15", Const, 0, ""},
+		{"DLT_USER2", Const, 0, ""},
+		{"DLT_USER3", Const, 0, ""},
+		{"DLT_USER4", Const, 0, ""},
+		{"DLT_USER5", Const, 0, ""},
+		{"DLT_USER6", Const, 0, ""},
+		{"DLT_USER7", Const, 0, ""},
+		{"DLT_USER8", Const, 0, ""},
+		{"DLT_USER9", Const, 0, ""},
+		{"DLT_WIHART", Const, 1, ""},
+		{"DLT_X2E_SERIAL", Const, 0, ""},
+		{"DLT_X2E_XORAYA", Const, 0, ""},
+		{"DNSMXData", Type, 0, ""},
+		{"DNSMXData.NameExchange", Field, 0, ""},
+		{"DNSMXData.Pad", Field, 0, ""},
+		{"DNSMXData.Preference", Field, 0, ""},
+		{"DNSPTRData", Type, 0, ""},
+		{"DNSPTRData.Host", Field, 0, ""},
+		{"DNSRecord", Type, 0, ""},
+		{"DNSRecord.Data", Field, 0, ""},
+		{"DNSRecord.Dw", Field, 0, ""},
+		{"DNSRecord.Length", Field, 0, ""},
+		{"DNSRecord.Name", Field, 0, ""},
+		{"DNSRecord.Next", Field, 0, ""},
+		{"DNSRecord.Reserved", Field, 0, ""},
+		{"DNSRecord.Ttl", Field, 0, ""},
+		{"DNSRecord.Type", Field, 0, ""},
+		{"DNSSRVData", Type, 0, ""},
+		{"DNSSRVData.Pad", Field, 0, ""},
+		{"DNSSRVData.Port", Field, 0, ""},
+		{"DNSSRVData.Priority", Field, 0, ""},
+		{"DNSSRVData.Target", Field, 0, ""},
+		{"DNSSRVData.Weight", Field, 0, ""},
+		{"DNSTXTData", Type, 0, ""},
+		{"DNSTXTData.StringArray", Field, 0, ""},
+		{"DNSTXTData.StringCount", Field, 0, ""},
+		{"DNS_INFO_NO_RECORDS", Const, 4, ""},
+		{"DNS_TYPE_A", Const, 0, ""},
+		{"DNS_TYPE_A6", Const, 0, ""},
+		{"DNS_TYPE_AAAA", Const, 0, ""},
+		{"DNS_TYPE_ADDRS", Const, 0, ""},
+		{"DNS_TYPE_AFSDB", Const, 0, ""},
+		{"DNS_TYPE_ALL", Const, 0, ""},
+		{"DNS_TYPE_ANY", Const, 0, ""},
+		{"DNS_TYPE_ATMA", Const, 0, ""},
+		{"DNS_TYPE_AXFR", Const, 0, ""},
+		{"DNS_TYPE_CERT", Const, 0, ""},
+		{"DNS_TYPE_CNAME", Const, 0, ""},
+		{"DNS_TYPE_DHCID", Const, 0, ""},
+		{"DNS_TYPE_DNAME", Const, 0, ""},
+		{"DNS_TYPE_DNSKEY", Const, 0, ""},
+		{"DNS_TYPE_DS", Const, 0, ""},
+		{"DNS_TYPE_EID", Const, 0, ""},
+		{"DNS_TYPE_GID", Const, 0, ""},
+		{"DNS_TYPE_GPOS", Const, 0, ""},
+		{"DNS_TYPE_HINFO", Const, 0, ""},
+		{"DNS_TYPE_ISDN", Const, 0, ""},
+		{"DNS_TYPE_IXFR", Const, 0, ""},
+		{"DNS_TYPE_KEY", Const, 0, ""},
+		{"DNS_TYPE_KX", Const, 0, ""},
+		{"DNS_TYPE_LOC", Const, 0, ""},
+		{"DNS_TYPE_MAILA", Const, 0, ""},
+		{"DNS_TYPE_MAILB", Const, 0, ""},
+		{"DNS_TYPE_MB", Const, 0, ""},
+		{"DNS_TYPE_MD", Const, 0, ""},
+		{"DNS_TYPE_MF", Const, 0, ""},
+		{"DNS_TYPE_MG", Const, 0, ""},
+		{"DNS_TYPE_MINFO", Const, 0, ""},
+		{"DNS_TYPE_MR", Const, 0, ""},
+		{"DNS_TYPE_MX", Const, 0, ""},
+		{"DNS_TYPE_NAPTR", Const, 0, ""},
+		{"DNS_TYPE_NBSTAT", Const, 0, ""},
+		{"DNS_TYPE_NIMLOC", Const, 0, ""},
+		{"DNS_TYPE_NS", Const, 0, ""},
+		{"DNS_TYPE_NSAP", Const, 0, ""},
+		{"DNS_TYPE_NSAPPTR", Const, 0, ""},
+		{"DNS_TYPE_NSEC", Const, 0, ""},
+		{"DNS_TYPE_NULL", Const, 0, ""},
+		{"DNS_TYPE_NXT", Const, 0, ""},
+		{"DNS_TYPE_OPT", Const, 0, ""},
+		{"DNS_TYPE_PTR", Const, 0, ""},
+		{"DNS_TYPE_PX", Const, 0, ""},
+		{"DNS_TYPE_RP", Const, 0, ""},
+		{"DNS_TYPE_RRSIG", Const, 0, ""},
+		{"DNS_TYPE_RT", Const, 0, ""},
+		{"DNS_TYPE_SIG", Const, 0, ""},
+		{"DNS_TYPE_SINK", Const, 0, ""},
+		{"DNS_TYPE_SOA", Const, 0, ""},
+		{"DNS_TYPE_SRV", Const, 0, ""},
+		{"DNS_TYPE_TEXT", Const, 0, ""},
+		{"DNS_TYPE_TKEY", Const, 0, ""},
+		{"DNS_TYPE_TSIG", Const, 0, ""},
+		{"DNS_TYPE_UID", Const, 0, ""},
+		{"DNS_TYPE_UINFO", Const, 0, ""},
+		{"DNS_TYPE_UNSPEC", Const, 0, ""},
+		{"DNS_TYPE_WINS", Const, 0, ""},
+		{"DNS_TYPE_WINSR", Const, 0, ""},
+		{"DNS_TYPE_WKS", Const, 0, ""},
+		{"DNS_TYPE_X25", Const, 0, ""},
+		{"DT_BLK", Const, 0, ""},
+		{"DT_CHR", Const, 0, ""},
+		{"DT_DIR", Const, 0, ""},
+		{"DT_FIFO", Const, 0, ""},
+		{"DT_LNK", Const, 0, ""},
+		{"DT_REG", Const, 0, ""},
+		{"DT_SOCK", Const, 0, ""},
+		{"DT_UNKNOWN", Const, 0, ""},
+		{"DT_WHT", Const, 0, ""},
+		{"DUPLICATE_CLOSE_SOURCE", Const, 0, ""},
+		{"DUPLICATE_SAME_ACCESS", Const, 0, ""},
+		{"DeleteFile", Func, 0, ""},
+		{"DetachLsf", Func, 0, "func(fd int) error"},
+		{"DeviceIoControl", Func, 4, ""},
+		{"Dirent", Type, 0, ""},
+		{"Dirent.Fileno", Field, 0, ""},
+		{"Dirent.Ino", Field, 0, ""},
+		{"Dirent.Name", Field, 0, ""},
+		{"Dirent.Namlen", Field, 0, ""},
+		{"Dirent.Off", Field, 0, ""},
+		{"Dirent.Pad0", Field, 12, ""},
+		{"Dirent.Pad1", Field, 12, ""},
+		{"Dirent.Pad_cgo_0", Field, 0, ""},
+		{"Dirent.Reclen", Field, 0, ""},
+		{"Dirent.Seekoff", Field, 0, ""},
+		{"Dirent.Type", Field, 0, ""},
+		{"Dirent.X__d_padding", Field, 3, ""},
+		{"DnsNameCompare", Func, 4, ""},
+		{"DnsQuery", Func, 0, ""},
+		{"DnsRecordListFree", Func, 0, ""},
+		{"DnsSectionAdditional", Const, 4, ""},
+		{"DnsSectionAnswer", Const, 4, ""},
+		{"DnsSectionAuthority", Const, 4, ""},
+		{"DnsSectionQuestion", Const, 4, ""},
+		{"Dup", Func, 0, "func(oldfd int) (fd int, err error)"},
+		{"Dup2", Func, 0, "func(oldfd int, newfd int) (err error)"},
+		{"Dup3", Func, 2, "func(oldfd int, newfd int, flags int) (err error)"},
+		{"DuplicateHandle", Func, 0, ""},
+		{"E2BIG", Const, 0, ""},
+		{"EACCES", Const, 0, ""},
+		{"EADDRINUSE", Const, 0, ""},
+		{"EADDRNOTAVAIL", Const, 0, ""},
+		{"EADV", Const, 0, ""},
+		{"EAFNOSUPPORT", Const, 0, ""},
+		{"EAGAIN", Const, 0, ""},
+		{"EALREADY", Const, 0, ""},
+		{"EAUTH", Const, 0, ""},
+		{"EBADARCH", Const, 0, ""},
+		{"EBADE", Const, 0, ""},
+		{"EBADEXEC", Const, 0, ""},
+		{"EBADF", Const, 0, ""},
+		{"EBADFD", Const, 0, ""},
+		{"EBADMACHO", Const, 0, ""},
+		{"EBADMSG", Const, 0, ""},
+		{"EBADR", Const, 0, ""},
+		{"EBADRPC", Const, 0, ""},
+		{"EBADRQC", Const, 0, ""},
+		{"EBADSLT", Const, 0, ""},
+		{"EBFONT", Const, 0, ""},
+		{"EBUSY", Const, 0, ""},
+		{"ECANCELED", Const, 0, ""},
+		{"ECAPMODE", Const, 1, ""},
+		{"ECHILD", Const, 0, ""},
+		{"ECHO", Const, 0, ""},
+		{"ECHOCTL", Const, 0, ""},
+		{"ECHOE", Const, 0, ""},
+		{"ECHOK", Const, 0, ""},
+		{"ECHOKE", Const, 0, ""},
+		{"ECHONL", Const, 0, ""},
+		{"ECHOPRT", Const, 0, ""},
+		{"ECHRNG", Const, 0, ""},
+		{"ECOMM", Const, 0, ""},
+		{"ECONNABORTED", Const, 0, ""},
+		{"ECONNREFUSED", Const, 0, ""},
+		{"ECONNRESET", Const, 0, ""},
+		{"EDEADLK", Const, 0, ""},
+		{"EDEADLOCK", Const, 0, ""},
+		{"EDESTADDRREQ", Const, 0, ""},
+		{"EDEVERR", Const, 0, ""},
+		{"EDOM", Const, 0, ""},
+		{"EDOOFUS", Const, 0, ""},
+		{"EDOTDOT", Const, 0, ""},
+		{"EDQUOT", Const, 0, ""},
+		{"EEXIST", Const, 0, ""},
+		{"EFAULT", Const, 0, ""},
+		{"EFBIG", Const, 0, ""},
+		{"EFER_LMA", Const, 1, ""},
+		{"EFER_LME", Const, 1, ""},
+		{"EFER_NXE", Const, 1, ""},
+		{"EFER_SCE", Const, 1, ""},
+		{"EFTYPE", Const, 0, ""},
+		{"EHOSTDOWN", Const, 0, ""},
+		{"EHOSTUNREACH", Const, 0, ""},
+		{"EHWPOISON", Const, 0, ""},
+		{"EIDRM", Const, 0, ""},
+		{"EILSEQ", Const, 0, ""},
+		{"EINPROGRESS", Const, 0, ""},
+		{"EINTR", Const, 0, ""},
+		{"EINVAL", Const, 0, ""},
+		{"EIO", Const, 0, ""},
+		{"EIPSEC", Const, 1, ""},
+		{"EISCONN", Const, 0, ""},
+		{"EISDIR", Const, 0, ""},
+		{"EISNAM", Const, 0, ""},
+		{"EKEYEXPIRED", Const, 0, ""},
+		{"EKEYREJECTED", Const, 0, ""},
+		{"EKEYREVOKED", Const, 0, ""},
+		{"EL2HLT", Const, 0, ""},
+		{"EL2NSYNC", Const, 0, ""},
+		{"EL3HLT", Const, 0, ""},
+		{"EL3RST", Const, 0, ""},
+		{"ELAST", Const, 0, ""},
+		{"ELF_NGREG", Const, 0, ""},
+		{"ELF_PRARGSZ", Const, 0, ""},
+		{"ELIBACC", Const, 0, ""},
+		{"ELIBBAD", Const, 0, ""},
+		{"ELIBEXEC", Const, 0, ""},
+		{"ELIBMAX", Const, 0, ""},
+		{"ELIBSCN", Const, 0, ""},
+		{"ELNRNG", Const, 0, ""},
+		{"ELOOP", Const, 0, ""},
+		{"EMEDIUMTYPE", Const, 0, ""},
+		{"EMFILE", Const, 0, ""},
+		{"EMLINK", Const, 0, ""},
+		{"EMSGSIZE", Const, 0, ""},
+		{"EMT_TAGOVF", Const, 1, ""},
+		{"EMULTIHOP", Const, 0, ""},
+		{"EMUL_ENABLED", Const, 1, ""},
+		{"EMUL_LINUX", Const, 1, ""},
+		{"EMUL_LINUX32", Const, 1, ""},
+		{"EMUL_MAXID", Const, 1, ""},
+		{"EMUL_NATIVE", Const, 1, ""},
+		{"ENAMETOOLONG", Const, 0, ""},
+		{"ENAVAIL", Const, 0, ""},
+		{"ENDRUNDISC", Const, 1, ""},
+		{"ENEEDAUTH", Const, 0, ""},
+		{"ENETDOWN", Const, 0, ""},
+		{"ENETRESET", Const, 0, ""},
+		{"ENETUNREACH", Const, 0, ""},
+		{"ENFILE", Const, 0, ""},
+		{"ENOANO", Const, 0, ""},
+		{"ENOATTR", Const, 0, ""},
+		{"ENOBUFS", Const, 0, ""},
+		{"ENOCSI", Const, 0, ""},
+		{"ENODATA", Const, 0, ""},
+		{"ENODEV", Const, 0, ""},
+		{"ENOENT", Const, 0, ""},
+		{"ENOEXEC", Const, 0, ""},
+		{"ENOKEY", Const, 0, ""},
+		{"ENOLCK", Const, 0, ""},
+		{"ENOLINK", Const, 0, ""},
+		{"ENOMEDIUM", Const, 0, ""},
+		{"ENOMEM", Const, 0, ""},
+		{"ENOMSG", Const, 0, ""},
+		{"ENONET", Const, 0, ""},
+		{"ENOPKG", Const, 0, ""},
+		{"ENOPOLICY", Const, 0, ""},
+		{"ENOPROTOOPT", Const, 0, ""},
+		{"ENOSPC", Const, 0, ""},
+		{"ENOSR", Const, 0, ""},
+		{"ENOSTR", Const, 0, ""},
+		{"ENOSYS", Const, 0, ""},
+		{"ENOTBLK", Const, 0, ""},
+		{"ENOTCAPABLE", Const, 0, ""},
+		{"ENOTCONN", Const, 0, ""},
+		{"ENOTDIR", Const, 0, ""},
+		{"ENOTEMPTY", Const, 0, ""},
+		{"ENOTNAM", Const, 0, ""},
+		{"ENOTRECOVERABLE", Const, 0, ""},
+		{"ENOTSOCK", Const, 0, ""},
+		{"ENOTSUP", Const, 0, ""},
+		{"ENOTTY", Const, 0, ""},
+		{"ENOTUNIQ", Const, 0, ""},
+		{"ENXIO", Const, 0, ""},
+		{"EN_SW_CTL_INF", Const, 1, ""},
+		{"EN_SW_CTL_PREC", Const, 1, ""},
+		{"EN_SW_CTL_ROUND", Const, 1, ""},
+		{"EN_SW_DATACHAIN", Const, 1, ""},
+		{"EN_SW_DENORM", Const, 1, ""},
+		{"EN_SW_INVOP", Const, 1, ""},
+		{"EN_SW_OVERFLOW", Const, 1, ""},
+		{"EN_SW_PRECLOSS", Const, 1, ""},
+		{"EN_SW_UNDERFLOW", Const, 1, ""},
+		{"EN_SW_ZERODIV", Const, 1, ""},
+		{"EOPNOTSUPP", Const, 0, ""},
+		{"EOVERFLOW", Const, 0, ""},
+		{"EOWNERDEAD", Const, 0, ""},
+		{"EPERM", Const, 0, ""},
+		{"EPFNOSUPPORT", Const, 0, ""},
+		{"EPIPE", Const, 0, ""},
+		{"EPOLLERR", Const, 0, ""},
+		{"EPOLLET", Const, 0, ""},
+		{"EPOLLHUP", Const, 0, ""},
+		{"EPOLLIN", Const, 0, ""},
+		{"EPOLLMSG", Const, 0, ""},
+		{"EPOLLONESHOT", Const, 0, ""},
+		{"EPOLLOUT", Const, 0, ""},
+		{"EPOLLPRI", Const, 0, ""},
+		{"EPOLLRDBAND", Const, 0, ""},
+		{"EPOLLRDHUP", Const, 0, ""},
+		{"EPOLLRDNORM", Const, 0, ""},
+		{"EPOLLWRBAND", Const, 0, ""},
+		{"EPOLLWRNORM", Const, 0, ""},
+		{"EPOLL_CLOEXEC", Const, 0, ""},
+		{"EPOLL_CTL_ADD", Const, 0, ""},
+		{"EPOLL_CTL_DEL", Const, 0, ""},
+		{"EPOLL_CTL_MOD", Const, 0, ""},
+		{"EPOLL_NONBLOCK", Const, 0, ""},
+		{"EPROCLIM", Const, 0, ""},
+		{"EPROCUNAVAIL", Const, 0, ""},
+		{"EPROGMISMATCH", Const, 0, ""},
+		{"EPROGUNAVAIL", Const, 0, ""},
+		{"EPROTO", Const, 0, ""},
+		{"EPROTONOSUPPORT", Const, 0, ""},
+		{"EPROTOTYPE", Const, 0, ""},
+		{"EPWROFF", Const, 0, ""},
+		{"EQFULL", Const, 16, ""},
+		{"ERANGE", Const, 0, ""},
+		{"EREMCHG", Const, 0, ""},
+		{"EREMOTE", Const, 0, ""},
+		{"EREMOTEIO", Const, 0, ""},
+		{"ERESTART", Const, 0, ""},
+		{"ERFKILL", Const, 0, ""},
+		{"EROFS", Const, 0, ""},
+		{"ERPCMISMATCH", Const, 0, ""},
+		{"ERROR_ACCESS_DENIED", Const, 0, ""},
+		{"ERROR_ALREADY_EXISTS", Const, 0, ""},
+		{"ERROR_BROKEN_PIPE", Const, 0, ""},
+		{"ERROR_BUFFER_OVERFLOW", Const, 0, ""},
+		{"ERROR_DIR_NOT_EMPTY", Const, 8, ""},
+		{"ERROR_ENVVAR_NOT_FOUND", Const, 0, ""},
+		{"ERROR_FILE_EXISTS", Const, 0, ""},
+		{"ERROR_FILE_NOT_FOUND", Const, 0, ""},
+		{"ERROR_HANDLE_EOF", Const, 2, ""},
+		{"ERROR_INSUFFICIENT_BUFFER", Const, 0, ""},
+		{"ERROR_IO_PENDING", Const, 0, ""},
+		{"ERROR_MOD_NOT_FOUND", Const, 0, ""},
+		{"ERROR_MORE_DATA", Const, 3, ""},
+		{"ERROR_NETNAME_DELETED", Const, 3, ""},
+		{"ERROR_NOT_FOUND", Const, 1, ""},
+		{"ERROR_NO_MORE_FILES", Const, 0, ""},
+		{"ERROR_OPERATION_ABORTED", Const, 0, ""},
+		{"ERROR_PATH_NOT_FOUND", Const, 0, ""},
+		{"ERROR_PRIVILEGE_NOT_HELD", Const, 4, ""},
+		{"ERROR_PROC_NOT_FOUND", Const, 0, ""},
+		{"ESHLIBVERS", Const, 0, ""},
+		{"ESHUTDOWN", Const, 0, ""},
+		{"ESOCKTNOSUPPORT", Const, 0, ""},
+		{"ESPIPE", Const, 0, ""},
+		{"ESRCH", Const, 0, ""},
+		{"ESRMNT", Const, 0, ""},
+		{"ESTALE", Const, 0, ""},
+		{"ESTRPIPE", Const, 0, ""},
+		{"ETHERCAP_JUMBO_MTU", Const, 1, ""},
+		{"ETHERCAP_VLAN_HWTAGGING", Const, 1, ""},
+		{"ETHERCAP_VLAN_MTU", Const, 1, ""},
+		{"ETHERMIN", Const, 1, ""},
+		{"ETHERMTU", Const, 1, ""},
+		{"ETHERMTU_JUMBO", Const, 1, ""},
+		{"ETHERTYPE_8023", Const, 1, ""},
+		{"ETHERTYPE_AARP", Const, 1, ""},
+		{"ETHERTYPE_ACCTON", Const, 1, ""},
+		{"ETHERTYPE_AEONIC", Const, 1, ""},
+		{"ETHERTYPE_ALPHA", Const, 1, ""},
+		{"ETHERTYPE_AMBER", Const, 1, ""},
+		{"ETHERTYPE_AMOEBA", Const, 1, ""},
+		{"ETHERTYPE_AOE", Const, 1, ""},
+		{"ETHERTYPE_APOLLO", Const, 1, ""},
+		{"ETHERTYPE_APOLLODOMAIN", Const, 1, ""},
+		{"ETHERTYPE_APPLETALK", Const, 1, ""},
+		{"ETHERTYPE_APPLITEK", Const, 1, ""},
+		{"ETHERTYPE_ARGONAUT", Const, 1, ""},
+		{"ETHERTYPE_ARP", Const, 1, ""},
+		{"ETHERTYPE_AT", Const, 1, ""},
+		{"ETHERTYPE_ATALK", Const, 1, ""},
+		{"ETHERTYPE_ATOMIC", Const, 1, ""},
+		{"ETHERTYPE_ATT", Const, 1, ""},
+		{"ETHERTYPE_ATTSTANFORD", Const, 1, ""},
+		{"ETHERTYPE_AUTOPHON", Const, 1, ""},
+		{"ETHERTYPE_AXIS", Const, 1, ""},
+		{"ETHERTYPE_BCLOOP", Const, 1, ""},
+		{"ETHERTYPE_BOFL", Const, 1, ""},
+		{"ETHERTYPE_CABLETRON", Const, 1, ""},
+		{"ETHERTYPE_CHAOS", Const, 1, ""},
+		{"ETHERTYPE_COMDESIGN", Const, 1, ""},
+		{"ETHERTYPE_COMPUGRAPHIC", Const, 1, ""},
+		{"ETHERTYPE_COUNTERPOINT", Const, 1, ""},
+		{"ETHERTYPE_CRONUS", Const, 1, ""},
+		{"ETHERTYPE_CRONUSVLN", Const, 1, ""},
+		{"ETHERTYPE_DCA", Const, 1, ""},
+		{"ETHERTYPE_DDE", Const, 1, ""},
+		{"ETHERTYPE_DEBNI", Const, 1, ""},
+		{"ETHERTYPE_DECAM", Const, 1, ""},
+		{"ETHERTYPE_DECCUST", Const, 1, ""},
+		{"ETHERTYPE_DECDIAG", Const, 1, ""},
+		{"ETHERTYPE_DECDNS", Const, 1, ""},
+		{"ETHERTYPE_DECDTS", Const, 1, ""},
+		{"ETHERTYPE_DECEXPER", Const, 1, ""},
+		{"ETHERTYPE_DECLAST", Const, 1, ""},
+		{"ETHERTYPE_DECLTM", Const, 1, ""},
+		{"ETHERTYPE_DECMUMPS", Const, 1, ""},
+		{"ETHERTYPE_DECNETBIOS", Const, 1, ""},
+		{"ETHERTYPE_DELTACON", Const, 1, ""},
+		{"ETHERTYPE_DIDDLE", Const, 1, ""},
+		{"ETHERTYPE_DLOG1", Const, 1, ""},
+		{"ETHERTYPE_DLOG2", Const, 1, ""},
+		{"ETHERTYPE_DN", Const, 1, ""},
+		{"ETHERTYPE_DOGFIGHT", Const, 1, ""},
+		{"ETHERTYPE_DSMD", Const, 1, ""},
+		{"ETHERTYPE_ECMA", Const, 1, ""},
+		{"ETHERTYPE_ENCRYPT", Const, 1, ""},
+		{"ETHERTYPE_ES", Const, 1, ""},
+		{"ETHERTYPE_EXCELAN", Const, 1, ""},
+		{"ETHERTYPE_EXPERDATA", Const, 1, ""},
+		{"ETHERTYPE_FLIP", Const, 1, ""},
+		{"ETHERTYPE_FLOWCONTROL", Const, 1, ""},
+		{"ETHERTYPE_FRARP", Const, 1, ""},
+		{"ETHERTYPE_GENDYN", Const, 1, ""},
+		{"ETHERTYPE_HAYES", Const, 1, ""},
+		{"ETHERTYPE_HIPPI_FP", Const, 1, ""},
+		{"ETHERTYPE_HITACHI", Const, 1, ""},
+		{"ETHERTYPE_HP", Const, 1, ""},
+		{"ETHERTYPE_IEEEPUP", Const, 1, ""},
+		{"ETHERTYPE_IEEEPUPAT", Const, 1, ""},
+		{"ETHERTYPE_IMLBL", Const, 1, ""},
+		{"ETHERTYPE_IMLBLDIAG", Const, 1, ""},
+		{"ETHERTYPE_IP", Const, 1, ""},
+		{"ETHERTYPE_IPAS", Const, 1, ""},
+		{"ETHERTYPE_IPV6", Const, 1, ""},
+		{"ETHERTYPE_IPX", Const, 1, ""},
+		{"ETHERTYPE_IPXNEW", Const, 1, ""},
+		{"ETHERTYPE_KALPANA", Const, 1, ""},
+		{"ETHERTYPE_LANBRIDGE", Const, 1, ""},
+		{"ETHERTYPE_LANPROBE", Const, 1, ""},
+		{"ETHERTYPE_LAT", Const, 1, ""},
+		{"ETHERTYPE_LBACK", Const, 1, ""},
+		{"ETHERTYPE_LITTLE", Const, 1, ""},
+		{"ETHERTYPE_LLDP", Const, 1, ""},
+		{"ETHERTYPE_LOGICRAFT", Const, 1, ""},
+		{"ETHERTYPE_LOOPBACK", Const, 1, ""},
+		{"ETHERTYPE_MATRA", Const, 1, ""},
+		{"ETHERTYPE_MAX", Const, 1, ""},
+		{"ETHERTYPE_MERIT", Const, 1, ""},
+		{"ETHERTYPE_MICP", Const, 1, ""},
+		{"ETHERTYPE_MOPDL", Const, 1, ""},
+		{"ETHERTYPE_MOPRC", Const, 1, ""},
+		{"ETHERTYPE_MOTOROLA", Const, 1, ""},
+		{"ETHERTYPE_MPLS", Const, 1, ""},
+		{"ETHERTYPE_MPLS_MCAST", Const, 1, ""},
+		{"ETHERTYPE_MUMPS", Const, 1, ""},
+		{"ETHERTYPE_NBPCC", Const, 1, ""},
+		{"ETHERTYPE_NBPCLAIM", Const, 1, ""},
+		{"ETHERTYPE_NBPCLREQ", Const, 1, ""},
+		{"ETHERTYPE_NBPCLRSP", Const, 1, ""},
+		{"ETHERTYPE_NBPCREQ", Const, 1, ""},
+		{"ETHERTYPE_NBPCRSP", Const, 1, ""},
+		{"ETHERTYPE_NBPDG", Const, 1, ""},
+		{"ETHERTYPE_NBPDGB", Const, 1, ""},
+		{"ETHERTYPE_NBPDLTE", Const, 1, ""},
+		{"ETHERTYPE_NBPRAR", Const, 1, ""},
+		{"ETHERTYPE_NBPRAS", Const, 1, ""},
+		{"ETHERTYPE_NBPRST", Const, 1, ""},
+		{"ETHERTYPE_NBPSCD", Const, 1, ""},
+		{"ETHERTYPE_NBPVCD", Const, 1, ""},
+		{"ETHERTYPE_NBS", Const, 1, ""},
+		{"ETHERTYPE_NCD", Const, 1, ""},
+		{"ETHERTYPE_NESTAR", Const, 1, ""},
+		{"ETHERTYPE_NETBEUI", Const, 1, ""},
+		{"ETHERTYPE_NOVELL", Const, 1, ""},
+		{"ETHERTYPE_NS", Const, 1, ""},
+		{"ETHERTYPE_NSAT", Const, 1, ""},
+		{"ETHERTYPE_NSCOMPAT", Const, 1, ""},
+		{"ETHERTYPE_NTRAILER", Const, 1, ""},
+		{"ETHERTYPE_OS9", Const, 1, ""},
+		{"ETHERTYPE_OS9NET", Const, 1, ""},
+		{"ETHERTYPE_PACER", Const, 1, ""},
+		{"ETHERTYPE_PAE", Const, 1, ""},
+		{"ETHERTYPE_PCS", Const, 1, ""},
+		{"ETHERTYPE_PLANNING", Const, 1, ""},
+		{"ETHERTYPE_PPP", Const, 1, ""},
+		{"ETHERTYPE_PPPOE", Const, 1, ""},
+		{"ETHERTYPE_PPPOEDISC", Const, 1, ""},
+		{"ETHERTYPE_PRIMENTS", Const, 1, ""},
+		{"ETHERTYPE_PUP", Const, 1, ""},
+		{"ETHERTYPE_PUPAT", Const, 1, ""},
+		{"ETHERTYPE_QINQ", Const, 1, ""},
+		{"ETHERTYPE_RACAL", Const, 1, ""},
+		{"ETHERTYPE_RATIONAL", Const, 1, ""},
+		{"ETHERTYPE_RAWFR", Const, 1, ""},
+		{"ETHERTYPE_RCL", Const, 1, ""},
+		{"ETHERTYPE_RDP", Const, 1, ""},
+		{"ETHERTYPE_RETIX", Const, 1, ""},
+		{"ETHERTYPE_REVARP", Const, 1, ""},
+		{"ETHERTYPE_SCA", Const, 1, ""},
+		{"ETHERTYPE_SECTRA", Const, 1, ""},
+		{"ETHERTYPE_SECUREDATA", Const, 1, ""},
+		{"ETHERTYPE_SGITW", Const, 1, ""},
+		{"ETHERTYPE_SG_BOUNCE", Const, 1, ""},
+		{"ETHERTYPE_SG_DIAG", Const, 1, ""},
+		{"ETHERTYPE_SG_NETGAMES", Const, 1, ""},
+		{"ETHERTYPE_SG_RESV", Const, 1, ""},
+		{"ETHERTYPE_SIMNET", Const, 1, ""},
+		{"ETHERTYPE_SLOW", Const, 1, ""},
+		{"ETHERTYPE_SLOWPROTOCOLS", Const, 1, ""},
+		{"ETHERTYPE_SNA", Const, 1, ""},
+		{"ETHERTYPE_SNMP", Const, 1, ""},
+		{"ETHERTYPE_SONIX", Const, 1, ""},
+		{"ETHERTYPE_SPIDER", Const, 1, ""},
+		{"ETHERTYPE_SPRITE", Const, 1, ""},
+		{"ETHERTYPE_STP", Const, 1, ""},
+		{"ETHERTYPE_TALARIS", Const, 1, ""},
+		{"ETHERTYPE_TALARISMC", Const, 1, ""},
+		{"ETHERTYPE_TCPCOMP", Const, 1, ""},
+		{"ETHERTYPE_TCPSM", Const, 1, ""},
+		{"ETHERTYPE_TEC", Const, 1, ""},
+		{"ETHERTYPE_TIGAN", Const, 1, ""},
+		{"ETHERTYPE_TRAIL", Const, 1, ""},
+		{"ETHERTYPE_TRANSETHER", Const, 1, ""},
+		{"ETHERTYPE_TYMSHARE", Const, 1, ""},
+		{"ETHERTYPE_UBBST", Const, 1, ""},
+		{"ETHERTYPE_UBDEBUG", Const, 1, ""},
+		{"ETHERTYPE_UBDIAGLOOP", Const, 1, ""},
+		{"ETHERTYPE_UBDL", Const, 1, ""},
+		{"ETHERTYPE_UBNIU", Const, 1, ""},
+		{"ETHERTYPE_UBNMC", Const, 1, ""},
+		{"ETHERTYPE_VALID", Const, 1, ""},
+		{"ETHERTYPE_VARIAN", Const, 1, ""},
+		{"ETHERTYPE_VAXELN", Const, 1, ""},
+		{"ETHERTYPE_VEECO", Const, 1, ""},
+		{"ETHERTYPE_VEXP", Const, 1, ""},
+		{"ETHERTYPE_VGLAB", Const, 1, ""},
+		{"ETHERTYPE_VINES", Const, 1, ""},
+		{"ETHERTYPE_VINESECHO", Const, 1, ""},
+		{"ETHERTYPE_VINESLOOP", Const, 1, ""},
+		{"ETHERTYPE_VITAL", Const, 1, ""},
+		{"ETHERTYPE_VLAN", Const, 1, ""},
+		{"ETHERTYPE_VLTLMAN", Const, 1, ""},
+		{"ETHERTYPE_VPROD", Const, 1, ""},
+		{"ETHERTYPE_VURESERVED", Const, 1, ""},
+		{"ETHERTYPE_WATERLOO", Const, 1, ""},
+		{"ETHERTYPE_WELLFLEET", Const, 1, ""},
+		{"ETHERTYPE_X25", Const, 1, ""},
+		{"ETHERTYPE_X75", Const, 1, ""},
+		{"ETHERTYPE_XNSSM", Const, 1, ""},
+		{"ETHERTYPE_XTP", Const, 1, ""},
+		{"ETHER_ADDR_LEN", Const, 1, ""},
+		{"ETHER_ALIGN", Const, 1, ""},
+		{"ETHER_CRC_LEN", Const, 1, ""},
+		{"ETHER_CRC_POLY_BE", Const, 1, ""},
+		{"ETHER_CRC_POLY_LE", Const, 1, ""},
+		{"ETHER_HDR_LEN", Const, 1, ""},
+		{"ETHER_MAX_DIX_LEN", Const, 1, ""},
+		{"ETHER_MAX_LEN", Const, 1, ""},
+		{"ETHER_MAX_LEN_JUMBO", Const, 1, ""},
+		{"ETHER_MIN_LEN", Const, 1, ""},
+		{"ETHER_PPPOE_ENCAP_LEN", Const, 1, ""},
+		{"ETHER_TYPE_LEN", Const, 1, ""},
+		{"ETHER_VLAN_ENCAP_LEN", Const, 1, ""},
+		{"ETH_P_1588", Const, 0, ""},
+		{"ETH_P_8021Q", Const, 0, ""},
+		{"ETH_P_802_2", Const, 0, ""},
+		{"ETH_P_802_3", Const, 0, ""},
+		{"ETH_P_AARP", Const, 0, ""},
+		{"ETH_P_ALL", Const, 0, ""},
+		{"ETH_P_AOE", Const, 0, ""},
+		{"ETH_P_ARCNET", Const, 0, ""},
+		{"ETH_P_ARP", Const, 0, ""},
+		{"ETH_P_ATALK", Const, 0, ""},
+		{"ETH_P_ATMFATE", Const, 0, ""},
+		{"ETH_P_ATMMPOA", Const, 0, ""},
+		{"ETH_P_AX25", Const, 0, ""},
+		{"ETH_P_BPQ", Const, 0, ""},
+		{"ETH_P_CAIF", Const, 0, ""},
+		{"ETH_P_CAN", Const, 0, ""},
+		{"ETH_P_CONTROL", Const, 0, ""},
+		{"ETH_P_CUST", Const, 0, ""},
+		{"ETH_P_DDCMP", Const, 0, ""},
+		{"ETH_P_DEC", Const, 0, ""},
+		{"ETH_P_DIAG", Const, 0, ""},
+		{"ETH_P_DNA_DL", Const, 0, ""},
+		{"ETH_P_DNA_RC", Const, 0, ""},
+		{"ETH_P_DNA_RT", Const, 0, ""},
+		{"ETH_P_DSA", Const, 0, ""},
+		{"ETH_P_ECONET", Const, 0, ""},
+		{"ETH_P_EDSA", Const, 0, ""},
+		{"ETH_P_FCOE", Const, 0, ""},
+		{"ETH_P_FIP", Const, 0, ""},
+		{"ETH_P_HDLC", Const, 0, ""},
+		{"ETH_P_IEEE802154", Const, 0, ""},
+		{"ETH_P_IEEEPUP", Const, 0, ""},
+		{"ETH_P_IEEEPUPAT", Const, 0, ""},
+		{"ETH_P_IP", Const, 0, ""},
+		{"ETH_P_IPV6", Const, 0, ""},
+		{"ETH_P_IPX", Const, 0, ""},
+		{"ETH_P_IRDA", Const, 0, ""},
+		{"ETH_P_LAT", Const, 0, ""},
+		{"ETH_P_LINK_CTL", Const, 0, ""},
+		{"ETH_P_LOCALTALK", Const, 0, ""},
+		{"ETH_P_LOOP", Const, 0, ""},
+		{"ETH_P_MOBITEX", Const, 0, ""},
+		{"ETH_P_MPLS_MC", Const, 0, ""},
+		{"ETH_P_MPLS_UC", Const, 0, ""},
+		{"ETH_P_PAE", Const, 0, ""},
+		{"ETH_P_PAUSE", Const, 0, ""},
+		{"ETH_P_PHONET", Const, 0, ""},
+		{"ETH_P_PPPTALK", Const, 0, ""},
+		{"ETH_P_PPP_DISC", Const, 0, ""},
+		{"ETH_P_PPP_MP", Const, 0, ""},
+		{"ETH_P_PPP_SES", Const, 0, ""},
+		{"ETH_P_PUP", Const, 0, ""},
+		{"ETH_P_PUPAT", Const, 0, ""},
+		{"ETH_P_RARP", Const, 0, ""},
+		{"ETH_P_SCA", Const, 0, ""},
+		{"ETH_P_SLOW", Const, 0, ""},
+		{"ETH_P_SNAP", Const, 0, ""},
+		{"ETH_P_TEB", Const, 0, ""},
+		{"ETH_P_TIPC", Const, 0, ""},
+		{"ETH_P_TRAILER", Const, 0, ""},
+		{"ETH_P_TR_802_2", Const, 0, ""},
+		{"ETH_P_WAN_PPP", Const, 0, ""},
+		{"ETH_P_WCCP", Const, 0, ""},
+		{"ETH_P_X25", Const, 0, ""},
+		{"ETIME", Const, 0, ""},
+		{"ETIMEDOUT", Const, 0, ""},
+		{"ETOOMANYREFS", Const, 0, ""},
+		{"ETXTBSY", Const, 0, ""},
+		{"EUCLEAN", Const, 0, ""},
+		{"EUNATCH", Const, 0, ""},
+		{"EUSERS", Const, 0, ""},
+		{"EVFILT_AIO", Const, 0, ""},
+		{"EVFILT_FS", Const, 0, ""},
+		{"EVFILT_LIO", Const, 0, ""},
+		{"EVFILT_MACHPORT", Const, 0, ""},
+		{"EVFILT_PROC", Const, 0, ""},
+		{"EVFILT_READ", Const, 0, ""},
+		{"EVFILT_SIGNAL", Const, 0, ""},
+		{"EVFILT_SYSCOUNT", Const, 0, ""},
+		{"EVFILT_THREADMARKER", Const, 0, ""},
+		{"EVFILT_TIMER", Const, 0, ""},
+		{"EVFILT_USER", Const, 0, ""},
+		{"EVFILT_VM", Const, 0, ""},
+		{"EVFILT_VNODE", Const, 0, ""},
+		{"EVFILT_WRITE", Const, 0, ""},
+		{"EV_ADD", Const, 0, ""},
+		{"EV_CLEAR", Const, 0, ""},
+		{"EV_DELETE", Const, 0, ""},
+		{"EV_DISABLE", Const, 0, ""},
+		{"EV_DISPATCH", Const, 0, ""},
+		{"EV_DROP", Const, 3, ""},
+		{"EV_ENABLE", Const, 0, ""},
+		{"EV_EOF", Const, 0, ""},
+		{"EV_ERROR", Const, 0, ""},
+		{"EV_FLAG0", Const, 0, ""},
+		{"EV_FLAG1", Const, 0, ""},
+		{"EV_ONESHOT", Const, 0, ""},
+		{"EV_OOBAND", Const, 0, ""},
+		{"EV_POLL", Const, 0, ""},
+		{"EV_RECEIPT", Const, 0, ""},
+		{"EV_SYSFLAGS", Const, 0, ""},
+		{"EWINDOWS", Const, 0, ""},
+		{"EWOULDBLOCK", Const, 0, ""},
+		{"EXDEV", Const, 0, ""},
+		{"EXFULL", Const, 0, ""},
+		{"EXTA", Const, 0, ""},
+		{"EXTB", Const, 0, ""},
+		{"EXTPROC", Const, 0, ""},
+		{"Environ", Func, 0, "func() []string"},
+		{"EpollCreate", Func, 0, "func(size int) (fd int, err error)"},
+		{"EpollCreate1", Func, 0, "func(flag int) (fd int, err error)"},
+		{"EpollCtl", Func, 0, "func(epfd int, op int, fd int, event *EpollEvent) (err error)"},
+		{"EpollEvent", Type, 0, ""},
+		{"EpollEvent.Events", Field, 0, ""},
+		{"EpollEvent.Fd", Field, 0, ""},
+		{"EpollEvent.Pad", Field, 0, ""},
+		{"EpollEvent.PadFd", Field, 0, ""},
+		{"EpollWait", Func, 0, "func(epfd int, events []EpollEvent, msec int) (n int, err error)"},
+		{"Errno", Type, 0, ""},
+		{"EscapeArg", Func, 0, ""},
+		{"Exchangedata", Func, 0, ""},
+		{"Exec", Func, 0, "func(argv0 string, argv []string, envv []string) (err error)"},
+		{"Exit", Func, 0, "func(code int)"},
+		{"ExitProcess", Func, 0, ""},
+		{"FD_CLOEXEC", Const, 0, ""},
+		{"FD_SETSIZE", Const, 0, ""},
+		{"FILE_ACTION_ADDED", Const, 0, ""},
+		{"FILE_ACTION_MODIFIED", Const, 0, ""},
+		{"FILE_ACTION_REMOVED", Const, 0, ""},
+		{"FILE_ACTION_RENAMED_NEW_NAME", Const, 0, ""},
+		{"FILE_ACTION_RENAMED_OLD_NAME", Const, 0, ""},
+		{"FILE_APPEND_DATA", Const, 0, ""},
+		{"FILE_ATTRIBUTE_ARCHIVE", Const, 0, ""},
+		{"FILE_ATTRIBUTE_DIRECTORY", Const, 0, ""},
+		{"FILE_ATTRIBUTE_HIDDEN", Const, 0, ""},
+		{"FILE_ATTRIBUTE_NORMAL", Const, 0, ""},
+		{"FILE_ATTRIBUTE_READONLY", Const, 0, ""},
+		{"FILE_ATTRIBUTE_REPARSE_POINT", Const, 4, ""},
+		{"FILE_ATTRIBUTE_SYSTEM", Const, 0, ""},
+		{"FILE_BEGIN", Const, 0, ""},
+		{"FILE_CURRENT", Const, 0, ""},
+		{"FILE_END", Const, 0, ""},
+		{"FILE_FLAG_BACKUP_SEMANTICS", Const, 0, ""},
+		{"FILE_FLAG_OPEN_REPARSE_POINT", Const, 4, ""},
+		{"FILE_FLAG_OVERLAPPED", Const, 0, ""},
+		{"FILE_LIST_DIRECTORY", Const, 0, ""},
+		{"FILE_MAP_COPY", Const, 0, ""},
+		{"FILE_MAP_EXECUTE", Const, 0, ""},
+		{"FILE_MAP_READ", Const, 0, ""},
+		{"FILE_MAP_WRITE", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_ATTRIBUTES", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_CREATION", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_DIR_NAME", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_FILE_NAME", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_LAST_ACCESS", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_LAST_WRITE", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_SIZE", Const, 0, ""},
+		{"FILE_SHARE_DELETE", Const, 0, ""},
+		{"FILE_SHARE_READ", Const, 0, ""},
+		{"FILE_SHARE_WRITE", Const, 0, ""},
+		{"FILE_SKIP_COMPLETION_PORT_ON_SUCCESS", Const, 2, ""},
+		{"FILE_SKIP_SET_EVENT_ON_HANDLE", Const, 2, ""},
+		{"FILE_TYPE_CHAR", Const, 0, ""},
+		{"FILE_TYPE_DISK", Const, 0, ""},
+		{"FILE_TYPE_PIPE", Const, 0, ""},
+		{"FILE_TYPE_REMOTE", Const, 0, ""},
+		{"FILE_TYPE_UNKNOWN", Const, 0, ""},
+		{"FILE_WRITE_ATTRIBUTES", Const, 0, ""},
+		{"FLUSHO", Const, 0, ""},
+		{"FORMAT_MESSAGE_ALLOCATE_BUFFER", Const, 0, ""},
+		{"FORMAT_MESSAGE_ARGUMENT_ARRAY", Const, 0, ""},
+		{"FORMAT_MESSAGE_FROM_HMODULE", Const, 0, ""},
+		{"FORMAT_MESSAGE_FROM_STRING", Const, 0, ""},
+		{"FORMAT_MESSAGE_FROM_SYSTEM", Const, 0, ""},
+		{"FORMAT_MESSAGE_IGNORE_INSERTS", Const, 0, ""},
+		{"FORMAT_MESSAGE_MAX_WIDTH_MASK", Const, 0, ""},
+		{"FSCTL_GET_REPARSE_POINT", Const, 4, ""},
+		{"F_ADDFILESIGS", Const, 0, ""},
+		{"F_ADDSIGS", Const, 0, ""},
+		{"F_ALLOCATEALL", Const, 0, ""},
+		{"F_ALLOCATECONTIG", Const, 0, ""},
+		{"F_CANCEL", Const, 0, ""},
+		{"F_CHKCLEAN", Const, 0, ""},
+		{"F_CLOSEM", Const, 1, ""},
+		{"F_DUP2FD", Const, 0, ""},
+		{"F_DUP2FD_CLOEXEC", Const, 1, ""},
+		{"F_DUPFD", Const, 0, ""},
+		{"F_DUPFD_CLOEXEC", Const, 0, ""},
+		{"F_EXLCK", Const, 0, ""},
+		{"F_FINDSIGS", Const, 16, ""},
+		{"F_FLUSH_DATA", Const, 0, ""},
+		{"F_FREEZE_FS", Const, 0, ""},
+		{"F_FSCTL", Const, 1, ""},
+		{"F_FSDIRMASK", Const, 1, ""},
+		{"F_FSIN", Const, 1, ""},
+		{"F_FSINOUT", Const, 1, ""},
+		{"F_FSOUT", Const, 1, ""},
+		{"F_FSPRIV", Const, 1, ""},
+		{"F_FSVOID", Const, 1, ""},
+		{"F_FULLFSYNC", Const, 0, ""},
+		{"F_GETCODEDIR", Const, 16, ""},
+		{"F_GETFD", Const, 0, ""},
+		{"F_GETFL", Const, 0, ""},
+		{"F_GETLEASE", Const, 0, ""},
+		{"F_GETLK", Const, 0, ""},
+		{"F_GETLK64", Const, 0, ""},
+		{"F_GETLKPID", Const, 0, ""},
+		{"F_GETNOSIGPIPE", Const, 0, ""},
+		{"F_GETOWN", Const, 0, ""},
+		{"F_GETOWN_EX", Const, 0, ""},
+		{"F_GETPATH", Const, 0, ""},
+		{"F_GETPATH_MTMINFO", Const, 0, ""},
+		{"F_GETPIPE_SZ", Const, 0, ""},
+		{"F_GETPROTECTIONCLASS", Const, 0, ""},
+		{"F_GETPROTECTIONLEVEL", Const, 16, ""},
+		{"F_GETSIG", Const, 0, ""},
+		{"F_GLOBAL_NOCACHE", Const, 0, ""},
+		{"F_LOCK", Const, 0, ""},
+		{"F_LOG2PHYS", Const, 0, ""},
+		{"F_LOG2PHYS_EXT", Const, 0, ""},
+		{"F_MARKDEPENDENCY", Const, 0, ""},
+		{"F_MAXFD", Const, 1, ""},
+		{"F_NOCACHE", Const, 0, ""},
+		{"F_NODIRECT", Const, 0, ""},
+		{"F_NOTIFY", Const, 0, ""},
+		{"F_OGETLK", Const, 0, ""},
+		{"F_OK", Const, 0, ""},
+		{"F_OSETLK", Const, 0, ""},
+		{"F_OSETLKW", Const, 0, ""},
+		{"F_PARAM_MASK", Const, 1, ""},
+		{"F_PARAM_MAX", Const, 1, ""},
+		{"F_PATHPKG_CHECK", Const, 0, ""},
+		{"F_PEOFPOSMODE", Const, 0, ""},
+		{"F_PREALLOCATE", Const, 0, ""},
+		{"F_RDADVISE", Const, 0, ""},
+		{"F_RDAHEAD", Const, 0, ""},
+		{"F_RDLCK", Const, 0, ""},
+		{"F_READAHEAD", Const, 0, ""},
+		{"F_READBOOTSTRAP", Const, 0, ""},
+		{"F_SETBACKINGSTORE", Const, 0, ""},
+		{"F_SETFD", Const, 0, ""},
+		{"F_SETFL", Const, 0, ""},
+		{"F_SETLEASE", Const, 0, ""},
+		{"F_SETLK", Const, 0, ""},
+		{"F_SETLK64", Const, 0, ""},
+		{"F_SETLKW", Const, 0, ""},
+		{"F_SETLKW64", Const, 0, ""},
+		{"F_SETLKWTIMEOUT", Const, 16, ""},
+		{"F_SETLK_REMOTE", Const, 0, ""},
+		{"F_SETNOSIGPIPE", Const, 0, ""},
+		{"F_SETOWN", Const, 0, ""},
+		{"F_SETOWN_EX", Const, 0, ""},
+		{"F_SETPIPE_SZ", Const, 0, ""},
+		{"F_SETPROTECTIONCLASS", Const, 0, ""},
+		{"F_SETSIG", Const, 0, ""},
+		{"F_SETSIZE", Const, 0, ""},
+		{"F_SHLCK", Const, 0, ""},
+		{"F_SINGLE_WRITER", Const, 16, ""},
+		{"F_TEST", Const, 0, ""},
+		{"F_THAW_FS", Const, 0, ""},
+		{"F_TLOCK", Const, 0, ""},
+		{"F_TRANSCODEKEY", Const, 16, ""},
+		{"F_ULOCK", Const, 0, ""},
+		{"F_UNLCK", Const, 0, ""},
+		{"F_UNLCKSYS", Const, 0, ""},
+		{"F_VOLPOSMODE", Const, 0, ""},
+		{"F_WRITEBOOTSTRAP", Const, 0, ""},
+		{"F_WRLCK", Const, 0, ""},
+		{"Faccessat", Func, 0, "func(dirfd int, path string, mode uint32, flags int) (err error)"},
+		{"Fallocate", Func, 0, "func(fd int, mode uint32, off int64, len int64) (err error)"},
+		{"Fbootstraptransfer_t", Type, 0, ""},
+		{"Fbootstraptransfer_t.Buffer", Field, 0, ""},
+		{"Fbootstraptransfer_t.Length", Field, 0, ""},
+		{"Fbootstraptransfer_t.Offset", Field, 0, ""},
+		{"Fchdir", Func, 0, "func(fd int) (err error)"},
+		{"Fchflags", Func, 0, ""},
+		{"Fchmod", Func, 0, "func(fd int, mode uint32) (err error)"},
+		{"Fchmodat", Func, 0, "func(dirfd int, path string, mode uint32, flags int) error"},
+		{"Fchown", Func, 0, "func(fd int, uid int, gid int) (err error)"},
+		{"Fchownat", Func, 0, "func(dirfd int, path string, uid int, gid int, flags int) (err error)"},
+		{"FcntlFlock", Func, 3, "func(fd uintptr, cmd int, lk *Flock_t) error"},
+		{"FdSet", Type, 0, ""},
+		{"FdSet.Bits", Field, 0, ""},
+		{"FdSet.X__fds_bits", Field, 0, ""},
+		{"Fdatasync", Func, 0, "func(fd int) (err error)"},
+		{"FileNotifyInformation", Type, 0, ""},
+		{"FileNotifyInformation.Action", Field, 0, ""},
+		{"FileNotifyInformation.FileName", Field, 0, ""},
+		{"FileNotifyInformation.FileNameLength", Field, 0, ""},
+		{"FileNotifyInformation.NextEntryOffset", Field, 0, ""},
+		{"Filetime", Type, 0, ""},
+		{"Filetime.HighDateTime", Field, 0, ""},
+		{"Filetime.LowDateTime", Field, 0, ""},
+		{"FindClose", Func, 0, ""},
+		{"FindFirstFile", Func, 0, ""},
+		{"FindNextFile", Func, 0, ""},
+		{"Flock", Func, 0, "func(fd int, how int) (err error)"},
+		{"Flock_t", Type, 0, ""},
+		{"Flock_t.Len", Field, 0, ""},
+		{"Flock_t.Pad_cgo_0", Field, 0, ""},
+		{"Flock_t.Pad_cgo_1", Field, 3, ""},
+		{"Flock_t.Pid", Field, 0, ""},
+		{"Flock_t.Start", Field, 0, ""},
+		{"Flock_t.Sysid", Field, 0, ""},
+		{"Flock_t.Type", Field, 0, ""},
+		{"Flock_t.Whence", Field, 0, ""},
+		{"FlushBpf", Func, 0, ""},
+		{"FlushFileBuffers", Func, 0, ""},
+		{"FlushViewOfFile", Func, 0, ""},
+		{"ForkExec", Func, 0, "func(argv0 string, argv []string, attr *ProcAttr) (pid int, err error)"},
+		{"ForkLock", Var, 0, ""},
+		{"FormatMessage", Func, 0, ""},
+		{"Fpathconf", Func, 0, ""},
+		{"FreeAddrInfoW", Func, 1, ""},
+		{"FreeEnvironmentStrings", Func, 0, ""},
+		{"FreeLibrary", Func, 0, ""},
+		{"Fsid", Type, 0, ""},
+		{"Fsid.Val", Field, 0, ""},
+		{"Fsid.X__fsid_val", Field, 2, ""},
+		{"Fsid.X__val", Field, 0, ""},
+		{"Fstat", Func, 0, "func(fd int, stat *Stat_t) (err error)"},
+		{"Fstatat", Func, 12, ""},
+		{"Fstatfs", Func, 0, "func(fd int, buf *Statfs_t) (err error)"},
+		{"Fstore_t", Type, 0, ""},
+		{"Fstore_t.Bytesalloc", Field, 0, ""},
+		{"Fstore_t.Flags", Field, 0, ""},
+		{"Fstore_t.Length", Field, 0, ""},
+		{"Fstore_t.Offset", Field, 0, ""},
+		{"Fstore_t.Posmode", Field, 0, ""},
+		{"Fsync", Func, 0, "func(fd int) (err error)"},
+		{"Ftruncate", Func, 0, "func(fd int, length int64) (err error)"},
+		{"FullPath", Func, 4, ""},
+		{"Futimes", Func, 0, "func(fd int, tv []Timeval) (err error)"},
+		{"Futimesat", Func, 0, "func(dirfd int, path string, tv []Timeval) (err error)"},
+		{"GENERIC_ALL", Const, 0, ""},
+		{"GENERIC_EXECUTE", Const, 0, ""},
+		{"GENERIC_READ", Const, 0, ""},
+		{"GENERIC_WRITE", Const, 0, ""},
+		{"GUID", Type, 1, ""},
+		{"GUID.Data1", Field, 1, ""},
+		{"GUID.Data2", Field, 1, ""},
+		{"GUID.Data3", Field, 1, ""},
+		{"GUID.Data4", Field, 1, ""},
+		{"GetAcceptExSockaddrs", Func, 0, ""},
+		{"GetAdaptersInfo", Func, 0, ""},
+		{"GetAddrInfoW", Func, 1, ""},
+		{"GetCommandLine", Func, 0, ""},
+		{"GetComputerName", Func, 0, ""},
+		{"GetConsoleMode", Func, 1, ""},
+		{"GetCurrentDirectory", Func, 0, ""},
+		{"GetCurrentProcess", Func, 0, ""},
+		{"GetEnvironmentStrings", Func, 0, ""},
+		{"GetEnvironmentVariable", Func, 0, ""},
+		{"GetExitCodeProcess", Func, 0, ""},
+		{"GetFileAttributes", Func, 0, ""},
+		{"GetFileAttributesEx", Func, 0, ""},
+		{"GetFileExInfoStandard", Const, 0, ""},
+		{"GetFileExMaxInfoLevel", Const, 0, ""},
+		{"GetFileInformationByHandle", Func, 0, ""},
+		{"GetFileType", Func, 0, ""},
+		{"GetFullPathName", Func, 0, ""},
+		{"GetHostByName", Func, 0, ""},
+		{"GetIfEntry", Func, 0, ""},
+		{"GetLastError", Func, 0, ""},
+		{"GetLengthSid", Func, 0, ""},
+		{"GetLongPathName", Func, 0, ""},
+		{"GetProcAddress", Func, 0, ""},
+		{"GetProcessTimes", Func, 0, ""},
+		{"GetProtoByName", Func, 0, ""},
+		{"GetQueuedCompletionStatus", Func, 0, ""},
+		{"GetServByName", Func, 0, ""},
+		{"GetShortPathName", Func, 0, ""},
+		{"GetStartupInfo", Func, 0, ""},
+		{"GetStdHandle", Func, 0, ""},
+		{"GetSystemTimeAsFileTime", Func, 0, ""},
+		{"GetTempPath", Func, 0, ""},
+		{"GetTimeZoneInformation", Func, 0, ""},
+		{"GetTokenInformation", Func, 0, ""},
+		{"GetUserNameEx", Func, 0, ""},
+		{"GetUserProfileDirectory", Func, 0, ""},
+		{"GetVersion", Func, 0, ""},
+		{"Getcwd", Func, 0, "func(buf []byte) (n int, err error)"},
+		{"Getdents", Func, 0, "func(fd int, buf []byte) (n int, err error)"},
+		{"Getdirentries", Func, 0, ""},
+		{"Getdtablesize", Func, 0, ""},
+		{"Getegid", Func, 0, "func() (egid int)"},
+		{"Getenv", Func, 0, "func(key string) (value string, found bool)"},
+		{"Geteuid", Func, 0, "func() (euid int)"},
+		{"Getfsstat", Func, 0, ""},
+		{"Getgid", Func, 0, "func() (gid int)"},
+		{"Getgroups", Func, 0, "func() (gids []int, err error)"},
+		{"Getpagesize", Func, 0, "func() int"},
+		{"Getpeername", Func, 0, "func(fd int) (sa Sockaddr, err error)"},
+		{"Getpgid", Func, 0, "func(pid int) (pgid int, err error)"},
+		{"Getpgrp", Func, 0, "func() (pid int)"},
+		{"Getpid", Func, 0, "func() (pid int)"},
+		{"Getppid", Func, 0, "func() (ppid int)"},
+		{"Getpriority", Func, 0, "func(which int, who int) (prio int, err error)"},
+		{"Getrlimit", Func, 0, "func(resource int, rlim *Rlimit) (err error)"},
+		{"Getrusage", Func, 0, "func(who int, rusage *Rusage) (err error)"},
+		{"Getsid", Func, 0, ""},
+		{"Getsockname", Func, 0, "func(fd int) (sa Sockaddr, err error)"},
+		{"Getsockopt", Func, 1, ""},
+		{"GetsockoptByte", Func, 0, ""},
+		{"GetsockoptICMPv6Filter", Func, 2, "func(fd int, level int, opt int) (*ICMPv6Filter, error)"},
+		{"GetsockoptIPMreq", Func, 0, "func(fd int, level int, opt int) (*IPMreq, error)"},
+		{"GetsockoptIPMreqn", Func, 0, "func(fd int, level int, opt int) (*IPMreqn, error)"},
+		{"GetsockoptIPv6MTUInfo", Func, 2, "func(fd int, level int, opt int) (*IPv6MTUInfo, error)"},
+		{"GetsockoptIPv6Mreq", Func, 0, "func(fd int, level int, opt int) (*IPv6Mreq, error)"},
+		{"GetsockoptInet4Addr", Func, 0, "func(fd int, level int, opt int) (value [4]byte, err error)"},
+		{"GetsockoptInt", Func, 0, "func(fd int, level int, opt int) (value int, err error)"},
+		{"GetsockoptUcred", Func, 1, "func(fd int, level int, opt int) (*Ucred, error)"},
+		{"Gettid", Func, 0, "func() (tid int)"},
+		{"Gettimeofday", Func, 0, "func(tv *Timeval) (err error)"},
+		{"Getuid", Func, 0, "func() (uid int)"},
+		{"Getwd", Func, 0, "func() (wd string, err error)"},
+		{"Getxattr", Func, 1, "func(path string, attr string, dest []byte) (sz int, err error)"},
+		{"HANDLE_FLAG_INHERIT", Const, 0, ""},
+		{"HKEY_CLASSES_ROOT", Const, 0, ""},
+		{"HKEY_CURRENT_CONFIG", Const, 0, ""},
+		{"HKEY_CURRENT_USER", Const, 0, ""},
+		{"HKEY_DYN_DATA", Const, 0, ""},
+		{"HKEY_LOCAL_MACHINE", Const, 0, ""},
+		{"HKEY_PERFORMANCE_DATA", Const, 0, ""},
+		{"HKEY_USERS", Const, 0, ""},
+		{"HUPCL", Const, 0, ""},
+		{"Handle", Type, 0, ""},
+		{"Hostent", Type, 0, ""},
+		{"Hostent.AddrList", Field, 0, ""},
+		{"Hostent.AddrType", Field, 0, ""},
+		{"Hostent.Aliases", Field, 0, ""},
+		{"Hostent.Length", Field, 0, ""},
+		{"Hostent.Name", Field, 0, ""},
+		{"ICANON", Const, 0, ""},
+		{"ICMP6_FILTER", Const, 2, ""},
+		{"ICMPV6_FILTER", Const, 2, ""},
+		{"ICMPv6Filter", Type, 2, ""},
+		{"ICMPv6Filter.Data", Field, 2, ""},
+		{"ICMPv6Filter.Filt", Field, 2, ""},
+		{"ICRNL", Const, 0, ""},
+		{"IEXTEN", Const, 0, ""},
+		{"IFAN_ARRIVAL", Const, 1, ""},
+		{"IFAN_DEPARTURE", Const, 1, ""},
+		{"IFA_ADDRESS", Const, 0, ""},
+		{"IFA_ANYCAST", Const, 0, ""},
+		{"IFA_BROADCAST", Const, 0, ""},
+		{"IFA_CACHEINFO", Const, 0, ""},
+		{"IFA_F_DADFAILED", Const, 0, ""},
+		{"IFA_F_DEPRECATED", Const, 0, ""},
+		{"IFA_F_HOMEADDRESS", Const, 0, ""},
+		{"IFA_F_NODAD", Const, 0, ""},
+		{"IFA_F_OPTIMISTIC", Const, 0, ""},
+		{"IFA_F_PERMANENT", Const, 0, ""},
+		{"IFA_F_SECONDARY", Const, 0, ""},
+		{"IFA_F_TEMPORARY", Const, 0, ""},
+		{"IFA_F_TENTATIVE", Const, 0, ""},
+		{"IFA_LABEL", Const, 0, ""},
+		{"IFA_LOCAL", Const, 0, ""},
+		{"IFA_MAX", Const, 0, ""},
+		{"IFA_MULTICAST", Const, 0, ""},
+		{"IFA_ROUTE", Const, 1, ""},
+		{"IFA_UNSPEC", Const, 0, ""},
+		{"IFF_ALLMULTI", Const, 0, ""},
+		{"IFF_ALTPHYS", Const, 0, ""},
+		{"IFF_AUTOMEDIA", Const, 0, ""},
+		{"IFF_BROADCAST", Const, 0, ""},
+		{"IFF_CANTCHANGE", Const, 0, ""},
+		{"IFF_CANTCONFIG", Const, 1, ""},
+		{"IFF_DEBUG", Const, 0, ""},
+		{"IFF_DRV_OACTIVE", Const, 0, ""},
+		{"IFF_DRV_RUNNING", Const, 0, ""},
+		{"IFF_DYING", Const, 0, ""},
+		{"IFF_DYNAMIC", Const, 0, ""},
+		{"IFF_LINK0", Const, 0, ""},
+		{"IFF_LINK1", Const, 0, ""},
+		{"IFF_LINK2", Const, 0, ""},
+		{"IFF_LOOPBACK", Const, 0, ""},
+		{"IFF_MASTER", Const, 0, ""},
+		{"IFF_MONITOR", Const, 0, ""},
+		{"IFF_MULTICAST", Const, 0, ""},
+		{"IFF_NOARP", Const, 0, ""},
+		{"IFF_NOTRAILERS", Const, 0, ""},
+		{"IFF_NO_PI", Const, 0, ""},
+		{"IFF_OACTIVE", Const, 0, ""},
+		{"IFF_ONE_QUEUE", Const, 0, ""},
+		{"IFF_POINTOPOINT", Const, 0, ""},
+		{"IFF_POINTTOPOINT", Const, 0, ""},
+		{"IFF_PORTSEL", Const, 0, ""},
+		{"IFF_PPROMISC", Const, 0, ""},
+		{"IFF_PROMISC", Const, 0, ""},
+		{"IFF_RENAMING", Const, 0, ""},
+		{"IFF_RUNNING", Const, 0, ""},
+		{"IFF_SIMPLEX", Const, 0, ""},
+		{"IFF_SLAVE", Const, 0, ""},
+		{"IFF_SMART", Const, 0, ""},
+		{"IFF_STATICARP", Const, 0, ""},
+		{"IFF_TAP", Const, 0, ""},
+		{"IFF_TUN", Const, 0, ""},
+		{"IFF_TUN_EXCL", Const, 0, ""},
+		{"IFF_UP", Const, 0, ""},
+		{"IFF_VNET_HDR", Const, 0, ""},
+		{"IFLA_ADDRESS", Const, 0, ""},
+		{"IFLA_BROADCAST", Const, 0, ""},
+		{"IFLA_COST", Const, 0, ""},
+		{"IFLA_IFALIAS", Const, 0, ""},
+		{"IFLA_IFNAME", Const, 0, ""},
+		{"IFLA_LINK", Const, 0, ""},
+		{"IFLA_LINKINFO", Const, 0, ""},
+		{"IFLA_LINKMODE", Const, 0, ""},
+		{"IFLA_MAP", Const, 0, ""},
+		{"IFLA_MASTER", Const, 0, ""},
+		{"IFLA_MAX", Const, 0, ""},
+		{"IFLA_MTU", Const, 0, ""},
+		{"IFLA_NET_NS_PID", Const, 0, ""},
+		{"IFLA_OPERSTATE", Const, 0, ""},
+		{"IFLA_PRIORITY", Const, 0, ""},
+		{"IFLA_PROTINFO", Const, 0, ""},
+		{"IFLA_QDISC", Const, 0, ""},
+		{"IFLA_STATS", Const, 0, ""},
+		{"IFLA_TXQLEN", Const, 0, ""},
+		{"IFLA_UNSPEC", Const, 0, ""},
+		{"IFLA_WEIGHT", Const, 0, ""},
+		{"IFLA_WIRELESS", Const, 0, ""},
+		{"IFNAMSIZ", Const, 0, ""},
+		{"IFT_1822", Const, 0, ""},
+		{"IFT_A12MPPSWITCH", Const, 0, ""},
+		{"IFT_AAL2", Const, 0, ""},
+		{"IFT_AAL5", Const, 0, ""},
+		{"IFT_ADSL", Const, 0, ""},
+		{"IFT_AFLANE8023", Const, 0, ""},
+		{"IFT_AFLANE8025", Const, 0, ""},
+		{"IFT_ARAP", Const, 0, ""},
+		{"IFT_ARCNET", Const, 0, ""},
+		{"IFT_ARCNETPLUS", Const, 0, ""},
+		{"IFT_ASYNC", Const, 0, ""},
+		{"IFT_ATM", Const, 0, ""},
+		{"IFT_ATMDXI", Const, 0, ""},
+		{"IFT_ATMFUNI", Const, 0, ""},
+		{"IFT_ATMIMA", Const, 0, ""},
+		{"IFT_ATMLOGICAL", Const, 0, ""},
+		{"IFT_ATMRADIO", Const, 0, ""},
+		{"IFT_ATMSUBINTERFACE", Const, 0, ""},
+		{"IFT_ATMVCIENDPT", Const, 0, ""},
+		{"IFT_ATMVIRTUAL", Const, 0, ""},
+		{"IFT_BGPPOLICYACCOUNTING", Const, 0, ""},
+		{"IFT_BLUETOOTH", Const, 1, ""},
+		{"IFT_BRIDGE", Const, 0, ""},
+		{"IFT_BSC", Const, 0, ""},
+		{"IFT_CARP", Const, 0, ""},
+		{"IFT_CCTEMUL", Const, 0, ""},
+		{"IFT_CELLULAR", Const, 0, ""},
+		{"IFT_CEPT", Const, 0, ""},
+		{"IFT_CES", Const, 0, ""},
+		{"IFT_CHANNEL", Const, 0, ""},
+		{"IFT_CNR", Const, 0, ""},
+		{"IFT_COFFEE", Const, 0, ""},
+		{"IFT_COMPOSITELINK", Const, 0, ""},
+		{"IFT_DCN", Const, 0, ""},
+		{"IFT_DIGITALPOWERLINE", Const, 0, ""},
+		{"IFT_DIGITALWRAPPEROVERHEADCHANNEL", Const, 0, ""},
+		{"IFT_DLSW", Const, 0, ""},
+		{"IFT_DOCSCABLEDOWNSTREAM", Const, 0, ""},
+		{"IFT_DOCSCABLEMACLAYER", Const, 0, ""},
+		{"IFT_DOCSCABLEUPSTREAM", Const, 0, ""},
+		{"IFT_DOCSCABLEUPSTREAMCHANNEL", Const, 1, ""},
+		{"IFT_DS0", Const, 0, ""},
+		{"IFT_DS0BUNDLE", Const, 0, ""},
+		{"IFT_DS1FDL", Const, 0, ""},
+		{"IFT_DS3", Const, 0, ""},
+		{"IFT_DTM", Const, 0, ""},
+		{"IFT_DUMMY", Const, 1, ""},
+		{"IFT_DVBASILN", Const, 0, ""},
+		{"IFT_DVBASIOUT", Const, 0, ""},
+		{"IFT_DVBRCCDOWNSTREAM", Const, 0, ""},
+		{"IFT_DVBRCCMACLAYER", Const, 0, ""},
+		{"IFT_DVBRCCUPSTREAM", Const, 0, ""},
+		{"IFT_ECONET", Const, 1, ""},
+		{"IFT_ENC", Const, 0, ""},
+		{"IFT_EON", Const, 0, ""},
+		{"IFT_EPLRS", Const, 0, ""},
+		{"IFT_ESCON", Const, 0, ""},
+		{"IFT_ETHER", Const, 0, ""},
+		{"IFT_FAITH", Const, 0, ""},
+		{"IFT_FAST", Const, 0, ""},
+		{"IFT_FASTETHER", Const, 0, ""},
+		{"IFT_FASTETHERFX", Const, 0, ""},
+		{"IFT_FDDI", Const, 0, ""},
+		{"IFT_FIBRECHANNEL", Const, 0, ""},
+		{"IFT_FRAMERELAYINTERCONNECT", Const, 0, ""},
+		{"IFT_FRAMERELAYMPI", Const, 0, ""},
+		{"IFT_FRDLCIENDPT", Const, 0, ""},
+		{"IFT_FRELAY", Const, 0, ""},
+		{"IFT_FRELAYDCE", Const, 0, ""},
+		{"IFT_FRF16MFRBUNDLE", Const, 0, ""},
+		{"IFT_FRFORWARD", Const, 0, ""},
+		{"IFT_G703AT2MB", Const, 0, ""},
+		{"IFT_G703AT64K", Const, 0, ""},
+		{"IFT_GIF", Const, 0, ""},
+		{"IFT_GIGABITETHERNET", Const, 0, ""},
+		{"IFT_GR303IDT", Const, 0, ""},
+		{"IFT_GR303RDT", Const, 0, ""},
+		{"IFT_H323GATEKEEPER", Const, 0, ""},
+		{"IFT_H323PROXY", Const, 0, ""},
+		{"IFT_HDH1822", Const, 0, ""},
+		{"IFT_HDLC", Const, 0, ""},
+		{"IFT_HDSL2", Const, 0, ""},
+		{"IFT_HIPERLAN2", Const, 0, ""},
+		{"IFT_HIPPI", Const, 0, ""},
+		{"IFT_HIPPIINTERFACE", Const, 0, ""},
+		{"IFT_HOSTPAD", Const, 0, ""},
+		{"IFT_HSSI", Const, 0, ""},
+		{"IFT_HY", Const, 0, ""},
+		{"IFT_IBM370PARCHAN", Const, 0, ""},
+		{"IFT_IDSL", Const, 0, ""},
+		{"IFT_IEEE1394", Const, 0, ""},
+		{"IFT_IEEE80211", Const, 0, ""},
+		{"IFT_IEEE80212", Const, 0, ""},
+		{"IFT_IEEE8023ADLAG", Const, 0, ""},
+		{"IFT_IFGSN", Const, 0, ""},
+		{"IFT_IMT", Const, 0, ""},
+		{"IFT_INFINIBAND", Const, 1, ""},
+		{"IFT_INTERLEAVE", Const, 0, ""},
+		{"IFT_IP", Const, 0, ""},
+		{"IFT_IPFORWARD", Const, 0, ""},
+		{"IFT_IPOVERATM", Const, 0, ""},
+		{"IFT_IPOVERCDLC", Const, 0, ""},
+		{"IFT_IPOVERCLAW", Const, 0, ""},
+		{"IFT_IPSWITCH", Const, 0, ""},
+		{"IFT_IPXIP", Const, 0, ""},
+		{"IFT_ISDN", Const, 0, ""},
+		{"IFT_ISDNBASIC", Const, 0, ""},
+		{"IFT_ISDNPRIMARY", Const, 0, ""},
+		{"IFT_ISDNS", Const, 0, ""},
+		{"IFT_ISDNU", Const, 0, ""},
+		{"IFT_ISO88022LLC", Const, 0, ""},
+		{"IFT_ISO88023", Const, 0, ""},
+		{"IFT_ISO88024", Const, 0, ""},
+		{"IFT_ISO88025", Const, 0, ""},
+		{"IFT_ISO88025CRFPINT", Const, 0, ""},
+		{"IFT_ISO88025DTR", Const, 0, ""},
+		{"IFT_ISO88025FIBER", Const, 0, ""},
+		{"IFT_ISO88026", Const, 0, ""},
+		{"IFT_ISUP", Const, 0, ""},
+		{"IFT_L2VLAN", Const, 0, ""},
+		{"IFT_L3IPVLAN", Const, 0, ""},
+		{"IFT_L3IPXVLAN", Const, 0, ""},
+		{"IFT_LAPB", Const, 0, ""},
+		{"IFT_LAPD", Const, 0, ""},
+		{"IFT_LAPF", Const, 0, ""},
+		{"IFT_LINEGROUP", Const, 1, ""},
+		{"IFT_LOCALTALK", Const, 0, ""},
+		{"IFT_LOOP", Const, 0, ""},
+		{"IFT_MEDIAMAILOVERIP", Const, 0, ""},
+		{"IFT_MFSIGLINK", Const, 0, ""},
+		{"IFT_MIOX25", Const, 0, ""},
+		{"IFT_MODEM", Const, 0, ""},
+		{"IFT_MPC", Const, 0, ""},
+		{"IFT_MPLS", Const, 0, ""},
+		{"IFT_MPLSTUNNEL", Const, 0, ""},
+		{"IFT_MSDSL", Const, 0, ""},
+		{"IFT_MVL", Const, 0, ""},
+		{"IFT_MYRINET", Const, 0, ""},
+		{"IFT_NFAS", Const, 0, ""},
+		{"IFT_NSIP", Const, 0, ""},
+		{"IFT_OPTICALCHANNEL", Const, 0, ""},
+		{"IFT_OPTICALTRANSPORT", Const, 0, ""},
+		{"IFT_OTHER", Const, 0, ""},
+		{"IFT_P10", Const, 0, ""},
+		{"IFT_P80", Const, 0, ""},
+		{"IFT_PARA", Const, 0, ""},
+		{"IFT_PDP", Const, 0, ""},
+		{"IFT_PFLOG", Const, 0, ""},
+		{"IFT_PFLOW", Const, 1, ""},
+		{"IFT_PFSYNC", Const, 0, ""},
+		{"IFT_PLC", Const, 0, ""},
+		{"IFT_PON155", Const, 1, ""},
+		{"IFT_PON622", Const, 1, ""},
+		{"IFT_POS", Const, 0, ""},
+		{"IFT_PPP", Const, 0, ""},
+		{"IFT_PPPMULTILINKBUNDLE", Const, 0, ""},
+		{"IFT_PROPATM", Const, 1, ""},
+		{"IFT_PROPBWAP2MP", Const, 0, ""},
+		{"IFT_PROPCNLS", Const, 0, ""},
+		{"IFT_PROPDOCSWIRELESSDOWNSTREAM", Const, 0, ""},
+		{"IFT_PROPDOCSWIRELESSMACLAYER", Const, 0, ""},
+		{"IFT_PROPDOCSWIRELESSUPSTREAM", Const, 0, ""},
+		{"IFT_PROPMUX", Const, 0, ""},
+		{"IFT_PROPVIRTUAL", Const, 0, ""},
+		{"IFT_PROPWIRELESSP2P", Const, 0, ""},
+		{"IFT_PTPSERIAL", Const, 0, ""},
+		{"IFT_PVC", Const, 0, ""},
+		{"IFT_Q2931", Const, 1, ""},
+		{"IFT_QLLC", Const, 0, ""},
+		{"IFT_RADIOMAC", Const, 0, ""},
+		{"IFT_RADSL", Const, 0, ""},
+		{"IFT_REACHDSL", Const, 0, ""},
+		{"IFT_RFC1483", Const, 0, ""},
+		{"IFT_RS232", Const, 0, ""},
+		{"IFT_RSRB", Const, 0, ""},
+		{"IFT_SDLC", Const, 0, ""},
+		{"IFT_SDSL", Const, 0, ""},
+		{"IFT_SHDSL", Const, 0, ""},
+		{"IFT_SIP", Const, 0, ""},
+		{"IFT_SIPSIG", Const, 1, ""},
+		{"IFT_SIPTG", Const, 1, ""},
+		{"IFT_SLIP", Const, 0, ""},
+		{"IFT_SMDSDXI", Const, 0, ""},
+		{"IFT_SMDSICIP", Const, 0, ""},
+		{"IFT_SONET", Const, 0, ""},
+		{"IFT_SONETOVERHEADCHANNEL", Const, 0, ""},
+		{"IFT_SONETPATH", Const, 0, ""},
+		{"IFT_SONETVT", Const, 0, ""},
+		{"IFT_SRP", Const, 0, ""},
+		{"IFT_SS7SIGLINK", Const, 0, ""},
+		{"IFT_STACKTOSTACK", Const, 0, ""},
+		{"IFT_STARLAN", Const, 0, ""},
+		{"IFT_STF", Const, 0, ""},
+		{"IFT_T1", Const, 0, ""},
+		{"IFT_TDLC", Const, 0, ""},
+		{"IFT_TELINK", Const, 1, ""},
+		{"IFT_TERMPAD", Const, 0, ""},
+		{"IFT_TR008", Const, 0, ""},
+		{"IFT_TRANSPHDLC", Const, 0, ""},
+		{"IFT_TUNNEL", Const, 0, ""},
+		{"IFT_ULTRA", Const, 0, ""},
+		{"IFT_USB", Const, 0, ""},
+		{"IFT_V11", Const, 0, ""},
+		{"IFT_V35", Const, 0, ""},
+		{"IFT_V36", Const, 0, ""},
+		{"IFT_V37", Const, 0, ""},
+		{"IFT_VDSL", Const, 0, ""},
+		{"IFT_VIRTUALIPADDRESS", Const, 0, ""},
+		{"IFT_VIRTUALTG", Const, 1, ""},
+		{"IFT_VOICEDID", Const, 1, ""},
+		{"IFT_VOICEEM", Const, 0, ""},
+		{"IFT_VOICEEMFGD", Const, 1, ""},
+		{"IFT_VOICEENCAP", Const, 0, ""},
+		{"IFT_VOICEFGDEANA", Const, 1, ""},
+		{"IFT_VOICEFXO", Const, 0, ""},
+		{"IFT_VOICEFXS", Const, 0, ""},
+		{"IFT_VOICEOVERATM", Const, 0, ""},
+		{"IFT_VOICEOVERCABLE", Const, 1, ""},
+		{"IFT_VOICEOVERFRAMERELAY", Const, 0, ""},
+		{"IFT_VOICEOVERIP", Const, 0, ""},
+		{"IFT_X213", Const, 0, ""},
+		{"IFT_X25", Const, 0, ""},
+		{"IFT_X25DDN", Const, 0, ""},
+		{"IFT_X25HUNTGROUP", Const, 0, ""},
+		{"IFT_X25MLP", Const, 0, ""},
+		{"IFT_X25PLE", Const, 0, ""},
+		{"IFT_XETHER", Const, 0, ""},
+		{"IGNBRK", Const, 0, ""},
+		{"IGNCR", Const, 0, ""},
+		{"IGNORE", Const, 0, ""},
+		{"IGNPAR", Const, 0, ""},
+		{"IMAXBEL", Const, 0, ""},
+		{"INFINITE", Const, 0, ""},
+		{"INLCR", Const, 0, ""},
+		{"INPCK", Const, 0, ""},
+		{"INVALID_FILE_ATTRIBUTES", Const, 0, ""},
+		{"IN_ACCESS", Const, 0, ""},
+		{"IN_ALL_EVENTS", Const, 0, ""},
+		{"IN_ATTRIB", Const, 0, ""},
+		{"IN_CLASSA_HOST", Const, 0, ""},
+		{"IN_CLASSA_MAX", Const, 0, ""},
+		{"IN_CLASSA_NET", Const, 0, ""},
+		{"IN_CLASSA_NSHIFT", Const, 0, ""},
+		{"IN_CLASSB_HOST", Const, 0, ""},
+		{"IN_CLASSB_MAX", Const, 0, ""},
+		{"IN_CLASSB_NET", Const, 0, ""},
+		{"IN_CLASSB_NSHIFT", Const, 0, ""},
+		{"IN_CLASSC_HOST", Const, 0, ""},
+		{"IN_CLASSC_NET", Const, 0, ""},
+		{"IN_CLASSC_NSHIFT", Const, 0, ""},
+		{"IN_CLASSD_HOST", Const, 0, ""},
+		{"IN_CLASSD_NET", Const, 0, ""},
+		{"IN_CLASSD_NSHIFT", Const, 0, ""},
+		{"IN_CLOEXEC", Const, 0, ""},
+		{"IN_CLOSE", Const, 0, ""},
+		{"IN_CLOSE_NOWRITE", Const, 0, ""},
+		{"IN_CLOSE_WRITE", Const, 0, ""},
+		{"IN_CREATE", Const, 0, ""},
+		{"IN_DELETE", Const, 0, ""},
+		{"IN_DELETE_SELF", Const, 0, ""},
+		{"IN_DONT_FOLLOW", Const, 0, ""},
+		{"IN_EXCL_UNLINK", Const, 0, ""},
+		{"IN_IGNORED", Const, 0, ""},
+		{"IN_ISDIR", Const, 0, ""},
+		{"IN_LINKLOCALNETNUM", Const, 0, ""},
+		{"IN_LOOPBACKNET", Const, 0, ""},
+		{"IN_MASK_ADD", Const, 0, ""},
+		{"IN_MODIFY", Const, 0, ""},
+		{"IN_MOVE", Const, 0, ""},
+		{"IN_MOVED_FROM", Const, 0, ""},
+		{"IN_MOVED_TO", Const, 0, ""},
+		{"IN_MOVE_SELF", Const, 0, ""},
+		{"IN_NONBLOCK", Const, 0, ""},
+		{"IN_ONESHOT", Const, 0, ""},
+		{"IN_ONLYDIR", Const, 0, ""},
+		{"IN_OPEN", Const, 0, ""},
+		{"IN_Q_OVERFLOW", Const, 0, ""},
+		{"IN_RFC3021_HOST", Const, 1, ""},
+		{"IN_RFC3021_MASK", Const, 1, ""},
+		{"IN_RFC3021_NET", Const, 1, ""},
+		{"IN_RFC3021_NSHIFT", Const, 1, ""},
+		{"IN_UNMOUNT", Const, 0, ""},
+		{"IOC_IN", Const, 1, ""},
+		{"IOC_INOUT", Const, 1, ""},
+		{"IOC_OUT", Const, 1, ""},
+		{"IOC_VENDOR", Const, 3, ""},
+		{"IOC_WS2", Const, 1, ""},
+		{"IO_REPARSE_TAG_SYMLINK", Const, 4, ""},
+		{"IPMreq", Type, 0, ""},
+		{"IPMreq.Interface", Field, 0, ""},
+		{"IPMreq.Multiaddr", Field, 0, ""},
+		{"IPMreqn", Type, 0, ""},
+		{"IPMreqn.Address", Field, 0, ""},
+		{"IPMreqn.Ifindex", Field, 0, ""},
+		{"IPMreqn.Multiaddr", Field, 0, ""},
+		{"IPPROTO_3PC", Const, 0, ""},
+		{"IPPROTO_ADFS", Const, 0, ""},
+		{"IPPROTO_AH", Const, 0, ""},
+		{"IPPROTO_AHIP", Const, 0, ""},
+		{"IPPROTO_APES", Const, 0, ""},
+		{"IPPROTO_ARGUS", Const, 0, ""},
+		{"IPPROTO_AX25", Const, 0, ""},
+		{"IPPROTO_BHA", Const, 0, ""},
+		{"IPPROTO_BLT", Const, 0, ""},
+		{"IPPROTO_BRSATMON", Const, 0, ""},
+		{"IPPROTO_CARP", Const, 0, ""},
+		{"IPPROTO_CFTP", Const, 0, ""},
+		{"IPPROTO_CHAOS", Const, 0, ""},
+		{"IPPROTO_CMTP", Const, 0, ""},
+		{"IPPROTO_COMP", Const, 0, ""},
+		{"IPPROTO_CPHB", Const, 0, ""},
+		{"IPPROTO_CPNX", Const, 0, ""},
+		{"IPPROTO_DCCP", Const, 0, ""},
+		{"IPPROTO_DDP", Const, 0, ""},
+		{"IPPROTO_DGP", Const, 0, ""},
+		{"IPPROTO_DIVERT", Const, 0, ""},
+		{"IPPROTO_DIVERT_INIT", Const, 3, ""},
+		{"IPPROTO_DIVERT_RESP", Const, 3, ""},
+		{"IPPROTO_DONE", Const, 0, ""},
+		{"IPPROTO_DSTOPTS", Const, 0, ""},
+		{"IPPROTO_EGP", Const, 0, ""},
+		{"IPPROTO_EMCON", Const, 0, ""},
+		{"IPPROTO_ENCAP", Const, 0, ""},
+		{"IPPROTO_EON", Const, 0, ""},
+		{"IPPROTO_ESP", Const, 0, ""},
+		{"IPPROTO_ETHERIP", Const, 0, ""},
+		{"IPPROTO_FRAGMENT", Const, 0, ""},
+		{"IPPROTO_GGP", Const, 0, ""},
+		{"IPPROTO_GMTP", Const, 0, ""},
+		{"IPPROTO_GRE", Const, 0, ""},
+		{"IPPROTO_HELLO", Const, 0, ""},
+		{"IPPROTO_HMP", Const, 0, ""},
+		{"IPPROTO_HOPOPTS", Const, 0, ""},
+		{"IPPROTO_ICMP", Const, 0, ""},
+		{"IPPROTO_ICMPV6", Const, 0, ""},
+		{"IPPROTO_IDP", Const, 0, ""},
+		{"IPPROTO_IDPR", Const, 0, ""},
+		{"IPPROTO_IDRP", Const, 0, ""},
+		{"IPPROTO_IGMP", Const, 0, ""},
+		{"IPPROTO_IGP", Const, 0, ""},
+		{"IPPROTO_IGRP", Const, 0, ""},
+		{"IPPROTO_IL", Const, 0, ""},
+		{"IPPROTO_INLSP", Const, 0, ""},
+		{"IPPROTO_INP", Const, 0, ""},
+		{"IPPROTO_IP", Const, 0, ""},
+		{"IPPROTO_IPCOMP", Const, 0, ""},
+		{"IPPROTO_IPCV", Const, 0, ""},
+		{"IPPROTO_IPEIP", Const, 0, ""},
+		{"IPPROTO_IPIP", Const, 0, ""},
+		{"IPPROTO_IPPC", Const, 0, ""},
+		{"IPPROTO_IPV4", Const, 0, ""},
+		{"IPPROTO_IPV6", Const, 0, ""},
+		{"IPPROTO_IPV6_ICMP", Const, 1, ""},
+		{"IPPROTO_IRTP", Const, 0, ""},
+		{"IPPROTO_KRYPTOLAN", Const, 0, ""},
+		{"IPPROTO_LARP", Const, 0, ""},
+		{"IPPROTO_LEAF1", Const, 0, ""},
+		{"IPPROTO_LEAF2", Const, 0, ""},
+		{"IPPROTO_MAX", Const, 0, ""},
+		{"IPPROTO_MAXID", Const, 0, ""},
+		{"IPPROTO_MEAS", Const, 0, ""},
+		{"IPPROTO_MH", Const, 1, ""},
+		{"IPPROTO_MHRP", Const, 0, ""},
+		{"IPPROTO_MICP", Const, 0, ""},
+		{"IPPROTO_MOBILE", Const, 0, ""},
+		{"IPPROTO_MPLS", Const, 1, ""},
+		{"IPPROTO_MTP", Const, 0, ""},
+		{"IPPROTO_MUX", Const, 0, ""},
+		{"IPPROTO_ND", Const, 0, ""},
+		{"IPPROTO_NHRP", Const, 0, ""},
+		{"IPPROTO_NONE", Const, 0, ""},
+		{"IPPROTO_NSP", Const, 0, ""},
+		{"IPPROTO_NVPII", Const, 0, ""},
+		{"IPPROTO_OLD_DIVERT", Const, 0, ""},
+		{"IPPROTO_OSPFIGP", Const, 0, ""},
+		{"IPPROTO_PFSYNC", Const, 0, ""},
+		{"IPPROTO_PGM", Const, 0, ""},
+		{"IPPROTO_PIGP", Const, 0, ""},
+		{"IPPROTO_PIM", Const, 0, ""},
+		{"IPPROTO_PRM", Const, 0, ""},
+		{"IPPROTO_PUP", Const, 0, ""},
+		{"IPPROTO_PVP", Const, 0, ""},
+		{"IPPROTO_RAW", Const, 0, ""},
+		{"IPPROTO_RCCMON", Const, 0, ""},
+		{"IPPROTO_RDP", Const, 0, ""},
+		{"IPPROTO_ROUTING", Const, 0, ""},
+		{"IPPROTO_RSVP", Const, 0, ""},
+		{"IPPROTO_RVD", Const, 0, ""},
+		{"IPPROTO_SATEXPAK", Const, 0, ""},
+		{"IPPROTO_SATMON", Const, 0, ""},
+		{"IPPROTO_SCCSP", Const, 0, ""},
+		{"IPPROTO_SCTP", Const, 0, ""},
+		{"IPPROTO_SDRP", Const, 0, ""},
+		{"IPPROTO_SEND", Const, 1, ""},
+		{"IPPROTO_SEP", Const, 0, ""},
+		{"IPPROTO_SKIP", Const, 0, ""},
+		{"IPPROTO_SPACER", Const, 0, ""},
+		{"IPPROTO_SRPC", Const, 0, ""},
+		{"IPPROTO_ST", Const, 0, ""},
+		{"IPPROTO_SVMTP", Const, 0, ""},
+		{"IPPROTO_SWIPE", Const, 0, ""},
+		{"IPPROTO_TCF", Const, 0, ""},
+		{"IPPROTO_TCP", Const, 0, ""},
+		{"IPPROTO_TLSP", Const, 0, ""},
+		{"IPPROTO_TP", Const, 0, ""},
+		{"IPPROTO_TPXX", Const, 0, ""},
+		{"IPPROTO_TRUNK1", Const, 0, ""},
+		{"IPPROTO_TRUNK2", Const, 0, ""},
+		{"IPPROTO_TTP", Const, 0, ""},
+		{"IPPROTO_UDP", Const, 0, ""},
+		{"IPPROTO_UDPLITE", Const, 0, ""},
+		{"IPPROTO_VINES", Const, 0, ""},
+		{"IPPROTO_VISA", Const, 0, ""},
+		{"IPPROTO_VMTP", Const, 0, ""},
+		{"IPPROTO_VRRP", Const, 1, ""},
+		{"IPPROTO_WBEXPAK", Const, 0, ""},
+		{"IPPROTO_WBMON", Const, 0, ""},
+		{"IPPROTO_WSN", Const, 0, ""},
+		{"IPPROTO_XNET", Const, 0, ""},
+		{"IPPROTO_XTP", Const, 0, ""},
+		{"IPV6_2292DSTOPTS", Const, 0, ""},
+		{"IPV6_2292HOPLIMIT", Const, 0, ""},
+		{"IPV6_2292HOPOPTS", Const, 0, ""},
+		{"IPV6_2292NEXTHOP", Const, 0, ""},
+		{"IPV6_2292PKTINFO", Const, 0, ""},
+		{"IPV6_2292PKTOPTIONS", Const, 0, ""},
+		{"IPV6_2292RTHDR", Const, 0, ""},
+		{"IPV6_ADDRFORM", Const, 0, ""},
+		{"IPV6_ADD_MEMBERSHIP", Const, 0, ""},
+		{"IPV6_AUTHHDR", Const, 0, ""},
+		{"IPV6_AUTH_LEVEL", Const, 1, ""},
+		{"IPV6_AUTOFLOWLABEL", Const, 0, ""},
+		{"IPV6_BINDANY", Const, 0, ""},
+		{"IPV6_BINDV6ONLY", Const, 0, ""},
+		{"IPV6_BOUND_IF", Const, 0, ""},
+		{"IPV6_CHECKSUM", Const, 0, ""},
+		{"IPV6_DEFAULT_MULTICAST_HOPS", Const, 0, ""},
+		{"IPV6_DEFAULT_MULTICAST_LOOP", Const, 0, ""},
+		{"IPV6_DEFHLIM", Const, 0, ""},
+		{"IPV6_DONTFRAG", Const, 0, ""},
+		{"IPV6_DROP_MEMBERSHIP", Const, 0, ""},
+		{"IPV6_DSTOPTS", Const, 0, ""},
+		{"IPV6_ESP_NETWORK_LEVEL", Const, 1, ""},
+		{"IPV6_ESP_TRANS_LEVEL", Const, 1, ""},
+		{"IPV6_FAITH", Const, 0, ""},
+		{"IPV6_FLOWINFO_MASK", Const, 0, ""},
+		{"IPV6_FLOWLABEL_MASK", Const, 0, ""},
+		{"IPV6_FRAGTTL", Const, 0, ""},
+		{"IPV6_FW_ADD", Const, 0, ""},
+		{"IPV6_FW_DEL", Const, 0, ""},
+		{"IPV6_FW_FLUSH", Const, 0, ""},
+		{"IPV6_FW_GET", Const, 0, ""},
+		{"IPV6_FW_ZERO", Const, 0, ""},
+		{"IPV6_HLIMDEC", Const, 0, ""},
+		{"IPV6_HOPLIMIT", Const, 0, ""},
+		{"IPV6_HOPOPTS", Const, 0, ""},
+		{"IPV6_IPCOMP_LEVEL", Const, 1, ""},
+		{"IPV6_IPSEC_POLICY", Const, 0, ""},
+		{"IPV6_JOIN_ANYCAST", Const, 0, ""},
+		{"IPV6_JOIN_GROUP", Const, 0, ""},
+		{"IPV6_LEAVE_ANYCAST", Const, 0, ""},
+		{"IPV6_LEAVE_GROUP", Const, 0, ""},
+		{"IPV6_MAXHLIM", Const, 0, ""},
+		{"IPV6_MAXOPTHDR", Const, 0, ""},
+		{"IPV6_MAXPACKET", Const, 0, ""},
+		{"IPV6_MAX_GROUP_SRC_FILTER", Const, 0, ""},
+		{"IPV6_MAX_MEMBERSHIPS", Const, 0, ""},
+		{"IPV6_MAX_SOCK_SRC_FILTER", Const, 0, ""},
+		{"IPV6_MIN_MEMBERSHIPS", Const, 0, ""},
+		{"IPV6_MMTU", Const, 0, ""},
+		{"IPV6_MSFILTER", Const, 0, ""},
+		{"IPV6_MTU", Const, 0, ""},
+		{"IPV6_MTU_DISCOVER", Const, 0, ""},
+		{"IPV6_MULTICAST_HOPS", Const, 0, ""},
+		{"IPV6_MULTICAST_IF", Const, 0, ""},
+		{"IPV6_MULTICAST_LOOP", Const, 0, ""},
+		{"IPV6_NEXTHOP", Const, 0, ""},
+		{"IPV6_OPTIONS", Const, 1, ""},
+		{"IPV6_PATHMTU", Const, 0, ""},
+		{"IPV6_PIPEX", Const, 1, ""},
+		{"IPV6_PKTINFO", Const, 0, ""},
+		{"IPV6_PMTUDISC_DO", Const, 0, ""},
+		{"IPV6_PMTUDISC_DONT", Const, 0, ""},
+		{"IPV6_PMTUDISC_PROBE", Const, 0, ""},
+		{"IPV6_PMTUDISC_WANT", Const, 0, ""},
+		{"IPV6_PORTRANGE", Const, 0, ""},
+		{"IPV6_PORTRANGE_DEFAULT", Const, 0, ""},
+		{"IPV6_PORTRANGE_HIGH", Const, 0, ""},
+		{"IPV6_PORTRANGE_LOW", Const, 0, ""},
+		{"IPV6_PREFER_TEMPADDR", Const, 0, ""},
+		{"IPV6_RECVDSTOPTS", Const, 0, ""},
+		{"IPV6_RECVDSTPORT", Const, 3, ""},
+		{"IPV6_RECVERR", Const, 0, ""},
+		{"IPV6_RECVHOPLIMIT", Const, 0, ""},
+		{"IPV6_RECVHOPOPTS", Const, 0, ""},
+		{"IPV6_RECVPATHMTU", Const, 0, ""},
+		{"IPV6_RECVPKTINFO", Const, 0, ""},
+		{"IPV6_RECVRTHDR", Const, 0, ""},
+		{"IPV6_RECVTCLASS", Const, 0, ""},
+		{"IPV6_ROUTER_ALERT", Const, 0, ""},
+		{"IPV6_RTABLE", Const, 1, ""},
+		{"IPV6_RTHDR", Const, 0, ""},
+		{"IPV6_RTHDRDSTOPTS", Const, 0, ""},
+		{"IPV6_RTHDR_LOOSE", Const, 0, ""},
+		{"IPV6_RTHDR_STRICT", Const, 0, ""},
+		{"IPV6_RTHDR_TYPE_0", Const, 0, ""},
+		{"IPV6_RXDSTOPTS", Const, 0, ""},
+		{"IPV6_RXHOPOPTS", Const, 0, ""},
+		{"IPV6_SOCKOPT_RESERVED1", Const, 0, ""},
+		{"IPV6_TCLASS", Const, 0, ""},
+		{"IPV6_UNICAST_HOPS", Const, 0, ""},
+		{"IPV6_USE_MIN_MTU", Const, 0, ""},
+		{"IPV6_V6ONLY", Const, 0, ""},
+		{"IPV6_VERSION", Const, 0, ""},
+		{"IPV6_VERSION_MASK", Const, 0, ""},
+		{"IPV6_XFRM_POLICY", Const, 0, ""},
+		{"IP_ADD_MEMBERSHIP", Const, 0, ""},
+		{"IP_ADD_SOURCE_MEMBERSHIP", Const, 0, ""},
+		{"IP_AUTH_LEVEL", Const, 1, ""},
+		{"IP_BINDANY", Const, 0, ""},
+		{"IP_BLOCK_SOURCE", Const, 0, ""},
+		{"IP_BOUND_IF", Const, 0, ""},
+		{"IP_DEFAULT_MULTICAST_LOOP", Const, 0, ""},
+		{"IP_DEFAULT_MULTICAST_TTL", Const, 0, ""},
+		{"IP_DF", Const, 0, ""},
+		{"IP_DIVERTFL", Const, 3, ""},
+		{"IP_DONTFRAG", Const, 0, ""},
+		{"IP_DROP_MEMBERSHIP", Const, 0, ""},
+		{"IP_DROP_SOURCE_MEMBERSHIP", Const, 0, ""},
+		{"IP_DUMMYNET3", Const, 0, ""},
+		{"IP_DUMMYNET_CONFIGURE", Const, 0, ""},
+		{"IP_DUMMYNET_DEL", Const, 0, ""},
+		{"IP_DUMMYNET_FLUSH", Const, 0, ""},
+		{"IP_DUMMYNET_GET", Const, 0, ""},
+		{"IP_EF", Const, 1, ""},
+		{"IP_ERRORMTU", Const, 1, ""},
+		{"IP_ESP_NETWORK_LEVEL", Const, 1, ""},
+		{"IP_ESP_TRANS_LEVEL", Const, 1, ""},
+		{"IP_FAITH", Const, 0, ""},
+		{"IP_FREEBIND", Const, 0, ""},
+		{"IP_FW3", Const, 0, ""},
+		{"IP_FW_ADD", Const, 0, ""},
+		{"IP_FW_DEL", Const, 0, ""},
+		{"IP_FW_FLUSH", Const, 0, ""},
+		{"IP_FW_GET", Const, 0, ""},
+		{"IP_FW_NAT_CFG", Const, 0, ""},
+		{"IP_FW_NAT_DEL", Const, 0, ""},
+		{"IP_FW_NAT_GET_CONFIG", Const, 0, ""},
+		{"IP_FW_NAT_GET_LOG", Const, 0, ""},
+		{"IP_FW_RESETLOG", Const, 0, ""},
+		{"IP_FW_TABLE_ADD", Const, 0, ""},
+		{"IP_FW_TABLE_DEL", Const, 0, ""},
+		{"IP_FW_TABLE_FLUSH", Const, 0, ""},
+		{"IP_FW_TABLE_GETSIZE", Const, 0, ""},
+		{"IP_FW_TABLE_LIST", Const, 0, ""},
+		{"IP_FW_ZERO", Const, 0, ""},
+		{"IP_HDRINCL", Const, 0, ""},
+		{"IP_IPCOMP_LEVEL", Const, 1, ""},
+		{"IP_IPSECFLOWINFO", Const, 1, ""},
+		{"IP_IPSEC_LOCAL_AUTH", Const, 1, ""},
+		{"IP_IPSEC_LOCAL_CRED", Const, 1, ""},
+		{"IP_IPSEC_LOCAL_ID", Const, 1, ""},
+		{"IP_IPSEC_POLICY", Const, 0, ""},
+		{"IP_IPSEC_REMOTE_AUTH", Const, 1, ""},
+		{"IP_IPSEC_REMOTE_CRED", Const, 1, ""},
+		{"IP_IPSEC_REMOTE_ID", Const, 1, ""},
+		{"IP_MAXPACKET", Const, 0, ""},
+		{"IP_MAX_GROUP_SRC_FILTER", Const, 0, ""},
+		{"IP_MAX_MEMBERSHIPS", Const, 0, ""},
+		{"IP_MAX_SOCK_MUTE_FILTER", Const, 0, ""},
+		{"IP_MAX_SOCK_SRC_FILTER", Const, 0, ""},
+		{"IP_MAX_SOURCE_FILTER", Const, 0, ""},
+		{"IP_MF", Const, 0, ""},
+		{"IP_MINFRAGSIZE", Const, 1, ""},
+		{"IP_MINTTL", Const, 0, ""},
+		{"IP_MIN_MEMBERSHIPS", Const, 0, ""},
+		{"IP_MSFILTER", Const, 0, ""},
+		{"IP_MSS", Const, 0, ""},
+		{"IP_MTU", Const, 0, ""},
+		{"IP_MTU_DISCOVER", Const, 0, ""},
+		{"IP_MULTICAST_IF", Const, 0, ""},
+		{"IP_MULTICAST_IFINDEX", Const, 0, ""},
+		{"IP_MULTICAST_LOOP", Const, 0, ""},
+		{"IP_MULTICAST_TTL", Const, 0, ""},
+		{"IP_MULTICAST_VIF", Const, 0, ""},
+		{"IP_NAT__XXX", Const, 0, ""},
+		{"IP_OFFMASK", Const, 0, ""},
+		{"IP_OLD_FW_ADD", Const, 0, ""},
+		{"IP_OLD_FW_DEL", Const, 0, ""},
+		{"IP_OLD_FW_FLUSH", Const, 0, ""},
+		{"IP_OLD_FW_GET", Const, 0, ""},
+		{"IP_OLD_FW_RESETLOG", Const, 0, ""},
+		{"IP_OLD_FW_ZERO", Const, 0, ""},
+		{"IP_ONESBCAST", Const, 0, ""},
+		{"IP_OPTIONS", Const, 0, ""},
+		{"IP_ORIGDSTADDR", Const, 0, ""},
+		{"IP_PASSSEC", Const, 0, ""},
+		{"IP_PIPEX", Const, 1, ""},
+		{"IP_PKTINFO", Const, 0, ""},
+		{"IP_PKTOPTIONS", Const, 0, ""},
+		{"IP_PMTUDISC", Const, 0, ""},
+		{"IP_PMTUDISC_DO", Const, 0, ""},
+		{"IP_PMTUDISC_DONT", Const, 0, ""},
+		{"IP_PMTUDISC_PROBE", Const, 0, ""},
+		{"IP_PMTUDISC_WANT", Const, 0, ""},
+		{"IP_PORTRANGE", Const, 0, ""},
+		{"IP_PORTRANGE_DEFAULT", Const, 0, ""},
+		{"IP_PORTRANGE_HIGH", Const, 0, ""},
+		{"IP_PORTRANGE_LOW", Const, 0, ""},
+		{"IP_RECVDSTADDR", Const, 0, ""},
+		{"IP_RECVDSTPORT", Const, 1, ""},
+		{"IP_RECVERR", Const, 0, ""},
+		{"IP_RECVIF", Const, 0, ""},
+		{"IP_RECVOPTS", Const, 0, ""},
+		{"IP_RECVORIGDSTADDR", Const, 0, ""},
+		{"IP_RECVPKTINFO", Const, 0, ""},
+		{"IP_RECVRETOPTS", Const, 0, ""},
+		{"IP_RECVRTABLE", Const, 1, ""},
+		{"IP_RECVTOS", Const, 0, ""},
+		{"IP_RECVTTL", Const, 0, ""},
+		{"IP_RETOPTS", Const, 0, ""},
+		{"IP_RF", Const, 0, ""},
+		{"IP_ROUTER_ALERT", Const, 0, ""},
+		{"IP_RSVP_OFF", Const, 0, ""},
+		{"IP_RSVP_ON", Const, 0, ""},
+		{"IP_RSVP_VIF_OFF", Const, 0, ""},
+		{"IP_RSVP_VIF_ON", Const, 0, ""},
+		{"IP_RTABLE", Const, 1, ""},
+		{"IP_SENDSRCADDR", Const, 0, ""},
+		{"IP_STRIPHDR", Const, 0, ""},
+		{"IP_TOS", Const, 0, ""},
+		{"IP_TRAFFIC_MGT_BACKGROUND", Const, 0, ""},
+		{"IP_TRANSPARENT", Const, 0, ""},
+		{"IP_TTL", Const, 0, ""},
+		{"IP_UNBLOCK_SOURCE", Const, 0, ""},
+		{"IP_XFRM_POLICY", Const, 0, ""},
+		{"IPv6MTUInfo", Type, 2, ""},
+		{"IPv6MTUInfo.Addr", Field, 2, ""},
+		{"IPv6MTUInfo.Mtu", Field, 2, ""},
+		{"IPv6Mreq", Type, 0, ""},
+		{"IPv6Mreq.Interface", Field, 0, ""},
+		{"IPv6Mreq.Multiaddr", Field, 0, ""},
+		{"ISIG", Const, 0, ""},
+		{"ISTRIP", Const, 0, ""},
+		{"IUCLC", Const, 0, ""},
+		{"IUTF8", Const, 0, ""},
+		{"IXANY", Const, 0, ""},
+		{"IXOFF", Const, 0, ""},
+		{"IXON", Const, 0, ""},
+		{"IfAddrmsg", Type, 0, ""},
+		{"IfAddrmsg.Family", Field, 0, ""},
+		{"IfAddrmsg.Flags", Field, 0, ""},
+		{"IfAddrmsg.Index", Field, 0, ""},
+		{"IfAddrmsg.Prefixlen", Field, 0, ""},
+		{"IfAddrmsg.Scope", Field, 0, ""},
+		{"IfAnnounceMsghdr", Type, 1, ""},
+		{"IfAnnounceMsghdr.Hdrlen", Field, 2, ""},
+		{"IfAnnounceMsghdr.Index", Field, 1, ""},
+		{"IfAnnounceMsghdr.Msglen", Field, 1, ""},
+		{"IfAnnounceMsghdr.Name", Field, 1, ""},
+		{"IfAnnounceMsghdr.Type", Field, 1, ""},
+		{"IfAnnounceMsghdr.Version", Field, 1, ""},
+		{"IfAnnounceMsghdr.What", Field, 1, ""},
+		{"IfData", Type, 0, ""},
+		{"IfData.Addrlen", Field, 0, ""},
+		{"IfData.Baudrate", Field, 0, ""},
+		{"IfData.Capabilities", Field, 2, ""},
+		{"IfData.Collisions", Field, 0, ""},
+		{"IfData.Datalen", Field, 0, ""},
+		{"IfData.Epoch", Field, 0, ""},
+		{"IfData.Hdrlen", Field, 0, ""},
+		{"IfData.Hwassist", Field, 0, ""},
+		{"IfData.Ibytes", Field, 0, ""},
+		{"IfData.Ierrors", Field, 0, ""},
+		{"IfData.Imcasts", Field, 0, ""},
+		{"IfData.Ipackets", Field, 0, ""},
+		{"IfData.Iqdrops", Field, 0, ""},
+		{"IfData.Lastchange", Field, 0, ""},
+		{"IfData.Link_state", Field, 0, ""},
+		{"IfData.Mclpool", Field, 2, ""},
+		{"IfData.Metric", Field, 0, ""},
+		{"IfData.Mtu", Field, 0, ""},
+		{"IfData.Noproto", Field, 0, ""},
+		{"IfData.Obytes", Field, 0, ""},
+		{"IfData.Oerrors", Field, 0, ""},
+		{"IfData.Omcasts", Field, 0, ""},
+		{"IfData.Opackets", Field, 0, ""},
+		{"IfData.Pad", Field, 2, ""},
+		{"IfData.Pad_cgo_0", Field, 2, ""},
+		{"IfData.Pad_cgo_1", Field, 2, ""},
+		{"IfData.Physical", Field, 0, ""},
+		{"IfData.Recvquota", Field, 0, ""},
+		{"IfData.Recvtiming", Field, 0, ""},
+		{"IfData.Reserved1", Field, 0, ""},
+		{"IfData.Reserved2", Field, 0, ""},
+		{"IfData.Spare_char1", Field, 0, ""},
+		{"IfData.Spare_char2", Field, 0, ""},
+		{"IfData.Type", Field, 0, ""},
+		{"IfData.Typelen", Field, 0, ""},
+		{"IfData.Unused1", Field, 0, ""},
+		{"IfData.Unused2", Field, 0, ""},
+		{"IfData.Xmitquota", Field, 0, ""},
+		{"IfData.Xmittiming", Field, 0, ""},
+		{"IfInfomsg", Type, 0, ""},
+		{"IfInfomsg.Change", Field, 0, ""},
+		{"IfInfomsg.Family", Field, 0, ""},
+		{"IfInfomsg.Flags", Field, 0, ""},
+		{"IfInfomsg.Index", Field, 0, ""},
+		{"IfInfomsg.Type", Field, 0, ""},
+		{"IfInfomsg.X__ifi_pad", Field, 0, ""},
+		{"IfMsghdr", Type, 0, ""},
+		{"IfMsghdr.Addrs", Field, 0, ""},
+		{"IfMsghdr.Data", Field, 0, ""},
+		{"IfMsghdr.Flags", Field, 0, ""},
+		{"IfMsghdr.Hdrlen", Field, 2, ""},
+		{"IfMsghdr.Index", Field, 0, ""},
+		{"IfMsghdr.Msglen", Field, 0, ""},
+		{"IfMsghdr.Pad1", Field, 2, ""},
+		{"IfMsghdr.Pad2", Field, 2, ""},
+		{"IfMsghdr.Pad_cgo_0", Field, 0, ""},
+		{"IfMsghdr.Pad_cgo_1", Field, 2, ""},
+		{"IfMsghdr.Tableid", Field, 2, ""},
+		{"IfMsghdr.Type", Field, 0, ""},
+		{"IfMsghdr.Version", Field, 0, ""},
+		{"IfMsghdr.Xflags", Field, 2, ""},
+		{"IfaMsghdr", Type, 0, ""},
+		{"IfaMsghdr.Addrs", Field, 0, ""},
+		{"IfaMsghdr.Flags", Field, 0, ""},
+		{"IfaMsghdr.Hdrlen", Field, 2, ""},
+		{"IfaMsghdr.Index", Field, 0, ""},
+		{"IfaMsghdr.Metric", Field, 0, ""},
+		{"IfaMsghdr.Msglen", Field, 0, ""},
+		{"IfaMsghdr.Pad1", Field, 2, ""},
+		{"IfaMsghdr.Pad2", Field, 2, ""},
+		{"IfaMsghdr.Pad_cgo_0", Field, 0, ""},
+		{"IfaMsghdr.Tableid", Field, 2, ""},
+		{"IfaMsghdr.Type", Field, 0, ""},
+		{"IfaMsghdr.Version", Field, 0, ""},
+		{"IfmaMsghdr", Type, 0, ""},
+		{"IfmaMsghdr.Addrs", Field, 0, ""},
+		{"IfmaMsghdr.Flags", Field, 0, ""},
+		{"IfmaMsghdr.Index", Field, 0, ""},
+		{"IfmaMsghdr.Msglen", Field, 0, ""},
+		{"IfmaMsghdr.Pad_cgo_0", Field, 0, ""},
+		{"IfmaMsghdr.Type", Field, 0, ""},
+		{"IfmaMsghdr.Version", Field, 0, ""},
+		{"IfmaMsghdr2", Type, 0, ""},
+		{"IfmaMsghdr2.Addrs", Field, 0, ""},
+		{"IfmaMsghdr2.Flags", Field, 0, ""},
+		{"IfmaMsghdr2.Index", Field, 0, ""},
+		{"IfmaMsghdr2.Msglen", Field, 0, ""},
+		{"IfmaMsghdr2.Pad_cgo_0", Field, 0, ""},
+		{"IfmaMsghdr2.Refcount", Field, 0, ""},
+		{"IfmaMsghdr2.Type", Field, 0, ""},
+		{"IfmaMsghdr2.Version", Field, 0, ""},
+		{"ImplementsGetwd", Const, 0, ""},
+		{"Inet4Pktinfo", Type, 0, ""},
+		{"Inet4Pktinfo.Addr", Field, 0, ""},
+		{"Inet4Pktinfo.Ifindex", Field, 0, ""},
+		{"Inet4Pktinfo.Spec_dst", Field, 0, ""},
+		{"Inet6Pktinfo", Type, 0, ""},
+		{"Inet6Pktinfo.Addr", Field, 0, ""},
+		{"Inet6Pktinfo.Ifindex", Field, 0, ""},
+		{"InotifyAddWatch", Func, 0, "func(fd int, pathname string, mask uint32) (watchdesc int, err error)"},
+		{"InotifyEvent", Type, 0, ""},
+		{"InotifyEvent.Cookie", Field, 0, ""},
+		{"InotifyEvent.Len", Field, 0, ""},
+		{"InotifyEvent.Mask", Field, 0, ""},
+		{"InotifyEvent.Name", Field, 0, ""},
+		{"InotifyEvent.Wd", Field, 0, ""},
+		{"InotifyInit", Func, 0, "func() (fd int, err error)"},
+		{"InotifyInit1", Func, 0, "func(flags int) (fd int, err error)"},
+		{"InotifyRmWatch", Func, 0, "func(fd int, watchdesc uint32) (success int, err error)"},
+		{"InterfaceAddrMessage", Type, 0, ""},
+		{"InterfaceAddrMessage.Data", Field, 0, ""},
+		{"InterfaceAddrMessage.Header", Field, 0, ""},
+		{"InterfaceAnnounceMessage", Type, 1, ""},
+		{"InterfaceAnnounceMessage.Header", Field, 1, ""},
+		{"InterfaceInfo", Type, 0, ""},
+		{"InterfaceInfo.Address", Field, 0, ""},
+		{"InterfaceInfo.BroadcastAddress", Field, 0, ""},
+		{"InterfaceInfo.Flags", Field, 0, ""},
+		{"InterfaceInfo.Netmask", Field, 0, ""},
+		{"InterfaceMessage", Type, 0, ""},
+		{"InterfaceMessage.Data", Field, 0, ""},
+		{"InterfaceMessage.Header", Field, 0, ""},
+		{"InterfaceMulticastAddrMessage", Type, 0, ""},
+		{"InterfaceMulticastAddrMessage.Data", Field, 0, ""},
+		{"InterfaceMulticastAddrMessage.Header", Field, 0, ""},
+		{"InvalidHandle", Const, 0, ""},
+		{"Ioperm", Func, 0, "func(from int, num int, on int) (err error)"},
+		{"Iopl", Func, 0, "func(level int) (err error)"},
+		{"Iovec", Type, 0, ""},
+		{"Iovec.Base", Field, 0, ""},
+		{"Iovec.Len", Field, 0, ""},
+		{"IpAdapterInfo", Type, 0, ""},
+		{"IpAdapterInfo.AdapterName", Field, 0, ""},
+		{"IpAdapterInfo.Address", Field, 0, ""},
+		{"IpAdapterInfo.AddressLength", Field, 0, ""},
+		{"IpAdapterInfo.ComboIndex", Field, 0, ""},
+		{"IpAdapterInfo.CurrentIpAddress", Field, 0, ""},
+		{"IpAdapterInfo.Description", Field, 0, ""},
+		{"IpAdapterInfo.DhcpEnabled", Field, 0, ""},
+		{"IpAdapterInfo.DhcpServer", Field, 0, ""},
+		{"IpAdapterInfo.GatewayList", Field, 0, ""},
+		{"IpAdapterInfo.HaveWins", Field, 0, ""},
+		{"IpAdapterInfo.Index", Field, 0, ""},
+		{"IpAdapterInfo.IpAddressList", Field, 0, ""},
+		{"IpAdapterInfo.LeaseExpires", Field, 0, ""},
+		{"IpAdapterInfo.LeaseObtained", Field, 0, ""},
+		{"IpAdapterInfo.Next", Field, 0, ""},
+		{"IpAdapterInfo.PrimaryWinsServer", Field, 0, ""},
+		{"IpAdapterInfo.SecondaryWinsServer", Field, 0, ""},
+		{"IpAdapterInfo.Type", Field, 0, ""},
+		{"IpAddrString", Type, 0, ""},
+		{"IpAddrString.Context", Field, 0, ""},
+		{"IpAddrString.IpAddress", Field, 0, ""},
+		{"IpAddrString.IpMask", Field, 0, ""},
+		{"IpAddrString.Next", Field, 0, ""},
+		{"IpAddressString", Type, 0, ""},
+		{"IpAddressString.String", Field, 0, ""},
+		{"IpMaskString", Type, 0, ""},
+		{"IpMaskString.String", Field, 2, ""},
+		{"Issetugid", Func, 0, ""},
+		{"KEY_ALL_ACCESS", Const, 0, ""},
+		{"KEY_CREATE_LINK", Const, 0, ""},
+		{"KEY_CREATE_SUB_KEY", Const, 0, ""},
+		{"KEY_ENUMERATE_SUB_KEYS", Const, 0, ""},
+		{"KEY_EXECUTE", Const, 0, ""},
+		{"KEY_NOTIFY", Const, 0, ""},
+		{"KEY_QUERY_VALUE", Const, 0, ""},
+		{"KEY_READ", Const, 0, ""},
+		{"KEY_SET_VALUE", Const, 0, ""},
+		{"KEY_WOW64_32KEY", Const, 0, ""},
+		{"KEY_WOW64_64KEY", Const, 0, ""},
+		{"KEY_WRITE", Const, 0, ""},
+		{"Kevent", Func, 0, ""},
+		{"Kevent_t", Type, 0, ""},
+		{"Kevent_t.Data", Field, 0, ""},
+		{"Kevent_t.Fflags", Field, 0, ""},
+		{"Kevent_t.Filter", Field, 0, ""},
+		{"Kevent_t.Flags", Field, 0, ""},
+		{"Kevent_t.Ident", Field, 0, ""},
+		{"Kevent_t.Pad_cgo_0", Field, 2, ""},
+		{"Kevent_t.Udata", Field, 0, ""},
+		{"Kill", Func, 0, "func(pid int, sig Signal) (err error)"},
+		{"Klogctl", Func, 0, "func(typ int, buf []byte) (n int, err error)"},
+		{"Kqueue", Func, 0, ""},
+		{"LANG_ENGLISH", Const, 0, ""},
+		{"LAYERED_PROTOCOL", Const, 2, ""},
+		{"LCNT_OVERLOAD_FLUSH", Const, 1, ""},
+		{"LINUX_REBOOT_CMD_CAD_OFF", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_CAD_ON", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_HALT", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_KEXEC", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_POWER_OFF", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_RESTART", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_RESTART2", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_SW_SUSPEND", Const, 0, ""},
+		{"LINUX_REBOOT_MAGIC1", Const, 0, ""},
+		{"LINUX_REBOOT_MAGIC2", Const, 0, ""},
+		{"LOCK_EX", Const, 0, ""},
+		{"LOCK_NB", Const, 0, ""},
+		{"LOCK_SH", Const, 0, ""},
+		{"LOCK_UN", Const, 0, ""},
+		{"LazyDLL", Type, 0, ""},
+		{"LazyDLL.Name", Field, 0, ""},
+		{"LazyProc", Type, 0, ""},
+		{"LazyProc.Name", Field, 0, ""},
+		{"Lchown", Func, 0, "func(path string, uid int, gid int) (err error)"},
+		{"Linger", Type, 0, ""},
+		{"Linger.Linger", Field, 0, ""},
+		{"Linger.Onoff", Field, 0, ""},
+		{"Link", Func, 0, "func(oldpath string, newpath string) (err error)"},
+		{"Listen", Func, 0, "func(s int, n int) (err error)"},
+		{"Listxattr", Func, 1, "func(path string, dest []byte) (sz int, err error)"},
+		{"LoadCancelIoEx", Func, 1, ""},
+		{"LoadConnectEx", Func, 1, ""},
+		{"LoadCreateSymbolicLink", Func, 4, ""},
+		{"LoadDLL", Func, 0, ""},
+		{"LoadGetAddrInfo", Func, 1, ""},
+		{"LoadLibrary", Func, 0, ""},
+		{"LoadSetFileCompletionNotificationModes", Func, 2, ""},
+		{"LocalFree", Func, 0, ""},
+		{"Log2phys_t", Type, 0, ""},
+		{"Log2phys_t.Contigbytes", Field, 0, ""},
+		{"Log2phys_t.Devoffset", Field, 0, ""},
+		{"Log2phys_t.Flags", Field, 0, ""},
+		{"LookupAccountName", Func, 0, ""},
+		{"LookupAccountSid", Func, 0, ""},
+		{"LookupSID", Func, 0, ""},
+		{"LsfJump", Func, 0, "func(code int, k int, jt int, jf int) *SockFilter"},
+		{"LsfSocket", Func, 0, "func(ifindex int, proto int) (int, error)"},
+		{"LsfStmt", Func, 0, "func(code int, k int) *SockFilter"},
+		{"Lstat", Func, 0, "func(path string, stat *Stat_t) (err error)"},
+		{"MADV_AUTOSYNC", Const, 1, ""},
+		{"MADV_CAN_REUSE", Const, 0, ""},
+		{"MADV_CORE", Const, 1, ""},
+		{"MADV_DOFORK", Const, 0, ""},
+		{"MADV_DONTFORK", Const, 0, ""},
+		{"MADV_DONTNEED", Const, 0, ""},
+		{"MADV_FREE", Const, 0, ""},
+		{"MADV_FREE_REUSABLE", Const, 0, ""},
+		{"MADV_FREE_REUSE", Const, 0, ""},
+		{"MADV_HUGEPAGE", Const, 0, ""},
+		{"MADV_HWPOISON", Const, 0, ""},
+		{"MADV_MERGEABLE", Const, 0, ""},
+		{"MADV_NOCORE", Const, 1, ""},
+		{"MADV_NOHUGEPAGE", Const, 0, ""},
+		{"MADV_NORMAL", Const, 0, ""},
+		{"MADV_NOSYNC", Const, 1, ""},
+		{"MADV_PROTECT", Const, 1, ""},
+		{"MADV_RANDOM", Const, 0, ""},
+		{"MADV_REMOVE", Const, 0, ""},
+		{"MADV_SEQUENTIAL", Const, 0, ""},
+		{"MADV_SPACEAVAIL", Const, 3, ""},
+		{"MADV_UNMERGEABLE", Const, 0, ""},
+		{"MADV_WILLNEED", Const, 0, ""},
+		{"MADV_ZERO_WIRED_PAGES", Const, 0, ""},
+		{"MAP_32BIT", Const, 0, ""},
+		{"MAP_ALIGNED_SUPER", Const, 3, ""},
+		{"MAP_ALIGNMENT_16MB", Const, 3, ""},
+		{"MAP_ALIGNMENT_1TB", Const, 3, ""},
+		{"MAP_ALIGNMENT_256TB", Const, 3, ""},
+		{"MAP_ALIGNMENT_4GB", Const, 3, ""},
+		{"MAP_ALIGNMENT_64KB", Const, 3, ""},
+		{"MAP_ALIGNMENT_64PB", Const, 3, ""},
+		{"MAP_ALIGNMENT_MASK", Const, 3, ""},
+		{"MAP_ALIGNMENT_SHIFT", Const, 3, ""},
+		{"MAP_ANON", Const, 0, ""},
+		{"MAP_ANONYMOUS", Const, 0, ""},
+		{"MAP_COPY", Const, 0, ""},
+		{"MAP_DENYWRITE", Const, 0, ""},
+		{"MAP_EXECUTABLE", Const, 0, ""},
+		{"MAP_FILE", Const, 0, ""},
+		{"MAP_FIXED", Const, 0, ""},
+		{"MAP_FLAGMASK", Const, 3, ""},
+		{"MAP_GROWSDOWN", Const, 0, ""},
+		{"MAP_HASSEMAPHORE", Const, 0, ""},
+		{"MAP_HUGETLB", Const, 0, ""},
+		{"MAP_INHERIT", Const, 3, ""},
+		{"MAP_INHERIT_COPY", Const, 3, ""},
+		{"MAP_INHERIT_DEFAULT", Const, 3, ""},
+		{"MAP_INHERIT_DONATE_COPY", Const, 3, ""},
+		{"MAP_INHERIT_NONE", Const, 3, ""},
+		{"MAP_INHERIT_SHARE", Const, 3, ""},
+		{"MAP_JIT", Const, 0, ""},
+		{"MAP_LOCKED", Const, 0, ""},
+		{"MAP_NOCACHE", Const, 0, ""},
+		{"MAP_NOCORE", Const, 1, ""},
+		{"MAP_NOEXTEND", Const, 0, ""},
+		{"MAP_NONBLOCK", Const, 0, ""},
+		{"MAP_NORESERVE", Const, 0, ""},
+		{"MAP_NOSYNC", Const, 1, ""},
+		{"MAP_POPULATE", Const, 0, ""},
+		{"MAP_PREFAULT_READ", Const, 1, ""},
+		{"MAP_PRIVATE", Const, 0, ""},
+		{"MAP_RENAME", Const, 0, ""},
+		{"MAP_RESERVED0080", Const, 0, ""},
+		{"MAP_RESERVED0100", Const, 1, ""},
+		{"MAP_SHARED", Const, 0, ""},
+		{"MAP_STACK", Const, 0, ""},
+		{"MAP_TRYFIXED", Const, 3, ""},
+		{"MAP_TYPE", Const, 0, ""},
+		{"MAP_WIRED", Const, 3, ""},
+		{"MAXIMUM_REPARSE_DATA_BUFFER_SIZE", Const, 4, ""},
+		{"MAXLEN_IFDESCR", Const, 0, ""},
+		{"MAXLEN_PHYSADDR", Const, 0, ""},
+		{"MAX_ADAPTER_ADDRESS_LENGTH", Const, 0, ""},
+		{"MAX_ADAPTER_DESCRIPTION_LENGTH", Const, 0, ""},
+		{"MAX_ADAPTER_NAME_LENGTH", Const, 0, ""},
+		{"MAX_COMPUTERNAME_LENGTH", Const, 0, ""},
+		{"MAX_INTERFACE_NAME_LEN", Const, 0, ""},
+		{"MAX_LONG_PATH", Const, 0, ""},
+		{"MAX_PATH", Const, 0, ""},
+		{"MAX_PROTOCOL_CHAIN", Const, 2, ""},
+		{"MCL_CURRENT", Const, 0, ""},
+		{"MCL_FUTURE", Const, 0, ""},
+		{"MNT_DETACH", Const, 0, ""},
+		{"MNT_EXPIRE", Const, 0, ""},
+		{"MNT_FORCE", Const, 0, ""},
+		{"MSG_BCAST", Const, 1, ""},
+		{"MSG_CMSG_CLOEXEC", Const, 0, ""},
+		{"MSG_COMPAT", Const, 0, ""},
+		{"MSG_CONFIRM", Const, 0, ""},
+		{"MSG_CONTROLMBUF", Const, 1, ""},
+		{"MSG_CTRUNC", Const, 0, ""},
+		{"MSG_DONTROUTE", Const, 0, ""},
+		{"MSG_DONTWAIT", Const, 0, ""},
+		{"MSG_EOF", Const, 0, ""},
+		{"MSG_EOR", Const, 0, ""},
+		{"MSG_ERRQUEUE", Const, 0, ""},
+		{"MSG_FASTOPEN", Const, 1, ""},
+		{"MSG_FIN", Const, 0, ""},
+		{"MSG_FLUSH", Const, 0, ""},
+		{"MSG_HAVEMORE", Const, 0, ""},
+		{"MSG_HOLD", Const, 0, ""},
+		{"MSG_IOVUSRSPACE", Const, 1, ""},
+		{"MSG_LENUSRSPACE", Const, 1, ""},
+		{"MSG_MCAST", Const, 1, ""},
+		{"MSG_MORE", Const, 0, ""},
+		{"MSG_NAMEMBUF", Const, 1, ""},
+		{"MSG_NBIO", Const, 0, ""},
+		{"MSG_NEEDSA", Const, 0, ""},
+		{"MSG_NOSIGNAL", Const, 0, ""},
+		{"MSG_NOTIFICATION", Const, 0, ""},
+		{"MSG_OOB", Const, 0, ""},
+		{"MSG_PEEK", Const, 0, ""},
+		{"MSG_PROXY", Const, 0, ""},
+		{"MSG_RCVMORE", Const, 0, ""},
+		{"MSG_RST", Const, 0, ""},
+		{"MSG_SEND", Const, 0, ""},
+		{"MSG_SYN", Const, 0, ""},
+		{"MSG_TRUNC", Const, 0, ""},
+		{"MSG_TRYHARD", Const, 0, ""},
+		{"MSG_USERFLAGS", Const, 1, ""},
+		{"MSG_WAITALL", Const, 0, ""},
+		{"MSG_WAITFORONE", Const, 0, ""},
+		{"MSG_WAITSTREAM", Const, 0, ""},
+		{"MS_ACTIVE", Const, 0, ""},
+		{"MS_ASYNC", Const, 0, ""},
+		{"MS_BIND", Const, 0, ""},
+		{"MS_DEACTIVATE", Const, 0, ""},
+		{"MS_DIRSYNC", Const, 0, ""},
+		{"MS_INVALIDATE", Const, 0, ""},
+		{"MS_I_VERSION", Const, 0, ""},
+		{"MS_KERNMOUNT", Const, 0, ""},
+		{"MS_KILLPAGES", Const, 0, ""},
+		{"MS_MANDLOCK", Const, 0, ""},
+		{"MS_MGC_MSK", Const, 0, ""},
+		{"MS_MGC_VAL", Const, 0, ""},
+		{"MS_MOVE", Const, 0, ""},
+		{"MS_NOATIME", Const, 0, ""},
+		{"MS_NODEV", Const, 0, ""},
+		{"MS_NODIRATIME", Const, 0, ""},
+		{"MS_NOEXEC", Const, 0, ""},
+		{"MS_NOSUID", Const, 0, ""},
+		{"MS_NOUSER", Const, 0, ""},
+		{"MS_POSIXACL", Const, 0, ""},
+		{"MS_PRIVATE", Const, 0, ""},
+		{"MS_RDONLY", Const, 0, ""},
+		{"MS_REC", Const, 0, ""},
+		{"MS_RELATIME", Const, 0, ""},
+		{"MS_REMOUNT", Const, 0, ""},
+		{"MS_RMT_MASK", Const, 0, ""},
+		{"MS_SHARED", Const, 0, ""},
+		{"MS_SILENT", Const, 0, ""},
+		{"MS_SLAVE", Const, 0, ""},
+		{"MS_STRICTATIME", Const, 0, ""},
+		{"MS_SYNC", Const, 0, ""},
+		{"MS_SYNCHRONOUS", Const, 0, ""},
+		{"MS_UNBINDABLE", Const, 0, ""},
+		{"Madvise", Func, 0, "func(b []byte, advice int) (err error)"},
+		{"MapViewOfFile", Func, 0, ""},
+		{"MaxTokenInfoClass", Const, 0, ""},
+		{"Mclpool", Type, 2, ""},
+		{"Mclpool.Alive", Field, 2, ""},
+		{"Mclpool.Cwm", Field, 2, ""},
+		{"Mclpool.Grown", Field, 2, ""},
+		{"Mclpool.Hwm", Field, 2, ""},
+		{"Mclpool.Lwm", Field, 2, ""},
+		{"MibIfRow", Type, 0, ""},
+		{"MibIfRow.AdminStatus", Field, 0, ""},
+		{"MibIfRow.Descr", Field, 0, ""},
+		{"MibIfRow.DescrLen", Field, 0, ""},
+		{"MibIfRow.InDiscards", Field, 0, ""},
+		{"MibIfRow.InErrors", Field, 0, ""},
+		{"MibIfRow.InNUcastPkts", Field, 0, ""},
+		{"MibIfRow.InOctets", Field, 0, ""},
+		{"MibIfRow.InUcastPkts", Field, 0, ""},
+		{"MibIfRow.InUnknownProtos", Field, 0, ""},
+		{"MibIfRow.Index", Field, 0, ""},
+		{"MibIfRow.LastChange", Field, 0, ""},
+		{"MibIfRow.Mtu", Field, 0, ""},
+		{"MibIfRow.Name", Field, 0, ""},
+		{"MibIfRow.OperStatus", Field, 0, ""},
+		{"MibIfRow.OutDiscards", Field, 0, ""},
+		{"MibIfRow.OutErrors", Field, 0, ""},
+		{"MibIfRow.OutNUcastPkts", Field, 0, ""},
+		{"MibIfRow.OutOctets", Field, 0, ""},
+		{"MibIfRow.OutQLen", Field, 0, ""},
+		{"MibIfRow.OutUcastPkts", Field, 0, ""},
+		{"MibIfRow.PhysAddr", Field, 0, ""},
+		{"MibIfRow.PhysAddrLen", Field, 0, ""},
+		{"MibIfRow.Speed", Field, 0, ""},
+		{"MibIfRow.Type", Field, 0, ""},
+		{"Mkdir", Func, 0, "func(path string, mode uint32) (err error)"},
+		{"Mkdirat", Func, 0, "func(dirfd int, path string, mode uint32) (err error)"},
+		{"Mkfifo", Func, 0, "func(path string, mode uint32) (err error)"},
+		{"Mknod", Func, 0, "func(path string, mode uint32, dev int) (err error)"},
+		{"Mknodat", Func, 0, "func(dirfd int, path string, mode uint32, dev int) (err error)"},
+		{"Mlock", Func, 0, "func(b []byte) (err error)"},
+		{"Mlockall", Func, 0, "func(flags int) (err error)"},
+		{"Mmap", Func, 0, "func(fd int, offset int64, length int, prot int, flags int) (data []byte, err error)"},
+		{"Mount", Func, 0, "func(source string, target string, fstype string, flags uintptr, data string) (err error)"},
+		{"MoveFile", Func, 0, ""},
+		{"Mprotect", Func, 0, "func(b []byte, prot int) (err error)"},
+		{"Msghdr", Type, 0, ""},
+		{"Msghdr.Control", Field, 0, ""},
+		{"Msghdr.Controllen", Field, 0, ""},
+		{"Msghdr.Flags", Field, 0, ""},
+		{"Msghdr.Iov", Field, 0, ""},
+		{"Msghdr.Iovlen", Field, 0, ""},
+		{"Msghdr.Name", Field, 0, ""},
+		{"Msghdr.Namelen", Field, 0, ""},
+		{"Msghdr.Pad_cgo_0", Field, 0, ""},
+		{"Msghdr.Pad_cgo_1", Field, 0, ""},
+		{"Munlock", Func, 0, "func(b []byte) (err error)"},
+		{"Munlockall", Func, 0, "func() (err error)"},
+		{"Munmap", Func, 0, "func(b []byte) (err error)"},
+		{"MustLoadDLL", Func, 0, ""},
+		{"NAME_MAX", Const, 0, ""},
+		{"NETLINK_ADD_MEMBERSHIP", Const, 0, ""},
+		{"NETLINK_AUDIT", Const, 0, ""},
+		{"NETLINK_BROADCAST_ERROR", Const, 0, ""},
+		{"NETLINK_CONNECTOR", Const, 0, ""},
+		{"NETLINK_DNRTMSG", Const, 0, ""},
+		{"NETLINK_DROP_MEMBERSHIP", Const, 0, ""},
+		{"NETLINK_ECRYPTFS", Const, 0, ""},
+		{"NETLINK_FIB_LOOKUP", Const, 0, ""},
+		{"NETLINK_FIREWALL", Const, 0, ""},
+		{"NETLINK_GENERIC", Const, 0, ""},
+		{"NETLINK_INET_DIAG", Const, 0, ""},
+		{"NETLINK_IP6_FW", Const, 0, ""},
+		{"NETLINK_ISCSI", Const, 0, ""},
+		{"NETLINK_KOBJECT_UEVENT", Const, 0, ""},
+		{"NETLINK_NETFILTER", Const, 0, ""},
+		{"NETLINK_NFLOG", Const, 0, ""},
+		{"NETLINK_NO_ENOBUFS", Const, 0, ""},
+		{"NETLINK_PKTINFO", Const, 0, ""},
+		{"NETLINK_RDMA", Const, 0, ""},
+		{"NETLINK_ROUTE", Const, 0, ""},
+		{"NETLINK_SCSITRANSPORT", Const, 0, ""},
+		{"NETLINK_SELINUX", Const, 0, ""},
+		{"NETLINK_UNUSED", Const, 0, ""},
+		{"NETLINK_USERSOCK", Const, 0, ""},
+		{"NETLINK_XFRM", Const, 0, ""},
+		{"NET_RT_DUMP", Const, 0, ""},
+		{"NET_RT_DUMP2", Const, 0, ""},
+		{"NET_RT_FLAGS", Const, 0, ""},
+		{"NET_RT_IFLIST", Const, 0, ""},
+		{"NET_RT_IFLIST2", Const, 0, ""},
+		{"NET_RT_IFLISTL", Const, 1, ""},
+		{"NET_RT_IFMALIST", Const, 0, ""},
+		{"NET_RT_MAXID", Const, 0, ""},
+		{"NET_RT_OIFLIST", Const, 1, ""},
+		{"NET_RT_OOIFLIST", Const, 1, ""},
+		{"NET_RT_STAT", Const, 0, ""},
+		{"NET_RT_STATS", Const, 1, ""},
+		{"NET_RT_TABLE", Const, 1, ""},
+		{"NET_RT_TRASH", Const, 0, ""},
+		{"NLA_ALIGNTO", Const, 0, ""},
+		{"NLA_F_NESTED", Const, 0, ""},
+		{"NLA_F_NET_BYTEORDER", Const, 0, ""},
+		{"NLA_HDRLEN", Const, 0, ""},
+		{"NLMSG_ALIGNTO", Const, 0, ""},
+		{"NLMSG_DONE", Const, 0, ""},
+		{"NLMSG_ERROR", Const, 0, ""},
+		{"NLMSG_HDRLEN", Const, 0, ""},
+		{"NLMSG_MIN_TYPE", Const, 0, ""},
+		{"NLMSG_NOOP", Const, 0, ""},
+		{"NLMSG_OVERRUN", Const, 0, ""},
+		{"NLM_F_ACK", Const, 0, ""},
+		{"NLM_F_APPEND", Const, 0, ""},
+		{"NLM_F_ATOMIC", Const, 0, ""},
+		{"NLM_F_CREATE", Const, 0, ""},
+		{"NLM_F_DUMP", Const, 0, ""},
+		{"NLM_F_ECHO", Const, 0, ""},
+		{"NLM_F_EXCL", Const, 0, ""},
+		{"NLM_F_MATCH", Const, 0, ""},
+		{"NLM_F_MULTI", Const, 0, ""},
+		{"NLM_F_REPLACE", Const, 0, ""},
+		{"NLM_F_REQUEST", Const, 0, ""},
+		{"NLM_F_ROOT", Const, 0, ""},
+		{"NOFLSH", Const, 0, ""},
+		{"NOTE_ABSOLUTE", Const, 0, ""},
+		{"NOTE_ATTRIB", Const, 0, ""},
+		{"NOTE_BACKGROUND", Const, 16, ""},
+		{"NOTE_CHILD", Const, 0, ""},
+		{"NOTE_CRITICAL", Const, 16, ""},
+		{"NOTE_DELETE", Const, 0, ""},
+		{"NOTE_EOF", Const, 1, ""},
+		{"NOTE_EXEC", Const, 0, ""},
+		{"NOTE_EXIT", Const, 0, ""},
+		{"NOTE_EXITSTATUS", Const, 0, ""},
+		{"NOTE_EXIT_CSERROR", Const, 16, ""},
+		{"NOTE_EXIT_DECRYPTFAIL", Const, 16, ""},
+		{"NOTE_EXIT_DETAIL", Const, 16, ""},
+		{"NOTE_EXIT_DETAIL_MASK", Const, 16, ""},
+		{"NOTE_EXIT_MEMORY", Const, 16, ""},
+		{"NOTE_EXIT_REPARENTED", Const, 16, ""},
+		{"NOTE_EXTEND", Const, 0, ""},
+		{"NOTE_FFAND", Const, 0, ""},
+		{"NOTE_FFCOPY", Const, 0, ""},
+		{"NOTE_FFCTRLMASK", Const, 0, ""},
+		{"NOTE_FFLAGSMASK", Const, 0, ""},
+		{"NOTE_FFNOP", Const, 0, ""},
+		{"NOTE_FFOR", Const, 0, ""},
+		{"NOTE_FORK", Const, 0, ""},
+		{"NOTE_LEEWAY", Const, 16, ""},
+		{"NOTE_LINK", Const, 0, ""},
+		{"NOTE_LOWAT", Const, 0, ""},
+		{"NOTE_NONE", Const, 0, ""},
+		{"NOTE_NSECONDS", Const, 0, ""},
+		{"NOTE_PCTRLMASK", Const, 0, ""},
+		{"NOTE_PDATAMASK", Const, 0, ""},
+		{"NOTE_REAP", Const, 0, ""},
+		{"NOTE_RENAME", Const, 0, ""},
+		{"NOTE_RESOURCEEND", Const, 0, ""},
+		{"NOTE_REVOKE", Const, 0, ""},
+		{"NOTE_SECONDS", Const, 0, ""},
+		{"NOTE_SIGNAL", Const, 0, ""},
+		{"NOTE_TRACK", Const, 0, ""},
+		{"NOTE_TRACKERR", Const, 0, ""},
+		{"NOTE_TRIGGER", Const, 0, ""},
+		{"NOTE_TRUNCATE", Const, 1, ""},
+		{"NOTE_USECONDS", Const, 0, ""},
+		{"NOTE_VM_ERROR", Const, 0, ""},
+		{"NOTE_VM_PRESSURE", Const, 0, ""},
+		{"NOTE_VM_PRESSURE_SUDDEN_TERMINATE", Const, 0, ""},
+		{"NOTE_VM_PRESSURE_TERMINATE", Const, 0, ""},
+		{"NOTE_WRITE", Const, 0, ""},
+		{"NameCanonical", Const, 0, ""},
+		{"NameCanonicalEx", Const, 0, ""},
+		{"NameDisplay", Const, 0, ""},
+		{"NameDnsDomain", Const, 0, ""},
+		{"NameFullyQualifiedDN", Const, 0, ""},
+		{"NameSamCompatible", Const, 0, ""},
+		{"NameServicePrincipal", Const, 0, ""},
+		{"NameUniqueId", Const, 0, ""},
+		{"NameUnknown", Const, 0, ""},
+		{"NameUserPrincipal", Const, 0, ""},
+		{"Nanosleep", Func, 0, "func(time *Timespec, leftover *Timespec) (err error)"},
+		{"NetApiBufferFree", Func, 0, ""},
+		{"NetGetJoinInformation", Func, 2, ""},
+		{"NetSetupDomainName", Const, 2, ""},
+		{"NetSetupUnjoined", Const, 2, ""},
+		{"NetSetupUnknownStatus", Const, 2, ""},
+		{"NetSetupWorkgroupName", Const, 2, ""},
+		{"NetUserGetInfo", Func, 0, ""},
+		{"NetlinkMessage", Type, 0, ""},
+		{"NetlinkMessage.Data", Field, 0, ""},
+		{"NetlinkMessage.Header", Field, 0, ""},
+		{"NetlinkRIB", Func, 0, "func(proto int, family int) ([]byte, error)"},
+		{"NetlinkRouteAttr", Type, 0, ""},
+		{"NetlinkRouteAttr.Attr", Field, 0, ""},
+		{"NetlinkRouteAttr.Value", Field, 0, ""},
+		{"NetlinkRouteRequest", Type, 0, ""},
+		{"NetlinkRouteRequest.Data", Field, 0, ""},
+		{"NetlinkRouteRequest.Header", Field, 0, ""},
+		{"NewCallback", Func, 0, ""},
+		{"NewCallbackCDecl", Func, 3, ""},
+		{"NewLazyDLL", Func, 0, ""},
+		{"NlAttr", Type, 0, ""},
+		{"NlAttr.Len", Field, 0, ""},
+		{"NlAttr.Type", Field, 0, ""},
+		{"NlMsgerr", Type, 0, ""},
+		{"NlMsgerr.Error", Field, 0, ""},
+		{"NlMsgerr.Msg", Field, 0, ""},
+		{"NlMsghdr", Type, 0, ""},
+		{"NlMsghdr.Flags", Field, 0, ""},
+		{"NlMsghdr.Len", Field, 0, ""},
+		{"NlMsghdr.Pid", Field, 0, ""},
+		{"NlMsghdr.Seq", Field, 0, ""},
+		{"NlMsghdr.Type", Field, 0, ""},
+		{"NsecToFiletime", Func, 0, ""},
+		{"NsecToTimespec", Func, 0, "func(nsec int64) Timespec"},
+		{"NsecToTimeval", Func, 0, "func(nsec int64) Timeval"},
+		{"Ntohs", Func, 0, ""},
+		{"OCRNL", Const, 0, ""},
+		{"OFDEL", Const, 0, ""},
+		{"OFILL", Const, 0, ""},
+		{"OFIOGETBMAP", Const, 1, ""},
+		{"OID_PKIX_KP_SERVER_AUTH", Var, 0, ""},
+		{"OID_SERVER_GATED_CRYPTO", Var, 0, ""},
+		{"OID_SGC_NETSCAPE", Var, 0, ""},
+		{"OLCUC", Const, 0, ""},
+		{"ONLCR", Const, 0, ""},
+		{"ONLRET", Const, 0, ""},
+		{"ONOCR", Const, 0, ""},
+		{"ONOEOT", Const, 1, ""},
+		{"OPEN_ALWAYS", Const, 0, ""},
+		{"OPEN_EXISTING", Const, 0, ""},
+		{"OPOST", Const, 0, ""},
+		{"O_ACCMODE", Const, 0, ""},
+		{"O_ALERT", Const, 0, ""},
+		{"O_ALT_IO", Const, 1, ""},
+		{"O_APPEND", Const, 0, ""},
+		{"O_ASYNC", Const, 0, ""},
+		{"O_CLOEXEC", Const, 0, ""},
+		{"O_CREAT", Const, 0, ""},
+		{"O_DIRECT", Const, 0, ""},
+		{"O_DIRECTORY", Const, 0, ""},
+		{"O_DP_GETRAWENCRYPTED", Const, 16, ""},
+		{"O_DSYNC", Const, 0, ""},
+		{"O_EVTONLY", Const, 0, ""},
+		{"O_EXCL", Const, 0, ""},
+		{"O_EXEC", Const, 0, ""},
+		{"O_EXLOCK", Const, 0, ""},
+		{"O_FSYNC", Const, 0, ""},
+		{"O_LARGEFILE", Const, 0, ""},
+		{"O_NDELAY", Const, 0, ""},
+		{"O_NOATIME", Const, 0, ""},
+		{"O_NOCTTY", Const, 0, ""},
+		{"O_NOFOLLOW", Const, 0, ""},
+		{"O_NONBLOCK", Const, 0, ""},
+		{"O_NOSIGPIPE", Const, 1, ""},
+		{"O_POPUP", Const, 0, ""},
+		{"O_RDONLY", Const, 0, ""},
+		{"O_RDWR", Const, 0, ""},
+		{"O_RSYNC", Const, 0, ""},
+		{"O_SHLOCK", Const, 0, ""},
+		{"O_SYMLINK", Const, 0, ""},
+		{"O_SYNC", Const, 0, ""},
+		{"O_TRUNC", Const, 0, ""},
+		{"O_TTY_INIT", Const, 0, ""},
+		{"O_WRONLY", Const, 0, ""},
+		{"Open", Func, 0, "func(path string, mode int, perm uint32) (fd int, err error)"},
+		{"OpenCurrentProcessToken", Func, 0, ""},
+		{"OpenProcess", Func, 0, ""},
+		{"OpenProcessToken", Func, 0, ""},
+		{"Openat", Func, 0, "func(dirfd int, path string, flags int, mode uint32) (fd int, err error)"},
+		{"Overlapped", Type, 0, ""},
+		{"Overlapped.HEvent", Field, 0, ""},
+		{"Overlapped.Internal", Field, 0, ""},
+		{"Overlapped.InternalHigh", Field, 0, ""},
+		{"Overlapped.Offset", Field, 0, ""},
+		{"Overlapped.OffsetHigh", Field, 0, ""},
+		{"PACKET_ADD_MEMBERSHIP", Const, 0, ""},
+		{"PACKET_BROADCAST", Const, 0, ""},
+		{"PACKET_DROP_MEMBERSHIP", Const, 0, ""},
+		{"PACKET_FASTROUTE", Const, 0, ""},
+		{"PACKET_HOST", Const, 0, ""},
+		{"PACKET_LOOPBACK", Const, 0, ""},
+		{"PACKET_MR_ALLMULTI", Const, 0, ""},
+		{"PACKET_MR_MULTICAST", Const, 0, ""},
+		{"PACKET_MR_PROMISC", Const, 0, ""},
+		{"PACKET_MULTICAST", Const, 0, ""},
+		{"PACKET_OTHERHOST", Const, 0, ""},
+		{"PACKET_OUTGOING", Const, 0, ""},
+		{"PACKET_RECV_OUTPUT", Const, 0, ""},
+		{"PACKET_RX_RING", Const, 0, ""},
+		{"PACKET_STATISTICS", Const, 0, ""},
+		{"PAGE_EXECUTE_READ", Const, 0, ""},
+		{"PAGE_EXECUTE_READWRITE", Const, 0, ""},
+		{"PAGE_EXECUTE_WRITECOPY", Const, 0, ""},
+		{"PAGE_READONLY", Const, 0, ""},
+		{"PAGE_READWRITE", Const, 0, ""},
+		{"PAGE_WRITECOPY", Const, 0, ""},
+		{"PARENB", Const, 0, ""},
+		{"PARMRK", Const, 0, ""},
+		{"PARODD", Const, 0, ""},
+		{"PENDIN", Const, 0, ""},
+		{"PFL_HIDDEN", Const, 2, ""},
+		{"PFL_MATCHES_PROTOCOL_ZERO", Const, 2, ""},
+		{"PFL_MULTIPLE_PROTO_ENTRIES", Const, 2, ""},
+		{"PFL_NETWORKDIRECT_PROVIDER", Const, 2, ""},
+		{"PFL_RECOMMENDED_PROTO_ENTRY", Const, 2, ""},
+		{"PF_FLUSH", Const, 1, ""},
+		{"PKCS_7_ASN_ENCODING", Const, 0, ""},
+		{"PMC5_PIPELINE_FLUSH", Const, 1, ""},
+		{"PRIO_PGRP", Const, 2, ""},
+		{"PRIO_PROCESS", Const, 2, ""},
+		{"PRIO_USER", Const, 2, ""},
+		{"PRI_IOFLUSH", Const, 1, ""},
+		{"PROCESS_QUERY_INFORMATION", Const, 0, ""},
+		{"PROCESS_TERMINATE", Const, 2, ""},
+		{"PROT_EXEC", Const, 0, ""},
+		{"PROT_GROWSDOWN", Const, 0, ""},
+		{"PROT_GROWSUP", Const, 0, ""},
+		{"PROT_NONE", Const, 0, ""},
+		{"PROT_READ", Const, 0, ""},
+		{"PROT_WRITE", Const, 0, ""},
+		{"PROV_DH_SCHANNEL", Const, 0, ""},
+		{"PROV_DSS", Const, 0, ""},
+		{"PROV_DSS_DH", Const, 0, ""},
+		{"PROV_EC_ECDSA_FULL", Const, 0, ""},
+		{"PROV_EC_ECDSA_SIG", Const, 0, ""},
+		{"PROV_EC_ECNRA_FULL", Const, 0, ""},
+		{"PROV_EC_ECNRA_SIG", Const, 0, ""},
+		{"PROV_FORTEZZA", Const, 0, ""},
+		{"PROV_INTEL_SEC", Const, 0, ""},
+		{"PROV_MS_EXCHANGE", Const, 0, ""},
+		{"PROV_REPLACE_OWF", Const, 0, ""},
+		{"PROV_RNG", Const, 0, ""},
+		{"PROV_RSA_AES", Const, 0, ""},
+		{"PROV_RSA_FULL", Const, 0, ""},
+		{"PROV_RSA_SCHANNEL", Const, 0, ""},
+		{"PROV_RSA_SIG", Const, 0, ""},
+		{"PROV_SPYRUS_LYNKS", Const, 0, ""},
+		{"PROV_SSL", Const, 0, ""},
+		{"PR_CAPBSET_DROP", Const, 0, ""},
+		{"PR_CAPBSET_READ", Const, 0, ""},
+		{"PR_CLEAR_SECCOMP_FILTER", Const, 0, ""},
+		{"PR_ENDIAN_BIG", Const, 0, ""},
+		{"PR_ENDIAN_LITTLE", Const, 0, ""},
+		{"PR_ENDIAN_PPC_LITTLE", Const, 0, ""},
+		{"PR_FPEMU_NOPRINT", Const, 0, ""},
+		{"PR_FPEMU_SIGFPE", Const, 0, ""},
+		{"PR_FP_EXC_ASYNC", Const, 0, ""},
+		{"PR_FP_EXC_DISABLED", Const, 0, ""},
+		{"PR_FP_EXC_DIV", Const, 0, ""},
+		{"PR_FP_EXC_INV", Const, 0, ""},
+		{"PR_FP_EXC_NONRECOV", Const, 0, ""},
+		{"PR_FP_EXC_OVF", Const, 0, ""},
+		{"PR_FP_EXC_PRECISE", Const, 0, ""},
+		{"PR_FP_EXC_RES", Const, 0, ""},
+		{"PR_FP_EXC_SW_ENABLE", Const, 0, ""},
+		{"PR_FP_EXC_UND", Const, 0, ""},
+		{"PR_GET_DUMPABLE", Const, 0, ""},
+		{"PR_GET_ENDIAN", Const, 0, ""},
+		{"PR_GET_FPEMU", Const, 0, ""},
+		{"PR_GET_FPEXC", Const, 0, ""},
+		{"PR_GET_KEEPCAPS", Const, 0, ""},
+		{"PR_GET_NAME", Const, 0, ""},
+		{"PR_GET_PDEATHSIG", Const, 0, ""},
+		{"PR_GET_SECCOMP", Const, 0, ""},
+		{"PR_GET_SECCOMP_FILTER", Const, 0, ""},
+		{"PR_GET_SECUREBITS", Const, 0, ""},
+		{"PR_GET_TIMERSLACK", Const, 0, ""},
+		{"PR_GET_TIMING", Const, 0, ""},
+		{"PR_GET_TSC", Const, 0, ""},
+		{"PR_GET_UNALIGN", Const, 0, ""},
+		{"PR_MCE_KILL", Const, 0, ""},
+		{"PR_MCE_KILL_CLEAR", Const, 0, ""},
+		{"PR_MCE_KILL_DEFAULT", Const, 0, ""},
+		{"PR_MCE_KILL_EARLY", Const, 0, ""},
+		{"PR_MCE_KILL_GET", Const, 0, ""},
+		{"PR_MCE_KILL_LATE", Const, 0, ""},
+		{"PR_MCE_KILL_SET", Const, 0, ""},
+		{"PR_SECCOMP_FILTER_EVENT", Const, 0, ""},
+		{"PR_SECCOMP_FILTER_SYSCALL", Const, 0, ""},
+		{"PR_SET_DUMPABLE", Const, 0, ""},
+		{"PR_SET_ENDIAN", Const, 0, ""},
+		{"PR_SET_FPEMU", Const, 0, ""},
+		{"PR_SET_FPEXC", Const, 0, ""},
+		{"PR_SET_KEEPCAPS", Const, 0, ""},
+		{"PR_SET_NAME", Const, 0, ""},
+		{"PR_SET_PDEATHSIG", Const, 0, ""},
+		{"PR_SET_PTRACER", Const, 0, ""},
+		{"PR_SET_SECCOMP", Const, 0, ""},
+		{"PR_SET_SECCOMP_FILTER", Const, 0, ""},
+		{"PR_SET_SECUREBITS", Const, 0, ""},
+		{"PR_SET_TIMERSLACK", Const, 0, ""},
+		{"PR_SET_TIMING", Const, 0, ""},
+		{"PR_SET_TSC", Const, 0, ""},
+		{"PR_SET_UNALIGN", Const, 0, ""},
+		{"PR_TASK_PERF_EVENTS_DISABLE", Const, 0, ""},
+		{"PR_TASK_PERF_EVENTS_ENABLE", Const, 0, ""},
+		{"PR_TIMING_STATISTICAL", Const, 0, ""},
+		{"PR_TIMING_TIMESTAMP", Const, 0, ""},
+		{"PR_TSC_ENABLE", Const, 0, ""},
+		{"PR_TSC_SIGSEGV", Const, 0, ""},
+		{"PR_UNALIGN_NOPRINT", Const, 0, ""},
+		{"PR_UNALIGN_SIGBUS", Const, 0, ""},
+		{"PTRACE_ARCH_PRCTL", Const, 0, ""},
+		{"PTRACE_ATTACH", Const, 0, ""},
+		{"PTRACE_CONT", Const, 0, ""},
+		{"PTRACE_DETACH", Const, 0, ""},
+		{"PTRACE_EVENT_CLONE", Const, 0, ""},
+		{"PTRACE_EVENT_EXEC", Const, 0, ""},
+		{"PTRACE_EVENT_EXIT", Const, 0, ""},
+		{"PTRACE_EVENT_FORK", Const, 0, ""},
+		{"PTRACE_EVENT_VFORK", Const, 0, ""},
+		{"PTRACE_EVENT_VFORK_DONE", Const, 0, ""},
+		{"PTRACE_GETCRUNCHREGS", Const, 0, ""},
+		{"PTRACE_GETEVENTMSG", Const, 0, ""},
+		{"PTRACE_GETFPREGS", Const, 0, ""},
+		{"PTRACE_GETFPXREGS", Const, 0, ""},
+		{"PTRACE_GETHBPREGS", Const, 0, ""},
+		{"PTRACE_GETREGS", Const, 0, ""},
+		{"PTRACE_GETREGSET", Const, 0, ""},
+		{"PTRACE_GETSIGINFO", Const, 0, ""},
+		{"PTRACE_GETVFPREGS", Const, 0, ""},
+		{"PTRACE_GETWMMXREGS", Const, 0, ""},
+		{"PTRACE_GET_THREAD_AREA", Const, 0, ""},
+		{"PTRACE_KILL", Const, 0, ""},
+		{"PTRACE_OLDSETOPTIONS", Const, 0, ""},
+		{"PTRACE_O_MASK", Const, 0, ""},
+		{"PTRACE_O_TRACECLONE", Const, 0, ""},
+		{"PTRACE_O_TRACEEXEC", Const, 0, ""},
+		{"PTRACE_O_TRACEEXIT", Const, 0, ""},
+		{"PTRACE_O_TRACEFORK", Const, 0, ""},
+		{"PTRACE_O_TRACESYSGOOD", Const, 0, ""},
+		{"PTRACE_O_TRACEVFORK", Const, 0, ""},
+		{"PTRACE_O_TRACEVFORKDONE", Const, 0, ""},
+		{"PTRACE_PEEKDATA", Const, 0, ""},
+		{"PTRACE_PEEKTEXT", Const, 0, ""},
+		{"PTRACE_PEEKUSR", Const, 0, ""},
+		{"PTRACE_POKEDATA", Const, 0, ""},
+		{"PTRACE_POKETEXT", Const, 0, ""},
+		{"PTRACE_POKEUSR", Const, 0, ""},
+		{"PTRACE_SETCRUNCHREGS", Const, 0, ""},
+		{"PTRACE_SETFPREGS", Const, 0, ""},
+		{"PTRACE_SETFPXREGS", Const, 0, ""},
+		{"PTRACE_SETHBPREGS", Const, 0, ""},
+		{"PTRACE_SETOPTIONS", Const, 0, ""},
+		{"PTRACE_SETREGS", Const, 0, ""},
+		{"PTRACE_SETREGSET", Const, 0, ""},
+		{"PTRACE_SETSIGINFO", Const, 0, ""},
+		{"PTRACE_SETVFPREGS", Const, 0, ""},
+		{"PTRACE_SETWMMXREGS", Const, 0, ""},
+		{"PTRACE_SET_SYSCALL", Const, 0, ""},
+		{"PTRACE_SET_THREAD_AREA", Const, 0, ""},
+		{"PTRACE_SINGLEBLOCK", Const, 0, ""},
+		{"PTRACE_SINGLESTEP", Const, 0, ""},
+		{"PTRACE_SYSCALL", Const, 0, ""},
+		{"PTRACE_SYSEMU", Const, 0, ""},
+		{"PTRACE_SYSEMU_SINGLESTEP", Const, 0, ""},
+		{"PTRACE_TRACEME", Const, 0, ""},
+		{"PT_ATTACH", Const, 0, ""},
+		{"PT_ATTACHEXC", Const, 0, ""},
+		{"PT_CONTINUE", Const, 0, ""},
+		{"PT_DATA_ADDR", Const, 0, ""},
+		{"PT_DENY_ATTACH", Const, 0, ""},
+		{"PT_DETACH", Const, 0, ""},
+		{"PT_FIRSTMACH", Const, 0, ""},
+		{"PT_FORCEQUOTA", Const, 0, ""},
+		{"PT_KILL", Const, 0, ""},
+		{"PT_MASK", Const, 1, ""},
+		{"PT_READ_D", Const, 0, ""},
+		{"PT_READ_I", Const, 0, ""},
+		{"PT_READ_U", Const, 0, ""},
+		{"PT_SIGEXC", Const, 0, ""},
+		{"PT_STEP", Const, 0, ""},
+		{"PT_TEXT_ADDR", Const, 0, ""},
+		{"PT_TEXT_END_ADDR", Const, 0, ""},
+		{"PT_THUPDATE", Const, 0, ""},
+		{"PT_TRACE_ME", Const, 0, ""},
+		{"PT_WRITE_D", Const, 0, ""},
+		{"PT_WRITE_I", Const, 0, ""},
+		{"PT_WRITE_U", Const, 0, ""},
+		{"ParseDirent", Func, 0, "func(buf []byte, max int, names []string) (consumed int, count int, newnames []string)"},
+		{"ParseNetlinkMessage", Func, 0, "func(b []byte) ([]NetlinkMessage, error)"},
+		{"ParseNetlinkRouteAttr", Func, 0, "func(m *NetlinkMessage) ([]NetlinkRouteAttr, error)"},
+		{"ParseRoutingMessage", Func, 0, ""},
+		{"ParseRoutingSockaddr", Func, 0, ""},
+		{"ParseSocketControlMessage", Func, 0, "func(b []byte) ([]SocketControlMessage, error)"},
+		{"ParseUnixCredentials", Func, 0, "func(m *SocketControlMessage) (*Ucred, error)"},
+		{"ParseUnixRights", Func, 0, "func(m *SocketControlMessage) ([]int, error)"},
+		{"PathMax", Const, 0, ""},
+		{"Pathconf", Func, 0, ""},
+		{"Pause", Func, 0, "func() (err error)"},
+		{"Pipe", Func, 0, "func(p []int) error"},
+		{"Pipe2", Func, 1, "func(p []int, flags int) error"},
+		{"PivotRoot", Func, 0, "func(newroot string, putold string) (err error)"},
+		{"Pointer", Type, 11, ""},
+		{"PostQueuedCompletionStatus", Func, 0, ""},
+		{"Pread", Func, 0, "func(fd int, p []byte, offset int64) (n int, err error)"},
+		{"Proc", Type, 0, ""},
+		{"Proc.Dll", Field, 0, ""},
+		{"Proc.Name", Field, 0, ""},
+		{"ProcAttr", Type, 0, ""},
+		{"ProcAttr.Dir", Field, 0, ""},
+		{"ProcAttr.Env", Field, 0, ""},
+		{"ProcAttr.Files", Field, 0, ""},
+		{"ProcAttr.Sys", Field, 0, ""},
+		{"Process32First", Func, 4, ""},
+		{"Process32Next", Func, 4, ""},
+		{"ProcessEntry32", Type, 4, ""},
+		{"ProcessEntry32.DefaultHeapID", Field, 4, ""},
+		{"ProcessEntry32.ExeFile", Field, 4, ""},
+		{"ProcessEntry32.Flags", Field, 4, ""},
+		{"ProcessEntry32.ModuleID", Field, 4, ""},
+		{"ProcessEntry32.ParentProcessID", Field, 4, ""},
+		{"ProcessEntry32.PriClassBase", Field, 4, ""},
+		{"ProcessEntry32.ProcessID", Field, 4, ""},
+		{"ProcessEntry32.Size", Field, 4, ""},
+		{"ProcessEntry32.Threads", Field, 4, ""},
+		{"ProcessEntry32.Usage", Field, 4, ""},
+		{"ProcessInformation", Type, 0, ""},
+		{"ProcessInformation.Process", Field, 0, ""},
+		{"ProcessInformation.ProcessId", Field, 0, ""},
+		{"ProcessInformation.Thread", Field, 0, ""},
+		{"ProcessInformation.ThreadId", Field, 0, ""},
+		{"Protoent", Type, 0, ""},
+		{"Protoent.Aliases", Field, 0, ""},
+		{"Protoent.Name", Field, 0, ""},
+		{"Protoent.Proto", Field, 0, ""},
+		{"PtraceAttach", Func, 0, "func(pid int) (err error)"},
+		{"PtraceCont", Func, 0, "func(pid int, signal int) (err error)"},
+		{"PtraceDetach", Func, 0, "func(pid int) (err error)"},
+		{"PtraceGetEventMsg", Func, 0, "func(pid int) (msg uint, err error)"},
+		{"PtraceGetRegs", Func, 0, "func(pid int, regsout *PtraceRegs) (err error)"},
+		{"PtracePeekData", Func, 0, "func(pid int, addr uintptr, out []byte) (count int, err error)"},
+		{"PtracePeekText", Func, 0, "func(pid int, addr uintptr, out []byte) (count int, err error)"},
+		{"PtracePokeData", Func, 0, "func(pid int, addr uintptr, data []byte) (count int, err error)"},
+		{"PtracePokeText", Func, 0, "func(pid int, addr uintptr, data []byte) (count int, err error)"},
+		{"PtraceRegs", Type, 0, ""},
+		{"PtraceRegs.Cs", Field, 0, ""},
+		{"PtraceRegs.Ds", Field, 0, ""},
+		{"PtraceRegs.Eax", Field, 0, ""},
+		{"PtraceRegs.Ebp", Field, 0, ""},
+		{"PtraceRegs.Ebx", Field, 0, ""},
+		{"PtraceRegs.Ecx", Field, 0, ""},
+		{"PtraceRegs.Edi", Field, 0, ""},
+		{"PtraceRegs.Edx", Field, 0, ""},
+		{"PtraceRegs.Eflags", Field, 0, ""},
+		{"PtraceRegs.Eip", Field, 0, ""},
+		{"PtraceRegs.Es", Field, 0, ""},
+		{"PtraceRegs.Esi", Field, 0, ""},
+		{"PtraceRegs.Esp", Field, 0, ""},
+		{"PtraceRegs.Fs", Field, 0, ""},
+		{"PtraceRegs.Fs_base", Field, 0, ""},
+		{"PtraceRegs.Gs", Field, 0, ""},
+		{"PtraceRegs.Gs_base", Field, 0, ""},
+		{"PtraceRegs.Orig_eax", Field, 0, ""},
+		{"PtraceRegs.Orig_rax", Field, 0, ""},
+		{"PtraceRegs.R10", Field, 0, ""},
+		{"PtraceRegs.R11", Field, 0, ""},
+		{"PtraceRegs.R12", Field, 0, ""},
+		{"PtraceRegs.R13", Field, 0, ""},
+		{"PtraceRegs.R14", Field, 0, ""},
+		{"PtraceRegs.R15", Field, 0, ""},
+		{"PtraceRegs.R8", Field, 0, ""},
+		{"PtraceRegs.R9", Field, 0, ""},
+		{"PtraceRegs.Rax", Field, 0, ""},
+		{"PtraceRegs.Rbp", Field, 0, ""},
+		{"PtraceRegs.Rbx", Field, 0, ""},
+		{"PtraceRegs.Rcx", Field, 0, ""},
+		{"PtraceRegs.Rdi", Field, 0, ""},
+		{"PtraceRegs.Rdx", Field, 0, ""},
+		{"PtraceRegs.Rip", Field, 0, ""},
+		{"PtraceRegs.Rsi", Field, 0, ""},
+		{"PtraceRegs.Rsp", Field, 0, ""},
+		{"PtraceRegs.Ss", Field, 0, ""},
+		{"PtraceRegs.Uregs", Field, 0, ""},
+		{"PtraceRegs.Xcs", Field, 0, ""},
+		{"PtraceRegs.Xds", Field, 0, ""},
+		{"PtraceRegs.Xes", Field, 0, ""},
+		{"PtraceRegs.Xfs", Field, 0, ""},
+		{"PtraceRegs.Xgs", Field, 0, ""},
+		{"PtraceRegs.Xss", Field, 0, ""},
+		{"PtraceSetOptions", Func, 0, "func(pid int, options int) (err error)"},
+		{"PtraceSetRegs", Func, 0, "func(pid int, regs *PtraceRegs) (err error)"},
+		{"PtraceSingleStep", Func, 0, "func(pid int) (err error)"},
+		{"PtraceSyscall", Func, 1, "func(pid int, signal int) (err error)"},
+		{"Pwrite", Func, 0, "func(fd int, p []byte, offset int64) (n int, err error)"},
+		{"REG_BINARY", Const, 0, ""},
+		{"REG_DWORD", Const, 0, ""},
+		{"REG_DWORD_BIG_ENDIAN", Const, 0, ""},
+		{"REG_DWORD_LITTLE_ENDIAN", Const, 0, ""},
+		{"REG_EXPAND_SZ", Const, 0, ""},
+		{"REG_FULL_RESOURCE_DESCRIPTOR", Const, 0, ""},
+		{"REG_LINK", Const, 0, ""},
+		{"REG_MULTI_SZ", Const, 0, ""},
+		{"REG_NONE", Const, 0, ""},
+		{"REG_QWORD", Const, 0, ""},
+		{"REG_QWORD_LITTLE_ENDIAN", Const, 0, ""},
+		{"REG_RESOURCE_LIST", Const, 0, ""},
+		{"REG_RESOURCE_REQUIREMENTS_LIST", Const, 0, ""},
+		{"REG_SZ", Const, 0, ""},
+		{"RLIMIT_AS", Const, 0, ""},
+		{"RLIMIT_CORE", Const, 0, ""},
+		{"RLIMIT_CPU", Const, 0, ""},
+		{"RLIMIT_CPU_USAGE_MONITOR", Const, 16, ""},
+		{"RLIMIT_DATA", Const, 0, ""},
+		{"RLIMIT_FSIZE", Const, 0, ""},
+		{"RLIMIT_NOFILE", Const, 0, ""},
+		{"RLIMIT_STACK", Const, 0, ""},
+		{"RLIM_INFINITY", Const, 0, ""},
+		{"RTAX_ADVMSS", Const, 0, ""},
+		{"RTAX_AUTHOR", Const, 0, ""},
+		{"RTAX_BRD", Const, 0, ""},
+		{"RTAX_CWND", Const, 0, ""},
+		{"RTAX_DST", Const, 0, ""},
+		{"RTAX_FEATURES", Const, 0, ""},
+		{"RTAX_FEATURE_ALLFRAG", Const, 0, ""},
+		{"RTAX_FEATURE_ECN", Const, 0, ""},
+		{"RTAX_FEATURE_SACK", Const, 0, ""},
+		{"RTAX_FEATURE_TIMESTAMP", Const, 0, ""},
+		{"RTAX_GATEWAY", Const, 0, ""},
+		{"RTAX_GENMASK", Const, 0, ""},
+		{"RTAX_HOPLIMIT", Const, 0, ""},
+		{"RTAX_IFA", Const, 0, ""},
+		{"RTAX_IFP", Const, 0, ""},
+		{"RTAX_INITCWND", Const, 0, ""},
+		{"RTAX_INITRWND", Const, 0, ""},
+		{"RTAX_LABEL", Const, 1, ""},
+		{"RTAX_LOCK", Const, 0, ""},
+		{"RTAX_MAX", Const, 0, ""},
+		{"RTAX_MTU", Const, 0, ""},
+		{"RTAX_NETMASK", Const, 0, ""},
+		{"RTAX_REORDERING", Const, 0, ""},
+		{"RTAX_RTO_MIN", Const, 0, ""},
+		{"RTAX_RTT", Const, 0, ""},
+		{"RTAX_RTTVAR", Const, 0, ""},
+		{"RTAX_SRC", Const, 1, ""},
+		{"RTAX_SRCMASK", Const, 1, ""},
+		{"RTAX_SSTHRESH", Const, 0, ""},
+		{"RTAX_TAG", Const, 1, ""},
+		{"RTAX_UNSPEC", Const, 0, ""},
+		{"RTAX_WINDOW", Const, 0, ""},
+		{"RTA_ALIGNTO", Const, 0, ""},
+		{"RTA_AUTHOR", Const, 0, ""},
+		{"RTA_BRD", Const, 0, ""},
+		{"RTA_CACHEINFO", Const, 0, ""},
+		{"RTA_DST", Const, 0, ""},
+		{"RTA_FLOW", Const, 0, ""},
+		{"RTA_GATEWAY", Const, 0, ""},
+		{"RTA_GENMASK", Const, 0, ""},
+		{"RTA_IFA", Const, 0, ""},
+		{"RTA_IFP", Const, 0, ""},
+		{"RTA_IIF", Const, 0, ""},
+		{"RTA_LABEL", Const, 1, ""},
+		{"RTA_MAX", Const, 0, ""},
+		{"RTA_METRICS", Const, 0, ""},
+		{"RTA_MULTIPATH", Const, 0, ""},
+		{"RTA_NETMASK", Const, 0, ""},
+		{"RTA_OIF", Const, 0, ""},
+		{"RTA_PREFSRC", Const, 0, ""},
+		{"RTA_PRIORITY", Const, 0, ""},
+		{"RTA_SRC", Const, 0, ""},
+		{"RTA_SRCMASK", Const, 1, ""},
+		{"RTA_TABLE", Const, 0, ""},
+		{"RTA_TAG", Const, 1, ""},
+		{"RTA_UNSPEC", Const, 0, ""},
+		{"RTCF_DIRECTSRC", Const, 0, ""},
+		{"RTCF_DOREDIRECT", Const, 0, ""},
+		{"RTCF_LOG", Const, 0, ""},
+		{"RTCF_MASQ", Const, 0, ""},
+		{"RTCF_NAT", Const, 0, ""},
+		{"RTCF_VALVE", Const, 0, ""},
+		{"RTF_ADDRCLASSMASK", Const, 0, ""},
+		{"RTF_ADDRCONF", Const, 0, ""},
+		{"RTF_ALLONLINK", Const, 0, ""},
+		{"RTF_ANNOUNCE", Const, 1, ""},
+		{"RTF_BLACKHOLE", Const, 0, ""},
+		{"RTF_BROADCAST", Const, 0, ""},
+		{"RTF_CACHE", Const, 0, ""},
+		{"RTF_CLONED", Const, 1, ""},
+		{"RTF_CLONING", Const, 0, ""},
+		{"RTF_CONDEMNED", Const, 0, ""},
+		{"RTF_DEFAULT", Const, 0, ""},
+		{"RTF_DELCLONE", Const, 0, ""},
+		{"RTF_DONE", Const, 0, ""},
+		{"RTF_DYNAMIC", Const, 0, ""},
+		{"RTF_FLOW", Const, 0, ""},
+		{"RTF_FMASK", Const, 0, ""},
+		{"RTF_GATEWAY", Const, 0, ""},
+		{"RTF_GWFLAG_COMPAT", Const, 3, ""},
+		{"RTF_HOST", Const, 0, ""},
+		{"RTF_IFREF", Const, 0, ""},
+		{"RTF_IFSCOPE", Const, 0, ""},
+		{"RTF_INTERFACE", Const, 0, ""},
+		{"RTF_IRTT", Const, 0, ""},
+		{"RTF_LINKRT", Const, 0, ""},
+		{"RTF_LLDATA", Const, 0, ""},
+		{"RTF_LLINFO", Const, 0, ""},
+		{"RTF_LOCAL", Const, 0, ""},
+		{"RTF_MASK", Const, 1, ""},
+		{"RTF_MODIFIED", Const, 0, ""},
+		{"RTF_MPATH", Const, 1, ""},
+		{"RTF_MPLS", Const, 1, ""},
+		{"RTF_MSS", Const, 0, ""},
+		{"RTF_MTU", Const, 0, ""},
+		{"RTF_MULTICAST", Const, 0, ""},
+		{"RTF_NAT", Const, 0, ""},
+		{"RTF_NOFORWARD", Const, 0, ""},
+		{"RTF_NONEXTHOP", Const, 0, ""},
+		{"RTF_NOPMTUDISC", Const, 0, ""},
+		{"RTF_PERMANENT_ARP", Const, 1, ""},
+		{"RTF_PINNED", Const, 0, ""},
+		{"RTF_POLICY", Const, 0, ""},
+		{"RTF_PRCLONING", Const, 0, ""},
+		{"RTF_PROTO1", Const, 0, ""},
+		{"RTF_PROTO2", Const, 0, ""},
+		{"RTF_PROTO3", Const, 0, ""},
+		{"RTF_PROXY", Const, 16, ""},
+		{"RTF_REINSTATE", Const, 0, ""},
+		{"RTF_REJECT", Const, 0, ""},
+		{"RTF_RNH_LOCKED", Const, 0, ""},
+		{"RTF_ROUTER", Const, 16, ""},
+		{"RTF_SOURCE", Const, 1, ""},
+		{"RTF_SRC", Const, 1, ""},
+		{"RTF_STATIC", Const, 0, ""},
+		{"RTF_STICKY", Const, 0, ""},
+		{"RTF_THROW", Const, 0, ""},
+		{"RTF_TUNNEL", Const, 1, ""},
+		{"RTF_UP", Const, 0, ""},
+		{"RTF_USETRAILERS", Const, 1, ""},
+		{"RTF_WASCLONED", Const, 0, ""},
+		{"RTF_WINDOW", Const, 0, ""},
+		{"RTF_XRESOLVE", Const, 0, ""},
+		{"RTM_ADD", Const, 0, ""},
+		{"RTM_BASE", Const, 0, ""},
+		{"RTM_CHANGE", Const, 0, ""},
+		{"RTM_CHGADDR", Const, 1, ""},
+		{"RTM_DELACTION", Const, 0, ""},
+		{"RTM_DELADDR", Const, 0, ""},
+		{"RTM_DELADDRLABEL", Const, 0, ""},
+		{"RTM_DELETE", Const, 0, ""},
+		{"RTM_DELLINK", Const, 0, ""},
+		{"RTM_DELMADDR", Const, 0, ""},
+		{"RTM_DELNEIGH", Const, 0, ""},
+		{"RTM_DELQDISC", Const, 0, ""},
+		{"RTM_DELROUTE", Const, 0, ""},
+		{"RTM_DELRULE", Const, 0, ""},
+		{"RTM_DELTCLASS", Const, 0, ""},
+		{"RTM_DELTFILTER", Const, 0, ""},
+		{"RTM_DESYNC", Const, 1, ""},
+		{"RTM_F_CLONED", Const, 0, ""},
+		{"RTM_F_EQUALIZE", Const, 0, ""},
+		{"RTM_F_NOTIFY", Const, 0, ""},
+		{"RTM_F_PREFIX", Const, 0, ""},
+		{"RTM_GET", Const, 0, ""},
+		{"RTM_GET2", Const, 0, ""},
+		{"RTM_GETACTION", Const, 0, ""},
+		{"RTM_GETADDR", Const, 0, ""},
+		{"RTM_GETADDRLABEL", Const, 0, ""},
+		{"RTM_GETANYCAST", Const, 0, ""},
+		{"RTM_GETDCB", Const, 0, ""},
+		{"RTM_GETLINK", Const, 0, ""},
+		{"RTM_GETMULTICAST", Const, 0, ""},
+		{"RTM_GETNEIGH", Const, 0, ""},
+		{"RTM_GETNEIGHTBL", Const, 0, ""},
+		{"RTM_GETQDISC", Const, 0, ""},
+		{"RTM_GETROUTE", Const, 0, ""},
+		{"RTM_GETRULE", Const, 0, ""},
+		{"RTM_GETTCLASS", Const, 0, ""},
+		{"RTM_GETTFILTER", Const, 0, ""},
+		{"RTM_IEEE80211", Const, 0, ""},
+		{"RTM_IFANNOUNCE", Const, 0, ""},
+		{"RTM_IFINFO", Const, 0, ""},
+		{"RTM_IFINFO2", Const, 0, ""},
+		{"RTM_LLINFO_UPD", Const, 1, ""},
+		{"RTM_LOCK", Const, 0, ""},
+		{"RTM_LOSING", Const, 0, ""},
+		{"RTM_MAX", Const, 0, ""},
+		{"RTM_MAXSIZE", Const, 1, ""},
+		{"RTM_MISS", Const, 0, ""},
+		{"RTM_NEWACTION", Const, 0, ""},
+		{"RTM_NEWADDR", Const, 0, ""},
+		{"RTM_NEWADDRLABEL", Const, 0, ""},
+		{"RTM_NEWLINK", Const, 0, ""},
+		{"RTM_NEWMADDR", Const, 0, ""},
+		{"RTM_NEWMADDR2", Const, 0, ""},
+		{"RTM_NEWNDUSEROPT", Const, 0, ""},
+		{"RTM_NEWNEIGH", Const, 0, ""},
+		{"RTM_NEWNEIGHTBL", Const, 0, ""},
+		{"RTM_NEWPREFIX", Const, 0, ""},
+		{"RTM_NEWQDISC", Const, 0, ""},
+		{"RTM_NEWROUTE", Const, 0, ""},
+		{"RTM_NEWRULE", Const, 0, ""},
+		{"RTM_NEWTCLASS", Const, 0, ""},
+		{"RTM_NEWTFILTER", Const, 0, ""},
+		{"RTM_NR_FAMILIES", Const, 0, ""},
+		{"RTM_NR_MSGTYPES", Const, 0, ""},
+		{"RTM_OIFINFO", Const, 1, ""},
+		{"RTM_OLDADD", Const, 0, ""},
+		{"RTM_OLDDEL", Const, 0, ""},
+		{"RTM_OOIFINFO", Const, 1, ""},
+		{"RTM_REDIRECT", Const, 0, ""},
+		{"RTM_RESOLVE", Const, 0, ""},
+		{"RTM_RTTUNIT", Const, 0, ""},
+		{"RTM_SETDCB", Const, 0, ""},
+		{"RTM_SETGATE", Const, 1, ""},
+		{"RTM_SETLINK", Const, 0, ""},
+		{"RTM_SETNEIGHTBL", Const, 0, ""},
+		{"RTM_VERSION", Const, 0, ""},
+		{"RTNH_ALIGNTO", Const, 0, ""},
+		{"RTNH_F_DEAD", Const, 0, ""},
+		{"RTNH_F_ONLINK", Const, 0, ""},
+		{"RTNH_F_PERVASIVE", Const, 0, ""},
+		{"RTNLGRP_IPV4_IFADDR", Const, 1, ""},
+		{"RTNLGRP_IPV4_MROUTE", Const, 1, ""},
+		{"RTNLGRP_IPV4_ROUTE", Const, 1, ""},
+		{"RTNLGRP_IPV4_RULE", Const, 1, ""},
+		{"RTNLGRP_IPV6_IFADDR", Const, 1, ""},
+		{"RTNLGRP_IPV6_IFINFO", Const, 1, ""},
+		{"RTNLGRP_IPV6_MROUTE", Const, 1, ""},
+		{"RTNLGRP_IPV6_PREFIX", Const, 1, ""},
+		{"RTNLGRP_IPV6_ROUTE", Const, 1, ""},
+		{"RTNLGRP_IPV6_RULE", Const, 1, ""},
+		{"RTNLGRP_LINK", Const, 1, ""},
+		{"RTNLGRP_ND_USEROPT", Const, 1, ""},
+		{"RTNLGRP_NEIGH", Const, 1, ""},
+		{"RTNLGRP_NONE", Const, 1, ""},
+		{"RTNLGRP_NOTIFY", Const, 1, ""},
+		{"RTNLGRP_TC", Const, 1, ""},
+		{"RTN_ANYCAST", Const, 0, ""},
+		{"RTN_BLACKHOLE", Const, 0, ""},
+		{"RTN_BROADCAST", Const, 0, ""},
+		{"RTN_LOCAL", Const, 0, ""},
+		{"RTN_MAX", Const, 0, ""},
+		{"RTN_MULTICAST", Const, 0, ""},
+		{"RTN_NAT", Const, 0, ""},
+		{"RTN_PROHIBIT", Const, 0, ""},
+		{"RTN_THROW", Const, 0, ""},
+		{"RTN_UNICAST", Const, 0, ""},
+		{"RTN_UNREACHABLE", Const, 0, ""},
+		{"RTN_UNSPEC", Const, 0, ""},
+		{"RTN_XRESOLVE", Const, 0, ""},
+		{"RTPROT_BIRD", Const, 0, ""},
+		{"RTPROT_BOOT", Const, 0, ""},
+		{"RTPROT_DHCP", Const, 0, ""},
+		{"RTPROT_DNROUTED", Const, 0, ""},
+		{"RTPROT_GATED", Const, 0, ""},
+		{"RTPROT_KERNEL", Const, 0, ""},
+		{"RTPROT_MRT", Const, 0, ""},
+		{"RTPROT_NTK", Const, 0, ""},
+		{"RTPROT_RA", Const, 0, ""},
+		{"RTPROT_REDIRECT", Const, 0, ""},
+		{"RTPROT_STATIC", Const, 0, ""},
+		{"RTPROT_UNSPEC", Const, 0, ""},
+		{"RTPROT_XORP", Const, 0, ""},
+		{"RTPROT_ZEBRA", Const, 0, ""},
+		{"RTV_EXPIRE", Const, 0, ""},
+		{"RTV_HOPCOUNT", Const, 0, ""},
+		{"RTV_MTU", Const, 0, ""},
+		{"RTV_RPIPE", Const, 0, ""},
+		{"RTV_RTT", Const, 0, ""},
+		{"RTV_RTTVAR", Const, 0, ""},
+		{"RTV_SPIPE", Const, 0, ""},
+		{"RTV_SSTHRESH", Const, 0, ""},
+		{"RTV_WEIGHT", Const, 0, ""},
+		{"RT_CACHING_CONTEXT", Const, 1, ""},
+		{"RT_CLASS_DEFAULT", Const, 0, ""},
+		{"RT_CLASS_LOCAL", Const, 0, ""},
+		{"RT_CLASS_MAIN", Const, 0, ""},
+		{"RT_CLASS_MAX", Const, 0, ""},
+		{"RT_CLASS_UNSPEC", Const, 0, ""},
+		{"RT_DEFAULT_FIB", Const, 1, ""},
+		{"RT_NORTREF", Const, 1, ""},
+		{"RT_SCOPE_HOST", Const, 0, ""},
+		{"RT_SCOPE_LINK", Const, 0, ""},
+		{"RT_SCOPE_NOWHERE", Const, 0, ""},
+		{"RT_SCOPE_SITE", Const, 0, ""},
+		{"RT_SCOPE_UNIVERSE", Const, 0, ""},
+		{"RT_TABLEID_MAX", Const, 1, ""},
+		{"RT_TABLE_COMPAT", Const, 0, ""},
+		{"RT_TABLE_DEFAULT", Const, 0, ""},
+		{"RT_TABLE_LOCAL", Const, 0, ""},
+		{"RT_TABLE_MAIN", Const, 0, ""},
+		{"RT_TABLE_MAX", Const, 0, ""},
+		{"RT_TABLE_UNSPEC", Const, 0, ""},
+		{"RUSAGE_CHILDREN", Const, 0, ""},
+		{"RUSAGE_SELF", Const, 0, ""},
+		{"RUSAGE_THREAD", Const, 0, ""},
+		{"Radvisory_t", Type, 0, ""},
+		{"Radvisory_t.Count", Field, 0, ""},
+		{"Radvisory_t.Offset", Field, 0, ""},
+		{"Radvisory_t.Pad_cgo_0", Field, 0, ""},
+		{"RawConn", Type, 9, ""},
+		{"RawSockaddr", Type, 0, ""},
+		{"RawSockaddr.Data", Field, 0, ""},
+		{"RawSockaddr.Family", Field, 0, ""},
+		{"RawSockaddr.Len", Field, 0, ""},
+		{"RawSockaddrAny", Type, 0, ""},
+		{"RawSockaddrAny.Addr", Field, 0, ""},
+		{"RawSockaddrAny.Pad", Field, 0, ""},
+		{"RawSockaddrDatalink", Type, 0, ""},
+		{"RawSockaddrDatalink.Alen", Field, 0, ""},
+		{"RawSockaddrDatalink.Data", Field, 0, ""},
+		{"RawSockaddrDatalink.Family", Field, 0, ""},
+		{"RawSockaddrDatalink.Index", Field, 0, ""},
+		{"RawSockaddrDatalink.Len", Field, 0, ""},
+		{"RawSockaddrDatalink.Nlen", Field, 0, ""},
+		{"RawSockaddrDatalink.Pad_cgo_0", Field, 2, ""},
+		{"RawSockaddrDatalink.Slen", Field, 0, ""},
+		{"RawSockaddrDatalink.Type", Field, 0, ""},
+		{"RawSockaddrInet4", Type, 0, ""},
+		{"RawSockaddrInet4.Addr", Field, 0, ""},
+		{"RawSockaddrInet4.Family", Field, 0, ""},
+		{"RawSockaddrInet4.Len", Field, 0, ""},
+		{"RawSockaddrInet4.Port", Field, 0, ""},
+		{"RawSockaddrInet4.Zero", Field, 0, ""},
+		{"RawSockaddrInet6", Type, 0, ""},
+		{"RawSockaddrInet6.Addr", Field, 0, ""},
+		{"RawSockaddrInet6.Family", Field, 0, ""},
+		{"RawSockaddrInet6.Flowinfo", Field, 0, ""},
+		{"RawSockaddrInet6.Len", Field, 0, ""},
+		{"RawSockaddrInet6.Port", Field, 0, ""},
+		{"RawSockaddrInet6.Scope_id", Field, 0, ""},
+		{"RawSockaddrLinklayer", Type, 0, ""},
+		{"RawSockaddrLinklayer.Addr", Field, 0, ""},
+		{"RawSockaddrLinklayer.Family", Field, 0, ""},
+		{"RawSockaddrLinklayer.Halen", Field, 0, ""},
+		{"RawSockaddrLinklayer.Hatype", Field, 0, ""},
+		{"RawSockaddrLinklayer.Ifindex", Field, 0, ""},
+		{"RawSockaddrLinklayer.Pkttype", Field, 0, ""},
+		{"RawSockaddrLinklayer.Protocol", Field, 0, ""},
+		{"RawSockaddrNetlink", Type, 0, ""},
+		{"RawSockaddrNetlink.Family", Field, 0, ""},
+		{"RawSockaddrNetlink.Groups", Field, 0, ""},
+		{"RawSockaddrNetlink.Pad", Field, 0, ""},
+		{"RawSockaddrNetlink.Pid", Field, 0, ""},
+		{"RawSockaddrUnix", Type, 0, ""},
+		{"RawSockaddrUnix.Family", Field, 0, ""},
+		{"RawSockaddrUnix.Len", Field, 0, ""},
+		{"RawSockaddrUnix.Pad_cgo_0", Field, 2, ""},
+		{"RawSockaddrUnix.Path", Field, 0, ""},
+		{"RawSyscall", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"RawSyscall6", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"Read", Func, 0, "func(fd int, p []byte) (n int, err error)"},
+		{"ReadConsole", Func, 1, ""},
+		{"ReadDirectoryChanges", Func, 0, ""},
+		{"ReadDirent", Func, 0, "func(fd int, buf []byte) (n int, err error)"},
+		{"ReadFile", Func, 0, ""},
+		{"Readlink", Func, 0, "func(path string, buf []byte) (n int, err error)"},
+		{"Reboot", Func, 0, "func(cmd int) (err error)"},
+		{"Recvfrom", Func, 0, "func(fd int, p []byte, flags int) (n int, from Sockaddr, err error)"},
+		{"Recvmsg", Func, 0, "func(fd int, p []byte, oob []byte, flags int) (n int, oobn int, recvflags int, from Sockaddr, err error)"},
+		{"RegCloseKey", Func, 0, ""},
+		{"RegEnumKeyEx", Func, 0, ""},
+		{"RegOpenKeyEx", Func, 0, ""},
+		{"RegQueryInfoKey", Func, 0, ""},
+		{"RegQueryValueEx", Func, 0, ""},
+		{"RemoveDirectory", Func, 0, ""},
+		{"Removexattr", Func, 1, "func(path string, attr string) (err error)"},
+		{"Rename", Func, 0, "func(oldpath string, newpath string) (err error)"},
+		{"Renameat", Func, 0, "func(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)"},
+		{"Revoke", Func, 0, ""},
+		{"Rlimit", Type, 0, ""},
+		{"Rlimit.Cur", Field, 0, ""},
+		{"Rlimit.Max", Field, 0, ""},
+		{"Rmdir", Func, 0, "func(path string) error"},
+		{"RouteMessage", Type, 0, ""},
+		{"RouteMessage.Data", Field, 0, ""},
+		{"RouteMessage.Header", Field, 0, ""},
+		{"RouteRIB", Func, 0, ""},
+		{"RoutingMessage", Type, 0, ""},
+		{"RtAttr", Type, 0, ""},
+		{"RtAttr.Len", Field, 0, ""},
+		{"RtAttr.Type", Field, 0, ""},
+		{"RtGenmsg", Type, 0, ""},
+		{"RtGenmsg.Family", Field, 0, ""},
+		{"RtMetrics", Type, 0, ""},
+		{"RtMetrics.Expire", Field, 0, ""},
+		{"RtMetrics.Filler", Field, 0, ""},
+		{"RtMetrics.Hopcount", Field, 0, ""},
+		{"RtMetrics.Locks", Field, 0, ""},
+		{"RtMetrics.Mtu", Field, 0, ""},
+		{"RtMetrics.Pad", Field, 3, ""},
+		{"RtMetrics.Pksent", Field, 0, ""},
+		{"RtMetrics.Recvpipe", Field, 0, ""},
+		{"RtMetrics.Refcnt", Field, 2, ""},
+		{"RtMetrics.Rtt", Field, 0, ""},
+		{"RtMetrics.Rttvar", Field, 0, ""},
+		{"RtMetrics.Sendpipe", Field, 0, ""},
+		{"RtMetrics.Ssthresh", Field, 0, ""},
+		{"RtMetrics.Weight", Field, 0, ""},
+		{"RtMsg", Type, 0, ""},
+		{"RtMsg.Dst_len", Field, 0, ""},
+		{"RtMsg.Family", Field, 0, ""},
+		{"RtMsg.Flags", Field, 0, ""},
+		{"RtMsg.Protocol", Field, 0, ""},
+		{"RtMsg.Scope", Field, 0, ""},
+		{"RtMsg.Src_len", Field, 0, ""},
+		{"RtMsg.Table", Field, 0, ""},
+		{"RtMsg.Tos", Field, 0, ""},
+		{"RtMsg.Type", Field, 0, ""},
+		{"RtMsghdr", Type, 0, ""},
+		{"RtMsghdr.Addrs", Field, 0, ""},
+		{"RtMsghdr.Errno", Field, 0, ""},
+		{"RtMsghdr.Flags", Field, 0, ""},
+		{"RtMsghdr.Fmask", Field, 0, ""},
+		{"RtMsghdr.Hdrlen", Field, 2, ""},
+		{"RtMsghdr.Index", Field, 0, ""},
+		{"RtMsghdr.Inits", Field, 0, ""},
+		{"RtMsghdr.Mpls", Field, 2, ""},
+		{"RtMsghdr.Msglen", Field, 0, ""},
+		{"RtMsghdr.Pad_cgo_0", Field, 0, ""},
+		{"RtMsghdr.Pad_cgo_1", Field, 2, ""},
+		{"RtMsghdr.Pid", Field, 0, ""},
+		{"RtMsghdr.Priority", Field, 2, ""},
+		{"RtMsghdr.Rmx", Field, 0, ""},
+		{"RtMsghdr.Seq", Field, 0, ""},
+		{"RtMsghdr.Tableid", Field, 2, ""},
+		{"RtMsghdr.Type", Field, 0, ""},
+		{"RtMsghdr.Use", Field, 0, ""},
+		{"RtMsghdr.Version", Field, 0, ""},
+		{"RtNexthop", Type, 0, ""},
+		{"RtNexthop.Flags", Field, 0, ""},
+		{"RtNexthop.Hops", Field, 0, ""},
+		{"RtNexthop.Ifindex", Field, 0, ""},
+		{"RtNexthop.Len", Field, 0, ""},
+		{"Rusage", Type, 0, ""},
+		{"Rusage.CreationTime", Field, 0, ""},
+		{"Rusage.ExitTime", Field, 0, ""},
+		{"Rusage.Idrss", Field, 0, ""},
+		{"Rusage.Inblock", Field, 0, ""},
+		{"Rusage.Isrss", Field, 0, ""},
+		{"Rusage.Ixrss", Field, 0, ""},
+		{"Rusage.KernelTime", Field, 0, ""},
+		{"Rusage.Majflt", Field, 0, ""},
+		{"Rusage.Maxrss", Field, 0, ""},
+		{"Rusage.Minflt", Field, 0, ""},
+		{"Rusage.Msgrcv", Field, 0, ""},
+		{"Rusage.Msgsnd", Field, 0, ""},
+		{"Rusage.Nivcsw", Field, 0, ""},
+		{"Rusage.Nsignals", Field, 0, ""},
+		{"Rusage.Nswap", Field, 0, ""},
+		{"Rusage.Nvcsw", Field, 0, ""},
+		{"Rusage.Oublock", Field, 0, ""},
+		{"Rusage.Stime", Field, 0, ""},
+		{"Rusage.UserTime", Field, 0, ""},
+		{"Rusage.Utime", Field, 0, ""},
+		{"SCM_BINTIME", Const, 0, ""},
+		{"SCM_CREDENTIALS", Const, 0, ""},
+		{"SCM_CREDS", Const, 0, ""},
+		{"SCM_RIGHTS", Const, 0, ""},
+		{"SCM_TIMESTAMP", Const, 0, ""},
+		{"SCM_TIMESTAMPING", Const, 0, ""},
+		{"SCM_TIMESTAMPNS", Const, 0, ""},
+		{"SCM_TIMESTAMP_MONOTONIC", Const, 0, ""},
+		{"SHUT_RD", Const, 0, ""},
+		{"SHUT_RDWR", Const, 0, ""},
+		{"SHUT_WR", Const, 0, ""},
+		{"SID", Type, 0, ""},
+		{"SIDAndAttributes", Type, 0, ""},
+		{"SIDAndAttributes.Attributes", Field, 0, ""},
+		{"SIDAndAttributes.Sid", Field, 0, ""},
+		{"SIGABRT", Const, 0, ""},
+		{"SIGALRM", Const, 0, ""},
+		{"SIGBUS", Const, 0, ""},
+		{"SIGCHLD", Const, 0, ""},
+		{"SIGCLD", Const, 0, ""},
+		{"SIGCONT", Const, 0, ""},
+		{"SIGEMT", Const, 0, ""},
+		{"SIGFPE", Const, 0, ""},
+		{"SIGHUP", Const, 0, ""},
+		{"SIGILL", Const, 0, ""},
+		{"SIGINFO", Const, 0, ""},
+		{"SIGINT", Const, 0, ""},
+		{"SIGIO", Const, 0, ""},
+		{"SIGIOT", Const, 0, ""},
+		{"SIGKILL", Const, 0, ""},
+		{"SIGLIBRT", Const, 1, ""},
+		{"SIGLWP", Const, 0, ""},
+		{"SIGPIPE", Const, 0, ""},
+		{"SIGPOLL", Const, 0, ""},
+		{"SIGPROF", Const, 0, ""},
+		{"SIGPWR", Const, 0, ""},
+		{"SIGQUIT", Const, 0, ""},
+		{"SIGSEGV", Const, 0, ""},
+		{"SIGSTKFLT", Const, 0, ""},
+		{"SIGSTOP", Const, 0, ""},
+		{"SIGSYS", Const, 0, ""},
+		{"SIGTERM", Const, 0, ""},
+		{"SIGTHR", Const, 0, ""},
+		{"SIGTRAP", Const, 0, ""},
+		{"SIGTSTP", Const, 0, ""},
+		{"SIGTTIN", Const, 0, ""},
+		{"SIGTTOU", Const, 0, ""},
+		{"SIGUNUSED", Const, 0, ""},
+		{"SIGURG", Const, 0, ""},
+		{"SIGUSR1", Const, 0, ""},
+		{"SIGUSR2", Const, 0, ""},
+		{"SIGVTALRM", Const, 0, ""},
+		{"SIGWINCH", Const, 0, ""},
+		{"SIGXCPU", Const, 0, ""},
+		{"SIGXFSZ", Const, 0, ""},
+		{"SIOCADDDLCI", Const, 0, ""},
+		{"SIOCADDMULTI", Const, 0, ""},
+		{"SIOCADDRT", Const, 0, ""},
+		{"SIOCAIFADDR", Const, 0, ""},
+		{"SIOCAIFGROUP", Const, 0, ""},
+		{"SIOCALIFADDR", Const, 0, ""},
+		{"SIOCARPIPLL", Const, 0, ""},
+		{"SIOCATMARK", Const, 0, ""},
+		{"SIOCAUTOADDR", Const, 0, ""},
+		{"SIOCAUTONETMASK", Const, 0, ""},
+		{"SIOCBRDGADD", Const, 1, ""},
+		{"SIOCBRDGADDS", Const, 1, ""},
+		{"SIOCBRDGARL", Const, 1, ""},
+		{"SIOCBRDGDADDR", Const, 1, ""},
+		{"SIOCBRDGDEL", Const, 1, ""},
+		{"SIOCBRDGDELS", Const, 1, ""},
+		{"SIOCBRDGFLUSH", Const, 1, ""},
+		{"SIOCBRDGFRL", Const, 1, ""},
+		{"SIOCBRDGGCACHE", Const, 1, ""},
+		{"SIOCBRDGGFD", Const, 1, ""},
+		{"SIOCBRDGGHT", Const, 1, ""},
+		{"SIOCBRDGGIFFLGS", Const, 1, ""},
+		{"SIOCBRDGGMA", Const, 1, ""},
+		{"SIOCBRDGGPARAM", Const, 1, ""},
+		{"SIOCBRDGGPRI", Const, 1, ""},
+		{"SIOCBRDGGRL", Const, 1, ""},
+		{"SIOCBRDGGSIFS", Const, 1, ""},
+		{"SIOCBRDGGTO", Const, 1, ""},
+		{"SIOCBRDGIFS", Const, 1, ""},
+		{"SIOCBRDGRTS", Const, 1, ""},
+		{"SIOCBRDGSADDR", Const, 1, ""},
+		{"SIOCBRDGSCACHE", Const, 1, ""},
+		{"SIOCBRDGSFD", Const, 1, ""},
+		{"SIOCBRDGSHT", Const, 1, ""},
+		{"SIOCBRDGSIFCOST", Const, 1, ""},
+		{"SIOCBRDGSIFFLGS", Const, 1, ""},
+		{"SIOCBRDGSIFPRIO", Const, 1, ""},
+		{"SIOCBRDGSMA", Const, 1, ""},
+		{"SIOCBRDGSPRI", Const, 1, ""},
+		{"SIOCBRDGSPROTO", Const, 1, ""},
+		{"SIOCBRDGSTO", Const, 1, ""},
+		{"SIOCBRDGSTXHC", Const, 1, ""},
+		{"SIOCDARP", Const, 0, ""},
+		{"SIOCDELDLCI", Const, 0, ""},
+		{"SIOCDELMULTI", Const, 0, ""},
+		{"SIOCDELRT", Const, 0, ""},
+		{"SIOCDEVPRIVATE", Const, 0, ""},
+		{"SIOCDIFADDR", Const, 0, ""},
+		{"SIOCDIFGROUP", Const, 0, ""},
+		{"SIOCDIFPHYADDR", Const, 0, ""},
+		{"SIOCDLIFADDR", Const, 0, ""},
+		{"SIOCDRARP", Const, 0, ""},
+		{"SIOCGARP", Const, 0, ""},
+		{"SIOCGDRVSPEC", Const, 0, ""},
+		{"SIOCGETKALIVE", Const, 1, ""},
+		{"SIOCGETLABEL", Const, 1, ""},
+		{"SIOCGETPFLOW", Const, 1, ""},
+		{"SIOCGETPFSYNC", Const, 1, ""},
+		{"SIOCGETSGCNT", Const, 0, ""},
+		{"SIOCGETVIFCNT", Const, 0, ""},
+		{"SIOCGETVLAN", Const, 0, ""},
+		{"SIOCGHIWAT", Const, 0, ""},
+		{"SIOCGIFADDR", Const, 0, ""},
+		{"SIOCGIFADDRPREF", Const, 1, ""},
+		{"SIOCGIFALIAS", Const, 1, ""},
+		{"SIOCGIFALTMTU", Const, 0, ""},
+		{"SIOCGIFASYNCMAP", Const, 0, ""},
+		{"SIOCGIFBOND", Const, 0, ""},
+		{"SIOCGIFBR", Const, 0, ""},
+		{"SIOCGIFBRDADDR", Const, 0, ""},
+		{"SIOCGIFCAP", Const, 0, ""},
+		{"SIOCGIFCONF", Const, 0, ""},
+		{"SIOCGIFCOUNT", Const, 0, ""},
+		{"SIOCGIFDATA", Const, 1, ""},
+		{"SIOCGIFDESCR", Const, 0, ""},
+		{"SIOCGIFDEVMTU", Const, 0, ""},
+		{"SIOCGIFDLT", Const, 1, ""},
+		{"SIOCGIFDSTADDR", Const, 0, ""},
+		{"SIOCGIFENCAP", Const, 0, ""},
+		{"SIOCGIFFIB", Const, 1, ""},
+		{"SIOCGIFFLAGS", Const, 0, ""},
+		{"SIOCGIFGATTR", Const, 1, ""},
+		{"SIOCGIFGENERIC", Const, 0, ""},
+		{"SIOCGIFGMEMB", Const, 0, ""},
+		{"SIOCGIFGROUP", Const, 0, ""},
+		{"SIOCGIFHARDMTU", Const, 3, ""},
+		{"SIOCGIFHWADDR", Const, 0, ""},
+		{"SIOCGIFINDEX", Const, 0, ""},
+		{"SIOCGIFKPI", Const, 0, ""},
+		{"SIOCGIFMAC", Const, 0, ""},
+		{"SIOCGIFMAP", Const, 0, ""},
+		{"SIOCGIFMEDIA", Const, 0, ""},
+		{"SIOCGIFMEM", Const, 0, ""},
+		{"SIOCGIFMETRIC", Const, 0, ""},
+		{"SIOCGIFMTU", Const, 0, ""},
+		{"SIOCGIFNAME", Const, 0, ""},
+		{"SIOCGIFNETMASK", Const, 0, ""},
+		{"SIOCGIFPDSTADDR", Const, 0, ""},
+		{"SIOCGIFPFLAGS", Const, 0, ""},
+		{"SIOCGIFPHYS", Const, 0, ""},
+		{"SIOCGIFPRIORITY", Const, 1, ""},
+		{"SIOCGIFPSRCADDR", Const, 0, ""},
+		{"SIOCGIFRDOMAIN", Const, 1, ""},
+		{"SIOCGIFRTLABEL", Const, 1, ""},
+		{"SIOCGIFSLAVE", Const, 0, ""},
+		{"SIOCGIFSTATUS", Const, 0, ""},
+		{"SIOCGIFTIMESLOT", Const, 1, ""},
+		{"SIOCGIFTXQLEN", Const, 0, ""},
+		{"SIOCGIFVLAN", Const, 0, ""},
+		{"SIOCGIFWAKEFLAGS", Const, 0, ""},
+		{"SIOCGIFXFLAGS", Const, 1, ""},
+		{"SIOCGLIFADDR", Const, 0, ""},
+		{"SIOCGLIFPHYADDR", Const, 0, ""},
+		{"SIOCGLIFPHYRTABLE", Const, 1, ""},
+		{"SIOCGLIFPHYTTL", Const, 3, ""},
+		{"SIOCGLINKSTR", Const, 1, ""},
+		{"SIOCGLOWAT", Const, 0, ""},
+		{"SIOCGPGRP", Const, 0, ""},
+		{"SIOCGPRIVATE_0", Const, 0, ""},
+		{"SIOCGPRIVATE_1", Const, 0, ""},
+		{"SIOCGRARP", Const, 0, ""},
+		{"SIOCGSPPPPARAMS", Const, 3, ""},
+		{"SIOCGSTAMP", Const, 0, ""},
+		{"SIOCGSTAMPNS", Const, 0, ""},
+		{"SIOCGVH", Const, 1, ""},
+		{"SIOCGVNETID", Const, 3, ""},
+		{"SIOCIFCREATE", Const, 0, ""},
+		{"SIOCIFCREATE2", Const, 0, ""},
+		{"SIOCIFDESTROY", Const, 0, ""},
+		{"SIOCIFGCLONERS", Const, 0, ""},
+		{"SIOCINITIFADDR", Const, 1, ""},
+		{"SIOCPROTOPRIVATE", Const, 0, ""},
+		{"SIOCRSLVMULTI", Const, 0, ""},
+		{"SIOCRTMSG", Const, 0, ""},
+		{"SIOCSARP", Const, 0, ""},
+		{"SIOCSDRVSPEC", Const, 0, ""},
+		{"SIOCSETKALIVE", Const, 1, ""},
+		{"SIOCSETLABEL", Const, 1, ""},
+		{"SIOCSETPFLOW", Const, 1, ""},
+		{"SIOCSETPFSYNC", Const, 1, ""},
+		{"SIOCSETVLAN", Const, 0, ""},
+		{"SIOCSHIWAT", Const, 0, ""},
+		{"SIOCSIFADDR", Const, 0, ""},
+		{"SIOCSIFADDRPREF", Const, 1, ""},
+		{"SIOCSIFALTMTU", Const, 0, ""},
+		{"SIOCSIFASYNCMAP", Const, 0, ""},
+		{"SIOCSIFBOND", Const, 0, ""},
+		{"SIOCSIFBR", Const, 0, ""},
+		{"SIOCSIFBRDADDR", Const, 0, ""},
+		{"SIOCSIFCAP", Const, 0, ""},
+		{"SIOCSIFDESCR", Const, 0, ""},
+		{"SIOCSIFDSTADDR", Const, 0, ""},
+		{"SIOCSIFENCAP", Const, 0, ""},
+		{"SIOCSIFFIB", Const, 1, ""},
+		{"SIOCSIFFLAGS", Const, 0, ""},
+		{"SIOCSIFGATTR", Const, 1, ""},
+		{"SIOCSIFGENERIC", Const, 0, ""},
+		{"SIOCSIFHWADDR", Const, 0, ""},
+		{"SIOCSIFHWBROADCAST", Const, 0, ""},
+		{"SIOCSIFKPI", Const, 0, ""},
+		{"SIOCSIFLINK", Const, 0, ""},
+		{"SIOCSIFLLADDR", Const, 0, ""},
+		{"SIOCSIFMAC", Const, 0, ""},
+		{"SIOCSIFMAP", Const, 0, ""},
+		{"SIOCSIFMEDIA", Const, 0, ""},
+		{"SIOCSIFMEM", Const, 0, ""},
+		{"SIOCSIFMETRIC", Const, 0, ""},
+		{"SIOCSIFMTU", Const, 0, ""},
+		{"SIOCSIFNAME", Const, 0, ""},
+		{"SIOCSIFNETMASK", Const, 0, ""},
+		{"SIOCSIFPFLAGS", Const, 0, ""},
+		{"SIOCSIFPHYADDR", Const, 0, ""},
+		{"SIOCSIFPHYS", Const, 0, ""},
+		{"SIOCSIFPRIORITY", Const, 1, ""},
+		{"SIOCSIFRDOMAIN", Const, 1, ""},
+		{"SIOCSIFRTLABEL", Const, 1, ""},
+		{"SIOCSIFRVNET", Const, 0, ""},
+		{"SIOCSIFSLAVE", Const, 0, ""},
+		{"SIOCSIFTIMESLOT", Const, 1, ""},
+		{"SIOCSIFTXQLEN", Const, 0, ""},
+		{"SIOCSIFVLAN", Const, 0, ""},
+		{"SIOCSIFVNET", Const, 0, ""},
+		{"SIOCSIFXFLAGS", Const, 1, ""},
+		{"SIOCSLIFPHYADDR", Const, 0, ""},
+		{"SIOCSLIFPHYRTABLE", Const, 1, ""},
+		{"SIOCSLIFPHYTTL", Const, 3, ""},
+		{"SIOCSLINKSTR", Const, 1, ""},
+		{"SIOCSLOWAT", Const, 0, ""},
+		{"SIOCSPGRP", Const, 0, ""},
+		{"SIOCSRARP", Const, 0, ""},
+		{"SIOCSSPPPPARAMS", Const, 3, ""},
+		{"SIOCSVH", Const, 1, ""},
+		{"SIOCSVNETID", Const, 3, ""},
+		{"SIOCZIFDATA", Const, 1, ""},
+		{"SIO_GET_EXTENSION_FUNCTION_POINTER", Const, 1, ""},
+		{"SIO_GET_INTERFACE_LIST", Const, 0, ""},
+		{"SIO_KEEPALIVE_VALS", Const, 3, ""},
+		{"SIO_UDP_CONNRESET", Const, 4, ""},
+		{"SOCK_CLOEXEC", Const, 0, ""},
+		{"SOCK_DCCP", Const, 0, ""},
+		{"SOCK_DGRAM", Const, 0, ""},
+		{"SOCK_FLAGS_MASK", Const, 1, ""},
+		{"SOCK_MAXADDRLEN", Const, 0, ""},
+		{"SOCK_NONBLOCK", Const, 0, ""},
+		{"SOCK_NOSIGPIPE", Const, 1, ""},
+		{"SOCK_PACKET", Const, 0, ""},
+		{"SOCK_RAW", Const, 0, ""},
+		{"SOCK_RDM", Const, 0, ""},
+		{"SOCK_SEQPACKET", Const, 0, ""},
+		{"SOCK_STREAM", Const, 0, ""},
+		{"SOL_AAL", Const, 0, ""},
+		{"SOL_ATM", Const, 0, ""},
+		{"SOL_DECNET", Const, 0, ""},
+		{"SOL_ICMPV6", Const, 0, ""},
+		{"SOL_IP", Const, 0, ""},
+		{"SOL_IPV6", Const, 0, ""},
+		{"SOL_IRDA", Const, 0, ""},
+		{"SOL_PACKET", Const, 0, ""},
+		{"SOL_RAW", Const, 0, ""},
+		{"SOL_SOCKET", Const, 0, ""},
+		{"SOL_TCP", Const, 0, ""},
+		{"SOL_X25", Const, 0, ""},
+		{"SOMAXCONN", Const, 0, ""},
+		{"SO_ACCEPTCONN", Const, 0, ""},
+		{"SO_ACCEPTFILTER", Const, 0, ""},
+		{"SO_ATTACH_FILTER", Const, 0, ""},
+		{"SO_BINDANY", Const, 1, ""},
+		{"SO_BINDTODEVICE", Const, 0, ""},
+		{"SO_BINTIME", Const, 0, ""},
+		{"SO_BROADCAST", Const, 0, ""},
+		{"SO_BSDCOMPAT", Const, 0, ""},
+		{"SO_DEBUG", Const, 0, ""},
+		{"SO_DETACH_FILTER", Const, 0, ""},
+		{"SO_DOMAIN", Const, 0, ""},
+		{"SO_DONTROUTE", Const, 0, ""},
+		{"SO_DONTTRUNC", Const, 0, ""},
+		{"SO_ERROR", Const, 0, ""},
+		{"SO_KEEPALIVE", Const, 0, ""},
+		{"SO_LABEL", Const, 0, ""},
+		{"SO_LINGER", Const, 0, ""},
+		{"SO_LINGER_SEC", Const, 0, ""},
+		{"SO_LISTENINCQLEN", Const, 0, ""},
+		{"SO_LISTENQLEN", Const, 0, ""},
+		{"SO_LISTENQLIMIT", Const, 0, ""},
+		{"SO_MARK", Const, 0, ""},
+		{"SO_NETPROC", Const, 1, ""},
+		{"SO_NKE", Const, 0, ""},
+		{"SO_NOADDRERR", Const, 0, ""},
+		{"SO_NOHEADER", Const, 1, ""},
+		{"SO_NOSIGPIPE", Const, 0, ""},
+		{"SO_NOTIFYCONFLICT", Const, 0, ""},
+		{"SO_NO_CHECK", Const, 0, ""},
+		{"SO_NO_DDP", Const, 0, ""},
+		{"SO_NO_OFFLOAD", Const, 0, ""},
+		{"SO_NP_EXTENSIONS", Const, 0, ""},
+		{"SO_NREAD", Const, 0, ""},
+		{"SO_NUMRCVPKT", Const, 16, ""},
+		{"SO_NWRITE", Const, 0, ""},
+		{"SO_OOBINLINE", Const, 0, ""},
+		{"SO_OVERFLOWED", Const, 1, ""},
+		{"SO_PASSCRED", Const, 0, ""},
+		{"SO_PASSSEC", Const, 0, ""},
+		{"SO_PEERCRED", Const, 0, ""},
+		{"SO_PEERLABEL", Const, 0, ""},
+		{"SO_PEERNAME", Const, 0, ""},
+		{"SO_PEERSEC", Const, 0, ""},
+		{"SO_PRIORITY", Const, 0, ""},
+		{"SO_PROTOCOL", Const, 0, ""},
+		{"SO_PROTOTYPE", Const, 1, ""},
+		{"SO_RANDOMPORT", Const, 0, ""},
+		{"SO_RCVBUF", Const, 0, ""},
+		{"SO_RCVBUFFORCE", Const, 0, ""},
+		{"SO_RCVLOWAT", Const, 0, ""},
+		{"SO_RCVTIMEO", Const, 0, ""},
+		{"SO_RESTRICTIONS", Const, 0, ""},
+		{"SO_RESTRICT_DENYIN", Const, 0, ""},
+		{"SO_RESTRICT_DENYOUT", Const, 0, ""},
+		{"SO_RESTRICT_DENYSET", Const, 0, ""},
+		{"SO_REUSEADDR", Const, 0, ""},
+		{"SO_REUSEPORT", Const, 0, ""},
+		{"SO_REUSESHAREUID", Const, 0, ""},
+		{"SO_RTABLE", Const, 1, ""},
+		{"SO_RXQ_OVFL", Const, 0, ""},
+		{"SO_SECURITY_AUTHENTICATION", Const, 0, ""},
+		{"SO_SECURITY_ENCRYPTION_NETWORK", Const, 0, ""},
+		{"SO_SECURITY_ENCRYPTION_TRANSPORT", Const, 0, ""},
+		{"SO_SETFIB", Const, 0, ""},
+		{"SO_SNDBUF", Const, 0, ""},
+		{"SO_SNDBUFFORCE", Const, 0, ""},
+		{"SO_SNDLOWAT", Const, 0, ""},
+		{"SO_SNDTIMEO", Const, 0, ""},
+		{"SO_SPLICE", Const, 1, ""},
+		{"SO_TIMESTAMP", Const, 0, ""},
+		{"SO_TIMESTAMPING", Const, 0, ""},
+		{"SO_TIMESTAMPNS", Const, 0, ""},
+		{"SO_TIMESTAMP_MONOTONIC", Const, 0, ""},
+		{"SO_TYPE", Const, 0, ""},
+		{"SO_UPCALLCLOSEWAIT", Const, 0, ""},
+		{"SO_UPDATE_ACCEPT_CONTEXT", Const, 0, ""},
+		{"SO_UPDATE_CONNECT_CONTEXT", Const, 1, ""},
+		{"SO_USELOOPBACK", Const, 0, ""},
+		{"SO_USER_COOKIE", Const, 1, ""},
+		{"SO_VENDOR", Const, 3, ""},
+		{"SO_WANTMORE", Const, 0, ""},
+		{"SO_WANTOOBFLAG", Const, 0, ""},
+		{"SSLExtraCertChainPolicyPara", Type, 0, ""},
+		{"SSLExtraCertChainPolicyPara.AuthType", Field, 0, ""},
+		{"SSLExtraCertChainPolicyPara.Checks", Field, 0, ""},
+		{"SSLExtraCertChainPolicyPara.ServerName", Field, 0, ""},
+		{"SSLExtraCertChainPolicyPara.Size", Field, 0, ""},
+		{"STANDARD_RIGHTS_ALL", Const, 0, ""},
+		{"STANDARD_RIGHTS_EXECUTE", Const, 0, ""},
+		{"STANDARD_RIGHTS_READ", Const, 0, ""},
+		{"STANDARD_RIGHTS_REQUIRED", Const, 0, ""},
+		{"STANDARD_RIGHTS_WRITE", Const, 0, ""},
+		{"STARTF_USESHOWWINDOW", Const, 0, ""},
+		{"STARTF_USESTDHANDLES", Const, 0, ""},
+		{"STD_ERROR_HANDLE", Const, 0, ""},
+		{"STD_INPUT_HANDLE", Const, 0, ""},
+		{"STD_OUTPUT_HANDLE", Const, 0, ""},
+		{"SUBLANG_ENGLISH_US", Const, 0, ""},
+		{"SW_FORCEMINIMIZE", Const, 0, ""},
+		{"SW_HIDE", Const, 0, ""},
+		{"SW_MAXIMIZE", Const, 0, ""},
+		{"SW_MINIMIZE", Const, 0, ""},
+		{"SW_NORMAL", Const, 0, ""},
+		{"SW_RESTORE", Const, 0, ""},
+		{"SW_SHOW", Const, 0, ""},
+		{"SW_SHOWDEFAULT", Const, 0, ""},
+		{"SW_SHOWMAXIMIZED", Const, 0, ""},
+		{"SW_SHOWMINIMIZED", Const, 0, ""},
+		{"SW_SHOWMINNOACTIVE", Const, 0, ""},
+		{"SW_SHOWNA", Const, 0, ""},
+		{"SW_SHOWNOACTIVATE", Const, 0, ""},
+		{"SW_SHOWNORMAL", Const, 0, ""},
+		{"SYMBOLIC_LINK_FLAG_DIRECTORY", Const, 4, ""},
+		{"SYNCHRONIZE", Const, 0, ""},
+		{"SYSCTL_VERSION", Const, 1, ""},
+		{"SYSCTL_VERS_0", Const, 1, ""},
+		{"SYSCTL_VERS_1", Const, 1, ""},
+		{"SYSCTL_VERS_MASK", Const, 1, ""},
+		{"SYS_ABORT2", Const, 0, ""},
+		{"SYS_ACCEPT", Const, 0, ""},
+		{"SYS_ACCEPT4", Const, 0, ""},
+		{"SYS_ACCEPT_NOCANCEL", Const, 0, ""},
+		{"SYS_ACCESS", Const, 0, ""},
+		{"SYS_ACCESS_EXTENDED", Const, 0, ""},
+		{"SYS_ACCT", Const, 0, ""},
+		{"SYS_ADD_KEY", Const, 0, ""},
+		{"SYS_ADD_PROFIL", Const, 0, ""},
+		{"SYS_ADJFREQ", Const, 1, ""},
+		{"SYS_ADJTIME", Const, 0, ""},
+		{"SYS_ADJTIMEX", Const, 0, ""},
+		{"SYS_AFS_SYSCALL", Const, 0, ""},
+		{"SYS_AIO_CANCEL", Const, 0, ""},
+		{"SYS_AIO_ERROR", Const, 0, ""},
+		{"SYS_AIO_FSYNC", Const, 0, ""},
+		{"SYS_AIO_MLOCK", Const, 14, ""},
+		{"SYS_AIO_READ", Const, 0, ""},
+		{"SYS_AIO_RETURN", Const, 0, ""},
+		{"SYS_AIO_SUSPEND", Const, 0, ""},
+		{"SYS_AIO_SUSPEND_NOCANCEL", Const, 0, ""},
+		{"SYS_AIO_WAITCOMPLETE", Const, 14, ""},
+		{"SYS_AIO_WRITE", Const, 0, ""},
+		{"SYS_ALARM", Const, 0, ""},
+		{"SYS_ARCH_PRCTL", Const, 0, ""},
+		{"SYS_ARM_FADVISE64_64", Const, 0, ""},
+		{"SYS_ARM_SYNC_FILE_RANGE", Const, 0, ""},
+		{"SYS_ATGETMSG", Const, 0, ""},
+		{"SYS_ATPGETREQ", Const, 0, ""},
+		{"SYS_ATPGETRSP", Const, 0, ""},
+		{"SYS_ATPSNDREQ", Const, 0, ""},
+		{"SYS_ATPSNDRSP", Const, 0, ""},
+		{"SYS_ATPUTMSG", Const, 0, ""},
+		{"SYS_ATSOCKET", Const, 0, ""},
+		{"SYS_AUDIT", Const, 0, ""},
+		{"SYS_AUDITCTL", Const, 0, ""},
+		{"SYS_AUDITON", Const, 0, ""},
+		{"SYS_AUDIT_SESSION_JOIN", Const, 0, ""},
+		{"SYS_AUDIT_SESSION_PORT", Const, 0, ""},
+		{"SYS_AUDIT_SESSION_SELF", Const, 0, ""},
+		{"SYS_BDFLUSH", Const, 0, ""},
+		{"SYS_BIND", Const, 0, ""},
+		{"SYS_BINDAT", Const, 3, ""},
+		{"SYS_BREAK", Const, 0, ""},
+		{"SYS_BRK", Const, 0, ""},
+		{"SYS_BSDTHREAD_CREATE", Const, 0, ""},
+		{"SYS_BSDTHREAD_REGISTER", Const, 0, ""},
+		{"SYS_BSDTHREAD_TERMINATE", Const, 0, ""},
+		{"SYS_CAPGET", Const, 0, ""},
+		{"SYS_CAPSET", Const, 0, ""},
+		{"SYS_CAP_ENTER", Const, 0, ""},
+		{"SYS_CAP_FCNTLS_GET", Const, 1, ""},
+		{"SYS_CAP_FCNTLS_LIMIT", Const, 1, ""},
+		{"SYS_CAP_GETMODE", Const, 0, ""},
+		{"SYS_CAP_GETRIGHTS", Const, 0, ""},
+		{"SYS_CAP_IOCTLS_GET", Const, 1, ""},
+		{"SYS_CAP_IOCTLS_LIMIT", Const, 1, ""},
+		{"SYS_CAP_NEW", Const, 0, ""},
+		{"SYS_CAP_RIGHTS_GET", Const, 1, ""},
+		{"SYS_CAP_RIGHTS_LIMIT", Const, 1, ""},
+		{"SYS_CHDIR", Const, 0, ""},
+		{"SYS_CHFLAGS", Const, 0, ""},
+		{"SYS_CHFLAGSAT", Const, 3, ""},
+		{"SYS_CHMOD", Const, 0, ""},
+		{"SYS_CHMOD_EXTENDED", Const, 0, ""},
+		{"SYS_CHOWN", Const, 0, ""},
+		{"SYS_CHOWN32", Const, 0, ""},
+		{"SYS_CHROOT", Const, 0, ""},
+		{"SYS_CHUD", Const, 0, ""},
+		{"SYS_CLOCK_ADJTIME", Const, 0, ""},
+		{"SYS_CLOCK_GETCPUCLOCKID2", Const, 1, ""},
+		{"SYS_CLOCK_GETRES", Const, 0, ""},
+		{"SYS_CLOCK_GETTIME", Const, 0, ""},
+		{"SYS_CLOCK_NANOSLEEP", Const, 0, ""},
+		{"SYS_CLOCK_SETTIME", Const, 0, ""},
+		{"SYS_CLONE", Const, 0, ""},
+		{"SYS_CLOSE", Const, 0, ""},
+		{"SYS_CLOSEFROM", Const, 0, ""},
+		{"SYS_CLOSE_NOCANCEL", Const, 0, ""},
+		{"SYS_CONNECT", Const, 0, ""},
+		{"SYS_CONNECTAT", Const, 3, ""},
+		{"SYS_CONNECT_NOCANCEL", Const, 0, ""},
+		{"SYS_COPYFILE", Const, 0, ""},
+		{"SYS_CPUSET", Const, 0, ""},
+		{"SYS_CPUSET_GETAFFINITY", Const, 0, ""},
+		{"SYS_CPUSET_GETID", Const, 0, ""},
+		{"SYS_CPUSET_SETAFFINITY", Const, 0, ""},
+		{"SYS_CPUSET_SETID", Const, 0, ""},
+		{"SYS_CREAT", Const, 0, ""},
+		{"SYS_CREATE_MODULE", Const, 0, ""},
+		{"SYS_CSOPS", Const, 0, ""},
+		{"SYS_CSOPS_AUDITTOKEN", Const, 16, ""},
+		{"SYS_DELETE", Const, 0, ""},
+		{"SYS_DELETE_MODULE", Const, 0, ""},
+		{"SYS_DUP", Const, 0, ""},
+		{"SYS_DUP2", Const, 0, ""},
+		{"SYS_DUP3", Const, 0, ""},
+		{"SYS_EACCESS", Const, 0, ""},
+		{"SYS_EPOLL_CREATE", Const, 0, ""},
+		{"SYS_EPOLL_CREATE1", Const, 0, ""},
+		{"SYS_EPOLL_CTL", Const, 0, ""},
+		{"SYS_EPOLL_CTL_OLD", Const, 0, ""},
+		{"SYS_EPOLL_PWAIT", Const, 0, ""},
+		{"SYS_EPOLL_WAIT", Const, 0, ""},
+		{"SYS_EPOLL_WAIT_OLD", Const, 0, ""},
+		{"SYS_EVENTFD", Const, 0, ""},
+		{"SYS_EVENTFD2", Const, 0, ""},
+		{"SYS_EXCHANGEDATA", Const, 0, ""},
+		{"SYS_EXECVE", Const, 0, ""},
+		{"SYS_EXIT", Const, 0, ""},
+		{"SYS_EXIT_GROUP", Const, 0, ""},
+		{"SYS_EXTATTRCTL", Const, 0, ""},
+		{"SYS_EXTATTR_DELETE_FD", Const, 0, ""},
+		{"SYS_EXTATTR_DELETE_FILE", Const, 0, ""},
+		{"SYS_EXTATTR_DELETE_LINK", Const, 0, ""},
+		{"SYS_EXTATTR_GET_FD", Const, 0, ""},
+		{"SYS_EXTATTR_GET_FILE", Const, 0, ""},
+		{"SYS_EXTATTR_GET_LINK", Const, 0, ""},
+		{"SYS_EXTATTR_LIST_FD", Const, 0, ""},
+		{"SYS_EXTATTR_LIST_FILE", Const, 0, ""},
+		{"SYS_EXTATTR_LIST_LINK", Const, 0, ""},
+		{"SYS_EXTATTR_SET_FD", Const, 0, ""},
+		{"SYS_EXTATTR_SET_FILE", Const, 0, ""},
+		{"SYS_EXTATTR_SET_LINK", Const, 0, ""},
+		{"SYS_FACCESSAT", Const, 0, ""},
+		{"SYS_FADVISE64", Const, 0, ""},
+		{"SYS_FADVISE64_64", Const, 0, ""},
+		{"SYS_FALLOCATE", Const, 0, ""},
+		{"SYS_FANOTIFY_INIT", Const, 0, ""},
+		{"SYS_FANOTIFY_MARK", Const, 0, ""},
+		{"SYS_FCHDIR", Const, 0, ""},
+		{"SYS_FCHFLAGS", Const, 0, ""},
+		{"SYS_FCHMOD", Const, 0, ""},
+		{"SYS_FCHMODAT", Const, 0, ""},
+		{"SYS_FCHMOD_EXTENDED", Const, 0, ""},
+		{"SYS_FCHOWN", Const, 0, ""},
+		{"SYS_FCHOWN32", Const, 0, ""},
+		{"SYS_FCHOWNAT", Const, 0, ""},
+		{"SYS_FCHROOT", Const, 1, ""},
+		{"SYS_FCNTL", Const, 0, ""},
+		{"SYS_FCNTL64", Const, 0, ""},
+		{"SYS_FCNTL_NOCANCEL", Const, 0, ""},
+		{"SYS_FDATASYNC", Const, 0, ""},
+		{"SYS_FEXECVE", Const, 0, ""},
+		{"SYS_FFCLOCK_GETCOUNTER", Const, 0, ""},
+		{"SYS_FFCLOCK_GETESTIMATE", Const, 0, ""},
+		{"SYS_FFCLOCK_SETESTIMATE", Const, 0, ""},
+		{"SYS_FFSCTL", Const, 0, ""},
+		{"SYS_FGETATTRLIST", Const, 0, ""},
+		{"SYS_FGETXATTR", Const, 0, ""},
+		{"SYS_FHOPEN", Const, 0, ""},
+		{"SYS_FHSTAT", Const, 0, ""},
+		{"SYS_FHSTATFS", Const, 0, ""},
+		{"SYS_FILEPORT_MAKEFD", Const, 0, ""},
+		{"SYS_FILEPORT_MAKEPORT", Const, 0, ""},
+		{"SYS_FKTRACE", Const, 1, ""},
+		{"SYS_FLISTXATTR", Const, 0, ""},
+		{"SYS_FLOCK", Const, 0, ""},
+		{"SYS_FORK", Const, 0, ""},
+		{"SYS_FPATHCONF", Const, 0, ""},
+		{"SYS_FREEBSD6_FTRUNCATE", Const, 0, ""},
+		{"SYS_FREEBSD6_LSEEK", Const, 0, ""},
+		{"SYS_FREEBSD6_MMAP", Const, 0, ""},
+		{"SYS_FREEBSD6_PREAD", Const, 0, ""},
+		{"SYS_FREEBSD6_PWRITE", Const, 0, ""},
+		{"SYS_FREEBSD6_TRUNCATE", Const, 0, ""},
+		{"SYS_FREMOVEXATTR", Const, 0, ""},
+		{"SYS_FSCTL", Const, 0, ""},
+		{"SYS_FSETATTRLIST", Const, 0, ""},
+		{"SYS_FSETXATTR", Const, 0, ""},
+		{"SYS_FSGETPATH", Const, 0, ""},
+		{"SYS_FSTAT", Const, 0, ""},
+		{"SYS_FSTAT64", Const, 0, ""},
+		{"SYS_FSTAT64_EXTENDED", Const, 0, ""},
+		{"SYS_FSTATAT", Const, 0, ""},
+		{"SYS_FSTATAT64", Const, 0, ""},
+		{"SYS_FSTATFS", Const, 0, ""},
+		{"SYS_FSTATFS64", Const, 0, ""},
+		{"SYS_FSTATV", Const, 0, ""},
+		{"SYS_FSTATVFS1", Const, 1, ""},
+		{"SYS_FSTAT_EXTENDED", Const, 0, ""},
+		{"SYS_FSYNC", Const, 0, ""},
+		{"SYS_FSYNC_NOCANCEL", Const, 0, ""},
+		{"SYS_FSYNC_RANGE", Const, 1, ""},
+		{"SYS_FTIME", Const, 0, ""},
+		{"SYS_FTRUNCATE", Const, 0, ""},
+		{"SYS_FTRUNCATE64", Const, 0, ""},
+		{"SYS_FUTEX", Const, 0, ""},
+		{"SYS_FUTIMENS", Const, 1, ""},
+		{"SYS_FUTIMES", Const, 0, ""},
+		{"SYS_FUTIMESAT", Const, 0, ""},
+		{"SYS_GETATTRLIST", Const, 0, ""},
+		{"SYS_GETAUDIT", Const, 0, ""},
+		{"SYS_GETAUDIT_ADDR", Const, 0, ""},
+		{"SYS_GETAUID", Const, 0, ""},
+		{"SYS_GETCONTEXT", Const, 0, ""},
+		{"SYS_GETCPU", Const, 0, ""},
+		{"SYS_GETCWD", Const, 0, ""},
+		{"SYS_GETDENTS", Const, 0, ""},
+		{"SYS_GETDENTS64", Const, 0, ""},
+		{"SYS_GETDIRENTRIES", Const, 0, ""},
+		{"SYS_GETDIRENTRIES64", Const, 0, ""},
+		{"SYS_GETDIRENTRIESATTR", Const, 0, ""},
+		{"SYS_GETDTABLECOUNT", Const, 1, ""},
+		{"SYS_GETDTABLESIZE", Const, 0, ""},
+		{"SYS_GETEGID", Const, 0, ""},
+		{"SYS_GETEGID32", Const, 0, ""},
+		{"SYS_GETEUID", Const, 0, ""},
+		{"SYS_GETEUID32", Const, 0, ""},
+		{"SYS_GETFH", Const, 0, ""},
+		{"SYS_GETFSSTAT", Const, 0, ""},
+		{"SYS_GETFSSTAT64", Const, 0, ""},
+		{"SYS_GETGID", Const, 0, ""},
+		{"SYS_GETGID32", Const, 0, ""},
+		{"SYS_GETGROUPS", Const, 0, ""},
+		{"SYS_GETGROUPS32", Const, 0, ""},
+		{"SYS_GETHOSTUUID", Const, 0, ""},
+		{"SYS_GETITIMER", Const, 0, ""},
+		{"SYS_GETLCID", Const, 0, ""},
+		{"SYS_GETLOGIN", Const, 0, ""},
+		{"SYS_GETLOGINCLASS", Const, 0, ""},
+		{"SYS_GETPEERNAME", Const, 0, ""},
+		{"SYS_GETPGID", Const, 0, ""},
+		{"SYS_GETPGRP", Const, 0, ""},
+		{"SYS_GETPID", Const, 0, ""},
+		{"SYS_GETPMSG", Const, 0, ""},
+		{"SYS_GETPPID", Const, 0, ""},
+		{"SYS_GETPRIORITY", Const, 0, ""},
+		{"SYS_GETRESGID", Const, 0, ""},
+		{"SYS_GETRESGID32", Const, 0, ""},
+		{"SYS_GETRESUID", Const, 0, ""},
+		{"SYS_GETRESUID32", Const, 0, ""},
+		{"SYS_GETRLIMIT", Const, 0, ""},
+		{"SYS_GETRTABLE", Const, 1, ""},
+		{"SYS_GETRUSAGE", Const, 0, ""},
+		{"SYS_GETSGROUPS", Const, 0, ""},
+		{"SYS_GETSID", Const, 0, ""},
+		{"SYS_GETSOCKNAME", Const, 0, ""},
+		{"SYS_GETSOCKOPT", Const, 0, ""},
+		{"SYS_GETTHRID", Const, 1, ""},
+		{"SYS_GETTID", Const, 0, ""},
+		{"SYS_GETTIMEOFDAY", Const, 0, ""},
+		{"SYS_GETUID", Const, 0, ""},
+		{"SYS_GETUID32", Const, 0, ""},
+		{"SYS_GETVFSSTAT", Const, 1, ""},
+		{"SYS_GETWGROUPS", Const, 0, ""},
+		{"SYS_GETXATTR", Const, 0, ""},
+		{"SYS_GET_KERNEL_SYMS", Const, 0, ""},
+		{"SYS_GET_MEMPOLICY", Const, 0, ""},
+		{"SYS_GET_ROBUST_LIST", Const, 0, ""},
+		{"SYS_GET_THREAD_AREA", Const, 0, ""},
+		{"SYS_GSSD_SYSCALL", Const, 14, ""},
+		{"SYS_GTTY", Const, 0, ""},
+		{"SYS_IDENTITYSVC", Const, 0, ""},
+		{"SYS_IDLE", Const, 0, ""},
+		{"SYS_INITGROUPS", Const, 0, ""},
+		{"SYS_INIT_MODULE", Const, 0, ""},
+		{"SYS_INOTIFY_ADD_WATCH", Const, 0, ""},
+		{"SYS_INOTIFY_INIT", Const, 0, ""},
+		{"SYS_INOTIFY_INIT1", Const, 0, ""},
+		{"SYS_INOTIFY_RM_WATCH", Const, 0, ""},
+		{"SYS_IOCTL", Const, 0, ""},
+		{"SYS_IOPERM", Const, 0, ""},
+		{"SYS_IOPL", Const, 0, ""},
+		{"SYS_IOPOLICYSYS", Const, 0, ""},
+		{"SYS_IOPRIO_GET", Const, 0, ""},
+		{"SYS_IOPRIO_SET", Const, 0, ""},
+		{"SYS_IO_CANCEL", Const, 0, ""},
+		{"SYS_IO_DESTROY", Const, 0, ""},
+		{"SYS_IO_GETEVENTS", Const, 0, ""},
+		{"SYS_IO_SETUP", Const, 0, ""},
+		{"SYS_IO_SUBMIT", Const, 0, ""},
+		{"SYS_IPC", Const, 0, ""},
+		{"SYS_ISSETUGID", Const, 0, ""},
+		{"SYS_JAIL", Const, 0, ""},
+		{"SYS_JAIL_ATTACH", Const, 0, ""},
+		{"SYS_JAIL_GET", Const, 0, ""},
+		{"SYS_JAIL_REMOVE", Const, 0, ""},
+		{"SYS_JAIL_SET", Const, 0, ""},
+		{"SYS_KAS_INFO", Const, 16, ""},
+		{"SYS_KDEBUG_TRACE", Const, 0, ""},
+		{"SYS_KENV", Const, 0, ""},
+		{"SYS_KEVENT", Const, 0, ""},
+		{"SYS_KEVENT64", Const, 0, ""},
+		{"SYS_KEXEC_LOAD", Const, 0, ""},
+		{"SYS_KEYCTL", Const, 0, ""},
+		{"SYS_KILL", Const, 0, ""},
+		{"SYS_KLDFIND", Const, 0, ""},
+		{"SYS_KLDFIRSTMOD", Const, 0, ""},
+		{"SYS_KLDLOAD", Const, 0, ""},
+		{"SYS_KLDNEXT", Const, 0, ""},
+		{"SYS_KLDSTAT", Const, 0, ""},
+		{"SYS_KLDSYM", Const, 0, ""},
+		{"SYS_KLDUNLOAD", Const, 0, ""},
+		{"SYS_KLDUNLOADF", Const, 0, ""},
+		{"SYS_KMQ_NOTIFY", Const, 14, ""},
+		{"SYS_KMQ_OPEN", Const, 14, ""},
+		{"SYS_KMQ_SETATTR", Const, 14, ""},
+		{"SYS_KMQ_TIMEDRECEIVE", Const, 14, ""},
+		{"SYS_KMQ_TIMEDSEND", Const, 14, ""},
+		{"SYS_KMQ_UNLINK", Const, 14, ""},
+		{"SYS_KQUEUE", Const, 0, ""},
+		{"SYS_KQUEUE1", Const, 1, ""},
+		{"SYS_KSEM_CLOSE", Const, 14, ""},
+		{"SYS_KSEM_DESTROY", Const, 14, ""},
+		{"SYS_KSEM_GETVALUE", Const, 14, ""},
+		{"SYS_KSEM_INIT", Const, 14, ""},
+		{"SYS_KSEM_OPEN", Const, 14, ""},
+		{"SYS_KSEM_POST", Const, 14, ""},
+		{"SYS_KSEM_TIMEDWAIT", Const, 14, ""},
+		{"SYS_KSEM_TRYWAIT", Const, 14, ""},
+		{"SYS_KSEM_UNLINK", Const, 14, ""},
+		{"SYS_KSEM_WAIT", Const, 14, ""},
+		{"SYS_KTIMER_CREATE", Const, 0, ""},
+		{"SYS_KTIMER_DELETE", Const, 0, ""},
+		{"SYS_KTIMER_GETOVERRUN", Const, 0, ""},
+		{"SYS_KTIMER_GETTIME", Const, 0, ""},
+		{"SYS_KTIMER_SETTIME", Const, 0, ""},
+		{"SYS_KTRACE", Const, 0, ""},
+		{"SYS_LCHFLAGS", Const, 0, ""},
+		{"SYS_LCHMOD", Const, 0, ""},
+		{"SYS_LCHOWN", Const, 0, ""},
+		{"SYS_LCHOWN32", Const, 0, ""},
+		{"SYS_LEDGER", Const, 16, ""},
+		{"SYS_LGETFH", Const, 0, ""},
+		{"SYS_LGETXATTR", Const, 0, ""},
+		{"SYS_LINK", Const, 0, ""},
+		{"SYS_LINKAT", Const, 0, ""},
+		{"SYS_LIO_LISTIO", Const, 0, ""},
+		{"SYS_LISTEN", Const, 0, ""},
+		{"SYS_LISTXATTR", Const, 0, ""},
+		{"SYS_LLISTXATTR", Const, 0, ""},
+		{"SYS_LOCK", Const, 0, ""},
+		{"SYS_LOOKUP_DCOOKIE", Const, 0, ""},
+		{"SYS_LPATHCONF", Const, 0, ""},
+		{"SYS_LREMOVEXATTR", Const, 0, ""},
+		{"SYS_LSEEK", Const, 0, ""},
+		{"SYS_LSETXATTR", Const, 0, ""},
+		{"SYS_LSTAT", Const, 0, ""},
+		{"SYS_LSTAT64", Const, 0, ""},
+		{"SYS_LSTAT64_EXTENDED", Const, 0, ""},
+		{"SYS_LSTATV", Const, 0, ""},
+		{"SYS_LSTAT_EXTENDED", Const, 0, ""},
+		{"SYS_LUTIMES", Const, 0, ""},
+		{"SYS_MAC_SYSCALL", Const, 0, ""},
+		{"SYS_MADVISE", Const, 0, ""},
+		{"SYS_MADVISE1", Const, 0, ""},
+		{"SYS_MAXSYSCALL", Const, 0, ""},
+		{"SYS_MBIND", Const, 0, ""},
+		{"SYS_MIGRATE_PAGES", Const, 0, ""},
+		{"SYS_MINCORE", Const, 0, ""},
+		{"SYS_MINHERIT", Const, 0, ""},
+		{"SYS_MKCOMPLEX", Const, 0, ""},
+		{"SYS_MKDIR", Const, 0, ""},
+		{"SYS_MKDIRAT", Const, 0, ""},
+		{"SYS_MKDIR_EXTENDED", Const, 0, ""},
+		{"SYS_MKFIFO", Const, 0, ""},
+		{"SYS_MKFIFOAT", Const, 0, ""},
+		{"SYS_MKFIFO_EXTENDED", Const, 0, ""},
+		{"SYS_MKNOD", Const, 0, ""},
+		{"SYS_MKNODAT", Const, 0, ""},
+		{"SYS_MLOCK", Const, 0, ""},
+		{"SYS_MLOCKALL", Const, 0, ""},
+		{"SYS_MMAP", Const, 0, ""},
+		{"SYS_MMAP2", Const, 0, ""},
+		{"SYS_MODCTL", Const, 1, ""},
+		{"SYS_MODFIND", Const, 0, ""},
+		{"SYS_MODFNEXT", Const, 0, ""},
+		{"SYS_MODIFY_LDT", Const, 0, ""},
+		{"SYS_MODNEXT", Const, 0, ""},
+		{"SYS_MODSTAT", Const, 0, ""},
+		{"SYS_MODWATCH", Const, 0, ""},
+		{"SYS_MOUNT", Const, 0, ""},
+		{"SYS_MOVE_PAGES", Const, 0, ""},
+		{"SYS_MPROTECT", Const, 0, ""},
+		{"SYS_MPX", Const, 0, ""},
+		{"SYS_MQUERY", Const, 1, ""},
+		{"SYS_MQ_GETSETATTR", Const, 0, ""},
+		{"SYS_MQ_NOTIFY", Const, 0, ""},
+		{"SYS_MQ_OPEN", Const, 0, ""},
+		{"SYS_MQ_TIMEDRECEIVE", Const, 0, ""},
+		{"SYS_MQ_TIMEDSEND", Const, 0, ""},
+		{"SYS_MQ_UNLINK", Const, 0, ""},
+		{"SYS_MREMAP", Const, 0, ""},
+		{"SYS_MSGCTL", Const, 0, ""},
+		{"SYS_MSGGET", Const, 0, ""},
+		{"SYS_MSGRCV", Const, 0, ""},
+		{"SYS_MSGRCV_NOCANCEL", Const, 0, ""},
+		{"SYS_MSGSND", Const, 0, ""},
+		{"SYS_MSGSND_NOCANCEL", Const, 0, ""},
+		{"SYS_MSGSYS", Const, 0, ""},
+		{"SYS_MSYNC", Const, 0, ""},
+		{"SYS_MSYNC_NOCANCEL", Const, 0, ""},
+		{"SYS_MUNLOCK", Const, 0, ""},
+		{"SYS_MUNLOCKALL", Const, 0, ""},
+		{"SYS_MUNMAP", Const, 0, ""},
+		{"SYS_NAME_TO_HANDLE_AT", Const, 0, ""},
+		{"SYS_NANOSLEEP", Const, 0, ""},
+		{"SYS_NEWFSTATAT", Const, 0, ""},
+		{"SYS_NFSCLNT", Const, 0, ""},
+		{"SYS_NFSSERVCTL", Const, 0, ""},
+		{"SYS_NFSSVC", Const, 0, ""},
+		{"SYS_NFSTAT", Const, 0, ""},
+		{"SYS_NICE", Const, 0, ""},
+		{"SYS_NLM_SYSCALL", Const, 14, ""},
+		{"SYS_NLSTAT", Const, 0, ""},
+		{"SYS_NMOUNT", Const, 0, ""},
+		{"SYS_NSTAT", Const, 0, ""},
+		{"SYS_NTP_ADJTIME", Const, 0, ""},
+		{"SYS_NTP_GETTIME", Const, 0, ""},
+		{"SYS_NUMA_GETAFFINITY", Const, 14, ""},
+		{"SYS_NUMA_SETAFFINITY", Const, 14, ""},
+		{"SYS_OABI_SYSCALL_BASE", Const, 0, ""},
+		{"SYS_OBREAK", Const, 0, ""},
+		{"SYS_OLDFSTAT", Const, 0, ""},
+		{"SYS_OLDLSTAT", Const, 0, ""},
+		{"SYS_OLDOLDUNAME", Const, 0, ""},
+		{"SYS_OLDSTAT", Const, 0, ""},
+		{"SYS_OLDUNAME", Const, 0, ""},
+		{"SYS_OPEN", Const, 0, ""},
+		{"SYS_OPENAT", Const, 0, ""},
+		{"SYS_OPENBSD_POLL", Const, 0, ""},
+		{"SYS_OPEN_BY_HANDLE_AT", Const, 0, ""},
+		{"SYS_OPEN_DPROTECTED_NP", Const, 16, ""},
+		{"SYS_OPEN_EXTENDED", Const, 0, ""},
+		{"SYS_OPEN_NOCANCEL", Const, 0, ""},
+		{"SYS_OVADVISE", Const, 0, ""},
+		{"SYS_PACCEPT", Const, 1, ""},
+		{"SYS_PATHCONF", Const, 0, ""},
+		{"SYS_PAUSE", Const, 0, ""},
+		{"SYS_PCICONFIG_IOBASE", Const, 0, ""},
+		{"SYS_PCICONFIG_READ", Const, 0, ""},
+		{"SYS_PCICONFIG_WRITE", Const, 0, ""},
+		{"SYS_PDFORK", Const, 0, ""},
+		{"SYS_PDGETPID", Const, 0, ""},
+		{"SYS_PDKILL", Const, 0, ""},
+		{"SYS_PERF_EVENT_OPEN", Const, 0, ""},
+		{"SYS_PERSONALITY", Const, 0, ""},
+		{"SYS_PID_HIBERNATE", Const, 0, ""},
+		{"SYS_PID_RESUME", Const, 0, ""},
+		{"SYS_PID_SHUTDOWN_SOCKETS", Const, 0, ""},
+		{"SYS_PID_SUSPEND", Const, 0, ""},
+		{"SYS_PIPE", Const, 0, ""},
+		{"SYS_PIPE2", Const, 0, ""},
+		{"SYS_PIVOT_ROOT", Const, 0, ""},
+		{"SYS_PMC_CONTROL", Const, 1, ""},
+		{"SYS_PMC_GET_INFO", Const, 1, ""},
+		{"SYS_POLL", Const, 0, ""},
+		{"SYS_POLLTS", Const, 1, ""},
+		{"SYS_POLL_NOCANCEL", Const, 0, ""},
+		{"SYS_POSIX_FADVISE", Const, 0, ""},
+		{"SYS_POSIX_FALLOCATE", Const, 0, ""},
+		{"SYS_POSIX_OPENPT", Const, 0, ""},
+		{"SYS_POSIX_SPAWN", Const, 0, ""},
+		{"SYS_PPOLL", Const, 0, ""},
+		{"SYS_PRCTL", Const, 0, ""},
+		{"SYS_PREAD", Const, 0, ""},
+		{"SYS_PREAD64", Const, 0, ""},
+		{"SYS_PREADV", Const, 0, ""},
+		{"SYS_PREAD_NOCANCEL", Const, 0, ""},
+		{"SYS_PRLIMIT64", Const, 0, ""},
+		{"SYS_PROCCTL", Const, 3, ""},
+		{"SYS_PROCESS_POLICY", Const, 0, ""},
+		{"SYS_PROCESS_VM_READV", Const, 0, ""},
+		{"SYS_PROCESS_VM_WRITEV", Const, 0, ""},
+		{"SYS_PROC_INFO", Const, 0, ""},
+		{"SYS_PROF", Const, 0, ""},
+		{"SYS_PROFIL", Const, 0, ""},
+		{"SYS_PSELECT", Const, 0, ""},
+		{"SYS_PSELECT6", Const, 0, ""},
+		{"SYS_PSET_ASSIGN", Const, 1, ""},
+		{"SYS_PSET_CREATE", Const, 1, ""},
+		{"SYS_PSET_DESTROY", Const, 1, ""},
+		{"SYS_PSYNCH_CVBROAD", Const, 0, ""},
+		{"SYS_PSYNCH_CVCLRPREPOST", Const, 0, ""},
+		{"SYS_PSYNCH_CVSIGNAL", Const, 0, ""},
+		{"SYS_PSYNCH_CVWAIT", Const, 0, ""},
+		{"SYS_PSYNCH_MUTEXDROP", Const, 0, ""},
+		{"SYS_PSYNCH_MUTEXWAIT", Const, 0, ""},
+		{"SYS_PSYNCH_RW_DOWNGRADE", Const, 0, ""},
+		{"SYS_PSYNCH_RW_LONGRDLOCK", Const, 0, ""},
+		{"SYS_PSYNCH_RW_RDLOCK", Const, 0, ""},
+		{"SYS_PSYNCH_RW_UNLOCK", Const, 0, ""},
+		{"SYS_PSYNCH_RW_UNLOCK2", Const, 0, ""},
+		{"SYS_PSYNCH_RW_UPGRADE", Const, 0, ""},
+		{"SYS_PSYNCH_RW_WRLOCK", Const, 0, ""},
+		{"SYS_PSYNCH_RW_YIELDWRLOCK", Const, 0, ""},
+		{"SYS_PTRACE", Const, 0, ""},
+		{"SYS_PUTPMSG", Const, 0, ""},
+		{"SYS_PWRITE", Const, 0, ""},
+		{"SYS_PWRITE64", Const, 0, ""},
+		{"SYS_PWRITEV", Const, 0, ""},
+		{"SYS_PWRITE_NOCANCEL", Const, 0, ""},
+		{"SYS_QUERY_MODULE", Const, 0, ""},
+		{"SYS_QUOTACTL", Const, 0, ""},
+		{"SYS_RASCTL", Const, 1, ""},
+		{"SYS_RCTL_ADD_RULE", Const, 0, ""},
+		{"SYS_RCTL_GET_LIMITS", Const, 0, ""},
+		{"SYS_RCTL_GET_RACCT", Const, 0, ""},
+		{"SYS_RCTL_GET_RULES", Const, 0, ""},
+		{"SYS_RCTL_REMOVE_RULE", Const, 0, ""},
+		{"SYS_READ", Const, 0, ""},
+		{"SYS_READAHEAD", Const, 0, ""},
+		{"SYS_READDIR", Const, 0, ""},
+		{"SYS_READLINK", Const, 0, ""},
+		{"SYS_READLINKAT", Const, 0, ""},
+		{"SYS_READV", Const, 0, ""},
+		{"SYS_READV_NOCANCEL", Const, 0, ""},
+		{"SYS_READ_NOCANCEL", Const, 0, ""},
+		{"SYS_REBOOT", Const, 0, ""},
+		{"SYS_RECV", Const, 0, ""},
+		{"SYS_RECVFROM", Const, 0, ""},
+		{"SYS_RECVFROM_NOCANCEL", Const, 0, ""},
+		{"SYS_RECVMMSG", Const, 0, ""},
+		{"SYS_RECVMSG", Const, 0, ""},
+		{"SYS_RECVMSG_NOCANCEL", Const, 0, ""},
+		{"SYS_REMAP_FILE_PAGES", Const, 0, ""},
+		{"SYS_REMOVEXATTR", Const, 0, ""},
+		{"SYS_RENAME", Const, 0, ""},
+		{"SYS_RENAMEAT", Const, 0, ""},
+		{"SYS_REQUEST_KEY", Const, 0, ""},
+		{"SYS_RESTART_SYSCALL", Const, 0, ""},
+		{"SYS_REVOKE", Const, 0, ""},
+		{"SYS_RFORK", Const, 0, ""},
+		{"SYS_RMDIR", Const, 0, ""},
+		{"SYS_RTPRIO", Const, 0, ""},
+		{"SYS_RTPRIO_THREAD", Const, 0, ""},
+		{"SYS_RT_SIGACTION", Const, 0, ""},
+		{"SYS_RT_SIGPENDING", Const, 0, ""},
+		{"SYS_RT_SIGPROCMASK", Const, 0, ""},
+		{"SYS_RT_SIGQUEUEINFO", Const, 0, ""},
+		{"SYS_RT_SIGRETURN", Const, 0, ""},
+		{"SYS_RT_SIGSUSPEND", Const, 0, ""},
+		{"SYS_RT_SIGTIMEDWAIT", Const, 0, ""},
+		{"SYS_RT_TGSIGQUEUEINFO", Const, 0, ""},
+		{"SYS_SBRK", Const, 0, ""},
+		{"SYS_SCHED_GETAFFINITY", Const, 0, ""},
+		{"SYS_SCHED_GETPARAM", Const, 0, ""},
+		{"SYS_SCHED_GETSCHEDULER", Const, 0, ""},
+		{"SYS_SCHED_GET_PRIORITY_MAX", Const, 0, ""},
+		{"SYS_SCHED_GET_PRIORITY_MIN", Const, 0, ""},
+		{"SYS_SCHED_RR_GET_INTERVAL", Const, 0, ""},
+		{"SYS_SCHED_SETAFFINITY", Const, 0, ""},
+		{"SYS_SCHED_SETPARAM", Const, 0, ""},
+		{"SYS_SCHED_SETSCHEDULER", Const, 0, ""},
+		{"SYS_SCHED_YIELD", Const, 0, ""},
+		{"SYS_SCTP_GENERIC_RECVMSG", Const, 0, ""},
+		{"SYS_SCTP_GENERIC_SENDMSG", Const, 0, ""},
+		{"SYS_SCTP_GENERIC_SENDMSG_IOV", Const, 0, ""},
+		{"SYS_SCTP_PEELOFF", Const, 0, ""},
+		{"SYS_SEARCHFS", Const, 0, ""},
+		{"SYS_SECURITY", Const, 0, ""},
+		{"SYS_SELECT", Const, 0, ""},
+		{"SYS_SELECT_NOCANCEL", Const, 0, ""},
+		{"SYS_SEMCONFIG", Const, 1, ""},
+		{"SYS_SEMCTL", Const, 0, ""},
+		{"SYS_SEMGET", Const, 0, ""},
+		{"SYS_SEMOP", Const, 0, ""},
+		{"SYS_SEMSYS", Const, 0, ""},
+		{"SYS_SEMTIMEDOP", Const, 0, ""},
+		{"SYS_SEM_CLOSE", Const, 0, ""},
+		{"SYS_SEM_DESTROY", Const, 0, ""},
+		{"SYS_SEM_GETVALUE", Const, 0, ""},
+		{"SYS_SEM_INIT", Const, 0, ""},
+		{"SYS_SEM_OPEN", Const, 0, ""},
+		{"SYS_SEM_POST", Const, 0, ""},
+		{"SYS_SEM_TRYWAIT", Const, 0, ""},
+		{"SYS_SEM_UNLINK", Const, 0, ""},
+		{"SYS_SEM_WAIT", Const, 0, ""},
+		{"SYS_SEM_WAIT_NOCANCEL", Const, 0, ""},
+		{"SYS_SEND", Const, 0, ""},
+		{"SYS_SENDFILE", Const, 0, ""},
+		{"SYS_SENDFILE64", Const, 0, ""},
+		{"SYS_SENDMMSG", Const, 0, ""},
+		{"SYS_SENDMSG", Const, 0, ""},
+		{"SYS_SENDMSG_NOCANCEL", Const, 0, ""},
+		{"SYS_SENDTO", Const, 0, ""},
+		{"SYS_SENDTO_NOCANCEL", Const, 0, ""},
+		{"SYS_SETATTRLIST", Const, 0, ""},
+		{"SYS_SETAUDIT", Const, 0, ""},
+		{"SYS_SETAUDIT_ADDR", Const, 0, ""},
+		{"SYS_SETAUID", Const, 0, ""},
+		{"SYS_SETCONTEXT", Const, 0, ""},
+		{"SYS_SETDOMAINNAME", Const, 0, ""},
+		{"SYS_SETEGID", Const, 0, ""},
+		{"SYS_SETEUID", Const, 0, ""},
+		{"SYS_SETFIB", Const, 0, ""},
+		{"SYS_SETFSGID", Const, 0, ""},
+		{"SYS_SETFSGID32", Const, 0, ""},
+		{"SYS_SETFSUID", Const, 0, ""},
+		{"SYS_SETFSUID32", Const, 0, ""},
+		{"SYS_SETGID", Const, 0, ""},
+		{"SYS_SETGID32", Const, 0, ""},
+		{"SYS_SETGROUPS", Const, 0, ""},
+		{"SYS_SETGROUPS32", Const, 0, ""},
+		{"SYS_SETHOSTNAME", Const, 0, ""},
+		{"SYS_SETITIMER", Const, 0, ""},
+		{"SYS_SETLCID", Const, 0, ""},
+		{"SYS_SETLOGIN", Const, 0, ""},
+		{"SYS_SETLOGINCLASS", Const, 0, ""},
+		{"SYS_SETNS", Const, 0, ""},
+		{"SYS_SETPGID", Const, 0, ""},
+		{"SYS_SETPRIORITY", Const, 0, ""},
+		{"SYS_SETPRIVEXEC", Const, 0, ""},
+		{"SYS_SETREGID", Const, 0, ""},
+		{"SYS_SETREGID32", Const, 0, ""},
+		{"SYS_SETRESGID", Const, 0, ""},
+		{"SYS_SETRESGID32", Const, 0, ""},
+		{"SYS_SETRESUID", Const, 0, ""},
+		{"SYS_SETRESUID32", Const, 0, ""},
+		{"SYS_SETREUID", Const, 0, ""},
+		{"SYS_SETREUID32", Const, 0, ""},
+		{"SYS_SETRLIMIT", Const, 0, ""},
+		{"SYS_SETRTABLE", Const, 1, ""},
+		{"SYS_SETSGROUPS", Const, 0, ""},
+		{"SYS_SETSID", Const, 0, ""},
+		{"SYS_SETSOCKOPT", Const, 0, ""},
+		{"SYS_SETTID", Const, 0, ""},
+		{"SYS_SETTID_WITH_PID", Const, 0, ""},
+		{"SYS_SETTIMEOFDAY", Const, 0, ""},
+		{"SYS_SETUID", Const, 0, ""},
+		{"SYS_SETUID32", Const, 0, ""},
+		{"SYS_SETWGROUPS", Const, 0, ""},
+		{"SYS_SETXATTR", Const, 0, ""},
+		{"SYS_SET_MEMPOLICY", Const, 0, ""},
+		{"SYS_SET_ROBUST_LIST", Const, 0, ""},
+		{"SYS_SET_THREAD_AREA", Const, 0, ""},
+		{"SYS_SET_TID_ADDRESS", Const, 0, ""},
+		{"SYS_SGETMASK", Const, 0, ""},
+		{"SYS_SHARED_REGION_CHECK_NP", Const, 0, ""},
+		{"SYS_SHARED_REGION_MAP_AND_SLIDE_NP", Const, 0, ""},
+		{"SYS_SHMAT", Const, 0, ""},
+		{"SYS_SHMCTL", Const, 0, ""},
+		{"SYS_SHMDT", Const, 0, ""},
+		{"SYS_SHMGET", Const, 0, ""},
+		{"SYS_SHMSYS", Const, 0, ""},
+		{"SYS_SHM_OPEN", Const, 0, ""},
+		{"SYS_SHM_UNLINK", Const, 0, ""},
+		{"SYS_SHUTDOWN", Const, 0, ""},
+		{"SYS_SIGACTION", Const, 0, ""},
+		{"SYS_SIGALTSTACK", Const, 0, ""},
+		{"SYS_SIGNAL", Const, 0, ""},
+		{"SYS_SIGNALFD", Const, 0, ""},
+		{"SYS_SIGNALFD4", Const, 0, ""},
+		{"SYS_SIGPENDING", Const, 0, ""},
+		{"SYS_SIGPROCMASK", Const, 0, ""},
+		{"SYS_SIGQUEUE", Const, 0, ""},
+		{"SYS_SIGQUEUEINFO", Const, 1, ""},
+		{"SYS_SIGRETURN", Const, 0, ""},
+		{"SYS_SIGSUSPEND", Const, 0, ""},
+		{"SYS_SIGSUSPEND_NOCANCEL", Const, 0, ""},
+		{"SYS_SIGTIMEDWAIT", Const, 0, ""},
+		{"SYS_SIGWAIT", Const, 0, ""},
+		{"SYS_SIGWAITINFO", Const, 0, ""},
+		{"SYS_SOCKET", Const, 0, ""},
+		{"SYS_SOCKETCALL", Const, 0, ""},
+		{"SYS_SOCKETPAIR", Const, 0, ""},
+		{"SYS_SPLICE", Const, 0, ""},
+		{"SYS_SSETMASK", Const, 0, ""},
+		{"SYS_SSTK", Const, 0, ""},
+		{"SYS_STACK_SNAPSHOT", Const, 0, ""},
+		{"SYS_STAT", Const, 0, ""},
+		{"SYS_STAT64", Const, 0, ""},
+		{"SYS_STAT64_EXTENDED", Const, 0, ""},
+		{"SYS_STATFS", Const, 0, ""},
+		{"SYS_STATFS64", Const, 0, ""},
+		{"SYS_STATV", Const, 0, ""},
+		{"SYS_STATVFS1", Const, 1, ""},
+		{"SYS_STAT_EXTENDED", Const, 0, ""},
+		{"SYS_STIME", Const, 0, ""},
+		{"SYS_STTY", Const, 0, ""},
+		{"SYS_SWAPCONTEXT", Const, 0, ""},
+		{"SYS_SWAPCTL", Const, 1, ""},
+		{"SYS_SWAPOFF", Const, 0, ""},
+		{"SYS_SWAPON", Const, 0, ""},
+		{"SYS_SYMLINK", Const, 0, ""},
+		{"SYS_SYMLINKAT", Const, 0, ""},
+		{"SYS_SYNC", Const, 0, ""},
+		{"SYS_SYNCFS", Const, 0, ""},
+		{"SYS_SYNC_FILE_RANGE", Const, 0, ""},
+		{"SYS_SYSARCH", Const, 0, ""},
+		{"SYS_SYSCALL", Const, 0, ""},
+		{"SYS_SYSCALL_BASE", Const, 0, ""},
+		{"SYS_SYSFS", Const, 0, ""},
+		{"SYS_SYSINFO", Const, 0, ""},
+		{"SYS_SYSLOG", Const, 0, ""},
+		{"SYS_TEE", Const, 0, ""},
+		{"SYS_TGKILL", Const, 0, ""},
+		{"SYS_THREAD_SELFID", Const, 0, ""},
+		{"SYS_THR_CREATE", Const, 0, ""},
+		{"SYS_THR_EXIT", Const, 0, ""},
+		{"SYS_THR_KILL", Const, 0, ""},
+		{"SYS_THR_KILL2", Const, 0, ""},
+		{"SYS_THR_NEW", Const, 0, ""},
+		{"SYS_THR_SELF", Const, 0, ""},
+		{"SYS_THR_SET_NAME", Const, 0, ""},
+		{"SYS_THR_SUSPEND", Const, 0, ""},
+		{"SYS_THR_WAKE", Const, 0, ""},
+		{"SYS_TIME", Const, 0, ""},
+		{"SYS_TIMERFD_CREATE", Const, 0, ""},
+		{"SYS_TIMERFD_GETTIME", Const, 0, ""},
+		{"SYS_TIMERFD_SETTIME", Const, 0, ""},
+		{"SYS_TIMER_CREATE", Const, 0, ""},
+		{"SYS_TIMER_DELETE", Const, 0, ""},
+		{"SYS_TIMER_GETOVERRUN", Const, 0, ""},
+		{"SYS_TIMER_GETTIME", Const, 0, ""},
+		{"SYS_TIMER_SETTIME", Const, 0, ""},
+		{"SYS_TIMES", Const, 0, ""},
+		{"SYS_TKILL", Const, 0, ""},
+		{"SYS_TRUNCATE", Const, 0, ""},
+		{"SYS_TRUNCATE64", Const, 0, ""},
+		{"SYS_TUXCALL", Const, 0, ""},
+		{"SYS_UGETRLIMIT", Const, 0, ""},
+		{"SYS_ULIMIT", Const, 0, ""},
+		{"SYS_UMASK", Const, 0, ""},
+		{"SYS_UMASK_EXTENDED", Const, 0, ""},
+		{"SYS_UMOUNT", Const, 0, ""},
+		{"SYS_UMOUNT2", Const, 0, ""},
+		{"SYS_UNAME", Const, 0, ""},
+		{"SYS_UNDELETE", Const, 0, ""},
+		{"SYS_UNLINK", Const, 0, ""},
+		{"SYS_UNLINKAT", Const, 0, ""},
+		{"SYS_UNMOUNT", Const, 0, ""},
+		{"SYS_UNSHARE", Const, 0, ""},
+		{"SYS_USELIB", Const, 0, ""},
+		{"SYS_USTAT", Const, 0, ""},
+		{"SYS_UTIME", Const, 0, ""},
+		{"SYS_UTIMENSAT", Const, 0, ""},
+		{"SYS_UTIMES", Const, 0, ""},
+		{"SYS_UTRACE", Const, 0, ""},
+		{"SYS_UUIDGEN", Const, 0, ""},
+		{"SYS_VADVISE", Const, 1, ""},
+		{"SYS_VFORK", Const, 0, ""},
+		{"SYS_VHANGUP", Const, 0, ""},
+		{"SYS_VM86", Const, 0, ""},
+		{"SYS_VM86OLD", Const, 0, ""},
+		{"SYS_VMSPLICE", Const, 0, ""},
+		{"SYS_VM_PRESSURE_MONITOR", Const, 0, ""},
+		{"SYS_VSERVER", Const, 0, ""},
+		{"SYS_WAIT4", Const, 0, ""},
+		{"SYS_WAIT4_NOCANCEL", Const, 0, ""},
+		{"SYS_WAIT6", Const, 1, ""},
+		{"SYS_WAITEVENT", Const, 0, ""},
+		{"SYS_WAITID", Const, 0, ""},
+		{"SYS_WAITID_NOCANCEL", Const, 0, ""},
+		{"SYS_WAITPID", Const, 0, ""},
+		{"SYS_WATCHEVENT", Const, 0, ""},
+		{"SYS_WORKQ_KERNRETURN", Const, 0, ""},
+		{"SYS_WORKQ_OPEN", Const, 0, ""},
+		{"SYS_WRITE", Const, 0, ""},
+		{"SYS_WRITEV", Const, 0, ""},
+		{"SYS_WRITEV_NOCANCEL", Const, 0, ""},
+		{"SYS_WRITE_NOCANCEL", Const, 0, ""},
+		{"SYS_YIELD", Const, 0, ""},
+		{"SYS__LLSEEK", Const, 0, ""},
+		{"SYS__LWP_CONTINUE", Const, 1, ""},
+		{"SYS__LWP_CREATE", Const, 1, ""},
+		{"SYS__LWP_CTL", Const, 1, ""},
+		{"SYS__LWP_DETACH", Const, 1, ""},
+		{"SYS__LWP_EXIT", Const, 1, ""},
+		{"SYS__LWP_GETNAME", Const, 1, ""},
+		{"SYS__LWP_GETPRIVATE", Const, 1, ""},
+		{"SYS__LWP_KILL", Const, 1, ""},
+		{"SYS__LWP_PARK", Const, 1, ""},
+		{"SYS__LWP_SELF", Const, 1, ""},
+		{"SYS__LWP_SETNAME", Const, 1, ""},
+		{"SYS__LWP_SETPRIVATE", Const, 1, ""},
+		{"SYS__LWP_SUSPEND", Const, 1, ""},
+		{"SYS__LWP_UNPARK", Const, 1, ""},
+		{"SYS__LWP_UNPARK_ALL", Const, 1, ""},
+		{"SYS__LWP_WAIT", Const, 1, ""},
+		{"SYS__LWP_WAKEUP", Const, 1, ""},
+		{"SYS__NEWSELECT", Const, 0, ""},
+		{"SYS__PSET_BIND", Const, 1, ""},
+		{"SYS__SCHED_GETAFFINITY", Const, 1, ""},
+		{"SYS__SCHED_GETPARAM", Const, 1, ""},
+		{"SYS__SCHED_SETAFFINITY", Const, 1, ""},
+		{"SYS__SCHED_SETPARAM", Const, 1, ""},
+		{"SYS__SYSCTL", Const, 0, ""},
+		{"SYS__UMTX_LOCK", Const, 0, ""},
+		{"SYS__UMTX_OP", Const, 0, ""},
+		{"SYS__UMTX_UNLOCK", Const, 0, ""},
+		{"SYS___ACL_ACLCHECK_FD", Const, 0, ""},
+		{"SYS___ACL_ACLCHECK_FILE", Const, 0, ""},
+		{"SYS___ACL_ACLCHECK_LINK", Const, 0, ""},
+		{"SYS___ACL_DELETE_FD", Const, 0, ""},
+		{"SYS___ACL_DELETE_FILE", Const, 0, ""},
+		{"SYS___ACL_DELETE_LINK", Const, 0, ""},
+		{"SYS___ACL_GET_FD", Const, 0, ""},
+		{"SYS___ACL_GET_FILE", Const, 0, ""},
+		{"SYS___ACL_GET_LINK", Const, 0, ""},
+		{"SYS___ACL_SET_FD", Const, 0, ""},
+		{"SYS___ACL_SET_FILE", Const, 0, ""},
+		{"SYS___ACL_SET_LINK", Const, 0, ""},
+		{"SYS___CAP_RIGHTS_GET", Const, 14, ""},
+		{"SYS___CLONE", Const, 1, ""},
+		{"SYS___DISABLE_THREADSIGNAL", Const, 0, ""},
+		{"SYS___GETCWD", Const, 0, ""},
+		{"SYS___GETLOGIN", Const, 1, ""},
+		{"SYS___GET_TCB", Const, 1, ""},
+		{"SYS___MAC_EXECVE", Const, 0, ""},
+		{"SYS___MAC_GETFSSTAT", Const, 0, ""},
+		{"SYS___MAC_GET_FD", Const, 0, ""},
+		{"SYS___MAC_GET_FILE", Const, 0, ""},
+		{"SYS___MAC_GET_LCID", Const, 0, ""},
+		{"SYS___MAC_GET_LCTX", Const, 0, ""},
+		{"SYS___MAC_GET_LINK", Const, 0, ""},
+		{"SYS___MAC_GET_MOUNT", Const, 0, ""},
+		{"SYS___MAC_GET_PID", Const, 0, ""},
+		{"SYS___MAC_GET_PROC", Const, 0, ""},
+		{"SYS___MAC_MOUNT", Const, 0, ""},
+		{"SYS___MAC_SET_FD", Const, 0, ""},
+		{"SYS___MAC_SET_FILE", Const, 0, ""},
+		{"SYS___MAC_SET_LCTX", Const, 0, ""},
+		{"SYS___MAC_SET_LINK", Const, 0, ""},
+		{"SYS___MAC_SET_PROC", Const, 0, ""},
+		{"SYS___MAC_SYSCALL", Const, 0, ""},
+		{"SYS___OLD_SEMWAIT_SIGNAL", Const, 0, ""},
+		{"SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL", Const, 0, ""},
+		{"SYS___POSIX_CHOWN", Const, 1, ""},
+		{"SYS___POSIX_FCHOWN", Const, 1, ""},
+		{"SYS___POSIX_LCHOWN", Const, 1, ""},
+		{"SYS___POSIX_RENAME", Const, 1, ""},
+		{"SYS___PTHREAD_CANCELED", Const, 0, ""},
+		{"SYS___PTHREAD_CHDIR", Const, 0, ""},
+		{"SYS___PTHREAD_FCHDIR", Const, 0, ""},
+		{"SYS___PTHREAD_KILL", Const, 0, ""},
+		{"SYS___PTHREAD_MARKCANCEL", Const, 0, ""},
+		{"SYS___PTHREAD_SIGMASK", Const, 0, ""},
+		{"SYS___QUOTACTL", Const, 1, ""},
+		{"SYS___SEMCTL", Const, 1, ""},
+		{"SYS___SEMWAIT_SIGNAL", Const, 0, ""},
+		{"SYS___SEMWAIT_SIGNAL_NOCANCEL", Const, 0, ""},
+		{"SYS___SETLOGIN", Const, 1, ""},
+		{"SYS___SETUGID", Const, 0, ""},
+		{"SYS___SET_TCB", Const, 1, ""},
+		{"SYS___SIGACTION_SIGTRAMP", Const, 1, ""},
+		{"SYS___SIGTIMEDWAIT", Const, 1, ""},
+		{"SYS___SIGWAIT", Const, 0, ""},
+		{"SYS___SIGWAIT_NOCANCEL", Const, 0, ""},
+		{"SYS___SYSCTL", Const, 0, ""},
+		{"SYS___TFORK", Const, 1, ""},
+		{"SYS___THREXIT", Const, 1, ""},
+		{"SYS___THRSIGDIVERT", Const, 1, ""},
+		{"SYS___THRSLEEP", Const, 1, ""},
+		{"SYS___THRWAKEUP", Const, 1, ""},
+		{"S_ARCH1", Const, 1, ""},
+		{"S_ARCH2", Const, 1, ""},
+		{"S_BLKSIZE", Const, 0, ""},
+		{"S_IEXEC", Const, 0, ""},
+		{"S_IFBLK", Const, 0, ""},
+		{"S_IFCHR", Const, 0, ""},
+		{"S_IFDIR", Const, 0, ""},
+		{"S_IFIFO", Const, 0, ""},
+		{"S_IFLNK", Const, 0, ""},
+		{"S_IFMT", Const, 0, ""},
+		{"S_IFREG", Const, 0, ""},
+		{"S_IFSOCK", Const, 0, ""},
+		{"S_IFWHT", Const, 0, ""},
+		{"S_IREAD", Const, 0, ""},
+		{"S_IRGRP", Const, 0, ""},
+		{"S_IROTH", Const, 0, ""},
+		{"S_IRUSR", Const, 0, ""},
+		{"S_IRWXG", Const, 0, ""},
+		{"S_IRWXO", Const, 0, ""},
+		{"S_IRWXU", Const, 0, ""},
+		{"S_ISGID", Const, 0, ""},
+		{"S_ISTXT", Const, 0, ""},
+		{"S_ISUID", Const, 0, ""},
+		{"S_ISVTX", Const, 0, ""},
+		{"S_IWGRP", Const, 0, ""},
+		{"S_IWOTH", Const, 0, ""},
+		{"S_IWRITE", Const, 0, ""},
+		{"S_IWUSR", Const, 0, ""},
+		{"S_IXGRP", Const, 0, ""},
+		{"S_IXOTH", Const, 0, ""},
+		{"S_IXUSR", Const, 0, ""},
+		{"S_LOGIN_SET", Const, 1, ""},
+		{"SecurityAttributes", Type, 0, ""},
+		{"SecurityAttributes.InheritHandle", Field, 0, ""},
+		{"SecurityAttributes.Length", Field, 0, ""},
+		{"SecurityAttributes.SecurityDescriptor", Field, 0, ""},
+		{"Seek", Func, 0, "func(fd int, offset int64, whence int) (off int64, err error)"},
+		{"Select", Func, 0, "func(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)"},
+		{"Sendfile", Func, 0, "func(outfd int, infd int, offset *int64, count int) (written int, err error)"},
+		{"Sendmsg", Func, 0, "func(fd int, p []byte, oob []byte, to Sockaddr, flags int) (err error)"},
+		{"SendmsgN", Func, 3, "func(fd int, p []byte, oob []byte, to Sockaddr, flags int) (n int, err error)"},
+		{"Sendto", Func, 0, "func(fd int, p []byte, flags int, to Sockaddr) (err error)"},
+		{"Servent", Type, 0, ""},
+		{"Servent.Aliases", Field, 0, ""},
+		{"Servent.Name", Field, 0, ""},
+		{"Servent.Port", Field, 0, ""},
+		{"Servent.Proto", Field, 0, ""},
+		{"SetBpf", Func, 0, ""},
+		{"SetBpfBuflen", Func, 0, ""},
+		{"SetBpfDatalink", Func, 0, ""},
+		{"SetBpfHeadercmpl", Func, 0, ""},
+		{"SetBpfImmediate", Func, 0, ""},
+		{"SetBpfInterface", Func, 0, ""},
+		{"SetBpfPromisc", Func, 0, ""},
+		{"SetBpfTimeout", Func, 0, ""},
+		{"SetCurrentDirectory", Func, 0, ""},
+		{"SetEndOfFile", Func, 0, ""},
+		{"SetEnvironmentVariable", Func, 0, ""},
+		{"SetFileAttributes", Func, 0, ""},
+		{"SetFileCompletionNotificationModes", Func, 2, ""},
+		{"SetFilePointer", Func, 0, ""},
+		{"SetFileTime", Func, 0, ""},
+		{"SetHandleInformation", Func, 0, ""},
+		{"SetKevent", Func, 0, ""},
+		{"SetLsfPromisc", Func, 0, "func(name string, m bool) error"},
+		{"SetNonblock", Func, 0, "func(fd int, nonblocking bool) (err error)"},
+		{"Setdomainname", Func, 0, "func(p []byte) (err error)"},
+		{"Setegid", Func, 0, "func(egid int) (err error)"},
+		{"Setenv", Func, 0, "func(key string, value string) error"},
+		{"Seteuid", Func, 0, "func(euid int) (err error)"},
+		{"Setfsgid", Func, 0, "func(gid int) (err error)"},
+		{"Setfsuid", Func, 0, "func(uid int) (err error)"},
+		{"Setgid", Func, 0, "func(gid int) (err error)"},
+		{"Setgroups", Func, 0, "func(gids []int) (err error)"},
+		{"Sethostname", Func, 0, "func(p []byte) (err error)"},
+		{"Setlogin", Func, 0, ""},
+		{"Setpgid", Func, 0, "func(pid int, pgid int) (err error)"},
+		{"Setpriority", Func, 0, "func(which int, who int, prio int) (err error)"},
+		{"Setprivexec", Func, 0, ""},
+		{"Setregid", Func, 0, "func(rgid int, egid int) (err error)"},
+		{"Setresgid", Func, 0, "func(rgid int, egid int, sgid int) (err error)"},
+		{"Setresuid", Func, 0, "func(ruid int, euid int, suid int) (err error)"},
+		{"Setreuid", Func, 0, "func(ruid int, euid int) (err error)"},
+		{"Setrlimit", Func, 0, "func(resource int, rlim *Rlimit) error"},
+		{"Setsid", Func, 0, "func() (pid int, err error)"},
+		{"Setsockopt", Func, 0, ""},
+		{"SetsockoptByte", Func, 0, "func(fd int, level int, opt int, value byte) (err error)"},
+		{"SetsockoptICMPv6Filter", Func, 2, "func(fd int, level int, opt int, filter *ICMPv6Filter) error"},
+		{"SetsockoptIPMreq", Func, 0, "func(fd int, level int, opt int, mreq *IPMreq) (err error)"},
+		{"SetsockoptIPMreqn", Func, 0, "func(fd int, level int, opt int, mreq *IPMreqn) (err error)"},
+		{"SetsockoptIPv6Mreq", Func, 0, "func(fd int, level int, opt int, mreq *IPv6Mreq) (err error)"},
+		{"SetsockoptInet4Addr", Func, 0, "func(fd int, level int, opt int, value [4]byte) (err error)"},
+		{"SetsockoptInt", Func, 0, "func(fd int, level int, opt int, value int) (err error)"},
+		{"SetsockoptLinger", Func, 0, "func(fd int, level int, opt int, l *Linger) (err error)"},
+		{"SetsockoptString", Func, 0, "func(fd int, level int, opt int, s string) (err error)"},
+		{"SetsockoptTimeval", Func, 0, "func(fd int, level int, opt int, tv *Timeval) (err error)"},
+		{"Settimeofday", Func, 0, "func(tv *Timeval) (err error)"},
+		{"Setuid", Func, 0, "func(uid int) (err error)"},
+		{"Setxattr", Func, 1, "func(path string, attr string, data []byte, flags int) (err error)"},
+		{"Shutdown", Func, 0, "func(fd int, how int) (err error)"},
+		{"SidTypeAlias", Const, 0, ""},
+		{"SidTypeComputer", Const, 0, ""},
+		{"SidTypeDeletedAccount", Const, 0, ""},
+		{"SidTypeDomain", Const, 0, ""},
+		{"SidTypeGroup", Const, 0, ""},
+		{"SidTypeInvalid", Const, 0, ""},
+		{"SidTypeLabel", Const, 0, ""},
+		{"SidTypeUnknown", Const, 0, ""},
+		{"SidTypeUser", Const, 0, ""},
+		{"SidTypeWellKnownGroup", Const, 0, ""},
+		{"Signal", Type, 0, ""},
+		{"SizeofBpfHdr", Const, 0, ""},
+		{"SizeofBpfInsn", Const, 0, ""},
+		{"SizeofBpfProgram", Const, 0, ""},
+		{"SizeofBpfStat", Const, 0, ""},
+		{"SizeofBpfVersion", Const, 0, ""},
+		{"SizeofBpfZbuf", Const, 0, ""},
+		{"SizeofBpfZbufHeader", Const, 0, ""},
+		{"SizeofCmsghdr", Const, 0, ""},
+		{"SizeofICMPv6Filter", Const, 2, ""},
+		{"SizeofIPMreq", Const, 0, ""},
+		{"SizeofIPMreqn", Const, 0, ""},
+		{"SizeofIPv6MTUInfo", Const, 2, ""},
+		{"SizeofIPv6Mreq", Const, 0, ""},
+		{"SizeofIfAddrmsg", Const, 0, ""},
+		{"SizeofIfAnnounceMsghdr", Const, 1, ""},
+		{"SizeofIfData", Const, 0, ""},
+		{"SizeofIfInfomsg", Const, 0, ""},
+		{"SizeofIfMsghdr", Const, 0, ""},
+		{"SizeofIfaMsghdr", Const, 0, ""},
+		{"SizeofIfmaMsghdr", Const, 0, ""},
+		{"SizeofIfmaMsghdr2", Const, 0, ""},
+		{"SizeofInet4Pktinfo", Const, 0, ""},
+		{"SizeofInet6Pktinfo", Const, 0, ""},
+		{"SizeofInotifyEvent", Const, 0, ""},
+		{"SizeofLinger", Const, 0, ""},
+		{"SizeofMsghdr", Const, 0, ""},
+		{"SizeofNlAttr", Const, 0, ""},
+		{"SizeofNlMsgerr", Const, 0, ""},
+		{"SizeofNlMsghdr", Const, 0, ""},
+		{"SizeofRtAttr", Const, 0, ""},
+		{"SizeofRtGenmsg", Const, 0, ""},
+		{"SizeofRtMetrics", Const, 0, ""},
+		{"SizeofRtMsg", Const, 0, ""},
+		{"SizeofRtMsghdr", Const, 0, ""},
+		{"SizeofRtNexthop", Const, 0, ""},
+		{"SizeofSockFilter", Const, 0, ""},
+		{"SizeofSockFprog", Const, 0, ""},
+		{"SizeofSockaddrAny", Const, 0, ""},
+		{"SizeofSockaddrDatalink", Const, 0, ""},
+		{"SizeofSockaddrInet4", Const, 0, ""},
+		{"SizeofSockaddrInet6", Const, 0, ""},
+		{"SizeofSockaddrLinklayer", Const, 0, ""},
+		{"SizeofSockaddrNetlink", Const, 0, ""},
+		{"SizeofSockaddrUnix", Const, 0, ""},
+		{"SizeofTCPInfo", Const, 1, ""},
+		{"SizeofUcred", Const, 0, ""},
+		{"SlicePtrFromStrings", Func, 1, "func(ss []string) ([]*byte, error)"},
+		{"SockFilter", Type, 0, ""},
+		{"SockFilter.Code", Field, 0, ""},
+		{"SockFilter.Jf", Field, 0, ""},
+		{"SockFilter.Jt", Field, 0, ""},
+		{"SockFilter.K", Field, 0, ""},
+		{"SockFprog", Type, 0, ""},
+		{"SockFprog.Filter", Field, 0, ""},
+		{"SockFprog.Len", Field, 0, ""},
+		{"SockFprog.Pad_cgo_0", Field, 0, ""},
+		{"Sockaddr", Type, 0, ""},
+		{"SockaddrDatalink", Type, 0, ""},
+		{"SockaddrDatalink.Alen", Field, 0, ""},
+		{"SockaddrDatalink.Data", Field, 0, ""},
+		{"SockaddrDatalink.Family", Field, 0, ""},
+		{"SockaddrDatalink.Index", Field, 0, ""},
+		{"SockaddrDatalink.Len", Field, 0, ""},
+		{"SockaddrDatalink.Nlen", Field, 0, ""},
+		{"SockaddrDatalink.Slen", Field, 0, ""},
+		{"SockaddrDatalink.Type", Field, 0, ""},
+		{"SockaddrGen", Type, 0, ""},
+		{"SockaddrInet4", Type, 0, ""},
+		{"SockaddrInet4.Addr", Field, 0, ""},
+		{"SockaddrInet4.Port", Field, 0, ""},
+		{"SockaddrInet6", Type, 0, ""},
+		{"SockaddrInet6.Addr", Field, 0, ""},
+		{"SockaddrInet6.Port", Field, 0, ""},
+		{"SockaddrInet6.ZoneId", Field, 0, ""},
+		{"SockaddrLinklayer", Type, 0, ""},
+		{"SockaddrLinklayer.Addr", Field, 0, ""},
+		{"SockaddrLinklayer.Halen", Field, 0, ""},
+		{"SockaddrLinklayer.Hatype", Field, 0, ""},
+		{"SockaddrLinklayer.Ifindex", Field, 0, ""},
+		{"SockaddrLinklayer.Pkttype", Field, 0, ""},
+		{"SockaddrLinklayer.Protocol", Field, 0, ""},
+		{"SockaddrNetlink", Type, 0, ""},
+		{"SockaddrNetlink.Family", Field, 0, ""},
+		{"SockaddrNetlink.Groups", Field, 0, ""},
+		{"SockaddrNetlink.Pad", Field, 0, ""},
+		{"SockaddrNetlink.Pid", Field, 0, ""},
+		{"SockaddrUnix", Type, 0, ""},
+		{"SockaddrUnix.Name", Field, 0, ""},
+		{"Socket", Func, 0, "func(domain int, typ int, proto int) (fd int, err error)"},
+		{"SocketControlMessage", Type, 0, ""},
+		{"SocketControlMessage.Data", Field, 0, ""},
+		{"SocketControlMessage.Header", Field, 0, ""},
+		{"SocketDisableIPv6", Var, 0, ""},
+		{"Socketpair", Func, 0, "func(domain int, typ int, proto int) (fd [2]int, err error)"},
+		{"Splice", Func, 0, "func(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)"},
+		{"StartProcess", Func, 0, "func(argv0 string, argv []string, attr *ProcAttr) (pid int, handle uintptr, err error)"},
+		{"StartupInfo", Type, 0, ""},
+		{"StartupInfo.Cb", Field, 0, ""},
+		{"StartupInfo.Desktop", Field, 0, ""},
+		{"StartupInfo.FillAttribute", Field, 0, ""},
+		{"StartupInfo.Flags", Field, 0, ""},
+		{"StartupInfo.ShowWindow", Field, 0, ""},
+		{"StartupInfo.StdErr", Field, 0, ""},
+		{"StartupInfo.StdInput", Field, 0, ""},
+		{"StartupInfo.StdOutput", Field, 0, ""},
+		{"StartupInfo.Title", Field, 0, ""},
+		{"StartupInfo.X", Field, 0, ""},
+		{"StartupInfo.XCountChars", Field, 0, ""},
+		{"StartupInfo.XSize", Field, 0, ""},
+		{"StartupInfo.Y", Field, 0, ""},
+		{"StartupInfo.YCountChars", Field, 0, ""},
+		{"StartupInfo.YSize", Field, 0, ""},
+		{"Stat", Func, 0, "func(path string, stat *Stat_t) (err error)"},
+		{"Stat_t", Type, 0, ""},
+		{"Stat_t.Atim", Field, 0, ""},
+		{"Stat_t.Atim_ext", Field, 12, ""},
+		{"Stat_t.Atimespec", Field, 0, ""},
+		{"Stat_t.Birthtimespec", Field, 0, ""},
+		{"Stat_t.Blksize", Field, 0, ""},
+		{"Stat_t.Blocks", Field, 0, ""},
+		{"Stat_t.Btim_ext", Field, 12, ""},
+		{"Stat_t.Ctim", Field, 0, ""},
+		{"Stat_t.Ctim_ext", Field, 12, ""},
+		{"Stat_t.Ctimespec", Field, 0, ""},
+		{"Stat_t.Dev", Field, 0, ""},
+		{"Stat_t.Flags", Field, 0, ""},
+		{"Stat_t.Gen", Field, 0, ""},
+		{"Stat_t.Gid", Field, 0, ""},
+		{"Stat_t.Ino", Field, 0, ""},
+		{"Stat_t.Lspare", Field, 0, ""},
+		{"Stat_t.Lspare0", Field, 2, ""},
+		{"Stat_t.Lspare1", Field, 2, ""},
+		{"Stat_t.Mode", Field, 0, ""},
+		{"Stat_t.Mtim", Field, 0, ""},
+		{"Stat_t.Mtim_ext", Field, 12, ""},
+		{"Stat_t.Mtimespec", Field, 0, ""},
+		{"Stat_t.Nlink", Field, 0, ""},
+		{"Stat_t.Pad_cgo_0", Field, 0, ""},
+		{"Stat_t.Pad_cgo_1", Field, 0, ""},
+		{"Stat_t.Pad_cgo_2", Field, 0, ""},
+		{"Stat_t.Padding0", Field, 12, ""},
+		{"Stat_t.Padding1", Field, 12, ""},
+		{"Stat_t.Qspare", Field, 0, ""},
+		{"Stat_t.Rdev", Field, 0, ""},
+		{"Stat_t.Size", Field, 0, ""},
+		{"Stat_t.Spare", Field, 2, ""},
+		{"Stat_t.Uid", Field, 0, ""},
+		{"Stat_t.X__pad0", Field, 0, ""},
+		{"Stat_t.X__pad1", Field, 0, ""},
+		{"Stat_t.X__pad2", Field, 0, ""},
+		{"Stat_t.X__st_birthtim", Field, 2, ""},
+		{"Stat_t.X__st_ino", Field, 0, ""},
+		{"Stat_t.X__unused", Field, 0, ""},
+		{"Statfs", Func, 0, "func(path string, buf *Statfs_t) (err error)"},
+		{"Statfs_t", Type, 0, ""},
+		{"Statfs_t.Asyncreads", Field, 0, ""},
+		{"Statfs_t.Asyncwrites", Field, 0, ""},
+		{"Statfs_t.Bavail", Field, 0, ""},
+		{"Statfs_t.Bfree", Field, 0, ""},
+		{"Statfs_t.Blocks", Field, 0, ""},
+		{"Statfs_t.Bsize", Field, 0, ""},
+		{"Statfs_t.Charspare", Field, 0, ""},
+		{"Statfs_t.F_asyncreads", Field, 2, ""},
+		{"Statfs_t.F_asyncwrites", Field, 2, ""},
+		{"Statfs_t.F_bavail", Field, 2, ""},
+		{"Statfs_t.F_bfree", Field, 2, ""},
+		{"Statfs_t.F_blocks", Field, 2, ""},
+		{"Statfs_t.F_bsize", Field, 2, ""},
+		{"Statfs_t.F_ctime", Field, 2, ""},
+		{"Statfs_t.F_favail", Field, 2, ""},
+		{"Statfs_t.F_ffree", Field, 2, ""},
+		{"Statfs_t.F_files", Field, 2, ""},
+		{"Statfs_t.F_flags", Field, 2, ""},
+		{"Statfs_t.F_fsid", Field, 2, ""},
+		{"Statfs_t.F_fstypename", Field, 2, ""},
+		{"Statfs_t.F_iosize", Field, 2, ""},
+		{"Statfs_t.F_mntfromname", Field, 2, ""},
+		{"Statfs_t.F_mntfromspec", Field, 3, ""},
+		{"Statfs_t.F_mntonname", Field, 2, ""},
+		{"Statfs_t.F_namemax", Field, 2, ""},
+		{"Statfs_t.F_owner", Field, 2, ""},
+		{"Statfs_t.F_spare", Field, 2, ""},
+		{"Statfs_t.F_syncreads", Field, 2, ""},
+		{"Statfs_t.F_syncwrites", Field, 2, ""},
+		{"Statfs_t.Ffree", Field, 0, ""},
+		{"Statfs_t.Files", Field, 0, ""},
+		{"Statfs_t.Flags", Field, 0, ""},
+		{"Statfs_t.Frsize", Field, 0, ""},
+		{"Statfs_t.Fsid", Field, 0, ""},
+		{"Statfs_t.Fssubtype", Field, 0, ""},
+		{"Statfs_t.Fstypename", Field, 0, ""},
+		{"Statfs_t.Iosize", Field, 0, ""},
+		{"Statfs_t.Mntfromname", Field, 0, ""},
+		{"Statfs_t.Mntonname", Field, 0, ""},
+		{"Statfs_t.Mount_info", Field, 2, ""},
+		{"Statfs_t.Namelen", Field, 0, ""},
+		{"Statfs_t.Namemax", Field, 0, ""},
+		{"Statfs_t.Owner", Field, 0, ""},
+		{"Statfs_t.Pad_cgo_0", Field, 0, ""},
+		{"Statfs_t.Pad_cgo_1", Field, 2, ""},
+		{"Statfs_t.Reserved", Field, 0, ""},
+		{"Statfs_t.Spare", Field, 0, ""},
+		{"Statfs_t.Syncreads", Field, 0, ""},
+		{"Statfs_t.Syncwrites", Field, 0, ""},
+		{"Statfs_t.Type", Field, 0, ""},
+		{"Statfs_t.Version", Field, 0, ""},
+		{"Stderr", Var, 0, ""},
+		{"Stdin", Var, 0, ""},
+		{"Stdout", Var, 0, ""},
+		{"StringBytePtr", Func, 0, "func(s string) *byte"},
+		{"StringByteSlice", Func, 0, "func(s string) []byte"},
+		{"StringSlicePtr", Func, 0, "func(ss []string) []*byte"},
+		{"StringToSid", Func, 0, ""},
+		{"StringToUTF16", Func, 0, ""},
+		{"StringToUTF16Ptr", Func, 0, ""},
+		{"Symlink", Func, 0, "func(oldpath string, newpath string) (err error)"},
+		{"Sync", Func, 0, "func()"},
+		{"SyncFileRange", Func, 0, "func(fd int, off int64, n int64, flags int) (err error)"},
+		{"SysProcAttr", Type, 0, ""},
+		{"SysProcAttr.AdditionalInheritedHandles", Field, 17, ""},
+		{"SysProcAttr.AmbientCaps", Field, 9, ""},
+		{"SysProcAttr.CgroupFD", Field, 20, ""},
+		{"SysProcAttr.Chroot", Field, 0, ""},
+		{"SysProcAttr.Cloneflags", Field, 2, ""},
+		{"SysProcAttr.CmdLine", Field, 0, ""},
+		{"SysProcAttr.CreationFlags", Field, 1, ""},
+		{"SysProcAttr.Credential", Field, 0, ""},
+		{"SysProcAttr.Ctty", Field, 1, ""},
+		{"SysProcAttr.Foreground", Field, 5, ""},
+		{"SysProcAttr.GidMappings", Field, 4, ""},
+		{"SysProcAttr.GidMappingsEnableSetgroups", Field, 5, ""},
+		{"SysProcAttr.HideWindow", Field, 0, ""},
+		{"SysProcAttr.Jail", Field, 21, ""},
+		{"SysProcAttr.NoInheritHandles", Field, 16, ""},
+		{"SysProcAttr.Noctty", Field, 0, ""},
+		{"SysProcAttr.ParentProcess", Field, 17, ""},
+		{"SysProcAttr.Pdeathsig", Field, 0, ""},
+		{"SysProcAttr.Pgid", Field, 5, ""},
+		{"SysProcAttr.PidFD", Field, 22, ""},
+		{"SysProcAttr.ProcessAttributes", Field, 13, ""},
+		{"SysProcAttr.Ptrace", Field, 0, ""},
+		{"SysProcAttr.Setctty", Field, 0, ""},
+		{"SysProcAttr.Setpgid", Field, 0, ""},
+		{"SysProcAttr.Setsid", Field, 0, ""},
+		{"SysProcAttr.ThreadAttributes", Field, 13, ""},
+		{"SysProcAttr.Token", Field, 10, ""},
+		{"SysProcAttr.UidMappings", Field, 4, ""},
+		{"SysProcAttr.Unshareflags", Field, 7, ""},
+		{"SysProcAttr.UseCgroupFD", Field, 20, ""},
+		{"SysProcIDMap", Type, 4, ""},
+		{"SysProcIDMap.ContainerID", Field, 4, ""},
+		{"SysProcIDMap.HostID", Field, 4, ""},
+		{"SysProcIDMap.Size", Field, 4, ""},
+		{"Syscall", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"Syscall12", Func, 0, ""},
+		{"Syscall15", Func, 0, ""},
+		{"Syscall18", Func, 12, ""},
+		{"Syscall6", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"Syscall9", Func, 0, ""},
+		{"SyscallN", Func, 18, ""},
+		{"Sysctl", Func, 0, ""},
+		{"SysctlUint32", Func, 0, ""},
+		{"Sysctlnode", Type, 2, ""},
+		{"Sysctlnode.Flags", Field, 2, ""},
+		{"Sysctlnode.Name", Field, 2, ""},
+		{"Sysctlnode.Num", Field, 2, ""},
+		{"Sysctlnode.Un", Field, 2, ""},
+		{"Sysctlnode.Ver", Field, 2, ""},
+		{"Sysctlnode.X__rsvd", Field, 2, ""},
+		{"Sysctlnode.X_sysctl_desc", Field, 2, ""},
+		{"Sysctlnode.X_sysctl_func", Field, 2, ""},
+		{"Sysctlnode.X_sysctl_parent", Field, 2, ""},
+		{"Sysctlnode.X_sysctl_size", Field, 2, ""},
+		{"Sysinfo", Func, 0, "func(info *Sysinfo_t) (err error)"},
+		{"Sysinfo_t", Type, 0, ""},
+		{"Sysinfo_t.Bufferram", Field, 0, ""},
+		{"Sysinfo_t.Freehigh", Field, 0, ""},
+		{"Sysinfo_t.Freeram", Field, 0, ""},
+		{"Sysinfo_t.Freeswap", Field, 0, ""},
+		{"Sysinfo_t.Loads", Field, 0, ""},
+		{"Sysinfo_t.Pad", Field, 0, ""},
+		{"Sysinfo_t.Pad_cgo_0", Field, 0, ""},
+		{"Sysinfo_t.Pad_cgo_1", Field, 0, ""},
+		{"Sysinfo_t.Procs", Field, 0, ""},
+		{"Sysinfo_t.Sharedram", Field, 0, ""},
+		{"Sysinfo_t.Totalhigh", Field, 0, ""},
+		{"Sysinfo_t.Totalram", Field, 0, ""},
+		{"Sysinfo_t.Totalswap", Field, 0, ""},
+		{"Sysinfo_t.Unit", Field, 0, ""},
+		{"Sysinfo_t.Uptime", Field, 0, ""},
+		{"Sysinfo_t.X_f", Field, 0, ""},
+		{"Systemtime", Type, 0, ""},
+		{"Systemtime.Day", Field, 0, ""},
+		{"Systemtime.DayOfWeek", Field, 0, ""},
+		{"Systemtime.Hour", Field, 0, ""},
+		{"Systemtime.Milliseconds", Field, 0, ""},
+		{"Systemtime.Minute", Field, 0, ""},
+		{"Systemtime.Month", Field, 0, ""},
+		{"Systemtime.Second", Field, 0, ""},
+		{"Systemtime.Year", Field, 0, ""},
+		{"TCGETS", Const, 0, ""},
+		{"TCIFLUSH", Const, 1, ""},
+		{"TCIOFLUSH", Const, 1, ""},
+		{"TCOFLUSH", Const, 1, ""},
+		{"TCPInfo", Type, 1, ""},
+		{"TCPInfo.Advmss", Field, 1, ""},
+		{"TCPInfo.Ato", Field, 1, ""},
+		{"TCPInfo.Backoff", Field, 1, ""},
+		{"TCPInfo.Ca_state", Field, 1, ""},
+		{"TCPInfo.Fackets", Field, 1, ""},
+		{"TCPInfo.Last_ack_recv", Field, 1, ""},
+		{"TCPInfo.Last_ack_sent", Field, 1, ""},
+		{"TCPInfo.Last_data_recv", Field, 1, ""},
+		{"TCPInfo.Last_data_sent", Field, 1, ""},
+		{"TCPInfo.Lost", Field, 1, ""},
+		{"TCPInfo.Options", Field, 1, ""},
+		{"TCPInfo.Pad_cgo_0", Field, 1, ""},
+		{"TCPInfo.Pmtu", Field, 1, ""},
+		{"TCPInfo.Probes", Field, 1, ""},
+		{"TCPInfo.Rcv_mss", Field, 1, ""},
+		{"TCPInfo.Rcv_rtt", Field, 1, ""},
+		{"TCPInfo.Rcv_space", Field, 1, ""},
+		{"TCPInfo.Rcv_ssthresh", Field, 1, ""},
+		{"TCPInfo.Reordering", Field, 1, ""},
+		{"TCPInfo.Retrans", Field, 1, ""},
+		{"TCPInfo.Retransmits", Field, 1, ""},
+		{"TCPInfo.Rto", Field, 1, ""},
+		{"TCPInfo.Rtt", Field, 1, ""},
+		{"TCPInfo.Rttvar", Field, 1, ""},
+		{"TCPInfo.Sacked", Field, 1, ""},
+		{"TCPInfo.Snd_cwnd", Field, 1, ""},
+		{"TCPInfo.Snd_mss", Field, 1, ""},
+		{"TCPInfo.Snd_ssthresh", Field, 1, ""},
+		{"TCPInfo.State", Field, 1, ""},
+		{"TCPInfo.Total_retrans", Field, 1, ""},
+		{"TCPInfo.Unacked", Field, 1, ""},
+		{"TCPKeepalive", Type, 3, ""},
+		{"TCPKeepalive.Interval", Field, 3, ""},
+		{"TCPKeepalive.OnOff", Field, 3, ""},
+		{"TCPKeepalive.Time", Field, 3, ""},
+		{"TCP_CA_NAME_MAX", Const, 0, ""},
+		{"TCP_CONGCTL", Const, 1, ""},
+		{"TCP_CONGESTION", Const, 0, ""},
+		{"TCP_CONNECTIONTIMEOUT", Const, 0, ""},
+		{"TCP_CORK", Const, 0, ""},
+		{"TCP_DEFER_ACCEPT", Const, 0, ""},
+		{"TCP_ENABLE_ECN", Const, 16, ""},
+		{"TCP_INFO", Const, 0, ""},
+		{"TCP_KEEPALIVE", Const, 0, ""},
+		{"TCP_KEEPCNT", Const, 0, ""},
+		{"TCP_KEEPIDLE", Const, 0, ""},
+		{"TCP_KEEPINIT", Const, 1, ""},
+		{"TCP_KEEPINTVL", Const, 0, ""},
+		{"TCP_LINGER2", Const, 0, ""},
+		{"TCP_MAXBURST", Const, 0, ""},
+		{"TCP_MAXHLEN", Const, 0, ""},
+		{"TCP_MAXOLEN", Const, 0, ""},
+		{"TCP_MAXSEG", Const, 0, ""},
+		{"TCP_MAXWIN", Const, 0, ""},
+		{"TCP_MAX_SACK", Const, 0, ""},
+		{"TCP_MAX_WINSHIFT", Const, 0, ""},
+		{"TCP_MD5SIG", Const, 0, ""},
+		{"TCP_MD5SIG_MAXKEYLEN", Const, 0, ""},
+		{"TCP_MINMSS", Const, 0, ""},
+		{"TCP_MINMSSOVERLOAD", Const, 0, ""},
+		{"TCP_MSS", Const, 0, ""},
+		{"TCP_NODELAY", Const, 0, ""},
+		{"TCP_NOOPT", Const, 0, ""},
+		{"TCP_NOPUSH", Const, 0, ""},
+		{"TCP_NOTSENT_LOWAT", Const, 16, ""},
+		{"TCP_NSTATES", Const, 1, ""},
+		{"TCP_QUICKACK", Const, 0, ""},
+		{"TCP_RXT_CONNDROPTIME", Const, 0, ""},
+		{"TCP_RXT_FINDROP", Const, 0, ""},
+		{"TCP_SACK_ENABLE", Const, 1, ""},
+		{"TCP_SENDMOREACKS", Const, 16, ""},
+		{"TCP_SYNCNT", Const, 0, ""},
+		{"TCP_VENDOR", Const, 3, ""},
+		{"TCP_WINDOW_CLAMP", Const, 0, ""},
+		{"TCSAFLUSH", Const, 1, ""},
+		{"TCSETS", Const, 0, ""},
+		{"TF_DISCONNECT", Const, 0, ""},
+		{"TF_REUSE_SOCKET", Const, 0, ""},
+		{"TF_USE_DEFAULT_WORKER", Const, 0, ""},
+		{"TF_USE_KERNEL_APC", Const, 0, ""},
+		{"TF_USE_SYSTEM_THREAD", Const, 0, ""},
+		{"TF_WRITE_BEHIND", Const, 0, ""},
+		{"TH32CS_INHERIT", Const, 4, ""},
+		{"TH32CS_SNAPALL", Const, 4, ""},
+		{"TH32CS_SNAPHEAPLIST", Const, 4, ""},
+		{"TH32CS_SNAPMODULE", Const, 4, ""},
+		{"TH32CS_SNAPMODULE32", Const, 4, ""},
+		{"TH32CS_SNAPPROCESS", Const, 4, ""},
+		{"TH32CS_SNAPTHREAD", Const, 4, ""},
+		{"TIME_ZONE_ID_DAYLIGHT", Const, 0, ""},
+		{"TIME_ZONE_ID_STANDARD", Const, 0, ""},
+		{"TIME_ZONE_ID_UNKNOWN", Const, 0, ""},
+		{"TIOCCBRK", Const, 0, ""},
+		{"TIOCCDTR", Const, 0, ""},
+		{"TIOCCONS", Const, 0, ""},
+		{"TIOCDCDTIMESTAMP", Const, 0, ""},
+		{"TIOCDRAIN", Const, 0, ""},
+		{"TIOCDSIMICROCODE", Const, 0, ""},
+		{"TIOCEXCL", Const, 0, ""},
+		{"TIOCEXT", Const, 0, ""},
+		{"TIOCFLAG_CDTRCTS", Const, 1, ""},
+		{"TIOCFLAG_CLOCAL", Const, 1, ""},
+		{"TIOCFLAG_CRTSCTS", Const, 1, ""},
+		{"TIOCFLAG_MDMBUF", Const, 1, ""},
+		{"TIOCFLAG_PPS", Const, 1, ""},
+		{"TIOCFLAG_SOFTCAR", Const, 1, ""},
+		{"TIOCFLUSH", Const, 0, ""},
+		{"TIOCGDEV", Const, 0, ""},
+		{"TIOCGDRAINWAIT", Const, 0, ""},
+		{"TIOCGETA", Const, 0, ""},
+		{"TIOCGETD", Const, 0, ""},
+		{"TIOCGFLAGS", Const, 1, ""},
+		{"TIOCGICOUNT", Const, 0, ""},
+		{"TIOCGLCKTRMIOS", Const, 0, ""},
+		{"TIOCGLINED", Const, 1, ""},
+		{"TIOCGPGRP", Const, 0, ""},
+		{"TIOCGPTN", Const, 0, ""},
+		{"TIOCGQSIZE", Const, 1, ""},
+		{"TIOCGRANTPT", Const, 1, ""},
+		{"TIOCGRS485", Const, 0, ""},
+		{"TIOCGSERIAL", Const, 0, ""},
+		{"TIOCGSID", Const, 0, ""},
+		{"TIOCGSIZE", Const, 1, ""},
+		{"TIOCGSOFTCAR", Const, 0, ""},
+		{"TIOCGTSTAMP", Const, 1, ""},
+		{"TIOCGWINSZ", Const, 0, ""},
+		{"TIOCINQ", Const, 0, ""},
+		{"TIOCIXOFF", Const, 0, ""},
+		{"TIOCIXON", Const, 0, ""},
+		{"TIOCLINUX", Const, 0, ""},
+		{"TIOCMBIC", Const, 0, ""},
+		{"TIOCMBIS", Const, 0, ""},
+		{"TIOCMGDTRWAIT", Const, 0, ""},
+		{"TIOCMGET", Const, 0, ""},
+		{"TIOCMIWAIT", Const, 0, ""},
+		{"TIOCMODG", Const, 0, ""},
+		{"TIOCMODS", Const, 0, ""},
+		{"TIOCMSDTRWAIT", Const, 0, ""},
+		{"TIOCMSET", Const, 0, ""},
+		{"TIOCM_CAR", Const, 0, ""},
+		{"TIOCM_CD", Const, 0, ""},
+		{"TIOCM_CTS", Const, 0, ""},
+		{"TIOCM_DCD", Const, 0, ""},
+		{"TIOCM_DSR", Const, 0, ""},
+		{"TIOCM_DTR", Const, 0, ""},
+		{"TIOCM_LE", Const, 0, ""},
+		{"TIOCM_RI", Const, 0, ""},
+		{"TIOCM_RNG", Const, 0, ""},
+		{"TIOCM_RTS", Const, 0, ""},
+		{"TIOCM_SR", Const, 0, ""},
+		{"TIOCM_ST", Const, 0, ""},
+		{"TIOCNOTTY", Const, 0, ""},
+		{"TIOCNXCL", Const, 0, ""},
+		{"TIOCOUTQ", Const, 0, ""},
+		{"TIOCPKT", Const, 0, ""},
+		{"TIOCPKT_DATA", Const, 0, ""},
+		{"TIOCPKT_DOSTOP", Const, 0, ""},
+		{"TIOCPKT_FLUSHREAD", Const, 0, ""},
+		{"TIOCPKT_FLUSHWRITE", Const, 0, ""},
+		{"TIOCPKT_IOCTL", Const, 0, ""},
+		{"TIOCPKT_NOSTOP", Const, 0, ""},
+		{"TIOCPKT_START", Const, 0, ""},
+		{"TIOCPKT_STOP", Const, 0, ""},
+		{"TIOCPTMASTER", Const, 0, ""},
+		{"TIOCPTMGET", Const, 1, ""},
+		{"TIOCPTSNAME", Const, 1, ""},
+		{"TIOCPTYGNAME", Const, 0, ""},
+		{"TIOCPTYGRANT", Const, 0, ""},
+		{"TIOCPTYUNLK", Const, 0, ""},
+		{"TIOCRCVFRAME", Const, 1, ""},
+		{"TIOCREMOTE", Const, 0, ""},
+		{"TIOCSBRK", Const, 0, ""},
+		{"TIOCSCONS", Const, 0, ""},
+		{"TIOCSCTTY", Const, 0, ""},
+		{"TIOCSDRAINWAIT", Const, 0, ""},
+		{"TIOCSDTR", Const, 0, ""},
+		{"TIOCSERCONFIG", Const, 0, ""},
+		{"TIOCSERGETLSR", Const, 0, ""},
+		{"TIOCSERGETMULTI", Const, 0, ""},
+		{"TIOCSERGSTRUCT", Const, 0, ""},
+		{"TIOCSERGWILD", Const, 0, ""},
+		{"TIOCSERSETMULTI", Const, 0, ""},
+		{"TIOCSERSWILD", Const, 0, ""},
+		{"TIOCSER_TEMT", Const, 0, ""},
+		{"TIOCSETA", Const, 0, ""},
+		{"TIOCSETAF", Const, 0, ""},
+		{"TIOCSETAW", Const, 0, ""},
+		{"TIOCSETD", Const, 0, ""},
+		{"TIOCSFLAGS", Const, 1, ""},
+		{"TIOCSIG", Const, 0, ""},
+		{"TIOCSLCKTRMIOS", Const, 0, ""},
+		{"TIOCSLINED", Const, 1, ""},
+		{"TIOCSPGRP", Const, 0, ""},
+		{"TIOCSPTLCK", Const, 0, ""},
+		{"TIOCSQSIZE", Const, 1, ""},
+		{"TIOCSRS485", Const, 0, ""},
+		{"TIOCSSERIAL", Const, 0, ""},
+		{"TIOCSSIZE", Const, 1, ""},
+		{"TIOCSSOFTCAR", Const, 0, ""},
+		{"TIOCSTART", Const, 0, ""},
+		{"TIOCSTAT", Const, 0, ""},
+		{"TIOCSTI", Const, 0, ""},
+		{"TIOCSTOP", Const, 0, ""},
+		{"TIOCSTSTAMP", Const, 1, ""},
+		{"TIOCSWINSZ", Const, 0, ""},
+		{"TIOCTIMESTAMP", Const, 0, ""},
+		{"TIOCUCNTL", Const, 0, ""},
+		{"TIOCVHANGUP", Const, 0, ""},
+		{"TIOCXMTFRAME", Const, 1, ""},
+		{"TOKEN_ADJUST_DEFAULT", Const, 0, ""},
+		{"TOKEN_ADJUST_GROUPS", Const, 0, ""},
+		{"TOKEN_ADJUST_PRIVILEGES", Const, 0, ""},
+		{"TOKEN_ADJUST_SESSIONID", Const, 11, ""},
+		{"TOKEN_ALL_ACCESS", Const, 0, ""},
+		{"TOKEN_ASSIGN_PRIMARY", Const, 0, ""},
+		{"TOKEN_DUPLICATE", Const, 0, ""},
+		{"TOKEN_EXECUTE", Const, 0, ""},
+		{"TOKEN_IMPERSONATE", Const, 0, ""},
+		{"TOKEN_QUERY", Const, 0, ""},
+		{"TOKEN_QUERY_SOURCE", Const, 0, ""},
+		{"TOKEN_READ", Const, 0, ""},
+		{"TOKEN_WRITE", Const, 0, ""},
+		{"TOSTOP", Const, 0, ""},
+		{"TRUNCATE_EXISTING", Const, 0, ""},
+		{"TUNATTACHFILTER", Const, 0, ""},
+		{"TUNDETACHFILTER", Const, 0, ""},
+		{"TUNGETFEATURES", Const, 0, ""},
+		{"TUNGETIFF", Const, 0, ""},
+		{"TUNGETSNDBUF", Const, 0, ""},
+		{"TUNGETVNETHDRSZ", Const, 0, ""},
+		{"TUNSETDEBUG", Const, 0, ""},
+		{"TUNSETGROUP", Const, 0, ""},
+		{"TUNSETIFF", Const, 0, ""},
+		{"TUNSETLINK", Const, 0, ""},
+		{"TUNSETNOCSUM", Const, 0, ""},
+		{"TUNSETOFFLOAD", Const, 0, ""},
+		{"TUNSETOWNER", Const, 0, ""},
+		{"TUNSETPERSIST", Const, 0, ""},
+		{"TUNSETSNDBUF", Const, 0, ""},
+		{"TUNSETTXFILTER", Const, 0, ""},
+		{"TUNSETVNETHDRSZ", Const, 0, ""},
+		{"Tee", Func, 0, "func(rfd int, wfd int, len int, flags int) (n int64, err error)"},
+		{"TerminateProcess", Func, 0, ""},
+		{"Termios", Type, 0, ""},
+		{"Termios.Cc", Field, 0, ""},
+		{"Termios.Cflag", Field, 0, ""},
+		{"Termios.Iflag", Field, 0, ""},
+		{"Termios.Ispeed", Field, 0, ""},
+		{"Termios.Lflag", Field, 0, ""},
+		{"Termios.Line", Field, 0, ""},
+		{"Termios.Oflag", Field, 0, ""},
+		{"Termios.Ospeed", Field, 0, ""},
+		{"Termios.Pad_cgo_0", Field, 0, ""},
+		{"Tgkill", Func, 0, "func(tgid int, tid int, sig Signal) (err error)"},
+		{"Time", Func, 0, "func(t *Time_t) (tt Time_t, err error)"},
+		{"Time_t", Type, 0, ""},
+		{"Times", Func, 0, "func(tms *Tms) (ticks uintptr, err error)"},
+		{"Timespec", Type, 0, ""},
+		{"Timespec.Nsec", Field, 0, ""},
+		{"Timespec.Pad_cgo_0", Field, 2, ""},
+		{"Timespec.Sec", Field, 0, ""},
+		{"TimespecToNsec", Func, 0, "func(ts Timespec) int64"},
+		{"Timeval", Type, 0, ""},
+		{"Timeval.Pad_cgo_0", Field, 0, ""},
+		{"Timeval.Sec", Field, 0, ""},
+		{"Timeval.Usec", Field, 0, ""},
+		{"Timeval32", Type, 0, ""},
+		{"Timeval32.Sec", Field, 0, ""},
+		{"Timeval32.Usec", Field, 0, ""},
+		{"TimevalToNsec", Func, 0, "func(tv Timeval) int64"},
+		{"Timex", Type, 0, ""},
+		{"Timex.Calcnt", Field, 0, ""},
+		{"Timex.Constant", Field, 0, ""},
+		{"Timex.Errcnt", Field, 0, ""},
+		{"Timex.Esterror", Field, 0, ""},
+		{"Timex.Freq", Field, 0, ""},
+		{"Timex.Jitcnt", Field, 0, ""},
+		{"Timex.Jitter", Field, 0, ""},
+		{"Timex.Maxerror", Field, 0, ""},
+		{"Timex.Modes", Field, 0, ""},
+		{"Timex.Offset", Field, 0, ""},
+		{"Timex.Pad_cgo_0", Field, 0, ""},
+		{"Timex.Pad_cgo_1", Field, 0, ""},
+		{"Timex.Pad_cgo_2", Field, 0, ""},
+		{"Timex.Pad_cgo_3", Field, 0, ""},
+		{"Timex.Ppsfreq", Field, 0, ""},
+		{"Timex.Precision", Field, 0, ""},
+		{"Timex.Shift", Field, 0, ""},
+		{"Timex.Stabil", Field, 0, ""},
+		{"Timex.Status", Field, 0, ""},
+		{"Timex.Stbcnt", Field, 0, ""},
+		{"Timex.Tai", Field, 0, ""},
+		{"Timex.Tick", Field, 0, ""},
+		{"Timex.Time", Field, 0, ""},
+		{"Timex.Tolerance", Field, 0, ""},
+		{"Timezoneinformation", Type, 0, ""},
+		{"Timezoneinformation.Bias", Field, 0, ""},
+		{"Timezoneinformation.DaylightBias", Field, 0, ""},
+		{"Timezoneinformation.DaylightDate", Field, 0, ""},
+		{"Timezoneinformation.DaylightName", Field, 0, ""},
+		{"Timezoneinformation.StandardBias", Field, 0, ""},
+		{"Timezoneinformation.StandardDate", Field, 0, ""},
+		{"Timezoneinformation.StandardName", Field, 0, ""},
+		{"Tms", Type, 0, ""},
+		{"Tms.Cstime", Field, 0, ""},
+		{"Tms.Cutime", Field, 0, ""},
+		{"Tms.Stime", Field, 0, ""},
+		{"Tms.Utime", Field, 0, ""},
+		{"Token", Type, 0, ""},
+		{"TokenAccessInformation", Const, 0, ""},
+		{"TokenAuditPolicy", Const, 0, ""},
+		{"TokenDefaultDacl", Const, 0, ""},
+		{"TokenElevation", Const, 0, ""},
+		{"TokenElevationType", Const, 0, ""},
+		{"TokenGroups", Const, 0, ""},
+		{"TokenGroupsAndPrivileges", Const, 0, ""},
+		{"TokenHasRestrictions", Const, 0, ""},
+		{"TokenImpersonationLevel", Const, 0, ""},
+		{"TokenIntegrityLevel", Const, 0, ""},
+		{"TokenLinkedToken", Const, 0, ""},
+		{"TokenLogonSid", Const, 0, ""},
+		{"TokenMandatoryPolicy", Const, 0, ""},
+		{"TokenOrigin", Const, 0, ""},
+		{"TokenOwner", Const, 0, ""},
+		{"TokenPrimaryGroup", Const, 0, ""},
+		{"TokenPrivileges", Const, 0, ""},
+		{"TokenRestrictedSids", Const, 0, ""},
+		{"TokenSandBoxInert", Const, 0, ""},
+		{"TokenSessionId", Const, 0, ""},
+		{"TokenSessionReference", Const, 0, ""},
+		{"TokenSource", Const, 0, ""},
+		{"TokenStatistics", Const, 0, ""},
+		{"TokenType", Const, 0, ""},
+		{"TokenUIAccess", Const, 0, ""},
+		{"TokenUser", Const, 0, ""},
+		{"TokenVirtualizationAllowed", Const, 0, ""},
+		{"TokenVirtualizationEnabled", Const, 0, ""},
+		{"Tokenprimarygroup", Type, 0, ""},
+		{"Tokenprimarygroup.PrimaryGroup", Field, 0, ""},
+		{"Tokenuser", Type, 0, ""},
+		{"Tokenuser.User", Field, 0, ""},
+		{"TranslateAccountName", Func, 0, ""},
+		{"TranslateName", Func, 0, ""},
+		{"TransmitFile", Func, 0, ""},
+		{"TransmitFileBuffers", Type, 0, ""},
+		{"TransmitFileBuffers.Head", Field, 0, ""},
+		{"TransmitFileBuffers.HeadLength", Field, 0, ""},
+		{"TransmitFileBuffers.Tail", Field, 0, ""},
+		{"TransmitFileBuffers.TailLength", Field, 0, ""},
+		{"Truncate", Func, 0, "func(path string, length int64) (err error)"},
+		{"UNIX_PATH_MAX", Const, 12, ""},
+		{"USAGE_MATCH_TYPE_AND", Const, 0, ""},
+		{"USAGE_MATCH_TYPE_OR", Const, 0, ""},
+		{"UTF16FromString", Func, 1, ""},
+		{"UTF16PtrFromString", Func, 1, ""},
+		{"UTF16ToString", Func, 0, ""},
+		{"Ucred", Type, 0, ""},
+		{"Ucred.Gid", Field, 0, ""},
+		{"Ucred.Pid", Field, 0, ""},
+		{"Ucred.Uid", Field, 0, ""},
+		{"Umask", Func, 0, "func(mask int) (oldmask int)"},
+		{"Uname", Func, 0, "func(buf *Utsname) (err error)"},
+		{"Undelete", Func, 0, ""},
+		{"UnixCredentials", Func, 0, "func(ucred *Ucred) []byte"},
+		{"UnixRights", Func, 0, "func(fds ...int) []byte"},
+		{"Unlink", Func, 0, "func(path string) error"},
+		{"Unlinkat", Func, 0, "func(dirfd int, path string) error"},
+		{"UnmapViewOfFile", Func, 0, ""},
+		{"Unmount", Func, 0, "func(target string, flags int) (err error)"},
+		{"Unsetenv", Func, 4, "func(key string) error"},
+		{"Unshare", Func, 0, "func(flags int) (err error)"},
+		{"UserInfo10", Type, 0, ""},
+		{"UserInfo10.Comment", Field, 0, ""},
+		{"UserInfo10.FullName", Field, 0, ""},
+		{"UserInfo10.Name", Field, 0, ""},
+		{"UserInfo10.UsrComment", Field, 0, ""},
+		{"Ustat", Func, 0, "func(dev int, ubuf *Ustat_t) (err error)"},
+		{"Ustat_t", Type, 0, ""},
+		{"Ustat_t.Fname", Field, 0, ""},
+		{"Ustat_t.Fpack", Field, 0, ""},
+		{"Ustat_t.Pad_cgo_0", Field, 0, ""},
+		{"Ustat_t.Pad_cgo_1", Field, 0, ""},
+		{"Ustat_t.Tfree", Field, 0, ""},
+		{"Ustat_t.Tinode", Field, 0, ""},
+		{"Utimbuf", Type, 0, ""},
+		{"Utimbuf.Actime", Field, 0, ""},
+		{"Utimbuf.Modtime", Field, 0, ""},
+		{"Utime", Func, 0, "func(path string, buf *Utimbuf) (err error)"},
+		{"Utimes", Func, 0, "func(path string, tv []Timeval) (err error)"},
+		{"UtimesNano", Func, 1, "func(path string, ts []Timespec) (err error)"},
+		{"Utsname", Type, 0, ""},
+		{"Utsname.Domainname", Field, 0, ""},
+		{"Utsname.Machine", Field, 0, ""},
+		{"Utsname.Nodename", Field, 0, ""},
+		{"Utsname.Release", Field, 0, ""},
+		{"Utsname.Sysname", Field, 0, ""},
+		{"Utsname.Version", Field, 0, ""},
+		{"VDISCARD", Const, 0, ""},
+		{"VDSUSP", Const, 1, ""},
+		{"VEOF", Const, 0, ""},
+		{"VEOL", Const, 0, ""},
+		{"VEOL2", Const, 0, ""},
+		{"VERASE", Const, 0, ""},
+		{"VERASE2", Const, 1, ""},
+		{"VINTR", Const, 0, ""},
+		{"VKILL", Const, 0, ""},
+		{"VLNEXT", Const, 0, ""},
+		{"VMIN", Const, 0, ""},
+		{"VQUIT", Const, 0, ""},
+		{"VREPRINT", Const, 0, ""},
+		{"VSTART", Const, 0, ""},
+		{"VSTATUS", Const, 1, ""},
+		{"VSTOP", Const, 0, ""},
+		{"VSUSP", Const, 0, ""},
+		{"VSWTC", Const, 0, ""},
+		{"VT0", Const, 1, ""},
+		{"VT1", Const, 1, ""},
+		{"VTDLY", Const, 1, ""},
+		{"VTIME", Const, 0, ""},
+		{"VWERASE", Const, 0, ""},
+		{"VirtualLock", Func, 0, ""},
+		{"VirtualUnlock", Func, 0, ""},
+		{"WAIT_ABANDONED", Const, 0, ""},
+		{"WAIT_FAILED", Const, 0, ""},
+		{"WAIT_OBJECT_0", Const, 0, ""},
+		{"WAIT_TIMEOUT", Const, 0, ""},
+		{"WALL", Const, 0, ""},
+		{"WALLSIG", Const, 1, ""},
+		{"WALTSIG", Const, 1, ""},
+		{"WCLONE", Const, 0, ""},
+		{"WCONTINUED", Const, 0, ""},
+		{"WCOREFLAG", Const, 0, ""},
+		{"WEXITED", Const, 0, ""},
+		{"WLINUXCLONE", Const, 0, ""},
+		{"WNOHANG", Const, 0, ""},
+		{"WNOTHREAD", Const, 0, ""},
+		{"WNOWAIT", Const, 0, ""},
+		{"WNOZOMBIE", Const, 1, ""},
+		{"WOPTSCHECKED", Const, 1, ""},
+		{"WORDSIZE", Const, 0, ""},
+		{"WSABuf", Type, 0, ""},
+		{"WSABuf.Buf", Field, 0, ""},
+		{"WSABuf.Len", Field, 0, ""},
+		{"WSACleanup", Func, 0, ""},
+		{"WSADESCRIPTION_LEN", Const, 0, ""},
+		{"WSAData", Type, 0, ""},
+		{"WSAData.Description", Field, 0, ""},
+		{"WSAData.HighVersion", Field, 0, ""},
+		{"WSAData.MaxSockets", Field, 0, ""},
+		{"WSAData.MaxUdpDg", Field, 0, ""},
+		{"WSAData.SystemStatus", Field, 0, ""},
+		{"WSAData.VendorInfo", Field, 0, ""},
+		{"WSAData.Version", Field, 0, ""},
+		{"WSAEACCES", Const, 2, ""},
+		{"WSAECONNABORTED", Const, 9, ""},
+		{"WSAECONNRESET", Const, 3, ""},
+		{"WSAENOPROTOOPT", Const, 23, ""},
+		{"WSAEnumProtocols", Func, 2, ""},
+		{"WSAID_CONNECTEX", Var, 1, ""},
+		{"WSAIoctl", Func, 0, ""},
+		{"WSAPROTOCOL_LEN", Const, 2, ""},
+		{"WSAProtocolChain", Type, 2, ""},
+		{"WSAProtocolChain.ChainEntries", Field, 2, ""},
+		{"WSAProtocolChain.ChainLen", Field, 2, ""},
+		{"WSAProtocolInfo", Type, 2, ""},
+		{"WSAProtocolInfo.AddressFamily", Field, 2, ""},
+		{"WSAProtocolInfo.CatalogEntryId", Field, 2, ""},
+		{"WSAProtocolInfo.MaxSockAddr", Field, 2, ""},
+		{"WSAProtocolInfo.MessageSize", Field, 2, ""},
+		{"WSAProtocolInfo.MinSockAddr", Field, 2, ""},
+		{"WSAProtocolInfo.NetworkByteOrder", Field, 2, ""},
+		{"WSAProtocolInfo.Protocol", Field, 2, ""},
+		{"WSAProtocolInfo.ProtocolChain", Field, 2, ""},
+		{"WSAProtocolInfo.ProtocolMaxOffset", Field, 2, ""},
+		{"WSAProtocolInfo.ProtocolName", Field, 2, ""},
+		{"WSAProtocolInfo.ProviderFlags", Field, 2, ""},
+		{"WSAProtocolInfo.ProviderId", Field, 2, ""},
+		{"WSAProtocolInfo.ProviderReserved", Field, 2, ""},
+		{"WSAProtocolInfo.SecurityScheme", Field, 2, ""},
+		{"WSAProtocolInfo.ServiceFlags1", Field, 2, ""},
+		{"WSAProtocolInfo.ServiceFlags2", Field, 2, ""},
+		{"WSAProtocolInfo.ServiceFlags3", Field, 2, ""},
+		{"WSAProtocolInfo.ServiceFlags4", Field, 2, ""},
+		{"WSAProtocolInfo.SocketType", Field, 2, ""},
+		{"WSAProtocolInfo.Version", Field, 2, ""},
+		{"WSARecv", Func, 0, ""},
+		{"WSARecvFrom", Func, 0, ""},
+		{"WSASYS_STATUS_LEN", Const, 0, ""},
+		{"WSASend", Func, 0, ""},
+		{"WSASendTo", Func, 0, ""},
+		{"WSASendto", Func, 0, ""},
+		{"WSAStartup", Func, 0, ""},
+		{"WSTOPPED", Const, 0, ""},
+		{"WTRAPPED", Const, 1, ""},
+		{"WUNTRACED", Const, 0, ""},
+		{"Wait4", Func, 0, "func(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error)"},
+		{"WaitForSingleObject", Func, 0, ""},
+		{"WaitStatus", Type, 0, ""},
+		{"WaitStatus.ExitCode", Field, 0, ""},
+		{"Win32FileAttributeData", Type, 0, ""},
+		{"Win32FileAttributeData.CreationTime", Field, 0, ""},
+		{"Win32FileAttributeData.FileAttributes", Field, 0, ""},
+		{"Win32FileAttributeData.FileSizeHigh", Field, 0, ""},
+		{"Win32FileAttributeData.FileSizeLow", Field, 0, ""},
+		{"Win32FileAttributeData.LastAccessTime", Field, 0, ""},
+		{"Win32FileAttributeData.LastWriteTime", Field, 0, ""},
+		{"Win32finddata", Type, 0, ""},
+		{"Win32finddata.AlternateFileName", Field, 0, ""},
+		{"Win32finddata.CreationTime", Field, 0, ""},
+		{"Win32finddata.FileAttributes", Field, 0, ""},
+		{"Win32finddata.FileName", Field, 0, ""},
+		{"Win32finddata.FileSizeHigh", Field, 0, ""},
+		{"Win32finddata.FileSizeLow", Field, 0, ""},
+		{"Win32finddata.LastAccessTime", Field, 0, ""},
+		{"Win32finddata.LastWriteTime", Field, 0, ""},
+		{"Win32finddata.Reserved0", Field, 0, ""},
+		{"Win32finddata.Reserved1", Field, 0, ""},
+		{"Write", Func, 0, "func(fd int, p []byte) (n int, err error)"},
+		{"WriteConsole", Func, 1, ""},
+		{"WriteFile", Func, 0, ""},
+		{"X509_ASN_ENCODING", Const, 0, ""},
+		{"XCASE", Const, 0, ""},
+		{"XP1_CONNECTIONLESS", Const, 2, ""},
+		{"XP1_CONNECT_DATA", Const, 2, ""},
+		{"XP1_DISCONNECT_DATA", Const, 2, ""},
+		{"XP1_EXPEDITED_DATA", Const, 2, ""},
+		{"XP1_GRACEFUL_CLOSE", Const, 2, ""},
+		{"XP1_GUARANTEED_DELIVERY", Const, 2, ""},
+		{"XP1_GUARANTEED_ORDER", Const, 2, ""},
+		{"XP1_IFS_HANDLES", Const, 2, ""},
+		{"XP1_MESSAGE_ORIENTED", Const, 2, ""},
+		{"XP1_MULTIPOINT_CONTROL_PLANE", Const, 2, ""},
+		{"XP1_MULTIPOINT_DATA_PLANE", Const, 2, ""},
+		{"XP1_PARTIAL_MESSAGE", Const, 2, ""},
+		{"XP1_PSEUDO_STREAM", Const, 2, ""},
+		{"XP1_QOS_SUPPORTED", Const, 2, ""},
+		{"XP1_SAN_SUPPORT_SDP", Const, 2, ""},
+		{"XP1_SUPPORT_BROADCAST", Const, 2, ""},
+		{"XP1_SUPPORT_MULTIPOINT", Const, 2, ""},
+		{"XP1_UNI_RECV", Const, 2, ""},
+		{"XP1_UNI_SEND", Const, 2, ""},
 	},
 	"syscall/js": {
-		{"CopyBytesToGo", Func, 0},
-		{"CopyBytesToJS", Func, 0},
-		{"Error", Type, 0},
-		{"Func", Type, 0},
-		{"FuncOf", Func, 0},
-		{"Global", Func, 0},
-		{"Null", Func, 0},
-		{"Type", Type, 0},
-		{"TypeBoolean", Const, 0},
-		{"TypeFunction", Const, 0},
-		{"TypeNull", Const, 0},
-		{"TypeNumber", Const, 0},
-		{"TypeObject", Const, 0},
-		{"TypeString", Const, 0},
-		{"TypeSymbol", Const, 0},
-		{"TypeUndefined", Const, 0},
-		{"Undefined", Func, 0},
-		{"Value", Type, 0},
-		{"ValueError", Type, 0},
-		{"ValueOf", Func, 0},
+		{"CopyBytesToGo", Func, 0, ""},
+		{"CopyBytesToJS", Func, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Func", Type, 0, ""},
+		{"FuncOf", Func, 0, ""},
+		{"Global", Func, 0, ""},
+		{"Null", Func, 0, ""},
+		{"Type", Type, 0, ""},
+		{"TypeBoolean", Const, 0, ""},
+		{"TypeFunction", Const, 0, ""},
+		{"TypeNull", Const, 0, ""},
+		{"TypeNumber", Const, 0, ""},
+		{"TypeObject", Const, 0, ""},
+		{"TypeString", Const, 0, ""},
+		{"TypeSymbol", Const, 0, ""},
+		{"TypeUndefined", Const, 0, ""},
+		{"Undefined", Func, 0, ""},
+		{"Value", Type, 0, ""},
+		{"ValueError", Type, 0, ""},
+		{"ValueOf", Func, 0, ""},
 	},
 	"testing": {
-		{"(*B).Chdir", Method, 24},
-		{"(*B).Cleanup", Method, 14},
-		{"(*B).Context", Method, 24},
-		{"(*B).Elapsed", Method, 20},
-		{"(*B).Error", Method, 0},
-		{"(*B).Errorf", Method, 0},
-		{"(*B).Fail", Method, 0},
-		{"(*B).FailNow", Method, 0},
-		{"(*B).Failed", Method, 0},
-		{"(*B).Fatal", Method, 0},
-		{"(*B).Fatalf", Method, 0},
-		{"(*B).Helper", Method, 9},
-		{"(*B).Log", Method, 0},
-		{"(*B).Logf", Method, 0},
-		{"(*B).Loop", Method, 24},
-		{"(*B).Name", Method, 8},
-		{"(*B).ReportAllocs", Method, 1},
-		{"(*B).ReportMetric", Method, 13},
-		{"(*B).ResetTimer", Method, 0},
-		{"(*B).Run", Method, 7},
-		{"(*B).RunParallel", Method, 3},
-		{"(*B).SetBytes", Method, 0},
-		{"(*B).SetParallelism", Method, 3},
-		{"(*B).Setenv", Method, 17},
-		{"(*B).Skip", Method, 1},
-		{"(*B).SkipNow", Method, 1},
-		{"(*B).Skipf", Method, 1},
-		{"(*B).Skipped", Method, 1},
-		{"(*B).StartTimer", Method, 0},
-		{"(*B).StopTimer", Method, 0},
-		{"(*B).TempDir", Method, 15},
-		{"(*F).Add", Method, 18},
-		{"(*F).Chdir", Method, 24},
-		{"(*F).Cleanup", Method, 18},
-		{"(*F).Context", Method, 24},
-		{"(*F).Error", Method, 18},
-		{"(*F).Errorf", Method, 18},
-		{"(*F).Fail", Method, 18},
-		{"(*F).FailNow", Method, 18},
-		{"(*F).Failed", Method, 18},
-		{"(*F).Fatal", Method, 18},
-		{"(*F).Fatalf", Method, 18},
-		{"(*F).Fuzz", Method, 18},
-		{"(*F).Helper", Method, 18},
-		{"(*F).Log", Method, 18},
-		{"(*F).Logf", Method, 18},
-		{"(*F).Name", Method, 18},
-		{"(*F).Setenv", Method, 18},
-		{"(*F).Skip", Method, 18},
-		{"(*F).SkipNow", Method, 18},
-		{"(*F).Skipf", Method, 18},
-		{"(*F).Skipped", Method, 18},
-		{"(*F).TempDir", Method, 18},
-		{"(*M).Run", Method, 4},
-		{"(*PB).Next", Method, 3},
-		{"(*T).Chdir", Method, 24},
-		{"(*T).Cleanup", Method, 14},
-		{"(*T).Context", Method, 24},
-		{"(*T).Deadline", Method, 15},
-		{"(*T).Error", Method, 0},
-		{"(*T).Errorf", Method, 0},
-		{"(*T).Fail", Method, 0},
-		{"(*T).FailNow", Method, 0},
-		{"(*T).Failed", Method, 0},
-		{"(*T).Fatal", Method, 0},
-		{"(*T).Fatalf", Method, 0},
-		{"(*T).Helper", Method, 9},
-		{"(*T).Log", Method, 0},
-		{"(*T).Logf", Method, 0},
-		{"(*T).Name", Method, 8},
-		{"(*T).Parallel", Method, 0},
-		{"(*T).Run", Method, 7},
-		{"(*T).Setenv", Method, 17},
-		{"(*T).Skip", Method, 1},
-		{"(*T).SkipNow", Method, 1},
-		{"(*T).Skipf", Method, 1},
-		{"(*T).Skipped", Method, 1},
-		{"(*T).TempDir", Method, 15},
-		{"(BenchmarkResult).AllocedBytesPerOp", Method, 1},
-		{"(BenchmarkResult).AllocsPerOp", Method, 1},
-		{"(BenchmarkResult).MemString", Method, 1},
-		{"(BenchmarkResult).NsPerOp", Method, 0},
-		{"(BenchmarkResult).String", Method, 0},
-		{"AllocsPerRun", Func, 1},
-		{"B", Type, 0},
-		{"B.N", Field, 0},
-		{"Benchmark", Func, 0},
-		{"BenchmarkResult", Type, 0},
-		{"BenchmarkResult.Bytes", Field, 0},
-		{"BenchmarkResult.Extra", Field, 13},
-		{"BenchmarkResult.MemAllocs", Field, 1},
-		{"BenchmarkResult.MemBytes", Field, 1},
-		{"BenchmarkResult.N", Field, 0},
-		{"BenchmarkResult.T", Field, 0},
-		{"Cover", Type, 2},
-		{"Cover.Blocks", Field, 2},
-		{"Cover.Counters", Field, 2},
-		{"Cover.CoveredPackages", Field, 2},
-		{"Cover.Mode", Field, 2},
-		{"CoverBlock", Type, 2},
-		{"CoverBlock.Col0", Field, 2},
-		{"CoverBlock.Col1", Field, 2},
-		{"CoverBlock.Line0", Field, 2},
-		{"CoverBlock.Line1", Field, 2},
-		{"CoverBlock.Stmts", Field, 2},
-		{"CoverMode", Func, 8},
-		{"Coverage", Func, 4},
-		{"F", Type, 18},
-		{"Init", Func, 13},
-		{"InternalBenchmark", Type, 0},
-		{"InternalBenchmark.F", Field, 0},
-		{"InternalBenchmark.Name", Field, 0},
-		{"InternalExample", Type, 0},
-		{"InternalExample.F", Field, 0},
-		{"InternalExample.Name", Field, 0},
-		{"InternalExample.Output", Field, 0},
-		{"InternalExample.Unordered", Field, 7},
-		{"InternalFuzzTarget", Type, 18},
-		{"InternalFuzzTarget.Fn", Field, 18},
-		{"InternalFuzzTarget.Name", Field, 18},
-		{"InternalTest", Type, 0},
-		{"InternalTest.F", Field, 0},
-		{"InternalTest.Name", Field, 0},
-		{"M", Type, 4},
-		{"Main", Func, 0},
-		{"MainStart", Func, 4},
-		{"PB", Type, 3},
-		{"RegisterCover", Func, 2},
-		{"RunBenchmarks", Func, 0},
-		{"RunExamples", Func, 0},
-		{"RunTests", Func, 0},
-		{"Short", Func, 0},
-		{"T", Type, 0},
-		{"TB", Type, 2},
-		{"Testing", Func, 21},
-		{"Verbose", Func, 1},
+		{"(*B).Chdir", Method, 24, ""},
+		{"(*B).Cleanup", Method, 14, ""},
+		{"(*B).Context", Method, 24, ""},
+		{"(*B).Elapsed", Method, 20, ""},
+		{"(*B).Error", Method, 0, ""},
+		{"(*B).Errorf", Method, 0, ""},
+		{"(*B).Fail", Method, 0, ""},
+		{"(*B).FailNow", Method, 0, ""},
+		{"(*B).Failed", Method, 0, ""},
+		{"(*B).Fatal", Method, 0, ""},
+		{"(*B).Fatalf", Method, 0, ""},
+		{"(*B).Helper", Method, 9, ""},
+		{"(*B).Log", Method, 0, ""},
+		{"(*B).Logf", Method, 0, ""},
+		{"(*B).Loop", Method, 24, ""},
+		{"(*B).Name", Method, 8, ""},
+		{"(*B).ReportAllocs", Method, 1, ""},
+		{"(*B).ReportMetric", Method, 13, ""},
+		{"(*B).ResetTimer", Method, 0, ""},
+		{"(*B).Run", Method, 7, ""},
+		{"(*B).RunParallel", Method, 3, ""},
+		{"(*B).SetBytes", Method, 0, ""},
+		{"(*B).SetParallelism", Method, 3, ""},
+		{"(*B).Setenv", Method, 17, ""},
+		{"(*B).Skip", Method, 1, ""},
+		{"(*B).SkipNow", Method, 1, ""},
+		{"(*B).Skipf", Method, 1, ""},
+		{"(*B).Skipped", Method, 1, ""},
+		{"(*B).StartTimer", Method, 0, ""},
+		{"(*B).StopTimer", Method, 0, ""},
+		{"(*B).TempDir", Method, 15, ""},
+		{"(*F).Add", Method, 18, ""},
+		{"(*F).Chdir", Method, 24, ""},
+		{"(*F).Cleanup", Method, 18, ""},
+		{"(*F).Context", Method, 24, ""},
+		{"(*F).Error", Method, 18, ""},
+		{"(*F).Errorf", Method, 18, ""},
+		{"(*F).Fail", Method, 18, ""},
+		{"(*F).FailNow", Method, 18, ""},
+		{"(*F).Failed", Method, 18, ""},
+		{"(*F).Fatal", Method, 18, ""},
+		{"(*F).Fatalf", Method, 18, ""},
+		{"(*F).Fuzz", Method, 18, ""},
+		{"(*F).Helper", Method, 18, ""},
+		{"(*F).Log", Method, 18, ""},
+		{"(*F).Logf", Method, 18, ""},
+		{"(*F).Name", Method, 18, ""},
+		{"(*F).Setenv", Method, 18, ""},
+		{"(*F).Skip", Method, 18, ""},
+		{"(*F).SkipNow", Method, 18, ""},
+		{"(*F).Skipf", Method, 18, ""},
+		{"(*F).Skipped", Method, 18, ""},
+		{"(*F).TempDir", Method, 18, ""},
+		{"(*M).Run", Method, 4, ""},
+		{"(*PB).Next", Method, 3, ""},
+		{"(*T).Chdir", Method, 24, ""},
+		{"(*T).Cleanup", Method, 14, ""},
+		{"(*T).Context", Method, 24, ""},
+		{"(*T).Deadline", Method, 15, ""},
+		{"(*T).Error", Method, 0, ""},
+		{"(*T).Errorf", Method, 0, ""},
+		{"(*T).Fail", Method, 0, ""},
+		{"(*T).FailNow", Method, 0, ""},
+		{"(*T).Failed", Method, 0, ""},
+		{"(*T).Fatal", Method, 0, ""},
+		{"(*T).Fatalf", Method, 0, ""},
+		{"(*T).Helper", Method, 9, ""},
+		{"(*T).Log", Method, 0, ""},
+		{"(*T).Logf", Method, 0, ""},
+		{"(*T).Name", Method, 8, ""},
+		{"(*T).Parallel", Method, 0, ""},
+		{"(*T).Run", Method, 7, ""},
+		{"(*T).Setenv", Method, 17, ""},
+		{"(*T).Skip", Method, 1, ""},
+		{"(*T).SkipNow", Method, 1, ""},
+		{"(*T).Skipf", Method, 1, ""},
+		{"(*T).Skipped", Method, 1, ""},
+		{"(*T).TempDir", Method, 15, ""},
+		{"(BenchmarkResult).AllocedBytesPerOp", Method, 1, ""},
+		{"(BenchmarkResult).AllocsPerOp", Method, 1, ""},
+		{"(BenchmarkResult).MemString", Method, 1, ""},
+		{"(BenchmarkResult).NsPerOp", Method, 0, ""},
+		{"(BenchmarkResult).String", Method, 0, ""},
+		{"AllocsPerRun", Func, 1, "func(runs int, f func()) (avg float64)"},
+		{"B", Type, 0, ""},
+		{"B.N", Field, 0, ""},
+		{"Benchmark", Func, 0, "func(f func(b *B)) BenchmarkResult"},
+		{"BenchmarkResult", Type, 0, ""},
+		{"BenchmarkResult.Bytes", Field, 0, ""},
+		{"BenchmarkResult.Extra", Field, 13, ""},
+		{"BenchmarkResult.MemAllocs", Field, 1, ""},
+		{"BenchmarkResult.MemBytes", Field, 1, ""},
+		{"BenchmarkResult.N", Field, 0, ""},
+		{"BenchmarkResult.T", Field, 0, ""},
+		{"Cover", Type, 2, ""},
+		{"Cover.Blocks", Field, 2, ""},
+		{"Cover.Counters", Field, 2, ""},
+		{"Cover.CoveredPackages", Field, 2, ""},
+		{"Cover.Mode", Field, 2, ""},
+		{"CoverBlock", Type, 2, ""},
+		{"CoverBlock.Col0", Field, 2, ""},
+		{"CoverBlock.Col1", Field, 2, ""},
+		{"CoverBlock.Line0", Field, 2, ""},
+		{"CoverBlock.Line1", Field, 2, ""},
+		{"CoverBlock.Stmts", Field, 2, ""},
+		{"CoverMode", Func, 8, "func() string"},
+		{"Coverage", Func, 4, "func() float64"},
+		{"F", Type, 18, ""},
+		{"Init", Func, 13, "func()"},
+		{"InternalBenchmark", Type, 0, ""},
+		{"InternalBenchmark.F", Field, 0, ""},
+		{"InternalBenchmark.Name", Field, 0, ""},
+		{"InternalExample", Type, 0, ""},
+		{"InternalExample.F", Field, 0, ""},
+		{"InternalExample.Name", Field, 0, ""},
+		{"InternalExample.Output", Field, 0, ""},
+		{"InternalExample.Unordered", Field, 7, ""},
+		{"InternalFuzzTarget", Type, 18, ""},
+		{"InternalFuzzTarget.Fn", Field, 18, ""},
+		{"InternalFuzzTarget.Name", Field, 18, ""},
+		{"InternalTest", Type, 0, ""},
+		{"InternalTest.F", Field, 0, ""},
+		{"InternalTest.Name", Field, 0, ""},
+		{"M", Type, 4, ""},
+		{"Main", Func, 0, "func(matchString func(pat string, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample)"},
+		{"MainStart", Func, 4, "func(deps testDeps, tests []InternalTest, benchmarks []InternalBenchmark, fuzzTargets []InternalFuzzTarget, examples []InternalExample) *M"},
+		{"PB", Type, 3, ""},
+		{"RegisterCover", Func, 2, "func(c Cover)"},
+		{"RunBenchmarks", Func, 0, "func(matchString func(pat string, str string) (bool, error), benchmarks []InternalBenchmark)"},
+		{"RunExamples", Func, 0, "func(matchString func(pat string, str string) (bool, error), examples []InternalExample) (ok bool)"},
+		{"RunTests", Func, 0, "func(matchString func(pat string, str string) (bool, error), tests []InternalTest) (ok bool)"},
+		{"Short", Func, 0, "func() bool"},
+		{"T", Type, 0, ""},
+		{"TB", Type, 2, ""},
+		{"Testing", Func, 21, "func() bool"},
+		{"Verbose", Func, 1, "func() bool"},
 	},
 	"testing/fstest": {
-		{"(MapFS).Glob", Method, 16},
-		{"(MapFS).Open", Method, 16},
-		{"(MapFS).ReadDir", Method, 16},
-		{"(MapFS).ReadFile", Method, 16},
-		{"(MapFS).Stat", Method, 16},
-		{"(MapFS).Sub", Method, 16},
-		{"MapFS", Type, 16},
-		{"MapFile", Type, 16},
-		{"MapFile.Data", Field, 16},
-		{"MapFile.ModTime", Field, 16},
-		{"MapFile.Mode", Field, 16},
-		{"MapFile.Sys", Field, 16},
-		{"TestFS", Func, 16},
+		{"(MapFS).Glob", Method, 16, ""},
+		{"(MapFS).Lstat", Method, 25, ""},
+		{"(MapFS).Open", Method, 16, ""},
+		{"(MapFS).ReadDir", Method, 16, ""},
+		{"(MapFS).ReadFile", Method, 16, ""},
+		{"(MapFS).ReadLink", Method, 25, ""},
+		{"(MapFS).Stat", Method, 16, ""},
+		{"(MapFS).Sub", Method, 16, ""},
+		{"MapFS", Type, 16, ""},
+		{"MapFile", Type, 16, ""},
+		{"MapFile.Data", Field, 16, ""},
+		{"MapFile.ModTime", Field, 16, ""},
+		{"MapFile.Mode", Field, 16, ""},
+		{"MapFile.Sys", Field, 16, ""},
+		{"TestFS", Func, 16, "func(fsys fs.FS, expected ...string) error"},
 	},
 	"testing/iotest": {
-		{"DataErrReader", Func, 0},
-		{"ErrReader", Func, 16},
-		{"ErrTimeout", Var, 0},
-		{"HalfReader", Func, 0},
-		{"NewReadLogger", Func, 0},
-		{"NewWriteLogger", Func, 0},
-		{"OneByteReader", Func, 0},
-		{"TestReader", Func, 16},
-		{"TimeoutReader", Func, 0},
-		{"TruncateWriter", Func, 0},
+		{"DataErrReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"ErrReader", Func, 16, "func(err error) io.Reader"},
+		{"ErrTimeout", Var, 0, ""},
+		{"HalfReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"NewReadLogger", Func, 0, "func(prefix string, r io.Reader) io.Reader"},
+		{"NewWriteLogger", Func, 0, "func(prefix string, w io.Writer) io.Writer"},
+		{"OneByteReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"TestReader", Func, 16, "func(r io.Reader, content []byte) error"},
+		{"TimeoutReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"TruncateWriter", Func, 0, "func(w io.Writer, n int64) io.Writer"},
 	},
 	"testing/quick": {
-		{"(*CheckEqualError).Error", Method, 0},
-		{"(*CheckError).Error", Method, 0},
-		{"(SetupError).Error", Method, 0},
-		{"Check", Func, 0},
-		{"CheckEqual", Func, 0},
-		{"CheckEqualError", Type, 0},
-		{"CheckEqualError.CheckError", Field, 0},
-		{"CheckEqualError.Out1", Field, 0},
-		{"CheckEqualError.Out2", Field, 0},
-		{"CheckError", Type, 0},
-		{"CheckError.Count", Field, 0},
-		{"CheckError.In", Field, 0},
-		{"Config", Type, 0},
-		{"Config.MaxCount", Field, 0},
-		{"Config.MaxCountScale", Field, 0},
-		{"Config.Rand", Field, 0},
-		{"Config.Values", Field, 0},
-		{"Generator", Type, 0},
-		{"SetupError", Type, 0},
-		{"Value", Func, 0},
+		{"(*CheckEqualError).Error", Method, 0, ""},
+		{"(*CheckError).Error", Method, 0, ""},
+		{"(SetupError).Error", Method, 0, ""},
+		{"Check", Func, 0, "func(f any, config *Config) error"},
+		{"CheckEqual", Func, 0, "func(f any, g any, config *Config) error"},
+		{"CheckEqualError", Type, 0, ""},
+		{"CheckEqualError.CheckError", Field, 0, ""},
+		{"CheckEqualError.Out1", Field, 0, ""},
+		{"CheckEqualError.Out2", Field, 0, ""},
+		{"CheckError", Type, 0, ""},
+		{"CheckError.Count", Field, 0, ""},
+		{"CheckError.In", Field, 0, ""},
+		{"Config", Type, 0, ""},
+		{"Config.MaxCount", Field, 0, ""},
+		{"Config.MaxCountScale", Field, 0, ""},
+		{"Config.Rand", Field, 0, ""},
+		{"Config.Values", Field, 0, ""},
+		{"Generator", Type, 0, ""},
+		{"SetupError", Type, 0, ""},
+		{"Value", Func, 0, "func(t reflect.Type, rand *rand.Rand) (value reflect.Value, ok bool)"},
 	},
 	"testing/slogtest": {
-		{"Run", Func, 22},
-		{"TestHandler", Func, 21},
+		{"Run", Func, 22, "func(t *testing.T, newHandler func(*testing.T) slog.Handler, result func(*testing.T) map[string]any)"},
+		{"TestHandler", Func, 21, "func(h slog.Handler, results func() []map[string]any) error"},
 	},
 	"text/scanner": {
-		{"(*Position).IsValid", Method, 0},
-		{"(*Scanner).Init", Method, 0},
-		{"(*Scanner).IsValid", Method, 0},
-		{"(*Scanner).Next", Method, 0},
-		{"(*Scanner).Peek", Method, 0},
-		{"(*Scanner).Pos", Method, 0},
-		{"(*Scanner).Scan", Method, 0},
-		{"(*Scanner).TokenText", Method, 0},
-		{"(Position).String", Method, 0},
-		{"(Scanner).String", Method, 0},
-		{"Char", Const, 0},
-		{"Comment", Const, 0},
-		{"EOF", Const, 0},
-		{"Float", Const, 0},
-		{"GoTokens", Const, 0},
-		{"GoWhitespace", Const, 0},
-		{"Ident", Const, 0},
-		{"Int", Const, 0},
-		{"Position", Type, 0},
-		{"Position.Column", Field, 0},
-		{"Position.Filename", Field, 0},
-		{"Position.Line", Field, 0},
-		{"Position.Offset", Field, 0},
-		{"RawString", Const, 0},
-		{"ScanChars", Const, 0},
-		{"ScanComments", Const, 0},
-		{"ScanFloats", Const, 0},
-		{"ScanIdents", Const, 0},
-		{"ScanInts", Const, 0},
-		{"ScanRawStrings", Const, 0},
-		{"ScanStrings", Const, 0},
-		{"Scanner", Type, 0},
-		{"Scanner.Error", Field, 0},
-		{"Scanner.ErrorCount", Field, 0},
-		{"Scanner.IsIdentRune", Field, 4},
-		{"Scanner.Mode", Field, 0},
-		{"Scanner.Position", Field, 0},
-		{"Scanner.Whitespace", Field, 0},
-		{"SkipComments", Const, 0},
-		{"String", Const, 0},
-		{"TokenString", Func, 0},
+		{"(*Position).IsValid", Method, 0, ""},
+		{"(*Scanner).Init", Method, 0, ""},
+		{"(*Scanner).IsValid", Method, 0, ""},
+		{"(*Scanner).Next", Method, 0, ""},
+		{"(*Scanner).Peek", Method, 0, ""},
+		{"(*Scanner).Pos", Method, 0, ""},
+		{"(*Scanner).Scan", Method, 0, ""},
+		{"(*Scanner).TokenText", Method, 0, ""},
+		{"(Position).String", Method, 0, ""},
+		{"(Scanner).String", Method, 0, ""},
+		{"Char", Const, 0, ""},
+		{"Comment", Const, 0, ""},
+		{"EOF", Const, 0, ""},
+		{"Float", Const, 0, ""},
+		{"GoTokens", Const, 0, ""},
+		{"GoWhitespace", Const, 0, ""},
+		{"Ident", Const, 0, ""},
+		{"Int", Const, 0, ""},
+		{"Position", Type, 0, ""},
+		{"Position.Column", Field, 0, ""},
+		{"Position.Filename", Field, 0, ""},
+		{"Position.Line", Field, 0, ""},
+		{"Position.Offset", Field, 0, ""},
+		{"RawString", Const, 0, ""},
+		{"ScanChars", Const, 0, ""},
+		{"ScanComments", Const, 0, ""},
+		{"ScanFloats", Const, 0, ""},
+		{"ScanIdents", Const, 0, ""},
+		{"ScanInts", Const, 0, ""},
+		{"ScanRawStrings", Const, 0, ""},
+		{"ScanStrings", Const, 0, ""},
+		{"Scanner", Type, 0, ""},
+		{"Scanner.Error", Field, 0, ""},
+		{"Scanner.ErrorCount", Field, 0, ""},
+		{"Scanner.IsIdentRune", Field, 4, ""},
+		{"Scanner.Mode", Field, 0, ""},
+		{"Scanner.Position", Field, 0, ""},
+		{"Scanner.Whitespace", Field, 0, ""},
+		{"SkipComments", Const, 0, ""},
+		{"String", Const, 0, ""},
+		{"TokenString", Func, 0, "func(tok rune) string"},
 	},
 	"text/tabwriter": {
-		{"(*Writer).Flush", Method, 0},
-		{"(*Writer).Init", Method, 0},
-		{"(*Writer).Write", Method, 0},
-		{"AlignRight", Const, 0},
-		{"Debug", Const, 0},
-		{"DiscardEmptyColumns", Const, 0},
-		{"Escape", Const, 0},
-		{"FilterHTML", Const, 0},
-		{"NewWriter", Func, 0},
-		{"StripEscape", Const, 0},
-		{"TabIndent", Const, 0},
-		{"Writer", Type, 0},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Init", Method, 0, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"AlignRight", Const, 0, ""},
+		{"Debug", Const, 0, ""},
+		{"DiscardEmptyColumns", Const, 0, ""},
+		{"Escape", Const, 0, ""},
+		{"FilterHTML", Const, 0, ""},
+		{"NewWriter", Func, 0, "func(output io.Writer, minwidth int, tabwidth int, padding int, padchar byte, flags uint) *Writer"},
+		{"StripEscape", Const, 0, ""},
+		{"TabIndent", Const, 0, ""},
+		{"Writer", Type, 0, ""},
 	},
 	"text/template": {
-		{"(*Template).AddParseTree", Method, 0},
-		{"(*Template).Clone", Method, 0},
-		{"(*Template).DefinedTemplates", Method, 5},
-		{"(*Template).Delims", Method, 0},
-		{"(*Template).Execute", Method, 0},
-		{"(*Template).ExecuteTemplate", Method, 0},
-		{"(*Template).Funcs", Method, 0},
-		{"(*Template).Lookup", Method, 0},
-		{"(*Template).Name", Method, 0},
-		{"(*Template).New", Method, 0},
-		{"(*Template).Option", Method, 5},
-		{"(*Template).Parse", Method, 0},
-		{"(*Template).ParseFS", Method, 16},
-		{"(*Template).ParseFiles", Method, 0},
-		{"(*Template).ParseGlob", Method, 0},
-		{"(*Template).Templates", Method, 0},
-		{"(ExecError).Error", Method, 6},
-		{"(ExecError).Unwrap", Method, 13},
-		{"(Template).Copy", Method, 2},
-		{"(Template).ErrorContext", Method, 1},
-		{"ExecError", Type, 6},
-		{"ExecError.Err", Field, 6},
-		{"ExecError.Name", Field, 6},
-		{"FuncMap", Type, 0},
-		{"HTMLEscape", Func, 0},
-		{"HTMLEscapeString", Func, 0},
-		{"HTMLEscaper", Func, 0},
-		{"IsTrue", Func, 6},
-		{"JSEscape", Func, 0},
-		{"JSEscapeString", Func, 0},
-		{"JSEscaper", Func, 0},
-		{"Must", Func, 0},
-		{"New", Func, 0},
-		{"ParseFS", Func, 16},
-		{"ParseFiles", Func, 0},
-		{"ParseGlob", Func, 0},
-		{"Template", Type, 0},
-		{"Template.Tree", Field, 0},
-		{"URLQueryEscaper", Func, 0},
+		{"(*Template).AddParseTree", Method, 0, ""},
+		{"(*Template).Clone", Method, 0, ""},
+		{"(*Template).DefinedTemplates", Method, 5, ""},
+		{"(*Template).Delims", Method, 0, ""},
+		{"(*Template).Execute", Method, 0, ""},
+		{"(*Template).ExecuteTemplate", Method, 0, ""},
+		{"(*Template).Funcs", Method, 0, ""},
+		{"(*Template).Lookup", Method, 0, ""},
+		{"(*Template).Name", Method, 0, ""},
+		{"(*Template).New", Method, 0, ""},
+		{"(*Template).Option", Method, 5, ""},
+		{"(*Template).Parse", Method, 0, ""},
+		{"(*Template).ParseFS", Method, 16, ""},
+		{"(*Template).ParseFiles", Method, 0, ""},
+		{"(*Template).ParseGlob", Method, 0, ""},
+		{"(*Template).Templates", Method, 0, ""},
+		{"(ExecError).Error", Method, 6, ""},
+		{"(ExecError).Unwrap", Method, 13, ""},
+		{"(Template).Copy", Method, 2, ""},
+		{"(Template).ErrorContext", Method, 1, ""},
+		{"ExecError", Type, 6, ""},
+		{"ExecError.Err", Field, 6, ""},
+		{"ExecError.Name", Field, 6, ""},
+		{"FuncMap", Type, 0, ""},
+		{"HTMLEscape", Func, 0, "func(w io.Writer, b []byte)"},
+		{"HTMLEscapeString", Func, 0, "func(s string) string"},
+		{"HTMLEscaper", Func, 0, "func(args ...any) string"},
+		{"IsTrue", Func, 6, "func(val any) (truth bool, ok bool)"},
+		{"JSEscape", Func, 0, "func(w io.Writer, b []byte)"},
+		{"JSEscapeString", Func, 0, "func(s string) string"},
+		{"JSEscaper", Func, 0, "func(args ...any) string"},
+		{"Must", Func, 0, "func(t *Template, err error) *Template"},
+		{"New", Func, 0, "func(name string) *Template"},
+		{"ParseFS", Func, 16, "func(fsys fs.FS, patterns ...string) (*Template, error)"},
+		{"ParseFiles", Func, 0, "func(filenames ...string) (*Template, error)"},
+		{"ParseGlob", Func, 0, "func(pattern string) (*Template, error)"},
+		{"Template", Type, 0, ""},
+		{"Template.Tree", Field, 0, ""},
+		{"URLQueryEscaper", Func, 0, "func(args ...any) string"},
 	},
 	"text/template/parse": {
-		{"(*ActionNode).Copy", Method, 0},
-		{"(*ActionNode).String", Method, 0},
-		{"(*BoolNode).Copy", Method, 0},
-		{"(*BoolNode).String", Method, 0},
-		{"(*BranchNode).Copy", Method, 4},
-		{"(*BranchNode).String", Method, 0},
-		{"(*BreakNode).Copy", Method, 18},
-		{"(*BreakNode).String", Method, 18},
-		{"(*ChainNode).Add", Method, 1},
-		{"(*ChainNode).Copy", Method, 1},
-		{"(*ChainNode).String", Method, 1},
-		{"(*CommandNode).Copy", Method, 0},
-		{"(*CommandNode).String", Method, 0},
-		{"(*CommentNode).Copy", Method, 16},
-		{"(*CommentNode).String", Method, 16},
-		{"(*ContinueNode).Copy", Method, 18},
-		{"(*ContinueNode).String", Method, 18},
-		{"(*DotNode).Copy", Method, 0},
-		{"(*DotNode).String", Method, 0},
-		{"(*DotNode).Type", Method, 0},
-		{"(*FieldNode).Copy", Method, 0},
-		{"(*FieldNode).String", Method, 0},
-		{"(*IdentifierNode).Copy", Method, 0},
-		{"(*IdentifierNode).SetPos", Method, 1},
-		{"(*IdentifierNode).SetTree", Method, 4},
-		{"(*IdentifierNode).String", Method, 0},
-		{"(*IfNode).Copy", Method, 0},
-		{"(*IfNode).String", Method, 0},
-		{"(*ListNode).Copy", Method, 0},
-		{"(*ListNode).CopyList", Method, 0},
-		{"(*ListNode).String", Method, 0},
-		{"(*NilNode).Copy", Method, 1},
-		{"(*NilNode).String", Method, 1},
-		{"(*NilNode).Type", Method, 1},
-		{"(*NumberNode).Copy", Method, 0},
-		{"(*NumberNode).String", Method, 0},
-		{"(*PipeNode).Copy", Method, 0},
-		{"(*PipeNode).CopyPipe", Method, 0},
-		{"(*PipeNode).String", Method, 0},
-		{"(*RangeNode).Copy", Method, 0},
-		{"(*RangeNode).String", Method, 0},
-		{"(*StringNode).Copy", Method, 0},
-		{"(*StringNode).String", Method, 0},
-		{"(*TemplateNode).Copy", Method, 0},
-		{"(*TemplateNode).String", Method, 0},
-		{"(*TextNode).Copy", Method, 0},
-		{"(*TextNode).String", Method, 0},
-		{"(*Tree).Copy", Method, 2},
-		{"(*Tree).ErrorContext", Method, 1},
-		{"(*Tree).Parse", Method, 0},
-		{"(*VariableNode).Copy", Method, 0},
-		{"(*VariableNode).String", Method, 0},
-		{"(*WithNode).Copy", Method, 0},
-		{"(*WithNode).String", Method, 0},
-		{"(ActionNode).Position", Method, 1},
-		{"(ActionNode).Type", Method, 0},
-		{"(BoolNode).Position", Method, 1},
-		{"(BoolNode).Type", Method, 0},
-		{"(BranchNode).Position", Method, 1},
-		{"(BranchNode).Type", Method, 0},
-		{"(BreakNode).Position", Method, 18},
-		{"(BreakNode).Type", Method, 18},
-		{"(ChainNode).Position", Method, 1},
-		{"(ChainNode).Type", Method, 1},
-		{"(CommandNode).Position", Method, 1},
-		{"(CommandNode).Type", Method, 0},
-		{"(CommentNode).Position", Method, 16},
-		{"(CommentNode).Type", Method, 16},
-		{"(ContinueNode).Position", Method, 18},
-		{"(ContinueNode).Type", Method, 18},
-		{"(DotNode).Position", Method, 1},
-		{"(FieldNode).Position", Method, 1},
-		{"(FieldNode).Type", Method, 0},
-		{"(IdentifierNode).Position", Method, 1},
-		{"(IdentifierNode).Type", Method, 0},
-		{"(IfNode).Position", Method, 1},
-		{"(IfNode).Type", Method, 0},
-		{"(ListNode).Position", Method, 1},
-		{"(ListNode).Type", Method, 0},
-		{"(NilNode).Position", Method, 1},
-		{"(NodeType).Type", Method, 0},
-		{"(NumberNode).Position", Method, 1},
-		{"(NumberNode).Type", Method, 0},
-		{"(PipeNode).Position", Method, 1},
-		{"(PipeNode).Type", Method, 0},
-		{"(Pos).Position", Method, 1},
-		{"(RangeNode).Position", Method, 1},
-		{"(RangeNode).Type", Method, 0},
-		{"(StringNode).Position", Method, 1},
-		{"(StringNode).Type", Method, 0},
-		{"(TemplateNode).Position", Method, 1},
-		{"(TemplateNode).Type", Method, 0},
-		{"(TextNode).Position", Method, 1},
-		{"(TextNode).Type", Method, 0},
-		{"(VariableNode).Position", Method, 1},
-		{"(VariableNode).Type", Method, 0},
-		{"(WithNode).Position", Method, 1},
-		{"(WithNode).Type", Method, 0},
-		{"ActionNode", Type, 0},
-		{"ActionNode.Line", Field, 0},
-		{"ActionNode.NodeType", Field, 0},
-		{"ActionNode.Pipe", Field, 0},
-		{"ActionNode.Pos", Field, 1},
-		{"BoolNode", Type, 0},
-		{"BoolNode.NodeType", Field, 0},
-		{"BoolNode.Pos", Field, 1},
-		{"BoolNode.True", Field, 0},
-		{"BranchNode", Type, 0},
-		{"BranchNode.ElseList", Field, 0},
-		{"BranchNode.Line", Field, 0},
-		{"BranchNode.List", Field, 0},
-		{"BranchNode.NodeType", Field, 0},
-		{"BranchNode.Pipe", Field, 0},
-		{"BranchNode.Pos", Field, 1},
-		{"BreakNode", Type, 18},
-		{"BreakNode.Line", Field, 18},
-		{"BreakNode.NodeType", Field, 18},
-		{"BreakNode.Pos", Field, 18},
-		{"ChainNode", Type, 1},
-		{"ChainNode.Field", Field, 1},
-		{"ChainNode.Node", Field, 1},
-		{"ChainNode.NodeType", Field, 1},
-		{"ChainNode.Pos", Field, 1},
-		{"CommandNode", Type, 0},
-		{"CommandNode.Args", Field, 0},
-		{"CommandNode.NodeType", Field, 0},
-		{"CommandNode.Pos", Field, 1},
-		{"CommentNode", Type, 16},
-		{"CommentNode.NodeType", Field, 16},
-		{"CommentNode.Pos", Field, 16},
-		{"CommentNode.Text", Field, 16},
-		{"ContinueNode", Type, 18},
-		{"ContinueNode.Line", Field, 18},
-		{"ContinueNode.NodeType", Field, 18},
-		{"ContinueNode.Pos", Field, 18},
-		{"DotNode", Type, 0},
-		{"DotNode.NodeType", Field, 4},
-		{"DotNode.Pos", Field, 1},
-		{"FieldNode", Type, 0},
-		{"FieldNode.Ident", Field, 0},
-		{"FieldNode.NodeType", Field, 0},
-		{"FieldNode.Pos", Field, 1},
-		{"IdentifierNode", Type, 0},
-		{"IdentifierNode.Ident", Field, 0},
-		{"IdentifierNode.NodeType", Field, 0},
-		{"IdentifierNode.Pos", Field, 1},
-		{"IfNode", Type, 0},
-		{"IfNode.BranchNode", Field, 0},
-		{"IsEmptyTree", Func, 0},
-		{"ListNode", Type, 0},
-		{"ListNode.NodeType", Field, 0},
-		{"ListNode.Nodes", Field, 0},
-		{"ListNode.Pos", Field, 1},
-		{"Mode", Type, 16},
-		{"New", Func, 0},
-		{"NewIdentifier", Func, 0},
-		{"NilNode", Type, 1},
-		{"NilNode.NodeType", Field, 4},
-		{"NilNode.Pos", Field, 1},
-		{"Node", Type, 0},
-		{"NodeAction", Const, 0},
-		{"NodeBool", Const, 0},
-		{"NodeBreak", Const, 18},
-		{"NodeChain", Const, 1},
-		{"NodeCommand", Const, 0},
-		{"NodeComment", Const, 16},
-		{"NodeContinue", Const, 18},
-		{"NodeDot", Const, 0},
-		{"NodeField", Const, 0},
-		{"NodeIdentifier", Const, 0},
-		{"NodeIf", Const, 0},
-		{"NodeList", Const, 0},
-		{"NodeNil", Const, 1},
-		{"NodeNumber", Const, 0},
-		{"NodePipe", Const, 0},
-		{"NodeRange", Const, 0},
-		{"NodeString", Const, 0},
-		{"NodeTemplate", Const, 0},
-		{"NodeText", Const, 0},
-		{"NodeType", Type, 0},
-		{"NodeVariable", Const, 0},
-		{"NodeWith", Const, 0},
-		{"NumberNode", Type, 0},
-		{"NumberNode.Complex128", Field, 0},
-		{"NumberNode.Float64", Field, 0},
-		{"NumberNode.Int64", Field, 0},
-		{"NumberNode.IsComplex", Field, 0},
-		{"NumberNode.IsFloat", Field, 0},
-		{"NumberNode.IsInt", Field, 0},
-		{"NumberNode.IsUint", Field, 0},
-		{"NumberNode.NodeType", Field, 0},
-		{"NumberNode.Pos", Field, 1},
-		{"NumberNode.Text", Field, 0},
-		{"NumberNode.Uint64", Field, 0},
-		{"Parse", Func, 0},
-		{"ParseComments", Const, 16},
-		{"PipeNode", Type, 0},
-		{"PipeNode.Cmds", Field, 0},
-		{"PipeNode.Decl", Field, 0},
-		{"PipeNode.IsAssign", Field, 11},
-		{"PipeNode.Line", Field, 0},
-		{"PipeNode.NodeType", Field, 0},
-		{"PipeNode.Pos", Field, 1},
-		{"Pos", Type, 1},
-		{"RangeNode", Type, 0},
-		{"RangeNode.BranchNode", Field, 0},
-		{"SkipFuncCheck", Const, 17},
-		{"StringNode", Type, 0},
-		{"StringNode.NodeType", Field, 0},
-		{"StringNode.Pos", Field, 1},
-		{"StringNode.Quoted", Field, 0},
-		{"StringNode.Text", Field, 0},
-		{"TemplateNode", Type, 0},
-		{"TemplateNode.Line", Field, 0},
-		{"TemplateNode.Name", Field, 0},
-		{"TemplateNode.NodeType", Field, 0},
-		{"TemplateNode.Pipe", Field, 0},
-		{"TemplateNode.Pos", Field, 1},
-		{"TextNode", Type, 0},
-		{"TextNode.NodeType", Field, 0},
-		{"TextNode.Pos", Field, 1},
-		{"TextNode.Text", Field, 0},
-		{"Tree", Type, 0},
-		{"Tree.Mode", Field, 16},
-		{"Tree.Name", Field, 0},
-		{"Tree.ParseName", Field, 1},
-		{"Tree.Root", Field, 0},
-		{"VariableNode", Type, 0},
-		{"VariableNode.Ident", Field, 0},
-		{"VariableNode.NodeType", Field, 0},
-		{"VariableNode.Pos", Field, 1},
-		{"WithNode", Type, 0},
-		{"WithNode.BranchNode", Field, 0},
+		{"(*ActionNode).Copy", Method, 0, ""},
+		{"(*ActionNode).String", Method, 0, ""},
+		{"(*BoolNode).Copy", Method, 0, ""},
+		{"(*BoolNode).String", Method, 0, ""},
+		{"(*BranchNode).Copy", Method, 4, ""},
+		{"(*BranchNode).String", Method, 0, ""},
+		{"(*BreakNode).Copy", Method, 18, ""},
+		{"(*BreakNode).String", Method, 18, ""},
+		{"(*ChainNode).Add", Method, 1, ""},
+		{"(*ChainNode).Copy", Method, 1, ""},
+		{"(*ChainNode).String", Method, 1, ""},
+		{"(*CommandNode).Copy", Method, 0, ""},
+		{"(*CommandNode).String", Method, 0, ""},
+		{"(*CommentNode).Copy", Method, 16, ""},
+		{"(*CommentNode).String", Method, 16, ""},
+		{"(*ContinueNode).Copy", Method, 18, ""},
+		{"(*ContinueNode).String", Method, 18, ""},
+		{"(*DotNode).Copy", Method, 0, ""},
+		{"(*DotNode).String", Method, 0, ""},
+		{"(*DotNode).Type", Method, 0, ""},
+		{"(*FieldNode).Copy", Method, 0, ""},
+		{"(*FieldNode).String", Method, 0, ""},
+		{"(*IdentifierNode).Copy", Method, 0, ""},
+		{"(*IdentifierNode).SetPos", Method, 1, ""},
+		{"(*IdentifierNode).SetTree", Method, 4, ""},
+		{"(*IdentifierNode).String", Method, 0, ""},
+		{"(*IfNode).Copy", Method, 0, ""},
+		{"(*IfNode).String", Method, 0, ""},
+		{"(*ListNode).Copy", Method, 0, ""},
+		{"(*ListNode).CopyList", Method, 0, ""},
+		{"(*ListNode).String", Method, 0, ""},
+		{"(*NilNode).Copy", Method, 1, ""},
+		{"(*NilNode).String", Method, 1, ""},
+		{"(*NilNode).Type", Method, 1, ""},
+		{"(*NumberNode).Copy", Method, 0, ""},
+		{"(*NumberNode).String", Method, 0, ""},
+		{"(*PipeNode).Copy", Method, 0, ""},
+		{"(*PipeNode).CopyPipe", Method, 0, ""},
+		{"(*PipeNode).String", Method, 0, ""},
+		{"(*RangeNode).Copy", Method, 0, ""},
+		{"(*RangeNode).String", Method, 0, ""},
+		{"(*StringNode).Copy", Method, 0, ""},
+		{"(*StringNode).String", Method, 0, ""},
+		{"(*TemplateNode).Copy", Method, 0, ""},
+		{"(*TemplateNode).String", Method, 0, ""},
+		{"(*TextNode).Copy", Method, 0, ""},
+		{"(*TextNode).String", Method, 0, ""},
+		{"(*Tree).Copy", Method, 2, ""},
+		{"(*Tree).ErrorContext", Method, 1, ""},
+		{"(*Tree).Parse", Method, 0, ""},
+		{"(*VariableNode).Copy", Method, 0, ""},
+		{"(*VariableNode).String", Method, 0, ""},
+		{"(*WithNode).Copy", Method, 0, ""},
+		{"(*WithNode).String", Method, 0, ""},
+		{"(ActionNode).Position", Method, 1, ""},
+		{"(ActionNode).Type", Method, 0, ""},
+		{"(BoolNode).Position", Method, 1, ""},
+		{"(BoolNode).Type", Method, 0, ""},
+		{"(BranchNode).Position", Method, 1, ""},
+		{"(BranchNode).Type", Method, 0, ""},
+		{"(BreakNode).Position", Method, 18, ""},
+		{"(BreakNode).Type", Method, 18, ""},
+		{"(ChainNode).Position", Method, 1, ""},
+		{"(ChainNode).Type", Method, 1, ""},
+		{"(CommandNode).Position", Method, 1, ""},
+		{"(CommandNode).Type", Method, 0, ""},
+		{"(CommentNode).Position", Method, 16, ""},
+		{"(CommentNode).Type", Method, 16, ""},
+		{"(ContinueNode).Position", Method, 18, ""},
+		{"(ContinueNode).Type", Method, 18, ""},
+		{"(DotNode).Position", Method, 1, ""},
+		{"(FieldNode).Position", Method, 1, ""},
+		{"(FieldNode).Type", Method, 0, ""},
+		{"(IdentifierNode).Position", Method, 1, ""},
+		{"(IdentifierNode).Type", Method, 0, ""},
+		{"(IfNode).Position", Method, 1, ""},
+		{"(IfNode).Type", Method, 0, ""},
+		{"(ListNode).Position", Method, 1, ""},
+		{"(ListNode).Type", Method, 0, ""},
+		{"(NilNode).Position", Method, 1, ""},
+		{"(NodeType).Type", Method, 0, ""},
+		{"(NumberNode).Position", Method, 1, ""},
+		{"(NumberNode).Type", Method, 0, ""},
+		{"(PipeNode).Position", Method, 1, ""},
+		{"(PipeNode).Type", Method, 0, ""},
+		{"(Pos).Position", Method, 1, ""},
+		{"(RangeNode).Position", Method, 1, ""},
+		{"(RangeNode).Type", Method, 0, ""},
+		{"(StringNode).Position", Method, 1, ""},
+		{"(StringNode).Type", Method, 0, ""},
+		{"(TemplateNode).Position", Method, 1, ""},
+		{"(TemplateNode).Type", Method, 0, ""},
+		{"(TextNode).Position", Method, 1, ""},
+		{"(TextNode).Type", Method, 0, ""},
+		{"(VariableNode).Position", Method, 1, ""},
+		{"(VariableNode).Type", Method, 0, ""},
+		{"(WithNode).Position", Method, 1, ""},
+		{"(WithNode).Type", Method, 0, ""},
+		{"ActionNode", Type, 0, ""},
+		{"ActionNode.Line", Field, 0, ""},
+		{"ActionNode.NodeType", Field, 0, ""},
+		{"ActionNode.Pipe", Field, 0, ""},
+		{"ActionNode.Pos", Field, 1, ""},
+		{"BoolNode", Type, 0, ""},
+		{"BoolNode.NodeType", Field, 0, ""},
+		{"BoolNode.Pos", Field, 1, ""},
+		{"BoolNode.True", Field, 0, ""},
+		{"BranchNode", Type, 0, ""},
+		{"BranchNode.ElseList", Field, 0, ""},
+		{"BranchNode.Line", Field, 0, ""},
+		{"BranchNode.List", Field, 0, ""},
+		{"BranchNode.NodeType", Field, 0, ""},
+		{"BranchNode.Pipe", Field, 0, ""},
+		{"BranchNode.Pos", Field, 1, ""},
+		{"BreakNode", Type, 18, ""},
+		{"BreakNode.Line", Field, 18, ""},
+		{"BreakNode.NodeType", Field, 18, ""},
+		{"BreakNode.Pos", Field, 18, ""},
+		{"ChainNode", Type, 1, ""},
+		{"ChainNode.Field", Field, 1, ""},
+		{"ChainNode.Node", Field, 1, ""},
+		{"ChainNode.NodeType", Field, 1, ""},
+		{"ChainNode.Pos", Field, 1, ""},
+		{"CommandNode", Type, 0, ""},
+		{"CommandNode.Args", Field, 0, ""},
+		{"CommandNode.NodeType", Field, 0, ""},
+		{"CommandNode.Pos", Field, 1, ""},
+		{"CommentNode", Type, 16, ""},
+		{"CommentNode.NodeType", Field, 16, ""},
+		{"CommentNode.Pos", Field, 16, ""},
+		{"CommentNode.Text", Field, 16, ""},
+		{"ContinueNode", Type, 18, ""},
+		{"ContinueNode.Line", Field, 18, ""},
+		{"ContinueNode.NodeType", Field, 18, ""},
+		{"ContinueNode.Pos", Field, 18, ""},
+		{"DotNode", Type, 0, ""},
+		{"DotNode.NodeType", Field, 4, ""},
+		{"DotNode.Pos", Field, 1, ""},
+		{"FieldNode", Type, 0, ""},
+		{"FieldNode.Ident", Field, 0, ""},
+		{"FieldNode.NodeType", Field, 0, ""},
+		{"FieldNode.Pos", Field, 1, ""},
+		{"IdentifierNode", Type, 0, ""},
+		{"IdentifierNode.Ident", Field, 0, ""},
+		{"IdentifierNode.NodeType", Field, 0, ""},
+		{"IdentifierNode.Pos", Field, 1, ""},
+		{"IfNode", Type, 0, ""},
+		{"IfNode.BranchNode", Field, 0, ""},
+		{"IsEmptyTree", Func, 0, "func(n Node) bool"},
+		{"ListNode", Type, 0, ""},
+		{"ListNode.NodeType", Field, 0, ""},
+		{"ListNode.Nodes", Field, 0, ""},
+		{"ListNode.Pos", Field, 1, ""},
+		{"Mode", Type, 16, ""},
+		{"New", Func, 0, "func(name string, funcs ...map[string]any) *Tree"},
+		{"NewIdentifier", Func, 0, "func(ident string) *IdentifierNode"},
+		{"NilNode", Type, 1, ""},
+		{"NilNode.NodeType", Field, 4, ""},
+		{"NilNode.Pos", Field, 1, ""},
+		{"Node", Type, 0, ""},
+		{"NodeAction", Const, 0, ""},
+		{"NodeBool", Const, 0, ""},
+		{"NodeBreak", Const, 18, ""},
+		{"NodeChain", Const, 1, ""},
+		{"NodeCommand", Const, 0, ""},
+		{"NodeComment", Const, 16, ""},
+		{"NodeContinue", Const, 18, ""},
+		{"NodeDot", Const, 0, ""},
+		{"NodeField", Const, 0, ""},
+		{"NodeIdentifier", Const, 0, ""},
+		{"NodeIf", Const, 0, ""},
+		{"NodeList", Const, 0, ""},
+		{"NodeNil", Const, 1, ""},
+		{"NodeNumber", Const, 0, ""},
+		{"NodePipe", Const, 0, ""},
+		{"NodeRange", Const, 0, ""},
+		{"NodeString", Const, 0, ""},
+		{"NodeTemplate", Const, 0, ""},
+		{"NodeText", Const, 0, ""},
+		{"NodeType", Type, 0, ""},
+		{"NodeVariable", Const, 0, ""},
+		{"NodeWith", Const, 0, ""},
+		{"NumberNode", Type, 0, ""},
+		{"NumberNode.Complex128", Field, 0, ""},
+		{"NumberNode.Float64", Field, 0, ""},
+		{"NumberNode.Int64", Field, 0, ""},
+		{"NumberNode.IsComplex", Field, 0, ""},
+		{"NumberNode.IsFloat", Field, 0, ""},
+		{"NumberNode.IsInt", Field, 0, ""},
+		{"NumberNode.IsUint", Field, 0, ""},
+		{"NumberNode.NodeType", Field, 0, ""},
+		{"NumberNode.Pos", Field, 1, ""},
+		{"NumberNode.Text", Field, 0, ""},
+		{"NumberNode.Uint64", Field, 0, ""},
+		{"Parse", Func, 0, "func(name string, text string, leftDelim string, rightDelim string, funcs ...map[string]any) (map[string]*Tree, error)"},
+		{"ParseComments", Const, 16, ""},
+		{"PipeNode", Type, 0, ""},
+		{"PipeNode.Cmds", Field, 0, ""},
+		{"PipeNode.Decl", Field, 0, ""},
+		{"PipeNode.IsAssign", Field, 11, ""},
+		{"PipeNode.Line", Field, 0, ""},
+		{"PipeNode.NodeType", Field, 0, ""},
+		{"PipeNode.Pos", Field, 1, ""},
+		{"Pos", Type, 1, ""},
+		{"RangeNode", Type, 0, ""},
+		{"RangeNode.BranchNode", Field, 0, ""},
+		{"SkipFuncCheck", Const, 17, ""},
+		{"StringNode", Type, 0, ""},
+		{"StringNode.NodeType", Field, 0, ""},
+		{"StringNode.Pos", Field, 1, ""},
+		{"StringNode.Quoted", Field, 0, ""},
+		{"StringNode.Text", Field, 0, ""},
+		{"TemplateNode", Type, 0, ""},
+		{"TemplateNode.Line", Field, 0, ""},
+		{"TemplateNode.Name", Field, 0, ""},
+		{"TemplateNode.NodeType", Field, 0, ""},
+		{"TemplateNode.Pipe", Field, 0, ""},
+		{"TemplateNode.Pos", Field, 1, ""},
+		{"TextNode", Type, 0, ""},
+		{"TextNode.NodeType", Field, 0, ""},
+		{"TextNode.Pos", Field, 1, ""},
+		{"TextNode.Text", Field, 0, ""},
+		{"Tree", Type, 0, ""},
+		{"Tree.Mode", Field, 16, ""},
+		{"Tree.Name", Field, 0, ""},
+		{"Tree.ParseName", Field, 1, ""},
+		{"Tree.Root", Field, 0, ""},
+		{"VariableNode", Type, 0, ""},
+		{"VariableNode.Ident", Field, 0, ""},
+		{"VariableNode.NodeType", Field, 0, ""},
+		{"VariableNode.Pos", Field, 1, ""},
+		{"WithNode", Type, 0, ""},
+		{"WithNode.BranchNode", Field, 0, ""},
 	},
 	"time": {
-		{"(*Location).String", Method, 0},
-		{"(*ParseError).Error", Method, 0},
-		{"(*Ticker).Reset", Method, 15},
-		{"(*Ticker).Stop", Method, 0},
-		{"(*Time).GobDecode", Method, 0},
-		{"(*Time).UnmarshalBinary", Method, 2},
-		{"(*Time).UnmarshalJSON", Method, 0},
-		{"(*Time).UnmarshalText", Method, 2},
-		{"(*Timer).Reset", Method, 1},
-		{"(*Timer).Stop", Method, 0},
-		{"(Duration).Abs", Method, 19},
-		{"(Duration).Hours", Method, 0},
-		{"(Duration).Microseconds", Method, 13},
-		{"(Duration).Milliseconds", Method, 13},
-		{"(Duration).Minutes", Method, 0},
-		{"(Duration).Nanoseconds", Method, 0},
-		{"(Duration).Round", Method, 9},
-		{"(Duration).Seconds", Method, 0},
-		{"(Duration).String", Method, 0},
-		{"(Duration).Truncate", Method, 9},
-		{"(Month).String", Method, 0},
-		{"(Time).Add", Method, 0},
-		{"(Time).AddDate", Method, 0},
-		{"(Time).After", Method, 0},
-		{"(Time).AppendBinary", Method, 24},
-		{"(Time).AppendFormat", Method, 5},
-		{"(Time).AppendText", Method, 24},
-		{"(Time).Before", Method, 0},
-		{"(Time).Clock", Method, 0},
-		{"(Time).Compare", Method, 20},
-		{"(Time).Date", Method, 0},
-		{"(Time).Day", Method, 0},
-		{"(Time).Equal", Method, 0},
-		{"(Time).Format", Method, 0},
-		{"(Time).GoString", Method, 17},
-		{"(Time).GobEncode", Method, 0},
-		{"(Time).Hour", Method, 0},
-		{"(Time).ISOWeek", Method, 0},
-		{"(Time).In", Method, 0},
-		{"(Time).IsDST", Method, 17},
-		{"(Time).IsZero", Method, 0},
-		{"(Time).Local", Method, 0},
-		{"(Time).Location", Method, 0},
-		{"(Time).MarshalBinary", Method, 2},
-		{"(Time).MarshalJSON", Method, 0},
-		{"(Time).MarshalText", Method, 2},
-		{"(Time).Minute", Method, 0},
-		{"(Time).Month", Method, 0},
-		{"(Time).Nanosecond", Method, 0},
-		{"(Time).Round", Method, 1},
-		{"(Time).Second", Method, 0},
-		{"(Time).String", Method, 0},
-		{"(Time).Sub", Method, 0},
-		{"(Time).Truncate", Method, 1},
-		{"(Time).UTC", Method, 0},
-		{"(Time).Unix", Method, 0},
-		{"(Time).UnixMicro", Method, 17},
-		{"(Time).UnixMilli", Method, 17},
-		{"(Time).UnixNano", Method, 0},
-		{"(Time).Weekday", Method, 0},
-		{"(Time).Year", Method, 0},
-		{"(Time).YearDay", Method, 1},
-		{"(Time).Zone", Method, 0},
-		{"(Time).ZoneBounds", Method, 19},
-		{"(Weekday).String", Method, 0},
-		{"ANSIC", Const, 0},
-		{"After", Func, 0},
-		{"AfterFunc", Func, 0},
-		{"April", Const, 0},
-		{"August", Const, 0},
-		{"Date", Func, 0},
-		{"DateOnly", Const, 20},
-		{"DateTime", Const, 20},
-		{"December", Const, 0},
-		{"Duration", Type, 0},
-		{"February", Const, 0},
-		{"FixedZone", Func, 0},
-		{"Friday", Const, 0},
-		{"Hour", Const, 0},
-		{"January", Const, 0},
-		{"July", Const, 0},
-		{"June", Const, 0},
-		{"Kitchen", Const, 0},
-		{"Layout", Const, 17},
-		{"LoadLocation", Func, 0},
-		{"LoadLocationFromTZData", Func, 10},
-		{"Local", Var, 0},
-		{"Location", Type, 0},
-		{"March", Const, 0},
-		{"May", Const, 0},
-		{"Microsecond", Const, 0},
-		{"Millisecond", Const, 0},
-		{"Minute", Const, 0},
-		{"Monday", Const, 0},
-		{"Month", Type, 0},
-		{"Nanosecond", Const, 0},
-		{"NewTicker", Func, 0},
-		{"NewTimer", Func, 0},
-		{"November", Const, 0},
-		{"Now", Func, 0},
-		{"October", Const, 0},
-		{"Parse", Func, 0},
-		{"ParseDuration", Func, 0},
-		{"ParseError", Type, 0},
-		{"ParseError.Layout", Field, 0},
-		{"ParseError.LayoutElem", Field, 0},
-		{"ParseError.Message", Field, 0},
-		{"ParseError.Value", Field, 0},
-		{"ParseError.ValueElem", Field, 0},
-		{"ParseInLocation", Func, 1},
-		{"RFC1123", Const, 0},
-		{"RFC1123Z", Const, 0},
-		{"RFC3339", Const, 0},
-		{"RFC3339Nano", Const, 0},
-		{"RFC822", Const, 0},
-		{"RFC822Z", Const, 0},
-		{"RFC850", Const, 0},
-		{"RubyDate", Const, 0},
-		{"Saturday", Const, 0},
-		{"Second", Const, 0},
-		{"September", Const, 0},
-		{"Since", Func, 0},
-		{"Sleep", Func, 0},
-		{"Stamp", Const, 0},
-		{"StampMicro", Const, 0},
-		{"StampMilli", Const, 0},
-		{"StampNano", Const, 0},
-		{"Sunday", Const, 0},
-		{"Thursday", Const, 0},
-		{"Tick", Func, 0},
-		{"Ticker", Type, 0},
-		{"Ticker.C", Field, 0},
-		{"Time", Type, 0},
-		{"TimeOnly", Const, 20},
-		{"Timer", Type, 0},
-		{"Timer.C", Field, 0},
-		{"Tuesday", Const, 0},
-		{"UTC", Var, 0},
-		{"Unix", Func, 0},
-		{"UnixDate", Const, 0},
-		{"UnixMicro", Func, 17},
-		{"UnixMilli", Func, 17},
-		{"Until", Func, 8},
-		{"Wednesday", Const, 0},
-		{"Weekday", Type, 0},
+		{"(*Location).String", Method, 0, ""},
+		{"(*ParseError).Error", Method, 0, ""},
+		{"(*Ticker).Reset", Method, 15, ""},
+		{"(*Ticker).Stop", Method, 0, ""},
+		{"(*Time).GobDecode", Method, 0, ""},
+		{"(*Time).UnmarshalBinary", Method, 2, ""},
+		{"(*Time).UnmarshalJSON", Method, 0, ""},
+		{"(*Time).UnmarshalText", Method, 2, ""},
+		{"(*Timer).Reset", Method, 1, ""},
+		{"(*Timer).Stop", Method, 0, ""},
+		{"(Duration).Abs", Method, 19, ""},
+		{"(Duration).Hours", Method, 0, ""},
+		{"(Duration).Microseconds", Method, 13, ""},
+		{"(Duration).Milliseconds", Method, 13, ""},
+		{"(Duration).Minutes", Method, 0, ""},
+		{"(Duration).Nanoseconds", Method, 0, ""},
+		{"(Duration).Round", Method, 9, ""},
+		{"(Duration).Seconds", Method, 0, ""},
+		{"(Duration).String", Method, 0, ""},
+		{"(Duration).Truncate", Method, 9, ""},
+		{"(Month).String", Method, 0, ""},
+		{"(Time).Add", Method, 0, ""},
+		{"(Time).AddDate", Method, 0, ""},
+		{"(Time).After", Method, 0, ""},
+		{"(Time).AppendBinary", Method, 24, ""},
+		{"(Time).AppendFormat", Method, 5, ""},
+		{"(Time).AppendText", Method, 24, ""},
+		{"(Time).Before", Method, 0, ""},
+		{"(Time).Clock", Method, 0, ""},
+		{"(Time).Compare", Method, 20, ""},
+		{"(Time).Date", Method, 0, ""},
+		{"(Time).Day", Method, 0, ""},
+		{"(Time).Equal", Method, 0, ""},
+		{"(Time).Format", Method, 0, ""},
+		{"(Time).GoString", Method, 17, ""},
+		{"(Time).GobEncode", Method, 0, ""},
+		{"(Time).Hour", Method, 0, ""},
+		{"(Time).ISOWeek", Method, 0, ""},
+		{"(Time).In", Method, 0, ""},
+		{"(Time).IsDST", Method, 17, ""},
+		{"(Time).IsZero", Method, 0, ""},
+		{"(Time).Local", Method, 0, ""},
+		{"(Time).Location", Method, 0, ""},
+		{"(Time).MarshalBinary", Method, 2, ""},
+		{"(Time).MarshalJSON", Method, 0, ""},
+		{"(Time).MarshalText", Method, 2, ""},
+		{"(Time).Minute", Method, 0, ""},
+		{"(Time).Month", Method, 0, ""},
+		{"(Time).Nanosecond", Method, 0, ""},
+		{"(Time).Round", Method, 1, ""},
+		{"(Time).Second", Method, 0, ""},
+		{"(Time).String", Method, 0, ""},
+		{"(Time).Sub", Method, 0, ""},
+		{"(Time).Truncate", Method, 1, ""},
+		{"(Time).UTC", Method, 0, ""},
+		{"(Time).Unix", Method, 0, ""},
+		{"(Time).UnixMicro", Method, 17, ""},
+		{"(Time).UnixMilli", Method, 17, ""},
+		{"(Time).UnixNano", Method, 0, ""},
+		{"(Time).Weekday", Method, 0, ""},
+		{"(Time).Year", Method, 0, ""},
+		{"(Time).YearDay", Method, 1, ""},
+		{"(Time).Zone", Method, 0, ""},
+		{"(Time).ZoneBounds", Method, 19, ""},
+		{"(Weekday).String", Method, 0, ""},
+		{"ANSIC", Const, 0, ""},
+		{"After", Func, 0, "func(d Duration) <-chan Time"},
+		{"AfterFunc", Func, 0, "func(d Duration, f func()) *Timer"},
+		{"April", Const, 0, ""},
+		{"August", Const, 0, ""},
+		{"Date", Func, 0, "func(year int, month Month, day int, hour int, min int, sec int, nsec int, loc *Location) Time"},
+		{"DateOnly", Const, 20, ""},
+		{"DateTime", Const, 20, ""},
+		{"December", Const, 0, ""},
+		{"Duration", Type, 0, ""},
+		{"February", Const, 0, ""},
+		{"FixedZone", Func, 0, "func(name string, offset int) *Location"},
+		{"Friday", Const, 0, ""},
+		{"Hour", Const, 0, ""},
+		{"January", Const, 0, ""},
+		{"July", Const, 0, ""},
+		{"June", Const, 0, ""},
+		{"Kitchen", Const, 0, ""},
+		{"Layout", Const, 17, ""},
+		{"LoadLocation", Func, 0, "func(name string) (*Location, error)"},
+		{"LoadLocationFromTZData", Func, 10, "func(name string, data []byte) (*Location, error)"},
+		{"Local", Var, 0, ""},
+		{"Location", Type, 0, ""},
+		{"March", Const, 0, ""},
+		{"May", Const, 0, ""},
+		{"Microsecond", Const, 0, ""},
+		{"Millisecond", Const, 0, ""},
+		{"Minute", Const, 0, ""},
+		{"Monday", Const, 0, ""},
+		{"Month", Type, 0, ""},
+		{"Nanosecond", Const, 0, ""},
+		{"NewTicker", Func, 0, "func(d Duration) *Ticker"},
+		{"NewTimer", Func, 0, "func(d Duration) *Timer"},
+		{"November", Const, 0, ""},
+		{"Now", Func, 0, "func() Time"},
+		{"October", Const, 0, ""},
+		{"Parse", Func, 0, "func(layout string, value string) (Time, error)"},
+		{"ParseDuration", Func, 0, "func(s string) (Duration, error)"},
+		{"ParseError", Type, 0, ""},
+		{"ParseError.Layout", Field, 0, ""},
+		{"ParseError.LayoutElem", Field, 0, ""},
+		{"ParseError.Message", Field, 0, ""},
+		{"ParseError.Value", Field, 0, ""},
+		{"ParseError.ValueElem", Field, 0, ""},
+		{"ParseInLocation", Func, 1, "func(layout string, value string, loc *Location) (Time, error)"},
+		{"RFC1123", Const, 0, ""},
+		{"RFC1123Z", Const, 0, ""},
+		{"RFC3339", Const, 0, ""},
+		{"RFC3339Nano", Const, 0, ""},
+		{"RFC822", Const, 0, ""},
+		{"RFC822Z", Const, 0, ""},
+		{"RFC850", Const, 0, ""},
+		{"RubyDate", Const, 0, ""},
+		{"Saturday", Const, 0, ""},
+		{"Second", Const, 0, ""},
+		{"September", Const, 0, ""},
+		{"Since", Func, 0, "func(t Time) Duration"},
+		{"Sleep", Func, 0, "func(d Duration)"},
+		{"Stamp", Const, 0, ""},
+		{"StampMicro", Const, 0, ""},
+		{"StampMilli", Const, 0, ""},
+		{"StampNano", Const, 0, ""},
+		{"Sunday", Const, 0, ""},
+		{"Thursday", Const, 0, ""},
+		{"Tick", Func, 0, "func(d Duration) <-chan Time"},
+		{"Ticker", Type, 0, ""},
+		{"Ticker.C", Field, 0, ""},
+		{"Time", Type, 0, ""},
+		{"TimeOnly", Const, 20, ""},
+		{"Timer", Type, 0, ""},
+		{"Timer.C", Field, 0, ""},
+		{"Tuesday", Const, 0, ""},
+		{"UTC", Var, 0, ""},
+		{"Unix", Func, 0, "func(sec int64, nsec int64) Time"},
+		{"UnixDate", Const, 0, ""},
+		{"UnixMicro", Func, 17, "func(usec int64) Time"},
+		{"UnixMilli", Func, 17, "func(msec int64) Time"},
+		{"Until", Func, 8, "func(t Time) Duration"},
+		{"Wednesday", Const, 0, ""},
+		{"Weekday", Type, 0, ""},
 	},
 	"unicode": {
-		{"(SpecialCase).ToLower", Method, 0},
-		{"(SpecialCase).ToTitle", Method, 0},
-		{"(SpecialCase).ToUpper", Method, 0},
-		{"ASCII_Hex_Digit", Var, 0},
-		{"Adlam", Var, 7},
-		{"Ahom", Var, 5},
-		{"Anatolian_Hieroglyphs", Var, 5},
-		{"Arabic", Var, 0},
-		{"Armenian", Var, 0},
-		{"Avestan", Var, 0},
-		{"AzeriCase", Var, 0},
-		{"Balinese", Var, 0},
-		{"Bamum", Var, 0},
-		{"Bassa_Vah", Var, 4},
-		{"Batak", Var, 0},
-		{"Bengali", Var, 0},
-		{"Bhaiksuki", Var, 7},
-		{"Bidi_Control", Var, 0},
-		{"Bopomofo", Var, 0},
-		{"Brahmi", Var, 0},
-		{"Braille", Var, 0},
-		{"Buginese", Var, 0},
-		{"Buhid", Var, 0},
-		{"C", Var, 0},
-		{"Canadian_Aboriginal", Var, 0},
-		{"Carian", Var, 0},
-		{"CaseRange", Type, 0},
-		{"CaseRange.Delta", Field, 0},
-		{"CaseRange.Hi", Field, 0},
-		{"CaseRange.Lo", Field, 0},
-		{"CaseRanges", Var, 0},
-		{"Categories", Var, 0},
-		{"Caucasian_Albanian", Var, 4},
-		{"Cc", Var, 0},
-		{"Cf", Var, 0},
-		{"Chakma", Var, 1},
-		{"Cham", Var, 0},
-		{"Cherokee", Var, 0},
-		{"Chorasmian", Var, 16},
-		{"Co", Var, 0},
-		{"Common", Var, 0},
-		{"Coptic", Var, 0},
-		{"Cs", Var, 0},
-		{"Cuneiform", Var, 0},
-		{"Cypriot", Var, 0},
-		{"Cypro_Minoan", Var, 21},
-		{"Cyrillic", Var, 0},
-		{"Dash", Var, 0},
-		{"Deprecated", Var, 0},
-		{"Deseret", Var, 0},
-		{"Devanagari", Var, 0},
-		{"Diacritic", Var, 0},
-		{"Digit", Var, 0},
-		{"Dives_Akuru", Var, 16},
-		{"Dogra", Var, 13},
-		{"Duployan", Var, 4},
-		{"Egyptian_Hieroglyphs", Var, 0},
-		{"Elbasan", Var, 4},
-		{"Elymaic", Var, 14},
-		{"Ethiopic", Var, 0},
-		{"Extender", Var, 0},
-		{"FoldCategory", Var, 0},
-		{"FoldScript", Var, 0},
-		{"Georgian", Var, 0},
-		{"Glagolitic", Var, 0},
-		{"Gothic", Var, 0},
-		{"Grantha", Var, 4},
-		{"GraphicRanges", Var, 0},
-		{"Greek", Var, 0},
-		{"Gujarati", Var, 0},
-		{"Gunjala_Gondi", Var, 13},
-		{"Gurmukhi", Var, 0},
-		{"Han", Var, 0},
-		{"Hangul", Var, 0},
-		{"Hanifi_Rohingya", Var, 13},
-		{"Hanunoo", Var, 0},
-		{"Hatran", Var, 5},
-		{"Hebrew", Var, 0},
-		{"Hex_Digit", Var, 0},
-		{"Hiragana", Var, 0},
-		{"Hyphen", Var, 0},
-		{"IDS_Binary_Operator", Var, 0},
-		{"IDS_Trinary_Operator", Var, 0},
-		{"Ideographic", Var, 0},
-		{"Imperial_Aramaic", Var, 0},
-		{"In", Func, 2},
-		{"Inherited", Var, 0},
-		{"Inscriptional_Pahlavi", Var, 0},
-		{"Inscriptional_Parthian", Var, 0},
-		{"Is", Func, 0},
-		{"IsControl", Func, 0},
-		{"IsDigit", Func, 0},
-		{"IsGraphic", Func, 0},
-		{"IsLetter", Func, 0},
-		{"IsLower", Func, 0},
-		{"IsMark", Func, 0},
-		{"IsNumber", Func, 0},
-		{"IsOneOf", Func, 0},
-		{"IsPrint", Func, 0},
-		{"IsPunct", Func, 0},
-		{"IsSpace", Func, 0},
-		{"IsSymbol", Func, 0},
-		{"IsTitle", Func, 0},
-		{"IsUpper", Func, 0},
-		{"Javanese", Var, 0},
-		{"Join_Control", Var, 0},
-		{"Kaithi", Var, 0},
-		{"Kannada", Var, 0},
-		{"Katakana", Var, 0},
-		{"Kawi", Var, 21},
-		{"Kayah_Li", Var, 0},
-		{"Kharoshthi", Var, 0},
-		{"Khitan_Small_Script", Var, 16},
-		{"Khmer", Var, 0},
-		{"Khojki", Var, 4},
-		{"Khudawadi", Var, 4},
-		{"L", Var, 0},
-		{"Lao", Var, 0},
-		{"Latin", Var, 0},
-		{"Lepcha", Var, 0},
-		{"Letter", Var, 0},
-		{"Limbu", Var, 0},
-		{"Linear_A", Var, 4},
-		{"Linear_B", Var, 0},
-		{"Lisu", Var, 0},
-		{"Ll", Var, 0},
-		{"Lm", Var, 0},
-		{"Lo", Var, 0},
-		{"Logical_Order_Exception", Var, 0},
-		{"Lower", Var, 0},
-		{"LowerCase", Const, 0},
-		{"Lt", Var, 0},
-		{"Lu", Var, 0},
-		{"Lycian", Var, 0},
-		{"Lydian", Var, 0},
-		{"M", Var, 0},
-		{"Mahajani", Var, 4},
-		{"Makasar", Var, 13},
-		{"Malayalam", Var, 0},
-		{"Mandaic", Var, 0},
-		{"Manichaean", Var, 4},
-		{"Marchen", Var, 7},
-		{"Mark", Var, 0},
-		{"Masaram_Gondi", Var, 10},
-		{"MaxASCII", Const, 0},
-		{"MaxCase", Const, 0},
-		{"MaxLatin1", Const, 0},
-		{"MaxRune", Const, 0},
-		{"Mc", Var, 0},
-		{"Me", Var, 0},
-		{"Medefaidrin", Var, 13},
-		{"Meetei_Mayek", Var, 0},
-		{"Mende_Kikakui", Var, 4},
-		{"Meroitic_Cursive", Var, 1},
-		{"Meroitic_Hieroglyphs", Var, 1},
-		{"Miao", Var, 1},
-		{"Mn", Var, 0},
-		{"Modi", Var, 4},
-		{"Mongolian", Var, 0},
-		{"Mro", Var, 4},
-		{"Multani", Var, 5},
-		{"Myanmar", Var, 0},
-		{"N", Var, 0},
-		{"Nabataean", Var, 4},
-		{"Nag_Mundari", Var, 21},
-		{"Nandinagari", Var, 14},
-		{"Nd", Var, 0},
-		{"New_Tai_Lue", Var, 0},
-		{"Newa", Var, 7},
-		{"Nko", Var, 0},
-		{"Nl", Var, 0},
-		{"No", Var, 0},
-		{"Noncharacter_Code_Point", Var, 0},
-		{"Number", Var, 0},
-		{"Nushu", Var, 10},
-		{"Nyiakeng_Puachue_Hmong", Var, 14},
-		{"Ogham", Var, 0},
-		{"Ol_Chiki", Var, 0},
-		{"Old_Hungarian", Var, 5},
-		{"Old_Italic", Var, 0},
-		{"Old_North_Arabian", Var, 4},
-		{"Old_Permic", Var, 4},
-		{"Old_Persian", Var, 0},
-		{"Old_Sogdian", Var, 13},
-		{"Old_South_Arabian", Var, 0},
-		{"Old_Turkic", Var, 0},
-		{"Old_Uyghur", Var, 21},
-		{"Oriya", Var, 0},
-		{"Osage", Var, 7},
-		{"Osmanya", Var, 0},
-		{"Other", Var, 0},
-		{"Other_Alphabetic", Var, 0},
-		{"Other_Default_Ignorable_Code_Point", Var, 0},
-		{"Other_Grapheme_Extend", Var, 0},
-		{"Other_ID_Continue", Var, 0},
-		{"Other_ID_Start", Var, 0},
-		{"Other_Lowercase", Var, 0},
-		{"Other_Math", Var, 0},
-		{"Other_Uppercase", Var, 0},
-		{"P", Var, 0},
-		{"Pahawh_Hmong", Var, 4},
-		{"Palmyrene", Var, 4},
-		{"Pattern_Syntax", Var, 0},
-		{"Pattern_White_Space", Var, 0},
-		{"Pau_Cin_Hau", Var, 4},
-		{"Pc", Var, 0},
-		{"Pd", Var, 0},
-		{"Pe", Var, 0},
-		{"Pf", Var, 0},
-		{"Phags_Pa", Var, 0},
-		{"Phoenician", Var, 0},
-		{"Pi", Var, 0},
-		{"Po", Var, 0},
-		{"Prepended_Concatenation_Mark", Var, 7},
-		{"PrintRanges", Var, 0},
-		{"Properties", Var, 0},
-		{"Ps", Var, 0},
-		{"Psalter_Pahlavi", Var, 4},
-		{"Punct", Var, 0},
-		{"Quotation_Mark", Var, 0},
-		{"Radical", Var, 0},
-		{"Range16", Type, 0},
-		{"Range16.Hi", Field, 0},
-		{"Range16.Lo", Field, 0},
-		{"Range16.Stride", Field, 0},
-		{"Range32", Type, 0},
-		{"Range32.Hi", Field, 0},
-		{"Range32.Lo", Field, 0},
-		{"Range32.Stride", Field, 0},
-		{"RangeTable", Type, 0},
-		{"RangeTable.LatinOffset", Field, 1},
-		{"RangeTable.R16", Field, 0},
-		{"RangeTable.R32", Field, 0},
-		{"Regional_Indicator", Var, 10},
-		{"Rejang", Var, 0},
-		{"ReplacementChar", Const, 0},
-		{"Runic", Var, 0},
-		{"S", Var, 0},
-		{"STerm", Var, 0},
-		{"Samaritan", Var, 0},
-		{"Saurashtra", Var, 0},
-		{"Sc", Var, 0},
-		{"Scripts", Var, 0},
-		{"Sentence_Terminal", Var, 7},
-		{"Sharada", Var, 1},
-		{"Shavian", Var, 0},
-		{"Siddham", Var, 4},
-		{"SignWriting", Var, 5},
-		{"SimpleFold", Func, 0},
-		{"Sinhala", Var, 0},
-		{"Sk", Var, 0},
-		{"Sm", Var, 0},
-		{"So", Var, 0},
-		{"Soft_Dotted", Var, 0},
-		{"Sogdian", Var, 13},
-		{"Sora_Sompeng", Var, 1},
-		{"Soyombo", Var, 10},
-		{"Space", Var, 0},
-		{"SpecialCase", Type, 0},
-		{"Sundanese", Var, 0},
-		{"Syloti_Nagri", Var, 0},
-		{"Symbol", Var, 0},
-		{"Syriac", Var, 0},
-		{"Tagalog", Var, 0},
-		{"Tagbanwa", Var, 0},
-		{"Tai_Le", Var, 0},
-		{"Tai_Tham", Var, 0},
-		{"Tai_Viet", Var, 0},
-		{"Takri", Var, 1},
-		{"Tamil", Var, 0},
-		{"Tangsa", Var, 21},
-		{"Tangut", Var, 7},
-		{"Telugu", Var, 0},
-		{"Terminal_Punctuation", Var, 0},
-		{"Thaana", Var, 0},
-		{"Thai", Var, 0},
-		{"Tibetan", Var, 0},
-		{"Tifinagh", Var, 0},
-		{"Tirhuta", Var, 4},
-		{"Title", Var, 0},
-		{"TitleCase", Const, 0},
-		{"To", Func, 0},
-		{"ToLower", Func, 0},
-		{"ToTitle", Func, 0},
-		{"ToUpper", Func, 0},
-		{"Toto", Var, 21},
-		{"TurkishCase", Var, 0},
-		{"Ugaritic", Var, 0},
-		{"Unified_Ideograph", Var, 0},
-		{"Upper", Var, 0},
-		{"UpperCase", Const, 0},
-		{"UpperLower", Const, 0},
-		{"Vai", Var, 0},
-		{"Variation_Selector", Var, 0},
-		{"Version", Const, 0},
-		{"Vithkuqi", Var, 21},
-		{"Wancho", Var, 14},
-		{"Warang_Citi", Var, 4},
-		{"White_Space", Var, 0},
-		{"Yezidi", Var, 16},
-		{"Yi", Var, 0},
-		{"Z", Var, 0},
-		{"Zanabazar_Square", Var, 10},
-		{"Zl", Var, 0},
-		{"Zp", Var, 0},
-		{"Zs", Var, 0},
+		{"(SpecialCase).ToLower", Method, 0, ""},
+		{"(SpecialCase).ToTitle", Method, 0, ""},
+		{"(SpecialCase).ToUpper", Method, 0, ""},
+		{"ASCII_Hex_Digit", Var, 0, ""},
+		{"Adlam", Var, 7, ""},
+		{"Ahom", Var, 5, ""},
+		{"Anatolian_Hieroglyphs", Var, 5, ""},
+		{"Arabic", Var, 0, ""},
+		{"Armenian", Var, 0, ""},
+		{"Avestan", Var, 0, ""},
+		{"AzeriCase", Var, 0, ""},
+		{"Balinese", Var, 0, ""},
+		{"Bamum", Var, 0, ""},
+		{"Bassa_Vah", Var, 4, ""},
+		{"Batak", Var, 0, ""},
+		{"Bengali", Var, 0, ""},
+		{"Bhaiksuki", Var, 7, ""},
+		{"Bidi_Control", Var, 0, ""},
+		{"Bopomofo", Var, 0, ""},
+		{"Brahmi", Var, 0, ""},
+		{"Braille", Var, 0, ""},
+		{"Buginese", Var, 0, ""},
+		{"Buhid", Var, 0, ""},
+		{"C", Var, 0, ""},
+		{"Canadian_Aboriginal", Var, 0, ""},
+		{"Carian", Var, 0, ""},
+		{"CaseRange", Type, 0, ""},
+		{"CaseRange.Delta", Field, 0, ""},
+		{"CaseRange.Hi", Field, 0, ""},
+		{"CaseRange.Lo", Field, 0, ""},
+		{"CaseRanges", Var, 0, ""},
+		{"Categories", Var, 0, ""},
+		{"Caucasian_Albanian", Var, 4, ""},
+		{"Cc", Var, 0, ""},
+		{"Cf", Var, 0, ""},
+		{"Chakma", Var, 1, ""},
+		{"Cham", Var, 0, ""},
+		{"Cherokee", Var, 0, ""},
+		{"Chorasmian", Var, 16, ""},
+		{"Co", Var, 0, ""},
+		{"Common", Var, 0, ""},
+		{"Coptic", Var, 0, ""},
+		{"Cs", Var, 0, ""},
+		{"Cuneiform", Var, 0, ""},
+		{"Cypriot", Var, 0, ""},
+		{"Cypro_Minoan", Var, 21, ""},
+		{"Cyrillic", Var, 0, ""},
+		{"Dash", Var, 0, ""},
+		{"Deprecated", Var, 0, ""},
+		{"Deseret", Var, 0, ""},
+		{"Devanagari", Var, 0, ""},
+		{"Diacritic", Var, 0, ""},
+		{"Digit", Var, 0, ""},
+		{"Dives_Akuru", Var, 16, ""},
+		{"Dogra", Var, 13, ""},
+		{"Duployan", Var, 4, ""},
+		{"Egyptian_Hieroglyphs", Var, 0, ""},
+		{"Elbasan", Var, 4, ""},
+		{"Elymaic", Var, 14, ""},
+		{"Ethiopic", Var, 0, ""},
+		{"Extender", Var, 0, ""},
+		{"FoldCategory", Var, 0, ""},
+		{"FoldScript", Var, 0, ""},
+		{"Georgian", Var, 0, ""},
+		{"Glagolitic", Var, 0, ""},
+		{"Gothic", Var, 0, ""},
+		{"Grantha", Var, 4, ""},
+		{"GraphicRanges", Var, 0, ""},
+		{"Greek", Var, 0, ""},
+		{"Gujarati", Var, 0, ""},
+		{"Gunjala_Gondi", Var, 13, ""},
+		{"Gurmukhi", Var, 0, ""},
+		{"Han", Var, 0, ""},
+		{"Hangul", Var, 0, ""},
+		{"Hanifi_Rohingya", Var, 13, ""},
+		{"Hanunoo", Var, 0, ""},
+		{"Hatran", Var, 5, ""},
+		{"Hebrew", Var, 0, ""},
+		{"Hex_Digit", Var, 0, ""},
+		{"Hiragana", Var, 0, ""},
+		{"Hyphen", Var, 0, ""},
+		{"IDS_Binary_Operator", Var, 0, ""},
+		{"IDS_Trinary_Operator", Var, 0, ""},
+		{"Ideographic", Var, 0, ""},
+		{"Imperial_Aramaic", Var, 0, ""},
+		{"In", Func, 2, "func(r rune, ranges ...*RangeTable) bool"},
+		{"Inherited", Var, 0, ""},
+		{"Inscriptional_Pahlavi", Var, 0, ""},
+		{"Inscriptional_Parthian", Var, 0, ""},
+		{"Is", Func, 0, "func(rangeTab *RangeTable, r rune) bool"},
+		{"IsControl", Func, 0, "func(r rune) bool"},
+		{"IsDigit", Func, 0, "func(r rune) bool"},
+		{"IsGraphic", Func, 0, "func(r rune) bool"},
+		{"IsLetter", Func, 0, "func(r rune) bool"},
+		{"IsLower", Func, 0, "func(r rune) bool"},
+		{"IsMark", Func, 0, "func(r rune) bool"},
+		{"IsNumber", Func, 0, "func(r rune) bool"},
+		{"IsOneOf", Func, 0, "func(ranges []*RangeTable, r rune) bool"},
+		{"IsPrint", Func, 0, "func(r rune) bool"},
+		{"IsPunct", Func, 0, "func(r rune) bool"},
+		{"IsSpace", Func, 0, "func(r rune) bool"},
+		{"IsSymbol", Func, 0, "func(r rune) bool"},
+		{"IsTitle", Func, 0, "func(r rune) bool"},
+		{"IsUpper", Func, 0, "func(r rune) bool"},
+		{"Javanese", Var, 0, ""},
+		{"Join_Control", Var, 0, ""},
+		{"Kaithi", Var, 0, ""},
+		{"Kannada", Var, 0, ""},
+		{"Katakana", Var, 0, ""},
+		{"Kawi", Var, 21, ""},
+		{"Kayah_Li", Var, 0, ""},
+		{"Kharoshthi", Var, 0, ""},
+		{"Khitan_Small_Script", Var, 16, ""},
+		{"Khmer", Var, 0, ""},
+		{"Khojki", Var, 4, ""},
+		{"Khudawadi", Var, 4, ""},
+		{"L", Var, 0, ""},
+		{"Lao", Var, 0, ""},
+		{"Latin", Var, 0, ""},
+		{"Lepcha", Var, 0, ""},
+		{"Letter", Var, 0, ""},
+		{"Limbu", Var, 0, ""},
+		{"Linear_A", Var, 4, ""},
+		{"Linear_B", Var, 0, ""},
+		{"Lisu", Var, 0, ""},
+		{"Ll", Var, 0, ""},
+		{"Lm", Var, 0, ""},
+		{"Lo", Var, 0, ""},
+		{"Logical_Order_Exception", Var, 0, ""},
+		{"Lower", Var, 0, ""},
+		{"LowerCase", Const, 0, ""},
+		{"Lt", Var, 0, ""},
+		{"Lu", Var, 0, ""},
+		{"Lycian", Var, 0, ""},
+		{"Lydian", Var, 0, ""},
+		{"M", Var, 0, ""},
+		{"Mahajani", Var, 4, ""},
+		{"Makasar", Var, 13, ""},
+		{"Malayalam", Var, 0, ""},
+		{"Mandaic", Var, 0, ""},
+		{"Manichaean", Var, 4, ""},
+		{"Marchen", Var, 7, ""},
+		{"Mark", Var, 0, ""},
+		{"Masaram_Gondi", Var, 10, ""},
+		{"MaxASCII", Const, 0, ""},
+		{"MaxCase", Const, 0, ""},
+		{"MaxLatin1", Const, 0, ""},
+		{"MaxRune", Const, 0, ""},
+		{"Mc", Var, 0, ""},
+		{"Me", Var, 0, ""},
+		{"Medefaidrin", Var, 13, ""},
+		{"Meetei_Mayek", Var, 0, ""},
+		{"Mende_Kikakui", Var, 4, ""},
+		{"Meroitic_Cursive", Var, 1, ""},
+		{"Meroitic_Hieroglyphs", Var, 1, ""},
+		{"Miao", Var, 1, ""},
+		{"Mn", Var, 0, ""},
+		{"Modi", Var, 4, ""},
+		{"Mongolian", Var, 0, ""},
+		{"Mro", Var, 4, ""},
+		{"Multani", Var, 5, ""},
+		{"Myanmar", Var, 0, ""},
+		{"N", Var, 0, ""},
+		{"Nabataean", Var, 4, ""},
+		{"Nag_Mundari", Var, 21, ""},
+		{"Nandinagari", Var, 14, ""},
+		{"Nd", Var, 0, ""},
+		{"New_Tai_Lue", Var, 0, ""},
+		{"Newa", Var, 7, ""},
+		{"Nko", Var, 0, ""},
+		{"Nl", Var, 0, ""},
+		{"No", Var, 0, ""},
+		{"Noncharacter_Code_Point", Var, 0, ""},
+		{"Number", Var, 0, ""},
+		{"Nushu", Var, 10, ""},
+		{"Nyiakeng_Puachue_Hmong", Var, 14, ""},
+		{"Ogham", Var, 0, ""},
+		{"Ol_Chiki", Var, 0, ""},
+		{"Old_Hungarian", Var, 5, ""},
+		{"Old_Italic", Var, 0, ""},
+		{"Old_North_Arabian", Var, 4, ""},
+		{"Old_Permic", Var, 4, ""},
+		{"Old_Persian", Var, 0, ""},
+		{"Old_Sogdian", Var, 13, ""},
+		{"Old_South_Arabian", Var, 0, ""},
+		{"Old_Turkic", Var, 0, ""},
+		{"Old_Uyghur", Var, 21, ""},
+		{"Oriya", Var, 0, ""},
+		{"Osage", Var, 7, ""},
+		{"Osmanya", Var, 0, ""},
+		{"Other", Var, 0, ""},
+		{"Other_Alphabetic", Var, 0, ""},
+		{"Other_Default_Ignorable_Code_Point", Var, 0, ""},
+		{"Other_Grapheme_Extend", Var, 0, ""},
+		{"Other_ID_Continue", Var, 0, ""},
+		{"Other_ID_Start", Var, 0, ""},
+		{"Other_Lowercase", Var, 0, ""},
+		{"Other_Math", Var, 0, ""},
+		{"Other_Uppercase", Var, 0, ""},
+		{"P", Var, 0, ""},
+		{"Pahawh_Hmong", Var, 4, ""},
+		{"Palmyrene", Var, 4, ""},
+		{"Pattern_Syntax", Var, 0, ""},
+		{"Pattern_White_Space", Var, 0, ""},
+		{"Pau_Cin_Hau", Var, 4, ""},
+		{"Pc", Var, 0, ""},
+		{"Pd", Var, 0, ""},
+		{"Pe", Var, 0, ""},
+		{"Pf", Var, 0, ""},
+		{"Phags_Pa", Var, 0, ""},
+		{"Phoenician", Var, 0, ""},
+		{"Pi", Var, 0, ""},
+		{"Po", Var, 0, ""},
+		{"Prepended_Concatenation_Mark", Var, 7, ""},
+		{"PrintRanges", Var, 0, ""},
+		{"Properties", Var, 0, ""},
+		{"Ps", Var, 0, ""},
+		{"Psalter_Pahlavi", Var, 4, ""},
+		{"Punct", Var, 0, ""},
+		{"Quotation_Mark", Var, 0, ""},
+		{"Radical", Var, 0, ""},
+		{"Range16", Type, 0, ""},
+		{"Range16.Hi", Field, 0, ""},
+		{"Range16.Lo", Field, 0, ""},
+		{"Range16.Stride", Field, 0, ""},
+		{"Range32", Type, 0, ""},
+		{"Range32.Hi", Field, 0, ""},
+		{"Range32.Lo", Field, 0, ""},
+		{"Range32.Stride", Field, 0, ""},
+		{"RangeTable", Type, 0, ""},
+		{"RangeTable.LatinOffset", Field, 1, ""},
+		{"RangeTable.R16", Field, 0, ""},
+		{"RangeTable.R32", Field, 0, ""},
+		{"Regional_Indicator", Var, 10, ""},
+		{"Rejang", Var, 0, ""},
+		{"ReplacementChar", Const, 0, ""},
+		{"Runic", Var, 0, ""},
+		{"S", Var, 0, ""},
+		{"STerm", Var, 0, ""},
+		{"Samaritan", Var, 0, ""},
+		{"Saurashtra", Var, 0, ""},
+		{"Sc", Var, 0, ""},
+		{"Scripts", Var, 0, ""},
+		{"Sentence_Terminal", Var, 7, ""},
+		{"Sharada", Var, 1, ""},
+		{"Shavian", Var, 0, ""},
+		{"Siddham", Var, 4, ""},
+		{"SignWriting", Var, 5, ""},
+		{"SimpleFold", Func, 0, "func(r rune) rune"},
+		{"Sinhala", Var, 0, ""},
+		{"Sk", Var, 0, ""},
+		{"Sm", Var, 0, ""},
+		{"So", Var, 0, ""},
+		{"Soft_Dotted", Var, 0, ""},
+		{"Sogdian", Var, 13, ""},
+		{"Sora_Sompeng", Var, 1, ""},
+		{"Soyombo", Var, 10, ""},
+		{"Space", Var, 0, ""},
+		{"SpecialCase", Type, 0, ""},
+		{"Sundanese", Var, 0, ""},
+		{"Syloti_Nagri", Var, 0, ""},
+		{"Symbol", Var, 0, ""},
+		{"Syriac", Var, 0, ""},
+		{"Tagalog", Var, 0, ""},
+		{"Tagbanwa", Var, 0, ""},
+		{"Tai_Le", Var, 0, ""},
+		{"Tai_Tham", Var, 0, ""},
+		{"Tai_Viet", Var, 0, ""},
+		{"Takri", Var, 1, ""},
+		{"Tamil", Var, 0, ""},
+		{"Tangsa", Var, 21, ""},
+		{"Tangut", Var, 7, ""},
+		{"Telugu", Var, 0, ""},
+		{"Terminal_Punctuation", Var, 0, ""},
+		{"Thaana", Var, 0, ""},
+		{"Thai", Var, 0, ""},
+		{"Tibetan", Var, 0, ""},
+		{"Tifinagh", Var, 0, ""},
+		{"Tirhuta", Var, 4, ""},
+		{"Title", Var, 0, ""},
+		{"TitleCase", Const, 0, ""},
+		{"To", Func, 0, "func(_case int, r rune) rune"},
+		{"ToLower", Func, 0, "func(r rune) rune"},
+		{"ToTitle", Func, 0, "func(r rune) rune"},
+		{"ToUpper", Func, 0, "func(r rune) rune"},
+		{"Toto", Var, 21, ""},
+		{"TurkishCase", Var, 0, ""},
+		{"Ugaritic", Var, 0, ""},
+		{"Unified_Ideograph", Var, 0, ""},
+		{"Upper", Var, 0, ""},
+		{"UpperCase", Const, 0, ""},
+		{"UpperLower", Const, 0, ""},
+		{"Vai", Var, 0, ""},
+		{"Variation_Selector", Var, 0, ""},
+		{"Version", Const, 0, ""},
+		{"Vithkuqi", Var, 21, ""},
+		{"Wancho", Var, 14, ""},
+		{"Warang_Citi", Var, 4, ""},
+		{"White_Space", Var, 0, ""},
+		{"Yezidi", Var, 16, ""},
+		{"Yi", Var, 0, ""},
+		{"Z", Var, 0, ""},
+		{"Zanabazar_Square", Var, 10, ""},
+		{"Zl", Var, 0, ""},
+		{"Zp", Var, 0, ""},
+		{"Zs", Var, 0, ""},
 	},
 	"unicode/utf16": {
-		{"AppendRune", Func, 20},
-		{"Decode", Func, 0},
-		{"DecodeRune", Func, 0},
-		{"Encode", Func, 0},
-		{"EncodeRune", Func, 0},
-		{"IsSurrogate", Func, 0},
-		{"RuneLen", Func, 23},
+		{"AppendRune", Func, 20, "func(a []uint16, r rune) []uint16"},
+		{"Decode", Func, 0, "func(s []uint16) []rune"},
+		{"DecodeRune", Func, 0, "func(r1 rune, r2 rune) rune"},
+		{"Encode", Func, 0, "func(s []rune) []uint16"},
+		{"EncodeRune", Func, 0, "func(r rune) (r1 rune, r2 rune)"},
+		{"IsSurrogate", Func, 0, "func(r rune) bool"},
+		{"RuneLen", Func, 23, "func(r rune) int"},
 	},
 	"unicode/utf8": {
-		{"AppendRune", Func, 18},
-		{"DecodeLastRune", Func, 0},
-		{"DecodeLastRuneInString", Func, 0},
-		{"DecodeRune", Func, 0},
-		{"DecodeRuneInString", Func, 0},
-		{"EncodeRune", Func, 0},
-		{"FullRune", Func, 0},
-		{"FullRuneInString", Func, 0},
-		{"MaxRune", Const, 0},
-		{"RuneCount", Func, 0},
-		{"RuneCountInString", Func, 0},
-		{"RuneError", Const, 0},
-		{"RuneLen", Func, 0},
-		{"RuneSelf", Const, 0},
-		{"RuneStart", Func, 0},
-		{"UTFMax", Const, 0},
-		{"Valid", Func, 0},
-		{"ValidRune", Func, 1},
-		{"ValidString", Func, 0},
+		{"AppendRune", Func, 18, "func(p []byte, r rune) []byte"},
+		{"DecodeLastRune", Func, 0, "func(p []byte) (r rune, size int)"},
+		{"DecodeLastRuneInString", Func, 0, "func(s string) (r rune, size int)"},
+		{"DecodeRune", Func, 0, "func(p []byte) (r rune, size int)"},
+		{"DecodeRuneInString", Func, 0, "func(s string) (r rune, size int)"},
+		{"EncodeRune", Func, 0, "func(p []byte, r rune) int"},
+		{"FullRune", Func, 0, "func(p []byte) bool"},
+		{"FullRuneInString", Func, 0, "func(s string) bool"},
+		{"MaxRune", Const, 0, ""},
+		{"RuneCount", Func, 0, "func(p []byte) int"},
+		{"RuneCountInString", Func, 0, "func(s string) (n int)"},
+		{"RuneError", Const, 0, ""},
+		{"RuneLen", Func, 0, "func(r rune) int"},
+		{"RuneSelf", Const, 0, ""},
+		{"RuneStart", Func, 0, "func(b byte) bool"},
+		{"UTFMax", Const, 0, ""},
+		{"Valid", Func, 0, "func(p []byte) bool"},
+		{"ValidRune", Func, 1, "func(r rune) bool"},
+		{"ValidString", Func, 0, "func(s string) bool"},
 	},
 	"unique": {
-		{"(Handle).Value", Method, 23},
-		{"Handle", Type, 23},
-		{"Make", Func, 23},
+		{"(Handle).Value", Method, 23, ""},
+		{"Handle", Type, 23, ""},
+		{"Make", Func, 23, "func[T comparable](value T) Handle[T]"},
 	},
 	"unsafe": {
-		{"Add", Func, 0},
-		{"Alignof", Func, 0},
-		{"Offsetof", Func, 0},
-		{"Pointer", Type, 0},
-		{"Sizeof", Func, 0},
-		{"Slice", Func, 0},
-		{"SliceData", Func, 0},
-		{"String", Func, 0},
-		{"StringData", Func, 0},
+		{"Add", Func, 0, ""},
+		{"Alignof", Func, 0, ""},
+		{"Offsetof", Func, 0, ""},
+		{"Pointer", Type, 0, ""},
+		{"Sizeof", Func, 0, ""},
+		{"Slice", Func, 0, ""},
+		{"SliceData", Func, 0, ""},
+		{"String", Func, 0, ""},
+		{"StringData", Func, 0, ""},
 	},
 	"weak": {
-		{"(Pointer).Value", Method, 24},
-		{"Make", Func, 24},
-		{"Pointer", Type, 24},
+		{"(Pointer).Value", Method, 24, ""},
+		{"Make", Func, 24, "func[T any](ptr *T) Pointer[T]"},
+		{"Pointer", Type, 24, ""},
 	},
 }
diff --git a/upstream/vendor/golang.org/x/tools/internal/stdlib/stdlib.go b/upstream/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
index 3d96d3bf68..e223e0f340 100644
--- a/upstream/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
+++ b/upstream/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
@@ -18,6 +18,14 @@ type Symbol struct {
 	Name    string
 	Kind    Kind
 	Version Version // Go version that first included the symbol
+	// Signature provides the type of a function (defined only for Kind=Func).
+	// Imported types are denoted as pkg.T; pkg is not fully qualified.
+	// TODO(adonovan): use an unambiguous encoding that is parseable.
+	//
+	// Example2:
+	//    func[M ~map[K]V, K comparable, V any](m M) M
+	//    func(fi fs.FileInfo, link string) (*Header, error)
+	Signature string // if Kind == stdlib.Func
 }
 
 // A Kind indicates the kind of a symbol:
diff --git a/upstream/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go b/upstream/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go
index 649c82b6be..3db2a135b9 100644
--- a/upstream/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go
+++ b/upstream/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go
@@ -65,14 +65,16 @@ func ClassifyCall(info *types.Info, call *ast.CallExpr) CallKind {
 	if info.Types == nil {
 		panic("ClassifyCall: info.Types is nil")
 	}
-	if info.Types[call.Fun].IsType() {
+	tv := info.Types[call.Fun]
+	if tv.IsType() {
 		return CallConversion
 	}
+	if tv.IsBuiltin() {
+		return CallBuiltin
+	}
 	obj := info.Uses[UsedIdent(info, call.Fun)]
 	// Classify the call by the type of the object, if any.
 	switch obj := obj.(type) {
-	case *types.Builtin:
-		return CallBuiltin
 	case *types.Func:
 		if interfaceMethod(obj) {
 			return CallInterface
diff --git a/upstream/vendor/golang.org/x/tools/internal/typesinternal/types.go b/upstream/vendor/golang.org/x/tools/internal/typesinternal/types.go
index cc244689ef..a5cd7e8dbf 100644
--- a/upstream/vendor/golang.org/x/tools/internal/typesinternal/types.go
+++ b/upstream/vendor/golang.org/x/tools/internal/typesinternal/types.go
@@ -69,6 +69,34 @@ func NameRelativeTo(pkg *types.Package) types.Qualifier {
 	}
 }
 
+// TypeNameFor returns the type name symbol for the specified type, if
+// it is a [*types.Alias], [*types.Named], [*types.TypeParam], or a
+// [*types.Basic] representing a type.
+//
+// For all other types, and for Basic types representing a builtin,
+// constant, or nil, it returns nil. Be careful not to convert the
+// resulting nil pointer to a [types.Object]!
+//
+// If t is the type of a constant, it may be an "untyped" type, which
+// has no TypeName. To access the name of such types (e.g. "untyped
+// int"), use [types.Basic.Name].
+func TypeNameFor(t types.Type) *types.TypeName {
+	switch t := t.(type) {
+	case *types.Alias:
+		return t.Obj()
+	case *types.Named:
+		return t.Obj()
+	case *types.TypeParam:
+		return t.Obj()
+	case *types.Basic:
+		// See issues #71886 and #66890 for some history.
+		if tname, ok := types.Universe.Lookup(t.Name()).(*types.TypeName); ok {
+			return tname
+		}
+	}
+	return nil
+}
+
 // A NamedOrAlias is a [types.Type] that is named (as
 // defined by the spec) and capable of bearing type parameters: it
 // abstracts aliases ([types.Alias]) and defined types
@@ -77,7 +105,7 @@ func NameRelativeTo(pkg *types.Package) types.Qualifier {
 // Every type declared by an explicit "type" declaration is a
 // NamedOrAlias. (Built-in type symbols may additionally
 // have type [types.Basic], which is not a NamedOrAlias,
-// though the spec regards them as "named".)
+// though the spec regards them as "named"; see [TypeNameFor].)
 //
 // NamedOrAlias cannot expose the Origin method, because
 // [types.Alias.Origin] and [types.Named.Origin] have different
@@ -85,32 +113,15 @@ func NameRelativeTo(pkg *types.Package) types.Qualifier {
 type NamedOrAlias interface {
 	types.Type
 	Obj() *types.TypeName
-	// TODO(hxjiang): add method TypeArgs() *types.TypeList after stop supporting go1.22.
-}
-
-// TypeParams is a light shim around t.TypeParams().
-// (go/types.Alias).TypeParams requires >= 1.23.
-func TypeParams(t NamedOrAlias) *types.TypeParamList {
-	switch t := t.(type) {
-	case *types.Alias:
-		return aliases.TypeParams(t)
-	case *types.Named:
-		return t.TypeParams()
-	}
-	return nil
+	TypeArgs() *types.TypeList
+	TypeParams() *types.TypeParamList
+	SetTypeParams(tparams []*types.TypeParam)
 }
 
-// TypeArgs is a light shim around t.TypeArgs().
-// (go/types.Alias).TypeArgs requires >= 1.23.
-func TypeArgs(t NamedOrAlias) *types.TypeList {
-	switch t := t.(type) {
-	case *types.Alias:
-		return aliases.TypeArgs(t)
-	case *types.Named:
-		return t.TypeArgs()
-	}
-	return nil
-}
+var (
+	_ NamedOrAlias = (*types.Alias)(nil)
+	_ NamedOrAlias = (*types.Named)(nil)
+)
 
 // Origin returns the generic type of the Named or Alias type t if it
 // is instantiated, otherwise it returns t.
diff --git a/upstream/vendor/k8s.io/gengo/v2/README.md b/upstream/vendor/k8s.io/gengo/v2/README.md
index 79d1070d15..e1dff4b4b7 100644
--- a/upstream/vendor/k8s.io/gengo/v2/README.md
+++ b/upstream/vendor/k8s.io/gengo/v2/README.md
@@ -50,4 +50,4 @@ The `tracer` example in this repo can be used to examine all of the hooks.
 
 ## Contributing
 
-Please see [CONTRIBUTING.md](CONTRIBUTING.md) for instructions on how to contribute.
+Please see [CONTRIBUTING.md](../CONTRIBUTING.md) for instructions on how to contribute.
diff --git a/upstream/vendor/k8s.io/gengo/v2/codetags/extractor.go b/upstream/vendor/k8s.io/gengo/v2/codetags/extractor.go
new file mode 100644
index 0000000000..5e58b00831
--- /dev/null
+++ b/upstream/vendor/k8s.io/gengo/v2/codetags/extractor.go
@@ -0,0 +1,85 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package codetags
+
+import (
+	"strings"
+	"unicode/utf8"
+)
+
+// Extract identifies and collects lines containing special metadata tags.
+// It processes only lines that begin with the prefix.
+//
+// The portion of a line immediately following the prefix is treated as
+// a potential tag name. To be considered valid, this tag name must
+// match the regular expression `[a-zA-Z_][a-zA-Z0-9_.-:]*`.
+//
+// Extract returns a map where each key is a valid tag name found in
+// lines that begin with the prefix.
+// The value for each key is a slice of strings. Each string in this slice
+// represents the contents of an original line after the prefix has been removed.
+//
+// Example: When called with prefix "+k8s:", lines:
+//
+//	Comment line without marker
+//	+k8s:noArgs # comment
+//	+withValue=value1
+//	+withValue=value2
+//	+k8s:withArg(arg1)=value1
+//	+k8s:withArg(arg2)=value2 # comment
+//	+k8s:withNamedArgs(arg1=value1, arg2=value2)=value
+//
+// Then this function will return:
+//
+//	map[string][]string{
+//		"noArgs":        {"noArgs # comment"},
+//		"withArg":       {"withArg(arg1)=value1", "withArg(arg2)=value2 # comment"},
+//		"withNamedArgs": {"withNamedArgs(arg1=value1, arg2=value2)=value"},
+//	}
+func Extract(prefix string, lines []string) map[string][]string {
+	out := map[string][]string{}
+	for _, line := range lines {
+		line = strings.TrimLeft(line, " \t")
+		if !strings.HasPrefix(line, prefix) {
+			continue
+		}
+		line = line[len(prefix):]
+
+		// Find the end of the presumed tag name.
+		nameEnd := findNameEnd(line)
+		name := line[:nameEnd]
+		out[name] = append(out[name], line)
+	}
+	return out
+}
+
+// findNameEnd matches a tag in the same way as the parser.
+func findNameEnd(s string) int {
+	if len(s) == 0 {
+		return 0
+	}
+	if r, _ := utf8.DecodeRuneInString(s); !isIdentBegin(r) {
+		return 0
+	}
+	idx := strings.IndexFunc(s, func(r rune) bool {
+		return !(isTagNameInterior(r))
+	})
+	if idx == -1 {
+		return len(s)
+	}
+	return idx
+}
diff --git a/upstream/vendor/k8s.io/gengo/v2/codetags/parser.go b/upstream/vendor/k8s.io/gengo/v2/codetags/parser.go
new file mode 100644
index 0000000000..8ff49b039e
--- /dev/null
+++ b/upstream/vendor/k8s.io/gengo/v2/codetags/parser.go
@@ -0,0 +1,407 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package codetags
+
+import (
+	"fmt"
+	"strings"
+	"unicode"
+)
+
+// Parse parses a tag string into a Tag, or returns an error if the tag
+// string fails to parse.
+//
+// ParseOption may be provided to modify the behavior of the parser. The below
+// describes the default behavior.
+//
+// A tag consists of a name, optional arguments, and an optional scalar value or
+// tag value. For example,
+//
+//	"name"
+//	"name=50"
+//	"name("featureX")=50"
+//	"name(limit: 10, path: "/xyz")=text value"
+//	"name(limit: 10, path: "/xyz")=+anotherTag(size: 100)"
+//
+// Arguments are optional and may be either:
+//   - A single positional argument.
+//   - One or more named arguments (in the format `name: value`).
+//   - (Positional and named arguments cannot be mixed.)
+//
+// For example,
+//
+//	"name()"
+//	"name(arg)"
+//	"name(namedArg1: argValue1)"
+//	"name(namedArg1: argValue1, namedArg2: argValue2)"
+//
+// Argument values may be strings, ints, booleans, or identifiers.
+//
+// For example,
+//
+//	"name("double-quoted")"
+//	"name(`backtick-quoted`)"
+//	"name(100)"
+//	"name(true)"
+//	"name(arg1: identifier)"
+//	"name(arg1:`string value`)"
+//	"name(arg1: 100)"
+//	"name(arg1: true)"
+//
+// Note: When processing Go source code comments, the Extract function is
+// typically used first to find and isolate tag strings matching a specific
+// prefix. Those extracted strings can then be parsed using this function.
+//
+// The value part of the tag is optional and follows an equals sign "=". If a
+// value is present, it must be a string, int, boolean, identifier, or tag.
+//
+// For example,
+//
+//	"name" # no value
+//	"name=identifier"
+//	"name="double-quoted value""
+//	"name=`backtick-quoted value`"
+//	"name(100)"
+//	"name(true)"
+//	"name=+anotherTag"
+//	"name=+anotherTag(size: 100)"
+//
+// Trailing comments are ignored unless the RawValues option is enabled, in which
+// case they are treated as part of the value.
+//
+// For example,
+//
+//	"key=value # This comment is ignored"
+//
+// Formal Grammar:
+//
+//              ::=  [ "(" [  ] ")" ] [ ( "="  | "=+"  ) ]
+//             ::=  | 
+//        ::=  [ ","  ]*
+//  ::=  ":" 
+//            ::=  |  |  | 
+//
+//        ::= [a-zA-Z_][a-zA-Z0-9_-.:]*
+//     ::= [a-zA-Z_][a-zA-Z0-9_-.]*
+//         ::= /* Go-style double-quoted or backtick-quoted strings,
+// ...                    with standard Go escape sequences for double-quoted strings. */
+//            ::= /* Standard Go integer literals (decimal, 0x hex, 0o octal, 0b binary),
+// ...                    with an optional +/- prefix. */
+//           ::= "true" | "false"
+func Parse(tag string, options ...ParseOption) (Tag, error) {
+	opts := parseOpts{}
+	for _, o := range options {
+		o(&opts)
+	}
+
+	tag = strings.TrimSpace(tag)
+	return parseTag(tag, opts)
+}
+
+// ParseAll calls Parse on each tag in the input slice.
+func ParseAll(tags []string, options ...ParseOption) ([]Tag, error) {
+	var out []Tag
+	for _, tag := range tags {
+		parsed, err := Parse(tag, options...)
+		if err != nil {
+			return nil, err
+		}
+		out = append(out, parsed)
+	}
+	return out, nil
+}
+
+type parseOpts struct {
+	rawValues bool
+}
+
+// ParseOption provides a parser option.
+type ParseOption func(*parseOpts)
+
+// RawValues skips parsing of the value part of the tag. If enabled, the Value
+// in the parse response will contain all text following the "=" sign, up to the last
+// non-whitespace character, and ValueType will be set to ValueTypeRaw.
+// Default: disabled
+func RawValues(enabled bool) ParseOption {
+	return func(opts *parseOpts) {
+		opts.rawValues = enabled
+	}
+}
+
+func parseTag(input string, opts parseOpts) (Tag, error) {
+	const (
+		stTag           = "stTag"
+		stMaybeArgs     = "stMaybeArgs"
+		stArg           = "stArg"
+		stArgEndOfToken = "stArgEndOfToken"
+		stMaybeValue    = "stMaybeValue"
+		stValue         = "stValue"
+		stMaybeComment  = "stMaybeComment"
+	)
+	var startTag, endTag *Tag // both ends of the chain when parsing chained tags
+
+	// accumulators
+	var tagName string      // current tag name
+	var value string        // current value
+	var valueType ValueType // current value type
+	cur := Arg{}            // current argument
+	var args []Arg          // current arguments slice
+
+	s := scanner{buf: []rune(input)} // scanner for parsing the tag string
+	var incomplete bool              // tracks if a token is incomplete
+
+	// These are defined outside the loop to make errors easier.
+	saveArg := func(v string, t ArgType) {
+		cur.Value = v
+		cur.Type = t
+		args = append(args, cur)
+		cur = Arg{}
+	}
+	saveInt := func(v string) { saveArg(v, ArgTypeInt) }
+	saveString := func(v string) { saveArg(v, ArgTypeString) }
+	saveBoolOrString := func(value string) {
+		if value == "true" || value == "false" {
+			saveArg(value, ArgTypeBool)
+		} else {
+			saveArg(value, ArgTypeString)
+		}
+	}
+	saveName := func(value string) {
+		cur.Name = value
+	}
+	saveTag := func() error {
+		usingNamedArgs := false
+		for i, arg := range args {
+			if (usingNamedArgs && arg.Name == "") || (!usingNamedArgs && arg.Name != "" && i > 0) {
+				return fmt.Errorf("can't mix named and positional arguments")
+			}
+			if arg.Name != "" {
+				usingNamedArgs = true
+			}
+		}
+		if !usingNamedArgs && len(args) > 1 {
+			return fmt.Errorf("multiple arguments must use 'name: value' syntax")
+		}
+		newTag := &Tag{Name: tagName, Args: args}
+		if startTag == nil {
+			startTag = newTag
+			endTag = newTag
+		} else {
+			endTag.ValueTag = newTag
+			endTag.ValueType = ValueTypeTag
+			endTag = newTag
+		}
+		args = nil // Reset to nil instead of empty slice
+		return nil
+	}
+	saveValue := func() {
+		endTag.Value = value
+		endTag.ValueType = valueType
+	}
+	var err error
+	st := stTag
+parseLoop:
+	for r := s.peek(); r != EOF; r = s.peek() {
+		switch st {
+		case stTag: // Any leading whitespace is expected to be trimmed before parsing.
+			switch {
+			case isIdentBegin(r):
+				tagName, err = s.nextIdent(isTagNameInterior)
+				if err != nil {
+					return Tag{}, err
+				}
+				st = stMaybeArgs
+			default:
+				break parseLoop
+			}
+		case stMaybeArgs:
+			switch {
+			case r == '(':
+				s.next() // consume (
+				incomplete = true
+				st = stArg
+			case r == '=':
+				s.next() // consume =
+				if opts.rawValues {
+					// only raw values support empty values following =
+					valueType = ValueTypeRaw
+				} else {
+					incomplete = true
+				}
+				st = stValue
+			default:
+				st = stMaybeComment
+			}
+		case stArg:
+			switch {
+			case r == ')':
+				s.next() // consume )
+				incomplete = false
+				st = stMaybeValue
+			case r == '-' || r == '+' || unicode.IsDigit(r):
+				number, err := s.nextNumber()
+				if err != nil {
+					return Tag{}, err
+				}
+				saveInt(number)
+				st = stArgEndOfToken
+			case r == '"' || r == '`':
+				str, err := s.nextString()
+				if err != nil {
+					return Tag{}, err
+				}
+				saveString(str)
+				st = stArgEndOfToken
+			case isIdentBegin(r):
+				identifier, err := s.nextIdent(isIdentInterior)
+				if err != nil {
+					return Tag{}, err
+				}
+				r = s.peek() // reset r after nextIdent
+
+				switch {
+				case r == ',' || r == ')': // positional arg
+					if r == ',' {
+						r = s.skipWhitespace() // allow whitespace after ,
+					}
+					saveBoolOrString(identifier)
+					st = stArgEndOfToken
+				case r == ':': // named arg
+					s.next()               // consume :
+					r = s.skipWhitespace() // allow whitespace after :
+					saveName(identifier)
+					st = stArg
+				default:
+					break parseLoop
+				}
+			default:
+				break parseLoop
+			}
+		case stArgEndOfToken:
+			switch {
+			case r == ',':
+				s.next()               // consume ,
+				r = s.skipWhitespace() // allow whitespace after ,
+				st = stArg
+			case r == ')':
+				s.next() // consume )
+				incomplete = false
+				st = stMaybeValue
+			default:
+				break parseLoop
+			}
+		case stMaybeValue:
+			switch {
+			case r == '=':
+				s.next() // consume =
+				if opts.rawValues {
+					// Empty values are allowed for raw.
+					// Since = might be the last char in the input, we need
+					// to record the valueType as raw immediately.
+					valueType = ValueTypeRaw
+				}
+				st = stValue
+			default:
+				st = stMaybeComment
+			}
+		case stValue:
+			switch {
+			case opts.rawValues: // When enabled, consume all remaining chars
+				incomplete = false
+				value = s.remainder()
+				break parseLoop
+			case r == '+' && isIdentBegin(s.peekN(1)): // tag value
+				incomplete = false
+				s.next() // consume +
+				if err := saveTag(); err != nil {
+					return Tag{}, err
+				}
+				st = stTag
+			case r == '-' || r == '+' || unicode.IsDigit(r):
+				incomplete = false
+				number, err := s.nextNumber()
+				valueType = ValueTypeInt
+				if err != nil {
+					return Tag{}, err
+				}
+				value = number
+				st = stMaybeComment
+			case r == '"' || r == '`':
+				incomplete = false
+				str, err := s.nextString()
+				if err != nil {
+					return Tag{}, err
+				}
+				value = str
+				valueType = ValueTypeString
+				st = stMaybeComment
+			case isIdentBegin(r):
+				incomplete = false
+				str, err := s.nextIdent(isIdentInterior)
+				if err != nil {
+					return Tag{}, err
+				}
+				value = str
+				if str == "true" || str == "false" {
+					valueType = ValueTypeBool
+				} else {
+					valueType = ValueTypeString
+				}
+				st = stMaybeComment
+			default:
+				break parseLoop
+			}
+		case stMaybeComment:
+			switch {
+			case s.nextIsTrailingComment():
+				s.remainder()
+			default:
+				break parseLoop
+			}
+		default:
+			return Tag{}, fmt.Errorf("unexpected internal parser error: unknown state: %s at position %d", st, s.pos)
+		}
+	}
+	if s.peek() != EOF {
+		return Tag{}, fmt.Errorf("unexpected character %q at position %d", s.next(), s.pos)
+	}
+	if incomplete {
+		return Tag{}, fmt.Errorf("unexpected end of input")
+	}
+	if err := saveTag(); err != nil {
+		return Tag{}, err
+	}
+	if len(valueType) > 0 {
+		saveValue()
+	}
+	if startTag == nil {
+		return Tag{}, fmt.Errorf("unexpected internal parser error: no tags parsed")
+	}
+	return *startTag, nil
+}
+
+func isIdentBegin(r rune) bool {
+	return unicode.IsLetter(r) || r == '_'
+}
+
+func isIdentInterior(r rune) bool {
+	return unicode.IsLetter(r) || unicode.IsDigit(r) || r == '_' || r == '.' || r == '-'
+}
+
+func isTagNameInterior(r rune) bool {
+	return isIdentInterior(r) || r == ':'
+}
diff --git a/upstream/vendor/k8s.io/gengo/v2/codetags/scanner.go b/upstream/vendor/k8s.io/gengo/v2/codetags/scanner.go
new file mode 100644
index 0000000000..5204e347f8
--- /dev/null
+++ b/upstream/vendor/k8s.io/gengo/v2/codetags/scanner.go
@@ -0,0 +1,228 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package codetags
+
+import (
+	"bytes"
+	"fmt"
+	"strconv"
+	"strings"
+	"unicode"
+)
+
+type scanner struct {
+	buf []rune
+	pos int
+}
+
+func (s *scanner) next() rune {
+	if s.pos >= len(s.buf) {
+		return EOF
+	}
+	r := s.buf[s.pos]
+	s.pos++
+	return r
+}
+
+func (s *scanner) peek() rune {
+	return s.peekN(0)
+}
+
+func (s *scanner) peekN(n int) rune {
+	if s.pos+n >= len(s.buf) {
+		return EOF
+	}
+	return s.buf[s.pos+n]
+}
+
+func (s *scanner) skipWhitespace() rune {
+	for r := s.peek(); unicode.IsSpace(r); r = s.peek() {
+		s.next()
+	}
+	return s.peek()
+}
+
+func (s *scanner) remainder() string {
+	result := string(s.buf[s.pos:])
+	s.pos = len(s.buf)
+	return result
+}
+
+const (
+	EOF = -1
+)
+
+func (s *scanner) nextIsTrailingComment() bool {
+	i := 0
+	for ; unicode.IsSpace(s.peekN(i)); i++ {
+	}
+	return s.peekN(i) == '#'
+}
+
+func (s *scanner) nextNumber() (string, error) {
+	const (
+		stBegin  = "stBegin"
+		stPrefix = "stPrefix"
+		stPosNeg = "stPosNeg"
+		stNumber = "stNumber"
+	)
+	var buf bytes.Buffer
+	st := stBegin
+
+parseLoop:
+	for r := s.peek(); r != EOF; r = s.peek() {
+		switch st {
+		case stBegin:
+			switch {
+			case r == '0':
+				buf.WriteRune(s.next())
+				st = stPrefix
+			case r == '+' || r == '-':
+				buf.WriteRune(s.next())
+				st = stPosNeg
+			case unicode.IsDigit(r):
+				buf.WriteRune(s.next())
+				st = stNumber
+			default:
+				break parseLoop
+			}
+		case stPosNeg:
+			switch {
+			case r == '0':
+				buf.WriteRune(s.next())
+				st = stPrefix
+			case unicode.IsDigit(r):
+				buf.WriteRune(s.next())
+				st = stNumber
+			default:
+				break parseLoop
+			}
+		case stPrefix:
+			switch {
+			case unicode.IsDigit(r):
+				buf.WriteRune(s.next())
+				st = stNumber
+			case r == 'x' || r == 'o' || r == 'b':
+				buf.WriteRune(s.next())
+				st = stNumber
+			default:
+				break parseLoop
+			}
+		case stNumber:
+			const hexits = "abcdefABCDEF"
+			switch {
+			case unicode.IsDigit(r) || strings.Contains(hexits, string(r)):
+				buf.WriteRune(s.next())
+			default:
+				break parseLoop
+			}
+		default:
+			return "", fmt.Errorf("unexpected internal parser error: unknown state: %s at position %d", st, s.pos)
+		}
+	}
+	numStr := buf.String()
+	if _, err := strconv.ParseInt(numStr, 0, 64); err != nil {
+		return "", fmt.Errorf("invalid number %q at position %d", numStr, s.pos)
+	}
+	return numStr, nil
+}
+
+func (s *scanner) nextString() (string, error) {
+	const (
+		stBegin        = "stBegin"
+		stQuotedString = "stQuotedString"
+		stEscape       = "stEscape"
+	)
+	var buf bytes.Buffer
+	var quote rune
+	var incomplete bool
+	st := stBegin
+
+parseLoop:
+	for r := s.peek(); r != EOF; r = s.peek() {
+		switch st {
+		case stBegin:
+			switch {
+			case r == '"' || r == '`':
+				incomplete = true
+				quote = s.next() // consume quote
+				st = stQuotedString
+			default:
+				return "", fmt.Errorf("expected string at position %d", s.pos)
+			}
+		case stQuotedString:
+			switch {
+			case r == '\\':
+				s.next() // consume escape
+				st = stEscape
+			case r == quote:
+				incomplete = false
+				s.next()
+				break parseLoop
+			default:
+				buf.WriteRune(s.next())
+			}
+		case stEscape:
+			switch {
+			case r == quote || r == '\\':
+				buf.WriteRune(s.next())
+				st = stQuotedString
+			default:
+				return "", fmt.Errorf("unhandled escaped character %q", r)
+			}
+		default:
+			return "", fmt.Errorf("unexpected internal parser error: unknown state: %s at position %d", st, s.pos)
+		}
+	}
+	if incomplete {
+		return "", fmt.Errorf("unterminated string at position %d", s.pos)
+	}
+	return buf.String(), nil
+}
+
+func (s *scanner) nextIdent(isInteriorChar func(r rune) bool) (string, error) {
+	const (
+		stBegin    = "stBegin"
+		stInterior = "stInterior"
+	)
+	var buf bytes.Buffer
+	st := stBegin
+
+parseLoop:
+	for r := s.peek(); r != EOF; r = s.peek() {
+		switch st {
+		case stBegin:
+			switch {
+			case isIdentBegin(r):
+				buf.WriteRune(s.next())
+				st = stInterior
+			default:
+				return "", fmt.Errorf("expected identifier at position %d", s.pos)
+			}
+		case stInterior:
+			switch {
+			case isInteriorChar(r):
+				buf.WriteRune(s.next())
+			default:
+				break parseLoop
+			}
+		default:
+			return "", fmt.Errorf("unexpected internal parser error: unknown state: %s at position %d", st, s.pos)
+		}
+	}
+	return buf.String(), nil
+}
diff --git a/upstream/vendor/k8s.io/gengo/v2/codetags/types.go b/upstream/vendor/k8s.io/gengo/v2/codetags/types.go
new file mode 100644
index 0000000000..d004f9bf22
--- /dev/null
+++ b/upstream/vendor/k8s.io/gengo/v2/codetags/types.go
@@ -0,0 +1,169 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package codetags
+
+import (
+	"strconv"
+	"strings"
+)
+
+// Tag represents a single comment tag with typed args.
+type Tag struct {
+	// Name is the name of the tag with no arguments.
+	Name string
+
+	// Args is a list of optional arguments to the tag.
+	Args []Arg
+
+	// Value is the string representation of the tag value.
+	// Provides the tag value when ValueType is ValueTypeString, ValueTypeBool, ValueTypeInt or ValueTypeRaw.
+	Value string
+
+	// ValueTag is another tag parsed from the value of this tag.
+	// Provides the tag value when ValueType is ValueTypeTag.
+	ValueTag *Tag
+
+	// ValueType is the type of the value.
+	ValueType ValueType
+}
+
+// PositionalArg returns the positional argument. If there is no positional
+// argument, it returns false.
+func (t Tag) PositionalArg() (Arg, bool) {
+	if len(t.Args) == 0 || len(t.Args[0].Name) > 0 {
+		return Arg{}, false
+	}
+	return t.Args[0], true
+}
+
+// NamedArg returns the named argument. If o named argument is found, it returns
+// false. Always returns false for empty name; use PositionalArg instead.
+func (t Tag) NamedArg(name string) (Arg, bool) {
+	if len(name) == 0 {
+		return Arg{}, false
+	}
+	for _, arg := range t.Args {
+		if arg.Name == name {
+			return arg, true
+		}
+	}
+	return Arg{}, false
+}
+
+// String returns the canonical string representation of the tag.
+// All strings are represented in double quotes. Spacing is normalized.
+func (t Tag) String() string {
+	buf := strings.Builder{}
+	buf.WriteString(t.Name)
+	if len(t.Args) > 0 {
+		buf.WriteString("(")
+		for i, a := range t.Args {
+			if i > 0 {
+				buf.WriteString(", ")
+			}
+			buf.WriteString(a.String())
+		}
+		buf.WriteString(")")
+	}
+	if t.ValueType != ValueTypeNone {
+		if t.ValueType == ValueTypeTag {
+			buf.WriteString("=+")
+			buf.WriteString(t.ValueTag.String())
+		} else {
+			buf.WriteString("=")
+			if t.ValueType == ValueTypeString {
+				buf.WriteString(strconv.Quote(t.Value))
+			} else {
+				buf.WriteString(t.Value)
+			}
+		}
+	}
+	return buf.String()
+}
+
+// Arg represents a argument.
+type Arg struct {
+	// Name is the name of a named argument. This is zero-valued for positional arguments.
+	Name string
+
+	// Value is the string value of an argument. It has been validated to match the Type.
+	// See the ArgType const godoc for further details on how to parse the value for the
+	// Type.
+	Value string
+
+	// Type identifies the type of the argument.
+	Type ArgType
+}
+
+func (a Arg) String() string {
+	buf := strings.Builder{}
+	if len(a.Name) > 0 {
+		buf.WriteString(a.Name)
+		buf.WriteString(": ")
+	}
+	if a.Type == ArgTypeString {
+		buf.WriteString(strconv.Quote(a.Value))
+	} else {
+		buf.WriteString(a.Value)
+	}
+	return buf.String()
+}
+
+// ArgType is an argument's type.
+type ArgType string
+
+const (
+	// ArgTypeString identifies string values.
+	ArgTypeString ArgType = "string"
+
+	// ArgTypeInt identifies int values. Values of this type may be in decimal,
+	// octal, hex or binary string representations. Consider using strconv.ParseInt
+	// to parse, as it supports all these string representations.
+	ArgTypeInt ArgType = "int"
+
+	// ArgTypeBool identifies bool values. Values of this type must either be the
+	// string "true" or "false".
+	ArgTypeBool ArgType = "bool"
+)
+
+// ValueType is a tag's value type.
+type ValueType string
+
+const (
+	// ValueTypeNone indicates that the tag has no value.
+	ValueTypeNone ValueType = ""
+
+	// ValueTypeString identifies string values.
+	ValueTypeString ValueType = "string"
+
+	// ValueTypeInt identifies int values. Values of this type may be in decimal,
+	// octal, hex or binary string representations. Consider using strconv.ParseInt
+	// to parse, as it supports all these string representations.
+	ValueTypeInt ValueType = "int"
+
+	// ValueTypeBool identifies bool values. Values of this type must either be the
+	// string "true" or "false".
+	ValueTypeBool ValueType = "bool"
+
+	// ValueTypeTag identifies that the value is another tag.
+	ValueTypeTag ValueType = "tag"
+
+	// ValueTypeRaw identifies that the value is raw, untyped content and contains
+	// all text from the tag declaration following the "=" sign, up to the last
+	// non-whitespace character.
+	ValueTypeRaw ValueType = "raw"
+)
diff --git a/upstream/vendor/k8s.io/gengo/v2/comments.go b/upstream/vendor/k8s.io/gengo/v2/comments.go
index ba49c432be..fbc41bed54 100644
--- a/upstream/vendor/k8s.io/gengo/v2/comments.go
+++ b/upstream/vendor/k8s.io/gengo/v2/comments.go
@@ -17,8 +17,12 @@ limitations under the License.
 package gengo
 
 import (
+	"bytes"
 	"fmt"
+	"slices"
 	"strings"
+
+	"k8s.io/gengo/v2/codetags"
 )
 
 // ExtractCommentTags parses comments for lines of the form:
@@ -39,7 +43,9 @@ import (
 //
 // Then this function will return:
 //
-//	map[string][]string{"foo":{"value1, "value2"}, "bar": {""}, "baz": {"qux"}}
+//	map[string][]string{"foo":{"value1, "value2"}, "bar": {""}, "baz": {`"qux"`}}
+//
+// Deprecated: Prefer codetags.Extract and codetags.Parse.
 func ExtractCommentTags(marker string, lines []string) map[string][]string {
 	out := map[string][]string{}
 	for _, line := range lines {
@@ -50,7 +56,6 @@ func ExtractCommentTags(marker string, lines []string) map[string][]string {
 		if !strings.HasPrefix(line, marker) {
 			continue
 		}
-		// TODO: we could support multiple values per key if we split on spaces
 		kv := strings.SplitN(line[len(marker):], "=", 2)
 		if len(kv) == 2 {
 			out[kv[0]] = append(out[kv[0]], kv[1])
@@ -68,16 +73,122 @@ func ExtractCommentTags(marker string, lines []string) map[string][]string {
 // If the tag is not found, the default value is returned.  Values are asserted
 // to be boolean ("true" or "false"), and any other value will cause an error
 // to be returned.  If the key has multiple values, the first one will be used.
+//
+// This function is a wrapper around codetags.Extract and codetags.Parse, but only supports tags with
+// a single position arg of type string, and a value of type bool.
 func ExtractSingleBoolCommentTag(marker string, key string, defaultVal bool, lines []string) (bool, error) {
-	values := ExtractCommentTags(marker, lines)[key]
+	tags, err := ExtractFunctionStyleCommentTags(marker, []string{key}, lines, ParseValues(true))
+	if err != nil {
+		return false, err
+	}
+	values := tags[key]
 	if values == nil {
 		return defaultVal, nil
 	}
-	if values[0] == "true" {
+	if values[0].Value == "true" {
 		return true, nil
 	}
-	if values[0] == "false" {
+	if values[0].Value == "false" {
 		return false, nil
 	}
 	return false, fmt.Errorf("tag value for %q is not boolean: %q", key, values[0])
 }
+
+// ExtractFunctionStyleCommentTags parses comments for special metadata tags.
+//
+// This function is a wrapper around codetags.Extract and codetags.Parse, but only supports tags with
+// a single position arg of type string.
+func ExtractFunctionStyleCommentTags(marker string, tagNames []string, lines []string, options ...TagOption) (map[string][]Tag, error) {
+	opts := tagOpts{}
+	for _, o := range options {
+		o(&opts)
+	}
+
+	out := map[string][]Tag{}
+
+	tags := codetags.Extract(marker, lines)
+	for tagName, tagLines := range tags {
+		if len(tagNames) > 0 && !slices.Contains(tagNames, tagName) {
+			continue
+		}
+		for _, line := range tagLines {
+			typedTag, err := codetags.Parse(line, codetags.RawValues(!opts.parseValues))
+			if err != nil {
+				return nil, err
+			}
+			tag, err := toStringArgs(typedTag)
+			if err != nil {
+				return nil, err
+			}
+			out[tagName] = append(out[tagName], tag)
+		}
+	}
+
+	return out, nil
+}
+
+// TagOption provides an option for extracting tags.
+type TagOption func(opts *tagOpts)
+
+// ParseValues enables parsing of tag values. When enabled, tag values must
+// be valid quoted strings, ints, booleans, identifiers, or tags. Otherwise, a
+// parse error will be returned. Also, when enabled, trailing comments are
+// ignored.
+// Default: disabled
+func ParseValues(enabled bool) TagOption {
+	return func(opts *tagOpts) {
+		opts.parseValues = enabled
+	}
+}
+
+type tagOpts struct {
+	parseValues bool
+}
+
+func toStringArgs(tag codetags.Tag) (Tag, error) {
+	var stringArgs []string
+	if len(tag.Args) > 1 {
+		return Tag{}, fmt.Errorf("expected one argument, got: %v", tag.Args)
+	}
+	for _, arg := range tag.Args {
+		if len(arg.Name) > 0 {
+			return Tag{}, fmt.Errorf("unexpected named argument: %q", arg.Name)
+		}
+		if arg.Type != codetags.ArgTypeString {
+			return Tag{}, fmt.Errorf("unexpected argument type: %s", arg.Type)
+		} else {
+			stringArgs = append(stringArgs, arg.Value)
+		}
+	}
+	return Tag{
+		Name:  tag.Name,
+		Args:  stringArgs,
+		Value: tag.Value,
+	}, nil
+}
+
+// Tag represents a single comment tag.
+type Tag struct {
+	// Name is the name of the tag with no arguments.
+	Name string
+	// Args is a list of optional arguments to the tag.
+	Args []string
+	// Value is the value of the tag.
+	Value string
+}
+
+func (t Tag) String() string {
+	buf := bytes.Buffer{}
+	buf.WriteString(t.Name)
+	if len(t.Args) > 0 {
+		buf.WriteString("(")
+		for i, a := range t.Args {
+			if i > 0 {
+				buf.WriteString(", ")
+			}
+			buf.WriteString(a)
+		}
+		buf.WriteString(")")
+	}
+	return buf.String()
+}
diff --git a/upstream/vendor/k8s.io/gengo/v2/generator/snippet_writer.go b/upstream/vendor/k8s.io/gengo/v2/generator/snippet_writer.go
index 550214e163..b0adcc28a5 100644
--- a/upstream/vendor/k8s.io/gengo/v2/generator/snippet_writer.go
+++ b/upstream/vendor/k8s.io/gengo/v2/generator/snippet_writer.go
@@ -165,6 +165,24 @@ func (s *SnippetWriter) Dup(w io.Writer) *SnippetWriter {
 
 // Append adds the contents of the io.Reader to this SnippetWriter's buffer.
 func (s *SnippetWriter) Append(r io.Reader) error {
+	// The behavior of Do() is to ignore all future calls if there's an error,
+	// assuming the top-level caller will check Error().  This method is
+	// effectively a fancy Do(), so keep the same semantic.
+	if s.err != nil {
+		return nil
+	}
 	_, err := io.Copy(s.w, r)
 	return err
 }
+
+// Merge adds the contents of the io.Reader to this SnippetWriter's buffer and
+// sets this SnippetWriter's error to the other's, if needed.
+func (s *SnippetWriter) Merge(r io.Reader, other *SnippetWriter) error {
+	if s.err != nil {
+		return nil
+	}
+	if other.err != nil {
+		s.err = other.err
+	}
+	return s.Append(r)
+}
diff --git a/upstream/vendor/k8s.io/gengo/v2/namer/namer.go b/upstream/vendor/k8s.io/gengo/v2/namer/namer.go
index 37877eb492..bae2ee9b5b 100644
--- a/upstream/vendor/k8s.io/gengo/v2/namer/namer.go
+++ b/upstream/vendor/k8s.io/gengo/v2/namer/namer.go
@@ -370,7 +370,11 @@ func (r *rawNamer) Name(t *types.Type) string {
 			// TODO: include function signature
 			elems = append(elems, m.Name.Name)
 		}
-		name = "interface{" + strings.Join(elems, "; ") + "}"
+		if len(elems) == 0 {
+			name = "any"
+		} else {
+			name = "interface{" + strings.Join(elems, "; ") + "}"
+		}
 	case types.Func:
 		// TODO: add to name test
 		params := []string{}
diff --git a/upstream/vendor/k8s.io/gengo/v2/parser/parse.go b/upstream/vendor/k8s.io/gengo/v2/parser/parse.go
index d4de19e769..4c1efa0010 100644
--- a/upstream/vendor/k8s.io/gengo/v2/parser/parse.go
+++ b/upstream/vendor/k8s.io/gengo/v2/parser/parse.go
@@ -652,6 +652,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 	switch t := in.(type) {
 	case *gotypes.Struct:
 		out := u.Type(name)
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
@@ -670,6 +671,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 		return out
 	case *gotypes.Map:
 		out := u.Type(name)
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
@@ -679,6 +681,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 		return out
 	case *gotypes.Pointer:
 		out := u.Type(name)
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
@@ -687,6 +690,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 		return out
 	case *gotypes.Slice:
 		out := u.Type(name)
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
@@ -695,6 +699,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 		return out
 	case *gotypes.Array:
 		out := u.Type(name)
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
@@ -704,6 +709,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 		return out
 	case *gotypes.Chan:
 		out := u.Type(name)
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
@@ -717,6 +723,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 			Package: "", // This is a magic package name in the Universe.
 			Name:    t.Name(),
 		})
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
@@ -724,6 +731,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 		return out
 	case *gotypes.Signature:
 		out := u.Type(name)
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
@@ -732,6 +740,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 		return out
 	case *gotypes.Interface:
 		out := u.Type(name)
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
@@ -754,6 +763,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 		case *gotypes.Named, *gotypes.Basic, *gotypes.Map, *gotypes.Slice:
 			name := goNameToName(t.String())
 			out = u.Type(name)
+			out.GoType = in
 			if out.Kind != types.Unknown {
 				return out
 			}
@@ -776,6 +786,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 			}
 
 			if out := u.Type(name); out.Kind != types.Unknown {
+				out.GoType = in
 				return out // short circuit if we've already made this.
 			}
 			out = p.walkType(u, &name, t.Underlying())
@@ -817,6 +828,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
 		}
 	default:
 		out := u.Type(name)
+		out.GoType = in
 		if out.Kind != types.Unknown {
 			return out
 		}
diff --git a/upstream/vendor/k8s.io/gengo/v2/types/types.go b/upstream/vendor/k8s.io/gengo/v2/types/types.go
index 7bbca01733..dab11d96ea 100644
--- a/upstream/vendor/k8s.io/gengo/v2/types/types.go
+++ b/upstream/vendor/k8s.io/gengo/v2/types/types.go
@@ -16,7 +16,10 @@ limitations under the License.
 
 package types
 
-import "strings"
+import (
+	gotypes "go/types"
+	"strings"
+)
 
 // Ref makes a reference to the given type. It can only be used for e.g.
 // passing to namers.
@@ -358,6 +361,9 @@ type Type struct {
 
 	// If Kind == Array
 	Len int64
+
+	// The underlying Go type.
+	GoType gotypes.Type
 }
 
 // String returns the name of the type.
@@ -402,6 +408,11 @@ func (t *Type) IsAnonymousStruct() bool {
 	return (t.Kind == Struct && t.Name.Name == "struct{}") || (t.Kind == Alias && t.Underlying.IsAnonymousStruct())
 }
 
+// IsComparable returns whether the type is comparable.
+func (t *Type) IsComparable() bool {
+	return gotypes.Comparable(t.GoType)
+}
+
 // A single struct member
 type Member struct {
 	// The name of the member.
@@ -452,6 +463,10 @@ type Signature struct {
 
 // Built in types.
 var (
+	Any = &Type{
+		Name: Name{Name: "any"},
+		Kind: Interface,
+	}
 	String = &Type{
 		Name: Name{Name: "string"},
 		Kind: Builtin,
@@ -515,6 +530,7 @@ var (
 
 	builtins = &Package{
 		Types: map[string]*Type{
+			"any":     Any,
 			"bool":    Bool,
 			"string":  String,
 			"int":     Int,
@@ -539,6 +555,16 @@ var (
 	}
 )
 
+func PointerTo(t *Type) *Type {
+	return &Type{
+		Name: Name{
+			Name: "*" + t.Name.String(),
+		},
+		Kind: Pointer,
+		Elem: t,
+	}
+}
+
 func IsInteger(t *Type) bool {
 	switch t {
 	case Int, Int64, Int32, Int16, Uint, Uint64, Uint32, Uint16, Byte:
diff --git a/upstream/vendor/k8s.io/kube-openapi/pkg/common/common.go b/upstream/vendor/k8s.io/kube-openapi/pkg/common/common.go
index e4ce843b0c..da2e8f11ad 100644
--- a/upstream/vendor/k8s.io/kube-openapi/pkg/common/common.go
+++ b/upstream/vendor/k8s.io/kube-openapi/pkg/common/common.go
@@ -48,11 +48,11 @@ type GetOpenAPIDefinitions func(ReferenceCallback) map[string]OpenAPIDefinition
 // GetOpenAPITypeFormat for more information about trade-offs of using this interface or GetOpenAPITypeFormat method when
 // possible.
 type OpenAPIDefinitionGetter interface {
-	OpenAPIDefinition() *OpenAPIDefinition
+	OpenAPIDefinition() OpenAPIDefinition
 }
 
 type OpenAPIV3DefinitionGetter interface {
-	OpenAPIV3Definition() *OpenAPIDefinition
+	OpenAPIV3Definition() OpenAPIDefinition
 }
 
 type PathHandler interface {
diff --git a/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/openapi.go b/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/openapi.go
index 61141a500d..81280aae64 100644
--- a/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/openapi.go
+++ b/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/openapi.go
@@ -22,7 +22,7 @@ import (
 	"strings"
 
 	"k8s.io/kube-openapi/pkg/validation/spec"
-	"sigs.k8s.io/structured-merge-diff/v4/schema"
+	"sigs.k8s.io/structured-merge-diff/v6/schema"
 )
 
 // ToSchemaFromOpenAPI converts a directory of OpenAPI schemas to an smd Schema.
diff --git a/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/proto_models.go b/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/proto_models.go
index 2c6fd76a91..e40f6056e7 100644
--- a/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/proto_models.go
+++ b/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/proto_models.go
@@ -22,7 +22,7 @@ import (
 	"strings"
 
 	"k8s.io/kube-openapi/pkg/util/proto"
-	"sigs.k8s.io/structured-merge-diff/v4/schema"
+	"sigs.k8s.io/structured-merge-diff/v6/schema"
 )
 
 // ToSchema converts openapi definitions into a schema suitable for structured
diff --git a/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/smd.go b/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/smd.go
index 9887d185b2..c4a083cb41 100644
--- a/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/smd.go
+++ b/upstream/vendor/k8s.io/kube-openapi/pkg/schemaconv/smd.go
@@ -20,7 +20,7 @@ import (
 	"fmt"
 	"sort"
 
-	"sigs.k8s.io/structured-merge-diff/v4/schema"
+	"sigs.k8s.io/structured-merge-diff/v6/schema"
 )
 
 const (
diff --git a/upstream/vendor/k8s.io/kube-openapi/pkg/spec3/fuzz.go b/upstream/vendor/k8s.io/kube-openapi/pkg/spec3/fuzz.go
index 08b6246ceb..25e4fd09eb 100644
--- a/upstream/vendor/k8s.io/kube-openapi/pkg/spec3/fuzz.go
+++ b/upstream/vendor/k8s.io/kube-openapi/pkg/spec3/fuzz.go
@@ -4,7 +4,7 @@ import (
 	"math/rand"
 	"strings"
 
-	fuzz "github.com/google/gofuzz"
+	"sigs.k8s.io/randfill"
 
 	"k8s.io/kube-openapi/pkg/validation/spec"
 )
@@ -25,15 +25,15 @@ func randAlphanumString() string {
 }
 
 var OpenAPIV3FuzzFuncs []interface{} = []interface{}{
-	func(s *string, c fuzz.Continue) {
+	func(s *string, c randfill.Continue) {
 		// All OpenAPI V3 map keys must follow the corresponding
 		// regex. Note that this restricts the range for all other
 		// string values as well.
 		str := randAlphanumString()
 		*s = str
 	},
-	func(o *OpenAPI, c fuzz.Continue) {
-		c.FuzzNoCustom(o)
+	func(o *OpenAPI, c randfill.Continue) {
+		c.FillNoCustom(o)
 		o.Version = "3.0.0"
 		for i, val := range o.SecurityRequirement {
 			if val == nil {
@@ -48,45 +48,45 @@ var OpenAPIV3FuzzFuncs []interface{} = []interface{}{
 		}
 
 	},
-	func(r *interface{}, c fuzz.Continue) {
+	func(r *interface{}, c randfill.Continue) {
 		switch c.Intn(3) {
 		case 0:
 			*r = nil
 		case 1:
-			n := c.RandString() + "x"
+			n := c.String(0) + "x"
 			*r = n
 		case 2:
 			n := c.Float64()
 			*r = n
 		}
 	},
-	func(v **spec.Info, c fuzz.Continue) {
+	func(v **spec.Info, c randfill.Continue) {
 		// Info is never nil
 		*v = &spec.Info{}
-		c.FuzzNoCustom(*v)
-		(*v).Title = c.RandString() + "x"
+		c.FillNoCustom(*v)
+		(*v).Title = c.String(0) + "x"
 	},
-	func(v *Paths, c fuzz.Continue) {
-		c.Fuzz(&v.VendorExtensible)
+	func(v *Paths, c randfill.Continue) {
+		c.Fill(&v.VendorExtensible)
 		num := c.Intn(5)
 		if num > 0 {
 			v.Paths = make(map[string]*Path)
 		}
 		for i := 0; i < num; i++ {
 			val := Path{}
-			c.Fuzz(&val)
-			v.Paths["/"+c.RandString()] = &val
+			c.Fill(&val)
+			v.Paths["/"+c.String(0)] = &val
 		}
 	},
-	func(v *SecurityScheme, c fuzz.Continue) {
+	func(v *SecurityScheme, c randfill.Continue) {
 		if c.Intn(refChance) == 0 {
-			c.Fuzz(&v.Refable)
+			c.Fill(&v.Refable)
 			return
 		}
 		switch c.Intn(4) {
 		case 0:
 			v.Type = "apiKey"
-			v.Name = c.RandString() + "x"
+			v.Name = c.String(0) + "x"
 			switch c.Intn(3) {
 			case 0:
 				v.In = "query"
@@ -101,17 +101,17 @@ var OpenAPIV3FuzzFuncs []interface{} = []interface{}{
 			v.Type = "oauth2"
 			v.Flows = make(map[string]*OAuthFlow)
 			flow := OAuthFlow{}
-			flow.AuthorizationUrl = c.RandString() + "x"
+			flow.AuthorizationUrl = c.String(0) + "x"
 			v.Flows["implicit"] = &flow
 			flow.Scopes = make(map[string]string)
 			flow.Scopes["foo"] = "bar"
 		case 3:
 			v.Type = "openIdConnect"
-			v.OpenIdConnectUrl = "https://" + c.RandString()
+			v.OpenIdConnectUrl = "https://" + c.String(0)
 		}
 		v.Scheme = "basic"
 	},
-	func(v *spec.Ref, c fuzz.Continue) {
+	func(v *spec.Ref, c randfill.Continue) {
 		switch c.Intn(7) {
 		case 0:
 			*v = spec.MustCreateRef("#/components/schemas/" + randAlphanumString())
@@ -127,13 +127,13 @@ var OpenAPIV3FuzzFuncs []interface{} = []interface{}{
 			*v = spec.MustCreateRef("#/components/requestBodies/" + randAlphanumString())
 		}
 	},
-	func(v *Parameter, c fuzz.Continue) {
+	func(v *Parameter, c randfill.Continue) {
 		if c.Intn(refChance) == 0 {
-			c.Fuzz(&v.Refable)
+			c.Fill(&v.Refable)
 			return
 		}
-		c.Fuzz(&v.ParameterProps)
-		c.Fuzz(&v.VendorExtensible)
+		c.Fill(&v.ParameterProps)
+		c.Fill(&v.VendorExtensible)
 
 		switch c.Intn(3) {
 		case 0:
@@ -145,44 +145,44 @@ var OpenAPIV3FuzzFuncs []interface{} = []interface{}{
 			v.In = "cookie"
 		}
 	},
-	func(v *RequestBody, c fuzz.Continue) {
+	func(v *RequestBody, c randfill.Continue) {
 		if c.Intn(refChance) == 0 {
-			c.Fuzz(&v.Refable)
+			c.Fill(&v.Refable)
 			return
 		}
-		c.Fuzz(&v.RequestBodyProps)
-		c.Fuzz(&v.VendorExtensible)
+		c.Fill(&v.RequestBodyProps)
+		c.Fill(&v.VendorExtensible)
 	},
-	func(v *Header, c fuzz.Continue) {
+	func(v *Header, c randfill.Continue) {
 		if c.Intn(refChance) == 0 {
-			c.Fuzz(&v.Refable)
+			c.Fill(&v.Refable)
 			return
 		}
-		c.Fuzz(&v.HeaderProps)
-		c.Fuzz(&v.VendorExtensible)
+		c.Fill(&v.HeaderProps)
+		c.Fill(&v.VendorExtensible)
 	},
-	func(v *ResponsesProps, c fuzz.Continue) {
-		c.Fuzz(&v.Default)
+	func(v *ResponsesProps, c randfill.Continue) {
+		c.Fill(&v.Default)
 		n := c.Intn(5)
 		for i := 0; i < n; i++ {
 			r2 := Response{}
-			c.Fuzz(&r2)
+			c.Fill(&r2)
 			// HTTP Status code in 100-599 Range
 			code := c.Intn(500) + 100
 			v.StatusCodeResponses = make(map[int]*Response)
 			v.StatusCodeResponses[code] = &r2
 		}
 	},
-	func(v *Response, c fuzz.Continue) {
+	func(v *Response, c randfill.Continue) {
 		if c.Intn(refChance) == 0 {
-			c.Fuzz(&v.Refable)
+			c.Fill(&v.Refable)
 			return
 		}
-		c.Fuzz(&v.ResponseProps)
-		c.Fuzz(&v.VendorExtensible)
+		c.Fill(&v.ResponseProps)
+		c.Fill(&v.VendorExtensible)
 	},
-	func(v *Operation, c fuzz.Continue) {
-		c.FuzzNoCustom(v)
+	func(v *Operation, c randfill.Continue) {
+		c.FillNoCustom(v)
 		// Do not fuzz null values into the array.
 		for i, val := range v.SecurityRequirement {
 			if val == nil {
@@ -196,85 +196,85 @@ var OpenAPIV3FuzzFuncs []interface{} = []interface{}{
 			}
 		}
 	},
-	func(v *spec.Extensions, c fuzz.Continue) {
+	func(v *spec.Extensions, c randfill.Continue) {
 		numChildren := c.Intn(5)
 		for i := 0; i < numChildren; i++ {
 			if *v == nil {
 				*v = spec.Extensions{}
 			}
-			(*v)["x-"+c.RandString()] = c.RandString()
+			(*v)["x-"+c.String(0)] = c.String(0)
 		}
 	},
-	func(v *spec.ExternalDocumentation, c fuzz.Continue) {
-		c.Fuzz(&v.Description)
+	func(v *spec.ExternalDocumentation, c randfill.Continue) {
+		c.Fill(&v.Description)
 		v.URL = "https://" + randAlphanumString()
 	},
-	func(v *spec.SchemaURL, c fuzz.Continue) {
+	func(v *spec.SchemaURL, c randfill.Continue) {
 		*v = spec.SchemaURL("https://" + randAlphanumString())
 	},
-	func(v *spec.SchemaOrBool, c fuzz.Continue) {
+	func(v *spec.SchemaOrBool, c randfill.Continue) {
 		*v = spec.SchemaOrBool{}
 
-		if c.RandBool() {
-			v.Allows = c.RandBool()
+		if c.Bool() {
+			v.Allows = c.Bool()
 		} else {
 			v.Schema = &spec.Schema{}
 			v.Allows = true
-			c.Fuzz(&v.Schema)
+			c.Fill(&v.Schema)
 		}
 	},
-	func(v *spec.SchemaOrArray, c fuzz.Continue) {
+	func(v *spec.SchemaOrArray, c randfill.Continue) {
 		*v = spec.SchemaOrArray{}
-		if c.RandBool() {
+		if c.Bool() {
 			schema := spec.Schema{}
-			c.Fuzz(&schema)
+			c.Fill(&schema)
 			v.Schema = &schema
 		} else {
 			v.Schemas = []spec.Schema{}
 			numChildren := c.Intn(5)
 			for i := 0; i < numChildren; i++ {
 				schema := spec.Schema{}
-				c.Fuzz(&schema)
+				c.Fill(&schema)
 				v.Schemas = append(v.Schemas, schema)
 			}
 
 		}
 
 	},
-	func(v *spec.SchemaOrStringArray, c fuzz.Continue) {
-		if c.RandBool() {
+	func(v *spec.SchemaOrStringArray, c randfill.Continue) {
+		if c.Bool() {
 			*v = spec.SchemaOrStringArray{}
-			if c.RandBool() {
-				c.Fuzz(&v.Property)
+			if c.Bool() {
+				c.Fill(&v.Property)
 			} else {
-				c.Fuzz(&v.Schema)
+				c.Fill(&v.Schema)
 			}
 		}
 	},
-	func(v *spec.Schema, c fuzz.Continue) {
+	func(v *spec.Schema, c randfill.Continue) {
 		if c.Intn(refChance) == 0 {
-			c.Fuzz(&v.Ref)
+			c.Fill(&v.Ref)
 			return
 		}
-		if c.RandBool() {
+		if c.Bool() {
 			// file schema
-			c.Fuzz(&v.Default)
-			c.Fuzz(&v.Description)
-			c.Fuzz(&v.Example)
-			c.Fuzz(&v.ExternalDocs)
+			c.Fill(&v.Default)
+			c.Fill(&v.Description)
+			c.Fill(&v.Example)
+			c.Fill(&v.ExternalDocs)
 
-			c.Fuzz(&v.Format)
-			c.Fuzz(&v.ReadOnly)
-			c.Fuzz(&v.Required)
-			c.Fuzz(&v.Title)
+			c.Fill(&v.Format)
+			c.Fill(&v.ReadOnly)
+			c.Fill(&v.Required)
+			c.Fill(&v.Title)
 			v.Type = spec.StringOrArray{"file"}
 
 		} else {
 			// normal schema
-			c.Fuzz(&v.SchemaProps)
-			c.Fuzz(&v.SwaggerSchemaProps)
-			c.Fuzz(&v.VendorExtensible)
-			c.Fuzz(&v.ExtraProps)
+			c.Fill(&v.SchemaProps)
+			c.Fill(&v.SwaggerSchemaProps)
+			c.Fill(&v.VendorExtensible)
+			c.Fill(&v.ExtraProps)
 		}
 
 	},
diff --git a/upstream/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go b/upstream/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go
index 1b758ab25a..c7b69b2005 100644
--- a/upstream/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go
+++ b/upstream/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go
@@ -22,7 +22,7 @@ import (
 	"strings"
 
 	openapi_v2 "github.com/google/gnostic-models/openapiv2"
-	yaml "sigs.k8s.io/yaml/goyaml.v2"
+	yaml "go.yaml.in/yaml/v2"
 )
 
 func newSchemaError(path *Path, format string, a ...interface{}) error {
diff --git a/upstream/vendor/k8s.io/kube-openapi/pkg/util/proto/document_v3.go b/upstream/vendor/k8s.io/kube-openapi/pkg/util/proto/document_v3.go
index d9f2896e35..8694c6c769 100644
--- a/upstream/vendor/k8s.io/kube-openapi/pkg/util/proto/document_v3.go
+++ b/upstream/vendor/k8s.io/kube-openapi/pkg/util/proto/document_v3.go
@@ -22,7 +22,7 @@ import (
 	"strings"
 
 	openapi_v3 "github.com/google/gnostic-models/openapiv3"
-	"gopkg.in/yaml.v3"
+	"go.yaml.in/yaml/v3"
 )
 
 // Temporary parse implementation to be used until gnostic->kube-openapi conversion
diff --git a/upstream/vendor/modules.txt b/upstream/vendor/modules.txt
index 6bfc67ee18..d21aa5a957 100644
--- a/upstream/vendor/modules.txt
+++ b/upstream/vendor/modules.txt
@@ -1157,8 +1157,8 @@ github.com/google/certificate-transparency-go/tls
 github.com/google/certificate-transparency-go/x509
 github.com/google/certificate-transparency-go/x509/pkix
 github.com/google/certificate-transparency-go/x509util
-# github.com/google/gnostic-models v0.6.9
-## explicit; go 1.21
+# github.com/google/gnostic-models v0.7.0
+## explicit; go 1.22
 github.com/google/gnostic-models/compiler
 github.com/google/gnostic-models/extensions
 github.com/google/gnostic-models/jsonschema
@@ -2419,6 +2419,12 @@ go.uber.org/zap/internal/stacktrace
 go.uber.org/zap/internal/ztest
 go.uber.org/zap/zapcore
 go.uber.org/zap/zaptest
+# go.yaml.in/yaml/v2 v2.4.2
+## explicit; go 1.15
+go.yaml.in/yaml/v2
+# go.yaml.in/yaml/v3 v3.0.3
+## explicit; go 1.22
+go.yaml.in/yaml/v3
 # gocloud.dev v0.40.0
 ## explicit; go 1.21.0
 gocloud.dev/aws
@@ -2445,7 +2451,7 @@ gocloud.dev/docstore/mongodocstore
 # gocloud.dev/pubsub/kafkapubsub v0.40.0
 ## explicit; go 1.21.0
 gocloud.dev/pubsub/kafkapubsub
-# golang.org/x/crypto v0.37.0
+# golang.org/x/crypto v0.41.0
 ## explicit; go 1.23.0
 golang.org/x/crypto/argon2
 golang.org/x/crypto/blake2b
@@ -2488,7 +2494,7 @@ golang.org/x/exp/slices
 # golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac
 ## explicit; go 1.18
 golang.org/x/exp/typeparams
-# golang.org/x/mod v0.24.0
+# golang.org/x/mod v0.27.0
 ## explicit; go 1.23.0
 golang.org/x/mod/internal/lazyregexp
 golang.org/x/mod/modfile
@@ -2496,7 +2502,7 @@ golang.org/x/mod/module
 golang.org/x/mod/semver
 golang.org/x/mod/sumdb/dirhash
 golang.org/x/mod/sumdb/note
-# golang.org/x/net v0.39.0
+# golang.org/x/net v0.43.0
 ## explicit; go 1.23.0
 golang.org/x/net/context
 golang.org/x/net/context/ctxhttp
@@ -2522,22 +2528,22 @@ golang.org/x/oauth2/google/internal/stsexchange
 golang.org/x/oauth2/internal
 golang.org/x/oauth2/jws
 golang.org/x/oauth2/jwt
-# golang.org/x/sync v0.13.0
+# golang.org/x/sync v0.16.0
 ## explicit; go 1.23.0
 golang.org/x/sync/errgroup
 golang.org/x/sync/semaphore
 golang.org/x/sync/singleflight
-# golang.org/x/sys v0.32.0
+# golang.org/x/sys v0.35.0
 ## explicit; go 1.23.0
 golang.org/x/sys/cpu
 golang.org/x/sys/plan9
 golang.org/x/sys/unix
 golang.org/x/sys/windows
 golang.org/x/sys/windows/registry
-# golang.org/x/term v0.31.0
+# golang.org/x/term v0.34.0
 ## explicit; go 1.23.0
 golang.org/x/term
-# golang.org/x/text v0.24.0
+# golang.org/x/text v0.28.0
 ## explicit; go 1.23.0
 golang.org/x/text/encoding
 golang.org/x/text/encoding/internal
@@ -2565,7 +2571,7 @@ golang.org/x/text/width
 # golang.org/x/time v0.11.0
 ## explicit; go 1.23.0
 golang.org/x/time/rate
-# golang.org/x/tools v0.32.0
+# golang.org/x/tools v0.36.0
 ## explicit; go 1.23.0
 golang.org/x/tools/go/analysis
 golang.org/x/tools/go/analysis/passes/appends
@@ -2617,6 +2623,7 @@ golang.org/x/tools/go/analysis/passes/unusedresult
 golang.org/x/tools/go/analysis/passes/unusedwrite
 golang.org/x/tools/go/analysis/passes/waitgroup
 golang.org/x/tools/go/ast/astutil
+golang.org/x/tools/go/ast/edge
 golang.org/x/tools/go/ast/inspector
 golang.org/x/tools/go/buildutil
 golang.org/x/tools/go/cfg
@@ -2631,8 +2638,7 @@ golang.org/x/tools/go/types/typeutil
 golang.org/x/tools/imports
 golang.org/x/tools/internal/aliases
 golang.org/x/tools/internal/analysisinternal
-golang.org/x/tools/internal/astutil/cursor
-golang.org/x/tools/internal/astutil/edge
+golang.org/x/tools/internal/astutil
 golang.org/x/tools/internal/event
 golang.org/x/tools/internal/event/core
 golang.org/x/tools/internal/event/keys
@@ -3604,9 +3610,10 @@ k8s.io/client-go/util/workqueue
 k8s.io/code-generator/cmd/deepcopy-gen
 k8s.io/code-generator/cmd/deepcopy-gen/args
 k8s.io/code-generator/cmd/deepcopy-gen/generators
-# k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9
+# k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f
 ## explicit; go 1.20
 k8s.io/gengo/v2
+k8s.io/gengo/v2/codetags
 k8s.io/gengo/v2/generator
 k8s.io/gengo/v2/namer
 k8s.io/gengo/v2/parser
@@ -3620,8 +3627,8 @@ k8s.io/klog/v2/internal/dbg
 k8s.io/klog/v2/internal/serialize
 k8s.io/klog/v2/internal/severity
 k8s.io/klog/v2/internal/sloghandler
-# k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7
-## explicit; go 1.21
+# k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912
+## explicit; go 1.23.0
 k8s.io/kube-openapi/pkg/cached
 k8s.io/kube-openapi/pkg/common
 k8s.io/kube-openapi/pkg/handler3
@@ -3727,6 +3734,10 @@ mvdan.cc/unparam/check
 ## explicit; go 1.23
 sigs.k8s.io/json
 sigs.k8s.io/json/internal/golang/encoding/json
+# sigs.k8s.io/randfill v1.0.0
+## explicit; go 1.18
+sigs.k8s.io/randfill
+sigs.k8s.io/randfill/bytesource
 # sigs.k8s.io/release-utils v0.11.1
 ## explicit; go 1.23
 sigs.k8s.io/release-utils/version
@@ -3737,6 +3748,9 @@ sigs.k8s.io/structured-merge-diff/v4/merge
 sigs.k8s.io/structured-merge-diff/v4/schema
 sigs.k8s.io/structured-merge-diff/v4/typed
 sigs.k8s.io/structured-merge-diff/v4/value
+# sigs.k8s.io/structured-merge-diff/v6 v6.2.0
+## explicit; go 1.23
+sigs.k8s.io/structured-merge-diff/v6/schema
 # sigs.k8s.io/yaml v1.4.0
 ## explicit; go 1.12
 sigs.k8s.io/yaml
diff --git a/upstream/vendor/sigs.k8s.io/randfill/CONTRIBUTING.md b/upstream/vendor/sigs.k8s.io/randfill/CONTRIBUTING.md
new file mode 100644
index 0000000000..7566c879ce
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/CONTRIBUTING.md
@@ -0,0 +1,43 @@
+# Contributing Guidelines
+
+Welcome to Kubernetes. We are excited about the prospect of you joining our [community](https://git.k8s.io/community)! The Kubernetes community abides by the CNCF [code of conduct](code-of-conduct.md). Here is an excerpt:
+
+_As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities._
+
+## Getting Started
+
+We have full documentation on how to get started contributing here:
+
+
+
+- [Contributor License Agreement](https://git.k8s.io/community/CLA.md) Kubernetes projects require that you sign a Contributor License Agreement (CLA) before we can accept your pull requests
+- [Kubernetes Contributor Guide](https://git.k8s.io/community/contributors/guide) - Main contributor documentation, or you can just jump directly to the [contributing section](https://git.k8s.io/community/contributors/guide#contributing)
+- [Contributor Cheat Sheet](https://git.k8s.io/community/contributors/guide/contributor-cheatsheet) - Common resources for existing developers
+
+## Mentorship
+
+- [Mentoring Initiatives](https://git.k8s.io/community/mentoring) - We have a diverse set of mentorship programs available that are always looking for volunteers!
+
+
+
+## Project Management
+
+The [maintainers](https://github.com/kubernetes-sigs/randfill/blob/main/OWNERS_ALIASES#L12) of this project (and often others who have official positions on the [contributor ladder](https://github.com/kubernetes-sigs/randfill/blob/main/OWNERS_ALIASES)) are responsible for performing project management which oversees development and maintenance of the API, tests, tools, e.t.c. While we try to be generally flexible when it comes to the management of individual pieces (such as Issues or PRs), we have some rules and guidelines which help us plan, coordinate and reduce waste. In this section you'll find some rules/guidelines for contributors related to project management which may extend or go beyond what you would find in the standard [Kubernetes Contributor Guide](https://git.k8s.io/community/contributors/guide).
+
+### Bumping stale and closed Issues & PRs
+
+Maintainers are ultimately responsible for triaging new issues and PRs, accepting or declining them, deciding priority and fitting them into milestones intended for future releases. Bots are responsible for marking issues and PRs which stagnate as stale, or closing them if progress does not continue for a long period of time. Due to the nature of this community-driven development effort (we do not have dedicated engineering resources, we rely on the community which is effectively "volunteer time") **not all issues can be accepted, prioritized or completed**.
+
+You may find times when an issue you're subscribed to and interested in seems to stagnate, or perhaps gets auto-closed. Prior to bumping or directly re-opening issues yourself, we generally ask that you bring these up for discussion on the agenda for one of our community syncs if possible, or bring them up for discussion in Slack or the mailing list as this gives us a better opportunity to discuss the issue and determine viability and logistics. If feasible we **highly recommend being ready to contribute directly** to any stale or unprioritized effort that you want to see move forward, as **the best way to ensure progress is to engage with the community and personally invest time**.
+
+We (the community) aren't opposed to making exceptions in some cases, but when in doubt please follow the above guidelines before bumping closed or stale issues if you're not ready to personally invest time in them. We are responsible for managing these and without further context or engagement we may set these back to how they were previously organized.
diff --git a/upstream/vendor/sigs.k8s.io/randfill/LICENSE b/upstream/vendor/sigs.k8s.io/randfill/LICENSE
new file mode 100644
index 0000000000..9dd29274c3
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/LICENSE
@@ -0,0 +1,202 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2014 The gofuzz Authors
+   Copyright 2025 The Kubernetes Authors
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/upstream/vendor/sigs.k8s.io/randfill/NOTICE b/upstream/vendor/sigs.k8s.io/randfill/NOTICE
new file mode 100644
index 0000000000..6984e71f65
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/NOTICE
@@ -0,0 +1,24 @@
+When donating the randfill project to the CNCF, we could not reach all the
+gofuzz contributors to sign the CNCF CLA. As such, according to the CNCF rules
+to donate a repository, we must add a NOTICE referencing section 7 of the CLA
+with a list of developers who could not be reached.
+
+`7. Should You wish to submit work that is not Your original creation, You may
+submit it to the Foundation separately from any Contribution, identifying the
+complete details of its source and of any license or other restriction
+(including, but not limited to, related patents, trademarks, and license
+agreements) of which you are personally aware, and conspicuously marking the
+work as "Submitted on behalf of a third-party: [named here]".`
+
+Submitted on behalf of a third-party: @dnephin (Daniel Nephin)
+Submitted on behalf of a third-party: @AlekSi (Alexey Palazhchenko)
+Submitted on behalf of a third-party: @bbigras (Bruno Bigras)
+Submitted on behalf of a third-party: @samirkut (Samir)
+Submitted on behalf of a third-party: @posener (Eyal Posener)
+Submitted on behalf of a third-party: @Ashikpaul (Ashik Paul)
+Submitted on behalf of a third-party: @kwongtailau (Kwongtai)
+Submitted on behalf of a third-party: @ericcornelissen (Eric Cornelissen)
+Submitted on behalf of a third-party: @eclipseo (Robert-André Mauchin)
+Submitted on behalf of a third-party: @yanzhoupan (Andrew Pan)
+Submitted on behalf of a third-party: @STRRL (Zhiqiang ZHOU)
+Submitted on behalf of a third-party: @disconnect3d (Disconnect3d)
diff --git a/upstream/vendor/sigs.k8s.io/randfill/OWNERS b/upstream/vendor/sigs.k8s.io/randfill/OWNERS
new file mode 100644
index 0000000000..59f6a50f6b
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/OWNERS
@@ -0,0 +1,8 @@
+# See the OWNERS docs at https://go.k8s.io/owners
+# See the OWNERS_ALIASES file at https://github.com/kubernetes-sigs/randfill/blob/main/OWNERS_ALIASES for a list of members for each alias.
+
+approvers:
+  - sig-testing-leads
+  - thockin
+
+reviewers: []
diff --git a/upstream/vendor/sigs.k8s.io/randfill/OWNERS_ALIASES b/upstream/vendor/sigs.k8s.io/randfill/OWNERS_ALIASES
new file mode 100644
index 0000000000..927f1209b1
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/OWNERS_ALIASES
@@ -0,0 +1,14 @@
+# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
+# This file should be kept in sync with k/org.
+
+aliases:
+  # Reference: https://github.com/kubernetes/org/blob/main/OWNERS_ALIASES
+  sig-testing-leads:
+    - BenTheElder
+    - alvaroaleman
+    - aojea
+    - cjwagner
+    - jbpratt
+    - michelle192837
+    - pohly
+    - xmcqueen
diff --git a/upstream/vendor/sigs.k8s.io/randfill/README.md b/upstream/vendor/sigs.k8s.io/randfill/README.md
new file mode 100644
index 0000000000..d892fc9f5d
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/README.md
@@ -0,0 +1,98 @@
+randfill
+======
+
+randfill is a library for populating go objects with random values.
+
+This is a fork of github.com/google/gofuzz, which was archived.
+
+NOTE: This repo is supported only for use within Kubernetes.  It is not our
+intention to support general use.  That said, if it works for you, that's
+great!  If you have a problem, please feel free to file an issue, but be aware
+that it may not be a priority for us to fix it unless it is affecting
+Kubernetes.  PRs are welcome, within reason.
+
+[![GoDoc](https://godoc.org/sigs.k8s.io/randfill?status.svg)](https://godoc.org/sigs.k8s.io/randfill)
+
+This is useful for testing:
+
+* Do your project's objects really serialize/unserialize correctly in all cases?
+* Is there an incorrectly formatted object that will cause your project to panic?
+
+Import with ```import "sigs.k8s.io/randfill"```
+
+You can use it on single variables:
+```go
+f := randfill.New()
+var myInt int
+f.Fill(&myInt) // myInt gets a random value.
+```
+
+You can use it on maps:
+```go
+f := randfill.New().NilChance(0).NumElements(1, 1)
+var myMap map[ComplexKeyType]string
+f.Fill(&myMap) // myMap will have exactly one element.
+```
+
+Customize the chance of getting a nil pointer:
+```go
+f := randfill.New().NilChance(.5)
+var fancyStruct struct {
+  A, B, C, D *string
+}
+f.Fill(&fancyStruct) // About half the pointers should be set.
+```
+
+You can even customize the randomization completely if needed:
+```go
+type MyEnum string
+const (
+        A MyEnum = "A"
+        B MyEnum = "B"
+)
+type MyInfo struct {
+        Type MyEnum
+        AInfo *string
+        BInfo *string
+}
+
+f := randfill.New().NilChance(0).Funcs(
+        func(e *MyInfo, c randfill.Continue) {
+                switch c.Intn(2) {
+                case 0:
+                        e.Type = A
+                        c.Fill(&e.AInfo)
+                case 1:
+                        e.Type = B
+                        c.Fill(&e.BInfo)
+                }
+        },
+)
+
+var myObject MyInfo
+f.Fill(&myObject) // Type will correspond to whether A or B info is set.
+```
+
+See more examples in ```example_test.go```.
+
+## dvyukov/go-fuzz integration
+
+You can use this library for easier [go-fuzz](https://github.com/dvyukov/go-fuzz)ing.
+go-fuzz provides the user a byte-slice, which should be converted to different inputs
+for the tested function. This library can help convert the byte slice. Consider for
+example a fuzz test for a the function `mypackage.MyFunc` that takes an int arguments:
+```go
+// +build gofuzz
+package mypackage
+
+import "sigs.k8s.io/randfill"
+
+func Fuzz(data []byte) int {
+        var i int
+        randfill.NewFromGoFuzz(data).Fill(&i)
+        MyFunc(i)
+        return 0
+}
+```
+
+Happy testing!
diff --git a/upstream/vendor/sigs.k8s.io/randfill/SECURITY_CONTACTS b/upstream/vendor/sigs.k8s.io/randfill/SECURITY_CONTACTS
new file mode 100644
index 0000000000..91d7853378
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/SECURITY_CONTACTS
@@ -0,0 +1,16 @@
+# Defined below are the security contacts for this repo.
+#
+# They are the contact point for the Product Security Committee to reach out
+# to for triaging and handling of incoming issues.
+#
+# The below names agree to abide by the
+# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy)
+# and will be removed and replaced if they violate that agreement.
+#
+# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE
+# INSTRUCTIONS AT https://kubernetes.io/security/
+
+thockin
+BenTheElder
+aojea
+pohly
diff --git a/upstream/vendor/sigs.k8s.io/randfill/bytesource/bytesource.go b/upstream/vendor/sigs.k8s.io/randfill/bytesource/bytesource.go
new file mode 100644
index 0000000000..5bb3659496
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/bytesource/bytesource.go
@@ -0,0 +1,81 @@
+/*
+Copyright 2014 Google Inc. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Package bytesource provides a rand.Source64 that is determined by a slice of bytes.
+package bytesource
+
+import (
+	"bytes"
+	"encoding/binary"
+	"io"
+	"math/rand"
+)
+
+// ByteSource implements rand.Source64 determined by a slice of bytes. The random numbers are
+// generated from each 8 bytes in the slice, until the last bytes are consumed, from which a
+// fallback pseudo random source is created in case more random numbers are required.
+// It also exposes a `bytes.Reader` API, which lets callers consume the bytes directly.
+type ByteSource struct {
+	*bytes.Reader
+	fallback rand.Source
+}
+
+// New returns a new ByteSource from a given slice of bytes.
+func New(input []byte) *ByteSource {
+	s := &ByteSource{
+		Reader:   bytes.NewReader(input),
+		fallback: rand.NewSource(0),
+	}
+	if len(input) > 0 {
+		s.fallback = rand.NewSource(int64(s.consumeUint64()))
+	}
+	return s
+}
+
+func (s *ByteSource) Uint64() uint64 {
+	// Return from input if it was not exhausted.
+	if s.Len() > 0 {
+		return s.consumeUint64()
+	}
+
+	// Input was exhausted, return random number from fallback (in this case fallback should not be
+	// nil). Try first having a Uint64 output (Should work in current rand implementation),
+	// otherwise return a conversion of Int63.
+	if s64, ok := s.fallback.(rand.Source64); ok {
+		return s64.Uint64()
+	}
+	return uint64(s.fallback.Int63())
+}
+
+func (s *ByteSource) Int63() int64 {
+	return int64(s.Uint64() >> 1)
+}
+
+func (s *ByteSource) Seed(seed int64) {
+	s.fallback = rand.NewSource(seed)
+	s.Reader = bytes.NewReader(nil)
+}
+
+// consumeUint64 reads 8 bytes from the input and convert them to a uint64. It assumes that the the
+// bytes reader is not empty.
+func (s *ByteSource) consumeUint64() uint64 {
+	var bytes [8]byte
+	_, err := s.Read(bytes[:])
+	if err != nil && err != io.EOF {
+		panic("failed reading source") // Should not happen.
+	}
+	return binary.BigEndian.Uint64(bytes[:])
+}
diff --git a/upstream/vendor/sigs.k8s.io/randfill/code-of-conduct.md b/upstream/vendor/sigs.k8s.io/randfill/code-of-conduct.md
new file mode 100644
index 0000000000..0d15c00cf3
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/code-of-conduct.md
@@ -0,0 +1,3 @@
+# Kubernetes Community Code of Conduct
+
+Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md)
diff --git a/upstream/vendor/sigs.k8s.io/randfill/randfill.go b/upstream/vendor/sigs.k8s.io/randfill/randfill.go
new file mode 100644
index 0000000000..b734824844
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/randfill/randfill.go
@@ -0,0 +1,682 @@
+/*
+Copyright 2014 Google Inc. All rights reserved.
+Copyright 2014 The gofuzz Authors.
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Package randfill is a library for populating go objects with random values.
+package randfill
+
+import (
+	"fmt"
+	"math/rand"
+	"reflect"
+	"regexp"
+	"sync"
+	"time"
+	"unsafe"
+
+	"strings"
+
+	"sigs.k8s.io/randfill/bytesource"
+)
+
+// funcMap is a map from a type to a function that randfills that type.  The
+// function is a reflect.Value because the type being filled is different for
+// each func.
+type funcMap map[reflect.Type]reflect.Value
+
+// Filler knows how to fill any object with random fields.
+type Filler struct {
+	customFuncs           funcMap
+	defaultFuncs          funcMap
+	r                     *rand.Rand
+	nilChance             float64
+	minElements           int
+	maxElements           int
+	maxDepth              int
+	allowUnexportedFields bool
+	skipFieldPatterns     []*regexp.Regexp
+
+	lock sync.Mutex
+}
+
+// New returns a new Filler. Customize your Filler further by calling Funcs,
+// RandSource, NilChance, or NumElements in any order.
+func New() *Filler {
+	return NewWithSeed(time.Now().UnixNano())
+}
+
+func NewWithSeed(seed int64) *Filler {
+	f := &Filler{
+		defaultFuncs: funcMap{
+			reflect.TypeOf(&time.Time{}): reflect.ValueOf(randfillTime),
+		},
+
+		customFuncs:           funcMap{},
+		r:                     rand.New(rand.NewSource(seed)),
+		nilChance:             .2,
+		minElements:           1,
+		maxElements:           10,
+		maxDepth:              100,
+		allowUnexportedFields: false,
+	}
+	return f
+}
+
+// NewFromGoFuzz is a helper function that enables using randfill (this
+// project) with go-fuzz (https://github.com/dvyukov/go-fuzz) for continuous
+// fuzzing. Essentially, it enables translating the fuzzing bytes from
+// go-fuzz to any Go object using this library.
+//
+// This implementation promises a constant translation from a given slice of
+// bytes to the fuzzed objects. This promise will remain over future
+// versions of Go and of this library.
+//
+// Note: the returned Filler should not be shared between multiple goroutines,
+// as its deterministic output will no longer be available.
+//
+// Example: use go-fuzz to test the function `MyFunc(int)` in the package
+// `mypackage`. Add the file: "mypackage_fuzz.go" with the content:
+//
+// // +build gofuzz
+// package mypackage
+// import "sigs.k8s.io/randfill"
+//
+//	func Fuzz(data []byte) int {
+//		var i int
+//		randfill.NewFromGoFuzz(data).Fill(&i)
+//		MyFunc(i)
+//		return 0
+//	}
+func NewFromGoFuzz(data []byte) *Filler {
+	return New().RandSource(bytesource.New(data))
+}
+
+// Funcs registers custom fill functions for this Filler.
+//
+// Each entry in customFuncs must be a function taking two parameters.
+// The first parameter must be a pointer or map. It is the variable that
+// function will fill with random data. The second parameter must be a
+// randfill.Continue, which will provide a source of randomness and a way
+// to automatically continue filling smaller pieces of the first parameter.
+//
+// These functions are called sensibly, e.g., if you wanted custom string
+// filling, the function `func(s *string, c randfill.Continue)` would get
+// called and passed the address of strings. Maps and pointers will always
+// be made/new'd for you, ignoring the NilChance option. For slices, it
+// doesn't make much sense to pre-create them--Filler doesn't know how
+// long you want your slice--so take a pointer to a slice, and make it
+// yourself. (If you don't want your map/pointer type pre-made, take a
+// pointer to it, and make it yourself.) See the examples for a range of
+// custom functions.
+//
+// If a function is already registered for a type, and a new function is
+// provided, the previous function will be replaced with the new one.
+func (f *Filler) Funcs(customFuncs ...interface{}) *Filler {
+	for i := range customFuncs {
+		v := reflect.ValueOf(customFuncs[i])
+		if v.Kind() != reflect.Func {
+			panic("Filler.Funcs: all arguments must be functions")
+		}
+		t := v.Type()
+		if t.NumIn() != 2 || t.NumOut() != 0 {
+			panic("Filler.Funcs: all customFuncs must have 2 arguments and 0 returns")
+		}
+		argT := t.In(0)
+		switch argT.Kind() {
+		case reflect.Ptr, reflect.Map:
+		default:
+			panic("Filler.Funcs: customFuncs' first argument must be a pointer or map type")
+		}
+		if t.In(1) != reflect.TypeOf(Continue{}) {
+			panic("Filler.Funcs: customFuncs' second argument must be a randfill.Continue")
+		}
+		f.customFuncs[argT] = v
+	}
+	return f
+}
+
+// RandSource causes this Filler to get values from the given source of
+// randomness. Use this if you want deterministic filling.
+func (f *Filler) RandSource(s rand.Source) *Filler {
+	f.r = rand.New(s)
+	return f
+}
+
+// NilChance sets the probability of creating a nil pointer, map, or slice to
+// 'p'. 'p' should be between 0 (no nils) and 1 (all nils), inclusive.
+func (f *Filler) NilChance(p float64) *Filler {
+	if p < 0 || p > 1 {
+		panic("Filler.NilChance: p must be between 0 and 1, inclusive")
+	}
+	f.nilChance = p
+	return f
+}
+
+// NumElements sets the minimum and maximum number of elements that will be
+// added to a non-nil map or slice.
+func (f *Filler) NumElements(min, max int) *Filler {
+	if min < 0 {
+		panic("Filler.NumElements: min must be >= 0")
+	}
+	if min > max {
+		panic("Filler.NumElements: min must be <= max")
+	}
+	f.minElements = min
+	f.maxElements = max
+	return f
+}
+
+func (f *Filler) genElementCount() int {
+	if f.minElements == f.maxElements {
+		return f.minElements
+	}
+	return f.minElements + f.r.Intn(f.maxElements-f.minElements+1)
+}
+
+func (f *Filler) genShouldFill() bool {
+	return f.r.Float64() >= f.nilChance
+}
+
+// MaxDepth sets the maximum number of recursive fill calls that will be made
+// before stopping.  This includes struct members, pointers, and map and slice
+// elements.
+func (f *Filler) MaxDepth(d int) *Filler {
+	f.maxDepth = d
+	return f
+}
+
+// AllowUnexportedFields defines whether to fill unexported fields.
+func (f *Filler) AllowUnexportedFields(flag bool) *Filler {
+	f.allowUnexportedFields = flag
+	return f
+}
+
+// SkipFieldsWithPattern tells this Filler to skip any field whose name matches
+// the supplied pattern. Call this multiple times if needed. This is useful to
+// skip XXX_ fields generated by protobuf.
+func (f *Filler) SkipFieldsWithPattern(pattern *regexp.Regexp) *Filler {
+	f.skipFieldPatterns = append(f.skipFieldPatterns, pattern)
+	return f
+}
+
+// SimpleSelfFiller represents an object that knows how to randfill itself.
+//
+// Unlike NativeSelfFiller, this interface does not cause the type in question
+// to depend on the randfill package.  This is most useful for simple types.  For
+// more complex types, consider using NativeSelfFiller.
+type SimpleSelfFiller interface {
+	// RandFill fills the current object with random data.
+	RandFill(r *rand.Rand)
+}
+
+// NativeSelfFiller represents an object that knows how to randfill itself.
+//
+// Unlike SimpleSelfFiller, this interface allows for recursive filling of
+// child objects with the same rules as the parent Filler.
+type NativeSelfFiller interface {
+	// RandFill fills the current object with random data.
+	RandFill(c Continue)
+}
+
+// Fill recursively fills all of obj's fields with something random.  First
+// this tries to find a custom fill function (see Funcs).  If there is no
+// custom function, this tests whether the object implements SimpleSelfFiller
+// or NativeSelfFiller and if so, calls RandFill on it to fill itself.  If that
+// fails, this will see if there is a default fill function provided by this
+// package. If all of that fails, this will generate random values for all
+// primitive fields and then recurse for all non-primitives.
+//
+// This is safe for cyclic or tree-like structs, up to a limit.  Use the
+// MaxDepth method to adjust how deep you need it to recurse.
+//
+// obj must be a pointer. Exported (public) fields can always be set, and if
+// the AllowUnexportedFields() modifier was called it can try to set unexported
+// (private) fields, too.
+//
+// This is intended for tests, so will panic on bad input or unimplemented
+// types.  This method takes a lock for the whole Filler, so it is not
+// reentrant.  See Continue.
+func (f *Filler) Fill(obj interface{}) {
+	f.lock.Lock()
+	defer f.lock.Unlock()
+
+	v := reflect.ValueOf(obj)
+	if v.Kind() != reflect.Ptr {
+		panic("Filler.Fill: obj must be a pointer")
+	}
+	v = v.Elem()
+	f.fillWithContext(v, 0)
+}
+
+// FillNoCustom is just like Fill, except that any custom fill function for
+// obj's type will not be called and obj will not be tested for
+// SimpleSelfFiller or NativeSelfFiller. This applies only to obj and not other
+// instances of obj's type or to obj's child fields.
+//
+// obj must be a pointer. Exported (public) fields can always be set, and if
+// the AllowUnexportedFields() modifier was called it can try to set unexported
+// (private) fields, too.
+//
+// This is intended for tests, so will panic on bad input or unimplemented
+// types.  This method takes a lock for the whole Filler, so it is not
+// reentrant.  See Continue.
+func (f *Filler) FillNoCustom(obj interface{}) {
+	f.lock.Lock()
+	defer f.lock.Unlock()
+
+	v := reflect.ValueOf(obj)
+	if v.Kind() != reflect.Ptr {
+		panic("Filler.FillNoCustom: obj must be a pointer")
+	}
+	v = v.Elem()
+	f.fillWithContext(v, flagNoCustomFill)
+}
+
+const (
+	// Do not try to find a custom fill function.  Does not apply recursively.
+	flagNoCustomFill uint64 = 1 << iota
+)
+
+func (f *Filler) fillWithContext(v reflect.Value, flags uint64) {
+	fc := &fillerContext{filler: f}
+	fc.doFill(v, flags)
+}
+
+// fillerContext carries context about a single filling run, which lets Filler
+// be thread-safe.
+type fillerContext struct {
+	filler   *Filler
+	curDepth int
+}
+
+func (fc *fillerContext) doFill(v reflect.Value, flags uint64) {
+	if fc.curDepth >= fc.filler.maxDepth {
+		return
+	}
+	fc.curDepth++
+	defer func() { fc.curDepth-- }()
+
+	if !v.CanSet() {
+		if !fc.filler.allowUnexportedFields || !v.CanAddr() {
+			return
+		}
+		v = reflect.NewAt(v.Type(), unsafe.Pointer(v.UnsafeAddr())).Elem()
+	}
+
+	if flags&flagNoCustomFill == 0 {
+		// Check for both pointer and non-pointer custom functions.
+		if v.CanAddr() && fc.tryCustom(v.Addr()) {
+			return
+		}
+		if fc.tryCustom(v) {
+			return
+		}
+	}
+
+	if fn, ok := fillFuncMap[v.Kind()]; ok {
+		fn(v, fc.filler.r)
+		return
+	}
+
+	switch v.Kind() {
+	case reflect.Map:
+		if fc.filler.genShouldFill() {
+			v.Set(reflect.MakeMap(v.Type()))
+			n := fc.filler.genElementCount()
+			for i := 0; i < n; i++ {
+				key := reflect.New(v.Type().Key()).Elem()
+				fc.doFill(key, 0)
+				val := reflect.New(v.Type().Elem()).Elem()
+				fc.doFill(val, 0)
+				v.SetMapIndex(key, val)
+			}
+			return
+		}
+		v.Set(reflect.Zero(v.Type()))
+	case reflect.Ptr:
+		if fc.filler.genShouldFill() {
+			v.Set(reflect.New(v.Type().Elem()))
+			fc.doFill(v.Elem(), 0)
+			return
+		}
+		v.Set(reflect.Zero(v.Type()))
+	case reflect.Slice:
+		if fc.filler.genShouldFill() {
+			n := fc.filler.genElementCount()
+			v.Set(reflect.MakeSlice(v.Type(), n, n))
+			for i := 0; i < n; i++ {
+				fc.doFill(v.Index(i), 0)
+			}
+			return
+		}
+		v.Set(reflect.Zero(v.Type()))
+	case reflect.Array:
+		if fc.filler.genShouldFill() {
+			n := v.Len()
+			for i := 0; i < n; i++ {
+				fc.doFill(v.Index(i), 0)
+			}
+			return
+		}
+		v.Set(reflect.Zero(v.Type()))
+	case reflect.Struct:
+		for i := 0; i < v.NumField(); i++ {
+			skipField := false
+			fieldName := v.Type().Field(i).Name
+			for _, pattern := range fc.filler.skipFieldPatterns {
+				if pattern.MatchString(fieldName) {
+					skipField = true
+					break
+				}
+			}
+			if !skipField {
+				fc.doFill(v.Field(i), 0)
+			}
+		}
+	case reflect.Chan:
+		fallthrough
+	case reflect.Func:
+		fallthrough
+	case reflect.Interface:
+		fallthrough
+	default:
+		panic(fmt.Sprintf("can't fill type %v, kind %v", v.Type(), v.Kind()))
+	}
+}
+
+// tryCustom searches for custom handlers, and returns true iff it finds a match
+// and successfully randomizes v.
+func (fc *fillerContext) tryCustom(v reflect.Value) bool {
+	// First: see if we have a fill function for it.
+	doCustom, ok := fc.filler.customFuncs[v.Type()]
+	if !ok {
+		// Second: see if it can fill itself.
+		if v.CanInterface() {
+			intf := v.Interface()
+			if fillable, ok := intf.(SimpleSelfFiller); ok {
+				fillable.RandFill(fc.filler.r)
+				return true
+			}
+			if fillable, ok := intf.(NativeSelfFiller); ok {
+				fillable.RandFill(Continue{fc: fc, Rand: fc.filler.r})
+				return true
+			}
+		}
+		// Finally: see if there is a default fill function.
+		doCustom, ok = fc.filler.defaultFuncs[v.Type()]
+		if !ok {
+			return false
+		}
+	}
+
+	switch v.Kind() {
+	case reflect.Ptr:
+		if v.IsNil() {
+			if !v.CanSet() {
+				return false
+			}
+			v.Set(reflect.New(v.Type().Elem()))
+		}
+	case reflect.Map:
+		if v.IsNil() {
+			if !v.CanSet() {
+				return false
+			}
+			v.Set(reflect.MakeMap(v.Type()))
+		}
+	default:
+		return false
+	}
+
+	doCustom.Call([]reflect.Value{
+		v,
+		reflect.ValueOf(Continue{
+			fc:   fc,
+			Rand: fc.filler.r,
+		}),
+	})
+	return true
+}
+
+// Continue can be passed to custom fill functions to allow them to use
+// the correct source of randomness and to continue filling their members.
+type Continue struct {
+	fc *fillerContext
+
+	// For convenience, Continue implements rand.Rand via embedding.
+	// Use this for generating any randomness if you want your filling
+	// to be repeatable for a given seed.
+	*rand.Rand
+}
+
+// Fill continues filling obj. obj must be a pointer or a reflect.Value of a
+// pointer.  See Filler.Fill.
+func (c Continue) Fill(obj interface{}) {
+	v, ok := obj.(reflect.Value)
+	if !ok {
+		v = reflect.ValueOf(obj)
+	}
+	if v.Kind() != reflect.Ptr {
+		panic("Continue.Fill: obj must be a pointer")
+	}
+	v = v.Elem()
+	c.fc.doFill(v, 0)
+}
+
+// FillNoCustom continues filling obj, except that any custom fill function for
+// obj's type will not be called and obj will not be tested for
+// SimpleSelfFiller or NativeSelfFiller.  See Filler.FillNoCustom.
+func (c Continue) FillNoCustom(obj interface{}) {
+	v, ok := obj.(reflect.Value)
+	if !ok {
+		v = reflect.ValueOf(obj)
+	}
+	if v.Kind() != reflect.Ptr {
+		panic("Continue.FillNoCustom: obj must be a pointer")
+	}
+	v = v.Elem()
+	c.fc.doFill(v, flagNoCustomFill)
+}
+
+const defaultStringMaxLen = 20
+
+// String makes a random string up to n characters long. If n is 0, the default
+// size range is [0-20). The returned string may include a variety of (valid)
+// UTF-8 encodings.
+func (c Continue) String(n int) string {
+	return randString(c.Rand, n)
+}
+
+// Uint64 makes random 64 bit numbers.
+// Weirdly, rand doesn't have a function that gives you 64 random bits.
+func (c Continue) Uint64() uint64 {
+	return randUint64(c.Rand)
+}
+
+// Bool returns true or false randomly.
+func (c Continue) Bool() bool {
+	return randBool(c.Rand)
+}
+
+func fillInt(v reflect.Value, r *rand.Rand) {
+	v.SetInt(int64(randUint64(r)))
+}
+
+func fillUint(v reflect.Value, r *rand.Rand) {
+	v.SetUint(randUint64(r))
+}
+
+func randfillTime(t *time.Time, c Continue) {
+	var sec, nsec int64
+	// Allow for about 1000 years of random time values, which keeps things
+	// like JSON parsing reasonably happy.
+	sec = c.Rand.Int63n(1000 * 365 * 24 * 60 * 60)
+	// Nanosecond values greater than 1Bn are technically allowed but result in
+	// time.Time values with invalid timezone offsets.
+	nsec = c.Rand.Int63n(999999999)
+	*t = time.Unix(sec, nsec)
+}
+
+var fillFuncMap = map[reflect.Kind]func(reflect.Value, *rand.Rand){
+	reflect.Bool: func(v reflect.Value, r *rand.Rand) {
+		v.SetBool(randBool(r))
+	},
+	reflect.Int:     fillInt,
+	reflect.Int8:    fillInt,
+	reflect.Int16:   fillInt,
+	reflect.Int32:   fillInt,
+	reflect.Int64:   fillInt,
+	reflect.Uint:    fillUint,
+	reflect.Uint8:   fillUint,
+	reflect.Uint16:  fillUint,
+	reflect.Uint32:  fillUint,
+	reflect.Uint64:  fillUint,
+	reflect.Uintptr: fillUint,
+	reflect.Float32: func(v reflect.Value, r *rand.Rand) {
+		v.SetFloat(float64(r.Float32()))
+	},
+	reflect.Float64: func(v reflect.Value, r *rand.Rand) {
+		v.SetFloat(r.Float64())
+	},
+	reflect.Complex64: func(v reflect.Value, r *rand.Rand) {
+		v.SetComplex(complex128(complex(r.Float32(), r.Float32())))
+	},
+	reflect.Complex128: func(v reflect.Value, r *rand.Rand) {
+		v.SetComplex(complex(r.Float64(), r.Float64()))
+	},
+	reflect.String: func(v reflect.Value, r *rand.Rand) {
+		v.SetString(randString(r, 0))
+	},
+	reflect.UnsafePointer: func(v reflect.Value, r *rand.Rand) {
+		panic("filling of UnsafePointers is not implemented")
+	},
+}
+
+// randBool returns true or false randomly.
+func randBool(r *rand.Rand) bool {
+	return r.Int31()&(1<<30) == 0
+}
+
+type int63nPicker interface {
+	Int63n(int64) int64
+}
+
+// UnicodeRange describes a sequential range of unicode characters.
+// Last must be numerically greater than First.
+type UnicodeRange struct {
+	First, Last rune
+}
+
+// UnicodeRanges describes an arbitrary number of sequential ranges of unicode characters.
+// To be useful, each range must have at least one character (First <= Last) and
+// there must be at least one range.
+type UnicodeRanges []UnicodeRange
+
+// choose returns a random unicode character from the given range, using the
+// given randomness source.
+func (ur UnicodeRange) choose(r int63nPicker) rune {
+	count := int64(ur.Last - ur.First + 1)
+	return ur.First + rune(r.Int63n(count))
+}
+
+// CustomStringFillFunc constructs a FillFunc which produces random strings.
+// Each character is selected from the range ur. If there are no characters
+// in the range (cr.Last < cr.First), this will panic.
+func (ur UnicodeRange) CustomStringFillFunc(n int) func(s *string, c Continue) {
+	ur.check()
+	return func(s *string, c Continue) {
+		*s = ur.randString(c.Rand, n)
+	}
+}
+
+// check is a function that used to check whether the first of ur(UnicodeRange)
+// is greater than the last one.
+func (ur UnicodeRange) check() {
+	if ur.Last < ur.First {
+		panic("UnicodeRange.check: the last encoding must be greater than the first")
+	}
+}
+
+// randString of UnicodeRange makes a random string up to 20 characters long.
+// Each character is selected form ur(UnicodeRange).
+func (ur UnicodeRange) randString(r *rand.Rand, max int) string {
+	if max == 0 {
+		max = defaultStringMaxLen
+	}
+	n := r.Intn(max)
+	sb := strings.Builder{}
+	sb.Grow(n)
+	for i := 0; i < n; i++ {
+		sb.WriteRune(ur.choose(r))
+	}
+	return sb.String()
+}
+
+// defaultUnicodeRanges sets a default unicode range when users do not set
+// CustomStringFillFunc() but want to fill strings.
+var defaultUnicodeRanges = UnicodeRanges{
+	{' ', '~'},           // ASCII characters
+	{'\u00a0', '\u02af'}, // Multi-byte encoded characters
+	{'\u4e00', '\u9fff'}, // Common CJK (even longer encodings)
+}
+
+// CustomStringFillFunc constructs a FillFunc which produces random strings.
+// Each character is selected from one of the ranges of ur(UnicodeRanges).
+// Each range has an equal probability of being chosen. If there are no ranges,
+// or a selected range has no characters (.Last < .First), this will panic.
+// Do not modify any of the ranges in ur after calling this function.
+func (ur UnicodeRanges) CustomStringFillFunc(n int) func(s *string, c Continue) {
+	// Check unicode ranges slice is empty.
+	if len(ur) == 0 {
+		panic("UnicodeRanges is empty")
+	}
+	// if not empty, each range should be checked.
+	for i := range ur {
+		ur[i].check()
+	}
+	return func(s *string, c Continue) {
+		*s = ur.randString(c.Rand, n)
+	}
+}
+
+// randString of UnicodeRanges makes a random string up to 20 characters long.
+// Each character is selected form one of the ranges of ur(UnicodeRanges),
+// and each range has an equal probability of being chosen.
+func (ur UnicodeRanges) randString(r *rand.Rand, max int) string {
+	if max == 0 {
+		max = defaultStringMaxLen
+	}
+	n := r.Intn(max)
+	sb := strings.Builder{}
+	sb.Grow(n)
+	for i := 0; i < n; i++ {
+		sb.WriteRune(ur[r.Intn(len(ur))].choose(r))
+	}
+	return sb.String()
+}
+
+// randString makes a random string up to 20 characters long. The returned string
+// may include a variety of (valid) UTF-8 encodings.
+func randString(r *rand.Rand, max int) string {
+	return defaultUnicodeRanges.randString(r, max)
+}
+
+// randUint64 makes random 64 bit numbers.
+// Weirdly, rand doesn't have a function that gives you 64 random bits.
+func randUint64(r *rand.Rand) uint64 {
+	return uint64(r.Uint32())<<32 | uint64(r.Uint32())
+}
diff --git a/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/LICENSE b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/LICENSE
new file mode 100644
index 0000000000..8dada3edaf
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/doc.go b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/doc.go
new file mode 100644
index 0000000000..9081ccbc73
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/doc.go
@@ -0,0 +1,28 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Package schema defines a targeted schema language which allows one to
+// represent all the schema information necessary to perform "structured"
+// merges and diffs.
+//
+// Due to the targeted nature of the data model, the schema language can fit in
+// just a few hundred lines of go code, making it much more understandable and
+// concise than e.g. OpenAPI.
+//
+// This schema was derived by observing the API objects used by Kubernetes, and
+// formalizing a model which allows certain operations ("apply") to be more
+// well defined. It is currently missing one feature: one-of ("unions").
+package schema
diff --git a/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/elements.go b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/elements.go
new file mode 100644
index 0000000000..5d3707a5b5
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/elements.go
@@ -0,0 +1,375 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package schema
+
+import (
+	"sync"
+)
+
+// Schema is a list of named types.
+//
+// Schema types are indexed in a map before the first search so this type
+// should be considered immutable.
+type Schema struct {
+	Types []TypeDef `yaml:"types,omitempty"`
+
+	once sync.Once
+	m    map[string]TypeDef
+
+	lock sync.Mutex
+	// Cached results of resolving type references to atoms. Only stores
+	// type references which require fields of Atom to be overriden.
+	resolvedTypes map[TypeRef]Atom
+}
+
+// A TypeSpecifier references a particular type in a schema.
+type TypeSpecifier struct {
+	Type   TypeRef `yaml:"type,omitempty"`
+	Schema Schema  `yaml:"schema,omitempty"`
+}
+
+// TypeDef represents a named type in a schema.
+type TypeDef struct {
+	// Top level types should be named. Every type must have a unique name.
+	Name string `yaml:"name,omitempty"`
+
+	Atom `yaml:"atom,omitempty,inline"`
+}
+
+// TypeRef either refers to a named type or declares an inlined type.
+type TypeRef struct {
+	// Either the name or one member of Atom should be set.
+	NamedType *string `yaml:"namedType,omitempty"`
+	Inlined   Atom    `yaml:",inline,omitempty"`
+
+	// If this reference refers to a map-type or list-type, this field overrides
+	// the `ElementRelationship` of the referred type when resolved.
+	// If this field is nil, then it has no effect.
+	// See `Map` and `List` for more information about `ElementRelationship`
+	ElementRelationship *ElementRelationship `yaml:"elementRelationship,omitempty"`
+}
+
+// Atom represents the smallest possible pieces of the type system.
+// Each set field in the Atom represents a possible type for the object.
+// If none of the fields are set, any object will fail validation against the atom.
+type Atom struct {
+	*Scalar `yaml:"scalar,omitempty"`
+	*List   `yaml:"list,omitempty"`
+	*Map    `yaml:"map,omitempty"`
+}
+
+// Scalar (AKA "primitive") represents a type which has a single value which is
+// either numeric, string, or boolean, or untyped for any of them.
+//
+// TODO: split numeric into float/int? Something even more fine-grained?
+type Scalar string
+
+const (
+	Numeric = Scalar("numeric")
+	String  = Scalar("string")
+	Boolean = Scalar("boolean")
+	Untyped = Scalar("untyped")
+)
+
+// ElementRelationship is an enum of the different possible relationships
+// between the elements of container types (maps, lists).
+type ElementRelationship string
+
+const (
+	// Associative only applies to lists (see the documentation there).
+	Associative = ElementRelationship("associative")
+	// Atomic makes container types (lists, maps) behave
+	// as scalars / leaf fields
+	Atomic = ElementRelationship("atomic")
+	// Separable means the items of the container type have no particular
+	// relationship (default behavior for maps).
+	Separable = ElementRelationship("separable")
+)
+
+// Map is a key-value pair. Its default semantics are the same as an
+// associative list, but:
+//   - It is serialized differently:
+//     map:  {"k": {"value": "v"}}
+//     list: [{"key": "k", "value": "v"}]
+//   - Keys must be string typed.
+//   - Keys can't have multiple components.
+//
+// Optionally, maps may be atomic (for example, imagine representing an RGB
+// color value--it doesn't make sense to have different actors own the R and G
+// values).
+//
+// Maps may also represent a type which is composed of a number of different fields.
+// Each field has a name and a type.
+//
+// Fields are indexed in a map before the first search so this type
+// should be considered immutable.
+type Map struct {
+	// Each struct field appears exactly once in this list. The order in
+	// this list defines the canonical field ordering.
+	Fields []StructField `yaml:"fields,omitempty"`
+
+	// A Union is a grouping of fields with special rules. It may refer to
+	// one or more fields in the above list. A given field from the above
+	// list may be referenced in exactly 0 or 1 places in the below list.
+	// One can have multiple unions in the same struct, but the fields can't
+	// overlap between unions.
+	Unions []Union `yaml:"unions,omitempty"`
+
+	// ElementType is the type of the structs's unknown fields.
+	ElementType TypeRef `yaml:"elementType,omitempty"`
+
+	// ElementRelationship states the relationship between the map's items.
+	// * `separable` (or unset) implies that each element is 100% independent.
+	// * `atomic` implies that all elements depend on each other, and this
+	//   is effectively a scalar / leaf field; it doesn't make sense for
+	//   separate actors to set the elements. Example: an RGB color struct;
+	//   it would never make sense to "own" only one component of the
+	//   color.
+	// The default behavior for maps is `separable`; it's permitted to
+	// leave this unset to get the default behavior.
+	ElementRelationship ElementRelationship `yaml:"elementRelationship,omitempty"`
+
+	once sync.Once
+	m    map[string]StructField
+}
+
+// FindField is a convenience function that returns the referenced StructField,
+// if it exists, or (nil, false) if it doesn't.
+func (m *Map) FindField(name string) (StructField, bool) {
+	m.once.Do(func() {
+		m.m = make(map[string]StructField, len(m.Fields))
+		for _, field := range m.Fields {
+			m.m[field.Name] = field
+		}
+	})
+	sf, ok := m.m[name]
+	return sf, ok
+}
+
+// CopyInto this instance of Map into the other
+// If other is nil this method does nothing.
+// If other is already initialized, overwrites it with this instance
+// Warning: Not thread safe
+func (m *Map) CopyInto(dst *Map) {
+	if dst == nil {
+		return
+	}
+
+	// Map type is considered immutable so sharing references
+	dst.Fields = m.Fields
+	dst.ElementType = m.ElementType
+	dst.Unions = m.Unions
+	dst.ElementRelationship = m.ElementRelationship
+
+	if m.m != nil {
+		// If cache is non-nil then the once token had been consumed.
+		// Must reset token and use it again to ensure same semantics.
+		dst.once = sync.Once{}
+		dst.once.Do(func() {
+			dst.m = m.m
+		})
+	}
+}
+
+// UnionFields are mapping between the fields that are part of the union and
+// their discriminated value. The discriminated value has to be set, and
+// should not conflict with other discriminated value in the list.
+type UnionField struct {
+	// FieldName is the name of the field that is part of the union. This
+	// is the serialized form of the field.
+	FieldName string `yaml:"fieldName"`
+	// Discriminatorvalue is the value of the discriminator to
+	// select that field. If the union doesn't have a discriminator,
+	// this field is ignored.
+	DiscriminatorValue string `yaml:"discriminatorValue"`
+}
+
+// Union, or oneof, means that only one of multiple fields of a structure can be
+// set at a time. Setting the discriminator helps clearing oher fields:
+// - If discriminator changed to non-nil, and a new field has been added
+// that doesn't match, an error is returned,
+// - If discriminator hasn't changed and two fields or more are set, an
+// error is returned,
+// - If discriminator changed to non-nil, all other fields but the
+// discriminated one will be cleared,
+// - Otherwise, If only one field is left, update discriminator to that value.
+type Union struct {
+	// Discriminator, if present, is the name of the field that
+	// discriminates fields in the union. The mapping between the value of
+	// the discriminator and the field is done by using the Fields list
+	// below.
+	Discriminator *string `yaml:"discriminator,omitempty"`
+
+	// DeduceInvalidDiscriminator indicates if the discriminator
+	// should be updated automatically based on the fields set. This
+	// typically defaults to false since we don't want to deduce by
+	// default (the behavior exists to maintain compatibility on
+	// existing types and shouldn't be used for new types).
+	DeduceInvalidDiscriminator bool `yaml:"deduceInvalidDiscriminator,omitempty"`
+
+	// This is the list of fields that belong to this union. All the
+	// fields present in here have to be part of the parent
+	// structure. Discriminator (if oneOf has one), is NOT included in
+	// this list. The value for field is how we map the name of the field
+	// to actual value for discriminator.
+	Fields []UnionField `yaml:"fields,omitempty"`
+}
+
+// StructField pairs a field name with a field type.
+type StructField struct {
+	// Name is the field name.
+	Name string `yaml:"name,omitempty"`
+	// Type is the field type.
+	Type TypeRef `yaml:"type,omitempty"`
+	// Default value for the field, nil if not present.
+	Default interface{} `yaml:"default,omitempty"`
+}
+
+// List represents a type which contains a zero or more elements, all of the
+// same subtype. Lists may be either associative: each element is more or less
+// independent and could be managed by separate entities in the system; or
+// atomic, where the elements are heavily dependent on each other: it is not
+// sensible to change one element without considering the ramifications on all
+// the other elements.
+type List struct {
+	// ElementType is the type of the list's elements.
+	ElementType TypeRef `yaml:"elementType,omitempty"`
+
+	// ElementRelationship states the relationship between the list's elements
+	// and must have one of these values:
+	// * `atomic`: the list is treated as a single entity, like a scalar.
+	// * `associative`:
+	//   - If the list element is a scalar, the list is treated as a set.
+	//   - If the list element is a map, the list is treated as a map.
+	// There is no default for this value for lists; all schemas must
+	// explicitly state the element relationship for all lists.
+	ElementRelationship ElementRelationship `yaml:"elementRelationship,omitempty"`
+
+	// Iff ElementRelationship is `associative`, and the element type is
+	// map, then Keys must have non-zero length, and it lists the fields
+	// of the element's map type which are to be used as the keys of the
+	// list.
+	//
+	// TODO: change this to "non-atomic struct" above and make the code reflect this.
+	//
+	// Each key must refer to a single field name (no nesting, not JSONPath).
+	Keys []string `yaml:"keys,omitempty"`
+}
+
+// FindNamedType is a convenience function that returns the referenced TypeDef,
+// if it exists, or (nil, false) if it doesn't.
+func (s *Schema) FindNamedType(name string) (TypeDef, bool) {
+	s.once.Do(func() {
+		s.m = make(map[string]TypeDef, len(s.Types))
+		for _, t := range s.Types {
+			s.m[t.Name] = t
+		}
+	})
+	t, ok := s.m[name]
+	return t, ok
+}
+
+func (s *Schema) resolveNoOverrides(tr TypeRef) (Atom, bool) {
+	result := Atom{}
+
+	if tr.NamedType != nil {
+		t, ok := s.FindNamedType(*tr.NamedType)
+		if !ok {
+			return Atom{}, false
+		}
+
+		result = t.Atom
+	} else {
+		result = tr.Inlined
+	}
+
+	return result, true
+}
+
+// Resolve is a convenience function which returns the atom referenced, whether
+// it is inline or named. Returns (Atom{}, false) if the type can't be resolved.
+//
+// This allows callers to not care about the difference between a (possibly
+// inlined) reference and a definition.
+func (s *Schema) Resolve(tr TypeRef) (Atom, bool) {
+	// If this is a plain reference with no overrides, just return the type
+	if tr.ElementRelationship == nil {
+		return s.resolveNoOverrides(tr)
+	}
+
+	s.lock.Lock()
+	defer s.lock.Unlock()
+
+	if s.resolvedTypes == nil {
+		s.resolvedTypes = make(map[TypeRef]Atom)
+	}
+
+	var result Atom
+	var exists bool
+
+	// Return cached result if available
+	// If not, calculate result and cache it
+	if result, exists = s.resolvedTypes[tr]; !exists {
+		if result, exists = s.resolveNoOverrides(tr); exists {
+			// Allow field-level electives to override the referred type's modifiers
+			switch {
+			case result.Map != nil:
+				mapCopy := Map{}
+				result.Map.CopyInto(&mapCopy)
+				mapCopy.ElementRelationship = *tr.ElementRelationship
+				result.Map = &mapCopy
+			case result.List != nil:
+				listCopy := *result.List
+				listCopy.ElementRelationship = *tr.ElementRelationship
+				result.List = &listCopy
+			case result.Scalar != nil:
+				return Atom{}, false
+			default:
+				return Atom{}, false
+			}
+		} else {
+			return Atom{}, false
+		}
+
+		// Save result. If it is nil, that is also recorded as not existing.
+		s.resolvedTypes[tr] = result
+	}
+
+	return result, true
+}
+
+// Clones this instance of Schema into the other
+// If other is nil this method does nothing.
+// If other is already initialized, overwrites it with this instance
+// Warning: Not thread safe
+func (s *Schema) CopyInto(dst *Schema) {
+	if dst == nil {
+		return
+	}
+
+	// Schema type is considered immutable so sharing references
+	dst.Types = s.Types
+
+	if s.m != nil {
+		// If cache is non-nil then the once token had been consumed.
+		// Must reset token and use it again to ensure same semantics.
+		dst.once = sync.Once{}
+		dst.once.Do(func() {
+			dst.m = s.m
+		})
+	}
+}
diff --git a/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/equals.go b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/equals.go
new file mode 100644
index 0000000000..b668eff833
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/equals.go
@@ -0,0 +1,202 @@
+/*
+Copyright 2019 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package schema
+
+import "reflect"
+
+// Equals returns true iff the two Schemas are equal.
+func (a *Schema) Equals(b *Schema) bool {
+	if a == nil || b == nil {
+		return a == nil && b == nil
+	}
+
+	if len(a.Types) != len(b.Types) {
+		return false
+	}
+	for i := range a.Types {
+		if !a.Types[i].Equals(&b.Types[i]) {
+			return false
+		}
+	}
+	return true
+}
+
+// Equals returns true iff the two TypeRefs are equal.
+//
+// Note that two typerefs that have an equivalent type but where one is
+// inlined and the other is named, are not considered equal.
+func (a *TypeRef) Equals(b *TypeRef) bool {
+	if a == nil || b == nil {
+		return a == nil && b == nil
+	}
+	if (a.NamedType == nil) != (b.NamedType == nil) {
+		return false
+	}
+	if a.NamedType != nil {
+		if *a.NamedType != *b.NamedType {
+			return false
+		}
+		//return true
+	}
+	if a.ElementRelationship != b.ElementRelationship {
+		return false
+	}
+	return a.Inlined.Equals(&b.Inlined)
+}
+
+// Equals returns true iff the two TypeDefs are equal.
+func (a *TypeDef) Equals(b *TypeDef) bool {
+	if a == nil || b == nil {
+		return a == nil && b == nil
+	}
+	if a.Name != b.Name {
+		return false
+	}
+	return a.Atom.Equals(&b.Atom)
+}
+
+// Equals returns true iff the two Atoms are equal.
+func (a *Atom) Equals(b *Atom) bool {
+	if a == nil || b == nil {
+		return a == nil && b == nil
+	}
+	if (a.Scalar == nil) != (b.Scalar == nil) {
+		return false
+	}
+	if (a.List == nil) != (b.List == nil) {
+		return false
+	}
+	if (a.Map == nil) != (b.Map == nil) {
+		return false
+	}
+	switch {
+	case a.Scalar != nil:
+		return *a.Scalar == *b.Scalar
+	case a.List != nil:
+		return a.List.Equals(b.List)
+	case a.Map != nil:
+		return a.Map.Equals(b.Map)
+	}
+	return true
+}
+
+// Equals returns true iff the two Maps are equal.
+func (a *Map) Equals(b *Map) bool {
+	if a == nil || b == nil {
+		return a == nil && b == nil
+	}
+	if !a.ElementType.Equals(&b.ElementType) {
+		return false
+	}
+	if a.ElementRelationship != b.ElementRelationship {
+		return false
+	}
+	if len(a.Fields) != len(b.Fields) {
+		return false
+	}
+	for i := range a.Fields {
+		if !a.Fields[i].Equals(&b.Fields[i]) {
+			return false
+		}
+	}
+	if len(a.Unions) != len(b.Unions) {
+		return false
+	}
+	for i := range a.Unions {
+		if !a.Unions[i].Equals(&b.Unions[i]) {
+			return false
+		}
+	}
+	return true
+}
+
+// Equals returns true iff the two Unions are equal.
+func (a *Union) Equals(b *Union) bool {
+	if a == nil || b == nil {
+		return a == nil && b == nil
+	}
+	if (a.Discriminator == nil) != (b.Discriminator == nil) {
+		return false
+	}
+	if a.Discriminator != nil {
+		if *a.Discriminator != *b.Discriminator {
+			return false
+		}
+	}
+	if a.DeduceInvalidDiscriminator != b.DeduceInvalidDiscriminator {
+		return false
+	}
+	if len(a.Fields) != len(b.Fields) {
+		return false
+	}
+	for i := range a.Fields {
+		if !a.Fields[i].Equals(&b.Fields[i]) {
+			return false
+		}
+	}
+	return true
+}
+
+// Equals returns true iff the two UnionFields are equal.
+func (a *UnionField) Equals(b *UnionField) bool {
+	if a == nil || b == nil {
+		return a == nil && b == nil
+	}
+	if a.FieldName != b.FieldName {
+		return false
+	}
+	if a.DiscriminatorValue != b.DiscriminatorValue {
+		return false
+	}
+	return true
+}
+
+// Equals returns true iff the two StructFields are equal.
+func (a *StructField) Equals(b *StructField) bool {
+	if a == nil || b == nil {
+		return a == nil && b == nil
+	}
+	if a.Name != b.Name {
+		return false
+	}
+	if !reflect.DeepEqual(a.Default, b.Default) {
+		return false
+	}
+	return a.Type.Equals(&b.Type)
+}
+
+// Equals returns true iff the two Lists are equal.
+func (a *List) Equals(b *List) bool {
+	if a == nil || b == nil {
+		return a == nil && b == nil
+	}
+	if !a.ElementType.Equals(&b.ElementType) {
+		return false
+	}
+	if a.ElementRelationship != b.ElementRelationship {
+		return false
+	}
+	if len(a.Keys) != len(b.Keys) {
+		return false
+	}
+	for i := range a.Keys {
+		if a.Keys[i] != b.Keys[i] {
+			return false
+		}
+	}
+	return true
+}
diff --git a/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/schemaschema.go b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/schemaschema.go
new file mode 100644
index 0000000000..6eb6c36df3
--- /dev/null
+++ b/upstream/vendor/sigs.k8s.io/structured-merge-diff/v6/schema/schemaschema.go
@@ -0,0 +1,165 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package schema
+
+// SchemaSchemaYAML is a schema against which you can validate other schemas.
+// It will validate itself. It can be unmarshalled into a Schema type.
+var SchemaSchemaYAML = `types:
+- name: schema
+  map:
+    fields:
+      - name: types
+        type:
+          list:
+            elementRelationship: associative
+            elementType:
+              namedType: typeDef
+            keys:
+            - name
+- name: typeDef
+  map:
+    fields:
+    - name: name
+      type:
+        scalar: string
+    - name: scalar
+      type:
+        scalar: string
+    - name: map
+      type:
+        namedType: map
+    - name: list
+      type:
+        namedType: list
+    - name: untyped
+      type:
+        namedType: untyped
+- name: typeRef
+  map:
+    fields:
+    - name: namedType
+      type:
+        scalar: string
+    - name: scalar
+      type:
+        scalar: string
+    - name: map
+      type:
+        namedType: map
+    - name: list
+      type:
+        namedType: list
+    - name: untyped
+      type:
+        namedType: untyped
+    - name: elementRelationship
+      type:
+        scalar: string
+- name: scalar
+  scalar: string
+- name: map
+  map:
+    fields:
+    - name: fields
+      type:
+        list:
+          elementType:
+            namedType: structField
+          elementRelationship: associative
+          keys: [ "name" ]
+    - name: unions
+      type:
+        list:
+          elementType:
+            namedType: union
+          elementRelationship: atomic
+    - name: elementType
+      type:
+        namedType: typeRef
+    - name: elementRelationship
+      type:
+        scalar: string
+- name: unionField
+  map:
+    fields:
+    - name: fieldName
+      type:
+        scalar: string
+    - name: discriminatorValue
+      type:
+        scalar: string
+- name: union
+  map:
+    fields:
+    - name: discriminator
+      type:
+        scalar: string
+    - name: deduceInvalidDiscriminator
+      type:
+        scalar: boolean
+    - name: fields
+      type:
+        list:
+          elementRelationship: associative
+          elementType:
+            namedType: unionField
+          keys:
+          - fieldName
+- name: structField
+  map:
+    fields:
+    - name: name
+      type:
+        scalar: string
+    - name: type
+      type:
+        namedType: typeRef
+    - name: default
+      type:
+        namedType: __untyped_atomic_
+- name: list
+  map:
+    fields:
+    - name: elementType
+      type:
+        namedType: typeRef
+    - name: elementRelationship
+      type:
+        scalar: string
+    - name: keys
+      type:
+        list:
+          elementType:
+            scalar: string
+          elementRelationship: atomic
+- name: untyped
+  map:
+    fields:
+    - name: elementRelationship
+      type:
+        scalar: string
+- name: __untyped_atomic_
+  scalar: untyped
+  list:
+    elementType:
+      namedType: __untyped_atomic_
+    elementRelationship: atomic
+  map:
+    elementType:
+      namedType: __untyped_atomic_
+    elementRelationship: atomic
+`