adb服务器版本与此客户端不匹配


151

每当我尝试运行时adb devices

            $ adb devices
            * daemon not running. starting it now *
            * daemon started successfully *
            List of devices attached
            HT0ANRV05740    device

它表示守护程序未运行,然后重新启动该守护程序。

然后,如果我再次运行adb设备,它将执行相同的操作-

            $ adb devices
            adb server is out of date.  killing...
            * daemon started successfully *
            List of devices attached
            HT0ANRV05740    device

然后,如果我再次运行它,它将再次执行完全相同的操作-

            $ adb devices
            adb server is out of date.  killing...
            * daemon started successfully *
            List of devices attached
            HT0ANRV05740    device

请帮忙!!

另外,我的DDMS不断给我以下消息-

[2011-02-23 16:17:05 - DeviceMonitor]Adb connection Error:An existing connection was forcibly closed by the remote host

以下是adb重新启动之前的日志-

              1291        locapi_rpc_glue  V  loc_ioctl
              1291                    RPC  D  written RPC packet size: [480]
              1291                    RPC  D  read RPC packet
              1291                    RPC  D  read RPC packet size: [28]
              1291             lib_locapi  V  qct_loc_eng_inject_xtra_data, inject part = 100, len = 167, len = 167
              1291             lib_locapi  V  qct_loc_eng_inject_xtra_data, total part = 100, len = 167
              1291        locapi_rpc_glue  V  loc_ioctl
              1291                    RPC  D  written RPC packet size: [248]
              1291                    RPC  D  read RPC packet
              1291                    RPC  D  read RPC packet size: [28]
              1291             lib_locapi  D  qct_loc_eng_inject_xtra_data: injected 39767, SUCCESS
              1291             lib_locapi  V  inject_xtra_waiting = flase
              1291    GpsLocationProvider  D  Releasing wakelock
              1291            WifiService  D  releaseWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.Binder@47aead50}
              1291            WifiService  D  enable and start wifi due to updateWifiState
              1218            rmt_storage  I  rmt_storage open event
              1218            rmt_storage  I  rmt_storage client thread started
              1218            rmt_storage  I  rmt_storage events processing done
              1218            rmt_storage  I  rmt_storage register cb event
              1218            rmt_storage  I  rmt_storage status id = 2
              1218            rmt_storage  I  rmt_storage events processing done
              1218            rmt_storage  I  rmt_storage open event
              1218            rmt_storage  I  rmt_storage client thread started
              1218            rmt_storage  I  rmt_storage events processing done
              1218            rmt_storage  I  rmt_storage register cb event
              1218            rmt_storage  I  rmt_storage status id = 2
              1218            rmt_storage  I  rmt_storage events processing done
              1218            rmt_storage  I  rmt_storage write event
              1218            rmt_storage  I  unblock rmt_storage client thread
              1218            rmt_storage  I  rmt_storage events processing done
              1218            rmt_storage  I  rmt_storage write: bytes written = 3145216
              1218            rmt_storage  I  rmt_storage write: bytes written = 512
              1218            rmt_storage  I  rmt_storage status handle = 1
              1291       BatteryStatsImpl  I  notePhoneSignalStrengthLocked: 4->3
              1218            rmt_storage  I  rmt_storage write event
              1218            rmt_storage  I  rmt_storage events processing done
              1218            rmt_storage  I  unblock rmt_storage client thread
              1291    PowerManagerService  D  New lightsensor value:40, lcdValue:143
              1291    PowerManagerService  D  lightSensorChangedLocked, buttonValue >= 0, mPowerState = 3
              1218            rmt_storage  I  rmt_storage write: bytes written = 3145216
              1218            rmt_storage  I  rmt_storage write: bytes written = 512
              1218            rmt_storage  I  rmt_storage status handle = 2
              1291                    RPC  D  read RPC packet
              1291                    RPC  D  read RPC packet size: [80]
              1291        locapi_rpc_glue  V  Callback received: 80 (cb_id=0x50B0000 handle=1)
              1291                    RPC  D  written RPC packet size: [28]
              1470   usicWidgetController  D  unbindMusicPlaybackService()
              1707   MediaPlaybackService  E  BadQueue mPlayListLen : 0 mAlbumListLen : 0 mShrinkAlbumListLen : 0
              1291    NotificationService  V  Battery Full, Charging
              1291                 lights  E  write ok string=0,len=1
              1291                 lights  E  write ok string=0,len=1
              1291                 lights  E  write ok string=0 0,len=3
              1291                 lights  E  write ok string=1,len=1
              1707       MediaPlayer.java  D  setOnCompletionListener being cleaned to null
              1291                 lights  E  write ok string=0,len=1
              1291                 lights  E  write ok string=0 0,len=3
              1291    NotificationService  V  Turn off Jogball/OJ LED
              1291    NotificationService  D  cancelNotification, ACTION_NOTIFICATION_REMOVE,pkg=com.htc.music,id=1
              1291           AudioService  I   AudioFocus  abandonAudioFocus() from android.media.AudioManager@476ddee0com.htc.music.MediaPlaybackService$5@476dd838

