diff --git a/config.xml b/config.xml
index b657713..2eab5ec 100644
--- a/config.xml
+++ b/config.xml
@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding='utf-8'?>
-<widget id="com.dalicitycard.app" version="1.0.5" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+<widget id="com.dalicitycard.app" version="1.0.6" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
     <name short="大理市民卡">dlapp</name>
     <description>
         A sample Apache Cordova application that responds to the deviceready event.
diff --git a/package.json b/package.json
index 7f29550..e358ecb 100644
--- a/package.json
+++ b/package.json
@@ -56,7 +56,8 @@
       },
       "cordova-plugin-app-version": {},
       "cordova-plugin-wkwebview-engine": {},
-      "cordova-plugin-brightness": {}
+      "cordova-plugin-brightness": {},
+      "cordova-plugin-file": {}
     },
     "platforms": [
       "android",
diff --git a/platforms/android/app/build.gradle b/platforms/android/app/build.gradle
index 41524d3..13c0960 100644
--- a/platforms/android/app/build.gradle
+++ b/platforms/android/app/build.gradle
@@ -165,23 +165,22 @@
 
 android {
     defaultConfig {
-        applicationId privateHelpers.extractStringFromManifest("package")
+        applicationId 'com.dalicitycard.app'
         if (cdvMinSdkVersion != null) {
             minSdkVersion cdvMinSdkVersion
         }
-        minSdkVersion 24
+        minSdkVersion 23
         ndk {
             abiFilters "armeabi"
         }
-        versionCode 10
-        versionName '1.3.6'
-        versionNameSuffix 'v1'
+        versionCode 11
+        versionName '1.3.7'
         targetSdkVersion 26
     }
     lintOptions {
-        abortOnError false;
+        abortOnError false
     }
-    compileSdkVersion 24
+    compileSdkVersion 26
     buildToolsVersion '28.0.3'
     // This code exists for Crosswalk and other Native APIs.
     // By default, we multiply the existing version code in the
diff --git a/platforms/android/app/release/app-release.apk b/platforms/android/app/release/app-release.apk
index be551b3..e3b9bf3 100644
--- a/platforms/android/app/release/app-release.apk
+++ b/platforms/android/app/release/app-release.apk
Binary files differ
diff --git a/platforms/android/app/release/output.json b/platforms/android/app/release/output.json
index 8aa304e..67e22e8 100644
--- a/platforms/android/app/release/output.json
+++ b/platforms/android/app/release/output.json
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":10,"versionName":"1.3.6v1","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.3.7","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
diff --git a/platforms/android/app/src/main/AndroidManifest.xml b/platforms/android/app/src/main/AndroidManifest.xml
index 93b3137..4591837 100644
--- a/platforms/android/app/src/main/AndroidManifest.xml
+++ b/platforms/android/app/src/main/AndroidManifest.xml
@@ -91,7 +91,6 @@
     <uses-permission android:name="com.dalicitycard.app.permission.JPUSH_MESSAGE" />
     <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.VIBRATE" />
@@ -104,4 +103,5 @@
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
     <uses-permission android:name="android.permission.GET_TASKS" />
     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 </manifest>
diff --git a/platforms/android/app/src/main/assets/www/cordova_plugins.js b/platforms/android/app/src/main/assets/www/cordova_plugins.js
index 951ded8..fb0347b 100644
--- a/platforms/android/app/src/main/assets/www/cordova_plugins.js
+++ b/platforms/android/app/src/main/assets/www/cordova_plugins.js
@@ -343,6 +343,38 @@
       "clobbers": [
         "cordova.plugins.brightness"
       ]
+    },
+    {
+      "id": "cordova-plugin-file-opener2.FileOpener2",
+      "file": "plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js",
+      "pluginId": "cordova-plugin-file-opener2",
+      "clobbers": [
+        "cordova.plugins.fileOpener2"
+      ]
+    },
+    {
+      "id": "cordova-plugin-file-transfer.FileTransferError",
+      "file": "plugins/cordova-plugin-file-transfer/www/FileTransferError.js",
+      "pluginId": "cordova-plugin-file-transfer",
+      "clobbers": [
+        "window.FileTransferError"
+      ]
+    },
+    {
+      "id": "cordova-plugin-file-transfer.FileTransfer",
+      "file": "plugins/cordova-plugin-file-transfer/www/FileTransfer.js",
+      "pluginId": "cordova-plugin-file-transfer",
+      "clobbers": [
+        "window.FileTransfer"
+      ]
+    },
+    {
+      "id": "cordova-plugin-crop.CropPlugin",
+      "file": "plugins/cordova-plugin-crop/www/crop.js",
+      "pluginId": "cordova-plugin-crop",
+      "clobbers": [
+        "plugins.crop"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -363,6 +395,9 @@
     "jpush-phonegap-plugin": "3.7.2",
     "cordova-plugin-app-version": "0.1.9",
     "cordova-plugin-wkwebview-engine": "1.2.1",
-    "cordova-plugin-brightness": "0.1.5"
+    "cordova-plugin-brightness": "0.1.5",
+    "cordova-plugin-file-opener2": "2.2.1",
+    "cordova-plugin-file-transfer": "1.7.1",
+    "cordova-plugin-crop": "0.3.1"
   };
 });
\ No newline at end of file
diff --git a/platforms/android/app/src/main/assets/www/js/main.js b/platforms/android/app/src/main/assets/www/js/main.js
index e0a358f..9d3b017 100644
--- a/platforms/android/app/src/main/assets/www/js/main.js
+++ b/platforms/android/app/src/main/assets/www/js/main.js
@@ -328,6 +328,10 @@
         } else {
             window.location = 'cardinfor.html'
         }
+    },
+    logout:function(){
+        window.localStorage.removeItem("token");
+        window.location = "login.html";
     }
 };
 app.initialize();
diff --git a/platforms/android/app/src/main/assets/www/js/qrcode.js b/platforms/android/app/src/main/assets/www/js/qrcode.js
index 79ae312..b9d81b9 100644
--- a/platforms/android/app/src/main/assets/www/js/qrcode.js
+++ b/platforms/android/app/src/main/assets/www/js/qrcode.js
@@ -88,7 +88,7 @@
           console.log(e)
         });
       } 
-      window,location.href='main.html';
+      window.location.href='main.html';
     }
 };
 app.initialize();
\ No newline at end of file
diff --git a/platforms/android/app/src/main/assets/www/js/server.js b/platforms/android/app/src/main/assets/www/js/server.js
index 64a6da6..0674e1a 100644
--- a/platforms/android/app/src/main/assets/www/js/server.js
+++ b/platforms/android/app/src/main/assets/www/js/server.js
@@ -7,6 +7,13 @@
 if (dev) {
     SERVER = "http://172.28.43.7:8099/payapi/mobileapi";
 }
+function V1Unbindcard(param,callback){
+    ajaxPost("/v1/unbindcard", param, callback)
+}
+
+function V1UnSignbxy(param,callback){
+    ajaxPost("/v1/unsignbxy", param, callback)
+}
 
 function V1Qrcode(callback) {
     ajaxPost("/v1/qrcode", {}, callback)
@@ -76,7 +83,6 @@
     ajaxPost("/i/code", param, callback)
 }
 
-
 function IServeTime(callback) {
     ajaxPost("/i/time", {}, callback)
 }
diff --git a/platforms/android/app/src/main/assets/www/main.html b/platforms/android/app/src/main/assets/www/main.html
index 3ade7e7..79e824b 100644
--- a/platforms/android/app/src/main/assets/www/main.html
+++ b/platforms/android/app/src/main/assets/www/main.html
@@ -177,7 +177,8 @@
         <header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
             我的
         </header>
-        <section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+        <!-- bg-white -->
+        <section class="aui-content aui-margin-b-15" style=" margin-top: -2px;">
             <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
                 <div class="aui-list-item aui-list-item-middle top-btn">
                     <div class="aui-media-list-item-inner ">
@@ -193,23 +194,22 @@
                     </div>
                 </div>
             </div>
-            <section class="aui-content aui-grid ">
-                <div class="aui-row aui-margin-t-10">
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-warning" id="user-amount">0.00</big>
-                        <div class="aui-gird-lable aui-font-size-12">余额</div>
-                    </div>
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-success" id="user-point">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">积分</div>
-                    </div>
-                    <div class="aui-col-xs-4 ">
-                        <big class="aui-text-danger" id="user-coupon">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">优惠券</div>
-                    </div>
-                </div>
-            </section>
-            
+            <!--<section class="aui-content aui-grid ">
+                  <div class="aui-row aui-margin-t-10">
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-warning" id="user-amount">0.00</big>
+                          <div class="aui-gird-lable aui-font-size-12">余额</div>
+                      </div>
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-success" id="user-point">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">积分</div>
+                      </div>
+                      <div class="aui-col-xs-4 ">
+                          <big class="aui-text-danger" id="user-coupon">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+                      </div>
+                  </div>
+              </section>-->
         </section>
         <section class="aui-content">
             <ul class="aui-list aui-list-in aui-margin-b-15">
@@ -242,6 +242,9 @@
                     </div>
                 </li>
             </ul>
+            <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.logout();" class="weui-btn weui-btn_warn">退出登录</a>
+            </div>  
         </section>
     </div>
     <footer class="aui-bar aui-bar-tab aui-border-t" id="footer">
diff --git a/platforms/android/app/src/main/assets/www/qrcode.html b/platforms/android/app/src/main/assets/www/qrcode.html
index 48e9b69..3edeb36 100644
--- a/platforms/android/app/src/main/assets/www/qrcode.html
+++ b/platforms/android/app/src/main/assets/www/qrcode.html
@@ -15,7 +15,7 @@
 </head>
 <body style="background: #fff"  >
     <header class="aui-bar aui-bar-nav" style="padding-top:25px;">
-        <a class="aui-pull-left" href="app.backTo()">
+        <a class="aui-pull-left" href="javascript:app.backTo()">
             <span class="aui-iconfont aui-icon-left"></span>
         </a>
         <div class="aui-title">付款码</div>
