vard=!0,u=i?i.reduce((function(e,t){vari=s(t.pubkey,t.cert_time?t.cert_time.block:t.sigDate);returnt.cert_time||(d=!1),e[i]=t,e}),{}):{};returne({pubkey:t}).then((function(e){return(e&&e.certifications||[]).reduce((function(e,t){vari=!t.written,n=t.cert_time?t.cert_time.medianTime:null,r=n?i?n+a.sigWindow-o:n+a.sigValidity-o:0;r=r<0?0:r;varl=s(t.pubkey,d&&t.cert_time?t.cert_time.block:t.sigDate);returndeleteu[l],e.concat({pubkey:t.pubkey,uid:t.uid,time:n,isMember:t.isMember,wasMember:t.wasMember,expiresIn:r,willExpire:r&&r<=c.data.timeWarningExpire,pending:i,block:null!==t.written?t.written.number:t.cert_time?t.cert_time.block:null,valid:r>0})}),[])})).catch((function(e){if(e&&e.ucode==n.errorCodes.NO_MATCHING_MEMBER)return[];if(e&&1002==e.ucode)returnconsole.warn("[wallet-service] Detecting Duniter issue #1309 ! Applying workaround... "),[];throwe})).then((function(e){vart=_.values(u);if(!t.length)returne;if(l.data.initPhase)returnt.reduce((function(e,t){returne.concat({pubkey:t.pubkey,uid:t.uid,isMember:t.isMember,wasMember:t.wasMember,time:null,expiresIn:a.sigWindow,willExpire:!1,pending:!0,block:0,valid:!0})}),e);vari=t.reduce((function(e,t){vari=d&&t.cert_time?t.cert_time.block:t.sigDate?t.sigDate.split("-")[0]:null;returnangular.isDefined(i)&&(e[i]?e[i].push(t):e[i]=[t]),e}),{});returnn.blockchain.blocks(_.keys(i)).then((function(t){returne=t.reduce((function(e,t){returne.concat(i[t.number].reduce((function(e,i){varn=t.medianTime,s=Math.max(0,n+a.sigWindow-o),l=!i.cert_time||!i.cert_time.block_hash||i.cert_time.block_hash==t.hash;l||console.debug("[wot] Invalid cert {0}: block hash changed".format(i.pubkey.substring(0,8)));varu=s>0&&(!r||i.isMember)&&l;returne.concat({pubkey:i.pubkey,uid:i.uid,isMember:i.isMember,wasMember:i.wasMember,time:n,expiresIn:s,willExpire:s&&s<=c.data.timeWarningExpire,pending:!0,block:d&&i.cert_time?i.cert_time.block:i.sigDate?i.sigDate.split("-")[0]:null,valid:u})}),[]))}),e)}))})).then((function(e){vart=e.reduce((function(e,t){return!t.pending&&t.valid&&t.expiresIn>=a.sigWindow&&(e[t.pubkey]=!0),e}),{});e=function(e){return_.sortBy(e,(function(e){vart=1;returnt+=1e12*(e.expiresIn?e.expiresIn:0),t+=1e7*(e.isMember?1:0),-(t+=10*(e.block?e.block:0))}))}(e);vari=[],n=[];return{valid:e.reduce((function(e,a){returna.pending?(a.valid&&!t[a.pubkey]?i.push(a):a.valid||t[a.pubkey]||n.push(a),e):e.concat(a)}),[]),pending:i,error:n}}))},v=function(e,i,a){varo;if(a=a||{},!e&&i&&!a.force)returnn.wot.member.getByUid(i).then((function(t){if(t)returnv(t.pubkey,t.uid,n);varn=angular.copy(n||{});returnn.force=!0,v(e,i,n)}));if(e){if((o=!1!==a.cache?m.get(e):null)&&(!i||o.uid===i)&&(!a.blockUid||o.blockUid===a.blockUid))returnconsole.debug("[wot] Identity {{0}} found in cache".format(e.substring(0,8))),t.when(o);console.debug("[wot] Loading identity {{0}}...".format(e.substring(0,8))),o={pubkey:e,uid:i}}elseconsole.debug("[wot] Loading identity from uid {{0}}...".format(i)),o={uid:i};a.blockUid&&(o.blockUid=a.blockUid);varr,s,c=Date.now();returnt.all([l.parameters().then((function(e){r=e})),l.blockchain.current(!0).then((function(e){s=e.medianTime})).catch((function(e){if(!e||e.ucode!=n.errorCodes.NO_CURRENT_BLOCK)throwe;s=moment.utc().unix()})),N(o,!1!==a.cache),h(e,i)]).then((function(e){vari=e[3];if(!o.requirements.uid)returnconsole.debug("[wot] No requirements found: using data from lookup"),angular.merge(o,i),voiddeleteo.lookup;vara=o.requirements.uid+"-"+o.requirements.meta.timestamp;returnt.all([I(n.wot.certifiersOf,o.pubkey,i.lookup?i.lookup.certifications[a]:null,r,s,!0).then((function(e){o.received_cert=e.valid,o.received_cert_pending=e.pending,o.received_cert_error=e.error})),I(n.wot.certifiedBy,o.pubkey,i.lookup?i.lookup.givenCertifications:null,r,s,!1).then((function(e){o.given_cert=e.valid,o.given_cert_pending=e.pending,o.given_cert_error=e.error}))])})).then((function(){returno.requirements.pendingCertificationCount=o.received_cert_pending?o.received_cert_pending.length:o.requirements.pendingCertificationCount,o.requirements.revoked=angular.isDe
USE_FALLBACK_NODE:"Peer <b>{{old}}</b> unreachable or invalid address.<br/><br/>Do you want to temporarily use the <b>{{new}}</b> node?",ISSUE_524_SEND_LOG:"The transaction was rejected because of a known problem (issue #524) but not reproduced.<br/><br/>To help developers correct this error, do you accept <b>the transmission of your logs</b> per message?<br/><small>(No confidential data is sent)</small>"},DOWNLOAD:{POPUP_TITLE:"<b>Revocation file</b>",POPUP_REVOKE_MESSAGE:"To safeguard your account, please download the <b>account revocation document</b>. It will allow you to cancel your account (in case of account theft, ID, an incorrectly created account, etc.).<br/><br/><b>Please store it in a safe place.</b>"},HELP:{TITLE:"Online help",JOIN:{SECTION:"Join",SALT:'The secret identifier is very important. It is used to hash you password, which in turn is used to calculate your <span class="text-italic">public account key</span> (its number) and the private key to access it.<br/><b>Please remeber this identifier well</b>, because there is no way to recover it when lost.<br/>Furthermore, it cannot be changed without having to create a new account.<br/><br/>A good secret identifier must be sufficiently long (8 characters at the very least) and as original as possible.',PASSWORD:"The password is very important. Together with the secret identifier, it is use to calculate your account number (pblic key) and the private key to access it.<br/><b>Please remember it well</b>, because there is no way to recover it when lost.<br/>Furthermore, it cannot be changed without having to create a new account.<br/><br/>A good password is made (ideally) of at least 8 characters, with at least one capital and one number.",PSEUDO:'A pseudonym is used only when joining as <span class="text-italic">member</span>. It is always associated with a wallet (by its <span class="text-italic">public key</span>).<br/>It is published on the network so that other users may identify it, certify or send money to the account.<br/>A pseudonym must be unique among all members (current and past).'},LOGIN:{SECTION:"Log in",PUBKEY:"Account public key",PUBKEY_DEF:'The public key of the keychain is generated from the entered identifiers (any), but does not correspond to an account already used.<br/><b>Make sure your public key is the same as your account</b>. Otherwise, you will be logged into an account that is probably never used, as the risk of collision with an existing account is very small.<br/><a href="https://en.wikipedia.org/wiki/Elliptic_curve_cryptography" target="_ system">Learn more about cryptography</a> by public key.',METHOD:"Connection methods",METHOD_DEF:"Several options are available to connect to a portfolios: <br/> - The connection <b>with salt (simple or advanced)</b> mixes your password with the secret identifier, to limit the attempts of piracy<br/> - The connection <b>using public key</b> prevents you from entering your credentials, which you will be asked only when an operation need it.<br/> - The connection <b>using keychain file</b> will read the public and private keys of the account from a file without the need to enter credentials. Several file formats are possible."},GLOSSARY:{SECTION:"Glossary",PUBKEY_DEF:"A public key always identifies a wallet. It may identify a member. In Cesium it is calculated using the secret identifier and the password.",MEMBER:"Member",MEMBER_DEF:'A member is a real and living human, wishing to participate freely to the monitary community. The member will receive universal dividend, according to the period and amount as defined in the <span class="text-italic">currency parameters</span>.',CURRENCY_RULES:"Currency rules",CURRENCY_RULES_DEF:'Thecurrencyrulesaredefinedonlyonce,andforall.Theysettheparametersunderwhichthecurrencywillperform:universaldividendcalculation,theamountofcertificationsneededtobecomeamember,themaximumamountofcertificationsamembercansend,etc.<br/><br/>Theparameterscannotbemodifiedbecauseoftheuseofa<spanclass="text-italic">Blockchain</spa
METHOD_DEF:'Pluraj eblecoj disponeblas por konekti vin al monujo:<br/> - La konekto <b>per salumado (simpla aŭ sperta)</b> miksas vian pasvorton dank\'al la sekreta identigilo, por limigi la provojn de <a href="https://fr.wikipedia.org/wiki/Attaque_par_force_brute" target="_system">kodrompado per kruda forto</a> (ekzemple per konataj vortoj.<br/> - La konekto <b>per publika ŝlosilo</b> evitigas tajpi viajn identigilojn, kiuj estos petataj de vi, nur kiam venos la momento dum operacio ĉe la konto.<br/> - La konekto <b>per dosiero pri ŝlosilaro</b> legas la ŝlosilojn (publikan kaj privatan) de la konto, per dosiero, sen la bezono tajpi identigilojn. Pluraj strukturoj de dosiero eblas.'},GLOSSARY:{SECTION:"Glosaro",PUBKEY_DEF:'Publika ŝlosilo identigas monujon, kiu povas identigi membron aŭ rilati al anonima monujo. Ĉe Cesium la publika ŝlosilo estas kalkulita (implicite) dank\'al la sekreta identigilo kaj la pasvorto.<br/><a href="https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique" target="_system">Scii pli pri kriptografio</a> per publika ŝlosilo.',MEMBER:"Membro",MEMBER_DEF:'Membro estas homa persono fizika kaj vivanta, kiu deziras libere partopreni en la mona komunumo. Li/ŝi kunproduktas universalan dividendon, laŭ periodo kaj sumo tiel difinitaj kiel en la <span class="text-italic">reguloj de la mono</span>',CURRENCY_RULES:"Reguloj de la mono",CURRENCY_RULES_DEF:'La reguloj de la mono estas difinitaj definitive. Ili fiksas la funkciadon de la mono: la kalkulon de la universala dividendo, la nombron de necesaj atestaĵoj por esti membro, la maksimuman nombron da atestaĵoj, kiujn povas doni unu membro, ktp. <a href="#/app/currency">Vidi la nuntempajn regulojn</a>.<br/>La nemodifo de la reguloj tra la tempo eblas per uzado de <span class="text-italic">Blokĉeno</span>, kiu entenas kaj plenumas tiujn regulojn, kaj konstante kontrolas ties ĝustan aplikadon.',BLOCKCHAIN:'Ĉeno de blokoj (<span class="text-italic">Blokchain/Blokĉeno</span>)',BLOCKCHAIN_DEF:'La Blokĉeno estas malcentrigita sistemo, kiu, kaze de Duniter, servas por enteni kaj plenumi la <span class="text-italic">regulojn de la mono</span>.<br/><a href="https://duniter.org/fr/comprendre/" target="_system">Scii pli pri Duniter</a> kaj la funkciado de ties blokĉeno.',UNIVERSAL_DIVIDEND_DEF:'La Universala Dividendo (UD) estas la kvanto de mono kunkreita de ĉiu membro, laŭ la periodo kaj kalkulo difinitaj en la <span class="text-italic">reguloj de la mono</span>.<br/>Por ĉiu perioda dato, la membroj ricevas en sian konton la saman kvanton da nova mono.<br/><br/>La UD spertas regulan kreskon, por resti justa inter la membroj (nunaj kaj venontaj), kalkulitan depende de la meza vivespero, kiel estas demonstrite en la Teorio Relativa pri la Mono (TRM).<br/><a href="http://trm.creationmonetaire.info" target="_system">Scii pli pri la TRM</a> kaj la liberaj monoj.',WOT:"Reto de Fido (RdF)",WOT_DEF:"La Reto de Fido konsistas el la tuto de la membroj de la mono, kaj el la atesto-ligoj, kiuj kunligas ilin.",DISTANCE_RULE:"Regulo pri distanco",DISTANCE_RULE_DEF:"La regulo pri distanco de la Reto de Fido difinas <b>maksimuman distancon nepran</b> inter petanto kaj minimuma nombro da referencaj membroj (aŭ centraj membroj). Tiu distanco estas kalkulita uzante la ligojn inter atestaĵoj."},TIP:{MENU_BTN_CURRENCY:"La menuo <b>{{'MENU.CURRENCY'|translate}}</b> ebligas konsulti la <b>regulojn de la mono</b> kaj ties staton.",CURRENCY_WOT:"La <b>nombro de membroj</b> montras la gravecon de la komunumo kaj ebligas <b>sekvi ties evoluon</b>.",CURRENCY_MASS:"Sekvu ĉi tie la <b>ĉioman kvanton da mono</b> ekzistanta kaj ties <b>mezan distribuon</b> por membro.<br/><br/>Tio ĉi ebligas taksi la <b>gravecon de iu sumo</b>, kompare kun tio, kion <b>posedas la aliuloj</b> en sia konto (mezume).",CURRENCY_UNIT_RELATIVE:"Launuouzata(“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”)signifas,kelasumojen{{currency|capitalize}}estisdividitajperla<b>UniversalaDividendo</b>(UD).<br/><br/><small>Tiurelativaunuoestas
WALLET_BALANCE_RELATIVE:"{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>L'unité utilisée (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) signifie que le montant en {{currency|capitalize}} a été divisé par le <b>Dividende Universel</b> (DU) co-créé par chaque membre.<br/><br/>Actuellement 1 DU vaut {{currentUD|formatInteger}} {{currency|capitalize}}s.",WALLET_BALANCE_CHANGE_UNIT:"Vous pourrez <b>changer l'unité</b> d'affichage des montants dans les <b><i class=\"icon ion-android-settings\"></i> {{'MENU.SETTINGS'|translate}}</b>.<br/><br/>Par exemple pour visualiser les montants <b>directement en {{currency|capitalize}}</b>, plutôt qu'en unité relative.",WALLET_PUBKEY:"Voici la clé publique de votre compte. Vous pouvez la communiquer à un tiers afin qu'il identifie plus simplement votre compte.",WALLET_SEND:"Effectuer un paiement en quelques clics.",WALLET_SEND_NO_MONEY:"Effectuer un paiement en quelques clics.<br/>(Votre solde ne le permet pas encore)",WALLET_OPTIONS:"Ce bouton permet l'accès aux <b>actions d'adhésion</b> et de sécurité.<br/><br/>N'oubliez pas d'y jeter un oeil !",WALLET_RECEIVED_CERTS:"S'affichera ici la liste des personnes qui vous ont certifié.",WALLET_CERTIFY:"Le bouton <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> permet de sélectionner une identité et de la certifier.<br/><br/>Seuls des utilisateurs <b>déjà membres</b> peuvent en certifier d'autres.",WALLET_CERT_STOCK:"Votre stock de certifications (émises) est limité à <b>{{sigStock}} certifications</b>.<br/><br/>Ce stock se renouvelle avec le temps, au fur et à mesure que les certifications s'invalident.",MENU_BTN_WALLETS:"Le menu <b>{{'MENU.WALLETS'|translate}}</b> permet d'ajouter des portefeuilles supplémentaires que vous gérer.",MENU_BTN_TX:"Le menu <b>{{'MENU.TRANSACTIONS'|translate}}</b> permet de consulter votre solde, l'historique vos transactions et d'envoyer un paiement.",MENU_BTN_WOT:"Le menu <b>{{'MENU.WOT'|translate}}</b> permet de rechercher parmi les <b>utilisateurs</b> de la monnaie (membres ou non).",WOT_SEARCH_TEXT_XS:"Pour rechercher dans l'annuaire, tapez les <b>premières lettres d'un pseudonyme</b> (ou d'une clé publique).<br/><br/>La recherche se lancera automatiquement.",WOT_SEARCH_TEXT:"Pour rechercher dans l'annuaire, tapez les <b>premières lettres d'un pseudonyme</b> (ou d'une clé publique). <br/><br/>Appuyer ensuite sur <b>Entrée</b> pour lancer la recherche.",WOT_SEARCH_RESULT:"Visualisez la fiche détaillée simplement en <b>cliquant</b> sur une ligne.",WOT_VIEW_CERTIFICATIONS:"La ligne <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> montre combien de membres ont validé cette identité.<br/><br/>Ces certifications attestent que le compte appartient à <b>une personne humaine vivante</b> n'ayant <b>aucun autre compte membre</b>.",WOT_VIEW_CERTIFICATIONS_COUNT:"Il faut au moins <b>{{sigQty}} certifications</b> pour devenir membre et recevoir le <b>Dividende Universel</b>.",WOT_VIEW_CERTIFICATIONS_CLICK:"Un clic ici permet d'ouvrir <b>la liste de toutes les certifications</b> de l'identité (reçues et émises).",WOT_VIEW_CERTIFY:"Le bouton <b>{{'WOT.BTN_CERTIFY'|translate}}</b> permet d'ajouter votre certification à cette identité.",CERTIFY_RULES:"<b>Attention :</b> Ne certifiez que des <b>personnes physiques vivantes</b>, ne possédant aucun autre compte membre.<br/><br/>La sécurité de la monnaie dépend de la vigilance de chacun !",MENU_BTN_SETTINGS:"Les <b>{{'MENU.SETTINGS'|translate}}</b> vous permettront de configurer l'application.",HEADER_BAR_BTN_PROFILE:"Cliquez ici pour accéder à votre <b>profil utilisateur.</b>",SETTINGS_CHANGE_UNIT:"Vous pourrez <b>changer d'unité d'affichage</b> des montants en cliquant ci-dessus.<br/><br/>- Désactivez l'option pour un affichage des montants en {{currency|capitalize}}.<br/>- Activez l'option pour un affichage relatif en {{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub> (tous les montants seront <b>divisés</b> par le Dividende Universel courant).",END_LOGIN:"Cettevisiteguid<EFBFBD>
;0===o?n="g"===r||"G"===r?"Ğ":r:o>0&&-1!=a.indexOf(i[o-1])&&(n+=r)}i=n.toUpperCase()}else"G"===(i=i.toUpperCase()).charAt(0)&&(i="Ğ"+(i.length>1?i.substr(1):""));returne[t]=i,i}})).filter("upper",(function(){returnfunction(e){returne?e.toUpperCase():""}})).filter("formatPubkey",(function(){returnfunction(e){returne?e.substr(0,8):""}})).filter("formatHash",(function(){returnfunction(e){returne?e.substr(0,4)+e.substr(e.length-4):""}})).filter("formatCategory",(function(){returnfunction(e){returne&&e.length>28?e.substr(0,25)+"...":e}})).filter("formatSlug",(function(){returnfunction(e){returne?encodeURIComponent(e.toLowerCase().replace(/<[^>]+>/g,"").replace(/[^\w ]+/g,"").replace(/ +/g,"-")):""}})).filter("formatEncodeURI",(function(){returnfunction(e){returne?encodeURIComponent(e):""}})).filter("truncText",(function(){returnfunction(e,t){returnt=t||500,!e||e.length<=t?e:e.substr(0,t)+"..."}})).filter("truncUrl",(function(){returnfunction(e,t){t=t||25;vari=e.startsWith("http://")?7:e.startsWith("https://")?8:0;returni=e.startsWith("www.",i)?i+4:i,!e||e.length-i<=t?e.substr(i):e.substr(i,t)+"..."}})).filter("trustAsHtml",["$sce",function(e){returnfunction(t){returne.trustAsHtml(t)}}]),angular.module("cesium.platform",["ngIdle","cesium.config","cesium.services"]).config(["$translateProvider","csConfig",function(e,t){e.uniformLanguageTag("bcp47").determinePreferredLanguage().useSanitizeValueStrategy(null).fallbackLanguage([t.fallbackLanguage?t.fallbackLanguage:"en"]).useLoaderCache(!0)}]).config(["$httpProvider","csConfig",function(e,t){e.defaults.timeout=t.timeout?t.timeout:3e5,e.defaults.useXDomain=!0,deletee.defaults.headers.common["X-Requested-With"]}]).config(["$compileProvider","csConfig",function(e,t){e.debugInfoEnabled(!0===t.debug),e.imgSrcSanitizationWhitelist(/^\s*(filesystem:resource|resource|moz-extension|chrome-extension|file|data):/)}]).config(["$animateProvider",function(e){e.classNameFilter(/\banimate-/)}]).config(["CacheFactoryProvider","csConfig",function(e,t){angular.extend(e.defaults,{recycleFreq:6e4,storagePrefix:"caches.",capacity:100,maxAge:t.cacheTimeMs||6e4,storageMode:"memory"})}]).config(["screenmatchConfigProvider",function(e){e.config.rules="bootstrap"}]).config(["$ionicConfigProvider",function(e){vart=ionic.Platform.isIOS();e.scrolling.jsScrolling(t),e.views.maxCache(5)}]).config(["IdleProvider","csConfig",function(e,t){e.idle(t.logoutIdle||600),e.timeout(t.logoutTimeout||15)}]).factory("$exceptionHandler",["$log",function(e){returnfunction(t,i){i?e.error(t,i):e.error(t)}}]).factory("csPlatform",["ionicReady","$rootScope","$q","$state","$translate","$timeout","UIUtils","BMA","Device","csHttp","csConfig","csCache","csSettings","csCurrency","csWallet",function(e,t,i,n,a,o,r,s,l,c,d,u,m,E,p){varb,T,f,g,N=0,h=!1;functionI(){if(!g){vare=t.$on("$stateChangeStart",(function(e,t,i,a){e.defaultPrevented||"app.home"===t.name||"app.settings"===t.name||(e.preventDefault(),T?T.then((function(){n.go(t.name,i)})):r.loading.hide())}));g=e}}functionv(){g&&g(),g=null}functionO(e){if(e)return!0;b=b||m.data.node;vart=m.data.fallbackNodes&&N<m.data.fallbackNodes.length&&m.data.fallbackNodes[N++];if(!t)throw"ERROR.CHECK_NETWORK_CONNECTION";vari=t.host+(t.port||80==t.port||443==t.port?"":":"+t.port);returns.node.same(t)?(console.debug("[platform] Skipping fallback node [{0}]: same as actual node".format(i)),O()):c.get(t.host,t.port,"/node/summary",443==t.port||s.node.forceUseSsl)().catch((function(e){console.error("[platform] Could not reach fallback node [{0}]: skipping".format(i))})).then((function(e){if(!e)returnO();varn={old:s.server,new:i};returnn.old===n.new&&(s.port!=t.port?n.new+=":"+t.port:0!=s.useSsl||!t.useSsl&&443!=t.port||(n.new+=" (SSL)")),a("CONFIRM.USE_FALLBACK_NODE",n).then((function(e){returnr.alert.confirm(e)})).then((function(e){if(e)returnm.data.node=t,m.data.node.temporary=!0,c.cache.clear(),s.copy(t).then(O)}))}))}functionR(){returnconsole.debug("[platform] restarting csPlatform"),C().then((function(){returno(A,200)}))}functionA(){returnI(),T=e().then(