对我而言,帮助退出了拥有自己的adb版本的Helium桌面应用程序。:)
Velda

在我的情况下是Genymotion,可以使用自己的版本进行配置,也可以设置自己的版本。
Crysfel


在aosp中,我重命名为aosp/out/host/darwin-x86/bin/adbadb-aosp因为aliasing最重要的是我的本地版本(在AOSP之外)无法正常工作。
Paschalis

Answers:


299

您是否正在将Genymotion用于虚拟设备?

如果是,此错误可能是由于Genymotion的ADB与Android SDK的ADB(使用相同的端口号)冲突而导致的,只需通过settings=>选择ADBtab =>单击选项Use custom Android SDK Tools并设置您的SDK文件夹即可解决此问题。

在此处输入图片说明

配置此之后,尝试进入文件夹,重新启动ADB platform-toolsadb放置并做下面的命令:

  • ./adb kill-server
  • ./adb start-server

*提示:您可以在运行上述命令之前关闭Genymotion的过程

希望能有所帮助。


谢谢阿迪亚!最后是一个不错的答案。它在更新android studio后开始。我为此而发疯,重新安装了SDK和所有内容。我认为这是新版本中的错误。
TacoEater 2014年

1
只有这个有帮助!有一个名为“ adbfix”的小工具,它提示我这可能是与路径有关的问题,但实际上并没有解决该问题。
icarus74

股票仿真器会消耗过多的资源,因为它们不断加热在Ubuntu上运行的我的便携式笔记本电脑,因此一定会喜欢Genymotion。
thethakuri

1
我的系统中未安装genymotion。我该如何解决?
arka.b 2015年

7
在运行上述命令之前,必须关闭任何genymotion仿真器。
罗伯特

63

我从计算机上卸载了Dell PC Suite和HTC Sync,此问题消失了。

编辑:详细说明此问题的原因:HTC同步带有其自己的ADB服务器。并更新您的PATH环境变量以指向其服务器版本。编辑PATH变量,并删除对HTC Sync目录的引用。现在,您再次使用Google的ADB。


1
这个问题在我的Mac OS X苹果设备中。
Ritesh Kumar Singh'3

4
HTC Sync是问题所在。它持续在后台运行,与adb.exe引起冲突
rharvey 2015年

LG AirBridge对我造成了问题-卸载该问题,然后运行正常adb start-server
jamsandwich

1
作为开发人员,我需要与HTC Sync Manager捆绑在一起的HTC USB驱动程序。这是Windows 10(我正在使用的OS)的唯一情况。安装后,HTC Sync将在后台运行并连续运行。您要打开“任务管理器”>“服务”选项卡,然后关闭HTCMonitorService后台任务。这样可以防止HTC Sync与Google ADB发生冲突,也可以防止HTC设备连接到PC时Google ADB锁定。
tom_mai78101 '19

28

我发现我有时需要手动显式终止并重新启动服务器:

adb kill-server
adb start-server

通常,这种冲击足以使它重新站起来,并防止重复出现adb server is out of date. killing...消息。


杀死并重新启动似乎对我有用。但是,当我执行以下操作时,我现在收到错误消息“错误:多个设备和模拟器”:按照接受的答案说明进行“ adb tcpip 5555”。
jay_t55 2015年

