Swiftyinsta: рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫреЗрдВред рдХреЛрдб

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рдЕрдХреНрддреВре░ 2019  ┬╖  19рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: TheM4hd1/SwiftyInsta

рдирдорд╕реНрддреЗ,
рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдУред рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

func рд▓реЙрдЧрд┐рди рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдПрд╕рдПрдордПрд╕ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИред
рдореИрдВ рдпрд╣ рдХреЛрдб рд╡рд╛рдкрд╕ рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддрд╛ред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?

рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ

рдХреНрд▓рд╛рд╕ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░: UIViewController {

let handler = APIHandler()    
override func viewDidLoad() {
    super.viewDidLoad()
    login()
}

func login() {
    var credentials = Credentials(username: "username", password: "password", verifyBy: .text)
    credentials.code = "121332"

    handler.authenticate(with: .user(credentials)) { [weak self] in
        switch $0 {
        case .success(let response, _):
            print("Login successful.")
            guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
            UserDefaults.standard.set(key, forKey: "current.account")
            UserDefaults.standard.synchronize()

            self?.getCurrentUser()
        case .failure(let error):
            if error.requiresInstagramCode {
            } else {
            }
        }
    }
}

func getCurrentUser() {
    self.handler.users.user(.me) { ( result: Result<User?, Error>) in
        switch result {
        case .success(let user):
            let username = user?.name ?? "John Doe"
            print("success, username: \(username)")
        case .failure(let error):
            print("failure, error: \(error.localizedDescription)")
        }
    }
}

}

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдЕрднреА рддрдХ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖ рд╣реВрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реВрдВред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рдЬрд▓реНрдж рд╣реА рдПрдХ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рднреА 19 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣реИрдВрдбрд▓рд░ .failure(let error) рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ credentials.code = "121332" рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕реЗ if error.requiresInstagramCode {┬а} рдЕрдВрджрд░ async рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ
https://prnt.sc/pgyf15
рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдпрд╣ рдХреЛрдб рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИ

рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХреЛ рд░реЛрдХ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕ рдкрдВрдХреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЛ credentials.code рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред :рд╢рд░рдорд╛рдирд╛:
рдЕрдЧрд░ рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ credentials рднреА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╕реНрдирд┐рдкреЗрдЯ, рдЯреАрдмреАрдПрдЪ рд╕реЗ рдЬреЛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЙрд╕рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)ред

https://prnt.sc/pgynah
рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИред рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдореИрдВ .user рдХреЛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ .credentials (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ) рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ

.user рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред
.credentials рдХрд╛ рдЙрдкрдпреЛрдЧ development рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдмрджрд▓ рджреВрдВрдЧрд╛ред
рдореБрдЭреЗ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЪреВрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛, рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ credentials рдЙрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ code рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж Error рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред ?
рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЕрд▓рдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, tbh

рдЕрдЧрд░ рдореИрдВ рд╣рдореЗрдВ .credentials, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реИ https://prnt.sc/pgyvlx
рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдкреВрд░рд╛ рдХреЛрдб рдореБрдЦреНрдп рд╕рдВрджреЗрд╢ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдореБрдЭрд╕реЗ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд░рд╣реА рд╣реИ?

рдЖрдк рд╕рдВрджреЗрд╢ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

.user рд╕рд╣реА рд╣реИ, .credentials рдЧрд▓рддреА рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рдХреА рдЕрдкрдиреА рдШреЛрд╖рдгрд╛ рд▓реЗ рдЬрд╛рдПрдБ credentials рдиреАрдЪреЗ handler рдПрдХред рдПрдХ "рдмрдирд╛рдП рд░рдЦрд╛" рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВред
рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

let handler = APIHandler()
let credentials = Credentials( тАж )

func login() {
  тАж
}

