Compare commits

...

7 Commits
master ... pr/1

Author SHA1 Message Date
Snek 566f1ea389 Portrait-only mode for LaunchActivity 2017-03-03 13:58:36 +03:00
Snek d70fa04a8c Optimize PNGs. Significant app size reduction. 2017-03-03 02:43:12 +03:00
Snek 3fa7f452a0 Small fixes. New mood state. Comments on code. 2017-03-03 02:21:51 +03:00
Snek dae0f751e7 Handle RECORD_AUDIO permission 2017-03-03 00:55:36 +03:00
Snek 4c47de1ad5 Optimize speech output 2017-03-02 23:58:17 +03:00
Snek da0089ae1a Fix animations 2017-03-02 03:27:14 +03:00
Snek 430bccd4cf STT 2017-03-02 02:29:03 +03:00
264 changed files with 644 additions and 254 deletions

1
app/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

24
app/build.gradle Normal file
View File

@ -0,0 +1,24 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
defaultConfig {
applicationId "solidsnek.amadeus_fork"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:25.2.0'
}

17
app/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,17 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in D:\Soft\AndroidSDK/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

View File

@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yink.amadeus">
package="solidsnek.amadeus_fork">
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<application
android:allowBackup="true"
@ -13,7 +15,8 @@
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity android:name=".LaunchActivity">
<activity android:name=".LaunchActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@ -1,168 +0,0 @@
package com.example.yink.amadeus;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.drawable.AnimationDrawable;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.Random;
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener{
String TAG = "Amadeus";
TextToSpeech tts;
ImageView kurisu;
AnimationDrawable animation;
HashMap<String, String> map;
private final int eyes_closed = 0;
private final int normal = 1;
private final int sad = 2;
private final int indifferent = 3;
private final int wink = 4;
private final int pissed = 5;
private final int annoyed = 6;
private final int disappointed = 7;
private final int happy = 8;
private final int angry = 9;
private final int blush = 10;
private final int side = 11;
ArrayList<VoiceLine> voiceLines = new ArrayList<>();
@Override
public void onWindowFocusChanged(boolean hasFocus){
if(hasFocus)
speak(new VoiceLine("Hallo.",happy));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
kurisu = (ImageView) findViewById(R.id.imageView_kurisu);
setupLines();
map = new HashMap<String, String>();
tts = new TextToSpeech(this, this);
kurisu.setImageResource(R.drawable.kurisu_1);
animation = (AnimationDrawable) kurisu.getDrawable();
kurisu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Random randomgen = new Random();
speak(voiceLines.get(randomgen.nextInt(voiceLines.size())));
}});
}
@Override
public void onInit(int status) {
if(status==TextToSpeech.SUCCESS){
tts.setLanguage(Locale.JAPAN);
tts.setPitch(1.05f);
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String s) {
runOnUiThread(new Runnable() {
@Override
public void run() {
animation.start();
}
});
}
@Override
public void onDone(String s) {
runOnUiThread(new Runnable() {
@Override
public void run() {
animation.stop();
kurisu.setImageDrawable(animation.getFrame(0));
}
});
}
@Override
public void onError(String s) {
animation.stop();
}
});
}
}
public void speak(VoiceLine line){
switch (line.getState()){
case eyes_closed:
kurisu.setImageResource(R.drawable.kurisu_1);
break;
case normal:
kurisu.setImageResource(R.drawable.kurisu_2);
break;
case sad:
kurisu.setImageResource(R.drawable.kurisu_3);
break;
case indifferent:
kurisu.setImageResource(R.drawable.kurisu_4);
break;
case wink:
kurisu.setImageResource(R.drawable.kurisu_5);
break;
case pissed:
kurisu.setImageResource(R.drawable.kurisu_6);
break;
case annoyed:
kurisu.setImageResource(R.drawable.kurisu_7);
break;
case disappointed:
kurisu.setImageResource(R.drawable.kurisu_8);
break;
case happy:
tts.setPitch(1.5f);
kurisu.setImageResource(R.drawable.kurisu_9);
break;
case angry:
kurisu.setImageResource(R.drawable.kurisu_10);
break;
case blush:
tts.setPitch(1.5f);
tts.setSpeechRate(1.3f);
kurisu.setImageResource(R.drawable.kurisu_11);
break;
case side:
kurisu.setImageResource(R.drawable.kurisu_12);
break;
default:kurisu.setImageResource(R.drawable.kurisu_2);
}
animation = (AnimationDrawable) kurisu.getDrawable();
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"UniqueID");
tts.speak(line.getText(),TextToSpeech.QUEUE_FLUSH,map);
tts.setPitch(1.05f);
tts.setSpeechRate(1.0f);
}
@Override
protected void onDestroy(){
tts.shutdown();
super.onDestroy();
}
protected void setupLines(){
voiceLines.add(new VoiceLine("Konban wa, Okabe. Okaeri!",happy));
voiceLines.add(new VoiceLine("Okabe, sabishi des!",sad));
voiceLines.add(new VoiceLine("Tsumaranai",indifferent));
voiceLines.add(new VoiceLine("Okabe ga ski",blush));
voiceLines.add(new VoiceLine("Chigau",angry));
}
}

View File

@ -1,23 +0,0 @@
package com.example.yink.amadeus;
/**
* Created by Yink on 28.02.2017.
*/
public class VoiceLine {
public String getText() {
return text;
}
public int getState() {
return state;
}
final private String text;
final private int state;
public VoiceLine(String text, int state){
this.text = text;
this.state = state;
}
}