diff --git a/platforms/android/app/src/main/java/com/QRScanner_Back.java_back b/platforms/android/app/src/main/java/com/QRScanner_Back.java_back
new file mode 100755
index 0000000..a588628
--- /dev/null
+++ b/platforms/android/app/src/main/java/com/QRScanner_Back.java_back
@@ -0,0 +1,856 @@
+package com;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.FeatureInfo;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.hardware.Camera;
+import android.hardware.camera2.CameraAccessException;
+import android.net.Uri;
+import android.provider.Settings;
+import android.support.v4.app.ActivityCompat;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import com.google.zxing.BarcodeFormat;
+import com.journeyapps.barcodescanner.BarcodeView;
+import com.journeyapps.barcodescanner.camera.CameraSettings;
+import com.visionsmarts.VSBarcodeReader;
+import com.visionsmarts.pic2shop.view.ScannerLiveView;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PermissionHelper;
+import org.apache.cordova.PluginResult;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+
+@SuppressWarnings("deprecation")
+public class QRScanner_Back extends CordovaPlugin  {
+    private ScannerLiveView scannerLiveView;
+    private CallbackContext callbackContext;
+    private boolean cameraClosing;
+    private static Boolean flashAvailable;
+    private boolean lightOn = false;
+    private boolean showing = false;
+    private boolean prepared = false;
+    private int currentCameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
+    private String[] permissions = {Manifest.permission.CAMERA};
+    //Preview started or paused
+    private boolean previewing = false;
+    private BarcodeView  mBarcodeView;
+    private boolean switchFlashOn = false;
+    private boolean switchFlashOff = false;
+    private boolean cameraPreviewing;
+    private boolean scanning = false;
+    private CallbackContext nextScanCallback;
+    private boolean shouldScanAgain;
+    private boolean denied;
+    private boolean authorized;
+    private boolean restricted;
+    private boolean oneTime = true;
+    private boolean keepDenied = false;
+    private boolean appPausedWithActivePreview = false;
+    private ScannerLiveView.Listener listener = new ScannerLiveView.Listener() {
+        @Override
+        public void onCodeScanned(String str, String data) {
+            if (nextScanCallback == null) {
+                return;
+            }
+
+            if(data != null) {
+                scanning = false;
+                nextScanCallback.success(data);
+                nextScanCallback = null;
+            }
+            else {
+                scan(nextScanCallback);
+            }
+        }
+
+        @Override
+        public void onCameraIssue() {
+
+        }
+    };
+
+    public void onCodeScanned(String type, String data) {
+        //PluginResult result = new PluginResult(PluginResult.Status.OK, data);
+        //callbackContext.sendPluginResult(result);
+        if (this.nextScanCallback == null) {
+            return;
+        }
+
+        if(data != null) {
+            scanning = false;
+            this.nextScanCallback.success(data);
+            this.nextScanCallback = null;
+        }
+        else {
+            scan(this.nextScanCallback);
+        }
+    }
+    public void onCameraIssue() {
+
+    }
+
+    static class QRScannerError {
+        private static final int UNEXPECTED_ERROR = 0,
+                CAMERA_ACCESS_DENIED = 1,
+                CAMERA_ACCESS_RESTRICTED = 2,
+                BACK_CAMERA_UNAVAILABLE = 3,
+                FRONT_CAMERA_UNAVAILABLE = 4,
+                CAMERA_UNAVAILABLE = 5,
+                SCAN_CANCELED = 6,
+                LIGHT_UNAVAILABLE = 7,
+                OPEN_SETTINGS_UNAVAILABLE = 8;
+    }
+
+    @Override
+    public boolean execute(final String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
+        this.callbackContext = callbackContext;
+        try {
+            if (action.equals("show")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        show(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("scan")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        scan(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("cancelScan")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        cancelScan(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("openSettings")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        openSettings(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("pausePreview")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        pausePreview(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("useCamera")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        switchCamera(callbackContext, args);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("resumePreview")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        resumePreview(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("hide")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        hide(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("enableLight")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        while (cameraClosing) {
+                            try {
+                                Thread.sleep(10);
+                            } catch (InterruptedException ignore) {
+                            }
+                        }
+                        switchFlashOn = true;
+                        if (hasFlash()) {
+                            if (!hasPermission()) {
+                                requestPermission(33);
+                            } else
+                                enableLight(callbackContext);
+                        } else {
+                            callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+                        }
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("disableLight")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        switchFlashOff = true;
+                        if (hasFlash()) {
+                            if (!hasPermission()) {
+                                requestPermission(33);
+                            } else
+                                disableLight(callbackContext);
+                        } else {
+                            callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+                        }
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("prepare")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        cordova.getActivity().runOnUiThread(new Runnable() {
+                            @Override
+                            public void run() {
+                                try {
+                                    currentCameraId = args.getInt(0);
+                                } catch (JSONException e) {
+                                }
+                                prepare(callbackContext);
+                            }
+                        });
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("destroy")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        destroy(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("getStatus")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        getStatus(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else {
+                return false;
+            }
+        } catch (Exception e) {
+            callbackContext.error(QRScannerError.UNEXPECTED_ERROR);
+            return false;
+        }
+    }
+
+    @Override
+    public void onPause(boolean multitasking) {
+        if (previewing) {
+            this.appPausedWithActivePreview = true;
+            this.pausePreview(null);
+        }
+    }
+
+    @Override
+    public void onResume(boolean multitasking) {
+        if (this.appPausedWithActivePreview) {
+            this.appPausedWithActivePreview = false;
+            this.resumePreview(null);
+        }
+    }
+
+    private boolean hasFlash() {
+        if (flashAvailable == null) {
+            flashAvailable = false;
+            final PackageManager packageManager = this.cordova.getActivity().getPackageManager();
+            for (final FeatureInfo feature : packageManager.getSystemAvailableFeatures()) {
+                if (PackageManager.FEATURE_CAMERA_FLASH.equalsIgnoreCase(feature.name)) {
+                    flashAvailable = true;
+                    break;
+                }
+            }
+        }
+        return flashAvailable;
+    }
+
+    private void switchFlash(boolean toggleLight, CallbackContext callbackContext) {
+        try {
+            if (hasFlash()) {
+                doswitchFlash(toggleLight, callbackContext);
+            } else {
+                callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+            }
+        } catch (Exception e) {
+            lightOn = false;
+            callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+        }
+    }
+
+    private String boolToNumberString(Boolean bool) {
+        if(bool)
+            return "1";
+        else
+            return "0";
+    }
+
+    private void doswitchFlash(final boolean toggleLight, final CallbackContext callbackContext) throws IOException, CameraAccessException {        //No flash for front facing cameras
+        if (getCurrentCameraId() == Camera.CameraInfo.CAMERA_FACING_FRONT) {
+            callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+            return;
+        }
+        if (!prepared) {
+            if (toggleLight)
+                lightOn = true;
+            else
+                lightOn = false;
+            prepare(callbackContext);
+        }
+        cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if (mBarcodeView != null) {
+                    mBarcodeView.setTorch(toggleLight);
+                    if (toggleLight)
+                        lightOn = true;
+                    else
+                        lightOn = false;
+                }
+                if(scannerLiveView!=null){
+                    scannerLiveView.setTorch(toggleLight);
+                    if (toggleLight)
+                        lightOn = true;
+                    else
+                        lightOn = false;
+                }
+                getStatus(callbackContext);
+            }
+        });
+    }
+
+    public int getCurrentCameraId() {
+        return this.currentCameraId;
+    }
+
+    private boolean canChangeCamera() {
+        int numCameras= Camera.getNumberOfCameras();
+        for(int i=0;i<numCameras;i++){
+            Camera.CameraInfo info = new Camera.CameraInfo();
+            Camera.getCameraInfo(i, info);
+            if(info.CAMERA_FACING_FRONT == info.facing){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void switchCamera(CallbackContext callbackContext, JSONArray args) {
+        int cameraId = 0;
+
+        try {
+            cameraId = args.getInt(0);
+        } catch (JSONException d) {
+            callbackContext.error(QRScannerError.UNEXPECTED_ERROR);
+        }
+        currentCameraId = cameraId;
+        if(scanning) {
+            scanning = false;
+            prepared = false;
+            if(cameraPreviewing) {
+                this.cordova.getActivity().runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        ((ViewGroup) mBarcodeView.getParent()).removeView(mBarcodeView);
+                        cameraPreviewing = false;
+                    }
+                });
+            }
+            closeCamera();
+            prepare(callbackContext);
+            scan(this.nextScanCallback);
+        }
+        else
+            prepare(callbackContext);
+    }
+
+    public void onRequestPermissionResult(int requestCode, String[] permissions,
+                                          int[] grantResults) throws JSONException {
+        oneTime = false;
+        if (requestCode == 33) {
+            // for each permission check if the user granted/denied them
+            // you may want to group the rationale in a single dialog,
+            // this is just an example
+            for (int i = 0; i < permissions.length; i++) {
+                String permission = permissions[i];
+                if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
+                    boolean showRationale = ActivityCompat.shouldShowRequestPermissionRationale(cordova.getActivity(), permission);
+                    if (! showRationale) {
+                        // user denied flagging NEVER ASK AGAIN
+                        denied = true;
+                        authorized = false;
+                        callbackContext.error(QRScannerError.CAMERA_ACCESS_DENIED);
+                        return;
+                    } else {
+                        authorized = false;
+                        denied = false;
+                        callbackContext.error(QRScannerError.CAMERA_ACCESS_DENIED);
+                        return;
+                    }
+                } else if (grantResults[i] == PackageManager.PERMISSION_GRANTED){
+                    authorized = true;
+                    denied = false;
+                    switch (requestCode) {
+                        case 33:
+                            if(switchFlashOn && !scanning && !switchFlashOff)
+                                switchFlash(true, callbackContext);
+                            else if(switchFlashOff && !scanning)
+                                switchFlash(false, callbackContext);
+                            else {
+                                setupCamera(callbackContext);
+                                if(!scanning)
+                                    getStatus(callbackContext);
+                            }
+                            break;
+                    }
+                }
+                else {
+                    authorized = false;
+                    denied = false;
+                    restricted = false;
+                }
+            }
+        }
+    }
+
+    public boolean hasPermission() {
+        for(String p : permissions)
+        {
+            if(!PermissionHelper.hasPermission(this, p))
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private void requestPermission(int requestCode) {
+        PermissionHelper.requestPermissions(this, requestCode, permissions);
+    }
+
+    private void closeCamera() {
+        cameraClosing = true;
+        cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if (mBarcodeView != null) {
+                    mBarcodeView.pause();
+                }
+
+                cameraClosing = false;
+            }
+        });
+    }
+
+    private void makeOpaque() {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                webView.getView().setBackgroundColor(Color.TRANSPARENT);
+            }
+        });
+        showing = false;
+    }
+
+    private boolean hasCamera() {
+        if (this.cordova.getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private boolean hasFrontCamera() {
+        if (this.cordova.getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)){
+            return true;
+        } else {
+            return false;
+        }
+    }
+    private void setupCamera(CallbackContext callbackContext) {
+        cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                // Create our Preview view and set it as the content of our activity.
+                //mBarcodeView = new BarcodeView(cordova.getActivity());
+                scannerLiveView = new ScannerLiveView(cordova.getActivity(),listener);
+
+                VSBarcodeReader.VSinit();
+                VSBarcodeReader.setBlurryAcceptanceThresholdWithAF(0.0d);
+                //Configure the decoder
+                ArrayList<BarcodeFormat> formatList = new ArrayList<BarcodeFormat>();
+                formatList.add(BarcodeFormat.QR_CODE);
+                //mBarcodeView.setDecoderFactory(new DefaultDecoderFactory(formatList, null, null));
+
+                //Configure the camera (front/back)
+                CameraSettings settings = new CameraSettings();
+                settings.setRequestedCameraId(getCurrentCameraId());
+                //mBarcodeView.setCameraSettings(settings);
+
+                FrameLayout.LayoutParams cameraPreviewParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
+                //((ViewGroup) webView.getView().getParent()).addView(mBarcodeView, cameraPreviewParams);
+                ((ViewGroup) webView.getView().getParent()).addView(scannerLiveView, cameraPreviewParams);
+                cameraPreviewing = true;
+                webView.getView().bringToFront();
+
+                //mBarcodeView.resume();
+                //scannerLiveView.onResume();
+            }
+        });
+        prepared = true;
+        previewing = true;
+        if(shouldScanAgain)
+            scan(callbackContext);
+
+    }
+
+    /*@Override
+    public void barcodeResult(BarcodeResult barcodeResult) {
+        if (this.nextScanCallback == null) {
+            return;
+        }
+
+        if(barcodeResult.getText() != null) {
+            scanning = false;
+            this.nextScanCallback.success(barcodeResult.getText());
+            this.nextScanCallback = null;
+        }
+        else {
+            scan(this.nextScanCallback);
+        }
+    }
+
+    @Override
+    public void possibleResultPoints(List<ResultPoint> list) {
+    }*/
+
+    // ---- BEGIN EXTERNAL API ----
+    private void prepare(final CallbackContext callbackContext) {
+        if(!prepared) {
+            if(currentCameraId == Camera.CameraInfo.CAMERA_FACING_BACK) {
+                if (hasCamera()) {
+                    if (!hasPermission()) {
+                        requestPermission(33);
+                    }
+                    else {
+                        setupCamera(callbackContext);
+                        if (!scanning)
+                            getStatus(callbackContext);
+                    }
+                }
+                else {
+                    callbackContext.error(QRScannerError.BACK_CAMERA_UNAVAILABLE);
+                }
+            }
+            else if(currentCameraId == Camera.CameraInfo.CAMERA_FACING_FRONT) {
+                if (hasFrontCamera()) {
+                    if (!hasPermission()) {
+                        requestPermission(33);
+                    }
+                    else {
+                        setupCamera(callbackContext);
+                        if (!scanning)
+                            getStatus(callbackContext);
+                    }
+                }
+                else {
+                    callbackContext.error(QRScannerError.FRONT_CAMERA_UNAVAILABLE);
+                }
+            }
+            else {
+                callbackContext.error(QRScannerError.CAMERA_UNAVAILABLE);
+            }
+        }
+        else {
+            prepared = false;
+            this.cordova.getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    mBarcodeView.pause();
+                }
+            });
+            if(cameraPreviewing) {
+                this.cordova.getActivity().runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        ((ViewGroup) mBarcodeView.getParent()).removeView(mBarcodeView);
+                        cameraPreviewing = false;
+                    }
+                });
+
+                previewing = true;
+                lightOn = false;
+            }
+            setupCamera(callbackContext);
+            getStatus(callbackContext);
+        }
+    }
+
+    private void scan(final CallbackContext callbackContext) {
+        scanning = true;
+        if (!prepared) {
+            shouldScanAgain = true;
+            if (hasCamera()) {
+                if (!hasPermission()) {
+                    requestPermission(33);
+                } else {
+                    setupCamera(callbackContext);
+                }
+            }
+        } else {
+            if(!previewing) {
+                this.cordova.getActivity().runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        if(mBarcodeView != null) {
+                            mBarcodeView.resume();
+                            previewing = true;
+                            if(switchFlashOn)
+                                lightOn = true;
+                        }
+                    }
+                });
+            }
+            shouldScanAgain = false;
+            this.nextScanCallback = callbackContext;
+            /*final BarcodeCallback b = this;
+            this.cordova.getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    if (mBarcodeView != null) {
+                        mBarcodeView.decodeSingle(b);
+                    }
+                }
+            });*/
+
+            if(scannerLiveView!=null){
+                scannerLiveView.onResume();
+            }
+        }
+    }
+
+    private void cancelScan(final CallbackContext callbackContext) {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                scanning = false;
+                if (mBarcodeView != null) {
+                    mBarcodeView.stopDecoding();
+                }
+            }
+        });
+        if(this.nextScanCallback != null)
+            this.nextScanCallback.error(QRScannerError.SCAN_CANCELED);
+        this.nextScanCallback = null;
+    }
+
+    private void show(final CallbackContext callbackContext) {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                webView.getView().setBackgroundColor(Color.argb(1, 0, 0, 0));
+                if(scannerLiveView!=null){
+                    scannerLiveView.startCamera();
+                }
+                showing = true;
+                getStatus(callbackContext);
+            }
+        });
+    }
+
+    private void hide(final CallbackContext callbackContext) {
+        makeOpaque();
+        getStatus(callbackContext);
+    }
+
+    private void pausePreview(final CallbackContext callbackContext) {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if(mBarcodeView != null) {
+                    mBarcodeView.pause();
+                    previewing = false;
+                    if(lightOn)
+                        lightOn = false;
+                }
+                
+                if (callbackContext != null)
+                    getStatus(callbackContext);
+            }
+        });
+
+    }
+
+    private void resumePreview(final CallbackContext callbackContext) {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if(mBarcodeView != null) {
+                    mBarcodeView.resume();
+                    previewing = true;
+                    if(switchFlashOn)
+                        lightOn = true;
+                }
+                
+                if (callbackContext != null)
+                    getStatus(callbackContext);
+            }
+        });
+    }
+
+    private void enableLight(CallbackContext callbackContext) {
+        lightOn = true;
+        if(hasPermission())
+            switchFlash(true, callbackContext);
+        else callbackContext.error(QRScannerError.CAMERA_ACCESS_DENIED);
+    }
+
+    private void disableLight(CallbackContext callbackContext) {
+        lightOn = false;
+        switchFlashOn = false;
+        if(hasPermission())
+            switchFlash(false, callbackContext);
+        else callbackContext.error(QRScannerError.CAMERA_ACCESS_DENIED);
+    }
+
+    private void openSettings(CallbackContext callbackContext) {
+        oneTime = true;
+        if(denied)
+            keepDenied = true;
+        try {
+            denied = false;
+            authorized = false;
+            boolean shouldPrepare = prepared;
+            boolean shouldFlash = lightOn;
+            boolean shouldShow = showing;
+            if(prepared)
+                destroy(callbackContext);
+            lightOn = false;
+            Intent intent = new Intent();
+            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            Uri uri = Uri.fromParts("package", this.cordova.getActivity().getPackageName(), null);
+            intent.setData(uri);
+            this.cordova.getActivity().getApplicationContext().startActivity(intent);
+            getStatus(callbackContext);
+            if (shouldPrepare)
+                prepare(callbackContext);
+            if (shouldFlash)
+                enableLight(callbackContext);
+            if (shouldShow)
+                show(callbackContext);
+        } catch (Exception e) {
+            callbackContext.error(QRScannerError.OPEN_SETTINGS_UNAVAILABLE);
+        }
+
+    }
+
+    private void getStatus(CallbackContext callbackContext) {
+
+        if(oneTime) {
+            boolean authorizationStatus = hasPermission();
+
+            authorized = false;
+            if (authorizationStatus)
+                authorized = true;
+
+            if(keepDenied && !authorized)
+                denied = true;
+            else
+                denied = false;
+
+            //No applicable API
+            restricted = false;
+        }
+        boolean canOpenSettings = true;
+
+        boolean canEnableLight = hasFlash();
+
+        if(currentCameraId == Camera.CameraInfo.CAMERA_FACING_FRONT)
+            canEnableLight = false;
+
+        HashMap status = new HashMap();
+        status.put("authorized",boolToNumberString(authorized));
+        status.put("denied",boolToNumberString(denied));
+        status.put("restricted",boolToNumberString(restricted));
+        status.put("prepared",boolToNumberString(prepared));
+        status.put("scanning",boolToNumberString(scanning));
+        status.put("previewing",boolToNumberString(previewing));
+        status.put("showing",boolToNumberString(showing));
+        status.put("lightEnabled",boolToNumberString(lightOn));
+        status.put("canOpenSettings",boolToNumberString(canOpenSettings));
+        status.put("canEnableLight",boolToNumberString(canEnableLight));
+        status.put("canChangeCamera",boolToNumberString(canChangeCamera()));
+        status.put("currentCamera",Integer.toString(getCurrentCameraId()));
+
+        JSONObject obj = new JSONObject(status);
+        PluginResult result = new PluginResult(PluginResult.Status.OK, obj);
+        callbackContext.sendPluginResult(result);
+    }
+
+    private void destroy(CallbackContext callbackContext) {
+        prepared = false;
+        makeOpaque();
+        previewing = false;
+        if(scanning) {
+            this.cordova.getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    scanning = false;
+                    if (mBarcodeView != null) {
+                        mBarcodeView.stopDecoding();
+                    }
+                }
+            });
+            this.nextScanCallback = null;
+        }
+
+        if(cameraPreviewing) {
+            this.cordova.getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                  if(mBarcodeView!=null) {
+                    ((ViewGroup) mBarcodeView.getParent()).removeView(mBarcodeView);
+                    cameraPreviewing = false;
+                  }
+                }
+            });
+        }
+        if(currentCameraId != Camera.CameraInfo.CAMERA_FACING_FRONT) {
+            if (lightOn)
+                switchFlash(false, callbackContext);
+        }
+        closeCamera();
+        currentCameraId = 0;
+        if(scannerLiveView!=null){
+          scannerLiveView.onPause();
+        }
+        getStatus(callbackContext);
+    }
+}
diff --git a/platforms/android/platform_www/cordova_plugins.js b/platforms/android/platform_www/cordova_plugins.js
index 951ded8..fb0347b 100644
--- a/platforms/android/platform_www/cordova_plugins.js
+++ b/platforms/android/platform_www/cordova_plugins.js
@@ -343,6 +343,38 @@
       "clobbers": [
         "cordova.plugins.brightness"
       ]
+    },
+    {
+      "id": "cordova-plugin-file-opener2.FileOpener2",
+      "file": "plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js",
+      "pluginId": "cordova-plugin-file-opener2",
+      "clobbers": [
+        "cordova.plugins.fileOpener2"
+      ]
+    },
+    {
+      "id": "cordova-plugin-file-transfer.FileTransferError",
+      "file": "plugins/cordova-plugin-file-transfer/www/FileTransferError.js",
+      "pluginId": "cordova-plugin-file-transfer",
+      "clobbers": [
+        "window.FileTransferError"
+      ]
+    },
+    {
+      "id": "cordova-plugin-file-transfer.FileTransfer",
+      "file": "plugins/cordova-plugin-file-transfer/www/FileTransfer.js",
+      "pluginId": "cordova-plugin-file-transfer",
+      "clobbers": [
+        "window.FileTransfer"
+      ]
+    },
+    {
+      "id": "cordova-plugin-crop.CropPlugin",
+      "file": "plugins/cordova-plugin-crop/www/crop.js",
+      "pluginId": "cordova-plugin-crop",
+      "clobbers": [
+        "plugins.crop"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -363,6 +395,9 @@
     "jpush-phonegap-plugin": "3.7.2",
     "cordova-plugin-app-version": "0.1.9",
     "cordova-plugin-wkwebview-engine": "1.2.1",
-    "cordova-plugin-brightness": "0.1.5"
+    "cordova-plugin-brightness": "0.1.5",
+    "cordova-plugin-file-opener2": "2.2.1",
+    "cordova-plugin-file-transfer": "1.7.1",
+    "cordova-plugin-crop": "0.3.1"
   };
 });