рдЗрд╕рдХреЗ рд╕рднреА рдХреЛрдб, рд╡реИрд╕реЗ рднреА рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ (

UIKit import рдЖрдпрд╛рдд рдХрд░реЗрдВ
рд╕реНрд╡рд┐рдлреНрдЯреА рдЗрдВрд╕реНрдЯрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдХреНрд▓рд╛рд╕ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░: UIViewController {
рдЪрд▓реЛ рд╣реИрдВрдбрд▓рд░ = рдПрдкреАрдЖрдИрд╣реИрдВрдбрд▓рд░ ()
var рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ = рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо", рдкрд╛рд╕рд╡рд░реНрдб: "рдкрд╛рд╕рд╡рд░реНрдб", рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ: .text)

override func viewDidLoad() {
    super.viewDidLoad()
    login()
}

func login() {

    handler.authenticate(with: .user(credentials)) { [weak self] in
        switch $0 {
        case .success(let response, _):
            print("Login successful.")
            guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
            UserDefaults.standard.set(key, forKey: "current.account")
            UserDefaults.standard.synchronize()
            self?.getCurrentUser()
        case .failure(let error):
            if error.requiresInstagramCode {
                self!.credentials.code = "178063"
            } else {
            }
        }
    }
}

func getCurrentUser() {
    self.handler.users.user(.me) { ( result: Result<User?, Error>) in
        switch result {
        case .success(let user):
            let username = user?.name ?? "John Doe"
            print("success, username: \(username)")
        case .failure(let error):
            print("failure, error: \(error.localizedDescription)")
        }
    }
}

}

рдФрд░ рдЗрд╕ рдмрд╛рд░ рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рд╣реИ? @rmelnik7777

2019-10-09 17:32:25.333892+0300 TestInsta[9747:281440] [] nw_connection_receive_internal_block_invoke [C1] рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рд╡рд┐рдлрд▓ "рдСрдкрд░реЗрд╢рди рд░рджреНрдж"

https://prnt.sc/pgzldk

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА _Xcode_ рдЪреЗрддрд╛рд╡рдиреА рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рди рдХрд┐ рдХреБрдЫ SwiftyInsta рдЙрддреНрдкрдиреНрди

рдореБрдЭреЗ рдПрдХ рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрд╕рдПрдордПрд╕ рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓рддрд╛ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рдирд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдирдорд╕реНрддреЗ рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЯреВ рдлреИрдХреНрдЯрд░ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрд┐рдВрдЧ рд╕реИрдВрдкрд▓ рдПрдкреНрд▓реАрдХреЗрд╢рди рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@sbertix рдЬрд▓реНрдж рд╣реА рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд░реЗрдЧрд╛ред
рдзреИрд░реНрдп рд░рдЦреЗрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдЕрднреА рддрдХ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖ рд╣реВрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реВрдВред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рдЬрд▓реНрдж рд╣реА рдПрдХ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рддреЗрдЬреА рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдирдпрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореБрдЭреЗ рдмрдЧ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ:

  • рдпрд╣рд╛рдВ , рдЖрдк user ( Credentials рдХрд╛ рдЙрджрд╛рд╣рд░рдг) рдХреА рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣реИрдВрдбрд▓рд░ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  • рд▓реЗрдХрд┐рди рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ , рдпрд╣ Credentials рдХрд╛ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП handler рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИред authentification.code() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдЗрд╕рдХреА рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдкрд░ Credentials рдХреЛ struct рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ class , рдЬреЛ рдХрд┐ рд╕рдВрджрд░реНрдн рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЪреАрдЬреЛрдВ рдХрд╛ рдЖрдзрд╛рд░ рдерд╛ред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдпрд╛ рддреЛ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рд╣реИ, рдпрд╛ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ master рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рд╣реИ, рдпрд╛ рд╕рдВрднрд╡рддрдГ рдкреНрд░рддрд┐ рд╕рдорд╕реНрдпрд╛ рднреА рдирд╣реАрдВ рд╣реИред
рдореИрдВ #96 рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдХреНрд╖рдорд╛ рдпрд╛рдЪрдирд╛ред
@Lyusan

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

canaksoy picture canaksoy  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

reefer picture reefer  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

trentona picture trentona  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sbertix picture sbertix  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sbertix picture sbertix  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