就我而言,有多个正在运行的adb进程,因此我对其进行了多次调用,adb kill-server直到它说“守护程序未运行...”
mr5

22

确保没有其他正在运行的adb进程

系统上可能运行了多个adb进程。诸如Android Reverse Tether之类的工具可能会使用其自己的adb工具版本,因此内存中的版本可能与从命令行运行的版本(通过path变量)冲突。

视窗

在Windows中,按CTL+ Shift+ ESC访问“任务管理器”,在“ 映像名称”列中排序,然后adb.exe通过右键单击并选择“ 结束进程”杀死所有实例。请注意,存在以下多个实例adb.exe

多个adb.exe实例-如何杀死

Linux(Android)

在Linux环境中,只需使用kill -9命令。这样的事情在运行的Android设备上起作用adb(使用ps输出,使用搜索以grep开头adb的进程,从adb进程获取进程ID ,并将该ID发送给kill -9命令):

kill -9  $(ps  | grep "S adb" | busybox awk '{print $2}')

然后,重新启动adb

adb解决了进程以及由此引起的冲突后,请再次尝试adb从命令行运行:

adb start-server

就我而言,我发现adb的另一个实例正在作为GapDebug的一部分运行。停止GapDebug,终止正在运行的adb进程,并在〜/ Library / Android / sdk // platform-tools中调用./adb start-server即可解决该问题。
Gwened

20

在我的机器(Ubuntu 14.04和Genymotion 2.5.2)中,问题的根源在于,我有2个不同版本的adb文件。

(在缩小此问题的来源之前,我已经按照Aditya Kresna Permana的建议,将Genymotion的“设置”>“使用自定义Android SDK工具”引用到我机器上已安装的Android SDK目录中。网络上的解决方案)。

然后看到,adb version从我的Android SDK安装目录“〜/ Android / Sdk / platform-tools”运行时产生了“ Android Debug Bridge版本1.0.32”

但是,adb version从“ / usr / bin”目录产生的命令-“ Android Debug Bridge版本1.0.31”

因此,只需遵循-http://bernaerts.dyndns.org/linux/74-ubuntu/328-ubuntu-trusty-android-adb-fastboot-qtadb更新“ / usr / bin”中的adb

# adb version
Android Debug Bridge version 1.0.31
# wget -O - https://skia.googlesource.com/skia/+archive/cd048d18e0b81338c1a04b9749a00444597df394/platform_tools/android/bin/linux.tar.gz | tar -zxvf - adb
# sudo mv adb /usr/bin/adb
# sudo chmod +x /usr/bin/adb
# adb version
Android Debug Bridge version 1.0.32

现在,运行adb devices完全可以按预期进行。

并且还解决了相关的问题,即在我的PhoneGap(Cordova)应用未与Genymotion的虚拟设备集成之前。现在显然该问题也解决了。


非常感谢。节省了我的时间。此版本在ubuntu 14.04上运行良好。想知道您是如何获得adb的wget网址的吗?@Rohan_Paul
Akbar Sha Ebrahim

我现在得到的是:bash:/ usr / bin / adb:没有这样的文件或目录
Tushar Saha

17

这是因为您运行的不是ab包含在SDK中的adb。如果在Linux上检查adb二进制文件在哪里

which adb
Expected Output : ANDROID_SDK/platform-tools/adb

如果未指向ANDROID_SDK / platform-tools / adb,则说明您正在运行安装在计算机上其他位置的旧版本的adb。

除了SDK附带的adb之外,运行adb都没错,但是缺点是,当更新Android SDK时,它不会自动更新,这就是您遇到此过时版本问题的原因。

更简单的修补程序并为避免将来发生此问题,将较旧(误导性)的adb二进制文件重命名为其他名称。

请按照以下步骤解决此问题。

$ which adb
*o/p /usr/bin/adb  -   (output will depend on your machine)*
$ cd /usr/bin/
$ ls -lt | grep adb
*o/p -rwxr-xr-x 1 root   root      160912 Mar 31  2016 adb*
$ sudo mv adb adb_bakup
$ ls -lt | grep adb
o/p -rwxr-xr-x 1 root   root      160912 Mar 31  2016 adb_bakup
$ export PATH="/path/to/android_sdk/platform-tools:$PATH"
$ which adb  
*o/p <your android sdk dir>/platform-tools/adb*   ---> You are all good now