\ No newline at end of file
diff --git a/platforms/android/platform_www/plugins/cordova-plugin-crop/www/crop.js b/platforms/android/platform_www/plugins/cordova-plugin-crop/www/crop.js
new file mode 100644
index 0000000..4c80399
--- /dev/null
+++ b/platforms/android/platform_www/plugins/cordova-plugin-crop/www/crop.js
@@ -0,0 +1,15 @@
+cordova.define("cordova-plugin-crop.CropPlugin", function(require, exports, module) {
+/* global cordova */
+var crop = module.exports = function cropImage (success, fail, image, options) {
+  options = options || {}
+  options.quality = options.quality || 100
+  return cordova.exec(success, fail, 'CropPlugin', 'cropImage', [image, options])
+}
+
+module.exports.promise = function cropAsync (image, options) {
+  return new Promise(function (resolve, reject) {
+    crop(resolve, reject, image, options)
+  })
+}
+
+});
diff --git a/platforms/android/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js b/platforms/android/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js
new file mode 100644
index 0000000..3b806cb
--- /dev/null
+++ b/platforms/android/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js
@@ -0,0 +1,54 @@
+cordova.define("cordova-plugin-file-opener2.FileOpener2", function(require, exports, module) {
+/*jslint browser: true, devel: true, node: true, sloppy: true, plusplus: true*/
+/*global require, cordova */
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 pwlin - pwlin05@gmail.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+var exec = require('cordova/exec');
+
+function FileOpener2() {}
+
+FileOpener2.prototype.open = function (fileName, contentType, callbackContext) {
+    contentType = contentType || '';
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType]);
+};
+
+FileOpener2.prototype.showOpenWithDialog = function (fileName, contentType, callbackContext) {
+    contentType = contentType || '';
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType, false]);
+};
+
+FileOpener2.prototype.uninstall = function (packageId, callbackContext) {
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'uninstall', [packageId]);
+};
+
+FileOpener2.prototype.appIsInstalled = function (packageId, callbackContext) {
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'appIsInstalled', [packageId]);
+};
+
+module.exports = new FileOpener2();
+
+});
diff --git a/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js b/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js
new file mode 100644
index 0000000..3019d5e
--- /dev/null
+++ b/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js
@@ -0,0 +1,242 @@
+cordova.define("cordova-plugin-file-transfer.FileTransfer", function(require, exports, module) {
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/* global cordova, FileSystem */
+
+var argscheck = require('cordova/argscheck'),
+    exec = require('cordova/exec'),
+    FileTransferError = require('./FileTransferError'),
+    ProgressEvent = require('cordova-plugin-file.ProgressEvent');
+
+function newProgressEvent(result) {
+    var pe = new ProgressEvent();
+    pe.lengthComputable = result.lengthComputable;
+    pe.loaded = result.loaded;
+    pe.total = result.total;
+    return pe;
+}
+
+function getUrlCredentials(urlString) {
+    var credentialsPattern = /^https?\:\/\/(?:(?:(([^:@\/]*)(?::([^@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?).*$/,
+        credentials = credentialsPattern.exec(urlString);
+
+    return credentials && credentials[1];
+}
+
+function getBasicAuthHeader(urlString) {
+    var header =  null;
+
+
+    // This is changed due to MS Windows doesn't support credentials in http uris
+    // so we detect them by regexp and strip off from result url
+    // Proof: http://social.msdn.microsoft.com/Forums/windowsapps/en-US/a327cf3c-f033-4a54-8b7f-03c56ba3203f/windows-foundation-uri-security-problem
+
+    if (window.btoa) {
+        var credentials = getUrlCredentials(urlString);
+        if (credentials) {
+            var authHeader = "Authorization";
+            var authHeaderValue = "Basic " + window.btoa(credentials);
+
+            header = {
+                name : authHeader,
+                value : authHeaderValue
+            };
+        }
+    }
+
+    return header;
+}
+
+function convertHeadersToArray(headers) {
+    var result = [];
+    for (var header in headers) {
+        if (headers.hasOwnProperty(header)) {
+            var headerValue = headers[header];
+            result.push({
+                name: header,
+                value: headerValue.toString()
+            });
+        }
+    }
+    return result;
+}
+
+var idCounter = 0;
+
+/**
+ * FileTransfer uploads a file to a remote server.
+ * @constructor
+ */
+var FileTransfer = function() {
+    this._id = ++idCounter;
+    this.onprogress = null; // optional callback
+};
+
+/**
+* Given an absolute file path, uploads a file on the device to a remote server
+* using a multipart HTTP request.
+* @param filePath {String}           Full path of the file on the device
+* @param server {String}             URL of the server to receive the file
+* @param successCallback (Function}  Callback to be invoked when upload has completed
+* @param errorCallback {Function}    Callback to be invoked upon error
+* @param options {FileUploadOptions} Optional parameters such as file name and mimetype
+* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+*/
+FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) {
+    argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments);
+    // check for options
+    var fileKey = null;
+    var fileName = null;
+    var mimeType = null;
+    var params = null;
+    var chunkedMode = true;
+    var headers = null;
+    var httpMethod = null;
+    var basicAuthHeader = getBasicAuthHeader(server);
+    if (basicAuthHeader) {
+        server = server.replace(getUrlCredentials(server) + '@', '');
+
+        options = options || {};
+        options.headers = options.headers || {};
+        options.headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    if (options) {
+        fileKey = options.fileKey;
+        fileName = options.fileName;
+        mimeType = options.mimeType;
+        headers = options.headers;
+        httpMethod = options.httpMethod || "POST";
+        if (httpMethod.toUpperCase() == "PUT"){
+            httpMethod = "PUT";
+        } else {
+            httpMethod = "POST";
+        }
+        if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") {
+            chunkedMode = options.chunkedMode;
+        }
+        if (options.params) {
+            params = options.params;
+        }
+        else {
+            params = {};
+        }
+    }
+
+    if (cordova.platformId === "windowsphone") {
+        headers = headers && convertHeadersToArray(headers);
+        params = params && convertHeadersToArray(params);
+    }
+
+    var fail = errorCallback && function(e) {
+        var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body, e.exception);
+        errorCallback(error);
+    };
+
+    var self = this;
+    var win = function(result) {
+        if (typeof result.lengthComputable != "undefined") {
+            if (self.onprogress) {
+                self.onprogress(newProgressEvent(result));
+            }
+        } else {
+            if (successCallback) {
+                successCallback(result);
+            }
+        }
+    };
+    exec(win, fail, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode, headers, this._id, httpMethod]);
+};
+
+/**
+ * Downloads a file form a given URL and saves it to the specified directory.
+ * @param source {String}          URL of the server to receive the file
+ * @param target {String}         Full path of the file on the device
+ * @param successCallback (Function}  Callback to be invoked when upload has completed
+ * @param errorCallback {Function}    Callback to be invoked upon error
+ * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+ * @param options {FileDownloadOptions} Optional parameters such as headers
+ */
+FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) {
+    argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments);
+    var self = this;
+
+    var basicAuthHeader = getBasicAuthHeader(source);
+    if (basicAuthHeader) {
+        source = source.replace(getUrlCredentials(source) + '@', '');
+
+        options = options || {};
+        options.headers = options.headers || {};
+        options.headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    var headers = null;
+    if (options) {
+        headers = options.headers || null;
+    }
+
+    if (cordova.platformId === "windowsphone" && headers) {
+        headers = convertHeadersToArray(headers);
+    }
+
+    var win = function(result) {
+        if (typeof result.lengthComputable != "undefined") {
+            if (self.onprogress) {
+                return self.onprogress(newProgressEvent(result));
+            }
+        } else if (successCallback) {
+            var entry = null;
+            if (result.isDirectory) {
+                entry = new (require('cordova-plugin-file.DirectoryEntry'))();
+            }
+            else if (result.isFile) {
+                entry = new (require('cordova-plugin-file.FileEntry'))();
+            }
+            entry.isDirectory = result.isDirectory;
+            entry.isFile = result.isFile;
+            entry.name = result.name;
+            entry.fullPath = result.fullPath;
+            entry.filesystem = new FileSystem(result.filesystemName || (result.filesystem == window.PERSISTENT ? 'persistent' : 'temporary'));
+            entry.nativeURL = result.nativeURL;
+            successCallback(entry);
+        }
+    };
+
+    var fail = errorCallback && function(e) {
+        var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body, e.exception);
+        errorCallback(error);
+    };
+
+    exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id, headers]);
+};
+
+/**
+ * Aborts the ongoing file transfer on this object. The original error
+ * callback for the file transfer will be called if necessary.
+ */
+FileTransfer.prototype.abort = function() {
+    exec(null, null, 'FileTransfer', 'abort', [this._id]);
+};
+
+module.exports = FileTransfer;
+
+});
diff --git a/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js b/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js
new file mode 100644
index 0000000..18fb64c
--- /dev/null
+++ b/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js
@@ -0,0 +1,44 @@
+cordova.define("cordova-plugin-file-transfer.FileTransferError", function(require, exports, module) {
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/**
+ * FileTransferError
+ * @constructor
+ */
+var FileTransferError = function(code, source, target, status, body, exception) {
+    this.code = code || null;
+    this.source = source || null;
+    this.target = target || null;
+    this.http_status = status || null;
+    this.body = body || null;
+    this.exception = exception || null;
+};
+
+FileTransferError.FILE_NOT_FOUND_ERR = 1;
+FileTransferError.INVALID_URL_ERR = 2;
+FileTransferError.CONNECTION_ERR = 3;
+FileTransferError.ABORT_ERR = 4;
+FileTransferError.NOT_MODIFIED_ERR = 5;
+
+module.exports = FileTransferError;
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-crop/www/crop.js b/platforms/browser/platform_www/plugins/cordova-plugin-crop/www/crop.js
new file mode 100644
index 0000000..a70b86d
--- /dev/null
+++ b/platforms/browser/platform_www/plugins/cordova-plugin-crop/www/crop.js
@@ -0,0 +1,14 @@
+cordova.define("cordova-plugin-crop.CropPlugin", function(require, exports, module) { /* global cordova */
+var crop = module.exports = function cropImage (success, fail, image, options) {
+  options = options || {}
+  options.quality = options.quality || 100
+  return cordova.exec(success, fail, 'CropPlugin', 'cropImage', [image, options])
+}
+
+module.exports.promise = function cropAsync (image, options) {
+  return new Promise(function (resolve, reject) {
+    crop(resolve, reject, image, options)
+  })
+}
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js b/platforms/browser/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js
new file mode 100644
index 0000000..d3c1540
--- /dev/null
+++ b/platforms/browser/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js
@@ -0,0 +1,53 @@
+cordova.define("cordova-plugin-file-opener2.FileOpener2", function(require, exports, module) { /*jslint browser: true, devel: true, node: true, sloppy: true, plusplus: true*/
+/*global require, cordova */
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 pwlin - pwlin05@gmail.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+var exec = require('cordova/exec');
+
+function FileOpener2() {}
+
+FileOpener2.prototype.open = function (fileName, contentType, callbackContext) {
+    contentType = contentType || '';
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType]);
+};
+
+FileOpener2.prototype.showOpenWithDialog = function (fileName, contentType, callbackContext) {
+    contentType = contentType || '';
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType, false]);
+};
+
+FileOpener2.prototype.uninstall = function (packageId, callbackContext) {
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'uninstall', [packageId]);
+};
+
+FileOpener2.prototype.appIsInstalled = function (packageId, callbackContext) {
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'appIsInstalled', [packageId]);
+};
+
+module.exports = new FileOpener2();
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js b/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js
new file mode 100644
index 0000000..dd5a2a2
--- /dev/null
+++ b/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js
@@ -0,0 +1,241 @@
+cordova.define("cordova-plugin-file-transfer.FileTransfer", function(require, exports, module) { /*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/* global cordova, FileSystem */
+
+var argscheck = require('cordova/argscheck'),
+    exec = require('cordova/exec'),
+    FileTransferError = require('./FileTransferError'),
+    ProgressEvent = require('cordova-plugin-file.ProgressEvent');
+
+function newProgressEvent(result) {
+    var pe = new ProgressEvent();
+    pe.lengthComputable = result.lengthComputable;
+    pe.loaded = result.loaded;
+    pe.total = result.total;
+    return pe;
+}
+
+function getUrlCredentials(urlString) {
+    var credentialsPattern = /^https?\:\/\/(?:(?:(([^:@\/]*)(?::([^@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?).*$/,
+        credentials = credentialsPattern.exec(urlString);
+
+    return credentials && credentials[1];
+}
+
+function getBasicAuthHeader(urlString) {
+    var header =  null;
+
+
+    // This is changed due to MS Windows doesn't support credentials in http uris
+    // so we detect them by regexp and strip off from result url
+    // Proof: http://social.msdn.microsoft.com/Forums/windowsapps/en-US/a327cf3c-f033-4a54-8b7f-03c56ba3203f/windows-foundation-uri-security-problem
+
+    if (window.btoa) {
+        var credentials = getUrlCredentials(urlString);
+        if (credentials) {
+            var authHeader = "Authorization";
+            var authHeaderValue = "Basic " + window.btoa(credentials);
+
+            header = {
+                name : authHeader,
+                value : authHeaderValue
+            };
+        }
+    }
+
+    return header;
+}
+
+function convertHeadersToArray(headers) {
+    var result = [];
+    for (var header in headers) {
+        if (headers.hasOwnProperty(header)) {
+            var headerValue = headers[header];
+            result.push({
+                name: header,
+                value: headerValue.toString()
+            });
+        }
+    }
+    return result;
+}
+
+var idCounter = 0;
+
+/**
+ * FileTransfer uploads a file to a remote server.
+ * @constructor
+ */
+var FileTransfer = function() {
+    this._id = ++idCounter;
+    this.onprogress = null; // optional callback
+};
+
+/**
+* Given an absolute file path, uploads a file on the device to a remote server
+* using a multipart HTTP request.
+* @param filePath {String}           Full path of the file on the device
+* @param server {String}             URL of the server to receive the file
+* @param successCallback (Function}  Callback to be invoked when upload has completed
+* @param errorCallback {Function}    Callback to be invoked upon error
+* @param options {FileUploadOptions} Optional parameters such as file name and mimetype
+* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+*/
+FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) {
+    argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments);
+    // check for options
+    var fileKey = null;
+    var fileName = null;
+    var mimeType = null;
+    var params = null;
+    var chunkedMode = true;
+    var headers = null;
+    var httpMethod = null;
+    var basicAuthHeader = getBasicAuthHeader(server);
+    if (basicAuthHeader) {
+        server = server.replace(getUrlCredentials(server) + '@', '');
+
+        options = options || {};
+        options.headers = options.headers || {};
+        options.headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    if (options) {
+        fileKey = options.fileKey;
+        fileName = options.fileName;
+        mimeType = options.mimeType;
+        headers = options.headers;
+        httpMethod = options.httpMethod || "POST";
+        if (httpMethod.toUpperCase() == "PUT"){
+            httpMethod = "PUT";
+        } else {
+            httpMethod = "POST";
+        }
+        if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") {
+            chunkedMode = options.chunkedMode;
+        }
+        if (options.params) {
+            params = options.params;
+        }
+        else {
+            params = {};
+        }
+    }
+
+    if (cordova.platformId === "windowsphone") {
+        headers = headers && convertHeadersToArray(headers);
+        params = params && convertHeadersToArray(params);
+    }
+
+    var fail = errorCallback && function(e) {
+        var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body, e.exception);
+        errorCallback(error);
+    };
+
+    var self = this;
+    var win = function(result) {
+        if (typeof result.lengthComputable != "undefined") {
+            if (self.onprogress) {
+                self.onprogress(newProgressEvent(result));
+            }
+        } else {
+            if (successCallback) {
+                successCallback(result);
+            }
+        }
+    };
+    exec(win, fail, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode, headers, this._id, httpMethod]);
+};
+
+/**
+ * Downloads a file form a given URL and saves it to the specified directory.
+ * @param source {String}          URL of the server to receive the file
+ * @param target {String}         Full path of the file on the device
+ * @param successCallback (Function}  Callback to be invoked when upload has completed
+ * @param errorCallback {Function}    Callback to be invoked upon error
+ * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+ * @param options {FileDownloadOptions} Optional parameters such as headers
+ */
+FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) {
+    argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments);
+    var self = this;
+
+    var basicAuthHeader = getBasicAuthHeader(source);
+    if (basicAuthHeader) {
+        source = source.replace(getUrlCredentials(source) + '@', '');
+
+        options = options || {};
+        options.headers = options.headers || {};
+        options.headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    var headers = null;
+    if (options) {
+        headers = options.headers || null;
+    }
+
+    if (cordova.platformId === "windowsphone" && headers) {
+        headers = convertHeadersToArray(headers);
+    }
+
+    var win = function(result) {
+        if (typeof result.lengthComputable != "undefined") {
+            if (self.onprogress) {
+                return self.onprogress(newProgressEvent(result));
+            }
+        } else if (successCallback) {
+            var entry = null;
+            if (result.isDirectory) {
+                entry = new (require('cordova-plugin-file.DirectoryEntry'))();
+            }
+            else if (result.isFile) {
+                entry = new (require('cordova-plugin-file.FileEntry'))();
+            }
+            entry.isDirectory = result.isDirectory;
+            entry.isFile = result.isFile;
+            entry.name = result.name;
+            entry.fullPath = result.fullPath;
+            entry.filesystem = new FileSystem(result.filesystemName || (result.filesystem == window.PERSISTENT ? 'persistent' : 'temporary'));
+            entry.nativeURL = result.nativeURL;
+            successCallback(entry);
+        }
+    };
+
+    var fail = errorCallback && function(e) {
+        var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body, e.exception);
+        errorCallback(error);
+    };
+
+    exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id, headers]);
+};
+
+/**
+ * Aborts the ongoing file transfer on this object. The original error
+ * callback for the file transfer will be called if necessary.
+ */
+FileTransfer.prototype.abort = function() {
+    exec(null, null, 'FileTransfer', 'abort', [this._id]);
+};
+
+module.exports = FileTransfer;
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js b/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js
new file mode 100644
index 0000000..8339c2b
--- /dev/null
+++ b/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js
@@ -0,0 +1,43 @@
+cordova.define("cordova-plugin-file-transfer.FileTransferError", function(require, exports, module) { /*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/**
+ * FileTransferError
+ * @constructor
+ */
+var FileTransferError = function(code, source, target, status, body, exception) {
+    this.code = code || null;
+    this.source = source || null;
+    this.target = target || null;
+    this.http_status = status || null;
+    this.body = body || null;
+    this.exception = exception || null;
+};
+
+FileTransferError.FILE_NOT_FOUND_ERR = 1;
+FileTransferError.INVALID_URL_ERR = 2;
+FileTransferError.CONNECTION_ERR = 3;
+FileTransferError.ABORT_ERR = 4;
+FileTransferError.NOT_MODIFIED_ERR = 5;
+
+module.exports = FileTransferError;
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/browser/FileTransfer.js b/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/browser/FileTransfer.js
new file mode 100644
index 0000000..6015719
--- /dev/null
+++ b/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/browser/FileTransfer.js
@@ -0,0 +1,348 @@
+cordova.define("cordova-plugin-file-transfer.BrowserFileTransfer", function(require, exports, module) { /*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/*global module, require*/
+
+var argscheck = require('cordova/argscheck'),
+    FileTransferError = require('./FileTransferError');
+
+function getParentPath(filePath) {
+    var pos = filePath.lastIndexOf('/');
+    return filePath.substring(0, pos + 1);
+}
+
+function getFileName(filePath) {
+    var pos = filePath.lastIndexOf('/');
+    return filePath.substring(pos + 1);
+}
+
+function getUrlCredentials(urlString) {
+    var credentialsPattern = /^https?\:\/\/(?:(?:(([^:@\/]*)(?::([^@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?).*$/,
+        credentials = credentialsPattern.exec(urlString);
+
+    return credentials && credentials[1];
+}
+
+function getBasicAuthHeader(urlString) {
+    var header =  null;
+
+
+    // This is changed due to MS Windows doesn't support credentials in http uris
+    // so we detect them by regexp and strip off from result url
+    // Proof: http://social.msdn.microsoft.com/Forums/windowsapps/en-US/a327cf3c-f033-4a54-8b7f-03c56ba3203f/windows-foundation-uri-security-problem
+
+    if (window.btoa) {
+        var credentials = getUrlCredentials(urlString);
+        if (credentials) {
+            var authHeader = "Authorization";
+            var authHeaderValue = "Basic " + window.btoa(credentials);
+
+            header = {
+                name : authHeader,
+                value : authHeaderValue
+            };
+        }
+    }
+
+    return header;
+}
+
+function checkURL(url) {
+    return url.indexOf(' ') === -1 ?  true : false;
+}
+
+var idCounter = 0;
+
+var transfers = {};
+
+/**
+ * FileTransfer uploads a file to a remote server.
+ * @constructor
+ */
+var FileTransfer = function() {
+    this._id = ++idCounter;
+    this.onprogress = null; // optional callback
+};
+
+/**
+ * Given an absolute file path, uploads a file on the device to a remote server
+ * using a multipart HTTP request.
+ * @param filePath {String}           Full path of the file on the device
+ * @param server {String}             URL of the server to receive the file
+ * @param successCallback (Function}  Callback to be invoked when upload has completed
+ * @param errorCallback {Function}    Callback to be invoked upon error
+ * @param options {FileUploadOptions} Optional parameters such as file name and mimetype
+ * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+ */
+FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options) {
+    // check for arguments
+    argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments);
+
+    // Check if target URL doesn't contain spaces. If contains, it should be escaped first
+    // (see https://github.com/apache/cordova-plugin-file-transfer/blob/master/doc/index.md#upload)
+    if (!checkURL(server)) {
+        if (errorCallback) {
+            errorCallback(new FileTransferError(FileTransferError.INVALID_URL_ERR, filePath, server));
+        }
+        return;
+    }
+
+    options = options || {};
+
+    var fileKey = options.fileKey || "file";
+    var fileName = options.fileName || "image.jpg";
+    var mimeType = options.mimeType || "image/jpeg";
+    var params = options.params || {};
+    var withCredentials = options.withCredentials || false;
+    // var chunkedMode = !!options.chunkedMode; // Not supported
+    var headers = options.headers || {};
+    var httpMethod = options.httpMethod && options.httpMethod.toUpperCase() === "PUT" ? "PUT" : "POST";
+
+    var basicAuthHeader = getBasicAuthHeader(server);
+    if (basicAuthHeader) {
+        server = server.replace(getUrlCredentials(server) + '@', '');
+        headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    var that = this;
+    var xhr = transfers[this._id] = new XMLHttpRequest();
+    xhr.withCredentials = withCredentials;
+
+    var fail = errorCallback && function(code, status, response) {
+        if (transfers[this._id]) {
+            delete transfers[this._id];
+        }
+        var error = new FileTransferError(code, filePath, server, status, response);
+        if (errorCallback) {
+            errorCallback(error);
+        }
+    };
+
+    window.resolveLocalFileSystemURL(filePath, function(entry) {
+        entry.file(function(file) {
+            var reader = new FileReader();
+            reader.onloadend = function() {
+                var blob = new Blob([this.result], {type: mimeType});
+
+                // Prepare form data to send to server
+                var fd = new FormData();
+                fd.append(fileKey, blob, fileName);
+                for (var prop in params) {
+                    if (params.hasOwnProperty(prop)) {
+                        fd.append(prop, params[prop]);
+                    }
+                }
+
+                xhr.open(httpMethod, server);
+
+                // Fill XHR headers
+                for (var header in headers) {
+                    if (headers.hasOwnProperty(header)) {
+                        xhr.setRequestHeader(header, headers[header]);
+                    }
+                }
+
+                xhr.onload = function() {
+                    // 2xx codes are valid
+                    if (this.status >= 200 &&
+                       this.status < 300) {
+                        var result = new FileUploadResult(); // jshint ignore:line
+                        result.bytesSent = blob.size;
+                        result.responseCode = this.status;
+                        result.response = this.response;
+                        delete transfers[that._id];
+                        successCallback(result);
+                    } else if (this.status === 404) {
+                        fail(FileTransferError.INVALID_URL_ERR, this.status, this.response);
+                    } else {
+                        fail(FileTransferError.CONNECTION_ERR, this.status, this.response);
+                    }
+                };
+
+                xhr.ontimeout = function() {
+                    fail(FileTransferError.CONNECTION_ERR, this.status, this.response);
+                };
+
+                xhr.onerror = function() {
+                    fail(FileTransferError.CONNECTION_ERR, this.status, this.response);
+                };
+
+                xhr.onabort = function () {
+                    fail(FileTransferError.ABORT_ERR, this.status, this.response);
+                };
+
+                xhr.upload.onprogress = function (e) {
+                    if (that.onprogress) {
+                        that.onprogress(e);
+                    }
+                };
+
+                xhr.send(fd);
+                // Special case when transfer already aborted, but XHR isn't sent.
+                // In this case XHR won't fire an abort event, so we need to check if transfers record
+                // isn't deleted by filetransfer.abort and if so, call XHR's abort method again
+                if (!transfers[that._id]) {
+                    xhr.abort();
+                }
+            };
+            reader.readAsArrayBuffer(file);
+        }, function() {
+            fail(FileTransferError.FILE_NOT_FOUND_ERR);
+        });
+    }, function() {
+        fail(FileTransferError.FILE_NOT_FOUND_ERR);
+    });
+};
+
+/**
+ * Downloads a file form a given URL and saves it to the specified directory.
+ * @param source {String}          URL of the server to receive the file
+ * @param target {String}         Full path of the file on the device
+ * @param successCallback (Function}  Callback to be invoked when upload has completed
+ * @param errorCallback {Function}    Callback to be invoked upon error
+ * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+ * @param options {FileDownloadOptions} Optional parameters such as headers
+ */
+FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) {
+    argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments);
+
+    // Check if target URL doesn't contain spaces. If contains, it should be escaped first
+    // (see https://github.com/apache/cordova-plugin-file-transfer/blob/master/doc/index.md#download)
+    if (!checkURL(source)) {
+        if (errorCallback) {
+            errorCallback(new FileTransferError(FileTransferError.INVALID_URL_ERR, source, target));
+        }
+        return;
+    }
+
+    options = options || {};
+    
+    var headers = options.headers || {};
+    var withCredentials = options.withCredentials || false;
+
+    var basicAuthHeader = getBasicAuthHeader(source);
+    if (basicAuthHeader) {
+        source = source.replace(getUrlCredentials(source) + '@', '');
+        headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    var that = this;
+    var xhr = transfers[this._id] = new XMLHttpRequest();
+    xhr.withCredentials = withCredentials;
+    var fail = errorCallback && function(code, status, response) {
+        if (transfers[that._id]) {
+            delete transfers[that._id];
+        }
+        // In XHR GET reqests we're setting response type to Blob
+        // but in case of error we need to raise event with plain text response
+        if (response instanceof Blob) {
+            var reader = new FileReader();
+            reader.readAsText(response);
+            reader.onloadend = function(e) {
+                var error = new FileTransferError(code, source, target, status, e.target.result);
+                errorCallback(error);
+            };
+        } else {
+            var error = new FileTransferError(code, source, target, status, response);
+            errorCallback(error);
+        }
+    };
+
+    xhr.onload = function (e) {
+
+        var fileNotFound = function () {
+            fail(FileTransferError.FILE_NOT_FOUND_ERR);
+        };
+
+        var req = e.target;
+        // req.status === 0 is special case for local files with file:// URI scheme
+        if ((req.status === 200 || req.status === 0) && req.response) {
+            window.resolveLocalFileSystemURL(getParentPath(target), function (dir) {
+                dir.getFile(getFileName(target), {create: true}, function writeFile(entry) {
+                    entry.createWriter(function (fileWriter) {
+                        fileWriter.onwriteend = function (evt) {
+                            if (!evt.target.error) {
+                                entry.filesystemName = entry.filesystem.name;
+                                delete transfers[that._id];
+                                if (successCallback) {
+                                    successCallback(entry);
+                                }
+                            } else {
+                                fail(FileTransferError.FILE_NOT_FOUND_ERR);
+                            }
+                        };
+                        fileWriter.onerror = function () {
+                            fail(FileTransferError.FILE_NOT_FOUND_ERR);
+                        };
+                        fileWriter.write(req.response);
+                    }, fileNotFound);
+                }, fileNotFound);
+            }, fileNotFound);
+        } else if (req.status === 404) {
+            fail(FileTransferError.INVALID_URL_ERR, req.status, req.response);
+        } else {
+            fail(FileTransferError.CONNECTION_ERR, req.status, req.response);
+        }
+    };
+
+    xhr.onprogress = function (e) {
+        if (that.onprogress) {
+            that.onprogress(e);
+        }
+    };
+
+    xhr.onerror = function () {
+        fail(FileTransferError.CONNECTION_ERR, this.status, this.response);
+    };
+
+    xhr.onabort = function () {
+        fail(FileTransferError.ABORT_ERR, this.status, this.response);
+    };
+
+    xhr.open("GET", source, true);
+
+    for (var header in headers) {
+        if (headers.hasOwnProperty(header)) {
+            xhr.setRequestHeader(header, headers[header]);
+        }
+    }
+
+    xhr.responseType = "blob";
+
+    xhr.send();
+};
+
+/**
+ * Aborts the ongoing file transfer on this object. The original error
+ * callback for the file transfer will be called if necessary.
+ */
+FileTransfer.prototype.abort = function() {
+    if (this instanceof FileTransfer) {
+        if (transfers[this._id]) {
+            transfers[this._id].abort();
+            delete transfers[this._id];
+        }
+    }
+};
+
+module.exports = FileTransfer;
+
+});
diff --git a/platforms/ios/dlapp.xcarchive/Info.plist b/platforms/ios/dlapp.xcarchive/Info.plist
index 6dfc268..1188234 100644
--- a/platforms/ios/dlapp.xcarchive/Info.plist
+++ b/platforms/ios/dlapp.xcarchive/Info.plist
@@ -20,7 +20,7 @@
 	<key>ArchiveVersion</key>
 	<integer>2</integer>
 	<key>CreationDate</key>
-	<date>2019-10-15T06:27:42Z</date>
+	<date>2019-12-05T03:31:51Z</date>
 	<key>Name</key>
 	<string>dlapp</string>
 	<key>SchemeName</key>
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x.png
index b6d39e0..1eccaa6 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x~ipad.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x~ipad.png
index b6d39e0..1eccaa6 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x~ipad.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x~ipad.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@3x.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@3x.png
index 6c57027..3b82b8e 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@3x.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@3x.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20~ipad.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20~ipad.png
index cf8d677..041611d 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20~ipad.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20~ipad.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29.png
index 0300838..72797b6 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x.png
index f0b5e77..4b3c6b6 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x~ipad.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x~ipad.png
index f0b5e77..4b3c6b6 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x~ipad.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x~ipad.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@3x.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@3x.png
index 4b12f07..d6b36b2 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@3x.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@3x.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29~ipad.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29~ipad.png
index 0300838..72797b6 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29~ipad.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29~ipad.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x.png
index 0eed434..f225050 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x~ipad.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x~ipad.png
index 0eed434..f225050 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x~ipad.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x~ipad.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@3x.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@3x.png
index d7269ae..60de1b7 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@3x.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@3x.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40~ipad.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40~ipad.png
index b6d39e0..1eccaa6 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40~ipad.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40~ipad.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@2x.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@2x.png
index d7269ae..60de1b7 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@2x.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@3x.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@3x.png
index 23fc9e6..f7b4e8b 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@3x.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@3x.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76@2x~ipad.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76@2x~ipad.png
index 95c031b..7a93042 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76@2x~ipad.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76@2x~ipad.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76~ipad.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76~ipad.png
index c9fb74c..35476ad 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76~ipad.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76~ipad.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon83.5x83.5@2x~ipad.png b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon83.5x83.5@2x~ipad.png
index c9e7e72..528d3fb 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon83.5x83.5@2x~ipad.png
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon83.5x83.5@2x~ipad.png
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Assets.car b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Assets.car
index 469f982..87dace3 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Assets.car
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Assets.car
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftAVFoundation.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftAVFoundation.dylib
index f847568..067774f 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftAVFoundation.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftAVFoundation.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCore.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCore.dylib
index f92050a..e0af03d 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCore.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCore.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreAudio.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreAudio.dylib
index b47d26d..e547d8a 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreAudio.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreAudio.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreFoundation.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreFoundation.dylib
index 9e69faf..44fa745 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreFoundation.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreFoundation.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreGraphics.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreGraphics.dylib
index bb04266..79e7863 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreGraphics.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreGraphics.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreImage.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreImage.dylib
index 52a6c7b..62cd987 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreImage.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreImage.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreMedia.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreMedia.dylib
index 8b84edc..da5e8bf 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreMedia.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreMedia.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDarwin.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDarwin.dylib
index 6f48cc7..28617f5 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDarwin.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDarwin.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDispatch.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDispatch.dylib
index 94f285a..534e4a9 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDispatch.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDispatch.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftFoundation.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftFoundation.dylib
index d08c753..3e6ec4c 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftFoundation.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftFoundation.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftMetal.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftMetal.dylib
index 32022d1..cbc8652 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftMetal.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftMetal.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftObjectiveC.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftObjectiveC.dylib
index d864b8a..736844d 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftObjectiveC.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftObjectiveC.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftQuartzCore.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftQuartzCore.dylib
index 65a6924..5ab4fc6 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftQuartzCore.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftQuartzCore.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftSwiftOnoneSupport.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftSwiftOnoneSupport.dylib
index 8ce3457..c0faa0d 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftSwiftOnoneSupport.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftSwiftOnoneSupport.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftUIKit.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftUIKit.dylib
index 40be0c4..d2a3b8d 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftUIKit.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftUIKit.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftos.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftos.dylib
index b4d2a6c..2ad5b46 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftos.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftos.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftsimd.dylib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftsimd.dylib
index d4d32c5..7105c57 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftsimd.dylib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftsimd.dylib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/MainViewController.nib b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/MainViewController.nib
index 45fc475..ab7b9d5 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/MainViewController.nib
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/MainViewController.nib
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/_CodeSignature/CodeResources b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/_CodeSignature/CodeResources
index 297e03c..e77d55e 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/_CodeSignature/CodeResources
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/_CodeSignature/CodeResources
@@ -6,147 +6,147 @@
 	<dict>
 		<key>AppIcon20x20@2x.png</key>
 		<data>
-		4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+		ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
 		</data>
 		<key>AppIcon20x20@2x~ipad.png</key>
 		<data>
-		4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+		ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
 		</data>
 		<key>AppIcon20x20@3x.png</key>
 		<data>
-		inNMZ0LYnXYtiXOTodGWImyL6MU=
+		GhZ+99neDdxiVNHn8p/7t9f0WRU=
 		</data>
 		<key>AppIcon20x20~ipad.png</key>
 		<data>
-		QgEmJmozGUfF6Gxc90W4zVT/ZEk=
+		KKdJn0/ZdWeM5CyeUGdX1k3Ulvs=
 		</data>
 		<key>AppIcon29x29.png</key>
 		<data>
-		HHDfUCqu1hpJ1qn2R16w+JzH8/k=
+		dZxsAzYemCu20R1t07HWjs5LOlE=
 		</data>
 		<key>AppIcon29x29@2x.png</key>
 		<data>
-		dpGzXh2r7rpz2qmVWfS/drJRxFk=
+		R0vEfvATPAFnCHYMnHg1qoJA57Y=
 		</data>
 		<key>AppIcon29x29@2x~ipad.png</key>
 		<data>
-		dpGzXh2r7rpz2qmVWfS/drJRxFk=
+		R0vEfvATPAFnCHYMnHg1qoJA57Y=
 		</data>
 		<key>AppIcon29x29@3x.png</key>
 		<data>
-		gcxHkRSzkCsIG42uKL9uYXOrdJE=
+		RrPJcSN0hluyHzEVVtCzp9/YaPM=
 		</data>
 		<key>AppIcon29x29~ipad.png</key>
 		<data>
-		HHDfUCqu1hpJ1qn2R16w+JzH8/k=
+		dZxsAzYemCu20R1t07HWjs5LOlE=
 		</data>
 		<key>AppIcon40x40@2x.png</key>
 		<data>
-		BcBek5g6jsOqa0ibWCnC1JTgL+c=
+		BS4flHNyMz69N+DP5pU+eLZlHp8=
 		</data>
 		<key>AppIcon40x40@2x~ipad.png</key>
 		<data>
-		BcBek5g6jsOqa0ibWCnC1JTgL+c=
+		BS4flHNyMz69N+DP5pU+eLZlHp8=
 		</data>
 		<key>AppIcon40x40@3x.png</key>
 		<data>
-		+0oGxBUPkB+c6Z7XyUmtZpCo2lU=
+		GgR7ZKUL6tnhZi2VaWX9QUiExPY=
 		</data>
 		<key>AppIcon40x40~ipad.png</key>
 		<data>
-		4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+		ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
 		</data>
 		<key>AppIcon60x60@2x.png</key>
 		<data>
-		+0oGxBUPkB+c6Z7XyUmtZpCo2lU=
+		GgR7ZKUL6tnhZi2VaWX9QUiExPY=
 		</data>
 		<key>AppIcon60x60@3x.png</key>
 		<data>
-		2N92m9WnIZ8k7WASphMkppCl7HA=
+		gU5edvZx0WsuQ5EzxLy7eiiOmVo=
 		</data>
 		<key>AppIcon76x76@2x~ipad.png</key>
 		<data>
-		iMfY34hWth/mR2xKqlWonHWYrDQ=
+		IvvQEhgl2Vu/ivPtc25ye4hwts8=
 		</data>
 		<key>AppIcon76x76~ipad.png</key>
 		<data>
-		z6rQV98PVDRhQUXa/DwAbinm0SA=
+		iIx7D0jU/5FXBsFwS1+znaxCpkA=
 		</data>
 		<key>AppIcon83.5x83.5@2x~ipad.png</key>
 		<data>
-		oJtSiDfNgPpCB0QhhFClnkrbXcQ=
+		ZIKT43nA0D1URGsAOPDKV+NZS8M=
 		</data>
 		<key>Assets.car</key>
 		<data>
-		MI34mk5EtOkVCHYwJBxmd39rUbk=
+		e9+5CE8NLHRmZwrjjeZ5OyxzJqU=
 		</data>
 		<key>Frameworks/libswiftAVFoundation.dylib</key>
 		<data>
-		BBuJ8uNJrWrURIdexWl4e+vXAvA=
+		dmDQw9y9GvcdtpoWZBMHwT1K17c=
 		</data>
 		<key>Frameworks/libswiftCore.dylib</key>
 		<data>
-		pTbPSHWWYG/yscK8pmh9JLGa/gU=
+		3zT2JcjxbeofEWNjBIZCE/PuSjw=
 		</data>
 		<key>Frameworks/libswiftCoreAudio.dylib</key>
 		<data>
-		DsyD0FTqKYXHdKQ8o342ImVv/7Q=
+		GTT9D8redyF1vbkZ0D5Zobxe3cU=
 		</data>
 		<key>Frameworks/libswiftCoreFoundation.dylib</key>
 		<data>
-		m6o/BG4l4chH3kGhzkxMA8Lh4fs=
+		juqWoBPjkkOkjY3otgQxSc1zkxw=
 		</data>
 		<key>Frameworks/libswiftCoreGraphics.dylib</key>
 		<data>
-		peI1hRvkz/2wJYUVhxcjJ5AZJ/w=
+		hEeFWPEZNK+DBc171H2vJmaNEww=
 		</data>
 		<key>Frameworks/libswiftCoreImage.dylib</key>
 		<data>
-		v4j+K3FiRAz0UoIhS/aE9kwxpHc=
+		srsBV/CBnRVmsOEmfbDxjnA2neA=
 		</data>
 		<key>Frameworks/libswiftCoreMedia.dylib</key>
 		<data>
-		BPp/U4KnUvs/EIcuSuyjUEiCunM=
+		rcyGNo+lZP9hVzN7sjLpJO6e9YQ=
 		</data>
 		<key>Frameworks/libswiftDarwin.dylib</key>
 		<data>
-		Rl5le1b8dTOLgzeejpIkLEFsgfM=
+		EFpRh65DL9akn+Z6ioeP2sjrllQ=
 		</data>
 		<key>Frameworks/libswiftDispatch.dylib</key>
 		<data>
-		ZwVOe6/BFZQXWdo7M3VhyJC3TM8=
+		vBO/esLYhyJ7rkEbhvQi04JZ6iU=
 		</data>
 		<key>Frameworks/libswiftFoundation.dylib</key>
 		<data>
-		QprHd55Ei5gjTxPmBVMkw0JfYAo=
+		1oREHDzKKiajdNGHcuaW4qzORrU=
 		</data>
 		<key>Frameworks/libswiftMetal.dylib</key>
 		<data>
-		6pTO4txXfyz4hfKC7qOe2ZdJ1dg=
+		xMHjkPynvVQO70kI+xUD63pu1eE=
 		</data>
 		<key>Frameworks/libswiftObjectiveC.dylib</key>
 		<data>
-		Vfj4ZqWFmvVgPHMkJXGsKnjVkig=
+		KdkvGCWAngQJpp6nxwLaQpiYW6A=
 		</data>
 		<key>Frameworks/libswiftQuartzCore.dylib</key>
 		<data>
-		vC9jL88UMDMhknN4r/y6P4p8IIU=
+		p/AgbrtrlTXI7b9eqxVagyqxq3E=
 		</data>
 		<key>Frameworks/libswiftSwiftOnoneSupport.dylib</key>
 		<data>
-		3Rz7pIIRUUs4BJrkfMth2M8Z9K0=
+		QkG2/piR66ZmT/xtTOAg8YZ1YXs=
 		</data>
 		<key>Frameworks/libswiftUIKit.dylib</key>
 		<data>
-		0tEY9Ldxj6zceqZg2JXlDnHhDS8=
+		R2vzCSRtekxwt/w3hyC5uDQDP4U=
 		</data>
 		<key>Frameworks/libswiftos.dylib</key>
 		<data>
-		A1vyKE/09WJVYoo7x0E3+ZVXeBM=
+		m3+9HKfuR3qMJDRQow6DtDyXQQ8=
 		</data>
 		<key>Frameworks/libswiftsimd.dylib</key>
 		<data>
-		Q9gxSQV8yq+0XtSjd4c3qCNqghU=
+		Galldu67qIFDrTH/MeGzh8sDv9k=
 		</data>
 		<key>Info.plist</key>
 		<data>
@@ -198,7 +198,7 @@
 		</data>
 		<key>MainViewController.nib</key>
 		<data>
-		h27QShEEqp2YliUGmzbvowlsX9I=
+		koWBzWcwwj6XJLRkyaGGkmV2Bcc=
 		</data>
 		<key>PkgInfo</key>
 		<data>
@@ -206,7 +206,7 @@
 		</data>
 		<key>config.xml</key>
 		<data>
-		PZUzb4/2ynWqr9WkAFnsX6KOZ1k=
+		n1EAWuZ4faYwmjuBbQ0QES0F67A=
 		</data>
 		<key>embedded.mobileprovision</key>
 		<data>
@@ -226,7 +226,7 @@
 		</data>
 		<key>www/bindcheck.html</key>
 		<data>
-		jGx5uAhkm+a3PdC0Z5ENLMfZa+M=
+		XH5dN9nTWa/E+s6V+Zwi0P/FUYw=
 		</data>
 		<key>www/card.html</key>
 		<data>
@@ -234,7 +234,7 @@
 		</data>
 		<key>www/cardinfor.html</key>
 		<data>
-		QQg8HZreHawxjyGafVvCyGhCGrw=
+		RHBhk2UhuNxYzG8kf7pOAsw4kGU=
 		</data>
 		<key>www/cordova-js-src/exec.js</key>
 		<data>
@@ -258,7 +258,7 @@
 		</data>
 		<key>www/cordova_plugins.js</key>
 		<data>
-		mjZMhcaV9rGT+gEJycqyUiJiwp8=
+		HQOKu0hTPe6fq1P1wO1LoP8HtgI=
 		</data>
 		<key>www/css/aui-iconfont.ttf</key>
 		<data>
@@ -386,11 +386,11 @@
 		</data>
 		<key>www/js/bindcard.js</key>
 		<data>
-		0B7mevzLJOBg0VXTUpHtZ//18PQ=
+		Ysntrs0q1qAqlEefYvglyu3eoI4=
 		</data>
 		<key>www/js/bindcheck.js</key>
 		<data>
-		5RfLHKNNVVwPSEOzS8TfUZ0lpJQ=
+		GTPsPGLI8aaV2k5LtPK0c2+NnGE=
 		</data>
 		<key>www/js/card.js</key>
 		<data>
@@ -398,7 +398,7 @@
 		</data>
 		<key>www/js/cardinfor.js</key>
 		<data>
-		H5Qek3wUoBtXbL/Ry+v/gt4riXg=
+		62jCoaZTsDLir4Rxq8Q8TIwQufc=
 		</data>
 		<key>www/js/db.js</key>
 		<data>
@@ -530,7 +530,7 @@
 		</data>
 		<key>www/js/main.js</key>
 		<data>
-		0GJu73OFCX3YlRcB4DWzCmggX94=
+		HpZT8Ysc+/FTRb3MxKtp3lvPYAM=
 		</data>
 		<key>www/js/mobile.js</key>
 		<data>
@@ -550,15 +550,15 @@
 		</data>
 		<key>www/js/qrcode.js</key>
 		<data>
-		Cx6iRRJAH08QlPBBT//jwM7LZP4=
+		JeNJiL4CmSC5LsD8KK/ZtGtp70k=
 		</data>
 		<key>www/js/register.js</key>
 		<data>
-		kEIN8Lt6KbeSEYmiYk47uhchWg8=
+		JQaJE5lT+p3bMdfpHRMD7mVk7rA=
 		</data>
 		<key>www/js/scan.js</key>
 		<data>
-		u/uxG7pig1OIhkJvIOSMYiOTs8c=
+		9kMdeIdvvtMD2cLcujur6+v1ntE=
 		</data>
 		<key>www/js/security.js</key>
 		<data>
@@ -566,7 +566,7 @@
 		</data>
 		<key>www/js/server.js</key>
 		<data>
-		7hP5JogQrZX3Y7gz7anbjekAU1k=
+		6Cwg320/oc/nsmU2Fbj4eNG8dGo=
 		</data>
 		<key>www/js/signxy.js</key>
 		<data>
@@ -574,7 +574,7 @@
 		</data>
 		<key>www/js/signxycheck.js</key>
 		<data>
-		OQxn/Q3V2ODyeXPO0htt940uIyM=
+		66nnYQb6FRQcu9XGNEDjLhRZRaQ=
 		</data>
 		<key>www/js/uxy.js</key>
 		<data>
@@ -590,7 +590,7 @@
 		</data>
 		<key>www/main.html</key>
 		<data>
-		PEdyDAoIJ4z2Zwdw7nZQKul7P9M=
+		SVOoElUZsKWPwn7lvgGYAuu4wPs=
 		</data>
 		<key>www/main1.html</key>
 		<data>
@@ -840,6 +840,10 @@
 		<data>
 		heGNNKQaZlidpB3qvXFXCW/7bX0=
 		</data>
+		<key>www/my.html</key>
+		<data>
+		BUBrEJQD4PffOvTDZFrKmckMu24=
+		</data>
 		<key>www/paypwdmng.html</key>
 		<data>
 		+Mjis5f4NK8v7VpKUbilfHxz4no=
@@ -896,6 +900,10 @@
 		<data>
 		V7Ywjbu2Kj4wesp8mWW2lF5aDpE=
 		</data>
+		<key>www/plugins/cordova-plugin-brightness/www/brightness.js</key>
+		<data>
+		FrJFTczXZ/W9VS3gElKUNATvxE4=
+		</data>
 		<key>www/plugins/cordova-plugin-camera/www/Camera.js</key>
 		<data>
 		/Tl12sGFo/UZbPqnupaaV0Hg0vU=
@@ -1046,7 +1054,7 @@
 		</data>
 		<key>www/qrcode.html</key>
 		<data>
-		FK8oc1oB59vB31qmvZp+SzcB9/U=
+		PmFDX7bCnDmVlZ5pDAXyikKJwMQ=
 		</data>
 		<key>www/register.html</key>
 		<data>
@@ -1066,7 +1074,7 @@
 		</data>
 		<key>www/signxycheck.html</key>
 		<data>
-		OC5VO7siXCVWFdZQFLrRkOG5Jdk=
+		0eypcjj4wr9SerMRKUWVOazcxEU=
 		</data>
 		<key>www/uxy.html</key>
 		<data>
@@ -1079,396 +1087,396 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+			ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
 			</data>
 			<key>hash2</key>
 			<data>
-			/jx2HIiBG+oNpd+0usVeIZxAvkA27ZpiSAex3riWFHQ=
+			MsmE6TTzj1kEqSbH1BlcQ4QdZvL3Cy33ta/Sh6RqUw8=
 			</data>
 		</dict>
 		<key>AppIcon20x20@2x~ipad.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+			ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
 			</data>
 			<key>hash2</key>
 			<data>
-			/jx2HIiBG+oNpd+0usVeIZxAvkA27ZpiSAex3riWFHQ=
+			MsmE6TTzj1kEqSbH1BlcQ4QdZvL3Cy33ta/Sh6RqUw8=
 			</data>
 		</dict>
 		<key>AppIcon20x20@3x.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			inNMZ0LYnXYtiXOTodGWImyL6MU=
+			GhZ+99neDdxiVNHn8p/7t9f0WRU=
 			</data>
 			<key>hash2</key>
 			<data>
-			BR1eZknKOY1H7MAyXZld2yKSOCayLZBdlj5QRFNTSws=
+			ZwyEzr6tEUlDxmAvi9vcjkdY4EihbJZqSM/cGEQHPG8=
 			</data>
 		</dict>
 		<key>AppIcon20x20~ipad.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			QgEmJmozGUfF6Gxc90W4zVT/ZEk=
+			KKdJn0/ZdWeM5CyeUGdX1k3Ulvs=
 			</data>
 			<key>hash2</key>
 			<data>
-			Ck2d8ewvZ1cjSx6Vo6hRiwiKcwV7Khb61Rslp5EBorE=
+			d3IKJOYrSapm2LZSsPpnNaIfiacEh5zrYjyeL24bi1o=
 			</data>
 		</dict>
 		<key>AppIcon29x29.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			HHDfUCqu1hpJ1qn2R16w+JzH8/k=
+			dZxsAzYemCu20R1t07HWjs5LOlE=
 			</data>
 			<key>hash2</key>
 			<data>
-			lFwBNCRgbv9HY1G5bOKNhPiyURhYafyWeI84Xcl8ljg=
+			onxUDJUW/zHu3m5H+9mJBqcONmO769E4c/0uE7fAPo4=
 			</data>
 		</dict>
 		<key>AppIcon29x29@2x.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			dpGzXh2r7rpz2qmVWfS/drJRxFk=
+			R0vEfvATPAFnCHYMnHg1qoJA57Y=
 			</data>
 			<key>hash2</key>
 			<data>
-			nqN/EqFaooiXfy5K9WhOXvone1cRRvxgsXw4DnLmVlA=
+			sBLYe+F/UI90kgRg6HHpEGPcYIrGhSizKGSbzLZYnyc=
 			</data>
 		</dict>
 		<key>AppIcon29x29@2x~ipad.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			dpGzXh2r7rpz2qmVWfS/drJRxFk=
+			R0vEfvATPAFnCHYMnHg1qoJA57Y=
 			</data>
 			<key>hash2</key>
 			<data>
-			nqN/EqFaooiXfy5K9WhOXvone1cRRvxgsXw4DnLmVlA=
+			sBLYe+F/UI90kgRg6HHpEGPcYIrGhSizKGSbzLZYnyc=
 			</data>
 		</dict>
 		<key>AppIcon29x29@3x.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			gcxHkRSzkCsIG42uKL9uYXOrdJE=
+			RrPJcSN0hluyHzEVVtCzp9/YaPM=
 			</data>
 			<key>hash2</key>
 			<data>
-			4VwirX+1pgq35pmm0UyXcG2+NXkxl6DvDAFQ9dvqiLs=
+			gZW7wGeYjOoAtkOf4paX58K65oUqySqICya26prwmaw=
 			</data>
 		</dict>
 		<key>AppIcon29x29~ipad.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			HHDfUCqu1hpJ1qn2R16w+JzH8/k=
+			dZxsAzYemCu20R1t07HWjs5LOlE=
 			</data>
 			<key>hash2</key>
 			<data>
-			lFwBNCRgbv9HY1G5bOKNhPiyURhYafyWeI84Xcl8ljg=
+			onxUDJUW/zHu3m5H+9mJBqcONmO769E4c/0uE7fAPo4=
 			</data>
 		</dict>
 		<key>AppIcon40x40@2x.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			BcBek5g6jsOqa0ibWCnC1JTgL+c=
+			BS4flHNyMz69N+DP5pU+eLZlHp8=
 			</data>
 			<key>hash2</key>
 			<data>
-			9WHfcGm0K8HueWfC1UjexYAfaBhvFKeDZfsEyFCEtx4=
+			EvDh32SrdFfyGSkceOrHpYaGmfUw7pDIkd3OvLiPo28=
 			</data>
 		</dict>
 		<key>AppIcon40x40@2x~ipad.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			BcBek5g6jsOqa0ibWCnC1JTgL+c=
+			BS4flHNyMz69N+DP5pU+eLZlHp8=
 			</data>
 			<key>hash2</key>
 			<data>
-			9WHfcGm0K8HueWfC1UjexYAfaBhvFKeDZfsEyFCEtx4=
+			EvDh32SrdFfyGSkceOrHpYaGmfUw7pDIkd3OvLiPo28=
 			</data>
 		</dict>
 		<key>AppIcon40x40@3x.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			+0oGxBUPkB+c6Z7XyUmtZpCo2lU=
+			GgR7ZKUL6tnhZi2VaWX9QUiExPY=
 			</data>
 			<key>hash2</key>
 			<data>
-			F6dGIPQp/X9Huj5SI1FnfRlgqZsfJ8plPgS5DLXmyHc=
+			cs6fxgIoK170dcGdkiAhzRTfYvUHvnT0zCQIjXRqLDE=
 			</data>
 		</dict>
 		<key>AppIcon40x40~ipad.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+			ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
 			</data>
 			<key>hash2</key>
 			<data>
-			/jx2HIiBG+oNpd+0usVeIZxAvkA27ZpiSAex3riWFHQ=
+			MsmE6TTzj1kEqSbH1BlcQ4QdZvL3Cy33ta/Sh6RqUw8=
 			</data>
 		</dict>
 		<key>AppIcon60x60@2x.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			+0oGxBUPkB+c6Z7XyUmtZpCo2lU=
+			GgR7ZKUL6tnhZi2VaWX9QUiExPY=
 			</data>
 			<key>hash2</key>
 			<data>
-			F6dGIPQp/X9Huj5SI1FnfRlgqZsfJ8plPgS5DLXmyHc=
+			cs6fxgIoK170dcGdkiAhzRTfYvUHvnT0zCQIjXRqLDE=
 			</data>
 		</dict>
 		<key>AppIcon60x60@3x.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			2N92m9WnIZ8k7WASphMkppCl7HA=
+			gU5edvZx0WsuQ5EzxLy7eiiOmVo=
 			</data>
 			<key>hash2</key>
 			<data>
-			dQmhVBOE7LllJ1jQuS6MlUwqAY9rw3N83U9OpTvQmUI=
+			u3YgSHECpcRbp4Wa59b47Zwm+bCrrzSrS1JmUG6BtGo=
 			</data>
 		</dict>
 		<key>AppIcon76x76@2x~ipad.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			iMfY34hWth/mR2xKqlWonHWYrDQ=
+			IvvQEhgl2Vu/ivPtc25ye4hwts8=
 			</data>
 			<key>hash2</key>
 			<data>
-			zDK30NWfjipDfaQp5rJ1roBf5sk1HCHP1AHfE8Koa3c=
+			Wgdfvd/gB5hdNDv9cwcZASD/YrHBus8NjmInFDI1J+A=
 			</data>
 		</dict>
 		<key>AppIcon76x76~ipad.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			z6rQV98PVDRhQUXa/DwAbinm0SA=
+			iIx7D0jU/5FXBsFwS1+znaxCpkA=
 			</data>
 			<key>hash2</key>
 			<data>
-			SEIGmphMB4mPWfJUCc/8/OEHXuPaOTnpwx7fqG/I01U=
+			wOX8ArTYN5K2FpMXLGclESNN1lIEev2DJBLmfMYOUwg=
 			</data>
 		</dict>
 		<key>AppIcon83.5x83.5@2x~ipad.png</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			oJtSiDfNgPpCB0QhhFClnkrbXcQ=
+			ZIKT43nA0D1URGsAOPDKV+NZS8M=
 			</data>
 			<key>hash2</key>
 			<data>
-			p9CZ5DH6P6Cwm2CIRfkZRVd5VcVYXRhHPP0Zdeujh7o=
+			tTaeRZFYhMoDi2ZImxgarDOCu32VsnidQxbXySCYSIQ=
 			</data>
 		</dict>
 		<key>Assets.car</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			MI34mk5EtOkVCHYwJBxmd39rUbk=
+			e9+5CE8NLHRmZwrjjeZ5OyxzJqU=
 			</data>
 			<key>hash2</key>
 			<data>
-			uO+oqQYOdNiKEekqzK4ijCuCF/a4db6Mq2/LLL5vdf0=
+			z6pNTT1RTC09Zjpy2bxhJWQCeGSPvt3+kTJ3CVT7R+4=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftAVFoundation.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			BBuJ8uNJrWrURIdexWl4e+vXAvA=
+			dmDQw9y9GvcdtpoWZBMHwT1K17c=
 			</data>
 			<key>hash2</key>
 			<data>
-			d7GBGJ88UJXlcjpidc9UpdiVDowkgZKRfhEp6wUJ3Ns=
+			uTMRUm0VqcFy37eIRUW4qsiF9S4trLtowk/jCUKH6N0=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftCore.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			pTbPSHWWYG/yscK8pmh9JLGa/gU=
+			3zT2JcjxbeofEWNjBIZCE/PuSjw=
 			</data>
 			<key>hash2</key>
 			<data>
-			jblnNK1CWUwV17+/SUKyUv4Fmb4siTscmDzLy2PzalQ=
+			WSbGoO8iA7F9/Jh8n/ffunc8LLNG23/oXSZHakkRZAs=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftCoreAudio.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			DsyD0FTqKYXHdKQ8o342ImVv/7Q=
+			GTT9D8redyF1vbkZ0D5Zobxe3cU=
 			</data>
 			<key>hash2</key>
 			<data>
-			asjY2hknIzUab1BxkSMdcSn3ee03/69poDXj6hLXwmE=
+			QUHqXaYMt0GtY8pQnAoP76HgM2ptnK1FTaPKuucWiDg=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftCoreFoundation.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			m6o/BG4l4chH3kGhzkxMA8Lh4fs=
+			juqWoBPjkkOkjY3otgQxSc1zkxw=
 			</data>
 			<key>hash2</key>
 			<data>
-			pZBaz9EW7u38t7hqTe0TDFsNFrdQBKnGW/+ZXMBMhss=
+			UChvnOGr7S5lSleyuqPmwisEXpzi+LOw7G5LgmCOVPI=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftCoreGraphics.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			peI1hRvkz/2wJYUVhxcjJ5AZJ/w=
+			hEeFWPEZNK+DBc171H2vJmaNEww=
 			</data>
 			<key>hash2</key>
 			<data>
-			kBO8Kl3ds8wsnUOYL32g9BUEwELWNjAXAhpGA21+HKA=
+			xd2hz37QDRWhBZi0N0YZpLZ6b6SBn6uMgFMBYVBbA/E=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftCoreImage.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			v4j+K3FiRAz0UoIhS/aE9kwxpHc=
+			srsBV/CBnRVmsOEmfbDxjnA2neA=
 			</data>
 			<key>hash2</key>
 			<data>
-			nac0nVGh8w40GNw+4tWE//3bl9iYMIFzW4vmI/j0xJM=
+			uijDFlioqd8tgh8DYkP+/Hv9CHRUdOD62MHhEdR5b4Y=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftCoreMedia.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			BPp/U4KnUvs/EIcuSuyjUEiCunM=
+			rcyGNo+lZP9hVzN7sjLpJO6e9YQ=
 			</data>
 			<key>hash2</key>
 			<data>
-			U3QuWNbGqePs/LgfOxB9hU/lNooMogZWgnvRpcbgftM=
+			Gd3ECjIsgZErJwfF+lUValGdezl4W3Iy//pQOcW27K4=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftDarwin.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			Rl5le1b8dTOLgzeejpIkLEFsgfM=
+			EFpRh65DL9akn+Z6ioeP2sjrllQ=
 			</data>
 			<key>hash2</key>
 			<data>
-			aFXxvzO47QW6Yuw8F31XrkEAPIZ518pYm3HajzW0hJ4=
+			sTgr1BEKCgBu+Fw40N/pJ0ggfWYe8WmunldRw06uaWk=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftDispatch.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			ZwVOe6/BFZQXWdo7M3VhyJC3TM8=
+			vBO/esLYhyJ7rkEbhvQi04JZ6iU=
 			</data>
 			<key>hash2</key>
 			<data>
-			HPX9eGXjnf04VcRF9oQpnCh/tDfurqRzU9TJaSpY4pU=
+			R0PbCUcYaEKpdm5aJ2/FQ1ECYWpIOoyl0TF1gdN7u5A=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftFoundation.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			QprHd55Ei5gjTxPmBVMkw0JfYAo=
+			1oREHDzKKiajdNGHcuaW4qzORrU=
 			</data>
 			<key>hash2</key>
 			<data>
-			qBHE5OUugUs5FnLR7A6gKW4VwCHYHMhAU+DrKQnNlQE=
+			/iHrWF/ujVm3A+S6ebyrh7ScUbEmduaB+uJdk7olM8Y=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftMetal.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			6pTO4txXfyz4hfKC7qOe2ZdJ1dg=
+			xMHjkPynvVQO70kI+xUD63pu1eE=
 			</data>
 			<key>hash2</key>
 			<data>
-			EhdUiIrVd7iF8MhxoNg0fQtL8y07sba269/5Lc8VLFA=
+			RAvPyJ2ZYiYD7/ByGol66KRd7PhjBuoKv5LfqiMZMsA=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftObjectiveC.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			Vfj4ZqWFmvVgPHMkJXGsKnjVkig=
+			KdkvGCWAngQJpp6nxwLaQpiYW6A=
 			</data>
 			<key>hash2</key>
 			<data>
-			xd8CDu0sjqbrupXDENHFR4DZj7gc6YGcEstyRUa9iOg=
+			upd25/zAqhaR4eNZ08pfAKgYHqRzW6//OwD/KpmS2bY=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftQuartzCore.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			vC9jL88UMDMhknN4r/y6P4p8IIU=
+			p/AgbrtrlTXI7b9eqxVagyqxq3E=
 			</data>
 			<key>hash2</key>
 			<data>
-			LVpsrClPMhwoCxYgGdvl6oFT/d4TK2wDp5icwZyD+8g=
+			vFMv8rZ4upTxXYKpvSQZuAugl3ltOGYaX/LtIWoMitE=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftSwiftOnoneSupport.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			3Rz7pIIRUUs4BJrkfMth2M8Z9K0=
+			QkG2/piR66ZmT/xtTOAg8YZ1YXs=
 			</data>
 			<key>hash2</key>
 			<data>
-			MsKil6JqwHfu4+8fStyHf3RpXOBPSs0JdyxrAQxBWuw=
+			R+cBZr/hVR/dPCgEV4SbpT44gAx6aI3H2/yMmFUqar4=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftUIKit.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			0tEY9Ldxj6zceqZg2JXlDnHhDS8=
+			R2vzCSRtekxwt/w3hyC5uDQDP4U=
 			</data>
 			<key>hash2</key>
 			<data>
-			klDw4B7e7ynMPKIJ1GhZpBFjE5WEJ2h71dkIGj0GraE=
+			PvTYCyFwbZiEbJ7aXR2X5i5ANnfMtiQ8bR3Tviscaik=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftos.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			A1vyKE/09WJVYoo7x0E3+ZVXeBM=
+			m3+9HKfuR3qMJDRQow6DtDyXQQ8=
 			</data>
 			<key>hash2</key>
 			<data>
-			xY7vJEHoJdTu/o0ZpKxTJSllUToMl6Ad6eCSfkhQN6k=
+			tv80YkF7OiONqp8laV1iPgLrnJwrUgaCT+bCHzDelmE=
 			</data>
 		</dict>
 		<key>Frameworks/libswiftsimd.dylib</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			Q9gxSQV8yq+0XtSjd4c3qCNqghU=
+			Galldu67qIFDrTH/MeGzh8sDv9k=
 			</data>
 			<key>hash2</key>
 			<data>
-			JjSEYizqevaXQNra2PZx9+82xduqZlc+vVRIfuSSzWA=
+			Ir4rA18QhYdUfm7//DP56JZubdVNSY7LRSnjddCYRN8=
 			</data>
 		</dict>
 		<key>JPushConfig.plist</key>
@@ -1596,22 +1604,22 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			h27QShEEqp2YliUGmzbvowlsX9I=
+			koWBzWcwwj6XJLRkyaGGkmV2Bcc=
 			</data>
 			<key>hash2</key>
 			<data>
-			QDd8NaAdWQLfXjj1XMvoaqVfhmYvLf9OwrQ0CPKsob4=
+			QrGika2EwsYPw4qDYyjWY+tKBAJUKrq60LVbb7m1dF0=
 			</data>
 		</dict>
 		<key>config.xml</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			PZUzb4/2ynWqr9WkAFnsX6KOZ1k=
+			n1EAWuZ4faYwmjuBbQ0QES0F67A=
 			</data>
 			<key>hash2</key>
 			<data>
-			Rc9fXTgQhylUY1cVz6eRZG2E2MiHf7lNVaYC/IY6ZD8=
+			1XwfAuQjuTHoqw6dtT6caUUQZzuM+B7w5txQLmLiwMQ=
 			</data>
 		</dict>
 		<key>embedded.mobileprovision</key>
@@ -1662,11 +1670,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			jGx5uAhkm+a3PdC0Z5ENLMfZa+M=
+			XH5dN9nTWa/E+s6V+Zwi0P/FUYw=
 			</data>
 			<key>hash2</key>
 			<data>
-			xlAGhILXieaQ+He/c01QmmUhffREXODF7o31Lf64ah8=
+			VTUsTd+9TLvVRzDGZmPWE0KWjMPL1SZzMwcSf3gSRzk=
 			</data>
 		</dict>
 		<key>www/card.html</key>
@@ -1684,11 +1692,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			QQg8HZreHawxjyGafVvCyGhCGrw=
+			RHBhk2UhuNxYzG8kf7pOAsw4kGU=
 			</data>
 			<key>hash2</key>
 			<data>
-			dLCHrYVEZUVA/9OSA1MYq9G/NQhW9Q6iTid44oVzVCc=
+			rlU4EBXI/nZ53oKehs/zRVeck4i/V6M0Yr6DATYt9GQ=
 			</data>
 		</dict>
 		<key>www/cordova-js-src/exec.js</key>
@@ -1750,11 +1758,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			mjZMhcaV9rGT+gEJycqyUiJiwp8=
+			HQOKu0hTPe6fq1P1wO1LoP8HtgI=
 			</data>
 			<key>hash2</key>
 			<data>
-			NAGln7mA1gWlhX8EULmd8KjWEz3VwOZVBK1TutRZiQ4=
+			sm2blQo73RzNr/seRXdVpGhyUzyFYU7GIHsuYEERK0I=
 			</data>
 		</dict>
 		<key>www/css/aui-iconfont.ttf</key>
@@ -2102,22 +2110,22 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			0B7mevzLJOBg0VXTUpHtZ//18PQ=
+			Ysntrs0q1qAqlEefYvglyu3eoI4=
 			</data>
 			<key>hash2</key>
 			<data>
-			RTbz/7lGwjEFRysFNUCFqZu0zLr5jrz4hYhhqEhW6co=
+			CO2rVnhm3/WaB883+VEt+r4jiBGJESy3xQWdp8GUT7c=
 			</data>
 		</dict>
 		<key>www/js/bindcheck.js</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			5RfLHKNNVVwPSEOzS8TfUZ0lpJQ=
+			GTPsPGLI8aaV2k5LtPK0c2+NnGE=
 			</data>
 			<key>hash2</key>
 			<data>
-			iIc+Xy+koHZAAKkSK4SrrTOz6KoHuiM/du4yk7IV3xI=
+			+DGxUBVhoqEwBw5z3SiT5FYooZDZHMvJMVDCh+nW+x4=
 			</data>
 		</dict>
 		<key>www/js/card.js</key>
@@ -2135,11 +2143,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			H5Qek3wUoBtXbL/Ry+v/gt4riXg=
+			62jCoaZTsDLir4Rxq8Q8TIwQufc=
 			</data>
 			<key>hash2</key>
 			<data>
-			ImlzAkXWit52+Okzsr+w8kHaTnJMmM0IHcp5lU6u9zw=
+			z5IvWANnFsUHTM0eF7PrmN7mA0l6oGhJQ9uQNwTxTl8=
 			</data>
 		</dict>
 		<key>www/js/db.js</key>
@@ -2498,11 +2506,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			0GJu73OFCX3YlRcB4DWzCmggX94=
+			HpZT8Ysc+/FTRb3MxKtp3lvPYAM=
 			</data>
 			<key>hash2</key>
 			<data>
-			yGpzeGfw2KACSa3Hu+tA/5uXUpfDEj2LubnWxDqJxFs=
+			YmWMZ4ay1dj6Sv3/gBd9FKw+Cx778K7ZxZv+ivK0aRg=
 			</data>
 		</dict>
 		<key>www/js/mobile.js</key>
@@ -2553,33 +2561,33 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			Cx6iRRJAH08QlPBBT//jwM7LZP4=
+			JeNJiL4CmSC5LsD8KK/ZtGtp70k=
 			</data>
 			<key>hash2</key>
 			<data>
-			y5y66ieXeEONknB6UKddmxUSVsTEKM0JD/kEZBuBQ+I=
+			nE3dTx5GBPzcOVSZafV7jam4d1ZWYdsTK2hW140AEYg=
 			</data>
 		</dict>
 		<key>www/js/register.js</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			kEIN8Lt6KbeSEYmiYk47uhchWg8=
+			JQaJE5lT+p3bMdfpHRMD7mVk7rA=
 			</data>
 			<key>hash2</key>
 			<data>
-			SWhxKePIt9pzPkMUPoRj0WTaXD4Z7GYBGqdsoqvRyuo=
+			x+qKVPMMkoIo27fquMOLrq+XQFV42PVbuDC6cjvtkl8=
 			</data>
 		</dict>
 		<key>www/js/scan.js</key>
 		<dict>
 			<key>hash</key>
 			<data>
-			u/uxG7pig1OIhkJvIOSMYiOTs8c=
+			9kMdeIdvvtMD2cLcujur6+v1ntE=
 			</data>
 			<key>hash2</key>
 			<data>
-			gPLadH5W2VlCuZ52V99qWeU68uCz62OtFYHpY3jTFBc=
+			8cb+0T4ga9G125lfrCJTBtT6K/LUyXyXJPU4ofn4A+g=
 			</data>
 		</dict>
 		<key>www/js/security.js</key>
@@ -2597,11 +2605,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			7hP5JogQrZX3Y7gz7anbjekAU1k=
+			6Cwg320/oc/nsmU2Fbj4eNG8dGo=
 			</data>
 			<key>hash2</key>
 			<data>
-			2ffigLo1Xa+Z/rgoGad55by5Ug4RwJz4mZ2lOkasD/c=
+			mVXgdJ2LEIOlzsufDFQJGy3EL1rlWr+TWn3jhnH0of8=
 			</data>
 		</dict>
 		<key>www/js/signxy.js</key>
@@ -2619,11 +2627,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			OQxn/Q3V2ODyeXPO0htt940uIyM=
+			66nnYQb6FRQcu9XGNEDjLhRZRaQ=
 			</data>
 			<key>hash2</key>
 			<data>
-			eW7ouno0m+7r/ecUWfaUCLB8d/xGdvBMxK+RmBI3bYQ=
+			ZcabwVnNmUkVPMvmDMoeSie8f33j0aBksf199emc9T4=
 			</data>
 		</dict>
 		<key>www/js/uxy.js</key>
@@ -2663,11 +2671,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			PEdyDAoIJ4z2Zwdw7nZQKul7P9M=
+			SVOoElUZsKWPwn7lvgGYAuu4wPs=
 			</data>
 			<key>hash2</key>
 			<data>
-			8D/UG2CsfJAhOus4F7r4s3uOZI76ibYPcwpvMMIZv0c=
+			wX11N5M8XIFOUBDxbYR33D3IXyMzsyg2nA6LqD2DTg4=
 			</data>
 		</dict>
 		<key>www/main1.html</key>
@@ -3352,6 +3360,17 @@
 			otER8eJerTAz1mG9IypR/8h6ZnJtH1dwz3H0eVsHA5M=
 			</data>
 		</dict>
+		<key>www/my.html</key>
+		<dict>
+			<key>hash</key>
+			<data>
+			BUBrEJQD4PffOvTDZFrKmckMu24=
+			</data>
+			<key>hash2</key>
+			<data>
+			jrzhEa99VLLIvclsq6udEOfzFfOvq2eTC+I1LBy9hsE=
+			</data>
+		</dict>
 		<key>www/paypwdmng.html</key>
 		<dict>
 			<key>hash</key>
@@ -3506,6 +3525,17 @@
 			hULEK/sXXYA5Q+DEGduyGZlT2gUtMhRcybSoo9TWM+0=
 			</data>
 		</dict>
+		<key>www/plugins/cordova-plugin-brightness/www/brightness.js</key>
+		<dict>
+			<key>hash</key>
+			<data>
+			FrJFTczXZ/W9VS3gElKUNATvxE4=
+			</data>
+			<key>hash2</key>
+			<data>
+			KRfwyv/7WE/uiPHoXPiJHi/ZptefxPS/08ettF1uOuY=
+			</data>
+		</dict>
 		<key>www/plugins/cordova-plugin-camera/www/Camera.js</key>
 		<dict>
 			<key>hash</key>
@@ -3917,11 +3947,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			FK8oc1oB59vB31qmvZp+SzcB9/U=
+			PmFDX7bCnDmVlZ5pDAXyikKJwMQ=
 			</data>
 			<key>hash2</key>
 			<data>
-			hKaZe4Brj53BLM4b10F58QehbRHB4aCSmOpVeXW/8sM=
+			JsVXB5l7Z9EaOIrvC0frSCDKRbXgmplNjiZk1bh02VM=
 			</data>
 		</dict>
 		<key>www/register.html</key>
@@ -3972,11 +4002,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			OC5VO7siXCVWFdZQFLrRkOG5Jdk=
+			0eypcjj4wr9SerMRKUWVOazcxEU=
 			</data>
 			<key>hash2</key>
 			<data>
-			K+OIpvhIfjlVjmqcZ0zX2HKs3wgjAPTg2JdK+oCYhGg=
+			VYrrnWZvzLvw19ynhsBzLskzFV66f9OLlBWDtIr8LhM=
 			</data>
 		</dict>
 		<key>www/uxy.html</key>
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/config.xml b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/config.xml
index 14bae9c..a06aded 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/config.xml
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/config.xml
@@ -64,6 +64,9 @@
     <feature name="CDVWKWebViewEngine">
         <param name="ios-package" value="CDVWKWebViewEngine" />
     </feature>
+    <feature name="Brightness">
+        <param name="ios-package" value="Brightness" />
+    </feature>
     <name short="大理市民卡">dlapp</name>
     <description>
         A sample Apache Cordova application that responds to the deviceready event.
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/dlapp b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/dlapp
index 916cc72..225a82c 100755
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/dlapp
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/dlapp
Binary files differ
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/bindcheck.html b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/bindcheck.html
index 51e13e9..9e2560a 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/bindcheck.html
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/bindcheck.html
@@ -30,6 +30,9 @@
                 <div class="weui-cell__bd">
                     <input class="weui-input" type="tel" id="code" style="font-size: 14px;" placeholder="请输入验证码" maxlength="6">
                 </div>
+                <div class="weui-cell__ft">
+                    <button class="weui-vcode-btn" onclick="app.getCode()" id="codebtn" style="width: 100px;height: 1rem;font-size: 14px;">获取验证码</button>
+                </div>
             </div>
         </div>
         <section class="aui-content-padded" style="margin-top: 30px;">
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cardinfor.html b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cardinfor.html
index 19ea1df..bcda2dd 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cardinfor.html
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cardinfor.html
@@ -41,11 +41,15 @@
                 <div class="weui-cell__ft" id="cardstatus"></div>
             </div>
         </div>
+        <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.unBindcard();" class="weui-btn weui-btn_warn">解除绑定</a>
+            </div>  
     </div>
 </body>
 </html>
 <script type="text/javascript" src="cordova.js"></script>
 <script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
 <script type="text/javascript" src="js/lib/jquery-weui.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
 <script type="text/javascript" src="js/server.js"></script>
 <script type="text/javascript" src="js/cardinfor.js"></script>
\ No newline at end of file
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cordova_plugins.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cordova_plugins.js
index 99f7689..eca1f34 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cordova_plugins.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cordova_plugins.js
@@ -351,6 +351,14 @@
       "clobbers": [
         "window.WkWebView"
       ]
+    },
+    {
+      "id": "cordova-plugin-brightness.Brightness",
+      "file": "plugins/cordova-plugin-brightness/www/brightness.js",
+      "pluginId": "cordova-plugin-brightness",
+      "clobbers": [
+        "cordova.plugins.brightness"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -370,6 +378,7 @@
     "cordova-plugin-jcore": "1.3.0",
     "jpush-phonegap-plugin": "3.7.2",
     "cordova-plugin-app-version": "0.1.9",
-    "cordova-plugin-wkwebview-engine": "1.2.1"
+    "cordova-plugin-wkwebview-engine": "1.2.1",
+    "cordova-plugin-brightness": "0.1.5"
   };
 });
\ No newline at end of file
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcard.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcard.js
index e9cb86c..f7e91a2 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcard.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcard.js
@@ -21,15 +21,19 @@
                     let vals = Object.values(dict);
                     console.log(keys, vals)
                     var items=[];
+                    var selectItem=items[0];
                     for(var key of keys){
                         var bean = {
                             "title":dict[key],
                             "value":key
                         }
+                        if(key == 'idcard'){
+                            selectItem=bean;
+                        }
                         items.push(bean)
                     }
-                    $("#idtype").val(items[0].title)
-                    $("#idtype").attr("data-values",items[0].value)
+                    $("#idtype").val(selectItem.title)
+                    $("#idtype").attr("data-values",selectItem.value)
                     $("#idtype").select({
                       title: "请选择证件类型",
                       items: items
@@ -55,11 +59,10 @@
             $.alert("请选择证件类型", "错误");
             return;
         }
-        /*var agree = $("input[type=checkbox]:checked").val();
-        if(isEmpty(agree)){
-            $.alert("请同意用户协议与隐私条款", "提示");
-            return;
-        }*/
+        cardnum = cardnum.trim();
+        name = name.trim();
+        idno = idno.trim();
+        
         $.showLoading("正在处理");
         var param = {
             "cardno": cardnum,
@@ -72,8 +75,11 @@
                 $.hideLoading();
                 console.log(ret)
                 if (ret.code == 200) {
-                    window.localStorage.setItem("phoneX",ret.phonex);
                     window.localStorage.setItem("name", name);
+                    window.localStorage.setItem("cardno", cardnum);
+                    window.localStorage.setItem("idtype", idtype);
+                    window.localStorage.setItem("idno", idno);
+                    window.localStorage.setItem("phoneX",ret.phonex);
                     window.localStorage.setItem("personid", ret.personid);
                     window.localStorage.setItem("signed", ret.signed);
                     window.localStorage.setItem("paypwdset", ret.paypwdset);
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcheck.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcheck.js
index a4214fc..32dba4c 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcheck.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcheck.js
@@ -13,6 +13,44 @@
             phone =  window.localStorage.getItem("phone");
             $("#phone").text(phone)
         }
+        $("#codebtn").attr("disabled","disabled")
+        $("#codebtn").addClass("vcodedisabled")
+        btnTime('codebtn');
+    },
+    getCode: function() {
+        var name = window.localStorage.getItem("name");
+        var cardno = window.localStorage.getItem("cardno");
+        var idtype = window.localStorage.getItem("idtype");
+        var idno = window.localStorage.getItem("idno");
+
+        $.showLoading("正在请求");
+        var param = {
+            "cardno": cardno,
+            "idtype": idtype,
+            "name": name,
+            "idno": idno
+        }
+        V1Bindcard(param, function(ok, ret) {
+            if (ok) {
+                $.hideLoading();
+                if (ret.code == 200) {
+                   $("#codebtn").attr("disabled","disabled")
+                   $("#codebtn").addClass("vcodedisabled")
+                   btnTime('codebtn');
+                } else {
+                    if (ret.code == -1) {
+                        $.alert(ret.msg, "提示", function() {
+                            window.location = "main.html"
+                        });
+                    } else {
+                        $.alert(ret.msg, "错误");
+                    }
+                }
+            } else {
+                $.hideLoading();
+                $.alert("请求失败了 " + ret.status + "，请稍后再试", "错误");
+            }
+        })
     },
     doNext: function() {
         var code =  $("#code").val();
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/cardinfor.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/cardinfor.js
index 3d8f675..da6e04f 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/cardinfor.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/cardinfor.js
@@ -22,6 +22,44 @@
                 $.alert("加载失败了:" + ret.status, "错误");
             }
         })
+    },
+    unBindcard: function(){
+        var dialog = new auiDialog({})
+        dialog.prompt({
+            title:"请输入支付密码",
+            text:'请输入支付密码',
+            buttons:['取消','确定']
+        },function(ret){
+            console.log(ret);
+            if(ret.buttonIndex == 2){
+                if(!isEmpty(ret.text)){
+                    $.showLoading("正在请求");
+                    var param = {
+                        "paypwd":ret.text
+                    }
+                    V1Unbindcard(param,function(ok, ret, err) {
+                        if (ok) {
+                            $.hideLoading(); 
+                            if(ret.code==200){
+                                window.localStorage.removeItem("userid");
+                                $.alert('解绑成功', "提示", function() {
+                                    window.location = 'main.html'
+                                });
+                            }else{
+                                $.alert(ret.msg, "错误");
+                            }
+                        } else {
+                            $.hideLoading();
+                            $.alert("请求失败了:" + ret.status, "错误");
+                        }
+                    })
+                }
+            }
+        });
+        var input = $(".aui-dialog-body").find("input");
+        if(input){
+            input.attr("type","password");
+        }
     }
 };
 app.initialize();
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/main.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/main.js
index 43938a2..9d3b017 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/main.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/main.js
@@ -92,18 +92,18 @@
             })
         });
         $('#secBtn').click(function() {
-            window.location = "security.html";
-            /*app.checkBefore(function() {
+            //window.location = "security.html";
+            app.checkBefore(function() {
                 app.checkOther(function() {
                     window.location = "security.html";
                 })
-            })*/
+            })
         });
