github.com/Uhtred009/v2ray-core-1@v4.31.2+incompatible/proxy/socks/config.pb.go (about) 1 // Code generated by protoc-gen-go. DO NOT EDIT. 2 // versions: 3 // protoc-gen-go v1.25.0 4 // protoc v3.13.0 5 // source: proxy/socks/config.proto 6 7 package socks 8 9 import ( 10 proto "github.com/golang/protobuf/proto" 11 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 12 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 13 reflect "reflect" 14 sync "sync" 15 net "v2ray.com/core/common/net" 16 protocol "v2ray.com/core/common/protocol" 17 ) 18 19 const ( 20 // Verify that this generated code is sufficiently up-to-date. 21 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 22 // Verify that runtime/protoimpl is sufficiently up-to-date. 23 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 24 ) 25 26 // This is a compile-time assertion that a sufficiently up-to-date version 27 // of the legacy proto package is being used. 28 const _ = proto.ProtoPackageIsVersion4 29 30 // AuthType is the authentication type of Socks proxy. 31 type AuthType int32 32 33 const ( 34 // NO_AUTH is for anounymous authentication. 35 AuthType_NO_AUTH AuthType = 0 36 // PASSWORD is for username/password authentication. 37 AuthType_PASSWORD AuthType = 1 38 ) 39 40 // Enum value maps for AuthType. 41 var ( 42 AuthType_name = map[int32]string{ 43 0: "NO_AUTH", 44 1: "PASSWORD", 45 } 46 AuthType_value = map[string]int32{ 47 "NO_AUTH": 0, 48 "PASSWORD": 1, 49 } 50 ) 51 52 func (x AuthType) Enum() *AuthType { 53 p := new(AuthType) 54 *p = x 55 return p 56 } 57 58 func (x AuthType) String() string { 59 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 60 } 61 62 func (AuthType) Descriptor() protoreflect.EnumDescriptor { 63 return file_proxy_socks_config_proto_enumTypes[0].Descriptor() 64 } 65 66 func (AuthType) Type() protoreflect.EnumType { 67 return &file_proxy_socks_config_proto_enumTypes[0] 68 } 69 70 func (x AuthType) Number() protoreflect.EnumNumber { 71 return protoreflect.EnumNumber(x) 72 } 73 74 // Deprecated: Use AuthType.Descriptor instead. 75 func (AuthType) EnumDescriptor() ([]byte, []int) { 76 return file_proxy_socks_config_proto_rawDescGZIP(), []int{0} 77 } 78 79 // Account represents a Socks account. 80 type Account struct { 81 state protoimpl.MessageState 82 sizeCache protoimpl.SizeCache 83 unknownFields protoimpl.UnknownFields 84 85 Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` 86 Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` 87 } 88 89 func (x *Account) Reset() { 90 *x = Account{} 91 if protoimpl.UnsafeEnabled { 92 mi := &file_proxy_socks_config_proto_msgTypes[0] 93 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 94 ms.StoreMessageInfo(mi) 95 } 96 } 97 98 func (x *Account) String() string { 99 return protoimpl.X.MessageStringOf(x) 100 } 101 102 func (*Account) ProtoMessage() {} 103 104 func (x *Account) ProtoReflect() protoreflect.Message { 105 mi := &file_proxy_socks_config_proto_msgTypes[0] 106 if protoimpl.UnsafeEnabled && x != nil { 107 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 108 if ms.LoadMessageInfo() == nil { 109 ms.StoreMessageInfo(mi) 110 } 111 return ms 112 } 113 return mi.MessageOf(x) 114 } 115 116 // Deprecated: Use Account.ProtoReflect.Descriptor instead. 117 func (*Account) Descriptor() ([]byte, []int) { 118 return file_proxy_socks_config_proto_rawDescGZIP(), []int{0} 119 } 120 121 func (x *Account) GetUsername() string { 122 if x != nil { 123 return x.Username 124 } 125 return "" 126 } 127 128 func (x *Account) GetPassword() string { 129 if x != nil { 130 return x.Password 131 } 132 return "" 133 } 134 135 // ServerConfig is the protobuf config for Socks server. 136 type ServerConfig struct { 137 state protoimpl.MessageState 138 sizeCache protoimpl.SizeCache 139 unknownFields protoimpl.UnknownFields 140 141 AuthType AuthType `protobuf:"varint,1,opt,name=auth_type,json=authType,proto3,enum=v2ray.core.proxy.socks.AuthType" json:"auth_type,omitempty"` 142 Accounts map[string]string `protobuf:"bytes,2,rep,name=accounts,proto3" json:"accounts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 143 Address *net.IPOrDomain `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` 144 UdpEnabled bool `protobuf:"varint,4,opt,name=udp_enabled,json=udpEnabled,proto3" json:"udp_enabled,omitempty"` 145 // Deprecated: Do not use. 146 Timeout uint32 `protobuf:"varint,5,opt,name=timeout,proto3" json:"timeout,omitempty"` 147 UserLevel uint32 `protobuf:"varint,6,opt,name=user_level,json=userLevel,proto3" json:"user_level,omitempty"` 148 } 149 150 func (x *ServerConfig) Reset() { 151 *x = ServerConfig{} 152 if protoimpl.UnsafeEnabled { 153 mi := &file_proxy_socks_config_proto_msgTypes[1] 154 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 155 ms.StoreMessageInfo(mi) 156 } 157 } 158 159 func (x *ServerConfig) String() string { 160 return protoimpl.X.MessageStringOf(x) 161 } 162 163 func (*ServerConfig) ProtoMessage() {} 164 165 func (x *ServerConfig) ProtoReflect() protoreflect.Message { 166 mi := &file_proxy_socks_config_proto_msgTypes[1] 167 if protoimpl.UnsafeEnabled && x != nil { 168 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 169 if ms.LoadMessageInfo() == nil { 170 ms.StoreMessageInfo(mi) 171 } 172 return ms 173 } 174 return mi.MessageOf(x) 175 } 176 177 // Deprecated: Use ServerConfig.ProtoReflect.Descriptor instead. 178 func (*ServerConfig) Descriptor() ([]byte, []int) { 179 return file_proxy_socks_config_proto_rawDescGZIP(), []int{1} 180 } 181 182 func (x *ServerConfig) GetAuthType() AuthType { 183 if x != nil { 184 return x.AuthType 185 } 186 return AuthType_NO_AUTH 187 } 188 189 func (x *ServerConfig) GetAccounts() map[string]string { 190 if x != nil { 191 return x.Accounts 192 } 193 return nil 194 } 195 196 func (x *ServerConfig) GetAddress() *net.IPOrDomain { 197 if x != nil { 198 return x.Address 199 } 200 return nil 201 } 202 203 func (x *ServerConfig) GetUdpEnabled() bool { 204 if x != nil { 205 return x.UdpEnabled 206 } 207 return false 208 } 209 210 // Deprecated: Do not use. 211 func (x *ServerConfig) GetTimeout() uint32 { 212 if x != nil { 213 return x.Timeout 214 } 215 return 0 216 } 217 218 func (x *ServerConfig) GetUserLevel() uint32 { 219 if x != nil { 220 return x.UserLevel 221 } 222 return 0 223 } 224 225 // ClientConfig is the protobuf config for Socks client. 226 type ClientConfig struct { 227 state protoimpl.MessageState 228 sizeCache protoimpl.SizeCache 229 unknownFields protoimpl.UnknownFields 230 231 // Sever is a list of Socks server addresses. 232 Server []*protocol.ServerEndpoint `protobuf:"bytes,1,rep,name=server,proto3" json:"server,omitempty"` 233 } 234 235 func (x *ClientConfig) Reset() { 236 *x = ClientConfig{} 237 if protoimpl.UnsafeEnabled { 238 mi := &file_proxy_socks_config_proto_msgTypes[2] 239 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 240 ms.StoreMessageInfo(mi) 241 } 242 } 243 244 func (x *ClientConfig) String() string { 245 return protoimpl.X.MessageStringOf(x) 246 } 247 248 func (*ClientConfig) ProtoMessage() {} 249 250 func (x *ClientConfig) ProtoReflect() protoreflect.Message { 251 mi := &file_proxy_socks_config_proto_msgTypes[2] 252 if protoimpl.UnsafeEnabled && x != nil { 253 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 254 if ms.LoadMessageInfo() == nil { 255 ms.StoreMessageInfo(mi) 256 } 257 return ms 258 } 259 return mi.MessageOf(x) 260 } 261 262 // Deprecated: Use ClientConfig.ProtoReflect.Descriptor instead. 263 func (*ClientConfig) Descriptor() ([]byte, []int) { 264 return file_proxy_socks_config_proto_rawDescGZIP(), []int{2} 265 } 266 267 func (x *ClientConfig) GetServer() []*protocol.ServerEndpoint { 268 if x != nil { 269 return x.Server 270 } 271 return nil 272 } 273 274 var File_proxy_socks_config_proto protoreflect.FileDescriptor 275 276 var file_proxy_socks_config_proto_rawDesc = []byte{ 277 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x63, 0x6f, 278 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x76, 0x32, 0x72, 0x61, 279 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x63, 280 0x6b, 0x73, 0x1a, 0x18, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x61, 281 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x63, 0x6f, 282 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 283 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 284 0x41, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 285 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 286 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 287 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 288 0x72, 0x64, 0x22, 0xf5, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 289 0x66, 0x69, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 290 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 291 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x2e, 292 0x41, 0x75, 0x74, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x54, 0x79, 293 0x70, 0x65, 0x12, 0x4e, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 294 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 295 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x2e, 0x53, 0x65, 296 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 297 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 298 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 299 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 300 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x49, 0x50, 0x4f, 0x72, 301 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 302 0x1f, 0x0a, 0x0b, 0x75, 0x64, 0x70, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 303 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x64, 0x70, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 304 0x12, 0x1c, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 305 0x0d, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1d, 306 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 307 0x28, 0x0d, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x3b, 0x0a, 308 0x0d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 309 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 310 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 311 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x52, 0x0a, 0x0c, 0x43, 0x6c, 312 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x06, 0x73, 0x65, 313 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x76, 0x32, 0x72, 314 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 315 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x6e, 316 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2a, 0x25, 317 0x0a, 0x08, 0x41, 0x75, 0x74, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 318 0x5f, 0x41, 0x55, 0x54, 0x48, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x41, 0x53, 0x53, 0x57, 319 0x4f, 0x52, 0x44, 0x10, 0x01, 0x42, 0x53, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x32, 0x72, 320 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 321 0x63, 0x6b, 0x73, 0x50, 0x01, 0x5a, 0x1a, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 322 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x73, 0x6f, 0x63, 0x6b, 323 0x73, 0xaa, 0x02, 0x16, 0x56, 0x32, 0x52, 0x61, 0x79, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x50, 324 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 325 0x6f, 0x33, 326 } 327 328 var ( 329 file_proxy_socks_config_proto_rawDescOnce sync.Once 330 file_proxy_socks_config_proto_rawDescData = file_proxy_socks_config_proto_rawDesc 331 ) 332 333 func file_proxy_socks_config_proto_rawDescGZIP() []byte { 334 file_proxy_socks_config_proto_rawDescOnce.Do(func() { 335 file_proxy_socks_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_proxy_socks_config_proto_rawDescData) 336 }) 337 return file_proxy_socks_config_proto_rawDescData 338 } 339 340 var file_proxy_socks_config_proto_enumTypes = make([]protoimpl.EnumInfo, 1) 341 var file_proxy_socks_config_proto_msgTypes = make([]protoimpl.MessageInfo, 4) 342 var file_proxy_socks_config_proto_goTypes = []interface{}{ 343 (AuthType)(0), // 0: v2ray.core.proxy.socks.AuthType 344 (*Account)(nil), // 1: v2ray.core.proxy.socks.Account 345 (*ServerConfig)(nil), // 2: v2ray.core.proxy.socks.ServerConfig 346 (*ClientConfig)(nil), // 3: v2ray.core.proxy.socks.ClientConfig 347 nil, // 4: v2ray.core.proxy.socks.ServerConfig.AccountsEntry 348 (*net.IPOrDomain)(nil), // 5: v2ray.core.common.net.IPOrDomain 349 (*protocol.ServerEndpoint)(nil), // 6: v2ray.core.common.protocol.ServerEndpoint 350 } 351 var file_proxy_socks_config_proto_depIdxs = []int32{ 352 0, // 0: v2ray.core.proxy.socks.ServerConfig.auth_type:type_name -> v2ray.core.proxy.socks.AuthType 353 4, // 1: v2ray.core.proxy.socks.ServerConfig.accounts:type_name -> v2ray.core.proxy.socks.ServerConfig.AccountsEntry 354 5, // 2: v2ray.core.proxy.socks.ServerConfig.address:type_name -> v2ray.core.common.net.IPOrDomain 355 6, // 3: v2ray.core.proxy.socks.ClientConfig.server:type_name -> v2ray.core.common.protocol.ServerEndpoint 356 4, // [4:4] is the sub-list for method output_type 357 4, // [4:4] is the sub-list for method input_type 358 4, // [4:4] is the sub-list for extension type_name 359 4, // [4:4] is the sub-list for extension extendee 360 0, // [0:4] is the sub-list for field type_name 361 } 362 363 func init() { file_proxy_socks_config_proto_init() } 364 func file_proxy_socks_config_proto_init() { 365 if File_proxy_socks_config_proto != nil { 366 return 367 } 368 if !protoimpl.UnsafeEnabled { 369 file_proxy_socks_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 370 switch v := v.(*Account); i { 371 case 0: 372 return &v.state 373 case 1: 374 return &v.sizeCache 375 case 2: 376 return &v.unknownFields 377 default: 378 return nil 379 } 380 } 381 file_proxy_socks_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 382 switch v := v.(*ServerConfig); i { 383 case 0: 384 return &v.state 385 case 1: 386 return &v.sizeCache 387 case 2: 388 return &v.unknownFields 389 default: 390 return nil 391 } 392 } 393 file_proxy_socks_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 394 switch v := v.(*ClientConfig); i { 395 case 0: 396 return &v.state 397 case 1: 398 return &v.sizeCache 399 case 2: 400 return &v.unknownFields 401 default: 402 return nil 403 } 404 } 405 } 406 type x struct{} 407 out := protoimpl.TypeBuilder{ 408 File: protoimpl.DescBuilder{ 409 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 410 RawDescriptor: file_proxy_socks_config_proto_rawDesc, 411 NumEnums: 1, 412 NumMessages: 4, 413 NumExtensions: 0, 414 NumServices: 0, 415 }, 416 GoTypes: file_proxy_socks_config_proto_goTypes, 417 DependencyIndexes: file_proxy_socks_config_proto_depIdxs, 418 EnumInfos: file_proxy_socks_config_proto_enumTypes, 419 MessageInfos: file_proxy_socks_config_proto_msgTypes, 420 }.Build() 421 File_proxy_socks_config_proto = out.File 422 file_proxy_socks_config_proto_rawDesc = nil 423 file_proxy_socks_config_proto_goTypes = nil 424 file_proxy_socks_config_proto_depIdxs = nil 425 }