我在Mac上尝试过此操作,它只是告诉我我没有更改名称的权限?
杰伊·斯莫

您需要管理员特权才能更改/ usr下的任何目录名称。
圆弧Akh

我以root用户身份登录,但仍然无法更改。
杰伊·

很好的解决方案,我有一个adb symlink到../ Cellar / ...,所以即使使用sdk管理器下载了最后一个adb版本,也设置了解决过期问题的良好路径
Luidgi Gromat

15

我刚刚退出HTC Sync,再次尝试,它成功了。注意:电话变黑(锁定),我刚打开它,并且我的应用程序正在运行。:)


我在ZTE Sync中遇到了同样的问题,将其删除并显示了我的设备。
ovejaexiste 2015年

11

系统:Windows 10

我的问题:将Genymotion设置为指向自定义SDK不会产生任何影响。我仍然收到:

无法在Android上启动项目:无法安装smartsocket 侦听器:无法绑定到127.0.0.1:5037:通常只允许每个套接字地址(协议/网络地址/端口)使用一种。(10048)无法从ADB服务器读取ok *无法启动守护程序*错误:无法连接到守护程序

我发现整个系统使用的ADB版本有所不同。这是我用来查找它们的命令:

where /r C:\ adb.exe

这产生了结果:

C:\Program Files\Expo XDE\resources\app\node_modules\xdl\binaries\windows\adb\adb.exe
C:\Program Files\Genymobile\Genymotion\tools\adb.exe
C:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb.exe
C:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb backup\adb.exe

导航到每个目录并运行:

adb.exe version

让我看到Expo正在运行ADB版本:

Android Debug Bridge version 1.0.36
Revision fd9e4d07b0f5-android

虽然使用自定义SDK的Genymotion具有版本(c:\ Users \ kyle \ AppData \ Local \ Android \ Sdk \ platform-tools \ adb.exe):

Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android

作为测试,我从以下目录获取了adb文件(adb.exe,AdbWinApi.dll,AdbWinUsbApi.dll)

c:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb.exe

并将它们放入备份文件夹中。然后,我将位于

c:\Program Files\Expo XDE\resources\app\node_modules\xdl\binaries\windows\adb\adb.exe

到同一位置。我杀了亚行:

adb kill-server

由于我的Genymotion设备已经在运行,因此会自动重启adb服务器。我点击了Expo XDE内的“重新启动”按钮,它立即开始工作。这是我在1:13:04 AM按下重新启动按钮的日志:

12:45:53 AM
could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)
could not read ok from ADB Server
* failed to start daemon *
error: cannot connect to daemon
1:13:04 AM
Restarting project and clearing packager cache (Hold shift while clicking restart to avoid clearing cache).
1:13:11 AM
Starting React Native packager...
1:13:17 AM
Scanning 543 folders for symlinks in C:\Users\kyle\git\betalog\node_modules (49ms)
1:13:17 AM
1:13:19 AM
Couldn't adb reverse: closed
1:13:20 AM
Project opened! You can now use the "Share" or "Device" buttons to view your project.
1:13:26 AM
Couldn't adb reverse: closed
1:13:26 AM
Downloading latest version of Expo
1:13:28 AM
Installing Expo on device
1:13:33 AM
Opening on Android device
1:13:56 AM
Building JavaScript bundle: finished in 59643ms.
1:14:01 AM
Dependency graph loaded.
1:14:03 AM
Your JavaScript transform cache is empty, rebuilding (this may take a minute).

结论:Genymotion和Expo可能需要使用相同版本的adb,以便Expo可以与模拟设备正确通信。将Genymotion指向您的android SDK位置,并确保Expo XDE具有相同版本,将允许设备之间进行正确的通信。我已将Expo XDE版本移至SDK位置,但您可能可以采用其他方法(获取sdk ADB文件并将其放置在Expo XDE资源位置)。

PS 我一直都在与这个问题有关的stackoverflow帖子中。大家知道我的任务管理器显示了adb.exe运行的三个实例。如果您杀死其中任何一个,它们就会回来。

希望这可以帮助/欢呼