-        $("#doorBtn").click(function(){
+        /*$("#doorBtn").click(function(){
             app.checkBefore(function() {
                 showRet(DOOR_URl);
             })
-        })
+        })*/
         $('#usersec').click(function() {
             app.checkBefore(function() {
                 app.checkOther(function() {
@@ -112,6 +112,13 @@
             })
         });
         this.initData();
+        this.backBtn();
+    },
+    backBtn: function(){
+        document.addEventListener("backbutton", function(e){
+               e.preventDefault();
+               navigator.app.exitApp();
+            }, false);
     },
     initTab: function() {
         $("#maincontent").css("top", $("#maintop").height())
@@ -321,6 +328,10 @@
         } else {
             window.location = 'cardinfor.html'
         }
+    },
+    logout:function(){
+        window.localStorage.removeItem("token");
+        window.location = "login.html";
     }
 };
 app.initialize();
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/qrcode.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/qrcode.js
index 4664a9b..b9d81b9 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/qrcode.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/qrcode.js
@@ -1,16 +1,27 @@
+var brightness;
+var bvalue;
+var setted= false;
 var app = {
 
     // Application Constructor
     initialize: function() {
         document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
     },
-
     onDeviceReady: function() {
         var uid = window.localStorage.getItem("token");
-        this.loadQrcode();
+        app.loadQrcode();
         setInterval(function () {
             window.location.reload();
         },100000);
+
+        brightness = cordova.plugins.brightness;
+        if(brightness){
+          brightness.getBrightness(function(val){
+              bvalue = val;
+          }, function(err){
+            console.log(err);
+          });
+        }
     },
     loadQrcode: function() {
         $.showLoading("加载中");
@@ -21,12 +32,21 @@
                     $.hideLoading();
                     var qrcode = new QRCode(document.getElementById("qrcode"), {
                       text: ret.qrcode,
-                      width: 150,
-                      height: 150,
+                      width: 200,
+                      height: 200,
                       colorDark: "#000000",
                       colorLight: "#ffffff",
                       correctLevel: QRCode.CorrectLevel.L
                     });
+                    if(!setted&&brightness){
+                      brightness.setBrightness(1, function(ret){
+                        console.log(ret);
+                        setted = true;
+                        brightness.setKeepScreenOn(true);
+                      }, function(e){
+                        console.log(e)
+                      });
+                    }
                 } else {
                     $.hideLoading();
                     $.alert("请求失败，请稍后再试", "错误");
@@ -44,8 +64,8 @@
                     $.hideLoading();
                     var qrcode = new QRCode(document.getElementById("qrcode"), {
                       text: ret.qrcode,
-                      width: 150,
-                      height: 150,
+                      width: 200,
+                      height: 200,
                       colorDark: "#000000",
                       colorLight: "#ffffff",
                       correctLevel: QRCode.CorrectLevel.L
@@ -59,6 +79,16 @@
                 $.alert("请求失败了:" + ret.status + "请稍后再试", "错误");
             }
         })
+    },
+    backTo:function(){
+      if(brightness&&bvalue){
+        brightness.setBrightness(bvalue, function(ret){
+          brightness.setKeepScreenOn(false);
+        }, function(e){
+          console.log(e)
+        });
+      } 
+      window.location.href='main.html';
     }
 };
 app.initialize();
