{"version":3,"sources":["scripts/app-eb90d7cf47.js"],"names":["modules","angular","module","TeamController","$scope","$rootScope","$timeout","StaffService","init","destroyListener","$on","event","tab","vm","activeTab","triggerMenuActiveLinkUpdate","getWidth","qty","$broadcast","state","this","data","getData","memberDialog","open","$inject","controller","StrategyController","ProjectsController","ProjectsService","showCurrent","type","currentProjects","current","list","currentType","showCurrentList","showProjectTypeSelect","undefined","showFinishedProjects","NewsController","$window","$sce","NewsService","ENV","setContent","index","setNewsData","window","innerWidth","element","addClass","newsDialog","content","activeNewsArticle","searchString","replaceString","news","length","copy","api","replace","activeContentIndex","style","top","initContent","selectFirst","onFetch","trustSrc","src","addition","location","origin","url","trustAsResourceUrl","imgPrefix","config","autoHideScrollbar","theme","advanced","updateOnContentResize","scrollInertia","HomeController","$interval","StatsService","BannerService","localStorageService","slideBackground","i","find","removeClass","next","prev","count","fetch","destroySlider","cancel","openVideoPopup","videoDialog","video","ua","get","en","banners","stats","ContactUsController","ContactService","uiGmapIsReady","getInTouch","submitted","form","$valid","map","center","latitude","longitude","control","refresh","zoom","marker","idKey","coords","promise","then","triggerResize","dispatchEvent","Event","gmap","getGMap","google","maps","Marker","position","lat","lng","title","ifhVideoDialog","ClientVideoDialogController","closeDialog","restrict","templateUrl","scope","controllerAs","bindToController","directive","ifhTeamMemberDialog","TeamMemberController","$log","$destroy","$watch","updateDialog","id","oldId","getIndex","arr","enableKeyListeners","on","onKeyDown","indexInManagers","indexInExecutives","staff","executives","managers","members","currentMember","previous","$applyAsync","selectedID","keyCode","off","ifhTeamMember","MemberController","openMemberDialog","dialogData","member","ifhSplitter","SplitterController","ifhProjectsTimeline","projects","ProjectsTimelineController","$document","years","tempMapping","len","project","year","Date","date","getFullYear","toString","indexOf","push","sort","j","l","scrollTo","wrapper","duScrollToElementAnimated","ifhNewsDialog","ClientProjectDialogController","indexInCompleted","indexInCurrent","images","projectsList","completed","result","numberLoaded","scrollTop","ifhProjectCardCompleted","ProjectCardCompletedController","openDialog","projectDialog","_generateRandomImage","random","noImageAvailable","thumbnail","timelineImg","Math","floor","ifhProjectCard","ProjectCardController","ClientNewsDialogController","ifhNewsCategories","NewsCategoriesController","$state","changeType","go","activeState","name","links","text","toState","ifhMenuToggle","menuOpened","MenuToggleController","toggleMenu","closeMenu","openMenu","$body","ifhMenu","MenuController","$location","onStateChange","navigate","opened","skipEventBroadcast","link","isActive","activateTab","hash","isSubItem","axis","dictionary","scroller","ifhLoginDialog","showing","LoginController","AdminService","login","onError","msg","error","logIn","credentials","closePopUp","backdrop","target","parents","password","adminData","ifhClientLoader","ifhHeader","loginShowing","HeaderController","openLoginPopup","href","changeLang","lang","lang_chose","set","reload","languages","language_name","ifhFooter","FooterController","currentYear","ifhDirectorCard","DirectorController","director","$resource","onSuccess","response","success","loading","resource","lang_id","factory","$mdToast","successCallback","a","b","fetching","directors","advisers","person","method","addNewLines","proj","description","split","join","forEach","callback","LanguageService","add","update","remove","HttpInterceptors","$q","$injector","request","timeout","responseError","rejection","message","statusText","debug","show","simple","textContent","reject","service","DictionaryService","options","forClient","_dictionaryToObject","key","value","dataModel","showError","save","phone","email","question","slice","errCallback","res","role","user","redirectToAdmin","hostname","adminURL","ClientController","newValue","backDropToRight","scroll","selector","skipTimeout","runBlock","run","routerConfig","$stateProvider","$urlRouterProvider","abstract","otherwise","$logProvider","$httpProvider","uiGmapGoogleMapApiProvider","localStorageServiceProvider","debugEnabled","setPrefix","interceptors","defaults","withCredentials","headers","common","Accept","configure","v","constant","$templateCache","put"],"mappings":"CAAA,WACE,YAEA,IAAIA,IACF,UACA,YACA,aACA,aACA,SACA,aACA,YACA,aACA,qBACA,eACA,WACA,oBACA,gBAGFC,SAAQC,OAAO,MAAOF,MAGxB,WACE,YAOA,SAASG,GAAeC,EAAQC,EAAYC,EAAUC,GAcpD,QAASC,KACP,GAAIC,GAAkBJ,EAAWK,IAAI,yBAA0B,SAAUC,EAAOC,GAC9EC,EAAGC,UAAYF,GAGjBR,GAAOM,IAAI,WAAYD,GAEvBI,EAAGC,UAAYD,EAAGC,WAAa,EAC/BR,EAASS,EAA6B,KAGxC,QAASC,GAASC,GAChB,MAAIA,GAAM,IAAM,EACP,GACEA,EAAM,IAAM,EACd,GAEA,GAIX,QAASF,KACPV,EAAWa,WAAW,oBACpBC,MAAO,cACPP,IAAKC,EAAGC,YArCZ,GAAID,GAAKO,IAETP,GAAGQ,KAAOd,EAAae,UAEvBT,EAAGU,cACDC,MAAM,GAGRX,EAAGG,SAAWA,EACdH,EAAGE,4BAA8BA,EAEjCP,IAjBFL,EAAesB,SAAW,SAAU,aAAc,WAAY,gBAA9DxB,QACGC,OAAO,OACPwB,WAAW,iBAAkBvB,MA+ClC,WACE,YAOA,SAASwB,MALT1B,QACGC,OAAO,OACPwB,WAAW,qBAAsBC,MAQtC,WACE,YAOA,SAASC,GAAmBxB,EAAQC,EAAYC,EAAUuB,GAaxD,QAASrB,KACP,GAAIC,GAAkBJ,EAAWK,IAAI,6BAA8B,SAAUC,EAAOC,GAClFC,EAAGC,UAAYF,GAGjBR,GAAOM,IAAI,WAAYD,GAEvBI,EAAGC,UAAYD,EAAGC,WAAa,EAC/BR,EAASS,EAA6B,KAGxC,QAASe,GAAYC,GACnBlB,EAAGmB,gBAAkBnB,EAAGQ,KAAKA,KAAKY,QAAQF,GAAMG,KAChDrB,EAAGsB,YAAcJ,EACjBlB,EAAGuB,iBAAkB,EAGvB,QAASC,KACPxB,EAAGC,UAAY,EACfD,EAAGuB,iBAAkB,EACrBvB,EAAGsB,YAAcG,OACjBzB,EAAGmB,mBACHjB,IAGF,QAASwB,KACP1B,EAAGC,UAAY,EACfD,EAAGuB,iBAAkB,EACrBvB,EAAGsB,YAAcG,OACjBzB,EAAGmB,mBACHjB,IAGF,QAASA,KACPV,EAAWa,WAAW,oBACpBC,MAAO,kBACPP,IAAKC,EAAGC,YAhDZ,GAAID,GAAKO,IAETP,GAAGC,UAAY,EACfD,EAAGQ,KAAOQ,EAAgBP,UAE1BT,EAAGiB,YAAcA,EACjBjB,EAAGwB,sBAAwBA,EAC3BxB,EAAG0B,qBAAuBA,EAC1B1B,EAAGE,4BAA8BA,EAEjCP,IAfFoB,EAAmBH,SAAW,SAAU,aAAc,WAAY,mBADlExB,QACGC,OAAO,OACPwB,WAAW,qBAAsBE,MA0DtC,WACE,YAOA,SAASY,GAAelC,EAAUmC,EAASC,EAAMC,EAAaC,GAqB5D,QAASC,GAAWC,EAAOf,GASzB,MARAgB,GAAYD,EAAOf,GAEfU,EAAQO,OAAOC,WAAa,MAC9BhD,QAAQiD,QAAQ,QAAQC,SAAS,aACjCtC,EAAGuC,WAAWC,QAAUxC,EAAGyC,kBAC3BzC,EAAGuC,WAAW5B,MAAO,IAGhB,EAGT,QAASuB,GAAYD,EAAOf,GAC1B,GACIsB,GAASE,EAAcC,EADvBC,EAAO5C,EAAGQ,KAAKA,KAAKU,EAGnB0B,IAASA,EAAKC,SAInB7C,EAAGyC,kBAAoBrD,QAAQ0D,KAAKF,EAAKX,IAEzCO,EAAUI,EAAKX,GAAOO,SAAW,GAEX,IAAjBxC,EAAGC,WAAoC,IAAjBD,EAAGC,YAAoBuC,IAChDE,EAAe,gCACfC,EAAgB,YAAcZ,EAAIgB,IAAM,sBACxC/C,EAAGyC,kBAAkBD,QAAUA,EAAQQ,QAAQN,EAAcC,IAG/D3C,EAAGiD,mBAAqBhB,EAExBxC,EAAS,WACPL,QAAQiD,QAAQ,mBAAmB,GAAGa,MAAMC,IAAM,KAItD,QAASC,GAAYlC,GASnB,QAASmC,KACPnB,EAAY,EAAGhB,GATjB,GAAI0B,GAAO5C,EAAGQ,KAAKA,KAAKU,EAEpB0B,IAAQA,EAAKC,OACfQ,IAEAvB,EAAYwB,QAAQD,GAQxB,QAASE,GAASC,GAChB,GAAIC,GAAuB,0BAAZ1B,EAAIgB,IAAkChB,EAAIgB,IAAMnB,EAAQ8B,SAASC,OAAS5B,EAAIgB,GAC7FU,IAAYD,CACZ,IAAII,GAAM,oCAAsCH,EAAW,gBAE3D,OAAO5B,GAAKgC,mBAAmBD,GA5EjC,GAAI5D,GAAKO,IAETP,GAAG8D,UAAY/B,EAAIgB,IACnB/C,EAAGQ,KAAOsB,EAAYrB,UACtBT,EAAG+D,QACDC,mBAAmB,EACnBC,MAAO,eACPC,UACEC,uBAAuB,GAEzBC,cAAe,GAEjBpE,EAAGuC,YACD5B,MAAM,GAGRX,EAAGgC,WAAaA,EAChBhC,EAAGoD,YAAcA,EACjBpD,EAAGuD,SAAWA,EAtBhB5B,EAAef,SAAW,WAAY,UAAW,OAAQ,cAAe,OAFxExB,QACGC,OAAO,OACPwB,WAAW,iBAAkBc,MAqFlC,WACE,YAOA,SAAS0C,GAAe9E,EAAQ+E,EAAW7E,EAAUmC,EAASG,EAAKwC,EAAcC,EAAeC,GAqB9F,QAASC,KACFC,GAMHvF,QAAQiD,QAAQ,gBACbuC,KAAK,SACLC,YAAY,cAAgBC,GAC5BC,OACAF,YAAY,SAAWzD,GACvBkB,SAAS,SAAWwC,GACvBH,EAAI,EACJvD,EAAW4D,EAAQ5D,EAAYA,EAAU,EAAK,EAC9C0D,EAAQE,GAASF,EAASA,EAAO,EAAK,IAbtC1F,QAAQiD,QAAQ,gBACbuC,KAAK,SACLtC,SAAS,cAAgBwC,GAC5BH,EAAI,GAcR,QAAShF,KACP6E,EAAcS,QACdV,EAAaU,QAEbxF,EAAS,WACPyF,EAAgBZ,EAAUI,EAAiB,MAE3CnF,EAAOM,IAAI,WAAY,WACrByE,EAAUa,OAAOD,MAElB,MAGL,QAASE,KACPpF,EAAGqF,YAAY1E,MAAO,EACtBX,EAAGqF,YAAYC,MAAQ,KAtDzB,GAKIJ,GALAlF,EAAKO,KACLoE,EAAI,EACJK,EAAQ,EACR5D,EAAU,EACV0D,EAAO,CAEX9E,GAAGuF,GAA4C,MAAvCd,EAAoBe,IAAI,WAChCxF,EAAGyF,GAA4C,MAAvChB,EAAoBe,IAAI,YAA6D,OAAvCf,EAAoBe,IAAI,YAA8D/D,SAAvCgD,EAAoBe,IAAI,WAC7HxF,EAAGqF,aACD1E,MAAM,GAGRX,EAAG0F,QAAUlB,EAAc/D,UAC3BT,EAAG2F,MAAQpB,EAAa9D,UACxBT,EAAG8D,UAAY/B,EAAIgB,IAEnB/C,EAAGoF,eAAiBA,EAEpBzF,IArBF0E,EAAezD,SAAW,SAAU,YAAa,WAAY,UAAW,MAAO,eAAgB,gBAAiB,uBAHhHxB,QACGC,OAAO,OACPwB,WAAW,iBAAkBwD,MA+DlC,WACE,YAOA,SAASuB,GAAoBhE,EAASnC,EAAUoG,EAAgBC,EAAerB,GAC7E,GAAIzE,GAAKO,IAETP,GAAGuF,GAA4C,MAAvCd,EAAoBe,IAAI,WAChCxF,EAAGyF,GAA4C,MAAvChB,EAAoBe,IAAI,WAEhCxF,EAAGQ,KAAOqF,EAAepF,UAEzBT,EAAG+F,WAAa,WACd/F,EAAGgG,WAAY,EAEXhG,EAAGiG,KAAKC,QACVL,EAAeE,cAInB/F,EAAGmG,KACDC,QACEC,SAAU,UACVC,UAAW,WAEbC,WACAC,SAAS,EACTC,KAAM,GACNC,QACEC,MAAO,UACPC,QACEP,SAAU,UACVC,UAAW,aAMjBR,EAAce,QAAQ,GAAGC,KAAK,WAe5B,QAASC,KACP/G,EAAGmG,IAAII,QAAQC,SACbH,SAAU,UACVC,UAAW,YAEb1E,EAAQoF,cAAc,GAAIC,OAAM,WAnBlC,GAAIC,GAAOlH,EAAGmG,IAAII,QAAQY,SAE1B,IAAIvF,GAAQwF,OAAOC,KAAKC,QACtBC,UACEC,IAAK,UACLC,IAAK,WAEPtB,IAAKe,EACLQ,MAAO,KAETjI,EAASsH,EAAe,KACxBtH,EAASsH,EAAe,KACxBtH,EAASsH,EAAe,OAhD5BnB,EAAoBhF,SAAW,UAAW,WAAY,iBAAkB,gBAAiB,uBAJzFxB,QACGC,OAAO,OACPwB,WAAW,sBAAuB+E,MAkEvC,WACE,YAOA,SAAS+B,KAaP,QAASC,KAKP,QAASC,KACP7H,EAAGQ,KAAKG,MAAO,EACfvB,QAAQiD,QAAQ,QAAQwC,YAAY,aANtC,GAAI7E,GAAKO,IAETP,GAAG6H,YAAcA,EAfnB,OACEC,SAAU,IACVC,YAAa,gDACbC,OACExH,KAAM,KAERK,WAAY+G,EACZK,aAAc,KACdC,kBAAkB,GAdtB9I,QACGC,OAAO,OACP8I,UAAU,iBAAkBR,MA8BjC,WACE,YAOA,SAASS,KAaP,QAASC,GAAqB9I,EAAQ+I,EAAMvG,EAAKrC,GAY/C,QAASC,KACP,GAAI4I,GAAWhJ,EAAOiJ,OAAO,qBAAsBC,EACnDlJ,GAAOM,IAAI,WAAY0I,GAGzB,QAASE,GAAaC,EAAIC,GA0BxB,QAASC,GAASF,EAAIG,GACpB,IAAK,GAAIlE,GAAI,EAAGA,EAAIkE,EAAIhG,OAAQ8B,IAC9B,GAAIkE,EAAIlE,GAAG+D,KAAOA,EAChB,MAAO/D,EAIX,OAAO,GAGT,QAASmE,KACP1J,QAAQiD,QAAQ,QAAQ0G,GAAG,UAAWC,GApCxC,GAAIC,GAAiBC,EAAmBjH,CAEnCyG,KAILQ,EAAoBN,EAASF,EAAI1I,EAAGmJ,MAAMC,YAC1CH,EAAkBL,EAASF,EAAI1I,EAAGmJ,MAAME,UAEpCH,EAAoB,IACtBlJ,EAAGsJ,QAAUtJ,EAAGmJ,MAAMC,WACtBnH,EAAQiH,GACCD,EAAkB,KAC3BjJ,EAAGsJ,QAAUtJ,EAAGmJ,MAAME,SACtBpH,EAAQgH,GAGVjJ,EAAGuJ,cAAgBvJ,EAAGsJ,QAAQrH,GAC9BjC,EAAGwJ,SAAWxJ,EAAGsJ,QAAQrH,EAAQ,GACjCjC,EAAG8E,KAAO9E,EAAGsJ,QAAQrH,EAAQ,GAEzByG,IAAOC,GACTG,KAkBJ,QAASU,KACPjK,EAAOkK,YAAY,WACbzJ,EAAGwJ,UAAYxJ,EAAGwJ,SAASd,KAC7B1I,EAAGQ,KAAKkJ,WAAa1J,EAAGwJ,SAASd,MAKvC,QAAS5D,KACPvF,EAAOkK,YAAY,WACbzJ,EAAG8E,MAAQ9E,EAAG8E,KAAK4D,KACrB1I,EAAGQ,KAAKkJ,WAAa1J,EAAG8E,KAAK4D,MAKnC,QAASM,GAAUlJ,GACK,KAAlBA,EAAM6J,QACRH,IAC2B,KAAlB1J,EAAM6J,SACf7E,IAIJ,QAAS+C,KACP7H,EAAGQ,KAAKG,MAAO,EACfX,EAAGQ,KAAKkJ,WAAa,KACrBtK,QAAQiD,QAAQ,QAAQuH,IAAI,UAAWZ,GACvC5J,QAAQiD,QAAQ,QAAQwC,YAAY,aArFtC,GAAI7E,GAAKO,IAETP,GAAG8D,UAAY/B,EAAIgB,IACnB/C,EAAGmJ,MAAQzJ,EAAae,UAExBT,EAAG6H,YAAcA,EACjB7H,EAAGwJ,SAAWA,EACdxJ,EAAG8E,KAAOA,EAEVnF,IAtBF,MAKA0I,GAAqBzH,SAAW,SAAU,OAAQ,MAAO,iBAJvDkH,SAAU,IACVC,YAAa,4DACbC,OACExH,KAAM,KAERK,WAAYwH,EACZJ,aAAc,KACdC,kBAAkB,GAdtB9I,QACGC,OAAO,OACP8I,UAAU,sBAAuBC,MA6GtC,WACE,YAOA,SAASyB,GAAc9H,GAcrB,QAAS+H,KAOP,QAASC,KACP3K,QAAQiD,QAAQ,QAAQC,SAAS,aACjCtC,EAAGgK,WAAWN,WAAa1J,EAAGiK,OAAOvB,GACrC1I,EAAGgK,WAAWrJ,MAAO,EATvB,GAAIX,GAAKO,IAETP,GAAG8D,UAAY/B,EAAIgB,IAEnB/C,EAAG+J,iBAAmBA,EAlBxB,OACEjC,SAAU,IACVC,YAAa,8CACbC,OACEiC,OAAQ,IACRD,WAAY,KAEdnJ,WAAYiJ,EACZ7B,aAAc,KACdC,kBAAkB,GATtB2B,EAAcjJ,SAAW,OANzBxB,QACGC,OAAO,OACP8I,UAAU,gBAAiB0B,MAkChC,WACE,YAOA,SAASK,KACP,OACEpC,SAAU,IACVC,YAAa,wCACbC,OACE9G,KAAM,KAERL,WAAYsJ,EACZlC,aAAc,KACdC,kBAAkB,GAItB,QAASiC,MAlBT/K,QACGC,OAAO,OACP8I,UAAU,cAAe+B,MAsB9B,WACE,YAOA,SAASE,KACP,OACEtC,SAAU,IACVC,YAAa,0DACbC,OACEqC,SAAU,KAEZxJ,WAAYyJ,EACZrC,aAAc,WACdC,kBAAkB,GAItB,QAASoC,GAA2B/K,EAAQgL,GAU1C,QAAS5K,KACP,GAAI6K,MACAC,IAEJ,IAAKzK,EAAGqK,SAAR,CAKA,IAAK,GAAI1F,GAAI,EAAG+F,EAAM1K,EAAGqK,SAASxH,OAAY6H,EAAJ/F,EAASA,IAAK,CACtD,GAAIgG,GAAU3K,EAAGqK,SAAS1F,GACtBiG,GAAQD,EAAQC,MAAQ,GAAIC,MAAKF,EAAQG,MAAMC,eAAeC,UAEtC,MAAxBR,EAAMS,QAAQL,IAChBJ,EAAMU,KAAKN,GAGbH,EAAYG,GAAQH,EAAYG,KAAUP,aAC1CI,EAAYG,GAAMP,SAASa,KAAKP,GAIlCH,EAAMW,MAGN,KAAK,GAAIC,GAAI,EAAGC,EAAIb,EAAM3H,OAAYwI,EAAJD,EAAOA,IACvCpL,EAAGQ,KAAK0K,MACNN,KAAMJ,EAAMY,GACZf,SAAUI,EAAYD,EAAMY,IAAIf,YAKtC,QAASiB,GAASV,GAChB,GAAIW,GAAUhB,EAAU3F,KAAK,QAAUgG,EACvCL,GAAUiB,0BAA0BD,EAAS,EAAG,KA5ClD,GAAIvL,GAAKO,IAETP,GAAGQ,QAEHR,EAAGsL,SAAWA,CAEd,IAAI/C,GAAWhJ,EAAOiJ,OAAO,cAAe7I,EAC5CJ,GAAOM,IAAI,WAAY0I,GAnBzB+B,EAA2B1J,SAAW,SAAU,aAPhDxB,QACGC,OAAO,OACP8I,UAAU,sBAAuBiC,MAoEtC,WACE,YAOA,SAASqB,KAaP,QAASC,GAA8BnM,EAAQwC,EAAKf,GAUlD,QAASrB,KACP,GAAI4I,GAAWhJ,EAAOiJ,OAAO,qBAAsBC,EACnDlJ,GAAOM,IAAI,WAAY0I,GAGzB,QAASE,GAAaC,EAAIC,GAyCxB,QAASC,GAASF,EAAIG,GACpB,IAAK,GAAIlE,GAAI,EAAGA,EAAIkE,EAAIhG,OAAQ8B,IAC9B,GAAIkE,EAAIlE,GAAG+D,KAAOA,EAChB,MAAO/D,EAIX,OAAO,GAGT,QAASmE,KACP1J,QAAQiD,QAAQ,QAAQ0G,GAAG,UAAWC,GAnDxC,GAAI2C,GAAkBC,EAAgB3J,EAAOsF,CAK7C,IAJAvH,EAAGQ,KAAKmK,SACNkB,QAAQ,GAGLnD,EAAL,CAIAiD,EAAmB/C,EAASF,EAAI1I,EAAG8L,aAAatL,KAAKuL,UAErD,KAAK,GAAIpH,GAAI,EAAGA,EAAI3E,EAAG8L,aAAatL,KAAKY,QAAQyB,OAAQ8B,IAAK,CAC5D,GAAIqH,GAASpD,EAASF,EAAI1I,EAAG8L,aAAatL,KAAKY,QAAQuD,GAAGtD,KACtD2K,GAAS,KACXJ,EAAiBI,EACjBzE,EAAW5C,GAKXgH,EAAmB,IACrB3L,EAAGQ,KAAKsL,aAAe9L,EAAG8L,aAAatL,KAAKuL,UAC5C9J,EAAQ0J,GACCC,EAAiB,KAC1B5L,EAAGQ,KAAKsL,aAAe9L,EAAG8L,aAAatL,KAAKY,QAAQmG,GAAUlG,KAC9DY,EAAQ2J,GAGVrM,EAAOkK,YAAY,WACjBzJ,EAAGQ,KAAKmK,QAAU3K,EAAGQ,KAAKsL,aAAa7J,GACvCjC,EAAGQ,KAAKmK,QAAQsB,cAAe,EAC/BjM,EAAGQ,KAAKgJ,SAAWxJ,EAAGQ,KAAKsL,aAAa7J,EAAQ,GAChDjC,EAAGQ,KAAKsE,KAAO9E,EAAGQ,KAAKsL,aAAa7J,EAAQ,KAI1CyG,IAAOC,GACTG,KAkBJ,QAASU,KACPjK,EAAOkK,YAAY,WACbzJ,EAAGwJ,UAAYxJ,EAAGwJ,SAASd,KAC7B1I,EAAGQ,KAAKkJ,WAAa1J,EAAGQ,KAAKgJ,SAASd,MAK5C,QAAS5D,KACPvF,EAAOkK,YAAY,WACbzJ,EAAG8E,MAAQ9E,EAAG8E,KAAK4D,KACrB1I,EAAGQ,KAAKkJ,WAAa1J,EAAGQ,KAAKsE,KAAK4D,MAKxC,QAASM,GAAUlJ,GACK,KAAlBA,EAAM6J,QACRH,IAC2B,KAAlB1J,EAAM6J,SACf7E,IAIJ,QAAS+C,KACP7H,EAAGQ,KAAKG,MAAO,EACfvB,QAAQiD,QAAQ,sBAAsB6J,UAAU,GAChD9M,QAAQiD,QAAQ,QAAQwC,YAAY,aACpCzF,QAAQiD,QAAQ,QAAQuH,IAAI,UAAWZ,GAlGzC,GAAIhJ,GAAKO,IAETP,GAAG8D,UAAY/B,EAAIgB,IACnB/C,EAAG8L,aAAe9K,EAAgBP,UAElCT,EAAG6H,YAAcA,EAEjBlI,IApBF,MAQA+L,GAA8B9K,SAAW,SAAU,MAAO,oBAPxDkH,SAAU,IACVC,YAAa,oDACbC,OACExH,KAAM,KAERK,WAAY6K,EACZzD,aAAc,KACdC,kBAAkB,GAdtB9I,QACGC,OAAO,OACP8I,UAAU,mBAAoBsD,MA0HnC,WACE,YAOA,SAASU,KAaP,QAASC,GAA+BrK,EAAKtC,GAW3C,QAAS4M,KACPjN,QAAQiD,QAAQ,QAAQC,SAAS,aACjCtC,EAAGsM,cAAc3L,MAAO,EACxBX,EAAGsM,cAAc5C,WAAa1J,EAAG2K,QAAQjC,GAG3C,QAAS6D,KACP,GAIIC,GAJAC,EAAmB,iCACnB9B,EAAU3K,EAAG2K,QACbkB,EAASlB,EAAQkB,OACjBzL,EAAMyL,GAAUA,EAAOhJ,MAGtB8H,GAAQ+B,WAActM,EAEhBuK,EAAQ+B,YAActM,GAC/BuK,EAAQgC,YAAc,iBAAmBhC,EAAQ+B,UACjD/B,EAAQkB,QAAU,iBAAmBlB,EAAQ+B,YACpC/B,EAAQ+B,WAAatM,EAC9BuK,EAAQgC,YAAc,iBAAmBhC,EAAQ+B,WAEjDF,EAASI,KAAKC,MAAMD,KAAKJ,SAAWpM,GACpCuK,EAAQgC,YAAc5K,EAAIgB,IAAM8I,EAAOW,IAAWC,GARlD9B,EAAQgC,YAAcF,EAxB1B,GAAIzM,GAAKO,IAETP,GAAGqM,WAAaA,EAEhB5M,EAAS8M,EAAsB,KAE/BvM,EAAGsM,eACD3L,MAAM,GApBV,MASAyL,GAA+BxL,SAAW,MAAO,aAR/CkH,SAAU,IACVC,YAAa,oEACbC,OACE2C,QAAS,KAEX9J,WAAYuL,EACZnE,aAAc,uBACdC,kBAAkB,GAdtB9I,QACGC,OAAO,OACP8I,UAAU,0BAA2BgE,MAyD1C,WACE,YAOA,SAASW,KAaP,QAASC,GAAsBhL,EAAKtC,GAWlC,QAAS4M,KACPjN,QAAQiD,QAAQ,QAAQC,SAAS,aACjCtC,EAAGsM,cAAc3L,MAAO,EACxBX,EAAGsM,cAAc5C,WAAa1J,EAAG2K,QAAQjC,GAG3C,QAAS6D,KACP,GAIIC,GAJAC,EAAmB,iCACnB9B,EAAU3K,EAAG2K,QACbkB,EAASlB,EAAQkB,OACjBzL,EAAMyL,GAAUA,EAAOhJ,MAGtB8H,GAAQ+B,WAActM,EAEhBuK,EAAQ+B,YAActM,GAC/BuK,EAAQgC,YAAc5K,EAAIgB,IAAM,sBAAwB4H,EAAQ+B,UAChE/B,EAAQkB,QAAU,sBAAwBlB,EAAQ+B,YACzC/B,EAAQ+B,WAAatM,EAC9BuK,EAAQgC,YAAc5K,EAAIgB,IAAM,sBAAwB4H,EAAQ+B,WAEhEF,EAASI,KAAKC,MAAMD,KAAKJ,SAAWpM,GACpCuK,EAAQgC,YAAc5K,EAAIgB,IAAM8I,EAAOW,IAAWC,GARlD9B,EAAQgC,YAAcF,EAxB1B,GAAIzM,GAAKO,IAETP,GAAGqM,WAAaA,EAEhB5M,EAAS8M,EAAsB,IAE/BvM,EAAGsM,eACD3L,MAAM,GApBV,MAUAoM,GAAsBnM,SAAW,MAAO,aATtCkH,SAAU,IACVC,YAAa,gDACbC,OACE2C,QAAS,KAEX9J,WAAYkM,EACZ9E,aAAc,cACdC,kBAAkB,GAdtB9I,QACGC,OAAO,OACP8I,UAAU,iBAAkB2E,MAyDjC,WACE,YAOA,SAASrB,KAaP,QAASuB,KAKP,QAASnF,KACP7H,EAAGQ,KAAKG,MAAO,EACfvB,QAAQiD,QAAQ,wBAAwB6J,UAAU,GAClD9M,QAAQiD,QAAQ,QAAQwC,YAAY,aAPtC,GAAI7E,GAAKO,IAETP,GAAG6H,YAAcA,EAfnB,OACEC,SAAU,IACVC,YAAa,8CACbC,OACExH,KAAM,KAERK,WAAYmM,EACZ/E,aAAc,KACdC,kBAAkB,GAdtB9I,QACGC,OAAO,OACP8I,UAAU,gBAAiBsD,MA+BhC,WACE,YAOA,SAASwB,KACP,OACEnF,SAAU,IACVC,YAAa,sDACblH,WAAYqM,EACZjF,aAAc,MAIlB,QAASiF,GAAyBC,EAAQ3N,GAyBxC,QAAS4N,GAAW9M,GAClBlB,QAAQiD,QAAQ,QAAQ,GAAG6J,UAAY,EACvCiB,EAAOE,GAAG/M,GA1BZ,GAAIN,GAAKO,IAETP,GAAGsN,YAAcH,EAAO/L,QAAQmM,KAChCvN,EAAGoN,WAAaA,EAEhBpN,EAAGwN,QAMClN,MAAO,sBACPmN,KAAM,qBAGNnN,MAAO,iBACPmN,KAAM,gBAGNnN,MAAO,sBACPmN,KAAM,qBAUVjO,EAAWK,IAAI,sBAAuB,SAAUC,EAAO4N,GAErD1N,EAAGsN,YAAcI,EAAQH,OApC7BL,EAAyBtM,SAAW,SAAU,cAX9CxB,QACGC,OAAO,OACP8I,UAAU,oBAAqB8E,MAmDpC,WACE,YAOA,SAASU,KACP,OACE7F,SAAU,IACVC,YAAa,8CACbC,OACE4F,WAAY,KAEd/M,WAAYgN,EACZ5F,aAAc,KACdC,kBAAkB,GAItB,QAAS2F,KAMP,QAASC,KACH9N,EAAG4N,WACLG,IAEAC,IAIJ,QAASA,KACPhO,EAAG4N,YAAa,EAChBK,EAAM3L,SAAS,aAGjB,QAASyL,KACP/N,EAAG4N,YAAa,EAChBK,EAAMpJ,YAAY,aApBpB,GAAI7E,GAAKO,KACL0N,EAAQ7O,QAAQiD,QAAQ,OAE5BrC,GAAG8N,WAAaA,EAtBlB1O,QACGC,OAAO,OACP8I,UAAU,gBAAiBwF,MA2ChC,WACE,YAOA,SAASO,KAeP,QAASC,GAAe3O,EAAYD,EAAQ4N,EAAQ1N,EAAU2O,GA0I5D,QAASzO,KACP0O,EAAclB,EAAO/L,QAAQmM,KAE7B,IAAI3N,GAAkBJ,EAAWK,IAAI,mBAAoB,SAAUC,EAAOU,GACxE6N,EAAc7N,EAAKF,MAAOE,EAAKT,KAAK,IAGtCR,GAAOM,IAAI,WAAYD,GAGzB,QAAS0O,GAAShO,EAAOP,GACvB,GAAIkO,GAAQ7O,QAAQiD,QAAQ,OAE5BrC,GAAGuO,QAAS,EACZN,EAAMpJ,YAAY,aAElBsI,EAAOE,GAAG/M,GACV2N,EAAM,GAAG/B,UAAY,EAErBzM,EAAS,WACP4O,EAAc/N,EAAOP,IACpB,KAGL,QAASsO,GAAc/N,EAAOP,EAAKyO,GACjC,IAAK,GAAI7J,GAAI,EAAGA,EAAI3E,EAAGwN,MAAM3K,OAAQ8B,IAAK,CACxC,GAAI8J,GAAOzO,EAAGwN,MAAM7I,EAEpB8J,GAAKC,SAAWD,EAAKnO,QAAUA,GAASmO,EAAKE,cAAgB5O,GAEzD0O,EAAKC,WAAa3O,GAAe,IAARA,GAAeyO,GAC1ChP,EAAWa,WAAWC,EAAQ,cAAeP,GAItC0B,SAAR1B,GAA8C,KAAzBA,EAAIkL,QAAQ,UAClCmD,EAAUQ,KAAK,IAAM7O,GA7KzB,GAAIC,GAAKO,IAETP,GAAGwN,QAEClN,MAAO,cACPmN,KAAM,WACNoB,WAAW,IAGXvO,MAAO,cACPmN,KAAM,iBACNoB,WAAW,EACXF,YAAa,gBAGbrO,MAAO,cACPmN,KAAM,iBACNoB,WAAW,EACXF,YAAa,gBAGbrO,MAAO,cACPmN,KAAM,iBACNoB,WAAW,EACXF,YAAa,gBAGbrO,MAAO,cACPmN,KAAM,iBACNoB,WAAW,EACXF,YAAa,gBAGbrO,MAAO,cACPmN,KAAM,iBACNoB,WAAW,EACXF,YAAa,gBAGbrO,MAAO,cACPmN,KAAM,iBACNoB,WAAW,EACXF,YAAa,gBAGbrO,MAAO,cACPmN,KAAM,iBACNoB,WAAW,EACXF,YAAa,gBAGbrO,MAAO,cACPmN,KAAM,WACNoB,WAAW,IAgEXvO,MAAO,oBACPmN,KAAM,gBACNoB,WAAW,IAIf7O,EAAG+D,QACDC,mBAAmB,EACnBC,MAAO,eACP6K,KAAM,IACN5K,UACEC,uBAAuB,GAEzBC,cAAe,GAGjBpE,EAAGsO,SAAWA,EAEd3O,IAtJF,MAYAwO,GAAevN,SAAW,aAAc,SAAU,SAAU,WAAY,cAXtEkH,SAAU,IACVC,YAAa,gCACbC,OACEuG,OAAQ,IACRQ,WAAY,IACZC,SAAU,KAEZnO,WAAYsN,EACZlG,aAAc,KACdC,kBAAkB,GAhBtB9I,QACGC,OAAO,OACP8I,UAAU,UAAW+F,MAyM1B,WACE,YAOA,SAASe,KACP,OACEnH,SAAU,IACVC,YAAa,gDACbC,OACEkH,QAAS,KAEXrO,WAAYsO,EACZlH,aAAc,KACdC,kBAAkB,GAKtB,QAASiH,GAAgB1P,EAAU2P,GAYjC,QAASC,KAKP,QAASC,GAAQC,GACfvP,EAAGwP,MAAQD,EALbvP,EAAGwP,MAAQ,GAEXJ,EAAaK,MAAMzP,EAAG0P,YAAaJ,GAOrC,QAASK,GAAW7P,GAClB,GAAI8P,EAEAxQ,SAAQiD,QAAQvC,EAAM+P,QAAQC,QAAQ,QAAQjN,SAIlD+M,EAAWxQ,QAAQiD,QAAQ,aAC3BuN,EAAStN,SAAS,UAElB7C,EAAS,WACPL,QAAQiD,QAAQ,QAAQwC,YAAY,aACpC7E,EAAGkP,SAAU,EAEbzP,EAAS,WACPmQ,EAAS/K,YAAY,aAEtB,MAtCL,GAAI7E,GAAKO,IAETP,GAAG0P,aACDL,MAAO,GACPU,SAAU,IAEZ/P,EAAGgQ,UAAYZ,EAAa3O,UAE5BT,EAAGqP,MAAQA,EACXrP,EAAG2P,WAAaA,EAhBlBR,EAAgBvO,SAAW,WAAY,gBAbvCxB,QACGC,OAAO,OACP8I,UAAU,iBAAkB8G,MA6DjC,WACE,YAOA,SAASgB,KACP,OACEnI,SAAU,IACVC,YAAa,oCACbC,UATJ5I,QACGC,OAAO,OACP8I,UAAU,kBAAmB8H,MAalC,WACE,YAOA,SAASC,KACP,OACEpI,SAAU,IACVC,YAAa,oCACbC,OACE4F,WAAY,IACZmB,WAAY,IACZoB,aAAc,KAEhBtP,WAAYuP,EACZnI,aAAc,KACdC,kBAAkB,GAItB,QAASkI,GAAiBxO,EAAS6C,GAUjC,QAAS4L,KAGPzO,EAAQ8B,SAAS4M,KAAO1O,EAAQ8B,SAASC,OAAS,kBAGpD,QAAS4M,GAAWC,GAClBxQ,EAAGyQ,WAAaD,EAChB/L,EAAoBiM,IAAI,UAAW1Q,EAAGyQ,YACtC/M,SAASiN,SAlBX,GAAI3Q,GAAKO,IAETP,GAAGyQ,WAAahM,EAAoBe,IAAI,WAAaf,EAAoBe,IAAI,WAAa,IAC1FxF,EAAG4Q,WAAaA,YAAclI,GAAK,EAAEmI,cAAgB,OAAOnI,GAAK,EAAEmI,cAAgB,QACnFpM,EAAoBiM,IAAI,UAAW1Q,EAAGyQ,YAEtCzQ,EAAGuQ,WAAaA,EAChBvQ,EAAGqQ,eAAiBA,EAdtBD,EAAiBxP,SAAW,UAAW,uBAdvCxB,QACGC,OAAO,OACP8I,UAAU,YAAa+H,MA2C5B,WACE,YAOA,SAASY,KACP,OACEhJ,SAAU,IACVC,YAAa,oCACblH,WAAYkQ,EACZ9I,aAAc,KACdC,kBAAkB,GAItB,QAAS6I,KACP,GAAI/Q,GAAKO,IAETP,GAAGgR,aAAc,GAAInG,OAAOE,cAlB9B3L,QACGC,OAAO,OACP8I,UAAU,YAAa2I,MAqB5B,WACE,YAOA,SAASG,GAAgBlP,GAavB,QAASmP,KACP,GAAIlR,GAAKO,IAETP,GAAG8D,UAAY/B,EAAIgB,IAfrB,OACE+E,SAAU,IACVC,YAAa,kDACbC,OACEmJ,SAAU,KAEZtQ,WAAYqQ,EACZjJ,aAAc,KACdC,kBAAkB,GACtB+I,EAAgBrQ,SAAW,OAf3BxB,QACGC,OAAO,OACP8I,UAAU,kBAAmB8I,MAyBlC,WACE,YAOA,SAAS1M,GAAa6M,EAAWrP,EAAK0C,GAYpC,QAAShE,KACP,MAAOD,GAGT,QAASyE,KAKP,QAASoM,GAAUC,GACZA,EAASC,SACZjC,IAGF9O,EAAKA,KAAO8Q,EAAS9Q,KACrBA,EAAKgR,SAAU,EAGjB,QAASlC,KACP9O,EAAKgR,SAAU,EAdjBhR,EAAKgR,SAAU,EAEfC,EAASjM,KAAKkM,QAASjN,EAAoBe,IAAI,WAAaf,EAAoBe,IAAI,WAAa,KAAM6L,EAAW/B,GAlBpH,GAAI9O,IACFgR,SAAS,EACThR,SAEEiR,EAAWL,EAAUrP,EAAIgB,IAAM,SAEnC,QACEtC,QAASA,EACTwE,MAAOA,GAEXV,EAAa3D,SAAW,YAAa,MAAO,uBAhB5CxB,QACGC,OAAO,OACPsS,QAAQ,eAAgBpN,MAwC7B,WACE,YAOA,SAAS7E,GAAa0R,EAAWQ,EAAU7P,EAAK0C,GAmB9C,QAAShE,KACP,MAAOD,GAGT,QAASyE,GAAM4M,GAIb,QAASR,GAAUC,GAoCjB,QAASnG,GAAK2G,EAAGC,GACf,MAAOD,GAAEvK,SAAWwK,EAAExK,SAlCxB,GAFA/G,EAAKwR,UAAW,GAEXV,EAASC,QAEZ,WADAjC,IAIF9O,GAAK4I,cACL5I,EAAK6I,YACL7I,EAAKyR,aACLzR,EAAK0R,WAEL,KAAK,GAAIvN,GAAI,EAAGkE,EAAMyI,EAAS9Q,KAAMkK,EAAM7B,EAAIhG,OAAY6H,EAAJ/F,EAASA,IAAK,CACnE,GAAIwN,GAAStJ,EAAIlE,EAEjB,QAAQwN,EAAOjR,MACb,IAAK,GACHV,EAAK6I,SAAS6B,KAAKiH,EACnB,MACF,KAAK,GACH3R,EAAK4I,WAAW8B,KAAKiH,EACrB,MACF,KAAK,GACH3R,EAAKyR,UAAU/G,KAAKiH,EACpB,MACF,KAAK,GACH3R,EAAK0R,SAAShH,KAAKiH,IAIzB3R,EAAK4I,WAAW+B,KAAKA,GACrB3K,EAAK6I,SAAS8B,KAAKA,GACnB3K,EAAKyR,UAAU9G,KAAKA,GACpB3K,EAAK0R,SAAS/G,KAAKA,GAMnB0G,GAAmBA,IAGrB,QAASvC,KACP9O,EAAKwR,UAAW,EA/ClBxR,EAAKwR,UAAW,EAChBP,EAASxM,OAAOyM,QAASjN,EAAoBe,IAAI,WAAaf,EAAoBe,IAAI,WAAa,KAAM6L,EAAW/B,GAxBtH,GAAI9O,IACFgR,SAAS,EACTnI,YACA6I,YACAD,cAEER,EAAWL,EAAUrP,EAAIgB,IAAM,aAAc,MAE7CkC,OACEmN,OAAQ,QAId,QACE3R,QAASA,EACTwE,MAAOA,GAJXvF,EAAakB,SAAW,YAAa,WAAY,MAAO,uBAjBxDxB,QACGC,OAAO,OACPsS,QAAQ,eAAgBjS,MAgF7B,WACE,YAOA,SAASsB,GAAgBoQ,EAAWrP,EAAK0C,GAWvC,QAAShE,KACP,MAAOD,GAGT,QAASyE,GAAM4M,GAIb,QAASR,GAAUC,GAqBjB,QAASe,GAAYC,GACfA,EAAKC,cACPD,EAAKC,YAAcD,EAAKC,YAAYC,MAAM,MAAMC,KAAK,SAtBzD,GAAIrR,GAAS2K,CAIb,OAFAvL,GAAKwR,UAAW,EAEXV,EAASC,SAKdnQ,EAAUkQ,EAAS9Q,KAAKY,QACxB2K,EAAYuF,EAAS9Q,KAAKuL,UAE1BA,EAAU2G,QAAQL,GAClBjR,EAAQsR,QAAQ,SAAUxR,GACxBA,EAAKG,KAAKqR,QAAQL,KAGpB7R,EAAKA,KAAO8Q,EAAS9Q,UACrBqR,GAAmBA,UAbjBvC,KAsBJ,QAASA,KACP9O,EAAKwR,UAAW,EAhClBxR,EAAKwR,UAAW,EAChBZ,EAAUrP,EAAIgB,IAAM,aAAayC,KAAKkM,QAASjN,EAAoBe,IAAI,WAAaf,EAAoBe,IAAI,WAAa,KAAM6L,EAAW/B,GAhB5I,GAAI9O,IACFwR,UAAU,EACVxR,QAGF,QACEC,QAASA,EACTwE,MAAOA,GAKXjE,EAAgBJ,SAAW,YAAa,MAAO,uBAlB/CxB,QACGC,OAAO,OACPsS,QAAQ,kBAAmB3Q,MAyDhC,WACE,YAOA,SAASc,GAAYsP,EAAWrP,EAAK0C,GAkBnC,QAAShE,KACP,MAAOD,GAGT,QAASyE,GAAM4M,GAIb,QAASR,GAAUC,GAGjB,MAFA9Q,GAAKwR,UAAW,EAEXV,EAASC,SAKd/Q,EAAKA,KAAO8Q,EAAS9Q,KAMrBqR,GAAmBA,IAEnBrR,EAAK8C,SAAW9C,EAAK8C,qBACd9C,GAAK8C,aAbVgM,KAgBJ,QAASA,KACP9O,EAAKwR,UAAW,EAxBlBxR,EAAKwR,UAAW,EAChBP,EAASxM,OAAOyM,QAASjN,EAAoBe,IAAI,WAAaf,EAAoBe,IAAI,WAAa,KAAM6L,EAAW/B,GA2BtH,QAAShM,GAAQqP,GACfnS,EAAK8C,QAAUqP,EAnDjB,GAAInS,IACFgR,SAAS,EACThR,SAEEiR,EAAWL,EAAUrP,EAAIgB,IAAM,YAAa,MAE5CkC,OACEmN,OAAQ,QAId,QACE3R,QAASA,EACTwE,MAAOA,EACP3B,QAASA,GADbxB,EAAYlB,SAAW,YAAa,MAAO,uBAnB3CxB,QACGC,OAAO,OACPsS,QAAQ,cAAe7P,MA4D5B,WACE,YAOA,SAAS8Q,GAAgBxB,EAAWQ,EAAU7P,GA0B5C,QAAStB,KACP,MAAOD,GAGT,QAASyE,GAAM4M,GAIb,QAASR,GAAUC,GAIjB,MAHA9Q,GAAKwR,UAAW,EAChBxR,EAAKoQ,UAAYU,EAAS9Q,KAErB8Q,EAASC,aAIdM,GAAmBA,SAHjBvC,KAMJ,QAASA,KACP9O,EAAKwR,UAAW,EAflBxR,EAAKwR,UAAW,EAChBP,EAASxM,MAAMoM,EAAW/B,GA/B5B,GAAI9O,IACFgR,SAAS,EACTZ,cAEEa,EAAWL,EAAUrP,EAAIgB,IAAM,gBAAiB,MAEhDkC,OACEmN,OAAQ,OAEVS,KACET,OAAQ,QAEVU,QACEV,OAAQ,OAEVW,QACEX,OAAQ,WAId,QACE3R,QAASA,EACTwE,MAAOA,GARX2N,EAAgBhS,SAAW,YAAa,WAAY,OApBpDxB,QACGC,OAAO,OACPsS,QAAQ,kBAAmBiB,MAwDhC,WACE,YAOA,SAASI,GAAiBC,EAAI3K,EAAM4K,GAElC,OACEC,QAAS,SAAUpP,GAEjB,MADAA,GAAOqP,QAAU,KACVrP,GAGTuN,SAAU,SAAUA,GAClB,MAAOA,IAGT+B,cAAe,SAAUC,GACvB,GAAI1B,GAAWsB,EAAU1N,IAAI,YACzB+J,EAAM+D,EAAU9S,MAAQ8S,EAAU9S,KAAKgP,OAAS8D,EAAU9S,KAAKgP,MAAM+D,SAAWD,EAAUE,YAAc,eAK5G,OAHAlL,GAAKmL,MAAM,kBAAmBH,GAC9B1B,EAAS8B,KAAK9B,EAAS+B,SAASC,YAAYrE,GAAKhI,SAAS,cAEnD0L,EAAGY,OAAOP,KAHvBN,EAAiBpS,SAAW,KAAM,OAAQ,aArB1CxB,QACGC,OAAO,OACPyU,QAAQ,mBAAoBd,MA4BjC,WACE,YAOA,SAASe,GAAkB3C,EAAW3R,EAAUsC,EAAK0C,GAYnD,QAAShE,KACP,MAAOD,GAGT,QAASyE,GAAM+O,GAKb,QAAS3C,GAAUC,GACZA,EAASC,SACZjC,IAGE0E,GAAWA,EAAQC,UACrBC,EAAoB5C,EAAS9Q,MAE7BA,EAAKA,KAAO8Q,EAAS9Q,KAGnBwT,GAAWA,EAAQC,UACrBxU,EAAS,WACPe,EAAKwR,UAAW,GACf,KAEHxR,EAAKwR,UAAW,EAIpB,QAAS1C,KACP9O,EAAKwR,UAAW,EAzBlBxR,EAAKwR,UAAW,EAEhBP,EAASjM,KAAKkM,QAASjN,EAAoBe,IAAI,WAAaf,EAAoBe,IAAI,WAAa,KAAM6L,EAAW/B,GA2BpH,QAAS4E,GAAoBnF,GAC3BvO,EAAKA,OAEL,KAAK,GAAImE,GAAI,EAAG+F,EAAMqE,EAAWlM,OAAY6H,EAAJ/F,EAASA,IAChDnE,EAAKA,KAAKuO,EAAWpK,GAAGwP,KAAOpF,EAAWpK,GAAGyP,MAjDjD,GAAI5T,IACFgR,SAAS,EACThR,SAEEiR,EAAWL,EAAUrP,EAAIgB,IAAM,cAEnC,QACEtC,QAASA,EACTwE,MAAOA,GAQX8O,EAAkBnT,SAAW,YAAa,WAAY,MAAO,uBAtB7DxB,QACGC,OAAO,OACPsS,QAAQ,oBAAqBoC,MA2DlC,WACE,YAOA,SAASlO,GAAeuL,EAAWrP,GAmBjC,QAAStB,KACP,MAAOD,GAGT,QAASuF,KAMP,QAASsL,KACP7Q,EAAKwR,UAAW,EAChBxR,EAAKwF,WAAY,EACjBxF,EAAKA,KAAOpB,QAAQ0D,KAAKuR,GAG3B,QAAS/E,KACP9O,EAAKwR,UAAW,EAChBxR,EAAK8T,WAAY,EAbnB9T,EAAKwR,UAAW,EAChBxR,EAAK8T,WAAY,EAEjBlD,EAAUrP,EAAIgB,IAAM,UAAUwR,KAAK/T,EAAKA,KAAM6Q,EAAW/B,GA1B3D,GAAI+E,IACF9G,KAAM,GACNiH,MAAO,GACPC,MAAO,GACPC,SAAU,IAGRlU,GACFA,KAAMpB,QAAQ0D,KAAKuR,GACnBrO,WAAW,EACXwL,SAAS,EAGX,QACE/Q,QAASA,EACTsF,WAAYA,GAEhBF,EAAejF,SAAW,YAAa,OAvBvCxB,QACGC,OAAO,OACPsS,QAAQ,iBAAkB9L,MA8C/B,WACE,YAOA,SAASrB,GAAc4M,EAAWrP,EAAK0C,GAYrC,QAAShE,KACP,MAAOD,GAGT,QAASyE,KAKP,QAASoM,GAAUC,GACZA,EAASC,SACZjC,IAGF9O,EAAKA,KAAO8Q,EAAS9Q,KAAKmU,MAAM,EAAE,GAClCnU,EAAKgR,SAAU,EAGjB,QAASlC,KACP9O,EAAKgR,SAAU,EAdjBhR,EAAKgR,SAAU,EAEfC,EAASjM,KAAKkM,QAASjN,EAAoBe,IAAI,WAAaf,EAAoBe,IAAI,WAAa,KAAM6L,EAAW/B,GAlBpH,GAAI9O,IACFgR,SAAS,EACThR,SAEEiR,EAAWL,EAAUrP,EAAIgB,IAAM,UAEnC,QACEtC,QAASA,EACTwE,MAAOA,GAUXT,EAAc5D,SAAW,YAAa,MAAO,uBAxB7CxB,QACGC,OAAO,OACPsS,QAAQ,gBAAiBnN,MAwC9B,WACE,YAOA,SAAS4K,GAAagC,EAAWxP,EAASG,GAUxC,QAAStB,KACP,MAAOD,GAGT,QAASiP,GAAMC,EAAakF,GAS1B,QAASvD,GAAUwD,GACjB,GAAIC,GAAOD,GAAOA,EAAIE,MAAQF,EAAIE,KAAKD,IAEvC,OAAKD,GAAItD,SAAYuD,GAKrBtU,EAAKgR,SAAU,MACfwD,UALE1F,KAQJ,QAASA,GAAQuF,GACf,GAAItF,GAAMsF,GAAOA,EAAIrU,MAAQqU,EAAIrU,KAAKgP,OAASqF,EAAIrU,KAAKgP,MAAM+D,SAC5D,iEAEFqB,IAAeA,EAAYrF,GAC3B/O,EAAKgR,SAAU,EAGjB,QAASwD,KACPpT,EAAQ8B,SAAW,UAAY9B,EAAQ8B,SAASuR,SAAWlT,EAAImT,SA7BjE,MAAiB,UAAbnT,EAAIwL,SACNyH,MAIFxU,EAAKgR,SAAU,MACfJ,GAAUrP,EAAIgB,IAAM,UAAUwR,KAAK7E,EAAa2B,EAAW/B,IApB7D,GAAI9O,IACFgR,SAAS,EAGX,QACE/Q,QAASA,EACTgP,MAAOA,GAaXL,EAAaxO,SAAW,YAAa,UAAW,OAzBhDxB,QACGC,OAAO,OACPsS,QAAQ,eAAgBvC,MAqD7B,WACE,YAOA,SAAS+F,GAAiB5V,EAAQgL,EAAW9K,EAAUsU,EAAmBrU,EAAcoC,EAAad,GA0BnG,QAASrB,KACP,GAAIC,GAAkBL,EAAOiJ,OAAO,oBAAqB,SAAU4M,GAC7DA,EACFpV,EAAGqV,iBAAkB,EAErB5V,EAAS,WACPO,EAAGqV,iBAAkB,GACpB,MAGP9V,GAAOM,IAAI,WAAYD,GAEvBmU,EAAkB9O,OAAOgP,WAAW,IACpCvU,EAAauF,QACbnD,EAAYmD,QAGd,QAAS8I,KACP/N,EAAG4N,YAAa,EAChBxO,QAAQiD,QAAQ,QAAQwC,YAAY,aA5CtC,GAAI7E,GAAKO,IAETP,GAAG+O,WAAagF,EAAkBtT,UAClCT,EAAG4N,YAAa,EAChB5N,EAAGmQ,cAAe,EAClBnQ,EAAGgP,UACDsG,OAAQ,SAAUC,EAAUxV,EAAKyV,GAS/B,QAASF,KACP/K,EAAUiB,0BAA0BD,EAAS,EAAG,KATlD,GAAIA,GAAUhB,EAAU3F,KAAK2Q,EAEzBC,GACFF,IAEA7V,EAAS6V,EAAQ,OASvBtV,EAAG+N,UAAYA,EAEfpO,IAHFwV,EAAiBvU,SAAW,SAAU,YAAa,WAAY,oBAAqB,eAAgB,cAAe,mBA1BnHxB,QACGC,OAAO,OACPwB,WAAW,mBAAoBsU,MAqDpC,WACE,YAOA,SAASM,GAASnN,GAChBA,EAAKmL,MAAM,gCAqBbgC,EAAS7U,SAAW,QA3BpBxB,QACGC,OAAO,OACPqW,IAAID,MAST,WACE,YAOA,SAASE,GAAaC,EAAgBC,GACpCD,EACGtV,MAAM,UACLsD,IAAK,GACLkS,YAAU,EACV/N,YAAa,wBACblH,WAAY,mBACZoH,aAAc,WAEf3H,MAAM,eACLsD,IAAK,QACLmE,YAAa,2BACblH,WAAY,iBACZoH,aAAc,SAEf3H,MAAM,eACLsD,IAAK,QACLmE,YAAa,2BACblH,WAAY,iBACZoH,aAAc,SAQf3H,MAAM,mBACLsD,IAAK,YACLmE,YAAa,mCACblH,WAAY,qBACZoH,aAAc,aAEf3H,MAAM,eACLsD,IAAK,QAGLmE,YAAa,gDACblH,WAAY,iBACZoH,aAAc,SA0Bf3H,MAAM,qBACLsD,IAAK,cACLmE,YAAa,uCACblH,WAAY,sBACZoH,aAAc,cAGlB4N,EAAmBE,UAAU,SAjD/BJ,EAAa/U,SAAW,iBAAkB,sBA5B1CxB,QACGC,OAAO,OACP0E,OAAO4R,MAiFZ,WACE,YAEAvW,SACGC,OAAO,UAKZ,WACE,YAOA,SAAS0E,GAAOiS,EAAcC,EAAelU,EAAKmU,EAA4BC,GAE5EH,EAAaI,aAAarU,EAAIqU,cAE9BD,EAA4BE,UAAU,OAEtCJ,EAAcK,aAAapL,KAAK,oBAEhC+K,EAAcM,SAASC,iBAAkB,EACzCP,EAAcM,SAASE,QAAQC,OAAOC,OAAS,mBAC/CV,EAAcM,SAASE,QAAQC,OAAO,gBAAkB,mBACxDT,EAAcM,SAASE,QAAQC,OAAO,oBAAsB,iBAE5DR,EAA2BU,WACzBzC,IAAK,0CACL0C,EAAG,SASP9S,EAAOnD,SAAW,eAAgB,gBAAiB,MAAO,6BAA8B,+BA7BxFxB,QACGC,OAAO,OACP0E,OAAOA,MAwBZ3E,QAAQC,OAAO,cACdyX,SAAS,OAAQvJ,KAAO,OAAOxK,IAAM,OAAOmS,SAAW,SAASkB,cAAe,IAEhFhX,QAAQC,OAAO,OAAOqW,KAAK,iBAAkB,SAASqB,GAAiBA,EAAeC,IAAI,wBAAwB,m4BAClHD,EAAeC,IAAI,kDAAkD,yVACrED,EAAeC,IAAI,oCAAoC,m/BACvDD,EAAeC,IAAI,oCAAoC,wtBACvDD,EAAeC,IAAI,oCAAoC,qVACvDD,EAAeC,IAAI,gDAAgD,s/BACnED,EAAeC,IAAI,gCAAgC,kXACnDD,EAAeC,IAAI,8CAA8C,oLACjED,EAAeC,IAAI,sDAAsD,8PACzED,EAAeC,IAAI,8CAA8C,4YACjED,EAAeC,IAAI,gDAAgD,uWACnED,EAAeC,IAAI,oEAAoE,6vBACvFD,EAAeC,IAAI,oDAAoD;AACvED,EAAeC,IAAI,0DAA0D,iwCAC7ED,EAAeC,IAAI,wCAAwC,4vBAC3DD,EAAeC,IAAI,8CAA8C,uNACjED,EAAeC,IAAI,4DAA4D,k3CAC/ED,EAAeC,IAAI,gDAAgD,6KACnED,EAAeC,IAAI,uCAAuC,ghOAC1DD,EAAeC,IAAI,2BAA2B;AAC9CD,EAAeC,IAAI,2BAA2B,sYAC9CD,EAAeC,IAAI,mCAAmC,wYACtDD,EAAeC,IAAI,mCAAmC,+7CACtDD,EAAeC,IAAI,2BAA2B,sgDAC9CD,EAAeC,IAAI,sCAAsC,8jCACzDD,EAAeC,IAAI,oDAAoD,0kCACvED,EAAeC,IAAI,gDAAgD,o9EACnED,EAAeC,IAAI,gDAAgD","file":"scripts/app-eb90d7cf47.js","sourcesContent":["(function () {\r\n 'use strict';\r\n\r\n var modules = [\r\n 'ifh.ENV',\r\n 'ngAnimate',\r\n 'ngMessages',\r\n 'ngSanitize',\r\n 'ngAria',\r\n 'ngResource',\r\n 'ui.router',\r\n 'ngMaterial',\r\n 'LocalStorageModule',\r\n 'ngScrollbars',\r\n 'duScroll',\r\n 'uiGmapgoogle-maps',\r\n 'slickCarousel'\r\n ];\r\n\r\n angular.module('ifh', modules);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .controller('TeamController', TeamController);\r\n\r\n /** @ngInject */\r\n function TeamController($scope, $rootScope, $timeout, StaffService) {\r\n var vm = this;\r\n\r\n vm.data = StaffService.getData();\r\n\r\n vm.memberDialog = {\r\n open: false\r\n };\r\n\r\n vm.getWidth = getWidth;\r\n vm.triggerMenuActiveLinkUpdate = triggerMenuActiveLinkUpdate;\r\n\r\n init();\r\n\r\n function init() {\r\n var destroyListener = $rootScope.$on('client.team-tab-change', function (event, tab) {\r\n vm.activeTab = tab;\r\n });\r\n\r\n $scope.$on('$destroy', destroyListener);\r\n\r\n vm.activeTab = vm.activeTab || 0;\r\n $timeout(triggerMenuActiveLinkUpdate, 500)\r\n }\r\n\r\n function getWidth(qty) {\r\n if (qty % 4 === 0) {\r\n return 25;\r\n } else if (qty % 3 === 0) {\r\n return 33;\r\n } else {\r\n return 25;\r\n }\r\n }\r\n\r\n function triggerMenuActiveLinkUpdate() {\r\n $rootScope.$broadcast('menu-link-change', {\r\n state: 'client.team',\r\n tab: vm.activeTab\r\n });\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .controller('StrategyController', StrategyController);\r\n\r\n /** @ngInject */\r\n function StrategyController() {\r\n //var vm = this;\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .controller('ProjectsController', ProjectsController);\r\n\r\n /** @ngInject */\r\n function ProjectsController($scope, $rootScope, $timeout, ProjectsService) {\r\n var vm = this;\r\n\r\n vm.activeTab = 1;\r\n vm.data = ProjectsService.getData();\r\n\r\n vm.showCurrent = showCurrent;\r\n vm.showProjectTypeSelect = showProjectTypeSelect;\r\n vm.showFinishedProjects = showFinishedProjects;\r\n vm.triggerMenuActiveLinkUpdate = triggerMenuActiveLinkUpdate;\r\n\r\n init();\r\n\r\n function init() {\r\n var destroyListener = $rootScope.$on('client.projects-tab-change', function (event, tab) {\r\n vm.activeTab = tab;\r\n });\r\n\r\n $scope.$on('$destroy', destroyListener);\r\n\r\n vm.activeTab = vm.activeTab || 0;\r\n $timeout(triggerMenuActiveLinkUpdate, 500);\r\n }\r\n\r\n function showCurrent(type) {\r\n vm.currentProjects = vm.data.data.current[type].list;\r\n vm.currentType = type;\r\n vm.showCurrentList = true;\r\n }\r\n\r\n function showProjectTypeSelect() {\r\n vm.activeTab = 0;\r\n vm.showCurrentList = false;\r\n vm.currentType = undefined;\r\n vm.currentProjects = [];\r\n triggerMenuActiveLinkUpdate();\r\n }\r\n\r\n function showFinishedProjects() {\r\n vm.activeTab = 1;\r\n vm.showCurrentList = false;\r\n vm.currentType = undefined;\r\n vm.currentProjects = [];\r\n triggerMenuActiveLinkUpdate();\r\n }\r\n\r\n function triggerMenuActiveLinkUpdate() {\r\n $rootScope.$broadcast('menu-link-change', {\r\n state: 'client.projects',\r\n tab: vm.activeTab\r\n });\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .controller('NewsController', NewsController);\r\n\r\n /** @ngInject */\r\n function NewsController($timeout, $window, $sce, NewsService, ENV) {\r\n var vm = this;\r\n\r\n vm.imgPrefix = ENV.api;\r\n vm.data = NewsService.getData();\r\n vm.config = {\r\n autoHideScrollbar: false,\r\n theme: 'minimal-dark',\r\n advanced: {\r\n updateOnContentResize: true\r\n },\r\n scrollInertia: 0\r\n };\r\n vm.newsDialog = {\r\n open: false\r\n };\r\n\r\n vm.setContent = setContent;\r\n vm.initContent = initContent;\r\n vm.trustSrc = trustSrc;\r\n\r\n function setContent(index, type) {\r\n setNewsData(index, type);\r\n\r\n if ($window.window.innerWidth < 960) {\r\n angular.element('body').addClass('no-scroll');\r\n vm.newsDialog.content = vm.activeNewsArticle;\r\n vm.newsDialog.open = true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function setNewsData(index, type) {\r\n var news = vm.data.data[type];\r\n var content, searchString, replaceString;\r\n\r\n if (!news || !news.length) {\r\n return;\r\n }\r\n\r\n vm.activeNewsArticle = angular.copy(news[index]);\r\n\r\n content = news[index].content || '';\r\n\r\n if ((vm.activeTab === 0 || vm.activeTab === 2) && content) {\r\n searchString = 'img src=\"/InterforumHoldings/';\r\n replaceString = 'img src=\"' + ENV.api + 'InterforumHoldings/';\r\n vm.activeNewsArticle.content = content.replace(searchString, replaceString);\r\n }\r\n\r\n vm.activeContentIndex = index;\r\n\r\n $timeout(function () {\r\n angular.element('.mCSB_container')[1].style.top = 0;\r\n });\r\n }\r\n\r\n function initContent(type) {\r\n var news = vm.data.data[type];\r\n\r\n if (news && news.length) {\r\n selectFirst();\r\n } else {\r\n NewsService.onFetch(selectFirst);\r\n }\r\n\r\n function selectFirst() {\r\n setNewsData(0, type);\r\n }\r\n }\r\n\r\n function trustSrc(src) {\r\n var addition = ENV.api === 'http://localhost:3003' ? ENV.api : $window.location.origin + ENV.api;\r\n addition += src;\r\n var url = 'http://docs.google.com/gview?url=' + addition + '&embedded=true';\r\n\r\n return $sce.trustAsResourceUrl(url);\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .controller('HomeController', HomeController);\r\n\r\n /** @ngInject */\r\n function HomeController($scope, $interval, $timeout, $window, ENV, StatsService, BannerService, localStorageService) {\r\n var vm = this;\r\n var i = 0;\r\n var count = 2;\r\n var current = 1;\r\n var next = 2;\r\n var destroySlider;\r\n vm.ua = localStorageService.get('lang_id') === '0';\r\n vm.en = localStorageService.get('lang_id') === '1' || localStorageService.get('lang_id') === null || localStorageService.get('lang_id') === undefined;\r\n vm.videoDialog = {\r\n open: false\r\n };\r\n\r\n vm.banners = BannerService.getData();\r\n vm.stats = StatsService.getData();\r\n vm.imgPrefix = ENV.api;\r\n\r\n vm.openVideoPopup = openVideoPopup;\r\n\r\n init();\r\n\r\n function slideBackground() {\r\n if (!i) {\r\n angular.element('.home-slider')\r\n .find('.next')\r\n .addClass('show slide-' + next);\r\n i = 1;\r\n } else {\r\n angular.element('.home-slider')\r\n .find('.next')\r\n .removeClass('show slide-' + next)\r\n .prev()\r\n .removeClass('slide-' + current)\r\n .addClass('slide-' + next);\r\n i = 0;\r\n current = (count > current) ? (current + 1) : 1;\r\n next = (count != next) ? (next + 1) : 1;\r\n }\r\n }\r\n\r\n function init() {\r\n BannerService.fetch();\r\n StatsService.fetch();\r\n\r\n $timeout(function () {\r\n destroySlider = $interval(slideBackground, 2500);\r\n\r\n $scope.$on('$destroy', function () {\r\n $interval.cancel(destroySlider);\r\n });\r\n }, 2500);\r\n }\r\n\r\n function openVideoPopup() {\r\n vm.videoDialog.open = true;\r\n vm.videoDialog.video = 'ss';\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .controller('ContactUsController', ContactUsController);\r\n\r\n /** @ngInject */\r\n function ContactUsController($window, $timeout, ContactService, uiGmapIsReady, localStorageService) {\r\n var vm = this;\r\n\r\n vm.ua = localStorageService.get('lang_id') === '0';\r\n vm.en = localStorageService.get('lang_id') === '1';\r\n\r\n vm.data = ContactService.getData();\r\n\r\n vm.getInTouch = function () {\r\n vm.submitted = true;\r\n\r\n if (vm.form.$valid) {\r\n ContactService.getInTouch();\r\n }\r\n };\r\n\r\n vm.map = {\r\n center: {\r\n latitude: 42.107012,\r\n longitude: -87.772450\r\n },\r\n control: {},\r\n refresh: true,\r\n zoom: 18,\r\n marker: {\r\n idKey: 'marker1',\r\n coords: {\r\n latitude: 42.107012,\r\n longitude: -87.772450\r\n }\r\n }\r\n };\r\n\r\n\r\n uiGmapIsReady.promise(1).then(function () {\r\n var gmap = vm.map.control.getGMap();\r\n\r\n new $window.google.maps.Marker({\r\n position: {\r\n lat: 42.107012,\r\n lng: -87.772450\r\n },\r\n map: gmap,\r\n title: ''\r\n });\r\n $timeout(triggerResize, 2000);\r\n $timeout(triggerResize, 3000);\r\n $timeout(triggerResize, 5000);\r\n\r\n function triggerResize() {\r\n vm.map.control.refresh({\r\n latitude: 42.107012,\r\n longitude: -87.772450\r\n });\r\n $window.dispatchEvent(new Event('resize'));\r\n }\r\n\r\n\r\n\r\n });\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhVideoDialog', ifhVideoDialog);\r\n\r\n /** @ngInject */\r\n function ifhVideoDialog() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/video-dialog/video-dialog.html',\r\n scope: {\r\n data: '='\r\n },\r\n controller: ClientVideoDialogController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n /** @ngInject */\r\n function ClientVideoDialogController() {\r\n var vm = this;\r\n\r\n vm.closeDialog = closeDialog;\r\n\r\n function closeDialog() {\r\n vm.data.open = false;\r\n angular.element('body').removeClass('no-scroll');\r\n }\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhTeamMemberDialog', ifhTeamMemberDialog);\r\n\r\n /** @ngInject */\r\n function ifhTeamMemberDialog() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/team-member-dialog/team-member-dialog.html',\r\n scope: {\r\n data: '='\r\n },\r\n controller: TeamMemberController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n /** @ngInject */\r\n function TeamMemberController($scope, $log, ENV, StaffService) {\r\n var vm = this;\r\n\r\n vm.imgPrefix = ENV.api;\r\n vm.staff = StaffService.getData();\r\n\r\n vm.closeDialog = closeDialog;\r\n vm.previous = previous;\r\n vm.next = next;\r\n\r\n init();\r\n\r\n function init() {\r\n var $destroy = $scope.$watch('vm.data.selectedID', updateDialog);\r\n $scope.$on('$destroy', $destroy);\r\n }\r\n\r\n function updateDialog(id, oldId) {\r\n var indexInManagers, indexInExecutives, index;\r\n\r\n if (!id) {\r\n return;\r\n }\r\n\r\n indexInExecutives = getIndex(id, vm.staff.executives);\r\n indexInManagers = getIndex(id, vm.staff.managers);\r\n\r\n if (indexInExecutives > -1) {\r\n vm.members = vm.staff.executives;\r\n index = indexInExecutives;\r\n } else if (indexInManagers > -1) {\r\n vm.members = vm.staff.managers;\r\n index = indexInManagers;\r\n }\r\n\r\n vm.currentMember = vm.members[index];\r\n vm.previous = vm.members[index - 1];\r\n vm.next = vm.members[index + 1];\r\n\r\n if (id && !oldId) {\r\n enableKeyListeners();\r\n }\r\n\r\n function getIndex(id, arr) {\r\n for (var i = 0; i < arr.length; i++) {\r\n if (arr[i].id === id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n function enableKeyListeners() {\r\n angular.element('body').on('keydown', onKeyDown);\r\n }\r\n }\r\n\r\n function previous() {\r\n $scope.$applyAsync(function () {\r\n if (vm.previous && vm.previous.id) {\r\n vm.data.selectedID = vm.previous.id;\r\n }\r\n });\r\n }\r\n\r\n function next() {\r\n $scope.$applyAsync(function () {\r\n if (vm.next && vm.next.id) {\r\n vm.data.selectedID = vm.next.id;\r\n }\r\n });\r\n }\r\n\r\n function onKeyDown(event) {\r\n if (event.keyCode === 37) {\r\n previous();\r\n } else if (event.keyCode === 39) {\r\n next();\r\n }\r\n }\r\n\r\n function closeDialog() {\r\n vm.data.open = false;\r\n vm.data.selectedID = null;\r\n angular.element('body').off('keydown', onKeyDown);\r\n angular.element('body').removeClass('no-scroll');\r\n }\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhTeamMember', ifhTeamMember);\r\n\r\n /** @ngInject */\r\n function ifhTeamMember(ENV) {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/team-member/team-member.html',\r\n scope: {\r\n member: '=',\r\n dialogData: '='\r\n },\r\n controller: MemberController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n /** @ngInject */\r\n function MemberController() {\r\n var vm = this;\r\n\r\n vm.imgPrefix = ENV.api;\r\n\r\n vm.openMemberDialog = openMemberDialog;\r\n\r\n function openMemberDialog() {\r\n angular.element('body').addClass('no-scroll');\r\n vm.dialogData.selectedID = vm.member.id;\r\n vm.dialogData.open = true;\r\n }\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhSplitter', ifhSplitter);\r\n\r\n /** @ngInject */\r\n function ifhSplitter() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/splitter/splitter.html',\r\n scope: {\r\n type: '='\r\n },\r\n controller: SplitterController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n }\r\n\r\n function SplitterController() {\r\n //var vm = this;\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhProjectsTimeline', ifhProjectsTimeline);\r\n\r\n /** @ngInject */\r\n function ifhProjectsTimeline() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/projects-timeline/proejcts-timeline.html',\r\n scope: {\r\n projects: '='\r\n },\r\n controller: ProjectsTimelineController,\r\n controllerAs: 'timeline',\r\n bindToController: true\r\n };\r\n }\r\n\r\n function ProjectsTimelineController($scope, $document) {\r\n var vm = this;\r\n\r\n vm.data = [];\r\n\r\n vm.scrollTo = scrollTo;\r\n\r\n var $destroy = $scope.$watch('vm.projects', init);\r\n $scope.$on('$destroy', $destroy);\r\n\r\n function init() {\r\n var years = [];\r\n var tempMapping = {};\r\n\r\n if (!vm.projects) {\r\n return;\r\n }\r\n\r\n //get distinct years among all projects\r\n for (var i = 0, len = vm.projects.length; i < len; i++) {\r\n var project = vm.projects[i];\r\n var year = (project.year || new Date(project.date).getFullYear()).toString();\r\n\r\n if (years.indexOf(year) === -1) {\r\n years.push(year);\r\n }\r\n\r\n tempMapping[year] = tempMapping[year] || {projects: []};\r\n tempMapping[year].projects.push(project);\r\n }\r\n\r\n //sort years chronologically\r\n years.sort();\r\n\r\n //find corresponding projects for each year and build an object like {'1997': {projects: [{}, {}]}}\r\n for (var j = 0, l = years.length; j < l; j++) {\r\n vm.data.push({\r\n year: years[j],\r\n projects: tempMapping[years[j]].projects\r\n });\r\n }\r\n }\r\n\r\n function scrollTo(year) {\r\n var wrapper = $document.find('.year' + year);\r\n $document.duScrollToElementAnimated(wrapper, 0, 600);\r\n }\r\n\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhProjectDialog', ifhNewsDialog);\r\n\r\n /** @ngInject */\r\n function ifhNewsDialog() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/project-dialog/project-dialog.html',\r\n scope: {\r\n data: '='\r\n },\r\n controller: ClientProjectDialogController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n /** @ngInject */\r\n function ClientProjectDialogController($scope, ENV, ProjectsService) {\r\n var vm = this;\r\n\r\n vm.imgPrefix = ENV.api;\r\n vm.projectsList = ProjectsService.getData();\r\n\r\n vm.closeDialog = closeDialog;\r\n\r\n init();\r\n\r\n function init() {\r\n var $destroy = $scope.$watch('vm.data.selectedID', updateDialog);\r\n $scope.$on('$destroy', $destroy);\r\n }\r\n\r\n function updateDialog(id, oldId) {\r\n var indexInCompleted, indexInCurrent, index, position;\r\n vm.data.project = {\r\n images: false\r\n };\r\n\r\n if (!id) {\r\n return;\r\n }\r\n\r\n indexInCompleted = getIndex(id, vm.projectsList.data.completed);\r\n\r\n for (var i = 0; i < vm.projectsList.data.current.length; i++) {\r\n var result = getIndex(id, vm.projectsList.data.current[i].list);\r\n if (result > -1) {\r\n indexInCurrent = result;\r\n position = i;\r\n }\r\n\r\n }\r\n\r\n if (indexInCompleted > -1) {\r\n vm.data.projectsList = vm.projectsList.data.completed;\r\n index = indexInCompleted;\r\n } else if (indexInCurrent > -1) {\r\n vm.data.projectsList = vm.projectsList.data.current[position].list;\r\n index = indexInCurrent;\r\n }\r\n\r\n $scope.$applyAsync(function () {\r\n vm.data.project = vm.data.projectsList[index];\r\n vm.data.project.numberLoaded = true;\r\n vm.data.previous = vm.data.projectsList[index - 1];\r\n vm.data.next = vm.data.projectsList[index + 1];\r\n });\r\n\r\n\r\n if (id && !oldId) {\r\n enableKeyListeners();\r\n }\r\n\r\n function getIndex(id, arr) {\r\n for (var i = 0; i < arr.length; i++) {\r\n if (arr[i].id === id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n function enableKeyListeners() {\r\n angular.element('body').on('keydown', onKeyDown);\r\n }\r\n }\r\n\r\n function previous() {\r\n $scope.$applyAsync(function () {\r\n if (vm.previous && vm.previous.id) {\r\n vm.data.selectedID = vm.data.previous.id;\r\n }\r\n });\r\n }\r\n\r\n function next() {\r\n $scope.$applyAsync(function () {\r\n if (vm.next && vm.next.id) {\r\n vm.data.selectedID = vm.data.next.id;\r\n }\r\n });\r\n }\r\n\r\n function onKeyDown(event) {\r\n if (event.keyCode === 37) {\r\n previous();\r\n } else if (event.keyCode === 39) {\r\n next();\r\n }\r\n }\r\n\r\n function closeDialog() {\r\n vm.data.open = false;\r\n angular.element('.js-dialog-content').scrollTop(0);\r\n angular.element('body').removeClass('no-scroll');\r\n angular.element('body').off('keydown', onKeyDown);\r\n }\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhProjectCardCompleted', ifhProjectCardCompleted);\r\n\r\n /** @ngInject */\r\n function ifhProjectCardCompleted() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/project-card-completed/project-card-completed.html',\r\n scope: {\r\n project: '='\r\n },\r\n controller: ProjectCardCompletedController,\r\n controllerAs: 'projectCardCompleted',\r\n bindToController: true\r\n };\r\n\r\n /** @ngInject */\r\n function ProjectCardCompletedController(ENV, $timeout) {\r\n var vm = this;\r\n\r\n vm.openDialog = openDialog;\r\n\r\n $timeout(_generateRandomImage, 1000);\r\n\r\n vm.projectDialog = {\r\n open: false\r\n };\r\n\r\n function openDialog() {\r\n angular.element('body').addClass('no-scroll');\r\n vm.projectDialog.open = true;\r\n vm.projectDialog.selectedID = vm.project.id;\r\n }\r\n\r\n function _generateRandomImage() {\r\n var noImageAvailable = 'assets/images/no-thumbnail.png';\r\n var project = vm.project;\r\n var images = project.images;\r\n var qty = images && images.length;\r\n var random;\r\n\r\n if (!project.thumbnail && !qty) {\r\n project.timelineImg = noImageAvailable;\r\n } else if (project.thumbnail && !qty) {\r\n project.timelineImg = '/personal-area' + project.thumbnail;\r\n project.images = ['/personal-area' + project.thumbnail];\r\n } else if (project.thumbnail && qty) {\r\n project.timelineImg = '/personal-area' + project.thumbnail;\r\n } else {\r\n random = Math.floor(Math.random() * qty);\r\n project.timelineImg = ENV.api + images[random] || noImageAvailable;\r\n }\r\n }\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhProjectCard', ifhProjectCard);\r\n\r\n /** @ngInject */\r\n function ifhProjectCard() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/project-card/project-card.html',\r\n scope: {\r\n project: '='\r\n },\r\n controller: ProjectCardController,\r\n controllerAs: 'projectCard',\r\n bindToController: true\r\n };\r\n\r\n /** @ngInject */\r\n function ProjectCardController(ENV, $timeout) {\r\n var vm = this;\r\n\r\n vm.openDialog = openDialog;\r\n\r\n $timeout(_generateRandomImage, 10);\r\n\r\n vm.projectDialog = {\r\n open: false\r\n };\r\n\r\n function openDialog() {\r\n angular.element('body').addClass('no-scroll');\r\n vm.projectDialog.open = true;\r\n vm.projectDialog.selectedID = vm.project.id;\r\n }\r\n\r\n function _generateRandomImage() {\r\n var noImageAvailable = 'assets/images/no-thumbnail.png';\r\n var project = vm.project;\r\n var images = project.images;\r\n var qty = images && images.length;\r\n var random;\r\n\r\n if (!project.thumbnail && !qty) {\r\n project.timelineImg = noImageAvailable;\r\n } else if (project.thumbnail && !qty) {\r\n project.timelineImg = ENV.api + '/InterforumHoldings' + project.thumbnail;\r\n project.images = ['/InterforumHoldings' + project.thumbnail];\r\n } else if (project.thumbnail && qty) {\r\n project.timelineImg = ENV.api + '/InterforumHoldings' + project.thumbnail;\r\n } else {\r\n random = Math.floor(Math.random() * qty);\r\n project.timelineImg = ENV.api + images[random] || noImageAvailable;\r\n }\r\n }\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhNewsDialog', ifhNewsDialog);\r\n\r\n /** @ngInject */\r\n function ifhNewsDialog() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/news-dialog/news-dialog.html',\r\n scope: {\r\n data: '='\r\n },\r\n controller: ClientNewsDialogController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n /** @ngInject */\r\n function ClientNewsDialogController() {\r\n var vm = this;\r\n\r\n vm.closeDialog = closeDialog;\r\n\r\n function closeDialog() {\r\n vm.data.open = false;\r\n angular.element('#news-dialog-content').scrollTop(0);\r\n angular.element('body').removeClass('no-scroll');\r\n }\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhNewsCategories', ifhNewsCategories);\r\n\r\n /** @ngInject */\r\n function ifhNewsCategories() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/news-categories/news-categories.html',\r\n controller: NewsCategoriesController,\r\n controllerAs: 'vm'\r\n };\r\n }\r\n\r\n function NewsCategoriesController($state, $rootScope) {\r\n var vm = this;\r\n\r\n vm.activeState = $state.current.name;\r\n vm.changeType = changeType;\r\n\r\n vm.links = [\r\n // {\r\n // state: 'client.press-releases',\r\n // text: 'menuReleases'\r\n // },\r\n {\r\n state: 'client.publications',\r\n text: 'menuPublications'\r\n },\r\n {\r\n state: 'client.archive',\r\n text: 'menuArchive'\r\n },\r\n {\r\n state: 'client.testimonials',\r\n text: 'menuTestimonials'\r\n }\r\n ];\r\n\r\n function changeType(state) {\r\n angular.element('body')[0].scrollTop = 0;\r\n $state.go(state);\r\n }\r\n\r\n /*eslint-disable */\r\n $rootScope.$on('$stateChangeSuccess', function (event, toState) {\r\n /*eslint-enable */\r\n vm.activeState = toState.name;\r\n });\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhMenuToggle', ifhMenuToggle);\r\n\r\n /** @ngInject */\r\n function ifhMenuToggle() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/menu-toggle/menu-toggle.html',\r\n scope: {\r\n menuOpened: '='\r\n },\r\n controller: MenuToggleController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n }\r\n\r\n function MenuToggleController() {\r\n var vm = this;\r\n var $body = angular.element('body');\r\n\r\n vm.toggleMenu = toggleMenu;\r\n\r\n function toggleMenu() {\r\n if (vm.menuOpened) {\r\n closeMenu();\r\n } else {\r\n openMenu();\r\n }\r\n }\r\n\r\n function openMenu() {\r\n vm.menuOpened = true;\r\n $body.addClass('no-scroll');\r\n }\r\n\r\n function closeMenu() {\r\n vm.menuOpened = false;\r\n $body.removeClass('no-scroll');\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhMenu', ifhMenu);\r\n\r\n /** @ngInject */\r\n function ifhMenu() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/menu/menu.html',\r\n scope: {\r\n opened: '=',\r\n dictionary: '=',\r\n scroller: '='\r\n },\r\n controller: MenuController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n /** @ngInject */\r\n function MenuController($rootScope, $scope, $state, $timeout, $location) {\r\n var vm = this;\r\n\r\n vm.links = [\r\n {\r\n state: 'client.home',\r\n text: 'menuHome',\r\n isSubItem: false\r\n },\r\n {\r\n state: 'client.home',\r\n text: 'menuHomeBlock1',\r\n isSubItem: true,\r\n activateTab: 'lang-home-1'\r\n },\r\n {\r\n state: 'client.home',\r\n text: 'menuHomeBlock2',\r\n isSubItem: true,\r\n activateTab: 'lang-home-2'\r\n },\r\n {\r\n state: 'client.home',\r\n text: 'menuHomeBlock3',\r\n isSubItem: true,\r\n activateTab: 'lang-home-3'\r\n },\r\n {\r\n state: 'client.home',\r\n text: 'menuHomeBlock4',\r\n isSubItem: true,\r\n activateTab: 'lang-home-4'\r\n },\r\n {\r\n state: 'client.home',\r\n text: 'menuHomeBlock5',\r\n isSubItem: true,\r\n activateTab: 'lang-home-5'\r\n },\r\n {\r\n state: 'client.home',\r\n text: 'menuHomeBlock6',\r\n isSubItem: true,\r\n activateTab: 'lang-home-6'\r\n },\r\n {\r\n state: 'client.home',\r\n text: 'menuHomeBlock7',\r\n isSubItem: true,\r\n activateTab: 'lang-home-7'\r\n },\r\n {\r\n state: 'client.team',\r\n text: 'menuTeam',\r\n isSubItem: false\r\n },\r\n // {\r\n // state: 'client.team',\r\n // text: 'menuAdvisers',\r\n // isSubItem: true,\r\n // activateTab: 0\r\n // },\r\n // {\r\n // state: 'client.team',\r\n // text: 'menuManagers',\r\n // isSubItem: true,\r\n // activateTab: 1\r\n // },\r\n // {\r\n // state: 'client.team',\r\n // text: 'menuDirectors',\r\n // isSubItem: true,\r\n // activateTab: 2\r\n // },\r\n // {\r\n // state: 'client.strategy',\r\n // text: 'menuInvestmentStrategy',\r\n // isSubItem: false\r\n // },\r\n // {\r\n // state: 'client.projects',\r\n // text: 'menuProjectsCurrent',\r\n // isSubItem: true,\r\n // activateTab: 0\r\n // },\r\n // {\r\n // state: 'client.projects',\r\n // text: 'menuProjectsFinished',\r\n // isSubItem: true,\r\n // activateTab: 1\r\n // },\r\n // {\r\n // state: 'client.news',\r\n // text: 'menuTestimonials',\r\n // // text: 'menuNewsRoom',\r\n // isSubItem: false\r\n // },\r\n // {\r\n // state: 'client.press-releases',\r\n // text: 'menuReleases',\r\n // isSubItem: true\r\n // },\r\n // {\r\n // state: 'client.publications',\r\n // text: 'menuPublications',\r\n // isSubItem: true\r\n // },\r\n // {\r\n // state: 'client.archive',\r\n // text: 'menuArchive',\r\n // isSubItem: true\r\n // },\r\n // {\r\n // state: 'client.testimonials',\r\n // text: 'menuTestimonials',\r\n // isSubItem: true\r\n // },\r\n {\r\n state: 'client.contact-us',\r\n text: 'menuContactUs',\r\n isSubItem: false\r\n }\r\n ];\r\n\r\n vm.config = {\r\n autoHideScrollbar: false,\r\n theme: 'minimal-dark',\r\n axis: 'y',\r\n advanced: {\r\n updateOnContentResize: true\r\n },\r\n scrollInertia: 0\r\n };\r\n\r\n vm.navigate = navigate;\r\n\r\n init();\r\n\r\n function init() {\r\n onStateChange($state.current.name);\r\n\r\n var destroyListener = $rootScope.$on('menu-link-change', function (event, data) {\r\n onStateChange(data.state, data.tab, true);\r\n });\r\n\r\n $scope.$on('$destroy', destroyListener);\r\n }\r\n\r\n function navigate(state, tab) {\r\n var $body = angular.element('body');\r\n\r\n vm.opened = false;\r\n $body.removeClass('no-scroll');\r\n\r\n $state.go(state);\r\n $body[0].scrollTop = 0;\r\n\r\n $timeout(function () {\r\n onStateChange(state, tab);\r\n }, 300);\r\n }\r\n\r\n function onStateChange(state, tab, skipEventBroadcast) {\r\n for (var i = 0; i < vm.links.length; i++) {\r\n var link = vm.links[i];\r\n\r\n link.isActive = link.state === state && link.activateTab === tab;\r\n\r\n if (link.isActive && (tab || tab === 0) && !skipEventBroadcast) {\r\n $rootScope.$broadcast(state + '-tab-change', tab);\r\n }\r\n }\r\n\r\n if(tab !== undefined && tab.indexOf('lang-') !== -1) {\r\n $location.hash('#' + tab);\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhLoginDialog', ifhLoginDialog);\r\n\r\n /** @ngInject */\r\n function ifhLoginDialog() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/login-dialog/login-dialog.html',\r\n scope: {\r\n showing: '='\r\n },\r\n controller: LoginController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function LoginController($timeout, AdminService) {\r\n var vm = this;\r\n\r\n vm.credentials = {\r\n login: '',\r\n password: ''\r\n };\r\n vm.adminData = AdminService.getData();\r\n\r\n vm.login = login;\r\n vm.closePopUp = closePopUp;\r\n\r\n function login() {\r\n vm.error = '';\r\n\r\n AdminService.logIn(vm.credentials, onError);\r\n\r\n function onError(msg) {\r\n vm.error = msg;\r\n }\r\n }\r\n\r\n function closePopUp(event) {\r\n var backdrop;\r\n\r\n if (angular.element(event.target).parents('form').length) {\r\n return;\r\n }\r\n\r\n backdrop = angular.element('.backdrop');\r\n backdrop.addClass('opaque');\r\n\r\n $timeout(function () {\r\n angular.element('body').removeClass('no-scroll');\r\n vm.showing = false;\r\n\r\n $timeout(function () {\r\n backdrop.removeClass('opaque');\r\n });\r\n }, 300);\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhClientLoader', ifhClientLoader);\r\n\r\n /** @ngInject */\r\n function ifhClientLoader() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/loader/loader.html',\r\n scope: {}\r\n };\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhHeader', ifhHeader);\r\n\r\n /** @ngInject */\r\n function ifhHeader() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/header/header.html',\r\n scope: {\r\n menuOpened: '=',\r\n dictionary: '=',\r\n loginShowing: '='\r\n },\r\n controller: HeaderController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n }\r\n\r\n function HeaderController($window, localStorageService) {\r\n var vm = this;\r\n\r\n vm.lang_chose = localStorageService.get('lang_id') ? localStorageService.get('lang_id') : \"1\";\r\n vm.languages = {\"languages\":[{\"id\":0,\"language_name\":\"UA\"},{\"id\":1,\"language_name\":\"EN\"}]};\r\n localStorageService.set('lang_id', vm.lang_chose);\r\n\r\n vm.changeLang = changeLang;\r\n vm.openLoginPopup = openLoginPopup;\r\n\r\n function openLoginPopup() {\r\n // angular.element('body').addClass('no-scroll');\r\n // vm.loginShowing = true;\r\n $window.location.href = $window.location.origin + '/personal-area/'\r\n }\r\n\r\n function changeLang(lang) {\r\n vm.lang_chose = lang;\r\n localStorageService.set('lang_id', vm.lang_chose);\r\n location.reload();\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhFooter', ifhFooter);\r\n\r\n /** @ngInject */\r\n function ifhFooter() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/footer/footer.html',\r\n controller: FooterController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n }\r\n\r\n function FooterController() {\r\n var vm = this;\r\n\r\n vm.currentYear = new Date().getFullYear();\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .directive('ifhDirectorCard', ifhDirectorCard);\r\n\r\n /** @ngInject */\r\n function ifhDirectorCard(ENV) {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/components/director-card/director-card.html',\r\n scope: {\r\n director: '='\r\n },\r\n controller: DirectorController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n /** @ngInject */\r\n function DirectorController() {\r\n var vm = this;\r\n\r\n vm.imgPrefix = ENV.api;\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .factory('StatsService', StatsService);\r\n\r\n /** @ngInject */\r\n function StatsService($resource, ENV, localStorageService) {\r\n var data = {\r\n loading: false,\r\n data: []\r\n };\r\n var resource = $resource(ENV.api + '/stats');\r\n\r\n return {\r\n getData: getData,\r\n fetch: fetch\r\n };\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function fetch() {\r\n data.loading = true;\r\n\r\n resource.get({lang_id: localStorageService.get('lang_id') ? localStorageService.get('lang_id') : \"1\"}, onSuccess, onError);\r\n\r\n function onSuccess(response) {\r\n if (!response.success) {\r\n onError();\r\n }\r\n\r\n data.data = response.data;\r\n data.loading = false;\r\n }\r\n\r\n function onError() {\r\n data.loading = false;\r\n }\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .factory('StaffService', StaffService);\r\n\r\n /** @ngInject */\r\n function StaffService($resource, $mdToast, ENV, localStorageService) {\r\n var data = {\r\n loading: false,\r\n managers: [],\r\n advisers: [],\r\n directors: []\r\n };\r\n var resource = $resource(ENV.api + '/staff/:id', null,\r\n {\r\n fetch: {\r\n method: 'GET'\r\n }\r\n });\r\n\r\n return {\r\n getData: getData,\r\n fetch: fetch\r\n };\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function fetch(successCallback) {\r\n data.fetching = true;\r\n resource.fetch({lang_id: localStorageService.get('lang_id') ? localStorageService.get('lang_id') : \"1\"}, onSuccess, onError);\r\n\r\n function onSuccess(response) {\r\n data.fetching = false;\r\n\r\n if (!response.success) {\r\n onError();\r\n return;\r\n }\r\n\r\n data.executives = [];\r\n data.managers = [];\r\n data.directors = [];\r\n data.advisers = [];\r\n\r\n for (var i = 0, arr = response.data, len = arr.length; i < len; i++) {\r\n var person = arr[i];\r\n\r\n switch (person.type) {\r\n case 0:\r\n data.managers.push(person);\r\n break;\r\n case 1:\r\n data.executives.push(person);\r\n break;\r\n case 2:\r\n data.directors.push(person);\r\n break;\r\n case 3:\r\n data.advisers.push(person);\r\n }\r\n }\r\n\r\n data.executives.sort(sort);\r\n data.managers.sort(sort);\r\n data.directors.sort(sort);\r\n data.advisers.sort(sort);\r\n\r\n function sort(a, b) {\r\n return a.position - b.position;\r\n }\r\n\r\n successCallback && successCallback();\r\n }\r\n\r\n function onError() {\r\n data.fetching = false;\r\n }\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .factory('ProjectsService', ProjectsService);\r\n\r\n /** @ngInject */\r\n function ProjectsService($resource, ENV, localStorageService) {\r\n var data = {\r\n fetching: false,\r\n data: {}\r\n };\r\n\r\n return {\r\n getData: getData,\r\n fetch: fetch\r\n };\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function fetch(successCallback) {\r\n data.fetching = true;\r\n $resource(ENV.api + '/projects').get({lang_id: localStorageService.get('lang_id') ? localStorageService.get('lang_id') : \"1\"}, onSuccess, onError);\r\n\r\n function onSuccess(response) {\r\n var current, completed;\r\n\r\n data.fetching = false;\r\n\r\n if (!response.success) {\r\n onError();\r\n return;\r\n }\r\n\r\n current = response.data.current;\r\n completed = response.data.completed;\r\n\r\n completed.forEach(addNewLines);\r\n current.forEach(function (type) {\r\n type.list.forEach(addNewLines);\r\n });\r\n\r\n data.data = response.data;\r\n successCallback && successCallback();\r\n\r\n function addNewLines(proj) {\r\n if (proj.description) {\r\n proj.description = proj.description.split('\\n').join('
');\r\n }\r\n }\r\n }\r\n\r\n function onError() {\r\n data.fetching = false;\r\n }\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .factory('NewsService', NewsService);\r\n\r\n /** @ngInject */\r\n function NewsService($resource, ENV, localStorageService) {\r\n var data = {\r\n loading: false,\r\n data: {}\r\n };\r\n var resource = $resource(ENV.api + '/news/:id', null,\r\n {\r\n fetch: {\r\n method: 'GET'\r\n }\r\n });\r\n\r\n return {\r\n getData: getData,\r\n fetch: fetch,\r\n onFetch: onFetch\r\n };\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function fetch(successCallback) {\r\n data.fetching = true;\r\n resource.fetch({lang_id: localStorageService.get('lang_id') ? localStorageService.get('lang_id') : \"1\"}, onSuccess, onError);\r\n\r\n function onSuccess(response) {\r\n data.fetching = false;\r\n\r\n if (!response.success) {\r\n onError();\r\n return;\r\n }\r\n\r\n data.data = response.data;\r\n\r\n // if (data.data.testimonials && data.data.testimonials.length > 1) {\r\n // data.data.testimonials.reverse();\r\n // }\r\n\r\n successCallback && successCallback();\r\n\r\n data.onFetch && data.onFetch();\r\n delete data.onFetch;\r\n }\r\n\r\n function onError() {\r\n data.fetching = false;\r\n }\r\n }\r\n\r\n function onFetch(callback) {\r\n data.onFetch = callback;\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .factory('LanguageService', LanguageService);\r\n\r\n /** @ngInject */\r\n function LanguageService($resource, $mdToast, ENV) {\r\n var data = {\r\n loading: false,\r\n languages: []\r\n };\r\n var resource = $resource(ENV.api + '/language/:id', null,\r\n {\r\n fetch: {\r\n method: 'GET'\r\n },\r\n add: {\r\n method: 'POST'\r\n },\r\n update: {\r\n method: 'PUT'\r\n },\r\n remove: {\r\n method: 'DELETE'\r\n }\r\n });\r\n\r\n return {\r\n getData: getData,\r\n fetch: fetch\r\n };\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function fetch(successCallback) {\r\n data.fetching = true;\r\n resource.fetch(onSuccess, onError);\r\n\r\n function onSuccess(response) {\r\n data.fetching = false;\r\n data.languages = response.data;\r\n\r\n if (!response.success) {\r\n onError();\r\n return;\r\n }\r\n successCallback && successCallback();\r\n }\r\n\r\n function onError() {\r\n data.fetching = false;\r\n }\r\n }\r\n\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .service('HttpInterceptors', HttpInterceptors);\r\n\r\n /** @ngInject */\r\n function HttpInterceptors($q, $log, $injector) {\r\n\r\n return {\r\n request: function (config) {\r\n config.timeout = 15000;\r\n return config;\r\n },\r\n\r\n response: function (response) {\r\n return response;\r\n },\r\n\r\n responseError: function (rejection) {\r\n var $mdToast = $injector.get('$mdToast');\r\n var msg = rejection.data && rejection.data.error && rejection.data.error.message || rejection.statusText || 'Unknown Error';\r\n\r\n $log.debug('XHR rejection: ', rejection);\r\n $mdToast.show($mdToast.simple().textContent(msg).position('top right'));\r\n\r\n return $q.reject(rejection);\r\n }\r\n };\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .factory('DictionaryService', DictionaryService);\r\n\r\n /** @ngInject */\r\n function DictionaryService($resource, $timeout, ENV, localStorageService) {\r\n var data = {\r\n loading: false,\r\n data: {}\r\n };\r\n var resource = $resource(ENV.api + '/dictionary');\r\n\r\n return {\r\n getData: getData,\r\n fetch: fetch\r\n };\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function fetch(options) {\r\n data.fetching = true;\r\n\r\n resource.get({lang_id: localStorageService.get('lang_id') ? localStorageService.get('lang_id') : \"1\"}, onSuccess, onError);\r\n\r\n function onSuccess(response) {\r\n if (!response.success) {\r\n onError();\r\n }\r\n\r\n if (options && options.forClient) {\r\n _dictionaryToObject(response.data);\r\n } else {\r\n data.data = response.data;\r\n }\r\n\r\n if (options && options.forClient) {\r\n $timeout(function () {\r\n data.fetching = false;\r\n }, 1000);\r\n } else {\r\n data.fetching = false;\r\n }\r\n }\r\n\r\n function onError() {\r\n data.fetching = false;\r\n }\r\n }\r\n\r\n function _dictionaryToObject(dictionary) {\r\n data.data = {};\r\n\r\n for (var i = 0, len = dictionary.length; i < len; i++) {\r\n data.data[dictionary[i].key] = dictionary[i].value;\r\n }\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .factory('ContactService', ContactService);\r\n\r\n /** @ngInject */\r\n function ContactService($resource, ENV) {\r\n var dataModel = {\r\n name: '',\r\n phone: '',\r\n email: '',\r\n question: ''\r\n };\r\n\r\n var data = {\r\n data: angular.copy(dataModel),\r\n submitted: false,\r\n loading: false\r\n };\r\n\r\n return {\r\n getData: getData,\r\n getInTouch: getInTouch\r\n };\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function getInTouch() {\r\n data.fetching = true;\r\n data.showError = false;\r\n\r\n $resource(ENV.api + '/email').save(data.data, onSuccess, onError);\r\n\r\n function onSuccess() {\r\n data.fetching = false;\r\n data.submitted = true;\r\n data.data = angular.copy(dataModel);\r\n }\r\n\r\n function onError() {\r\n data.fetching = false;\r\n data.showError = true;\r\n }\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .factory('BannerService', BannerService);\r\n\r\n /** @ngInject */\r\n function BannerService($resource, ENV, localStorageService) {\r\n var data = {\r\n loading: false,\r\n data: []\r\n };\r\n var resource = $resource(ENV.api + '/banner');\r\n\r\n return {\r\n getData: getData,\r\n fetch: fetch\r\n };\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function fetch() {\r\n data.loading = true;\r\n\r\n resource.get({lang_id: localStorageService.get('lang_id') ? localStorageService.get('lang_id') : \"1\"}, onSuccess, onError);\r\n\r\n function onSuccess(response) {\r\n if (!response.success) {\r\n onError();\r\n }\r\n\r\n data.data = response.data.slice(0,3);\r\n data.loading = false;\r\n }\r\n\r\n function onError() {\r\n data.loading = false;\r\n }\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .factory('AdminService', AdminService);\r\n\r\n /** @ngInject */\r\n function AdminService($resource, $window, ENV) {\r\n var data = {\r\n loading: false\r\n };\r\n\r\n return {\r\n getData: getData,\r\n logIn: logIn\r\n };\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function logIn(credentials, errCallback) {\r\n if (ENV.name === 'local') {\r\n redirectToAdmin();\r\n return;\r\n }\r\n\r\n data.loading = true;\r\n $resource(ENV.api + '/login').save(credentials, onSuccess, onError);\r\n\r\n function onSuccess(res) {\r\n var role = res && res.user && res.user.role;\r\n\r\n if (!res.success || !role) {\r\n onError();\r\n return;\r\n }\r\n\r\n data.loading = false;\r\n redirectToAdmin();\r\n }\r\n\r\n function onError(res) {\r\n var msg = res && res.data && res.data.error && res.data.error.message ||\r\n 'Unknown error has occurred. Please try again in a little while.';\r\n\r\n errCallback && errCallback(msg);\r\n data.loading = false;\r\n }\r\n\r\n function redirectToAdmin() {\r\n $window.location = 'http://' + $window.location.hostname + ENV.adminURL;\r\n }\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .controller('ClientController', ClientController);\r\n\r\n /** @ngInject */\r\n function ClientController($scope, $document, $timeout, DictionaryService, StaffService, NewsService, ProjectsService) {\r\n var vm = this;\r\n\r\n vm.dictionary = DictionaryService.getData();\r\n vm.menuOpened = false;\r\n vm.loginShowing = false;\r\n vm.scroller = {\r\n scroll: function (selector, tab, skipTimeout) {\r\n var wrapper = $document.find(selector);\r\n\r\n if (skipTimeout) {\r\n scroll();\r\n } else {\r\n $timeout(scroll, 300);\r\n }\r\n\r\n function scroll() {\r\n $document.duScrollToElementAnimated(wrapper, 0, 1000);\r\n }\r\n }\r\n };\r\n\r\n vm.closeMenu = closeMenu;\r\n\r\n init();\r\n\r\n function init() {\r\n var destroyListener = $scope.$watch('client.menuOpened', function (newValue) {\r\n if (newValue) {\r\n vm.backDropToRight = true;\r\n } else {\r\n $timeout(function () {\r\n vm.backDropToRight = false;\r\n }, 400);\r\n }\r\n });\r\n $scope.$on('$destroy', destroyListener);\r\n\r\n DictionaryService.fetch({forClient: true});\r\n StaffService.fetch();\r\n NewsService.fetch();\r\n }\r\n\r\n function closeMenu() {\r\n vm.menuOpened = false;\r\n angular.element('body').removeClass('no-scroll');\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .run(runBlock);\r\n\r\n /** @ngInject */\r\n function runBlock($log) {\r\n $log.debug('Debug enabled, runBlock end.');\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .config(routerConfig);\r\n\r\n /** @ngInject */\r\n function routerConfig($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('client', {\r\n url: '',\r\n abstract: true,\r\n templateUrl: 'app/pages/client.html',\r\n controller: 'ClientController',\r\n controllerAs: 'client'\r\n })\r\n .state('client.home', {\r\n url: '/home',\r\n templateUrl: 'app/pages/home/home.html',\r\n controller: 'HomeController',\r\n controllerAs: 'home'\r\n })\r\n .state('client.team', {\r\n url: '/team',\r\n templateUrl: 'app/pages/team/team.html',\r\n controller: 'TeamController',\r\n controllerAs: 'team'\r\n })\r\n // .state('client.strategy', {\r\n // url: '/investment-strategy',\r\n // templateUrl: 'app/pages/strategy/strategy.html',\r\n // controller: 'StrategyController',\r\n // controllerAs: 'strategy'\r\n // })\r\n .state('client.projects', {\r\n url: '/projects',\r\n templateUrl: 'app/pages/projects/projects.html',\r\n controller: 'ProjectsController',\r\n controllerAs: 'projects'\r\n })\r\n .state('client.news', {\r\n url: '/news',\r\n // templateUrl: 'app/pages/news/news.html',\r\n // controller: 'NewsController',\r\n templateUrl: 'app/pages/news/testimonials/testimonials.html',\r\n controller: 'NewsController',\r\n controllerAs: 'news'\r\n })\r\n // .state('client.press-releases', {\r\n // url: '/news/press-releases',\r\n // templateUrl: 'app/pages/news/press-releases/press-releases.html',\r\n // controller: 'NewsController',\r\n // controllerAs: 'news'\r\n // })\r\n // .state('client.publications', {\r\n // url: '/news/publications',\r\n // templateUrl: 'app/pages/news/publications/publications.html',\r\n // controller: 'NewsController',\r\n // controllerAs: 'news'\r\n // })\r\n // .state('client.archive', {\r\n // url: '/news/archive',\r\n // templateUrl: 'app/pages/news/archive/archive.html',\r\n // controller: 'NewsController',\r\n // controllerAs: 'news'\r\n // })\r\n // .state('client.testimonials', {\r\n // url: '/news/testimonials',\r\n // templateUrl: 'app/pages/news/testimonials/testimonials.html',\r\n // controller: 'NewsController',\r\n // controllerAs: 'news'\r\n // })\r\n .state('client.contact-us', {\r\n url: '/contact-us',\r\n templateUrl: 'app/pages/contact-us/contact-us.html',\r\n controller: 'ContactUsController',\r\n controllerAs: 'contactUs'\r\n });\r\n\r\n $urlRouterProvider.otherwise('/home');\r\n }\r\n\r\n})();\r\n\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh');\r\n //.constant();\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('ifh')\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($logProvider, $httpProvider, ENV, uiGmapGoogleMapApiProvider, localStorageServiceProvider) {\r\n // Enable log\r\n $logProvider.debugEnabled(ENV.debugEnabled);\r\n\r\n localStorageServiceProvider.setPrefix('ifh');\r\n\r\n $httpProvider.interceptors.push('HttpInterceptors');\r\n\r\n $httpProvider.defaults.withCredentials = true;\r\n $httpProvider.defaults.headers.common.Accept = 'application/json';\r\n $httpProvider.defaults.headers.common['Content-Type'] = 'application/json';\r\n $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\r\n\r\n uiGmapGoogleMapApiProvider.configure({\r\n key: 'AIzaSyBsZLlZ9j9bwOuAvOisoTOFoCg0yNwR3TY',\r\n v: '3.22'\r\n });\r\n }\r\n\r\n})();\r\n\nangular.module(\"ifh.ENV\", [])\n.constant(\"ENV\", {\"name\":\"prod\",\"api\":\"/api\",\"adminURL\":\"/admin\",\"debugEnabled\":false});\n\nangular.module(\"ifh\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/pages/client.html\",\"
\");\n$templateCache.put(\"app/components/director-card/director-card.html\",\"
{{::vm.director.name}}
{{::vm.director.title}}
\");\n$templateCache.put(\"app/components/footer/footer.html\",\"
fax: {{::client.dictionary.data.contactFax}}
© 2012-{{::vm.currentYear}}, {{::client.dictionary.data.contactCompanyName}}
|
Developed by Sprinterra
\");\n$templateCache.put(\"app/components/header/header.html\",\"
{{::vm.dictionary.homeLogin}}
\");\n$templateCache.put(\"app/components/loader/loader.html\",\"
\");\n$templateCache.put(\"app/components/login-dialog/login-dialog.html\",\"

{{vm.error}}

\");\n$templateCache.put(\"app/components/menu/menu.html\",\"
arrow_forward {{::vm.dictionary[link.text]}}
\");\n$templateCache.put(\"app/components/menu-toggle/menu-toggle.html\",\"
\");\n$templateCache.put(\"app/components/news-categories/news-categories.html\",\"

{{::client.dictionary.data[link.text]}}

\");\n$templateCache.put(\"app/components/news-dialog/news-dialog.html\",\"
close
{{::vm.data.content.date | date:\\'mediumDate\\'}}
{{::vm.data.content.name}}
\");\n$templateCache.put(\"app/components/project-card/project-card.html\",\"

{{::projectCard.project.name}}

View project

\");\n$templateCache.put(\"app/components/project-card-completed/project-card-completed.html\",\"

{{::projectCardCompleted.project.name}}

{{::projectCardCompleted.project.location}} | {{::projectCardCompleted.project.projectSize}} | {{::projectCardCompleted.project.year}}
\");\n$templateCache.put(\"app/components/project-dialog/project-dialog.html\",\"
close

{{vm.data.project.name}}

{{vm.data.project.location}} | {{vm.data.project.projectSize}} | {{vm.data.project.year}}

previous

{{vm.data.previous.name}}

next

{{vm.data.next.name}}

\");\n$templateCache.put(\"app/components/projects-timeline/proejcts-timeline.html\",\"
{{::year.year}}
{{::year.year}}
\");\n$templateCache.put(\"app/components/splitter/splitter.html\",\"
\");\n$templateCache.put(\"app/components/team-member/team-member.html\",\"
{{::vm.member.name}}
{{::vm.member.title}}
\");\n$templateCache.put(\"app/components/team-member-dialog/team-member-dialog.html\",\"
close

{{vm.currentMember.name}}

{{vm.currentMember.title}}

previous

{{vm.previous.name}}

next

{{vm.next.name}}

\");\n$templateCache.put(\"app/components/video-dialog/video-dialog.html\",\"
close {{::vm.data.video}}
\");\n$templateCache.put(\"app/pages/contact-us/contact-us.html\",\"

{{::client.dictionary.data.menuContactUs}}

{{::client.dictionary.data.menuContactUs}}

{{::client.dictionary.data.contactCompanyName}}, {{contactUs.ua ? \\'Київ\\' : \\'Kyiv\\'}}

{{::client.dictionary.data.contactAddress}}

{{contactUs.ua ? \\'Телефон:\\' : \\'Phone:\\'}} {{::client.dictionary.data.contactPhone}}

{{contactUs.ua ? \\'Факс:\\' : \\'Fax:\\'}} {{::client.dictionary.data.contactFax}}

E-mail {{::client.dictionary.data.contactEmail}}

{{::client.dictionary.data.contactCompanyName}}, Рахів

90625, Закарпатська область, м.Рахів, вул. Привокзальна,13

Телефон: тел: (03132) 2-56-28

Факс: факс: (03132) 2-56-28

E-mail: office@saulyak.com.ua

{{::client.dictionary.data.contactCompanyName}}, Rakhiv

13 Pryvokzalna street, Rakhiv town, Transcarpathian oblast, 90625, Ukraine

Phone: tel: (03132) 2-56-28

Fax: fax: (03132) 2-56-28

E-mail: office@saulyak.com.ua

{{::client.dictionary.data.contactSubmittedTitle}}

{{::client.dictionary.data.contactFormSubmittedMessage}}

{{::client.dictionary.data.contactFormTitle}}

{{::client.dictionary.data.contactFormSubTitle}}

{{::client.dictionary.data.contactUsError}}

\");\n$templateCache.put(\"app/pages/home/home.html\",\"
\\\"\\\" \\\"\\\" \\\"\\\"

{{::client.dictionary.data.homeDescription}}

{{::client.dictionary.data.menuAbout}}

{{::client.dictionary.data.aboutText}}

Про Україну

Україна – держава, розташована у Східній Європі. Межує з Росією на сході та північному сході; Білоруссю на півночі; Польщею, Словаччиною й Угорщиною - на заході; Румунією та Молдовою – на південному заході, омивається Чорним морем на півдні. Площа становить 603 628 км2 (233 062 квадратних миль), що робить її другою за площею країною в Європі після Росії та 46-ю за величиною країною у світі. Населення України становить близько 42 мільйонів, що робить її восьмою за чисельністю населення країною в Європі та 34-ю за чисельністю країною у світі. Столиця та найбільше місто – Київ.

Гірнича промисловість України

Україна довгий час знаходилась в тіні в міжнародній гірничовидобувній промисловості, незважаючи на значні природні багатства країни.

Корисні копалини країни, можливо, є її найбільшим економічним активом, але відсутність ефективного державного управління в цій сфері не дозволяли Україні в повній мірі отримувати вигоду в минулому.

У гірничовидобувному секторі України в даний час зайнято біля 200 тис. чоловік, і тому є важливим сектором економіки, на якому уряд повинен зосередитися і розвивати, переважно за рахунок іноземних інвестицій. Президент Зеленський, ймовірно, вважає природні ресурси країни ключем до економічного процвітання і публічно висловив підтримку таким проектам, як Шимановський проект канадської ресурсної компанії Black Iron\\'s (TSX: BKI, OTC Pink: BKIRF, FWB: BIN).

About Ukraine

Ukraine is a country in Eastern Europe. It is bordered by Russia to the east and north-east; Belarus to the north; Poland, Slovakia and Hungary to the west; and Romania, Moldova, and the Black Sea to the south. Ukraine has an area of 603,628 km2 (233,062 sq mi), making it the second-largest country by area in Europe after Russia, and the 46th-largest country in the world. Ukraine has a population of about 42 million, making it the eighth-most populous country in Europe, and the 34th-most populous country in the world. Its capital and largest city is Kyiv.

Ukrainian Mining Industry

Ukraine has long been an afterthought in the international mining industry despite the country’s significant natural gifts.

The country’s mineral wealth is perhaps its greatest economic asset, but the lack of effective state administration in this field have hindered Ukraine from fully benefiting in the past.

Ukraine’s mining sector currently employs about 200 thousand people and is therefore an important sector of the economy for the government to focus on and grow primarily through foreign investment. President Zelensky likely sees the country’s natural resources as key to economic prosperity and has publicly expressed support for projects like Canadian resource company Black Iron’s (TSX:BKI,OTC Pink:BKIRF,FWB:BIN) Shymanivske project.

Проект Сауляк

Родовище «Сауляк» розташоване в Рахівському районі Закарпатської області, Україна. До кордону з ЄС (Румунія) 2 500 метрів. Родовище відкрито в 1975 році. У геолого-металогенічному відношенні входить в Рахівський рудний район, який приурочений до північно-західної частини Мармароського кристалічного масиву Східних Карпат.

Спеціальний дозвіл (ліцензія) на видобуток руд золота дійсне до 22 грудня 2030 року, з правом продовження. Програма робіт була затверджена «Держгеонадра» в січні 2020 року.
Підприємство «Сауляк» має в довгостроковій оренді, на період експлуатації родовища, земельні ділянки загальною площею біля 5,4 га. Всі ділянки мають промислове цільове призначення.

Згідно з протоколом ДКЗ (Державна комісія по запасах корисних копалин України) №1476 від 26.03.2008 р. балансові запаси складають:
  • Руди золота категорії C1 + C2 - 1 220 854 тн .;
  • Золота (Au) - 8810 кг;
  • Руди золота категорії P1 - 2 988 660 тн;
  • Золота (Au) - 20 800 кг;
  • Сумарний обсяг запасів золота - 29610 кг (952 тис. унцій);
У 2012 році виконано звіт в кодексі JORC фірмою GeoExpert, Академії геології Польщі, під керівництвом професора геології А. Пестжінского, що має ліцензію на проведення оцінки запасів родовищ золота стандарту JORC.
КатегоріяРудна маса (т)Марка (г/т)Au (т)
Оцінені1 210 687.256.207.50
Передбачувані2 988 659.327.9423.73
Вього4 199 346.5731.23
Сумарний обсяг запасів по JORC біля 1,04 млн. унцій золота
Структура родовища представлена на розрізі, представленому нижче (див. Рис.1)

Рисунок 1
За період з 1970 по 2008 рік, проведена геологорозвідка родовища золота «Сауляк» в кілька етапів. Пройдено геологорозвідувальних штолень - 9300 метрів. Пробурено розвідувальних свердловин - 43 623 метри (314 штук). Запаси, за результатами розвідки, захищені в ДКЗ України, що дозволило приступити до проектування збагачувального комбінату з використанням тривимірних моделей родовища. Обсяг інформації, зібраний по даному родовищу, становить 115 Гб.

Вивчення геомеханічного стану гірського масиву родовища «Сауляк» здійснював провідний інститут з досліджень золотоносних родовищ «ІРГІРЕДМЕТ» (РФ). Його висновок - родовище залягає вище критичних глибин по гірських ударах.

За даними звітів Берегівської геологічної експедиції (1989 рік), а також «ІРГІРЕДМЕТ» РФ (2003 рік), гідрогеологічна характеристика родовища передбачає, що очікуваний прогнозний водоприток при повному завантаженні виробництва становитиме близько 12 м3/год, що не може впливати на гірничо видобувні роботи по руднику «Сауляк».

Основним рудним мінералом родовища є самородне золото. Воно концентрується в основному в кварці темно-сірому, менше в галеніті, сфалериті, халькопіриті і піриті. Вміст золота в рудних штуфах змінюється від 1,5 г/т до 300-400 г/т.

Навколишнє середовище

У 2017 році виконано «Звіт випробувань збагачення золотовмісної руди». Виконавець YANTAI JINPENG MINING MACHINERY CO.LTD (Китайська НР) на базі безціанідної, екологічно чистої технології. Рекомендований технологічний процес: гравітація - вилуговування флотаційних концентратів з екологічними реагентами - заміщення цинковими порошками. Реагенти мають європейські стандарти безпеки.

Відповідно до вимог екологічних організацій щодо збереження Карпат, все технологічне обладнання по переробці золотоносної руди родовища (збагачувальна фабрика) розташовується всередині гірського масиву і компактно вписується в гірничі виробки (див. Рис.2).

Рисунок 2

Legend:

fresh air holeTunnel No.2
exhausted air crushing & processing plantTransport slope No.2
direction of mine water pumping Tunnel No.3aTransport slope No.1
Transport slope No.1Tunnel No.3b

Поточний статус

Станом на 2021 рік, ТОВ «Сауляк» завершило попередні проектні розробки (попереднє ТЕО) та отримало наступні документи:
  • Затверджена програма робіт;
  • Забезпечено земельними ділянками для будівництва та експлуатації рудника;
  • Завершений проект підготовчих робіт по будівництву шахти;
  • Виконаний попередній проект збагачувальної фабрики (попереднє ТЕО);
  • Розроблена природоохоронна документація (ОВД)
На сьогоднішній день компанія повністю готова до початку будівництва. Менеджмент компанії працює над отриманням фінансування будівництва на початку 2021 року.

Консультанти

На етапах розробки, проектування та розвідки проекту, ТОВ «Сауляк» залучало найкращих у галузі сторонніх консультантів для забезпечення успіху проекту. Список наших консультантів наведено нижче:
Корпоративні секретарі і аудитори - PriceWaterHouseCooper https://www.pwc.com/
Корпоративне регулювання – RSM https://www.rsm.global/
Адвокатська фірма - Ernsten Young https://www.ey.com/en_gl
Юридичне представництво - Baker&McKenzie https://www.bakermckenzie.com/en
Проектувальники та технічне забезпечення:
ДП «Державний інститут по проектуванню підприємств гірничорудної промисловості« Кривбаспроект ». http://new.krivbassproect.com.ua/uk/
ЧАО «Укрзападенергопроект», м.Львів, http://www.uzep.com.ua
GeoExpert Ltd., Академії геології Польщі, під керівництвом професора геології Адама Пестжінського. https://geoexpert.co/
YANTAI JINPENG MINING MACHINERY CO. LTD (Китай) https://jinpengmining.com/
Іргіредмет (Росія) http://www.irgiredmet.ru/
\\\"\\\"
Sandvik, (Швеція) https://www.home.sandvik/en/

Saulyak project

Saulyak deposit is located in the Rakhiv district of the Transcarpathian region, Ukraine, at 2500 meters to the border with the European Union (Romania). The deposit was discovered in 1975. As for geological and metallogenic distribution, it is a part of the Rakhiv ore district, which is confined to the north-western part of the Marmarosh Crystalline Massif of the Eastern Carpathians.

A Special Permit (License) for the extraction of gold ores is valid until December 22, 2030, with the right of extension. The Program of works was approved by the State Service of Geology and Subsoil of Ukraine in January 2020.
For the period of the deposit operation, the Saulyak Company has a long-term lease on land plots with a total area of about 5,4 hectares. All plots have an industrial designed purpose.

According to protocol of the State Commission for Reserves of Commercial Minerals of Ukraine №1476 from 26.03.2008, the balance reserves amount to:
  • Gold ores of C1 + C2 categories – 1 220 854 t;
  • Gold (Au) – 8810 kg;
  • Gold ores of P1 category – 2 988 660 t;
  • Gold (Au) – 20 800 kg;
  • Total volume of gold reserves – 29610 kg (952 thd ozt);
In 2012, a JORC report was prepared by GeoExpert, the Academy of Geology of Poland, under the guidance of Professor of Geology Adam Pestrzynski, who is licensed for estimation of gold deposits reserves according to JORC requirements.
CategoryOre Mass (t)Grade (g/t)Au (t)
Measured1 210 687.256.207.50
Inferred2 988 659.327.9423.73
Grand Total4 199 346.5731.23
The total volume of reserves according to JORC is about 1,04 mln ounces of gold. The structure of the deposit is shown in the section below (Figure 1).

Figure 1
During the period from 1970 to 2008, the geological exploration of the Saulyak gold deposit was carried out in several stages. The length of driven exploratory adits (tunnels) is 9300 meters. The length of exploration wells drilled is 43 623 meters (314 wells). According to the results of exploration, the reserves were proved at the State Service of Geology and Subsoil of Ukraine, which allowed to start designing of the processing plant with the use of three-dimensional models of the deposit. The volume of information, collected on this deposit, is 115 GB.

The study of the geomechanical state of the Saulyak deposit massif was carried out by the leading research institute for gold deposits \\\"Irgiredmet\\\" (Russian Federation). According to the report of the institute the deposit lies above the critical depths in terms of rock bursts.

According to the reports of the Beregovo Geological Expedition (1989), as well as «Irgiredmet», Russian Federation (2003), the hydrogeological characteristics of the deposit show that the expected predicted water inflow at full production load will be about 12 m3/hour, which cannot affect the mining operations at the “Saulyak” mine.

The main ore mineral of the deposit is native gold. It is concentrated mainly in dark gray quartz, less in galena, sphalerite, chalcopyrite, and pyrite. The gold content in the ore lumps varies from 1,5 g/t to 300-400 g/t.

Environment

In 2017, the \\\"Test report for gold ore separation\\\" was prepared by YANTAI JINPENG MINING MACHINERY CO. LTD (China), based on cyanide-free environmentally friendly technology. Recommended technological process as such: gravity concentration - leaching of flotation concentrates with environmentally friendly reagents - replacement with zinc powders. The reagents have European safety certificates.

In accordance with the requirements of environmental organizations for saving the Carpathians, all technological equipment for processing gold-bearing ore of the deposit (processing plant) is located inside the mountain massif and fits compactly into mine workings (see Figure 2).

Figure 2

Legend:

fresh air holeTunnel No.2
exhausted air crushing & processing plantTransport slope No.2
direction of mine water pumping Tunnel No.3aTransport slope No.1
Transport slope No.1Tunnel No.3b

Current Status

As of 2021 Saulyak LLC completed pre-development works (pre-feasibility study) and obtained following documents:
  • Approved Program of Works;
  • Provided with land plots for the construction and operation of the mine;
  • Completed the project of preparatory works for the construction of the mine;
  • Completed the predesign of processing plant (pre-feasibility study);
  • Developed environmental documentation (Environmental Impact Assessment Study).
As of today, the Company is ready for the commencement of construction. The management of the Company is working on obtaining the financing to start the construction in early 2021.

Consultants

During the development, design, and exploration phases of the project, Saulyak LLC engaged best in the industry third party consultants to ensure projects success. Below is the list of our consultants:
Corporate Secretaries and Auditors – PriceWaterHouseCooper https://www.pwc.com/
Corporate compliance - RSM https://www.rsm.global/
Solicitors – Ernsten Young https://www.ey.com/en_gl
Legal representation- Baker&McKenzie https://www.bakermckenzie.com/en
Designers and Technical support :
State Enterprise \\\"State Institute for Design of Mining Enterprises\\\" Kryvbasproekt http://new.krivbassproect.com.ua/uk/
PJSC \\\"Ukrzapadenergoproekt\\\", Lviv, http://www.uzep.com.ua
GeoExpert Ltd., of the Academy of Geology of Poland https://geoexpert.co/
YANTAI JINPENG MINING MACHINERY CO. LTD (China) https://jinpengmining.com/
Irgiredmet (Russia) http://www.irgiredmet.ru/
\\\"\\\"
\");\n$templateCache.put(\"app/pages/news/news.html\",\"

{{::client.dictionary.data.menuNewsRoom}}

{{::client.dictionary.data.menuNewsRoom}}

\");\n$templateCache.put(\"app/pages/projects/projects.html\",\"

{{::client.dictionary.data.menuProjects}}

\");\n$templateCache.put(\"app/pages/strategy/strategy.html\",\"

{{::client.dictionary.data.menuInvestmentStrategy}}

{{::client.dictionary.data.menuInvestmentStrategy}}

{{::client.dictionary.data.investmentText}}

\\\"\\\"

Location

{{::client.dictionary.data.investmentLocation}}

Structure

{{::client.dictionary.data.investmentStructure}}

Relationships

{{::client.dictionary.data.investmentRelationships}}

Investment type and character

{{::client.dictionary.data.investmentType}}

\");\n$templateCache.put(\"app/pages/team/team.html\",\"

{{::client.dictionary.data.menuTeam}}

{{::client.dictionary.data.menuTeam}}

{{::client.dictionary.data.advisoryBoard}}

\");\n$templateCache.put(\"app/pages/news/archive/archive.html\",\"

{{::client.dictionary.data.menuArchive}}

{{::client.dictionary.data.menuArchive}}

\");\n$templateCache.put(\"app/pages/news/press-releases/press-releases.html\",\"

{{::client.dictionary.data.menuReleases}}

{{::client.dictionary.data.menuReleases}}

\");\n$templateCache.put(\"app/pages/news/publications/publications.html\",\"

{{::client.dictionary.data.menuPublications}}

{{::client.dictionary.data.menuPublications}}

{{::newsArticle.date | date:\\'MM/dd/yyyy\\'}}

{{::newsArticle.name}}

{{news.activeNewsArticle.name}}

-1\\\">
-1 || news.activeNewsArticle.file.indexOf(\\'.jpg\\') > -1 || news.activeNewsArticle.file.indexOf(\\'.jpeg\\') > -1\\\">\\\"{{news.activeNewsArticle.file}}\\\"
\");\n$templateCache.put(\"app/pages/news/testimonials/testimonials.html\",\"

{{::client.dictionary.data.menuTestimonials}}

{{::newsArticle.date | date:\\'MM/dd/yyyy\\'}}

{{::newsArticle.name}}

{{news.activeNewsArticle.name}}

-1\\\">
-1 || news.activeNewsArticle.file.indexOf(\\'.jpg\\') > -1 || news.activeNewsArticle.file.indexOf(\\'.jpeg\\') > -1\\\">\\\"{{news.activeNewsArticle.file}}\\\"
\");}]);"],"sourceRoot":"/source/"}