Skip to content

Commit

Permalink
Merge pull request #8 from modular-ftc/update-to-5.2-lite
Browse files Browse the repository at this point in the history
Update to 5.2 lite
  • Loading branch information
iamwood authored Sep 26, 2019
2 parents 203555f + b73d9f6 commit 5df8d84
Show file tree
Hide file tree
Showing 516 changed files with 4,458 additions and 1,009 deletions.
6 changes: 4 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand All @@ -19,7 +19,9 @@ allprojects {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url "https://raw.githubusercontent.com/Pattonville-Robotics/ftc-lib-repo/mvn-repo/" }
maven {
url "https://raw.githubusercontent.com/Pattonville-Robotics/ftc-lib-repo/mvn-repo/"
}
}
}

Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Mon Oct 30 19:28:07 CDT 2017
#Wed Sep 25 19:49:00 CDT 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
14 changes: 9 additions & 5 deletions library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ android {
// Required to bypass runtime Camera permissions
//noinspection ExpiredTargetSdkVersion
targetSdkVersion 19
versionCode 13
versionName "4.3.1-lite"
versionCode 14
versionName "5.2.0-lite"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

ndk {
Expand All @@ -35,17 +35,21 @@ project.archivesBaseName = 'robotcore-repackaged'

dependencies {
// Original dependencies
implementation "org.first.ftc:tensorflow-lite:4.3"
implementation "org.first.ftc:tfod:4.3"
implementation "org.first.ftc:tensorflow-lite:5.2"
implementation "org.first.ftc:tfod:5.2"

// Repackaged dependencies
implementation 'com.github.modular-ftc:vuforia-repackaged:4.3.0'
implementation 'com.github.modular-ftc:vuforia-repackaged:5.2.0'

// Android dependencies
implementation 'com.android.support:support-annotations:28.0.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'org.danilopianini:gson-extras:0.2.1'

implementation 'com.google.errorprone:javac:1.8.0-u20'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'androidx.versionedparcelable:versionedparcelable:1.1.0'

}

//For JitPack
Expand Down
22 changes: 12 additions & 10 deletions library/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.qualcomm.robotcore"
android:versionCode="55"
android:versionName="8.9" >
android:versionCode="64"
android:versionName="11.6" >

<uses-sdk android:targetSdkVersion="26" />

<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"
Expand All @@ -20,22 +22,19 @@
<uses-permission
android:name="android.permission.INTERNET"
android:required="true" />

<!-- Classified as Dangerous Permission in SDK 26 -->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:required="true" />
<!-- Classified as Dangerous Permission in SDK 26 -->
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:required="true" />
<uses-permission
android:name="android.permission.WRITE_SETTINGS"
android:required="true" />

<!--
"Allows applications to access serial ports via the SerialManager.". So, uncertain we need,
as we don't use the SerialManager.
-->
<!-- Classified as System Permission in SDK 26 -->
<uses-permission
android:name="android.permission.SERIAL_PORT"
android:name="android.permission.WRITE_SETTINGS"
android:required="true" />

<!-- see AppUtil.setTimeZone() -->
Expand All @@ -53,6 +52,9 @@
android:required="true" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission
android:name="com.revrobotics.permission.UPDATE_CONTROL_HUB"
android:required="true" />

<uses-feature android:name="android.hardware.usb.accessory" />
<uses-feature android:glEsVersion="0x00020000" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,18 +45,15 @@
import com.qualcomm.robotcore.robocol.RobocolDatagram;
import com.qualcomm.robotcore.robocol.TelemetryMessage;
import com.qualcomm.robotcore.robot.RobotState;
import com.qualcomm.robotcore.util.ElapsedTime;
import com.qualcomm.robotcore.util.Range;
import com.qualcomm.robotcore.util.RobotLog;
import com.qualcomm.robotcore.util.ThreadPool;
import com.qualcomm.robotcore.util.*;
import com.qualcomm.robotcore.wifi.NetworkConnection;
import com.qualcomm.robotcore.wifi.NetworkType;

import org.firstinspires.ftc.robotcore.internal.network.CallbackResult;
import org.firstinspires.ftc.robotcore.internal.network.NetworkConnectionHandler;
import org.firstinspires.ftc.robotcore.internal.network.PeerStatusCallback;
import org.firstinspires.ftc.robotcore.internal.network.RecvLoopRunnable;
import org.firstinspires.ftc.robotcore.internal.network.RobotCoreCommandList;
import org.firstinspires.ftc.robotcore.internal.network.SendOnceRunnable;
import org.firstinspires.ftc.robotcore.internal.network.SocketConnect;
import org.firstinspires.ftc.robotcore.internal.opmode.OpModeManagerImpl;
import org.firstinspires.ftc.robotcore.internal.system.AppUtil;
Expand All @@ -75,7 +72,7 @@
* to the current EventLoop.
*/
@SuppressWarnings("unused,WeakerAccess")
public class EventLoopManager implements RecvLoopRunnable.RecvLoopCallback, NetworkConnection.NetworkConnectionCallback, SendOnceRunnable.ClientCallback, SyncdDevice.Manager {
public class EventLoopManager implements RecvLoopRunnable.RecvLoopCallback, NetworkConnection.NetworkConnectionCallback, PeerStatusCallback, SyncdDevice.Manager {

//------------------------------------------------------------------------------------------------
// Types
Expand All @@ -87,7 +84,7 @@ public class EventLoopManager implements RecvLoopRunnable.RecvLoopCallback, Netw
public interface EventLoopMonitor {
void onStateChange(@NonNull RobotState state);
void onTelemetryTransmitted();
void onPeerConnected(boolean peerLikelyChanged);
void onPeerConnected();
void onPeerDisconnected();
}

Expand All @@ -111,7 +108,6 @@ public interface EventLoopMonitor {
private static final double SECONDS_UNTIL_FORCED_SHUTDOWN = 2.0;
private final EventLoop idleEventLoop;
public RobotState state = RobotState.NOT_STARTED;
protected boolean isPeerConnected = false;
private ExecutorService executorEventLoop = ThreadPool.newSingleThreadExecutor("executorEventLoop");
private ElapsedTime lastHeartbeatReceived = new ElapsedTime();
private EventLoop eventLoop = null;
Expand Down Expand Up @@ -146,19 +142,28 @@ public EventLoopManager(@NonNull Context context, @NonNull EventLoopManagerClien
this.idleEventLoop = idleEventLoop;
this.eventLoop = idleEventLoop;
changeState(RobotState.NOT_STARTED);
NetworkConnectionHandler.getInstance().registerPeerStatusCallback(this);
}

//------------------------------------------------------------------------------------------------
// Accessors
//------------------------------------------------------------------------------------------------

/**
* Set a monitor for this event loop
* Set a monitor for this event loop, which will immediately have the appropriate method called to
* indicate the current peer status.
*
* @param monitor event loop monitor
*/
public void setMonitor(EventLoopMonitor monitor) {
callback = monitor;

// Alert the callback to the current peer status
if (NetworkConnectionHandler.getInstance().isPeerConnected()) {
callback.onPeerConnected();
} else {
callback.onPeerDisconnected();
}
}

/** return any event loop monitor previously set */
Expand Down Expand Up @@ -583,6 +588,12 @@ private void startEventLoop() throws RobotCoreException {

private void stopEventLoop() {

// Prevent stuck-loop LinearOpMode from staying in memory during Restart Robot action.
if(eventLoop.getOpModeManager() != null)
{
eventLoop.getOpModeManager().stopActiveOpMode();
}

executorEventLoop.shutdownNow();
ThreadPool.awaitTerminationOrExitApplication(executorEventLoop, 10, TimeUnit.SECONDS, "EventLoop", "possible infinite loop in user code?");

Expand Down Expand Up @@ -676,42 +687,38 @@ public CallbackResult heartbeatEvent(RobocolDatagram packet, long tReceived) thr
return CallbackResult.HANDLED;
}

@Override public void peerConnected(boolean peerLikelyChanged) {
this.isPeerConnected = true;
@Override public void onPeerConnected() {
if (callback != null) {
callback.onPeerConnected(peerLikelyChanged);
callback.onPeerConnected();
}
}

@Override public void peerDisconnected() {
@Override public void onPeerDisconnected() {
if (callback != null) {
callback.onPeerDisconnected();
}

if (this.isPeerConnected) {
// If we lose contact with the DS, then we auto-stop the robot
OpModeManagerImpl opModeManager = eventLoop.getOpModeManager();
// If we lose contact with the DS, then we auto-stop the robot
OpModeManagerImpl opModeManager = eventLoop.getOpModeManager();

// opModeManager will be null if not running FtcEventLoop right now
if (opModeManager != null) {
String msg = "Lost connection while running op mode: " + opModeManager.getActiveOpModeName();
opModeManager.initActiveOpMode(OpModeManager.DEFAULT_OP_MODE_NAME);
RobotLog.i(msg);
}
else {
RobotLog.i("Lost connection while main event loop not active");
}

this.isPeerConnected = false;
// opModeManager will be null if not running FtcEventLoop right now
if (opModeManager != null) {
String msg = "Lost connection while running op mode: " + opModeManager.getActiveOpModeName();
opModeManager.initActiveOpMode(OpModeManager.DEFAULT_OP_MODE_NAME);
RobotLog.i(msg);
}
else {
RobotLog.i("Lost connection while main event loop not active");
}

remoteAddr = null;
lastHeartbeatReceived = new ElapsedTime(0);
}

public CallbackResult peerDiscoveryEvent(RobocolDatagram packet) throws RobotCoreException {

try {
networkConnectionHandler.updateConnection(packet, null, this);
networkConnectionHandler.updateConnection(packet);
} catch (RobotProtocolException e) {
RobotLog.ee(TAG, e.getMessage());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.qualcomm.robotcore.exception;

public class TargetPositionNotSetException extends RuntimeException {
public TargetPositionNotSetException() {
super("Failed to enable motor. You must set a target position before switching to RUN_TO_POSITION mode");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ are permitted (subject to the limitations in the disclaimer below) provided that
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
LICENSE. 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 FITNESSFOR A PARTICULAR PURPOSE
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
Expand Down
Loading

0 comments on commit 5df8d84

Please sign in to comment.