//当分享按钮被点击时,会调用此处代码。在这里处理分享的业务逻辑。
ChargingShareBean chargingShareBean = new ChargingShareBean();
chargingShareBean.setIcon(shareThumbnail);
chargingShareBean.setTitle(shareTitle);
chargingShareBean.setUrl(shareUrl);
chargingShareBean.setText("");
showSimpleBottomSheetGrid(chargingShareBean);
}
/**
* 当点击“请先登录”按钮唤起登录时,会调用此处代码。
* 用户登录后,需要将CreditsActivity.IS_WAKEUP_LOGIN变量设置为true。
* @param webView 用于登录成功后返回到当前的webview刷新登录状态。
* @param currentUrl 当前页面的url
*/
public void onLoginClick(WebView webView, final String currentUrl) {
//当未登录的用户点击去登录时,会调用此处代码。
//用户登录后,需要将CreditsActivity.IS_WAKEUP_LOGIN变量设置为true。
//为了用户登录后能回到未登录前的页面(currentUrl)。
//当用户登录成功后,需要重新请求一次服务端,带上currentUrl。
//用该方法中的webview变量加载请求链接。
//服务端收到请求后在生成免登录url时,将currentUrl放入redirect参数,通知客户端302跳转到新生成的免登录URL。
new AlertDialog.Builder(webView.getContext()).setTitle("跳转登录").setMessage("跳转到登录页面?")
.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainApplication.current_url = currentUrl;
startActivity(new Intent(getContext(), LoginActivity.class));
}
})
.setNegativeButton("否", null)
.show();
}
/**
* 当点击“复制”按钮时,触发该方法,回调获取到券码code
* @param webView webview对象。
* @param code 复制的券码
*/
public void onCopyCode(WebView webView, String code) {
//当未登录的用户点击去登录时,会调用此处代码。
new AlertDialog.Builder(webView.getContext())
.setTitle("复制券码")
.setMessage("已复制,券码为:" + code)
.setPositiveButton("是", null)
.setNegativeButton("否", null)
.show();
}
/**
* 积分商城返回首页刷新积分时,触发该方法。
*/
public void onLocalRefresh(WebView mWebView, String credits) {
//String credits为积分商城返回的最新积分,不保证准确。
//触发更新本地积分,这里建议用ajax向自己服务器请求积分值,比较准确。
}
};
}
private void skipShopDetail(String url) {
long appTime11 = System.currentTimeMillis() / 1000;
long updatetime1 = appTime11 - MainMapActivity.cha - 5;
String token1 = String.valueOf(updatetime1);
String encode_token = null;
try {
encode_token = DES3.encode(token1);
} catch (Exception e) {
e.printStackTrace();
}
String replace = URLEncoder.encode(encode_token);
// startActivity(new Intent(getContext(), ShopActivity.class));
Intent intent11 = new Intent();
intent11.setClass(getContext(), CreditActivity.class);
intent11.putExtra("navColor", "#fcfcfc"); //配置导航条的背景颜色,请用#ffffff长格式。
intent11.putExtra("titleColor", "#222222"); //配置导航条标题的颜色,请用#ffffff长格式。
MainApplication.goods_type = "details";
// MainApplication.current_url = getIntent().getStringExtra("shareUrl");
// MainApplication.current_url = "http://www.duiba.com.cn/mobile/appItemDetail?appItemId=453087";
if (!MainApplication.isLogin()) {
intent11.putExtra("url", "http://cdz.evcharge.cc/zhannew/basic/web/index.php/duiba/active?token=" + replace + "&url=" + url); //配置自动登陆地址,每次需服务端动态生成。
} else {
intent11.putExtra("url", "http://cdz.evcharge.cc/zhannew/basic/web/index.php/duiba/active?user_id=" + MainApplication.userId + "&token=" + replace + "&url=" + url); //配置自动登陆地址,每次需服务端动态生成。
}
startActivity(intent11);
if (getActivity()!=null){
getActivity().overridePendingTransition(0, 0);
}
CreditActivity.creditsListener = new CreditActivity.CreditsListener() {
/**
* 当点击分享按钮被点击
* @param shareUrl 分享的地址
* @param shareThumbnail 分享的缩略图
* @param shareTitle 分享的标题
* @param shareSubtitle 分享的副标题
*/
public void onShareClick(WebView webView, String shareUrl, String shareThumbnail, String shareTitle, String shareSubtitle) {
//当分享按钮被点击时,会调用此处代码。在这里处理分享的业务逻辑。
ChargingShareBean chargingShareBean = new ChargingShareBean();
chargingShareBean.setIcon(shareThumbnail);
chargingShareBean.setTitle(shareTitle);
chargingShareBean.setUrl(shareUrl);
chargingShareBean.setText("");
showSimpleBottomSheetGrid(chargingShareBean);
}
/**
* 当点击“请先登录”按钮唤起登录时,会调用此处代码。
* 用户登录后,需要将CreditsActivity.IS_WAKEUP_LOGIN变量设置为true。
* @param webView 用于登录成功后返回到当前的webview刷新登录状态。
* @param currentUrl 当前页面的url
*/
public void onLoginClick(WebView webView, final String currentUrl) {
//当未登录的用户点击去登录时,会调用此处代码。
//用户登录后,需要将CreditsActivity.IS_WAKEUP_LOGIN变量设置为true。
//为了用户登录后能回到未登录前的页面(currentUrl)。
//当用户登录成功后,需要重新请求一次服务端,带上currentUrl。
//用该方法中的webview变量加载请求链接。
//服务端收到请求后在生成免登录url时,将currentUrl放入redirect参数,通知客户端302跳转到新生成的免登录URL。
new AlertDialog.Builder(webView.getContext())
.setTitle("跳转登录")
.setMessage("跳转到登录页面?")
.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainApplication.h5_url = currentUrl;
startActivity(new Intent(getContext(), LoginActivity.class));
}
})
.setNegativeButton("否", null)
.show();
}
/**
* 当点击“复制”按钮时,触发该方法,回调获取到券码code
* @param webView webview对象。
* @param code 复制的券码
*/
public void onCopyCode(WebView webView, String code) {
//当未登录的用户点击去登录时,会调用此处代码。
new AlertDialog.Builder(webView.getContext())
.setTitle("复制券码")
.setMessage("已复制,券码为:" + code)
.setPositiveButton("是", null)
.setNegativeButton("否", null)
.show();
}
/**
* 积分商城返回首页刷新积分时,触发该方法。
*/
public void onLocalRefresh(WebView mWebView, String credits) {
//String credits为积分商城返回的最新积分,不保证准确。
//触发更新本地积分,这里建议用ajax向自己服务器请求积分值,比较准确。
}
};
}
public boolean onKeyDown(int keyCode, KeyEvent event, OnKeyDownListener keyDownListener) {
WebBackForwardList mWebBackForwardList = webView.copyBackForwardList();
Log.e("tag", "mWebBackForwardList.getSize() " + mWebBackForwardList.getSize());
if (webView.canGoBack()) {
webView.goBack();
iv_webBack.setVisibility(View.VISIBLE);
return true;
} else {
if (keyDownListener!=null){
return keyDownListener.onKeyDown(keyCode,event);
}else{
return false;
}
}
}
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
mHandler.post(new Runnable() {
@Override
public void run() {
ToastUtil.showToast(getContext(), "分享成功", Toast.LENGTH_SHORT);
}
});
ToastUtil.showToast(getContext(), "分享成功", Toast.LENGTH_SHORT);
getShareIntegral();
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
mHandler.post(new Runnable() {
@Override
public void run() {
ToastUtil.showToast(getContext(), "分享失败", Toast.LENGTH_SHORT);
}
});
}
@Override
public void onCancel(Platform platform, int i) {
mHandler.post(new Runnable() {
@Override
public void run() {
ToastUtil.showToast(getContext(), "分享已取消", Toast.LENGTH_SHORT);
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_webview_share:
if (tv_webShare.getText().toString().equals("分享")) {
if (null != shareIcon && null != shareUrl && null != shareTitle && null != shareContext) {
btnToShare();
}
} else if (tv_webShare.getText().toString().equals("我的反馈")) {
if (MainApplication.isLogin()) {
Intent i = new Intent(getContext(), MyFeedbackActivity.class);
startActivity(i);
} else {
startActivity(new Intent(getContext(), LoginActivity.class));
ToastUtil.showToast(getContext(), "请先登录", Toast.LENGTH_SHORT);
index = "100";
}
} else {
mHandler.post(new Runnable() {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void run() {
webView.evaluateJavascript("window.myglobal.resetrctext()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String arg0) {
}
});
}
});
}
break;
case R.id.iv_webview_back:
WebBackForwardList mWebBackForwardList = webView.copyBackForwardList();
Log.e("tag", "mWebBackForwardList.getSize() " + mWebBackForwardList.getSize());
if (webView.canGoBack()) {
showsharebtn("no");
webView.goBack();
iv_webClose.setVisibility(View.VISIBLE);
} else {
if (getActivity() == null){
return;
}
getActivity().finish();
}
break;
case R.id.iv_webview_close:
if (getActivity() == null){
return;
}
getActivity().finish();
break;
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// EasyPermissions handles the request result.
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
if (requestCode == RC_ALBUM_PERM) {
mOpenFileWebChromeClient.mFilePathCallback = null;
mOpenFileWebChromeClient.mFilePathCallbacks = null;
}
}
private boolean hasCallPhonePermission() {
if (getContext()==null) return false;
return EasyPermissions.hasPermissions(getContext(), Manifest.permission.CALL_PHONE);
}
public class OpenFileWebChromeClient extends WebChromeClient {
public static final int REQUEST_FILE_PICKER = 1;
public ValueCallback<Uri> mFilePathCallback;
public ValueCallback<Uri[]> mFilePathCallbacks;
public OpenFileWebChromeClient() {
super();
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
Log.d("ANDROID_LAB", "TITLE=" + title);
tv_webTitle.setText(title);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
pb_webBar.setProgress(newProgress);
}
@Override
public void onGeolocationPermissionsShowPrompt(String origin,
GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
// Android < 3.0 调用这个方法
public void openFileChooser(ValueCallback<Uri> filePathCallback) {
mFilePathCallback = filePathCallback;
permissionTask();
}
// 3.0 + 调用这个方法
public void openFileChooser(ValueCallback filePathCallback, String acceptType) {
mFilePathCallback = filePathCallback;
permissionTask();
}
// / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
// Android > 4.1.1 调用这个方法
public void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType, String capture) {
mFilePathCallback = filePathCallback;
permissionTask();
}
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
mFilePathCallbacks = filePathCallback;
permissionTask();
return true;
}
}
@AfterPermissionGranted(RC_ALBUM_PERM)
public void permissionTask() {
if (isPermissionOK()) {
openImageChooserActivity();
} else {
EasyPermissions.requestPermissions(
this, "充电桩想要获取您的图片读取权限,是否允许?",
RC_ALBUM_PERM,
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE);
}
}
private boolean isPermissionOK() {
if (getContext()==null){
return false;
}
return EasyPermissions.hasPermissions(getContext(),
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
);
}
private void openImageChooserActivity() {
if (getContext()==null){
return;
}
new MaterialDialog.Builder(getContext()).items(R.array.photo).positiveText("取消")
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
mOpenFileWebChromeClient.mFilePathCallbacks = null;
}
if (mOpenFileWebChromeClient.mFilePathCallback != null) {
mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
mOpenFileWebChromeClient.mFilePathCallback = null;
}
dialog.dismiss();
}
}).cancelable(false)
.canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
@Override
public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
if (position == 0) {
takeCamera();
} else if (position == 1) {
takePhoto();
}
}
}).show();
}
// 选择图片
private void takePhoto() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "Image Choose"), FILE_CHOOSER_RESULT_CODE);
}
// 拍照
private void takeCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (ImageUitl.hasSdcard()) {
String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
cameraFilePath = ImageUitl.getPath(PhotoUtils.CACHE_DIR) + "/" + fileName;
File imageFile = ImageUitl.getFile(cameraFilePath);
Uri uri =PhotoUtils.parseUri(imageFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
try {
startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class MyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.e(TAG, "onPageStarted: " + url);
pb_webBar.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.e(TAG, "onPageFinished: " + url);
currentUrl = url;
pb_webBar.setVisibility(View.GONE);
}
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
//handler.cancel(); // Android默认的处理方式
handler.proceed(); // 接受所有网站的证书
//handleMessage(Message msg); // 进行其他处理
}
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.e(TAG, "onPage1 :" + url);
// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
// view.loadUrl(url);
if (url.startsWith("http://cdz.evcharge.cc/zhannew/basic/web/index.php/drive/wxpay?")) {
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
} catch (ActivityNotFoundException e) {
}
} else if (url.startsWith("tel:")) {
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(url));
startActivity(intent);
return true;
}else if (url.contains("app://com.d1ev.app.ev01")){
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
startActivity(intent);
mIsDownload = false;
} catch (Exception e) {
//通过直接处理抛出的ActivityNotFound异常来确保程序不会崩溃
e.printStackTrace();
}
return true;
}else {
Log.e(TAG, "shouldOverrideUrlLoading: 1");
view.loadUrl(url);
}
return false;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks)
return;
if (resultCode != RESULT_OK) {
if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
mOpenFileWebChromeClient.mFilePathCallbacks = null;
}
if (mOpenFileWebChromeClient.mFilePathCallback != null) {
mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
mOpenFileWebChromeClient.mFilePathCallback = null;
}
return;
}
Uri result = null;
if (requestCode == FILE_CAMERA_RESULT_CODE) {
if (null != data && null != data.getData()) {
result = data.getData();
}
if (result == null && ImageUitl.hasFile(cameraFilePath)) {
result = PhotoUtils.parseUri(new File(cameraFilePath));
}
if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(new Uri[]{result});
mOpenFileWebChromeClient.mFilePathCallbacks = null;
} else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
mOpenFileWebChromeClient.mFilePathCallback = null;
}
} else if (requestCode == FILE_CHOOSER_RESULT_CODE) {
if (data != null) {
result = data.getData();
}
if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
onActivityResultCallbacks(data);
} else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
mOpenFileWebChromeClient.mFilePathCallback = null;
}
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void onActivityResultCallbacks(Intent intent) {
Uri[] results = null;
if (intent != null) {
String dataString = intent.getDataString();
ClipData clipData = intent.getClipData();
if (clipData != null) {
results = new Uri[clipData.getItemCount()];
for (int i = 0; i < clipData.getItemCount(); i++) {
ClipData.Item item = clipData.getItemAt(i);
results[i] = item.getUri();
}
}
if (dataString != null) {
results = new Uri[]{Uri.parse(dataString)};
}
mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
mOpenFileWebChromeClient.mFilePathCallbacks = null;
}
}
private void getShareIntegral() {
String url = MainApplication.url + "/zhannew/basic/web/index.php/member/insert-task?userid=" + MainApplication.userId;
OkHttpUtils.get().url(url).build().execute(new StringCallback() {
@Override
public void onError(Call call, Exception e) {
}
@Override
public void onResponse(String response) {
Log.e(TAG, "onResponse: getShareIntegral=" + response);
String rtnCode = JsonUtils.getKeyResult(response, "rtnCode");
if ("01".equals(rtnCode)) {
String plusScore = JsonUtils.getKeyResult(response, "plusScore");
if (!plusScore.equals("")) {
tv_point.setText(plusScore);
rl_point.setVisibility(View.VISIBLE);
rl_point.startAnimation(animation);
new Handler().postDelayed(new Runnable() {
public void run() {
rl_point.setVisibility(View.GONE);
}
}, 1500);
}
} else {
ToastUtil.showToast(getContext(), "分享成功", Toast.LENGTH_SHORT);
}
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
list.clear();
mHandler.removeCallbacksAndMessages(null);
}
/**
* 获取车主认证信息
*/
private void getCarOwnerCertificateList() {
long tokenTime = System.currentTimeMillis() / 1000 - MainMapActivity.cha - 1;
String token = null;
try {
token = DES3.encode(String.valueOf(tokenTime));
token = URLEncoder.encode(token, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
String url = MainApplication.url + "/zhannew/basic/web/index.php/car/my?userid=" + MainApplication.userId + "&order=1" + "&token=" + token;
OkHttpUtils.get().url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
@Override
public void onError(Call call, Exception e) {
e.printStackTrace();
mHandler.post(new Runnable() {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void run() {
loadDialog.dismiss();
}
});
Toast.makeText(getContext(), e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(String response) {
mHandler.post(new Runnable() {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void run() {
loadDialog.dismiss();
}
});
String rtnCode = JsonUtils.getKeyResult(response, "rtnCode");
if ("01".equals(rtnCode)) {
String data = JsonUtils.getKeyResult(response, "data");
List<CarOwnerCertificateBean> list =new ArrayList<>();
try{
list = JsonUtils.parseToObjectList(data, CarOwnerCertificateBean.class);
}catch (JSONException e){
}
if (list.size() == 0) {
startActivity(new Intent(getContext(), CarOwnerCertificateActivity.class));
} else {
Intent intent = new Intent(getContext(), CarOwnerCertificateListActivity.class);
intent.putExtra("data", data);
startActivity(intent);
}
} else {
String rtnMsg = JsonUtils.getKeyResult(response, "rtnMsg");
Toast.makeText(getContext(), rtnMsg, Toast.LENGTH_SHORT).show();
}
}
});
}
public interface OnKeyDownListener {
boolean onKeyDown(int keyCode, KeyEvent event);
}
}
|
|
||
| 8 |
|
8 |
|
| 9 |
|
9 |
|
| 10 |
|
10 |
|
|
11 |
|
|
| 11 |
|
12 |
|
| 12 |
|
13 |
|
| 13 |
|
14 |
|
|
|
||
| 82 |
|
83 |
|
| 83 |
|
84 |
|
| 84 |
|
85 |
|
|
86 |
|
|
|
87 |
|
|
| 85 |
|
88 |
|
| 86 |
|
89 |
|
| 87 |
|
90 |
|
| 88 |
|
91 |
|
| 89 |
|
92 |
|
| 90 |
|
93 |
|
|
94 |
|
|
|
95 |
|
|
|
96 |
|
|
|
97 |
|
|
|
98 |
|
|
|
99 |
|
|
|
100 |
|
|
|
101 |
|
|
| 91 |
|
102 |
|
| 92 |
|
103 |
|
| 93 |
|
104 |
|
|
|
||
| 673 |
|
673 |
|
| 674 |
|
674 |
|
| 675 |
|
675 |
|
| 676 |
|
|
|
| 677 |
|
|
|
| 678 |
|
|
|
| 679 |
|
|
|
| 680 |
|
|
|
| 681 |
|
|
|
| 682 |
|
|
|
| 683 |
|
|
|
| 684 |
|
|
|
| 685 |
|
|
|
| 686 |
|
|
|
| 687 |
|
|
|
| 688 |
|
|
|
| 689 |
|
|
|
| 690 |
|
|
|
| 691 |
|
|
|
| 692 |
|
|
|
| 693 |
|
|
|
| 694 |
|
|
|
| 695 |
|
|
|
| 696 |
|
|
|
| 697 |
|
|
|
| 698 |
|
|
|
| 699 |
|
|
|
| 700 |
|
|
|
| 701 |
|
|
|
| 702 |
|
|
|
| 703 |
|
|
|
| 704 |
|
|
|
| 705 |
|
|
|
| 706 |
|
|
|
| 707 |
|
|
|
| 708 |
|
|
|
| 709 |
|
|
|
| 710 |
|
|
|
| 711 |
|
|
|
| 712 |
|
|
|
| 713 |
|
|
|
| 714 |
|
|
|
| 715 |
|
|
|
| 716 |
|
|
|
| 717 |
|
|
|
| 718 |
|
|
|
| 719 |
|
|
|
| 720 |
|
|
|
| 721 |
|
676 |
|
| 722 |
|
677 |
|
| 723 |
|
678 |
|
|
|
||
|
1 |
|
|
|
2 |
|
|
|
3 |
|
|
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
|
10 |
|
|
|
11 |
|
|
|
12 |
|
|
|
13 |
|
|
|
14 |
|
|
|
15 |
|
|
|
16 |
|
|
|
17 |
|
|
|
18 |
|
|
|
19 |
|
|
|
20 |
|
|
|
21 |
|
|
|
22 |
|
|
|
23 |
|
|
|
24 |
|
|
|
25 |
|
|
|
26 |
|
|
|
27 |
|
|
|
28 |
|
|
|
29 |
|
|
|
30 |
|
|
|
31 |
|
|
|
32 |
|
|
|
33 |
|
|
|
34 |
|
|
|
35 |
|
|
|
36 |
|
|
|
37 |
|
|
|
38 |
|
|
|
39 |
|
|
|
40 |
|
|
|
41 |
|
|
|
42 |
|
|
|
43 |
|
|
|
44 |
|
|
|
45 |
|
|
|
46 |
|
|
|
47 |
|
|
|
48 |
|
|
|
49 |
|
|
|
50 |
|
|
|
51 |
|
|
|
52 |
|
|
|
53 |
|
|
|
54 |
|
|
|
55 |
|
|
|
56 |
|
|
|
57 |
|
|
|
58 |
|
|
|
59 |
|
|
|
60 |
|
|
|
61 |
|
|
|
62 |
|
|
|
63 |
|
|
|
64 |
|
|
|
65 |
|
|
|
66 |
|
|
|
67 |
|
|
|
68 |
|
|
|
69 |
|
|
|
70 |
|
|
|
71 |
|
|
|
72 |
|
|
|
73 |
|
|
|
74 |
|
|
|
75 |
|
|
|
76 |
|
|
|
77 |
|
|
|
78 |
|
|
|
79 |
|
|
|
80 |
|
|
|
81 |
|
|
|
82 |
|
|
|
83 |
|
|
|
84 |
|
|
|
85 |
|
|
|
86 |
|
|
|
87 |
|
|
|
88 |
|
|
|
89 |
|
|
|
90 |
|
|
|
91 |
|
|
|
92 |
|
|
|
93 |
|
|
|
94 |
|
|
|
95 |
|
|
|
96 |
|
|
|
97 |
|
|
|
98 |
|
|
|
99 |
|
|
|
100 |
|
|
|
101 |
|
|
|
102 |
|
|
|
103 |
|
|
|
104 |
|
|
|
105 |
|
|
|
106 |
|
|
|
107 |
|
|
|
108 |
|
|
|
109 |
|
|
|
110 |
|
|
|
111 |
|
|
|
112 |
|
|
|
113 |
|
|
|
114 |
|
|
|
115 |
|
|
|
116 |
|
|
|
117 |
|
|
|
118 |
|
|
|
119 |
|
|
|
120 |
|
|
|
121 |
|
|
|
122 |
|
|
|
123 |
|
|
|
124 |
|
|
|
125 |
|
|
|
126 |
|
|
|
127 |
|
|
|
128 |
|
|
|
129 |
|
|
|
130 |
|
|
|
131 |
|
|
|
132 |
|
|
|
133 |
|
|
|
134 |
|
|
|
135 |
|
|
|
136 |
|
|
|
137 |
|
|
|
138 |
|
|
|
139 |
|
|
|
140 |
|
|
|
141 |
|
|
|
142 |
|
|
|
143 |
|
|
|
144 |
|
|
|
145 |
|
|
|
146 |
|
|
|
147 |
|
|
|
148 |
|
|
|
149 |
|
|
|
150 |
|
|
|
151 |
|
|
|
152 |
|
|
|
||
| 18 |
|
18 |
|
| 19 |
|
19 |
|
| 20 |
|
20 |
|
| 21 |
|
|
|
|
21 |
|
|
| 22 |
|
22 |
|
| 23 |
|
23 |
|
| 24 |
|
24 |
|