1
几个小时后,这解决了我的第一个问题(感谢队友)。下一个问题是未授权仿真设备(adb设备),这使我花费了更少的时间来解决。
乔纳森

8

设备(adbd)上的ADB守护程序似乎与主机上的ADB服务器进程在使用哪个版本的协议不一致。您正在运行哪个版本的SDK,正在调试的设备上的OS版本是什么?

实际上,您可能需要做的是降级SDK工具的版本,以使ADB守护程序与进程保持一致。我以为服务器进程是完全向后兼容的,但这可能是不兼容的情况之一。Google并未宣传您可以获取其旧的SDK工具包这一事实,但是可以通过在http://developer.android.com的存档区域中查找来找到它们。


1
您建议我降级到哪个版本?
2011年

您正在使用哪个设备以及正在运行什么操作系统版本?我并不真正认为有必要降级,因为那通常是没有必要的,但是正如我所说,这可能是一个极端的情况。SDK r10刚刚在本周发布,而r9仅仅在一个月左右发布。如果问题是最近才引入的,那么r7应该可以提供一个稳定的基础,可以追溯到去年夏天。您可以在developer.android.com/sdk/tools-notes.html中找到这些早期版本。祝你好运
埃里克·克洛宁纳

设备上的OS版本= 2.2,SDK = 10
Arunabh Das

这不是版本不匹配adbdadb server,而是之间adb serveradb client(在PC上都运行)
亚历克斯P.

6

首先有一个快速的方法

sudo rm /usr/bin/adb

然后

sudo ln -s /home/{{username}}/Android/Sdk/platform-tools/adb  /usr/bin/adb

解决问题的最快方法


7
不能相信我也遇到了同样的问题,而我又一次从自己身上得到了答案
伊恩·萨姆斯

这确实是最快的方法!谢谢!
阿巴斯

5

我只是完全关闭了htc sync应用程序,然后重试。它按预期工作。


5

我把头撞在墙上。当我安装最新版本的HTC sync(3.0.5579)时,这种情况开始发生。由于某种原因,adb.exe在任务管理器中多次出现,而我却发现adb服务器已过时,多次杀死了错误。我在HTC同步目录和Android SDK平台工具目录中找到了adb.exe版本。我的路径设置正确地指向了android SDK目录,但是没有看到HTC Sync路径(也许我缺少了一些东西,但是我不这么认为)。无论如何,要解决此问题,我只是在HTC Sync目录中重命名了adb.exe文件,然后一切又恢复了。这可能不是解决此问题的正确方法,但是它对我有用。


5

对我有所帮助:停止HTC Sync(在系统托盘中),然后重命名HTC的adb.exe(C:\ Program Files(x86)\ HTC \ HTC Sync 3.0 \ adb.exe)。


5

系统:Windows 7,Android Studio。

adb devices从Windows命令行运行时发生此错误。

根本原因是我从命令行运行的adb与从Android Studio运行的adb不同。

解:

  1. 首先杀死计算机上所有正在运行的adb进程。

    taskkill /F /IM adb.exe

  2. 从Android Studio运行您的应用。

  3. 从Windows任务管理器中找到adb.exe的确切文件位置,或者通过运行以下命令

    wmic process where "name='adb.exe'" get ProcessID, ExecutablePath

  4. 在Windows命令提示符下,运行where adb以查找从命令提示符处运行的adb。此路径与上面的步骤3中的路径不同。

  5. 编辑Windows系统变量PATH。从中删除在步骤4中找到的基本路径。

  6. 编辑PATH之后,可以在NEW命令提示符下输入以下命令来查看此变量的当前内容(不要使用旧的提示符。)

    echo %PATH%

现在,在命令提示符下运行adb。它不应显示任何“服务器过期错误”!


5

我在尝试使用时遇到了类似的问题,adb例如adb logcat提供了以下错误输出:

adb server version (40) doesn't match this client (36); killing...

该解决方案于2018年在我使用终端的Android Studio 3.2.1上的Ubuntu 18.04上为我工作。

命令如下:

adb kill-server sudo cp ~/Android/Sdk/platform-tools/adb /usr/bin/adb sudo chmod +x /usr/bin/adb adb start-server

您可能需要cp根据系统上的路径调整命令参数Android/

