summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorMarcin Kosiba <mkosiba@google.com>2014-08-04 11:10:45 +0100
committerMarcin Kosiba <mkosiba@google.com>2014-08-04 11:10:45 +0100
commit036220cf332ecc228a9a2b8441777a2d916d4e5f (patch)
treebb81f1da64aa0c5ac11d7517694f6fd8afbedd63 /apps
parent9882ace93f839ce226489a75942290c0a41caf96 (diff)
downloadandroid_development-036220cf332ecc228a9a2b8441777a2d916d4e5f.tar.gz
android_development-036220cf332ecc228a9a2b8441777a2d916d4e5f.tar.bz2
android_development-036220cf332ecc228a9a2b8441777a2d916d4e5f.zip
Revert "DevTools - add support for WifiScanner and Passpoint"
The commit has broken the build. This reverts commit b06e03add783c7f688240b7205441f9315a202f1. Change-Id: Id58a9535ecca86cf353e6e0921e3cdcb7ea2f127
Diffstat (limited to 'apps')
-rw-r--r--apps/Development/res/layout/connectivity.xml60
-rw-r--r--apps/Development/res/values/strings.xml17
-rw-r--r--apps/Development/src/com/android/development/Connectivity.java375
3 files changed, 19 insertions, 433 deletions
diff --git a/apps/Development/res/layout/connectivity.xml b/apps/Development/res/layout/connectivity.xml
index dfe1f0194..2aaf6c61f 100644
--- a/apps/Development/res/layout/connectivity.xml
+++ b/apps/Development/res/layout/connectivity.xml
@@ -29,7 +29,6 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
-
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
@@ -209,25 +208,6 @@
<!-- divider line -->
<View android:background="#FFFFFFFF"
- android:layout_width="match_parent"
- android:layout_height="3dip" />
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <Button android:id="@+id/startBackgroundScan"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/start_background_scan" />
- <Button android:id="@+id/stopBackgroundScan"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/stop_background_scan" />
- </LinearLayout>
-
- <!-- divider line -->
- <View android:background="#FFFFFFFF"
android:layout_width="match_parent"
android:layout_height="3dip" />
@@ -360,46 +340,6 @@
android:layout_height="wrap_content"
android:text="@string/routed_socket_request" />
</LinearLayout>
-
- <!-- divider line -->
- <View android:background="#FFFFFFFF"
- android:layout_width="match_parent"
- android:layout_height="3dip" />
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <Button android:id="@+id/hs20_state"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/hs20_state" />
- <Button android:id="@+id/hs20_scan"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/hs20_scan" />
- <Button android:id="@+id/hs20_anqp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/hs20_anqp" />
- </LinearLayout>
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <Button android:id="@+id/hs20_osu"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/hs20_osu" />
- <Button android:id="@+id/hs20_rem"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/hs20_rem" />
- <Button android:id="@+id/hs20_match"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/hs20_match" />
- </LinearLayout>
</LinearLayout>
</ScrollView>
diff --git a/apps/Development/res/values/strings.xml b/apps/Development/res/values/strings.xml
index de65673ee..0c13987c4 100644
--- a/apps/Development/res/values/strings.xml
+++ b/apps/Development/res/values/strings.xml
@@ -31,11 +31,9 @@
<string name="start_screen_toggling">Start Screen Toggle</string>
<string name="stop_screen_toggling">Stop Screen Toggle</string>
<string name="start_scan">Start Scan</string>
- <string name="start_background_scan">Start Bkgnd Scan</string>
<string name="scan_cycles">Scan Cycles: </string>
<string name="disconnect">Disconnect</string>
- <string name="stop_background_scan">Stop Bkgnd Scan</string>
<string name="start_tdls">Start TDLS</string>
<string name="stop_tdls">Stop TDLS</string>
<string name="mac_tdls"> IP/MAC: </string>
@@ -55,17 +53,11 @@
<string name="routed_http_request">Make routed http request</string>
<string name="routed_socket_request">Make routed socket request</string>
- <string name="hs20_state">HS20 State</string>
- <string name="hs20_scan">HS20 Scan</string>
- <string name="hs20_anqp">HS20 ANQP</string>
- <string name="hs20_match">HS20 Match</string>
- <string name="hs20_osu">HS20 OSU</string>
- <string name="hs20_rem">HS20 Rem</string>
- <string name="device_info_default">unknown</string>
- <string name="device_info_uptime">Uptime</string>
- <string name="device_info_awaketime">Awake Time</string>
- <string name="device_info_asleeptime">Asleep Time</string>
+ <string name="device_info_default">unknown</string>
+ <string name="device_info_uptime">Uptime</string>
+ <string name="device_info_awaketime">Awake Time</string>
+ <string name="device_info_asleeptime">Asleep Time</string>
<string name="build_id_label">Build ID</string>
<string name="build_date_label">Build Date</string>
@@ -247,5 +239,4 @@
<string name="scancard">Scan SD card</string>
<string name="numsongs"># of albums</string>
<string name="insertbutton">Insert %1s albums</string>
-
</resources>
diff --git a/apps/Development/src/com/android/development/Connectivity.java b/apps/Development/src/com/android/development/Connectivity.java
index bf3311a8a..93d199b15 100644
--- a/apps/Development/src/com/android/development/Connectivity.java
+++ b/apps/Development/src/com/android/development/Connectivity.java
@@ -18,46 +18,51 @@
package com.android.development;
import android.app.Activity;
+import android.app.ActivityManagerNative;
import android.app.AlarmManager;
-import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.LinkAddress;
import android.net.NetworkUtils;
import android.net.RouteInfo;
-import android.net.Uri;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
-import android.net.wifi.WifiScanner;
-import android.net.wifi.passpoint.WifiPasspointInfo;
-import android.net.wifi.passpoint.WifiPasspointManager;
-import android.net.wifi.passpoint.WifiPasspointOsuProvider;
-import android.net.wifi.passpoint.WifiPasspointPolicy;
import android.os.RemoteException;
import android.os.Handler;
import android.os.Message;
import android.os.IBinder;
import android.os.INetworkManagementService;
+import android.os.Parcel;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.ServiceManager;
+import android.os.ServiceManagerNative;
import android.os.SystemClock;
+import android.provider.Settings;
import android.os.Bundle;
import android.util.Log;
+import android.view.IWindowManager;
import android.view.View;
+import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
+import android.widget.CompoundButton;
import android.widget.EditText;
+import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
+import android.widget.AdapterView.OnItemSelectedListener;
import com.android.internal.telephony.Phone;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.NetworkInterface;
@@ -65,6 +70,7 @@ import java.net.Socket;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
+import java.util.Map;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
@@ -115,19 +121,10 @@ public class Connectivity extends Activity {
private String mTdlsAddr = null;
private WifiManager mWm;
- private WifiScanner mWs;
- private WifiPasspointManager mPpm;
- private WifiPasspointManager.Channel mPpmChannel;
private PowerManager mPm;
private ConnectivityManager mCm;
private INetworkManagementService mNetd;
- private List<ScanResult> mHs20ScanResult;
- private List<WifiPasspointOsuProvider> mHs20OsuList = new ArrayList<WifiPasspointOsuProvider>();
- Hs20AnqpEventHandler mHs20AnqpRecv;
- Hs20OsuEventHandler mHs20OsuRecv;
- Hs20RemEventHandler mHs20RemRecv;
-
private WifiScanReceiver mScanRecv;
IntentFilter mIntentFilter;
@@ -261,10 +258,6 @@ public class Connectivity extends Activity {
setContentView(R.layout.connectivity);
mWm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
- mWs = (WifiScanner)getSystemService(Context.WIFI_SCANNING_SERVICE);
- mPpm = (WifiPasspointManager)getSystemService(Context.WIFI_PASSPOINT_SERVICE);
- mPpmChannel = mPpm.initialize(getApplicationContext(), getMainLooper(), null);
- if (mPpm == null || mPpmChannel == null) Log.d(TAG, "oops: null passpoint manager");
mPm = (PowerManager)getSystemService(Context.POWER_SERVICE);
mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
@@ -307,9 +300,6 @@ public class Connectivity extends Activity {
findViewById(R.id.startTdls).setOnClickListener(mClickListener);
findViewById(R.id.stopTdls).setOnClickListener(mClickListener);
- findViewById(R.id.startBackgroundScan).setOnClickListener(mClickListener);
- findViewById(R.id.stopBackgroundScan).setOnClickListener(mClickListener);
-
findViewById(R.id.start_mms).setOnClickListener(mClickListener);
findViewById(R.id.stop_mms).setOnClickListener(mClickListener);
findViewById(R.id.start_hipri).setOnClickListener(mClickListener);
@@ -325,17 +315,6 @@ public class Connectivity extends Activity {
findViewById(R.id.default_request).setOnClickListener(mClickListener);
findViewById(R.id.default_socket).setOnClickListener(mClickListener);
- mHs20AnqpRecv = new Hs20AnqpEventHandler();
- mHs20OsuRecv = new Hs20OsuEventHandler();
- mHs20RemRecv = new Hs20RemEventHandler();
-
- findViewById(R.id.hs20_state).setOnClickListener(mClickListener);
- findViewById(R.id.hs20_scan).setOnClickListener(mClickListener);
- findViewById(R.id.hs20_anqp).setOnClickListener(mClickListener);
- findViewById(R.id.hs20_match).setOnClickListener(mClickListener);
- findViewById(R.id.hs20_osu).setOnClickListener(mClickListener);
- findViewById(R.id.hs20_rem).setOnClickListener(mClickListener);
-
registerReceiver(mReceiver, new IntentFilter(CONNECTIVITY_TEST_ALARM));
}
@@ -376,12 +355,6 @@ public class Connectivity extends Activity {
case R.id.stopTdls:
onStopTdls();
break;
- case R.id.startBackgroundScan:
- onStartScan();
- break;
- case R.id.stopBackgroundScan:
- onStopScan();
- break;
case R.id.start_mms:
mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_MMS);
@@ -425,195 +398,10 @@ public class Connectivity extends Activity {
mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_HIPRI);
break;
- case R.id.hs20_state:
- onHs20State();
- break;
- case R.id.hs20_scan:
- onHs20Scan();
- break;
- case R.id.hs20_anqp:
- onHs20Anqp();
- break;
- case R.id.hs20_match:
- onHs20Match();
- break;
- case R.id.hs20_osu:
- onHs20Osu();
- break;
- case R.id.hs20_rem:
- onHs20Rem();
- break;
}
}
};
- private class ScanEventHandler implements WifiScanner.ScanListener {
- @Override
- public void onFailure(int reason, String description) {
- Log.d(TAG, "Failed to start scan :" + reason + " - " + description);
- }
-
- @Override
- public void onSuccess() {
- Log.d(TAG, "Successfully started scan");
- }
-
- @Override
- public void onPeriodChanged(int period) {
- Log.d(TAG, "Period changed to " + period);
- }
-
- @Override
- public void onResults(ScanResult[] results) {
- Log.d(TAG, "Received " + results.length + " scan results");
- for (int i = 0; i < results.length; i++) {
- ScanResult result = results[i];
- Log.d(TAG, "results[" + i + "] = " + result.SSID + "(" + result.BSSID + ")");
- }
- }
-
- @Override
- public void onFullResult(ScanResult fullScanResult) {
- Log.d(TAG, "Full scan result event for SSID " + fullScanResult.SSID);
-
- for (int i = 0; i < fullScanResult.informationElements.length; i++) {
- ScanResult.InformationElement ie = fullScanResult.informationElements[i];
- String str = new String();
- for (int j = 0; j < ie.bytes.length; i++) {
- str += ie.bytes.toString();
- }
- Log.d(TAG, "elem[" + i + "] = [" + ie.id + ", " + str + "]");
- }
- }
- }
-
- private class WifiChangeEventHandler implements WifiScanner.WifiChangeListener {
- @Override
- public void onFailure(int reason, String description) {
- Log.d(TAG, "Failed to start tracking wifi change :" + reason + " - " + description);
- }
-
- @Override
- public void onSuccess() {
- Log.d(TAG, "Successfully started tracking wifi change");
- }
-
-
- @Override
- public void onChanging(ScanResult[] results) {
- Log.d(TAG, "onChanging event has " + results.length + " scan results");
- for (int i = 0; i < results.length; i++) {
- ScanResult result = results[i];
- Log.d(TAG, "bssid = " + result.BSSID + ", rssi = " + result.level);
- }
- }
-
- @Override
- public void onQuiescence(ScanResult[] results) {
- Log.d(TAG, "onQuiescence event has " + results.length + " scan results");
- for (int i = 0; i < results.length; i++) {
- ScanResult result = results[i];
- Log.d(TAG, "bssid = " + result.BSSID + ", rssi = " + result.level);
- }
- }
- }
-
- private class HotspotEventHandler implements WifiScanner.HotspotListener {
- @Override
- public void onFailure(int reason, String description) {
- Log.d(TAG, "Failed to start tracking hotspots :" + reason + " - " + description);
- }
-
- @Override
- public void onSuccess() {
- Log.d(TAG, "Successfully started tracking hotspots");
- }
-
- @Override
- public void onFound(ScanResult[] results) {
- Log.d(TAG, "onFound event has " + results.length + " scan results");
- for (int i = 0; i < results.length; i++) {
- ScanResult result = results[i];
- Log.d(TAG, "bssid = " + result.BSSID + ", rssi = " + result.level);
- }
- }
- }
-
- ScanEventHandler mScanHandler1 = new ScanEventHandler();
- ScanEventHandler mScanHandler2 = new ScanEventHandler();
- WifiChangeEventHandler mWifiChangeHandler = new WifiChangeEventHandler();
- HotspotEventHandler mHotspotHandler = new HotspotEventHandler();
-
- private void onStartScan() {
-
- WifiScanner.ScanSettings scanSettings = new WifiScanner.ScanSettings();
- scanSettings.channels = new WifiScanner.ChannelSpec[] {
- new WifiScanner.ChannelSpec(2412),
- new WifiScanner.ChannelSpec(2437),
- new WifiScanner.ChannelSpec(2462),
- };
-
- scanSettings.periodInMs = 5000;
- // scanSettings.reportEvents = WifiScanner.REPORT_EVENT_AFTER_BUFFER_FULL;
- mWs.startBackgroundScan(scanSettings, mScanHandler1);
-
- scanSettings = new WifiScanner.ScanSettings();
- scanSettings.channels = new WifiScanner.ChannelSpec[] {
- new WifiScanner.ChannelSpec(5180),
- new WifiScanner.ChannelSpec(5200),
- new WifiScanner.ChannelSpec(5220),
- new WifiScanner.ChannelSpec(5745),
- new WifiScanner.ChannelSpec(5765),
- new WifiScanner.ChannelSpec(5785),
- new WifiScanner.ChannelSpec(5805),
- new WifiScanner.ChannelSpec(5825)
- };
-
- scanSettings.periodInMs = 10000;
- mWs.startBackgroundScan(scanSettings, mScanHandler2);
-
- WifiScanner.HotspotInfo hotspotInfo[] = new WifiScanner.HotspotInfo[3];
- hotspotInfo[0] = new WifiScanner.HotspotInfo();
- hotspotInfo[0].bssid = "60:a4:4c:20:51:48";
- hotspotInfo[0].low = -90;
- hotspotInfo[0].high = -10;
- hotspotInfo[0].frequencyHint = 2412;
- hotspotInfo[1] = new WifiScanner.HotspotInfo();
- hotspotInfo[1].bssid = "c0:4a:00:b6:18:87";
- hotspotInfo[1].low = -90;
- hotspotInfo[1].high = -10;
- hotspotInfo[1].frequencyHint = 2412;
- hotspotInfo[2] = new WifiScanner.HotspotInfo();
- hotspotInfo[2].bssid = "ac:22:0b:24:70:70";
- hotspotInfo[2].low = -90;
- hotspotInfo[2].high = -10;
- hotspotInfo[2].frequencyHint = 2412;
-
- mWs.startTrackingHotspots(hotspotInfo, 3, mHotspotHandler);
-
- Log.d(TAG, "Starting to track changes");
- mWs.startTrackingWifiChange(mWifiChangeHandler);
-
- /*
- mWs.configureWifiChange(
- 3, // rssiSampleSize
- 3, // lostApSampleSize
- 3, // unchangedSampleSize
- 3, // minApsBreachingThreshold
- 5000, // periodInMs
- hotspotInfo);
-
- */
-
- Log.d(TAG, "Successfully started scan, waiting for events");
- }
-
- private void onStopScan() {
- mWs.stopTrackingHotspots(mHotspotHandler);
- mWs.stopTrackingWifiChange(mWifiChangeHandler);
- mWs.stopBackgroundScan(mScanHandler2);
- Log.d(TAG, "Successfully stopped all scans");
- }
private void onStartDelayedCycle() {
if (!mDelayedCycleStarted) {
@@ -683,7 +471,7 @@ public class Connectivity extends Activity {
try {
mScanCur = Long.parseLong(mScanCyclesEdit.getText().toString());
mScanCycles = mScanCur;
- } catch (Exception e) { }
+ } catch (Exception e) { };
if (mScanCur <= 0) {
mScanCur = -1;
mScanCycles = SCAN_CYCLES;
@@ -925,137 +713,4 @@ public class Connectivity extends Activity {
return;
}
}
-
- private void onHs20State() {
- Log.d(TAG, "HS20 get passpoint state");
- int state = mPpm.getPasspointState();
- Log.d(TAG, "state=" + state);
- }
-
- private void onHs20Scan() {
- Log.d(TAG, "HS20 start wifi scan");
- mWm.startScan();
- }
-
- private void onHs20Anqp() {
- Log.d(TAG, "HS20 request ANQP info");
- mHs20ScanResult = mWm.getScanResults();
- mPpm.requestAnqpInfo(mPpmChannel, mHs20ScanResult,
- WifiPasspointInfo.PRESET_ALL, mHs20AnqpRecv);
- }
-
- private void onHs20Match() {
- Log.d(TAG, "HS20 request credential match");
- List<WifiPasspointPolicy> plist = mPpm.requestCredentialMatch(mHs20ScanResult);
- if (plist == null) Log.d(TAG, "null policy list");
- else Log.d(TAG, "policy list size=" + plist.size());
- }
-
- private void onHs20Osu() {
- Log.d(TAG, "HS20 start OSU");
- mHs20OsuList.clear();
- if (mHs20ScanResult != null)
- for (ScanResult sr : mHs20ScanResult)
- if (sr.passpoint != null && sr.passpoint.osuProviderList != null)
- for (WifiPasspointOsuProvider osu : sr.passpoint.osuProviderList)
- mHs20OsuList.add(osu);
- Log.d(TAG, "mHs20OsuList.size=" + mHs20OsuList.size());
- if (mHs20OsuList.size() == 0) {
- Log.d(TAG, "No OSUs found, please do ANQP again");
- return;
- }
-
- String[] choice = new String[mHs20OsuList.size()];
- for (int i = 0; i < mHs20OsuList.size(); i++) {
- WifiPasspointOsuProvider osu = mHs20OsuList.get(i);
- choice[i] = osu.friendlyName + " @ " + osu.ssid;
- }
- AlertDialog.Builder dialog = new AlertDialog.Builder(this);
- dialog.setTitle("Select OSU");
- dialog.setSingleChoiceItems(choice, -1, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- WifiPasspointOsuProvider osu = mHs20OsuList.get(which);
- mPpm.startOsu(mPpmChannel, osu, mHs20OsuRecv);
- }
- });
- dialog.show();
- }
-
- private void onHs20Rem() {
- Log.d(TAG, "HS20 start remediation");
- mPpm.startRemediation(mPpmChannel, mHs20RemRecv);
- }
-
- private class Hs20AnqpEventHandler implements WifiPasspointManager.ActionListener {
- @Override
- public void onSuccess() {
- Log.d(TAG, "Hs20AnqpEventHandler.onSuccess");
- for (ScanResult sr : mHs20ScanResult) {
- if (sr.passpoint != null)
- Log.d(TAG, sr.passpoint.toString());
- }
- }
-
- @Override
- public void onFailure(int reason) {
- Log.d(TAG, "Hs20AnqpEventHandler.onFailure reason=" + reason);
- }
- }
-
- private class Hs20OsuEventHandler implements WifiPasspointManager.OsuRemListener {
- @Override
- public void onSuccess() {
- Log.d(TAG, "Hs20OsuEventHandler.onSuccess");
- }
-
- @Override
- public void onFailure(int reason) {
- Log.d(TAG, "Hs20OsuEventHandler.onFailure reason=" + reason);
- }
-
- @Override
- public void onBrowserLaunch(String uri) {
- Log.d(TAG, "Hs20OsuEventHandler.onBrowserLaunch uri=" + uri);
- Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
- startActivity(browserIntent);
- }
-
- @Override
- public void onBrowserDismiss() {
- Log.d(TAG, "Hs20OsuEventHandler.onBrowserDismiss");
- Toast.makeText(getApplicationContext(), "Please close your browser",
- Toast.LENGTH_LONG).show();
- }
-
- }
-
- private class Hs20RemEventHandler implements WifiPasspointManager.OsuRemListener {
- @Override
- public void onSuccess() {
- Log.d(TAG, "Hs20RemEventHandler.onSuccess");
- }
-
- @Override
- public void onFailure(int reason) {
- Log.d(TAG, "Hs20RemEventHandler.onFailure reason=" + reason);
- }
-
- @Override
- public void onBrowserLaunch(String uri) {
- Log.d(TAG, "Hs20RemEventHandler.onBrowserLaunch uri=" + uri);
- Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
- startActivity(browserIntent);
- }
-
- @Override
- public void onBrowserDismiss() {
- Log.d(TAG, "Hs20RemEventHandler.onBrowserDismiss");
- Toast.makeText(getApplicationContext(), "Please close your browser",
- Toast.LENGTH_LONG).show();
- }
-
- }
-
}