\ No newline at end of file
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/register.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/register.js
index d10558e..f53220a 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/register.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/register.js
@@ -27,7 +27,6 @@
             "platform":device.name+","+device.platform+","+device.version,
             "uuid":device.uuid
         }
-        console.log(param)
         ICheckCode(param,function(ok,ret){
             if(ok){
                 $.hideLoading();
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/scan.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/scan.js
index f331281..cc50c0b 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/scan.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/scan.js
@@ -33,11 +33,13 @@
                     } else {
                         // The scan completed, display the contents of the QR code:
                         QRScanner.destroy();
+                        //$.alert(text, '提示');
                         showRet(text);
                     }
                 }
                 //开始扫描，需要将页面的背景设置成透明
                 QRScanner.show();
+                console.log("QRScanner.scan");
             } else if (status.denied) {
                 // The video preview will remain black, and scanning is disabled. We can
                 // try to ask the user to change their mind, but we'll have to send them
@@ -64,12 +66,12 @@
         });
     },
     goPage: function() {
-        //QRScanner.destroy();
         window.location = "main.html"
     }
 };
 app.initialize();
-function showRet1(url){
+var inAppBrowserRef;
+function showRet(url){
   if(isEmpty(url)){
       return;
   }
@@ -99,22 +101,21 @@
        }
      }
   });
