mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	generated: hack/update-vendor.sh
This commit is contained in:
		
							
								
								
									
										31
									
								
								LICENSES/vendor/golang.org/x/mod/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								LICENSES/vendor/golang.org/x/mod/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					= vendor/golang.org/x/mod licensed under: =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2009 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					modification, are permitted provided that the following conditions are
 | 
				
			||||||
 | 
					met:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   * Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					   * Redistributions in binary form must reproduce the above
 | 
				
			||||||
 | 
					copyright notice, this list of conditions and the following disclaimer
 | 
				
			||||||
 | 
					in the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					distribution.
 | 
				
			||||||
 | 
					   * Neither the name of Google Inc. nor the names of its
 | 
				
			||||||
 | 
					contributors may be used to endorse or promote products derived from
 | 
				
			||||||
 | 
					this software without specific prior written permission.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
				
			||||||
 | 
					"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
				
			||||||
 | 
					LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
				
			||||||
 | 
					A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
				
			||||||
 | 
					OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
				
			||||||
 | 
					LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
				
			||||||
 | 
					DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
				
			||||||
 | 
					THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
				
			||||||
 | 
					(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
				
			||||||
 | 
					OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					= vendor/golang.org/x/mod/LICENSE 5d4950ecb7b26d2c5e4e7b4e0dd74707
 | 
				
			||||||
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							@@ -412,6 +412,7 @@ replace (
 | 
				
			|||||||
	github.com/xiang90/probing => github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2
 | 
						github.com/xiang90/probing => github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2
 | 
				
			||||||
	github.com/xlab/handysort => github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1
 | 
						github.com/xlab/handysort => github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1
 | 
				
			||||||
	github.com/xordataexchange/crypt => github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77
 | 
						github.com/xordataexchange/crypt => github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77
 | 
				
			||||||
 | 
						github.com/yuin/goldmark => github.com/yuin/goldmark v1.1.27
 | 
				
			||||||
	go.etcd.io/bbolt => go.etcd.io/bbolt v1.3.5
 | 
						go.etcd.io/bbolt => go.etcd.io/bbolt v1.3.5
 | 
				
			||||||
	go.etcd.io/etcd => go.etcd.io/etcd v0.5.0-alpha.5.0.20200716221620-18dfb9cca345 // 18dfb9cca345 is the SHA for git tag v3.4.10
 | 
						go.etcd.io/etcd => go.etcd.io/etcd v0.5.0-alpha.5.0.20200716221620-18dfb9cca345 // 18dfb9cca345 is the SHA for git tag v3.4.10
 | 
				
			||||||
	go.mongodb.org/mongo-driver => go.mongodb.org/mongo-driver v1.1.2
 | 
						go.mongodb.org/mongo-driver => go.mongodb.org/mongo-driver v1.1.2
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								go.sum
									
									
									
									
									
								
							@@ -462,6 +462,7 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q
 | 
				
			|||||||
github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1 h1:j2hhcujLRHAg872RWAV5yaUrEjHEObwDv3aImCaNLek=
 | 
					github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1 h1:j2hhcujLRHAg872RWAV5yaUrEjHEObwDv3aImCaNLek=
 | 
				
			||||||
github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8=
 | 
					github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8=
 | 
				
			||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
					github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
				
			||||||
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
 | 
					go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
 | 
					go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
 | 
				
			||||||
go.etcd.io/etcd v0.5.0-alpha.5.0.20200716221620-18dfb9cca345 h1:2gOG36vt1BhUqpzxwZLZJxUim2dHB05vw+RAn4Q6YOU=
 | 
					go.etcd.io/etcd v0.5.0-alpha.5.0.20200716221620-18dfb9cca345 h1:2gOG36vt1BhUqpzxwZLZJxUim2dHB05vw+RAn4Q6YOU=
 | 
				
			||||||
@@ -476,16 +477,17 @@ go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
 | 
				
			|||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 | 
					go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 | 
				
			||||||
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
 | 
					go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
 | 
				
			||||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 | 
					go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20191227195350-da58074b4299 h1:zQpM52jfKHG6II1ISZY1ZcpygvuSFZpLwfluuF89XOg=
 | 
					golang.org/x/exp v0.0.0-20191227195350-da58074b4299 h1:zQpM52jfKHG6II1ISZY1ZcpygvuSFZpLwfluuF89XOg=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 | 
					golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 | 
				
			||||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 | 
					golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
 | 
					golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
 | 
				
			||||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
 | 
					golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
 | 
				
			||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
					golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0HISf9D4TzseP40cEA6IGfs=
 | 
					golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0HISf9D4TzseP40cEA6IGfs=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
 | 
					golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
 | 
				
			||||||
@@ -496,8 +498,8 @@ golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
 | 
				
			|||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
					golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
				
			||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
 | 
					golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
 | 
				
			||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
					golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0 h1:6txNFSnY+tteYoO+hf01EpdYcYZiurdC9MDIrcUzEu4=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
				
			||||||
gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
 | 
					gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								staging/src/k8s.io/api/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5
									
								
								staging/src/k8s.io/api/go.sum
									
									
									
										generated
									
									
									
								
							@@ -92,6 +92,7 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
 | 
				
			|||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
					github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
					github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
					golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
					golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
					golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
				
			||||||
@@ -101,8 +102,11 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
 | 
				
			|||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
					golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
@@ -110,6 +114,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
 | 
				
			|||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								staging/src/k8s.io/apiextensions-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								staging/src/k8s.io/apiextensions-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							@@ -381,6 +381,7 @@ github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv
 | 
				
			|||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
 | 
					github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
 | 
				
			||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 | 
					github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 | 
				
			||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
					github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
				
			||||||
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
					go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
 | 
					go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
					go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
				
			||||||
@@ -411,8 +412,8 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -432,6 +433,9 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc
 | 
				
			|||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
					golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
				
			||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
					golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
				
			||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
					golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
@@ -452,8 +456,11 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
@@ -525,10 +532,11 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
 | 
				
			|||||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
 | 
					golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
					golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0 h1:6txNFSnY+tteYoO+hf01EpdYcYZiurdC9MDIrcUzEu4=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ require (
 | 
				
			|||||||
	github.com/pkg/errors v0.9.1 // indirect
 | 
						github.com/pkg/errors v0.9.1 // indirect
 | 
				
			||||||
	github.com/spf13/pflag v1.0.5
 | 
						github.com/spf13/pflag v1.0.5
 | 
				
			||||||
	github.com/stretchr/testify v1.4.0
 | 
						github.com/stretchr/testify v1.4.0
 | 
				
			||||||
	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
 | 
						golang.org/x/net v0.0.0-20200707034311-ab3426394381
 | 
				
			||||||
	golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 // indirect
 | 
						golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 // indirect
 | 
				
			||||||
	golang.org/x/text v0.3.3 // indirect
 | 
						golang.org/x/text v0.3.3 // indirect
 | 
				
			||||||
	google.golang.org/protobuf v1.24.0 // indirect
 | 
						google.golang.org/protobuf v1.24.0 // indirect
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								staging/src/k8s.io/apimachinery/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5
									
								
								staging/src/k8s.io/apimachinery/go.sum
									
									
									
										generated
									
									
									
								
							@@ -106,6 +106,7 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
 | 
				
			|||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
					github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
					github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
					golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
					golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
					golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
				
			||||||
@@ -115,8 +116,11 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
 | 
				
			|||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
					golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
@@ -124,6 +128,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
 | 
				
			|||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8=
 | 
					golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,8 +33,8 @@ require (
 | 
				
			|||||||
	go.etcd.io/bbolt v1.3.5 // indirect
 | 
						go.etcd.io/bbolt v1.3.5 // indirect
 | 
				
			||||||
	go.etcd.io/etcd v0.5.0-alpha.5.0.20200716221620-18dfb9cca345
 | 
						go.etcd.io/etcd v0.5.0-alpha.5.0.20200716221620-18dfb9cca345
 | 
				
			||||||
	go.uber.org/zap v1.10.0
 | 
						go.uber.org/zap v1.10.0
 | 
				
			||||||
	golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975
 | 
						golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
 | 
				
			||||||
	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
 | 
						golang.org/x/net v0.0.0-20200707034311-ab3426394381
 | 
				
			||||||
	golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
 | 
						golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
 | 
				
			||||||
	golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4
 | 
						golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4
 | 
				
			||||||
	google.golang.org/grpc v1.27.0
 | 
						google.golang.org/grpc v1.27.0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								staging/src/k8s.io/apiserver/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								staging/src/k8s.io/apiserver/go.sum
									
									
									
										generated
									
									
									
								
							@@ -318,8 +318,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -358,6 +358,8 @@ golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								staging/src/k8s.io/cli-runtime/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								staging/src/k8s.io/cli-runtime/go.sum
									
									
									
										generated
									
									
									
								
							@@ -264,8 +264,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -304,6 +304,8 @@ golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,8 +22,8 @@ require (
 | 
				
			|||||||
	github.com/peterbourgon/diskv v2.0.1+incompatible
 | 
						github.com/peterbourgon/diskv v2.0.1+incompatible
 | 
				
			||||||
	github.com/spf13/pflag v1.0.5
 | 
						github.com/spf13/pflag v1.0.5
 | 
				
			||||||
	github.com/stretchr/testify v1.4.0
 | 
						github.com/stretchr/testify v1.4.0
 | 
				
			||||||
	golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975
 | 
						golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
 | 
				
			||||||
	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
 | 
						golang.org/x/net v0.0.0-20200707034311-ab3426394381
 | 
				
			||||||
	golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6
 | 
						golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6
 | 
				
			||||||
	golang.org/x/time v0.0.0-20191024005414-555d28b269f0
 | 
						golang.org/x/time v0.0.0-20191024005414-555d28b269f0
 | 
				
			||||||
	k8s.io/api v0.0.0
 | 
						k8s.io/api v0.0.0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								staging/src/k8s.io/client-go/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								staging/src/k8s.io/client-go/go.sum
									
									
									
										generated
									
									
									
								
							@@ -180,8 +180,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -215,6 +215,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								staging/src/k8s.io/cloud-provider/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								staging/src/k8s.io/cloud-provider/go.sum
									
									
									
										generated
									
									
									
								
							@@ -214,8 +214,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -251,6 +251,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,6 @@ go 1.15
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	github.com/stretchr/testify v1.4.0
 | 
						github.com/stretchr/testify v1.4.0
 | 
				
			||||||
	golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 // indirect
 | 
					 | 
				
			||||||
	gopkg.in/square/go-jose.v2 v2.2.2
 | 
						gopkg.in/square/go-jose.v2 v2.2.2
 | 
				
			||||||
	k8s.io/api v0.0.0
 | 
						k8s.io/api v0.0.0
 | 
				
			||||||
	k8s.io/apimachinery v0.0.0
 | 
						k8s.io/apimachinery v0.0.0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								staging/src/k8s.io/cluster-bootstrap/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								staging/src/k8s.io/cluster-bootstrap/go.sum
									
									
									
										generated
									
									
									
								
							@@ -90,8 +90,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
 | 
				
			|||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
					github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
					github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
					golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
					golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
					golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
				
			||||||
@@ -104,6 +104,8 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
 | 
				
			|||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
					golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,8 +13,10 @@ require (
 | 
				
			|||||||
	github.com/mailru/easyjson v0.7.0 // indirect
 | 
						github.com/mailru/easyjson v0.7.0 // indirect
 | 
				
			||||||
	github.com/spf13/pflag v1.0.5
 | 
						github.com/spf13/pflag v1.0.5
 | 
				
			||||||
	github.com/stretchr/testify v1.4.0 // indirect
 | 
						github.com/stretchr/testify v1.4.0 // indirect
 | 
				
			||||||
 | 
						golang.org/x/mod v0.3.0 // indirect
 | 
				
			||||||
 | 
						golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect
 | 
				
			||||||
	golang.org/x/text v0.3.3 // indirect
 | 
						golang.org/x/text v0.3.3 // indirect
 | 
				
			||||||
	golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0 // indirect
 | 
						golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 // indirect
 | 
				
			||||||
	k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14
 | 
						k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14
 | 
				
			||||||
	k8s.io/klog/v2 v2.2.0
 | 
						k8s.io/klog/v2 v2.2.0
 | 
				
			||||||
	k8s.io/kube-openapi v0.0.0-20200427153329-656914f816f9
 | 
						k8s.io/kube-openapi v0.0.0-20200427153329-656914f816f9
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								staging/src/k8s.io/code-generator/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								staging/src/k8s.io/code-generator/go.sum
									
									
									
										generated
									
									
									
								
							@@ -76,16 +76,26 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH
 | 
				
			|||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
					github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
					github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
					github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
				
			||||||
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
					golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
					golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
					golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
 | 
					golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
@@ -99,10 +109,12 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
 | 
				
			|||||||
golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
					golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
					golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
					golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0 h1:6txNFSnY+tteYoO+hf01EpdYcYZiurdC9MDIrcUzEu4=
 | 
					golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
 | 
				
			||||||
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
 | 
					golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
				
			||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
					gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								staging/src/k8s.io/component-base/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								staging/src/k8s.io/component-base/go.sum
									
									
									
										generated
									
									
									
								
							@@ -222,8 +222,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -259,6 +259,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ require (
 | 
				
			|||||||
	github.com/golang/protobuf v1.4.2 // indirect
 | 
						github.com/golang/protobuf v1.4.2 // indirect
 | 
				
			||||||
	github.com/kr/pretty v0.2.0 // indirect
 | 
						github.com/kr/pretty v0.2.0 // indirect
 | 
				
			||||||
	github.com/stretchr/testify v1.4.0
 | 
						github.com/stretchr/testify v1.4.0
 | 
				
			||||||
	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect
 | 
						golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect
 | 
				
			||||||
	golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 // indirect
 | 
						golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 // indirect
 | 
				
			||||||
	golang.org/x/text v0.3.3 // indirect
 | 
						golang.org/x/text v0.3.3 // indirect
 | 
				
			||||||
	google.golang.org/grpc v1.27.0
 | 
						google.golang.org/grpc v1.27.0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								staging/src/k8s.io/cri-api/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								staging/src/k8s.io/cri-api/go.sum
									
									
									
										generated
									
									
									
								
							@@ -41,6 +41,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 | 
				
			|||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
					github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
					github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
					golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
					golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
					golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
				
			||||||
@@ -49,14 +50,16 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r
 | 
				
			|||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
					golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8=
 | 
					golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/csi-translation-lib/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/csi-translation-lib/go.sum
									
									
									
										generated
									
									
									
								
							@@ -196,7 +196,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -232,6 +232,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ require (
 | 
				
			|||||||
	github.com/spf13/cobra v1.0.0
 | 
						github.com/spf13/cobra v1.0.0
 | 
				
			||||||
	github.com/spf13/pflag v1.0.5
 | 
						github.com/spf13/pflag v1.0.5
 | 
				
			||||||
	github.com/stretchr/testify v1.4.0
 | 
						github.com/stretchr/testify v1.4.0
 | 
				
			||||||
	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
 | 
						golang.org/x/net v0.0.0-20200707034311-ab3426394381
 | 
				
			||||||
	k8s.io/api v0.0.0
 | 
						k8s.io/api v0.0.0
 | 
				
			||||||
	k8s.io/apimachinery v0.0.0
 | 
						k8s.io/apimachinery v0.0.0
 | 
				
			||||||
	k8s.io/apiserver v0.0.0
 | 
						k8s.io/apiserver v0.0.0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								staging/src/k8s.io/kube-aggregator/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								staging/src/k8s.io/kube-aggregator/go.sum
									
									
									
										generated
									
									
									
								
							@@ -327,6 +327,7 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb
 | 
				
			|||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
 | 
					github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
 | 
				
			||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 | 
					github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 | 
				
			||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
					github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
				
			||||||
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
					go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
 | 
					go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
					go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
				
			||||||
@@ -351,8 +352,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -372,6 +373,9 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc
 | 
				
			|||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
					golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
				
			||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
					golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
				
			||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
					golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
@@ -390,8 +394,11 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
@@ -460,10 +467,11 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
 | 
				
			|||||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
 | 
					golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
					golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0 h1:6txNFSnY+tteYoO+hf01EpdYcYZiurdC9MDIrcUzEu4=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -195,7 +195,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -231,6 +231,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/kube-proxy/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/kube-proxy/go.sum
									
									
									
										generated
									
									
									
								
							@@ -195,7 +195,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -231,6 +231,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/kube-scheduler/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/kube-scheduler/go.sum
									
									
									
										generated
									
									
									
								
							@@ -195,7 +195,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -231,6 +231,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								staging/src/k8s.io/kubectl/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13
									
								
								staging/src/k8s.io/kubectl/go.sum
									
									
									
										generated
									
									
									
								
							@@ -309,6 +309,7 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q
 | 
				
			|||||||
github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1 h1:j2hhcujLRHAg872RWAV5yaUrEjHEObwDv3aImCaNLek=
 | 
					github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1 h1:j2hhcujLRHAg872RWAV5yaUrEjHEObwDv3aImCaNLek=
 | 
				
			||||||
github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8=
 | 
					github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8=
 | 
				
			||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
					github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
				
			||||||
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
					go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
				
			||||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 | 
					go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 | 
				
			||||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 | 
					go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 | 
				
			||||||
@@ -323,8 +324,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -344,6 +345,8 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc
 | 
				
			|||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
					golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
				
			||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
					golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
				
			||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
					golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
@@ -361,8 +364,11 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
@@ -427,9 +433,10 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
 | 
				
			|||||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
 | 
					golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
					golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ go 1.15
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	github.com/gogo/protobuf v1.3.1
 | 
						github.com/gogo/protobuf v1.3.1
 | 
				
			||||||
	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
 | 
						golang.org/x/net v0.0.0-20200707034311-ab3426394381
 | 
				
			||||||
	google.golang.org/grpc v1.27.0
 | 
						google.golang.org/grpc v1.27.0
 | 
				
			||||||
	k8s.io/api v0.0.0
 | 
						k8s.io/api v0.0.0
 | 
				
			||||||
	k8s.io/apimachinery v0.0.0
 | 
						k8s.io/apimachinery v0.0.0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/kubelet/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/kubelet/go.sum
									
									
									
										generated
									
									
									
								
							@@ -198,7 +198,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -234,6 +234,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ require (
 | 
				
			|||||||
	github.com/satori/go.uuid v1.2.0 // indirect
 | 
						github.com/satori/go.uuid v1.2.0 // indirect
 | 
				
			||||||
	github.com/stretchr/testify v1.4.0
 | 
						github.com/stretchr/testify v1.4.0
 | 
				
			||||||
	github.com/vmware/govmomi v0.20.3
 | 
						github.com/vmware/govmomi v0.20.3
 | 
				
			||||||
	golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975
 | 
						golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
 | 
				
			||||||
	golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6
 | 
						golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6
 | 
				
			||||||
	google.golang.org/api v0.15.1
 | 
						google.golang.org/api v0.15.1
 | 
				
			||||||
	gopkg.in/gcfg.v1 v1.2.0
 | 
						gopkg.in/gcfg.v1 v1.2.0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								staging/src/k8s.io/legacy-cloud-providers/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								staging/src/k8s.io/legacy-cloud-providers/go.sum
									
									
									
										generated
									
									
									
								
							@@ -321,8 +321,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -362,6 +362,8 @@ golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								staging/src/k8s.io/metrics/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								staging/src/k8s.io/metrics/go.sum
									
									
									
										generated
									
									
									
								
							@@ -174,6 +174,7 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH
 | 
				
			|||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
					github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
					github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
					github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
				
			||||||
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 | 
					go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 | 
				
			||||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 | 
					go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 | 
				
			||||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 | 
					go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 | 
				
			||||||
@@ -183,8 +184,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -204,6 +205,9 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc
 | 
				
			|||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
					golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
				
			||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
					golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
				
			||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
					golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
@@ -218,8 +222,11 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
@@ -275,10 +282,11 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
 | 
				
			|||||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
 | 
					golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
					golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0 h1:6txNFSnY+tteYoO+hf01EpdYcYZiurdC9MDIrcUzEu4=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								staging/src/k8s.io/sample-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								staging/src/k8s.io/sample-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							@@ -324,6 +324,7 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb
 | 
				
			|||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
 | 
					github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
 | 
				
			||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 | 
					github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 | 
				
			||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
					github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 | 
				
			||||||
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
					go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
 | 
					go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
					go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 | 
				
			||||||
@@ -348,8 +349,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -369,6 +370,9 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc
 | 
				
			|||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
					golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
				
			||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
					golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
				
			||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
					golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
@@ -387,8 +391,11 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
@@ -457,10 +464,11 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
 | 
				
			|||||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
 | 
					golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
					golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0 h1:6txNFSnY+tteYoO+hf01EpdYcYZiurdC9MDIrcUzEu4=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								staging/src/k8s.io/sample-cli-plugin/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								staging/src/k8s.io/sample-cli-plugin/go.sum
									
									
									
										generated
									
									
									
								
							@@ -264,8 +264,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -304,6 +304,8 @@ golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								staging/src/k8s.io/sample-controller/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								staging/src/k8s.io/sample-controller/go.sum
									
									
									
										generated
									
									
									
								
							@@ -178,6 +178,7 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH
 | 
				
			|||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
					github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
					github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
					github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
				
			||||||
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 | 
					go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 | 
				
			||||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 | 
					go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 | 
				
			||||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 | 
					go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 | 
				
			||||||
@@ -187,8 +188,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			|||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
					golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
@@ -208,6 +209,9 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc
 | 
				
			|||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
					golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
				
			||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
					golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
				
			||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
					golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 | 
				
			||||||
 | 
					golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
@@ -222,8 +226,11 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
				
			|||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
					golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
@@ -279,10 +286,11 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
 | 
				
			|||||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
 | 
					golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
					golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0 h1:6txNFSnY+tteYoO+hf01EpdYcYZiurdC9MDIrcUzEu4=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200602230032-c00d67ef29d0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							@@ -342,6 +342,8 @@ filegroup(
 | 
				
			|||||||
        "//vendor/golang.org/x/crypto/poly1305:all-srcs",
 | 
					        "//vendor/golang.org/x/crypto/poly1305:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/crypto/salsa20/salsa:all-srcs",
 | 
					        "//vendor/golang.org/x/crypto/salsa20/salsa:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/crypto/ssh:all-srcs",
 | 
					        "//vendor/golang.org/x/crypto/ssh:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/mod/module:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/mod/semver:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/net/bpf:all-srcs",
 | 
					        "//vendor/golang.org/x/net/bpf:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/net/context:all-srcs",
 | 
					        "//vendor/golang.org/x/net/context:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/net/html:all-srcs",
 | 
					        "//vendor/golang.org/x/net/html:all-srcs",
 | 
				
			||||||
@@ -383,12 +385,13 @@ filegroup(
 | 
				
			|||||||
        "//vendor/golang.org/x/tools/go/internal/packagesdriver:all-srcs",
 | 
					        "//vendor/golang.org/x/tools/go/internal/packagesdriver:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/go/packages:all-srcs",
 | 
					        "//vendor/golang.org/x/tools/go/packages:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/imports:all-srcs",
 | 
					        "//vendor/golang.org/x/tools/imports:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/event:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/internal/fastwalk:all-srcs",
 | 
					        "//vendor/golang.org/x/tools/internal/fastwalk:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/gocommand:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/internal/gopathwalk:all-srcs",
 | 
					        "//vendor/golang.org/x/tools/internal/gopathwalk:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/internal/imports:all-srcs",
 | 
					        "//vendor/golang.org/x/tools/internal/imports:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/internal/module:all-srcs",
 | 
					        "//vendor/golang.org/x/tools/internal/packagesinternal:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/internal/semver:all-srcs",
 | 
					        "//vendor/golang.org/x/tools/internal/typesinternal:all-srcs",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/internal/span:all-srcs",
 | 
					 | 
				
			||||||
        "//vendor/golang.org/x/xerrors:all-srcs",
 | 
					        "//vendor/golang.org/x/xerrors:all-srcs",
 | 
				
			||||||
        "//vendor/gonum.org/v1/gonum/blas:all-srcs",
 | 
					        "//vendor/gonum.org/v1/gonum/blas:all-srcs",
 | 
				
			||||||
        "//vendor/gonum.org/v1/gonum/floats:all-srcs",
 | 
					        "//vendor/gonum.org/v1/gonum/floats:all-srcs",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,8 +2,7 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build go1.11
 | 
					// +build go1.11,!gccgo,!purego
 | 
				
			||||||
// +build !gccgo,!appengine
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
package chacha20
 | 
					package chacha20
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,8 +2,7 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build go1.11
 | 
					// +build go1.11,!gccgo,!purego
 | 
				
			||||||
// +build !gccgo,!appengine
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "textflag.h"
 | 
					#include "textflag.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										140
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_generic.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										140
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_generic.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -42,10 +42,14 @@ type Cipher struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// The last len bytes of buf are leftover key stream bytes from the previous
 | 
						// The last len bytes of buf are leftover key stream bytes from the previous
 | 
				
			||||||
	// XORKeyStream invocation. The size of buf depends on how many blocks are
 | 
						// XORKeyStream invocation. The size of buf depends on how many blocks are
 | 
				
			||||||
	// computed at a time.
 | 
						// computed at a time by xorKeyStreamBlocks.
 | 
				
			||||||
	buf [bufSize]byte
 | 
						buf [bufSize]byte
 | 
				
			||||||
	len int
 | 
						len int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// overflow is set when the counter overflowed, no more blocks can be
 | 
				
			||||||
 | 
						// generated, and the next XORKeyStream call should panic.
 | 
				
			||||||
 | 
						overflow bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The counter-independent results of the first round are cached after they
 | 
						// The counter-independent results of the first round are cached after they
 | 
				
			||||||
	// are computed the first time.
 | 
						// are computed the first time.
 | 
				
			||||||
	precompDone      bool
 | 
						precompDone      bool
 | 
				
			||||||
@@ -89,6 +93,7 @@ func newUnauthenticatedCipher(c *Cipher, key, nonce []byte) (*Cipher, error) {
 | 
				
			|||||||
		return nil, errors.New("chacha20: wrong nonce size")
 | 
							return nil, errors.New("chacha20: wrong nonce size")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						key, nonce = key[:KeySize], nonce[:NonceSize] // bounds check elimination hint
 | 
				
			||||||
	c.key = [8]uint32{
 | 
						c.key = [8]uint32{
 | 
				
			||||||
		binary.LittleEndian.Uint32(key[0:4]),
 | 
							binary.LittleEndian.Uint32(key[0:4]),
 | 
				
			||||||
		binary.LittleEndian.Uint32(key[4:8]),
 | 
							binary.LittleEndian.Uint32(key[4:8]),
 | 
				
			||||||
@@ -136,6 +141,36 @@ func quarterRound(a, b, c, d uint32) (uint32, uint32, uint32, uint32) {
 | 
				
			|||||||
	return a, b, c, d
 | 
						return a, b, c, d
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SetCounter sets the Cipher counter. The next invocation of XORKeyStream will
 | 
				
			||||||
 | 
					// behave as if (64 * counter) bytes had been encrypted so far.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// To prevent accidental counter reuse, SetCounter panics if counter is less
 | 
				
			||||||
 | 
					// than the current value.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Note that the execution time of XORKeyStream is not independent of the
 | 
				
			||||||
 | 
					// counter value.
 | 
				
			||||||
 | 
					func (s *Cipher) SetCounter(counter uint32) {
 | 
				
			||||||
 | 
						// Internally, s may buffer multiple blocks, which complicates this
 | 
				
			||||||
 | 
						// implementation slightly. When checking whether the counter has rolled
 | 
				
			||||||
 | 
						// back, we must use both s.counter and s.len to determine how many blocks
 | 
				
			||||||
 | 
						// we have already output.
 | 
				
			||||||
 | 
						outputCounter := s.counter - uint32(s.len)/blockSize
 | 
				
			||||||
 | 
						if s.overflow || counter < outputCounter {
 | 
				
			||||||
 | 
							panic("chacha20: SetCounter attempted to rollback counter")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// In the general case, we set the new counter value and reset s.len to 0,
 | 
				
			||||||
 | 
						// causing the next call to XORKeyStream to refill the buffer. However, if
 | 
				
			||||||
 | 
						// we're advancing within the existing buffer, we can save work by simply
 | 
				
			||||||
 | 
						// setting s.len.
 | 
				
			||||||
 | 
						if counter < s.counter {
 | 
				
			||||||
 | 
							s.len = int(s.counter-counter) * blockSize
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							s.counter = counter
 | 
				
			||||||
 | 
							s.len = 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// XORKeyStream XORs each byte in the given slice with a byte from the
 | 
					// XORKeyStream XORs each byte in the given slice with a byte from the
 | 
				
			||||||
// cipher's key stream. Dst and src must overlap entirely or not at all.
 | 
					// cipher's key stream. Dst and src must overlap entirely or not at all.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
@@ -169,34 +204,52 @@ func (s *Cipher) XORKeyStream(dst, src []byte) {
 | 
				
			|||||||
			dst[i] = src[i] ^ b
 | 
								dst[i] = src[i] ^ b
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		s.len -= len(keyStream)
 | 
							s.len -= len(keyStream)
 | 
				
			||||||
		src = src[len(keyStream):]
 | 
							dst, src = dst[len(keyStream):], src[len(keyStream):]
 | 
				
			||||||
		dst = dst[len(keyStream):]
 | 
						}
 | 
				
			||||||
 | 
						if len(src) == 0 {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const blocksPerBuf = bufSize / blockSize
 | 
						// If we'd need to let the counter overflow and keep generating output,
 | 
				
			||||||
	numBufs := (uint64(len(src)) + bufSize - 1) / bufSize
 | 
						// panic immediately. If instead we'd only reach the last block, remember
 | 
				
			||||||
	if uint64(s.counter)+numBufs*blocksPerBuf >= 1<<32 {
 | 
						// not to generate any more output after the buffer is drained.
 | 
				
			||||||
 | 
						numBlocks := (uint64(len(src)) + blockSize - 1) / blockSize
 | 
				
			||||||
 | 
						if s.overflow || uint64(s.counter)+numBlocks > 1<<32 {
 | 
				
			||||||
		panic("chacha20: counter overflow")
 | 
							panic("chacha20: counter overflow")
 | 
				
			||||||
 | 
						} else if uint64(s.counter)+numBlocks == 1<<32 {
 | 
				
			||||||
 | 
							s.overflow = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// xorKeyStreamBlocks implementations expect input lengths that are a
 | 
						// xorKeyStreamBlocks implementations expect input lengths that are a
 | 
				
			||||||
	// multiple of bufSize. Platform-specific ones process multiple blocks at a
 | 
						// multiple of bufSize. Platform-specific ones process multiple blocks at a
 | 
				
			||||||
	// time, so have bufSizes that are a multiple of blockSize.
 | 
						// time, so have bufSizes that are a multiple of blockSize.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rem := len(src) % bufSize
 | 
						full := len(src) - len(src)%bufSize
 | 
				
			||||||
	full := len(src) - rem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if full > 0 {
 | 
						if full > 0 {
 | 
				
			||||||
		s.xorKeyStreamBlocks(dst[:full], src[:full])
 | 
							s.xorKeyStreamBlocks(dst[:full], src[:full])
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						dst, src = dst[full:], src[full:]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// If using a multi-block xorKeyStreamBlocks would overflow, use the generic
 | 
				
			||||||
 | 
						// one that does one block at a time.
 | 
				
			||||||
 | 
						const blocksPerBuf = bufSize / blockSize
 | 
				
			||||||
 | 
						if uint64(s.counter)+blocksPerBuf > 1<<32 {
 | 
				
			||||||
 | 
							s.buf = [bufSize]byte{}
 | 
				
			||||||
 | 
							numBlocks := (len(src) + blockSize - 1) / blockSize
 | 
				
			||||||
 | 
							buf := s.buf[bufSize-numBlocks*blockSize:]
 | 
				
			||||||
 | 
							copy(buf, src)
 | 
				
			||||||
 | 
							s.xorKeyStreamBlocksGeneric(buf, buf)
 | 
				
			||||||
 | 
							s.len = len(buf) - copy(dst, buf)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// If we have a partial (multi-)block, pad it for xorKeyStreamBlocks, and
 | 
						// If we have a partial (multi-)block, pad it for xorKeyStreamBlocks, and
 | 
				
			||||||
	// keep the leftover keystream for the next XORKeyStream invocation.
 | 
						// keep the leftover keystream for the next XORKeyStream invocation.
 | 
				
			||||||
	if rem > 0 {
 | 
						if len(src) > 0 {
 | 
				
			||||||
		s.buf = [bufSize]byte{}
 | 
							s.buf = [bufSize]byte{}
 | 
				
			||||||
		copy(s.buf[:], src[full:])
 | 
							copy(s.buf[:], src)
 | 
				
			||||||
		s.xorKeyStreamBlocks(s.buf[:], s.buf[:])
 | 
							s.xorKeyStreamBlocks(s.buf[:], s.buf[:])
 | 
				
			||||||
		s.len = bufSize - copy(dst[full:], s.buf[:])
 | 
							s.len = bufSize - copy(dst, s.buf[:])
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -233,7 +286,9 @@ func (s *Cipher) xorKeyStreamBlocksGeneric(dst, src []byte) {
 | 
				
			|||||||
		s.precompDone = true
 | 
							s.precompDone = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for i := 0; i < len(src); i += blockSize {
 | 
						// A condition of len(src) > 0 would be sufficient, but this also
 | 
				
			||||||
 | 
						// acts as a bounds check elimination hint.
 | 
				
			||||||
 | 
						for len(src) >= 64 && len(dst) >= 64 {
 | 
				
			||||||
		// The remainder of the first column round.
 | 
							// The remainder of the first column round.
 | 
				
			||||||
		fcr0, fcr4, fcr8, fcr12 := quarterRound(c0, c4, c8, s.counter)
 | 
							fcr0, fcr4, fcr8, fcr12 := quarterRound(c0, c4, c8, s.counter)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -258,49 +313,28 @@ func (s *Cipher) xorKeyStreamBlocksGeneric(dst, src []byte) {
 | 
				
			|||||||
			x3, x4, x9, x14 = quarterRound(x3, x4, x9, x14)
 | 
								x3, x4, x9, x14 = quarterRound(x3, x4, x9, x14)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Finally, add back the initial state to generate the key stream.
 | 
							// Add back the initial state to generate the key stream, then
 | 
				
			||||||
		x0 += c0
 | 
							// XOR the key stream with the source and write out the result.
 | 
				
			||||||
		x1 += c1
 | 
							addXor(dst[0:4], src[0:4], x0, c0)
 | 
				
			||||||
		x2 += c2
 | 
							addXor(dst[4:8], src[4:8], x1, c1)
 | 
				
			||||||
		x3 += c3
 | 
							addXor(dst[8:12], src[8:12], x2, c2)
 | 
				
			||||||
		x4 += c4
 | 
							addXor(dst[12:16], src[12:16], x3, c3)
 | 
				
			||||||
		x5 += c5
 | 
							addXor(dst[16:20], src[16:20], x4, c4)
 | 
				
			||||||
		x6 += c6
 | 
							addXor(dst[20:24], src[20:24], x5, c5)
 | 
				
			||||||
		x7 += c7
 | 
							addXor(dst[24:28], src[24:28], x6, c6)
 | 
				
			||||||
		x8 += c8
 | 
							addXor(dst[28:32], src[28:32], x7, c7)
 | 
				
			||||||
		x9 += c9
 | 
							addXor(dst[32:36], src[32:36], x8, c8)
 | 
				
			||||||
		x10 += c10
 | 
							addXor(dst[36:40], src[36:40], x9, c9)
 | 
				
			||||||
		x11 += c11
 | 
							addXor(dst[40:44], src[40:44], x10, c10)
 | 
				
			||||||
		x12 += s.counter
 | 
							addXor(dst[44:48], src[44:48], x11, c11)
 | 
				
			||||||
		x13 += c13
 | 
							addXor(dst[48:52], src[48:52], x12, s.counter)
 | 
				
			||||||
		x14 += c14
 | 
							addXor(dst[52:56], src[52:56], x13, c13)
 | 
				
			||||||
		x15 += c15
 | 
							addXor(dst[56:60], src[56:60], x14, c14)
 | 
				
			||||||
 | 
							addXor(dst[60:64], src[60:64], x15, c15)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		s.counter += 1
 | 
							s.counter += 1
 | 
				
			||||||
		if s.counter == 0 {
 | 
					 | 
				
			||||||
			panic("chacha20: internal error: counter overflow")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		in, out := src[i:], dst[i:]
 | 
							src, dst = src[blockSize:], dst[blockSize:]
 | 
				
			||||||
		in, out = in[:blockSize], out[:blockSize] // bounds check elimination hint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// XOR the key stream with the source and write out the result.
 | 
					 | 
				
			||||||
		xor(out[0:], in[0:], x0)
 | 
					 | 
				
			||||||
		xor(out[4:], in[4:], x1)
 | 
					 | 
				
			||||||
		xor(out[8:], in[8:], x2)
 | 
					 | 
				
			||||||
		xor(out[12:], in[12:], x3)
 | 
					 | 
				
			||||||
		xor(out[16:], in[16:], x4)
 | 
					 | 
				
			||||||
		xor(out[20:], in[20:], x5)
 | 
					 | 
				
			||||||
		xor(out[24:], in[24:], x6)
 | 
					 | 
				
			||||||
		xor(out[28:], in[28:], x7)
 | 
					 | 
				
			||||||
		xor(out[32:], in[32:], x8)
 | 
					 | 
				
			||||||
		xor(out[36:], in[36:], x9)
 | 
					 | 
				
			||||||
		xor(out[40:], in[40:], x10)
 | 
					 | 
				
			||||||
		xor(out[44:], in[44:], x11)
 | 
					 | 
				
			||||||
		xor(out[48:], in[48:], x12)
 | 
					 | 
				
			||||||
		xor(out[52:], in[52:], x13)
 | 
					 | 
				
			||||||
		xor(out[56:], in[56:], x14)
 | 
					 | 
				
			||||||
		xor(out[60:], in[60:], x15)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build !arm64,!s390x,!ppc64le arm64,!go1.11 gccgo appengine
 | 
					// +build !arm64,!s390x,!ppc64le arm64,!go1.11 gccgo purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package chacha20
 | 
					package chacha20
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build !gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package chacha20
 | 
					package chacha20
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -19,7 +19,7 @@
 | 
				
			|||||||
// The differences in this and the original implementation are
 | 
					// The differences in this and the original implementation are
 | 
				
			||||||
// due to the calling conventions and initialization of constants.
 | 
					// due to the calling conventions and initialization of constants.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build !gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "textflag.h"
 | 
					#include "textflag.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build !gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package chacha20
 | 
					package chacha20
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/chacha20/chacha_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build !gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "go_asm.h"
 | 
					#include "go_asm.h"
 | 
				
			||||||
#include "textflag.h"
 | 
					#include "textflag.h"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										17
									
								
								vendor/golang.org/x/crypto/chacha20/xor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								vendor/golang.org/x/crypto/chacha20/xor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -13,10 +13,10 @@ const unaligned = runtime.GOARCH == "386" ||
 | 
				
			|||||||
	runtime.GOARCH == "ppc64le" ||
 | 
						runtime.GOARCH == "ppc64le" ||
 | 
				
			||||||
	runtime.GOARCH == "s390x"
 | 
						runtime.GOARCH == "s390x"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// xor reads a little endian uint32 from src, XORs it with u and
 | 
					// addXor reads a little endian uint32 from src, XORs it with (a + b) and
 | 
				
			||||||
// places the result in little endian byte order in dst.
 | 
					// places the result in little endian byte order in dst.
 | 
				
			||||||
func xor(dst, src []byte, u uint32) {
 | 
					func addXor(dst, src []byte, a, b uint32) {
 | 
				
			||||||
	_, _ = src[3], dst[3] // eliminate bounds checks
 | 
						_, _ = src[3], dst[3] // bounds check elimination hint
 | 
				
			||||||
	if unaligned {
 | 
						if unaligned {
 | 
				
			||||||
		// The compiler should optimize this code into
 | 
							// The compiler should optimize this code into
 | 
				
			||||||
		// 32-bit unaligned little endian loads and stores.
 | 
							// 32-bit unaligned little endian loads and stores.
 | 
				
			||||||
@@ -27,15 +27,16 @@ func xor(dst, src []byte, u uint32) {
 | 
				
			|||||||
		v |= uint32(src[1]) << 8
 | 
							v |= uint32(src[1]) << 8
 | 
				
			||||||
		v |= uint32(src[2]) << 16
 | 
							v |= uint32(src[2]) << 16
 | 
				
			||||||
		v |= uint32(src[3]) << 24
 | 
							v |= uint32(src[3]) << 24
 | 
				
			||||||
		v ^= u
 | 
							v ^= a + b
 | 
				
			||||||
		dst[0] = byte(v)
 | 
							dst[0] = byte(v)
 | 
				
			||||||
		dst[1] = byte(v >> 8)
 | 
							dst[1] = byte(v >> 8)
 | 
				
			||||||
		dst[2] = byte(v >> 16)
 | 
							dst[2] = byte(v >> 16)
 | 
				
			||||||
		dst[3] = byte(v >> 24)
 | 
							dst[3] = byte(v >> 24)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		dst[0] = src[0] ^ byte(u)
 | 
							a += b
 | 
				
			||||||
		dst[1] = src[1] ^ byte(u>>8)
 | 
							dst[0] = src[0] ^ byte(a)
 | 
				
			||||||
		dst[2] = src[2] ^ byte(u>>16)
 | 
							dst[1] = src[1] ^ byte(a>>8)
 | 
				
			||||||
		dst[3] = src[3] ^ byte(u>>24)
 | 
							dst[2] = src[2] ^ byte(a>>16)
 | 
				
			||||||
 | 
							dst[3] = src[3] ^ byte(a>>24)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								vendor/golang.org/x/crypto/cryptobyte/asn1.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/golang.org/x/crypto/cryptobyte/asn1.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -81,7 +81,7 @@ func (b *Builder) AddASN1BigInt(n *big.Int) {
 | 
				
			|||||||
			for i := range bytes {
 | 
								for i := range bytes {
 | 
				
			||||||
				bytes[i] ^= 0xff
 | 
									bytes[i] ^= 0xff
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if bytes[0]&0x80 == 0 {
 | 
								if len(bytes) == 0 || bytes[0]&0x80 == 0 {
 | 
				
			||||||
				c.add(0xff)
 | 
									c.add(0xff)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			c.add(bytes...)
 | 
								c.add(bytes...)
 | 
				
			||||||
@@ -230,12 +230,12 @@ func (b *Builder) AddASN1(tag asn1.Tag, f BuilderContinuation) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// String
 | 
					// String
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ReadASN1Boolean decodes an ASN.1 INTEGER and converts it to a boolean
 | 
					// ReadASN1Boolean decodes an ASN.1 BOOLEAN and converts it to a boolean
 | 
				
			||||||
// representation into out and advances. It reports whether the read
 | 
					// representation into out and advances. It reports whether the read
 | 
				
			||||||
// was successful.
 | 
					// was successful.
 | 
				
			||||||
func (s *String) ReadASN1Boolean(out *bool) bool {
 | 
					func (s *String) ReadASN1Boolean(out *bool) bool {
 | 
				
			||||||
	var bytes String
 | 
						var bytes String
 | 
				
			||||||
	if !s.ReadASN1(&bytes, asn1.INTEGER) || len(bytes) != 1 {
 | 
						if !s.ReadASN1(&bytes, asn1.BOOLEAN) || len(bytes) != 1 {
 | 
				
			||||||
		return false
 | 
							return false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/poly1305/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/poly1305/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -10,12 +10,10 @@ go_library(
 | 
				
			|||||||
        "sum_amd64.go",
 | 
					        "sum_amd64.go",
 | 
				
			||||||
        "sum_amd64.s",
 | 
					        "sum_amd64.s",
 | 
				
			||||||
        "sum_generic.go",
 | 
					        "sum_generic.go",
 | 
				
			||||||
        "sum_noasm.go",
 | 
					 | 
				
			||||||
        "sum_ppc64le.go",
 | 
					        "sum_ppc64le.go",
 | 
				
			||||||
        "sum_ppc64le.s",
 | 
					        "sum_ppc64le.s",
 | 
				
			||||||
        "sum_s390x.go",
 | 
					        "sum_s390x.go",
 | 
				
			||||||
        "sum_s390x.s",
 | 
					        "sum_s390x.s",
 | 
				
			||||||
        "sum_vmsl_s390x.s",
 | 
					 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/poly1305",
 | 
					    importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/poly1305",
 | 
				
			||||||
    importpath = "golang.org/x/crypto/poly1305",
 | 
					    importpath = "golang.org/x/crypto/poly1305",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/crypto/poly1305/mac_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/crypto/poly1305/mac_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,10 +2,8 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build !amd64,!ppc64le gccgo appengine
 | 
					// +build !amd64,!ppc64le,!s390x gccgo purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package poly1305
 | 
					package poly1305
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type mac struct{ macGeneric }
 | 
					type mac struct{ macGeneric }
 | 
				
			||||||
 | 
					 | 
				
			||||||
func newMAC(key *[32]byte) mac { return mac{newMACGeneric(key)} }
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								vendor/golang.org/x/crypto/poly1305/poly1305.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/golang.org/x/crypto/poly1305/poly1305.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -26,7 +26,9 @@ const TagSize = 16
 | 
				
			|||||||
// 16-byte result into out. Authenticating two different messages with the same
 | 
					// 16-byte result into out. Authenticating two different messages with the same
 | 
				
			||||||
// key allows an attacker to forge messages at will.
 | 
					// key allows an attacker to forge messages at will.
 | 
				
			||||||
func Sum(out *[16]byte, m []byte, key *[32]byte) {
 | 
					func Sum(out *[16]byte, m []byte, key *[32]byte) {
 | 
				
			||||||
	sum(out, m, key)
 | 
						h := New(key)
 | 
				
			||||||
 | 
						h.Write(m)
 | 
				
			||||||
 | 
						h.Sum(out[:0])
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Verify returns true if mac is a valid authenticator for m with the given key.
 | 
					// Verify returns true if mac is a valid authenticator for m with the given key.
 | 
				
			||||||
@@ -46,10 +48,9 @@ func Verify(mac *[16]byte, m []byte, key *[32]byte) bool {
 | 
				
			|||||||
// two different messages with the same key allows an attacker
 | 
					// two different messages with the same key allows an attacker
 | 
				
			||||||
// to forge messages at will.
 | 
					// to forge messages at will.
 | 
				
			||||||
func New(key *[32]byte) *MAC {
 | 
					func New(key *[32]byte) *MAC {
 | 
				
			||||||
	return &MAC{
 | 
						m := &MAC{}
 | 
				
			||||||
		mac:       newMAC(key),
 | 
						initialize(key, &m.macState)
 | 
				
			||||||
		finalized: false,
 | 
						return m
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MAC is an io.Writer computing an authentication tag
 | 
					// MAC is an io.Writer computing an authentication tag
 | 
				
			||||||
@@ -58,7 +59,7 @@ func New(key *[32]byte) *MAC {
 | 
				
			|||||||
// MAC cannot be used like common hash.Hash implementations,
 | 
					// MAC cannot be used like common hash.Hash implementations,
 | 
				
			||||||
// because using a poly1305 key twice breaks its security.
 | 
					// because using a poly1305 key twice breaks its security.
 | 
				
			||||||
// Therefore writing data to a running MAC after calling
 | 
					// Therefore writing data to a running MAC after calling
 | 
				
			||||||
// Sum causes it to panic.
 | 
					// Sum or Verify causes it to panic.
 | 
				
			||||||
type MAC struct {
 | 
					type MAC struct {
 | 
				
			||||||
	mac // platform-dependent implementation
 | 
						mac // platform-dependent implementation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -71,10 +72,10 @@ func (h *MAC) Size() int { return TagSize }
 | 
				
			|||||||
// Write adds more data to the running message authentication code.
 | 
					// Write adds more data to the running message authentication code.
 | 
				
			||||||
// It never returns an error.
 | 
					// It never returns an error.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// It must not be called after the first call of Sum.
 | 
					// It must not be called after the first call of Sum or Verify.
 | 
				
			||||||
func (h *MAC) Write(p []byte) (n int, err error) {
 | 
					func (h *MAC) Write(p []byte) (n int, err error) {
 | 
				
			||||||
	if h.finalized {
 | 
						if h.finalized {
 | 
				
			||||||
		panic("poly1305: write to MAC after Sum")
 | 
							panic("poly1305: write to MAC after Sum or Verify")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return h.mac.Write(p)
 | 
						return h.mac.Write(p)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -87,3 +88,12 @@ func (h *MAC) Sum(b []byte) []byte {
 | 
				
			|||||||
	h.finalized = true
 | 
						h.finalized = true
 | 
				
			||||||
	return append(b, mac[:]...)
 | 
						return append(b, mac[:]...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Verify returns whether the authenticator of all data written to
 | 
				
			||||||
 | 
					// the message authentication code matches the expected value.
 | 
				
			||||||
 | 
					func (h *MAC) Verify(expected []byte) bool {
 | 
				
			||||||
 | 
						var mac [TagSize]byte
 | 
				
			||||||
 | 
						h.mac.Sum(&mac)
 | 
				
			||||||
 | 
						h.finalized = true
 | 
				
			||||||
 | 
						return subtle.ConstantTimeCompare(expected, mac[:]) == 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/crypto/poly1305/sum_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/crypto/poly1305/sum_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,24 +2,13 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build amd64,!gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package poly1305
 | 
					package poly1305
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//go:noescape
 | 
					//go:noescape
 | 
				
			||||||
func update(state *macState, msg []byte)
 | 
					func update(state *macState, msg []byte)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func sum(out *[16]byte, m []byte, key *[32]byte) {
 | 
					 | 
				
			||||||
	h := newMAC(key)
 | 
					 | 
				
			||||||
	h.Write(m)
 | 
					 | 
				
			||||||
	h.Sum(out)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func newMAC(key *[32]byte) (h mac) {
 | 
					 | 
				
			||||||
	initialize(key, &h.r, &h.s)
 | 
					 | 
				
			||||||
	return
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// mac is a wrapper for macGeneric that redirects calls that would have gone to
 | 
					// mac is a wrapper for macGeneric that redirects calls that would have gone to
 | 
				
			||||||
// updateGeneric to update.
 | 
					// updateGeneric to update.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/poly1305/sum_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/poly1305/sum_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build amd64,!gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "textflag.h"
 | 
					#include "textflag.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										21
									
								
								vendor/golang.org/x/crypto/poly1305/sum_generic.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/golang.org/x/crypto/poly1305/sum_generic.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -31,16 +31,18 @@ func sumGeneric(out *[TagSize]byte, msg []byte, key *[32]byte) {
 | 
				
			|||||||
	h.Sum(out)
 | 
						h.Sum(out)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newMACGeneric(key *[32]byte) (h macGeneric) {
 | 
					func newMACGeneric(key *[32]byte) macGeneric {
 | 
				
			||||||
	initialize(key, &h.r, &h.s)
 | 
						m := macGeneric{}
 | 
				
			||||||
	return
 | 
						initialize(key, &m.macState)
 | 
				
			||||||
 | 
						return m
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// macState holds numbers in saturated 64-bit little-endian limbs. That is,
 | 
					// macState holds numbers in saturated 64-bit little-endian limbs. That is,
 | 
				
			||||||
// the value of [x0, x1, x2] is x[0] + x[1] * 2⁶⁴ + x[2] * 2¹²⁸.
 | 
					// the value of [x0, x1, x2] is x[0] + x[1] * 2⁶⁴ + x[2] * 2¹²⁸.
 | 
				
			||||||
type macState struct {
 | 
					type macState struct {
 | 
				
			||||||
	// h is the main accumulator. It is to be interpreted modulo 2¹³⁰ - 5, but
 | 
						// h is the main accumulator. It is to be interpreted modulo 2¹³⁰ - 5, but
 | 
				
			||||||
	// can grow larger during and after rounds.
 | 
						// can grow larger during and after rounds. It must, however, remain below
 | 
				
			||||||
 | 
						// 2 * (2¹³⁰ - 5).
 | 
				
			||||||
	h [3]uint64
 | 
						h [3]uint64
 | 
				
			||||||
	// r and s are the private key components.
 | 
						// r and s are the private key components.
 | 
				
			||||||
	r [2]uint64
 | 
						r [2]uint64
 | 
				
			||||||
@@ -97,11 +99,12 @@ const (
 | 
				
			|||||||
	rMask1 = 0x0FFFFFFC0FFFFFFC
 | 
						rMask1 = 0x0FFFFFFC0FFFFFFC
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func initialize(key *[32]byte, r, s *[2]uint64) {
 | 
					// initialize loads the 256-bit key into the two 128-bit secret values r and s.
 | 
				
			||||||
	r[0] = binary.LittleEndian.Uint64(key[0:8]) & rMask0
 | 
					func initialize(key *[32]byte, m *macState) {
 | 
				
			||||||
	r[1] = binary.LittleEndian.Uint64(key[8:16]) & rMask1
 | 
						m.r[0] = binary.LittleEndian.Uint64(key[0:8]) & rMask0
 | 
				
			||||||
	s[0] = binary.LittleEndian.Uint64(key[16:24])
 | 
						m.r[1] = binary.LittleEndian.Uint64(key[8:16]) & rMask1
 | 
				
			||||||
	s[1] = binary.LittleEndian.Uint64(key[24:32])
 | 
						m.s[0] = binary.LittleEndian.Uint64(key[16:24])
 | 
				
			||||||
 | 
						m.s[1] = binary.LittleEndian.Uint64(key[24:32])
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// uint128 holds a 128-bit number as two 64-bit limbs, for use with the
 | 
					// uint128 holds a 128-bit number as two 64-bit limbs, for use with the
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/crypto/poly1305/sum_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/crypto/poly1305/sum_noasm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,13 +0,0 @@
 | 
				
			|||||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
					 | 
				
			||||||
// Use of this source code is governed by a BSD-style
 | 
					 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// +build s390x,!go1.11 !amd64,!s390x,!ppc64le gccgo appengine nacl
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package poly1305
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func sum(out *[TagSize]byte, msg []byte, key *[32]byte) {
 | 
					 | 
				
			||||||
	h := newMAC(key)
 | 
					 | 
				
			||||||
	h.Write(msg)
 | 
					 | 
				
			||||||
	h.Sum(out)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/crypto/poly1305/sum_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/crypto/poly1305/sum_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,24 +2,13 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build ppc64le,!gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package poly1305
 | 
					package poly1305
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//go:noescape
 | 
					//go:noescape
 | 
				
			||||||
func update(state *macState, msg []byte)
 | 
					func update(state *macState, msg []byte)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func sum(out *[16]byte, m []byte, key *[32]byte) {
 | 
					 | 
				
			||||||
	h := newMAC(key)
 | 
					 | 
				
			||||||
	h.Write(m)
 | 
					 | 
				
			||||||
	h.Sum(out)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func newMAC(key *[32]byte) (h mac) {
 | 
					 | 
				
			||||||
	initialize(key, &h.r, &h.s)
 | 
					 | 
				
			||||||
	return
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// mac is a wrapper for macGeneric that redirects calls that would have gone to
 | 
					// mac is a wrapper for macGeneric that redirects calls that would have gone to
 | 
				
			||||||
// updateGeneric to update.
 | 
					// updateGeneric to update.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/poly1305/sum_ppc64le.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/poly1305/sum_ppc64le.s
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build ppc64le,!gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "textflag.h"
 | 
					#include "textflag.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										80
									
								
								vendor/golang.org/x/crypto/poly1305/sum_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								vendor/golang.org/x/crypto/poly1305/sum_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build s390x,go1.11,!gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package poly1305
 | 
					package poly1305
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10,30 +10,66 @@ import (
 | 
				
			|||||||
	"golang.org/x/sys/cpu"
 | 
						"golang.org/x/sys/cpu"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// poly1305vx is an assembly implementation of Poly1305 that uses vector
 | 
					// updateVX is an assembly implementation of Poly1305 that uses vector
 | 
				
			||||||
// instructions. It must only be called if the vector facility (vx) is
 | 
					// instructions. It must only be called if the vector facility (vx) is
 | 
				
			||||||
// available.
 | 
					// available.
 | 
				
			||||||
//go:noescape
 | 
					//go:noescape
 | 
				
			||||||
func poly1305vx(out *[16]byte, m *byte, mlen uint64, key *[32]byte)
 | 
					func updateVX(state *macState, msg []byte)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// poly1305vmsl is an assembly implementation of Poly1305 that uses vector
 | 
					// mac is a replacement for macGeneric that uses a larger buffer and redirects
 | 
				
			||||||
// instructions, including VMSL. It must only be called if the vector facility (vx) is
 | 
					// calls that would have gone to updateGeneric to updateVX if the vector
 | 
				
			||||||
// available and if VMSL is supported.
 | 
					// facility is installed.
 | 
				
			||||||
//go:noescape
 | 
					//
 | 
				
			||||||
func poly1305vmsl(out *[16]byte, m *byte, mlen uint64, key *[32]byte)
 | 
					// A larger buffer is required for good performance because the vector
 | 
				
			||||||
 | 
					// implementation has a higher fixed cost per call than the generic
 | 
				
			||||||
 | 
					// implementation.
 | 
				
			||||||
 | 
					type mac struct {
 | 
				
			||||||
 | 
						macState
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func sum(out *[16]byte, m []byte, key *[32]byte) {
 | 
						buffer [16 * TagSize]byte // size must be a multiple of block size (16)
 | 
				
			||||||
	if cpu.S390X.HasVX {
 | 
						offset int
 | 
				
			||||||
		var mPtr *byte
 | 
					}
 | 
				
			||||||
		if len(m) > 0 {
 | 
					
 | 
				
			||||||
			mPtr = &m[0]
 | 
					func (h *mac) Write(p []byte) (int, error) {
 | 
				
			||||||
		}
 | 
						nn := len(p)
 | 
				
			||||||
		if cpu.S390X.HasVXE && len(m) > 256 {
 | 
						if h.offset > 0 {
 | 
				
			||||||
			poly1305vmsl(out, mPtr, uint64(len(m)), key)
 | 
							n := copy(h.buffer[h.offset:], p)
 | 
				
			||||||
		} else {
 | 
							if h.offset+n < len(h.buffer) {
 | 
				
			||||||
			poly1305vx(out, mPtr, uint64(len(m)), key)
 | 
								h.offset += n
 | 
				
			||||||
		}
 | 
								return nn, nil
 | 
				
			||||||
	} else {
 | 
							}
 | 
				
			||||||
		sumGeneric(out, m, key)
 | 
							p = p[n:]
 | 
				
			||||||
	}
 | 
							h.offset = 0
 | 
				
			||||||
 | 
							if cpu.S390X.HasVX {
 | 
				
			||||||
 | 
								updateVX(&h.macState, h.buffer[:])
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								updateGeneric(&h.macState, h.buffer[:])
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tail := len(p) % len(h.buffer) // number of bytes to copy into buffer
 | 
				
			||||||
 | 
						body := len(p) - tail          // number of bytes to process now
 | 
				
			||||||
 | 
						if body > 0 {
 | 
				
			||||||
 | 
							if cpu.S390X.HasVX {
 | 
				
			||||||
 | 
								updateVX(&h.macState, p[:body])
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								updateGeneric(&h.macState, p[:body])
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						h.offset = copy(h.buffer[:], p[body:]) // copy tail bytes - can be 0
 | 
				
			||||||
 | 
						return nn, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (h *mac) Sum(out *[TagSize]byte) {
 | 
				
			||||||
 | 
						state := h.macState
 | 
				
			||||||
 | 
						remainder := h.buffer[:h.offset]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Use the generic implementation if we have 2 or fewer blocks left
 | 
				
			||||||
 | 
						// to sum. The vector implementation has a higher startup time.
 | 
				
			||||||
 | 
						if cpu.S390X.HasVX && len(remainder) > 2*TagSize {
 | 
				
			||||||
 | 
							updateVX(&state, remainder)
 | 
				
			||||||
 | 
						} else if len(remainder) > 0 {
 | 
				
			||||||
 | 
							updateGeneric(&state, remainder)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						finalize(out, &state.h, &state.s)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										627
									
								
								vendor/golang.org/x/crypto/poly1305/sum_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										627
									
								
								vendor/golang.org/x/crypto/poly1305/sum_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,115 +2,187 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +build s390x,go1.11,!gccgo,!appengine
 | 
					// +build !gccgo,!purego
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "textflag.h"
 | 
					#include "textflag.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Implementation of Poly1305 using the vector facility (vx).
 | 
					// This implementation of Poly1305 uses the vector facility (vx)
 | 
				
			||||||
 | 
					// to process up to 2 blocks (32 bytes) per iteration using an
 | 
				
			||||||
 | 
					// algorithm based on the one described in:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// NEON crypto, Daniel J. Bernstein & Peter Schwabe
 | 
				
			||||||
 | 
					// https://cryptojedi.org/papers/neoncrypto-20120320.pdf
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This algorithm uses 5 26-bit limbs to represent a 130-bit
 | 
				
			||||||
 | 
					// value. These limbs are, for the most part, zero extended and
 | 
				
			||||||
 | 
					// placed into 64-bit vector register elements. Each vector
 | 
				
			||||||
 | 
					// register is 128-bits wide and so holds 2 of these elements.
 | 
				
			||||||
 | 
					// Using 26-bit limbs allows us plenty of headroom to accomodate
 | 
				
			||||||
 | 
					// accumulations before and after multiplication without
 | 
				
			||||||
 | 
					// overflowing either 32-bits (before multiplication) or 64-bits
 | 
				
			||||||
 | 
					// (after multiplication).
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// In order to parallelise the operations required to calculate
 | 
				
			||||||
 | 
					// the sum we use two separate accumulators and then sum those
 | 
				
			||||||
 | 
					// in an extra final step. For compatibility with the generic
 | 
				
			||||||
 | 
					// implementation we perform this summation at the end of every
 | 
				
			||||||
 | 
					// updateVX call.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// To use two accumulators we must multiply the message blocks
 | 
				
			||||||
 | 
					// by r² rather than r. Only the final message block should be
 | 
				
			||||||
 | 
					// multiplied by r.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Example:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// We want to calculate the sum (h) for a 64 byte message (m):
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//   h = m[0:16]r⁴ + m[16:32]r³ + m[32:48]r² + m[48:64]r
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// To do this we split the calculation into the even indices
 | 
				
			||||||
 | 
					// and odd indices of the message. These form our SIMD 'lanes':
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//   h = m[ 0:16]r⁴ + m[32:48]r² +   <- lane 0
 | 
				
			||||||
 | 
					//       m[16:32]r³ + m[48:64]r      <- lane 1
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// To calculate this iteratively we refactor so that both lanes
 | 
				
			||||||
 | 
					// are written in terms of r² and r:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//   h = (m[ 0:16]r² + m[32:48])r² + <- lane 0
 | 
				
			||||||
 | 
					//       (m[16:32]r² + m[48:64])r    <- lane 1
 | 
				
			||||||
 | 
					//                ^             ^
 | 
				
			||||||
 | 
					//                |             coefficients for second iteration
 | 
				
			||||||
 | 
					//                coefficients for first iteration
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// So in this case we would have two iterations. In the first
 | 
				
			||||||
 | 
					// both lanes are multiplied by r². In the second only the
 | 
				
			||||||
 | 
					// first lane is multiplied by r² and the second lane is
 | 
				
			||||||
 | 
					// instead multiplied by r. This gives use the odd and even
 | 
				
			||||||
 | 
					// powers of r that we need from the original equation.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Notation:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//   h - accumulator
 | 
				
			||||||
 | 
					//   r - key
 | 
				
			||||||
 | 
					//   m - message
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//   [a, b]       - SIMD register holding two 64-bit values
 | 
				
			||||||
 | 
					//   [a, b, c, d] - SIMD register holding four 32-bit values
 | 
				
			||||||
 | 
					//   xᵢ[n]        - limb n of variable x with bit width i
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Limbs are expressed in little endian order, so for 26-bit
 | 
				
			||||||
 | 
					// limbs x₂₆[4] will be the most significant limb and x₂₆[0]
 | 
				
			||||||
 | 
					// will be the least significant limb.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// constants
 | 
					// masking constants
 | 
				
			||||||
#define MOD26 V0
 | 
					#define MOD24 V0 // [0x0000000000ffffff, 0x0000000000ffffff] - mask low 24-bits
 | 
				
			||||||
#define EX0   V1
 | 
					#define MOD26 V1 // [0x0000000003ffffff, 0x0000000003ffffff] - mask low 26-bits
 | 
				
			||||||
#define EX1   V2
 | 
					 | 
				
			||||||
#define EX2   V3
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// temporaries
 | 
					// expansion constants (see EXPAND macro)
 | 
				
			||||||
#define T_0 V4
 | 
					#define EX0 V2
 | 
				
			||||||
#define T_1 V5
 | 
					#define EX1 V3
 | 
				
			||||||
#define T_2 V6
 | 
					#define EX2 V4
 | 
				
			||||||
#define T_3 V7
 | 
					 | 
				
			||||||
#define T_4 V8
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// key (r)
 | 
					// key (r², r or 1 depending on context)
 | 
				
			||||||
#define R_0  V9
 | 
					#define R_0 V5
 | 
				
			||||||
#define R_1  V10
 | 
					#define R_1 V6
 | 
				
			||||||
#define R_2  V11
 | 
					#define R_2 V7
 | 
				
			||||||
#define R_3  V12
 | 
					#define R_3 V8
 | 
				
			||||||
#define R_4  V13
 | 
					#define R_4 V9
 | 
				
			||||||
#define R5_1 V14
 | 
					 | 
				
			||||||
#define R5_2 V15
 | 
					 | 
				
			||||||
#define R5_3 V16
 | 
					 | 
				
			||||||
#define R5_4 V17
 | 
					 | 
				
			||||||
#define RSAVE_0 R5
 | 
					 | 
				
			||||||
#define RSAVE_1 R6
 | 
					 | 
				
			||||||
#define RSAVE_2 R7
 | 
					 | 
				
			||||||
#define RSAVE_3 R8
 | 
					 | 
				
			||||||
#define RSAVE_4 R9
 | 
					 | 
				
			||||||
#define R5SAVE_1 V28
 | 
					 | 
				
			||||||
#define R5SAVE_2 V29
 | 
					 | 
				
			||||||
#define R5SAVE_3 V30
 | 
					 | 
				
			||||||
#define R5SAVE_4 V31
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// message block
 | 
					// precalculated coefficients (5r², 5r or 0 depending on context)
 | 
				
			||||||
#define F_0 V18
 | 
					#define R5_1 V10
 | 
				
			||||||
#define F_1 V19
 | 
					#define R5_2 V11
 | 
				
			||||||
#define F_2 V20
 | 
					#define R5_3 V12
 | 
				
			||||||
#define F_3 V21
 | 
					#define R5_4 V13
 | 
				
			||||||
#define F_4 V22
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// accumulator
 | 
					// message block (m)
 | 
				
			||||||
#define H_0 V23
 | 
					#define M_0 V14
 | 
				
			||||||
#define H_1 V24
 | 
					#define M_1 V15
 | 
				
			||||||
#define H_2 V25
 | 
					#define M_2 V16
 | 
				
			||||||
#define H_3 V26
 | 
					#define M_3 V17
 | 
				
			||||||
#define H_4 V27
 | 
					#define M_4 V18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GLOBL ·keyMask<>(SB), RODATA, $16
 | 
					// accumulator (h)
 | 
				
			||||||
DATA ·keyMask<>+0(SB)/8, $0xffffff0ffcffff0f
 | 
					#define H_0 V19
 | 
				
			||||||
DATA ·keyMask<>+8(SB)/8, $0xfcffff0ffcffff0f
 | 
					#define H_1 V20
 | 
				
			||||||
 | 
					#define H_2 V21
 | 
				
			||||||
 | 
					#define H_3 V22
 | 
				
			||||||
 | 
					#define H_4 V23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GLOBL ·bswapMask<>(SB), RODATA, $16
 | 
					// temporary registers (for short-lived values)
 | 
				
			||||||
DATA ·bswapMask<>+0(SB)/8, $0x0f0e0d0c0b0a0908
 | 
					#define T_0 V24
 | 
				
			||||||
DATA ·bswapMask<>+8(SB)/8, $0x0706050403020100
 | 
					#define T_1 V25
 | 
				
			||||||
 | 
					#define T_2 V26
 | 
				
			||||||
 | 
					#define T_3 V27
 | 
				
			||||||
 | 
					#define T_4 V28
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GLOBL ·constants<>(SB), RODATA, $64
 | 
					GLOBL ·constants<>(SB), RODATA, $0x30
 | 
				
			||||||
// MOD26
 | 
					 | 
				
			||||||
DATA ·constants<>+0(SB)/8, $0x3ffffff
 | 
					 | 
				
			||||||
DATA ·constants<>+8(SB)/8, $0x3ffffff
 | 
					 | 
				
			||||||
// EX0
 | 
					// EX0
 | 
				
			||||||
DATA ·constants<>+16(SB)/8, $0x0006050403020100
 | 
					DATA ·constants<>+0x00(SB)/8, $0x0006050403020100
 | 
				
			||||||
DATA ·constants<>+24(SB)/8, $0x1016151413121110
 | 
					DATA ·constants<>+0x08(SB)/8, $0x1016151413121110
 | 
				
			||||||
// EX1
 | 
					// EX1
 | 
				
			||||||
DATA ·constants<>+32(SB)/8, $0x060c0b0a09080706
 | 
					DATA ·constants<>+0x10(SB)/8, $0x060c0b0a09080706
 | 
				
			||||||
DATA ·constants<>+40(SB)/8, $0x161c1b1a19181716
 | 
					DATA ·constants<>+0x18(SB)/8, $0x161c1b1a19181716
 | 
				
			||||||
// EX2
 | 
					// EX2
 | 
				
			||||||
DATA ·constants<>+48(SB)/8, $0x0d0d0d0d0d0f0e0d
 | 
					DATA ·constants<>+0x20(SB)/8, $0x0d0d0d0d0d0f0e0d
 | 
				
			||||||
DATA ·constants<>+56(SB)/8, $0x1d1d1d1d1d1f1e1d
 | 
					DATA ·constants<>+0x28(SB)/8, $0x1d1d1d1d1d1f1e1d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// h = (f*g) % (2**130-5) [partial reduction]
 | 
					// MULTIPLY multiplies each lane of f and g, partially reduced
 | 
				
			||||||
 | 
					// modulo 2¹³⁰ - 5. The result, h, consists of partial products
 | 
				
			||||||
 | 
					// in each lane that need to be reduced further to produce the
 | 
				
			||||||
 | 
					// final result.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//   h₁₃₀ = (f₁₃₀g₁₃₀) % 2¹³⁰ + (5f₁₃₀g₁₃₀) / 2¹³⁰
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Note that the multiplication by 5 of the high bits is
 | 
				
			||||||
 | 
					// achieved by precalculating the multiplication of four of the
 | 
				
			||||||
 | 
					// g coefficients by 5. These are g51-g54.
 | 
				
			||||||
#define MULTIPLY(f0, f1, f2, f3, f4, g0, g1, g2, g3, g4, g51, g52, g53, g54, h0, h1, h2, h3, h4) \
 | 
					#define MULTIPLY(f0, f1, f2, f3, f4, g0, g1, g2, g3, g4, g51, g52, g53, g54, h0, h1, h2, h3, h4) \
 | 
				
			||||||
	VMLOF  f0, g0, h0        \
 | 
						VMLOF  f0, g0, h0        \
 | 
				
			||||||
	VMLOF  f0, g1, h1        \
 | 
					 | 
				
			||||||
	VMLOF  f0, g2, h2        \
 | 
					 | 
				
			||||||
	VMLOF  f0, g3, h3        \
 | 
						VMLOF  f0, g3, h3        \
 | 
				
			||||||
 | 
						VMLOF  f0, g1, h1        \
 | 
				
			||||||
	VMLOF  f0, g4, h4        \
 | 
						VMLOF  f0, g4, h4        \
 | 
				
			||||||
 | 
						VMLOF  f0, g2, h2        \
 | 
				
			||||||
	VMLOF  f1, g54, T_0      \
 | 
						VMLOF  f1, g54, T_0      \
 | 
				
			||||||
	VMLOF  f1, g0, T_1       \
 | 
					 | 
				
			||||||
	VMLOF  f1, g1, T_2       \
 | 
					 | 
				
			||||||
	VMLOF  f1, g2, T_3       \
 | 
						VMLOF  f1, g2, T_3       \
 | 
				
			||||||
 | 
						VMLOF  f1, g0, T_1       \
 | 
				
			||||||
	VMLOF  f1, g3, T_4       \
 | 
						VMLOF  f1, g3, T_4       \
 | 
				
			||||||
 | 
						VMLOF  f1, g1, T_2       \
 | 
				
			||||||
	VMALOF f2, g53, h0, h0   \
 | 
						VMALOF f2, g53, h0, h0   \
 | 
				
			||||||
	VMALOF f2, g54, h1, h1   \
 | 
					 | 
				
			||||||
	VMALOF f2, g0, h2, h2    \
 | 
					 | 
				
			||||||
	VMALOF f2, g1, h3, h3    \
 | 
						VMALOF f2, g1, h3, h3    \
 | 
				
			||||||
 | 
						VMALOF f2, g54, h1, h1   \
 | 
				
			||||||
	VMALOF f2, g2, h4, h4    \
 | 
						VMALOF f2, g2, h4, h4    \
 | 
				
			||||||
 | 
						VMALOF f2, g0, h2, h2    \
 | 
				
			||||||
	VMALOF f3, g52, T_0, T_0 \
 | 
						VMALOF f3, g52, T_0, T_0 \
 | 
				
			||||||
	VMALOF f3, g53, T_1, T_1 \
 | 
					 | 
				
			||||||
	VMALOF f3, g54, T_2, T_2 \
 | 
					 | 
				
			||||||
	VMALOF f3, g0, T_3, T_3  \
 | 
						VMALOF f3, g0, T_3, T_3  \
 | 
				
			||||||
 | 
						VMALOF f3, g53, T_1, T_1 \
 | 
				
			||||||
	VMALOF f3, g1, T_4, T_4  \
 | 
						VMALOF f3, g1, T_4, T_4  \
 | 
				
			||||||
 | 
						VMALOF f3, g54, T_2, T_2 \
 | 
				
			||||||
	VMALOF f4, g51, h0, h0   \
 | 
						VMALOF f4, g51, h0, h0   \
 | 
				
			||||||
	VMALOF f4, g52, h1, h1   \
 | 
					 | 
				
			||||||
	VMALOF f4, g53, h2, h2   \
 | 
					 | 
				
			||||||
	VMALOF f4, g54, h3, h3   \
 | 
						VMALOF f4, g54, h3, h3   \
 | 
				
			||||||
 | 
						VMALOF f4, g52, h1, h1   \
 | 
				
			||||||
	VMALOF f4, g0, h4, h4    \
 | 
						VMALOF f4, g0, h4, h4    \
 | 
				
			||||||
 | 
						VMALOF f4, g53, h2, h2   \
 | 
				
			||||||
	VAG    T_0, h0, h0       \
 | 
						VAG    T_0, h0, h0       \
 | 
				
			||||||
	VAG    T_1, h1, h1       \
 | 
					 | 
				
			||||||
	VAG    T_2, h2, h2       \
 | 
					 | 
				
			||||||
	VAG    T_3, h3, h3       \
 | 
						VAG    T_3, h3, h3       \
 | 
				
			||||||
	VAG    T_4, h4, h4
 | 
						VAG    T_1, h1, h1       \
 | 
				
			||||||
 | 
						VAG    T_4, h4, h4       \
 | 
				
			||||||
 | 
						VAG    T_2, h2, h2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// carry h0->h1 h3->h4, h1->h2 h4->h0, h0->h1 h2->h3, h3->h4
 | 
					// REDUCE performs the following carry operations in four
 | 
				
			||||||
 | 
					// stages, as specified in Bernstein & Schwabe:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//   1: h₂₆[0]->h₂₆[1] h₂₆[3]->h₂₆[4]
 | 
				
			||||||
 | 
					//   2: h₂₆[1]->h₂₆[2] h₂₆[4]->h₂₆[0]
 | 
				
			||||||
 | 
					//   3: h₂₆[0]->h₂₆[1] h₂₆[2]->h₂₆[3]
 | 
				
			||||||
 | 
					//   4: h₂₆[3]->h₂₆[4]
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The result is that all of the limbs are limited to 26-bits
 | 
				
			||||||
 | 
					// except for h₂₆[1] and h₂₆[4] which are limited to 27-bits.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Note that although each limb is aligned at 26-bit intervals
 | 
				
			||||||
 | 
					// they may contain values that exceed 2²⁶ - 1, hence the need
 | 
				
			||||||
 | 
					// to carry the excess bits in each limb.
 | 
				
			||||||
#define REDUCE(h0, h1, h2, h3, h4) \
 | 
					#define REDUCE(h0, h1, h2, h3, h4) \
 | 
				
			||||||
	VESRLG $26, h0, T_0  \
 | 
						VESRLG $26, h0, T_0  \
 | 
				
			||||||
	VESRLG $26, h3, T_1  \
 | 
						VESRLG $26, h3, T_1  \
 | 
				
			||||||
@@ -136,144 +208,155 @@ DATA ·constants<>+56(SB)/8, $0x1d1d1d1d1d1f1e1d
 | 
				
			|||||||
	VN     MOD26, h3, h3 \
 | 
						VN     MOD26, h3, h3 \
 | 
				
			||||||
	VAG    T_2, h4, h4
 | 
						VAG    T_2, h4, h4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// expand in0 into d[0] and in1 into d[1]
 | 
					// EXPAND splits the 128-bit little-endian values in0 and in1
 | 
				
			||||||
 | 
					// into 26-bit big-endian limbs and places the results into
 | 
				
			||||||
 | 
					// the first and second lane of d₂₆[0:4] respectively.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The EX0, EX1 and EX2 constants are arrays of byte indices
 | 
				
			||||||
 | 
					// for permutation. The permutation both reverses the bytes
 | 
				
			||||||
 | 
					// in the input and ensures the bytes are copied into the
 | 
				
			||||||
 | 
					// destination limb ready to be shifted into their final
 | 
				
			||||||
 | 
					// position.
 | 
				
			||||||
#define EXPAND(in0, in1, d0, d1, d2, d3, d4) \
 | 
					#define EXPAND(in0, in1, d0, d1, d2, d3, d4) \
 | 
				
			||||||
	VGBM   $0x0707, d1       \ // d1=tmp
 | 
					 | 
				
			||||||
	VPERM  in0, in1, EX2, d4 \
 | 
					 | 
				
			||||||
	VPERM  in0, in1, EX0, d0 \
 | 
						VPERM  in0, in1, EX0, d0 \
 | 
				
			||||||
	VPERM  in0, in1, EX1, d2 \
 | 
						VPERM  in0, in1, EX1, d2 \
 | 
				
			||||||
	VN     d1, d4, d4        \
 | 
						VPERM  in0, in1, EX2, d4 \
 | 
				
			||||||
	VESRLG $26, d0, d1       \
 | 
						VESRLG $26, d0, d1       \
 | 
				
			||||||
	VESRLG $30, d2, d3       \
 | 
						VESRLG $30, d2, d3       \
 | 
				
			||||||
	VESRLG $4, d2, d2        \
 | 
						VESRLG $4, d2, d2        \
 | 
				
			||||||
	VN     MOD26, d0, d0     \
 | 
						VN     MOD26, d0, d0     \ // [in0₂₆[0], in1₂₆[0]]
 | 
				
			||||||
	VN     MOD26, d1, d1     \
 | 
						VN     MOD26, d3, d3     \ // [in0₂₆[3], in1₂₆[3]]
 | 
				
			||||||
	VN     MOD26, d2, d2     \
 | 
						VN     MOD26, d1, d1     \ // [in0₂₆[1], in1₂₆[1]]
 | 
				
			||||||
	VN     MOD26, d3, d3
 | 
						VN     MOD24, d4, d4     \ // [in0₂₆[4], in1₂₆[4]]
 | 
				
			||||||
 | 
						VN     MOD26, d2, d2     // [in0₂₆[2], in1₂₆[2]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// pack h4:h0 into h1:h0 (no carry)
 | 
					// func updateVX(state *macState, msg []byte)
 | 
				
			||||||
#define PACK(h0, h1, h2, h3, h4) \
 | 
					TEXT ·updateVX(SB), NOSPLIT, $0
 | 
				
			||||||
	VESLG $26, h1, h1  \
 | 
						MOVD state+0(FP), R1
 | 
				
			||||||
	VESLG $26, h3, h3  \
 | 
						LMG  msg+8(FP), R2, R3 // R2=msg_base, R3=msg_len
 | 
				
			||||||
	VO    h0, h1, h0   \
 | 
					 | 
				
			||||||
	VO    h2, h3, h2   \
 | 
					 | 
				
			||||||
	VESLG $4, h2, h2   \
 | 
					 | 
				
			||||||
	VLEIB $7, $48, h1  \
 | 
					 | 
				
			||||||
	VSLB  h1, h2, h2   \
 | 
					 | 
				
			||||||
	VO    h0, h2, h0   \
 | 
					 | 
				
			||||||
	VLEIB $7, $104, h1 \
 | 
					 | 
				
			||||||
	VSLB  h1, h4, h3   \
 | 
					 | 
				
			||||||
	VO    h3, h0, h0   \
 | 
					 | 
				
			||||||
	VLEIB $7, $24, h1  \
 | 
					 | 
				
			||||||
	VSRLB h1, h4, h1
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// if h > 2**130-5 then h -= 2**130-5
 | 
						// load EX0, EX1 and EX2
 | 
				
			||||||
#define MOD(h0, h1, t0, t1, t2) \
 | 
					 | 
				
			||||||
	VZERO t0          \
 | 
					 | 
				
			||||||
	VLEIG $1, $5, t0  \
 | 
					 | 
				
			||||||
	VACCQ h0, t0, t1  \
 | 
					 | 
				
			||||||
	VAQ   h0, t0, t0  \
 | 
					 | 
				
			||||||
	VONE  t2          \
 | 
					 | 
				
			||||||
	VLEIG $1, $-4, t2 \
 | 
					 | 
				
			||||||
	VAQ   t2, t1, t1  \
 | 
					 | 
				
			||||||
	VACCQ h1, t1, t1  \
 | 
					 | 
				
			||||||
	VONE  t2          \
 | 
					 | 
				
			||||||
	VAQ   t2, t1, t1  \
 | 
					 | 
				
			||||||
	VN    h0, t1, t2  \
 | 
					 | 
				
			||||||
	VNC   t0, t1, t1  \
 | 
					 | 
				
			||||||
	VO    t1, t2, h0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// func poly1305vx(out *[16]byte, m *byte, mlen uint64, key *[32]key)
 | 
					 | 
				
			||||||
TEXT ·poly1305vx(SB), $0-32
 | 
					 | 
				
			||||||
	// This code processes up to 2 blocks (32 bytes) per iteration
 | 
					 | 
				
			||||||
	// using the algorithm described in:
 | 
					 | 
				
			||||||
	// NEON crypto, Daniel J. Bernstein & Peter Schwabe
 | 
					 | 
				
			||||||
	// https://cryptojedi.org/papers/neoncrypto-20120320.pdf
 | 
					 | 
				
			||||||
	LMG out+0(FP), R1, R4 // R1=out, R2=m, R3=mlen, R4=key
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// load MOD26, EX0, EX1 and EX2
 | 
					 | 
				
			||||||
	MOVD $·constants<>(SB), R5
 | 
						MOVD $·constants<>(SB), R5
 | 
				
			||||||
	VLM  (R5), MOD26, EX2
 | 
						VLM  (R5), EX0, EX2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// setup r
 | 
						// generate masks
 | 
				
			||||||
	VL   (R4), T_0
 | 
						VGMG $(64-24), $63, MOD24 // [0x00ffffff, 0x00ffffff]
 | 
				
			||||||
	MOVD $·keyMask<>(SB), R6
 | 
						VGMG $(64-26), $63, MOD26 // [0x03ffffff, 0x03ffffff]
 | 
				
			||||||
	VL   (R6), T_1
 | 
					 | 
				
			||||||
	VN   T_0, T_1, T_0
 | 
					 | 
				
			||||||
	EXPAND(T_0, T_0, R_0, R_1, R_2, R_3, R_4)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// setup r*5
 | 
						// load h (accumulator) and r (key) from state
 | 
				
			||||||
	VLEIG $0, $5, T_0
 | 
						VZERO T_1               // [0, 0]
 | 
				
			||||||
	VLEIG $1, $5, T_0
 | 
						VL    0(R1), T_0        // [h₆₄[0], h₆₄[1]]
 | 
				
			||||||
 | 
						VLEG  $0, 16(R1), T_1   // [h₆₄[2], 0]
 | 
				
			||||||
 | 
						VL    24(R1), T_2       // [r₆₄[0], r₆₄[1]]
 | 
				
			||||||
 | 
						VPDI  $0, T_0, T_2, T_3 // [h₆₄[0], r₆₄[0]]
 | 
				
			||||||
 | 
						VPDI  $5, T_0, T_2, T_4 // [h₆₄[1], r₆₄[1]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// store r (for final block)
 | 
						// unpack h and r into 26-bit limbs
 | 
				
			||||||
	VMLOF T_0, R_1, R5SAVE_1
 | 
						// note: h₆₄[2] may have the low 3 bits set, so h₂₆[4] is a 27-bit value
 | 
				
			||||||
	VMLOF T_0, R_2, R5SAVE_2
 | 
						VN     MOD26, T_3, H_0            // [h₂₆[0], r₂₆[0]]
 | 
				
			||||||
	VMLOF T_0, R_3, R5SAVE_3
 | 
						VZERO  H_1                        // [0, 0]
 | 
				
			||||||
	VMLOF T_0, R_4, R5SAVE_4
 | 
						VZERO  H_3                        // [0, 0]
 | 
				
			||||||
	VLGVG $0, R_0, RSAVE_0
 | 
						VGMG   $(64-12-14), $(63-12), T_0 // [0x03fff000, 0x03fff000] - 26-bit mask with low 12 bits masked out
 | 
				
			||||||
	VLGVG $0, R_1, RSAVE_1
 | 
						VESLG  $24, T_1, T_1              // [h₆₄[2]<<24, 0]
 | 
				
			||||||
	VLGVG $0, R_2, RSAVE_2
 | 
						VERIMG $-26&63, T_3, MOD26, H_1   // [h₂₆[1], r₂₆[1]]
 | 
				
			||||||
	VLGVG $0, R_3, RSAVE_3
 | 
						VESRLG $+52&63, T_3, H_2          // [h₂₆[2], r₂₆[2]] - low 12 bits only
 | 
				
			||||||
	VLGVG $0, R_4, RSAVE_4
 | 
						VERIMG $-14&63, T_4, MOD26, H_3   // [h₂₆[1], r₂₆[1]]
 | 
				
			||||||
 | 
						VESRLG $40, T_4, H_4              // [h₂₆[4], r₂₆[4]] - low 24 bits only
 | 
				
			||||||
 | 
						VERIMG $+12&63, T_4, T_0, H_2     // [h₂₆[2], r₂₆[2]] - complete
 | 
				
			||||||
 | 
						VO     T_1, H_4, H_4              // [h₂₆[4], r₂₆[4]] - complete
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// skip r**2 calculation
 | 
						// replicate r across all 4 vector elements
 | 
				
			||||||
 | 
						VREPF $3, H_0, R_0 // [r₂₆[0], r₂₆[0], r₂₆[0], r₂₆[0]]
 | 
				
			||||||
 | 
						VREPF $3, H_1, R_1 // [r₂₆[1], r₂₆[1], r₂₆[1], r₂₆[1]]
 | 
				
			||||||
 | 
						VREPF $3, H_2, R_2 // [r₂₆[2], r₂₆[2], r₂₆[2], r₂₆[2]]
 | 
				
			||||||
 | 
						VREPF $3, H_3, R_3 // [r₂₆[3], r₂₆[3], r₂₆[3], r₂₆[3]]
 | 
				
			||||||
 | 
						VREPF $3, H_4, R_4 // [r₂₆[4], r₂₆[4], r₂₆[4], r₂₆[4]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// zero out lane 1 of h
 | 
				
			||||||
 | 
						VLEIG $1, $0, H_0 // [h₂₆[0], 0]
 | 
				
			||||||
 | 
						VLEIG $1, $0, H_1 // [h₂₆[1], 0]
 | 
				
			||||||
 | 
						VLEIG $1, $0, H_2 // [h₂₆[2], 0]
 | 
				
			||||||
 | 
						VLEIG $1, $0, H_3 // [h₂₆[3], 0]
 | 
				
			||||||
 | 
						VLEIG $1, $0, H_4 // [h₂₆[4], 0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// calculate 5r (ignore least significant limb)
 | 
				
			||||||
 | 
						VREPIF $5, T_0
 | 
				
			||||||
 | 
						VMLF   T_0, R_1, R5_1 // [5r₂₆[1], 5r₂₆[1], 5r₂₆[1], 5r₂₆[1]]
 | 
				
			||||||
 | 
						VMLF   T_0, R_2, R5_2 // [5r₂₆[2], 5r₂₆[2], 5r₂₆[2], 5r₂₆[2]]
 | 
				
			||||||
 | 
						VMLF   T_0, R_3, R5_3 // [5r₂₆[3], 5r₂₆[3], 5r₂₆[3], 5r₂₆[3]]
 | 
				
			||||||
 | 
						VMLF   T_0, R_4, R5_4 // [5r₂₆[4], 5r₂₆[4], 5r₂₆[4], 5r₂₆[4]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// skip r² calculation if we are only calculating one block
 | 
				
			||||||
	CMPBLE R3, $16, skip
 | 
						CMPBLE R3, $16, skip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// calculate r**2
 | 
						// calculate r²
 | 
				
			||||||
	MULTIPLY(R_0, R_1, R_2, R_3, R_4, R_0, R_1, R_2, R_3, R_4, R5SAVE_1, R5SAVE_2, R5SAVE_3, R5SAVE_4, H_0, H_1, H_2, H_3, H_4)
 | 
						MULTIPLY(R_0, R_1, R_2, R_3, R_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, M_0, M_1, M_2, M_3, M_4)
 | 
				
			||||||
	REDUCE(H_0, H_1, H_2, H_3, H_4)
 | 
						REDUCE(M_0, M_1, M_2, M_3, M_4)
 | 
				
			||||||
	VLEIG $0, $5, T_0
 | 
						VGBM   $0x0f0f, T_0
 | 
				
			||||||
	VLEIG $1, $5, T_0
 | 
						VERIMG $0, M_0, T_0, R_0 // [r₂₆[0], r²₂₆[0], r₂₆[0], r²₂₆[0]]
 | 
				
			||||||
	VMLOF T_0, H_1, R5_1
 | 
						VERIMG $0, M_1, T_0, R_1 // [r₂₆[1], r²₂₆[1], r₂₆[1], r²₂₆[1]]
 | 
				
			||||||
	VMLOF T_0, H_2, R5_2
 | 
						VERIMG $0, M_2, T_0, R_2 // [r₂₆[2], r²₂₆[2], r₂₆[2], r²₂₆[2]]
 | 
				
			||||||
	VMLOF T_0, H_3, R5_3
 | 
						VERIMG $0, M_3, T_0, R_3 // [r₂₆[3], r²₂₆[3], r₂₆[3], r²₂₆[3]]
 | 
				
			||||||
	VMLOF T_0, H_4, R5_4
 | 
						VERIMG $0, M_4, T_0, R_4 // [r₂₆[4], r²₂₆[4], r₂₆[4], r²₂₆[4]]
 | 
				
			||||||
	VLR   H_0, R_0
 | 
					 | 
				
			||||||
	VLR   H_1, R_1
 | 
					 | 
				
			||||||
	VLR   H_2, R_2
 | 
					 | 
				
			||||||
	VLR   H_3, R_3
 | 
					 | 
				
			||||||
	VLR   H_4, R_4
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// initialize h
 | 
						// calculate 5r² (ignore least significant limb)
 | 
				
			||||||
	VZERO H_0
 | 
						VREPIF $5, T_0
 | 
				
			||||||
	VZERO H_1
 | 
						VMLF   T_0, R_1, R5_1 // [5r₂₆[1], 5r²₂₆[1], 5r₂₆[1], 5r²₂₆[1]]
 | 
				
			||||||
	VZERO H_2
 | 
						VMLF   T_0, R_2, R5_2 // [5r₂₆[2], 5r²₂₆[2], 5r₂₆[2], 5r²₂₆[2]]
 | 
				
			||||||
	VZERO H_3
 | 
						VMLF   T_0, R_3, R5_3 // [5r₂₆[3], 5r²₂₆[3], 5r₂₆[3], 5r²₂₆[3]]
 | 
				
			||||||
	VZERO H_4
 | 
						VMLF   T_0, R_4, R5_4 // [5r₂₆[4], 5r²₂₆[4], 5r₂₆[4], 5r²₂₆[4]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
loop:
 | 
					loop:
 | 
				
			||||||
	CMPBLE R3, $32, b2
 | 
						CMPBLE R3, $32, b2 // 2 or fewer blocks remaining, need to change key coefficients
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// load next 2 blocks from message
 | 
				
			||||||
	VLM (R2), T_0, T_1
 | 
						VLM (R2), T_0, T_1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// update message slice
 | 
				
			||||||
	SUB  $32, R3
 | 
						SUB  $32, R3
 | 
				
			||||||
	MOVD $32(R2), R2
 | 
						MOVD $32(R2), R2
 | 
				
			||||||
	EXPAND(T_0, T_1, F_0, F_1, F_2, F_3, F_4)
 | 
					
 | 
				
			||||||
	VLEIB  $4, $1, F_4
 | 
						// unpack message blocks into 26-bit big-endian limbs
 | 
				
			||||||
	VLEIB  $12, $1, F_4
 | 
						EXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// add 2¹²⁸ to each message block value
 | 
				
			||||||
 | 
						VLEIB $4, $1, M_4
 | 
				
			||||||
 | 
						VLEIB $12, $1, M_4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
multiply:
 | 
					multiply:
 | 
				
			||||||
	VAG    H_0, F_0, F_0
 | 
						// accumulate the incoming message
 | 
				
			||||||
	VAG    H_1, F_1, F_1
 | 
						VAG H_0, M_0, M_0
 | 
				
			||||||
	VAG    H_2, F_2, F_2
 | 
						VAG H_3, M_3, M_3
 | 
				
			||||||
	VAG    H_3, F_3, F_3
 | 
						VAG H_1, M_1, M_1
 | 
				
			||||||
	VAG    H_4, F_4, F_4
 | 
						VAG H_4, M_4, M_4
 | 
				
			||||||
	MULTIPLY(F_0, F_1, F_2, F_3, F_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, H_0, H_1, H_2, H_3, H_4)
 | 
						VAG H_2, M_2, M_2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// multiply the accumulator by the key coefficient
 | 
				
			||||||
 | 
						MULTIPLY(M_0, M_1, M_2, M_3, M_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, H_0, H_1, H_2, H_3, H_4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// carry and partially reduce the partial products
 | 
				
			||||||
	REDUCE(H_0, H_1, H_2, H_3, H_4)
 | 
						REDUCE(H_0, H_1, H_2, H_3, H_4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	CMPBNE R3, $0, loop
 | 
						CMPBNE R3, $0, loop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
finish:
 | 
					finish:
 | 
				
			||||||
	// sum vectors
 | 
						// sum lane 0 and lane 1 and put the result in lane 1
 | 
				
			||||||
	VZERO  T_0
 | 
						VZERO  T_0
 | 
				
			||||||
	VSUMQG H_0, T_0, H_0
 | 
						VSUMQG H_0, T_0, H_0
 | 
				
			||||||
	VSUMQG H_1, T_0, H_1
 | 
					 | 
				
			||||||
	VSUMQG H_2, T_0, H_2
 | 
					 | 
				
			||||||
	VSUMQG H_3, T_0, H_3
 | 
						VSUMQG H_3, T_0, H_3
 | 
				
			||||||
 | 
						VSUMQG H_1, T_0, H_1
 | 
				
			||||||
	VSUMQG H_4, T_0, H_4
 | 
						VSUMQG H_4, T_0, H_4
 | 
				
			||||||
 | 
						VSUMQG H_2, T_0, H_2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// h may be >= 2*(2**130-5) so we need to reduce it again
 | 
						// reduce again after summation
 | 
				
			||||||
 | 
						// TODO(mundaym): there might be a more efficient way to do this
 | 
				
			||||||
 | 
						// now that we only have 1 active lane. For example, we could
 | 
				
			||||||
 | 
						// simultaneously pack the values as we reduce them.
 | 
				
			||||||
	REDUCE(H_0, H_1, H_2, H_3, H_4)
 | 
						REDUCE(H_0, H_1, H_2, H_3, H_4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// carry h1->h4
 | 
						// carry h[1] through to h[4] so that only h[4] can exceed 2²⁶ - 1
 | 
				
			||||||
 | 
						// TODO(mundaym): in testing this final carry was unnecessary.
 | 
				
			||||||
 | 
						// Needs a proof before it can be removed though.
 | 
				
			||||||
	VESRLG $26, H_1, T_1
 | 
						VESRLG $26, H_1, T_1
 | 
				
			||||||
	VN     MOD26, H_1, H_1
 | 
						VN     MOD26, H_1, H_1
 | 
				
			||||||
	VAQ    T_1, H_2, H_2
 | 
						VAQ    T_1, H_2, H_2
 | 
				
			||||||
@@ -284,95 +367,137 @@ finish:
 | 
				
			|||||||
	VN     MOD26, H_3, H_3
 | 
						VN     MOD26, H_3, H_3
 | 
				
			||||||
	VAQ    T_3, H_4, H_4
 | 
						VAQ    T_3, H_4, H_4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// h is now < 2*(2**130-5)
 | 
						// h is now < 2(2¹³⁰ - 5)
 | 
				
			||||||
	// pack h into h1 (hi) and h0 (lo)
 | 
						// Pack each lane in h₂₆[0:4] into h₁₂₈[0:1].
 | 
				
			||||||
	PACK(H_0, H_1, H_2, H_3, H_4)
 | 
						VESLG $26, H_1, H_1
 | 
				
			||||||
 | 
						VESLG $26, H_3, H_3
 | 
				
			||||||
	// if h > 2**130-5 then h -= 2**130-5
 | 
						VO    H_0, H_1, H_0
 | 
				
			||||||
	MOD(H_0, H_1, T_0, T_1, T_2)
 | 
						VO    H_2, H_3, H_2
 | 
				
			||||||
 | 
						VESLG $4, H_2, H_2
 | 
				
			||||||
	// h += s
 | 
						VLEIB $7, $48, H_1
 | 
				
			||||||
	MOVD  $·bswapMask<>(SB), R5
 | 
						VSLB  H_1, H_2, H_2
 | 
				
			||||||
	VL    (R5), T_1
 | 
						VO    H_0, H_2, H_0
 | 
				
			||||||
	VL    16(R4), T_0
 | 
						VLEIB $7, $104, H_1
 | 
				
			||||||
	VPERM T_0, T_0, T_1, T_0    // reverse bytes (to big)
 | 
						VSLB  H_1, H_4, H_3
 | 
				
			||||||
	VAQ   T_0, H_0, H_0
 | 
						VO    H_3, H_0, H_0
 | 
				
			||||||
	VPERM H_0, H_0, T_1, H_0    // reverse bytes (to little)
 | 
						VLEIB $7, $24, H_1
 | 
				
			||||||
	VST   H_0, (R1)
 | 
						VSRLB H_1, H_4, H_1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// update state
 | 
				
			||||||
 | 
						VSTEG $1, H_0, 0(R1)
 | 
				
			||||||
 | 
						VSTEG $0, H_0, 8(R1)
 | 
				
			||||||
 | 
						VSTEG $1, H_1, 16(R1)
 | 
				
			||||||
	RET
 | 
						RET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
b2:
 | 
					b2:  // 2 or fewer blocks remaining
 | 
				
			||||||
	CMPBLE R3, $16, b1
 | 
						CMPBLE R3, $16, b1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 2 blocks remaining
 | 
						// Load the 2 remaining blocks (17-32 bytes remaining).
 | 
				
			||||||
	SUB    $17, R3
 | 
						MOVD $-17(R3), R0    // index of final byte to load modulo 16
 | 
				
			||||||
	VL     (R2), T_0
 | 
						VL   (R2), T_0       // load full 16 byte block
 | 
				
			||||||
	VLL    R3, 16(R2), T_1
 | 
						VLL  R0, 16(R2), T_1 // load final (possibly partial) block and pad with zeros to 16 bytes
 | 
				
			||||||
	ADD    $1, R3
 | 
					 | 
				
			||||||
	MOVBZ  $1, R0
 | 
					 | 
				
			||||||
	CMPBEQ R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLVGB  R3, R0, T_1
 | 
					 | 
				
			||||||
	EXPAND(T_0, T_1, F_0, F_1, F_2, F_3, F_4)
 | 
					 | 
				
			||||||
	CMPBNE R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLEIB  $12, $1, F_4
 | 
					 | 
				
			||||||
	VLEIB  $4, $1, F_4
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// setup [r²,r]
 | 
						// The Poly1305 algorithm requires that a 1 bit be appended to
 | 
				
			||||||
	VLVGG $1, RSAVE_0, R_0
 | 
						// each message block. If the final block is less than 16 bytes
 | 
				
			||||||
	VLVGG $1, RSAVE_1, R_1
 | 
						// long then it is easiest to insert the 1 before the message
 | 
				
			||||||
	VLVGG $1, RSAVE_2, R_2
 | 
						// block is split into 26-bit limbs. If, on the other hand, the
 | 
				
			||||||
	VLVGG $1, RSAVE_3, R_3
 | 
						// final message block is 16 bytes long then we append the 1 bit
 | 
				
			||||||
	VLVGG $1, RSAVE_4, R_4
 | 
						// after expansion as normal.
 | 
				
			||||||
	VPDI  $0, R5_1, R5SAVE_1, R5_1
 | 
						MOVBZ  $1, R0
 | 
				
			||||||
	VPDI  $0, R5_2, R5SAVE_2, R5_2
 | 
						MOVD   $-16(R3), R3   // index of byte in last block to insert 1 at (could be 16)
 | 
				
			||||||
	VPDI  $0, R5_3, R5SAVE_3, R5_3
 | 
						CMPBEQ R3, $16, 2(PC) // skip the insertion if the final block is 16 bytes long
 | 
				
			||||||
	VPDI  $0, R5_4, R5SAVE_4, R5_4
 | 
						VLVGB  R3, R0, T_1    // insert 1 into the byte at index R3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Split both blocks into 26-bit limbs in the appropriate lanes.
 | 
				
			||||||
 | 
						EXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Append a 1 byte to the end of the second to last block.
 | 
				
			||||||
 | 
						VLEIB $4, $1, M_4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Append a 1 byte to the end of the last block only if it is a
 | 
				
			||||||
 | 
						// full 16 byte block.
 | 
				
			||||||
 | 
						CMPBNE R3, $16, 2(PC)
 | 
				
			||||||
 | 
						VLEIB  $12, $1, M_4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Finally, set up the coefficients for the final multiplication.
 | 
				
			||||||
 | 
						// We have previously saved r and 5r in the 32-bit even indexes
 | 
				
			||||||
 | 
						// of the R_[0-4] and R5_[1-4] coefficient registers.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// We want lane 0 to be multiplied by r² so that can be kept the
 | 
				
			||||||
 | 
						// same. We want lane 1 to be multiplied by r so we need to move
 | 
				
			||||||
 | 
						// the saved r value into the 32-bit odd index in lane 1 by
 | 
				
			||||||
 | 
						// rotating the 64-bit lane by 32.
 | 
				
			||||||
 | 
						VGBM   $0x00ff, T_0         // [0, 0xffffffffffffffff] - mask lane 1 only
 | 
				
			||||||
 | 
						VERIMG $32, R_0, T_0, R_0   // [_,  r²₂₆[0], _,  r₂₆[0]]
 | 
				
			||||||
 | 
						VERIMG $32, R_1, T_0, R_1   // [_,  r²₂₆[1], _,  r₂₆[1]]
 | 
				
			||||||
 | 
						VERIMG $32, R_2, T_0, R_2   // [_,  r²₂₆[2], _,  r₂₆[2]]
 | 
				
			||||||
 | 
						VERIMG $32, R_3, T_0, R_3   // [_,  r²₂₆[3], _,  r₂₆[3]]
 | 
				
			||||||
 | 
						VERIMG $32, R_4, T_0, R_4   // [_,  r²₂₆[4], _,  r₂₆[4]]
 | 
				
			||||||
 | 
						VERIMG $32, R5_1, T_0, R5_1 // [_, 5r²₂₆[1], _, 5r₂₆[1]]
 | 
				
			||||||
 | 
						VERIMG $32, R5_2, T_0, R5_2 // [_, 5r²₂₆[2], _, 5r₂₆[2]]
 | 
				
			||||||
 | 
						VERIMG $32, R5_3, T_0, R5_3 // [_, 5r²₂₆[3], _, 5r₂₆[3]]
 | 
				
			||||||
 | 
						VERIMG $32, R5_4, T_0, R5_4 // [_, 5r²₂₆[4], _, 5r₂₆[4]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	MOVD $0, R3
 | 
						MOVD $0, R3
 | 
				
			||||||
	BR   multiply
 | 
						BR   multiply
 | 
				
			||||||
 | 
					
 | 
				
			||||||
skip:
 | 
					skip:
 | 
				
			||||||
	VZERO H_0
 | 
					 | 
				
			||||||
	VZERO H_1
 | 
					 | 
				
			||||||
	VZERO H_2
 | 
					 | 
				
			||||||
	VZERO H_3
 | 
					 | 
				
			||||||
	VZERO H_4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	CMPBEQ R3, $0, finish
 | 
						CMPBEQ R3, $0, finish
 | 
				
			||||||
 | 
					
 | 
				
			||||||
b1:
 | 
					b1:  // 1 block remaining
 | 
				
			||||||
	// 1 block remaining
 | 
					
 | 
				
			||||||
	SUB    $1, R3
 | 
						// Load the final block (1-16 bytes). This will be placed into
 | 
				
			||||||
	VLL    R3, (R2), T_0
 | 
						// lane 0.
 | 
				
			||||||
	ADD    $1, R3
 | 
						MOVD $-1(R3), R0
 | 
				
			||||||
 | 
						VLL  R0, (R2), T_0 // pad to 16 bytes with zeros
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// The Poly1305 algorithm requires that a 1 bit be appended to
 | 
				
			||||||
 | 
						// each message block. If the final block is less than 16 bytes
 | 
				
			||||||
 | 
						// long then it is easiest to insert the 1 before the message
 | 
				
			||||||
 | 
						// block is split into 26-bit limbs. If, on the other hand, the
 | 
				
			||||||
 | 
						// final message block is 16 bytes long then we append the 1 bit
 | 
				
			||||||
 | 
						// after expansion as normal.
 | 
				
			||||||
	MOVBZ  $1, R0
 | 
						MOVBZ  $1, R0
 | 
				
			||||||
	CMPBEQ R3, $16, 2(PC)
 | 
						CMPBEQ R3, $16, 2(PC)
 | 
				
			||||||
	VLVGB  R3, R0, T_0
 | 
						VLVGB  R3, R0, T_0
 | 
				
			||||||
	VZERO  T_1
 | 
					 | 
				
			||||||
	EXPAND(T_0, T_1, F_0, F_1, F_2, F_3, F_4)
 | 
					 | 
				
			||||||
	CMPBNE R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLEIB  $4, $1, F_4
 | 
					 | 
				
			||||||
	VLEIG  $1, $1, R_0
 | 
					 | 
				
			||||||
	VZERO  R_1
 | 
					 | 
				
			||||||
	VZERO  R_2
 | 
					 | 
				
			||||||
	VZERO  R_3
 | 
					 | 
				
			||||||
	VZERO  R_4
 | 
					 | 
				
			||||||
	VZERO  R5_1
 | 
					 | 
				
			||||||
	VZERO  R5_2
 | 
					 | 
				
			||||||
	VZERO  R5_3
 | 
					 | 
				
			||||||
	VZERO  R5_4
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// setup [r, 1]
 | 
						// Set the message block in lane 1 to the value 0 so that it
 | 
				
			||||||
	VLVGG $0, RSAVE_0, R_0
 | 
						// can be accumulated without affecting the final result.
 | 
				
			||||||
	VLVGG $0, RSAVE_1, R_1
 | 
						VZERO T_1
 | 
				
			||||||
	VLVGG $0, RSAVE_2, R_2
 | 
					
 | 
				
			||||||
	VLVGG $0, RSAVE_3, R_3
 | 
						// Split the final message block into 26-bit limbs in lane 0.
 | 
				
			||||||
	VLVGG $0, RSAVE_4, R_4
 | 
						// Lane 1 will be contain 0.
 | 
				
			||||||
	VPDI  $0, R5SAVE_1, R5_1, R5_1
 | 
						EXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4)
 | 
				
			||||||
	VPDI  $0, R5SAVE_2, R5_2, R5_2
 | 
					
 | 
				
			||||||
	VPDI  $0, R5SAVE_3, R5_3, R5_3
 | 
						// Append a 1 byte to the end of the last block only if it is a
 | 
				
			||||||
	VPDI  $0, R5SAVE_4, R5_4, R5_4
 | 
						// full 16 byte block.
 | 
				
			||||||
 | 
						CMPBNE R3, $16, 2(PC)
 | 
				
			||||||
 | 
						VLEIB  $4, $1, M_4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// We have previously saved r and 5r in the 32-bit even indexes
 | 
				
			||||||
 | 
						// of the R_[0-4] and R5_[1-4] coefficient registers.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// We want lane 0 to be multiplied by r so we need to move the
 | 
				
			||||||
 | 
						// saved r value into the 32-bit odd index in lane 0. We want
 | 
				
			||||||
 | 
						// lane 1 to be set to the value 1. This makes multiplication
 | 
				
			||||||
 | 
						// a no-op. We do this by setting lane 1 in every register to 0
 | 
				
			||||||
 | 
						// and then just setting the 32-bit index 3 in R_0 to 1.
 | 
				
			||||||
 | 
						VZERO T_0
 | 
				
			||||||
 | 
						MOVD  $0, R0
 | 
				
			||||||
 | 
						MOVD  $0x10111213, R12
 | 
				
			||||||
 | 
						VLVGP R12, R0, T_1         // [_, 0x10111213, _, 0x00000000]
 | 
				
			||||||
 | 
						VPERM T_0, R_0, T_1, R_0   // [_,  r₂₆[0], _, 0]
 | 
				
			||||||
 | 
						VPERM T_0, R_1, T_1, R_1   // [_,  r₂₆[1], _, 0]
 | 
				
			||||||
 | 
						VPERM T_0, R_2, T_1, R_2   // [_,  r₂₆[2], _, 0]
 | 
				
			||||||
 | 
						VPERM T_0, R_3, T_1, R_3   // [_,  r₂₆[3], _, 0]
 | 
				
			||||||
 | 
						VPERM T_0, R_4, T_1, R_4   // [_,  r₂₆[4], _, 0]
 | 
				
			||||||
 | 
						VPERM T_0, R5_1, T_1, R5_1 // [_, 5r₂₆[1], _, 0]
 | 
				
			||||||
 | 
						VPERM T_0, R5_2, T_1, R5_2 // [_, 5r₂₆[2], _, 0]
 | 
				
			||||||
 | 
						VPERM T_0, R5_3, T_1, R5_3 // [_, 5r₂₆[3], _, 0]
 | 
				
			||||||
 | 
						VPERM T_0, R5_4, T_1, R5_4 // [_, 5r₂₆[4], _, 0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Set the value of lane 1 to be 1.
 | 
				
			||||||
 | 
						VLEIF $3, $1, R_0 // [_,  r₂₆[0], _, 1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	MOVD $0, R3
 | 
						MOVD $0, R3
 | 
				
			||||||
	BR   multiply
 | 
						BR   multiply
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										909
									
								
								vendor/golang.org/x/crypto/poly1305/sum_vmsl_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										909
									
								
								vendor/golang.org/x/crypto/poly1305/sum_vmsl_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,909 +0,0 @@
 | 
				
			|||||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
					 | 
				
			||||||
// Use of this source code is governed by a BSD-style
 | 
					 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// +build s390x,go1.11,!gccgo,!appengine
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "textflag.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Implementation of Poly1305 using the vector facility (vx) and the VMSL instruction.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// constants
 | 
					 | 
				
			||||||
#define EX0   V1
 | 
					 | 
				
			||||||
#define EX1   V2
 | 
					 | 
				
			||||||
#define EX2   V3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// temporaries
 | 
					 | 
				
			||||||
#define T_0 V4
 | 
					 | 
				
			||||||
#define T_1 V5
 | 
					 | 
				
			||||||
#define T_2 V6
 | 
					 | 
				
			||||||
#define T_3 V7
 | 
					 | 
				
			||||||
#define T_4 V8
 | 
					 | 
				
			||||||
#define T_5 V9
 | 
					 | 
				
			||||||
#define T_6 V10
 | 
					 | 
				
			||||||
#define T_7 V11
 | 
					 | 
				
			||||||
#define T_8 V12
 | 
					 | 
				
			||||||
#define T_9 V13
 | 
					 | 
				
			||||||
#define T_10 V14
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// r**2 & r**4
 | 
					 | 
				
			||||||
#define R_0  V15
 | 
					 | 
				
			||||||
#define R_1  V16
 | 
					 | 
				
			||||||
#define R_2  V17
 | 
					 | 
				
			||||||
#define R5_1 V18
 | 
					 | 
				
			||||||
#define R5_2 V19
 | 
					 | 
				
			||||||
// key (r)
 | 
					 | 
				
			||||||
#define RSAVE_0 R7
 | 
					 | 
				
			||||||
#define RSAVE_1 R8
 | 
					 | 
				
			||||||
#define RSAVE_2 R9
 | 
					 | 
				
			||||||
#define R5SAVE_1 R10
 | 
					 | 
				
			||||||
#define R5SAVE_2 R11
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// message block
 | 
					 | 
				
			||||||
#define M0 V20
 | 
					 | 
				
			||||||
#define M1 V21
 | 
					 | 
				
			||||||
#define M2 V22
 | 
					 | 
				
			||||||
#define M3 V23
 | 
					 | 
				
			||||||
#define M4 V24
 | 
					 | 
				
			||||||
#define M5 V25
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// accumulator
 | 
					 | 
				
			||||||
#define H0_0 V26
 | 
					 | 
				
			||||||
#define H1_0 V27
 | 
					 | 
				
			||||||
#define H2_0 V28
 | 
					 | 
				
			||||||
#define H0_1 V29
 | 
					 | 
				
			||||||
#define H1_1 V30
 | 
					 | 
				
			||||||
#define H2_1 V31
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GLOBL ·keyMask<>(SB), RODATA, $16
 | 
					 | 
				
			||||||
DATA ·keyMask<>+0(SB)/8, $0xffffff0ffcffff0f
 | 
					 | 
				
			||||||
DATA ·keyMask<>+8(SB)/8, $0xfcffff0ffcffff0f
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GLOBL ·bswapMask<>(SB), RODATA, $16
 | 
					 | 
				
			||||||
DATA ·bswapMask<>+0(SB)/8, $0x0f0e0d0c0b0a0908
 | 
					 | 
				
			||||||
DATA ·bswapMask<>+8(SB)/8, $0x0706050403020100
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GLOBL ·constants<>(SB), RODATA, $48
 | 
					 | 
				
			||||||
// EX0
 | 
					 | 
				
			||||||
DATA ·constants<>+0(SB)/8, $0x18191a1b1c1d1e1f
 | 
					 | 
				
			||||||
DATA ·constants<>+8(SB)/8, $0x0000050403020100
 | 
					 | 
				
			||||||
// EX1
 | 
					 | 
				
			||||||
DATA ·constants<>+16(SB)/8, $0x18191a1b1c1d1e1f
 | 
					 | 
				
			||||||
DATA ·constants<>+24(SB)/8, $0x00000a0908070605
 | 
					 | 
				
			||||||
// EX2
 | 
					 | 
				
			||||||
DATA ·constants<>+32(SB)/8, $0x18191a1b1c1d1e1f
 | 
					 | 
				
			||||||
DATA ·constants<>+40(SB)/8, $0x0000000f0e0d0c0b
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GLOBL ·c<>(SB), RODATA, $48
 | 
					 | 
				
			||||||
// EX0
 | 
					 | 
				
			||||||
DATA ·c<>+0(SB)/8, $0x0000050403020100
 | 
					 | 
				
			||||||
DATA ·c<>+8(SB)/8, $0x0000151413121110
 | 
					 | 
				
			||||||
// EX1
 | 
					 | 
				
			||||||
DATA ·c<>+16(SB)/8, $0x00000a0908070605
 | 
					 | 
				
			||||||
DATA ·c<>+24(SB)/8, $0x00001a1918171615
 | 
					 | 
				
			||||||
// EX2
 | 
					 | 
				
			||||||
DATA ·c<>+32(SB)/8, $0x0000000f0e0d0c0b
 | 
					 | 
				
			||||||
DATA ·c<>+40(SB)/8, $0x0000001f1e1d1c1b
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GLOBL ·reduce<>(SB), RODATA, $32
 | 
					 | 
				
			||||||
// 44 bit
 | 
					 | 
				
			||||||
DATA ·reduce<>+0(SB)/8, $0x0
 | 
					 | 
				
			||||||
DATA ·reduce<>+8(SB)/8, $0xfffffffffff
 | 
					 | 
				
			||||||
// 42 bit
 | 
					 | 
				
			||||||
DATA ·reduce<>+16(SB)/8, $0x0
 | 
					 | 
				
			||||||
DATA ·reduce<>+24(SB)/8, $0x3ffffffffff
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// h = (f*g) % (2**130-5) [partial reduction]
 | 
					 | 
				
			||||||
// uses T_0...T_9 temporary registers
 | 
					 | 
				
			||||||
// input: m02_0, m02_1, m02_2, m13_0, m13_1, m13_2, r_0, r_1, r_2, r5_1, r5_2, m4_0, m4_1, m4_2, m5_0, m5_1, m5_2
 | 
					 | 
				
			||||||
// temp: t0, t1, t2, t3, t4, t5, t6, t7, t8, t9
 | 
					 | 
				
			||||||
// output: m02_0, m02_1, m02_2, m13_0, m13_1, m13_2
 | 
					 | 
				
			||||||
#define MULTIPLY(m02_0, m02_1, m02_2, m13_0, m13_1, m13_2, r_0, r_1, r_2, r5_1, r5_2, m4_0, m4_1, m4_2, m5_0, m5_1, m5_2, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9) \
 | 
					 | 
				
			||||||
	\ // Eliminate the dependency for the last 2 VMSLs
 | 
					 | 
				
			||||||
	VMSLG m02_0, r_2, m4_2, m4_2                       \
 | 
					 | 
				
			||||||
	VMSLG m13_0, r_2, m5_2, m5_2                       \ // 8 VMSLs pipelined
 | 
					 | 
				
			||||||
	VMSLG m02_0, r_0, m4_0, m4_0                       \
 | 
					 | 
				
			||||||
	VMSLG m02_1, r5_2, V0, T_0                         \
 | 
					 | 
				
			||||||
	VMSLG m02_0, r_1, m4_1, m4_1                       \
 | 
					 | 
				
			||||||
	VMSLG m02_1, r_0, V0, T_1                          \
 | 
					 | 
				
			||||||
	VMSLG m02_1, r_1, V0, T_2                          \
 | 
					 | 
				
			||||||
	VMSLG m02_2, r5_1, V0, T_3                         \
 | 
					 | 
				
			||||||
	VMSLG m02_2, r5_2, V0, T_4                         \
 | 
					 | 
				
			||||||
	VMSLG m13_0, r_0, m5_0, m5_0                       \
 | 
					 | 
				
			||||||
	VMSLG m13_1, r5_2, V0, T_5                         \
 | 
					 | 
				
			||||||
	VMSLG m13_0, r_1, m5_1, m5_1                       \
 | 
					 | 
				
			||||||
	VMSLG m13_1, r_0, V0, T_6                          \
 | 
					 | 
				
			||||||
	VMSLG m13_1, r_1, V0, T_7                          \
 | 
					 | 
				
			||||||
	VMSLG m13_2, r5_1, V0, T_8                         \
 | 
					 | 
				
			||||||
	VMSLG m13_2, r5_2, V0, T_9                         \
 | 
					 | 
				
			||||||
	VMSLG m02_2, r_0, m4_2, m4_2                       \
 | 
					 | 
				
			||||||
	VMSLG m13_2, r_0, m5_2, m5_2                       \
 | 
					 | 
				
			||||||
	VAQ   m4_0, T_0, m02_0                             \
 | 
					 | 
				
			||||||
	VAQ   m4_1, T_1, m02_1                             \
 | 
					 | 
				
			||||||
	VAQ   m5_0, T_5, m13_0                             \
 | 
					 | 
				
			||||||
	VAQ   m5_1, T_6, m13_1                             \
 | 
					 | 
				
			||||||
	VAQ   m02_0, T_3, m02_0                            \
 | 
					 | 
				
			||||||
	VAQ   m02_1, T_4, m02_1                            \
 | 
					 | 
				
			||||||
	VAQ   m13_0, T_8, m13_0                            \
 | 
					 | 
				
			||||||
	VAQ   m13_1, T_9, m13_1                            \
 | 
					 | 
				
			||||||
	VAQ   m4_2, T_2, m02_2                             \
 | 
					 | 
				
			||||||
	VAQ   m5_2, T_7, m13_2                             \
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// SQUARE uses three limbs of r and r_2*5 to output square of r
 | 
					 | 
				
			||||||
// uses T_1, T_5 and T_7 temporary registers
 | 
					 | 
				
			||||||
// input: r_0, r_1, r_2, r5_2
 | 
					 | 
				
			||||||
// temp: TEMP0, TEMP1, TEMP2
 | 
					 | 
				
			||||||
// output: p0, p1, p2
 | 
					 | 
				
			||||||
#define SQUARE(r_0, r_1, r_2, r5_2, p0, p1, p2, TEMP0, TEMP1, TEMP2) \
 | 
					 | 
				
			||||||
	VMSLG r_0, r_0, p0, p0     \
 | 
					 | 
				
			||||||
	VMSLG r_1, r5_2, V0, TEMP0 \
 | 
					 | 
				
			||||||
	VMSLG r_2, r5_2, p1, p1    \
 | 
					 | 
				
			||||||
	VMSLG r_0, r_1, V0, TEMP1  \
 | 
					 | 
				
			||||||
	VMSLG r_1, r_1, p2, p2     \
 | 
					 | 
				
			||||||
	VMSLG r_0, r_2, V0, TEMP2  \
 | 
					 | 
				
			||||||
	VAQ   TEMP0, p0, p0        \
 | 
					 | 
				
			||||||
	VAQ   TEMP1, p1, p1        \
 | 
					 | 
				
			||||||
	VAQ   TEMP2, p2, p2        \
 | 
					 | 
				
			||||||
	VAQ   TEMP0, p0, p0        \
 | 
					 | 
				
			||||||
	VAQ   TEMP1, p1, p1        \
 | 
					 | 
				
			||||||
	VAQ   TEMP2, p2, p2        \
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// carry h0->h1->h2->h0 || h3->h4->h5->h3
 | 
					 | 
				
			||||||
// uses T_2, T_4, T_5, T_7, T_8, T_9
 | 
					 | 
				
			||||||
//       t6,  t7,  t8,  t9, t10, t11
 | 
					 | 
				
			||||||
// input: h0, h1, h2, h3, h4, h5
 | 
					 | 
				
			||||||
// temp: t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11
 | 
					 | 
				
			||||||
// output: h0, h1, h2, h3, h4, h5
 | 
					 | 
				
			||||||
#define REDUCE(h0, h1, h2, h3, h4, h5, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) \
 | 
					 | 
				
			||||||
	VLM    (R12), t6, t7  \ // 44 and 42 bit clear mask
 | 
					 | 
				
			||||||
	VLEIB  $7, $0x28, t10 \ // 5 byte shift mask
 | 
					 | 
				
			||||||
	VREPIB $4, t8         \ // 4 bit shift mask
 | 
					 | 
				
			||||||
	VREPIB $2, t11        \ // 2 bit shift mask
 | 
					 | 
				
			||||||
	VSRLB  t10, h0, t0    \ // h0 byte shift
 | 
					 | 
				
			||||||
	VSRLB  t10, h1, t1    \ // h1 byte shift
 | 
					 | 
				
			||||||
	VSRLB  t10, h2, t2    \ // h2 byte shift
 | 
					 | 
				
			||||||
	VSRLB  t10, h3, t3    \ // h3 byte shift
 | 
					 | 
				
			||||||
	VSRLB  t10, h4, t4    \ // h4 byte shift
 | 
					 | 
				
			||||||
	VSRLB  t10, h5, t5    \ // h5 byte shift
 | 
					 | 
				
			||||||
	VSRL   t8, t0, t0     \ // h0 bit shift
 | 
					 | 
				
			||||||
	VSRL   t8, t1, t1     \ // h2 bit shift
 | 
					 | 
				
			||||||
	VSRL   t11, t2, t2    \ // h2 bit shift
 | 
					 | 
				
			||||||
	VSRL   t8, t3, t3     \ // h3 bit shift
 | 
					 | 
				
			||||||
	VSRL   t8, t4, t4     \ // h4 bit shift
 | 
					 | 
				
			||||||
	VESLG  $2, t2, t9     \ // h2 carry x5
 | 
					 | 
				
			||||||
	VSRL   t11, t5, t5    \ // h5 bit shift
 | 
					 | 
				
			||||||
	VN     t6, h0, h0     \ // h0 clear carry
 | 
					 | 
				
			||||||
	VAQ    t2, t9, t2     \ // h2 carry x5
 | 
					 | 
				
			||||||
	VESLG  $2, t5, t9     \ // h5 carry x5
 | 
					 | 
				
			||||||
	VN     t6, h1, h1     \ // h1 clear carry
 | 
					 | 
				
			||||||
	VN     t7, h2, h2     \ // h2 clear carry
 | 
					 | 
				
			||||||
	VAQ    t5, t9, t5     \ // h5 carry x5
 | 
					 | 
				
			||||||
	VN     t6, h3, h3     \ // h3 clear carry
 | 
					 | 
				
			||||||
	VN     t6, h4, h4     \ // h4 clear carry
 | 
					 | 
				
			||||||
	VN     t7, h5, h5     \ // h5 clear carry
 | 
					 | 
				
			||||||
	VAQ    t0, h1, h1     \ // h0->h1
 | 
					 | 
				
			||||||
	VAQ    t3, h4, h4     \ // h3->h4
 | 
					 | 
				
			||||||
	VAQ    t1, h2, h2     \ // h1->h2
 | 
					 | 
				
			||||||
	VAQ    t4, h5, h5     \ // h4->h5
 | 
					 | 
				
			||||||
	VAQ    t2, h0, h0     \ // h2->h0
 | 
					 | 
				
			||||||
	VAQ    t5, h3, h3     \ // h5->h3
 | 
					 | 
				
			||||||
	VREPG  $1, t6, t6     \ // 44 and 42 bit masks across both halves
 | 
					 | 
				
			||||||
	VREPG  $1, t7, t7     \
 | 
					 | 
				
			||||||
	VSLDB  $8, h0, h0, h0 \ // set up [h0/1/2, h3/4/5]
 | 
					 | 
				
			||||||
	VSLDB  $8, h1, h1, h1 \
 | 
					 | 
				
			||||||
	VSLDB  $8, h2, h2, h2 \
 | 
					 | 
				
			||||||
	VO     h0, h3, h3     \
 | 
					 | 
				
			||||||
	VO     h1, h4, h4     \
 | 
					 | 
				
			||||||
	VO     h2, h5, h5     \
 | 
					 | 
				
			||||||
	VESRLG $44, h3, t0    \ // 44 bit shift right
 | 
					 | 
				
			||||||
	VESRLG $44, h4, t1    \
 | 
					 | 
				
			||||||
	VESRLG $42, h5, t2    \
 | 
					 | 
				
			||||||
	VN     t6, h3, h3     \ // clear carry bits
 | 
					 | 
				
			||||||
	VN     t6, h4, h4     \
 | 
					 | 
				
			||||||
	VN     t7, h5, h5     \
 | 
					 | 
				
			||||||
	VESLG  $2, t2, t9     \ // multiply carry by 5
 | 
					 | 
				
			||||||
	VAQ    t9, t2, t2     \
 | 
					 | 
				
			||||||
	VAQ    t0, h4, h4     \
 | 
					 | 
				
			||||||
	VAQ    t1, h5, h5     \
 | 
					 | 
				
			||||||
	VAQ    t2, h3, h3     \
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// carry h0->h1->h2->h0
 | 
					 | 
				
			||||||
// input: h0, h1, h2
 | 
					 | 
				
			||||||
// temp: t0, t1, t2, t3, t4, t5, t6, t7, t8
 | 
					 | 
				
			||||||
// output: h0, h1, h2
 | 
					 | 
				
			||||||
#define REDUCE2(h0, h1, h2, t0, t1, t2, t3, t4, t5, t6, t7, t8) \
 | 
					 | 
				
			||||||
	VLEIB  $7, $0x28, t3 \ // 5 byte shift mask
 | 
					 | 
				
			||||||
	VREPIB $4, t4        \ // 4 bit shift mask
 | 
					 | 
				
			||||||
	VREPIB $2, t7        \ // 2 bit shift mask
 | 
					 | 
				
			||||||
	VGBM   $0x003F, t5   \ // mask to clear carry bits
 | 
					 | 
				
			||||||
	VSRLB  t3, h0, t0    \
 | 
					 | 
				
			||||||
	VSRLB  t3, h1, t1    \
 | 
					 | 
				
			||||||
	VSRLB  t3, h2, t2    \
 | 
					 | 
				
			||||||
	VESRLG $4, t5, t5    \ // 44 bit clear mask
 | 
					 | 
				
			||||||
	VSRL   t4, t0, t0    \
 | 
					 | 
				
			||||||
	VSRL   t4, t1, t1    \
 | 
					 | 
				
			||||||
	VSRL   t7, t2, t2    \
 | 
					 | 
				
			||||||
	VESRLG $2, t5, t6    \ // 42 bit clear mask
 | 
					 | 
				
			||||||
	VESLG  $2, t2, t8    \
 | 
					 | 
				
			||||||
	VAQ    t8, t2, t2    \
 | 
					 | 
				
			||||||
	VN     t5, h0, h0    \
 | 
					 | 
				
			||||||
	VN     t5, h1, h1    \
 | 
					 | 
				
			||||||
	VN     t6, h2, h2    \
 | 
					 | 
				
			||||||
	VAQ    t0, h1, h1    \
 | 
					 | 
				
			||||||
	VAQ    t1, h2, h2    \
 | 
					 | 
				
			||||||
	VAQ    t2, h0, h0    \
 | 
					 | 
				
			||||||
	VSRLB  t3, h0, t0    \
 | 
					 | 
				
			||||||
	VSRLB  t3, h1, t1    \
 | 
					 | 
				
			||||||
	VSRLB  t3, h2, t2    \
 | 
					 | 
				
			||||||
	VSRL   t4, t0, t0    \
 | 
					 | 
				
			||||||
	VSRL   t4, t1, t1    \
 | 
					 | 
				
			||||||
	VSRL   t7, t2, t2    \
 | 
					 | 
				
			||||||
	VN     t5, h0, h0    \
 | 
					 | 
				
			||||||
	VN     t5, h1, h1    \
 | 
					 | 
				
			||||||
	VESLG  $2, t2, t8    \
 | 
					 | 
				
			||||||
	VN     t6, h2, h2    \
 | 
					 | 
				
			||||||
	VAQ    t0, h1, h1    \
 | 
					 | 
				
			||||||
	VAQ    t8, t2, t2    \
 | 
					 | 
				
			||||||
	VAQ    t1, h2, h2    \
 | 
					 | 
				
			||||||
	VAQ    t2, h0, h0    \
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// expands two message blocks into the lower halfs of the d registers
 | 
					 | 
				
			||||||
// moves the contents of the d registers into upper halfs
 | 
					 | 
				
			||||||
// input: in1, in2, d0, d1, d2, d3, d4, d5
 | 
					 | 
				
			||||||
// temp: TEMP0, TEMP1, TEMP2, TEMP3
 | 
					 | 
				
			||||||
// output: d0, d1, d2, d3, d4, d5
 | 
					 | 
				
			||||||
#define EXPACC(in1, in2, d0, d1, d2, d3, d4, d5, TEMP0, TEMP1, TEMP2, TEMP3) \
 | 
					 | 
				
			||||||
	VGBM   $0xff3f, TEMP0      \
 | 
					 | 
				
			||||||
	VGBM   $0xff1f, TEMP1      \
 | 
					 | 
				
			||||||
	VESLG  $4, d1, TEMP2       \
 | 
					 | 
				
			||||||
	VESLG  $4, d4, TEMP3       \
 | 
					 | 
				
			||||||
	VESRLG $4, TEMP0, TEMP0    \
 | 
					 | 
				
			||||||
	VPERM  in1, d0, EX0, d0    \
 | 
					 | 
				
			||||||
	VPERM  in2, d3, EX0, d3    \
 | 
					 | 
				
			||||||
	VPERM  in1, d2, EX2, d2    \
 | 
					 | 
				
			||||||
	VPERM  in2, d5, EX2, d5    \
 | 
					 | 
				
			||||||
	VPERM  in1, TEMP2, EX1, d1 \
 | 
					 | 
				
			||||||
	VPERM  in2, TEMP3, EX1, d4 \
 | 
					 | 
				
			||||||
	VN     TEMP0, d0, d0       \
 | 
					 | 
				
			||||||
	VN     TEMP0, d3, d3       \
 | 
					 | 
				
			||||||
	VESRLG $4, d1, d1          \
 | 
					 | 
				
			||||||
	VESRLG $4, d4, d4          \
 | 
					 | 
				
			||||||
	VN     TEMP1, d2, d2       \
 | 
					 | 
				
			||||||
	VN     TEMP1, d5, d5       \
 | 
					 | 
				
			||||||
	VN     TEMP0, d1, d1       \
 | 
					 | 
				
			||||||
	VN     TEMP0, d4, d4       \
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// expands one message block into the lower halfs of the d registers
 | 
					 | 
				
			||||||
// moves the contents of the d registers into upper halfs
 | 
					 | 
				
			||||||
// input: in, d0, d1, d2
 | 
					 | 
				
			||||||
// temp: TEMP0, TEMP1, TEMP2
 | 
					 | 
				
			||||||
// output: d0, d1, d2
 | 
					 | 
				
			||||||
#define EXPACC2(in, d0, d1, d2, TEMP0, TEMP1, TEMP2) \
 | 
					 | 
				
			||||||
	VGBM   $0xff3f, TEMP0     \
 | 
					 | 
				
			||||||
	VESLG  $4, d1, TEMP2      \
 | 
					 | 
				
			||||||
	VGBM   $0xff1f, TEMP1     \
 | 
					 | 
				
			||||||
	VPERM  in, d0, EX0, d0    \
 | 
					 | 
				
			||||||
	VESRLG $4, TEMP0, TEMP0   \
 | 
					 | 
				
			||||||
	VPERM  in, d2, EX2, d2    \
 | 
					 | 
				
			||||||
	VPERM  in, TEMP2, EX1, d1 \
 | 
					 | 
				
			||||||
	VN     TEMP0, d0, d0      \
 | 
					 | 
				
			||||||
	VN     TEMP1, d2, d2      \
 | 
					 | 
				
			||||||
	VESRLG $4, d1, d1         \
 | 
					 | 
				
			||||||
	VN     TEMP0, d1, d1      \
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// pack h2:h0 into h1:h0 (no carry)
 | 
					 | 
				
			||||||
// input: h0, h1, h2
 | 
					 | 
				
			||||||
// output: h0, h1, h2
 | 
					 | 
				
			||||||
#define PACK(h0, h1, h2) \
 | 
					 | 
				
			||||||
	VMRLG  h1, h2, h2  \ // copy h1 to upper half h2
 | 
					 | 
				
			||||||
	VESLG  $44, h1, h1 \ // shift limb 1 44 bits, leaving 20
 | 
					 | 
				
			||||||
	VO     h0, h1, h0  \ // combine h0 with 20 bits from limb 1
 | 
					 | 
				
			||||||
	VESRLG $20, h2, h1 \ // put top 24 bits of limb 1 into h1
 | 
					 | 
				
			||||||
	VLEIG  $1, $0, h1  \ // clear h2 stuff from lower half of h1
 | 
					 | 
				
			||||||
	VO     h0, h1, h0  \ // h0 now has 88 bits (limb 0 and 1)
 | 
					 | 
				
			||||||
	VLEIG  $0, $0, h2  \ // clear upper half of h2
 | 
					 | 
				
			||||||
	VESRLG $40, h2, h1 \ // h1 now has upper two bits of result
 | 
					 | 
				
			||||||
	VLEIB  $7, $88, h1 \ // for byte shift (11 bytes)
 | 
					 | 
				
			||||||
	VSLB   h1, h2, h2  \ // shift h2 11 bytes to the left
 | 
					 | 
				
			||||||
	VO     h0, h2, h0  \ // combine h0 with 20 bits from limb 1
 | 
					 | 
				
			||||||
	VLEIG  $0, $0, h1  \ // clear upper half of h1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// if h > 2**130-5 then h -= 2**130-5
 | 
					 | 
				
			||||||
// input: h0, h1
 | 
					 | 
				
			||||||
// temp: t0, t1, t2
 | 
					 | 
				
			||||||
// output: h0
 | 
					 | 
				
			||||||
#define MOD(h0, h1, t0, t1, t2) \
 | 
					 | 
				
			||||||
	VZERO t0          \
 | 
					 | 
				
			||||||
	VLEIG $1, $5, t0  \
 | 
					 | 
				
			||||||
	VACCQ h0, t0, t1  \
 | 
					 | 
				
			||||||
	VAQ   h0, t0, t0  \
 | 
					 | 
				
			||||||
	VONE  t2          \
 | 
					 | 
				
			||||||
	VLEIG $1, $-4, t2 \
 | 
					 | 
				
			||||||
	VAQ   t2, t1, t1  \
 | 
					 | 
				
			||||||
	VACCQ h1, t1, t1  \
 | 
					 | 
				
			||||||
	VONE  t2          \
 | 
					 | 
				
			||||||
	VAQ   t2, t1, t1  \
 | 
					 | 
				
			||||||
	VN    h0, t1, t2  \
 | 
					 | 
				
			||||||
	VNC   t0, t1, t1  \
 | 
					 | 
				
			||||||
	VO    t1, t2, h0  \
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// func poly1305vmsl(out *[16]byte, m *byte, mlen uint64, key *[32]key)
 | 
					 | 
				
			||||||
TEXT ·poly1305vmsl(SB), $0-32
 | 
					 | 
				
			||||||
	// This code processes 6 + up to 4 blocks (32 bytes) per iteration
 | 
					 | 
				
			||||||
	// using the algorithm described in:
 | 
					 | 
				
			||||||
	// NEON crypto, Daniel J. Bernstein & Peter Schwabe
 | 
					 | 
				
			||||||
	// https://cryptojedi.org/papers/neoncrypto-20120320.pdf
 | 
					 | 
				
			||||||
	// And as moddified for VMSL as described in
 | 
					 | 
				
			||||||
	// Accelerating Poly1305 Cryptographic Message Authentication on the z14
 | 
					 | 
				
			||||||
	// O'Farrell et al, CASCON 2017, p48-55
 | 
					 | 
				
			||||||
	// https://ibm.ent.box.com/s/jf9gedj0e9d2vjctfyh186shaztavnht
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	LMG   out+0(FP), R1, R4 // R1=out, R2=m, R3=mlen, R4=key
 | 
					 | 
				
			||||||
	VZERO V0                // c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// load EX0, EX1 and EX2
 | 
					 | 
				
			||||||
	MOVD $·constants<>(SB), R5
 | 
					 | 
				
			||||||
	VLM  (R5), EX0, EX2        // c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// setup r
 | 
					 | 
				
			||||||
	VL    (R4), T_0
 | 
					 | 
				
			||||||
	MOVD  $·keyMask<>(SB), R6
 | 
					 | 
				
			||||||
	VL    (R6), T_1
 | 
					 | 
				
			||||||
	VN    T_0, T_1, T_0
 | 
					 | 
				
			||||||
	VZERO T_2                 // limbs for r
 | 
					 | 
				
			||||||
	VZERO T_3
 | 
					 | 
				
			||||||
	VZERO T_4
 | 
					 | 
				
			||||||
	EXPACC2(T_0, T_2, T_3, T_4, T_1, T_5, T_7)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// T_2, T_3, T_4: [0, r]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// setup r*20
 | 
					 | 
				
			||||||
	VLEIG $0, $0, T_0
 | 
					 | 
				
			||||||
	VLEIG $1, $20, T_0       // T_0: [0, 20]
 | 
					 | 
				
			||||||
	VZERO T_5
 | 
					 | 
				
			||||||
	VZERO T_6
 | 
					 | 
				
			||||||
	VMSLG T_0, T_3, T_5, T_5
 | 
					 | 
				
			||||||
	VMSLG T_0, T_4, T_6, T_6
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// store r for final block in GR
 | 
					 | 
				
			||||||
	VLGVG $1, T_2, RSAVE_0  // c
 | 
					 | 
				
			||||||
	VLGVG $1, T_3, RSAVE_1  // c
 | 
					 | 
				
			||||||
	VLGVG $1, T_4, RSAVE_2  // c
 | 
					 | 
				
			||||||
	VLGVG $1, T_5, R5SAVE_1 // c
 | 
					 | 
				
			||||||
	VLGVG $1, T_6, R5SAVE_2 // c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// initialize h
 | 
					 | 
				
			||||||
	VZERO H0_0
 | 
					 | 
				
			||||||
	VZERO H1_0
 | 
					 | 
				
			||||||
	VZERO H2_0
 | 
					 | 
				
			||||||
	VZERO H0_1
 | 
					 | 
				
			||||||
	VZERO H1_1
 | 
					 | 
				
			||||||
	VZERO H2_1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// initialize pointer for reduce constants
 | 
					 | 
				
			||||||
	MOVD $·reduce<>(SB), R12
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// calculate r**2 and 20*(r**2)
 | 
					 | 
				
			||||||
	VZERO R_0
 | 
					 | 
				
			||||||
	VZERO R_1
 | 
					 | 
				
			||||||
	VZERO R_2
 | 
					 | 
				
			||||||
	SQUARE(T_2, T_3, T_4, T_6, R_0, R_1, R_2, T_1, T_5, T_7)
 | 
					 | 
				
			||||||
	REDUCE2(R_0, R_1, R_2, M0, M1, M2, M3, M4, R5_1, R5_2, M5, T_1)
 | 
					 | 
				
			||||||
	VZERO R5_1
 | 
					 | 
				
			||||||
	VZERO R5_2
 | 
					 | 
				
			||||||
	VMSLG T_0, R_1, R5_1, R5_1
 | 
					 | 
				
			||||||
	VMSLG T_0, R_2, R5_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// skip r**4 calculation if 3 blocks or less
 | 
					 | 
				
			||||||
	CMPBLE R3, $48, b4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// calculate r**4 and 20*(r**4)
 | 
					 | 
				
			||||||
	VZERO T_8
 | 
					 | 
				
			||||||
	VZERO T_9
 | 
					 | 
				
			||||||
	VZERO T_10
 | 
					 | 
				
			||||||
	SQUARE(R_0, R_1, R_2, R5_2, T_8, T_9, T_10, T_1, T_5, T_7)
 | 
					 | 
				
			||||||
	REDUCE2(T_8, T_9, T_10, M0, M1, M2, M3, M4, T_2, T_3, M5, T_1)
 | 
					 | 
				
			||||||
	VZERO T_2
 | 
					 | 
				
			||||||
	VZERO T_3
 | 
					 | 
				
			||||||
	VMSLG T_0, T_9, T_2, T_2
 | 
					 | 
				
			||||||
	VMSLG T_0, T_10, T_3, T_3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// put r**2 to the right and r**4 to the left of R_0, R_1, R_2
 | 
					 | 
				
			||||||
	VSLDB $8, T_8, T_8, T_8
 | 
					 | 
				
			||||||
	VSLDB $8, T_9, T_9, T_9
 | 
					 | 
				
			||||||
	VSLDB $8, T_10, T_10, T_10
 | 
					 | 
				
			||||||
	VSLDB $8, T_2, T_2, T_2
 | 
					 | 
				
			||||||
	VSLDB $8, T_3, T_3, T_3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VO T_8, R_0, R_0
 | 
					 | 
				
			||||||
	VO T_9, R_1, R_1
 | 
					 | 
				
			||||||
	VO T_10, R_2, R_2
 | 
					 | 
				
			||||||
	VO T_2, R5_1, R5_1
 | 
					 | 
				
			||||||
	VO T_3, R5_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	CMPBLE R3, $80, load // less than or equal to 5 blocks in message
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// 6(or 5+1) blocks
 | 
					 | 
				
			||||||
	SUB    $81, R3
 | 
					 | 
				
			||||||
	VLM    (R2), M0, M4
 | 
					 | 
				
			||||||
	VLL    R3, 80(R2), M5
 | 
					 | 
				
			||||||
	ADD    $1, R3
 | 
					 | 
				
			||||||
	MOVBZ  $1, R0
 | 
					 | 
				
			||||||
	CMPBGE R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLVGB  R3, R0, M5
 | 
					 | 
				
			||||||
	MOVD   $96(R2), R2
 | 
					 | 
				
			||||||
	EXPACC(M0, M1, H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_0, T_1, T_2, T_3)
 | 
					 | 
				
			||||||
	EXPACC(M2, M3, H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_0, T_1, T_2, T_3)
 | 
					 | 
				
			||||||
	VLEIB  $2, $1, H2_0
 | 
					 | 
				
			||||||
	VLEIB  $2, $1, H2_1
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, H2_0
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, H2_1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VZERO  M0
 | 
					 | 
				
			||||||
	VZERO  M1
 | 
					 | 
				
			||||||
	VZERO  M2
 | 
					 | 
				
			||||||
	VZERO  M3
 | 
					 | 
				
			||||||
	VZERO  T_4
 | 
					 | 
				
			||||||
	VZERO  T_10
 | 
					 | 
				
			||||||
	EXPACC(M4, M5, M0, M1, M2, M3, T_4, T_10, T_0, T_1, T_2, T_3)
 | 
					 | 
				
			||||||
	VLR    T_4, M4
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, M2
 | 
					 | 
				
			||||||
	CMPBLT R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, T_10
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, T_10, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M2, M3, M4, T_4, T_5, T_2, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	VMRHG  V0, H0_1, H0_0
 | 
					 | 
				
			||||||
	VMRHG  V0, H1_1, H1_0
 | 
					 | 
				
			||||||
	VMRHG  V0, H2_1, H2_0
 | 
					 | 
				
			||||||
	VMRLG  V0, H0_1, H0_1
 | 
					 | 
				
			||||||
	VMRLG  V0, H1_1, H1_1
 | 
					 | 
				
			||||||
	VMRLG  V0, H2_1, H2_1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	SUB    $16, R3
 | 
					 | 
				
			||||||
	CMPBLE R3, $0, square
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
load:
 | 
					 | 
				
			||||||
	// load EX0, EX1 and EX2
 | 
					 | 
				
			||||||
	MOVD $·c<>(SB), R5
 | 
					 | 
				
			||||||
	VLM  (R5), EX0, EX2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
loop:
 | 
					 | 
				
			||||||
	CMPBLE R3, $64, add // b4	// last 4 or less blocks left
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// next 4 full blocks
 | 
					 | 
				
			||||||
	VLM  (R2), M2, M5
 | 
					 | 
				
			||||||
	SUB  $64, R3
 | 
					 | 
				
			||||||
	MOVD $64(R2), R2
 | 
					 | 
				
			||||||
	REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, T_0, T_1, T_3, T_4, T_5, T_2, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// expacc in-lined to create [m2, m3] limbs
 | 
					 | 
				
			||||||
	VGBM   $0x3f3f, T_0     // 44 bit clear mask
 | 
					 | 
				
			||||||
	VGBM   $0x1f1f, T_1     // 40 bit clear mask
 | 
					 | 
				
			||||||
	VPERM  M2, M3, EX0, T_3
 | 
					 | 
				
			||||||
	VESRLG $4, T_0, T_0     // 44 bit clear mask ready
 | 
					 | 
				
			||||||
	VPERM  M2, M3, EX1, T_4
 | 
					 | 
				
			||||||
	VPERM  M2, M3, EX2, T_5
 | 
					 | 
				
			||||||
	VN     T_0, T_3, T_3
 | 
					 | 
				
			||||||
	VESRLG $4, T_4, T_4
 | 
					 | 
				
			||||||
	VN     T_1, T_5, T_5
 | 
					 | 
				
			||||||
	VN     T_0, T_4, T_4
 | 
					 | 
				
			||||||
	VMRHG  H0_1, T_3, H0_0
 | 
					 | 
				
			||||||
	VMRHG  H1_1, T_4, H1_0
 | 
					 | 
				
			||||||
	VMRHG  H2_1, T_5, H2_0
 | 
					 | 
				
			||||||
	VMRLG  H0_1, T_3, H0_1
 | 
					 | 
				
			||||||
	VMRLG  H1_1, T_4, H1_1
 | 
					 | 
				
			||||||
	VMRLG  H2_1, T_5, H2_1
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, H2_0
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, H2_1
 | 
					 | 
				
			||||||
	VPERM  M4, M5, EX0, T_3
 | 
					 | 
				
			||||||
	VPERM  M4, M5, EX1, T_4
 | 
					 | 
				
			||||||
	VPERM  M4, M5, EX2, T_5
 | 
					 | 
				
			||||||
	VN     T_0, T_3, T_3
 | 
					 | 
				
			||||||
	VESRLG $4, T_4, T_4
 | 
					 | 
				
			||||||
	VN     T_1, T_5, T_5
 | 
					 | 
				
			||||||
	VN     T_0, T_4, T_4
 | 
					 | 
				
			||||||
	VMRHG  V0, T_3, M0
 | 
					 | 
				
			||||||
	VMRHG  V0, T_4, M1
 | 
					 | 
				
			||||||
	VMRHG  V0, T_5, M2
 | 
					 | 
				
			||||||
	VMRLG  V0, T_3, M3
 | 
					 | 
				
			||||||
	VMRLG  V0, T_4, M4
 | 
					 | 
				
			||||||
	VMRLG  V0, T_5, M5
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, M2
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, M5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	CMPBNE R3, $0, loop
 | 
					 | 
				
			||||||
	REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M3, M4, M5, T_4, T_5, T_2, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	VMRHG  V0, H0_1, H0_0
 | 
					 | 
				
			||||||
	VMRHG  V0, H1_1, H1_0
 | 
					 | 
				
			||||||
	VMRHG  V0, H2_1, H2_0
 | 
					 | 
				
			||||||
	VMRLG  V0, H0_1, H0_1
 | 
					 | 
				
			||||||
	VMRLG  V0, H1_1, H1_1
 | 
					 | 
				
			||||||
	VMRLG  V0, H2_1, H2_1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// load EX0, EX1, EX2
 | 
					 | 
				
			||||||
	MOVD $·constants<>(SB), R5
 | 
					 | 
				
			||||||
	VLM  (R5), EX0, EX2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// sum vectors
 | 
					 | 
				
			||||||
	VAQ H0_0, H0_1, H0_0
 | 
					 | 
				
			||||||
	VAQ H1_0, H1_1, H1_0
 | 
					 | 
				
			||||||
	VAQ H2_0, H2_1, H2_0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// h may be >= 2*(2**130-5) so we need to reduce it again
 | 
					 | 
				
			||||||
	// M0...M4 are used as temps here
 | 
					 | 
				
			||||||
	REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, T_9, T_10, H0_1, M5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
next:  // carry h1->h2
 | 
					 | 
				
			||||||
	VLEIB  $7, $0x28, T_1
 | 
					 | 
				
			||||||
	VREPIB $4, T_2
 | 
					 | 
				
			||||||
	VGBM   $0x003F, T_3
 | 
					 | 
				
			||||||
	VESRLG $4, T_3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// byte shift
 | 
					 | 
				
			||||||
	VSRLB T_1, H1_0, T_4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// bit shift
 | 
					 | 
				
			||||||
	VSRL T_2, T_4, T_4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// clear h1 carry bits
 | 
					 | 
				
			||||||
	VN T_3, H1_0, H1_0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// add carry
 | 
					 | 
				
			||||||
	VAQ T_4, H2_0, H2_0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// h is now < 2*(2**130-5)
 | 
					 | 
				
			||||||
	// pack h into h1 (hi) and h0 (lo)
 | 
					 | 
				
			||||||
	PACK(H0_0, H1_0, H2_0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// if h > 2**130-5 then h -= 2**130-5
 | 
					 | 
				
			||||||
	MOD(H0_0, H1_0, T_0, T_1, T_2)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// h += s
 | 
					 | 
				
			||||||
	MOVD  $·bswapMask<>(SB), R5
 | 
					 | 
				
			||||||
	VL    (R5), T_1
 | 
					 | 
				
			||||||
	VL    16(R4), T_0
 | 
					 | 
				
			||||||
	VPERM T_0, T_0, T_1, T_0    // reverse bytes (to big)
 | 
					 | 
				
			||||||
	VAQ   T_0, H0_0, H0_0
 | 
					 | 
				
			||||||
	VPERM H0_0, H0_0, T_1, H0_0 // reverse bytes (to little)
 | 
					 | 
				
			||||||
	VST   H0_0, (R1)
 | 
					 | 
				
			||||||
	RET
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
add:
 | 
					 | 
				
			||||||
	// load EX0, EX1, EX2
 | 
					 | 
				
			||||||
	MOVD $·constants<>(SB), R5
 | 
					 | 
				
			||||||
	VLM  (R5), EX0, EX2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M3, M4, M5, T_4, T_5, T_2, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	VMRHG  V0, H0_1, H0_0
 | 
					 | 
				
			||||||
	VMRHG  V0, H1_1, H1_0
 | 
					 | 
				
			||||||
	VMRHG  V0, H2_1, H2_0
 | 
					 | 
				
			||||||
	VMRLG  V0, H0_1, H0_1
 | 
					 | 
				
			||||||
	VMRLG  V0, H1_1, H1_1
 | 
					 | 
				
			||||||
	VMRLG  V0, H2_1, H2_1
 | 
					 | 
				
			||||||
	CMPBLE R3, $64, b4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
b4:
 | 
					 | 
				
			||||||
	CMPBLE R3, $48, b3 // 3 blocks or less
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// 4(3+1) blocks remaining
 | 
					 | 
				
			||||||
	SUB    $49, R3
 | 
					 | 
				
			||||||
	VLM    (R2), M0, M2
 | 
					 | 
				
			||||||
	VLL    R3, 48(R2), M3
 | 
					 | 
				
			||||||
	ADD    $1, R3
 | 
					 | 
				
			||||||
	MOVBZ  $1, R0
 | 
					 | 
				
			||||||
	CMPBEQ R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLVGB  R3, R0, M3
 | 
					 | 
				
			||||||
	MOVD   $64(R2), R2
 | 
					 | 
				
			||||||
	EXPACC(M0, M1, H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_0, T_1, T_2, T_3)
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, H2_0
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, H2_1
 | 
					 | 
				
			||||||
	VZERO  M0
 | 
					 | 
				
			||||||
	VZERO  M1
 | 
					 | 
				
			||||||
	VZERO  M4
 | 
					 | 
				
			||||||
	VZERO  M5
 | 
					 | 
				
			||||||
	VZERO  T_4
 | 
					 | 
				
			||||||
	VZERO  T_10
 | 
					 | 
				
			||||||
	EXPACC(M2, M3, M0, M1, M4, M5, T_4, T_10, T_0, T_1, T_2, T_3)
 | 
					 | 
				
			||||||
	VLR    T_4, M2
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, M4
 | 
					 | 
				
			||||||
	CMPBNE R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, T_10
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M4, M5, M2, T_10, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M3, M4, M5, T_4, T_5, T_2, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	VMRHG  V0, H0_1, H0_0
 | 
					 | 
				
			||||||
	VMRHG  V0, H1_1, H1_0
 | 
					 | 
				
			||||||
	VMRHG  V0, H2_1, H2_0
 | 
					 | 
				
			||||||
	VMRLG  V0, H0_1, H0_1
 | 
					 | 
				
			||||||
	VMRLG  V0, H1_1, H1_1
 | 
					 | 
				
			||||||
	VMRLG  V0, H2_1, H2_1
 | 
					 | 
				
			||||||
	SUB    $16, R3
 | 
					 | 
				
			||||||
	CMPBLE R3, $0, square // this condition must always hold true!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
b3:
 | 
					 | 
				
			||||||
	CMPBLE R3, $32, b2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// 3 blocks remaining
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// setup [r²,r]
 | 
					 | 
				
			||||||
	VSLDB $8, R_0, R_0, R_0
 | 
					 | 
				
			||||||
	VSLDB $8, R_1, R_1, R_1
 | 
					 | 
				
			||||||
	VSLDB $8, R_2, R_2, R_2
 | 
					 | 
				
			||||||
	VSLDB $8, R5_1, R5_1, R5_1
 | 
					 | 
				
			||||||
	VSLDB $8, R5_2, R5_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_0, R_0
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_1, R_1
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_2, R_2
 | 
					 | 
				
			||||||
	VLVGG $1, R5SAVE_1, R5_1
 | 
					 | 
				
			||||||
	VLVGG $1, R5SAVE_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// setup [h0, h1]
 | 
					 | 
				
			||||||
	VSLDB $8, H0_0, H0_0, H0_0
 | 
					 | 
				
			||||||
	VSLDB $8, H1_0, H1_0, H1_0
 | 
					 | 
				
			||||||
	VSLDB $8, H2_0, H2_0, H2_0
 | 
					 | 
				
			||||||
	VO    H0_1, H0_0, H0_0
 | 
					 | 
				
			||||||
	VO    H1_1, H1_0, H1_0
 | 
					 | 
				
			||||||
	VO    H2_1, H2_0, H2_0
 | 
					 | 
				
			||||||
	VZERO H0_1
 | 
					 | 
				
			||||||
	VZERO H1_1
 | 
					 | 
				
			||||||
	VZERO H2_1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VZERO M0
 | 
					 | 
				
			||||||
	VZERO M1
 | 
					 | 
				
			||||||
	VZERO M2
 | 
					 | 
				
			||||||
	VZERO M3
 | 
					 | 
				
			||||||
	VZERO M4
 | 
					 | 
				
			||||||
	VZERO M5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// H*[r**2, r]
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, H0_1, H1_1, T_10, M5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	SUB    $33, R3
 | 
					 | 
				
			||||||
	VLM    (R2), M0, M1
 | 
					 | 
				
			||||||
	VLL    R3, 32(R2), M2
 | 
					 | 
				
			||||||
	ADD    $1, R3
 | 
					 | 
				
			||||||
	MOVBZ  $1, R0
 | 
					 | 
				
			||||||
	CMPBEQ R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLVGB  R3, R0, M2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// H += m0
 | 
					 | 
				
			||||||
	VZERO T_1
 | 
					 | 
				
			||||||
	VZERO T_2
 | 
					 | 
				
			||||||
	VZERO T_3
 | 
					 | 
				
			||||||
	EXPACC2(M0, T_1, T_2, T_3, T_4, T_5, T_6)
 | 
					 | 
				
			||||||
	VLEIB $10, $1, T_3
 | 
					 | 
				
			||||||
	VAG   H0_0, T_1, H0_0
 | 
					 | 
				
			||||||
	VAG   H1_0, T_2, H1_0
 | 
					 | 
				
			||||||
	VAG   H2_0, T_3, H2_0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VZERO M0
 | 
					 | 
				
			||||||
	VZERO M3
 | 
					 | 
				
			||||||
	VZERO M4
 | 
					 | 
				
			||||||
	VZERO M5
 | 
					 | 
				
			||||||
	VZERO T_10
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// (H+m0)*r
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M3, M4, M5, V0, T_10, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE2(H0_0, H1_0, H2_0, M0, M3, M4, M5, T_10, H0_1, H1_1, H2_1, T_9)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// H += m1
 | 
					 | 
				
			||||||
	VZERO V0
 | 
					 | 
				
			||||||
	VZERO T_1
 | 
					 | 
				
			||||||
	VZERO T_2
 | 
					 | 
				
			||||||
	VZERO T_3
 | 
					 | 
				
			||||||
	EXPACC2(M1, T_1, T_2, T_3, T_4, T_5, T_6)
 | 
					 | 
				
			||||||
	VLEIB $10, $1, T_3
 | 
					 | 
				
			||||||
	VAQ   H0_0, T_1, H0_0
 | 
					 | 
				
			||||||
	VAQ   H1_0, T_2, H1_0
 | 
					 | 
				
			||||||
	VAQ   H2_0, T_3, H2_0
 | 
					 | 
				
			||||||
	REDUCE2(H0_0, H1_0, H2_0, M0, M3, M4, M5, T_9, H0_1, H1_1, H2_1, T_10)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// [H, m2] * [r**2, r]
 | 
					 | 
				
			||||||
	EXPACC2(M2, H0_0, H1_0, H2_0, T_1, T_2, T_3)
 | 
					 | 
				
			||||||
	CMPBNE R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, H2_0
 | 
					 | 
				
			||||||
	VZERO  M0
 | 
					 | 
				
			||||||
	VZERO  M1
 | 
					 | 
				
			||||||
	VZERO  M2
 | 
					 | 
				
			||||||
	VZERO  M3
 | 
					 | 
				
			||||||
	VZERO  M4
 | 
					 | 
				
			||||||
	VZERO  M5
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, H0_1, H1_1, M5, T_10)
 | 
					 | 
				
			||||||
	SUB    $16, R3
 | 
					 | 
				
			||||||
	CMPBLE R3, $0, next   // this condition must always hold true!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
b2:
 | 
					 | 
				
			||||||
	CMPBLE R3, $16, b1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// 2 blocks remaining
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// setup [r²,r]
 | 
					 | 
				
			||||||
	VSLDB $8, R_0, R_0, R_0
 | 
					 | 
				
			||||||
	VSLDB $8, R_1, R_1, R_1
 | 
					 | 
				
			||||||
	VSLDB $8, R_2, R_2, R_2
 | 
					 | 
				
			||||||
	VSLDB $8, R5_1, R5_1, R5_1
 | 
					 | 
				
			||||||
	VSLDB $8, R5_2, R5_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_0, R_0
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_1, R_1
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_2, R_2
 | 
					 | 
				
			||||||
	VLVGG $1, R5SAVE_1, R5_1
 | 
					 | 
				
			||||||
	VLVGG $1, R5SAVE_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// setup [h0, h1]
 | 
					 | 
				
			||||||
	VSLDB $8, H0_0, H0_0, H0_0
 | 
					 | 
				
			||||||
	VSLDB $8, H1_0, H1_0, H1_0
 | 
					 | 
				
			||||||
	VSLDB $8, H2_0, H2_0, H2_0
 | 
					 | 
				
			||||||
	VO    H0_1, H0_0, H0_0
 | 
					 | 
				
			||||||
	VO    H1_1, H1_0, H1_0
 | 
					 | 
				
			||||||
	VO    H2_1, H2_0, H2_0
 | 
					 | 
				
			||||||
	VZERO H0_1
 | 
					 | 
				
			||||||
	VZERO H1_1
 | 
					 | 
				
			||||||
	VZERO H2_1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VZERO M0
 | 
					 | 
				
			||||||
	VZERO M1
 | 
					 | 
				
			||||||
	VZERO M2
 | 
					 | 
				
			||||||
	VZERO M3
 | 
					 | 
				
			||||||
	VZERO M4
 | 
					 | 
				
			||||||
	VZERO M5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// H*[r**2, r]
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M2, M3, M4, T_4, T_5, T_2, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	VMRHG V0, H0_1, H0_0
 | 
					 | 
				
			||||||
	VMRHG V0, H1_1, H1_0
 | 
					 | 
				
			||||||
	VMRHG V0, H2_1, H2_0
 | 
					 | 
				
			||||||
	VMRLG V0, H0_1, H0_1
 | 
					 | 
				
			||||||
	VMRLG V0, H1_1, H1_1
 | 
					 | 
				
			||||||
	VMRLG V0, H2_1, H2_1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// move h to the left and 0s at the right
 | 
					 | 
				
			||||||
	VSLDB $8, H0_0, H0_0, H0_0
 | 
					 | 
				
			||||||
	VSLDB $8, H1_0, H1_0, H1_0
 | 
					 | 
				
			||||||
	VSLDB $8, H2_0, H2_0, H2_0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// get message blocks and append 1 to start
 | 
					 | 
				
			||||||
	SUB    $17, R3
 | 
					 | 
				
			||||||
	VL     (R2), M0
 | 
					 | 
				
			||||||
	VLL    R3, 16(R2), M1
 | 
					 | 
				
			||||||
	ADD    $1, R3
 | 
					 | 
				
			||||||
	MOVBZ  $1, R0
 | 
					 | 
				
			||||||
	CMPBEQ R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLVGB  R3, R0, M1
 | 
					 | 
				
			||||||
	VZERO  T_6
 | 
					 | 
				
			||||||
	VZERO  T_7
 | 
					 | 
				
			||||||
	VZERO  T_8
 | 
					 | 
				
			||||||
	EXPACC2(M0, T_6, T_7, T_8, T_1, T_2, T_3)
 | 
					 | 
				
			||||||
	EXPACC2(M1, T_6, T_7, T_8, T_1, T_2, T_3)
 | 
					 | 
				
			||||||
	VLEIB  $2, $1, T_8
 | 
					 | 
				
			||||||
	CMPBNE R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, T_8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// add [m0, m1] to h
 | 
					 | 
				
			||||||
	VAG H0_0, T_6, H0_0
 | 
					 | 
				
			||||||
	VAG H1_0, T_7, H1_0
 | 
					 | 
				
			||||||
	VAG H2_0, T_8, H2_0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VZERO M2
 | 
					 | 
				
			||||||
	VZERO M3
 | 
					 | 
				
			||||||
	VZERO M4
 | 
					 | 
				
			||||||
	VZERO M5
 | 
					 | 
				
			||||||
	VZERO T_10
 | 
					 | 
				
			||||||
	VZERO M0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// at this point R_0 .. R5_2 look like [r**2, r]
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M2, M3, M4, M5, T_10, M0, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE2(H0_0, H1_0, H2_0, M2, M3, M4, M5, T_9, H0_1, H1_1, H2_1, T_10)
 | 
					 | 
				
			||||||
	SUB    $16, R3, R3
 | 
					 | 
				
			||||||
	CMPBLE R3, $0, next
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
b1:
 | 
					 | 
				
			||||||
	CMPBLE R3, $0, next
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// 1 block remaining
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// setup [r²,r]
 | 
					 | 
				
			||||||
	VSLDB $8, R_0, R_0, R_0
 | 
					 | 
				
			||||||
	VSLDB $8, R_1, R_1, R_1
 | 
					 | 
				
			||||||
	VSLDB $8, R_2, R_2, R_2
 | 
					 | 
				
			||||||
	VSLDB $8, R5_1, R5_1, R5_1
 | 
					 | 
				
			||||||
	VSLDB $8, R5_2, R5_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_0, R_0
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_1, R_1
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_2, R_2
 | 
					 | 
				
			||||||
	VLVGG $1, R5SAVE_1, R5_1
 | 
					 | 
				
			||||||
	VLVGG $1, R5SAVE_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// setup [h0, h1]
 | 
					 | 
				
			||||||
	VSLDB $8, H0_0, H0_0, H0_0
 | 
					 | 
				
			||||||
	VSLDB $8, H1_0, H1_0, H1_0
 | 
					 | 
				
			||||||
	VSLDB $8, H2_0, H2_0, H2_0
 | 
					 | 
				
			||||||
	VO    H0_1, H0_0, H0_0
 | 
					 | 
				
			||||||
	VO    H1_1, H1_0, H1_0
 | 
					 | 
				
			||||||
	VO    H2_1, H2_0, H2_0
 | 
					 | 
				
			||||||
	VZERO H0_1
 | 
					 | 
				
			||||||
	VZERO H1_1
 | 
					 | 
				
			||||||
	VZERO H2_1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VZERO M0
 | 
					 | 
				
			||||||
	VZERO M1
 | 
					 | 
				
			||||||
	VZERO M2
 | 
					 | 
				
			||||||
	VZERO M3
 | 
					 | 
				
			||||||
	VZERO M4
 | 
					 | 
				
			||||||
	VZERO M5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// H*[r**2, r]
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, T_9, T_10, H0_1, M5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// set up [0, m0] limbs
 | 
					 | 
				
			||||||
	SUB    $1, R3
 | 
					 | 
				
			||||||
	VLL    R3, (R2), M0
 | 
					 | 
				
			||||||
	ADD    $1, R3
 | 
					 | 
				
			||||||
	MOVBZ  $1, R0
 | 
					 | 
				
			||||||
	CMPBEQ R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLVGB  R3, R0, M0
 | 
					 | 
				
			||||||
	VZERO  T_1
 | 
					 | 
				
			||||||
	VZERO  T_2
 | 
					 | 
				
			||||||
	VZERO  T_3
 | 
					 | 
				
			||||||
	EXPACC2(M0, T_1, T_2, T_3, T_4, T_5, T_6)// limbs: [0, m]
 | 
					 | 
				
			||||||
	CMPBNE R3, $16, 2(PC)
 | 
					 | 
				
			||||||
	VLEIB  $10, $1, T_3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// h+m0
 | 
					 | 
				
			||||||
	VAQ H0_0, T_1, H0_0
 | 
					 | 
				
			||||||
	VAQ H1_0, T_2, H1_0
 | 
					 | 
				
			||||||
	VAQ H2_0, T_3, H2_0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VZERO M0
 | 
					 | 
				
			||||||
	VZERO M1
 | 
					 | 
				
			||||||
	VZERO M2
 | 
					 | 
				
			||||||
	VZERO M3
 | 
					 | 
				
			||||||
	VZERO M4
 | 
					 | 
				
			||||||
	VZERO M5
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, T_9, T_10, H0_1, M5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	BR next
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
square:
 | 
					 | 
				
			||||||
	// setup [r²,r]
 | 
					 | 
				
			||||||
	VSLDB $8, R_0, R_0, R_0
 | 
					 | 
				
			||||||
	VSLDB $8, R_1, R_1, R_1
 | 
					 | 
				
			||||||
	VSLDB $8, R_2, R_2, R_2
 | 
					 | 
				
			||||||
	VSLDB $8, R5_1, R5_1, R5_1
 | 
					 | 
				
			||||||
	VSLDB $8, R5_2, R5_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_0, R_0
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_1, R_1
 | 
					 | 
				
			||||||
	VLVGG $1, RSAVE_2, R_2
 | 
					 | 
				
			||||||
	VLVGG $1, R5SAVE_1, R5_1
 | 
					 | 
				
			||||||
	VLVGG $1, R5SAVE_2, R5_2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// setup [h0, h1]
 | 
					 | 
				
			||||||
	VSLDB $8, H0_0, H0_0, H0_0
 | 
					 | 
				
			||||||
	VSLDB $8, H1_0, H1_0, H1_0
 | 
					 | 
				
			||||||
	VSLDB $8, H2_0, H2_0, H2_0
 | 
					 | 
				
			||||||
	VO    H0_1, H0_0, H0_0
 | 
					 | 
				
			||||||
	VO    H1_1, H1_0, H1_0
 | 
					 | 
				
			||||||
	VO    H2_1, H2_0, H2_0
 | 
					 | 
				
			||||||
	VZERO H0_1
 | 
					 | 
				
			||||||
	VZERO H1_1
 | 
					 | 
				
			||||||
	VZERO H2_1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	VZERO M0
 | 
					 | 
				
			||||||
	VZERO M1
 | 
					 | 
				
			||||||
	VZERO M2
 | 
					 | 
				
			||||||
	VZERO M3
 | 
					 | 
				
			||||||
	VZERO M4
 | 
					 | 
				
			||||||
	VZERO M5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// (h0*r**2) + (h1*r)
 | 
					 | 
				
			||||||
	MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
 | 
					 | 
				
			||||||
	REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, T_9, T_10, H0_1, M5)
 | 
					 | 
				
			||||||
	BR next
 | 
					 | 
				
			||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/crypto/ssh/certs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/crypto/ssh/certs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -414,8 +414,8 @@ func (c *CertChecker) CheckCert(principal string, cert *Certificate) error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SignCert sets c.SignatureKey to the authority's public key and stores a
 | 
					// SignCert signs the certificate with an authority, setting the Nonce,
 | 
				
			||||||
// Signature, by authority, in the certificate.
 | 
					// SignatureKey, and Signature fields.
 | 
				
			||||||
func (c *Certificate) SignCert(rand io.Reader, authority Signer) error {
 | 
					func (c *Certificate) SignCert(rand io.Reader, authority Signer) error {
 | 
				
			||||||
	c.Nonce = make([]byte, 32)
 | 
						c.Nonce = make([]byte, 32)
 | 
				
			||||||
	if _, err := io.ReadFull(rand, c.Nonce); err != nil {
 | 
						if _, err := io.ReadFull(rand, c.Nonce); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/crypto/ssh/cipher.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/crypto/ssh/cipher.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -119,7 +119,7 @@ var cipherModes = map[string]*cipherMode{
 | 
				
			|||||||
	chacha20Poly1305ID: {64, 0, newChaCha20Cipher},
 | 
						chacha20Poly1305ID: {64, 0, newChaCha20Cipher},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// CBC mode is insecure and so is not included in the default config.
 | 
						// CBC mode is insecure and so is not included in the default config.
 | 
				
			||||||
	// (See http://www.isg.rhul.ac.uk/~kp/SandPfinal.pdf). If absolutely
 | 
						// (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.
 | 
						// needed, it's possible to specify a custom Config to enable it.
 | 
				
			||||||
	// You should expect that an active attacker can recover plaintext if
 | 
						// You should expect that an active attacker can recover plaintext if
 | 
				
			||||||
	// you do.
 | 
						// you do.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								vendor/golang.org/x/crypto/ssh/client_auth.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/golang.org/x/crypto/ssh/client_auth.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -36,7 +36,7 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// during the authentication phase the client first attempts the "none" method
 | 
						// during the authentication phase the client first attempts the "none" method
 | 
				
			||||||
	// then any untried methods suggested by the server.
 | 
						// then any untried methods suggested by the server.
 | 
				
			||||||
	tried := make(map[string]bool)
 | 
						var tried []string
 | 
				
			||||||
	var lastMethods []string
 | 
						var lastMethods []string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sessionID := c.transport.getSessionID()
 | 
						sessionID := c.transport.getSessionID()
 | 
				
			||||||
@@ -49,7 +49,9 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error {
 | 
				
			|||||||
			// success
 | 
								// success
 | 
				
			||||||
			return nil
 | 
								return nil
 | 
				
			||||||
		} else if ok == authFailure {
 | 
							} else if ok == authFailure {
 | 
				
			||||||
			tried[auth.method()] = true
 | 
								if m := auth.method(); !contains(tried, m) {
 | 
				
			||||||
 | 
									tried = append(tried, m)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if methods == nil {
 | 
							if methods == nil {
 | 
				
			||||||
			methods = lastMethods
 | 
								methods = lastMethods
 | 
				
			||||||
@@ -61,7 +63,7 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error {
 | 
				
			|||||||
	findNext:
 | 
						findNext:
 | 
				
			||||||
		for _, a := range config.Auth {
 | 
							for _, a := range config.Auth {
 | 
				
			||||||
			candidateMethod := a.method()
 | 
								candidateMethod := a.method()
 | 
				
			||||||
			if tried[candidateMethod] {
 | 
								if contains(tried, candidateMethod) {
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			for _, meth := range methods {
 | 
								for _, meth := range methods {
 | 
				
			||||||
@@ -72,16 +74,16 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", keys(tried))
 | 
						return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", tried)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func keys(m map[string]bool) []string {
 | 
					func contains(list []string, e string) bool {
 | 
				
			||||||
	s := make([]string, 0, len(m))
 | 
						for _, s := range list {
 | 
				
			||||||
 | 
							if s == e {
 | 
				
			||||||
	for key := range m {
 | 
								return true
 | 
				
			||||||
		s = append(s, key)
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	return s
 | 
						}
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// An AuthMethod represents an instance of an RFC 4252 authentication method.
 | 
					// An AuthMethod represents an instance of an RFC 4252 authentication method.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/crypto/ssh/kex.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/crypto/ssh/kex.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -572,7 +572,7 @@ func (gex *dhGEXSHA) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, e
 | 
				
			|||||||
	return new(big.Int).Exp(theirPublic, myPrivate, gex.p), nil
 | 
						return new(big.Int).Exp(theirPublic, myPrivate, gex.p), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (gex *dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) {
 | 
					func (gex dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) {
 | 
				
			||||||
	// Send GexRequest
 | 
						// Send GexRequest
 | 
				
			||||||
	kexDHGexRequest := kexDHGexRequestMsg{
 | 
						kexDHGexRequest := kexDHGexRequestMsg{
 | 
				
			||||||
		MinBits:      dhGroupExchangeMinimumBits,
 | 
							MinBits:      dhGroupExchangeMinimumBits,
 | 
				
			||||||
@@ -677,7 +677,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.
 | 
					// Server half implementation of the Diffie Hellman Key Exchange with SHA1 and SHA256.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// This is a minimal implementation to satisfy the automated tests.
 | 
					// This is a minimal implementation to satisfy the automated tests.
 | 
				
			||||||
func (gex *dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {
 | 
					func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {
 | 
				
			||||||
	// Receive GexRequest
 | 
						// Receive GexRequest
 | 
				
			||||||
	packet, err := c.readPacket()
 | 
						packet, err := c.readPacket()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								vendor/golang.org/x/crypto/ssh/keys.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/golang.org/x/crypto/ssh/keys.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1246,15 +1246,23 @@ func passphraseProtectedOpenSSHKey(passphrase []byte) openSSHDecryptFunc {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		key, iv := k[:32], k[32:]
 | 
							key, iv := k[:32], k[32:]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if cipherName != "aes256-ctr" {
 | 
					 | 
				
			||||||
			return nil, fmt.Errorf("ssh: unknown cipher %q, only supports %q", cipherName, "aes256-ctr")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		c, err := aes.NewCipher(key)
 | 
							c, err := aes.NewCipher(key)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							switch cipherName {
 | 
				
			||||||
 | 
							case "aes256-ctr":
 | 
				
			||||||
			ctr := cipher.NewCTR(c, iv)
 | 
								ctr := cipher.NewCTR(c, iv)
 | 
				
			||||||
			ctr.XORKeyStream(privKeyBlock, privKeyBlock)
 | 
								ctr.XORKeyStream(privKeyBlock, privKeyBlock)
 | 
				
			||||||
 | 
							case "aes256-cbc":
 | 
				
			||||||
 | 
								if len(privKeyBlock)%c.BlockSize() != 0 {
 | 
				
			||||||
 | 
									return nil, fmt.Errorf("ssh: invalid encrypted private key length, not a multiple of the block size")
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								cbc := cipher.NewCBCDecrypter(c, iv)
 | 
				
			||||||
 | 
								cbc.CryptBlocks(privKeyBlock, privKeyBlock)
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								return nil, fmt.Errorf("ssh: unknown cipher %q, only supports %q or %q", cipherName, "aes256-ctr", "aes256-cbc")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return privKeyBlock, nil
 | 
							return privKeyBlock, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								vendor/golang.org/x/crypto/ssh/mux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								vendor/golang.org/x/crypto/ssh/mux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -240,7 +240,7 @@ func (m *mux) onePacket() error {
 | 
				
			|||||||
	id := binary.BigEndian.Uint32(packet[1:])
 | 
						id := binary.BigEndian.Uint32(packet[1:])
 | 
				
			||||||
	ch := m.chanList.getChan(id)
 | 
						ch := m.chanList.getChan(id)
 | 
				
			||||||
	if ch == nil {
 | 
						if ch == nil {
 | 
				
			||||||
		return fmt.Errorf("ssh: invalid channel %d", id)
 | 
							return m.handleUnknownChannelPacket(id, packet)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ch.handlePacket(packet)
 | 
						return ch.handlePacket(packet)
 | 
				
			||||||
@@ -328,3 +328,24 @@ func (m *mux) openChannel(chanType string, extra []byte) (*channel, error) {
 | 
				
			|||||||
		return nil, fmt.Errorf("ssh: unexpected packet in response to channel open: %T", msg)
 | 
							return nil, fmt.Errorf("ssh: unexpected packet in response to channel open: %T", msg)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *mux) handleUnknownChannelPacket(id uint32, packet []byte) error {
 | 
				
			||||||
 | 
						msg, err := decode(packet)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch msg := msg.(type) {
 | 
				
			||||||
 | 
						// RFC 4254 section 5.4 says unrecognized channel requests should
 | 
				
			||||||
 | 
						// receive a failure response.
 | 
				
			||||||
 | 
						case *channelRequestMsg:
 | 
				
			||||||
 | 
							if msg.WantReply {
 | 
				
			||||||
 | 
								return m.sendMessage(channelRequestFailureMsg{
 | 
				
			||||||
 | 
									PeersID: msg.PeersID,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return fmt.Errorf("ssh: invalid channel %d", id)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								vendor/golang.org/x/crypto/ssh/terminal/terminal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/golang.org/x/crypto/ssh/terminal/terminal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -113,6 +113,7 @@ func NewTerminal(c io.ReadWriter, prompt string) *Terminal {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
 | 
						keyCtrlC     = 3
 | 
				
			||||||
	keyCtrlD     = 4
 | 
						keyCtrlD     = 4
 | 
				
			||||||
	keyCtrlU     = 21
 | 
						keyCtrlU     = 21
 | 
				
			||||||
	keyEnter     = '\r'
 | 
						keyEnter     = '\r'
 | 
				
			||||||
@@ -151,8 +152,12 @@ func bytesToKey(b []byte, pasteActive bool) (rune, []byte) {
 | 
				
			|||||||
		switch b[0] {
 | 
							switch b[0] {
 | 
				
			||||||
		case 1: // ^A
 | 
							case 1: // ^A
 | 
				
			||||||
			return keyHome, b[1:]
 | 
								return keyHome, b[1:]
 | 
				
			||||||
 | 
							case 2: // ^B
 | 
				
			||||||
 | 
								return keyLeft, b[1:]
 | 
				
			||||||
		case 5: // ^E
 | 
							case 5: // ^E
 | 
				
			||||||
			return keyEnd, b[1:]
 | 
								return keyEnd, b[1:]
 | 
				
			||||||
 | 
							case 6: // ^F
 | 
				
			||||||
 | 
								return keyRight, b[1:]
 | 
				
			||||||
		case 8: // ^H
 | 
							case 8: // ^H
 | 
				
			||||||
			return keyBackspace, b[1:]
 | 
								return keyBackspace, b[1:]
 | 
				
			||||||
		case 11: // ^K
 | 
							case 11: // ^K
 | 
				
			||||||
@@ -738,6 +743,9 @@ func (t *Terminal) readLine() (line string, err error) {
 | 
				
			|||||||
						return "", io.EOF
 | 
											return "", io.EOF
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									if key == keyCtrlC {
 | 
				
			||||||
 | 
										return "", io.EOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				if key == keyPasteStart {
 | 
									if key == keyPasteStart {
 | 
				
			||||||
					t.pasteActive = true
 | 
										t.pasteActive = true
 | 
				
			||||||
					if len(t.line) == 0 {
 | 
										if len(t.line) == 0 {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								vendor/golang.org/x/mod/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/golang.org/x/mod/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					Copyright (c) 2009 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					modification, are permitted provided that the following conditions are
 | 
				
			||||||
 | 
					met:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   * Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					   * Redistributions in binary form must reproduce the above
 | 
				
			||||||
 | 
					copyright notice, this list of conditions and the following disclaimer
 | 
				
			||||||
 | 
					in the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					distribution.
 | 
				
			||||||
 | 
					   * Neither the name of Google Inc. nor the names of its
 | 
				
			||||||
 | 
					contributors may be used to endorse or promote products derived from
 | 
				
			||||||
 | 
					this software without specific prior written permission.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
				
			||||||
 | 
					"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
				
			||||||
 | 
					LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
				
			||||||
 | 
					A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
				
			||||||
 | 
					OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
				
			||||||
 | 
					LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
				
			||||||
 | 
					DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
				
			||||||
 | 
					THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
				
			||||||
 | 
					(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
				
			||||||
 | 
					OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
							
								
								
									
										22
									
								
								vendor/golang.org/x/mod/PATENTS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/golang.org/x/mod/PATENTS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					Additional IP Rights Grant (Patents)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"This implementation" means the copyrightable works distributed by
 | 
				
			||||||
 | 
					Google as part of the Go project.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Google hereby grants to You a perpetual, worldwide, non-exclusive,
 | 
				
			||||||
 | 
					no-charge, royalty-free, irrevocable (except as stated in this section)
 | 
				
			||||||
 | 
					patent license to make, have made, use, offer to sell, sell, import,
 | 
				
			||||||
 | 
					transfer and otherwise run, modify and propagate the contents of this
 | 
				
			||||||
 | 
					implementation of Go, where such license applies only to those patent
 | 
				
			||||||
 | 
					claims, both currently owned or controlled by Google and acquired in
 | 
				
			||||||
 | 
					the future, licensable by Google that are necessarily infringed by this
 | 
				
			||||||
 | 
					implementation of Go.  This grant does not include claims that would be
 | 
				
			||||||
 | 
					infringed only as a consequence of further modification of this
 | 
				
			||||||
 | 
					implementation.  If you or your agent or exclusive licensee institute or
 | 
				
			||||||
 | 
					order or agree to the institution of patent litigation against any
 | 
				
			||||||
 | 
					entity (including a cross-claim or counterclaim in a lawsuit) alleging
 | 
				
			||||||
 | 
					that this implementation of Go or any code incorporated within this
 | 
				
			||||||
 | 
					implementation of Go constitutes direct or contributory patent
 | 
				
			||||||
 | 
					infringement, or inducement of patent infringement, then any patent
 | 
				
			||||||
 | 
					rights granted to you under this License for this implementation of Go
 | 
				
			||||||
 | 
					shall terminate as of the date such litigation is filed.
 | 
				
			||||||
							
								
								
									
										27
									
								
								vendor/golang.org/x/mod/module/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/golang.org/x/mod/module/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["module.go"],
 | 
				
			||||||
 | 
					    importmap = "k8s.io/kubernetes/vendor/golang.org/x/mod/module",
 | 
				
			||||||
 | 
					    importpath = "golang.org/x/mod/module",
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/mod/semver:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/xerrors:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
@@ -2,8 +2,86 @@
 | 
				
			|||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Package module defines the module.Version type
 | 
					// Package module defines the module.Version type along with support code.
 | 
				
			||||||
// along with support code.
 | 
					//
 | 
				
			||||||
 | 
					// The module.Version type is a simple Path, Version pair:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//	type Version struct {
 | 
				
			||||||
 | 
					//		Path string
 | 
				
			||||||
 | 
					//		Version string
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// There are no restrictions imposed directly by use of this structure,
 | 
				
			||||||
 | 
					// but additional checking functions, most notably Check, verify that
 | 
				
			||||||
 | 
					// a particular path, version pair is valid.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Escaped Paths
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Module paths appear as substrings of file system paths
 | 
				
			||||||
 | 
					// (in the download cache) and of web server URLs in the proxy protocol.
 | 
				
			||||||
 | 
					// In general we cannot rely on file systems to be case-sensitive,
 | 
				
			||||||
 | 
					// nor can we rely on web servers, since they read from file systems.
 | 
				
			||||||
 | 
					// That is, we cannot rely on the file system to keep rsc.io/QUOTE
 | 
				
			||||||
 | 
					// and rsc.io/quote separate. Windows and macOS don't.
 | 
				
			||||||
 | 
					// Instead, we must never require two different casings of a file path.
 | 
				
			||||||
 | 
					// Because we want the download cache to match the proxy protocol,
 | 
				
			||||||
 | 
					// and because we want the proxy protocol to be possible to serve
 | 
				
			||||||
 | 
					// from a tree of static files (which might be stored on a case-insensitive
 | 
				
			||||||
 | 
					// file system), the proxy protocol must never require two different casings
 | 
				
			||||||
 | 
					// of a URL path either.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// One possibility would be to make the escaped form be the lowercase
 | 
				
			||||||
 | 
					// hexadecimal encoding of the actual path bytes. This would avoid ever
 | 
				
			||||||
 | 
					// needing different casings of a file path, but it would be fairly illegible
 | 
				
			||||||
 | 
					// to most programmers when those paths appeared in the file system
 | 
				
			||||||
 | 
					// (including in file paths in compiler errors and stack traces)
 | 
				
			||||||
 | 
					// in web server logs, and so on. Instead, we want a safe escaped form that
 | 
				
			||||||
 | 
					// leaves most paths unaltered.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The safe escaped form is to replace every uppercase letter
 | 
				
			||||||
 | 
					// with an exclamation mark followed by the letter's lowercase equivalent.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// For example,
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//	github.com/Azure/azure-sdk-for-go ->  github.com/!azure/azure-sdk-for-go.
 | 
				
			||||||
 | 
					//	github.com/GoogleCloudPlatform/cloudsql-proxy -> github.com/!google!cloud!platform/cloudsql-proxy
 | 
				
			||||||
 | 
					//	github.com/Sirupsen/logrus -> github.com/!sirupsen/logrus.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Import paths that avoid upper-case letters are left unchanged.
 | 
				
			||||||
 | 
					// Note that because import paths are ASCII-only and avoid various
 | 
				
			||||||
 | 
					// problematic punctuation (like : < and >), the escaped form is also ASCII-only
 | 
				
			||||||
 | 
					// and avoids the same problematic punctuation.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Import paths have never allowed exclamation marks, so there is no
 | 
				
			||||||
 | 
					// need to define how to escape a literal !.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unicode Restrictions
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Today, paths are disallowed from using Unicode.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Although paths are currently disallowed from using Unicode,
 | 
				
			||||||
 | 
					// we would like at some point to allow Unicode letters as well, to assume that
 | 
				
			||||||
 | 
					// file systems and URLs are Unicode-safe (storing UTF-8), and apply
 | 
				
			||||||
 | 
					// the !-for-uppercase convention for escaping them in the file system.
 | 
				
			||||||
 | 
					// But there are at least two subtle considerations.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// First, note that not all case-fold equivalent distinct runes
 | 
				
			||||||
 | 
					// form an upper/lower pair.
 | 
				
			||||||
 | 
					// For example, U+004B ('K'), U+006B ('k'), and U+212A ('K' for Kelvin)
 | 
				
			||||||
 | 
					// are three distinct runes that case-fold to each other.
 | 
				
			||||||
 | 
					// When we do add Unicode letters, we must not assume that upper/lower
 | 
				
			||||||
 | 
					// are the only case-equivalent pairs.
 | 
				
			||||||
 | 
					// Perhaps the Kelvin symbol would be disallowed entirely, for example.
 | 
				
			||||||
 | 
					// Or perhaps it would escape as "!!k", or perhaps as "(212A)".
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Second, it would be nice to allow Unicode marks as well as letters,
 | 
				
			||||||
 | 
					// but marks include combining marks, and then we must deal not
 | 
				
			||||||
 | 
					// only with case folding but also normalization: both U+00E9 ('é')
 | 
				
			||||||
 | 
					// and U+0065 U+0301 ('e' followed by combining acute accent)
 | 
				
			||||||
 | 
					// look the same on the page and are treated by some file systems
 | 
				
			||||||
 | 
					// as the same path. If we do allow Unicode marks in paths, there
 | 
				
			||||||
 | 
					// must be some kind of normalization to allow only one canonical
 | 
				
			||||||
 | 
					// encoding of any character used in an import path.
 | 
				
			||||||
package module
 | 
					package module
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// IMPORTANT NOTE
 | 
					// IMPORTANT NOTE
 | 
				
			||||||
@@ -24,22 +102,95 @@ import (
 | 
				
			|||||||
	"unicode"
 | 
						"unicode"
 | 
				
			||||||
	"unicode/utf8"
 | 
						"unicode/utf8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"golang.org/x/tools/internal/semver"
 | 
						"golang.org/x/mod/semver"
 | 
				
			||||||
 | 
						errors "golang.org/x/xerrors"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// A Version is defined by a module path and version pair.
 | 
					// A Version (for clients, a module.Version) is defined by a module path and version pair.
 | 
				
			||||||
 | 
					// These are stored in their plain (unescaped) form.
 | 
				
			||||||
type Version struct {
 | 
					type Version struct {
 | 
				
			||||||
 | 
						// Path is a module path, like "golang.org/x/text" or "rsc.io/quote/v2".
 | 
				
			||||||
	Path string
 | 
						Path string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Version is usually a semantic version in canonical form.
 | 
						// Version is usually a semantic version in canonical form.
 | 
				
			||||||
	// There are two exceptions to this general rule.
 | 
						// There are three exceptions to this general rule.
 | 
				
			||||||
	// First, the top-level target of a build has no specific version
 | 
						// First, the top-level target of a build has no specific version
 | 
				
			||||||
	// and uses Version = "".
 | 
						// and uses Version = "".
 | 
				
			||||||
	// Second, during MVS calculations the version "none" is used
 | 
						// Second, during MVS calculations the version "none" is used
 | 
				
			||||||
	// to represent the decision to take no version of a given module.
 | 
						// to represent the decision to take no version of a given module.
 | 
				
			||||||
 | 
						// Third, filesystem paths found in "replace" directives are
 | 
				
			||||||
 | 
						// represented by a path with an empty version.
 | 
				
			||||||
	Version string `json:",omitempty"`
 | 
						Version string `json:",omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// String returns a representation of the Version suitable for logging
 | 
				
			||||||
 | 
					// (Path@Version, or just Path if Version is empty).
 | 
				
			||||||
 | 
					func (m Version) String() string {
 | 
				
			||||||
 | 
						if m.Version == "" {
 | 
				
			||||||
 | 
							return m.Path
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return m.Path + "@" + m.Version
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// A ModuleError indicates an error specific to a module.
 | 
				
			||||||
 | 
					type ModuleError struct {
 | 
				
			||||||
 | 
						Path    string
 | 
				
			||||||
 | 
						Version string
 | 
				
			||||||
 | 
						Err     error
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// VersionError returns a ModuleError derived from a Version and error,
 | 
				
			||||||
 | 
					// or err itself if it is already such an error.
 | 
				
			||||||
 | 
					func VersionError(v Version, err error) error {
 | 
				
			||||||
 | 
						var mErr *ModuleError
 | 
				
			||||||
 | 
						if errors.As(err, &mErr) && mErr.Path == v.Path && mErr.Version == v.Version {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &ModuleError{
 | 
				
			||||||
 | 
							Path:    v.Path,
 | 
				
			||||||
 | 
							Version: v.Version,
 | 
				
			||||||
 | 
							Err:     err,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *ModuleError) Error() string {
 | 
				
			||||||
 | 
						if v, ok := e.Err.(*InvalidVersionError); ok {
 | 
				
			||||||
 | 
							return fmt.Sprintf("%s@%s: invalid %s: %v", e.Path, v.Version, v.noun(), v.Err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if e.Version != "" {
 | 
				
			||||||
 | 
							return fmt.Sprintf("%s@%s: %v", e.Path, e.Version, e.Err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return fmt.Sprintf("module %s: %v", e.Path, e.Err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *ModuleError) Unwrap() error { return e.Err }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// An InvalidVersionError indicates an error specific to a version, with the
 | 
				
			||||||
 | 
					// module path unknown or specified externally.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// A ModuleError may wrap an InvalidVersionError, but an InvalidVersionError
 | 
				
			||||||
 | 
					// must not wrap a ModuleError.
 | 
				
			||||||
 | 
					type InvalidVersionError struct {
 | 
				
			||||||
 | 
						Version string
 | 
				
			||||||
 | 
						Pseudo  bool
 | 
				
			||||||
 | 
						Err     error
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// noun returns either "version" or "pseudo-version", depending on whether
 | 
				
			||||||
 | 
					// e.Version is a pseudo-version.
 | 
				
			||||||
 | 
					func (e *InvalidVersionError) noun() string {
 | 
				
			||||||
 | 
						if e.Pseudo {
 | 
				
			||||||
 | 
							return "pseudo-version"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return "version"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *InvalidVersionError) Error() string {
 | 
				
			||||||
 | 
						return fmt.Sprintf("%s %q invalid: %s", e.noun(), e.Version, e.Err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *InvalidVersionError) Unwrap() error { return e.Err }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Check checks that a given module path, version pair is valid.
 | 
					// Check checks that a given module path, version pair is valid.
 | 
				
			||||||
// In addition to the path being a valid module path
 | 
					// In addition to the path being a valid module path
 | 
				
			||||||
// and the version being a valid semantic version,
 | 
					// and the version being a valid semantic version,
 | 
				
			||||||
@@ -51,17 +202,14 @@ func Check(path, version string) error {
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !semver.IsValid(version) {
 | 
						if !semver.IsValid(version) {
 | 
				
			||||||
		return fmt.Errorf("malformed semantic version %v", version)
 | 
							return &ModuleError{
 | 
				
			||||||
 | 
								Path: path,
 | 
				
			||||||
 | 
								Err:  &InvalidVersionError{Version: version, Err: errors.New("not a semantic version")},
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, pathMajor, _ := SplitPathVersion(path)
 | 
						_, pathMajor, _ := SplitPathVersion(path)
 | 
				
			||||||
	if !MatchPathMajor(version, pathMajor) {
 | 
						if err := CheckPathMajor(version, pathMajor); err != nil {
 | 
				
			||||||
		if pathMajor == "" {
 | 
							return &ModuleError{Path: path, Err: err}
 | 
				
			||||||
			pathMajor = "v0 or v1"
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if pathMajor[0] == '.' { // .v1
 | 
					 | 
				
			||||||
			pathMajor = pathMajor[1:]
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return fmt.Errorf("mismatched module path %v and version %v (want %v)", path, version, pathMajor)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -79,7 +227,7 @@ func firstPathOK(r rune) bool {
 | 
				
			|||||||
// Paths can be ASCII letters, ASCII digits, and limited ASCII punctuation: + - . _ and ~.
 | 
					// Paths can be ASCII letters, ASCII digits, and limited ASCII punctuation: + - . _ and ~.
 | 
				
			||||||
// This matches what "go get" has historically recognized in import paths.
 | 
					// This matches what "go get" has historically recognized in import paths.
 | 
				
			||||||
// TODO(rsc): We would like to allow Unicode letters, but that requires additional
 | 
					// TODO(rsc): We would like to allow Unicode letters, but that requires additional
 | 
				
			||||||
// care in the safe encoding (see note below).
 | 
					// care in the safe encoding (see "escaped paths" above).
 | 
				
			||||||
func pathOK(r rune) bool {
 | 
					func pathOK(r rune) bool {
 | 
				
			||||||
	if r < utf8.RuneSelf {
 | 
						if r < utf8.RuneSelf {
 | 
				
			||||||
		return r == '+' || r == '-' || r == '.' || r == '_' || r == '~' ||
 | 
							return r == '+' || r == '-' || r == '.' || r == '_' || r == '~' ||
 | 
				
			||||||
@@ -94,7 +242,7 @@ func pathOK(r rune) bool {
 | 
				
			|||||||
// For now we allow all Unicode letters but otherwise limit to pathOK plus a few more punctuation characters.
 | 
					// For now we allow all Unicode letters but otherwise limit to pathOK plus a few more punctuation characters.
 | 
				
			||||||
// If we expand the set of allowed characters here, we have to
 | 
					// If we expand the set of allowed characters here, we have to
 | 
				
			||||||
// work harder at detecting potential case-folding and normalization collisions.
 | 
					// work harder at detecting potential case-folding and normalization collisions.
 | 
				
			||||||
// See note about "safe encoding" below.
 | 
					// See note about "escaped paths" above.
 | 
				
			||||||
func fileNameOK(r rune) bool {
 | 
					func fileNameOK(r rune) bool {
 | 
				
			||||||
	if r < utf8.RuneSelf {
 | 
						if r < utf8.RuneSelf {
 | 
				
			||||||
		// Entire set of ASCII punctuation, from which we remove characters:
 | 
							// Entire set of ASCII punctuation, from which we remove characters:
 | 
				
			||||||
@@ -120,6 +268,17 @@ func fileNameOK(r rune) bool {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CheckPath checks that a module path is valid.
 | 
					// CheckPath checks that a module path is valid.
 | 
				
			||||||
 | 
					// A valid module path is a valid import path, as checked by CheckImportPath,
 | 
				
			||||||
 | 
					// with two additional constraints.
 | 
				
			||||||
 | 
					// First, the leading path element (up to the first slash, if any),
 | 
				
			||||||
 | 
					// by convention a domain name, must contain only lower-case ASCII letters,
 | 
				
			||||||
 | 
					// ASCII digits, dots (U+002E), and dashes (U+002D);
 | 
				
			||||||
 | 
					// it must contain at least one dot and cannot start with a dash.
 | 
				
			||||||
 | 
					// Second, for a final path element of the form /vN, where N looks numeric
 | 
				
			||||||
 | 
					// (ASCII digits and dots) must not begin with a leading zero, must not be /v1,
 | 
				
			||||||
 | 
					// and must not contain any dots. For paths beginning with "gopkg.in/",
 | 
				
			||||||
 | 
					// this second requirement is replaced by a requirement that the path
 | 
				
			||||||
 | 
					// follow the gopkg.in server's conventions.
 | 
				
			||||||
func CheckPath(path string) error {
 | 
					func CheckPath(path string) error {
 | 
				
			||||||
	if err := checkPath(path, false); err != nil {
 | 
						if err := checkPath(path, false); err != nil {
 | 
				
			||||||
		return fmt.Errorf("malformed module path %q: %v", path, err)
 | 
							return fmt.Errorf("malformed module path %q: %v", path, err)
 | 
				
			||||||
@@ -149,6 +308,20 @@ func CheckPath(path string) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CheckImportPath checks that an import path is valid.
 | 
					// CheckImportPath checks that an import path is valid.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// A valid import path consists of one or more valid path elements
 | 
				
			||||||
 | 
					// separated by slashes (U+002F). (It must not begin with nor end in a slash.)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// A valid path element is a non-empty string made up of
 | 
				
			||||||
 | 
					// ASCII letters, ASCII digits, and limited ASCII punctuation: + - . _ and ~.
 | 
				
			||||||
 | 
					// It must not begin or end with a dot (U+002E), nor contain two dots in a row.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The element prefix up to the first dot must not be a reserved file name
 | 
				
			||||||
 | 
					// on Windows, regardless of case (CON, com1, NuL, and so on).
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// CheckImportPath may be less restrictive in the future, but see the
 | 
				
			||||||
 | 
					// top-level package documentation for additional information about
 | 
				
			||||||
 | 
					// subtleties of Unicode.
 | 
				
			||||||
func CheckImportPath(path string) error {
 | 
					func CheckImportPath(path string) error {
 | 
				
			||||||
	if err := checkPath(path, false); err != nil {
 | 
						if err := checkPath(path, false); err != nil {
 | 
				
			||||||
		return fmt.Errorf("malformed import path %q: %v", path, err)
 | 
							return fmt.Errorf("malformed import path %q: %v", path, err)
 | 
				
			||||||
@@ -169,8 +342,8 @@ func checkPath(path string, fileName bool) error {
 | 
				
			|||||||
	if path == "" {
 | 
						if path == "" {
 | 
				
			||||||
		return fmt.Errorf("empty string")
 | 
							return fmt.Errorf("empty string")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if strings.Contains(path, "..") {
 | 
						if path[0] == '-' {
 | 
				
			||||||
		return fmt.Errorf("double dot")
 | 
							return fmt.Errorf("leading dash")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if strings.Contains(path, "//") {
 | 
						if strings.Contains(path, "//") {
 | 
				
			||||||
		return fmt.Errorf("double slash")
 | 
							return fmt.Errorf("double slash")
 | 
				
			||||||
@@ -226,13 +399,24 @@ func checkElem(elem string, fileName bool) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	for _, bad := range badWindowsNames {
 | 
						for _, bad := range badWindowsNames {
 | 
				
			||||||
		if strings.EqualFold(bad, short) {
 | 
							if strings.EqualFold(bad, short) {
 | 
				
			||||||
			return fmt.Errorf("disallowed path element %q", elem)
 | 
								return fmt.Errorf("%q disallowed as path element component on Windows", short)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CheckFilePath checks whether a slash-separated file path is valid.
 | 
					// CheckFilePath checks that a slash-separated file path is valid.
 | 
				
			||||||
 | 
					// The definition of a valid file path is the same as the definition
 | 
				
			||||||
 | 
					// of a valid import path except that the set of allowed characters is larger:
 | 
				
			||||||
 | 
					// all Unicode letters, ASCII digits, the ASCII space character (U+0020),
 | 
				
			||||||
 | 
					// and the ASCII punctuation characters
 | 
				
			||||||
 | 
					// “!#$%&()+,-.=@[]^_{}~”.
 | 
				
			||||||
 | 
					// (The excluded punctuation characters, " * < > ? ` ' | / \ and :,
 | 
				
			||||||
 | 
					// have special meanings in certain shells or operating systems.)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// CheckFilePath may be less restrictive in the future, but see the
 | 
				
			||||||
 | 
					// top-level package documentation for additional information about
 | 
				
			||||||
 | 
					// subtleties of Unicode.
 | 
				
			||||||
func CheckFilePath(path string) error {
 | 
					func CheckFilePath(path string) error {
 | 
				
			||||||
	if err := checkPath(path, true); err != nil {
 | 
						if err := checkPath(path, true); err != nil {
 | 
				
			||||||
		return fmt.Errorf("malformed file path %q: %v", path, err)
 | 
							return fmt.Errorf("malformed file path %q: %v", path, err)
 | 
				
			||||||
@@ -271,6 +455,9 @@ var badWindowsNames = []string{
 | 
				
			|||||||
// and version is either empty or "/vN" for N >= 2.
 | 
					// and version is either empty or "/vN" for N >= 2.
 | 
				
			||||||
// As a special case, gopkg.in paths are recognized directly;
 | 
					// As a special case, gopkg.in paths are recognized directly;
 | 
				
			||||||
// they require ".vN" instead of "/vN", and for all N, not just N >= 2.
 | 
					// they require ".vN" instead of "/vN", and for all N, not just N >= 2.
 | 
				
			||||||
 | 
					// SplitPathVersion returns with ok = false when presented with
 | 
				
			||||||
 | 
					// a path whose last path element does not satisfy the constraints
 | 
				
			||||||
 | 
					// applied by CheckPath, such as "example.com/pkg/v1" or "example.com/pkg/v1.2".
 | 
				
			||||||
func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) {
 | 
					func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) {
 | 
				
			||||||
	if strings.HasPrefix(path, "gopkg.in/") {
 | 
						if strings.HasPrefix(path, "gopkg.in/") {
 | 
				
			||||||
		return splitGopkgIn(path)
 | 
							return splitGopkgIn(path)
 | 
				
			||||||
@@ -319,20 +506,65 @@ func splitGopkgIn(path string) (prefix, pathMajor string, ok bool) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// MatchPathMajor reports whether the semantic version v
 | 
					// MatchPathMajor reports whether the semantic version v
 | 
				
			||||||
// matches the path major version pathMajor.
 | 
					// matches the path major version pathMajor.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// MatchPathMajor returns true if and only if CheckPathMajor returns nil.
 | 
				
			||||||
func MatchPathMajor(v, pathMajor string) bool {
 | 
					func MatchPathMajor(v, pathMajor string) bool {
 | 
				
			||||||
 | 
						return CheckPathMajor(v, pathMajor) == nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// CheckPathMajor returns a non-nil error if the semantic version v
 | 
				
			||||||
 | 
					// does not match the path major version pathMajor.
 | 
				
			||||||
 | 
					func CheckPathMajor(v, pathMajor string) error {
 | 
				
			||||||
 | 
						// TODO(jayconrod): return errors or panic for invalid inputs. This function
 | 
				
			||||||
 | 
						// (and others) was covered by integration tests for cmd/go, and surrounding
 | 
				
			||||||
 | 
						// code protected against invalid inputs like non-canonical versions.
 | 
				
			||||||
	if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") {
 | 
						if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") {
 | 
				
			||||||
		pathMajor = strings.TrimSuffix(pathMajor, "-unstable")
 | 
							pathMajor = strings.TrimSuffix(pathMajor, "-unstable")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if strings.HasPrefix(v, "v0.0.0-") && pathMajor == ".v1" {
 | 
						if strings.HasPrefix(v, "v0.0.0-") && pathMajor == ".v1" {
 | 
				
			||||||
		// Allow old bug in pseudo-versions that generated v0.0.0- pseudoversion for gopkg .v1.
 | 
							// Allow old bug in pseudo-versions that generated v0.0.0- pseudoversion for gopkg .v1.
 | 
				
			||||||
		// For example, gopkg.in/yaml.v2@v2.2.1's go.mod requires gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405.
 | 
							// For example, gopkg.in/yaml.v2@v2.2.1's go.mod requires gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405.
 | 
				
			||||||
		return true
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	m := semver.Major(v)
 | 
						m := semver.Major(v)
 | 
				
			||||||
	if pathMajor == "" {
 | 
						if pathMajor == "" {
 | 
				
			||||||
		return m == "v0" || m == "v1" || semver.Build(v) == "+incompatible"
 | 
							if m == "v0" || m == "v1" || semver.Build(v) == "+incompatible" {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	return (pathMajor[0] == '/' || pathMajor[0] == '.') && m == pathMajor[1:]
 | 
							pathMajor = "v0 or v1"
 | 
				
			||||||
 | 
						} else if pathMajor[0] == '/' || pathMajor[0] == '.' {
 | 
				
			||||||
 | 
							if m == pathMajor[1:] {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							pathMajor = pathMajor[1:]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &InvalidVersionError{
 | 
				
			||||||
 | 
							Version: v,
 | 
				
			||||||
 | 
							Err:     fmt.Errorf("should be %s, not %s", pathMajor, semver.Major(v)),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PathMajorPrefix returns the major-version tag prefix implied by pathMajor.
 | 
				
			||||||
 | 
					// An empty PathMajorPrefix allows either v0 or v1.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Note that MatchPathMajor may accept some versions that do not actually begin
 | 
				
			||||||
 | 
					// with this prefix: namely, it accepts a 'v0.0.0-' prefix for a '.v1'
 | 
				
			||||||
 | 
					// pathMajor, even though that pathMajor implies 'v1' tagging.
 | 
				
			||||||
 | 
					func PathMajorPrefix(pathMajor string) string {
 | 
				
			||||||
 | 
						if pathMajor == "" {
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if pathMajor[0] != '/' && pathMajor[0] != '.' {
 | 
				
			||||||
 | 
							panic("pathMajor suffix " + pathMajor + " passed to PathMajorPrefix lacks separator")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") {
 | 
				
			||||||
 | 
							pathMajor = strings.TrimSuffix(pathMajor, "-unstable")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						m := pathMajor[1:]
 | 
				
			||||||
 | 
						if m != semver.Major(m) {
 | 
				
			||||||
 | 
							panic("pathMajor suffix " + pathMajor + "passed to PathMajorPrefix is not a valid major version")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return m
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CanonicalVersion returns the canonical form of the version string v.
 | 
					// CanonicalVersion returns the canonical form of the version string v.
 | 
				
			||||||
@@ -345,7 +577,10 @@ func CanonicalVersion(v string) string {
 | 
				
			|||||||
	return cv
 | 
						return cv
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Sort sorts the list by Path, breaking ties by comparing Versions.
 | 
					// Sort sorts the list by Path, breaking ties by comparing Version fields.
 | 
				
			||||||
 | 
					// The Version fields are interpreted as semantic versions (using semver.Compare)
 | 
				
			||||||
 | 
					// optionally followed by a tie-breaking suffix introduced by a slash character,
 | 
				
			||||||
 | 
					// like in "v0.0.1/go.mod".
 | 
				
			||||||
func Sort(list []Version) {
 | 
					func Sort(list []Version) {
 | 
				
			||||||
	sort.Slice(list, func(i, j int) bool {
 | 
						sort.Slice(list, func(i, j int) bool {
 | 
				
			||||||
		mi := list[i]
 | 
							mi := list[i]
 | 
				
			||||||
@@ -372,93 +607,36 @@ func Sort(list []Version) {
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Safe encodings
 | 
					// EscapePath returns the escaped form of the given module path.
 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Module paths appear as substrings of file system paths
 | 
					 | 
				
			||||||
// (in the download cache) and of web server URLs in the proxy protocol.
 | 
					 | 
				
			||||||
// In general we cannot rely on file systems to be case-sensitive,
 | 
					 | 
				
			||||||
// nor can we rely on web servers, since they read from file systems.
 | 
					 | 
				
			||||||
// That is, we cannot rely on the file system to keep rsc.io/QUOTE
 | 
					 | 
				
			||||||
// and rsc.io/quote separate. Windows and macOS don't.
 | 
					 | 
				
			||||||
// Instead, we must never require two different casings of a file path.
 | 
					 | 
				
			||||||
// Because we want the download cache to match the proxy protocol,
 | 
					 | 
				
			||||||
// and because we want the proxy protocol to be possible to serve
 | 
					 | 
				
			||||||
// from a tree of static files (which might be stored on a case-insensitive
 | 
					 | 
				
			||||||
// file system), the proxy protocol must never require two different casings
 | 
					 | 
				
			||||||
// of a URL path either.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// One possibility would be to make the safe encoding be the lowercase
 | 
					 | 
				
			||||||
// hexadecimal encoding of the actual path bytes. This would avoid ever
 | 
					 | 
				
			||||||
// needing different casings of a file path, but it would be fairly illegible
 | 
					 | 
				
			||||||
// to most programmers when those paths appeared in the file system
 | 
					 | 
				
			||||||
// (including in file paths in compiler errors and stack traces)
 | 
					 | 
				
			||||||
// in web server logs, and so on. Instead, we want a safe encoding that
 | 
					 | 
				
			||||||
// leaves most paths unaltered.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// The safe encoding is this:
 | 
					 | 
				
			||||||
// replace every uppercase letter with an exclamation mark
 | 
					 | 
				
			||||||
// followed by the letter's lowercase equivalent.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// For example,
 | 
					 | 
				
			||||||
// github.com/Azure/azure-sdk-for-go ->  github.com/!azure/azure-sdk-for-go.
 | 
					 | 
				
			||||||
// github.com/GoogleCloudPlatform/cloudsql-proxy -> github.com/!google!cloud!platform/cloudsql-proxy
 | 
					 | 
				
			||||||
// github.com/Sirupsen/logrus -> github.com/!sirupsen/logrus.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Import paths that avoid upper-case letters are left unchanged.
 | 
					 | 
				
			||||||
// Note that because import paths are ASCII-only and avoid various
 | 
					 | 
				
			||||||
// problematic punctuation (like : < and >), the safe encoding is also ASCII-only
 | 
					 | 
				
			||||||
// and avoids the same problematic punctuation.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Import paths have never allowed exclamation marks, so there is no
 | 
					 | 
				
			||||||
// need to define how to encode a literal !.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Although paths are disallowed from using Unicode (see pathOK above),
 | 
					 | 
				
			||||||
// the eventual plan is to allow Unicode letters as well, to assume that
 | 
					 | 
				
			||||||
// file systems and URLs are Unicode-safe (storing UTF-8), and apply
 | 
					 | 
				
			||||||
// the !-for-uppercase convention. Note however that not all runes that
 | 
					 | 
				
			||||||
// are different but case-fold equivalent are an upper/lower pair.
 | 
					 | 
				
			||||||
// For example, U+004B ('K'), U+006B ('k'), and U+212A ('K' for Kelvin)
 | 
					 | 
				
			||||||
// are considered to case-fold to each other. When we do add Unicode
 | 
					 | 
				
			||||||
// letters, we must not assume that upper/lower are the only case-equivalent pairs.
 | 
					 | 
				
			||||||
// Perhaps the Kelvin symbol would be disallowed entirely, for example.
 | 
					 | 
				
			||||||
// Or perhaps it would encode as "!!k", or perhaps as "(212A)".
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Also, it would be nice to allow Unicode marks as well as letters,
 | 
					 | 
				
			||||||
// but marks include combining marks, and then we must deal not
 | 
					 | 
				
			||||||
// only with case folding but also normalization: both U+00E9 ('é')
 | 
					 | 
				
			||||||
// and U+0065 U+0301 ('e' followed by combining acute accent)
 | 
					 | 
				
			||||||
// look the same on the page and are treated by some file systems
 | 
					 | 
				
			||||||
// as the same path. If we do allow Unicode marks in paths, there
 | 
					 | 
				
			||||||
// must be some kind of normalization to allow only one canonical
 | 
					 | 
				
			||||||
// encoding of any character used in an import path.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// EncodePath returns the safe encoding of the given module path.
 | 
					 | 
				
			||||||
// It fails if the module path is invalid.
 | 
					// It fails if the module path is invalid.
 | 
				
			||||||
func EncodePath(path string) (encoding string, err error) {
 | 
					func EscapePath(path string) (escaped string, err error) {
 | 
				
			||||||
	if err := CheckPath(path); err != nil {
 | 
						if err := CheckPath(path); err != nil {
 | 
				
			||||||
		return "", err
 | 
							return "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return encodeString(path)
 | 
						return escapeString(path)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EncodeVersion returns the safe encoding of the given module version.
 | 
					// EscapeVersion returns the escaped form of the given module version.
 | 
				
			||||||
// Versions are allowed to be in non-semver form but must be valid file names
 | 
					// Versions are allowed to be in non-semver form but must be valid file names
 | 
				
			||||||
// and not contain exclamation marks.
 | 
					// and not contain exclamation marks.
 | 
				
			||||||
func EncodeVersion(v string) (encoding string, err error) {
 | 
					func EscapeVersion(v string) (escaped string, err error) {
 | 
				
			||||||
	if err := checkElem(v, true); err != nil || strings.Contains(v, "!") {
 | 
						if err := checkElem(v, true); err != nil || strings.Contains(v, "!") {
 | 
				
			||||||
		return "", fmt.Errorf("disallowed version string %q", v)
 | 
							return "", &InvalidVersionError{
 | 
				
			||||||
 | 
								Version: v,
 | 
				
			||||||
 | 
								Err:     fmt.Errorf("disallowed version string"),
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	return encodeString(v)
 | 
						}
 | 
				
			||||||
 | 
						return escapeString(v)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func encodeString(s string) (encoding string, err error) {
 | 
					func escapeString(s string) (escaped string, err error) {
 | 
				
			||||||
	haveUpper := false
 | 
						haveUpper := false
 | 
				
			||||||
	for _, r := range s {
 | 
						for _, r := range s {
 | 
				
			||||||
		if r == '!' || r >= utf8.RuneSelf {
 | 
							if r == '!' || r >= utf8.RuneSelf {
 | 
				
			||||||
			// This should be disallowed by CheckPath, but diagnose anyway.
 | 
								// This should be disallowed by CheckPath, but diagnose anyway.
 | 
				
			||||||
			// The correctness of the encoding loop below depends on it.
 | 
								// The correctness of the escaping loop below depends on it.
 | 
				
			||||||
			return "", fmt.Errorf("internal error: inconsistency in EncodePath")
 | 
								return "", fmt.Errorf("internal error: inconsistency in EscapePath")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if 'A' <= r && r <= 'Z' {
 | 
							if 'A' <= r && r <= 'Z' {
 | 
				
			||||||
			haveUpper = true
 | 
								haveUpper = true
 | 
				
			||||||
@@ -480,39 +658,39 @@ func encodeString(s string) (encoding string, err error) {
 | 
				
			|||||||
	return string(buf), nil
 | 
						return string(buf), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DecodePath returns the module path of the given safe encoding.
 | 
					// UnescapePath returns the module path for the given escaped path.
 | 
				
			||||||
// It fails if the encoding is invalid or encodes an invalid path.
 | 
					// It fails if the escaped path is invalid or describes an invalid path.
 | 
				
			||||||
func DecodePath(encoding string) (path string, err error) {
 | 
					func UnescapePath(escaped string) (path string, err error) {
 | 
				
			||||||
	path, ok := decodeString(encoding)
 | 
						path, ok := unescapeString(escaped)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return "", fmt.Errorf("invalid module path encoding %q", encoding)
 | 
							return "", fmt.Errorf("invalid escaped module path %q", escaped)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := CheckPath(path); err != nil {
 | 
						if err := CheckPath(path); err != nil {
 | 
				
			||||||
		return "", fmt.Errorf("invalid module path encoding %q: %v", encoding, err)
 | 
							return "", fmt.Errorf("invalid escaped module path %q: %v", escaped, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return path, nil
 | 
						return path, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DecodeVersion returns the version string for the given safe encoding.
 | 
					// UnescapeVersion returns the version string for the given escaped version.
 | 
				
			||||||
// It fails if the encoding is invalid or encodes an invalid version.
 | 
					// It fails if the escaped form is invalid or describes an invalid version.
 | 
				
			||||||
// Versions are allowed to be in non-semver form but must be valid file names
 | 
					// Versions are allowed to be in non-semver form but must be valid file names
 | 
				
			||||||
// and not contain exclamation marks.
 | 
					// and not contain exclamation marks.
 | 
				
			||||||
func DecodeVersion(encoding string) (v string, err error) {
 | 
					func UnescapeVersion(escaped string) (v string, err error) {
 | 
				
			||||||
	v, ok := decodeString(encoding)
 | 
						v, ok := unescapeString(escaped)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return "", fmt.Errorf("invalid version encoding %q", encoding)
 | 
							return "", fmt.Errorf("invalid escaped version %q", escaped)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := checkElem(v, true); err != nil {
 | 
						if err := checkElem(v, true); err != nil {
 | 
				
			||||||
		return "", fmt.Errorf("disallowed version string %q", v)
 | 
							return "", fmt.Errorf("invalid escaped version %q: %v", v, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return v, nil
 | 
						return v, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func decodeString(encoding string) (string, bool) {
 | 
					func unescapeString(escaped string) (string, bool) {
 | 
				
			||||||
	var buf []byte
 | 
						var buf []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bang := false
 | 
						bang := false
 | 
				
			||||||
	for _, r := range encoding {
 | 
						for _, r := range escaped {
 | 
				
			||||||
		if r >= utf8.RuneSelf {
 | 
							if r >= utf8.RuneSelf {
 | 
				
			||||||
			return "", false
 | 
								return "", false
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
							
								
								
									
										23
									
								
								vendor/golang.org/x/mod/semver/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/golang.org/x/mod/semver/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["semver.go"],
 | 
				
			||||||
 | 
					    importmap = "k8s.io/kubernetes/vendor/golang.org/x/mod/semver",
 | 
				
			||||||
 | 
					    importpath = "golang.org/x/mod/semver",
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
@@ -107,7 +107,7 @@ func Build(v string) string {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Compare returns an integer comparing two versions according to
 | 
					// Compare returns an integer comparing two versions according to
 | 
				
			||||||
// according to semantic version precedence.
 | 
					// semantic version precedence.
 | 
				
			||||||
// The result will be 0 if v == w, -1 if v < w, or +1 if v > w.
 | 
					// The result will be 0 if v == w, -1 if v < w, or +1 if v > w.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// An invalid semantic version string is considered less than a valid one.
 | 
					// An invalid semantic version string is considered less than a valid one.
 | 
				
			||||||
@@ -263,7 +263,7 @@ func parseBuild(v string) (t, rest string, ok bool) {
 | 
				
			|||||||
	i := 1
 | 
						i := 1
 | 
				
			||||||
	start := 1
 | 
						start := 1
 | 
				
			||||||
	for i < len(v) {
 | 
						for i < len(v) {
 | 
				
			||||||
		if !isIdentChar(v[i]) {
 | 
							if !isIdentChar(v[i]) && v[i] != '.' {
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if v[i] == '.' {
 | 
							if v[i] == '.' {
 | 
				
			||||||
							
								
								
									
										8
									
								
								vendor/golang.org/x/net/http2/client_conn_pool.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/golang.org/x/net/http2/client_conn_pool.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -107,6 +107,7 @@ func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMis
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// dialCall is an in-flight Transport dial call to a host.
 | 
					// dialCall is an in-flight Transport dial call to a host.
 | 
				
			||||||
type dialCall struct {
 | 
					type dialCall struct {
 | 
				
			||||||
 | 
						_    incomparable
 | 
				
			||||||
	p    *clientConnPool
 | 
						p    *clientConnPool
 | 
				
			||||||
	done chan struct{} // closed when done
 | 
						done chan struct{} // closed when done
 | 
				
			||||||
	res  *ClientConn   // valid after done is closed
 | 
						res  *ClientConn   // valid after done is closed
 | 
				
			||||||
@@ -180,6 +181,7 @@ func (p *clientConnPool) addConnIfNeeded(key string, t *Transport, c *tls.Conn)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type addConnCall struct {
 | 
					type addConnCall struct {
 | 
				
			||||||
 | 
						_    incomparable
 | 
				
			||||||
	p    *clientConnPool
 | 
						p    *clientConnPool
 | 
				
			||||||
	done chan struct{} // closed when done
 | 
						done chan struct{} // closed when done
 | 
				
			||||||
	err  error
 | 
						err  error
 | 
				
			||||||
@@ -200,12 +202,6 @@ func (c *addConnCall) run(t *Transport, key string, tc *tls.Conn) {
 | 
				
			|||||||
	close(c.done)
 | 
						close(c.done)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *clientConnPool) addConn(key string, cc *ClientConn) {
 | 
					 | 
				
			||||||
	p.mu.Lock()
 | 
					 | 
				
			||||||
	p.addConnLocked(key, cc)
 | 
					 | 
				
			||||||
	p.mu.Unlock()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// p.mu must be held
 | 
					// p.mu must be held
 | 
				
			||||||
func (p *clientConnPool) addConnLocked(key string, cc *ClientConn) {
 | 
					func (p *clientConnPool) addConnLocked(key string, cc *ClientConn) {
 | 
				
			||||||
	for _, v := range p.conns[key] {
 | 
						for _, v := range p.conns[key] {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/net/http2/flow.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/net/http2/flow.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -8,6 +8,8 @@ package http2
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// flow is the flow control window's size.
 | 
					// flow is the flow control window's size.
 | 
				
			||||||
type flow struct {
 | 
					type flow struct {
 | 
				
			||||||
 | 
						_ incomparable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// n is the number of DATA bytes we're allowed to send.
 | 
						// n is the number of DATA bytes we're allowed to send.
 | 
				
			||||||
	// A flow is kept both on a conn and a per-stream.
 | 
						// A flow is kept both on a conn and a per-stream.
 | 
				
			||||||
	n int32
 | 
						n int32
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/net/http2/hpack/huffman.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/net/http2/hpack/huffman.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -105,7 +105,14 @@ func huffmanDecode(buf *bytes.Buffer, maxLen int, v []byte) error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// incomparable is a zero-width, non-comparable type. Adding it to a struct
 | 
				
			||||||
 | 
					// makes that struct also non-comparable, and generally doesn't add
 | 
				
			||||||
 | 
					// any size (as long as it's first).
 | 
				
			||||||
 | 
					type incomparable [0]func()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type node struct {
 | 
					type node struct {
 | 
				
			||||||
 | 
						_ incomparable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// children is non-nil for internal nodes
 | 
						// children is non-nil for internal nodes
 | 
				
			||||||
	children *[256]*node
 | 
						children *[256]*node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/net/http2/http2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/net/http2/http2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -241,6 +241,7 @@ func (cw closeWaiter) Wait() {
 | 
				
			|||||||
// Its buffered writer is lazily allocated as needed, to minimize
 | 
					// Its buffered writer is lazily allocated as needed, to minimize
 | 
				
			||||||
// idle memory usage with many connections.
 | 
					// idle memory usage with many connections.
 | 
				
			||||||
type bufferedWriter struct {
 | 
					type bufferedWriter struct {
 | 
				
			||||||
 | 
						_  incomparable
 | 
				
			||||||
	w  io.Writer     // immutable
 | 
						w  io.Writer     // immutable
 | 
				
			||||||
	bw *bufio.Writer // non-nil when data is buffered
 | 
						bw *bufio.Writer // non-nil when data is buffered
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -313,6 +314,7 @@ func bodyAllowedForStatus(status int) bool {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type httpError struct {
 | 
					type httpError struct {
 | 
				
			||||||
 | 
						_       incomparable
 | 
				
			||||||
	msg     string
 | 
						msg     string
 | 
				
			||||||
	timeout bool
 | 
						timeout bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -376,3 +378,8 @@ func (s *sorter) SortStrings(ss []string) {
 | 
				
			|||||||
func validPseudoPath(v string) bool {
 | 
					func validPseudoPath(v string) bool {
 | 
				
			||||||
	return (len(v) > 0 && v[0] == '/') || v == "*"
 | 
						return (len(v) > 0 && v[0] == '/') || v == "*"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// incomparable is a zero-width, non-comparable type. Adding it to a struct
 | 
				
			||||||
 | 
					// makes that struct also non-comparable, and generally doesn't add
 | 
				
			||||||
 | 
					// any size (as long as it's first).
 | 
				
			||||||
 | 
					type incomparable [0]func()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								vendor/golang.org/x/net/http2/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/golang.org/x/net/http2/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -761,6 +761,7 @@ func (sc *serverConn) readFrames() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// frameWriteResult is the message passed from writeFrameAsync to the serve goroutine.
 | 
					// frameWriteResult is the message passed from writeFrameAsync to the serve goroutine.
 | 
				
			||||||
type frameWriteResult struct {
 | 
					type frameWriteResult struct {
 | 
				
			||||||
 | 
						_   incomparable
 | 
				
			||||||
	wr  FrameWriteRequest // what was written (or attempted)
 | 
						wr  FrameWriteRequest // what was written (or attempted)
 | 
				
			||||||
	err error             // result of the writeFrame call
 | 
						err error             // result of the writeFrame call
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -771,7 +772,7 @@ type frameWriteResult struct {
 | 
				
			|||||||
// serverConn.
 | 
					// serverConn.
 | 
				
			||||||
func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) {
 | 
					func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) {
 | 
				
			||||||
	err := wr.write.writeFrame(sc)
 | 
						err := wr.write.writeFrame(sc)
 | 
				
			||||||
	sc.wroteFrameCh <- frameWriteResult{wr, err}
 | 
						sc.wroteFrameCh <- frameWriteResult{wr: wr, err: err}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sc *serverConn) closeAllStreamsOnConnClose() {
 | 
					func (sc *serverConn) closeAllStreamsOnConnClose() {
 | 
				
			||||||
@@ -1161,7 +1162,7 @@ func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) {
 | 
				
			|||||||
	if wr.write.staysWithinBuffer(sc.bw.Available()) {
 | 
						if wr.write.staysWithinBuffer(sc.bw.Available()) {
 | 
				
			||||||
		sc.writingFrameAsync = false
 | 
							sc.writingFrameAsync = false
 | 
				
			||||||
		err := wr.write.writeFrame(sc)
 | 
							err := wr.write.writeFrame(sc)
 | 
				
			||||||
		sc.wroteFrame(frameWriteResult{wr, err})
 | 
							sc.wroteFrame(frameWriteResult{wr: wr, err: err})
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		sc.writingFrameAsync = true
 | 
							sc.writingFrameAsync = true
 | 
				
			||||||
		go sc.writeFrameAsync(wr)
 | 
							go sc.writeFrameAsync(wr)
 | 
				
			||||||
@@ -2057,7 +2058,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r
 | 
				
			|||||||
	var trailer http.Header
 | 
						var trailer http.Header
 | 
				
			||||||
	for _, v := range rp.header["Trailer"] {
 | 
						for _, v := range rp.header["Trailer"] {
 | 
				
			||||||
		for _, key := range strings.Split(v, ",") {
 | 
							for _, key := range strings.Split(v, ",") {
 | 
				
			||||||
			key = http.CanonicalHeaderKey(strings.TrimSpace(key))
 | 
								key = http.CanonicalHeaderKey(textproto.TrimString(key))
 | 
				
			||||||
			switch key {
 | 
								switch key {
 | 
				
			||||||
			case "Transfer-Encoding", "Trailer", "Content-Length":
 | 
								case "Transfer-Encoding", "Trailer", "Content-Length":
 | 
				
			||||||
				// Bogus. (copy of http1 rules)
 | 
									// Bogus. (copy of http1 rules)
 | 
				
			||||||
@@ -2275,6 +2276,7 @@ func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) {
 | 
				
			|||||||
// requestBody is the Handler's Request.Body type.
 | 
					// requestBody is the Handler's Request.Body type.
 | 
				
			||||||
// Read and Close may be called concurrently.
 | 
					// Read and Close may be called concurrently.
 | 
				
			||||||
type requestBody struct {
 | 
					type requestBody struct {
 | 
				
			||||||
 | 
						_             incomparable
 | 
				
			||||||
	stream        *stream
 | 
						stream        *stream
 | 
				
			||||||
	conn          *serverConn
 | 
						conn          *serverConn
 | 
				
			||||||
	closed        bool  // for use by Close only
 | 
						closed        bool  // for use by Close only
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										78
									
								
								vendor/golang.org/x/net/http2/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										78
									
								
								vendor/golang.org/x/net/http2/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -108,6 +108,19 @@ type Transport struct {
 | 
				
			|||||||
	// waiting for their turn.
 | 
						// waiting for their turn.
 | 
				
			||||||
	StrictMaxConcurrentStreams bool
 | 
						StrictMaxConcurrentStreams bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// ReadIdleTimeout is the timeout after which a health check using ping
 | 
				
			||||||
 | 
						// frame will be carried out if no frame is received on the connection.
 | 
				
			||||||
 | 
						// Note that a ping response will is considered a received frame, so if
 | 
				
			||||||
 | 
						// there is no other traffic on the connection, the health check will
 | 
				
			||||||
 | 
						// be performed every ReadIdleTimeout interval.
 | 
				
			||||||
 | 
						// If zero, no health check is performed.
 | 
				
			||||||
 | 
						ReadIdleTimeout time.Duration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// PingTimeout is the timeout after which the connection will be closed
 | 
				
			||||||
 | 
						// if a response to Ping is not received.
 | 
				
			||||||
 | 
						// Defaults to 15s.
 | 
				
			||||||
 | 
						PingTimeout time.Duration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// t1, if non-nil, is the standard library Transport using
 | 
						// t1, if non-nil, is the standard library Transport using
 | 
				
			||||||
	// this transport. Its settings are used (but not its
 | 
						// this transport. Its settings are used (but not its
 | 
				
			||||||
	// RoundTrip method, etc).
 | 
						// RoundTrip method, etc).
 | 
				
			||||||
@@ -131,6 +144,14 @@ func (t *Transport) disableCompression() bool {
 | 
				
			|||||||
	return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
 | 
						return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (t *Transport) pingTimeout() time.Duration {
 | 
				
			||||||
 | 
						if t.PingTimeout == 0 {
 | 
				
			||||||
 | 
							return 15 * time.Second
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return t.PingTimeout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2.
 | 
					// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2.
 | 
				
			||||||
// It returns an error if t1 has already been HTTP/2-enabled.
 | 
					// It returns an error if t1 has already been HTTP/2-enabled.
 | 
				
			||||||
func ConfigureTransport(t1 *http.Transport) error {
 | 
					func ConfigureTransport(t1 *http.Transport) error {
 | 
				
			||||||
@@ -675,6 +696,20 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
 | 
				
			|||||||
	return cc, nil
 | 
						return cc, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (cc *ClientConn) healthCheck() {
 | 
				
			||||||
 | 
						pingTimeout := cc.t.pingTimeout()
 | 
				
			||||||
 | 
						// We don't need to periodically ping in the health check, because the readLoop of ClientConn will
 | 
				
			||||||
 | 
						// trigger the healthCheck again if there is no frame received.
 | 
				
			||||||
 | 
						ctx, cancel := context.WithTimeout(context.Background(), pingTimeout)
 | 
				
			||||||
 | 
						defer cancel()
 | 
				
			||||||
 | 
						err := cc.Ping(ctx)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							cc.closeForLostPing()
 | 
				
			||||||
 | 
							cc.t.connPool().MarkDead(cc)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (cc *ClientConn) setGoAway(f *GoAwayFrame) {
 | 
					func (cc *ClientConn) setGoAway(f *GoAwayFrame) {
 | 
				
			||||||
	cc.mu.Lock()
 | 
						cc.mu.Lock()
 | 
				
			||||||
	defer cc.mu.Unlock()
 | 
						defer cc.mu.Unlock()
 | 
				
			||||||
@@ -846,14 +881,12 @@ func (cc *ClientConn) sendGoAway() error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Close closes the client connection immediately.
 | 
					// closes the client connection immediately. In-flight requests are interrupted.
 | 
				
			||||||
//
 | 
					// err is sent to streams.
 | 
				
			||||||
// In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
 | 
					func (cc *ClientConn) closeForError(err error) error {
 | 
				
			||||||
func (cc *ClientConn) Close() error {
 | 
					 | 
				
			||||||
	cc.mu.Lock()
 | 
						cc.mu.Lock()
 | 
				
			||||||
	defer cc.cond.Broadcast()
 | 
						defer cc.cond.Broadcast()
 | 
				
			||||||
	defer cc.mu.Unlock()
 | 
						defer cc.mu.Unlock()
 | 
				
			||||||
	err := errors.New("http2: client connection force closed via ClientConn.Close")
 | 
					 | 
				
			||||||
	for id, cs := range cc.streams {
 | 
						for id, cs := range cc.streams {
 | 
				
			||||||
		select {
 | 
							select {
 | 
				
			||||||
		case cs.resc <- resAndError{err: err}:
 | 
							case cs.resc <- resAndError{err: err}:
 | 
				
			||||||
@@ -866,6 +899,20 @@ func (cc *ClientConn) Close() error {
 | 
				
			|||||||
	return cc.tconn.Close()
 | 
						return cc.tconn.Close()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Close closes the client connection immediately.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
 | 
				
			||||||
 | 
					func (cc *ClientConn) Close() error {
 | 
				
			||||||
 | 
						err := errors.New("http2: client connection force closed via ClientConn.Close")
 | 
				
			||||||
 | 
						return cc.closeForError(err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// closes the client connection immediately. In-flight requests are interrupted.
 | 
				
			||||||
 | 
					func (cc *ClientConn) closeForLostPing() error {
 | 
				
			||||||
 | 
						err := errors.New("http2: client connection lost")
 | 
				
			||||||
 | 
						return cc.closeForError(err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const maxAllocFrameSize = 512 << 10
 | 
					const maxAllocFrameSize = 512 << 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// frameBuffer returns a scratch buffer suitable for writing DATA frames.
 | 
					// frameBuffer returns a scratch buffer suitable for writing DATA frames.
 | 
				
			||||||
@@ -916,7 +963,7 @@ func commaSeparatedTrailers(req *http.Request) (string, error) {
 | 
				
			|||||||
		k = http.CanonicalHeaderKey(k)
 | 
							k = http.CanonicalHeaderKey(k)
 | 
				
			||||||
		switch k {
 | 
							switch k {
 | 
				
			||||||
		case "Transfer-Encoding", "Trailer", "Content-Length":
 | 
							case "Transfer-Encoding", "Trailer", "Content-Length":
 | 
				
			||||||
			return "", &badStringError{"invalid Trailer key", k}
 | 
								return "", fmt.Errorf("invalid Trailer key %q", k)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		keys = append(keys, k)
 | 
							keys = append(keys, k)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1394,13 +1441,6 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type badStringError struct {
 | 
					 | 
				
			||||||
	what string
 | 
					 | 
				
			||||||
	str  string
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (e *badStringError) Error() string { return fmt.Sprintf("%s %q", e.what, e.str) }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// requires cc.mu be held.
 | 
					// requires cc.mu be held.
 | 
				
			||||||
func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) {
 | 
					func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) {
 | 
				
			||||||
	cc.hbuf.Reset()
 | 
						cc.hbuf.Reset()
 | 
				
			||||||
@@ -1616,6 +1656,7 @@ func (cc *ClientConn) writeHeader(name, value string) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type resAndError struct {
 | 
					type resAndError struct {
 | 
				
			||||||
 | 
						_   incomparable
 | 
				
			||||||
	res *http.Response
 | 
						res *http.Response
 | 
				
			||||||
	err error
 | 
						err error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1663,6 +1704,7 @@ func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// clientConnReadLoop is the state owned by the clientConn's frame-reading readLoop.
 | 
					// clientConnReadLoop is the state owned by the clientConn's frame-reading readLoop.
 | 
				
			||||||
type clientConnReadLoop struct {
 | 
					type clientConnReadLoop struct {
 | 
				
			||||||
 | 
						_             incomparable
 | 
				
			||||||
	cc            *ClientConn
 | 
						cc            *ClientConn
 | 
				
			||||||
	closeWhenIdle bool
 | 
						closeWhenIdle bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1742,8 +1784,17 @@ func (rl *clientConnReadLoop) run() error {
 | 
				
			|||||||
	rl.closeWhenIdle = cc.t.disableKeepAlives() || cc.singleUse
 | 
						rl.closeWhenIdle = cc.t.disableKeepAlives() || cc.singleUse
 | 
				
			||||||
	gotReply := false // ever saw a HEADERS reply
 | 
						gotReply := false // ever saw a HEADERS reply
 | 
				
			||||||
	gotSettings := false
 | 
						gotSettings := false
 | 
				
			||||||
 | 
						readIdleTimeout := cc.t.ReadIdleTimeout
 | 
				
			||||||
 | 
						var t *time.Timer
 | 
				
			||||||
 | 
						if readIdleTimeout != 0 {
 | 
				
			||||||
 | 
							t = time.AfterFunc(readIdleTimeout, cc.healthCheck)
 | 
				
			||||||
 | 
							defer t.Stop()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		f, err := cc.fr.ReadFrame()
 | 
							f, err := cc.fr.ReadFrame()
 | 
				
			||||||
 | 
							if t != nil {
 | 
				
			||||||
 | 
								t.Reset(readIdleTimeout)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err)
 | 
								cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -2479,6 +2530,7 @@ func (rt erringRoundTripper) RoundTrip(*http.Request) (*http.Response, error) {
 | 
				
			|||||||
// gzipReader wraps a response body so it can lazily
 | 
					// gzipReader wraps a response body so it can lazily
 | 
				
			||||||
// call gzip.NewReader on the first call to Read
 | 
					// call gzip.NewReader on the first call to Read
 | 
				
			||||||
type gzipReader struct {
 | 
					type gzipReader struct {
 | 
				
			||||||
 | 
						_    incomparable
 | 
				
			||||||
	body io.ReadCloser // underlying Response.Body
 | 
						body io.ReadCloser // underlying Response.Body
 | 
				
			||||||
	zr   *gzip.Reader  // lazily-initialized gzip reader
 | 
						zr   *gzip.Reader  // lazily-initialized gzip reader
 | 
				
			||||||
	zerr error         // sticky error
 | 
						zerr error         // sticky error
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								vendor/golang.org/x/net/ipv4/header.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/golang.org/x/net/ipv4/header.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -16,7 +16,6 @@ import (
 | 
				
			|||||||
const (
 | 
					const (
 | 
				
			||||||
	Version   = 4  // protocol version
 | 
						Version   = 4  // protocol version
 | 
				
			||||||
	HeaderLen = 20 // header length without extension headers
 | 
						HeaderLen = 20 // header length without extension headers
 | 
				
			||||||
	maxHeaderLen = 60 // sensible default, revisit if later RFCs define new usage of version and header length fields
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type HeaderFlags int
 | 
					type HeaderFlags int
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								vendor/golang.org/x/tools/go/ast/astutil/imports.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/golang.org/x/tools/go/ast/astutil/imports.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -275,9 +275,10 @@ func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (del
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				// We deleted an entry but now there may be
 | 
									// We deleted an entry but now there may be
 | 
				
			||||||
				// a blank line-sized hole where the import was.
 | 
									// a blank line-sized hole where the import was.
 | 
				
			||||||
				if line-lastLine > 1 {
 | 
									if line-lastLine > 1 || !gen.Rparen.IsValid() {
 | 
				
			||||||
					// There was a blank line immediately preceding the deleted import,
 | 
										// There was a blank line immediately preceding the deleted import,
 | 
				
			||||||
					// so there's no need to close the hole.
 | 
										// so there's no need to close the hole. The right parenthesis is
 | 
				
			||||||
 | 
										// invalid after AddImport to an import statement without parenthesis.
 | 
				
			||||||
					// Do nothing.
 | 
										// Do nothing.
 | 
				
			||||||
				} else if line != fset.File(gen.Rparen).LineCount() {
 | 
									} else if line != fset.File(gen.Rparen).LineCount() {
 | 
				
			||||||
					// There was no blank line. Close the hole.
 | 
										// There was no blank line. Close the hole.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -344,7 +344,7 @@ func (p *parser) expectKeyword(keyword string) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// PackageId = string_lit .
 | 
					// PackageId = string_lit .
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
func (p *parser) parsePackageId() string {
 | 
					func (p *parser) parsePackageID() string {
 | 
				
			||||||
	id, err := strconv.Unquote(p.expect(scanner.String))
 | 
						id, err := strconv.Unquote(p.expect(scanner.String))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		p.error(err)
 | 
							p.error(err)
 | 
				
			||||||
@@ -384,7 +384,7 @@ func (p *parser) parseDotIdent() string {
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
func (p *parser) parseQualifiedName() (id, name string) {
 | 
					func (p *parser) parseQualifiedName() (id, name string) {
 | 
				
			||||||
	p.expect('@')
 | 
						p.expect('@')
 | 
				
			||||||
	id = p.parsePackageId()
 | 
						id = p.parsePackageID()
 | 
				
			||||||
	p.expect('.')
 | 
						p.expect('.')
 | 
				
			||||||
	// Per rev f280b8a485fd (10/2/2013), qualified names may be used for anonymous fields.
 | 
						// Per rev f280b8a485fd (10/2/2013), qualified names may be used for anonymous fields.
 | 
				
			||||||
	if p.tok == '?' {
 | 
						if p.tok == '?' {
 | 
				
			||||||
@@ -696,7 +696,7 @@ func (p *parser) parseInterfaceType(parent *types.Package) types.Type {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Complete requires the type's embedded interfaces to be fully defined,
 | 
						// Complete requires the type's embedded interfaces to be fully defined,
 | 
				
			||||||
	// but we do not define any
 | 
						// but we do not define any
 | 
				
			||||||
	return types.NewInterface(methods, nil).Complete()
 | 
						return newInterface(methods, nil).Complete()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ChanType = ( "chan" [ "<-" ] | "<-" "chan" ) Type .
 | 
					// ChanType = ( "chan" [ "<-" ] | "<-" "chan" ) Type .
 | 
				
			||||||
@@ -785,7 +785,7 @@ func (p *parser) parseType(parent *types.Package) types.Type {
 | 
				
			|||||||
func (p *parser) parseImportDecl() {
 | 
					func (p *parser) parseImportDecl() {
 | 
				
			||||||
	p.expectKeyword("import")
 | 
						p.expectKeyword("import")
 | 
				
			||||||
	name := p.parsePackageName()
 | 
						name := p.parsePackageName()
 | 
				
			||||||
	p.getPkg(p.parsePackageId(), name)
 | 
						p.getPkg(p.parsePackageID(), name)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// int_lit = [ "+" | "-" ] { "0" ... "9" } .
 | 
					// int_lit = [ "+" | "-" ] { "0" ... "9" } .
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -6,6 +6,7 @@ go_library(
 | 
				
			|||||||
    importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/go/internal/packagesdriver",
 | 
					    importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/go/internal/packagesdriver",
 | 
				
			||||||
    importpath = "golang.org/x/tools/go/internal/packagesdriver",
 | 
					    importpath = "golang.org/x/tools/go/internal/packagesdriver",
 | 
				
			||||||
    visibility = ["//vendor/golang.org/x/tools/go:__subpackages__"],
 | 
					    visibility = ["//vendor/golang.org/x/tools/go:__subpackages__"],
 | 
				
			||||||
 | 
					    deps = ["//vendor/golang.org/x/tools/internal/gocommand:go_default_library"],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
filegroup(
 | 
					filegroup(
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										109
									
								
								vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										109
									
								
								vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,17 +11,15 @@ import (
 | 
				
			|||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"go/types"
 | 
						"go/types"
 | 
				
			||||||
	"log"
 | 
					 | 
				
			||||||
	"os"
 | 
					 | 
				
			||||||
	"os/exec"
 | 
						"os/exec"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
					
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/gocommand"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var debug = false
 | 
					var debug = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetSizes returns the sizes used by the underlying driver with the given parameters.
 | 
					func GetSizes(ctx context.Context, buildFlags, env []string, gocmdRunner *gocommand.Runner, dir string) (types.Sizes, error) {
 | 
				
			||||||
func GetSizes(ctx context.Context, buildFlags, env []string, dir string, usesExportData bool) (types.Sizes, error) {
 | 
					 | 
				
			||||||
	// TODO(matloob): Clean this up. This code is mostly a copy of packages.findExternalDriver.
 | 
						// TODO(matloob): Clean this up. This code is mostly a copy of packages.findExternalDriver.
 | 
				
			||||||
	const toolPrefix = "GOPACKAGESDRIVER="
 | 
						const toolPrefix = "GOPACKAGESDRIVER="
 | 
				
			||||||
	tool := ""
 | 
						tool := ""
 | 
				
			||||||
@@ -41,7 +39,7 @@ func GetSizes(ctx context.Context, buildFlags, env []string, dir string, usesExp
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if tool == "off" {
 | 
						if tool == "off" {
 | 
				
			||||||
		return GetSizesGolist(ctx, buildFlags, env, dir, usesExportData)
 | 
							return GetSizesGolist(ctx, buildFlags, env, gocmdRunner, dir)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	req, err := json.Marshal(struct {
 | 
						req, err := json.Marshal(struct {
 | 
				
			||||||
@@ -77,98 +75,43 @@ func GetSizes(ctx context.Context, buildFlags, env []string, dir string, usesExp
 | 
				
			|||||||
	return response.Sizes, nil
 | 
						return response.Sizes, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetSizesGolist(ctx context.Context, buildFlags, env []string, dir string, usesExportData bool) (types.Sizes, error) {
 | 
					func GetSizesGolist(ctx context.Context, buildFlags, env []string, gocmdRunner *gocommand.Runner, dir string) (types.Sizes, error) {
 | 
				
			||||||
	args := []string{"list", "-f", "{{context.GOARCH}} {{context.Compiler}}"}
 | 
						inv := gocommand.Invocation{
 | 
				
			||||||
	args = append(args, buildFlags...)
 | 
							Verb:       "list",
 | 
				
			||||||
	args = append(args, "--", "unsafe")
 | 
							Args:       []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"},
 | 
				
			||||||
	stdout, stderr, err := invokeGo(ctx, env, dir, usesExportData, args...)
 | 
							Env:        env,
 | 
				
			||||||
 | 
							BuildFlags: buildFlags,
 | 
				
			||||||
 | 
							WorkingDir: dir,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv)
 | 
				
			||||||
	var goarch, compiler string
 | 
						var goarch, compiler string
 | 
				
			||||||
	if err != nil {
 | 
						if rawErr != nil {
 | 
				
			||||||
		if strings.Contains(err.Error(), "cannot find main module") {
 | 
							if strings.Contains(rawErr.Error(), "cannot find main module") {
 | 
				
			||||||
			// User's running outside of a module. All bets are off. Get GOARCH and guess compiler is gc.
 | 
								// User's running outside of a module. All bets are off. Get GOARCH and guess compiler is gc.
 | 
				
			||||||
			// TODO(matloob): Is this a problem in practice?
 | 
								// TODO(matloob): Is this a problem in practice?
 | 
				
			||||||
			envout, _, enverr := invokeGo(ctx, env, dir, usesExportData, "env", "GOARCH")
 | 
								inv := gocommand.Invocation{
 | 
				
			||||||
 | 
									Verb:       "env",
 | 
				
			||||||
 | 
									Args:       []string{"GOARCH"},
 | 
				
			||||||
 | 
									Env:        env,
 | 
				
			||||||
 | 
									WorkingDir: dir,
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								envout, enverr := gocmdRunner.Run(ctx, inv)
 | 
				
			||||||
			if enverr != nil {
 | 
								if enverr != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, enverr
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			goarch = strings.TrimSpace(envout.String())
 | 
								goarch = strings.TrimSpace(envout.String())
 | 
				
			||||||
			compiler = "gc"
 | 
								compiler = "gc"
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			return nil, err
 | 
								return nil, friendlyErr
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		fields := strings.Fields(stdout.String())
 | 
							fields := strings.Fields(stdout.String())
 | 
				
			||||||
		if len(fields) < 2 {
 | 
							if len(fields) < 2 {
 | 
				
			||||||
			return nil, fmt.Errorf("could not parse GOARCH and Go compiler in format \"<GOARCH> <compiler>\" from stdout of go command:\n%s\ndir: %s\nstdout: <<%s>>\nstderr: <<%s>>",
 | 
								return nil, fmt.Errorf("could not parse GOARCH and Go compiler in format \"<GOARCH> <compiler>\":\nstdout: <<%s>>\nstderr: <<%s>>",
 | 
				
			||||||
				cmdDebugStr(env, args...), dir, stdout.String(), stderr.String())
 | 
									stdout.String(), stderr.String())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		goarch = fields[0]
 | 
							goarch = fields[0]
 | 
				
			||||||
		compiler = fields[1]
 | 
							compiler = fields[1]
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return types.SizesFor(compiler, goarch), nil
 | 
						return types.SizesFor(compiler, goarch), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// invokeGo returns the stdout and stderr of a go command invocation.
 | 
					 | 
				
			||||||
func invokeGo(ctx context.Context, env []string, dir string, usesExportData bool, args ...string) (*bytes.Buffer, *bytes.Buffer, error) {
 | 
					 | 
				
			||||||
	if debug {
 | 
					 | 
				
			||||||
		defer func(start time.Time) { log.Printf("%s for %v", time.Since(start), cmdDebugStr(env, args...)) }(time.Now())
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	stdout := new(bytes.Buffer)
 | 
					 | 
				
			||||||
	stderr := new(bytes.Buffer)
 | 
					 | 
				
			||||||
	cmd := exec.CommandContext(ctx, "go", args...)
 | 
					 | 
				
			||||||
	// On darwin the cwd gets resolved to the real path, which breaks anything that
 | 
					 | 
				
			||||||
	// expects the working directory to keep the original path, including the
 | 
					 | 
				
			||||||
	// go command when dealing with modules.
 | 
					 | 
				
			||||||
	// The Go stdlib has a special feature where if the cwd and the PWD are the
 | 
					 | 
				
			||||||
	// same node then it trusts the PWD, so by setting it in the env for the child
 | 
					 | 
				
			||||||
	// process we fix up all the paths returned by the go command.
 | 
					 | 
				
			||||||
	cmd.Env = append(append([]string{}, env...), "PWD="+dir)
 | 
					 | 
				
			||||||
	cmd.Dir = dir
 | 
					 | 
				
			||||||
	cmd.Stdout = stdout
 | 
					 | 
				
			||||||
	cmd.Stderr = stderr
 | 
					 | 
				
			||||||
	if err := cmd.Run(); err != nil {
 | 
					 | 
				
			||||||
		exitErr, ok := err.(*exec.ExitError)
 | 
					 | 
				
			||||||
		if !ok {
 | 
					 | 
				
			||||||
			// Catastrophic error:
 | 
					 | 
				
			||||||
			// - executable not found
 | 
					 | 
				
			||||||
			// - context cancellation
 | 
					 | 
				
			||||||
			return nil, nil, fmt.Errorf("couldn't exec 'go %v': %s %T", args, err, err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Export mode entails a build.
 | 
					 | 
				
			||||||
		// If that build fails, errors appear on stderr
 | 
					 | 
				
			||||||
		// (despite the -e flag) and the Export field is blank.
 | 
					 | 
				
			||||||
		// Do not fail in that case.
 | 
					 | 
				
			||||||
		if !usesExportData {
 | 
					 | 
				
			||||||
			return nil, nil, fmt.Errorf("go %v: %s: %s", args, exitErr, stderr)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// As of writing, go list -export prints some non-fatal compilation
 | 
					 | 
				
			||||||
	// errors to stderr, even with -e set. We would prefer that it put
 | 
					 | 
				
			||||||
	// them in the Package.Error JSON (see https://golang.org/issue/26319).
 | 
					 | 
				
			||||||
	// In the meantime, there's nowhere good to put them, but they can
 | 
					 | 
				
			||||||
	// be useful for debugging. Print them if $GOPACKAGESPRINTGOLISTERRORS
 | 
					 | 
				
			||||||
	// is set.
 | 
					 | 
				
			||||||
	if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTGOLISTERRORS") != "" {
 | 
					 | 
				
			||||||
		fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(env, args...), stderr)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// debugging
 | 
					 | 
				
			||||||
	if false {
 | 
					 | 
				
			||||||
		fmt.Fprintf(os.Stderr, "%s stdout: <<%s>>\n", cmdDebugStr(env, args...), stdout)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return stdout, stderr, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func cmdDebugStr(envlist []string, args ...string) string {
 | 
					 | 
				
			||||||
	env := make(map[string]string)
 | 
					 | 
				
			||||||
	for _, kv := range envlist {
 | 
					 | 
				
			||||||
		split := strings.Split(kv, "=")
 | 
					 | 
				
			||||||
		k, v := split[0], split[1]
 | 
					 | 
				
			||||||
		env[k] = v
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v PWD=%v go %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["PWD"], args)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/tools/go/packages/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/tools/go/packages/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -17,9 +17,10 @@ go_library(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//vendor/golang.org/x/tools/go/gcexportdata:go_default_library",
 | 
					        "//vendor/golang.org/x/tools/go/gcexportdata:go_default_library",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/go/internal/packagesdriver:go_default_library",
 | 
					        "//vendor/golang.org/x/tools/go/internal/packagesdriver:go_default_library",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/internal/gopathwalk:go_default_library",
 | 
					        "//vendor/golang.org/x/tools/internal/gocommand:go_default_library",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/internal/semver:go_default_library",
 | 
					        "//vendor/golang.org/x/tools/internal/packagesinternal:go_default_library",
 | 
				
			||||||
        "//vendor/golang.org/x/tools/internal/span:go_default_library",
 | 
					        "//vendor/golang.org/x/tools/internal/typesinternal:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/xerrors:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/tools/go/packages/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/tools/go/packages/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -60,8 +60,7 @@ causes Load to run in LoadFiles mode, collecting minimal information.
 | 
				
			|||||||
See the documentation for type Config for details.
 | 
					See the documentation for type Config for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
As noted earlier, the Config.Mode controls the amount of detail
 | 
					As noted earlier, the Config.Mode controls the amount of detail
 | 
				
			||||||
reported about the loaded packages, with each mode returning all the data of the
 | 
					reported about the loaded packages. See the documentation for type LoadMode
 | 
				
			||||||
previous mode with some extra added. See the documentation for type LoadMode
 | 
					 | 
				
			||||||
for details.
 | 
					for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Most tools should pass their command-line arguments (after any flags)
 | 
					Most tools should pass their command-line arguments (after any flags)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/tools/go/packages/external.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/tools/go/packages/external.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -84,13 +84,14 @@ func findExternalDriver(cfg *Config) driver {
 | 
				
			|||||||
		cmd.Stdin = bytes.NewReader(req)
 | 
							cmd.Stdin = bytes.NewReader(req)
 | 
				
			||||||
		cmd.Stdout = buf
 | 
							cmd.Stdout = buf
 | 
				
			||||||
		cmd.Stderr = stderr
 | 
							cmd.Stderr = stderr
 | 
				
			||||||
		if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTDRIVERERRORS") != "" {
 | 
					 | 
				
			||||||
			fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cmd, words...), stderr)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := cmd.Run(); err != nil {
 | 
							if err := cmd.Run(); err != nil {
 | 
				
			||||||
			return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr)
 | 
								return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTDRIVERERRORS") != "" {
 | 
				
			||||||
 | 
								fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cmd, words...), stderr)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var response driverResponse
 | 
							var response driverResponse
 | 
				
			||||||
		if err := json.Unmarshal(buf.Bytes(), &response); err != nil {
 | 
							if err := json.Unmarshal(buf.Bytes(), &response); err != nil {
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										764
									
								
								vendor/golang.org/x/tools/go/packages/golist.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										764
									
								
								vendor/golang.org/x/tools/go/packages/golist.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										276
									
								
								vendor/golang.org/x/tools/go/packages/golist_overlay.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										276
									
								
								vendor/golang.org/x/tools/go/packages/golist_overlay.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,12 +1,14 @@
 | 
				
			|||||||
package packages
 | 
					package packages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
					 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"go/parser"
 | 
						"go/parser"
 | 
				
			||||||
	"go/token"
 | 
						"go/token"
 | 
				
			||||||
 | 
						"log"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
 | 
						"sort"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -16,15 +18,20 @@ import (
 | 
				
			|||||||
// sometimes incorrect.
 | 
					// sometimes incorrect.
 | 
				
			||||||
// TODO(matloob): Handle unsupported cases, including the following:
 | 
					// TODO(matloob): Handle unsupported cases, including the following:
 | 
				
			||||||
// - determining the correct package to add given a new import path
 | 
					// - determining the correct package to add given a new import path
 | 
				
			||||||
func processGolistOverlay(cfg *Config, response *responseDeduper, rootDirs func() *goInfo) (modifiedPkgs, needPkgs []string, err error) {
 | 
					func (state *golistState) processGolistOverlay(response *responseDeduper) (modifiedPkgs, needPkgs []string, err error) {
 | 
				
			||||||
	havePkgs := make(map[string]string) // importPath -> non-test package ID
 | 
						havePkgs := make(map[string]string) // importPath -> non-test package ID
 | 
				
			||||||
	needPkgsSet := make(map[string]bool)
 | 
						needPkgsSet := make(map[string]bool)
 | 
				
			||||||
	modifiedPkgsSet := make(map[string]bool)
 | 
						modifiedPkgsSet := make(map[string]bool)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pkgOfDir := make(map[string][]*Package)
 | 
				
			||||||
	for _, pkg := range response.dr.Packages {
 | 
						for _, pkg := range response.dr.Packages {
 | 
				
			||||||
		// This is an approximation of import path to id. This can be
 | 
							// This is an approximation of import path to id. This can be
 | 
				
			||||||
		// wrong for tests, vendored packages, and a number of other cases.
 | 
							// wrong for tests, vendored packages, and a number of other cases.
 | 
				
			||||||
		havePkgs[pkg.PkgPath] = pkg.ID
 | 
							havePkgs[pkg.PkgPath] = pkg.ID
 | 
				
			||||||
 | 
							x := commonDir(pkg.GoFiles)
 | 
				
			||||||
 | 
							if x != "" {
 | 
				
			||||||
 | 
								pkgOfDir[x] = append(pkgOfDir[x], pkg)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// If no new imports are added, it is safe to avoid loading any needPkgs.
 | 
						// If no new imports are added, it is safe to avoid loading any needPkgs.
 | 
				
			||||||
@@ -34,7 +41,23 @@ func processGolistOverlay(cfg *Config, response *responseDeduper, rootDirs func(
 | 
				
			|||||||
	// potentially modifying the transitive set of dependencies).
 | 
						// potentially modifying the transitive set of dependencies).
 | 
				
			||||||
	var overlayAddsImports bool
 | 
						var overlayAddsImports bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for opath, contents := range cfg.Overlay {
 | 
						// If both a package and its test package are created by the overlay, we
 | 
				
			||||||
 | 
						// need the real package first. Process all non-test files before test
 | 
				
			||||||
 | 
						// files, and make the whole process deterministic while we're at it.
 | 
				
			||||||
 | 
						var overlayFiles []string
 | 
				
			||||||
 | 
						for opath := range state.cfg.Overlay {
 | 
				
			||||||
 | 
							overlayFiles = append(overlayFiles, opath)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						sort.Slice(overlayFiles, func(i, j int) bool {
 | 
				
			||||||
 | 
							iTest := strings.HasSuffix(overlayFiles[i], "_test.go")
 | 
				
			||||||
 | 
							jTest := strings.HasSuffix(overlayFiles[j], "_test.go")
 | 
				
			||||||
 | 
							if iTest != jTest {
 | 
				
			||||||
 | 
								return !iTest // non-tests are before tests.
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return overlayFiles[i] < overlayFiles[j]
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						for _, opath := range overlayFiles {
 | 
				
			||||||
 | 
							contents := state.cfg.Overlay[opath]
 | 
				
			||||||
		base := filepath.Base(opath)
 | 
							base := filepath.Base(opath)
 | 
				
			||||||
		dir := filepath.Dir(opath)
 | 
							dir := filepath.Dir(opath)
 | 
				
			||||||
		var pkg *Package           // if opath belongs to both a package and its test variant, this will be the test variant
 | 
							var pkg *Package           // if opath belongs to both a package and its test variant, this will be the test variant
 | 
				
			||||||
@@ -47,6 +70,9 @@ func processGolistOverlay(cfg *Config, response *responseDeduper, rootDirs func(
 | 
				
			|||||||
			// to the overlay.
 | 
								// to the overlay.
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							// If all the overlay files belong to a different package, change the
 | 
				
			||||||
 | 
							// package name to that package.
 | 
				
			||||||
 | 
							maybeFixPackageName(pkgName, isTestFile, pkgOfDir[dir])
 | 
				
			||||||
	nextPackage:
 | 
						nextPackage:
 | 
				
			||||||
		for _, p := range response.dr.Packages {
 | 
							for _, p := range response.dr.Packages {
 | 
				
			||||||
			if pkgName != p.Name && p.ID != "command-line-arguments" {
 | 
								if pkgName != p.Name && p.ID != "command-line-arguments" {
 | 
				
			||||||
@@ -64,14 +90,8 @@ func processGolistOverlay(cfg *Config, response *responseDeduper, rootDirs func(
 | 
				
			|||||||
					testVariantOf = p
 | 
										testVariantOf = p
 | 
				
			||||||
					continue nextPackage
 | 
										continue nextPackage
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									// We must have already seen the package of which this is a test variant.
 | 
				
			||||||
				if pkg != nil && p != pkg && pkg.PkgPath == p.PkgPath {
 | 
									if pkg != nil && p != pkg && pkg.PkgPath == p.PkgPath {
 | 
				
			||||||
					// If we've already seen the test variant,
 | 
					 | 
				
			||||||
					// make sure to label which package it is a test variant of.
 | 
					 | 
				
			||||||
					if hasTestFiles(pkg) {
 | 
					 | 
				
			||||||
						testVariantOf = p
 | 
					 | 
				
			||||||
						continue nextPackage
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					// If we have already seen the package of which this is a test variant.
 | 
					 | 
				
			||||||
					if hasTestFiles(p) {
 | 
										if hasTestFiles(p) {
 | 
				
			||||||
						testVariantOf = pkg
 | 
											testVariantOf = pkg
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
@@ -86,7 +106,10 @@ func processGolistOverlay(cfg *Config, response *responseDeduper, rootDirs func(
 | 
				
			|||||||
		if pkg == nil {
 | 
							if pkg == nil {
 | 
				
			||||||
			// Try to find the module or gopath dir the file is contained in.
 | 
								// Try to find the module or gopath dir the file is contained in.
 | 
				
			||||||
			// Then for modules, add the module opath to the beginning.
 | 
								// Then for modules, add the module opath to the beginning.
 | 
				
			||||||
			pkgPath, ok := getPkgPath(cfg, dir, rootDirs)
 | 
								pkgPath, ok, err := state.getPkgPath(dir)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, nil, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			if !ok {
 | 
								if !ok {
 | 
				
			||||||
				break
 | 
									break
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -98,24 +121,35 @@ func processGolistOverlay(cfg *Config, response *responseDeduper, rootDirs func(
 | 
				
			|||||||
			if isTestFile && !isXTest {
 | 
								if isTestFile && !isXTest {
 | 
				
			||||||
				id = fmt.Sprintf("%s [%s.test]", pkgPath, pkgPath)
 | 
									id = fmt.Sprintf("%s [%s.test]", pkgPath, pkgPath)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			// Try to reclaim a package with the same id if it exists in the response.
 | 
								// Try to reclaim a package with the same ID, if it exists in the response.
 | 
				
			||||||
			for _, p := range response.dr.Packages {
 | 
								for _, p := range response.dr.Packages {
 | 
				
			||||||
				if reclaimPackage(p, id, opath, contents) {
 | 
									if reclaimPackage(p, id, opath, contents) {
 | 
				
			||||||
					pkg = p
 | 
										pkg = p
 | 
				
			||||||
					break
 | 
										break
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			// Otherwise, create a new package
 | 
								// Otherwise, create a new package.
 | 
				
			||||||
			if pkg == nil {
 | 
								if pkg == nil {
 | 
				
			||||||
				pkg = &Package{PkgPath: pkgPath, ID: id, Name: pkgName, Imports: make(map[string]*Package)}
 | 
									pkg = &Package{
 | 
				
			||||||
 | 
										PkgPath: pkgPath,
 | 
				
			||||||
 | 
										ID:      id,
 | 
				
			||||||
 | 
										Name:    pkgName,
 | 
				
			||||||
 | 
										Imports: make(map[string]*Package),
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				response.addPackage(pkg)
 | 
									response.addPackage(pkg)
 | 
				
			||||||
				havePkgs[pkg.PkgPath] = id
 | 
									havePkgs[pkg.PkgPath] = id
 | 
				
			||||||
				// Add the production package's sources for a test variant.
 | 
									// Add the production package's sources for a test variant.
 | 
				
			||||||
				if isTestFile && !isXTest && testVariantOf != nil {
 | 
									if isTestFile && !isXTest && testVariantOf != nil {
 | 
				
			||||||
					pkg.GoFiles = append(pkg.GoFiles, testVariantOf.GoFiles...)
 | 
										pkg.GoFiles = append(pkg.GoFiles, testVariantOf.GoFiles...)
 | 
				
			||||||
					pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, testVariantOf.CompiledGoFiles...)
 | 
										pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, testVariantOf.CompiledGoFiles...)
 | 
				
			||||||
 | 
										// Add the package under test and its imports to the test variant.
 | 
				
			||||||
 | 
										pkg.forTest = testVariantOf.PkgPath
 | 
				
			||||||
 | 
										for k, v := range testVariantOf.Imports {
 | 
				
			||||||
 | 
											pkg.Imports[k] = &Package{ID: v.ID}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									// TODO(rstambler): Handle forTest for x_tests.
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if !fileExists {
 | 
							if !fileExists {
 | 
				
			||||||
			pkg.GoFiles = append(pkg.GoFiles, opath)
 | 
								pkg.GoFiles = append(pkg.GoFiles, opath)
 | 
				
			||||||
@@ -130,42 +164,47 @@ func processGolistOverlay(cfg *Config, response *responseDeduper, rootDirs func(
 | 
				
			|||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		for _, imp := range imports {
 | 
							for _, imp := range imports {
 | 
				
			||||||
			_, found := pkg.Imports[imp]
 | 
								// TODO(rstambler): If the package is an x test and the import has
 | 
				
			||||||
			if !found {
 | 
								// a test variant, make sure to replace it.
 | 
				
			||||||
 | 
								if _, found := pkg.Imports[imp]; found {
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			overlayAddsImports = true
 | 
								overlayAddsImports = true
 | 
				
			||||||
				// TODO(matloob): Handle cases when the following block isn't correct.
 | 
					 | 
				
			||||||
				// These include imports of vendored packages, etc.
 | 
					 | 
				
			||||||
			id, ok := havePkgs[imp]
 | 
								id, ok := havePkgs[imp]
 | 
				
			||||||
			if !ok {
 | 
								if !ok {
 | 
				
			||||||
					id = imp
 | 
									var err error
 | 
				
			||||||
 | 
									id, err = state.resolveImport(dir, imp)
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										return nil, nil, err
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			pkg.Imports[imp] = &Package{ID: id}
 | 
								pkg.Imports[imp] = &Package{ID: id}
 | 
				
			||||||
				// Add dependencies to the non-test variant version of this package as wel.
 | 
								// Add dependencies to the non-test variant version of this package as well.
 | 
				
			||||||
			if testVariantOf != nil {
 | 
								if testVariantOf != nil {
 | 
				
			||||||
				testVariantOf.Imports[imp] = &Package{ID: id}
 | 
									testVariantOf.Imports[imp] = &Package{ID: id}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
		continue
 | 
					
 | 
				
			||||||
 | 
						// toPkgPath guesses the package path given the id.
 | 
				
			||||||
 | 
						toPkgPath := func(sourceDir, id string) (string, error) {
 | 
				
			||||||
 | 
							if i := strings.IndexByte(id, ' '); i >= 0 {
 | 
				
			||||||
 | 
								return state.resolveImport(sourceDir, id[:i])
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return state.resolveImport(sourceDir, id)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// toPkgPath tries to guess the package path given the id.
 | 
						// Now that new packages have been created, do another pass to determine
 | 
				
			||||||
	// This isn't always correct -- it's certainly wrong for
 | 
						// the new set of missing packages.
 | 
				
			||||||
	// vendored packages' paths.
 | 
					 | 
				
			||||||
	toPkgPath := func(id string) string {
 | 
					 | 
				
			||||||
		// TODO(matloob): Handle vendor paths.
 | 
					 | 
				
			||||||
		i := strings.IndexByte(id, ' ')
 | 
					 | 
				
			||||||
		if i >= 0 {
 | 
					 | 
				
			||||||
			return id[:i]
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return id
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Do another pass now that new packages have been created to determine the
 | 
					 | 
				
			||||||
	// set of missing packages.
 | 
					 | 
				
			||||||
	for _, pkg := range response.dr.Packages {
 | 
						for _, pkg := range response.dr.Packages {
 | 
				
			||||||
		for _, imp := range pkg.Imports {
 | 
							for _, imp := range pkg.Imports {
 | 
				
			||||||
			pkgPath := toPkgPath(imp.ID)
 | 
								if len(pkg.GoFiles) == 0 {
 | 
				
			||||||
 | 
									return nil, nil, fmt.Errorf("cannot resolve imports for package %q with no Go files", pkg.PkgPath)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								pkgPath, err := toPkgPath(filepath.Dir(pkg.GoFiles[0]), imp.ID)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, nil, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			if _, ok := havePkgs[pkgPath]; !ok {
 | 
								if _, ok := havePkgs[pkgPath]; !ok {
 | 
				
			||||||
				needPkgsSet[pkgPath] = true
 | 
									needPkgsSet[pkgPath] = true
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -185,6 +224,52 @@ func processGolistOverlay(cfg *Config, response *responseDeduper, rootDirs func(
 | 
				
			|||||||
	return modifiedPkgs, needPkgs, err
 | 
						return modifiedPkgs, needPkgs, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// resolveImport finds the the ID of a package given its import path.
 | 
				
			||||||
 | 
					// In particular, it will find the right vendored copy when in GOPATH mode.
 | 
				
			||||||
 | 
					func (state *golistState) resolveImport(sourceDir, importPath string) (string, error) {
 | 
				
			||||||
 | 
						env, err := state.getEnv()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if env["GOMOD"] != "" {
 | 
				
			||||||
 | 
							return importPath, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						searchDir := sourceDir
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							vendorDir := filepath.Join(searchDir, "vendor")
 | 
				
			||||||
 | 
							exists, ok := state.vendorDirs[vendorDir]
 | 
				
			||||||
 | 
							if !ok {
 | 
				
			||||||
 | 
								info, err := os.Stat(vendorDir)
 | 
				
			||||||
 | 
								exists = err == nil && info.IsDir()
 | 
				
			||||||
 | 
								state.vendorDirs[vendorDir] = exists
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if exists {
 | 
				
			||||||
 | 
								vendoredPath := filepath.Join(vendorDir, importPath)
 | 
				
			||||||
 | 
								if info, err := os.Stat(vendoredPath); err == nil && info.IsDir() {
 | 
				
			||||||
 | 
									// We should probably check for .go files here, but shame on anyone who fools us.
 | 
				
			||||||
 | 
									path, ok, err := state.getPkgPath(vendoredPath)
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										return "", err
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if ok {
 | 
				
			||||||
 | 
										return path, nil
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// We know we've hit the top of the filesystem when we Dir / and get /,
 | 
				
			||||||
 | 
							// or C:\ and get C:\, etc.
 | 
				
			||||||
 | 
							next := filepath.Dir(searchDir)
 | 
				
			||||||
 | 
							if next == searchDir {
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							searchDir = next
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return importPath, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func hasTestFiles(p *Package) bool {
 | 
					func hasTestFiles(p *Package) bool {
 | 
				
			||||||
	for _, f := range p.GoFiles {
 | 
						for _, f := range p.GoFiles {
 | 
				
			||||||
		if strings.HasSuffix(f, "_test.go") {
 | 
							if strings.HasSuffix(f, "_test.go") {
 | 
				
			||||||
@@ -194,44 +279,69 @@ func hasTestFiles(p *Package) bool {
 | 
				
			|||||||
	return false
 | 
						return false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// determineRootDirs returns a mapping from directories code can be contained in to the
 | 
					// determineRootDirs returns a mapping from absolute directories that could
 | 
				
			||||||
// corresponding import path prefixes of those directories.
 | 
					// contain code to their corresponding import path prefixes.
 | 
				
			||||||
// Its result is used to try to determine the import path for a package containing
 | 
					func (state *golistState) determineRootDirs() (map[string]string, error) {
 | 
				
			||||||
// an overlay file.
 | 
						env, err := state.getEnv()
 | 
				
			||||||
func determineRootDirs(cfg *Config) map[string]string {
 | 
					 | 
				
			||||||
	// Assume modules first:
 | 
					 | 
				
			||||||
	out, err := invokeGo(cfg, "list", "-m", "-json", "all")
 | 
					 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return determineRootDirsGOPATH(cfg)
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if env["GOMOD"] != "" {
 | 
				
			||||||
 | 
							state.rootsOnce.Do(func() {
 | 
				
			||||||
 | 
								state.rootDirs, state.rootDirsError = state.determineRootDirsModules()
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							state.rootsOnce.Do(func() {
 | 
				
			||||||
 | 
								state.rootDirs, state.rootDirsError = state.determineRootDirsGOPATH()
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return state.rootDirs, state.rootDirsError
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (state *golistState) determineRootDirsModules() (map[string]string, error) {
 | 
				
			||||||
 | 
						// This will only return the root directory for the main module.
 | 
				
			||||||
 | 
						// For now we only support overlays in main modules.
 | 
				
			||||||
 | 
						// Editing files in the module cache isn't a great idea, so we don't
 | 
				
			||||||
 | 
						// plan to ever support that, but editing files in replaced modules
 | 
				
			||||||
 | 
						// is something we may want to support. To do that, we'll want to
 | 
				
			||||||
 | 
						// do a go list -m to determine the replaced module's module path and
 | 
				
			||||||
 | 
						// directory, and then a go list -m {{with .Replace}}{{.Dir}}{{end}} <replaced module's path>
 | 
				
			||||||
 | 
						// from the main module to determine if that module is actually a replacement.
 | 
				
			||||||
 | 
						// See bcmills's comment here: https://github.com/golang/go/issues/37629#issuecomment-594179751
 | 
				
			||||||
 | 
						// for more information.
 | 
				
			||||||
 | 
						out, err := state.invokeGo("list", "-m", "-json")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	m := map[string]string{}
 | 
						m := map[string]string{}
 | 
				
			||||||
	type jsonMod struct{ Path, Dir string }
 | 
						type jsonMod struct{ Path, Dir string }
 | 
				
			||||||
	for dec := json.NewDecoder(out); dec.More(); {
 | 
						for dec := json.NewDecoder(out); dec.More(); {
 | 
				
			||||||
		mod := new(jsonMod)
 | 
							mod := new(jsonMod)
 | 
				
			||||||
		if err := dec.Decode(mod); err != nil {
 | 
							if err := dec.Decode(mod); err != nil {
 | 
				
			||||||
			return m // Give up and return an empty map. Package won't be found for overlay.
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if mod.Dir != "" && mod.Path != "" {
 | 
							if mod.Dir != "" && mod.Path != "" {
 | 
				
			||||||
			// This is a valid module; add it to the map.
 | 
								// This is a valid module; add it to the map.
 | 
				
			||||||
			m[mod.Dir] = mod.Path
 | 
								absDir, err := filepath.Abs(mod.Dir)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								m[absDir] = mod.Path
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return m
 | 
						return m, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func determineRootDirsGOPATH(cfg *Config) map[string]string {
 | 
					func (state *golistState) determineRootDirsGOPATH() (map[string]string, error) {
 | 
				
			||||||
	m := map[string]string{}
 | 
						m := map[string]string{}
 | 
				
			||||||
	out, err := invokeGo(cfg, "env", "GOPATH")
 | 
						for _, dir := range filepath.SplitList(state.mustGetEnv()["GOPATH"]) {
 | 
				
			||||||
 | 
							absDir, err := filepath.Abs(dir)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
		// Could not determine root dir mapping. Everything is best-effort, so just return an empty map.
 | 
								return nil, err
 | 
				
			||||||
		// When we try to find the import path for a directory, there will be no root-dir match and
 | 
					 | 
				
			||||||
		// we'll give up.
 | 
					 | 
				
			||||||
		return m
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	for _, p := range filepath.SplitList(string(bytes.TrimSpace(out.Bytes()))) {
 | 
							m[filepath.Join(absDir, "src")] = ""
 | 
				
			||||||
		m[filepath.Join(p, "src")] = ""
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return m
 | 
						return m, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func extractImports(filename string, contents []byte) ([]string, error) {
 | 
					func extractImports(filename string, contents []byte) ([]string, error) {
 | 
				
			||||||
@@ -291,3 +401,57 @@ func extractPackageName(filename string, contents []byte) (string, bool) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return f.Name.Name, true
 | 
						return f.Name.Name, true
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func commonDir(a []string) string {
 | 
				
			||||||
 | 
						seen := make(map[string]bool)
 | 
				
			||||||
 | 
						x := append([]string{}, a...)
 | 
				
			||||||
 | 
						for _, f := range x {
 | 
				
			||||||
 | 
							seen[filepath.Dir(f)] = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if len(seen) > 1 {
 | 
				
			||||||
 | 
							log.Fatalf("commonDir saw %v for %v", seen, x)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for k := range seen {
 | 
				
			||||||
 | 
							// len(seen) == 1
 | 
				
			||||||
 | 
							return k
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return "" // no files
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// It is possible that the files in the disk directory dir have a different package
 | 
				
			||||||
 | 
					// name from newName, which is deduced from the overlays. If they all have a different
 | 
				
			||||||
 | 
					// package name, and they all have the same package name, then that name becomes
 | 
				
			||||||
 | 
					// the package name.
 | 
				
			||||||
 | 
					// It returns true if it changes the package name, false otherwise.
 | 
				
			||||||
 | 
					func maybeFixPackageName(newName string, isTestFile bool, pkgsOfDir []*Package) {
 | 
				
			||||||
 | 
						names := make(map[string]int)
 | 
				
			||||||
 | 
						for _, p := range pkgsOfDir {
 | 
				
			||||||
 | 
							names[p.Name]++
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if len(names) != 1 {
 | 
				
			||||||
 | 
							// some files are in different packages
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var oldName string
 | 
				
			||||||
 | 
						for k := range names {
 | 
				
			||||||
 | 
							oldName = k
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if newName == oldName {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// We might have a case where all of the package names in the directory are
 | 
				
			||||||
 | 
						// the same, but the overlay file is for an x test, which belongs to its
 | 
				
			||||||
 | 
						// own package. If the x test does not yet exist on disk, we may not yet
 | 
				
			||||||
 | 
						// have its package name on disk, but we should not rename the packages.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// We use a heuristic to determine if this file belongs to an x test:
 | 
				
			||||||
 | 
						// The test file should have a package name whose package name has a _test
 | 
				
			||||||
 | 
						// suffix or looks like "newName_test".
 | 
				
			||||||
 | 
						maybeXTest := strings.HasPrefix(oldName+"_test", newName) || strings.HasSuffix(newName, "_test")
 | 
				
			||||||
 | 
						if isTestFile && maybeXTest {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, p := range pkgsOfDir {
 | 
				
			||||||
 | 
							p.Name = newName
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/tools/go/packages/loadmode_string.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/tools/go/packages/loadmode_string.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -38,7 +38,7 @@ var modeStrings = []string{
 | 
				
			|||||||
func (mod LoadMode) String() string {
 | 
					func (mod LoadMode) String() string {
 | 
				
			||||||
	m := mod
 | 
						m := mod
 | 
				
			||||||
	if m == 0 {
 | 
						if m == 0 {
 | 
				
			||||||
		return fmt.Sprintf("LoadMode(0)")
 | 
							return "LoadMode(0)"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var out []string
 | 
						var out []string
 | 
				
			||||||
	for i, x := range allModes {
 | 
						for i, x := range allModes {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										116
									
								
								vendor/golang.org/x/tools/go/packages/packages.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										116
									
								
								vendor/golang.org/x/tools/go/packages/packages.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -21,8 +21,12 @@ import (
 | 
				
			|||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"golang.org/x/tools/go/gcexportdata"
 | 
						"golang.org/x/tools/go/gcexportdata"
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/gocommand"
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/packagesinternal"
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/typesinternal"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// A LoadMode controls the amount of detail to return when loading.
 | 
					// A LoadMode controls the amount of detail to return when loading.
 | 
				
			||||||
@@ -34,6 +38,9 @@ import (
 | 
				
			|||||||
// Load may return more information than requested.
 | 
					// Load may return more information than requested.
 | 
				
			||||||
type LoadMode int
 | 
					type LoadMode int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO(matloob): When a V2 of go/packages is released, rename NeedExportsFile to
 | 
				
			||||||
 | 
					// NeedExportFile to make it consistent with the Package field it's adding.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	// NeedName adds Name and PkgPath.
 | 
						// NeedName adds Name and PkgPath.
 | 
				
			||||||
	NeedName LoadMode = 1 << iota
 | 
						NeedName LoadMode = 1 << iota
 | 
				
			||||||
@@ -51,7 +58,7 @@ const (
 | 
				
			|||||||
	// NeedDeps adds the fields requested by the LoadMode in the packages in Imports.
 | 
						// NeedDeps adds the fields requested by the LoadMode in the packages in Imports.
 | 
				
			||||||
	NeedDeps
 | 
						NeedDeps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// NeedExportsFile adds ExportsFile.
 | 
						// NeedExportsFile adds ExportFile.
 | 
				
			||||||
	NeedExportsFile
 | 
						NeedExportsFile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// NeedTypes adds Types, Fset, and IllTyped.
 | 
						// NeedTypes adds Types, Fset, and IllTyped.
 | 
				
			||||||
@@ -65,6 +72,13 @@ const (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// NeedTypesSizes adds TypesSizes.
 | 
						// NeedTypesSizes adds TypesSizes.
 | 
				
			||||||
	NeedTypesSizes
 | 
						NeedTypesSizes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// typecheckCgo enables full support for type checking cgo. Requires Go 1.15+.
 | 
				
			||||||
 | 
						// Modifies CompiledGoFiles and Types, and has no effect on its own.
 | 
				
			||||||
 | 
						typecheckCgo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// NeedModule adds Module.
 | 
				
			||||||
 | 
						NeedModule
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -123,6 +137,9 @@ type Config struct {
 | 
				
			|||||||
	//
 | 
						//
 | 
				
			||||||
	Env []string
 | 
						Env []string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// gocmdRunner guards go command calls from concurrency errors.
 | 
				
			||||||
 | 
						gocmdRunner *gocommand.Runner
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// BuildFlags is a list of command-line flags to be passed through to
 | 
						// BuildFlags is a list of command-line flags to be passed through to
 | 
				
			||||||
	// the build system's query tool.
 | 
						// the build system's query tool.
 | 
				
			||||||
	BuildFlags []string
 | 
						BuildFlags []string
 | 
				
			||||||
@@ -174,6 +191,13 @@ type driver func(cfg *Config, patterns ...string) (*driverResponse, error)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// driverResponse contains the results for a driver query.
 | 
					// driverResponse contains the results for a driver query.
 | 
				
			||||||
type driverResponse struct {
 | 
					type driverResponse struct {
 | 
				
			||||||
 | 
						// NotHandled is returned if the request can't be handled by the current
 | 
				
			||||||
 | 
						// driver. If an external driver returns a response with NotHandled, the
 | 
				
			||||||
 | 
						// rest of the driverResponse is ignored, and go/packages will fallback
 | 
				
			||||||
 | 
						// to the next driver. If go/packages is extended in the future to support
 | 
				
			||||||
 | 
						// lists of multiple drivers, go/packages will fall back to the next driver.
 | 
				
			||||||
 | 
						NotHandled bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Sizes, if not nil, is the types.Sizes to use when type checking.
 | 
						// Sizes, if not nil, is the types.Sizes to use when type checking.
 | 
				
			||||||
	Sizes *types.StdSizes
 | 
						Sizes *types.StdSizes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -215,14 +239,22 @@ func Load(cfg *Config, patterns ...string) ([]*Package, error) {
 | 
				
			|||||||
	return l.refine(response.Roots, response.Packages...)
 | 
						return l.refine(response.Roots, response.Packages...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// defaultDriver is a driver that looks for an external driver binary, and if
 | 
					// defaultDriver is a driver that implements go/packages' fallback behavior.
 | 
				
			||||||
// it does not find it falls back to the built in go list driver.
 | 
					// It will try to request to an external driver, if one exists. If there's
 | 
				
			||||||
 | 
					// no external driver, or the driver returns a response with NotHandled set,
 | 
				
			||||||
 | 
					// defaultDriver will fall back to the go list driver.
 | 
				
			||||||
func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, error) {
 | 
					func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, error) {
 | 
				
			||||||
	driver := findExternalDriver(cfg)
 | 
						driver := findExternalDriver(cfg)
 | 
				
			||||||
	if driver == nil {
 | 
						if driver == nil {
 | 
				
			||||||
		driver = goListDriver
 | 
							driver = goListDriver
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return driver(cfg, patterns...)
 | 
						response, err := driver(cfg, patterns...)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return response, err
 | 
				
			||||||
 | 
						} else if response.NotHandled {
 | 
				
			||||||
 | 
							return goListDriver(cfg, patterns...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return response, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// A Package describes a loaded Go package.
 | 
					// A Package describes a loaded Go package.
 | 
				
			||||||
@@ -249,7 +281,7 @@ type Package struct {
 | 
				
			|||||||
	GoFiles []string
 | 
						GoFiles []string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// CompiledGoFiles lists the absolute file paths of the package's source
 | 
						// CompiledGoFiles lists the absolute file paths of the package's source
 | 
				
			||||||
	// files that were presented to the compiler.
 | 
						// files that are suitable for type checking.
 | 
				
			||||||
	// This may differ from GoFiles if files are processed before compilation.
 | 
						// This may differ from GoFiles if files are processed before compilation.
 | 
				
			||||||
	CompiledGoFiles []string
 | 
						CompiledGoFiles []string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -292,6 +324,44 @@ type Package struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// TypesSizes provides the effective size function for types in TypesInfo.
 | 
						// TypesSizes provides the effective size function for types in TypesInfo.
 | 
				
			||||||
	TypesSizes types.Sizes
 | 
						TypesSizes types.Sizes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// forTest is the package under test, if any.
 | 
				
			||||||
 | 
						forTest string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// module is the module information for the package if it exists.
 | 
				
			||||||
 | 
						Module *Module
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Module provides module information for a package.
 | 
				
			||||||
 | 
					type Module struct {
 | 
				
			||||||
 | 
						Path      string       // module path
 | 
				
			||||||
 | 
						Version   string       // module version
 | 
				
			||||||
 | 
						Replace   *Module      // replaced by this module
 | 
				
			||||||
 | 
						Time      *time.Time   // time version was created
 | 
				
			||||||
 | 
						Main      bool         // is this the main module?
 | 
				
			||||||
 | 
						Indirect  bool         // is this module only an indirect dependency of main module?
 | 
				
			||||||
 | 
						Dir       string       // directory holding files for this module, if any
 | 
				
			||||||
 | 
						GoMod     string       // path to go.mod file used when loading this module, if any
 | 
				
			||||||
 | 
						GoVersion string       // go version used in module
 | 
				
			||||||
 | 
						Error     *ModuleError // error loading module
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ModuleError holds errors loading a module.
 | 
				
			||||||
 | 
					type ModuleError struct {
 | 
				
			||||||
 | 
						Err string // the error itself
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						packagesinternal.GetForTest = func(p interface{}) string {
 | 
				
			||||||
 | 
							return p.(*Package).forTest
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						packagesinternal.GetGoCmdRunner = func(config interface{}) *gocommand.Runner {
 | 
				
			||||||
 | 
							return config.(*Config).gocmdRunner
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						packagesinternal.SetGoCmdRunner = func(config interface{}, runner *gocommand.Runner) {
 | 
				
			||||||
 | 
							config.(*Config).gocmdRunner = runner
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						packagesinternal.TypecheckCgo = int(typecheckCgo)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// An Error describes a problem with a package's metadata, syntax, or types.
 | 
					// An Error describes a problem with a package's metadata, syntax, or types.
 | 
				
			||||||
@@ -454,6 +524,9 @@ func newLoader(cfg *Config) *loader {
 | 
				
			|||||||
	if ld.Config.Env == nil {
 | 
						if ld.Config.Env == nil {
 | 
				
			||||||
		ld.Config.Env = os.Environ()
 | 
							ld.Config.Env = os.Environ()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if ld.Config.gocmdRunner == nil {
 | 
				
			||||||
 | 
							ld.Config.gocmdRunner = &gocommand.Runner{}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if ld.Context == nil {
 | 
						if ld.Context == nil {
 | 
				
			||||||
		ld.Context = context.Background()
 | 
							ld.Context = context.Background()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -500,12 +573,23 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
 | 
				
			|||||||
		if i, found := rootMap[pkg.ID]; found {
 | 
							if i, found := rootMap[pkg.ID]; found {
 | 
				
			||||||
			rootIndex = i
 | 
								rootIndex = i
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Overlays can invalidate export data.
 | 
				
			||||||
 | 
							// TODO(matloob): make this check fine-grained based on dependencies on overlaid files
 | 
				
			||||||
 | 
							exportDataInvalid := len(ld.Overlay) > 0 || pkg.ExportFile == "" && pkg.PkgPath != "unsafe"
 | 
				
			||||||
 | 
							// This package needs type information if the caller requested types and the package is
 | 
				
			||||||
 | 
							// either a root, or it's a non-root and the user requested dependencies ...
 | 
				
			||||||
 | 
							needtypes := (ld.Mode&NeedTypes|NeedTypesInfo != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0))
 | 
				
			||||||
 | 
							// This package needs source if the call requested source (or types info, which implies source)
 | 
				
			||||||
 | 
							// and the package is either a root, or itas a non- root and the user requested dependencies...
 | 
				
			||||||
 | 
							needsrc := ((ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) ||
 | 
				
			||||||
 | 
								// ... or if we need types and the exportData is invalid. We fall back to (incompletely)
 | 
				
			||||||
 | 
								// typechecking packages from source if they fail to compile.
 | 
				
			||||||
 | 
								(ld.Mode&NeedTypes|NeedTypesInfo != 0 && exportDataInvalid)) && pkg.PkgPath != "unsafe"
 | 
				
			||||||
		lpkg := &loaderPackage{
 | 
							lpkg := &loaderPackage{
 | 
				
			||||||
			Package:   pkg,
 | 
								Package:   pkg,
 | 
				
			||||||
			needtypes: (ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && ld.Mode&NeedDeps != 0 && rootIndex < 0) || rootIndex >= 0,
 | 
								needtypes: needtypes,
 | 
				
			||||||
			needsrc: (ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && ld.Mode&NeedDeps != 0 && rootIndex < 0) || rootIndex >= 0 ||
 | 
								needsrc:   needsrc,
 | 
				
			||||||
				len(ld.Overlay) > 0 || // Overlays can invalidate export data. TODO(matloob): make this check fine-grained based on dependencies on overlaid files
 | 
					 | 
				
			||||||
				pkg.ExportFile == "" && pkg.PkgPath != "unsafe",
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ld.pkgs[lpkg.ID] = lpkg
 | 
							ld.pkgs[lpkg.ID] = lpkg
 | 
				
			||||||
		if rootIndex >= 0 {
 | 
							if rootIndex >= 0 {
 | 
				
			||||||
@@ -660,6 +744,9 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
 | 
				
			|||||||
		if ld.requestedMode&NeedTypesSizes == 0 {
 | 
							if ld.requestedMode&NeedTypesSizes == 0 {
 | 
				
			||||||
			ld.pkgs[i].TypesSizes = nil
 | 
								ld.pkgs[i].TypesSizes = nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							if ld.requestedMode&NeedModule == 0 {
 | 
				
			||||||
 | 
								ld.pkgs[i].Module = nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return result, nil
 | 
						return result, nil
 | 
				
			||||||
@@ -713,7 +800,7 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
 | 
				
			|||||||
	// which would then require that such created packages be explicitly
 | 
						// which would then require that such created packages be explicitly
 | 
				
			||||||
	// inserted back into the Import graph as a final step after export data loading.
 | 
						// inserted back into the Import graph as a final step after export data loading.
 | 
				
			||||||
	// The Diamond test exercises this case.
 | 
						// The Diamond test exercises this case.
 | 
				
			||||||
	if !lpkg.needtypes {
 | 
						if !lpkg.needtypes && !lpkg.needsrc {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !lpkg.needsrc {
 | 
						if !lpkg.needsrc {
 | 
				
			||||||
@@ -835,6 +922,15 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
 | 
				
			|||||||
		Error: appendError,
 | 
							Error: appendError,
 | 
				
			||||||
		Sizes: ld.sizes,
 | 
							Sizes: ld.sizes,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if (ld.Mode & typecheckCgo) != 0 {
 | 
				
			||||||
 | 
							if !typesinternal.SetUsesCgo(tc) {
 | 
				
			||||||
 | 
								appendError(Error{
 | 
				
			||||||
 | 
									Msg:  "typecheckCgo requires Go 1.15+",
 | 
				
			||||||
 | 
									Kind: ListError,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax)
 | 
						types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lpkg.importErrors = nil // no longer needed
 | 
						lpkg.importErrors = nil // no longer needed
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								vendor/golang.org/x/tools/imports/forward.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/golang.org/x/tools/imports/forward.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -4,6 +4,8 @@ package imports // import "golang.org/x/tools/imports"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"go/build"
 | 
						"go/build"
 | 
				
			||||||
 | 
						"log"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intimp "golang.org/x/tools/internal/imports"
 | 
						intimp "golang.org/x/tools/internal/imports"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -42,7 +44,10 @@ func Process(filename string, src []byte, opt *Options) ([]byte, error) {
 | 
				
			|||||||
		Env: &intimp.ProcessEnv{
 | 
							Env: &intimp.ProcessEnv{
 | 
				
			||||||
			GOPATH:      build.Default.GOPATH,
 | 
								GOPATH:      build.Default.GOPATH,
 | 
				
			||||||
			GOROOT:      build.Default.GOROOT,
 | 
								GOROOT:      build.Default.GOROOT,
 | 
				
			||||||
			Debug:       Debug,
 | 
								GOFLAGS:     os.Getenv("GOFLAGS"),
 | 
				
			||||||
 | 
								GO111MODULE: os.Getenv("GO111MODULE"),
 | 
				
			||||||
 | 
								GOPROXY:     os.Getenv("GOPROXY"),
 | 
				
			||||||
 | 
								GOSUMDB:     os.Getenv("GOSUMDB"),
 | 
				
			||||||
			LocalPrefix: LocalPrefix,
 | 
								LocalPrefix: LocalPrefix,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		AllErrors:  opt.AllErrors,
 | 
							AllErrors:  opt.AllErrors,
 | 
				
			||||||
@@ -52,6 +57,9 @@ func Process(filename string, src []byte, opt *Options) ([]byte, error) {
 | 
				
			|||||||
		TabIndent:  opt.TabIndent,
 | 
							TabIndent:  opt.TabIndent,
 | 
				
			||||||
		TabWidth:   opt.TabWidth,
 | 
							TabWidth:   opt.TabWidth,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if Debug {
 | 
				
			||||||
 | 
							intopt.Env.Logf = log.Printf
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return intimp.Process(filename, src, intopt)
 | 
						return intimp.Process(filename, src, intopt)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								vendor/golang.org/x/tools/internal/event/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								vendor/golang.org/x/tools/internal/event/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "doc.go",
 | 
				
			||||||
 | 
					        "event.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/event",
 | 
				
			||||||
 | 
					    importpath = "golang.org/x/tools/internal/event",
 | 
				
			||||||
 | 
					    visibility = ["//vendor/golang.org/x/tools:__subpackages__"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/event/core:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/event/keys:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/event/label:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        ":package-srcs",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/event/core:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/event/keys:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/event/label:all-srcs",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										31
									
								
								vendor/golang.org/x/tools/internal/event/core/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/golang.org/x/tools/internal/event/core/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "event.go",
 | 
				
			||||||
 | 
					        "export.go",
 | 
				
			||||||
 | 
					        "fast.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/event/core",
 | 
				
			||||||
 | 
					    importpath = "golang.org/x/tools/internal/event/core",
 | 
				
			||||||
 | 
					    visibility = ["//vendor/golang.org/x/tools:__subpackages__"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/event/keys:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/golang.org/x/tools/internal/event/label:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										85
									
								
								vendor/golang.org/x/tools/internal/event/core/event.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								vendor/golang.org/x/tools/internal/event/core/event.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
				
			|||||||
 | 
					// Copyright 2019 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Package core provides support for event based telemetry.
 | 
				
			||||||
 | 
					package core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/event/label"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Event holds the information about an event of note that ocurred.
 | 
				
			||||||
 | 
					type Event struct {
 | 
				
			||||||
 | 
						at time.Time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// As events are often on the stack, storing the first few labels directly
 | 
				
			||||||
 | 
						// in the event can avoid an allocation at all for the very common cases of
 | 
				
			||||||
 | 
						// simple events.
 | 
				
			||||||
 | 
						// The length needs to be large enough to cope with the majority of events
 | 
				
			||||||
 | 
						// but no so large as to cause undue stack pressure.
 | 
				
			||||||
 | 
						// A log message with two values will use 3 labels (one for each value and
 | 
				
			||||||
 | 
						// one for the message itself).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static  [3]label.Label // inline storage for the first few labels
 | 
				
			||||||
 | 
						dynamic []label.Label  // dynamically sized storage for remaining labels
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// eventLabelMap implements label.Map for a the labels of an Event.
 | 
				
			||||||
 | 
					type eventLabelMap struct {
 | 
				
			||||||
 | 
						event Event
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ev Event) At() time.Time { return ev.at }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ev Event) Format(f fmt.State, r rune) {
 | 
				
			||||||
 | 
						if !ev.at.IsZero() {
 | 
				
			||||||
 | 
							fmt.Fprint(f, ev.at.Format("2006/01/02 15:04:05 "))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for index := 0; ev.Valid(index); index++ {
 | 
				
			||||||
 | 
							if l := ev.Label(index); l.Valid() {
 | 
				
			||||||
 | 
								fmt.Fprintf(f, "\n\t%v", l)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ev Event) Valid(index int) bool {
 | 
				
			||||||
 | 
						return index >= 0 && index < len(ev.static)+len(ev.dynamic)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ev Event) Label(index int) label.Label {
 | 
				
			||||||
 | 
						if index < len(ev.static) {
 | 
				
			||||||
 | 
							return ev.static[index]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ev.dynamic[index-len(ev.static)]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ev Event) Find(key label.Key) label.Label {
 | 
				
			||||||
 | 
						for _, l := range ev.static {
 | 
				
			||||||
 | 
							if l.Key() == key {
 | 
				
			||||||
 | 
								return l
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, l := range ev.dynamic {
 | 
				
			||||||
 | 
							if l.Key() == key {
 | 
				
			||||||
 | 
								return l
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return label.Label{}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func MakeEvent(static [3]label.Label, labels []label.Label) Event {
 | 
				
			||||||
 | 
						return Event{
 | 
				
			||||||
 | 
							static:  static,
 | 
				
			||||||
 | 
							dynamic: labels,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// CloneEvent event returns a copy of the event with the time adjusted to at.
 | 
				
			||||||
 | 
					func CloneEvent(ev Event, at time.Time) Event {
 | 
				
			||||||
 | 
						ev.at = at
 | 
				
			||||||
 | 
						return ev
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										70
									
								
								vendor/golang.org/x/tools/internal/event/core/export.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								vendor/golang.org/x/tools/internal/event/core/export.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					// Copyright 2019 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"sync/atomic"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
						"unsafe"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/event/label"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Exporter is a function that handles events.
 | 
				
			||||||
 | 
					// It may return a modified context and event.
 | 
				
			||||||
 | 
					type Exporter func(context.Context, Event, label.Map) context.Context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						exporter unsafe.Pointer
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SetExporter sets the global exporter function that handles all events.
 | 
				
			||||||
 | 
					// The exporter is called synchronously from the event call site, so it should
 | 
				
			||||||
 | 
					// return quickly so as not to hold up user code.
 | 
				
			||||||
 | 
					func SetExporter(e Exporter) {
 | 
				
			||||||
 | 
						p := unsafe.Pointer(&e)
 | 
				
			||||||
 | 
						if e == nil {
 | 
				
			||||||
 | 
							// &e is always valid, and so p is always valid, but for the early abort
 | 
				
			||||||
 | 
							// of ProcessEvent to be efficient it needs to make the nil check on the
 | 
				
			||||||
 | 
							// pointer without having to dereference it, so we make the nil function
 | 
				
			||||||
 | 
							// also a nil pointer
 | 
				
			||||||
 | 
							p = nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						atomic.StorePointer(&exporter, p)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// deliver is called to deliver an event to the supplied exporter.
 | 
				
			||||||
 | 
					// it will fill in the time.
 | 
				
			||||||
 | 
					func deliver(ctx context.Context, exporter Exporter, ev Event) context.Context {
 | 
				
			||||||
 | 
						// add the current time to the event
 | 
				
			||||||
 | 
						ev.at = time.Now()
 | 
				
			||||||
 | 
						// hand the event off to the current exporter
 | 
				
			||||||
 | 
						return exporter(ctx, ev, ev)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Export is called to deliver an event to the global exporter if set.
 | 
				
			||||||
 | 
					func Export(ctx context.Context, ev Event) context.Context {
 | 
				
			||||||
 | 
						// get the global exporter and abort early if there is not one
 | 
				
			||||||
 | 
						exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter))
 | 
				
			||||||
 | 
						if exporterPtr == nil {
 | 
				
			||||||
 | 
							return ctx
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return deliver(ctx, *exporterPtr, ev)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ExportPair is called to deliver a start event to the supplied exporter.
 | 
				
			||||||
 | 
					// It also returns a function that will deliver the end event to the same
 | 
				
			||||||
 | 
					// exporter.
 | 
				
			||||||
 | 
					// It will fill in the time.
 | 
				
			||||||
 | 
					func ExportPair(ctx context.Context, begin, end Event) (context.Context, func()) {
 | 
				
			||||||
 | 
						// get the global exporter and abort early if there is not one
 | 
				
			||||||
 | 
						exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter))
 | 
				
			||||||
 | 
						if exporterPtr == nil {
 | 
				
			||||||
 | 
							return ctx, func() {}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						ctx = deliver(ctx, *exporterPtr, begin)
 | 
				
			||||||
 | 
						return ctx, func() { deliver(ctx, *exporterPtr, end) }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										77
									
								
								vendor/golang.org/x/tools/internal/event/core/fast.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								vendor/golang.org/x/tools/internal/event/core/fast.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					// Copyright 2019 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/event/keys"
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/event/label"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Log1 takes a message and one label delivers a log event to the exporter.
 | 
				
			||||||
 | 
					// It is a customized version of Print that is faster and does no allocation.
 | 
				
			||||||
 | 
					func Log1(ctx context.Context, message string, t1 label.Label) {
 | 
				
			||||||
 | 
						Export(ctx, MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
							keys.Msg.Of(message),
 | 
				
			||||||
 | 
							t1,
 | 
				
			||||||
 | 
						}, nil))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Log2 takes a message and two labels and delivers a log event to the exporter.
 | 
				
			||||||
 | 
					// It is a customized version of Print that is faster and does no allocation.
 | 
				
			||||||
 | 
					func Log2(ctx context.Context, message string, t1 label.Label, t2 label.Label) {
 | 
				
			||||||
 | 
						Export(ctx, MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
							keys.Msg.Of(message),
 | 
				
			||||||
 | 
							t1,
 | 
				
			||||||
 | 
							t2,
 | 
				
			||||||
 | 
						}, nil))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Metric1 sends a label event to the exporter with the supplied labels.
 | 
				
			||||||
 | 
					func Metric1(ctx context.Context, t1 label.Label) context.Context {
 | 
				
			||||||
 | 
						return Export(ctx, MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
							keys.Metric.New(),
 | 
				
			||||||
 | 
							t1,
 | 
				
			||||||
 | 
						}, nil))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Metric2 sends a label event to the exporter with the supplied labels.
 | 
				
			||||||
 | 
					func Metric2(ctx context.Context, t1, t2 label.Label) context.Context {
 | 
				
			||||||
 | 
						return Export(ctx, MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
							keys.Metric.New(),
 | 
				
			||||||
 | 
							t1,
 | 
				
			||||||
 | 
							t2,
 | 
				
			||||||
 | 
						}, nil))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Start1 sends a span start event with the supplied label list to the exporter.
 | 
				
			||||||
 | 
					// It also returns a function that will end the span, which should normally be
 | 
				
			||||||
 | 
					// deferred.
 | 
				
			||||||
 | 
					func Start1(ctx context.Context, name string, t1 label.Label) (context.Context, func()) {
 | 
				
			||||||
 | 
						return ExportPair(ctx,
 | 
				
			||||||
 | 
							MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
								keys.Start.Of(name),
 | 
				
			||||||
 | 
								t1,
 | 
				
			||||||
 | 
							}, nil),
 | 
				
			||||||
 | 
							MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
								keys.End.New(),
 | 
				
			||||||
 | 
							}, nil))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Start2 sends a span start event with the supplied label list to the exporter.
 | 
				
			||||||
 | 
					// It also returns a function that will end the span, which should normally be
 | 
				
			||||||
 | 
					// deferred.
 | 
				
			||||||
 | 
					func Start2(ctx context.Context, name string, t1, t2 label.Label) (context.Context, func()) {
 | 
				
			||||||
 | 
						return ExportPair(ctx,
 | 
				
			||||||
 | 
							MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
								keys.Start.Of(name),
 | 
				
			||||||
 | 
								t1,
 | 
				
			||||||
 | 
								t2,
 | 
				
			||||||
 | 
							}, nil),
 | 
				
			||||||
 | 
							MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
								keys.End.New(),
 | 
				
			||||||
 | 
							}, nil))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/tools/internal/event/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/tools/internal/event/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					// Copyright 2019 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Package event provides a set of packages that cover the main
 | 
				
			||||||
 | 
					// concepts of telemetry in an implementation agnostic way.
 | 
				
			||||||
 | 
					package event
 | 
				
			||||||
							
								
								
									
										127
									
								
								vendor/golang.org/x/tools/internal/event/event.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								vendor/golang.org/x/tools/internal/event/event.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,127 @@
 | 
				
			|||||||
 | 
					// Copyright 2019 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package event
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/event/core"
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/event/keys"
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/event/label"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Exporter is a function that handles events.
 | 
				
			||||||
 | 
					// It may return a modified context and event.
 | 
				
			||||||
 | 
					type Exporter func(context.Context, core.Event, label.Map) context.Context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SetExporter sets the global exporter function that handles all events.
 | 
				
			||||||
 | 
					// The exporter is called synchronously from the event call site, so it should
 | 
				
			||||||
 | 
					// return quickly so as not to hold up user code.
 | 
				
			||||||
 | 
					func SetExporter(e Exporter) {
 | 
				
			||||||
 | 
						core.SetExporter(core.Exporter(e))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Log takes a message and a label list and combines them into a single event
 | 
				
			||||||
 | 
					// before delivering them to the exporter.
 | 
				
			||||||
 | 
					func Log(ctx context.Context, message string, labels ...label.Label) {
 | 
				
			||||||
 | 
						core.Export(ctx, core.MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
							keys.Msg.Of(message),
 | 
				
			||||||
 | 
						}, labels))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsLog returns true if the event was built by the Log function.
 | 
				
			||||||
 | 
					// It is intended to be used in exporters to identify the semantics of the
 | 
				
			||||||
 | 
					// event when deciding what to do with it.
 | 
				
			||||||
 | 
					func IsLog(ev core.Event) bool {
 | 
				
			||||||
 | 
						return ev.Label(0).Key() == keys.Msg
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Error takes a message and a label list and combines them into a single event
 | 
				
			||||||
 | 
					// before delivering them to the exporter. It captures the error in the
 | 
				
			||||||
 | 
					// delivered event.
 | 
				
			||||||
 | 
					func Error(ctx context.Context, message string, err error, labels ...label.Label) {
 | 
				
			||||||
 | 
						core.Export(ctx, core.MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
							keys.Msg.Of(message),
 | 
				
			||||||
 | 
							keys.Err.Of(err),
 | 
				
			||||||
 | 
						}, labels))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsError returns true if the event was built by the Error function.
 | 
				
			||||||
 | 
					// It is intended to be used in exporters to identify the semantics of the
 | 
				
			||||||
 | 
					// event when deciding what to do with it.
 | 
				
			||||||
 | 
					func IsError(ev core.Event) bool {
 | 
				
			||||||
 | 
						return ev.Label(0).Key() == keys.Msg &&
 | 
				
			||||||
 | 
							ev.Label(1).Key() == keys.Err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Metric sends a label event to the exporter with the supplied labels.
 | 
				
			||||||
 | 
					func Metric(ctx context.Context, labels ...label.Label) {
 | 
				
			||||||
 | 
						core.Export(ctx, core.MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
							keys.Metric.New(),
 | 
				
			||||||
 | 
						}, labels))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsMetric returns true if the event was built by the Metric function.
 | 
				
			||||||
 | 
					// It is intended to be used in exporters to identify the semantics of the
 | 
				
			||||||
 | 
					// event when deciding what to do with it.
 | 
				
			||||||
 | 
					func IsMetric(ev core.Event) bool {
 | 
				
			||||||
 | 
						return ev.Label(0).Key() == keys.Metric
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Label sends a label event to the exporter with the supplied labels.
 | 
				
			||||||
 | 
					func Label(ctx context.Context, labels ...label.Label) context.Context {
 | 
				
			||||||
 | 
						return core.Export(ctx, core.MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
							keys.Label.New(),
 | 
				
			||||||
 | 
						}, labels))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsLabel returns true if the event was built by the Label function.
 | 
				
			||||||
 | 
					// It is intended to be used in exporters to identify the semantics of the
 | 
				
			||||||
 | 
					// event when deciding what to do with it.
 | 
				
			||||||
 | 
					func IsLabel(ev core.Event) bool {
 | 
				
			||||||
 | 
						return ev.Label(0).Key() == keys.Label
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Start sends a span start event with the supplied label list to the exporter.
 | 
				
			||||||
 | 
					// It also returns a function that will end the span, which should normally be
 | 
				
			||||||
 | 
					// deferred.
 | 
				
			||||||
 | 
					func Start(ctx context.Context, name string, labels ...label.Label) (context.Context, func()) {
 | 
				
			||||||
 | 
						return core.ExportPair(ctx,
 | 
				
			||||||
 | 
							core.MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
								keys.Start.Of(name),
 | 
				
			||||||
 | 
							}, labels),
 | 
				
			||||||
 | 
							core.MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
								keys.End.New(),
 | 
				
			||||||
 | 
							}, nil))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsStart returns true if the event was built by the Start function.
 | 
				
			||||||
 | 
					// It is intended to be used in exporters to identify the semantics of the
 | 
				
			||||||
 | 
					// event when deciding what to do with it.
 | 
				
			||||||
 | 
					func IsStart(ev core.Event) bool {
 | 
				
			||||||
 | 
						return ev.Label(0).Key() == keys.Start
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsEnd returns true if the event was built by the End function.
 | 
				
			||||||
 | 
					// It is intended to be used in exporters to identify the semantics of the
 | 
				
			||||||
 | 
					// event when deciding what to do with it.
 | 
				
			||||||
 | 
					func IsEnd(ev core.Event) bool {
 | 
				
			||||||
 | 
						return ev.Label(0).Key() == keys.End
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Detach returns a context without an associated span.
 | 
				
			||||||
 | 
					// This allows the creation of spans that are not children of the current span.
 | 
				
			||||||
 | 
					func Detach(ctx context.Context) context.Context {
 | 
				
			||||||
 | 
						return core.Export(ctx, core.MakeEvent([3]label.Label{
 | 
				
			||||||
 | 
							keys.Detach.New(),
 | 
				
			||||||
 | 
						}, nil))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsDetach returns true if the event was built by the Detach function.
 | 
				
			||||||
 | 
					// It is intended to be used in exporters to identify the semantics of the
 | 
				
			||||||
 | 
					// event when deciding what to do with it.
 | 
				
			||||||
 | 
					func IsDetach(ev core.Event) bool {
 | 
				
			||||||
 | 
						return ev.Label(0).Key() == keys.Detach
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -3,17 +3,13 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			|||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
    name = "go_default_library",
 | 
					    name = "go_default_library",
 | 
				
			||||||
    srcs = [
 | 
					    srcs = [
 | 
				
			||||||
        "parse.go",
 | 
					        "keys.go",
 | 
				
			||||||
        "span.go",
 | 
					        "standard.go",
 | 
				
			||||||
        "token.go",
 | 
					 | 
				
			||||||
        "token111.go",
 | 
					 | 
				
			||||||
        "token112.go",
 | 
					 | 
				
			||||||
        "uri.go",
 | 
					 | 
				
			||||||
        "utf16.go",
 | 
					 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/span",
 | 
					    importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/event/keys",
 | 
				
			||||||
    importpath = "golang.org/x/tools/internal/span",
 | 
					    importpath = "golang.org/x/tools/internal/event/keys",
 | 
				
			||||||
    visibility = ["//vendor/golang.org/x/tools:__subpackages__"],
 | 
					    visibility = ["//vendor/golang.org/x/tools:__subpackages__"],
 | 
				
			||||||
 | 
					    deps = ["//vendor/golang.org/x/tools/internal/event/label:go_default_library"],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
filegroup(
 | 
					filegroup(
 | 
				
			||||||
							
								
								
									
										564
									
								
								vendor/golang.org/x/tools/internal/event/keys/keys.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										564
									
								
								vendor/golang.org/x/tools/internal/event/keys/keys.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,564 @@
 | 
				
			|||||||
 | 
					// Copyright 2019 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
 | 
						"math"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"golang.org/x/tools/internal/event/label"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Value represents a key for untyped values.
 | 
				
			||||||
 | 
					type Value struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// New creates a new Key for untyped values.
 | 
				
			||||||
 | 
					func New(name, description string) *Value {
 | 
				
			||||||
 | 
						return &Value{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Value) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Value) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Value) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						fmt.Fprint(w, k.From(l))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Value) Get(lm label.Map) interface{} {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Value) From(t label.Label) interface{} { return t.UnpackValue() }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Value) Of(value interface{}) label.Label { return label.OfValue(k, value) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Tag represents a key for tagging labels that have no value.
 | 
				
			||||||
 | 
					// These are used when the existence of the label is the entire information it
 | 
				
			||||||
 | 
					// carries, such as marking events to be of a specific kind, or from a specific
 | 
				
			||||||
 | 
					// package.
 | 
				
			||||||
 | 
					type Tag struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewTag creates a new Key for tagging labels.
 | 
				
			||||||
 | 
					func NewTag(name, description string) *Tag {
 | 
				
			||||||
 | 
						return &Tag{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Tag) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Tag) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Tag) Format(w io.Writer, buf []byte, l label.Label) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// New creates a new Label with this key.
 | 
				
			||||||
 | 
					func (k *Tag) New() label.Label { return label.OfValue(k, nil) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Int represents a key
 | 
				
			||||||
 | 
					type Int struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewInt creates a new Key for int values.
 | 
				
			||||||
 | 
					func NewInt(name, description string) *Int {
 | 
				
			||||||
 | 
						return &Int{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Int) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Int) Of(v int) label.Label { return label.Of64(k, uint64(v)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Int) Get(lm label.Map) int {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Int) From(t label.Label) int { return int(t.Unpack64()) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Int8 represents a key
 | 
				
			||||||
 | 
					type Int8 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewInt8 creates a new Key for int8 values.
 | 
				
			||||||
 | 
					func NewInt8(name, description string) *Int8 {
 | 
				
			||||||
 | 
						return &Int8{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int8) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Int8) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int8) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Int8) Of(v int8) label.Label { return label.Of64(k, uint64(v)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Int8) Get(lm label.Map) int8 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Int8) From(t label.Label) int8 { return int8(t.Unpack64()) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Int16 represents a key
 | 
				
			||||||
 | 
					type Int16 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewInt16 creates a new Key for int16 values.
 | 
				
			||||||
 | 
					func NewInt16(name, description string) *Int16 {
 | 
				
			||||||
 | 
						return &Int16{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int16) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Int16) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int16) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Int16) Of(v int16) label.Label { return label.Of64(k, uint64(v)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Int16) Get(lm label.Map) int16 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Int16) From(t label.Label) int16 { return int16(t.Unpack64()) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Int32 represents a key
 | 
				
			||||||
 | 
					type Int32 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewInt32 creates a new Key for int32 values.
 | 
				
			||||||
 | 
					func NewInt32(name, description string) *Int32 {
 | 
				
			||||||
 | 
						return &Int32{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int32) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Int32) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int32) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Int32) Of(v int32) label.Label { return label.Of64(k, uint64(v)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Int32) Get(lm label.Map) int32 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Int32) From(t label.Label) int32 { return int32(t.Unpack64()) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Int64 represents a key
 | 
				
			||||||
 | 
					type Int64 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewInt64 creates a new Key for int64 values.
 | 
				
			||||||
 | 
					func NewInt64(name, description string) *Int64 {
 | 
				
			||||||
 | 
						return &Int64{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int64) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Int64) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Int64) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendInt(buf, k.From(l), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Int64) Of(v int64) label.Label { return label.Of64(k, uint64(v)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Int64) Get(lm label.Map) int64 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Int64) From(t label.Label) int64 { return int64(t.Unpack64()) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UInt represents a key
 | 
				
			||||||
 | 
					type UInt struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewUInt creates a new Key for uint values.
 | 
				
			||||||
 | 
					func NewUInt(name, description string) *UInt {
 | 
				
			||||||
 | 
						return &UInt{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *UInt) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *UInt) Of(v uint) label.Label { return label.Of64(k, uint64(v)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *UInt) Get(lm label.Map) uint {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *UInt) From(t label.Label) uint { return uint(t.Unpack64()) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UInt8 represents a key
 | 
				
			||||||
 | 
					type UInt8 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewUInt8 creates a new Key for uint8 values.
 | 
				
			||||||
 | 
					func NewUInt8(name, description string) *UInt8 {
 | 
				
			||||||
 | 
						return &UInt8{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt8) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *UInt8) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt8) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *UInt8) Of(v uint8) label.Label { return label.Of64(k, uint64(v)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *UInt8) Get(lm label.Map) uint8 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *UInt8) From(t label.Label) uint8 { return uint8(t.Unpack64()) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UInt16 represents a key
 | 
				
			||||||
 | 
					type UInt16 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewUInt16 creates a new Key for uint16 values.
 | 
				
			||||||
 | 
					func NewUInt16(name, description string) *UInt16 {
 | 
				
			||||||
 | 
						return &UInt16{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt16) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *UInt16) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt16) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *UInt16) Of(v uint16) label.Label { return label.Of64(k, uint64(v)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *UInt16) Get(lm label.Map) uint16 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *UInt16) From(t label.Label) uint16 { return uint16(t.Unpack64()) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UInt32 represents a key
 | 
				
			||||||
 | 
					type UInt32 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewUInt32 creates a new Key for uint32 values.
 | 
				
			||||||
 | 
					func NewUInt32(name, description string) *UInt32 {
 | 
				
			||||||
 | 
						return &UInt32{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt32) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *UInt32) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt32) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *UInt32) Of(v uint32) label.Label { return label.Of64(k, uint64(v)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *UInt32) Get(lm label.Map) uint32 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *UInt32) From(t label.Label) uint32 { return uint32(t.Unpack64()) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UInt64 represents a key
 | 
				
			||||||
 | 
					type UInt64 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewUInt64 creates a new Key for uint64 values.
 | 
				
			||||||
 | 
					func NewUInt64(name, description string) *UInt64 {
 | 
				
			||||||
 | 
						return &UInt64{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt64) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *UInt64) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *UInt64) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendUint(buf, k.From(l), 10))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *UInt64) Of(v uint64) label.Label { return label.Of64(k, v) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *UInt64) Get(lm label.Map) uint64 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *UInt64) From(t label.Label) uint64 { return t.Unpack64() }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Float32 represents a key
 | 
				
			||||||
 | 
					type Float32 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewFloat32 creates a new Key for float32 values.
 | 
				
			||||||
 | 
					func NewFloat32(name, description string) *Float32 {
 | 
				
			||||||
 | 
						return &Float32{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Float32) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Float32) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Float32) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendFloat(buf, float64(k.From(l)), 'E', -1, 32))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Float32) Of(v float32) label.Label {
 | 
				
			||||||
 | 
						return label.Of64(k, uint64(math.Float32bits(v)))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Float32) Get(lm label.Map) float32 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Float32) From(t label.Label) float32 {
 | 
				
			||||||
 | 
						return math.Float32frombits(uint32(t.Unpack64()))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Float64 represents a key
 | 
				
			||||||
 | 
					type Float64 struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewFloat64 creates a new Key for int64 values.
 | 
				
			||||||
 | 
					func NewFloat64(name, description string) *Float64 {
 | 
				
			||||||
 | 
						return &Float64{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Float64) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Float64) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Float64) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendFloat(buf, k.From(l), 'E', -1, 64))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Float64) Of(v float64) label.Label {
 | 
				
			||||||
 | 
						return label.Of64(k, math.Float64bits(v))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Float64) Get(lm label.Map) float64 {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Float64) From(t label.Label) float64 {
 | 
				
			||||||
 | 
						return math.Float64frombits(t.Unpack64())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// String represents a key
 | 
				
			||||||
 | 
					type String struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewString creates a new Key for int64 values.
 | 
				
			||||||
 | 
					func NewString(name, description string) *String {
 | 
				
			||||||
 | 
						return &String{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *String) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *String) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *String) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendQuote(buf, k.From(l)))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *String) Of(v string) label.Label { return label.OfString(k, v) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *String) Get(lm label.Map) string {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ""
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *String) From(t label.Label) string { return t.UnpackString() }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Boolean represents a key
 | 
				
			||||||
 | 
					type Boolean struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewBoolean creates a new Key for bool values.
 | 
				
			||||||
 | 
					func NewBoolean(name, description string) *Boolean {
 | 
				
			||||||
 | 
						return &Boolean{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Boolean) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Boolean) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Boolean) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						w.Write(strconv.AppendBool(buf, k.From(l)))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Boolean) Of(v bool) label.Label {
 | 
				
			||||||
 | 
						if v {
 | 
				
			||||||
 | 
							return label.Of64(k, 1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return label.Of64(k, 0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Boolean) Get(lm label.Map) bool {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Boolean) From(t label.Label) bool { return t.Unpack64() > 0 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Error represents a key
 | 
				
			||||||
 | 
					type Error struct {
 | 
				
			||||||
 | 
						name        string
 | 
				
			||||||
 | 
						description string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewError creates a new Key for int64 values.
 | 
				
			||||||
 | 
					func NewError(name, description string) *Error {
 | 
				
			||||||
 | 
						return &Error{name: name, description: description}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Error) Name() string        { return k.name }
 | 
				
			||||||
 | 
					func (k *Error) Description() string { return k.description }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (k *Error) Format(w io.Writer, buf []byte, l label.Label) {
 | 
				
			||||||
 | 
						io.WriteString(w, k.From(l).Error())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Of creates a new Label with this key and the supplied value.
 | 
				
			||||||
 | 
					func (k *Error) Of(v error) label.Label { return label.OfValue(k, v) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get can be used to get a label for the key from a label.Map.
 | 
				
			||||||
 | 
					func (k *Error) Get(lm label.Map) error {
 | 
				
			||||||
 | 
						if t := lm.Find(k); t.Valid() {
 | 
				
			||||||
 | 
							return k.From(t)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// From can be used to get a value from a Label.
 | 
				
			||||||
 | 
					func (k *Error) From(t label.Label) error {
 | 
				
			||||||
 | 
						err, _ := t.UnpackValue().(error)
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										22
									
								
								vendor/golang.org/x/tools/internal/event/keys/standard.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/golang.org/x/tools/internal/event/keys/standard.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					// Copyright 2020 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						// Msg is a key used to add message strings to label lists.
 | 
				
			||||||
 | 
						Msg = NewString("message", "a readable message")
 | 
				
			||||||
 | 
						// Label is a key used to indicate an event adds labels to the context.
 | 
				
			||||||
 | 
						Label = NewTag("label", "a label context marker")
 | 
				
			||||||
 | 
						// Start is used for things like traces that have a name.
 | 
				
			||||||
 | 
						Start = NewString("start", "span start")
 | 
				
			||||||
 | 
						// Metric is a key used to indicate an event records metrics.
 | 
				
			||||||
 | 
						End = NewTag("end", "a span end marker")
 | 
				
			||||||
 | 
						// Metric is a key used to indicate an event records metrics.
 | 
				
			||||||
 | 
						Detach = NewTag("detach", "a span detach marker")
 | 
				
			||||||
 | 
						// Err is a key used to add error values to label lists.
 | 
				
			||||||
 | 
						Err = NewError("error", "an error that occurred")
 | 
				
			||||||
 | 
						// Metric is a key used to indicate an event records metrics.
 | 
				
			||||||
 | 
						Metric = NewTag("metric", "a metric event marker")
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user