我的来源的第二代荣誉:https : //stackoverflow.com/a/40991118/7015599


1
我能够执行类似的操作而无需替换/ usr / bin / adb。我在bash_aliases->别名adb ='〜/ Android / Sdk / platform-tools / adb'中设置了一个别名。源.bashrc,很不错。
詹姆斯

4

试试这个:

  1. 关闭Eclipse应用程序。

  2. adb kill-server

  3. 重新启动Eclipse。


4

首先关闭所有使用ADB的东西。(Android Studio,Eclipse,Emulator(以及Bluestack)),然后执行

adb kill-server
adb start-server

就我而言,我只是更新了Studio。


2

好的,还有通过“ Lenovo Photo Companion”分发的adb.exe的另一个实例。我的一个朋友拥有Lenovo Yoga笔记本,并安装了此软件,其中包括另一个adb.exe

卸载它可以解决问题。


2

操作系统:Ubuntu

正在运行1个以上的adb。检查当前的adb:

    which adb
    Expected Output : ANDROID_SDK/platform-tools/adb

通常,结果将是:

    /usr/bin/adb

通过以下方式删除此旧版本:

    cd /urs/bin
    sudo rm adb

1

您是否尝试过使用SDK版本8。由于设备位于2.2中,而您的SDK为10,因此可能存在冲突。

祝您降级,万事如意!!希望能解决。


1

如果您要与之交互的设备是通过USB连接的物理电话,则可以将其拔出并重新插入,它应该可以工作。我认为有时有时会变得不同步。


1

我的一台开发机器(所有运行Windows 7 x64)上都遇到了这个问题,而其他所有机器的adb都能正常工作。我遇到此问题的原因是我在%android-sdk%\ tools中有一个旧版本的adb.exe,而较新的Android SDK在%android-sdk%\ platform-tools下有adb.exe。

从%android-sdk%\ tools中删除较旧的adb.exe并将%android-sdk%\ platform-tools添加到%PATH%解决了此问题

或更笼统地说,在您的路径中查找所有过时的adb可执行文件,只需使用Android SDK随附的最新版本即可


1

我对SO进行了所有回答,但对我却没有用。当我从任务管理器中杀死adb.exe进程时,它一直在重新打开它,原因是Droid Explorer在后台运行

通过任务管理器杀死DE进程,然后杀死adb.exe(然后通过“ adb启动服务器”从控制台再次运行它对我来说很有效。

这对于植根其设备的许多很有用。


这是我的解决方案。确保End process tree在任务管理器中获取Droid Explorer服务。
杰森

1

不幸的是,我没有足够的声誉来发表评论。但是标为答案的回答使我朝着正确的方向前进。

尽管我已安装HTC Sync Manager,但在其路径中没有看到任何相关信息。我目前不使用HTC设备,仅安装了同步管理器来解决驱动程序问题。卸载HTC同步管理器后,这个问题对我来说已不复存在。

希望这对其他人有帮助。


1

就我而言,问题是由Virtuous Ten Studio引起的,该External/ADB目录中有adb.exe 。

去那里跑步.\adb.exe kill-server,你会很好。


1

在我的情况下,这是由于在与Android Studio相同的计算机上运行带有Android Xamarin项目的Visual Studio导致的-每个IDE都运行不同的adb服务器版本。我关闭了Visual Studio,错误消失了。


0

如上所述,问题是由于HTC Sync附带的adb.exe版本冲突而引起的。从htcUPCTLoader.exe中将其从PATH删除将无济于事在后台不断运行的仍会重新启动错误的ADB版本。

一种解决方案是完全删除adb.exe从HTC Sync文件夹中,但这会破坏HTC Sync。

我刚刚编写了一个简单的工具,用一个存根替换了旧的adb.exe,该存根从SDK目录中调用了最新的adb.exe,从而消除了冲突(例如,HTC Sync附带的版本1.0.25和Android SDK附带的版本1.0.29) 。

ADB Fixer工具

可以从http://visualgdb.com/adbfix下载该工具


0

我今天也遇到了这个问题,原来我禁用了网络驱动程序,因为我遇到了WIFI / LAN问题。重新启用解决了该问题


0

为我安装sdk更新(包括平台工具)!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.