+  //ref.show();
 }
 
-function showRet(url) {
+function showRet1(url) {
     if(isEmpty(url)){
         return;
     }
     var userid = window.localStorage.getItem("userid"); 
-    if (url.indexOf("yy.dlsmk.cn")>=0) {
-        if(url.indexOf("?")>0){
-            url=url+'&userid='+userid;
-        }else{
-            url=url+'?userid='+userid;
-        }
+    if(url.indexOf("?")>0){
+        url=url+'&userid='+userid;
+    }else{
+        url=url+'?userid='+userid;
     }
     console.log(url)
-    var inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
+    inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
         statusbar: {
             color: '#03a9f4ff'
         },
@@ -127,41 +128,82 @@
             showPageTitle: true
         },
         backButton: {
-            image: 'back.png',
-            imagePressed: 'back.png',
+            wwwImage: 'img/back.png',
+            wwwImagePressed: 'img/back.png',
             align: 'left',
             event: 'backPressed'
         },
         closeButton: {
-            image: 'close.png',
-            imagePressed: 'close.png',
+            wwwImage: 'img/close.png',
+            wwwImagePressed: 'img/close.png',
             align: 'left',
             event: 'closePressed'
         },
         backButtonCanClose: true
-    }).addEventListener('loadstart', function(params){
-     if (params.url.indexOf("yy.dlsmk.cn")>=0) {
-       if (params.url.indexOf("userid")<0) {
-           if(params.url.indexOf("?")>0){
-               params.url=params.url+'&userid='+userid;
-           }else{
-               params.url=params.url+'?userid='+userid;
-           }
-           //ref.hide();
-           var neRef = cordova.ThemeableBrowser.open(params.url, '_blank');
-           neRef.addEventListener('closePressed', function(e){
-               neRef.close();
-               window.location = "main.html"
-           });
-       }
-     }
-  });
+    }).addEventListener('backPressed', function(e) {
+        //alert('back pressed');
+    }).addEventListener('closePressed', function(e) {
+        //alert('closePressed pressed');
+        inAppBrowserRef.close();
+        window.location = "main.html"
+    }).addEventListener(cordova.ThemeableBrowser.EVT_ERR, function(e) {
+        console.error(e.message);
+    }).addEventListener(cordova.ThemeableBrowser.EVT_WRN, function(e) {
+        console.log(e.message);
+    }).addEventListener('loadstart', function(params,e){
+      console.log("11111111"+JSON.stringify(params));
+      if (params.url.indexOf("yy.dlsmk.cn")>=0) {
+        if (params.url.indexOf("userid")<0) {
+            if(params.url.indexOf("?")>0){
+                params.url=params.url+'&userid='+userid;
+            }else{
+                params.url=params.url+'?userid='+userid;
+            }
+            inAppBrowserRef.close();
+            inAppBrowserRef = null;
+            openUrl(params.url);
+        }
+      }
+    });
     //inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
     //inAppBrowserRef.addEventListener('beforeload', beforeloadCallBack);
 }
