From 82c162aa07a9fea33d5cd67b53984713d8e95e01 Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Tue, 3 Jan 2017 22:04:09 +0100
Subject: [PATCH] Update generated files

---
 public/app.js     | 1 -
 public/app.js.map | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/public/app.js b/public/app.js
index ec52703..a40a7fb 100644
--- a/public/app.js
+++ b/public/app.js
@@ -202,7 +202,6 @@ module.exports = function ($scope, $state, PubkeyGenerator) {
 
   PubkeyGenerator($scope);
 
-  conf.dev_autoconf = true;
   if (conf.dev_autoconf) {
     $scope.$parent.conf.idty_uid = 'dev_' + ~~(Math.random() * 2147483647);
     $scope.$parent.conf.idty_entropy = ~~(Math.random() * 2147483647) + "";
diff --git a/public/app.js.map b/public/app.js.map
index fdc3c22..c412292 100644
--- a/public/app.js.map
+++ b/public/app.js.map
@@ -1 +1 @@
-{"version":3,"sources":["AboutController.js","IndexController.js","IdentityController.js","ParametersController.js","RootBlockController.js","SyncController.js","MainController.js","GraphsBlockchainController.js","GraphsController.js","HomeController.js","HomeNetworkController.js","OverviewController.js","SettingsController.js","BackupController.js","CPUController.js","CurrencyController.js","DataController.js","KeyController.js","LogsController.js","LogsSettingsController.js","NetworkController.js","app.config.js","application.js","conf.js","app/js/lib/conf/i18n/en.json","routes.js","translate.js","peer.js","mobileDetector.js","base58.js","bma.js","datetime.js","graphs.js","importer.js","pubkeyGenerator.js","ui_utils.js","webmin.js"],"names":["co","require","module","exports","$scope","version","UIUtils","translate","$parent","title","$http","$state","BMA","Webmin","summary","changeTitle","message","connected","current","go","console","error","err","conf","PubkeyGenerator","setTimeout","$","material_select","accept","modal","css","openModal","dev_autoconf","idty_uid","Math","random","idty_entropy","idty_password","enableInputs","generated","started","start","hosts","remote_ipv4","push","rport","join","remote_ipv6","host_listening","server","sendConf","http","openUPnP","try","stop","previewNext","block","raw","node_address","local_ipv4","local_ipv6","lport","blockchain","block_add","res","number","startServices","services","startAll","cancelAndReset","stopAll","resetData","$timeout","$stateParams","$translate","syncWS","ws","sync_mode","simplified_host","synchronizing","sync_failed","host","localStorage","getItem","port","parseInt","to","wrong_host","remote_current","checkNode","checked_host","sync_error","sync_message","split","checking","testSync","targetHost","toast","startSync","down_percent","apply_percent","sp","translatedErr","on","undefined","data","type","value","errorMessage","msg","republishNewSelfPeer","then","log","changed","$apply","autoConfNetwork","setItem","chunkLen","max","min","sync","nodeOK","$interval","Base58","local_host","local_port","local_sign_pk","decode","pubkey","local_sign_sk","seckey","DEFAULT_CESIUM_SETTINGS","notifications","help","Waves","displayEffect","isMobile","sideNav","menuWidth","openWallet","walletHeight","walletWidth","openNewTab","window","location","origin","position","height","width","show","win","settingsStr","dataStr","settings","JSON","parse","keyPairOK","keypair","signPk","signSk","length","encode","Array","from","node","debug","plugins","rememberMe","stringify","close","innerHeight","innerWidth","mainWindow","focus","aboutWin","showAbout","openWindow","subwin","gui","startServer","server_stopped","regularUPnP","server_started","stopServer","restartServer","checkUpdates","LATEST_RELEASE_URL","get","latest","local_string_version","m","match","localVersion","localSuffix","isLocalAPreRelease","remoteVersion","tag_name","substr","filter","entry","icon","onclick","openExternal","BLOCKS_COUNT","Graph","loading","blocksCount","$watch","newValue","timeGraph","speedGraph","diffGraph","updateGraphs","currency","parameters","blocks","count","speeds","accelerations","medianTimeIncrements","actualDurations","BY_HOUR","i","len","acc","previousPos","dtDiffEval","j","medianTime","availPreviousBlocks","localAvgSpeed","realDuration","isNaN","avgGenTime","parseFloat","toFixed","time","minSpeeds","map","ceil","sqrt","maxSpeeds","floor","minDurations","maxDurations","difficulties","b","powMin","graphs","withTime","withSpeed","withDifficulty","timeGraphs","series","difficultyGraph","enableTabs","menu","peers","update","searching","delayP","Q","delay","network","moment","bindBlockWS","loadPowData","M","monetaryMass","UD","ud0","lastUDBlock","N","membersCount","dividend","pow","unitbase","c","phones","abc","newIdentities","dropdown","constrainwidth","lastNearPoW","totalPoW","sync_state","network_percent","peer_percent","has_pulled","is_pulling","last_pulling","start_block","sync_time","fromNow","powSummary","pow_total","total","pow_mirror","mirror","pow_waiting","waiting","event","last","doneCount","found","hash","cb","websocket","current_currency","current_number","current_membersCount","current_medianTime","current_powMin","reconfigure_network","reconfiguring","interfaces","netinferfaces","auto","local","ipv4","ipv6","remote","upnp","dns","netConf","should_reconfigure","isNodePubliclyReachable","reachable","success","$location","fullReset","Importer","export_link","getExportURL","cpuPower","cpu","updateCPUpower","savingCPU","cpuConf","attr","Peer","peer","p","name","getURL","slice","host_port","getHost","getPort","resetNode","resetNodeAndSync","remote_host","keyConf","reload","_","logsSize","logs","range","logsString","follow","levels","warn","info","trace","keys","level","splice","send","addLogs","autoDigest","pause","newlogs","elem","document","getElementById","scrollTop","scrollHeight","whenOpened","generating","shareLogs","logsExport","link","netinterfaces","firstConf","autoconf","autoconfig","local_neti","toArrayOfAddresses","remote_neti","default_port","saveConf","netiScope","reduce","arr","neti","concat","addresses","addr","address","family","angular","duniterApp","config","$compileProvider","aHrefSanitizationWhitelist","duniterChildCallback","onresize","onResize","url","options","callback","Window","open","screenTop","top","screenLeft","left","Shell","homeControllers","controller","init","jade","e","api_timeout","app","$stateProvider","$urlRouterProvider","state","template","resolve","abstract","dt","stepMax","sigDelay","sigPeriod","sigStock","sigWindow","sigValidity","msValidity","sigQty","xpercent","percentRot","blocksRot","medianTimeBlocks","resolveNetworkAutoConf","startHttp","peering","self","status","errorMsg","otherwise","run","$rootScope","$on","toState","toParams","fromState","fromParams","$translateProvider","translations","preferredLanguage","useSanitizeValueStrategy","json","that","BMA_REGEXP","Object","forEach","key","endpoints","statusTS","keyID","substring","copyValues","obj","copyValuesFrom","getRaw","getBMA","bma","ep","matches","getDns","getIPv4","getIPv6","hasValid4","base","getNamedURL","isReachable","mobilecheck","check","a","test","navigator","userAgent","vendor","opera","alphabet","alphabetMap","charAt","buffer","digits","carry","unshift","digit","string","Uint8Array","input","bytes","factory","$q","httpProtocol","protocol","wsProtocol","getResource","uri","params","when","httpGet","Promise","reject","timeout","suffix","pkeys","queryParams","pkey","prevURI","replace","RegExp","headers","postResource","post","bmaGET","bmaPOST","bmaWS","wsMap","sock","WebSocket","onclose","onerror","opened","openedCallback","onopen","listener","messageType","onmessage","wot","lookup","members","stats","ud","tx","format","speedGraphs","id","offset","getSeries","xValuex","highcharts","chart","zoomType","events","load","text","subtitle","ontouchstart","xAxis","minRange","labels","formatter","yAxis","minorTickInterval","colors","legend","enabled","tooltip","shared","crosshairs","blockFormatter","plotOptions","area","fillColor","linearGradient","x1","y1","x2","y2","stops","Highcharts","getOptions","Color","setOpacity","marker","radius","lineWidth","states","hover","threshold","timeAccelerations","timesInc","inc","html","x","points","point","color","y","Upload","uploadFiles","file","errFiles","f","errFile","upload","getImportURL","importData","response","result","evt","progress","loaded","pubkey_preview","preview","salt","pass","newConcat","previewPubkey","catch","toastRaw","Materialize","translated","addClass","jTabs","tabs","click","href","currentTarget","currentID","path","nbLines","hostname","service","instance"],"mappings":"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AAR,CAAzD;AACAia,kBAAgBC,UAAhB,CAA2B,eAA3B,EAAyDla,QAAQ,gDAAR,CAAzD;AACAia,kBAAgBC,UAAhB,CAA2B,kBAA3B,EAAyDla,QAAQ,4CAAR,CAAzD;AACAia,kBAAgBC,UAAhB,CAA2B,4BAA3B,EAAyDla,QAAQ,sDAAR,CAAzD;AACD,CA3FD;;;;ACAA;;AAEAC,OAAOC,OAAP,GAAiB;;AAEfia,QAAM,gBAAM;;AAEV;AACA,QAAI;AACFrR,aAAOsR,IAAP,GAAcpa,QAAQ,SAAS,GAAT,GAAe,SAAvB,CAAd;AACD,KAFD,CAEE,OAAOqa,CAAP,EAAU,CACX;;AAEDlZ,YAAQ4F,GAAR,CAAY,4BAAZ;;AAEA/G,YAAQ,cAAR;;AAEAmB,YAAQ4F,GAAR,CAAY,kBAAZ;AACD;AAfc,CAAjB;;;;;;ACFA9G,OAAOC,OAAP,GAAiB;AACf8C,UAAQ,EADO,EACH;AACZmC,QAAM,EAFS,EAEH;AACZiT,gBAAc,IAHC;AAIfrW,gBAAc,KAJC;AAKfuY,eAAa,KALE,CAKI;AALJ,CAAjB;;;ACAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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","file":"public/app.js","sourcesContent":["\"use strict\";\n\nconst co = require('co');\n\nmodule.exports = ($scope, version, UIUtils) => {\n\n  $scope.version = version;\n\n  return co(function*() {\n    $scope.$parent.title = yield UIUtils.translate('help.about_duniter.title');\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $http, $state, BMA, Webmin, summary, UIUtils) => {\n\n  UIUtils.changeTitle(summary.version);\n\n  $scope.message = 'index.message.loading';\n  co(function *() {\n    let connected = false;\n    try {\n      let summary = yield Webmin.summary();\n      if (summary.current) {\n        return $state.go('main.home.overview');\n      }\n      return $state.go('configure.choose');\n    }\n    catch (e) {\n      console.error(connected, e);\n      if (!connected) {\n        return $state.go('error', { err: 'err.connection'});\n      }\n      return $state.go('error', { err: e });\n    }\n  });\n};\n","\"use strict\";\n\nvar conf = require('js/lib/conf/conf');\n\nmodule.exports = ($scope, $state, PubkeyGenerator) => {\n\n  setTimeout(() => {\n    $('select').material_select();\n  }, 500);\n\n  $scope.accept = () => {\n    let modal = $('#modal1');\n    if (modal.css('display') == 'none') {\n      $('#modal1').openModal();\n    }\n  };\n\n  PubkeyGenerator($scope);\n\n  conf.dev_autoconf = true;\n  if (conf.dev_autoconf) {\n    $scope.$parent.conf.idty_uid = 'dev_' + ~~(Math.random() * 2147483647);\n    $scope.$parent.conf.idty_entropy = ~~(Math.random() * 2147483647) + \"\";\n    $scope.$parent.conf.idty_password = ~~(Math.random() * 2147483647) + \"\";\n    $state.go('configure.create.network');\n  }\n};\n","\"use strict\";\n\nmodule.exports = ($scope, UIUtils) => {\n\n  UIUtils.enableInputs();\n};\n","\"use strict\";\n\nvar co = require('co');\nvar conf = require('js/lib/conf/conf');\n\nmodule.exports = ($scope, $http, $state, BMA, Webmin) => {\n\n  $scope.generated = '';\n  $scope.started = false;\n  $scope.message = 'configuration.create_root.need_a_try';\n\n  $scope.start = () => co(function *() {\n    try {\n      let hosts = [];\n      if ($scope.$parent.conf.remote_ipv4) {\n        hosts.push([$scope.$parent.conf.remote_ipv4, $scope.$parent.conf.rport].join(':'));\n      }\n      if ($scope.$parent.conf.remote_ipv6) {\n        hosts.push([\"[\" + $scope.$parent.conf.remote_ipv6 + \"]\", $scope.$parent.conf.rport].join(':'));\n      }\n      $scope.host_listening = hosts.join('\\n');\n      $scope.started = true;\n      yield Webmin.server.sendConf({\n        conf: $scope.$parent.conf\n      });\n      yield Webmin.server.http.start();\n      yield Webmin.server.http.openUPnP();\n      yield $scope.try();\n    } catch (e) {\n      $scope.message = e.message;\n    }\n  });\n\n  $scope.stop = () => co(function *() {\n    yield Webmin.server.http.stop();\n    $scope.started = false;\n  });\n\n  $scope.try = () => co(function *() {\n    try {\n      $scope.block = yield Webmin.server.previewNext();\n      $scope.generated = $scope.block.raw;\n      $scope.message = '';\n    } catch (e) {\n      $scope.message = e.message;\n    }\n  });\n\n  $scope.accept = () => co(function *() {\n    const node_address = $scope.$parent.conf.local_ipv4 || $scope.$parent.conf.local_ipv6;\n    let res = yield BMA(node_address + \":\" + $scope.$parent.conf.lport).blockchain.block_add({\n      block: $scope.generated\n    });\n    if (res.number == 0) {\n      // We successfully started the blockchain\n      yield $scope.startServices();\n    }\n  });\n\n  $scope.startServices = () => co(function *() {\n    yield Webmin.server.services.startAll();\n    $state.go('index');\n  });\n\n  $scope.cancelAndReset = () => co(function *() {\n    yield Webmin.server.http.stop();\n    yield Webmin.server.services.stopAll();\n    yield Webmin.server.resetData();\n    $state.go('index');\n  });\n\n  return co(function *() {\n    try {\n      yield $scope.start();\n      yield $scope.try();\n      $scope.started = true;\n    } catch (e) {\n      $scope.started = false;\n    }\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $http, $state, $timeout, $stateParams, $translate, BMA, UIUtils, Webmin) => {\n\n  let syncWS = Webmin.ws();\n\n  UIUtils.enableInputs();\n  $scope.sync_mode = 'simplified';\n  $scope.simplified_host = '';\n  $scope.synchronizing = false;\n  $scope.sync_failed = false;\n  $scope.host = $stateParams.host || localStorage.getItem('sync_host') || '';\n  $scope.port = parseInt($stateParams.port) || parseInt(localStorage.getItem('sync_port')) || 8999;\n  $scope.to = parseInt($stateParams.to);\n  $scope.wrong_host = false;\n  $scope.remote_current = null;\n\n  $scope.checkNode = () => co(function *() {\n    $scope.checked_host = '';\n    $scope.sync_error = '';\n    $scope.sync_message = '';\n    if ($scope.sync_mode == 'simplified') {\n      $scope.host = $scope.simplified_host.split(':')[0];\n      $scope.port = parseInt($scope.simplified_host.split(':')[1]);\n    }\n    $scope.checking = true;\n    try {\n      const current = yield Webmin.server.testSync({\n        host: $scope.host,\n        port: $scope.port\n      });\n      const targetHost = [$scope.host, $scope.port].join(':');\n      if (current) {\n        $scope.remote_current = current;\n        $scope.checked_host = targetHost;\n      }\n      UIUtils.toast('sync.ready.node.part1');\n      $timeout(() => {\n        if (!$scope.synchronizing) {\n          UIUtils.toast('sync.ready.node.part2');\n        }\n      }, 6000);\n    } catch (e) {\n      $scope.sync_error = 'sync.error.unreachable.try.another.node';\n    }\n    $scope.checking = false;\n    return $scope.checked_host ? true : false;\n  });\n\n  $scope.startSync = () => {\n    $scope.down_percent = 0;\n    $scope.apply_percent = 0;\n    $scope.sync_failed = false;\n    $scope.synchronizing = true;\n    return co(function *() {\n      $scope.sync_message = (yield $translate('sync.started.node')) + ' ' + $scope.checked_host;\n      let sp = $scope.checked_host.split(':');\n      let translatedErr = yield $translate('err.sync.interrupted');\n      syncWS.on(undefined, (data) => {\n        if (data.type == 'sync') {\n          $scope.down_percent = 100;\n          $scope.apply_percent = 100;\n          $scope.sync_failed = data.value;\n          let errorMessage = data.msg && (data.msg.message || data.msg);\n          errorMessage = translatedErr + ' « ' + errorMessage + ' »';\n          Webmin.server.republishNewSelfPeer()\n            .then(() => console.log('Peer republished'));\n          if (data.value === true) {\n            $state.go('index');\n          } else {\n            $state.go('error', { err: (errorMessage) });\n          }\n        } else {\n          let changed = true;\n          if (data.type == 'download' && $scope.down_percent != data.value) {\n            $scope.down_percent = data.value;\n            changed = true;\n          }\n          if (data.type == 'applied' && $scope.apply_percent != data.value) {\n            $scope.apply_percent = data.value;\n            changed = true;\n          }\n          if (changed) {\n            $scope.$apply();\n          }\n        }\n      });\n      yield Webmin.server.autoConfNetwork();\n      localStorage.setItem(\"sync_host\", sp[0]);\n      localStorage.setItem(\"sync_port\", sp[1]);\n      Webmin.server.startSync({\n        host: sp[0],\n        port: sp[1],\n        to: $scope.to,\n        chunkLen: Math.max(500, Math.min(25, $scope.remote_current ? $scope.remote_current.number / 100 : 0))\n      });\n    });\n  };\n\n  // Autostart\n  if ($scope.host && $scope.port && $stateParams.sync) {\n    return co(function *() {\n      let nodeOK = yield $scope.checkNode();\n      if (nodeOK) {\n        return $scope.startSync();\n      }\n    });\n  }\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $state, $http, $timeout, $interval, BMA, Webmin, summary, UIUtils, Base58) => {\n\n  const local_host = summary.host.split(':')[0]; // We suppose IPv4 configuration\n  const local_port = summary.host.split(':')[1];\n  const local_sign_pk = Base58.decode(summary.pubkey);\n  const local_sign_sk = Base58.decode(summary.seckey);\n\n  const DEFAULT_CESIUM_SETTINGS = {\n    \"useRelative\": true,\n    \"timeWarningExpire\": 2592000,\n    \"useLocalStorage\": true,\n    \"rememberMe\": true,\n    \"plugins\": {},\n    \"node\": {\n      \"host\": local_host,\n      \"port\": local_port\n    },\n    \"showUDHistory\": true\n  };\n\n  $scope.notifications = {\n    help: []\n  };\n\n  Waves.displayEffect();\n\n  var isMobile = require('js/lib/mobileDetector');\n  if (isMobile()) {\n    $(\".button-collapse\").sideNav({\n      menuWidth: 280\n    });\n  }\n\n  UIUtils.changeTitle(summary.version);\n\n  $scope.openWallet = () => {\n\n    let walletHeight = parseInt(localStorage.getItem('wallet_height')) || 1000;\n    let walletWidth = parseInt(localStorage.getItem('wallet_width')) || 1400;\n\n    openNewTab (window.location.origin + '/cesium/index.html', {\n      position: 'center',\n      height: walletHeight,\n      width: walletWidth,\n      show: false\n    }, function(win) {\n      let settingsStr = win.window.localStorage.getItem('CESIUM_SETTINGS');\n      let dataStr = win.window.localStorage.getItem('CESIUM_DATA');\n      let settings = (settingsStr && JSON.parse(settingsStr));\n      let data = (dataStr && JSON.parse(dataStr));\n      let keyPairOK = data && data.keypair && data.keypair.signPk && data.keypair.signSk && true;\n      if (keyPairOK) {\n        data.keypair.signPk.length = local_sign_pk.length;\n        data.keypair.signSk.length = local_sign_sk.length;\n        keyPairOK = Base58.encode(Array.from(data.keypair.signPk)) == summary.pubkey\n          && Base58.encode(Array.from(data.keypair.signSk)) == summary.seckey\n          && data.pubkey == summary.pubkey;\n      }\n      if (!data\n        || !keyPairOK\n        || settings.node.host != local_host\n        || settings.node.port != local_port) {\n        settings = settings || DEFAULT_CESIUM_SETTINGS;\n        data = data || {};\n        console.debug('Configuring Cesium...');\n        settings.node = {\n          \"host\": local_host,\n          \"port\": local_port\n        };\n        settings.plugins = {};\n        settings.rememberMe = true;\n        data.pubkey = summary.pubkey;\n        data.keypair = {\n          signPk: local_sign_pk,\n          signSk: local_sign_sk\n        };\n        win.window.localStorage.setItem('CESIUM_SETTINGS', JSON.stringify(settings));\n        win.window.localStorage.setItem('CESIUM_DATA', JSON.stringify(data));\n        win.on('closed', () => {\n          // Reopen the wallet\n          $timeout(() => $scope.openWallet(), 1);\n        });\n        win.close();\n      } else {\n        // Cesium is correctly configured for the network part\n        win.show();\n        win.on('closed', function() {\n          localStorage.setItem('wallet_height', win.window.innerHeight - 8); // Seems to always have 8 pixels more\n          localStorage.setItem('wallet_width', win.window.innerWidth - 16); // Seems to always have 16 pixels more\n          mainWindow.focus();\n        });\n      }\n    });\n  };\n\n  let aboutWin;\n\n  $scope.showAbout = () => {\n    if (aboutWin) {\n      aboutWin.focus();\n    } else {\n      openWindow(window.location.origin + '/#/about', {\n        position: 'center',\n        height: 380,\n        width: 510\n      }, function(subwin) {\n        subwin.window.gui = window.gui;\n        subwin.on('closed', () => {\n          aboutWin = null;\n          mainWindow.focus();\n        });\n        aboutWin = subwin;\n      });\n    }\n  };\n\n  $scope.startServer = () => {\n    $scope.server_stopped = false;\n    return co(function *() {\n      yield Webmin.server.http.start();\n      yield Webmin.server.services.startAll();\n      yield Webmin.server.http.regularUPnP();\n      $scope.server_started = true;\n    });\n  };\n\n  $scope.stopServer = () => {\n    $scope.server_started = false;\n    return co(function *() {\n      yield Webmin.server.http.stop();\n      yield Webmin.server.services.stopAll();\n      $scope.server_stopped = true;\n    });\n  };\n\n  $scope.restartServer = () => {\n    return co(function *() {\n      yield $scope.stopServer();\n      yield $scope.startServer();\n    });\n  };\n\n  function checkUpdates() {\n    const LATEST_RELEASE_URL = 'https://api.github.com/repos/duniter/duniter/releases/latest';\n    co(function*() {\n      try {\n        const latest = yield $http.get(LATEST_RELEASE_URL);\n        const local_string_version = 'v' + summary.version;\n        const m = local_string_version.match(/^v([\\d.]+)([ab]?\\d*)/);\n        const localVersion = (m && m[1]) || \"\";\n        const localSuffix = m && m[2];\n        const isLocalAPreRelease = !!(localSuffix);\n        const remoteVersion = latest.data.tag_name.substr(1);\n        if (localVersion < remoteVersion || (localVersion == remoteVersion && isLocalAPreRelease)) {\n          if ($scope.notifications.help.filter((entry) => entry.message == 'help.new_version_available').length == 0) {\n            $scope.notifications.help.push({\n              icon: 'play_for_work',\n              message: 'help.new_version_available',\n              onclick: () => openExternal('https://github.com/duniter/duniter/releases/latest')\n            });\n          }\n        }\n      } catch (e) {\n        console.error(e);\n      }\n    });\n  }\n\n  $interval(checkUpdates, 1000 * 3600);\n  $timeout(checkUpdates, 1000);\n};\n","\"use strict\";\n\nconst BLOCKS_COUNT = 40;\n\nvar co = require('co');\n\nmodule.exports = ($scope, $state, $timeout, BMA, Webmin, UIUtils, Graph) => {\n\n  let data = {};\n\n  $scope.loading = true;\n  $scope.blocksCount = $scope.blocksCount || BLOCKS_COUNT;\n\n  $scope.$watch('withTime', (newValue) => {\n    if (newValue) {\n      timeGraph();\n    }\n  });\n\n  $scope.$watch('withSpeed', (newValue) => {\n    if (newValue) {\n      speedGraph();\n    }\n  });\n\n  $scope.$watch('withDifficulty', (newValue) => {\n    if (newValue) {\n      diffGraph();\n    }\n  });\n\n  $scope.updateGraphs = () => {\n    return co(function *() {\n      let summary = yield Webmin.summary();\n      let parameters = yield BMA(summary.host).currency.parameters();\n      let blocks = yield BMA(summary.host).blockchain.blocks({\n        count: $scope.blocksCount,\n        from: Math.max(0, summary.current.number - $scope.blocksCount)\n      });\n      let speeds = [], accelerations = [], medianTimeIncrements = [], actualDurations = [];\n      let BY_HOUR = 3600;\n      for (let i = 0, len = blocks.length; i < len; i++) {\n        let block = blocks[i];\n        let acc = 0;\n        let previousPos = Math.max(0, i - parameters.dtDiffEval);\n        for (let j = previousPos; j < i; j++) {\n          acc += (blocks[j+1].medianTime - blocks[j].medianTime);\n        }\n        let availPreviousBlocks = i - 1 - previousPos;\n        let localAvgSpeed = acc / (availPreviousBlocks || 1);\n        let realDuration = !isNaN(localAvgSpeed) && localAvgSpeed != 0 ? localAvgSpeed : parameters.avgGenTime;\n        actualDurations.push(parseFloat((realDuration).toFixed(2)));\n        speeds.push(parseFloat((BY_HOUR/realDuration).toFixed(2)));\n        accelerations.push(block.time - block.medianTime);\n        medianTimeIncrements.push(block.medianTime - (i ? blocks[i-1].medianTime : block.medianTime));\n      }\n      data.summary = summary;\n      data.speeds = speeds;\n      data.accelerations = accelerations;\n      data.medianTimeIncrements = medianTimeIncrements;\n      data.actualDurations = actualDurations;\n      data.minSpeeds = speeds.map(() => parseFloat((BY_HOUR/Math.ceil(parameters.avgGenTime * Math.sqrt(1.066))).toFixed(2)));\n      data.maxSpeeds = speeds.map(() => parseFloat((BY_HOUR/Math.floor(parameters.avgGenTime / Math.sqrt(1.066))).toFixed(2)));\n      data.minDurations = speeds.map(() => parseFloat(((parameters.avgGenTime / 1.066)).toFixed(2)));\n      data.maxDurations = speeds.map(() => parseFloat(((parameters.avgGenTime * 1.066)).toFixed(2)));\n      data.difficulties = blocks.map((b) => b.powMin);\n\n      let graphs = [];\n      if ($scope.withTime) graphs.push(timeGraph);\n      if ($scope.withSpeed) graphs.push(speedGraph);\n      if ($scope.withDifficulty) graphs.push(diffGraph);\n      for (let i = 0, len = graphs.length; i < len; i++) {\n        graphs[i]();\n      }\n      $scope.loading = false;\n    });\n  };\n\n  function timeGraph() {\n    if ($scope.withTime) {\n      Graph.timeGraphs('#timeGraph', Math.max(0, data.summary.current.number - $scope.blocksCount + 1), data.accelerations, data.medianTimeIncrements, data.actualDurations, data.minDurations, data.maxDurations);\n    }\n  }\n\n  function speedGraph() {\n    if ($scope.withSpeed) {\n      Graph.speedGraph('#speedGraph', Math.max(0, data.summary.current.number - $scope.blocksCount), data.speeds, data.minSpeeds, data.maxSpeeds, (series) => {\n        $scope.series = series;\n      });\n    }\n  }\n\n  function diffGraph() {\n    if ($scope.withDifficulty) {\n      Graph.difficultyGraph('#difficultyGraph', Math.max(0, data.summary.current.number - $scope.blocksCount), data.difficulties);\n    }\n  }\n\n  return co(function *() {\n    yield $scope.updateGraphs();\n    $scope.withTime = true;\n    $scope.withDifficulty = true;\n    $scope.$apply();\n  });\n};\n","\"use strict\";\n\nmodule.exports = ($scope, UIUtils) => {\n\n  UIUtils.enableTabs();\n\n  $scope.$parent.menu = 'graphs';\n};\n","\"use strict\";\n\nmodule.exports = ($scope, UIUtils) => {\n\n  UIUtils.enableTabs();\n\n  $scope.$parent.menu = 'home';\n};\n","\"use strict\";\n\nmodule.exports = ($scope, BMA, peers, summary) => {\n\n  $scope.peers = peers.peers;\n\n  const co = require('co');\n\n  $scope.update = () => co(function *() {\n    $scope.searching = true;\n    let delayP = Q.delay(500);\n    $scope.peers = (yield BMA(summary.host).network.peers()).peers;\n    yield delayP;\n    $scope.searching = false;\n    $scope.$apply();\n  });\n};\n","\"use strict\";\n\nmodule.exports = ($scope, $interval, BMA, Webmin, UIUtils, summary, ws) => {\n\n  let co = require('co');\n  let moment = require('moment');\n\n  bindBlockWS(() => {\n    $scope.loadPowData();\n  });\n  let M = summary.current.monetaryMass || 0;\n  // const nbUDperYear = Math.ceil(365.25 * 3600 * 24 / summary.parameters.dt);\n  // const globalC = Math.round(Math.pow(1 + summary.parameters.c, nbUDperYear) * 100) / 100 - 1;\n  let UD = summary.parameters.ud0;\n  if (summary.lastUDBlock) {\n    const N = summary.current.membersCount;\n    UD = parseInt((summary.lastUDBlock.dividend * Math.pow(10, summary.lastUDBlock.unitbase) + Math.pow(summary.parameters.c, 2) * M / N).toFixed(0));\n  }\n  $scope.current = summary.current;\n  $scope.monetaryMass = parseInt(M / UD) || 0;\n  $scope.server_started = true;\n  $scope.server_stopped = false;\n  $scope.phones = [];\n  $scope.abc = 'abcdef';\n  $scope.newIdentities = 2;\n\n  $(\".dropdown-button\").dropdown({ constrainwidth: false });\n\n  $scope.lastNearPoW = '';\n  $scope.totalPoW = '...';\n  $scope.sync_state = 'home.pulling.state.unkown';\n  $scope.network_percent = 0;\n  $scope.peer_percent = 0;\n  $scope.has_pulled = false;\n  $scope.is_pulling = false;\n  $scope.last_pulling = 0;\n  let start_block = 0;\n\n  $interval(() => {\n    if ($scope.last_pulling) {\n      $scope.sync_state = $scope.is_pulling ? 'home.pulling.state.syncing' : 'home.pulling.state.synced';\n      $scope.sync_time = moment($scope.last_pulling).fromNow();\n    }\n  }, 1000);\n\n  $scope.loadPowData = () => co(function*() {\n    let res = yield Webmin.powSummary();\n    $scope.pow_total = res.total;\n    $scope.pow_mirror = res.mirror;\n    $scope.pow_waiting = res.waiting;\n  });\n\n  ws.on(undefined, (data) => {\n    if (data.type === 'started') {\n      $scope.server_started = true;\n      $scope.server_stopped = false;\n      bindBlockWS();\n      UIUtils.toast('general.server.started');\n      $scope.$apply();\n    }\n    if (data.type === 'stopped') {\n      $scope.server_stopped = true;\n      $scope.server_started = false;\n      UIUtils.toast('general.server.stopped');\n      $scope.$apply();\n    }\n    if (data.type === 'pulling') {\n      $scope.is_pulling = true;\n      $scope.has_pulled = true;\n      const event = data.value;\n      if (($scope.last_pulling && event.type === 'start') || (!$scope.last_pulling && event.type !== 'end')) {\n        $scope.last_pulling = moment();\n      }\n      if (event.type === 'peer') {\n        $scope.network_percent = parseInt((event.data.number + 1) / event.data.length * 100);\n        $scope.peer_percent = 100;\n        start_block = 0;\n      }\n      if (event.type === 'applying') {\n        if (!start_block) {\n          start_block = event.data.number;\n        }\n        const total = event.data.last - start_block;\n        const doneCount = event.data.number - start_block;\n        $scope.peer_percent = parseInt(doneCount / total * 100);\n      }\n      if (event.type === 'end') {\n        $scope.is_pulling = false;\n        $scope.network_percent = 0;\n        $scope.peer_percent = 0;\n        start_block = 0;\n      }\n    }\n    if (data.type === 'pow') {\n      const pow = data.value;\n      if (pow.found) {\n        $scope.pow_waiting = true;\n        $scope.lastNearPoW = '#' + pow.hash;\n        $scope.$apply();\n      } else {\n        $scope.pow_waiting = false;\n        $scope.lastNearPoW = '#' + pow.hash;\n        $scope.$apply();\n      }\n    }\n  });\n\n  function bindBlockWS(cb) {\n    BMA(summary.host).websocket.block().on(undefined, (block) => {\n      $scope.current_currency = block.currency;\n      $scope.current_number = block.number;\n      $scope.current_membersCount = block.membersCount;\n      $scope.current_medianTime = block.medianTime;\n      $scope.current_powMin = block.powMin;\n      let M = summary.current.monetaryMass || 0;\n      let UD = summary.parameters.ud0;\n      if (summary.lastUDBlock) {\n        const N = summary.current.membersCount;\n        UD = parseInt((summary.lastUDBlock.dividend * Math.pow(10, summary.lastUDBlock.unitbase) + Math.pow(summary.parameters.c, 2) * M / N).toFixed(0));\n      }\n      $scope.monetaryMass = parseInt(M / UD) || 0;\n      $scope.$apply();\n      cb && cb();\n    });\n  }\n  \n  $scope.reconfigure_network = () => co(function *() {\n    $scope.reconfiguring = true;\n    let delay = Q.delay(1000);\n    try {\n      let netinferfaces = yield Webmin.network.interfaces();\n      let conf = {};\n      conf.local_ipv4 = netinferfaces.auto.local.ipv4 || '';\n      conf.local_ipv6 = netinferfaces.auto.local.ipv6 || '';\n      conf.remote_ipv4 = netinferfaces.auto.remote.ipv4 || '';\n      conf.remote_ipv6 = netinferfaces.auto.remote.ipv6 || '';\n      conf.lport = netinferfaces.auto.local.port || 9330;\n      conf.rport = netinferfaces.auto.remote.port || 9330;\n      conf.upnp = netinferfaces.auto.remote.upnp || false;\n      conf.dns = netinferfaces.auto.remote.dns || '';\n      yield Webmin.server.netConf({\n        conf: conf\n      });\n      yield delay;\n      $scope.should_reconfigure = false;\n      UIUtils.toast('general.network.reconf_ok');\n      $scope.$apply();\n    } catch (e) {\n      yield delay;\n      $scope.reconfiguring = false;\n      $scope.$apply();\n    }\n  });\n\n  return co(function *() {\n    yield $scope.startServer();\n    try {\n      yield $scope.loadPowData();\n      const reachable = yield Webmin.isNodePubliclyReachable();\n      if (!reachable || !reachable.success) {\n        $scope.should_reconfigure = true;\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $http, $state, $location, BMA, Webmin, UIUtils) => {\n\n  UIUtils.enableTabs();\n\n  $scope.$parent.conf = $scope.$parent.conf || {};\n  $scope.$parent.menu = 'settings';\n\n  $(\".dropdown-button\").dropdown({ constrainwidth: false });\n\n  $scope.fullReset = () => co(function *() {\n    yield Webmin.server.http.stop();\n    yield Webmin.server.services.stopAll();\n    yield Webmin.server.resetData();\n    $state.go('index');\n  });\n};\n","\"use strict\";\n\nmodule.exports = ($scope, Importer, Webmin) => {\n\n  $scope.export_link = Webmin.getExportURL();\n\n  Importer($scope);\n};\n","\"use strict\";\n\nconst co = require('co');\n\nmodule.exports = ($scope, $http, $state, $timeout, UIUtils, summary, Webmin) => {\n\n  $scope.cpuPower = parseInt(summary.conf.cpu * 100);\n\n  $scope.updateCPUpower = () => co(function *() {\n    $scope.savingCPU = true;\n    yield Webmin.server.cpuConf({\n      cpu: parseFloat(($scope.cpuPower / 100).toFixed(2))\n    });\n    UIUtils.toast('settings.cpu.saved');\n    $scope.savingCPU = false;\n  });\n};\n","\"use strict\";\n\nmodule.exports = ($scope, conf, UIUtils) => {\n\n  $scope.$parent.conf = conf;\n\n  UIUtils.enableInputs();\n  $('input').attr('disabled', 'disabled');\n};\n","\"use strict\";\n\nvar co = require('co');\nvar Peer = require('js/lib/entity/peer');\n\nmodule.exports = ($scope, $http, $state, Webmin, peers) => {\n\n  $scope.peers = peers.map((peer) => {\n    let p = new Peer(peer);\n    return {\n      name: [p.getURL(), \"(\" + p.pubkey.slice(0, 6) + \")\"].join(' '),\n      host_port: [p.getHost(), p.getPort()].join('|')\n    }\n  });\n\n  $scope.resetNode = () => {\n    $('#modalReset').openModal();\n  };\n\n  $scope.resetNodeAndSync = () => co(function *() {\n    yield Webmin.server.http.stop();\n    yield Webmin.server.services.stopAll();\n    yield Webmin.server.resetData();\n    let sp = $scope.remote_host.split('|');\n    $state.go('sync', {\n      host: sp[0],\n      port: sp[1],\n      sync: true\n    })\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $state, Webmin, summary, PubkeyGenerator) => {\n\n  $scope.pubkey = summary.pubkey;\n\n  setTimeout(() => {\n    $('select').material_select();\n  }, 500);\n\n  $scope.accept = () => co(function *() {\n    yield Webmin.server.keyConf({\n      conf: $scope.$parent.conf\n    });\n    $scope.$parent.conf.idty_entropy = '';\n    $scope.$parent.conf.idty_password = '';\n    $state.reload();\n    $scope.restartServer();\n  });\n\n  PubkeyGenerator($scope);\n};\n","\"use strict\";\n\nmodule.exports = ($scope, ws, UIUtils) => {\n\n  UIUtils.enableTabs();\n\n  let co = require('co');\n  let _ = require('underscore');\n\n  // Default values\n  if (!localStorage.getItem('log_error')) localStorage.setItem('log_error', true);\n  if (!localStorage.getItem('log_warn')) localStorage.setItem('log_warn', true);\n  if (!localStorage.getItem('log_info')) localStorage.setItem('log_info', true);\n\n  $scope.logsSize = parseInt(localStorage.getItem('log_size')) || 100;\n  $scope.logs = _.range(0, $scope.logsSize).map(() => \"\");\n  $scope.logsString = \"\";\n  $scope.follow = true;\n  $scope.levels = {\n    error: localStorage.getItem('log_error') == \"true\",\n    warn: localStorage.getItem('log_warn') == \"true\",\n    info: localStorage.getItem('log_info') == \"true\",\n    debug: localStorage.getItem('log_debug') == \"true\",\n    trace: localStorage.getItem('log_trace') == \"true\"\n  };\n\n  _.keys($scope.levels).map((level) => {\n    $scope.$watch('levels.' + level, (newValue) => {\n      localStorage.setItem('log_' + level, newValue);\n      $scope.logs.splice(0, $scope.logs.length);\n      ws.send();\n    });\n  });\n\n  $scope.$watch('logsSize', (newValue) => {\n    localStorage.setItem('log_size', newValue);\n    addLogs({ value: [] }, true);\n  });\n\n  ws.on('log', addLogs);\n\n  function addLogs(res, autoDigest) {\n\n    if (!$scope.pause) {\n      let newlogs = _.filter(res.value, (log) => $scope.levels[log.level]);\n      // Add at max LOGS_FLOW_SIZE new lines\n      newlogs.splice(0, Math.max(0, newlogs.length - $scope.logsSize));\n      // Add just enough space for incoming logs\n      $scope.logs.splice(0, Math.max(0, $scope.logs.length + newlogs.length - $scope.logsSize));\n      for (let i = 0, len = newlogs.length; i < len; i++) {\n        let log = newlogs[i];\n        $scope.logs.push(log);\n      }\n      if (!autoDigest) {\n        $scope.$apply();\n      }\n    }\n\n    if ($scope.follow) {\n      var elem = document.getElementById('logs');\n      if (elem) {\n        elem.scrollTop = elem.scrollHeight;\n      }\n    }\n  }\n\n  return co(function *() {\n    yield ws.whenOpened();\n    ws.send();\n  });\n};\n","\"use strict\";\n\nconst co = require('co');\n\nmodule.exports = ($scope, Webmin) => {\n  \n  $scope.generating = false;\n  $scope.error = '';\n\n  $scope.shareLogs = () => co(function*() {\n    if (!$scope.generating) {\n      try {\n        $scope.error = '';\n        $scope.generating = true;\n        const res = yield Webmin.logsExport(2000);\n        $scope.link = res.link;\n      } catch (e) {\n        $scope.error = (e && e.message) || e || 'Unknown error';\n      }\n      $scope.generating = false;\n    }\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\nvar conf = require('js/lib/conf/conf');\n\nmodule.exports = ($scope, $http, $state, Webmin, UIUtils, netinterfaces, firstConf) => {\n\n  let autoconf = netinterfaces.auto;\n\n  $scope.autoconfig = () => {\n    $scope.$parent.conf.local_ipv4 = autoconf.local.ipv4 || '';\n    $scope.$parent.conf.local_ipv6 = autoconf.local.ipv6 || '';\n    $scope.$parent.conf.remote_ipv4 = autoconf.remote.ipv4 || '';\n    $scope.$parent.conf.remote_ipv6 = autoconf.remote.ipv6 || '';\n    $scope.$parent.conf.lport = autoconf.local.port || $scope.$parent.conf.lport;\n    $scope.$parent.conf.rport = autoconf.remote.port || $scope.$parent.conf.rport;\n    $scope.$parent.conf.upnp = autoconf.remote.upnp || $scope.$parent.conf.upnp;\n    $scope.$parent.conf.dns = autoconf.remote.dns || $scope.$parent.conf.dns;\n\n    if (conf.dev_autoconf && firstConf) {\n      $state.go('configure.create.root');\n    }\n  };\n\n  $scope.local_neti = toArrayOfAddresses(netinterfaces.local);\n  $scope.remote_neti = toArrayOfAddresses(netinterfaces.remote);\n\n  $scope.$parent.conf = $scope.$parent.conf || {};\n  $scope.$parent.conf.local_ipv4 = netinterfaces.conf.local.ipv4;\n  $scope.$parent.conf.local_ipv6 = netinterfaces.conf.local.ipv6;\n  $scope.$parent.conf.remote_ipv4 = netinterfaces.conf.remote.ipv4;\n  $scope.$parent.conf.remote_ipv6 = netinterfaces.conf.remote.ipv6;\n  $scope.$parent.conf.lport = netinterfaces.conf.local.port;\n  $scope.$parent.conf.rport = netinterfaces.conf.remote.port;\n  $scope.$parent.conf.upnp = netinterfaces.conf.remote.upnp;\n  $scope.$parent.conf.dns = netinterfaces.conf.remote.dns;\n\n  UIUtils.enableInputs();\n\n  if (firstConf) {\n    $scope.$parent.conf.lport = conf.default_port;\n    $scope.$parent.conf.rport = conf.default_port;\n    // Trigger autoconfig\n    $scope.autoconfig();\n  }\n\n  $scope.saveConf = () => co(function *() {\n    $scope.$parent.conf.lport = $scope.$parent.conf.rport;\n    $scope.$parent.conf.remote_ipv6 = $scope.$parent.conf.local_ipv6;\n    yield Webmin.server.netConf({\n      conf: $scope.$parent.conf\n    });\n    UIUtils.toast('settings.network.saved');\n  });\n};\n\nfunction toArrayOfAddresses(netiScope) {\n  return netiScope.reduce(function(arr, neti) {\n    return arr.concat(neti.addresses.map((addr) => {\n      return {\n        name: [neti.name, addr.address].join(' '),\n        addr: addr.address,\n        family: addr.family\n      };\n    }))\n  }, []);\n}\n","module.exports = () => {\n  require('./services/bma')(angular);\n  require('./services/webmin')(angular);\n\n  const duniterApp = angular.module('duniterUIApp', [\n    'ui.router',\n    'homeControllers',\n    'pascalprecht.translate'\n  ]);\n\n  duniterApp.config( [\n    '$compileProvider', ($compileProvider) => $compileProvider.aHrefSanitizationWhitelist(/^\\s*(https?|data):/)\n  ]);\n\n  require('./lib/conf/translate')(duniterApp);\n  require('./lib/conf/routes')(duniterApp);\n  require('js/services/datetime')(duniterApp);\n  require('js/services/ui_utils')(duniterApp);\n  require('js/services/graphs')(duniterApp);\n  require('js/services/pubkeyGenerator')(duniterApp);\n  require('js/services/importer')(duniterApp);\n  require('js/services/base58')(duniterApp);\n\n  window.duniterChildCallback = function(gui) {\n    window.gui = gui;\n  };\n\n  window.onresize = () => {\n    window.onResize && window.onResize(window);\n  };\n\n  window.openWindow = function openWindow(url, options, callback) {\n    if (window.gui) {\n      // Duniter Desktop\n      window.gui.Window.open(url, options, callback);\n    } else {\n      // Browser\n      let innerHeight = options.height || 375;\n      let innerWidth = options.width || 500;\n      window.open(url, '_blank ', [\n        'top=' + (window.screenTop + (options.top || 200)),\n        'left=' + (window.screenLeft + (options.left || 200)),\n        'height=' + (innerHeight + 8),\n        'width=' + (innerWidth + 16),\n        'menubar=no',\n        'status=no'\n      ].join(','));\n    }\n  };\n\n  window.openNewTab = function openWindow(url, options, callback) {\n    if (window.gui) {\n      // Duniter Desktop\n      window.gui.Window.open(url, options, callback);\n    } else {\n      // Browser\n      window.open(url, '_blank ');\n    }\n  };\n\n  window.openExternal = function openExternal(url) {\n    if (window.gui) {\n      window.gui.Shell.openExternal(url);\n    } else {\n      window.open(url, '_blank');\n    }\n  };\n\n  let homeControllers = angular.module('homeControllers', ['duniter.services.bma', 'duniter.services.webmin', 'ngFileUpload']);\n\n  homeControllers.controller('IndexController',            require('./controllers/IndexController'));\n  homeControllers.controller('AboutController',            require('./controllers/AboutController'));\n  homeControllers.controller('IdentityController',         require('./controllers/init/create/IdentityController'));\n  homeControllers.controller('ParametersController',       require('./controllers/init/create/ParametersController'));\n  homeControllers.controller('RootBlockController',        require('./controllers/init/create/RootBlockController'));\n  homeControllers.controller('SyncController',             require('./controllers/init/sync/SyncController'));\n  homeControllers.controller('MainController',             require('./controllers/main/MainController'));\n  homeControllers.controller('HomeController',             require('./controllers/main/home/HomeController'));\n  homeControllers.controller('OverviewController',         require('./controllers/main/home/tabs/OverviewController'));\n  homeControllers.controller('HomeNetworkController',      require('./controllers/main/home/tabs/HomeNetworkController'));\n  homeControllers.controller('LogsController',             require('./controllers/main/settings/tabs/LogsController'));\n  homeControllers.controller('LogsSettingsController',     require('./controllers/main/settings/tabs/LogsSettingsController'));\n  homeControllers.controller('NetworkController',          require('./controllers/main/settings/tabs/NetworkController'));\n  homeControllers.controller('SettingsController',         require('./controllers/main/settings/SettingsController'));\n  homeControllers.controller('DataController',             require('./controllers/main/settings/tabs/DataController'));\n  homeControllers.controller('BackupController',           require('./controllers/main/settings/tabs/BackupController'));\n  homeControllers.controller('CPUController',              require('./controllers/main/settings/tabs/CPUController'));\n  homeControllers.controller('CurrencyController',         require('./controllers/main/settings/tabs/CurrencyController'));\n  homeControllers.controller('KeyController',              require('./controllers/main/settings/tabs/KeyController'));\n  homeControllers.controller('GraphsController',           require('./controllers/main/graphs/GraphsController'));\n  homeControllers.controller('GraphsBlockchainController', require('./controllers/main/graphs/GraphsBlockchainController'));\n};\n","\"use strict\";\n\nmodule.exports = {\n\n  init: () => {\n\n    // Hack since Node v5\n    try {\n      window.jade = require('jade' + '/' + 'runtime');\n    } catch (e) {\n    }\n\n    console.log('Configuring Angular app...');\n\n    require('./app.config')();\n\n    console.log('App initialized.');\n  }\n};\n","module.exports = {\n  server: \"\", // Empty server will use the browser current host\n  port: \"\",   // Empty port will use the browser current port\n  default_port: 9220,\n  dev_autoconf: false,\n  api_timeout: 10000 // 10 sec timeout\n};\n","module.exports = {\n  \"top.menu.overview\": \"Home\",\n  \"top.menu.data\": \"Explore\",\n  \"top.menu.settings\": \"Settings\",\n  \"top.menu.wallet\": \"Wallet\",\n  \"general.server.started\": \"Server started\",\n  \"general.server.stopped\": \"Server stopped\",\n  \"general.choose_option\": \"Choose your option\",\n  \"general.network.reconf_ok\": \"Reconfiguration success\",\n  \"global.button.validate\": \"Validate\",\n  \"global.button.start\": \"Start\",\n  \"err.unknown\": \"Unknown error\",\n  \"err.connection\": \"Could not connect to node\",\n  \"err.back_index\": \"Get back to previous screen\",\n  \"err.sync.interrupted\": \"Sync interrupted because the following error occured:\",\n  \"index.message.loading\": \"Loading...\",\n  \"crypto.secret_key\": \"Secret key\",\n  \"index.message.current_block\": \"Current block {{ number }}\",\n  \"configuration.init.choose.title\": \"Initialization\",\n  \"configuration.init.choose.message\": \"Your software has to be initialized. You may either create a new currency or connect to an existing one.\",\n  \"configuration.init.choose.create\": \"Create a new currency\",\n  \"configuration.init.choose.connect\": \"Connect to an existing currency\",\n  \"configuration.init.choose.import\": \"Import from a backup file\",\n  \"configuration.create_currency.cancel\": \"Cancel & go home\",\n  \"configuration.create_uid.title\": \"Your identity\",\n  \"configuration.create_uid.message\": \"As a first step, you need to define your personal, unique identity.<br/>The following informations will be <strong>definitive</strong> for this currency: please choose them carefully.\",\n  \"configuration.create_uid.uid.tooltip\": \"The name you will be known as.\",\n  \"configuration.create_uid.entropy.tooltip\": \"An entropy source to make your key unique: an e-mail, a phone n°, ...\",\n  \"configuration.create_uid.password.tooltip\": \"A secret password to protect your key.\",\n  \"configuration.create_uid.create_button\": \"Continue\",\n  \"configuration.create_uid.preview_button\": \"Preview pubkey\",\n  \"configuration.create_uid.nrp_algo_choose\": \"NRP algorithm\",\n  \"configuration.create_uid.nrp_algo_choose_1\": \"N = 4096 ; r = 16 ; p = 1\",\n  \"configuration.create_uid.modal_title\": \"Identity confirmation\",\n  \"configuration.create_uid.modal_message\": \"This identity will be definitive for this currency: you will be known by your User ID and will be able to access your account using your Secret Key and Password values.\",\n  \"configuration.create_uid.modal_agree\": \"Agree\",\n  \"configuration.create_uid.modal_disagree\": \"Disagree\",\n  \"configuration.create_uid.modal_preview_title\": \"Preview of pubkey\",\n  \"configuration.create_uid.modal_preview_ok\": \"OK\",\n  \"configuration.create_network.title\": \"Network\",\n  \"configuration.create_network.message\": \"uCoin is a P2P software and needs bidirectionnal access to the network. Please chose carefully the following parameters.\",\n  \"configuration.create_network.none\": \"None\",\n  \"configuration.create_network.ipv4.title\": \"IPv4\",\n  \"configuration.create_network.ipv6.title\": \"IPv6\",\n  \"configuration.create_network.ipv4.message\": \"For compatibilty reasons, you may prefer to use classic IPv4 interfaces. The configuration is more complicated.\",\n  \"configuration.create_network.local_ipv4\": \"Private (computer)\",\n  \"configuration.create_network.remote_ipv4\": \"Public (box/router)\",\n  \"configuration.create_network.local_ipv6\": \"IPv6\",\n  \"configuration.create_network.port\": \"Port\",\n  \"configuration.create_network.port.title\": \"Port\",\n  \"configuration.create_network.ipv6.message\": \"IPv6 gives your computer a unique, direct address to your node over the Internet. This is the <b>recommended way</b> to connect your node to the network.\",\n  \"configuration.create_network.port.message\": \"Wether you use IPv6 or IPv4, Duniter node will use this port number for connection to the network. With IPv4, this number will be used for both private and public interfaces.\",\n  \"configuration.create_network.dns.title\": \"Domain name\",\n  \"configuration.create_network.dns\": \"Domain name\",\n  \"configuration.create_network.dns.message\": \"IPv6 (AAAA) and IPv4 (A) DNS records will be used.\",\n  \"configuration.create_network.upnp\": \"Use UPnP\",\n  \"configuration.create_network.button.validate\": \"Continue\",\n  \"configuration.create_network.button.autoconf\": \"Automatic configuration\",\n  \"configuration.create_parameters.title\": \"Currency\",\n  \"configuration.create_parameters.message\": \"Initial parameters of the currency. It should be carefully chosen, as these parameters never change once the currency is started.\",\n  \"configuration.create_parameters.currency.title\": \"Money units\",\n  \"configuration.create_parameters.currency.message\": \"Give a name to your currency. The 3 following parameters configure the way new money units are created.\",\n  \"configuration.create_parameters.currency\": \"Currency name\",\n  \"configuration.create_parameters.c\": \"c\",\n  \"configuration.create_parameters.dt\": \"UD period\",\n  \"configuration.create_parameters.ud0\": \"UD(0)\",\n  \"configuration.create_parameters.button.validate\": \"Continue\",\n  \"configuration.create_parameters.wot.title\": \"Web of Trust\",\n  \"configuration.create_parameters.wot.message\": \"The following parameters deal with identities and their links gathered in the Web of Trust concept.\",\n  \"configuration.create_parameters.sigStock\": \"Max cert stock\",\n  \"configuration.create_parameters.sigPeriod\": \"Delay between 2 certs\",\n  \"configuration.create_parameters.sigValidity\": \"Cert expiry delay\",\n  \"configuration.create_parameters.msValidity\": \"Membership expiry delay\",\n  \"configuration.create_parameters.sigQty\": \"Min required certs\",\n  \"configuration.create_parameters.sigWindow\": \"Cert time window\",\n  \"configuration.create_parameters.stepMax\": \"Max distance\",\n  \"configuration.create_parameters.xpercent\": \"Percent of distance\",\n  \"configuration.create_parameters.blockchain.title\": \"Blockchain\",\n  \"configuration.create_parameters.blockchain.message\": \"The technical support of money and identities is the blockchain. It also has some parameters driving its behavior.\",\n  \"configuration.create_parameters.medianTimeBlocks\": \"Blocks count\",\n  \"configuration.create_parameters.avgGenTime\": \"Block gen. duration\",\n  \"configuration.create_parameters.dtDiffEval\": \"Blocks count for diff.\",\n  \"configuration.create_parameters.blocksRot\": \"Personal diff. blocks\",\n  \"configuration.create_parameters.percentRot\": \"Personal diff. rotation\",\n  \"configuration.create_root.title\": \"Root block creation\",\n  \"configuration.create_root.message\": \"This is the final step to create the new currency! The root block or <i>genesis</i> will include the first members and define the currency parameters. Once generated and submitted, the blockchain will be started.\",\n  \"configuration.create_root.button.start\": \"Start HTTP\",\n  \"configuration.create_root.button.stop\": \"Stop HTTP\",\n  \"configuration.create_root.button.generate\": \"Give a try\",\n  \"configuration.create_root.need_a_try\": \"You need to generate a first block with the « Give a try » button. Start HTTP server to do so.\",\n  \"configuration.create_root.button.accept_and_send\": \"Accept this block and start currency\",\n  \"configuration.create_root.button.cancel\": \"Cancel creation and go to home screen\",\n  \"configuration.create_root.host_listening\": \"Host listening at:\",\n  \"configuration.create_uid.pubkey_preview\": \"Public key preview\",\n  \"home.current.number\": \"Current block #\",\n  \"home.current.membersCount\": \"Members count\",\n  \"home.current.medianTime\": \"Median time\",\n  \"home.current.powMin\": \"Common difficulty level\",\n  \"home.current.mmass\": \"Monetary mass\",\n  \"home.pulling.network\": \"Network\",\n  \"home.pulling.peer\": \"Peer\",\n  \"home.pulling.state.unkown\": \"Next sync in few minutes\",\n  \"home.pulling.state.synced\": \"Synced\",\n  \"home.pulling.state.syncing\": \"Syncing...\",\n  \"home.pow.unit\": \"blocks made by this key\",\n  \"home.pow.is_mirror\": \"This node is a mirror\",\n  \"home.pow.is_waiting\": \"Waiting for better proof conditions\",\n  \"home.tabs.overview\": \"Overview\",\n  \"home.tabs.overview.should_reconfigure\": \"Your configuration has changed and your node is no more reachable from the network. You should reconfigure it to have a functional node. If this message appears again, you should manually configure the network settings. Often, selecting only IPv6 interface (disabling IPv4) solves the problem.\",\n  \"home.tabs.network\": \"Peers\",\n  \"home.tabs.network.button.update\": \"Check peers again\",\n  \"home.tabs.logs\": \"Logs\",\n  \"home.tabs.logs.follow.logs\": \"Follow logs\",\n  \"home.tabs.logs.pause.logs\": \"Pause logs\",\n  \"home.tabs.logs.level.error\": \"Error\",\n  \"home.tabs.logs.level.warn\": \"Warning\",\n  \"home.tabs.logs.level.info\": \"Info\",\n  \"home.tabs.logs.level.debug\": \"Debug\",\n  \"home.tabs.logs.level.trace\": \"Trace\",\n  \"sync.title\": \"Synchronize\",\n  \"sync.message\": \"Your node will be synchronized with an existing currency: just enter technical details about a node to sync with it.\",\n  \"sync.host\": \"Host\",\n  \"sync.port\": \"Port\",\n  \"sync.check\": \"Check node\",\n  \"sync.start\": \"Synchronize with this node\",\n  \"sync.failed\": \"Synchronization failed.\",\n  \"sync.mode.simplified\": \"Simplified mode\",\n  \"sync.mode.manual\": \"Manual mode\",\n  \"sync.simplified.choose\": \"Node to connect to\",\n  \"sync.simplified.default_option\": \"Please select a node to continue\",\n  \"sync.simplified.currency\": \"Currency\",\n  \"sync.simplified.main_mirror\": \"(main mirror)\",\n  \"sync.simplified.official_mirror\": \"(other official mirror)\",\n  \"sync.ready.node.part1\": \"This node is available!\",\n  \"sync.ready.node.part2\": \"Click on the green button to proceed.\",\n  \"sync.started.node\": \"Synchronization started on node:\",\n  \"sync.error.unreachable.try.another.node\": \"This node is not available. Please select another one.\",\n  \"home.menu.server.stop\": \"Stop server\",\n  \"home.menu.server.start\": \"Start server\",\n  \"home.menu.server.restart\": \"Restart server\",\n  \"home.state\": \"Server:\",\n  \"home.state.started\": \"STARTED\",\n  \"home.state.stopped\": \"STOPPED\",\n  \"settings.tabs.logs\": \"Logs\",\n  \"settings.tabs.data\": \"Data\",\n  \"settings.tabs.backup\": \"Backup\",\n  \"settings.tabs.identity\": \"Crypto\",\n  \"settings.tabs.network\": \"Network\",\n  \"settings.tabs.currency\": \"Currency\",\n  \"settings.tabs.cpu\": \"CPU\",\n  \"settings.data.reset.title\": \"Reset this node\",\n  \"settings.data.reset.message\": \"If you desire to reset this node's data and sync it again with the network, please select a node to sync against and validate.\",\n  \"settings.data.reset.warning\": \"This process <strong>will not</strong> reset the node identity and network settings, which will be reused.\",\n  \"settings.data.reset.peer.none_option\": \"Select a node\",\n  \"settings.data.reset.peer.label\": \"Synchronization peer\",\n  \"settings.data.reset.button\": \"Full reset of the node\",\n  \"settings.data.reset_sync.button\": \"Reset data and start sync\",\n  \"settings.logs.title\": \"Logs\",\n  \"settings.logs.consult.message\": \"Your node continually generates information messages in a log file. This information may help you understand what your node <i>is doing</i> or what it <i>has done</i> few times ago.\",\n  \"settings.logs.consult.button\": \"View real-time logs\",\n  \"settings.logs.share.message\": \"You may want to <b>share your logs</b> with other people, sometimes to get help or to add informations in a bug tracker. Clicking on below button will extract the last 2000 lines of your logs and push it on the web, returning you a link to be shared with whoever you want.\",\n  \"settings.logs.share.button\": \"Create a web link to your logs\",\n  \"settings.logs.share.generating\": \"Generating your link...\",\n  \"settings.logs.share.error\": \"An error occurred during the generation of your link:\",\n  \"settings.data.backup.title\": \"Backup\",\n  \"settings.data.backup.message\": \"You can create backups of your node's data and restore them using the buttons below.\",\n  \"settings.data.backup.warning\": \"<b>Export</b> will only backup your node's data, which <i>excludes your secret key and configuration details</i>.<br><b>Import</b> will reset your node's data by applying the backup. Your secret keys and configuration remains untouched.\",\n  \"settings.data.backup.button.export\": \"Create a data backup\",\n  \"settings.data.backup.button.import\": \"Import a data backup\",\n  \"settings.data.backup.importing\": \"Importing data...\",\n  \"settings.data.backup.imported\": \"Import successfull!\",\n  \"settings.network.button.validate\": \"Save and apply network settings\",\n  \"settings.network.saved\": \"Configuration saved and applied successfully\",\n  \"settings.key.title\": \"Public key of this node:\",\n  \"settings.key.button.validate\": \"Save and use this key\",\n  \"settings.key.button.change\": \"Change keyring\",\n  \"settings.key.pubkey.description\": \"This public key is the public part of your keyring, which is composed of a public key and a private key. This public key is shared with all the peers of the network and users of the currency, while your private key is secretely kept and used by this node to process operations on the network.\",\n  \"settings.data.modal_title\": \"Confirm full reset\",\n  \"settings.data.modal_message\": \"This action will completely reset the data of your node and redirect you to initial configuration screen. Do you confirm?\",\n  \"settings.data.modal_disagree\": \"No, cancel this\",\n  \"settings.data.modal_agree\": \"Yes, process the reset\",\n  \"settings.data.reset.experimental\": \"This functionality is still considered experimental. If you encounters strange behaviors, please stop the software and reset manually your node by removing all the files BUT conf.json under ~/.config/ucoin/ucoin_default, and restart the software.\",\n  \"settings.cpu.title\": \"CPU settings\",\n  \"settings.cpu.message\": \"You can adjust the CPU power dedicated to proof-of-work computation. The higher the value, the faster is your node, the higher the chances you have to compute a block early.\",\n  \"settings.cpu.warning\": \"<b>Up to 8 cores</b> of your machine are dedicated to proof-of-work computation currently. Also, setting CPU to 100% does not mean Duniter will use 100% of each core, but will use as much as possible each of them, as a core is also shared with other programs.\",\n  \"settings.cpu.range\": \"% of CPU power core dedicated to proof-of-work :\",\n  \"settings.cpu.power\": \"Core power:\",\n  \"settings.cpu.saved\": \"CPU settings saved.\",\n  \"graphs.tabs.blockchain\": \"Blockchain\",\n  \"graphs.tabs.currency\": \"Currency\",\n  \"graphs.blockchain.range\": \"Graphs for the last X blocks: (please choose X value)\",\n  \"graphs.blockchain.with.time\": \"Time variations graph\",\n  \"graphs.blockchain.with.speed\": \"Writing speed graph\",\n  \"graphs.blockchain.with.difficulty\": \"Difficulty graph\",\n  \"help.about_duniter\": \"About Duniter\",\n  \"help.about_duniter.title\": \"About\",\n  \"help.about_duniter.subtitle\": \"Duniter Desktop\",\n  \"help.about_duniter.version\": \"Version: \",\n  \"help.about_duniter.forum\": \"Forum\",\n  \"help.about_duniter.chat\": \"Chat\",\n  \"help.new_version_available\": \"New version available\"\n}\n;","var co = require('co');\nvar _ = require('underscore');\n\nmodule.exports = (app) => {\n\n  app.config(['$stateProvider', '$urlRouterProvider', ($stateProvider, $urlRouterProvider) => {\n\n    // States\n    $stateProvider.\n    state('index', {\n      url: '/',\n      template: require('views/index'),\n      resolve: {\n        ws: (Webmin) => Webmin.ws(),\n        summary: (Webmin) => Webmin.summary()\n      },\n      controller: 'IndexController'\n    }).\n\n    state('about', {\n      url: '/about',\n      template: require('views/about'),\n      resolve: {\n        summary: (Webmin) => Webmin.summary(),\n        version: (summary) => summary && 'v' + summary.version || 'unknown version'\n      },\n      controller: 'AboutController'\n    }).\n\n    state('configure', {\n      abstract: true,\n      url: '/configure',\n      template: require('views/init/layout'),\n      controller: ($scope) => {\n        $scope.conf = {\n          currency: 'super_currency',\n          c: 0.007376575,\n          dt: 30.4375 * 24 * 3600,\n          ud0: 100,\n          stepMax: 3,\n          sigDelay: 3600 * 24 * 365 * 5,\n          sigPeriod: 0, // Instant\n          sigStock: 40,\n          sigWindow: 3600 * 24 * 14, // 2 weeks\n          sigValidity: 3600 * 24 * 365,\n          msValidity: 3600 * 24 * 365,\n          sigQty: 0,\n          xpercent: 0.9,\n          percentRot: 0.66,\n          blocksRot: 20,\n          avgGenTime: 16 * 60,\n          dtDiffEval: 10,\n          medianTimeBlocks: 20\n        };\n      }\n    }).\n\n    state('configure.choose', {\n      url: '/choose',\n      template: require('views/init/choose'),\n      controller: ($scope, Importer) => {\n        Importer($scope);\n      }\n    }).\n\n    state('configure.create', {\n      url: '/create',\n      template: '<div class=\"ui-scrollable\" ui-view=\"\"></div>'\n    }).\n\n    state('configure.create.uid', {\n      url: '/create/uid',\n      template: require('views/init/create/create_uid'),\n      controller: 'IdentityController'\n    }).\n\n    state('configure.create.network', {\n      url: '/create/network',\n      template: require('views/init/create/create_network'),\n      resolve: {\n        netinterfaces: (Webmin) => resolveNetworkAutoConf(Webmin),\n        firstConf: () => true\n      },\n      controller: 'NetworkController'\n    }).\n\n    state('configure.create.parameters', {\n      url: '/create/parameters',\n      template: require('views/init/create/create_parameters'),\n      controller: 'ParametersController'\n    }).\n\n    state('configure.create.root', {\n      url: '/create/root',\n      template: require('views/init/create/create_root'),\n      controller: 'RootBlockController'\n    }).\n\n    state('sync', {\n      url: '/sync?host=&port=&sync=&to=',\n      template: require('views/init/sync/sync'),\n      controller: 'SyncController'\n    }).\n\n    state('main', {\n      abstract: true,\n      url: '/main',\n      template: require('views/main/main'),\n      resolve: {\n        ws: (Webmin) => Webmin.ws(),\n        summary: (Webmin) => Webmin.summary()\n      },\n      controller: 'MainController'\n    }).\n\n    state('main.home', {\n      abstract: true,\n      url: '/home',\n      template: require('views/main/home/home'),\n      controller: 'HomeController'\n    }).\n\n    state('main.home.overview', {\n      url: '/overview',\n      template: require('views/main/home/tabs/overview'),\n      resolve: {\n        startHttp: (Webmin) => Webmin.server.http.start()\n      },\n      controller: 'OverviewController'\n    }).\n\n    state('main.home.network', {\n      url: '/network',\n      template: require('views/main/home/tabs/network'),\n      resolve: {\n        peers: (Webmin, BMA) => co(function *() {\n          const summary = yield Webmin.summary();\n          return BMA(summary.host).network.peers();\n        })\n      },\n      controller: 'HomeNetworkController'\n    }).\n\n    state('main.settings', {\n      abstract: true,\n      url: '/settings',\n      template: require('views/main/settings/settings'),\n      resolve: {\n        summary: (Webmin) => Webmin.summary()\n      },\n      controller: 'SettingsController'\n    }).\n\n    state('main.settings.data', {\n      url: '/data',\n      template: require('views/main/settings/tabs/data'),\n      resolve: {\n        peers: (Webmin, BMA) => co(function *() {\n          try {\n            const summary = yield Webmin.summary();\n            let self = yield BMA(summary.host).network.peering.self();\n            let res = yield BMA(summary.host).network.peers();\n            return _.filter(res.peers, (p) => p.pubkey != self.pubkey && p.status == 'UP');\n          } catch (e) {\n            console.error(e);\n            return [];\n          }\n        })\n      },\n      controller: 'DataController'\n    }).\n\n    state('main.settings.logs', {\n      url: '/logs',\n      template: require('views/main/settings/tabs/logs'),\n      controller: 'LogsSettingsController'\n    }).\n\n    state('main.settings.backup', {\n      url: '/backup',\n      template: require('views/main/settings/tabs/backup'),\n      controller: 'BackupController'\n    }).\n\n    state('main.settings.cpu', {\n      url: '/cpu',\n      template: require('views/main/settings/tabs/cpu'),\n      resolve: {\n        summary: (Webmin) => Webmin.summary()\n      },\n      controller: 'CPUController'\n    }).\n\n    state('main.settings.crypto', {\n      url: '/crypto',\n      template: require('views/main/settings/tabs/crypto'),\n      controller: 'KeyController'\n    }).\n\n    state('main.settings.network', {\n      url: '/network',\n      resolve: {\n        netinterfaces: (Webmin) => resolveNetworkAutoConf(Webmin),\n        firstConf: () => false\n      },\n      template: require('views/main/settings/tabs/network'),\n      controller: 'NetworkController'\n    }).\n\n    state('main.settings.currency', {\n      url: '/currency',\n      resolve: {\n        conf: (summary) => co(function *() {\n          return summary.parameters;\n        })\n      },\n      template: require('views/main/settings/tabs/currency'),\n      controller: 'CurrencyController'\n    }).\n\n    state('main.graphs', {\n      abstract: true,\n      url: '/graphs',\n      template: require('views/main/graphs/graphs'),\n      controller: 'GraphsController'\n    }).\n\n    state('main.graphs.blockchain', {\n      url: '/blockchain',\n      template: require('views/main/graphs/blockchain'),\n      controller: 'GraphsBlockchainController'\n    }).\n\n    //state('graphs.crypto', {\n    //  url: '/crypto',\n    //  template: require('views/graphs/crypto'),\n    //  controller: 'KeyController'\n    //}).\n    //\n    //state('graphs.network', {\n    //  url: '/network',\n    //  resolve: {\n    //    netinterfaces: (Webmin) => resolveNetworkAutoConf(Webmin),\n    //    firstConf: () => false\n    //  },\n    //  template: require('views/graphs/network'),\n    //  controller: 'NetworkController'\n    //}).\n    //\n    //state('graphs.currency', {\n    //  url: '/currency',\n    //  resolve: {\n    //    conf: (bmapi) => co(function *() {\n    //      return bmapi.currency.parameters();\n    //    })\n    //  },\n    //  template: require('views/graphs/currency'),\n    //  controller: 'CurrencyController'\n    //}).\n\n    state('logs', {\n      url: '/logs',\n      template: require('views/logs'),\n      resolve: {\n        ws: (Webmin) => Webmin.ws()\n      },\n      controller: 'LogsController'\n    }).\n\n    state('error', {\n      url: '/error\\?err',\n      template: require('views/error'),\n      controller: ($scope, $stateParams) =>\n        $scope.errorMsg = $stateParams.err || 'err.unknown'\n    });\n\n    // Default route\n    $urlRouterProvider.otherwise('/');\n  }]);\n\n  app.run(($rootScope, $state) => {\n    $rootScope.$on('$stateChangeError', (event, toState, toParams, fromState, fromParams, error) => {\n      console.error(error);\n      $state.go('error', { err: error.message });\n    });\n  });\n\n  function resolveNetworkAutoConf(Webmin) {\n    return co(function *() {\n      let netinterfaces = yield Webmin.network.interfaces();\n      return netinterfaces || { local: {}, remote: {} };\n    });\n  }\n};\n","module.exports = (app) => {\n\n  app.config(['$translateProvider', ($translateProvider) => {\n\n    $translateProvider.translations('en', require('./i18n/en'));\n\n    // Default language\n    $translateProvider.preferredLanguage('en');\n\n    // Other parameters\n    $translateProvider.useSanitizeValueStrategy('');\n  }]);\n};\n","\nmodule.exports = function Peer(json) {\n\n  var that = this;\n\n  var BMA_REGEXP = /^BASIC_MERKLED_API( ([a-z_][a-z0-9-_.]*))?( ([0-9.]+))?( ([0-9a-f:]+))?( ([0-9]+))$/;\n\n  Object.keys(json).forEach(function(key) {\n    that[key] = json[key];\n  });\n\n  that.endpoints = that.endpoints || [];\n  that.statusTS = that.statusTS || 0;\n\n  that.keyID = function () {\n    return that.pubkey && that.pubkey.length > 10 ? that.pubkey.substring(0, 10) : \"Unknown\";\n  };\n\n  that.copyValues = function(to) {\n    var obj = that;\n    [\"version\", \"currency\", \"pub\", \"endpoints\", \"hash\", \"status\", \"statusTS\", \"block\", \"signature\"].forEach(function (key) {\n      to[key] = obj[key];\n    });\n  };\n\n  that.copyValuesFrom = function(from) {\n    var obj = that;\n    [\"version\", \"currency\", \"pub\", \"endpoints\", \"block\", \"signature\"].forEach(function (key) {\n      obj[key] = from[key];\n    });\n  };\n\n  that.json = function() {\n    var obj = that;\n    var json = {};\n    [\"version\", \"currency\", \"endpoints\", \"status\", \"block\", \"signature\"].forEach(function (key) {\n      json[key] = obj[key];\n    });\n    json.raw = that.getRaw();\n    json.pubkey = that.pubkey;\n    return json;\n  };\n\n  that.getBMA = function() {\n    var bma = null;\n    that.endpoints.forEach(function(ep){\n      var matches = !bma && ep.match(BMA_REGEXP);\n      if (matches) {\n        bma = {\n          \"dns\": matches[2] || '',\n          \"ipv4\": matches[4] || '',\n          \"ipv6\": matches[6] || '',\n          \"port\": matches[8] || 9101\n        };\n      }\n    });\n    return bma || {};\n  };\n\n  that.getDns = function() {\n    var bma = that.getBMA();\n    return bma.dns ? bma.dns : null;\n  };\n\n  that.getIPv4 = function() {\n    var bma = that.getBMA();\n    return bma.ipv4 ? bma.ipv4 : null;\n  };\n\n  that.getIPv6 = function() {\n    var bma = that.getBMA();\n    return bma.ipv6 ? bma.ipv6 : null;\n  };\n\n  that.getPort = function() {\n    var bma = that.getBMA();\n    return bma.port ? bma.port : null;\n  };\n\n  that.getHost = function() {\n    var bma = that.getBMA();\n    var host =\n      (that.hasValid4(bma) ? bma.ipv4 :\n        (bma.dns ? bma.dns :\n          (bma.ipv6 ? '[' + bma.ipv6 + ']' : '')));\n    return host;\n  };\n\n  that.getURL = function() {\n    var bma = that.getBMA();\n    var base =\n      (that.hasValid4(bma) ? bma.ipv4 :\n        (bma.dns ? bma.dns :\n          (bma.ipv6 ? '[' + bma.ipv6 + ']' : '')));\n    if(bma.port)\n      base += ':' + bma.port;\n    return base;\n  };\n\n  that.hasValid4 = function(bma) {\n    return bma.ipv4 && !bma.ipv4.match(/^127.0/) && !bma.ipv4.match(/^192.168/) ? true : false;\n  };\n\n  that.getNamedURL = function() {\n    var bma = that.getBMA();\n    var base =\n      (that.hasValid4(bma) ? bma.ipv4 :\n        (bma.dns ? bma.dns :\n          (bma.ipv6 ? '[' + bma.ipv6 + ']' : '')));\n    if(bma.port)\n      base += ':' + bma.port;\n    return base;\n  };\n\n  that.isReachable = function () {\n    return that.getURL() ? true : false;\n  };\n};\n","module.exports = function mobilecheck() {\n  var check = false;\n  (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera);\n  return check;\n};\n","module.exports = (app) => {\n\n  let Base58 = {};\n\n  Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n  Base58.alphabetMap = {};\n\n  for(let i = 0; i < Base58.alphabet.length; i++) {\n    Base58.alphabetMap[Base58.alphabet.charAt(i)] = i\n  }\n\n  Base58.encode = function(buffer) {\n    if (buffer.length === 0) return '';\n\n    let i, j, digits = [0];\n    for (i = 0; i < buffer.length; i++) {\n      for (j = 0; j < digits.length; j++) digits[j] <<= 8\n      digits[digits.length - 1] += buffer[i];\n\n      let carry = 0;\n      for (j = digits.length - 1; j >= 0; j--){\n        digits[j] += carry;\n        carry = (digits[j] / 58) | 0;\n        digits[j] %= 58\n      }\n\n      while (carry) {\n        digits.unshift(carry);\n        carry = (digits[0] / 58) | 0;\n        digits[0] %= 58\n      }\n    }\n\n    // deal with leading zeros\n    for (i = 0; i < buffer.length - 1 && buffer[i] == 0; i++) digits.unshift(0)\n\n    return digits.map(function(digit) { return Base58.alphabet[digit] }).join('')\n  };\n\n  Base58.decode = function(string) {\n    if (string.length === 0) return (new Uint8Array());\n\n    let input = string.split('').map(function(c){\n      return Base58.alphabetMap[c]\n    });\n\n    let i, j, bytes = [0];\n    for (i = 0; i < input.length; i++) {\n      for (j = 0; j < bytes.length; j++) bytes[j] *= 58\n      bytes[bytes.length - 1] += input[i];\n\n      let carry = 0;\n      for (j = bytes.length - 1; j >= 0; j--){\n        bytes[j] += carry;\n        carry = bytes[j] >> 8;\n        bytes[j] &= 0xff\n      }\n\n      while (carry) {\n        bytes.unshift(carry);\n        carry = bytes[0] >> 8;\n        bytes[0] &= 0xff\n      }\n    }\n\n    // deal with leading zeros\n    for (i = 0; i < input.length - 1 && input[i] == 0; i++) bytes.unshift(0)\n    return (new Uint8Array(bytes))\n  };\n\n  app.factory('Base58', function() {\n    return {\n      encode: Base58.encode,\n      decode: Base58.decode\n    };\n  });\n};\n","const co = require('co');\nconst _ = require('underscore');\nconst conf = require('../lib/conf/conf');\n\nmodule.exports = (angular) => {\n\n  angular.module('duniter.services.bma', ['ngResource'])\n\n    .factory('BMA', function($http, $q) {\n        function httpProtocol() {\n            return window.location.protocol + '//';\n        }\n\n        function wsProtocol() {\n            return window.location.protocol === 'https:' ? 'wss://' : 'ws://';\n        }\n\n        function BMA(host) {\n            function getResource(uri, protocol) {\n                return function (params) {\n                    return $q.when(httpGet(uri, params, protocol));\n                }\n            }\n\n            function httpGet(uri, params, protocol) {\n                return Q.Promise((resolve, reject) => {\n                    var config = {\n                        timeout: conf.api_timeout\n                    }, suffix = '', pkeys = [], queryParams = null;\n                    if (typeof params == 'object') {\n                        pkeys = _.keys(params);\n                        queryParams = {};\n                    }\n                    pkeys.forEach(function (pkey) {\n                        var prevURI = uri;\n                        uri = uri.replace(new RegExp(':' + pkey), params[pkey]);\n                        if (prevURI == uri) {\n                            queryParams[pkey] = params[pkey];\n                        }\n                    });\n                    config.params = queryParams;\n                    const url = (protocol || httpProtocol()) + host + uri + suffix;\n                    $http.get(url, config)\n                        .success(function (data, status, headers, config) {\n                            resolve(data);\n                        })\n                        .error(function (data, status, headers, config) {\n                            console.log(data);\n                            reject(data);\n                        });\n                });\n            }\n\n            function postResource(uri) {\n                return function (data, params) {\n                    return $q.when(Q.Promise((resolve, reject) => {\n                        var config = {\n                            timeout: 4000\n                        }, suffix = '', pkeys = [], queryParams = null;\n                        if (typeof params == 'object') {\n                            pkeys = _.keys(params);\n                            queryParams = {};\n                        }\n                        pkeys.forEach(function (pkey) {\n                            var prevURI = uri;\n                            uri = uri.replace(new RegExp(':' + pkey), params[pkey]);\n                            if (prevURI == uri) {\n                                queryParams[pkey] = params[pkey];\n                            }\n                        });\n                        config.params = queryParams;\n                        const url = httpProtocol() + host + uri + suffix;\n                        $http.post(url, data, config)\n                            .success(function (data, status, headers, config) {\n                                resolve(data);\n                            })\n                            .error(function (data, status, headers, config) {\n                                reject(data);\n                            });\n                    }));\n                }\n            }\n\n            function bmaGET(uri) {\n                return getResource('' + uri);\n            }\n\n            function bmaPOST(uri) {\n                return postResource('' + uri);\n            }\n\n            function bmaWS(uri) {\n                return ws(wsProtocol() +  host + '' + uri);\n            }\n\n            let wsMap = {};\n\n            function ws(uri) {\n                var sock = wsMap[uri] || new WebSocket(uri);\n                wsMap[uri] = sock;\n                sock.onclose = function (e) {\n                    console.log('close');\n                    console.log(e);\n                };\n                sock.onerror = function (e) {\n                    console.log('onerror');\n                    console.log(e);\n                };\n                let opened = false, openedCallback;\n                sock.onopen = function () {\n                    opened = true;\n                    openedCallback && openedCallback();\n                };\n                let listener, messageType;\n                sock.onmessage = function (e) {\n                    let res = JSON.parse(e.data);\n                    if (res.type == 'log') {\n                        for (let i = 0, len = res.value.length; i < len; i++) {\n                            let log = res.value[i];\n                            // console[log.level](log.msg);\n                        }\n                    }\n                    if (listener && (messageType === undefined || (res.type === messageType))) {\n                        listener(res);\n                    }\n                };\n                return {\n                    on: function (type, callback) {\n                        messageType = type;\n                        listener = callback;\n                    },\n                    whenOpened: () => co(function *() {\n                        if (opened) return true;\n                        else {\n                            yield Q.Promise((resolve) => {\n                                openedCallback = resolve;\n                            });\n                        }\n                    }),\n                    send: (msg) => sock.send(msg)\n                };\n            }\n\n            return {\n                node: {\n                    summary: bmaGET('/node/summary')\n                },\n                wot: {\n                    lookup: bmaGET('/wot/lookup/:search'),\n                    members: bmaGET('/wot/members')\n                },\n                network: {\n                    peering: {\n                        self: bmaGET('/network/peering'),\n                        peers: bmaGET('/network/peering/peers')\n                    },\n                    peers: bmaGET('/network/peers')\n                },\n                currency: {\n                    parameters: bmaGET('/blockchain/parameters')\n                },\n                blockchain: {\n                    current: bmaGET('/blockchain/current'),\n                    block: bmaGET('/blockchain/block/:block'),\n                    blocks: bmaGET('/blockchain/blocks/:count/:from'),\n                    block_add: bmaPOST('/blockchain/block'),\n                    stats: {\n                        ud: bmaGET('/blockchain/with/ud'),\n                        tx: bmaGET('/blockchain/with/tx')\n                    }\n                },\n                websocket: {\n                    block: function () {\n                        return bmaWS('/ws/block');\n                    },\n                    peer: function () {\n                        return bmaWS('/ws/peer');\n                    }\n                },\n                origin: {\n                    network: {\n                        peering: {\n                            self: getResource('/network/peering', 'http://')\n                        }\n                    }\n                }\n            }\n        }\n\n        return BMA;\n    });\n};\n","var _ = require('underscore');\nvar conf = require('../lib/conf/conf');\nlet moment = require('moment');\n\nmodule.exports = (app) => {\n\n    app.filter('mt_date', () => {\n      return (input) => {\n        if(input == null){ return \"\"; }\n        return moment(input * 1000).format('YYYY MM DD');\n      };\n    });\n\n    app.filter('mt_time', () => {\n      return (input) => {\n        if(input == null){ return \"\"; }\n        return moment(input * 1000).format('HH:mm:ss');\n      };\n    });\n};\n","module.exports = (app) => {\n\n  app.factory('Graph', function() {\n      return {\n\n        speedGraph: function speedGraphs (id, offset, speeds, minSpeeds, maxSpeeds, getSeries) {\n          var xValuex = [];\n          for (var i = 0, len = speeds.length; i < len; i++) {\n            xValuex.push(i + offset);\n          }\n          $(id).highcharts({\n            chart: {\n              type: \"area\",\n              zoomType: 'x',\n              events: {\n                load: function () {\n                  getSeries(this.series);\n                }\n              }\n            },\n            title: {\n              text: 'Blocks writing speed'\n            },\n            subtitle: {\n              text: document.ontouchstart === undefined ?\n                'Click and drag in the plot area to zoom in' :\n                'Pinch the chart to zoom in'\n            },\n            xAxis: {\n              //categories: xValuex,\n              minRange: 3, // 10 blocks,\n              labels: {\n                formatter: function() {\n                  return this.value + offset;\n                }\n              }\n            },\n            yAxis: {\n              //type: 'logarithmic',\n              minorTickInterval: 1,\n              title: {\n                text: 'Blocks per hour (logarithmic scale)'\n              },\n              floor: 0,\n              min: 0\n            },\n            colors: ['#ff0000', '#7cb5ec', '#000000'],\n            legend: {\n              enabled: true\n            },\n            tooltip: {\n              shared: true,\n              crosshairs: true,\n              formatter: blockFormatter(offset)\n            },\n            plotOptions: {\n              area: {\n                fillColor: {\n                  linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},\n                  stops: [\n                    [0, Highcharts.getOptions().colors[0]],\n                    [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\n                  ]\n                },\n                marker: {\n                  radius: 2\n                },\n                lineWidth: 1,\n                states: {\n                  hover: {\n                    lineWidth: 1\n                  }\n                },\n                threshold: null\n              }\n            },\n\n            series: [{\n              type: 'line',\n              name: \"Upper limit\",\n              data: maxSpeeds\n            },{\n              type: 'area',\n              name: \"Actual speed\",\n              data: speeds\n            },{\n              type: 'line',\n              name: \"Lower limit\",\n              data: minSpeeds\n            }\n            ]\n          });\n        },\n\n        difficultyGraph: function difficultyGraph (id, offset, difficulties) {\n          $(id).highcharts({\n            chart: {\n              type: \"area\",\n              zoomType: 'x'\n            },\n            title: {\n              text: 'Proof-of-Work difficulty by block'\n            },\n            subtitle: {\n              text: document.ontouchstart === undefined ?\n                'Click and drag in the plot area to zoom in' :\n                'Pinch the chart to zoom in'\n            },\n            xAxis: {\n              minRange: 10, // 10 blocks,\n              labels: {\n                formatter: function() {\n                  return this.value + offset;\n                }\n              }\n            },\n            yAxis: {\n              title: {\n                text: 'Number of zeros'\n              },\n              floor: 0,\n              min: 0\n            },\n            legend: {\n              enabled: true\n            },\n            tooltip: {\n              shared: true,\n              crosshairs: true,\n              formatter: blockFormatter(offset)\n            },\n            plotOptions: {\n              area: {\n                fillColor: {\n                  linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},\n                  stops: [\n                    [0, Highcharts.getOptions().colors[0]],\n                    [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\n                  ]\n                },\n                marker: {\n                  radius: 2\n                },\n                lineWidth: 1,\n                states: {\n                  hover: {\n                    lineWidth: 1\n                  }\n                },\n                threshold: null\n              }\n            },\n\n            series: [\n              {\n                name: 'PoW difficulty',\n                data: difficulties\n              }\n            ]\n          });\n        },\n\n        timeGraphs: function timeGraphs (id, offset, timeAccelerations, medianTimeIncrements, speeds, minSpeeds, maxSpeeds) {\n          var timesInc = [];\n          medianTimeIncrements.forEach(function (inc) {\n            timesInc.push(inc == 0 ? 1 : inc);\n          });\n          $(id).highcharts({\n            chart: {\n              // type: \"area\",\n              zoomType: 'x'\n            },\n            title: {\n              text: 'Blockchain time variations'\n            },\n            subtitle: {\n              text: document.ontouchstart === undefined ?\n                'Click and drag in the plot area to zoom in' :\n                'Pinch the chart to zoom in'\n            },\n            xAxis: {\n              minRange: 10, // 10 blocks,\n              labels: {\n                formatter: function() {\n                  return this.value + offset;\n                }\n              }\n            },\n            yAxis: {\n              //type: 'logarithmic',\n              minorTickInterval: 1,\n              title: {\n                text: 'Number of seconds (logarithmic scale)'\n              }\n            },\n            legend: {\n              enabled: true\n            },\n            tooltip: {\n              shared: true,\n              crosshairs: true,\n              formatter: blockFormatter(offset)\n            },\n            plotOptions: {\n              area: {\n                fillColor: {\n                  linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},\n                  stops: [\n                    [0, Highcharts.getOptions().colors[0]],\n                    [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\n                  ]\n                },\n                marker: {\n                  radius: 2\n                },\n                lineWidth: 1,\n                states: {\n                  hover: {\n                    lineWidth: 1\n                  }\n                },\n                threshold: null\n              }\n            },\n\n            series: [\n              {\n                name: 'Time acceleration',\n                data: timeAccelerations\n              },{\n                name: \"Median Time variation\",\n                data: timesInc\n              }\n              ,{\n                name: \"Too high duration\",\n                data: maxSpeeds\n              }\n              ,{\n                name: \"Actual duration\",\n                data: speeds\n              }\n              ,{\n                name: \"Too low duration\",\n                data: minSpeeds\n              }\n            ]\n          });\n        }\n      }\n    });\n};\n\nfunction blockFormatter(offset) {\n  return function() {\n    var html = '<span style=\"font-size: 10px\">' + (this.x + offset) + '</span><br/>';\n    for (var i = 0, len = this.points.length; i < len; i++) {\n      var point = this.points[i];\n      var series = point.series;\n      html += '<span style=\"color:' + series.color + '\">\\u25CF</span>' + series.name + ': <b>' + point.y + '</b><br/>';\n    }\n    return html;\n  }\n}\n","module.exports = (app) => {\n\n  app.factory('Importer', function($http, $state, $timeout, UIUtils, Upload, Webmin) {\n\n    return ($scope) => {\n\n      $scope.uploadFiles = function(file, errFiles) {\n        $scope.f = file;\n        $scope.errFile = errFiles && errFiles[0];\n        if (file) {\n          UIUtils.toast('settings.data.backup.importing');\n          file.upload = Upload.upload({\n            url: Webmin.getImportURL(),\n            data: { importData: file }\n          });\n\n          file.upload.then(function (response) {\n            $timeout(function () {\n              UIUtils.toast('settings.data.backup.imported');\n              $state.go('main.home.overview');\n              file.result = response.data;\n            });\n          }, function (response) {\n            if (response.status > 0)\n              $scope.errorMsg = response.status + ': ' + response.data;\n          }, function (evt) {\n            file.progress = Math.min(100, parseInt(100.0 *\n              evt.loaded / evt.total));\n          });\n        }\n      }\n    };\n  });\n};\n","module.exports = (app) => {\n\n  app.factory('PubkeyGenerator', function($timeout, Webmin) {\n\n    var co = require('co');\n\n    return ($scope) => {\n\n      let concat = \"\";\n      $scope.pubkey_preview = \"\";\n      let timeout = preview();\n\n      function preview() {\n        return $timeout(() => {\n          if ($scope.$parent) {\n            let salt = $scope.$parent.conf.idty_entropy;\n            let pass = $scope.$parent.conf.idty_password;\n            let newConcat = [salt, pass].join('');\n            if (salt && pass && newConcat != concat) {\n              concat = newConcat;\n              $scope.previewPubkey(concat);\n              timeout = preview();\n            } else {\n              timeout = preview();\n            }\n          }\n        }, 100);\n      }\n\n      $scope.previewPubkey = () => co(function *() {\n        let data = yield Webmin.key.preview({\n          conf: $scope.$parent.conf\n        });\n        $scope.pubkey_preview = data.pubkey;\n      }).catch(() => null);\n    };\n  });\n};\n","module.exports = (app) => {\n\n  app.factory('UIUtils', function($q, $translate, $state, $location) {\n      return {\n\n        translate: (msg) => $q.when($translate(msg)),\n\n        toastRaw: (msg) => {\n          return Materialize.toast(msg, 4000);\n        },\n\n        toast: (msg) => {\n          return $q.when($translate(msg)).then((translated) => Materialize.toast(translated, 4000))\n        },\n\n        enableInputs: () => $('i.prefix, label[value!=\"\"]').addClass('active'),\n\n        enableTabs: () => {\n          let jTabs = $('ul.tabs');\n          jTabs.tabs();\n          $('ul.tabs a').click((e) => {\n            let href = $(e.currentTarget).attr('href');\n            let state = href.slice(1);\n            $state.go(state);\n          });\n\n          let currentID = $location.path()\n            .replace(/\\//g, '.')\n            .replace(/\\./, '');\n\n          jTabs.tabs('select_tab', currentID);\n        },\n\n        changeTitle: (version) => document.title = 'Duniter ' + version\n      }\n    });\n};\n","const co = require('co');\nconst _ = require('underscore');\nconst conf = require('../lib/conf/conf');\n\nmodule.exports = (angular) => {\n\n  angular.module('duniter.services.webmin', ['ngResource'])\n\n    .factory('Webmin', function($http, $q) {\n\n      function httpProtocol() {\n        return window.location.protocol + '//';\n      }\n\n      function wsProtocol() {\n        return window.location.protocol === 'https:' ? 'wss://' : 'ws://';\n      }\n\n      function Webmin(server) {\n\n        function getResource(uri, protocol) {\n          return function(params) {\n            return $q.when(httpGet(uri, params, protocol));\n          }\n        }\n\n        function httpGet(uri, params, protocol) {\n          return Q.Promise((resolve, reject) => {\n            var config = {\n              timeout: conf.api_timeout\n            }, suffix = '', pkeys = [], queryParams = null;\n            if (typeof params == 'object') {\n              pkeys = _.keys(params);\n              queryParams = {};\n            }\n            pkeys.forEach(function(pkey){\n              var prevURI = uri;\n              uri = uri.replace(new RegExp(':' + pkey), params[pkey]);\n              if (prevURI == uri) {\n                queryParams[pkey] = params[pkey];\n              }\n            });\n            config.params = queryParams;\n            $http.get((protocol || httpProtocol()) + server + uri + suffix, config)\n              .success(function(data, status, headers, config) {\n                resolve(data);\n              })\n              .error(function(data, status, headers, config) {\n                console.log(data);\n                reject(data);\n              });\n          });\n        }\n\n        function postResource(uri) {\n          return function(data, params) {\n            return $q.when(Q.Promise((resolve, reject) => {\n              var config = {\n                timeout: 4000\n              }, suffix = '', pkeys = [], queryParams = null;\n              if (typeof params == 'object') {\n                pkeys = _.keys(params);\n                queryParams = {};\n              }\n              pkeys.forEach(function(pkey){\n                var prevURI = uri;\n                uri = uri.replace(new RegExp(':' + pkey), params[pkey]);\n                if (prevURI == uri) {\n                  queryParams[pkey] = params[pkey];\n                }\n              });\n              config.params = queryParams;\n              $http.post(httpProtocol() + server + uri + suffix, data, config)\n                .success(function(data, status, headers, config) {\n                  resolve(data);\n                })\n                .error(function(data, status, headers, config) {\n                  reject(data);\n                });\n            }));\n          }\n        }\n\n        let wsMap = {};\n\n        function ws(uri) {\n          var sock = wsMap[uri] || new WebSocket(uri);\n          wsMap[uri] = sock;\n          sock.onclose = function(e) {\n            console.log('close');\n            console.log(e);\n          };\n          sock.onerror = function(e) {\n            console.log('onerror');\n            console.log(e);\n          };\n          let opened = false, openedCallback;\n          sock.onopen = function() {\n            opened = true;\n            openedCallback && openedCallback();\n          };\n          let listener, messageType;\n          sock.onmessage = function(e) {\n            let res = JSON.parse(e.data);\n            if (res.type == 'log') {\n              for (let i = 0, len = res.value.length; i < len; i++) {\n                let log = res.value[i];\n                // console[log.level](log.msg);\n              }\n            }\n            if (listener && (messageType === undefined || (res.type === messageType))) {\n              listener(res);\n            }\n          };\n          return {\n            on: function(type, callback) {\n              messageType = type;\n              listener = callback;\n            },\n            whenOpened: () => co(function *() {\n              if (opened) return true;\n              else {\n                yield Q.Promise((resolve) => {\n                  openedCallback = resolve;\n                });\n              }\n            }),\n            send: (msg) => sock.send(msg)\n          };\n        }\n\n        return {\n          getExportURL: () => httpProtocol() + \"localhost:9220\" + '/webmin/data/duniter_export',\n          getImportURL: () => httpProtocol() + \"localhost:9220\" + '/webmin/data/duniter_import',\n          isNodePubliclyReachable: getResource('/webmin/server/reachable'),\n          ws: () => ws(wsProtocol() + \"localhost:9220\" + '/webmin/ws'),\n          summary: getResource('/webmin/summary'),\n          powSummary: getResource('/webmin/summary/pow'),\n          logsExport: (nbLines) => getResource('/webmin/logs/export/' + nbLines)(),\n          server: {\n            http: {\n              start: getResource('/webmin/server/http/start'),\n              stop: getResource('/webmin/server/http/stop'),\n              openUPnP: getResource('/webmin/server/http/upnp/open'),\n              regularUPnP: getResource('/webmin/server/http/upnp/regular')\n            },\n            services: {\n              startAll: getResource('/webmin/server/services/start_all'),\n              stopAll: getResource('/webmin/server/services/stop_all')\n            },\n            sendConf: postResource('/webmin/server/send_conf'),\n            netConf: postResource('/webmin/server/net_conf'),\n            keyConf: postResource('/webmin/server/key_conf'),\n            cpuConf: postResource('/webmin/server/cpu_conf'),\n            testSync: postResource('/webmin/server/test_sync'),\n            startSync: postResource('/webmin/server/start_sync'),\n            previewNext: getResource('/webmin/server/preview_next'),\n            autoConfNetwork: getResource('/webmin/server/auto_conf_network'),\n            resetData: getResource('/webmin/server/reset/data'),\n            republishNewSelfPeer: getResource('/webmin/server/republish_selfpeer')\n          },\n          key: {\n            preview: postResource('/webmin/key/preview')\n          },\n          network: {\n            interfaces: getResource('/webmin/network/interfaces')\n          }\n        }\n      }\n      let server = window.location.hostname;\n      let port = window.location.port;\n      let service = Webmin([server, port].join(':'));\n      service.instance = Webmin;\n      return service;\n    });\n};\n"]}
\ No newline at end of file
+{"version":3,"sources":["AboutController.js","IndexController.js","IdentityController.js","ParametersController.js","RootBlockController.js","SyncController.js","MainController.js","GraphsBlockchainController.js","GraphsController.js","HomeController.js","HomeNetworkController.js","OverviewController.js","SettingsController.js","BackupController.js","CPUController.js","CurrencyController.js","DataController.js","KeyController.js","LogsController.js","LogsSettingsController.js","NetworkController.js","app.config.js","application.js","conf.js","app/js/lib/conf/i18n/en.json","routes.js","translate.js","peer.js","mobileDetector.js","base58.js","bma.js","datetime.js","graphs.js","importer.js","pubkeyGenerator.js","ui_utils.js","webmin.js"],"names":["co","require","module","exports","$scope","version","UIUtils","translate","$parent","title","$http","$state","BMA","Webmin","summary","changeTitle","message","connected","current","go","console","error","err","conf","PubkeyGenerator","setTimeout","$","material_select","accept","modal","css","openModal","dev_autoconf","idty_uid","Math","random","idty_entropy","idty_password","enableInputs","generated","started","start","hosts","remote_ipv4","push","rport","join","remote_ipv6","host_listening","server","sendConf","http","openUPnP","try","stop","previewNext","block","raw","node_address","local_ipv4","local_ipv6","lport","blockchain","block_add","res","number","startServices","services","startAll","cancelAndReset","stopAll","resetData","$timeout","$stateParams","$translate","syncWS","ws","sync_mode","simplified_host","synchronizing","sync_failed","host","localStorage","getItem","port","parseInt","to","wrong_host","remote_current","checkNode","checked_host","sync_error","sync_message","split","checking","testSync","targetHost","toast","startSync","down_percent","apply_percent","sp","translatedErr","on","undefined","data","type","value","errorMessage","msg","republishNewSelfPeer","then","log","changed","$apply","autoConfNetwork","setItem","chunkLen","max","min","sync","nodeOK","$interval","Base58","local_host","local_port","local_sign_pk","decode","pubkey","local_sign_sk","seckey","DEFAULT_CESIUM_SETTINGS","notifications","help","Waves","displayEffect","isMobile","sideNav","menuWidth","openWallet","walletHeight","walletWidth","openNewTab","window","location","origin","position","height","width","show","win","settingsStr","dataStr","settings","JSON","parse","keyPairOK","keypair","signPk","signSk","length","encode","Array","from","node","debug","plugins","rememberMe","stringify","close","innerHeight","innerWidth","mainWindow","focus","aboutWin","showAbout","openWindow","subwin","gui","startServer","server_stopped","regularUPnP","server_started","stopServer","restartServer","checkUpdates","LATEST_RELEASE_URL","get","latest","local_string_version","m","match","localVersion","localSuffix","isLocalAPreRelease","remoteVersion","tag_name","substr","filter","entry","icon","onclick","openExternal","BLOCKS_COUNT","Graph","loading","blocksCount","$watch","newValue","timeGraph","speedGraph","diffGraph","updateGraphs","currency","parameters","blocks","count","speeds","accelerations","medianTimeIncrements","actualDurations","BY_HOUR","i","len","acc","previousPos","dtDiffEval","j","medianTime","availPreviousBlocks","localAvgSpeed","realDuration","isNaN","avgGenTime","parseFloat","toFixed","time","minSpeeds","map","ceil","sqrt","maxSpeeds","floor","minDurations","maxDurations","difficulties","b","powMin","graphs","withTime","withSpeed","withDifficulty","timeGraphs","series","difficultyGraph","enableTabs","menu","peers","update","searching","delayP","Q","delay","network","moment","bindBlockWS","loadPowData","M","monetaryMass","UD","ud0","lastUDBlock","N","membersCount","dividend","pow","unitbase","c","phones","abc","newIdentities","dropdown","constrainwidth","lastNearPoW","totalPoW","sync_state","network_percent","peer_percent","has_pulled","is_pulling","last_pulling","start_block","sync_time","fromNow","powSummary","pow_total","total","pow_mirror","mirror","pow_waiting","waiting","event","last","doneCount","found","hash","cb","websocket","current_currency","current_number","current_membersCount","current_medianTime","current_powMin","reconfigure_network","reconfiguring","interfaces","netinferfaces","auto","local","ipv4","ipv6","remote","upnp","dns","netConf","should_reconfigure","isNodePubliclyReachable","reachable","success","$location","fullReset","Importer","export_link","getExportURL","cpuPower","cpu","updateCPUpower","savingCPU","cpuConf","attr","Peer","peer","p","name","getURL","slice","host_port","getHost","getPort","resetNode","resetNodeAndSync","remote_host","keyConf","reload","_","logsSize","logs","range","logsString","follow","levels","warn","info","trace","keys","level","splice","send","addLogs","autoDigest","pause","newlogs","elem","document","getElementById","scrollTop","scrollHeight","whenOpened","generating","shareLogs","logsExport","link","netinterfaces","firstConf","autoconf","autoconfig","local_neti","toArrayOfAddresses","remote_neti","default_port","saveConf","netiScope","reduce","arr","neti","concat","addresses","addr","address","family","angular","duniterApp","config","$compileProvider","aHrefSanitizationWhitelist","duniterChildCallback","onresize","onResize","url","options","callback","Window","open","screenTop","top","screenLeft","left","Shell","homeControllers","controller","init","jade","e","api_timeout","app","$stateProvider","$urlRouterProvider","state","template","resolve","abstract","dt","stepMax","sigDelay","sigPeriod","sigStock","sigWindow","sigValidity","msValidity","sigQty","xpercent","percentRot","blocksRot","medianTimeBlocks","resolveNetworkAutoConf","startHttp","peering","self","status","errorMsg","otherwise","run","$rootScope","$on","toState","toParams","fromState","fromParams","$translateProvider","translations","preferredLanguage","useSanitizeValueStrategy","json","that","BMA_REGEXP","Object","forEach","key","endpoints","statusTS","keyID","substring","copyValues","obj","copyValuesFrom","getRaw","getBMA","bma","ep","matches","getDns","getIPv4","getIPv6","hasValid4","base","getNamedURL","isReachable","mobilecheck","check","a","test","navigator","userAgent","vendor","opera","alphabet","alphabetMap","charAt","buffer","digits","carry","unshift","digit","string","Uint8Array","input","bytes","factory","$q","httpProtocol","protocol","wsProtocol","getResource","uri","params","when","httpGet","Promise","reject","timeout","suffix","pkeys","queryParams","pkey","prevURI","replace","RegExp","headers","postResource","post","bmaGET","bmaPOST","bmaWS","wsMap","sock","WebSocket","onclose","onerror","opened","openedCallback","onopen","listener","messageType","onmessage","wot","lookup","members","stats","ud","tx","format","speedGraphs","id","offset","getSeries","xValuex","highcharts","chart","zoomType","events","load","text","subtitle","ontouchstart","xAxis","minRange","labels","formatter","yAxis","minorTickInterval","colors","legend","enabled","tooltip","shared","crosshairs","blockFormatter","plotOptions","area","fillColor","linearGradient","x1","y1","x2","y2","stops","Highcharts","getOptions","Color","setOpacity","marker","radius","lineWidth","states","hover","threshold","timeAccelerations","timesInc","inc","html","x","points","point","color","y","Upload","uploadFiles","file","errFiles","f","errFile","upload","getImportURL","importData","response","result","evt","progress","loaded","pubkey_preview","preview","salt","pass","newConcat","previewPubkey","catch","toastRaw","Materialize","translated","addClass","jTabs","tabs","click","href","currentTarget","currentID","path","nbLines","hostname","service","instance"],"mappings":"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B,CAA2B,eAA3B,EAAyDla,QAAQ,gDAAR,CAAzD;AACAia,kBAAgBC,UAAhB,CAA2B,kBAA3B,EAAyDla,QAAQ,4CAAR,CAAzD;AACAia,kBAAgBC,UAAhB,CAA2B,4BAA3B,EAAyDla,QAAQ,sDAAR,CAAzD;AACD,CA3FD;;;;ACAA;;AAEAC,OAAOC,OAAP,GAAiB;;AAEfia,QAAM,gBAAM;;AAEV;AACA,QAAI;AACFrR,aAAOsR,IAAP,GAAcpa,QAAQ,SAAS,GAAT,GAAe,SAAvB,CAAd;AACD,KAFD,CAEE,OAAOqa,CAAP,EAAU,CACX;;AAEDlZ,YAAQ4F,GAAR,CAAY,4BAAZ;;AAEA/G,YAAQ,cAAR;;AAEAmB,YAAQ4F,GAAR,CAAY,kBAAZ;AACD;AAfc,CAAjB;;;;;;ACFA9G,OAAOC,OAAP,GAAiB;AACf8C,UAAQ,EADO,EACH;AACZmC,QAAM,EAFS,EAEH;AACZiT,gBAAc,IAHC;AAIfrW,gBAAc,KAJC;AAKfuY,eAAa,KALE,CAKI;AALJ,CAAjB;;;ACAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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","file":"public/app.js","sourcesContent":["\"use strict\";\n\nconst co = require('co');\n\nmodule.exports = ($scope, version, UIUtils) => {\n\n  $scope.version = version;\n\n  return co(function*() {\n    $scope.$parent.title = yield UIUtils.translate('help.about_duniter.title');\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $http, $state, BMA, Webmin, summary, UIUtils) => {\n\n  UIUtils.changeTitle(summary.version);\n\n  $scope.message = 'index.message.loading';\n  co(function *() {\n    let connected = false;\n    try {\n      let summary = yield Webmin.summary();\n      if (summary.current) {\n        return $state.go('main.home.overview');\n      }\n      return $state.go('configure.choose');\n    }\n    catch (e) {\n      console.error(connected, e);\n      if (!connected) {\n        return $state.go('error', { err: 'err.connection'});\n      }\n      return $state.go('error', { err: e });\n    }\n  });\n};\n","\"use strict\";\n\nvar conf = require('js/lib/conf/conf');\n\nmodule.exports = ($scope, $state, PubkeyGenerator) => {\n\n  setTimeout(() => {\n    $('select').material_select();\n  }, 500);\n\n  $scope.accept = () => {\n    let modal = $('#modal1');\n    if (modal.css('display') == 'none') {\n      $('#modal1').openModal();\n    }\n  };\n\n  PubkeyGenerator($scope);\n\n  if (conf.dev_autoconf) {\n    $scope.$parent.conf.idty_uid = 'dev_' + ~~(Math.random() * 2147483647);\n    $scope.$parent.conf.idty_entropy = ~~(Math.random() * 2147483647) + \"\";\n    $scope.$parent.conf.idty_password = ~~(Math.random() * 2147483647) + \"\";\n    $state.go('configure.create.network');\n  }\n};\n","\"use strict\";\n\nmodule.exports = ($scope, UIUtils) => {\n\n  UIUtils.enableInputs();\n};\n","\"use strict\";\n\nvar co = require('co');\nvar conf = require('js/lib/conf/conf');\n\nmodule.exports = ($scope, $http, $state, BMA, Webmin) => {\n\n  $scope.generated = '';\n  $scope.started = false;\n  $scope.message = 'configuration.create_root.need_a_try';\n\n  $scope.start = () => co(function *() {\n    try {\n      let hosts = [];\n      if ($scope.$parent.conf.remote_ipv4) {\n        hosts.push([$scope.$parent.conf.remote_ipv4, $scope.$parent.conf.rport].join(':'));\n      }\n      if ($scope.$parent.conf.remote_ipv6) {\n        hosts.push([\"[\" + $scope.$parent.conf.remote_ipv6 + \"]\", $scope.$parent.conf.rport].join(':'));\n      }\n      $scope.host_listening = hosts.join('\\n');\n      $scope.started = true;\n      yield Webmin.server.sendConf({\n        conf: $scope.$parent.conf\n      });\n      yield Webmin.server.http.start();\n      yield Webmin.server.http.openUPnP();\n      yield $scope.try();\n    } catch (e) {\n      $scope.message = e.message;\n    }\n  });\n\n  $scope.stop = () => co(function *() {\n    yield Webmin.server.http.stop();\n    $scope.started = false;\n  });\n\n  $scope.try = () => co(function *() {\n    try {\n      $scope.block = yield Webmin.server.previewNext();\n      $scope.generated = $scope.block.raw;\n      $scope.message = '';\n    } catch (e) {\n      $scope.message = e.message;\n    }\n  });\n\n  $scope.accept = () => co(function *() {\n    const node_address = $scope.$parent.conf.local_ipv4 || $scope.$parent.conf.local_ipv6;\n    let res = yield BMA(node_address + \":\" + $scope.$parent.conf.lport).blockchain.block_add({\n      block: $scope.generated\n    });\n    if (res.number == 0) {\n      // We successfully started the blockchain\n      yield $scope.startServices();\n    }\n  });\n\n  $scope.startServices = () => co(function *() {\n    yield Webmin.server.services.startAll();\n    $state.go('index');\n  });\n\n  $scope.cancelAndReset = () => co(function *() {\n    yield Webmin.server.http.stop();\n    yield Webmin.server.services.stopAll();\n    yield Webmin.server.resetData();\n    $state.go('index');\n  });\n\n  return co(function *() {\n    try {\n      yield $scope.start();\n      yield $scope.try();\n      $scope.started = true;\n    } catch (e) {\n      $scope.started = false;\n    }\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $http, $state, $timeout, $stateParams, $translate, BMA, UIUtils, Webmin) => {\n\n  let syncWS = Webmin.ws();\n\n  UIUtils.enableInputs();\n  $scope.sync_mode = 'simplified';\n  $scope.simplified_host = '';\n  $scope.synchronizing = false;\n  $scope.sync_failed = false;\n  $scope.host = $stateParams.host || localStorage.getItem('sync_host') || '';\n  $scope.port = parseInt($stateParams.port) || parseInt(localStorage.getItem('sync_port')) || 8999;\n  $scope.to = parseInt($stateParams.to);\n  $scope.wrong_host = false;\n  $scope.remote_current = null;\n\n  $scope.checkNode = () => co(function *() {\n    $scope.checked_host = '';\n    $scope.sync_error = '';\n    $scope.sync_message = '';\n    if ($scope.sync_mode == 'simplified') {\n      $scope.host = $scope.simplified_host.split(':')[0];\n      $scope.port = parseInt($scope.simplified_host.split(':')[1]);\n    }\n    $scope.checking = true;\n    try {\n      const current = yield Webmin.server.testSync({\n        host: $scope.host,\n        port: $scope.port\n      });\n      const targetHost = [$scope.host, $scope.port].join(':');\n      if (current) {\n        $scope.remote_current = current;\n        $scope.checked_host = targetHost;\n      }\n      UIUtils.toast('sync.ready.node.part1');\n      $timeout(() => {\n        if (!$scope.synchronizing) {\n          UIUtils.toast('sync.ready.node.part2');\n        }\n      }, 6000);\n    } catch (e) {\n      $scope.sync_error = 'sync.error.unreachable.try.another.node';\n    }\n    $scope.checking = false;\n    return $scope.checked_host ? true : false;\n  });\n\n  $scope.startSync = () => {\n    $scope.down_percent = 0;\n    $scope.apply_percent = 0;\n    $scope.sync_failed = false;\n    $scope.synchronizing = true;\n    return co(function *() {\n      $scope.sync_message = (yield $translate('sync.started.node')) + ' ' + $scope.checked_host;\n      let sp = $scope.checked_host.split(':');\n      let translatedErr = yield $translate('err.sync.interrupted');\n      syncWS.on(undefined, (data) => {\n        if (data.type == 'sync') {\n          $scope.down_percent = 100;\n          $scope.apply_percent = 100;\n          $scope.sync_failed = data.value;\n          let errorMessage = data.msg && (data.msg.message || data.msg);\n          errorMessage = translatedErr + ' « ' + errorMessage + ' »';\n          Webmin.server.republishNewSelfPeer()\n            .then(() => console.log('Peer republished'));\n          if (data.value === true) {\n            $state.go('index');\n          } else {\n            $state.go('error', { err: (errorMessage) });\n          }\n        } else {\n          let changed = true;\n          if (data.type == 'download' && $scope.down_percent != data.value) {\n            $scope.down_percent = data.value;\n            changed = true;\n          }\n          if (data.type == 'applied' && $scope.apply_percent != data.value) {\n            $scope.apply_percent = data.value;\n            changed = true;\n          }\n          if (changed) {\n            $scope.$apply();\n          }\n        }\n      });\n      yield Webmin.server.autoConfNetwork();\n      localStorage.setItem(\"sync_host\", sp[0]);\n      localStorage.setItem(\"sync_port\", sp[1]);\n      Webmin.server.startSync({\n        host: sp[0],\n        port: sp[1],\n        to: $scope.to,\n        chunkLen: Math.max(500, Math.min(25, $scope.remote_current ? $scope.remote_current.number / 100 : 0))\n      });\n    });\n  };\n\n  // Autostart\n  if ($scope.host && $scope.port && $stateParams.sync) {\n    return co(function *() {\n      let nodeOK = yield $scope.checkNode();\n      if (nodeOK) {\n        return $scope.startSync();\n      }\n    });\n  }\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $state, $http, $timeout, $interval, BMA, Webmin, summary, UIUtils, Base58) => {\n\n  const local_host = summary.host.split(':')[0]; // We suppose IPv4 configuration\n  const local_port = summary.host.split(':')[1];\n  const local_sign_pk = Base58.decode(summary.pubkey);\n  const local_sign_sk = Base58.decode(summary.seckey);\n\n  const DEFAULT_CESIUM_SETTINGS = {\n    \"useRelative\": true,\n    \"timeWarningExpire\": 2592000,\n    \"useLocalStorage\": true,\n    \"rememberMe\": true,\n    \"plugins\": {},\n    \"node\": {\n      \"host\": local_host,\n      \"port\": local_port\n    },\n    \"showUDHistory\": true\n  };\n\n  $scope.notifications = {\n    help: []\n  };\n\n  Waves.displayEffect();\n\n  var isMobile = require('js/lib/mobileDetector');\n  if (isMobile()) {\n    $(\".button-collapse\").sideNav({\n      menuWidth: 280\n    });\n  }\n\n  UIUtils.changeTitle(summary.version);\n\n  $scope.openWallet = () => {\n\n    let walletHeight = parseInt(localStorage.getItem('wallet_height')) || 1000;\n    let walletWidth = parseInt(localStorage.getItem('wallet_width')) || 1400;\n\n    openNewTab (window.location.origin + '/cesium/index.html', {\n      position: 'center',\n      height: walletHeight,\n      width: walletWidth,\n      show: false\n    }, function(win) {\n      let settingsStr = win.window.localStorage.getItem('CESIUM_SETTINGS');\n      let dataStr = win.window.localStorage.getItem('CESIUM_DATA');\n      let settings = (settingsStr && JSON.parse(settingsStr));\n      let data = (dataStr && JSON.parse(dataStr));\n      let keyPairOK = data && data.keypair && data.keypair.signPk && data.keypair.signSk && true;\n      if (keyPairOK) {\n        data.keypair.signPk.length = local_sign_pk.length;\n        data.keypair.signSk.length = local_sign_sk.length;\n        keyPairOK = Base58.encode(Array.from(data.keypair.signPk)) == summary.pubkey\n          && Base58.encode(Array.from(data.keypair.signSk)) == summary.seckey\n          && data.pubkey == summary.pubkey;\n      }\n      if (!data\n        || !keyPairOK\n        || settings.node.host != local_host\n        || settings.node.port != local_port) {\n        settings = settings || DEFAULT_CESIUM_SETTINGS;\n        data = data || {};\n        console.debug('Configuring Cesium...');\n        settings.node = {\n          \"host\": local_host,\n          \"port\": local_port\n        };\n        settings.plugins = {};\n        settings.rememberMe = true;\n        data.pubkey = summary.pubkey;\n        data.keypair = {\n          signPk: local_sign_pk,\n          signSk: local_sign_sk\n        };\n        win.window.localStorage.setItem('CESIUM_SETTINGS', JSON.stringify(settings));\n        win.window.localStorage.setItem('CESIUM_DATA', JSON.stringify(data));\n        win.on('closed', () => {\n          // Reopen the wallet\n          $timeout(() => $scope.openWallet(), 1);\n        });\n        win.close();\n      } else {\n        // Cesium is correctly configured for the network part\n        win.show();\n        win.on('closed', function() {\n          localStorage.setItem('wallet_height', win.window.innerHeight - 8); // Seems to always have 8 pixels more\n          localStorage.setItem('wallet_width', win.window.innerWidth - 16); // Seems to always have 16 pixels more\n          mainWindow.focus();\n        });\n      }\n    });\n  };\n\n  let aboutWin;\n\n  $scope.showAbout = () => {\n    if (aboutWin) {\n      aboutWin.focus();\n    } else {\n      openWindow(window.location.origin + '/#/about', {\n        position: 'center',\n        height: 380,\n        width: 510\n      }, function(subwin) {\n        subwin.window.gui = window.gui;\n        subwin.on('closed', () => {\n          aboutWin = null;\n          mainWindow.focus();\n        });\n        aboutWin = subwin;\n      });\n    }\n  };\n\n  $scope.startServer = () => {\n    $scope.server_stopped = false;\n    return co(function *() {\n      yield Webmin.server.http.start();\n      yield Webmin.server.services.startAll();\n      yield Webmin.server.http.regularUPnP();\n      $scope.server_started = true;\n    });\n  };\n\n  $scope.stopServer = () => {\n    $scope.server_started = false;\n    return co(function *() {\n      yield Webmin.server.http.stop();\n      yield Webmin.server.services.stopAll();\n      $scope.server_stopped = true;\n    });\n  };\n\n  $scope.restartServer = () => {\n    return co(function *() {\n      yield $scope.stopServer();\n      yield $scope.startServer();\n    });\n  };\n\n  function checkUpdates() {\n    const LATEST_RELEASE_URL = 'https://api.github.com/repos/duniter/duniter/releases/latest';\n    co(function*() {\n      try {\n        const latest = yield $http.get(LATEST_RELEASE_URL);\n        const local_string_version = 'v' + summary.version;\n        const m = local_string_version.match(/^v([\\d.]+)([ab]?\\d*)/);\n        const localVersion = (m && m[1]) || \"\";\n        const localSuffix = m && m[2];\n        const isLocalAPreRelease = !!(localSuffix);\n        const remoteVersion = latest.data.tag_name.substr(1);\n        if (localVersion < remoteVersion || (localVersion == remoteVersion && isLocalAPreRelease)) {\n          if ($scope.notifications.help.filter((entry) => entry.message == 'help.new_version_available').length == 0) {\n            $scope.notifications.help.push({\n              icon: 'play_for_work',\n              message: 'help.new_version_available',\n              onclick: () => openExternal('https://github.com/duniter/duniter/releases/latest')\n            });\n          }\n        }\n      } catch (e) {\n        console.error(e);\n      }\n    });\n  }\n\n  $interval(checkUpdates, 1000 * 3600);\n  $timeout(checkUpdates, 1000);\n};\n","\"use strict\";\n\nconst BLOCKS_COUNT = 40;\n\nvar co = require('co');\n\nmodule.exports = ($scope, $state, $timeout, BMA, Webmin, UIUtils, Graph) => {\n\n  let data = {};\n\n  $scope.loading = true;\n  $scope.blocksCount = $scope.blocksCount || BLOCKS_COUNT;\n\n  $scope.$watch('withTime', (newValue) => {\n    if (newValue) {\n      timeGraph();\n    }\n  });\n\n  $scope.$watch('withSpeed', (newValue) => {\n    if (newValue) {\n      speedGraph();\n    }\n  });\n\n  $scope.$watch('withDifficulty', (newValue) => {\n    if (newValue) {\n      diffGraph();\n    }\n  });\n\n  $scope.updateGraphs = () => {\n    return co(function *() {\n      let summary = yield Webmin.summary();\n      let parameters = yield BMA(summary.host).currency.parameters();\n      let blocks = yield BMA(summary.host).blockchain.blocks({\n        count: $scope.blocksCount,\n        from: Math.max(0, summary.current.number - $scope.blocksCount)\n      });\n      let speeds = [], accelerations = [], medianTimeIncrements = [], actualDurations = [];\n      let BY_HOUR = 3600;\n      for (let i = 0, len = blocks.length; i < len; i++) {\n        let block = blocks[i];\n        let acc = 0;\n        let previousPos = Math.max(0, i - parameters.dtDiffEval);\n        for (let j = previousPos; j < i; j++) {\n          acc += (blocks[j+1].medianTime - blocks[j].medianTime);\n        }\n        let availPreviousBlocks = i - 1 - previousPos;\n        let localAvgSpeed = acc / (availPreviousBlocks || 1);\n        let realDuration = !isNaN(localAvgSpeed) && localAvgSpeed != 0 ? localAvgSpeed : parameters.avgGenTime;\n        actualDurations.push(parseFloat((realDuration).toFixed(2)));\n        speeds.push(parseFloat((BY_HOUR/realDuration).toFixed(2)));\n        accelerations.push(block.time - block.medianTime);\n        medianTimeIncrements.push(block.medianTime - (i ? blocks[i-1].medianTime : block.medianTime));\n      }\n      data.summary = summary;\n      data.speeds = speeds;\n      data.accelerations = accelerations;\n      data.medianTimeIncrements = medianTimeIncrements;\n      data.actualDurations = actualDurations;\n      data.minSpeeds = speeds.map(() => parseFloat((BY_HOUR/Math.ceil(parameters.avgGenTime * Math.sqrt(1.066))).toFixed(2)));\n      data.maxSpeeds = speeds.map(() => parseFloat((BY_HOUR/Math.floor(parameters.avgGenTime / Math.sqrt(1.066))).toFixed(2)));\n      data.minDurations = speeds.map(() => parseFloat(((parameters.avgGenTime / 1.066)).toFixed(2)));\n      data.maxDurations = speeds.map(() => parseFloat(((parameters.avgGenTime * 1.066)).toFixed(2)));\n      data.difficulties = blocks.map((b) => b.powMin);\n\n      let graphs = [];\n      if ($scope.withTime) graphs.push(timeGraph);\n      if ($scope.withSpeed) graphs.push(speedGraph);\n      if ($scope.withDifficulty) graphs.push(diffGraph);\n      for (let i = 0, len = graphs.length; i < len; i++) {\n        graphs[i]();\n      }\n      $scope.loading = false;\n    });\n  };\n\n  function timeGraph() {\n    if ($scope.withTime) {\n      Graph.timeGraphs('#timeGraph', Math.max(0, data.summary.current.number - $scope.blocksCount + 1), data.accelerations, data.medianTimeIncrements, data.actualDurations, data.minDurations, data.maxDurations);\n    }\n  }\n\n  function speedGraph() {\n    if ($scope.withSpeed) {\n      Graph.speedGraph('#speedGraph', Math.max(0, data.summary.current.number - $scope.blocksCount), data.speeds, data.minSpeeds, data.maxSpeeds, (series) => {\n        $scope.series = series;\n      });\n    }\n  }\n\n  function diffGraph() {\n    if ($scope.withDifficulty) {\n      Graph.difficultyGraph('#difficultyGraph', Math.max(0, data.summary.current.number - $scope.blocksCount), data.difficulties);\n    }\n  }\n\n  return co(function *() {\n    yield $scope.updateGraphs();\n    $scope.withTime = true;\n    $scope.withDifficulty = true;\n    $scope.$apply();\n  });\n};\n","\"use strict\";\n\nmodule.exports = ($scope, UIUtils) => {\n\n  UIUtils.enableTabs();\n\n  $scope.$parent.menu = 'graphs';\n};\n","\"use strict\";\n\nmodule.exports = ($scope, UIUtils) => {\n\n  UIUtils.enableTabs();\n\n  $scope.$parent.menu = 'home';\n};\n","\"use strict\";\n\nmodule.exports = ($scope, BMA, peers, summary) => {\n\n  $scope.peers = peers.peers;\n\n  const co = require('co');\n\n  $scope.update = () => co(function *() {\n    $scope.searching = true;\n    let delayP = Q.delay(500);\n    $scope.peers = (yield BMA(summary.host).network.peers()).peers;\n    yield delayP;\n    $scope.searching = false;\n    $scope.$apply();\n  });\n};\n","\"use strict\";\n\nmodule.exports = ($scope, $interval, BMA, Webmin, UIUtils, summary, ws) => {\n\n  let co = require('co');\n  let moment = require('moment');\n\n  bindBlockWS(() => {\n    $scope.loadPowData();\n  });\n  let M = summary.current.monetaryMass || 0;\n  // const nbUDperYear = Math.ceil(365.25 * 3600 * 24 / summary.parameters.dt);\n  // const globalC = Math.round(Math.pow(1 + summary.parameters.c, nbUDperYear) * 100) / 100 - 1;\n  let UD = summary.parameters.ud0;\n  if (summary.lastUDBlock) {\n    const N = summary.current.membersCount;\n    UD = parseInt((summary.lastUDBlock.dividend * Math.pow(10, summary.lastUDBlock.unitbase) + Math.pow(summary.parameters.c, 2) * M / N).toFixed(0));\n  }\n  $scope.current = summary.current;\n  $scope.monetaryMass = parseInt(M / UD) || 0;\n  $scope.server_started = true;\n  $scope.server_stopped = false;\n  $scope.phones = [];\n  $scope.abc = 'abcdef';\n  $scope.newIdentities = 2;\n\n  $(\".dropdown-button\").dropdown({ constrainwidth: false });\n\n  $scope.lastNearPoW = '';\n  $scope.totalPoW = '...';\n  $scope.sync_state = 'home.pulling.state.unkown';\n  $scope.network_percent = 0;\n  $scope.peer_percent = 0;\n  $scope.has_pulled = false;\n  $scope.is_pulling = false;\n  $scope.last_pulling = 0;\n  let start_block = 0;\n\n  $interval(() => {\n    if ($scope.last_pulling) {\n      $scope.sync_state = $scope.is_pulling ? 'home.pulling.state.syncing' : 'home.pulling.state.synced';\n      $scope.sync_time = moment($scope.last_pulling).fromNow();\n    }\n  }, 1000);\n\n  $scope.loadPowData = () => co(function*() {\n    let res = yield Webmin.powSummary();\n    $scope.pow_total = res.total;\n    $scope.pow_mirror = res.mirror;\n    $scope.pow_waiting = res.waiting;\n  });\n\n  ws.on(undefined, (data) => {\n    if (data.type === 'started') {\n      $scope.server_started = true;\n      $scope.server_stopped = false;\n      bindBlockWS();\n      UIUtils.toast('general.server.started');\n      $scope.$apply();\n    }\n    if (data.type === 'stopped') {\n      $scope.server_stopped = true;\n      $scope.server_started = false;\n      UIUtils.toast('general.server.stopped');\n      $scope.$apply();\n    }\n    if (data.type === 'pulling') {\n      $scope.is_pulling = true;\n      $scope.has_pulled = true;\n      const event = data.value;\n      if (($scope.last_pulling && event.type === 'start') || (!$scope.last_pulling && event.type !== 'end')) {\n        $scope.last_pulling = moment();\n      }\n      if (event.type === 'peer') {\n        $scope.network_percent = parseInt((event.data.number + 1) / event.data.length * 100);\n        $scope.peer_percent = 100;\n        start_block = 0;\n      }\n      if (event.type === 'applying') {\n        if (!start_block) {\n          start_block = event.data.number;\n        }\n        const total = event.data.last - start_block;\n        const doneCount = event.data.number - start_block;\n        $scope.peer_percent = parseInt(doneCount / total * 100);\n      }\n      if (event.type === 'end') {\n        $scope.is_pulling = false;\n        $scope.network_percent = 0;\n        $scope.peer_percent = 0;\n        start_block = 0;\n      }\n    }\n    if (data.type === 'pow') {\n      const pow = data.value;\n      if (pow.found) {\n        $scope.pow_waiting = true;\n        $scope.lastNearPoW = '#' + pow.hash;\n        $scope.$apply();\n      } else {\n        $scope.pow_waiting = false;\n        $scope.lastNearPoW = '#' + pow.hash;\n        $scope.$apply();\n      }\n    }\n  });\n\n  function bindBlockWS(cb) {\n    BMA(summary.host).websocket.block().on(undefined, (block) => {\n      $scope.current_currency = block.currency;\n      $scope.current_number = block.number;\n      $scope.current_membersCount = block.membersCount;\n      $scope.current_medianTime = block.medianTime;\n      $scope.current_powMin = block.powMin;\n      let M = summary.current.monetaryMass || 0;\n      let UD = summary.parameters.ud0;\n      if (summary.lastUDBlock) {\n        const N = summary.current.membersCount;\n        UD = parseInt((summary.lastUDBlock.dividend * Math.pow(10, summary.lastUDBlock.unitbase) + Math.pow(summary.parameters.c, 2) * M / N).toFixed(0));\n      }\n      $scope.monetaryMass = parseInt(M / UD) || 0;\n      $scope.$apply();\n      cb && cb();\n    });\n  }\n  \n  $scope.reconfigure_network = () => co(function *() {\n    $scope.reconfiguring = true;\n    let delay = Q.delay(1000);\n    try {\n      let netinferfaces = yield Webmin.network.interfaces();\n      let conf = {};\n      conf.local_ipv4 = netinferfaces.auto.local.ipv4 || '';\n      conf.local_ipv6 = netinferfaces.auto.local.ipv6 || '';\n      conf.remote_ipv4 = netinferfaces.auto.remote.ipv4 || '';\n      conf.remote_ipv6 = netinferfaces.auto.remote.ipv6 || '';\n      conf.lport = netinferfaces.auto.local.port || 9330;\n      conf.rport = netinferfaces.auto.remote.port || 9330;\n      conf.upnp = netinferfaces.auto.remote.upnp || false;\n      conf.dns = netinferfaces.auto.remote.dns || '';\n      yield Webmin.server.netConf({\n        conf: conf\n      });\n      yield delay;\n      $scope.should_reconfigure = false;\n      UIUtils.toast('general.network.reconf_ok');\n      $scope.$apply();\n    } catch (e) {\n      yield delay;\n      $scope.reconfiguring = false;\n      $scope.$apply();\n    }\n  });\n\n  return co(function *() {\n    yield $scope.startServer();\n    try {\n      yield $scope.loadPowData();\n      const reachable = yield Webmin.isNodePubliclyReachable();\n      if (!reachable || !reachable.success) {\n        $scope.should_reconfigure = true;\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $http, $state, $location, BMA, Webmin, UIUtils) => {\n\n  UIUtils.enableTabs();\n\n  $scope.$parent.conf = $scope.$parent.conf || {};\n  $scope.$parent.menu = 'settings';\n\n  $(\".dropdown-button\").dropdown({ constrainwidth: false });\n\n  $scope.fullReset = () => co(function *() {\n    yield Webmin.server.http.stop();\n    yield Webmin.server.services.stopAll();\n    yield Webmin.server.resetData();\n    $state.go('index');\n  });\n};\n","\"use strict\";\n\nmodule.exports = ($scope, Importer, Webmin) => {\n\n  $scope.export_link = Webmin.getExportURL();\n\n  Importer($scope);\n};\n","\"use strict\";\n\nconst co = require('co');\n\nmodule.exports = ($scope, $http, $state, $timeout, UIUtils, summary, Webmin) => {\n\n  $scope.cpuPower = parseInt(summary.conf.cpu * 100);\n\n  $scope.updateCPUpower = () => co(function *() {\n    $scope.savingCPU = true;\n    yield Webmin.server.cpuConf({\n      cpu: parseFloat(($scope.cpuPower / 100).toFixed(2))\n    });\n    UIUtils.toast('settings.cpu.saved');\n    $scope.savingCPU = false;\n  });\n};\n","\"use strict\";\n\nmodule.exports = ($scope, conf, UIUtils) => {\n\n  $scope.$parent.conf = conf;\n\n  UIUtils.enableInputs();\n  $('input').attr('disabled', 'disabled');\n};\n","\"use strict\";\n\nvar co = require('co');\nvar Peer = require('js/lib/entity/peer');\n\nmodule.exports = ($scope, $http, $state, Webmin, peers) => {\n\n  $scope.peers = peers.map((peer) => {\n    let p = new Peer(peer);\n    return {\n      name: [p.getURL(), \"(\" + p.pubkey.slice(0, 6) + \")\"].join(' '),\n      host_port: [p.getHost(), p.getPort()].join('|')\n    }\n  });\n\n  $scope.resetNode = () => {\n    $('#modalReset').openModal();\n  };\n\n  $scope.resetNodeAndSync = () => co(function *() {\n    yield Webmin.server.http.stop();\n    yield Webmin.server.services.stopAll();\n    yield Webmin.server.resetData();\n    let sp = $scope.remote_host.split('|');\n    $state.go('sync', {\n      host: sp[0],\n      port: sp[1],\n      sync: true\n    })\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\n\nmodule.exports = ($scope, $state, Webmin, summary, PubkeyGenerator) => {\n\n  $scope.pubkey = summary.pubkey;\n\n  setTimeout(() => {\n    $('select').material_select();\n  }, 500);\n\n  $scope.accept = () => co(function *() {\n    yield Webmin.server.keyConf({\n      conf: $scope.$parent.conf\n    });\n    $scope.$parent.conf.idty_entropy = '';\n    $scope.$parent.conf.idty_password = '';\n    $state.reload();\n    $scope.restartServer();\n  });\n\n  PubkeyGenerator($scope);\n};\n","\"use strict\";\n\nmodule.exports = ($scope, ws, UIUtils) => {\n\n  UIUtils.enableTabs();\n\n  let co = require('co');\n  let _ = require('underscore');\n\n  // Default values\n  if (!localStorage.getItem('log_error')) localStorage.setItem('log_error', true);\n  if (!localStorage.getItem('log_warn')) localStorage.setItem('log_warn', true);\n  if (!localStorage.getItem('log_info')) localStorage.setItem('log_info', true);\n\n  $scope.logsSize = parseInt(localStorage.getItem('log_size')) || 100;\n  $scope.logs = _.range(0, $scope.logsSize).map(() => \"\");\n  $scope.logsString = \"\";\n  $scope.follow = true;\n  $scope.levels = {\n    error: localStorage.getItem('log_error') == \"true\",\n    warn: localStorage.getItem('log_warn') == \"true\",\n    info: localStorage.getItem('log_info') == \"true\",\n    debug: localStorage.getItem('log_debug') == \"true\",\n    trace: localStorage.getItem('log_trace') == \"true\"\n  };\n\n  _.keys($scope.levels).map((level) => {\n    $scope.$watch('levels.' + level, (newValue) => {\n      localStorage.setItem('log_' + level, newValue);\n      $scope.logs.splice(0, $scope.logs.length);\n      ws.send();\n    });\n  });\n\n  $scope.$watch('logsSize', (newValue) => {\n    localStorage.setItem('log_size', newValue);\n    addLogs({ value: [] }, true);\n  });\n\n  ws.on('log', addLogs);\n\n  function addLogs(res, autoDigest) {\n\n    if (!$scope.pause) {\n      let newlogs = _.filter(res.value, (log) => $scope.levels[log.level]);\n      // Add at max LOGS_FLOW_SIZE new lines\n      newlogs.splice(0, Math.max(0, newlogs.length - $scope.logsSize));\n      // Add just enough space for incoming logs\n      $scope.logs.splice(0, Math.max(0, $scope.logs.length + newlogs.length - $scope.logsSize));\n      for (let i = 0, len = newlogs.length; i < len; i++) {\n        let log = newlogs[i];\n        $scope.logs.push(log);\n      }\n      if (!autoDigest) {\n        $scope.$apply();\n      }\n    }\n\n    if ($scope.follow) {\n      var elem = document.getElementById('logs');\n      if (elem) {\n        elem.scrollTop = elem.scrollHeight;\n      }\n    }\n  }\n\n  return co(function *() {\n    yield ws.whenOpened();\n    ws.send();\n  });\n};\n","\"use strict\";\n\nconst co = require('co');\n\nmodule.exports = ($scope, Webmin) => {\n  \n  $scope.generating = false;\n  $scope.error = '';\n\n  $scope.shareLogs = () => co(function*() {\n    if (!$scope.generating) {\n      try {\n        $scope.error = '';\n        $scope.generating = true;\n        const res = yield Webmin.logsExport(2000);\n        $scope.link = res.link;\n      } catch (e) {\n        $scope.error = (e && e.message) || e || 'Unknown error';\n      }\n      $scope.generating = false;\n    }\n  });\n};\n","\"use strict\";\n\nvar co = require('co');\nvar conf = require('js/lib/conf/conf');\n\nmodule.exports = ($scope, $http, $state, Webmin, UIUtils, netinterfaces, firstConf) => {\n\n  let autoconf = netinterfaces.auto;\n\n  $scope.autoconfig = () => {\n    $scope.$parent.conf.local_ipv4 = autoconf.local.ipv4 || '';\n    $scope.$parent.conf.local_ipv6 = autoconf.local.ipv6 || '';\n    $scope.$parent.conf.remote_ipv4 = autoconf.remote.ipv4 || '';\n    $scope.$parent.conf.remote_ipv6 = autoconf.remote.ipv6 || '';\n    $scope.$parent.conf.lport = autoconf.local.port || $scope.$parent.conf.lport;\n    $scope.$parent.conf.rport = autoconf.remote.port || $scope.$parent.conf.rport;\n    $scope.$parent.conf.upnp = autoconf.remote.upnp || $scope.$parent.conf.upnp;\n    $scope.$parent.conf.dns = autoconf.remote.dns || $scope.$parent.conf.dns;\n\n    if (conf.dev_autoconf && firstConf) {\n      $state.go('configure.create.root');\n    }\n  };\n\n  $scope.local_neti = toArrayOfAddresses(netinterfaces.local);\n  $scope.remote_neti = toArrayOfAddresses(netinterfaces.remote);\n\n  $scope.$parent.conf = $scope.$parent.conf || {};\n  $scope.$parent.conf.local_ipv4 = netinterfaces.conf.local.ipv4;\n  $scope.$parent.conf.local_ipv6 = netinterfaces.conf.local.ipv6;\n  $scope.$parent.conf.remote_ipv4 = netinterfaces.conf.remote.ipv4;\n  $scope.$parent.conf.remote_ipv6 = netinterfaces.conf.remote.ipv6;\n  $scope.$parent.conf.lport = netinterfaces.conf.local.port;\n  $scope.$parent.conf.rport = netinterfaces.conf.remote.port;\n  $scope.$parent.conf.upnp = netinterfaces.conf.remote.upnp;\n  $scope.$parent.conf.dns = netinterfaces.conf.remote.dns;\n\n  UIUtils.enableInputs();\n\n  if (firstConf) {\n    $scope.$parent.conf.lport = conf.default_port;\n    $scope.$parent.conf.rport = conf.default_port;\n    // Trigger autoconfig\n    $scope.autoconfig();\n  }\n\n  $scope.saveConf = () => co(function *() {\n    $scope.$parent.conf.lport = $scope.$parent.conf.rport;\n    $scope.$parent.conf.remote_ipv6 = $scope.$parent.conf.local_ipv6;\n    yield Webmin.server.netConf({\n      conf: $scope.$parent.conf\n    });\n    UIUtils.toast('settings.network.saved');\n  });\n};\n\nfunction toArrayOfAddresses(netiScope) {\n  return netiScope.reduce(function(arr, neti) {\n    return arr.concat(neti.addresses.map((addr) => {\n      return {\n        name: [neti.name, addr.address].join(' '),\n        addr: addr.address,\n        family: addr.family\n      };\n    }))\n  }, []);\n}\n","module.exports = () => {\n  require('./services/bma')(angular);\n  require('./services/webmin')(angular);\n\n  const duniterApp = angular.module('duniterUIApp', [\n    'ui.router',\n    'homeControllers',\n    'pascalprecht.translate'\n  ]);\n\n  duniterApp.config( [\n    '$compileProvider', ($compileProvider) => $compileProvider.aHrefSanitizationWhitelist(/^\\s*(https?|data):/)\n  ]);\n\n  require('./lib/conf/translate')(duniterApp);\n  require('./lib/conf/routes')(duniterApp);\n  require('js/services/datetime')(duniterApp);\n  require('js/services/ui_utils')(duniterApp);\n  require('js/services/graphs')(duniterApp);\n  require('js/services/pubkeyGenerator')(duniterApp);\n  require('js/services/importer')(duniterApp);\n  require('js/services/base58')(duniterApp);\n\n  window.duniterChildCallback = function(gui) {\n    window.gui = gui;\n  };\n\n  window.onresize = () => {\n    window.onResize && window.onResize(window);\n  };\n\n  window.openWindow = function openWindow(url, options, callback) {\n    if (window.gui) {\n      // Duniter Desktop\n      window.gui.Window.open(url, options, callback);\n    } else {\n      // Browser\n      let innerHeight = options.height || 375;\n      let innerWidth = options.width || 500;\n      window.open(url, '_blank ', [\n        'top=' + (window.screenTop + (options.top || 200)),\n        'left=' + (window.screenLeft + (options.left || 200)),\n        'height=' + (innerHeight + 8),\n        'width=' + (innerWidth + 16),\n        'menubar=no',\n        'status=no'\n      ].join(','));\n    }\n  };\n\n  window.openNewTab = function openWindow(url, options, callback) {\n    if (window.gui) {\n      // Duniter Desktop\n      window.gui.Window.open(url, options, callback);\n    } else {\n      // Browser\n      window.open(url, '_blank ');\n    }\n  };\n\n  window.openExternal = function openExternal(url) {\n    if (window.gui) {\n      window.gui.Shell.openExternal(url);\n    } else {\n      window.open(url, '_blank');\n    }\n  };\n\n  let homeControllers = angular.module('homeControllers', ['duniter.services.bma', 'duniter.services.webmin', 'ngFileUpload']);\n\n  homeControllers.controller('IndexController',            require('./controllers/IndexController'));\n  homeControllers.controller('AboutController',            require('./controllers/AboutController'));\n  homeControllers.controller('IdentityController',         require('./controllers/init/create/IdentityController'));\n  homeControllers.controller('ParametersController',       require('./controllers/init/create/ParametersController'));\n  homeControllers.controller('RootBlockController',        require('./controllers/init/create/RootBlockController'));\n  homeControllers.controller('SyncController',             require('./controllers/init/sync/SyncController'));\n  homeControllers.controller('MainController',             require('./controllers/main/MainController'));\n  homeControllers.controller('HomeController',             require('./controllers/main/home/HomeController'));\n  homeControllers.controller('OverviewController',         require('./controllers/main/home/tabs/OverviewController'));\n  homeControllers.controller('HomeNetworkController',      require('./controllers/main/home/tabs/HomeNetworkController'));\n  homeControllers.controller('LogsController',             require('./controllers/main/settings/tabs/LogsController'));\n  homeControllers.controller('LogsSettingsController',     require('./controllers/main/settings/tabs/LogsSettingsController'));\n  homeControllers.controller('NetworkController',          require('./controllers/main/settings/tabs/NetworkController'));\n  homeControllers.controller('SettingsController',         require('./controllers/main/settings/SettingsController'));\n  homeControllers.controller('DataController',             require('./controllers/main/settings/tabs/DataController'));\n  homeControllers.controller('BackupController',           require('./controllers/main/settings/tabs/BackupController'));\n  homeControllers.controller('CPUController',              require('./controllers/main/settings/tabs/CPUController'));\n  homeControllers.controller('CurrencyController',         require('./controllers/main/settings/tabs/CurrencyController'));\n  homeControllers.controller('KeyController',              require('./controllers/main/settings/tabs/KeyController'));\n  homeControllers.controller('GraphsController',           require('./controllers/main/graphs/GraphsController'));\n  homeControllers.controller('GraphsBlockchainController', require('./controllers/main/graphs/GraphsBlockchainController'));\n};\n","\"use strict\";\n\nmodule.exports = {\n\n  init: () => {\n\n    // Hack since Node v5\n    try {\n      window.jade = require('jade' + '/' + 'runtime');\n    } catch (e) {\n    }\n\n    console.log('Configuring Angular app...');\n\n    require('./app.config')();\n\n    console.log('App initialized.');\n  }\n};\n","module.exports = {\n  server: \"\", // Empty server will use the browser current host\n  port: \"\",   // Empty port will use the browser current port\n  default_port: 9220,\n  dev_autoconf: false,\n  api_timeout: 10000 // 10 sec timeout\n};\n","module.exports = {\n  \"top.menu.overview\": \"Home\",\n  \"top.menu.data\": \"Explore\",\n  \"top.menu.settings\": \"Settings\",\n  \"top.menu.wallet\": \"Wallet\",\n  \"general.server.started\": \"Server started\",\n  \"general.server.stopped\": \"Server stopped\",\n  \"general.choose_option\": \"Choose your option\",\n  \"general.network.reconf_ok\": \"Reconfiguration success\",\n  \"global.button.validate\": \"Validate\",\n  \"global.button.start\": \"Start\",\n  \"err.unknown\": \"Unknown error\",\n  \"err.connection\": \"Could not connect to node\",\n  \"err.back_index\": \"Get back to previous screen\",\n  \"err.sync.interrupted\": \"Sync interrupted because the following error occured:\",\n  \"index.message.loading\": \"Loading...\",\n  \"crypto.secret_key\": \"Secret key\",\n  \"index.message.current_block\": \"Current block {{ number }}\",\n  \"configuration.init.choose.title\": \"Initialization\",\n  \"configuration.init.choose.message\": \"Your software has to be initialized. You may either create a new currency or connect to an existing one.\",\n  \"configuration.init.choose.create\": \"Create a new currency\",\n  \"configuration.init.choose.connect\": \"Connect to an existing currency\",\n  \"configuration.init.choose.import\": \"Import from a backup file\",\n  \"configuration.create_currency.cancel\": \"Cancel & go home\",\n  \"configuration.create_uid.title\": \"Your identity\",\n  \"configuration.create_uid.message\": \"As a first step, you need to define your personal, unique identity.<br/>The following informations will be <strong>definitive</strong> for this currency: please choose them carefully.\",\n  \"configuration.create_uid.uid.tooltip\": \"The name you will be known as.\",\n  \"configuration.create_uid.entropy.tooltip\": \"An entropy source to make your key unique: an e-mail, a phone n°, ...\",\n  \"configuration.create_uid.password.tooltip\": \"A secret password to protect your key.\",\n  \"configuration.create_uid.create_button\": \"Continue\",\n  \"configuration.create_uid.preview_button\": \"Preview pubkey\",\n  \"configuration.create_uid.nrp_algo_choose\": \"NRP algorithm\",\n  \"configuration.create_uid.nrp_algo_choose_1\": \"N = 4096 ; r = 16 ; p = 1\",\n  \"configuration.create_uid.modal_title\": \"Identity confirmation\",\n  \"configuration.create_uid.modal_message\": \"This identity will be definitive for this currency: you will be known by your User ID and will be able to access your account using your Secret Key and Password values.\",\n  \"configuration.create_uid.modal_agree\": \"Agree\",\n  \"configuration.create_uid.modal_disagree\": \"Disagree\",\n  \"configuration.create_uid.modal_preview_title\": \"Preview of pubkey\",\n  \"configuration.create_uid.modal_preview_ok\": \"OK\",\n  \"configuration.create_network.title\": \"Network\",\n  \"configuration.create_network.message\": \"uCoin is a P2P software and needs bidirectionnal access to the network. Please chose carefully the following parameters.\",\n  \"configuration.create_network.none\": \"None\",\n  \"configuration.create_network.ipv4.title\": \"IPv4\",\n  \"configuration.create_network.ipv6.title\": \"IPv6\",\n  \"configuration.create_network.ipv4.message\": \"For compatibilty reasons, you may prefer to use classic IPv4 interfaces. The configuration is more complicated.\",\n  \"configuration.create_network.local_ipv4\": \"Private (computer)\",\n  \"configuration.create_network.remote_ipv4\": \"Public (box/router)\",\n  \"configuration.create_network.local_ipv6\": \"IPv6\",\n  \"configuration.create_network.port\": \"Port\",\n  \"configuration.create_network.port.title\": \"Port\",\n  \"configuration.create_network.ipv6.message\": \"IPv6 gives your computer a unique, direct address to your node over the Internet. This is the <b>recommended way</b> to connect your node to the network.\",\n  \"configuration.create_network.port.message\": \"Wether you use IPv6 or IPv4, Duniter node will use this port number for connection to the network. With IPv4, this number will be used for both private and public interfaces.\",\n  \"configuration.create_network.dns.title\": \"Domain name\",\n  \"configuration.create_network.dns\": \"Domain name\",\n  \"configuration.create_network.dns.message\": \"IPv6 (AAAA) and IPv4 (A) DNS records will be used.\",\n  \"configuration.create_network.upnp\": \"Use UPnP\",\n  \"configuration.create_network.button.validate\": \"Continue\",\n  \"configuration.create_network.button.autoconf\": \"Automatic configuration\",\n  \"configuration.create_parameters.title\": \"Currency\",\n  \"configuration.create_parameters.message\": \"Initial parameters of the currency. It should be carefully chosen, as these parameters never change once the currency is started.\",\n  \"configuration.create_parameters.currency.title\": \"Money units\",\n  \"configuration.create_parameters.currency.message\": \"Give a name to your currency. The 3 following parameters configure the way new money units are created.\",\n  \"configuration.create_parameters.currency\": \"Currency name\",\n  \"configuration.create_parameters.c\": \"c\",\n  \"configuration.create_parameters.dt\": \"UD period\",\n  \"configuration.create_parameters.ud0\": \"UD(0)\",\n  \"configuration.create_parameters.button.validate\": \"Continue\",\n  \"configuration.create_parameters.wot.title\": \"Web of Trust\",\n  \"configuration.create_parameters.wot.message\": \"The following parameters deal with identities and their links gathered in the Web of Trust concept.\",\n  \"configuration.create_parameters.sigStock\": \"Max cert stock\",\n  \"configuration.create_parameters.sigPeriod\": \"Delay between 2 certs\",\n  \"configuration.create_parameters.sigValidity\": \"Cert expiry delay\",\n  \"configuration.create_parameters.msValidity\": \"Membership expiry delay\",\n  \"configuration.create_parameters.sigQty\": \"Min required certs\",\n  \"configuration.create_parameters.sigWindow\": \"Cert time window\",\n  \"configuration.create_parameters.stepMax\": \"Max distance\",\n  \"configuration.create_parameters.xpercent\": \"Percent of distance\",\n  \"configuration.create_parameters.blockchain.title\": \"Blockchain\",\n  \"configuration.create_parameters.blockchain.message\": \"The technical support of money and identities is the blockchain. It also has some parameters driving its behavior.\",\n  \"configuration.create_parameters.medianTimeBlocks\": \"Blocks count\",\n  \"configuration.create_parameters.avgGenTime\": \"Block gen. duration\",\n  \"configuration.create_parameters.dtDiffEval\": \"Blocks count for diff.\",\n  \"configuration.create_parameters.blocksRot\": \"Personal diff. blocks\",\n  \"configuration.create_parameters.percentRot\": \"Personal diff. rotation\",\n  \"configuration.create_root.title\": \"Root block creation\",\n  \"configuration.create_root.message\": \"This is the final step to create the new currency! The root block or <i>genesis</i> will include the first members and define the currency parameters. Once generated and submitted, the blockchain will be started.\",\n  \"configuration.create_root.button.start\": \"Start HTTP\",\n  \"configuration.create_root.button.stop\": \"Stop HTTP\",\n  \"configuration.create_root.button.generate\": \"Give a try\",\n  \"configuration.create_root.need_a_try\": \"You need to generate a first block with the « Give a try » button. Start HTTP server to do so.\",\n  \"configuration.create_root.button.accept_and_send\": \"Accept this block and start currency\",\n  \"configuration.create_root.button.cancel\": \"Cancel creation and go to home screen\",\n  \"configuration.create_root.host_listening\": \"Host listening at:\",\n  \"configuration.create_uid.pubkey_preview\": \"Public key preview\",\n  \"home.current.number\": \"Current block #\",\n  \"home.current.membersCount\": \"Members count\",\n  \"home.current.medianTime\": \"Median time\",\n  \"home.current.powMin\": \"Common difficulty level\",\n  \"home.current.mmass\": \"Monetary mass\",\n  \"home.pulling.network\": \"Network\",\n  \"home.pulling.peer\": \"Peer\",\n  \"home.pulling.state.unkown\": \"Next sync in few minutes\",\n  \"home.pulling.state.synced\": \"Synced\",\n  \"home.pulling.state.syncing\": \"Syncing...\",\n  \"home.pow.unit\": \"blocks made by this key\",\n  \"home.pow.is_mirror\": \"This node is a mirror\",\n  \"home.pow.is_waiting\": \"Waiting for better proof conditions\",\n  \"home.tabs.overview\": \"Overview\",\n  \"home.tabs.overview.should_reconfigure\": \"Your configuration has changed and your node is no more reachable from the network. You should reconfigure it to have a functional node. If this message appears again, you should manually configure the network settings. Often, selecting only IPv6 interface (disabling IPv4) solves the problem.\",\n  \"home.tabs.network\": \"Peers\",\n  \"home.tabs.network.button.update\": \"Check peers again\",\n  \"home.tabs.logs\": \"Logs\",\n  \"home.tabs.logs.follow.logs\": \"Follow logs\",\n  \"home.tabs.logs.pause.logs\": \"Pause logs\",\n  \"home.tabs.logs.level.error\": \"Error\",\n  \"home.tabs.logs.level.warn\": \"Warning\",\n  \"home.tabs.logs.level.info\": \"Info\",\n  \"home.tabs.logs.level.debug\": \"Debug\",\n  \"home.tabs.logs.level.trace\": \"Trace\",\n  \"sync.title\": \"Synchronize\",\n  \"sync.message\": \"Your node will be synchronized with an existing currency: just enter technical details about a node to sync with it.\",\n  \"sync.host\": \"Host\",\n  \"sync.port\": \"Port\",\n  \"sync.check\": \"Check node\",\n  \"sync.start\": \"Synchronize with this node\",\n  \"sync.failed\": \"Synchronization failed.\",\n  \"sync.mode.simplified\": \"Simplified mode\",\n  \"sync.mode.manual\": \"Manual mode\",\n  \"sync.simplified.choose\": \"Node to connect to\",\n  \"sync.simplified.default_option\": \"Please select a node to continue\",\n  \"sync.simplified.currency\": \"Currency\",\n  \"sync.simplified.main_mirror\": \"(main mirror)\",\n  \"sync.simplified.official_mirror\": \"(other official mirror)\",\n  \"sync.ready.node.part1\": \"This node is available!\",\n  \"sync.ready.node.part2\": \"Click on the green button to proceed.\",\n  \"sync.started.node\": \"Synchronization started on node:\",\n  \"sync.error.unreachable.try.another.node\": \"This node is not available. Please select another one.\",\n  \"home.menu.server.stop\": \"Stop server\",\n  \"home.menu.server.start\": \"Start server\",\n  \"home.menu.server.restart\": \"Restart server\",\n  \"home.state\": \"Server:\",\n  \"home.state.started\": \"STARTED\",\n  \"home.state.stopped\": \"STOPPED\",\n  \"settings.tabs.logs\": \"Logs\",\n  \"settings.tabs.data\": \"Data\",\n  \"settings.tabs.backup\": \"Backup\",\n  \"settings.tabs.identity\": \"Crypto\",\n  \"settings.tabs.network\": \"Network\",\n  \"settings.tabs.currency\": \"Currency\",\n  \"settings.tabs.cpu\": \"CPU\",\n  \"settings.data.reset.title\": \"Reset this node\",\n  \"settings.data.reset.message\": \"If you desire to reset this node's data and sync it again with the network, please select a node to sync against and validate.\",\n  \"settings.data.reset.warning\": \"This process <strong>will not</strong> reset the node identity and network settings, which will be reused.\",\n  \"settings.data.reset.peer.none_option\": \"Select a node\",\n  \"settings.data.reset.peer.label\": \"Synchronization peer\",\n  \"settings.data.reset.button\": \"Full reset of the node\",\n  \"settings.data.reset_sync.button\": \"Reset data and start sync\",\n  \"settings.logs.title\": \"Logs\",\n  \"settings.logs.consult.message\": \"Your node continually generates information messages in a log file. This information may help you understand what your node <i>is doing</i> or what it <i>has done</i> few times ago.\",\n  \"settings.logs.consult.button\": \"View real-time logs\",\n  \"settings.logs.share.message\": \"You may want to <b>share your logs</b> with other people, sometimes to get help or to add informations in a bug tracker. Clicking on below button will extract the last 2000 lines of your logs and push it on the web, returning you a link to be shared with whoever you want.\",\n  \"settings.logs.share.button\": \"Create a web link to your logs\",\n  \"settings.logs.share.generating\": \"Generating your link...\",\n  \"settings.logs.share.error\": \"An error occurred during the generation of your link:\",\n  \"settings.data.backup.title\": \"Backup\",\n  \"settings.data.backup.message\": \"You can create backups of your node's data and restore them using the buttons below.\",\n  \"settings.data.backup.warning\": \"<b>Export</b> will only backup your node's data, which <i>excludes your secret key and configuration details</i>.<br><b>Import</b> will reset your node's data by applying the backup. Your secret keys and configuration remains untouched.\",\n  \"settings.data.backup.button.export\": \"Create a data backup\",\n  \"settings.data.backup.button.import\": \"Import a data backup\",\n  \"settings.data.backup.importing\": \"Importing data...\",\n  \"settings.data.backup.imported\": \"Import successfull!\",\n  \"settings.network.button.validate\": \"Save and apply network settings\",\n  \"settings.network.saved\": \"Configuration saved and applied successfully\",\n  \"settings.key.title\": \"Public key of this node:\",\n  \"settings.key.button.validate\": \"Save and use this key\",\n  \"settings.key.button.change\": \"Change keyring\",\n  \"settings.key.pubkey.description\": \"This public key is the public part of your keyring, which is composed of a public key and a private key. This public key is shared with all the peers of the network and users of the currency, while your private key is secretely kept and used by this node to process operations on the network.\",\n  \"settings.data.modal_title\": \"Confirm full reset\",\n  \"settings.data.modal_message\": \"This action will completely reset the data of your node and redirect you to initial configuration screen. Do you confirm?\",\n  \"settings.data.modal_disagree\": \"No, cancel this\",\n  \"settings.data.modal_agree\": \"Yes, process the reset\",\n  \"settings.data.reset.experimental\": \"This functionality is still considered experimental. If you encounters strange behaviors, please stop the software and reset manually your node by removing all the files BUT conf.json under ~/.config/ucoin/ucoin_default, and restart the software.\",\n  \"settings.cpu.title\": \"CPU settings\",\n  \"settings.cpu.message\": \"You can adjust the CPU power dedicated to proof-of-work computation. The higher the value, the faster is your node, the higher the chances you have to compute a block early.\",\n  \"settings.cpu.warning\": \"<b>Up to 8 cores</b> of your machine are dedicated to proof-of-work computation currently. Also, setting CPU to 100% does not mean Duniter will use 100% of each core, but will use as much as possible each of them, as a core is also shared with other programs.\",\n  \"settings.cpu.range\": \"% of CPU power core dedicated to proof-of-work :\",\n  \"settings.cpu.power\": \"Core power:\",\n  \"settings.cpu.saved\": \"CPU settings saved.\",\n  \"graphs.tabs.blockchain\": \"Blockchain\",\n  \"graphs.tabs.currency\": \"Currency\",\n  \"graphs.blockchain.range\": \"Graphs for the last X blocks: (please choose X value)\",\n  \"graphs.blockchain.with.time\": \"Time variations graph\",\n  \"graphs.blockchain.with.speed\": \"Writing speed graph\",\n  \"graphs.blockchain.with.difficulty\": \"Difficulty graph\",\n  \"help.about_duniter\": \"About Duniter\",\n  \"help.about_duniter.title\": \"About\",\n  \"help.about_duniter.subtitle\": \"Duniter Desktop\",\n  \"help.about_duniter.version\": \"Version: \",\n  \"help.about_duniter.forum\": \"Forum\",\n  \"help.about_duniter.chat\": \"Chat\",\n  \"help.new_version_available\": \"New version available\"\n}\n;","var co = require('co');\nvar _ = require('underscore');\n\nmodule.exports = (app) => {\n\n  app.config(['$stateProvider', '$urlRouterProvider', ($stateProvider, $urlRouterProvider) => {\n\n    // States\n    $stateProvider.\n    state('index', {\n      url: '/',\n      template: require('views/index'),\n      resolve: {\n        ws: (Webmin) => Webmin.ws(),\n        summary: (Webmin) => Webmin.summary()\n      },\n      controller: 'IndexController'\n    }).\n\n    state('about', {\n      url: '/about',\n      template: require('views/about'),\n      resolve: {\n        summary: (Webmin) => Webmin.summary(),\n        version: (summary) => summary && 'v' + summary.version || 'unknown version'\n      },\n      controller: 'AboutController'\n    }).\n\n    state('configure', {\n      abstract: true,\n      url: '/configure',\n      template: require('views/init/layout'),\n      controller: ($scope) => {\n        $scope.conf = {\n          currency: 'super_currency',\n          c: 0.007376575,\n          dt: 30.4375 * 24 * 3600,\n          ud0: 100,\n          stepMax: 3,\n          sigDelay: 3600 * 24 * 365 * 5,\n          sigPeriod: 0, // Instant\n          sigStock: 40,\n          sigWindow: 3600 * 24 * 14, // 2 weeks\n          sigValidity: 3600 * 24 * 365,\n          msValidity: 3600 * 24 * 365,\n          sigQty: 0,\n          xpercent: 0.9,\n          percentRot: 0.66,\n          blocksRot: 20,\n          avgGenTime: 16 * 60,\n          dtDiffEval: 10,\n          medianTimeBlocks: 20\n        };\n      }\n    }).\n\n    state('configure.choose', {\n      url: '/choose',\n      template: require('views/init/choose'),\n      controller: ($scope, Importer) => {\n        Importer($scope);\n      }\n    }).\n\n    state('configure.create', {\n      url: '/create',\n      template: '<div class=\"ui-scrollable\" ui-view=\"\"></div>'\n    }).\n\n    state('configure.create.uid', {\n      url: '/create/uid',\n      template: require('views/init/create/create_uid'),\n      controller: 'IdentityController'\n    }).\n\n    state('configure.create.network', {\n      url: '/create/network',\n      template: require('views/init/create/create_network'),\n      resolve: {\n        netinterfaces: (Webmin) => resolveNetworkAutoConf(Webmin),\n        firstConf: () => true\n      },\n      controller: 'NetworkController'\n    }).\n\n    state('configure.create.parameters', {\n      url: '/create/parameters',\n      template: require('views/init/create/create_parameters'),\n      controller: 'ParametersController'\n    }).\n\n    state('configure.create.root', {\n      url: '/create/root',\n      template: require('views/init/create/create_root'),\n      controller: 'RootBlockController'\n    }).\n\n    state('sync', {\n      url: '/sync?host=&port=&sync=&to=',\n      template: require('views/init/sync/sync'),\n      controller: 'SyncController'\n    }).\n\n    state('main', {\n      abstract: true,\n      url: '/main',\n      template: require('views/main/main'),\n      resolve: {\n        ws: (Webmin) => Webmin.ws(),\n        summary: (Webmin) => Webmin.summary()\n      },\n      controller: 'MainController'\n    }).\n\n    state('main.home', {\n      abstract: true,\n      url: '/home',\n      template: require('views/main/home/home'),\n      controller: 'HomeController'\n    }).\n\n    state('main.home.overview', {\n      url: '/overview',\n      template: require('views/main/home/tabs/overview'),\n      resolve: {\n        startHttp: (Webmin) => Webmin.server.http.start()\n      },\n      controller: 'OverviewController'\n    }).\n\n    state('main.home.network', {\n      url: '/network',\n      template: require('views/main/home/tabs/network'),\n      resolve: {\n        peers: (Webmin, BMA) => co(function *() {\n          const summary = yield Webmin.summary();\n          return BMA(summary.host).network.peers();\n        })\n      },\n      controller: 'HomeNetworkController'\n    }).\n\n    state('main.settings', {\n      abstract: true,\n      url: '/settings',\n      template: require('views/main/settings/settings'),\n      resolve: {\n        summary: (Webmin) => Webmin.summary()\n      },\n      controller: 'SettingsController'\n    }).\n\n    state('main.settings.data', {\n      url: '/data',\n      template: require('views/main/settings/tabs/data'),\n      resolve: {\n        peers: (Webmin, BMA) => co(function *() {\n          try {\n            const summary = yield Webmin.summary();\n            let self = yield BMA(summary.host).network.peering.self();\n            let res = yield BMA(summary.host).network.peers();\n            return _.filter(res.peers, (p) => p.pubkey != self.pubkey && p.status == 'UP');\n          } catch (e) {\n            console.error(e);\n            return [];\n          }\n        })\n      },\n      controller: 'DataController'\n    }).\n\n    state('main.settings.logs', {\n      url: '/logs',\n      template: require('views/main/settings/tabs/logs'),\n      controller: 'LogsSettingsController'\n    }).\n\n    state('main.settings.backup', {\n      url: '/backup',\n      template: require('views/main/settings/tabs/backup'),\n      controller: 'BackupController'\n    }).\n\n    state('main.settings.cpu', {\n      url: '/cpu',\n      template: require('views/main/settings/tabs/cpu'),\n      resolve: {\n        summary: (Webmin) => Webmin.summary()\n      },\n      controller: 'CPUController'\n    }).\n\n    state('main.settings.crypto', {\n      url: '/crypto',\n      template: require('views/main/settings/tabs/crypto'),\n      controller: 'KeyController'\n    }).\n\n    state('main.settings.network', {\n      url: '/network',\n      resolve: {\n        netinterfaces: (Webmin) => resolveNetworkAutoConf(Webmin),\n        firstConf: () => false\n      },\n      template: require('views/main/settings/tabs/network'),\n      controller: 'NetworkController'\n    }).\n\n    state('main.settings.currency', {\n      url: '/currency',\n      resolve: {\n        conf: (summary) => co(function *() {\n          return summary.parameters;\n        })\n      },\n      template: require('views/main/settings/tabs/currency'),\n      controller: 'CurrencyController'\n    }).\n\n    state('main.graphs', {\n      abstract: true,\n      url: '/graphs',\n      template: require('views/main/graphs/graphs'),\n      controller: 'GraphsController'\n    }).\n\n    state('main.graphs.blockchain', {\n      url: '/blockchain',\n      template: require('views/main/graphs/blockchain'),\n      controller: 'GraphsBlockchainController'\n    }).\n\n    //state('graphs.crypto', {\n    //  url: '/crypto',\n    //  template: require('views/graphs/crypto'),\n    //  controller: 'KeyController'\n    //}).\n    //\n    //state('graphs.network', {\n    //  url: '/network',\n    //  resolve: {\n    //    netinterfaces: (Webmin) => resolveNetworkAutoConf(Webmin),\n    //    firstConf: () => false\n    //  },\n    //  template: require('views/graphs/network'),\n    //  controller: 'NetworkController'\n    //}).\n    //\n    //state('graphs.currency', {\n    //  url: '/currency',\n    //  resolve: {\n    //    conf: (bmapi) => co(function *() {\n    //      return bmapi.currency.parameters();\n    //    })\n    //  },\n    //  template: require('views/graphs/currency'),\n    //  controller: 'CurrencyController'\n    //}).\n\n    state('logs', {\n      url: '/logs',\n      template: require('views/logs'),\n      resolve: {\n        ws: (Webmin) => Webmin.ws()\n      },\n      controller: 'LogsController'\n    }).\n\n    state('error', {\n      url: '/error\\?err',\n      template: require('views/error'),\n      controller: ($scope, $stateParams) =>\n        $scope.errorMsg = $stateParams.err || 'err.unknown'\n    });\n\n    // Default route\n    $urlRouterProvider.otherwise('/');\n  }]);\n\n  app.run(($rootScope, $state) => {\n    $rootScope.$on('$stateChangeError', (event, toState, toParams, fromState, fromParams, error) => {\n      console.error(error);\n      $state.go('error', { err: error.message });\n    });\n  });\n\n  function resolveNetworkAutoConf(Webmin) {\n    return co(function *() {\n      let netinterfaces = yield Webmin.network.interfaces();\n      return netinterfaces || { local: {}, remote: {} };\n    });\n  }\n};\n","module.exports = (app) => {\n\n  app.config(['$translateProvider', ($translateProvider) => {\n\n    $translateProvider.translations('en', require('./i18n/en'));\n\n    // Default language\n    $translateProvider.preferredLanguage('en');\n\n    // Other parameters\n    $translateProvider.useSanitizeValueStrategy('');\n  }]);\n};\n","\nmodule.exports = function Peer(json) {\n\n  var that = this;\n\n  var BMA_REGEXP = /^BASIC_MERKLED_API( ([a-z_][a-z0-9-_.]*))?( ([0-9.]+))?( ([0-9a-f:]+))?( ([0-9]+))$/;\n\n  Object.keys(json).forEach(function(key) {\n    that[key] = json[key];\n  });\n\n  that.endpoints = that.endpoints || [];\n  that.statusTS = that.statusTS || 0;\n\n  that.keyID = function () {\n    return that.pubkey && that.pubkey.length > 10 ? that.pubkey.substring(0, 10) : \"Unknown\";\n  };\n\n  that.copyValues = function(to) {\n    var obj = that;\n    [\"version\", \"currency\", \"pub\", \"endpoints\", \"hash\", \"status\", \"statusTS\", \"block\", \"signature\"].forEach(function (key) {\n      to[key] = obj[key];\n    });\n  };\n\n  that.copyValuesFrom = function(from) {\n    var obj = that;\n    [\"version\", \"currency\", \"pub\", \"endpoints\", \"block\", \"signature\"].forEach(function (key) {\n      obj[key] = from[key];\n    });\n  };\n\n  that.json = function() {\n    var obj = that;\n    var json = {};\n    [\"version\", \"currency\", \"endpoints\", \"status\", \"block\", \"signature\"].forEach(function (key) {\n      json[key] = obj[key];\n    });\n    json.raw = that.getRaw();\n    json.pubkey = that.pubkey;\n    return json;\n  };\n\n  that.getBMA = function() {\n    var bma = null;\n    that.endpoints.forEach(function(ep){\n      var matches = !bma && ep.match(BMA_REGEXP);\n      if (matches) {\n        bma = {\n          \"dns\": matches[2] || '',\n          \"ipv4\": matches[4] || '',\n          \"ipv6\": matches[6] || '',\n          \"port\": matches[8] || 9101\n        };\n      }\n    });\n    return bma || {};\n  };\n\n  that.getDns = function() {\n    var bma = that.getBMA();\n    return bma.dns ? bma.dns : null;\n  };\n\n  that.getIPv4 = function() {\n    var bma = that.getBMA();\n    return bma.ipv4 ? bma.ipv4 : null;\n  };\n\n  that.getIPv6 = function() {\n    var bma = that.getBMA();\n    return bma.ipv6 ? bma.ipv6 : null;\n  };\n\n  that.getPort = function() {\n    var bma = that.getBMA();\n    return bma.port ? bma.port : null;\n  };\n\n  that.getHost = function() {\n    var bma = that.getBMA();\n    var host =\n      (that.hasValid4(bma) ? bma.ipv4 :\n        (bma.dns ? bma.dns :\n          (bma.ipv6 ? '[' + bma.ipv6 + ']' : '')));\n    return host;\n  };\n\n  that.getURL = function() {\n    var bma = that.getBMA();\n    var base =\n      (that.hasValid4(bma) ? bma.ipv4 :\n        (bma.dns ? bma.dns :\n          (bma.ipv6 ? '[' + bma.ipv6 + ']' : '')));\n    if(bma.port)\n      base += ':' + bma.port;\n    return base;\n  };\n\n  that.hasValid4 = function(bma) {\n    return bma.ipv4 && !bma.ipv4.match(/^127.0/) && !bma.ipv4.match(/^192.168/) ? true : false;\n  };\n\n  that.getNamedURL = function() {\n    var bma = that.getBMA();\n    var base =\n      (that.hasValid4(bma) ? bma.ipv4 :\n        (bma.dns ? bma.dns :\n          (bma.ipv6 ? '[' + bma.ipv6 + ']' : '')));\n    if(bma.port)\n      base += ':' + bma.port;\n    return base;\n  };\n\n  that.isReachable = function () {\n    return that.getURL() ? true : false;\n  };\n};\n","module.exports = function mobilecheck() {\n  var check = false;\n  (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera);\n  return check;\n};\n","module.exports = (app) => {\n\n  let Base58 = {};\n\n  Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n  Base58.alphabetMap = {};\n\n  for(let i = 0; i < Base58.alphabet.length; i++) {\n    Base58.alphabetMap[Base58.alphabet.charAt(i)] = i\n  }\n\n  Base58.encode = function(buffer) {\n    if (buffer.length === 0) return '';\n\n    let i, j, digits = [0];\n    for (i = 0; i < buffer.length; i++) {\n      for (j = 0; j < digits.length; j++) digits[j] <<= 8\n      digits[digits.length - 1] += buffer[i];\n\n      let carry = 0;\n      for (j = digits.length - 1; j >= 0; j--){\n        digits[j] += carry;\n        carry = (digits[j] / 58) | 0;\n        digits[j] %= 58\n      }\n\n      while (carry) {\n        digits.unshift(carry);\n        carry = (digits[0] / 58) | 0;\n        digits[0] %= 58\n      }\n    }\n\n    // deal with leading zeros\n    for (i = 0; i < buffer.length - 1 && buffer[i] == 0; i++) digits.unshift(0)\n\n    return digits.map(function(digit) { return Base58.alphabet[digit] }).join('')\n  };\n\n  Base58.decode = function(string) {\n    if (string.length === 0) return (new Uint8Array());\n\n    let input = string.split('').map(function(c){\n      return Base58.alphabetMap[c]\n    });\n\n    let i, j, bytes = [0];\n    for (i = 0; i < input.length; i++) {\n      for (j = 0; j < bytes.length; j++) bytes[j] *= 58\n      bytes[bytes.length - 1] += input[i];\n\n      let carry = 0;\n      for (j = bytes.length - 1; j >= 0; j--){\n        bytes[j] += carry;\n        carry = bytes[j] >> 8;\n        bytes[j] &= 0xff\n      }\n\n      while (carry) {\n        bytes.unshift(carry);\n        carry = bytes[0] >> 8;\n        bytes[0] &= 0xff\n      }\n    }\n\n    // deal with leading zeros\n    for (i = 0; i < input.length - 1 && input[i] == 0; i++) bytes.unshift(0)\n    return (new Uint8Array(bytes))\n  };\n\n  app.factory('Base58', function() {\n    return {\n      encode: Base58.encode,\n      decode: Base58.decode\n    };\n  });\n};\n","const co = require('co');\nconst _ = require('underscore');\nconst conf = require('../lib/conf/conf');\n\nmodule.exports = (angular) => {\n\n  angular.module('duniter.services.bma', ['ngResource'])\n\n    .factory('BMA', function($http, $q) {\n        function httpProtocol() {\n            return window.location.protocol + '//';\n        }\n\n        function wsProtocol() {\n            return window.location.protocol === 'https:' ? 'wss://' : 'ws://';\n        }\n\n        function BMA(host) {\n            function getResource(uri, protocol) {\n                return function (params) {\n                    return $q.when(httpGet(uri, params, protocol));\n                }\n            }\n\n            function httpGet(uri, params, protocol) {\n                return Q.Promise((resolve, reject) => {\n                    var config = {\n                        timeout: conf.api_timeout\n                    }, suffix = '', pkeys = [], queryParams = null;\n                    if (typeof params == 'object') {\n                        pkeys = _.keys(params);\n                        queryParams = {};\n                    }\n                    pkeys.forEach(function (pkey) {\n                        var prevURI = uri;\n                        uri = uri.replace(new RegExp(':' + pkey), params[pkey]);\n                        if (prevURI == uri) {\n                            queryParams[pkey] = params[pkey];\n                        }\n                    });\n                    config.params = queryParams;\n                    const url = (protocol || httpProtocol()) + host + uri + suffix;\n                    $http.get(url, config)\n                        .success(function (data, status, headers, config) {\n                            resolve(data);\n                        })\n                        .error(function (data, status, headers, config) {\n                            console.log(data);\n                            reject(data);\n                        });\n                });\n            }\n\n            function postResource(uri) {\n                return function (data, params) {\n                    return $q.when(Q.Promise((resolve, reject) => {\n                        var config = {\n                            timeout: 4000\n                        }, suffix = '', pkeys = [], queryParams = null;\n                        if (typeof params == 'object') {\n                            pkeys = _.keys(params);\n                            queryParams = {};\n                        }\n                        pkeys.forEach(function (pkey) {\n                            var prevURI = uri;\n                            uri = uri.replace(new RegExp(':' + pkey), params[pkey]);\n                            if (prevURI == uri) {\n                                queryParams[pkey] = params[pkey];\n                            }\n                        });\n                        config.params = queryParams;\n                        const url = httpProtocol() + host + uri + suffix;\n                        $http.post(url, data, config)\n                            .success(function (data, status, headers, config) {\n                                resolve(data);\n                            })\n                            .error(function (data, status, headers, config) {\n                                reject(data);\n                            });\n                    }));\n                }\n            }\n\n            function bmaGET(uri) {\n                return getResource('' + uri);\n            }\n\n            function bmaPOST(uri) {\n                return postResource('' + uri);\n            }\n\n            function bmaWS(uri) {\n                return ws(wsProtocol() +  host + '' + uri);\n            }\n\n            let wsMap = {};\n\n            function ws(uri) {\n                var sock = wsMap[uri] || new WebSocket(uri);\n                wsMap[uri] = sock;\n                sock.onclose = function (e) {\n                    console.log('close');\n                    console.log(e);\n                };\n                sock.onerror = function (e) {\n                    console.log('onerror');\n                    console.log(e);\n                };\n                let opened = false, openedCallback;\n                sock.onopen = function () {\n                    opened = true;\n                    openedCallback && openedCallback();\n                };\n                let listener, messageType;\n                sock.onmessage = function (e) {\n                    let res = JSON.parse(e.data);\n                    if (res.type == 'log') {\n                        for (let i = 0, len = res.value.length; i < len; i++) {\n                            let log = res.value[i];\n                            // console[log.level](log.msg);\n                        }\n                    }\n                    if (listener && (messageType === undefined || (res.type === messageType))) {\n                        listener(res);\n                    }\n                };\n                return {\n                    on: function (type, callback) {\n                        messageType = type;\n                        listener = callback;\n                    },\n                    whenOpened: () => co(function *() {\n                        if (opened) return true;\n                        else {\n                            yield Q.Promise((resolve) => {\n                                openedCallback = resolve;\n                            });\n                        }\n                    }),\n                    send: (msg) => sock.send(msg)\n                };\n            }\n\n            return {\n                node: {\n                    summary: bmaGET('/node/summary')\n                },\n                wot: {\n                    lookup: bmaGET('/wot/lookup/:search'),\n                    members: bmaGET('/wot/members')\n                },\n                network: {\n                    peering: {\n                        self: bmaGET('/network/peering'),\n                        peers: bmaGET('/network/peering/peers')\n                    },\n                    peers: bmaGET('/network/peers')\n                },\n                currency: {\n                    parameters: bmaGET('/blockchain/parameters')\n                },\n                blockchain: {\n                    current: bmaGET('/blockchain/current'),\n                    block: bmaGET('/blockchain/block/:block'),\n                    blocks: bmaGET('/blockchain/blocks/:count/:from'),\n                    block_add: bmaPOST('/blockchain/block'),\n                    stats: {\n                        ud: bmaGET('/blockchain/with/ud'),\n                        tx: bmaGET('/blockchain/with/tx')\n                    }\n                },\n                websocket: {\n                    block: function () {\n                        return bmaWS('/ws/block');\n                    },\n                    peer: function () {\n                        return bmaWS('/ws/peer');\n                    }\n                },\n                origin: {\n                    network: {\n                        peering: {\n                            self: getResource('/network/peering', 'http://')\n                        }\n                    }\n                }\n            }\n        }\n\n        return BMA;\n    });\n};\n","var _ = require('underscore');\nvar conf = require('../lib/conf/conf');\nlet moment = require('moment');\n\nmodule.exports = (app) => {\n\n    app.filter('mt_date', () => {\n      return (input) => {\n        if(input == null){ return \"\"; }\n        return moment(input * 1000).format('YYYY MM DD');\n      };\n    });\n\n    app.filter('mt_time', () => {\n      return (input) => {\n        if(input == null){ return \"\"; }\n        return moment(input * 1000).format('HH:mm:ss');\n      };\n    });\n};\n","module.exports = (app) => {\n\n  app.factory('Graph', function() {\n      return {\n\n        speedGraph: function speedGraphs (id, offset, speeds, minSpeeds, maxSpeeds, getSeries) {\n          var xValuex = [];\n          for (var i = 0, len = speeds.length; i < len; i++) {\n            xValuex.push(i + offset);\n          }\n          $(id).highcharts({\n            chart: {\n              type: \"area\",\n              zoomType: 'x',\n              events: {\n                load: function () {\n                  getSeries(this.series);\n                }\n              }\n            },\n            title: {\n              text: 'Blocks writing speed'\n            },\n            subtitle: {\n              text: document.ontouchstart === undefined ?\n                'Click and drag in the plot area to zoom in' :\n                'Pinch the chart to zoom in'\n            },\n            xAxis: {\n              //categories: xValuex,\n              minRange: 3, // 10 blocks,\n              labels: {\n                formatter: function() {\n                  return this.value + offset;\n                }\n              }\n            },\n            yAxis: {\n              //type: 'logarithmic',\n              minorTickInterval: 1,\n              title: {\n                text: 'Blocks per hour (logarithmic scale)'\n              },\n              floor: 0,\n              min: 0\n            },\n            colors: ['#ff0000', '#7cb5ec', '#000000'],\n            legend: {\n              enabled: true\n            },\n            tooltip: {\n              shared: true,\n              crosshairs: true,\n              formatter: blockFormatter(offset)\n            },\n            plotOptions: {\n              area: {\n                fillColor: {\n                  linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},\n                  stops: [\n                    [0, Highcharts.getOptions().colors[0]],\n                    [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\n                  ]\n                },\n                marker: {\n                  radius: 2\n                },\n                lineWidth: 1,\n                states: {\n                  hover: {\n                    lineWidth: 1\n                  }\n                },\n                threshold: null\n              }\n            },\n\n            series: [{\n              type: 'line',\n              name: \"Upper limit\",\n              data: maxSpeeds\n            },{\n              type: 'area',\n              name: \"Actual speed\",\n              data: speeds\n            },{\n              type: 'line',\n              name: \"Lower limit\",\n              data: minSpeeds\n            }\n            ]\n          });\n        },\n\n        difficultyGraph: function difficultyGraph (id, offset, difficulties) {\n          $(id).highcharts({\n            chart: {\n              type: \"area\",\n              zoomType: 'x'\n            },\n            title: {\n              text: 'Proof-of-Work difficulty by block'\n            },\n            subtitle: {\n              text: document.ontouchstart === undefined ?\n                'Click and drag in the plot area to zoom in' :\n                'Pinch the chart to zoom in'\n            },\n            xAxis: {\n              minRange: 10, // 10 blocks,\n              labels: {\n                formatter: function() {\n                  return this.value + offset;\n                }\n              }\n            },\n            yAxis: {\n              title: {\n                text: 'Number of zeros'\n              },\n              floor: 0,\n              min: 0\n            },\n            legend: {\n              enabled: true\n            },\n            tooltip: {\n              shared: true,\n              crosshairs: true,\n              formatter: blockFormatter(offset)\n            },\n            plotOptions: {\n              area: {\n                fillColor: {\n                  linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},\n                  stops: [\n                    [0, Highcharts.getOptions().colors[0]],\n                    [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\n                  ]\n                },\n                marker: {\n                  radius: 2\n                },\n                lineWidth: 1,\n                states: {\n                  hover: {\n                    lineWidth: 1\n                  }\n                },\n                threshold: null\n              }\n            },\n\n            series: [\n              {\n                name: 'PoW difficulty',\n                data: difficulties\n              }\n            ]\n          });\n        },\n\n        timeGraphs: function timeGraphs (id, offset, timeAccelerations, medianTimeIncrements, speeds, minSpeeds, maxSpeeds) {\n          var timesInc = [];\n          medianTimeIncrements.forEach(function (inc) {\n            timesInc.push(inc == 0 ? 1 : inc);\n          });\n          $(id).highcharts({\n            chart: {\n              // type: \"area\",\n              zoomType: 'x'\n            },\n            title: {\n              text: 'Blockchain time variations'\n            },\n            subtitle: {\n              text: document.ontouchstart === undefined ?\n                'Click and drag in the plot area to zoom in' :\n                'Pinch the chart to zoom in'\n            },\n            xAxis: {\n              minRange: 10, // 10 blocks,\n              labels: {\n                formatter: function() {\n                  return this.value + offset;\n                }\n              }\n            },\n            yAxis: {\n              //type: 'logarithmic',\n              minorTickInterval: 1,\n              title: {\n                text: 'Number of seconds (logarithmic scale)'\n              }\n            },\n            legend: {\n              enabled: true\n            },\n            tooltip: {\n              shared: true,\n              crosshairs: true,\n              formatter: blockFormatter(offset)\n            },\n            plotOptions: {\n              area: {\n                fillColor: {\n                  linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},\n                  stops: [\n                    [0, Highcharts.getOptions().colors[0]],\n                    [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\n                  ]\n                },\n                marker: {\n                  radius: 2\n                },\n                lineWidth: 1,\n                states: {\n                  hover: {\n                    lineWidth: 1\n                  }\n                },\n                threshold: null\n              }\n            },\n\n            series: [\n              {\n                name: 'Time acceleration',\n                data: timeAccelerations\n              },{\n                name: \"Median Time variation\",\n                data: timesInc\n              }\n              ,{\n                name: \"Too high duration\",\n                data: maxSpeeds\n              }\n              ,{\n                name: \"Actual duration\",\n                data: speeds\n              }\n              ,{\n                name: \"Too low duration\",\n                data: minSpeeds\n              }\n            ]\n          });\n        }\n      }\n    });\n};\n\nfunction blockFormatter(offset) {\n  return function() {\n    var html = '<span style=\"font-size: 10px\">' + (this.x + offset) + '</span><br/>';\n    for (var i = 0, len = this.points.length; i < len; i++) {\n      var point = this.points[i];\n      var series = point.series;\n      html += '<span style=\"color:' + series.color + '\">\\u25CF</span>' + series.name + ': <b>' + point.y + '</b><br/>';\n    }\n    return html;\n  }\n}\n","module.exports = (app) => {\n\n  app.factory('Importer', function($http, $state, $timeout, UIUtils, Upload, Webmin) {\n\n    return ($scope) => {\n\n      $scope.uploadFiles = function(file, errFiles) {\n        $scope.f = file;\n        $scope.errFile = errFiles && errFiles[0];\n        if (file) {\n          UIUtils.toast('settings.data.backup.importing');\n          file.upload = Upload.upload({\n            url: Webmin.getImportURL(),\n            data: { importData: file }\n          });\n\n          file.upload.then(function (response) {\n            $timeout(function () {\n              UIUtils.toast('settings.data.backup.imported');\n              $state.go('main.home.overview');\n              file.result = response.data;\n            });\n          }, function (response) {\n            if (response.status > 0)\n              $scope.errorMsg = response.status + ': ' + response.data;\n          }, function (evt) {\n            file.progress = Math.min(100, parseInt(100.0 *\n              evt.loaded / evt.total));\n          });\n        }\n      }\n    };\n  });\n};\n","module.exports = (app) => {\n\n  app.factory('PubkeyGenerator', function($timeout, Webmin) {\n\n    var co = require('co');\n\n    return ($scope) => {\n\n      let concat = \"\";\n      $scope.pubkey_preview = \"\";\n      let timeout = preview();\n\n      function preview() {\n        return $timeout(() => {\n          if ($scope.$parent) {\n            let salt = $scope.$parent.conf.idty_entropy;\n            let pass = $scope.$parent.conf.idty_password;\n            let newConcat = [salt, pass].join('');\n            if (salt && pass && newConcat != concat) {\n              concat = newConcat;\n              $scope.previewPubkey(concat);\n              timeout = preview();\n            } else {\n              timeout = preview();\n            }\n          }\n        }, 100);\n      }\n\n      $scope.previewPubkey = () => co(function *() {\n        let data = yield Webmin.key.preview({\n          conf: $scope.$parent.conf\n        });\n        $scope.pubkey_preview = data.pubkey;\n      }).catch(() => null);\n    };\n  });\n};\n","module.exports = (app) => {\n\n  app.factory('UIUtils', function($q, $translate, $state, $location) {\n      return {\n\n        translate: (msg) => $q.when($translate(msg)),\n\n        toastRaw: (msg) => {\n          return Materialize.toast(msg, 4000);\n        },\n\n        toast: (msg) => {\n          return $q.when($translate(msg)).then((translated) => Materialize.toast(translated, 4000))\n        },\n\n        enableInputs: () => $('i.prefix, label[value!=\"\"]').addClass('active'),\n\n        enableTabs: () => {\n          let jTabs = $('ul.tabs');\n          jTabs.tabs();\n          $('ul.tabs a').click((e) => {\n            let href = $(e.currentTarget).attr('href');\n            let state = href.slice(1);\n            $state.go(state);\n          });\n\n          let currentID = $location.path()\n            .replace(/\\//g, '.')\n            .replace(/\\./, '');\n\n          jTabs.tabs('select_tab', currentID);\n        },\n\n        changeTitle: (version) => document.title = 'Duniter ' + version\n      }\n    });\n};\n","const co = require('co');\nconst _ = require('underscore');\nconst conf = require('../lib/conf/conf');\n\nmodule.exports = (angular) => {\n\n  angular.module('duniter.services.webmin', ['ngResource'])\n\n    .factory('Webmin', function($http, $q) {\n\n      function httpProtocol() {\n        return window.location.protocol + '//';\n      }\n\n      function wsProtocol() {\n        return window.location.protocol === 'https:' ? 'wss://' : 'ws://';\n      }\n\n      function Webmin(server) {\n\n        function getResource(uri, protocol) {\n          return function(params) {\n            return $q.when(httpGet(uri, params, protocol));\n          }\n        }\n\n        function httpGet(uri, params, protocol) {\n          return Q.Promise((resolve, reject) => {\n            var config = {\n              timeout: conf.api_timeout\n            }, suffix = '', pkeys = [], queryParams = null;\n            if (typeof params == 'object') {\n              pkeys = _.keys(params);\n              queryParams = {};\n            }\n            pkeys.forEach(function(pkey){\n              var prevURI = uri;\n              uri = uri.replace(new RegExp(':' + pkey), params[pkey]);\n              if (prevURI == uri) {\n                queryParams[pkey] = params[pkey];\n              }\n            });\n            config.params = queryParams;\n            $http.get((protocol || httpProtocol()) + server + uri + suffix, config)\n              .success(function(data, status, headers, config) {\n                resolve(data);\n              })\n              .error(function(data, status, headers, config) {\n                console.log(data);\n                reject(data);\n              });\n          });\n        }\n\n        function postResource(uri) {\n          return function(data, params) {\n            return $q.when(Q.Promise((resolve, reject) => {\n              var config = {\n                timeout: 4000\n              }, suffix = '', pkeys = [], queryParams = null;\n              if (typeof params == 'object') {\n                pkeys = _.keys(params);\n                queryParams = {};\n              }\n              pkeys.forEach(function(pkey){\n                var prevURI = uri;\n                uri = uri.replace(new RegExp(':' + pkey), params[pkey]);\n                if (prevURI == uri) {\n                  queryParams[pkey] = params[pkey];\n                }\n              });\n              config.params = queryParams;\n              $http.post(httpProtocol() + server + uri + suffix, data, config)\n                .success(function(data, status, headers, config) {\n                  resolve(data);\n                })\n                .error(function(data, status, headers, config) {\n                  reject(data);\n                });\n            }));\n          }\n        }\n\n        let wsMap = {};\n\n        function ws(uri) {\n          var sock = wsMap[uri] || new WebSocket(uri);\n          wsMap[uri] = sock;\n          sock.onclose = function(e) {\n            console.log('close');\n            console.log(e);\n          };\n          sock.onerror = function(e) {\n            console.log('onerror');\n            console.log(e);\n          };\n          let opened = false, openedCallback;\n          sock.onopen = function() {\n            opened = true;\n            openedCallback && openedCallback();\n          };\n          let listener, messageType;\n          sock.onmessage = function(e) {\n            let res = JSON.parse(e.data);\n            if (res.type == 'log') {\n              for (let i = 0, len = res.value.length; i < len; i++) {\n                let log = res.value[i];\n                // console[log.level](log.msg);\n              }\n            }\n            if (listener && (messageType === undefined || (res.type === messageType))) {\n              listener(res);\n            }\n          };\n          return {\n            on: function(type, callback) {\n              messageType = type;\n              listener = callback;\n            },\n            whenOpened: () => co(function *() {\n              if (opened) return true;\n              else {\n                yield Q.Promise((resolve) => {\n                  openedCallback = resolve;\n                });\n              }\n            }),\n            send: (msg) => sock.send(msg)\n          };\n        }\n\n        return {\n          getExportURL: () => httpProtocol() + \"localhost:9220\" + '/webmin/data/duniter_export',\n          getImportURL: () => httpProtocol() + \"localhost:9220\" + '/webmin/data/duniter_import',\n          isNodePubliclyReachable: getResource('/webmin/server/reachable'),\n          ws: () => ws(wsProtocol() + \"localhost:9220\" + '/webmin/ws'),\n          summary: getResource('/webmin/summary'),\n          powSummary: getResource('/webmin/summary/pow'),\n          logsExport: (nbLines) => getResource('/webmin/logs/export/' + nbLines)(),\n          server: {\n            http: {\n              start: getResource('/webmin/server/http/start'),\n              stop: getResource('/webmin/server/http/stop'),\n              openUPnP: getResource('/webmin/server/http/upnp/open'),\n              regularUPnP: getResource('/webmin/server/http/upnp/regular')\n            },\n            services: {\n              startAll: getResource('/webmin/server/services/start_all'),\n              stopAll: getResource('/webmin/server/services/stop_all')\n            },\n            sendConf: postResource('/webmin/server/send_conf'),\n            netConf: postResource('/webmin/server/net_conf'),\n            keyConf: postResource('/webmin/server/key_conf'),\n            cpuConf: postResource('/webmin/server/cpu_conf'),\n            testSync: postResource('/webmin/server/test_sync'),\n            startSync: postResource('/webmin/server/start_sync'),\n            previewNext: getResource('/webmin/server/preview_next'),\n            autoConfNetwork: getResource('/webmin/server/auto_conf_network'),\n            resetData: getResource('/webmin/server/reset/data'),\n            republishNewSelfPeer: getResource('/webmin/server/republish_selfpeer')\n          },\n          key: {\n            preview: postResource('/webmin/key/preview')\n          },\n          network: {\n            interfaces: getResource('/webmin/network/interfaces')\n          }\n        }\n      }\n      let server = window.location.hostname;\n      let port = window.location.port;\n      let service = Webmin([server, port].join(':'));\n      service.instance = Webmin;\n      return service;\n    });\n};\n"]}
\ No newline at end of file
-- 
GitLab