text: window.boot = function () {
      var settings = window._CCSettings;
      window._CCSettings = undefined;
      var onProgress = null;
      
      var RESOURCES = cc.AssetManager.BuiltinBundleName.RESOURCES;
      var INTERNAL = cc.AssetManager.BuiltinBundleName.INTERNAL;
      var MAIN = cc.AssetManager.BuiltinBundleName.MAIN;
      function setLoadingDisplay () {
          // Loading splash scene
          var splash = document.getElementById('splash');
          var progressBar = splash.querySelector('.progress-bar span');
          onProgress = function (finish, total) {
              var percent = 100 * finish / total;
              if (progressBar) {
                  progressBar.style.width = percent.toFixed(2) + '%';
              }
          };
          splash.style.display = 'block';
          progressBar.style.width = '0%';
  
          cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function () {
              splash.style.display = 'none';
          });
      }
  
      var onStart = function () {
  
          cc.view.enableRetina(true);
          cc.view.resizeWithBrowserSize(true);
  
          if (cc.sys.isBrowser) {
              setLoadingDisplay();
          }
  
          if (cc.sys.isMobile) {
              if (settings.orientation === 'landscape') {
                  cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE);
              }
              else if (settings.orientation === 'portrait') {
                  cc.view.setOrientation(cc.macro.ORIENTATION_PORTRAIT);
              }
              cc.view.enableAutoFullScreen([
                  cc.sys.BROWSER_TYPE_BAIDU,
                  cc.sys.BROWSER_TYPE_BAIDU_APP,
                  cc.sys.BROWSER_TYPE_WECHAT,
                  cc.sys.BROWSER_TYPE_MOBILE_QQ,
                  cc.sys.BROWSER_TYPE_MIUI,
                  cc.sys.BROWSER_TYPE_HUAWEI,
                  cc.sys.BROWSER_TYPE_UC,
              ].indexOf(cc.sys.browserType) < 0);
          }
  
          // Limit downloading max concurrent task to 2,
          // more tasks simultaneously may cause performance draw back on some android system / browsers.
          // You can adjust the number based on your own test result, you have to set it before any loading process to take effect.
          if (cc.sys.isBrowser && cc.sys.os === cc.sys.OS_ANDROID) {
              cc.assetManager.downloader.maxConcurrency = 2;
              cc.assetManager.downloader.maxRequestsPerFrame = 2;
          }
  
          var launchScene = settings.launchScene;
          var bundle = cc.assetManager.bundles.find(function (b) {
              return b.getSceneInfo(launchScene);
          });
          
          bundle.loadScene(launchScene, null, onProgress,
              function (err, scene) {
                  if (!err) {
                      cc.director.runSceneImmediate(scene);
                      if (cc.sys.isBrowser) {
                          // show canvas
                          var canvas = document.getElementById('GameCanvas');
                          canvas.style.visibility = '';
                          var div = document.getElementById('GameDiv');
                          if (div) {
                              div.style.backgroundImage = '';
                          }
                          console.log('Success to load scene: ' + launchScene);
                      }
                  }
              }
          );
  
      };
  
      var option = {
          id: 'GameCanvas',
          debugMode: settings.debug ? cc.debug.DebugMode.INFO : cc.debug.DebugMode.ERROR,
          showFPS: settings.debug,
          frameRate: 60,
          groupList: settings.groupList,
          collisionMatrix: settings.collisionMatrix,
      };
  
      cc.assetManager.init({ 
          bundleVers: settings.bundleVers,
          remoteBundles: settings.remoteBundles,
          server: settings.server
      });
      
      var bundleRoot = [INTERNAL];
      settings.hasResourcesBundle && bundleRoot.push(RESOURCES);
  
      var count = 0;
      function cb (err) {
          if (err) return console.error(err.message, err.stack);
          count++;
          if (count === bundleRoot.length + 1) {
              cc.assetManager.loadBundle(MAIN, function (err) {
                  if (!err) cc.game.run(option, onStart);
              });
          }
      }
  
      cc.assetManager.loadScript(settings.jsList.map(function (x) { return 'src/' + x;}), cb);
  
      for (var i = 0; i < bundleRoot.length; i++) {
          cc.assetManager.loadBundle(bundleRoot[i], cb);
      }
  };
  
  if (window.jsb) {
      var isRuntime = (typeof loadRuntime === 'function');
      if (isRuntime) {
          require('src/settings.7d59f.js');
          require('src/cocos2d-runtime.js');
          if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) {
              require('src/physics.js');
          }
          require('jsb-adapter/engine/index.js');
      }
      else {
          require('src/settings.7d59f.js');
          require('src/cocos2d-jsb.js');
          if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) {
              require('src/physics.js');
          }
          require('jsb-adapter/jsb-engine.js');
      }
  
      cc.macro.CLEANUP_IMAGE_CACHE = true;
      window.boot();
  }