-function loadStartCallBack(params,callback) {
-    console.log("1",params.url);
-}
-function beforeloadCallBack(params,callback) {
-    console.log("2",params.url);
+
+function openUrl(url){
+      inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
+          statusbar: {
+              color: '#03a9f4ff'
+          },
+          toolbar: {
+              height: 44,
+              color: '#03a9f4ff'
+          },
+          title: {
+              color: '#ffffffff',
+              showPageTitle: true
+          },
+          backButton: {
+              wwwImage: 'img/back.png',
+              wwwImagePressed: 'img/back.png',
+              align: 'left',
+              event: 'backPressed'
+          },
+          closeButton: {
+              wwwImage: 'img/close.png',
+              wwwImagePressed: 'img/close.png',
+              align: 'left',
+              event: 'closePressed'
+          },
+          backButtonCanClose: true
+      }).addEventListener('backPressed', function(e) {
+      }).addEventListener('closePressed', function(e) {
+          inAppBrowserRef.close();
+          window.location = "main.html"
+      }).addEventListener(cordova.ThemeableBrowser.EVT_ERR, function(e) {
+          console.error(e.message);
+      }).addEventListener(cordova.ThemeableBrowser.EVT_WRN, function(e) {
+          console.log(e.message);
+      }).addEventListener('loadstart', function(params,e){
+          console.log("333333"+JSON.stringify(params));
+      });
 }
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/server.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/server.js
index b5ec388..aba520d 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/server.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/server.js
@@ -1,11 +1,18 @@
-var dev = false;
+var dev = true;
 var SERVER = "https://yy.dlsmk.cn/payapi/mobileapi";
 var DOOR_URl = "http://172.28.43.8:8099/door/app/appMintUIindex";//门禁服务地址
 var GLOBAL_TODAY="";
 var GLOBAL_YESTERDAY="";
 var CURRENT_INDEX=1;
 if (dev) {
-    SERVER = "http://172.28.201.70:10010/payapi/mobileapi";
+    SERVER = "http://172.28.43.7:8099/payapi/mobileapi";
+}
+function V1Unbindcard(param,callback){
+    ajaxPost("/v1/unbindcard", param, callback)
+}
+
+function V1UnSignbxy(param,callback){
+    ajaxPost("/v1/unsignbxy", param, callback)
 }
 
 function V1Qrcode(callback) {
@@ -76,7 +83,6 @@
     ajaxPost("/i/code", param, callback)
 }
 
-
 function IServeTime(callback) {
     ajaxPost("/i/time", {}, callback)
 }
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/signxycheck.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/signxycheck.js
index 4e52298..80ef9d7 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/signxycheck.js
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/signxycheck.js
@@ -1,11 +1,13 @@
 var db = null;
+var canCheck = false;
+var wait = 5;
 var app = {
-
     // Application Constructor
     initialize: function() {
         document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
+        canCheck = false;
+        wait=5;
     },
-
     onDeviceReady: function() {
         $.showLoading("加载中");
         V1Bxy(function(ok, ret, err) {
@@ -15,8 +17,10 @@
                     $("#content").html(ret.page);
                     if (isEmpty(ret.signed) || ret.signed != 'yes') {
                         $("#btn").show();
+                        app.checkTime();
                         $("#content").css("bottom", "135px");
                     } else {
+                        $("#unbtn").show();
                         $("#content").css("bottom", "10px");
                     }
                 } else {
@@ -34,7 +38,39 @@
             }
         })
     },
+    unAgreeXY: function(){
+        var cum = new auiDialog({});
+        var confirm = cum.alert({
+            title: "提示",
+            msg: '确定解除代扣协议吗？',
+            buttons: ['取消', '解除']
+        }, function(ret) {
+            if (ret.buttonIndex == 2) {
+                $.showLoading("正在请求");
+                var param = {}
+                V1UnSignbxy(param, function(ok, ret, err) {
+                    if (ok) {
+                        $.hideLoading();
+                        if (ret.code == 200) {
+                            window.localStorage.setItem("signed", ret.signed);
+                            $.alert('解除成功', "提示", function() {
+                                window.location = 'main.html'
+                            });
+                        } else {
+                            $.alert(ret.msg, "错误");
+                        }
+                    } else {
+                        $.hideLoading();
+                        $.alert("请求失败了:" + ret.status + "请稍后再试", "错误");
+                    }
+                })
+            }
+        })
+    },
     agreeXY: function() {
+        if(!canCheck){
+            return;
+        }
         var agree = $("input[type=checkbox]:checked").val();
         if (isEmpty(agree)) {
             $.alert("请同意签约代扣协议", "提示");
@@ -58,6 +94,20 @@
                 $.alert("请求失败了:" + ret.status + "请稍后再试", "错误");
             }
         })
+    },
+    checkTime: function(){
+      if (wait == 0) {
+        $("#signBtn").text("签约代扣协议");
+        $("#signBtn").addClass("aui-btn-info");
+        canCheck = true;
+      }else{
+        $("#signBtn").text(wait+"s 签约代扣协议");
+        wait--;
+         setTimeout(function() {
+              app.checkTime();
+            },1000)
+      }
     }
+
 };
 app.initialize();
\ No newline at end of file
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/main.html b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/main.html
index e788ea0..79e824b 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/main.html
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/main.html
@@ -44,10 +44,10 @@
                             <div class="center-in"><img src="img/icon_securty.png" style="width:28px;height: 28px"></div>
                             <div class="aui-grid-label" style="margin-top:10px;">账户安全</div>
                         </div>
-                        <div class="aui-col-xs-4" id="doorBtn">
+                        <!--<div class="aui-col-xs-4" id="doorBtn">
                             <div class="center-in"><img src="img/icon_door.png" style="width:28px;height: 28px"></div>
                             <div class="aui-grid-label" style="margin-top:10px;">远程开门</div>
-                        </div>
+                        </div>-->
                     </div>
                 </div>
             </section>
@@ -177,7 +177,8 @@
         <header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
             我的
         </header>
-        <section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+        <!-- bg-white -->
+        <section class="aui-content aui-margin-b-15" style=" margin-top: -2px;">
             <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
                 <div class="aui-list-item aui-list-item-middle top-btn">
                     <div class="aui-media-list-item-inner ">
@@ -193,23 +194,22 @@
                     </div>
                 </div>
             </div>
-            <section class="aui-content aui-grid ">
-                <div class="aui-row aui-margin-t-10">
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-warning" id="user-amount">0.00</big>
-                        <div class="aui-gird-lable aui-font-size-12">余额</div>
-                    </div>
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-success" id="user-point">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">积分</div>
-                    </div>
-                    <div class="aui-col-xs-4 ">
-                        <big class="aui-text-danger" id="user-coupon">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">优惠券</div>
-                    </div>
-                </div>
-            </section>
-            
+            <!--<section class="aui-content aui-grid ">
+                  <div class="aui-row aui-margin-t-10">
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-warning" id="user-amount">0.00</big>
+                          <div class="aui-gird-lable aui-font-size-12">余额</div>
+                      </div>
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-success" id="user-point">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">积分</div>
+                      </div>
+                      <div class="aui-col-xs-4 ">
+                          <big class="aui-text-danger" id="user-coupon">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+                      </div>
+                  </div>
+              </section>-->
         </section>
         <section class="aui-content">
             <ul class="aui-list aui-list-in aui-margin-b-15">
@@ -242,6 +242,9 @@
                     </div>
                 </li>
             </ul>
+            <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.logout();" class="weui-btn weui-btn_warn">退出登录</a>
+            </div>  
         </section>
     </div>
     <footer class="aui-bar aui-bar-tab aui-border-t" id="footer">
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/my.html b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/my.html
new file mode 100644
index 0000000..291f236
--- /dev/null
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/my.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
+    <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
+    <link rel="stylesheet" type="text/css" href="css/aui.css" />
+    <link rel="stylesheet" type="text/css" href="css/weui.min.css">
+    <link rel="stylesheet" type="text/css" href="css/jquery-weui.min.css">
+    <link rel="stylesheet" type="text/css" href="css/index.css" />
+</head>
+<body>
+<header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
+    个人信息
+</header>
+<section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+    <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
+        <div class="aui-list-item aui-list-item-middle top-btn">
+            <div class="aui-media-list-item-inner ">
+                <div class="aui-list-item-media" style="width:3rem;">
+                    <img src="img/icon_header.png" class="aui-img-round" id="userlogo">
+                </div>
+                <div class="aui-list-item-inner">
+                    <div class="aui-list-item-text text-white aui-font-size-18" id="username">匿名</div>
+                    <div class="aui-list-item-text text-white">
+                        <div><i class="aui-iconfont aui-icon-mobile aui-font-size-14"></i><span id="userphone"></span></div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <section class="aui-content aui-grid ">
+        <div class="aui-row aui-margin-t-10">
+            <div class="aui-col-xs-4 aui-border-r">
+                <big class="aui-text-warning" id="user-amount">0.00</big>
+                <div class="aui-gird-lable aui-font-size-12">余额</div>
+            </div>
+            <div class="aui-col-xs-4 aui-border-r">
+                <big class="aui-text-success" id="user-point">0</big>
+                <div class="aui-gird-lable aui-font-size-12">积分</div>
+            </div>
+            <div class="aui-col-xs-4 ">
+                <big class="aui-text-danger" id="user-coupon">0</big>
+                <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+            </div>
+        </div>
+    </section>
+    
+</section>
+<section class="aui-content">
+    <ul class="aui-list aui-list-in aui-margin-b-15">
+        <li class="aui-list-item" onclick="app.toCard()">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-cert aui-text-info"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">银行卡</div>
+                <div class="aui-list-item-right" id="userbank"></div>
+            </div>
+        </li>
+        <li class="aui-list-item" onclick="app.toSign()">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-pencil aui-text-danger"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">签约代扣免密付</div>
+                <div class="aui-list-item-right" id="usersign"></div>
+            </div>
+        </li>
+    </ul>
+    <ul class="aui-list aui-list-in">
+        <li class="aui-list-item" id="usersec">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-lock aui-text-info"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">账户安全</div>
+            </div>
+        </li>
+    </ul>
+</section>
+</body>
+<script type="text/javascript" src="cordova.js"></script>
+<script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
+<script type="text/javascript" src="js/lib/aui-tab.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
+<script type="text/javascript" src="js/server.js"></script>
+<script type="text/javascript" src="js/main.js"></script>
+<script type="text/javascript">
+
+</script>
+</html>
\ No newline at end of file
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/plugins/cordova-plugin-brightness/www/brightness.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/plugins/cordova-plugin-brightness/www/brightness.js
new file mode 100644
index 0000000..c1111d6
--- /dev/null
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/plugins/cordova-plugin-brightness/www/brightness.js
@@ -0,0 +1,18 @@
+cordova.define("cordova-plugin-brightness.Brightness", function(require, exports, module) {
+'use strict';
+
+var exec = require('cordova/exec');
+
+exports.getBrightness = function( success, error) {
+  exec(success, error, 'Brightness', 'getBrightness', []);
+};
+
+exports.setBrightness = function(value, success, error) {
+  exec(success, error, 'Brightness', 'setBrightness', [value]);
+};
+
+exports.setKeepScreenOn = function(value, success, error) {
+  exec(success, error, 'Brightness', 'setKeepScreenOn', [value]);
+};
+
+});
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/qrcode.html b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/qrcode.html
index ca6cb07..3edeb36 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/qrcode.html
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/qrcode.html
@@ -15,7 +15,7 @@
 </head>
 <body style="background: #fff"  >
     <header class="aui-bar aui-bar-nav" style="padding-top:25px;">
-        <a class="aui-pull-left" href="main.html">
+        <a class="aui-pull-left" href="javascript:app.backTo()">
             <span class="aui-iconfont aui-icon-left"></span>
         </a>
         <div class="aui-title">付款码</div>
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/signxycheck.html b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/signxycheck.html
index ece02b5..180aa9b 100644
--- a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/signxycheck.html
+++ b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/signxycheck.html
@@ -23,23 +23,29 @@
     <div style="padding:10px;overflow: scroll;position: absolute;top:74px;bottom:135px;left: 0;right: 0" id="content">
         
     </div>
+    <div class="weui-footer weui-footer_fixed-bottom" style="background: #fff;display: none;" id="unbtn">
+        <section class="aui-content-padded" style="margin-top: 20px;">
+            <div class="aui-btn aui-btn-block " apmode onclick="app.unAgreeXY()" id="unsignBtn">解除代扣协议</div>
+        </section>
+    </div>
     <div class="weui-footer weui-footer_fixed-bottom" style="background: #fff;display: none;" id="btn">
-            <div style="margin-top: 10px;">
-                <label for="agree" class="weui-agree" style="padding: .5em 5px .5em 15px;display: inline-block;">
-                    <input id="agree" type="checkbox" class="weui-agree__checkbox" value="yes">
-                    <span class="weui-agree__text">
-                        我已阅读并同意该协议
-                    </span>
-                </label>
-            </div>
-            <section class="aui-content-padded" style="margin-top: 20px;">
-                <div class="aui-btn aui-btn-block aui-btn-info"  tapmode onclick="app.agreeXY()">签约代扣协议</div>
-            </section>
+        <div style="margin-top: 10px;">
+            <label for="agree" class="weui-agree" style="padding: .5em 5px .5em 15px;display: inline-block;">
+                <input id="agree" type="checkbox" class="weui-agree__checkbox" value="yes">
+                <span class="weui-agree__text">
+                    我已阅读并同意该协议
+                </span>
+            </label>
+        </div>
+        <section class="aui-content-padded" style="margin-top: 20px;">
+            <div class="aui-btn aui-btn-block "  tapmode onclick="app.agreeXY()" id="signBtn">签约代扣协议</div>
+        </section>
     </div>
 </body>
 </html>
 <script type="text/javascript" src="cordova.js"></script>
 <script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
 <script type="text/javascript" src="js/lib/jquery-weui.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
 <script type="text/javascript" src="js/server.js"></script>
 <script type="text/javascript" src="js/signxycheck.js"></script>
\ No newline at end of file
diff --git a/platforms/ios/dlapp.xcodeproj/project.pbxproj b/platforms/ios/dlapp.xcodeproj/project.pbxproj
index 50e0385..92c3c27 100644
--- a/platforms/ios/dlapp.xcodeproj/project.pbxproj
+++ b/platforms/ios/dlapp.xcodeproj/project.pbxproj
@@ -5,6 +5,7 @@
 	};
 	objectVersion = 46;
 	objects = {
+
 /* Begin PBXBuildFile section */
 		0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Images.xcassets */; };
 		04347BD0ABAC4EE0B4CDDDB6 /* jcore-ios-2.1.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 444DBF371D8346D7BC7EE35D /* jcore-ios-2.1.1.a */; };
@@ -53,6 +54,7 @@
 		BC998F935D174204820F4015 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 22AE2683802B4CB1BAF69ABF /* AFURLSessionManager.m */; };
 		BFA0CF013EEC44F9B2C6FA6E /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0162975BB3964038A51EDED4 /* CFNetwork.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
 		C04B4EC2FAAD4D328ABA0C95 /* jpush-ios-3.2.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CCDEFB0C0632436FA86F0F31 /* jpush-ios-3.2.1.a */; };
+		C0A6FD40F47B434496535606 /* Brightness.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E4D2B8A1F474D9883C50B86 /* Brightness.m */; };
 		C61263FC7FE642E9B25A81E5 /* DisableStatusbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 61106E22F1D348DDBDC4DC0B /* DisableStatusbar.m */; };
 		CAE5A91F948A472F9D872EC8 /* CDVStatusBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ABBE12B040548F8909BFC7B /* CDVStatusBar.m */; };
 		CDD6F217CA274CF18EC146D3 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 048B6FC037E1479790969D83 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
@@ -64,7 +66,6 @@
 		F68EA21E51A3463A8FE2EE92 /* CDVWKWebViewUIDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B73EA28E46846FF84E6AF02 /* CDVWKWebViewUIDelegate.m */; };
 		F939AD8D22BB769B006B371B /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F939AD8C22BB769B006B371B /* libsqlite3.0.tbd */; };
 		FDE92C386167415E8040F8AB /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = FDEE8379D7A34C55A616F700 /* AFURLResponseSerialization.m */; };