View File

@ -1,33 +1,53 @@
package com.example.yink.amadeus;
package solidsnek.amadeus_fork;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
public class LaunchActivity extends AppCompatActivity {
ImageView connect;
ImageView connect, cancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launch);
connect = (ImageView) findViewById(R.id.imageView_connect);
cancel = (ImageView) findViewById(R.id.imageView_cancel);
connect.setImageResource(R.drawable.connect_unselect);
cancel.setImageResource(R.drawable.cancel_unselect);
connect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
connect.setImageResource(R.drawable.connect_select);
Intent intent = new Intent(LaunchActivity.this,MainActivity.class);
startActivity(intent);
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
cancel.setImageResource(R.drawable.cancel_select);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
}
@Override
protected void onResume(){
connect.setImageResource(R.drawable.connect_unselect);
cancel.setImageResource(R.drawable.cancel_unselect);
super.onResume();
}
}

View File

@ -0,0 +1,198 @@
package solidsnek.amadeus_fork;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.AnimationDrawable;
import android.media.MediaPlayer;
import android.speech.RecognitionListener;
import android.speech.SpeechRecognizer;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.speech.RecognizerIntent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity {
String TAG = "Amadeus";
ImageView kurisu;
AnimationDrawable animation;
/* Mood constants. Less cpu cycles - a little bit more memory consumption */
private class Mood {
public static final int HAPPY = R.drawable.kurisu_9;
public static final int PISSED = R.drawable.kurisu_6;
public static final int ANNOYED = R.drawable.kurisu_7;
public static final int ANGRY = R.drawable.kurisu_10;
public static final int BLUSH = R.drawable.kurisu_11;
public static final int SIDE = R.drawable.kurisu_12;
public static final int SAD = R.drawable.kurisu_3;
public static final int NORMAL = R.drawable.kurisu_2;
public static final int SLEEPY = R.drawable.kurisu_1;
public static final int WINKING = R.drawable.kurisu_5;
public static final int DISAPPOINTED = R.drawable.kurisu_8;
public static final int INDIFFERENT = R.drawable.kurisu_4;
public static final int SIDED_PLEASANT = R.drawable.kurisu_15;
public static final int SIDED_WORRIED = R.drawable.kurisu_17;
}
/* Don't forget about permission to use audio! */
private SpeechRecognizer sr;
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if (hasFocus) {
speak(R.raw.haro, Mood.SIDED_PLEASANT);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
kurisu = (ImageView) findViewById(R.id.imageView_kurisu);
animation = (AnimationDrawable) kurisu.getDrawable();
sr = SpeechRecognizer.createSpeechRecognizer(this);
sr.setRecognitionListener(new listener());
kurisu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MainActivity host = (MainActivity) view.getContext();
int permissionCheck = ContextCompat.checkSelfPermission(host,
Manifest.permission.RECORD_AUDIO);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
promptSpeechInput();
} else {
speak(R.raw.daga_kotowaru, Mood.PISSED);
}
}
});
}
@Override
protected void onDestroy() {
if (sr != null)
sr.destroy();
super.onDestroy();
}
private void promptSpeechInput() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ja-JP");
sr.startListening(intent);
}
public void speak(int raw, int mood) {
try {
MediaPlayer m = MediaPlayer.create(getApplicationContext(), raw);
kurisu.setImageResource(mood);
animation = (AnimationDrawable) kurisu.getDrawable();
if (m.isPlaying()) {
m.stop();
m.release();
m = new MediaPlayer();
}
m.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
runOnUiThread(new Runnable() {
@Override
public void run() {
animation.start();
}
});
}
});
m.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
runOnUiThread(new Runnable() {
@Override
public void run() {
animation.stop();
kurisu.setImageDrawable(animation.getFrame(0));
}
});
}
});
m.start();
} catch (Exception e) {
e.printStackTrace();
}
}
private class listener implements RecognitionListener {
public void onReadyForSpeech(Bundle params) {
Log.d(TAG, "onReadyForSpeech");
}
public void onBeginningOfSpeech() {
Log.d(TAG, "onBeginningOfSpeech");
}
public void onRmsChanged(float rmsdB) {
Log.d(TAG, "onRmsChanged");
}
public void onBufferReceived(byte[] buffer) {
Log.d(TAG, "onBufferReceived");
}
public void onEndOfSpeech() {
Log.d(TAG, "onEndofSpeech");
}
public void onError(int error) {
Log.d(TAG, "error " + error);
}
public void onResults(Bundle results) {
String str = "";
Log.d(TAG, "onResults " + results);
ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
str += data.get(0);
String[] greetingArr = new String[]{"ハロー", "おはよう", "こんにちは", "こんばんは"};
List<String> greeting = Arrays.asList(greetingArr);
/*
* TODO: Probably not good idea to use bunch of else-if statements
*/
if (greeting.contains(str)) {
speak(R.raw.haro, Mood.HAPPY);
} else if (str.equals("クリス")) {
speak(R.raw.hai, Mood.NORMAL);
} else {
/*
* If voice input data doesn't match any preset
*/
speak(R.raw.senpai, Mood.SIDED_WORRIED);
}
}
public void onPartialResults(Bundle partialResults) {
Log.d(TAG, "onPartialResults");
}
public void onEvent(int eventType, Bundle params) {
Log.d(TAG, "onEvent " + eventType);
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 490 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 490 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 490 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 473 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 471 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 471 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 471 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 471 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 470 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 470 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 470 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Some files were not shown because too many files have changed in this diff Show More