-		C0A6FD40F47B434496535606 /* Brightness.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E4D2B8A1F474D9883C50B86 /* Brightness.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -112,6 +113,7 @@
 		1D3623240D0F684500981E51 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		1D3623250D0F684500981E51 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
 		1D6058910D05DD3D006BFB54 /* dlapp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dlapp.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		1E4D2B8A1F474D9883C50B86 /* Brightness.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = Brightness.m; path = "cordova-plugin-brightness/Brightness.m"; sourceTree = "<group>"; };
 		1E5CB6025B2E4D14ABFDB037 /* CDVWKWebViewUIDelegate.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVWKWebViewUIDelegate.h; path = "cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.h"; sourceTree = "<group>"; };
 		22AE2683802B4CB1BAF69ABF /* AFURLSessionManager.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = "cordova-plugin-advanced-http/AFURLSessionManager.m"; sourceTree = "<group>"; };
 		22DF35565BBA44B1980FFAF5 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
@@ -156,6 +158,7 @@
 		7DC7711D3C76485B9E422E3A /* CDVWKProcessPoolFactory.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVWKProcessPoolFactory.h; path = "cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.h"; sourceTree = "<group>"; };
 		7E931FBE72E74C4887498E5F /* AFURLSessionManager.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = "cordova-plugin-advanced-http/AFURLSessionManager.h"; sourceTree = "<group>"; };
 		80B448E71F8941268B78692C /* CDVCamera.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVCamera.m; path = "cordova-plugin-camera/CDVCamera.m"; sourceTree = "<group>"; };
+		817A61F7D48245FA9567B115 /* Brightness.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = Brightness.h; path = "cordova-plugin-brightness/Brightness.h"; sourceTree = "<group>"; };
 		8895AD78E31D471583178B91 /* TextResponseSerializer.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = TextResponseSerializer.h; path = "cordova-plugin-advanced-http/TextResponseSerializer.h"; sourceTree = "<group>"; };
 		8A8DD2DDC8694A97A56F9FA7 /* CDVLocalFilesystem.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVLocalFilesystem.m; path = "cordova-plugin-file/CDVLocalFilesystem.m"; sourceTree = "<group>"; };
 		8BFF0D502E2241F0A89DF67F /* CDVStatusBar.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVStatusBar.h; path = "cordova-plugin-statusbar/CDVStatusBar.h"; sourceTree = "<group>"; };
@@ -196,8 +199,6 @@
 		FCC7E279D80D4FB9BCF2530A /* Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "Bridging-Header.h"; path = "cordova-plugin-fingerprint-aio/Bridging-Header.h"; sourceTree = "<group>"; };
 		FDEE8379D7A34C55A616F700 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = "cordova-plugin-advanced-http/AFURLResponseSerialization.m"; sourceTree = "<group>"; };
 		FE0B455916A4481681D59FE0 /* WebKit.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
-		1E4D2B8A1F474D9883C50B86 /* Brightness.m */ = {isa = PBXFileReference; name = "Brightness.m"; path = "cordova-plugin-brightness/Brightness.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
-		817A61F7D48245FA9567B115 /* Brightness.h */ = {isa = PBXFileReference; name = "Brightness.h"; path = "cordova-plugin-brightness/Brightness.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
diff --git a/platforms/ios/dlapp/dlapp-Info.plist b/platforms/ios/dlapp/dlapp-Info.plist
index 2804c2d..5f4d584 100644
--- a/platforms/ios/dlapp/dlapp-Info.plist
+++ b/platforms/ios/dlapp/dlapp-Info.plist
@@ -17,11 +17,11 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.0.5</string>
+	<string>1.0.6</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>1.0.5</string>
+	<string>1.0.6</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
 	<key>NSAppTransportSecurity</key>
@@ -40,11 +40,11 @@
 	<key>NSCameraUsageDescription</key>
 	<string>APP需要使用您的相机权限，没有该权限将无法完成扫一扫功能</string>
 	<key>NSFaceIDUsageDescription</key>
-	<string/>
+	<string></string>
 	<key>NSMainNibFile</key>
-	<string/>
+	<string></string>
 	<key>NSMainNibFile~ipad</key>
-	<string/>
+	<string></string>
 	<key>NSPhotoLibraryUsageDescription</key>
 	<string>APP需要使用您的相册权限，没有该权限将无法完成扫一扫功能</string>
 	<key>UIBackgroundModes</key>
@@ -70,4 +70,4 @@
 		<string>UIInterfaceOrientationPortraitUpsideDown</string>
 	</array>
 </dict>
-</plist>
\ No newline at end of file
+</plist>
diff --git a/plugins/android.json b/plugins/android.json
index 5cd402b..c516159 100644
--- a/plugins/android.json
+++ b/plugins/android.json
@@ -54,15 +54,15 @@
     },
     "cordova-plugin-brightness": {
       "PACKAGE_NAME": "com.dalicitycard.app"
+    },
+    "cordova-plugin-file": {
+      "PACKAGE_NAME": "com.supwisdom.dlapp"
     }
   },
   "dependent_plugins": {
     "cordova-plugin-add-swift-support": {
       "PACKAGE_NAME": "com.supwisdom.dlapp"
     },
-    "cordova-plugin-file": {
-      "PACKAGE_NAME": "com.supwisdom.dlapp"
-    },
     "cordova-plugin-jcore": {
       "PACKAGE_NAME": "com.supwisdom.dlapp"
     }
diff --git a/plugins/browser.json b/plugins/browser.json
index 1eb645a..fc76262 100644
--- a/plugins/browser.json
+++ b/plugins/browser.json
@@ -53,15 +53,15 @@
     },
     "cordova-plugin-brightness": {
       "PACKAGE_NAME": "com.dalicitycard.app"
+    },
+    "cordova-plugin-file": {
+      "PACKAGE_NAME": "com.supwisdom.dlapp"
     }
   },
   "dependent_plugins": {
     "cordova-plugin-add-swift-support": {
       "PACKAGE_NAME": "com.supwisdom.dlapp"
     },
-    "cordova-plugin-file": {
-      "PACKAGE_NAME": "com.supwisdom.dlapp"
-    },
     "cordova-plugin-jcore": {
       "PACKAGE_NAME": "com.supwisdom.dlapp"
     }
diff --git a/plugins/fetch.json b/plugins/fetch.json
index ebfe8ce..8734bac 100644
--- a/plugins/fetch.json
+++ b/plugins/fetch.json
@@ -48,10 +48,12 @@
   "cordova-plugin-file": {
     "source": {
       "type": "registry",
-      "id": "cordova-plugin-file@>=2.0.0"
+      "id": "cordova-plugin-file@^6.0.1"
     },
-    "is_top_level": false,
-    "variables": {}
+    "is_top_level": true,
+    "variables": {
+      "ANDROID_SUPPORT_V4_VERSION": "27.+"
+    }
   },
   "cordova-plugin-statusbar": {
     "source": {
diff --git a/plugins/ios.json b/plugins/ios.json
index 1ec3afc..22f9574 100644
--- a/plugins/ios.json
+++ b/plugins/ios.json
@@ -55,15 +55,15 @@
     },
     "cordova-plugin-brightness": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
+    },
+    "cordova-plugin-file": {
+      "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     }
   },
   "dependent_plugins": {
     "cordova-plugin-add-swift-support": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     },
-    "cordova-plugin-file": {
-      "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
-    },
     "cordova-plugin-jcore": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     }
diff --git a/release-key-1.keystore b/release-key-1.keystore
new file mode 100644
index 0000000..f0ad805
--- /dev/null
+++ b/release-key-1.keystore
Binary files differ
diff --git a/www/cardinfor.html b/www/cardinfor.html
index 19ea1df..bcda2dd 100644
--- a/www/cardinfor.html
+++ b/www/cardinfor.html
@@ -41,11 +41,15 @@
                 <div class="weui-cell__ft" id="cardstatus"></div>
             </div>
         </div>
+        <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.unBindcard();" class="weui-btn weui-btn_warn">解除绑定</a>
+            </div>  
     </div>
 </body>
 </html>
 <script type="text/javascript" src="cordova.js"></script>
 <script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
 <script type="text/javascript" src="js/lib/jquery-weui.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
 <script type="text/javascript" src="js/server.js"></script>
 <script type="text/javascript" src="js/cardinfor.js"></script>
\ No newline at end of file
diff --git a/www/js/cardinfor.js b/www/js/cardinfor.js
index 3d8f675..da6e04f 100644
--- a/www/js/cardinfor.js
+++ b/www/js/cardinfor.js
@@ -22,6 +22,44 @@
                 $.alert("加载失败了:" + ret.status, "错误");
             }
         })
+    },
+    unBindcard: function(){
+        var dialog = new auiDialog({})
+        dialog.prompt({
+            title:"请输入支付密码",
+            text:'请输入支付密码',
+            buttons:['取消','确定']
+        },function(ret){
+            console.log(ret);
+            if(ret.buttonIndex == 2){
+                if(!isEmpty(ret.text)){
+                    $.showLoading("正在请求");
+                    var param = {
+                        "paypwd":ret.text
+                    }
+                    V1Unbindcard(param,function(ok, ret, err) {
+                        if (ok) {
+                            $.hideLoading(); 
+                            if(ret.code==200){
+                                window.localStorage.removeItem("userid");
+                                $.alert('解绑成功', "提示", function() {
+                                    window.location = 'main.html'
+                                });
+                            }else{
+                                $.alert(ret.msg, "错误");
+                            }
+                        } else {
+                            $.hideLoading();
+                            $.alert("请求失败了:" + ret.status, "错误");
+                        }
+                    })
+                }
+            }
+        });
+        var input = $(".aui-dialog-body").find("input");
+        if(input){
+            input.attr("type","password");
+        }
     }
 };
 app.initialize();
diff --git a/www/js/main.js b/www/js/main.js
index e0a358f..9d3b017 100644
--- a/www/js/main.js
+++ b/www/js/main.js
@@ -328,6 +328,10 @@
         } else {
             window.location = 'cardinfor.html'
         }
+    },
+    logout:function(){
+        window.localStorage.removeItem("token");
+        window.location = "login.html";
     }
 };
 app.initialize();
diff --git a/www/js/qrcode.js b/www/js/qrcode.js
index 79ae312..b9d81b9 100644
--- a/www/js/qrcode.js
+++ b/www/js/qrcode.js
@@ -88,7 +88,7 @@
           console.log(e)
         });
       } 
-      window,location.href='main.html';
+      window.location.href='main.html';
     }
 };
 app.initialize();
\ No newline at end of file
diff --git a/www/js/server.js b/www/js/server.js
index 64a6da6..0674e1a 100644
--- a/www/js/server.js
+++ b/www/js/server.js
@@ -7,6 +7,13 @@
 if (dev) {
     SERVER = "http://172.28.43.7:8099/payapi/mobileapi";
 }
+function V1Unbindcard(param,callback){
+    ajaxPost("/v1/unbindcard", param, callback)
+}
+
+function V1UnSignbxy(param,callback){
+    ajaxPost("/v1/unsignbxy", param, callback)
+}
 
 function V1Qrcode(callback) {
     ajaxPost("/v1/qrcode", {}, callback)
@@ -76,7 +83,6 @@
     ajaxPost("/i/code", param, callback)
 }
 
-
 function IServeTime(callback) {
     ajaxPost("/i/time", {}, callback)
 }
diff --git a/www/js/signxycheck.js b/www/js/signxycheck.js
index dedeb88..80ef9d7 100644
--- a/www/js/signxycheck.js
+++ b/www/js/signxycheck.js
@@ -20,6 +20,7 @@
                         app.checkTime();
                         $("#content").css("bottom", "135px");
                     } else {
+                        $("#unbtn").show();
                         $("#content").css("bottom", "10px");
                     }
                 } else {
@@ -37,6 +38,35 @@
             }
         })
     },
+    unAgreeXY: function(){
+        var cum = new auiDialog({});
+        var confirm = cum.alert({
+            title: "提示",
+            msg: '确定解除代扣协议吗？',
+            buttons: ['取消', '解除']
+        }, function(ret) {
+            if (ret.buttonIndex == 2) {
+                $.showLoading("正在请求");
+                var param = {}
+                V1UnSignbxy(param, function(ok, ret, err) {
+                    if (ok) {
+                        $.hideLoading();
+                        if (ret.code == 200) {
+                            window.localStorage.setItem("signed", ret.signed);
+                            $.alert('解除成功', "提示", function() {
+                                window.location = 'main.html'
+                            });
+                        } else {
+                            $.alert(ret.msg, "错误");
+                        }
+                    } else {
+                        $.hideLoading();
+                        $.alert("请求失败了:" + ret.status + "请稍后再试", "错误");
+                    }
+                })
+            }
+        })
+    },
     agreeXY: function() {
         if(!canCheck){
             return;
diff --git a/www/main.html b/www/main.html
index 3ade7e7..79e824b 100644
--- a/www/main.html
+++ b/www/main.html
@@ -177,7 +177,8 @@
         <header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
             我的
         </header>
-        <section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+        <!-- bg-white -->
+        <section class="aui-content aui-margin-b-15" style=" margin-top: -2px;">
             <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
                 <div class="aui-list-item aui-list-item-middle top-btn">
                     <div class="aui-media-list-item-inner ">
@@ -193,23 +194,22 @@
                     </div>
                 </div>
             </div>
-            <section class="aui-content aui-grid ">
-                <div class="aui-row aui-margin-t-10">
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-warning" id="user-amount">0.00</big>
-                        <div class="aui-gird-lable aui-font-size-12">余额</div>
-                    </div>
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-success" id="user-point">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">积分</div>
-                    </div>
-                    <div class="aui-col-xs-4 ">
-                        <big class="aui-text-danger" id="user-coupon">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">优惠券</div>
-                    </div>
-                </div>
-            </section>
-            
+            <!--<section class="aui-content aui-grid ">
+                  <div class="aui-row aui-margin-t-10">
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-warning" id="user-amount">0.00</big>
+                          <div class="aui-gird-lable aui-font-size-12">余额</div>
+                      </div>
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-success" id="user-point">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">积分</div>
+                      </div>
+                      <div class="aui-col-xs-4 ">
+                          <big class="aui-text-danger" id="user-coupon">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+                      </div>
+                  </div>
+              </section>-->
         </section>
         <section class="aui-content">
             <ul class="aui-list aui-list-in aui-margin-b-15">
@@ -242,6 +242,9 @@
                     </div>
                 </li>
             </ul>
+            <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.logout();" class="weui-btn weui-btn_warn">退出登录</a>
+            </div>  
         </section>
     </div>
     <footer class="aui-bar aui-bar-tab aui-border-t" id="footer">
diff --git a/www/my.html b/www/my.html
new file mode 100644
index 0000000..291f236
--- /dev/null
+++ b/www/my.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
+    <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
+    <link rel="stylesheet" type="text/css" href="css/aui.css" />
+    <link rel="stylesheet" type="text/css" href="css/weui.min.css">
+    <link rel="stylesheet" type="text/css" href="css/jquery-weui.min.css">
+    <link rel="stylesheet" type="text/css" href="css/index.css" />
+</head>
+<body>
+<header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
+    个人信息
+</header>
+<section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+    <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
+        <div class="aui-list-item aui-list-item-middle top-btn">
+            <div class="aui-media-list-item-inner ">
+                <div class="aui-list-item-media" style="width:3rem;">
+                    <img src="img/icon_header.png" class="aui-img-round" id="userlogo">
+                </div>
+                <div class="aui-list-item-inner">
+                    <div class="aui-list-item-text text-white aui-font-size-18" id="username">匿名</div>
+                    <div class="aui-list-item-text text-white">
+                        <div><i class="aui-iconfont aui-icon-mobile aui-font-size-14"></i><span id="userphone"></span></div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <section class="aui-content aui-grid ">
+        <div class="aui-row aui-margin-t-10">
+            <div class="aui-col-xs-4 aui-border-r">
+                <big class="aui-text-warning" id="user-amount">0.00</big>
+                <div class="aui-gird-lable aui-font-size-12">余额</div>
+            </div>
+            <div class="aui-col-xs-4 aui-border-r">
+                <big class="aui-text-success" id="user-point">0</big>
+                <div class="aui-gird-lable aui-font-size-12">积分</div>
+            </div>
+            <div class="aui-col-xs-4 ">
+                <big class="aui-text-danger" id="user-coupon">0</big>
+                <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+            </div>
+        </div>
+    </section>
+    
+</section>
+<section class="aui-content">
+    <ul class="aui-list aui-list-in aui-margin-b-15">
+        <li class="aui-list-item" onclick="app.toCard()">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-cert aui-text-info"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">银行卡</div>
+                <div class="aui-list-item-right" id="userbank"></div>
+            </div>
+        </li>
+        <li class="aui-list-item" onclick="app.toSign()">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-pencil aui-text-danger"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">签约代扣免密付</div>
+                <div class="aui-list-item-right" id="usersign"></div>
+            </div>
+        </li>
+    </ul>
+    <ul class="aui-list aui-list-in">
+        <li class="aui-list-item" id="usersec">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-lock aui-text-info"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">账户安全</div>
+            </div>
+        </li>
+    </ul>
+</section>
+</body>
+<script type="text/javascript" src="cordova.js"></script>
+<script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
+<script type="text/javascript" src="js/lib/aui-tab.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
+<script type="text/javascript" src="js/server.js"></script>
+<script type="text/javascript" src="js/main.js"></script>
+<script type="text/javascript">
+
+</script>
+</html>
\ No newline at end of file
diff --git a/www/qrcode.html b/www/qrcode.html
index 48e9b69..3edeb36 100644
--- a/www/qrcode.html
+++ b/www/qrcode.html
@@ -15,7 +15,7 @@
 </head>
 <body style="background: #fff"  >
     <header class="aui-bar aui-bar-nav" style="padding-top:25px;">
-        <a class="aui-pull-left" href="app.backTo()">
+        <a class="aui-pull-left" href="javascript:app.backTo()">
             <span class="aui-iconfont aui-icon-left"></span>
         </a>
         <div class="aui-title">付款码</div>
diff --git a/www/signxycheck.html b/www/signxycheck.html
index 17a1989..180aa9b 100644
--- a/www/signxycheck.html
+++ b/www/signxycheck.html
@@ -23,23 +23,29 @@
     <div style="padding:10px;overflow: scroll;position: absolute;top:74px;bottom:135px;left: 0;right: 0" id="content">
         
     </div>
+    <div class="weui-footer weui-footer_fixed-bottom" style="background: #fff;display: none;" id="unbtn">
+        <section class="aui-content-padded" style="margin-top: 20px;">
+            <div class="aui-btn aui-btn-block " apmode onclick="app.unAgreeXY()" id="unsignBtn">解除代扣协议</div>
+        </section>
+    </div>
     <div class="weui-footer weui-footer_fixed-bottom" style="background: #fff;display: none;" id="btn">
-            <div style="margin-top: 10px;">
-                <label for="agree" class="weui-agree" style="padding: .5em 5px .5em 15px;display: inline-block;">
-                    <input id="agree" type="checkbox" class="weui-agree__checkbox" value="yes">
-                    <span class="weui-agree__text">
-                        我已阅读并同意该协议
-                    </span>
-                </label>
-            </div>
-            <section class="aui-content-padded" style="margin-top: 20px;">
-                <div class="aui-btn aui-btn-block "  tapmode onclick="app.agreeXY()" id="signBtn">签约代扣协议</div>
-            </section>
+        <div style="margin-top: 10px;">
+            <label for="agree" class="weui-agree" style="padding: .5em 5px .5em 15px;display: inline-block;">
+                <input id="agree" type="checkbox" class="weui-agree__checkbox" value="yes">
+                <span class="weui-agree__text">
+                    我已阅读并同意该协议
+                </span>
+            </label>
+        </div>
+        <section class="aui-content-padded" style="margin-top: 20px;">
+            <div class="aui-btn aui-btn-block "  tapmode onclick="app.agreeXY()" id="signBtn">签约代扣协议</div>
+        </section>
     </div>
 </body>
 </html>
 <script type="text/javascript" src="cordova.js"></script>
 <script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
 <script type="text/javascript" src="js/lib/jquery-weui.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
 <script type="text/javascript" src="js/server.js"></script>
 <script type="text/javascript" src="js/signxycheck.js"></script>
\ No newline at end of file
