{"version":3,"sources":["scripts/app-83fe164b15.js"],"names":["angular","module","ItemController","$state","$log","$scope","$rootScope","$filter","$stateParams","itemRepository","bidRepository","auctionRepository","authService","emailService","formsService","modalService","Notification","flashService","metaTagsService","getBid","listMyBids","currentUser","email","then","response","isDataLoading","debug","vm","bid","myBid","filter","item","id","_id","pop","isEdit","isEditByPhone","bidamount","lot","message","phone","phoneBid","error","getItem","itemSlug","params","slug","withPrevNext","list","itemImageUrl","firstImage","featuredImagesUrls","xs","itemImageObj","sm","md","lg","unshift","prevItem","nextItem","setMetaTag","isAuthenticated","getAuction","auctionSlug","auction","timesBefore","startDates","map","date","moment","diff","isPast","isLive","every","time","some","handleGotoItem","meta","go","handleCancel","confirm","deleteOneBid","hide","success","handleCancelByPhone","handleEdit","name","first","last","copy","update","handleBackClick","clear","isLogin","isSignup","handleLoginClick","handleSignupClick","handleSubmitBid","handleSubmitBidByPhone","this","activePanel","bidForm","bidFormByPhone","isBiddable","isEmail","isEmailUnique","onBackClick","onCancel","onCancelByPhone","onEdit","onLoginClick","onSignupClick","onSubmitBid","onSubmitBidByPhone","onGoto","hasError","showError","canSave","$on","$inject","controller","AuctionDetailController","$location","$sce","state","body","trustAsHtml","length","getAuctionItems","pagesMax","page","event","sort","limit","search","searching","pages","total","footer","css","data","title","options","absolute","url","href","items","push","handleDestroy","handleClearSearch","handleImageClick","element","social","onImageClick","clearSearch","$destroy","$watch","TeamController","person","usernameService","$q","$http","API","isUsernameValid","username","regexp","test","isUsernameUnique","originalUsername","resolve","reject","toLowerCase","get","BASE_URL","factory","taxonomyService","specialtiesRepository","filterWithSpecialty","categories","catsIds","o","uniqCatsIds","_","uniq","flatten","category","includes","groupCategories","rootKey","groupedByParents","groupBy","parentId","catsById","keyBy","omitted","omit","each","children","cat","isParent","isEmpty","compact","union","posts","catsWithLevel","assignDeepLevel","sortByWeight","weight","undefined","a","b","level","assign","nested","group","responseInterceptorService","$injector","responseError","passService","isPasswordConfirmed","passwordConfirmation","password","isPasswordStrong","ngFormCtrl","$dirty","$valid","changeOutside","$setDirty","ngModelCtrl","$invalid","refresh","$setPristine","$setUntouched","err","$error","showErrorOnSubmit","formCtrl","$submitted","getDropdownOption","currentOption","find","option","initService","clearFlashMessage","flash","keepAfterLocationChange","type","info","warning","errorResponseService","parseMessage","extracted","exec","replace","charAt","toUpperCase","slice","prettifyFieldName","spacePos","indexOf","fieldName","substr","prettyFieldName","match","join","getErrorMessage","defaultMessage","validation","service","originalEmail","checkEmail","result","apiHelperService","ENV_VARS","sendHTTPRequest","req","method","s3BucketDomain","cdnDomain","_delete","payload","_get","_post","_put","delete","post","put","generateCrudCallers","resourceRoute","generateListCaller","generateFindCaller","generateUpdateCaller","create","generateCreateCaller","deleteOne","generateDeleteOneCaller","deleteMany","generateDeleteManyCaller","createdAt","updatedAt","isDeleted","generateAssociationCallers","ownerRoute","associationName","associationRoute","childName","resourceMethodName","callers","generateGetAssociationsAssociationCaller","generateAddOneAssociationCaller","generateRemoveOneAssociationCaller","generateAddManyAssociationCaller","generateRemoveManyAssociationCaller","generateFlattenAssociationData","ownerId","methodName","childId","object","panelService","$aside","show","templatePath","aside","controllerAs","keyboard","onHide","templateUrl","$promise","redirect","current","parent","$modal","modal","handlePanelHide","destroy","template","merge","getMy","USERS","updateMy","user","changeMyPassword","restfulResourceHelper","TEAM","SUBSCRIPTION","SPECIALTIES","PAGES","ITEMS","HIGHLIGHTS","CONTACT","CATEGORIES","BIDS","EVENTS","ASSETS","ACCOUNTS","updateCache","accounts","forEach","ngMeta","obj","appName","description","appDesc","imageUrl","headerUrl","eventImageUrl","mainImage","setTitle","setTag","absUrl","metaTagsDataProvider","getMetaTagsData","domain","appDomain","defaultMeta","headerImage","og:title","og:image","og:url","og:description","og:type","auctions","directions","settings","login","forgotpassword","resetpassword","signup","mybids","blog","about","$get","provider","$timeout","localStorageService","Session","REDIRECT","LOGIN","session","Error","account","role","Object","keys","roles","loginForgot","LOGIN_FORGOT","loginReset","LOGIN_RESET","logout","deprecated","LOGOUT","authHeader","HOME","confirmPassword","deferred","defer","promise","SIGNUP","config","firstName","split","lastName","getSession","isAuthorized","authorizedRoles","isArray","userRole","foundRole","defaults","headers","common","Authorization","set","remove","setUser","authSecurityService","requireAccountUser","requireAuthenticatedUser","requireUnauthenticatedUser","BID","authInterceptorService","status","LoginResetController","handleSubmit","token","resetForm","valid","onSubmit","LoginForgotController","loginForgotForm","BidPhotosController","events","handleView","photoIndex","onView","pagesRouteConfig","$stateProvider","abstract","PagesController","pagesRepository","getPage","pageSlug","homeRouteConfig","metaTagsData","HomeController","categoriesRepository","highlightRepository","getCategory","i","getHighlights","isAuctionPast","foundCategories","HIGHLIGHT_TYPE","VIDEO","video","highlights","foreignId","dates","index","getAuctions","auctionPast","categoryService","getSpecialtyAuction","categoryRouteConfig","CategoryController","categorySlug","getSpecialties","specialty","c","isAuctionNext","auctionNext","blogService","getBlogPosts","BLOG","getBlogPostDetail","getCategories","blogRouteConfig","BlogController","image","trustAsResourceUrl","auctionRouteConfig","onEnter","AuctionController","eventImageLink","reverse","promises","all","AssetsController","assetsRepository","getAsset","assetSlug","asset","isGoogleDoc","assetUrl","isPdf","isDoc","responseType","arrayBuffer","Uint8Array","mammoth","convertToHtml","html","value","$apply","done","aboutRouteConfig","bodyClass","AboutController","teamRepository","getTeam","persons","val","phonenumberFilter","tel","toString","trim","country","city","number","gtEventStartDate","filteredItems","cnt","today","Date","eventStartDates","formatTime","timestamp","withtime","format","capitalize","input","scope","substring","addTargetBlank","isExternalUrl","hostname","content","tree","anchor","attr","append","youtubeEmbed","restrict","code","link","newVal","cdnFilter","topNavCollapse","$window","attrs","bind","pageYOffset","boolChangeClass","autofocus","$element","focus","directive","signupRouteConfig","SignupController","handleNext","secondStep","handleBack","setCurrentUser","isModal","$broadcast","onNext","onBack","loginRouteConfig","LoginController","settingsRouteConfig","SettingsController","accountRepository","userRepository","getUser","tmpAccount","address1","address2","zipcode","orginalUsername","changePassword","bidRouteConfig","BidController","getMyBids","bids","$","fancybox","open","src","opts","caption","bidId","itemId","PublicController","contactRepository","subscriptionRepository","handleContactClick","handleSubscribeClick","handleContactSubmit","handleSubscribeSubmit","subscriber","handleHideClick","onContactClick","onSubscribeClick","onContactSubmit","onSubscribeSubmit","onHideClick","MainController","handleCurrentUserSet","handleLogoutClick","handleSidebarHide","asideMobile","handleSidebarShow","handleToggleClick","getNumber","num","Array","onLogoutClick","onToggleClick","PATH","onBeforeShow","toState","toParams","fromState","fromParams","wrapClass","document","scrollTop","documentElement","runBlock","init","run","routeConfig","$urlRouterProvider","$urlMatcherFactoryProvider","strictMode","caseInsensitive","when","views","header","subheader","unAuthenticatedUser","$title","constant","apiUrl","version","googleAnalyticsKey","SETTINGS","EVENT","PAGE","SIGNUP_INVITATION","$logProvider","$locationProvider","$httpProvider","$asideProvider","$modalProvider","$tooltipProvider","$dropdownProvider","$titleProvider","NotificationProvider","AnalyticsProvider","debugEnabled","hashPrefix","html5Mode","enabled","requireBase","interceptors","setOptions","replaceMessage","startTop","startRight","extend","animation","container","delay","placement","trigger","documentTitle","setAccount","$templateCache"],"mappings":"CAAA,WACI,YAEAA,SAAQC,OAAO,wBAGnB,WACI,YAMA,SAASC,gBAAeC,OAAQC,KAAMC,OAAQC,WAAYC,QAASC,aAAcC,eAAgBC,cAAeC,kBAAmBC,YAC/HC,aAAcC,aAAcC,aAAcC,aAAcC,aAAcC,iBAyDtE,QAASC,UACL,MAAOT,eAAcU,WAAWd,WAAWe,YAAYC,OAClDC,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBrB,KAAKsB,MAAM,YAAaC,GAAGC,IAE3B,IAAIC,OAAQL,SAASM,OAAO,SAASF,KACjC,MAAOA,KAAIG,KAAKC,KAAOL,GAAGI,KAAKE,MAChCC,KAECL,QACAF,GAAGQ,QAAS,EACZR,GAAGS,eAAgB,EAEnBT,GAAGC,IAAIK,IAAMJ,MAAMI,IACnBN,GAAGC,IAAIS,UAAYR,MAAMQ,UACzBV,GAAGC,IAAIU,IAAMT,MAAMS,IACnBX,GAAGC,IAAIW,QAAUV,MAAMU,QACvBZ,GAAGC,IAAIY,MAAQjC,QAAQ,WAAWD,WAAWe,YAAYmB,OACzDb,GAAGC,IAAIa,SAAWZ,MAAMY,WAMxBd,GAAGQ,QAAS,EACZR,GAAGS,eAAgB,GAIvBhC,KAAKsB,MAAM,mCAAoCF,YA9BhDd,SAgCI,SAASgC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,iCAAkCA,OAC7C1B,aAAa0B,MAAM,yCAK/B,QAASC,WAUL,MATAtC,QAAOoB,eAAgB,EAEvBrB,KAAKsB,MAAM,wBAAyBlB,aAAaoC,UAEjDC,QACIC,KAAMtC,aAAaoC,SACnBG,cAAc,GAGXtC,eAAeuC,KAAKH,QACtBtB,KAAK,SAASC,UACXpB,KAAKsB,MAAM,oCAAqCF,SAEhD,IAAIO,MAAOP,SAASO,IAKpB,IAHAJ,GAAGI,KAAOA,KAGNJ,GAAGI,KAAKkB,aAAc,CAEtB,GAAIC,YAAavB,GAAGI,KAAKoB,mBAAmB,EAE5C,KAAKD,YAAcA,WAAWE,KAAOzB,GAAGI,KAAKkB,aAAc,CACvD,GAAII,eACAD,GAAIzB,GAAGI,KAAKkB,aACZK,GAAI3B,GAAGI,KAAKkB,aACZM,GAAI5B,GAAGI,KAAKkB,aACZO,GAAI7B,GAAGI,KAAKkB,aAGhBtB,IAAGI,KAAKoB,mBAAmBM,QAAQJ,eAI3C1B,GAAG+B,SAAWlC,SAASkC,SACvB/B,GAAGgC,SAAWnC,SAASmC,SAEvBzC,gBAAgB0C,WAAWjC,GAAGI,MAG1BJ,GAAGkC,kBACH1C,SAGAd,OAAOoB,eAAgB,EAG3BrB,KAAKsB,MAAM,aAAcC,GAAGI,MAG5B+B,eAzCDrD,SA2CI,SAASiC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,kCAAmCA,OAC9C1B,aAAa0B,MAAM,0CAI/B,QAASoB,cAOL,MANAzD,QAAOoB,eAAgB,EAEvBoB,QACIC,KAAMtC,aAAauD,aAGhBpD,kBAAkBqC,KAAKH,QACzBtB,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EACvBE,GAAGqC,QAAUxC,QAGb,IAAIyC,aAActC,GAAGqC,QAAQE,WAAWC,IAAI,SAASC,MACjD,MAAOC,QAAOD,MAAME,KAAKD,SAAU,YAKvC1C,IAAGqC,QAAQO,QAAS,EACpB5C,GAAGqC,QAAQQ,QAAS,EAEhBP,YAAYQ,MAAM,SAASC,MAC3B,MAAc,KAAPA,OAEP/C,GAAGqC,QAAQO,QAAS,EAEfN,YAAYU,KAAK,SAASD,MAC/B,MAAc,IAAPA,SAEP/C,GAAGqC,QAAQQ,QAAS,GAGxBpE,KAAKsB,MAAM,gDAAiDF,YA1B7Db,SA4BI,SAAS+B,OACZrC,OAAOoB,eAAgB,EACvBrB,KAAKsC,MAAM,8CAA+CA,OAC1D1B,aAAa0B,MAAM,6CAI/B,QAASkC,gBAAe7C,MACpB,GAAIc,SACAkB,YAAavD,aAAauD,YAC1BnB,SAAUb,KAAK8C,KAAK/B,KAGxB3C,QAAO2E,GAAG,eAAgBjC,QAI9B,QAASkC,gBACL,MAAIC,SAAQ,8CACR3E,OAAOoB,eAAgB,EAEhBf,cAAcuE,aAAatD,GAAGC,IAAIK,IAAKN,GAAGI,KAAKE,KACjDV,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBV,aAAamE,OAEb9E,KAAKsB,MAAM,uCAAwCF,UACnDR,aAAamE,QAAQ,kBAPtBzE,SASI,SAASgC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,qCAAsCA,OACjDzB,aAAayB,MAAM,2CAhB/B,OAsBJ,QAAS0C,uBACL,MAAIJ,SAAQ,wDACR3E,OAAOoB,eAAgB,EAEhBf,cAAcuE,aAAatD,GAAGC,IAAIK,IAAKN,GAAGI,KAAKE,KACjDV,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBV,aAAamE,OAEb9E,KAAKsB,MAAM,8CAA+CF,UAC1DR,aAAamE,QAAQ,uCAPtBzE,SASI,SAASgC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,4CAA6CA,OACxDzB,aAAayB,MAAM,uDAhB/B,OAsBJ,QAAS2C,cACLhF,OAAOoB,eAAgB,EAGvBE,GAAGC,IAAIN,MAAQhB,WAAWe,YAAYC,MACtCK,GAAGC,IAAI0D,KAAO/E,QAAQ,WAAWD,WAAWe,YAAYiE,KAAKC,MAAQ,IAAMjF,WAAWe,YAAYiE,KAAKE,MACvG7D,GAAGC,IAAIY,MAAQjC,QAAQ,WAAWD,WAAWe,YAAYmB,MAEzD,IAAIZ,KAAM5B,QAAQyF,KAAK9D,GAAGC,IAG1B,cAFOA,KAAIK,IAEJvB,cAAcgF,OAAO/D,GAAGC,IAAIK,IAAKL,KACnCL,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBV,aAAamE,OAEb9E,KAAKsB,MAAM,qCAAsCF,UACjDR,aAAamE,QAAQ,kBAPtBzE,SASI,SAASgC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,mCAAoCA,OAC/CzB,aAAayB,MAAM,0CAK/B,QAASiD,mBACL1E,aAAa2E,QACbjE,GAAGkE,QAAUlE,GAAGmE,UAAW,EAI/B,QAASC,oBACLpE,GAAGkE,SAAU,EAIjB,QAASG,qBACLrE,GAAGmE,UAAW,EAIlB,QAASG,mBASL,MARA5F,QAAOoB,eAAgB,EAGvBE,GAAGC,IAAIU,IAAMX,GAAGI,KAAKO,IACrBX,GAAGC,IAAIN,MAAQhB,WAAWe,YAAYC,MACtCK,GAAGC,IAAI0D,KAAO/E,QAAQ,WAAWD,WAAWe,YAAYiE,KAAKC,MAAQ,IAAMjF,WAAWe,YAAYiE,KAAKE,MACvG7D,GAAGC,IAAIY,MAAQjC,QAAQ,WAAWD,WAAWe,YAAYmB,OAElD/B,eAAemB,IAAID,GAAGI,KAAKE,IAAKN,GAAGC,KACrCL,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBV,aAAamE,OAEb9E,KAAKsB,MAAM,uCAAwCF,UACnDR,aAAamE,QAAQ,oBAPtB1E,SASI,SAASiC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,qCAAsCA,OACjDzB,aAAayB,MAAM,0CAK/B,QAASwD,0BAeL,MAdA7F,QAAOoB,eAAgB,EAEvBrB,KAAKsB,MAAM,SAAUC,GAAGC,KAIxBD,GAAGC,IAAIU,IAAMX,GAAGI,KAAKO,IACrBX,GAAGC,IAAI0D,KAAO/E,QAAQ,WAAWD,WAAWe,YAAYiE,KAAKC,MAAQ,IAAMjF,WAAWe,YAAYiE,KAAKE,MACvG7D,GAAGC,IAAIY,MAAQjC,QAAQ,WAAWD,WAAWe,YAAYmB,OACzDb,GAAGC,IAAIN,MAAQhB,WAAWe,YAAYC,MACtCK,GAAGC,IAAIS,UAAY,EACnBV,GAAGC,IAAIa,UAAW,EAClBd,GAAGC,IAAIW,QAAU,yBAEV9B,eAAemB,IAAID,GAAGI,KAAKE,IAAKN,GAAGC,KACrCL,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBV,aAAamE,OAEb9E,KAAKsB,MAAM,uCAAwCF,UACnDR,aAAamE,QAAQ,0BAPtB1E,SASI,SAASiC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,qCAAsCA,OACjDzB,aAAayB,MAAM,mDArW/B,GAAIf,IAAKwE,IAGTxE,IAAGyE,YAAc,GACjBzE,GAAGC,OACHD,GAAG0E,WACH1E,GAAG2E,kBACH3E,GAAGQ,QAAS,EACZR,GAAGS,eAAgB,EACnBT,GAAGkE,SAAU,EACblE,GAAGmE,UAAW,EACdnE,GAAGI,MACCoB,sBACAoD,WAAY,IAEhB5E,GAAG+B,SAAW,KACd/B,GAAGgC,SAAW,KACdhC,GAAGqC,SACCO,OAAQ,KACRC,OAAQ,MAKZ7C,GAAGkC,gBAAkBjD,YAAYiD,gBACjClC,GAAG6E,QAAU3F,aAAa2F,QAC1B7E,GAAG8E,cAAgB5F,aAAa4F,cAChC9E,GAAG+E,YAAcf,gBACjBhE,GAAGgF,SAAW5B,aACdpD,GAAGiF,gBAAkBxB,oBACrBzD,GAAGkF,OAASxB,WACZ1D,GAAGmF,aAAef,iBAClBpE,GAAGoF,cAAgBf,kBACnBrE,GAAGqF,YAAcf,gBACjBtE,GAAGsF,mBAAqBf,uBACxBvE,GAAGuF,OAAStC,eAGZvE,OAAO8G,SAAWrG,aAAaqG,SAC/B9G,OAAO+G,UAAYtG,aAAasG,UAChC/G,OAAOgH,QAAUvG,aAAauG,QAG9BhH,OAAOiH,IAAI,aAAcnG,QAEzB,WACId,OAAOoB,eAAgB,EACvBkB,YAKJ,IAAIE,QA1DR3C,eAAeqH,SAAW,SAAU,OAAQ,SAAU,aAAc,UAAW,eAAgB,iBAAkB,gBAAiB,oBAAqB,cAAe,eAAgB,eAAgB,eAAgB,eAAgB,eAAgB,mBAAtPvH,QACKC,OAAO,kBACPuH,WAAW,iBAAkBtH,mBA+WtC,WACI,YAMA,SAASuH,yBAAwBrH,KAAMC,OAAQqH,UAAWvH,OAAQK,aAAcmH,KAAMhH,kBAAmBF,eAAgBK,aACrHI,gBAAiBF,cAwCjB,QAAS8C,cAOL,MANAzD,QAAOoB,eAAgB,EAEvBoB,QACIC,KAAMtC,aAAauD,aAGhBpD,kBAAkBqC,KAAKH,QACzBtB,KAAK,SAASC,UAGX,GAFAnB,OAAOoB,eAAgB,EAEA,cAAnBD,SAASoG,MAET,WADAzH,QAAO2E,GAAG,UAIdnD,IAAGqC,QAAUxC,SACbG,GAAGqC,QAAQ6D,KAAOF,KAAKG,YAAYnG,GAAGqC,QAAQ6D,KAG9C,IAAI5D,aAActC,GAAGqC,QAAQE,WAAWC,IAAI,SAASC,MACjD,MAAOC,QAAOD,MAAME,KAAKD,SAAU,YAKnCJ,aAAY8D,OAAS,GAAK9D,YAAYQ,MAAM,SAASC,MACrD,MAAc,KAAPA,OAEP/C,GAAGqC,QAAQO,QAAS,EAEfN,YAAYU,KAAK,SAASD,MAC/B,MAAc,IAAPA,SAEP/C,GAAGqC,QAAQQ,QAAS,GAGxBtD,gBAAgB0C,WAAWjC,GAAGqC,SAG9BgE,kBAEA5H,KAAKsB,MAAM,gDAAiDF,YAnC7Db,SAqCI,SAAS+B,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,8CAA+CA,OAC1D1B,aAAa0B,MAAM,6CAc/B,QAASsF,mBACL,OAAK3H,OAAOoB,eAAyBwG,UAARC,MACzB7H,OAAOoB,eAAgB,EAEvBoB,QACIsF,MAAOxG,GAAGqC,QAAQ/B,IAClBmG,KAAM,WACNF,KAAMA,KACNG,MAAOX,UAAUY,SAASD,OAG1B1G,GAAG2G,SACHlI,KAAKsB,MAAM,aACXC,GAAG4G,WAAY,EACf1F,OAAOyF,OAAS3G,GAAG2G,QAKhB7H,eAAeuC,KAAKH,QACtBtB,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvByG,OACAD,SAAWzG,SAASgH,MAAMC,OAAS,EACnCC,OAAOC,IAAI,UAAWV,SAAWC,KAAO,OAAS,SAEjD1G,SAASoH,KAAK9G,OAAO,SAASC,MAC1B,MAAOA,MAAKO,KAAOP,KAAK8G,OAAS9G,KAAK8C,MAAQ9C,KAAKkB,eACpDkB,IAAI,SAASpC,MAWZ,MAVAc,SACID,SAAUb,KAAK8C,KAAK/B,MAExBgG,SACIC,UAAU,GAGdhH,KAAKiH,IAAM7I,OAAO8I,KAAK,eAAgBpG,OAAQiG,SAC/CnH,GAAGuH,MAAMC,KAAKpH,MAEPA,OAEX3B,KAAKsB,MAAM,cAAeC,GAAGuH,SAvB9BzI,SA6BI,SAASiC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,mDAAoDA,OAC/D1B,aAAa0B,MAAM,4CAnD/B,OAyDJ,QAAS0G,iBACLV,OAAOC,IAAI,UAAW,SAI1B,QAASU,qBACL1H,GAAG2G,OAAS,GAIhB,QAASgB,kBAAiBvH,MAEtBA,KAAKwC,OAAS5C,GAAGqC,QAAQO,SAAU,EACnCxC,KAAKyC,OAAS7C,GAAGqC,QAAQQ,SAAU,EAEnC3B,QACId,KAAMA,MAGV5B,OAAO2E,GAAG,SAAUjC,QAlLxB,GAAIlB,IAAKwE,KACLuC,OAAS1I,QAAQuJ,QAAQ,SAG7B5H,IAAGqC,WACHrC,GAAGuH,SACHvH,GAAG4G,WAAY,EACf5G,GAAG6H,UAMH7H,GAAGqG,gBAAkBA,gBACrBrG,GAAG8H,aAAeH,iBAClB3H,GAAG+H,YAAcL,kBAGjBhJ,OAAO8G,SAAWrG,aAAaqG,SAC/B9G,OAAO+G,UAAYtG,aAAasG,UAChC/G,OAAOgH,QAAUvG,aAAauG,QAC9BhH,OAAOsJ,SAAWP,cAGlB,WACI/I,OAAOoB,eAAgB,EAEvBqC,eAKJ,IAAIjB,QAGAiG,QAFAZ,KAAO,EACPD,SAAW,GAyDf5H,QAAOuJ,OAAO,YAAa,WACvB1B,KAAO,EACPvG,GAAGuH,MAAMnB,OAAS,EAIlBC,oBAtGRP,wBAAwBF,SAAW,OAAQ,SAAU,YAAa,SAAU,eAAgB,OAAQ,oBAAqB,iBAAkB,eAAgB,kBAAmB,gBAD9KvH,QACKC,OAAO,kBACPuH,WAAW,0BAA2BC,4BA2L/C,WACI,YAEAzH,SAAQC,OAAO,sBAGnB,WACI,YAMA,SAAS4J,gBAAetJ,QAASC,aAAcU,iBAC3C,GAAIS,IAAKwE,IAGTxE,IAAGmI,OAAStJ,aAAasJ,OACzB5I,gBAAgB0C,WAAWjC,GAAGmI,QAE1BnI,GAAGmI,OAAOtH,QACVb,GAAGmI,OAAOtH,MAAQjC,QAAQ,WAAWoB,GAAGmI,OAAOtH,QAVvDqH,eAAetC,SAAW,UAAW,eAAgB,mBAFrDvH,QACKC,OAAO,gBACPuH,WAAW,iBAAkBqC,mBAetC,WACI,YAEA7J,SACKC,OAAO,8BAGhB,WACI,YAMA,SAAS8J,iBAAgBC,GAAIC,MAAO7J,KAAM8J,KAOtC,QAASC,iBAAgBC,UACrB,GAAIC,QAAS,SACb,OAAOA,QAAOC,KAAKF,UAIvB,QAASG,kBAAiBH,SAAUI,kBAChC,MAAOR,IAAG,SAASS,QAASC,QACxB,MAAIF,mBAAoBJ,SAASO,gBAAkBH,iBAAiBG,kBAChEF,WAGOR,MAAMW,IAAIV,IAAIW,SAAW,sBAAwBT,aACnD7I,KAAK,SAASC,UACXpB,KAAKsB,MAAM,8CAA+CF,UAC1DiJ,YAHDR,SAKI,SAASvH,OACZtC,KAAKsC,MAAM,4CAA6CA,OACxDgI,aAzBpB,OACIP,gBAAiBA,gBACjBI,iBAAkBA,kBAJ1BR,gBAAgBxC,SAAW,KAAM,QAAS,OAAQ,OAHlDvH,QACKC,OAAO,wBACP6K,QAAQ,kBAAmBf,oBAoCpC,WACI,YAMA,SAASgB,iBAAgB3K,KAAM4K,uBAO3B,QAASC,qBAAoBC,YACzB,MAAOF,uBACFhI,OACAzB,KAAK,SAAUC,UACZpB,KAAKsB,MACD,gDACAF,SAGJ,IAAI2J,SAAU3J,SAASoH,KAAKzE,IAAI,SAAUpC,MACtC,MAAOA,MAAKmJ,WAAW/G,IAAI,SAAUiH,GACjC,MAAOA,GAAEpJ,OAIbqJ,YAAcC,EAAEC,KAAKD,EAAEE,QAAQL,SAEnC,OAAOD,YAAWpJ,OAAO,SAAU2J,UAC/B,MAAOJ,aAAYK,SAASD,SAASxJ,SAjB1C+I,SAoBI,SAAUtI,OACbtC,KAAKsC,MACD,8CACAA,OAEJ1B,aAAa0B,MACT,6CAMhB,QAASiJ,iBAAgBT,YACrB,GAAIU,SAAU,OAEVC,iBAAmBP,EAAEQ,QAAQZ,WAAY,SAAUnJ,MACnD,MAAQA,MAAKgK,SAAqBhK,KAAKgK,SAAfH,UAGxBI,SAAWV,EAAEW,MAAMf,WAAY,OAC/BgB,QAAUZ,EAAEa,KAAKN,iBAAkBD,QAEvCN,GAAEc,KAAKF,QAAS,SAAUG,SAAUN,UAChCC,SAASD,UAAUM,SAAWA,WAElCf,EAAEc,KAAKJ,SAAU,SAAUM,KACvBA,IAAIC,UAAYjB,EAAEkB,QAAQF,IAAID,UAC9BC,IAAID,SAAWf,EAAEmB,QAAQnB,EAAEoB,MAAMJ,IAAID,SAAUC,IAAIK,SAGvD,IAAIC,eAAgBtB,EAAEnH,IAClB0H,iBAAiBD,SACjB,SAAU7J,MACN,MAAO8K,iBAAgB9K,KAAM,IAMrC,OAFA+K,cAAaF,eAENA,cAIX,QAASE,cAAa5D,OAClBoC,EAAEc,KAAKlD,MAAO,SAAUnH,MAEpB,MADAA,MAAKgL,OAAShL,KAAKgL,OAAShL,KAAKgL,OAAS,EACtCzB,EAAEkB,QAAQzK,KAAKsK,UACRW,WAEXF,cAAa/K,KAAKsK,YAGtBnD,MAAMd,KAAK,SAAU6E,EAAGC,GACpB,MAAOD,GAAEF,OAASG,EAAEH,SAK5B,QAASF,iBAAgB9K,KAAMoL,OAK3B,MAJA7B,GAAE8B,OAAOrL,MACLoL,MAAOA,QAGP7B,EAAEkB,QAAQzK,KAAKsK,UACRtK,KAGJuJ,EAAE8B,OAAOrL,MACZsK,SAAUf,EAAEnH,IAAIpC,KAAKsK,SAAU,SAAUgB,QACrC,MAAOR,iBAAgBQ,OAAQF,MAAQ,OAhGnD,OACIrL,OAAQmJ,oBACRqC,MAAO3B,iBAHfZ,gBAAgBxD,SAAW,OAAQ,yBAJnCvH,QACKC,OAAO,wBACP6K,QAAQ,kBAAmBC,oBA0GpC,WACI,YAMA,SAASwC,4BAA2BjN,WAAY0J,GAAI5J,KAAMoN,WAKtD,QAASC,eAAcjM,UASnB,MAAOwI,IAAGU,OAAOlJ,UAbrB,OACIiM,cAAeA,eADvBF,2BAA2BhG,SAAW,aAAc,KAAM,OAAQ,aALlEvH,QACKC,OAAO,wBACP6K,QAAQ,6BAA8ByC,+BAqB/C,WACI,YAMA,SAASG,aAAY1D,IAOjB,QAAS2D,qBAAoBC,qBAAsBC,UAC/C,MAAO7D,IAAG,SAASS,QAASC,QACpBkD,uBAAyBC,SACzBpD,UAGAC,WAMZ,QAASoD,kBAAiBD,UACtB,GAAIxD,QAAS,0EACb,OAAOA,QAAOC,KAAKuD,UApBvB,OACIF,oBAAqBA,oBACrBG,iBAAkBA,kBAD1BJ,YAAYnG,SAAW,MANvBvH,QACKC,OAAO,wBACP6K,QAAQ,cAAe4C,gBA4BhC,WACI,YAMA,SAAS5M,cAAaV,MAYlB,QAASiH,SAAQ0G,YACb,MAAIA,YACOA,WAAWC,QAAUD,WAAWE,OAD3C,OAIJ,QAASC,eAAcH,YACfA,YACAA,WAAWI,YAGnB,QAAShH,UAASiH,aACd,MAAIA,aACOA,YAAYJ,QAAUI,YAAYC,SAD7C,OAIJ,QAASC,SAAQP,YACTA,aACAA,WAAWQ,eACXR,WAAWS,iBAGnB,QAASpH,WAAUgH,YAAaK,KAC5B,MAAIL,aACOA,YAAYJ,QAAUI,YAAYM,OAAOD,KADpD,OAIJ,QAASE,mBAAkBC,SAAUR,YAAaK,KAC9C,MAAIL,aACOA,YAAYJ,QAAUI,YAAYM,OAAOD,MAAQG,SAASC,WADrE,OAYJ,QAASC,mBAAkBC,cAAejG,SAWtC,MAVIA,WAKIiG,cAJCA,eAAkBA,cAAc9M,IAIjB6G,QAAQkG,KAAK,SAASC,QAClC,MAAOA,QAAOhN,MAAQ8M,cAAc9M,MAJxB6G,QAAQ,IAQzBiG,cA7DX,OACI1H,QAASA,QACT6G,cAAeA,cACfY,kBAAmBA,kBACnB3H,SAAUA,SACVmH,QAASA,QACTlH,UAAWA,UACXuH,kBAAmBA,mBAL3B7N,aAAayG,SAAW,QAPxBvH,QACKC,OAAO,wBACP6K,QAAQ,eAAgBhK,iBAqEjC,WACI,YAMA,SAASG,cAAab,KAAME,YAYxB,QAAS4O,eACL5O,WAAWgH,IAAI,oBAAqB,WAChC6H,sBAKR,QAASA,qBACL,GAAIC,OAAQ9O,WAAW8O,KAEnBA,SACKA,MAAMC,wBAKPD,MAAMC,yBAA0B,QAJzB/O,YAAW8O,OAU9B,QAAS1M,OAAMH,QAAS8M,yBACpB/O,WAAWmB,eAAgB,EAE3BnB,WAAW8O,OACP7M,QAASA,QACT+M,KAAM,SACND,wBAAyBA,yBAKjC,QAASE,MAAKhN,QAAS8M,yBACnB/O,WAAWmB,eAAgB,EAE3BnB,WAAW8O,OACP7M,QAASA,QACT+M,KAAM,OACND,wBAAyBA,yBAKjC,QAASlK,SAAQ5C,QAAS8M,yBACtB/O,WAAWmB,eAAgB,EAE3BnB,WAAW8O,OACP7M,QAASA,QACT+M,KAAM,UACND,wBAAyBA,yBAKjC,QAASG,SAAQjN,QAAS8M,yBACtB/O,WAAWmB,eAAgB,EAE3BnB,WAAW8O,OACP7M,QAASA,QACT+M,KAAM,UACND,wBAAyBA,yBAtEjC,MAFAH,gBAGItJ,MAAOuJ,kBACPzM,MAAOA,MACP6M,KAAMA,KACNpK,QAASA,QACTqK,QAASA,SAJjBvO,aAAasG,SAAW,OAAQ,cARhCvH,QACKC,OAAO,wBACP6K,QAAQ,eAAgB7J,iBAmFjC,WACI,YAMA,SAASwO,wBAOL,QAASC,cAAalO,UAClB,GAAImO,WAAY,YAAYC,KAAKpO,SAASe,QAC1C,KAAKoN,YAAcA,UAAU,GACzB,MAAOnO,UAASe,OAEpB,IAAIA,SAAUoN,UAAU,GAAGE,QAAQ,KAAM,GACzC,OAAOtN,SAAQuN,OAAO,GAAGC,cAAgBxN,QAAQyN,MAAM,GAG3D,QAASC,mBAAkB1N,SACvB,GAAI2N,UAAW3N,QAAQ4N,QAAQ,IAC/B,IAAiB,KAAbD,SACA,MAAO3N,QAEX,IAAI6N,WAAY7N,QAAQ8N,OAAO,EAAGH,UAC9BI,gBAAkBF,UAAUG,MAAM,gBAAgBC,KAAK,IAC3D,OAAOF,iBAAkB/N,QAAQ8N,OAAOH,UAG5C,QAASO,iBAAgBjP,SAAUkP,gBAC/B,MAAKlP,UAASmP,WAIPV,kBAAkBP,aAAalO,WAF3BkP,eA5Bf,GAAIE,WAIJ,OAFAA,SAAQH,gBAAkBA,gBAEnBG,QATX5Q,QACKC,OAAO,wBACP6K,QAAQ,uBAAwB2E,yBAsCzC,WACI,YAMA,SAAS5O,cAAaT,KAAM4J,GAAIpJ,aAO5B,QAAS4F,SAAQlF,OACb,GAAI+I,QAAS,wJACb,OAAOA,QAAOC,KAAKhJ,OAIvB,QAASmF,eAAcnF,MAAOuP,eAC1B,MAAO7G,IAAG,SAASS,QAASC,QACpBmG,eAAiBvP,QAAUuP,cAC3BpG,UAGA7J,YAAYkQ,WAAWxP,OAClBC,KAAK,SAASwP,QACPA,OAAOnI,KAAKb,OAAS,EACrB2C,SAGAD,YANZ7J,SASW,SAAS8B,OACZtC,KAAKsC,MAAM,sCAAuCA,OAClDgI,aA7BpB,OACIlE,QAASA,QACTC,cAAeA,eAEvB5F,aAAa0G,SAAW,OAAQ,KAAM,eATtCvH,QACKC,OAAO,wBACP6K,QAAQ,eAAgBjK,iBAwCjC,WACI,YAMA,SAASmQ,kBAAiB5Q,KAAM6J,MAAOC,IAAK+G,UASxC,QAASC,iBAAgBC,KAKrB,MAJmB,QAAfA,IAAIC,QAAoBH,UAAYA,SAASI,gBAAkBJ,SAASK,WACxEH,IAAInI,IAAI6G,QAAQoB,SAASI,eAAgBJ,SAASK,WAG/CrH,MAAMkH,KACR5P,KAAK,SAASC,UACX,MAAOA,UAASoH,OAFjBqB,SAII,SAASvH,OACZ,KAAMA,OAAMkG,OAIxB,QAAS2I,SAAQvI,IAAKwI,SAClB,MAAOvH,QACHrB,KAAM4I,QACNJ,OAAQ,SACRpI,IAAKkB,IAAIW,SAAW7B,MAEnBzH,KAAK,SAASC,UACX,MAAOA,UAASoH,OANjBqB,SAQI,SAASvH,OACZ,KAAMA,OAAMkG,OAIxB,QAAS6I,MAAKzI,IAAKnG,QACf,MAAOoH,QACHmH,OAAQ,MACRvO,OAAQA,OACRmG,IAAKkB,IAAIW,SAAW7B,MAEnBzH,KAAK,SAASC,UACX,MAAOA,UAASoH,OANjBqB,SAQI,SAASvH,OACZ,KAAMA,OAAMkG,OAIxB,QAAS8I,OAAM1I,IAAKwI,SAChB,MAAOvH,QACHrB,KAAM4I,QACNJ,OAAQ,OACRpI,IAAKkB,IAAIW,SAAW7B,MAEnBzH,KAAK,SAASC,UACX,MAAOA,UAASoH,OANjBqB,SAQI,SAASvH,OACZ,KAAMA,OAAMkG,OAIxB,QAAS+I,MAAK3I,IAAKwI,SACf,MAAOvH,QACHrB,KAAM4I,QACNJ,OAAQ,MACRpI,IAAKkB,IAAIW,SAAW7B,MAEnBzH,KAAK,SAASC,UACX,MAAOA,UAASoH,OANjBqB,SAQI,SAASvH,OACZ,KAAMA,OAAMkG,OA1ExB,OACIgJ,SAAQL,QACR3G,IAAK6G,KACLI,KAAMH,MACNI,IAAKH,KACLT,gBAAiBA,iBAAzBF,iBAAiBzJ,SAAW,OAAQ,QAAS,MAAO,YAVpDvH,QACKC,OAAO,wBACP6K,QAAQ,mBAAoBkG,qBA0FrChR,QAAQC,OAAO,wBACV6K,QAAQ,yBAAA,OAAA,mBAAyB,SAAS1K,KAAM4Q,kBAC7C,OAKIe,oBAAqB,SAASC,eAC1B,OACIhP,KAAMmD,KAAK8L,mBAAmBD,eAC9BhD,KAAM7I,KAAK+L,mBAAmBF,eAC9BtM,OAAQS,KAAKgM,qBAAqBH,eAClCI,OAAQjM,KAAKkM,qBAAqBL,eAClCM,UAAWnM,KAAKoM,wBAAwBP,eACxCQ,WAAYrM,KAAKsM,yBAAyBT,iBAGlDC,mBAAoB,SAASD,eACzB,MAAO,UAASnP,QAGZ,MAAOmO,kBAAiBpG,IAAIoH,cAAenP,QACtCtB,KAAK,SAASC,UAEX,MAAOA,YAHRwP,SAKI,SAAStO,OAEZ,KAAMA,WAItBwP,mBAAoB,SAASF,eACzB,MAAO,UAAS/P,IAAKY,QAGjB,MAAOmO,kBAAiBpG,IAAIoH,cAAgB,IAAM/P,IAAKY,QAClDtB,KAAK,SAASC,UAEX,MAAOA,YAHRwP,SAKI,SAAStO,OAEZ,KAAMA,WAItByP,qBAAsB,SAASH,eAC3B,MAAO,UAAS/P,IAAKuP,SAMjB,aALOA,SAAQkB,gBACRlB,SAAQmB,gBACRnB,SAAQoB,UACfxS,KAAKsB,MAAMsQ,cAAgB,kBAAmB/P,IAAK,cAAeuP,SAE3DR,iBAAiBc,IAAIE,cAAgB,IAAM/P,IAAKuP,SAClDjQ,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMsQ,cAAgB,sBAAuBxQ,UAC3CA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMsP,cAAgB,mBAAoBtP,OACzCA,UAItB2P,qBAAsB,SAASL,eAC3B,MAAO,UAASR,SAGZ,MAFApR,MAAKsB,MAAMsQ,cAAgB,sBAAuBR,SAE3CR,iBAAiBa,KAAKG,cAAeR,SACvCjQ,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMsQ,cAAgB,sBAAuBxQ,UAC3CA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMsP,cAAgB,mBAAoBtP,OACzCA,UAItB6P,wBAAyB,SAASP,eAC9B,MAAO,UAAS/P,KAGZ,MAFA7B,MAAKsB,MAAMsQ,cAAgB,qBAAsB/P,KAE1C+O,iBAAAA,UAAwBgB,cAAgB,IAAM/P,KAChDV,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMsQ,cAAgB,sBAAuBxQ,UAC3CA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsB,MAAMsQ,cAAgB,mBAAoBtP,OACzCA,UAItB+P,yBAA0B,SAAST,eAC/B,MAAO,UAASR,SAGZ,MAFApR,MAAKsB,MAAMsQ,cAAgB,wBAAyBR,SAE7CR,iBAAAA,UAAwBgB,cAAeR,SACzCjQ,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMsQ,cAAgB,sBAAuBxQ,UAC3CA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsB,MAAMsQ,cAAgB,mBAAoBtP,OACzCA,UAoBtBmQ,2BAA4B,SAASC,WAAYC,gBAAiBC,iBAAkBC,WAChF,GAAIC,oBAAqBH,gBAAgB,GAAGhD,cAAgBgD,gBAAgB/C,MAAM,GAC9EmD,UAQJ,OAPAA,SAAQ,MAAQD,oBAAsB/M,KAAKiN,yCAAyCN,WAAYE,iBAAkBE,oBAClHC,QAAQ,SAAWD,oBAAsB/M,KAAKkN,gCAAgCP,WAAYE,iBAAkBE,oBAC5GC,QAAQ,YAAcD,oBAAsB/M,KAAKmN,mCAAmCR,WAAYE,iBAAkBE,oBAClHC,QAAQ,UAAYD,oBAAsB/M,KAAKoN,iCAAiCT,WAAYE,iBAAkBE,oBAC9GC,QAAQ,aAAeD,oBAAsB/M,KAAKqN,oCAAoCV,WAAYE,iBAAkBE,oBAEpHC,QAAQ,UAAYD,oBAAsB/M,KAAKsN,+BAA+BV,gBAAiBE,WACxFE,SAEXC,yCAA0C,SAASN,WAAYE,iBAAkBE,oBAC7E,MAAO,UAASQ,QAAS7Q,QACrB,GAAI8Q,YAAab,WAAa,OAASI,kBAYvC,OAXA9S,MAAKsB,MAAMiS,WAAa,eAAgBD,QAAS,aAAc7Q,QAE1DA,OAKKA,OAAO+P,YACb/P,OAAO+P,WAAY,GALnB/P,QACI+P,WAAW,GAOZ5B,iBAAiBpG,IAAIkI,WAAa,IAAMY,QAAU,IAAMV,iBAAkBnQ,QAC5EtB,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMiS,WAAa,eAAgBnS,UACjCA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMiR,WAAa,YAAajR,OAC/BA,UAItB2Q,gCAAiC,SAASP,WAAYE,iBAAkBE,oBACpE,MAAO,UAASQ,QAASE,QAASpC,SAC9B,GAAImC,YAAab,WAAa,UAAYI,kBAG1C,OAFA9S,MAAKsB,MAAMiS,WAAa,eAAgBD,QAAS,YAAaE,QAAS,cAAepC,SAE/ER,iBAAiBc,IAAIgB,WAAa,IAAMY,QAAU,IAAMV,iBAAmB,IAAMY,QAASpC,SAC5FjQ,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMiS,WAAa,eAAgBnS,UACjCA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMiR,WAAa,YAAajR,OAC/BA,UAItB4Q,mCAAoC,SAASR,WAAYE,iBAAkBE,oBACvE,MAAO,UAASQ,QAASE,SACrB,GAAID,YAAab,WAAa,aAAeI,kBAG7C,OAFA9S,MAAKsB,MAAMiS,WAAa,eAAgBD,QAAS,kBAAmBV,iBAAkB,YAAaY,SAE5F5C,iBAAAA,UAAwB8B,WAAa,IAAMY,QAAU,IAAMV,iBAAmB,IAAMY,SACtFrS,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMiS,WAAa,eAAgBnS,UACjCA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMiR,WAAa,YAAajR,OAC/BA,UAItB6Q,iCAAkC,SAAST,WAAYE,iBAAkBE,oBACrE,MAAO,UAASQ,QAASlC,SACrB,GAAImC,YAAab,WAAa,WAAaI,kBAG3C,OAFA9S,MAAKsB,MAAMiS,WAAa,eAAgBD,QAAS,cAAelC,SAEzDR,iBAAiBa,KAAKiB,WAAa,IAAMY,QAAU,IAAMV,iBAAkBxB,SAC7EjQ,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMiS,WAAa,eAAgBnS,UACjCA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMiR,WAAa,YAAajR,OAC/BA,UAItB8Q,oCAAqC,SAASV,WAAYE,iBAAkBE,oBACxE,MAAO,UAASQ,QAASlC,SACrB,GAAImC,YAAab,WAAa,cAAgBI,kBAG9C,OAFA9S,MAAKsB,MAAMiS,WAAa,eAAgBD,QAAS,cAAelC,SAEzDR,iBAAAA,UAAwB8B,WAAa,IAAMY,QAAU,IAAMV,iBAAkBxB,SAC/EjQ,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMiS,WAAa,eAAgBnS,UACjCA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMiR,WAAa,YAAajR,OAC/BA,UAQtB+Q,+BAAgC,SAASV,gBAAiBE,WACtD,MAAO,UAASrK,MACZ,MAAKA,MAGEA,KAAKzE,IAAI,SAAS0P,QACrB,MAAIZ,WACOY,OAAOZ,WAGPY,OAAOd,4BAQ1C,WACI,YAMA,SAASe,cAAa1T,KAAM4J,GAAI7J,OAAQ4T,QASpC,QAASC,MAAKC,aAAczM,YACxB,MAAKyM,eAAiBzM,WAGlB0M,OACA9T,KAAKsB,MACD,oEAEGsI,GAAGU,WAGdwJ,MAAQH,QACJvM,WAAYA,WACZ2M,aAAc,KACdC,UAAU,EACVC,OAAQnP,KACR8O,MAAM,EACNM,YAAaL,eAGVC,MAAMK,SAAShT,KAAK2S,MAAMF,OAlBtBhK,GAAGU,SAuBlB,QAASxF,MAAKrC,QACLqR,QAILA,MAAMhP,OACNgP,MAAQ,KAEJrR,QAAUA,OAAO2R,UACjBpU,KAAKsB,MAAM,kBAAmBmB,OAAO2R,UACrCrU,OAAO2E,GAAGjC,OAAO2R,WAGjBrU,OAAO2E,GAAG3E,OAAOsU,QAAQC,SA9CjC,GAAIR,MAEJ,QACIF,KAAMA,KACN9O,KAAMA,MAEd4O,aAAavM,SAAW,OAAQ,KAAM,SAAU,UAXhDvH,QACKC,OAAO,wBACP6K,QAAQ,eAAgBgJ,iBAuDjC,WACI,YAMA,SAAS/S,cAAaX,KAAM4J,GAAI7J,OAAQwU,QAWpC,QAASzP,MAAKrC,QACN+R,QACAJ,SAA8B,mBAAX3R,QAA0BA,OAAS2R,SAEtDI,MAAML,SAAShT,KAAKqT,MAAM1P,OAKlC,QAAS2P,mBACDD,QACAA,MAAME,UAGFN,UACArU,OAAO2E,GAAG3E,OAAOsU,QAAQC,SAMrC,QAASV,MAAKe,SAAUvN,WAAY3E,QAChC,MAAKkS,WAAavN,YAKdoN,OACAA,MAAME,UAGVF,MAAQD,QACJnN,WAAYA,WACZ2M,aAAc,KACdC,UAAU,EACVC,OAAQQ,gBACRb,MAAM,EACNM,YAAaS,WAGjBP,SAA8B,mBAAX3R,QAA0BA,QAAS,EAE/C+R,MAAML,SAAShT,KAAKqT,MAAMZ,OAnBtBhK,GAAGU,SAjClB,GAAIkK,OACAJ,QAEJ,QACItP,KAAMA,KACN8O,KAAMA,MAEdjT,aAAawG,SAAW,OAAQ,KAAM,SAAU,UAZhDvH,QACKC,OAAO,wBACP6K,QAAQ,eAAgB/J,iBA4DjC,WACI,YAEAf,SACKC,OAAO,iCAGhB,WACI,YAOAD,SACKC,OAAO,2BACP6K,QAAQ,kBAAA,OAAA,MAAA,mBAAkB,SAAS1K,KAAM8J,IAAK8G,kBAC3C,MAAO1F,GAAE0J,OAEDC,MAAO,WAGH,MAFA7U,MAAKsB,MAAMwI,IAAIgL,MAAQ,qBAEhBlE,iBAAiBpG,IAAIV,IAAIgL,MAAQ,OACnC3T,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMwI,IAAIgL,MAAQ,qBAAsB1T,UACtCA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMwH,IAAIgL,MAAQ,kBAAmBxS,OACpCA,WAKlByS,SAAU,SAASC,MAGf,MAFAhV,MAAKsB,MAAMwI,IAAIgL,MAAQ,uBAAwBE,MAExCpE,iBAAiBc,IAAI5H,IAAIgL,MAAQ,MAAOE,MAC1C7T,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMwI,IAAIgL,MAAQ,wBAAyB1T,UACzCA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMwH,IAAIgL,MAAQ,qBAAsBxS,OACvCA,WAKlB2S,iBAAkB,SAASxH,UAGvB,MAFAzN,MAAKsB,MAAMwI,IAAIgL,MAAQ,gCAEhBlE,iBAAiBc,IAAI5H,IAAIgL,MAAQ,gBAAiBrH,SAAUA,WAC9DtM,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMwI,IAAIgL,MAAQ,gCAAiC1T,UACjDA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMwH,IAAIgL,MAAQ,6BAA8BxS,OAC/CA,iBAYtC,WACI,YAOA1C,SACKC,OAAO,2BACP6K,QAAQ,kBAAA,MAAA,wBAAkB,SAASZ,IAAKoL,uBACrC,MAAOhK,GAAE0J,MAAMM,sBAAsBvD,oBAAoB7H,IAAIqL,aAQzE,WACI,YAOAvV,SACKC,OAAO,2BACP6K,QAAQ,0BAAA,MAAA,wBAA0B,SAASZ,IAAKoL,uBAC7C,MAAOhK,GAAE0J,MAAMM,sBAAsBvD,oBAAoB7H,IAAIsL,qBAQzE,WACI,YAOAxV,SACKC,OAAO,2BACP6K,QAAQ,yBAAA,MAAA,wBAAyB,SAASZ,IAAKoL,uBAC5C,MAAOhK,GAAE0J,MAAMM,sBAAsBvD,oBAAoB7H,IAAIuL,oBAQzE,WACI,YAOAzV,SACKC,OAAO,2BACP6K,QAAQ,mBAAA,MAAA,wBAAmB,SAASZ,IAAKoL,uBACtC,MAAOhK,GAAE0J,MAAMM,sBAAsBvD,oBAAoB7H,IAAIwL,cAQzE,WACI,YAOA1V,SACKC,OAAO,2BACP6K,QAAQ,kBAAA,OAAA,MAAA,wBAAA,mBAAkB,SAAS1K,KAAM8J,IAAKoL,sBAAuBtE,kBAClE,MAAO1F,GAAE0J,MACLM,sBAAsBvD,oBAAoB7H,IAAIyL,QAE1C/T,IAAK,SAASK,IAAKY,QAGf,MAFAzC,MAAKsB,MAAMwI,IAAIyL,MAAQ,aAAc1T,IAAK,cAAeY,QAElDmO,iBAAiBa,KAAK3H,IAAIyL,MAAQ,IAAM1T,IAAM,OAAQY,QACxDtB,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMwI,IAAIyL,MAAQ,mBAAoBnU,UACpCA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMwH,IAAIyL,MAAQ,gBAAiBjT,OAClCA,iBAYtC,WACI,YAOA1C,SACKC,OAAO,2BACP6K,QAAQ,uBAAA,MAAA,wBAAuB,SAASZ,IAAKoL,uBAC1C,MAAOhK,GAAE0J,MAAMM,sBAAsBvD,oBAAoB7H,IAAI0L,mBAQzE,WACI,YAOA5V,SACKC,OAAO,2BACP6K,QAAQ,qBAAA,MAAA,wBAAqB,SAASZ,IAAKoL,uBACxC,MAAOhK,GAAE0J,MAAMM,sBAAsBvD,oBAAoB7H,IAAI2L,gBAQzE,WACI,YAOA7V,SACKC,OAAO,2BACP6K,QAAQ,wBAAA,MAAA,wBAAwB,SAASZ,IAAKoL,uBAC3C,MAAOhK,GAAE0J,MAAMM,sBAAsBvD,oBAAoB7H,IAAI4L,mBAQzE,WACI,YAOA9V,SACKC,OAAO,2BACP6K,QAAQ,iBAAA,OAAA,MAAA,wBAAA,mBAAiB,SAAS1K,KAAM8J,IAAKoL,sBAAuBtE,kBACjE,MAAO1F,GAAE0J,MACLM,sBAAsBvD,oBAAoB7H,IAAI6L,OAE1C9Q,aAAcqQ,sBAAsBhC,mCAAmCpJ,IAAI6L,KAAM,QACjF3U,WAAY,SAASE,MAAOuB,QAGxB,MAFAzC,MAAKsB,MAAMwI,IAAI6L,KAAO,IAAMzU,MAAQ,mBAAoBuB,QAEjDmO,iBAAiBpG,IAAIV,IAAI6L,KAAO,IAAMzU,MAAQ,QAASuB,QACzDtB,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMwI,IAAI6L,KAAO,IAAMzU,MAAQ,oBAAqBE,UAClDA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMwH,IAAI6L,KAAO,IAAMzU,MAAQ,iBAAkBoB,OAChDA,iBAWtC,WACI,YAOA1C,SACKC,OAAO,2BACP6K,QAAQ,qBAAA,MAAA,wBAAqB,SAASZ,IAAKoL,uBACxC,MAAOhK,GAAE0J,MAAMM,sBAAsBvD,oBAAoB7H,IAAI8L;OAQzE,WACI,YAOAhW,SACKC,OAAO,2BACP6K,QAAQ,oBAAA,MAAA,wBAAoB,SAASZ,IAAKoL,uBACvC,MAAOhK,GAAE0J,MAAMM,sBAAsBvD,oBAAoB7H,IAAI+L,eAQzE,WACI,YAOAjW,SACKC,OAAO,2BACP6K,QAAQ,qBAAA,OAAA,MAAA,mBAAqB,SAAS1K,KAAM8J,IAAK8G,kBAC9C,MAAO1F,GAAE0J,OAEDC,MAAO,WAGH,MAFA7U,MAAKsB,MAAMwI,IAAIgM,SAAW,UAEnBlF,iBAAiBpG,IAAIV,IAAIgM,SAAW,OACtC3U,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMwI,IAAIgM,SAAW,qBAAsB1U,UACzCA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMwH,IAAIgM,SAAW,kBAAmBxT,OACvCA,WAKlByS,SAAU,SAASC,MAGf,MAFAhV,MAAKsB,MAAMwI,IAAIgM,SAAW,uBAAwBd,MAE3CpE,iBAAiBc,IAAI5H,IAAIgM,SAAW,MAAOd,MAC7C7T,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAMwI,IAAIgM,SAAW,wBAAyB1U,UAC5CA,WAHRwP,SAKI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMwH,IAAIgM,SAAW,qBAAsBxT,OAC1CA,WAKlByT,YAAa,SAAS9N,MAAOH,KAAME,MAC/BhI,KAAKsB,MAAMwI,IAAIgM,SAAW,iBAE1B,IAAIE,YAEJ,OAAOpF,kBAAiBpG,IAAIV,IAAIgM,UAC3B3U,KAAK,SAASC,UAOX,MANApB,MAAKsB,MAAMwI,IAAIgL,MAAQ,0BAA2B1T,UAElDA,SAASoH,KAAKyN,QAAQ,SAASpJ,GAC3BmJ,SAASnJ,EAAEhL,KAAOgL,IAGfzL,WARRwP,SAUI,SAAStO,OAEZ,KADAtC,MAAKsC,MAAMwH,IAAIgL,MAAQ,wBAAyBxS,OAC1CA,iBAYtC,WACI,YAEA1C,SACKC,OAAO,+BAIhB,WACI,YAMA,SAASiB,iBAAgBoV,OAAQ5O,UAAWuJ,UAMxC,QAASrN,YAAW2S,IAAKjH,MACrB,GAAIzG,OAAQ0N,IAAI1R,KAAKgE,MAAQ0N,IAAI1R,KAAKgE,MAAQ,MAAQoI,SAASuF,QAAUvF,SAASuF,QAC9EC,YAAcF,IAAI1R,KAAK4R,aAAexF,SAASyF,QAC/CC,SAAWJ,IAAIK,WAAaL,IAAIM,eAAiBN,IAAItT,cAAgBsT,IAAII,UAAYJ,IAAIO,SAE7FR,QAAOS,SAASlO,OAChByN,OAAOU,OAAO,cAAeP,aAC7BH,OAAOU,OAAO,cAAeL,UAE7BL,OAAOU,OAAO,WAAYnO,OAC1ByN,OAAOU,OAAO,iBAAkBP,aAChCH,OAAOU,OAAO,WAAYL,UAC1BL,OAAOU,OAAO,SAAUtP,UAAUuP,UAE9B3H,KACAgH,OAAOU,OAAO,UAAW1H,MAGzBgH,OAAOU,OAAO,UAAW,WAvBjC,OACIpT,WAAYA,YAOpB1C,gBAAgBqG,SAAW,SAAU,YAAa,YAblDvH,QACKC,OAAO,yBACP6K,QAAQ,kBAAmB5J,oBAgCpC,WACI,YAMA,SAASgW,sBAAqBjG,UAE1B9K,KAAKgR,gBAAkB,WACnB,GAAIC,QAAS,WAAanG,SAASoG,UAE/BC,aACAb,YAAexF,SAASyF,QACxBa,YAAeH,OAAS,0BAExBI,WAAYvG,SAASuF,QACrBiB,WAAYL,OAAS,0BACrBM,SAAUN,OACVO,iBAAkB1G,SAASyF,QAC3BkB,UAAW,UAGf,QACIN,YAAaA,YACbO,UACIhP,MAAS,WACT4N,YAAe,6DACfe,WAAY,cAAgBvG,SAASuF,QACrCmB,iBAAkB,6DAClBF,WAAYL,OAAS,iCACrBM,SAAUN,OAAS,aAEvBU,YACIjP,MAAS,6BACT4N,YAAe,kLACfe,WAAY,gCAAkCvG,SAASuF,QACvDmB,iBAAkB,kLAClBF,WAAYL,OAAS,qCACrBM,SAAUN,OAAS,eAEvBW,UACIlP,MAAS,WACT2O,WAAY,cAAgBvG,SAASuF,SAEzCwB,OACInP,MAAS,QACT2O,WAAY,WAAavG,SAASuF,SAEtCyB,gBACIpP,MAAS,kBACT2O,WAAY,qBAAuBvG,SAASuF,SAEhD0B,eACIrP,MAAS,iBACT2O,WAAY,oBAAsBvG,SAASuF,SAE/C2B,QACItP,MAAS,UACT2O,WAAY,aAAevG,SAASuF,SAExC4B,QACIvP,MAAS,UACT2O,WAAY,aAAevG,SAASuF,SAExC6B,MACIxP,MAAS,OACT2O,WAAY,UAAYvG,SAASuF,SAErC8B,OACIzP,MAAS,WACT4N,YAAe,qcAEfe,WAAY,cAAgBvG,SAASuF,QACrCmB,iBAAkB,qcAClBD,SAAUN,OAAS,YAK/BjR,KAAKoS,KAAO,aA/DhBrB,qBAAqB3P,SAAW,YAdhCvH,QACKC,OAAO,yBACPuY,SAAS,eAAgBtB,yBA+ElC,WACI,YAEAlX,SACKC,OAAO,2BAKhB,WACI,YAMA,SAASW,aAAYR,KAAMqY,SAAUzO,GAAIC,MAAO9J,OAAQuY,oBAAqB1X,aAAc2X,QAASzO,IAAK0O,UAerG,QAASZ,OAAM5C,MACX,MAAOnL,OAAM4H,KAAK3H,IAAIW,SAAWX,IAAI2O,OAC7BzO,SAAUgL,KAAKhL,SACfyD,SAAUuH,KAAKvH,WAElBtM,KAAK,SAASC,UAIX,GAHApB,KAAKsB,MAAM,6BAA8BF,SAASoH,OAG9CpH,SAASoH,KAAKkQ,QAoBd,KAAM,IAAIC,OAAM,uCAnBhB,IAAID,SAAU9Y,QAAQyF,KAAKjE,SAASoH,MAChCoQ,QAAUhZ,QAAQyF,KAAKjE,SAASoH,KAAKwM,KAAK4D,SAC1C5D,KAAOpV,QAAQyF,KAAKjE,SAASoH,KAAKwM,MAClC6D,KAAOC,OAAOC,KAAK3X,SAASoH,KAAKwM,KAAKgE,OAAO,EAmBrD,cAjBWN,SAAQ1D,KAEf0D,QAAQG,KAAOA,KACfH,QAAQ1D,MACJ9T,MAAO8T,KAAK9T,MACZW,IAAKmT,KAAKnT,IACVqD,KAAM0T,QAAQ1T,KACd9C,MAAOwW,QAAQxW,MACf4H,SAAUgL,KAAKhL,UAGnBuO,QAAQvG,OAAO0G,SAMZA,QAAQ1D,OA/BhBnL,SAiCI,SAASvH,OAEZ,KADAtC,MAAKsC,MAAM,2BAA4BA,OACjCA,MAAMkG,OAKxB,QAASyQ,aAAY/X,OACjB,MAAO2I,OAAM4H,KAAK3H,IAAIW,SAAWX,IAAIoP,cAC7BhY,MAAOA,QAEVC,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAM,qCAAsCF,UAC1CA,WALRyI,SAOI,SAASvH,OAEZ,KADAtC,MAAKsC,MAAM,mCAAoCA,OACzCA,MAAMkG,OAKxB,QAAS2Q,YAAW3Q,MAChB,MAAOqB,OAAM4H,KAAK3H,IAAIW,SAAWX,IAAIsP,YAAa5Q,MAC7CrH,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAM,oCAAqCF,UACzCA,WAHRyI,SAKI,SAASvH,OAEZ,KADAtC,MAAKsC,MAAM,kCAAmCA,OACxCA,MAAMkG,OAKxB,QAAS6Q,UAEL,MAAIf,qBAAoB9N,IAAI,YACxB+N,QAAQe,YAAa,EAEdzP,MAAAA,UAAaC,IAAIW,SAAWX,IAAIyP,QAClCpY,KAAK,SAASC,UAEXmX,QAAQ7D,UAGR6D,QAAQiB,WAAa,KACrBjB,QAAQe,YAAa,EAGrBtZ,KAAKsB,MAAM,8BAA+BF,UAGtCrB,OAAOuL,SAAS,YAChBvL,OAAO2E,GAAG8T,SAASiB,QAdxB5P,SAiBI,SAASvH,OAEZtC,KAAKsC,MAAM,4BAA6BA,OAGxCiW,QAAQ7D,UAGR6D,QAAQiB,WAAa,KAGjBzZ,OAAOuL,SAAS,YAChBvL,OAAO2E,GAAG8T,SAASiB,UAK/BzZ,KAAKsB,MAAM,+CAEPvB,OAAOuL,SAAS,YAChBvL,OAAO2E,GAAG8T,SAASiB,QAM/B,QAAS1B,QAAOvP,YACLA,MAAKkR,eAEZ,IAAIC,UAAW/P,GAAGgQ,QACdC,QAAUhQ,MAAM4H,KAAK3H,IAAIW,SAAWX,IAAIgQ,OAAQtR,KAmDpD,OAhDA6P,UAAS,WACLwB,QACK1Y,KAAK,SAASC,UAGX,GAFApB,KAAKsB,MAAM,gCAAiCF,WAExCA,SAASoH,KAAKkQ,QAgCd,KAAM,IAAIC,OAAM,uCA/BhB,IAAID,SAAU9Y,QAAQyF,KAAKjE,SAASoH,MAChCoQ,QAAUhZ,QAAQyF,KAAKjE,SAASoH,KAAKwM,KAAKgE,MAAMJ,SAChD5D,KAAOpV,QAAQyF,KAAKjE,SAASoH,KAAKwM,MAClC5S,MAAQxC,QAAQyF,KAAKjE,SAAS2Y,OAAOvR,KAAKpG,OAC1CyW,KAAOC,OAAOC,KAAK3X,SAASoH,KAAKwM,KAAKgE,OAAO,SAE1CN,SAAQ1D,KAEfhV,KAAKsB,MAAM,yBAA0BsX,SAErCF,QAAQG,KAAOA,KACfH,QAAQ1D,MACJ9T,MAAO8T,KAAK9T,MACZW,IAAKmT,KAAKnT,IACVO,MAAOA,MACP4H,SAAUgL,KAAKhL,SAGnB,IAAIgQ,WAAYpB,QAAQ1T,KAAK+U,MAAM,KAAKrK,MAAM,EAAG,IAAIQ,KAAK,KACtD8J,SAAWtB,QAAQ1T,KAAK+U,MAAM,KAAKrK,MAAM,IAAIQ,KAAK,IAEtDsI,SAAQ1D,KAAK9P,MACTC,MAAO6U,UACP5U,KAAM8U,UAGVla,KAAKsB,MAAM,yBAA0BoX,SAErCH,QAAQvG,OAAO0G,SAMnBiB,SAAStP,QAAQqO,QAAQ1D,QAvCjC6E,SAyCW,SAASvX,OACZtC,KAAKsC,MAAM,8BAA+BA,OAC1CqX,SAASrP,OAAOhI,MAAMkG,SAE/B,KAEImR,SAASE,QAIpB,QAASnJ,YAAWxP,OAChB,MAAO2I,OAAMW,IAAIV,IAAIW,SAAWX,IAAIgL,MAAQ,IAAM5T,MAAQ,cACrDC,KAAK,SAASC,UAEX,MADApB,MAAKsB,MAAM,oCAAqCF,UACzCA,WAHRyI,SAKI,SAASvH,OAEZ,KADAtC,MAAKsC,MAAM,kCAAmCA,OACxCA,MAAMkG,OAKxB,QAAS2R,cAED7B,oBAAoB9N,IAAI,YAExBxK,KAAKsB,MAAM,yCAGXiX,QAAQjT,UAGRtF,KAAKsB,MAAM,4CAKnB,QAASmC,mBACL,QAAS8U,QAAQiB,aAAejB,QAAQe,WAK5C,QAASc,cAAaC,iBACbza,QAAQ0a,QAAQD,mBAEjBA,iBAAmBA,iBAIvB,IAAIE,UAAWhC,QAAQM,KAGnB2B,UAAYH,gBAAgBtK,QAAQwK,SAExC,OAAQ9W,oBAAqB+W,UAAY,GA5O7C,OACI5C,MAAOA,MACPqB,YAAaA,YACbE,WAAYA,WACZE,OAAQA,OACRtB,OAAQA,OACRrH,WAAYA,WACZyJ,WAAYA,WACZ1W,gBAAiBA,gBACjB2W,aAAcA,cACtB5Z,YAAY2G,SAAW,OAAQ,WAAY,KAAM,QAAS,SAAU,sBAAuB,eAAgB,UAAW,MAAO,YAf7HvH,QACKC,OAAO,qBACP6K,QAAQ,cAAelK,gBAoPhC,WACI,YAMA,SAAS+X,SAAQvY,KAAM6J,MAAOyO,qBAU1B,QAAStG,QAAOmE,KAEZtM,MAAM4Q,SAASC,QAAQC,OAAOC,cAAgBzE,IAAIqD,WAQlDlB,oBAAoBuC,IAAI,WACpB7F,KAAMmB,IAAInB,KACV6D,KAAM1C,IAAI0C,KACVW,WAAYrD,IAAIqD,aAIpBd,QAAQ1D,KAAOmB,IAAInB,KACnB0D,QAAQG,KAAO1C,IAAI0C,KACnBH,QAAQc,WAAarD,IAAIqD,WACzBd,QAAQY,YAAa,EAErBtZ,KAAKsB,MAAM,qBAAsBoX,SAGrC,QAAShE,WACL1U,KAAKsB,MAAM,0CAEXuI,MAAM4Q,SAASC,QAAQC,OAAOC,cAAgB,GAE9CtC,oBAAoBwC,OAAO,WAG/B,QAASC,SAAQ/F,MACb0D,QAAQ1D,KAAOA,KACfsD,oBAAoBuC,IAAI,UAAWnC,SAGvC,QAASpT,UAELuE,MAAM4Q,SAASC,QAAQC,OAAOC,cAAgBtC,oBAAoB9N,IAAI,WAAWgP,WAGjFd,QAAQ1D,KAAOsD,oBAAoB9N,IAAI,WAAWwK,KAClD0D,QAAQG,KAAOP,oBAAoB9N,IAAI,WAAWqO,KAClDH,QAAQc,WAAalB,oBAAoB9N,IAAI,WAAWgP,WAtD5D,GAAId,UACA1G,OAAQA,OACR0C,QAASA,QACTqG,QAASA,QACTzV,OAAQA,OAGZ,OAAOoT,SAIXH,QAAQpR,SAAW,OAAQ,QAAS,uBAhBpCvH,QACKC,OAAO,qBACP6K,QAAQ,UAAW6N,YA8D5B,WACI,YAMA,SAASyC,qBAAoBhb,KAAMqY,SAAUtY,OAAQ6J,GAAIpJ,YAAaI,aAAc4X,UAQhF,QAASyC,sBACL,GAAIrB,OAAQhQ,GAAGgQ,QACXS,iBAAmB,UAoCvB,OAjCI7Z,aAAY4Z,aAAaC,kBAEzBra,KAAKsB,MAAM,2EAEXsY,MAAMvP,WAED7J,YAAYiD,mBAEjBzD,KAAKsB,MAAM,oFAGX+W,SAAS,WACL7X,YAAY6Y,SACZtZ,OAAO2E,GAAG8T,SAASC,OACnB7X,aAAawO,SAASjN,QAAS,kGAAoGsG,MAAO,qBAG9ImR,MAAMtP,WAGNtK,KAAKsB,MAAM,sGAIX+W,SAAS,WACLrY,KAAKsB,MAAM,+CACXvB,OAAO2E,GAAG8T,SAASC,OACnB7X,aAAawO,SAASjN,QAAS,kGAAoGsG,MAAO,qBAG9ImR,MAAMtP,UAGHsP,MAAMC,QAIjB,QAASqB,4BACL,GAAItB,OAAQhQ,GAAGgQ,OAgBf,OAbIpZ,aAAYiD,mBAEZzD,KAAKsB,MAAM,0EACXsY,MAAMvP,YAGNrK,KAAKsB,MAAM,sEAEX+W,SAAS,WACLtY,OAAO2E,GAAG8T,SAASC,SAEvBmB,MAAMtP,UAEHsP,MAAMC,QAIjB,QAASsB,8BACL,GAAIvB,OAAQhQ,GAAGgQ,OAiBf,OAfIpZ,aAAYiD,mBAEZzD,KAAKsB,MAAM,sDACXV,aAAawO,QAAQ,yBAGrBiJ,SAAS,WACLtY,OAAO2E,GAAG8T,SAAS4C,OAEvBxB,MAAMtP,WAGNtK,KAAKsB,MAAM,oDAAqDvB,QAChE6Z,MAAMvP,WAEHuP,MAAMC,QAxFjB,OACIoB,mBAAoBA,mBACpBC,yBAA0BA,yBAC1BC,2BAA4BA,4BASpCH,oBAAoB7T,SAAW,OAAQ,WAAY,SAAU,KAAM,cAAe,eAAgB,YAjBlGvH,QACKC,OAAO,qBACP6K,QAAQ,sBAAuBsQ,wBAmGxC,WACI,YAMA,SAASK,wBAAuBzR,GAAI5J,KAAMoN,UAAWoL,UAKjD,QAASnL,eAAcjM,UACnB,GAAImX,SAAUnL,UAAU5C,IAAI,WACxBzK,OAASqN,UAAU5C,IAAI,SAkB3B,OAfwB,OAApBpJ,SAASka,SACTtb,KAAKsB,MAAM,0CAA2CF,UAGtDmX,QAAQ7D,UAGR6D,QAAQiB,WAAa,KAErBzZ,OAAO2E,GAAG8T,SAASC,QAMhB7O,GAAGU,OAAOlJ,UAxBrB,OACIiM,cAAeA,eAYvBgO,uBAAuBlU,SAAW,KAAM,OAAQ,YAAa,YAlB7DvH,QACKC,OAAO,qBACP6K,QAAQ,yBAA0B2Q,2BAoC3C,WACI,YAEAzb,SAAQC,OAAO,oBAInB,WACI,YAMA,SAAS0b,sBAAqBtb,OAAQD,KAAMsH,UAAWiR,QAAS/X,YAAa8M,YAAazM,aAAcH,cA4CpG,QAAS8a,gBAGL,MAFAvb,QAAOoB,eAAgB,EAEhBb,YAAY2Y,YACfsC,MAAOla,GAAGka,MACVhO,SAAUlM,GAAGkM,WAEZtM,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBpB,OAAOyb,UAAUvN,eAEjB5M,GAAGyT,QACHzT,GAAGwD,SAAU,EAEblE,aAAakE,QAAQ,0DACrB/E,KAAKsB,MAAM,8CAA+CF,YAb3DZ,SAeI,SAAS8B,OACZrC,OAAOoB,eAAgB,EAEvBE,GAAGoa,OAAQ,EAEW,0BAAlBrZ,MAAMH,QACNtB,aAAayB,MAAM,+FAGnBzB,aAAayB,MAAM,uEAGvBtC,KAAKsC,MAAM,4CAA6CA,SAzEpE,GAAIf,IAAKwE,IAET/F,MAAKsB,MAAM,0CAIXC,GAAGkM,SAAW,GACdlM,GAAGmY,gBAAkB,GACrBnY,GAAGwD,SAAU,EACbxD,GAAGka,MAAQ,GACXla,GAAGoa,OAAQ,EAGXpa,GAAGgM,oBAAsBD,YAAYC,oBACrChM,GAAGqa,SAAWJ,aAGdvb,OAAO8G,SAAWrG,aAAaqG,SAC/B9G,OAAO+G,UAAYtG,aAAasG,UAChC/G,OAAOgH,QAAUvG,aAAauG,QAG9B,WAGIsR,QAAQ7D,UACR6D,QAAQkD,MAAQ,KAGZnU,UAAUY,SAASuT,OACnBla,GAAGoa,OAAQ,EACXpa,GAAGka,MAAQnU,UAAUY,SAASuT,QAG9Bzb,KAAKsC,MAAM,mCAAoC,YAC/CzB,aAAayB,MAAM,sKArB/BiZ,qBAAqBpU,SAAW,SAAU,OAAQ,YAAa,UAAW,cAAe,cAAe,eAAgB,gBAnBxHvH,QACKC,OAAO,cACPuH,WAAW,uBAAwBmU,yBAkF5C,WACI,YAMA,SAASM,uBAAsB5b,OAAQD,KAAMQ,YAAaC,aAAcI,aAAcH,cAmBlF,QAAS8a,gBAGL,MAFAvb,QAAOoB,eAAgB,EAEhBb,YAAYyY,YAAY1X,GAAGL,OAC7BC,KAAK,SAASC,UACXnB,OAAO6b,gBAAgB3N,eAEvB5M,GAAGL,MAAQ,GACXK,GAAGwD,SAAU,EAEb/E,KAAKsB,MAAM,kCAAmCF,UAC9CP,aAAasO,KAAK,iFACnB,SAAS7M,OACRtC,KAAKsC,MAAM,gCAAiCA,OAC5CzB,aAAayB,MAAM,qDAhC/B,GAAIf,IAAKwE,IAGTxE,IAAGL,MAAQ,GACXK,GAAGwD,SAAU,EAGbxD,GAAG6E,QAAU3F,aAAa2F,QAC1B7E,GAAGqa,SAAWJ,aAGdvb,OAAO8G,SAAWrG,aAAaqG,SAC/B9G,OAAO+G,UAAYtG,aAAasG,UAChC/G,OAAOgH,QAAUvG,aAAauG,QAElC4U,sBAAsB1U,SAAW,SAAU,OAAQ,cAAe,eAAgB,eAAgB,gBApBlGvH,QACKC,OAAO,cACPuH,WAAW,wBAAyByU,0BAyC7C,WACI,YAEAjc,SAAQC,OAAO,qBAGnB,WACI,YAMA,SAASkc,qBAAoBhc,OAAQsY,SAAUrY,KAAMC,OAAQC,WAAYE,aAAcO,aAAcN,eACjGE,kBAAmBD,cAAeM,cAsBlC,QAAS2B,WAGL,MAFAtC,QAAOoB,eAAgB,EAEhBhB,eAAeuO,KAAKrN,GAAGC,IAAIG,KAAKC,IAClCT,KAAK,SAASC,UACXG,GAAGC,IAAIG,KAAOP,SAGVG,GAAGC,IAAIG,KAAKkB,cACZtB,GAAGC,IAAIG,KAAKoB,mBAAmBM,QAAQ9B,GAAGC,IAAIG,KAAKkB,cAGvDa,aAEA1D,KAAKsB,MAAM,yCAA0CF,YAXtDf,SAaI,SAASiC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,uCAAwCA,OACnD1B,aAAa0B,MAAM,0CAK/B,QAASoB,cAGL,MAFA1D,MAAKsB,MAAM,iBAAkBC,GAAGC,IAAIG,MAE7BpB,kBAAkBqO,KAAKrN,GAAGC,IAAIG,KAAKqa,OAAO,GAAGpa,IAC/CT,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBE,GAAGqC,QAAUxC,SAEbpB,KAAKsB,MAAM,4CAA6CF,YANzDb,SAQI,SAAS+B,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,0CAA2CA,OACtD1B,aAAa0B,MAAM,6CAM/B,QAAS2Z,cACLtb,aAAamE,MAAK,EAElB,IAAIrC,SACAkB,YAAapC,GAAGqC,QAAQa,KAAK/B,KAGjC2V,UAAS,WACLtY,OAAO2E,GAAG,iBAAkBjC,SAC7B,KA5EP,GAAIlB,IAAKwE,IAGTxE,IAAGqC,WACHrC,GAAGC,IAAMpB,aAAaoB,IACtBD,GAAGC,IAAIG,KAAKoB,sBACZxB,GAAG2a,WAAa,EAGhB3a,GAAG4a,OAASF,WAGZ,WACIhc,OAAOoB,eAAgB,EACvBkB,aACRwZ,oBAAoB5U,SAAW,SAAU,WAAY,OAAQ,SAAU,aAAc,eAAgB,eAAgB,iBAAkB,oBAAqB,gBAAiB,gBArB7KvH,QACKC,OAAO,eACPuH,WAAW,sBAAuB2U,wBAqF3C,WACI,YAEAnc,SAAQC,OAAO,sBAGnB,WACI,YAMA,SAASuc,kBAAiBC,gBACtBA,eAEC7U,MAAM,SACH8U,YAAU,EACVlV,WAAY,kBACZ2M,aAAc,KACdO,OAAQ,SACR1L,IAAK,SAGRpB,MAAM,eACHJ,WAAY,kBACZ2M,aAAc,KACdG,YAAa,mCACbI,OAAQ,SACR1L,IAAK,mBAGRpB,MAAM,kBACHJ,WAAY,kBACZ2M,aAAc,KACdG,YAAa,mCACbI,OAAQ,SACR1L,IAAK,kBANbwT,iBAAiBjV,SAAW,kBAtB5BvH,QACKC,OAAO,gBACPka,OAAOqC,qBA+BhB,WACI,YAMA,SAASG,iBAAgBvc,KAAMC,OAAQF,OAAQwH,KAAMiV,gBAAiB5b,aAAcE,iBAgBhF,QAAS2b,WACLxc,OAAOoB,eAAgB,CAEvB,IAAIoB,SACAC,KAAM3C,OAAO0C,OAAOia,SAIxB,OAFA1c,MAAKsB,MAAM,YAAamB,OAAOC,MAExB8Z,gBAAgB5Z,KAAKH,QACvBtB,KAAK,SAASC,UAGXnB,OAAOoB,eAAgB,EAGvBE,GAAGuG,KAAO1G,SACVG,GAAGuG,KAAKL,KAAOF,KAAKG,YAAYnG,GAAGuG,KAAKL,MACxC3G,gBAAgB0C,WAAWjC,GAAGuG,MAGzBvG,GAAGuG,MAAM/H,OAAO2E,GAAG,QAExB1E,KAAKsB,MAAM,kCAAmCC,GAAGuG,QAdlD0U,SAgBI,SAASla,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,kCAAmCA,OAC9C1B,aAAa0B,MAAM,0CA3C/B,GAAIf,IAAKwE,IAGTxE,IAAGuG,QAGH,WACI7H,OAAOoB,eAAgB,EAEvBob,aASRF,gBAAgBpV,SAAW,OAAQ,SAAU,SAAU,OAAQ,kBAAmB,eAAgB,mBAvBlGvH,QACKC,OAAO,gBACPuH,WAAW,kBAAmBmV,oBAoDvC,WACI,YAEA3c,SAAQC,OAAO,qBAGnB,WACI,YAMA,SAAS8c,iBAAgBN,eAAgBvF,sBAErC,GAAI8F,cAAe9F,qBAAqBC,kBACpCG,YAAc0F,aAAa1F,WAE/BmF,gBAEC7U,MAAM,QACHJ,WAAY,iBACZ2M,aAAc,KACdO,OAAQ,SACRJ,YAAa,iCACbtL,IAAK,GACLJ,MACI/D,KAAMyS,eAIb1P,MAAM,cACHJ,WAAY,iBACZ2M,aAAc,KACdG,YAAa,kDACbI,OAAQ,SACR1L,IAAK,aACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAalF,eAL9DiF,gBAAgBxV,SAAW,iBAAkB,wBAxB7CvH,QACKC,OAAO,eACPka,OAAO4C,oBAiChB,WACI,YAMA,SAASE,gBAAejT,GAAI5J,KAAMC,OAAQC,WAAYK,kBAAmBuc,qBAAsBC,oBAAqBnc,cAoBhH,QAASoc,eAGL,MAFA/c,QAAOoB,eAAgB,EAEhByb,qBAAqBla,OACvBzB,KAAK,SAASC,UAGX8J,EAAE+K,QAAQ7U,SAASoH,KAAM,SAAS7G,KAAMsb,GACpC1b,GAAGuJ,WAAW/B,MACXnH,GAAMD,KAAKE,IACXqD,KAAQvD,KAAKuD,KACbxC,KAAQf,KAAK8C,KAAK/B,SAIzBwa,kBAZDJ,SAcI,SAASxa,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,sCAAuCA,OAClD1B,aAAa0B,MAAM,gDAK/B,QAAS6a,eAAcvZ,SACnB,MAAOA,SAAQE,WAAW6D,OAAS,GAAK/D,QAAQE,WAAWO,MAAM,SAASL,MACtE,MAAOC,QAAOD,MAAME,KAAKD,SAAU,WAAa,IAKxD,QAASiZ,iBAGL,MAFAjd,QAAOoB,eAAgB,EAEhB0b,oBAAoBna,OACtBzB,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvB6J,EAAE+K,QAAQ7U,SAAU,SAAS2G,MAAOkV,GAG/B1b,GAAG6b,mBAEJlS,EAAE+K,QAAQlO,MAAM+C,WAAY,SAASoB,KAEjC3K,GAAG6b,gBAAgBrU,KAAKmC,EAAE0D,KAAKrN,GAAGuJ,YAAalJ,GAAIsK,SAInDnE,MAAMmH,OAAShP,WAAWmd,eAAeC,QACzCvV,MAAMwV,MAAQxV,MAAMa,UACbb,OAAMa,KAGjBrH,GAAGic,WAAWzU,MACVnH,GAAMmG,MAAMlG,IACb+G,IAAOb,MAAMa,IACbH,MAASV,MAAMU,MACfqC,WAAcvJ,GAAG6b,gBACjBK,UAAa1V,MAAM0V,UACnBvO,KAAQnH,MAAMmH,KACdqH,SAAYxO,MAAMwO,SAClBgH,MAASxV,MAAMwV,MACfG,MAAS3V,MAAM2V,MACfC,MAAS5V,MAAM4V,UAItBC,gBAlCDb,SAoCI,SAASza,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,wCAAyCA,OACpD1B,aAAa0B,MAAM,gDAK/B,QAASsb,eAGL,MAFA3d,QAAOoB,eAAgB,EAEhBd,kBAAkBqC,OACpBzB,KAAK,SAASC,UAEXnB,OAAOoB,eAAgB,EAEvB6J,EAAE+K,QAAQ7U,SAASoH,KAAM,SAAST,MAAOkV,GACpC1b,GAAG6b,mBAEJlS,EAAE+K,QAAQlO,MAAM+C,WAAY,SAASoB,KACjC3K,GAAG6b,gBAAgBrU,KAAKmC,EAAE0D,KAAKrN,GAAGuJ,YAAalJ,GAAIsK,IAAItK,QAGvDmG,MAAMP,MAAMuI,QAAQ,aAAe,IAEnCxO,GAAGqC,QAAQmF,MACPnH,GAAMmG,MAAMlG,IACZ4G,MAASV,MAAMU,MACfqC,WAAcvJ,GAAG6b,gBACjB3G,cAAiB1O,MAAM0O,cACvB3S,WAAciE,MAAMjE,WAAWkE,KAAK,SAAS6E,EAAGC,GAC5C,MAAWA,GAAJD,EAAQ,EAAI,KAEvBrF,MAASO,MAAMP,MACf/C,KAAQsD,MAAMtD,SAK1BlD,GAAGqC,QAAUrC,GAAGqC,QAAQoE,KAAK,SAAS6E,EAAGC,GACrC,MAAQD,GAAE/I,WAAW,GAAKgJ,EAAEhJ,WAAW,GAAM,EAAI,KAGrDvC,GAAGsc,YAActc,GAAGqC,QAAQlC,OAAOyb,iBAhCpC5c,SAqCI,SAAS+B,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,yCAA0CA,OACrD1B,aAAa0B,MAAM,8CAhJ/B,GAAIf,IAAKwE,IAGTxE,IAAGyE,YAAc,EACjBzE,GAAGic,cACHjc,GAAGqC,WACHrC,GAAGsc,eACHtc,GAAGuJ,cAGH,WACI7K,OAAOoB,eAAgB,EACvB2b,iBAQRH,eAAe1V,SAAW,KAAM,OAAQ,SAAU,aAAc,oBAAqB,uBAAwB,sBAAuB,gBAzBpIvH,QACKC,OAAO,eACPuH,WAAW,iBAAkByV,mBAyJtC,WACI,YAEAjd,SAAQC,OAAO,yBAGnB,WACI,YAMA,SAASie,iBAAgB9d,KAAM8J,IAAK8G,kBAKhC,QAASmN,qBAAoBnc,IACzB,GAAImP,MACAC,OAAQ,MACRpI,IAAKkB,IAAIW,SAAWX,IAAI8L,OAAS,IAAMhU,GAG3C,OAAOgP,kBAAiBE,gBAAgBC,KAV5C,OACIgN,oBAAqBA,qBAoB7BD,gBAAgB3W,SAAW,OAAQ,MAAO,oBA1B1CvH,QACKC,OAAO,mBACP6K,QAAQ,kBAAmBoT,oBAkBpC,WACI,YAMA,SAASE,qBAAoB3B,gBACzBA,eAEC7U,MAAM,cACHoB,IAAK,WACL0L,OAAQ,SACRgI,YAAU,EACVlV,WAAY,qBACZ2M,aAAc,OAGjBvM,MAAM,mBACHoB,IAAK,yBACL0L,OAAQ,SACRlN,WAAY,qBACZ2M,aAAc,KACdG,YAAa,2CAOrB8J,oBAAoB7W,SAAW,kBA3B/BvH,QACKC,OAAO,mBACPka,OAAOiE,wBAuBhB,WACI,YAMA,SAASC,oBAAmBrU,GAAI5J,KAAMC,OAAQF,OAAQK,aAAcG,kBAAmBuc,qBAAsBlS,sBAAuBhK,aAAcE,iBAmB9I,QAASkc,eAGL,MAFA/c,QAAOoB,eAAgB,EAEhByb,qBAAqBla,OACvBzB,KAAK,SAASC,UACXpB,KAAKsB,MAAM,4CAA6CF,UAExDG,GAAGuJ,WAAa1J,SAASoH,KACzBjH,GAAG8J,SAAWjK,SAASoH,KAAK9G,OAAO,SAASC,MACxC,MAAOA,MAAK8C,KAAK/B,KAAK6H,gBAAkBnK,aAAa8d,aAAa3T,gBACnE,GAEH4T,mBATDrB,SAWI,SAASxa,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,0CAA2CA,OACtD1B,aAAa0B,MAAM,8CAM/B,QAAS6b,kBAGL,MAFAle,QAAOoB,eAAgB,EAEhBuJ,sBAAsBhI,OACxBzB,KAAK,SAASC,UAwBX,MAvBApB,MAAKsB,MAAM,+CAAgDF,UAG3DG,GAAG6c,UAAYhd,SAASoH,KAAK9G,OAAO,SAASC,MACzC,MAAOA,MAAKmJ,WAAWpJ,OAAO,SAAS2J,UACnC,MAAOA,UAASzJ,KAAOL,GAAG8J,SAASxJ,MACpC8F,OAAS,IACb,GAECpG,GAAG6c,UAAUpC,QACbza,GAAG6c,UAAUpC,OAAO/F,QAAQ,SAASlO,OACjCA,MAAMA,MAAM+C,WAAa/C,MAAMA,MAAM+C,WAAW/G,IAAI,SAASsa,GACzD,MAAO9c,IAAGuJ,WAAW8D,KAAK,SAAS1C,KAC/B,MAAOA,KAAIrK,KAAOwc,EAAEzc,OAG5BL,GAAG6c,UAAU1H,UAAY3O,MAAMA,MAAM0O,gBAI7C3V,gBAAgB0C,WAAWjC,GAAG6c,WAGzB7c,GAAG6c,WAIRR,mBAEA3d,OAAOoB,eAAgB,IALZtB,OAAO2E,GAAG,UA1BtBkG,SAiCI,SAAStI,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,6CAA8CA,OACzD1B,aAAa0B,MAAM,iDAK/B,QAASgc,eAAc1a,SACnB,MAAiC,IAA7BA,QAAQE,WAAW6D,QACZ,EAEJ/D,QAAQE,WAAWS,KAAK,SAASP,MACpC,MAAOC,QAAOD,MAAME,KAAKD,SAAU,WAAa,IAKxD,QAASkZ,eAAcvZ,SACnB,MAAOA,SAAQE,WAAW6D,OAAS,GAAK/D,QAAQE,WAAWO,MAAM,SAASL,MACtE,MAAOC,QAAOD,MAAME,KAAKD,SAAU,WAAa,IAKxD,QAAS2Z,eAGL,MAFA3d,QAAOoB,eAAgB,EAEhBd,kBAAkBqC,OACpBzB,KAAK,SAASC,UAEXnB,OAAOoB,eAAgB,EAEvB6J,EAAE+K,QAAQ7U,SAASoH,KAAM,SAAST,MAAOkV,GACpC1b,GAAG6b,mBAGJlS,EAAE+K,QAAQlO,MAAM+C,WAAY,SAASoB,KAG7B3K,GAAG8J,SAASxJ,MAAMqK,IAAItK,IACtBL,GAAGqC,QAAQmF,MACPnH,GAAMmG,MAAMlG,IACZ4G,MAASV,MAAMU,MACfqC,WAAcvJ,GAAG6b,gBACjB3G,cAAiB1O,MAAM0O,cACvB3S,WAAciE,MAAMjE,WAAWkE,KAAK,SAAS6E,EAAGC,GAC5C,MAAWA,GAAJD,EAAQ,EAAI,KAEvBrF,MAASO,MAAMP,MACf/C,KAAQsD,MAAMtD,WAM9BlD,GAAGqC,QAAUrC,GAAGqC,QAAQoE,KAAK,SAAS6E,EAAGC,GACrC,MAAQD,GAAE/I,WAAW,GAAKgJ,EAAEhJ,WAAW,GAAM,EAAI,KAGrDvC,GAAGgd,YAAchd,GAAGqC,QAAQlC,OAAO4c,eACnC/c,GAAGsc,YAActc,GAAGqC,QAAQlC,OAAOyb,eAKnCnd,KAAKsB,MAAM,4CAA6CC,GAAGqC,WAtC5DrD,SAyCI,SAAS+B,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,0CAA2CA,OACtD1B,aAAa0B,MAAM,8CAxJ/B,GAAIf,IAAKwE,IAGTxE,IAAG8J,YACH9J,GAAGuJ,cACHvJ,GAAG6c,aACH7c,GAAGgd,eACHhd,GAAGsc,eACHtc,GAAGqC,WAEH,WACI3D,OAAOoB,eAAgB,EACvB2b,iBAWRiB,mBAAmB9W,SAAW,KAAM,OAAQ,SAAU,SAAU,eAAgB,oBAAqB,uBAAwB,wBAAyB,eAAgB,mBA5BtKvH,QACKC,OAAO,mBACPuH,WAAW,qBAAsB6W,uBAkK1C,WACI,YAEAre,SAAQC,OAAO,qBAGnB,WACI,YAMA,SAAS2e,aAAYxe,KAAM8J,IAAK8G,kBAO5B,QAAS6N,cAAazW,MAClB,GAAI+I,MACAC,OAAQ,MACRpI,IAAKkB,IAAIW,SAAWX,IAAI4U,KACxBjc,QACIuF,KAAMA,KACNC,MAAO,KAIf,OAAO2I,kBAAiBE,gBAAgBC,KAG5C,QAAS4N,mBAAkB/c,IACvB,GAAImP,MACAC,OAAQ,MACRpI,IAAKkB,IAAIW,SAAWX,IAAI4U,KAAO,IAAM9c,GAGzC,OAAOgP,kBAAiBE,gBAAgBC,KAG5C,QAAS6N,iBACL,GAAI7N,MACAC,OAAQ,MACRpI,IAAKkB,IAAIW,SAAWX,IAAI4L,WAG5B,OAAO9E,kBAAiBE,gBAAgBC,KAlC5C,OACI0N,aAAcA,aACdE,kBAAmBA,kBACnBC,cAAeA,eAqBvBJ,YAAYrX,SAAW,OAAQ,MAAO,oBA7BtCvH,QACKC,OAAO,eACP6K,QAAQ,cAAe8T,gBA0ChC,WACI,YAMA,SAASK,iBAAgBxC,eAAgBvF,sBAErC,GAAI8F,cAAe9F,qBAAqBC,kBACpCG,YAAc0F,aAAa1F,WAE/BmF,gBAEC7U,MAAM,QACHJ,WAAY,iBACZ2M,aAAc,KACdO,OAAQ,SACRJ,YAAa,iCACbtL,IAAK,OACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAa3E,SAIzDzQ,MAAM,eACHJ,WAAY,uBACZ2M,aAAc,KACdO,OAAQ,SACRJ,YAAa,oDACbtL,IAAK,aAGbiW,gBAAgB1X,SAAW,iBAAkB,wBA9B7CvH,QACKC,OAAO,eACPka,OAAO8E,oBA8BhB,WACI,YAMA,SAASC,gBAAevX,KAAMiX,aAC1B,GAAIjd,IAAKwE,IAETxE,IAAGgL,SACHhL,GAAGuJ,cAEH,WACI0T,YAAYI,gBAAgBzd,KAAK,SAASC,UAClCA,SAASoH,MAGT0C,EAAE+K,QAAQ7U,SAASoH,KAAM,SAAS7G,KAAMsb,GACpC1b,GAAGuJ,WAAW/B,MACXnH,GAAMD,KAAKE,IACXqD,KAAQvD,KAAKuD,WAQ5BsZ,YAAYC,aAAa,YAAYtd,KAAK,SAASC,UAC3CA,SAASoH,MAGT0C,EAAE+K,QAAQ7U,SAASoH,KAAM,SAAS7G,KAAMsb,GAGnC1b,GAAG6b,mBAEJlS,EAAE+K,QAAQtU,KAAKmJ,WAAY,SAASoB,KAChC3K,GAAG6b,gBAAgBrU,KAAKmC,EAAE0D,KAAKrN,GAAGuJ,YAAalJ,GAAIsK,IAAItK,QAK3DL,GAAGgL,MAAMxD,MACNnH,GAAMD,KAAKE,IACX4G,MAAS9G,KAAK8G,MACdqC,WAAcvJ,GAAG6b,gBACjB2B,MAASpd,KAAK6U,UACd/O,KAAQF,KAAKyX,mBAAmBrd,KAAK8F,eAf5DqX,eAAe3X,SAAW,OAAQ,eA/BlCvH,QACKC,OAAO,eACPuH,WAAW,iBAAkB0X,mBAuDtC,WACI,YAMA,SAASG,oBAAmB5C,eAAgBvF,sBAExC,GAAI8F,cAAe9F,qBAAqBC,kBACpCG,YAAc0F,aAAa1F,WAE/BmF,gBAEC7U,MAAM,WACH8M,OAAQ,SACR1L,IAAK,WACLsL,YAAa,uCACb9M,WAAY,oBACZ2M,aAAc,KACdvL,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAanF,aAIzDjQ,MAAM,kBACH8M,OAAQ,SACR1L,IAAK,8BACLsL,YAAa,6DACb9M,WAAY,0BACZ2M,aAAc,OAGjBvM,MAAM,gBACH8M,OAAQ,iBACR1L,IAAK,kBACLsW,SAAA,SAAA,eAAA,eAAS,SAASnf,OAAQK,aAAcO,cACpC,GAAIP,aAAaoC,UAA6C,gBAA1BpC,cAAaoC,SAC7C7B,aAAaiT,KACT,yDACA,sBAGH,CACD,GAAInR,SACAkB,YAAavD,aAAauD,YAG9B5D,QAAO2E,GAAG,iBAAkBjC,WAGpCA,QACID,SAAU,QAjBtByc,mBAAmB9X,SAAW,iBAAkB,wBAhChDvH,QACKC,OAAO,kBACPka,OAAOkF,uBAqDhB,WACI,YAMA,SAASE,mBAAkBvV,GAAI5J,KAAMC,OAAQM,kBAAmBuc,qBAAsBlc,cAyBlF,QAASoc,eAGL,MAFA/c,QAAOoB,eAAgB,EAEhByb,qBAAqBla,OACvBzB,KAAK,SAASC,UAGX8J,EAAE+K,QAAQ7U,SAASoH,KAAM,SAAS7G,KAAMsb,GACpC1b,GAAGuJ,WAAW/B,MACXnH,GAAMD,KAAKE,IACXqD,KAAQvD,KAAKuD,KACbxC,KAAQf,KAAK8C,KAAK/B,WAR1Boa,SAYI,SAASxa,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,yCAA0CA,OACrD1B,aAAa0B,MAAM,gDAK/B,QAASgc,eAAc1a,SACnB,MAAiC,IAA7BA,QAAQE,WAAW6D,QACZ,EAEJ/D,QAAQE,WAAWS,KAAK,SAASP,MACpC,MAAOC,QAAOD,MAAME,KAAKD,SAAU,WAAa,IAKxD,QAASkZ,eAAcvZ,SACnB,MAAOA,SAAQE,WAAW6D,OAAS,GAAK/D,QAAQE,WAAWO,MAAM,SAASL,MACtE,MAAOC,QAAOD,MAAME,KAAKD,SAAU,WAAa,IAKxD,QAAS2Z,eAGL,MAFA3d,QAAOoB,eAAgB,EAEhBd,kBAAkBqC,OACpBzB,KAAK,SAASC,UAEXnB,OAAOoB,eAAgB,EAEvB6J,EAAE+K,QAAQ7U,SAASoH,KAAM,SAAST,MAAOkV,GAEpC1b,GAAG6b,mBAEJlS,EAAE+K,QAAQlO,MAAM+C,WAAY,SAASoB,KACjC3K,GAAG6b,gBAAgBrU,KAAKmC,EAAE0D,KAAKrN,GAAGuJ,YAAalJ,GAAIsK,IAAItK,QAG3DL,GAAGqC,QAAQmF,MACRnH,GAAMmG,MAAMlG,IACZ4G,MAASV,MAAMU,MACfqC,WAAcvJ,GAAG6b,gBACjBgC,eAAkBrX,MAAMqX,eACxB3I,cAAiB1O,MAAM0O,cACvB3S,WAAciE,MAAMjE,WAAWkE,KAAK,SAAS6E,EAAGC,GAC5C,MAAWA,GAAJD,EAAQ,EAAI;GAEvBrF,MAASO,MAAMP,MACf/C,KAAQsD,MAAMtD,SAIrBlD,GAAGqC,QAAUrC,GAAGqC,QAAQoE,KAAK,SAAS6E,EAAGC,GACrC,MAAQD,GAAE/I,WAAW,GAAKgJ,EAAEhJ,WAAW,GAAM,EAAI,KAGrDvC,GAAGgd,YAAchd,GAAGqC,QAAQlC,OAAO4c,eAAee,UAClD9d,GAAGsc,YAActc,GAAGqC,QAAQlC,OAAOyb,iBAhCpC5c,SAuCI,SAAS+B,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,yCAA0CA,OACrD1B,aAAa0B,MAAM,8CA/G/B,GAAIf,IAAKwE,IAGTxE,IAAGyE,YAAc,EACjBzE,GAAGqC,WACHrC,GAAGgd,eACHhd,GAAGsc,eACHtc,GAAGuJ,aAGH,IAAIwU,WACAtC,cACAY,gBAGJ,WAEI,MADA3d,QAAOoB,eAAgB,EAChBuI,GAAG2V,IAAID,aAWtBH,kBAAkBhY,SAAW,KAAM,OAAQ,SAAU,oBAAqB,uBAAwB,gBAjClGvH,QACKC,OAAO,kBACPuH,WAAW,oBAAqB+X,sBAwHzC,WACI,YAEAvf,SAAQC,OAAO,uBAGnB,WACI,YAMA,SAASuc,kBAAiBC,gBACtBA,eAEC7U,MAAM,UACH8U,YAAU,EACVlV,WAAY,mBACZ2M,aAAc,KACdO,OAAQ,SACR1L,IAAK,UAGRpB,MAAM,iBACHJ,WAAY,mBACZ2M,aAAc,KACdG,YAAa,qCACbI,OAAQ,SACR1L,IAAK,qBAcbwT,iBAAiBjV,SAAW,kBAlC5BvH,QACKC,OAAO,iBACPka,OAAOqC,qBAuBhB,WACI,YAMA,SAASoD,kBAAiBxf,KAAMC,OAAQF,OAAQ8J,MAAO4V,iBAAkB7e,aAAcE,iBAkBnF,QAAS4e,YAKL,MAJAzf,QAAOoB,eAAgB,EAEvBrB,KAAKsB,MAAM,aAAcqe,WAElBF,iBAAiB7c,OACnBzB,KAAK,SAASC,UAGXnB,OAAOoB,eAAgB,EAGvBE,GAAGqe,MAAQ1U,EAAE0D,KAAKxN,SAASoH,MAAO/D,MAAO/B,KAAMid,aAC/C7e,gBAAgB0C,WAAWjC,GAAGqe,OAGzBre,GAAGqe,OAAO7f,OAAO2E,GAAG,OAEzB,IAAImb,aAAc,+BAA+B3V,KAAK3I,GAAGqe,MAAME,SAC/Dve,IAAGwe,MAAQ,SAAS7V,KAAK3I,GAAGqe,MAAME,WAAaD,YAC/Cte,GAAGye,MAAQ,gBAAgB9V,KAAK3I,GAAGqe,MAAME,UAErCve,GAAGye,OACHnW,MAAMW,IAAIjJ,GAAGqe,MAAME,UACfG,aAAc,gBAEjB9e,KAAK,SAASC,UACX,GAAI8e,aAAc,GAAIC,YAAW/e,SAASoH,KAC1C4X,SAAQC,eAAeH,YAAaA,cAC/B/e,KAAK,SAASwP,QACXpP,GAAG+e,KAAO3P,OAAO4P,MACjBtgB,OAAOugB,WAEVC,SAIbzgB,KAAKsB,MAAM,sCAAuCC,GAAGqe,SAhCtDH,SAkCI,SAASnd,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,qCAAsCA,OACjD1B,aAAa0B,MAAM,2CA5D/B,GAAIf,IAAKwE,IAGTxE,IAAGqe,SAEH,WACI3f,OAAOoB,eAAgB,EAEvBqe,aAKJ,IAAIC,WAAY5f,OAAO0C,OAAOkd,UAiBlCH,iBAAiBrY,SAAW,OAAQ,SAAU,SAAU,QAAS,mBAAoB,eAAgB,mBAnCrGvH,QACKC,OAAO,iBACPuH,WAAW,mBAAoBoY,qBAqExC,WACI,YAMA,SAASkB,kBAAiBrE,eAAgBvF,sBAEtC,GAAI8F,cAAe9F,qBAAqBC,kBACpCG,YAAc0F,aAAa1F,WAE/BmF,gBAEC7U,MAAM,SACHJ,WAAY,kBACZ2M,aAAc,KACdO,OAAQ,SACRJ,YAAa,mCACbtL,IAAK,QACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAa1E,UAIzD1Q,MAAM,UACHgB,MACImY,UAAW,iBAEfzB,SAAA,SAAA,eAAA,eAAS,SAASnf,OAAQK,aAAcO,cAChCP,aAAasJ,QAA6C,gBAA5BtJ,cAAasJ,OAAO7H,IAClDlB,aAAaiT,KACT,wCACA,kBAIJ7T,OAAO2E,GAAG,WAGlBjC,QACIiH,OAAQ,MAEZ4K,OAAQ,QACR1L,IAAK,iBALb8X,iBAAiBvZ,SAAW,iBAAkB,wBApC9CvH,QACKC,OAAO,gBACPka,OAAO2G,qBA4ChB,WACI,YAMA,SAASE,iBACL5gB,KACAC,OACAF,OACAwH,KACAsZ,eACArE,gBACA5b,cAaA,QAAS6b,WAGL,MAFAxc,QAAOoB,eAAgB,EAEhBmb,gBACF5Z,OACAzB,KAAK,SAAUC,UAGZnB,OAAOoB,eAAgB,EAGvBE,GAAGuG,KAAOoD,EAAE0D,KAAKxN,SAASoH,MACtB/D,MAAQ/B,KAAM,WAElBnB,GAAGuG,KAAKL,KAAOF,KAAKG,YAAYnG,GAAGuG,KAAKL,MAGnClG,GAAGuG,MAAM/H,OAAO2E,GAAG,UAdzB8X,SAgBI,SAAUla,OACbrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,mCAAoCA,OAC/C1B,aAAa0B,MACT,gDAMhB,QAASwe,WAGL,MAFA7gB,QAAOoB,eAAgB,EAEhBwf,eACFje,OACAzB,KAAK,SAAUC,UACZnB,OAAOoB,eAAgB,EAEvBE,GAAGwf,QAAU3f,SAASoH,KAGtBjH,GAAGwf,QAAUxf,GAAGwf,QAAQhd,IAAI,SAAUpC,MAKlC,MAJAA,MAAKe,KAAOf,KAAKuD,KACZuK,QAAQ,OAAQ,KAChBA,QAAQ,kBAAmB,IAC3BlF,cACE5I,OAGX3B,KAAKsB,MAAM,qCAAsCF,UACjDpB,KAAKsB,MACD,wCACAC,GAAGwf,WAnBRF,SAsBI,SAAUve,OACbrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,mCAAoCA,OAC/C1B,aAAa0B,MAAM,0CAtE/B,GAAIf,IAAKwE,IAGTxE,IAAGwf,WAEH,WACItE,UACAqE,aAiBRF,gBAAgBzZ,SAAW,OAAQ,SAAU,SAAU,OAAQ,iBAAkB,kBAAmB,gBArCpGvH,QACKC,OAAO,gBACPuH,WAAW,kBAAmBwZ,oBAuFvC,WACI,YAEAhhB,SACKC,OAAO,gBACJ,oBACA,0BACA,uBACA,6BAIZ,WACI,YAEAD,SACKC,OAAO,iBACP6B,OAAO,YAAA,OAAY,SAAS6F,MACzB,MAAO,UAASyZ,KACZ,MAAOzZ,MAAKyX,mBAAmBgC,YAK/C,WACI,YAEAphB,SACKC,OAAO,qBAGhB,WACI,YAMA,SAASohB,qBACL,MAAO,UAASC,KACZ,IAAKA,IACD,MAAO,EAGX,IAAIX,OAAQW,IAAIC,WAAWC,OAAO3R,QAAQ,MAAO,GAEjD,IAAI8Q,MAAMpQ,MAAM,UACZ,MAAO+Q,IAGX,IAAIG,SACAC,KACAC,MAEJ,QAAQhB,MAAM5Y,QACV,IAAK,IACD0Z,QAAU,EACVC,KAAOf,MAAM3Q,MAAM,EAAG,GACtB2R,OAAShB,MAAM3Q,MAAM,EACrB,MAEJ,KAAK,IACDyR,QAAUd,MAAM,GAChBe,KAAOf,MAAM3Q,MAAM,EAAG,GACtB2R,OAAShB,MAAM3Q,MAAM,EACrB,MAEJ,KAAK,IACDyR,QAAUd,MAAM3Q,MAAM,EAAG,GACzB0R,KAAOf,MAAM3Q,MAAM,EAAG,GACtB2R,OAAShB,MAAM3Q,MAAM,EACrB,MAEJ,KAAK,IACDyR,QAAUd,MAAM3Q,MAAM,EAAG,GACzB0R,KAAOf,MAAM3Q,MAAM,EAAG,GACtB2R,OAAShB,MAAM3Q,MAAM,EACrB,MAEJ,SACI,MAAOsR,KASf,MANe,IAAXG,UACAA,QAAU,IAGdE,OAASA,OAAO3R,MAAM,EAAG,GAAK,IAAM2R,OAAO3R,MAAM,IAEzCyR,QAAU,KAAOC,KAAO,KAAOC,QAAQH,QAvDvDxhB,QACKC,OAAO,eACP6B,OAAO,oBAAqBuf,sBA0DrC,WACI,YAMA,SAASO,oBACL,MAAO,UAAU1Y,MAAOyX,OACpB,GAAIkB,iBAmBJ,OAjBA7hB,SAAQqW,QAAQnN,MAAO,SAAUnH,KAAM+f,KAI/B,GAAIC,OAAQ,GAAIC,MACZC,gBAAkBlgB,KAAKmC,WAAWC,IAAI,SAASC,MAC/C,MAAO,IAAI4d,MAAK5d,OAGhB6d,iBAAgBtd,KAAK,SAASP,MAC9B,MAAOA,MAAO2d,SAEdF,cAAc1Y,KAAKpH,QAKxB8f,eAzBf7hB,QACKC,OAAO,eACP6B,OAAO,mBAAoB8f,qBA0DpC,WACI,YAMA,SAASM,cACL,MAAO,UAASC,UAAWC,UACvB,MAAKD,WAIDC,SACO/d,OAAO8d,WAAWE,OAAO,OAG7Bhe,OAAO8d,WAAWE,OAAO,MARhC,QANRriB,QACKC,OAAO,eACP6B,OAAO,aAAcogB,eAiB9B,WACI,YAMA,SAASI,cACL,MAAO,UAASC,MAAOC,OACnB,MAAa,OAATD,OACIA,MAAMxa,QAAU,GAChBwa,MAAQA,MAAM5X,cACP4X,MAAME,UAAU,EAAG,GAAG1S,cAAgBwS,MAAME,UAAU,IAHrE,QANRziB,QACKC,OAAO,eACP6B,OAAO,aAAcwgB,eAc9B,WACI,YAMA,SAASI,gBAAezR,UAcpB,QAAS0R,eAAcC,UACnB,MAAKA,WAAgC,gBAAbA,UAIjBA,SAASta,OAAO2I,SAASoG,WAAa,GAHlC,EAff,MAAO,UAASwL,SACZ,GAAIC,MAAO9iB,QAAQuJ,QAAQ,QAAUsZ,QAAU,SAS/C,OAPA7iB,SAAQqW,QAAQyM,KAAK9T,KAAK,KAAM,SAASzF,SACrC,GAAIwZ,QAAS/iB,QAAQuJ,QAAQA,QACzBoZ,eAAcpZ,QAAQqZ,WACtBG,OAAOC,KAAK,SAAU,YAIvBhjB,QAAQuJ,QAAQ,SAAS0Z,OAAOH,MAAMpC,QAuBrDgC,eAAenb,SAAW,YAtC1BvH,QACKC,OAAO,eACP6B,OAAO,iBAAkB4gB,mBA0BlC,WACI,YAEA1iB,SACKC,OAAO,wBAGhB,WACI,YAmCA,SAASijB,cAAavb,MAClB,OACIwb,SAAU,KACVX,OACIY,KAAM,KAEVvT,SAAS,EACTkF,SAAU,6KACVsO,KAAM,SAASb,OACXA,MAAM5Y,OAAO,OAAQ,SAAS0Z,QACtBA,SACAd,MAAMxZ,IAAMrB,KAAKyX,mBAAmB,gCAAkCkE,aAQ1F,QAASC,WAAUtS,UACf,MAAO,UAASsR,OACZ,MAAKtR,WAAaA,SAASI,gBAAmBJ,SAASK,WAC/CiR,OAAS,IAAI1S,QAAQoB,SAASI,eAAgBJ,SAASK,WADUiR;;;;;;AA2mBjF,QAASiB,gBAAeC,SACpB,MAAO,UAASjB,MAAOjZ,QAASma,OAC5B1jB,QAAQuJ,QAAQka,SAASE,KAAK,SAAU,WAChCF,QAAQG,aAAe,GACvBpB,MAAMqB,iBAAkB,EAGxBrB,MAAMqB,iBAAkB,EAE5BrB,MAAM5B,YAOlB,QAASkD,WAAUrL,UACf,OACI0K,SAAU,IACVE,KAAM,SAAShjB,OAAQ0jB,UACnBtL,SAAS,WACLsL,SAAS,GAAGC,YA/oB5Bd,aAAa3b,SAAW,QACxBic,eAAejc,SAAW,WAC1Bgc,UAAUhc,SAAW,YAzCrBvH,QACKC,OAAO,kBA0BPgkB,UAAU,eAAgBf,cAC1Be,UAAU,iBAAkBT,gBAC5B1hB,OAAO,MAAOyhB,WACdU,UAAU,aAAc,WAAYH,eA+rB7C,WACI,YAEA9jB,SAAQC,OAAO,qBAInB,WACI,YAMA,SAASikB,mBAAkBzH,eAAgBvF,sBAEvC,GAAI8F,cAAe9F,qBAAqBC,kBACpCG,YAAc0F,aAAa1F,WAE/BmF,gBAEC7U,MAAM,UACHJ,WAAY,mBACZ2M,aAAc,KACdO,OAAQ,OACRJ,YAAa,mCACbtL,IAAK,eACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAa7E,WAwB9D+L,kBAAkB3c,SAAW,iBAAkB,wBA1C/CvH,QACKC,OAAO,eACPka,OAAO+J,sBAsBhB,WACI,YAMA,SAASC,kBAAiB/jB,KAAMC,OAAQC,WAAYH,OAAQwY,QAAS/X,YAAaC,aAAc6M,YAAa5M,aAAcG,aAAc8I,gBAAiB/I,aAAc4X,UAmCpK,QAASwL,cACLziB,GAAG0iB,YAAa,EAIpB,QAASC,cACL3iB,GAAG0iB,YAAa,EAIpB,QAASzI,gBACLvb,OAAOoB,eAAgB,CAEvB,IAAI2T,MAAOpV,QAAQyF,KAAK9D,GAAGyT,KAE3B,OAAOxU,aAAYuX,OAAO/C,MACrB7T,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EACvBnB,WAAWikB,eAAe/iB,UAErBG,GAAG6iB,QAIJlkB,WAAWmkB,WAAW,cAHtBtkB,OAAO2E,GAAG8T,SAAS4C,KAMvBpb,KAAKsB,MAAM,2CAA4CF,UACvDR,aAAamE,QAAQ,kCACrBlE,aAAa2E,UAddhF,SAgBI,SAAS8B,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,yCAA0CA,OACrDzB,aAAayB,MAAMA,MAAMH,WArErC,GAAIZ,IAAKwE,IAGTxE,IAAG6iB,QAAmC,iBAAxBrkB,OAAOsU,QAAQnP,KAC7B3D,GAAGyT,QACHzT,GAAG0iB,YAAa,EAGhB1iB,GAAG6E,QAAU3F,aAAa2F,QAC1B7E,GAAG8E,cAAgB5F,aAAa4F,cAChC9E,GAAGgM,oBAAsBD,YAAYC,oBACrChM,GAAGwI,gBAAkBJ,gBAAgBI,gBACrCxI,GAAG4I,iBAAmBR,gBAAgBQ,iBACtC5I,GAAGqa,SAAWJ,aACdja,GAAG+iB,OAASN,WACZziB,GAAGgjB,OAASL,WAGZjkB,OAAO8G,SAAWrG,aAAaqG,SAC/B9G,OAAO+G,UAAYtG,aAAasG,UAChC/G,OAAOgH,QAAUvG,aAAauG,QAG9B,WACIhH,OAAOoB,eAAgB,EAIvBkX,QAAQ7D,aAUhBqP,iBAAiB5c,SAAW,OAAQ,SAAU,aAAc,SAAU,UAAW,cAAe,eAAgB,cAAe,eAAgB,eAAgB,kBAAmB,eAAgB,YA3ClMvH,QACKC,OAAO,eACPuH,WAAW,mBAAoB2c,qBA8ExC,WACI,YAMA,SAASS,kBAAiBnI,eAAgBvF,sBAEtC,GAAI8F,cAAe9F,qBAAqBC,kBACpCG,YAAc0F,aAAa1F,WAE/BmF,gBAEC7U,MAAM,SACHJ,WAAY,kBACZ2M,aAAc,KACdO,OAAQ,OACRJ,YAAa,iCACbtL,IAAK,QACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAahF,UAIzDpQ,MAAM,YACHoB,IAAK,eACLsL,YAAa,+CACb9M,WAAY,wBACZ2M,aAAc,KACdO,OAAQ,OACR9L,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAa/E,mBAIzDrQ,MAAM,WACH0M,YAAa,6CACb9M,WAAY,uBACZ2M,aAAc,KACdO,OAAQ,OACR1L,IAAK,eACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAa9E,kBAGzDtQ,MAAM,gBACHJ,WAAY,uBACZ2M,aAAc,KACdO,OAAQ,OACRJ,YAAa,6CACbtL,IAAK,qBACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAa9E,kBAN9D0M,iBAAiBrd,SAAW,iBAAkB,wBA5C9CvH,QACKC,OAAO,cACPka,OAAOyK,qBAsDhB,WACI,YAMA,SAASC,iBAAgBxkB,OAAQC,WAAYH,OAAQC,KAAMQ,YAAa+X,QAAS7X,aAAcG,aAAcD,aAAc4X,UA2BvH,QAASgD,gBAGL,MAFAvb,QAAOoB,eAAgB,EAEhBb,YAAYoX,MAAMrW,GAAGyT,MACvB7T,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EACvBnB,WAAWikB,eAAe/iB,UAErBG,GAAG6iB,QAIJlkB,WAAWmkB,WAAW,cAHtBtkB,OAAO2E,GAAG8T,SAAS4C,KAMvBpb,KAAKsB,MAAM,0CAA2CF,UACtDR,aAAamE,QAAQ,kBACrBlE,aAAa2E,UAddhF,SAgBI,SAAS8B,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,wCAAyCA,OACpDzB,aAAayB,MAAMA,MAAMH,WAjDrC,GAAIZ,IAAKwE,IAGTxE,IAAG6iB,QAAmC,iBAAxBrkB,OAAOsU,QAAQnP,KAC7B3D,GAAGyT,QAGHzT,GAAGqa,SAAWJ,aAGdvb,OAAO8G,SAAWrG,aAAaqG,SAC/B9G,OAAO+G,UAAYtG,aAAasG,UAChC/G,OAAOgH,QAAUvG,aAAauG,QAG9B,WACIhH,OAAOoB,eAAgB,EAIvBkX,QAAQ7D,aAoBhB+P,gBAAgBtd,SAAW,SAAU,aAAc,SAAU,OAAQ,cAAe,UAAW,eAAgB,eAAgB,eAAgB,YA7C/IvH,QACKC,OAAO,cACPuH,WAAW,kBAAmBqd,oBA0DvC,WACI,YAEA7kB,SAAQC,OAAO,0BAGnB,WACI,YAMA,SAAS6kB,qBAAoBrI,eAAgBvF,sBAEzC,GAAI8F,cAAe9F,qBAAqBC,kBACpCG,YAAc0F,aAAa1F,WAE/BmF,gBAEC7U,MAAM,YACHJ,WAAY,qBACZ2M,aAAc,KACdO,OAAQ,UACRJ,YAAa,0CACbtL,IAAK,WACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAajF,aA4B9D+M,oBAAoBvd,SAAW,iBAAkB,wBA9CjDvH,QACKC,OAAO,oBACPka,OAAO2K,wBAsBhB,WACI,YAMA,SAASC,oBAAmB/a,GAAI5J,KAAMC,OAAQC,WAAYqY,QAAS7X,aAAc4M,YAAazM,aAAc8I,gBAAiB/I,aAAcgkB,kBAAmBC,gBA+B1J,QAASC,WACL7kB,OAAOoB,eAAgB,CAEvB,IAAIie,WACAsF,kBAAkB/P,QAClBgQ,eAAehQ,QAGnB,OAAOjL,IAAG2V,IAAID,UACTne,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBrB,KAAKsB,MAAM,wCAAyCF,SAEpD,IAAI2jB,YAAa3jB,SAAS,EAC1BG,IAAGqX,SACC1T,KAAM6f,WAAW7f,KACjB9C,MAAO2iB,WAAW3iB,MAClB4iB,SAAUD,WAAWC,SACrBC,SAAUF,WAAWE,SACrB3D,KAAMyD,WAAWzD,KACjB9Z,MAAOud,WAAWvd,MAClB0d,QAASH,WAAWG,SAGxB3jB,GAAG4jB,gBAAkB/jB,SAAS,GAAG4I,SACjCzI,GAAGyT,MACC9T,MAAOE,SAAS,GAAGF,MACnB8I,SAAU5I,SAAS,GAAG4I,YApB3BJ,SAuBI,SAAStH,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,sCAAuCA,OAClD1B,aAAa0B,MAAM,0CAK/B,QAAS8iB,kBAGL,MAFAnlB,QAAOoB,eAAgB,EAEhBwjB,eAAe5P,iBAAiB1T,GAAGkM,UACrCtM,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBrB,KAAKsB,MAAM,0DAA2DF,UACtER,aAAamE,QAAQ,kCACrBlE,aAAa2E,UANdqf,SAQI,SAASviB,OACZtC,KAAKsC,MAAM,wDAAyDA,OACpEzB,aAAayB,MAAM,+CAK/B,QAASkZ,gBACLvb,OAAOoB,eAAgB,CAEvB,IAAIie,YAIJ,OAHAA,UAASvW,KAAK6b,kBAAkB7P,SAASxT,GAAGqX,UAC5C0G,SAASvW,KAAK8b,eAAe9P,SAASxT,GAAGyT,OAElCpL,GAAG2V,IAAID,UACTne,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBrB,KAAKsB,MAAM,wDAAyDF,UAEhEG,GAAGkM,UACH2X,iBAIJ7jB,GAAG4jB,gBAAkB/jB,SAAS,GAAG4I,QACjC,IAAIgL,OACA9T,MAAOE,SAAS,GAAGF,MACnBW,IAAKT,SAAS,GAAGS,IACjBqD,KAAM9D,SAAS,GAAG8D,KAClB9C,MAAOhB,SAAS,GAAGgB,MACnB4H,SAAU5I,SAAS,GAAG4I,SAG1BuO,SAAQwC,QAAQ/F,MAChB9U,WAAWikB,eAAenP,MAE1BpU,aAAamE,QAAQ,iCACrBlE,aAAa2E,UAxBdoE,SA0BI,SAAStH,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,sDAAuDA,OAClEzB,aAAayB,MAAMA,MAAMH,WA7HrC,GAAIZ,IAAKwE,IAGTxE,IAAGqX,WACHrX,GAAGyT,QACHzT,GAAGmY,gBAAkB,GACrBnY,GAAGkM,SAAW,GACdlM,GAAG4jB,gBAAkB,KAGrB5jB,GAAGgM,oBAAsBD,YAAYC,oBACrChM,GAAGqa,SAAWJ,aACdja,GAAGwI,gBAAkBJ,gBAAgBI,gBACrCxI,GAAG4I,iBAAmBR,gBAAgBQ,iBAGtClK,OAAOgH,QAAUvG,aAAauG,QAC9BhH,OAAO8G,SAAWrG,aAAaqG,SAC/B9G,OAAO+G,UAAYtG,aAAasG,UAGhC,WACI/G,OAAOoB,eAAgB,EAEvByjB,aAkBRH,mBAAmBxd,SAAW,KAAM,OAAQ,SAAU,aAAc,UAAW,eAAgB,cAAe,eAAgB,kBAAmB,eAAgB,oBAAqB,kBA/CtLvH,QACKC,OAAO,oBACPuH,WAAW,qBAAsBud,uBAsI1C,WACI,YAMA,SAASU,gBAAehJ,eAAgBvF,sBAEpC,GAAI8F,cAAe9F,qBAAqBC,kBACpCG,YAAc0F,aAAa1F,WAE/BmF,gBAEC7U,MAAM,OACHJ,WAAY,gBACZ2M,aAAc,KACdO,OAAQ,UACRJ,YAAa,gCACbtL,IAAK,UACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAa5E,WAIzDxQ,MAAM,cACH0X,SAAA,SAAA,eAAA,eAAS,SAASnf,OAAQK,aAAcO,cAChCP,aAAaoB,KAAuC,gBAAzBpB,cAAaoB,IAAIK,IAC5ClB,aAAaiT,KACT,mDACA,uBAIJ7T,OAAO2E,GAAG,SAGlBjC,QACIjB,IAAK,MAET8S,OAAQ,MACR1L,IAAK,UACLJ,MACI/D,KAAMqU,OAAO9L,UAAWkK,YAAa0F,aAAa5E,WAQ9DqN,eAAele,SAAW,iBAAkB,wBAhD5CvH,QACKC,OAAO,eACPka,OAAOsL,mBA6ChB,WACI,YAMA,SAASC,eAActlB,KAAMC,OAAQC,WAAYmY,SAAUtY,OAAQY,aAAcL,cAAeM,aAAcP,eAAgBE,mBAyB1H,QAASglB,aAGL,MAFAtlB,QAAOoB,eAAgB,EAEhBf,cAAcU,WAAWd,WAAWe,YAAYC,OAClDC,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EACvBE,GAAGikB,KAAOpkB,SAEVmB,UAEAvC,KAAKsB,MAAM,aAAcC,GAAGikB,QAP7BllB,SAWI,SAASgC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,iCAAkCA,OAC7C1B,aAAa0B,MAAM,0CAK/B,QAASC,WAGL2I,EAAE+K,QAAQ1U,GAAGikB,KAAM,SAAShkB,IAAKmc,OAE7B,MAAOtd,gBAAeuO,KAAKpN,IAAIG,KAAKC,IAC/BT,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,CACvB,IAAIM,MAAOP,QAEXG,IAAGikB,KAAK7H,OAAO7U,MAAQnH,KAEvB+B,WAAW/B,KAAMgc,OAEjB3d,KAAKsB,MAAM,mCAAoCF,YAThDf,SAWI,SAASiC,OACZrC,OAAOoB,eAAgB,MASvC,QAASqC,YAAW/B,KAAMgc,OAEtB,MAAOpd,mBAAkBqO,KAAKjN,KAAKqa,OAAO,GAAGpa,IACxCT,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,CACvB,IAAIuC,SAAUxC,SAGVyC,YAAcD,QAAQE,WAAWC,IAAI,SAASC,MAC9C,MAAOC,QAAOD,MAAME,KAAKD,SAAU,YAGnCJ,aAAYQ,MAAM,SAASC,MAC3B,MAAc,KAAPA,OAEPV,QAAQO,QAAS,EAEZN,YAAYU,KAAK,SAASD,MAC/B,MAAc,IAAPA,SAEPV,QAAQQ,QAAS,GAGrB7C,GAAGikB,KAAK7H,OAAO/Z,QAAUA,UArB1BrD,SA0BI,SAAS+B,OACZrC,OAAOoB,eAAgB,IAQnC,QAAS6H,kBAAiB1H,KACtBikB,EAAEC,SAASC,KAAKnkB,IAAIsH,MAAM/F,mBAAmBgB,IAAI,SAAS6E,IAAK+U,OAC3D,OACIiI,IAAKhd,IAAIzF,GACT+L,KAAM,QACN2W,MACIC,QAAS,QAAUtkB,IAAIsH,MAAM5G,IAAM,KAAOV,IAAIsH,MAAML,MAAQ,QAAUkV,MAAM,GAAK,IAAMnc,IAAIsH,MAAM/F,mBAAmB4E,YAOpI,QAAShD,cAAaohB,MAAOC,QACzB,MAAIphB,SAAQ,8CACR3E,OAAOoB,eAAgB,EAEhBf,cAAcuE,aAAakhB,MAAOC,QACpC7kB,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBV,aAAamE,OAEb5E,WAAWmkB,WAAW,iBAEtBrkB,KAAKsB,MAAM,4CAA6CF,UACxDR,aAAamE,QAAQ,kBATtBzE,SAWI,SAASgC,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,0CAA2CA,OACtD1B,aAAa0B,MAAM,2CAlB/B,OAwBJ,QAAS2C,YAAWtB,YAAanB,UAG7BvC,OAAOoB,eAAgB,EAEvBV,aAAamE,MAAK,EAElB,IAAIrC,SACAkB,YAAaA,YACbnB,SAAUA,SAGd6V,UAAS,WACLtY,OAAO2E,GAAG,eAAgBjC,SAC3B,KAlKP,GAAIlB,IAAKwE,IAGTxE,IAAGikB,QACHjkB,GAAGyE,YAAc,EAIjBzE,GAAG8H,aAAeH,iBAClB3H,GAAGgF,SAAW5B,aACdpD,GAAGkF,OAASxB,WAGZhF,OAAOiH,IAAI,gBAAiBqe,WAG5B,WACItlB,OAAOoB,eAAgB,EACvBkkB,eA0BRD,cAAcne,SAAW,OAAQ,SAAU,aAAc,WAAY,SAAU,eAAgB,gBAAiB,eAAgB,iBAAkB,qBAjDlJvH,QACKC,OAAO,eACPuH,WAAW,gBAAiBke,kBA2KrC,WACI,YAEA1lB,SAAQC,OAAO,UACX,eACA,iBACA,gBACA,cACA,kBACA,cACA,oBAIR,WACI,YAMA,SAASomB,kBAAiBjmB,KAAMC,OAAQimB,kBAAmBC,uBAAwBxlB,aAAcD,aAAcG,aAAcD,cA4BzH,QAASwlB,sBACLzlB,aAAaiT,KACT,uCACAqS,kBACA,GAKR,QAASI,wBACL1lB,aAAaiT,KACT,yCACAqS,kBACA,GAKR,QAASK,uBAKL,MAJArmB,QAAOoB,eAAgB,EAEvBrB,KAAKsB,MAAM,uBAEJ4kB,kBAAkBlU,OAAOzQ,GAAGY,SAC9BhB,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBV,aAAamE,OAEb9E,KAAKsB,MAAM,kDAAmDF,UAC9DR,aAAamE,QAAQ,gCAPtBmhB,SASI,SAAS5jB,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,gDAAiDA,OAC5DzB,aAAayB,MAAM,6CAK/B,QAASikB,yBAGL,MAFAtmB,QAAOoB,eAAgB,EAEhB8kB,uBAAuBnU,OAAOzQ,GAAGilB,YACnCrlB,KAAK,SAASC,UACXnB,OAAOoB,eAAgB,EAEvBV,aAAamE,OAEb9E,KAAKsB,MAAM,oDAAqDF,UAChER,aAAamE,QAAQ,oCAPtBohB,SASI,SAAS7jB,OACZrC,OAAOoB,eAAgB,EAEvBrB,KAAKsC,MAAM,kDAAmDA,OAC9DzB,aAAayB,MAAM,iDAK/B,QAASmkB,mBACLxmB,OAAOoB,eAAgB,EAEvBrB,KAAKsB,MAAM,mBAEXX,aAAamE,OA9FjB,GAAIvD,IAAKwE,IAGTxE,IAAGY,WACHZ,GAAGilB,cAGHjlB,GAAGmlB,eAAiBN,mBACpB7kB,GAAGolB,iBAAmBN,qBACtB9kB,GAAGqlB,gBAAkBN,oBACrB/kB,GAAGslB,kBAAoBN,sBACvBhlB,GAAGulB,YAAcL,gBAGjBxmB,OAAO8G,SAAWrG,aAAaqG,SAC/B9G,OAAO+G,UAAYtG,aAAasG,UAChC/G,OAAOgH,QAAUvG,aAAauG,QAG9B,WACIhH,OAAOoB,eAAgB,EACvBR,aAAa2E,WAwBrBygB,iBAAiB9e,SAAW,OAAQ,SAAU,oBAAqB,yBAA0B,eAAgB,eAAgB,eAAgB,gBAlD7IvH,QACKC,OAAO,UACPuH,WAAW,mBAAoB6e,qBAsGxC,WACI,YAEArmB,SAAQC,OAAO,cAGnB,WACI,YAMA,SAASknB,gBAAe/mB,KAAMC,OAAQC,WAAYyT,OAAQ4E,QAAS/X,YAAaG,aAAcmc,qBAAsBnS,gBAChH/J,aAAc4X,SAAU3H,SAAUwM,gBAgDlC,QAAS2J,sBAAqBhS,MAC1B9U,WAAWe,YAAc+T,KAI7B,QAASiS,qBACLzmB,YAAY6Y,SAIhB,QAAS6N,qBACL3lB,GAAG4lB,aAAc,EAIrB,QAASC,qBACL7lB,GAAG4lB,aAAc,EAIrB,QAASE,qBACLvT,MAAMK,SAAShT,KAAK,WAChB2S,MAAMF,SA+Bd,QAASgL,iBACL,MAAO9B,sBAAqBla,OACvBzB,KAAK,SAASC,UACXpB,KAAKsB,MAAM,0CAA2CF,SAEtD,IAAIoL,eAAgB7B,gBAAgBuC,MAAM9L,SAASoH,KAGnDtI,YAAW4K,WAAa0B,cAAc,GAAGP,WAP1C6Q,SASI,SAASxa,OACZtC,KAAKsC,MAAM,wCAAyCA,OACpD1B,aAAa0B,MAAM,4CAK/B,QAASglB,WAAUC,KACf,MAAO,IAAIC,OAAMD,KAtHrB,GAAIhmB,IAAKwE,IAGTxE,IAAG4lB,aAAc,EAGjB5lB,GAAG+lB,UAAYA,UACf/lB,GAAGkC,gBAAkBjD,YAAYiD,gBACjClC,GAAG6Y,aAAe5Z,YAAY4Z,aAC9B7Y,GAAGkmB,cAAgBR,kBACnB1lB,GAAGmmB,cAAgBL,kBAGnBnnB,WAAWkW,QAAUvF,SAASuF,QAC9BlW,WAAWoW,QAAUzF,SAASyF,QAC9BpW,WAAW4K,cACX5K,WAAWe,eACXf,WAAWikB,eAAiB6C,qBAC5B9mB,WAAWynB,KAAOnP,SAClBtY,WAAWmd,eAAiBA,eAGxB9b,GAAGkC,mBACC8U,QAAQvD,OACR9U,WAAWe,YAAcsX,QAAQvD,KACjChV,KAAKsB,MAAM,2CAA4CpB,WAAWe,cAM1E,WACI2d,kBAKJ,IAAI9K,OAAQH,QACRM,OAAQiT,kBACRU,aAAcR,kBACdhF,MAAOniB,OACP2T,MAAM,EACNM,YAAa,uCAiCjBjU,QAAOiH,IAAI,oBAAqB,SAASa,MAAO8f,QAASC,SAAUC,UAAWC,YAE1ElU,MAAMK,SAAShT,KAAK,WAChB2S,MAAMhP,SAIVnE,aAAamE,MAAK,KAGtB7E,OAAOiH,IAAI,sBAAuB,SAASa,MAAO8f,QAASC,SAAUC,UAAWC,YAExEH,QAAQrf,OACRjH,GAAGof,UAAYkH,QAAQrf,KAAKmY,UAAYkH,QAAQrf,KAAKmY,UAAY,GACjEpf,GAAG0mB,UAAYJ,QAAQrf,KAAKyf,UAAYJ,QAAQrf,KAAKyf,UAAY,IAIhEJ,QAAQ3I,SAAa6I,UAAU7I,SAAW6I,UAAUzT,SAAWuT,QAAQ3iB,OACxEgjB,SAASzgB,KAAK0gB,UAAYD,SAASE,gBAAgBD,UAAY,KAjD3EpB,eAAe5f,SAAW,OAAQ,SAAU,aAAc,SAAU,UAAW,cAAe,eAAgB,uBAAwB,kBAAmB,eAAgB,WAAY,WAAY,kBAnDjMvH,QACKC,OAAO,QACPuH,WAAW,iBAAkB2f,mBA+HtC,WACI,YAEAnnB,SAAQC,OAAO,QACX,aACA,mBAIR,WACI,YAEAD,SAAQC,OAAO,WACX,cACA,wBAIR,WACI,YAEAD,SAAQC,OAAO,OACX,oBACA,mBACA,2BACA,iBACA,kBACA,qBACA,iBACA,YACA,QACA,aACA,SACA,aACA,UACA,kBACA,YACA,kBACA,iBACA,cACA,gBACA,eACA,SAEA,UACA,iBACA,cACA,eACA,OAEA,UACA,OACA,cAIR,WACI,YAMA,SAASwoB,UAASnS,OAAQ1V,YAAaokB,mBAEnC1O,OAAOoS,OAIP9nB,YAAY2Z,aAER3Z,YAAYiD,kBAwCpB4kB,SAASlhB,SAAW,SAAU,cAAe,qBApD7CvH,QACKC,OAAO,OACP0oB,IAAIF,aAiBb,WACI,YAIA,SAASG,aACLnM,eACAoM,mBACAC,4BAGAA,2BAA2BC,YAAW,GACtCD,2BAA2BE,iBAAgB,GAE3CH,mBAAmBI,KACf,cACA,oCAEJJ,mBAAmBI,KACf,cACA,oCAEJJ,mBAAmBI,KAAK,SAAU,8BAClCJ,mBAAmBI,KACf,kBACA,8BAEJJ,mBAAmBI,KACf,sBACA,8BAEJJ,mBAAmBI,KAAK,WAAY,8BACpCJ,mBAAmBI,KACf,yBACA,8BAEJJ,mBAAmBI,KAAK,UAAW,mBACnCJ,mBAAmBI,KAAK,YAAa,qBACrCJ,mBAAmBI,KACf,WACA,yEAEJJ,mBAAmBI,KACf,WACA,kEAkBJxM,eAGK7U,MAAM,QACH8U,YAAU,EACVpI,YAAa,0BACbtL,IAAK,MAIRpB,MAAM,WACH8U,YAAU,EACV9T,MACIyf,UAAW,qBAEf3T,OAAQ,OACRjK,SACIuO,SAAA,sBAAS,SAAUoC,qBACf,MAAOA,qBAAoBC,wBAGnC6N,OACIrG,SACIvO,YAAa,iCAEjB5L,QACIlB,WAAY,mBACZ2M,aAAc,KACdG,YAAa,wCAEjB6U,QACI7U,YAAa,wCAEjB8U,WACI9U,YAAa,8CAKxB1M,MAAM,QACH8U,YAAU,EACV9T,MACIyf,UAAW,kBAEf3T,OAAQ,OACRjK,SACI4e,qBAAA,sBAAqB,SAAUjO,qBAC3B,MAAOA,qBAAoBG,gCAGnC2N,OACIrG,SACIvO,YAAa,8BAKxB1M,MAAM,UACH8U,YAAU,EACV9T,MACIyf,UAAW,oBAEf3T,OAAQ,OACRwU,OACIrG,SACIvO,YAAa,+BAEjB5L,QACIlB,WAAY,mBACZ2M,aAAc,KACdG,YAAa,sCAEjB6U,QACI7U,YAAa,sCAEjB8U,WACI9U,YAAa,4CAMxB1M,MAAM,aACHgB,MACIyf,UAAW,iBAEf3T,OAAQ,OACRjK,SACI6e,OAAQ,WACJ,MAAO,mBAGfJ,OACIrG,SACIvO,YAAa,gCAGrBtL,IAAK,UAGRpB,MAAM,aACHgB,MACIyf,UAAW,iBAEf3T,OAAQ,OACRjK,SACI6e,OAAQ,WACJ,MAAO,mBAGfJ,OACIrG,SACIvO,YAAa,kCAtHjCsU,YAAYrhB,SAAW,iBAAkB,qBAAsB,8BArD/DvH,QAAQC,OAAO,OAAOka,OAAOyO,gBAwLjC5oB,QAAQC,OAAO,cACdspB,SAAS,YACN/S,QAAW,eACXE,QAAW,gCACXW,UAAa,kBACbmS,OAAU,+BACV9nB,MAAS,OACT+nB,QAAW,QACXpY,eAAkB,mCAClBC,UAAa,mCACboY,mBAAsB,kBAG1B,WACI,YAEA1pB,SACKC,OAAO,OACPspB,SAAS,YACN/N,IAAK,MACL3B,KAAM,OACNhB,MAAO,QACP8Q,SAAU,WACVzP,OAAQ,WAEXqP,SAAS,kBACNK,MAAO,QACPC,KAAM,OACNnM,MAAO,UAEV5S,QAAQ,OAAA,WAAO,SAASmG,UACrB,OACIpG,SAAUoG,SAASuY,OACnBtT,SAAU,eACVD,OAAQ,aACRF,KAAM,WACN+I,KAAM,WACNhJ,WAAY,iBACZD,QAAS,cACTG,OAAQ,aACRJ,WAAY,iBACZD,MAAO,YACPkD,MAAO,YACPS,aAAc,mBACdE,YAAa,kBACbG,OAAQ,aACRjE,MAAO,YACPwE,OAAQ,aACR4P,kBAAmB,wBACnBrU,YAAa,kBACbD,aAAc,iBACdD,KAAM,WACNL,MAAO,mBAKvB,WACI,YAIA,SAASiF,QACL4P,aACAC,kBACAC,cACAC,eACAC,eACAC,iBACAC,kBACAC,eACAC,qBACAC,kBACAvZ,UAGuB,SAAnBA,SAASvP,MACTqoB,aAAaU,cAAa,GAE1BV,aAAaU,cAAa,GAI9BT,kBAAkBU,WAAW,KAC7BV,kBAAkBW,WACdC,SAAS,EACTC,aAAa,IAIjBZ,cAAca,aAAa3hB,KAAK,0BAEhC8gB,cAAca,aAAa3hB,KAAK,8BAGhCohB,qBAAqBQ,YACjBC,gBAAgB,EAChBC,SAAU,GACVC,WAAY,KAIhBlrB,QAAQmrB,OAAOjB,eAAerP,UAC1BuQ,UAAW,wBACXC,UAAW,OACX3K,MAAM,IAIV1gB,QAAQmrB,OAAOhB,eAAetP,UAC1BuQ,UAAW,OACXC,UAAW,OACX3K,MAAM,IAIV1gB,QAAQmrB,OAAOf,iBAAiBvP,UAC5BwQ,UAAW,SAIfrrB,QAAQmrB,OAAOd,kBAAkBxP,UAC7BwQ,UAAW,OACXC,OACItX,KAAM,EACN9O,KAAM,KAEVqmB,UAAW,SACXC,QAAS,UAIblB,eAAemB,cAAc,SAAUnrB,YACnC,GAAIuI,OAAQvI,WAAWgW,OAAOzN,MAC1B2N,QAAUvF,SAASuF,OACvB,OAAO3N,OACDA,MAAMP,OAAOkO,UAAY,EACrB3N,MACAA,MAAQ,MAAQ2N,QACpBA,UAKNvF,SAASyY,oBACTc,kBAAkBkB,WAAWza,SAASyY,oBA/B9CvP,OAAO5S,SAAW,eAAgB,oBAAqB,gBAAiB,iBAAkB,iBAAkB,mBAAoB,oBAAqB,iBAAkB,uBAAwB,oBAAqB,YAtDpNvH,QAAQC,OAAO,OAAOka,OAAOA,WA0FjCna,QAAQC,OAAO,OAAO0oB,KAAK,iBAAkB,SAASgD,gBAAiBA,eAAe7Z,IAAI,uCAAuC,ggKACjI6Z,eAAe7Z,IAAI,uCAAuC,4/EAC1D6Z,eAAe7Z,IAAI,0CAA0C;AAC7D6Z,eAAe7Z,IAAI,gCAAgC,uBACnD6Z,eAAe7Z,IAAI,0BAA0B,wSAC7C6Z,eAAe7Z,IAAI,8BAA8B,kjBACjD6Z,eAAe7Z,IAAI,0BAA0B,iKAC7C6Z,eAAe7Z,IAAI,uCAAuC,uiEAC1D6Z,eAAe7Z,IAAI,qCAAqC,ggKACxD6Z,eAAe7Z,IAAI,qCAAqC,ogFACxD6Z,eAAe7Z,IAAI,sCAAsC,q5GACzD6Z,eAAe7Z,IAAI,wCAAwC,wzBAC3D6Z,eAAe7Z,IAAI,yCAAyC,qsDAC5D6Z,eAAe7Z,IAAI,8BAA8B,uBACjD6Z,eAAe7Z,IAAI,gCAAgC,orFACnD6Z,eAAe7Z,IAAI,0CAA0C,6jLAC7D6Z,eAAe7Z,IAAI,iCAAiC,2kDACpD6Z,eAAe7Z,IAAI,mCAAmC;AACtD6Z,eAAe7Z,IAAI,mCAAmC,oiCACtD6Z,eAAe7Z,IAAI,qCAAqC,qqBACxD6Z,eAAe7Z,IAAI,uCAAuC,ooGAC1D6Z,eAAe7Z,IAAI,iCAAiC,m4BACpD6Z,eAAe7Z,IAAI,yCAAyC,i0HAC5D6Z,eAAe7Z,IAAI,iCAAiC,sxGACpD6Z,eAAe7Z,IAAI,mCAAmC,+hBACtD6Z,eAAe7Z,IAAI,mDAAmD,mmCACtE6Z,eAAe7Z,IAAI,+CAA+C,yuCAClE6Z,eAAe7Z,IAAI,6CAA6C,ohEAChE6Z,eAAe7Z,IAAI,wCAAwC,k8BAC3D6Z,eAAe7Z,IAAI,6DAA6D,uoIAChF6Z,eAAe7Z,IAAI,kDAAkD,qmGACrE6Z,eAAe7Z,IAAI,qEAAqE,6lFACxF6Z,eAAe7Z,IAAI,uEAAuE,ksBAC1F6Z,eAAe7Z,IAAI,sEAAsE;AACzF6Z,eAAe7Z,IAAI,wEAAwE,uaAC3F6Z,eAAe7Z,IAAI,yDAAyD","file":"scripts/app-83fe164b15.js","sourcesContent":["(function() {\n 'use strict';\n\n angular.module('public.auction', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.auction')\n .controller('ItemController', ItemController);\n\n function ItemController($state, $log, $scope, $rootScope, $filter, $stateParams, itemRepository, bidRepository, auctionRepository, authService,\n emailService, formsService, modalService, Notification, flashService, metaTagsService) {\n var vm = this;\n\n // ViewModel Properties\n vm.activePanel = -1;\n vm.bid = {};\n vm.bidForm = {};\n vm.bidFormByPhone={};\n vm.isEdit = false;\n vm.isEditByPhone = false;\n vm.isLogin = false;\n vm.isSignup = false;\n vm.item = {\n featuredImagesUrls: [],\n isBiddable: ''\n };\n vm.prevItem = null;\n vm.nextItem = null;\n vm.auction = {\n isPast: null,\n isLive: null\n };\n\n\n // ViewModel Methods\n vm.isAuthenticated = authService.isAuthenticated;\n vm.isEmail = emailService.isEmail;\n vm.isEmailUnique = emailService.isEmailUnique;\n vm.onBackClick = handleBackClick;\n vm.onCancel = handleCancel;\n vm.onCancelByPhone = handleCancelByPhone;\n vm.onEdit = handleEdit;\n vm.onLoginClick = handleLoginClick;\n vm.onSignupClick = handleSignupClick;\n vm.onSubmitBid = handleSubmitBid;\n vm.onSubmitBidByPhone = handleSubmitBidByPhone;\n vm.onGoto = handleGotoItem;\n\n // error handling utility\n $scope.hasError = formsService.hasError;\n $scope.showError = formsService.showError;\n $scope.canSave = formsService.canSave;\n\n // Event listeners\n $scope.$on('UserUpdate', getBid);\n\n (function init() {\n $scope.isDataLoading = false;\n getItem();\n })();\n\n\n // Private Properties\n var params;\n\n // Private Methods\n // getBid\n function getBid() {\n return bidRepository.listMyBids($rootScope.currentUser.email)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n $log.debug('vm.bid:\\n', vm.bid);\n\n var myBid = response.filter(function(bid) {\n return bid.item.id === vm.item._id;\n }).pop();\n\n if (myBid) {\n vm.isEdit = true;\n vm.isEditByPhone = true;\n\n vm.bid._id = myBid._id;\n vm.bid.bidamount = myBid.bidamount;\n vm.bid.lot = myBid.lot;\n vm.bid.message = myBid.message;\n vm.bid.phone = $filter('phoneUS')($rootScope.currentUser.phone);\n vm.bid.phoneBid = myBid.phoneBid;\n\n // fixme: errors out if item has been sold\n //formsService.refresh(vm.bidForm);\n }\n else {\n vm.isEdit = false;\n vm.isEditByPhone = false;\n\n }\n\n $log.debug('ItemController.getBid-success:\\n', response);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('ItemController.getBid-error:\\n', error);\n Notification.error('There was an error loading the bid.');\n });\n }\n\n // getItem\n function getItem() {\n $scope.isDataLoading = true;\n\n $log.debug('$stateParams.itemSlug', $stateParams.itemSlug);\n\n params = {\n slug: $stateParams.itemSlug,\n withPrevNext: true,\n };\n\n return itemRepository.list(params)\n .then(function(response) {\n $log.debug('ItemController.getItem-success:\\n', response);\n\n var item = response.item;\n\n vm.item = item;\n\n // add the main image to the array\n if (vm.item.itemImageUrl) {\n // rm if clause when no need to show old items with image dublicates\n var firstImage = vm.item.featuredImagesUrls[0];\n\n if (!firstImage || firstImage.xs !== vm.item.itemImageUrl) {\n var itemImageObj = {\n xs: vm.item.itemImageUrl,\n sm: vm.item.itemImageUrl,\n md: vm.item.itemImageUrl,\n lg: vm.item.itemImageUrl\n };\n\n vm.item.featuredImagesUrls.unshift(itemImageObj);\n }\n }\n\n vm.prevItem = response.prevItem;\n vm.nextItem = response.nextItem;\n\n metaTagsService.setMetaTag(vm.item);\n\n // if user is authenticated\n if (vm.isAuthenticated()) {\n getBid();\n }\n else {\n $scope.isDataLoading = false;\n }\n\n $log.debug('vm.item:\\n', vm.item);\n\n\n getAuction();\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('ItemController.getItem-error:\\n', error);\n Notification.error('There was an error loading the item.');\n });\n }\n\n function getAuction() {\n $scope.isDataLoading = true;\n\n params = {\n slug: $stateParams.auctionSlug,\n };\n\n return auctionRepository.list(params)\n .then(function(response) {\n $scope.isDataLoading = false;\n vm.auction = response;\n\n // check how much time before auction start\n var timesBefore = vm.auction.startDates.map(function(date) {\n return moment(date).diff(moment(), 'minutes');\n });\n //$log.error('timeBefore:\\n', timeBefore);\n\n // auction isPast after 8 hours\n vm.auction.isPast = false;\n vm.auction.isLive = false;\n\n if (timesBefore.every(function(time) {\n return time < -480;\n })) {\n vm.auction.isPast = true;\n }\n else if (timesBefore.some(function(time) {\n return time < 60;\n })) {\n vm.auction.isLive = true;\n }\n\n $log.debug('AuctionDetailController.getAuction-success:\\n', response);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n $log.error('AuctionDetailController.getAuction-error:\\n', error);\n Notification.error('There was an error loading the auction.');\n });\n }\n\n function handleGotoItem(item) {\n var params = {\n auctionSlug: $stateParams.auctionSlug,\n itemSlug: item.meta.slug\n };\n\n $state.go('auction-item', params);\n }\n\n // handleCancel\n function handleCancel() {\n if (confirm('Are you sure you want to cancel your bid?')) {\n $scope.isDataLoading = true;\n\n return bidRepository.deleteOneBid(vm.bid._id, vm.item._id)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n modalService.hide();\n\n $log.debug('ItemController.handleCancel-success:', response);\n Notification.success('Bid deleted.');\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('ItemController.handleCancel-error:', error);\n flashService.error('There was an error deleting the bid.');\n });\n }\n }\n\n // handleCancelByPhone\n function handleCancelByPhone() {\n if (confirm('Are you sure you want to cancel your phone request?')) {\n $scope.isDataLoading = true;\n\n return bidRepository.deleteOneBid(vm.bid._id, vm.item._id)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n modalService.hide();\n\n $log.debug('ItemController.handleCancelByPhone-success:', response);\n Notification.success('Your phone request was cancelled.');\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('ItemController.handleCancelByPhone-error:', error);\n flashService.error('There was an error cancelling the phone request.');\n });\n }\n }\n\n // handleEdit\n function handleEdit() {\n $scope.isDataLoading = true;\n\n // user's info\n vm.bid.email = $rootScope.currentUser.email;\n vm.bid.name = $filter('ucfirst')($rootScope.currentUser.name.first + ' ' + $rootScope.currentUser.name.last);\n vm.bid.phone = $filter('phoneUS')($rootScope.currentUser.phone);\n\n var bid = angular.copy(vm.bid);\n delete bid._id;\n\n return bidRepository.update(vm.bid._id, bid)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n modalService.hide();\n\n $log.debug('ItemController.handleEdit-success:', response);\n Notification.success('Bid updated!');\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('ItemController.handleEdit-error:', error);\n flashService.error('There was an error updating the bid.');\n });\n }\n\n // handleBackClick\n function handleBackClick() {\n flashService.clear();\n vm.isLogin = vm.isSignup = false;\n }\n\n // handleLoginClick\n function handleLoginClick() {\n vm.isLogin = true;\n }\n\n // handleSignupClick\n function handleSignupClick() {\n vm.isSignup = true;\n }\n\n // handleSubmitBid\n function handleSubmitBid() {\n $scope.isDataLoading = true;\n\n // user's info\n vm.bid.lot = vm.item.lot;\n vm.bid.email = $rootScope.currentUser.email;\n vm.bid.name = $filter('ucfirst')($rootScope.currentUser.name.first + ' ' + $rootScope.currentUser.name.last);\n vm.bid.phone = $filter('phoneUS')($rootScope.currentUser.phone);\n\n return itemRepository.bid(vm.item._id, vm.bid)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n modalService.hide();\n\n $log.debug('ItemController.handleSubmit-success:', response);\n Notification.success('Bid submitted!');\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('ItemController.handleSubmit-error:', error);\n flashService.error('There was an error creating the bid.');\n });\n }\n\n // handleSubmitBidByPhone\n function handleSubmitBidByPhone() {\n $scope.isDataLoading = true;\n\n $log.debug('vm.bid', vm.bid);\n\n\n // user's info\n vm.bid.lot = vm.item.lot;\n vm.bid.name = $filter('ucfirst')($rootScope.currentUser.name.first + ' ' + $rootScope.currentUser.name.last);\n vm.bid.phone = $filter('phoneUS')($rootScope.currentUser.phone);\n vm.bid.email = $rootScope.currentUser.email;\n vm.bid.bidamount = 0;\n vm.bid.phoneBid = true;\n vm.bid.message = \"CALL CUSTOMER BY PHONE\";\n\n return itemRepository.bid(vm.item._id, vm.bid)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n modalService.hide();\n\n $log.debug('ItemController.handleSubmit-success:', response);\n Notification.success('Phone bid submitted!');\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('ItemController.handleSubmit-error:', error);\n flashService.error('There was an error creating the call request.');\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.auction')\n .controller('AuctionDetailController', AuctionDetailController);\n\n function AuctionDetailController($log, $scope, $location, $state, $stateParams, $sce, auctionRepository, itemRepository, formsService,\n metaTagsService, Notification) {\n var vm = this;\n var footer = angular.element('footer');\n\n // ViewModel Properties\n vm.auction = {};\n vm.items = [];\n vm.searching = false;\n vm.social = [\n // 'facebook',\n // 'twitter',\n ];\n\n // ViewModel Methods\n vm.getAuctionItems = getAuctionItems;\n vm.onImageClick = handleImageClick;\n vm.clearSearch = handleClearSearch;\n\n // error handling utility\n $scope.hasError = formsService.hasError;\n $scope.showError = formsService.showError;\n $scope.canSave = formsService.canSave;\n $scope.$destroy = handleDestroy;\n\n\n (function init() {\n $scope.isDataLoading = false;\n\n getAuction();\n })();\n\n\n // Private Properties\n var params;\n var page = 1;\n var pagesMax = 100;\n var options;\n\n // Private Methods\n // getAuction\n function getAuction() {\n $scope.isDataLoading = true;\n\n params = {\n slug: $stateParams.auctionSlug,\n };\n\n return auctionRepository.list(params)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n if (response.state !== 'published') {\n $state.go('auction');\n return;\n }\n\n vm.auction = response;\n vm.auction.body = $sce.trustAsHtml(vm.auction.body);\n\n // check how much time before auction start\n var timesBefore = vm.auction.startDates.map(function(date) {\n return moment(date).diff(moment(), 'minutes');\n });\n //$log.error('timeBefore:\\n', timeBefore);\n\n // auction isPast after 8 hours\n if (timesBefore.length > 0 && timesBefore.every(function(time) {\n return time < -480;\n })) {\n vm.auction.isPast = true;\n }\n else if (timesBefore.some(function(time) {\n return time < 60;\n })) {\n vm.auction.isLive = true;\n }\n\n metaTagsService.setMetaTag(vm.auction);\n\n // now lets get auction items\n getAuctionItems();\n\n $log.debug('AuctionDetailController.getAuction-success:\\n', response);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('AuctionDetailController.getAuction-error:\\n', error);\n Notification.error('There was an error loading the auction.');\n });\n }\n\n $scope.$watch('vm.search', function() {\n page = 1;\n vm.items.length = 0;\n // $log.debug('vm.items:\\n', vm.items);\n // $log.debug('vm.items:\\n', vm.items);\n\n getAuctionItems();\n });\n\n // getAuctionItems\n function getAuctionItems() {\n if (!$scope.isDataLoading && page <= pagesMax) {\n $scope.isDataLoading = true;\n\n params = {\n event: vm.auction._id,\n sort: 'position',\n page: page,\n limit: $location.search().limit\n };\n\n if (vm.search) {\n $log.debug('searching');\n vm.searching = true;\n params.search = vm.search;\n }\n\n //var documentHeight = (page !== 1) ? ($('.site-content').height() + 170) : 0;\n\n return itemRepository.list(params)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n page++;\n pagesMax = response.pages.total || 1;\n footer.css('display', pagesMax > page ? 'none' : 'block');\n\n response.data.filter(function(item) {\n return item.lot && item.title && item.meta && item.itemImageUrl;\n }).map(function(item) {\n params = {\n itemSlug: item.meta.slug,\n };\n options = {\n absolute: true,\n };\n\n item.url = $state.href('auction-item', params, options);\n vm.items.push(item);\n\n return item;\n });\n $log.debug('vm.items:\\n', vm.items);\n\n\n // scroll to the top of a new items\n //$('html, body').animate({'scrollTop': documentHeight}, 1000);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('AuctionDetailController.getAuctionItems-error:\\n', error);\n Notification.error('There was an error loading the items.');\n });\n }\n }\n\n // handleDestroy\n function handleDestroy() {\n footer.css('display', 'block');\n }\n\n // handleClearSearch\n function handleClearSearch() {\n vm.search = '';\n }\n\n // handleImageClick\n function handleImageClick(item) {\n // copy properties from auction object\n item.isPast = vm.auction.isPast || false;\n item.isLive = vm.auction.isLive || false;\n\n params = {\n item: item,\n };\n\n $state.go('photos', params);\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('public.about', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.about')\n .controller('TeamController', TeamController);\n\n function TeamController($filter, $stateParams, metaTagsService) {\n var vm = this;\n\n // ViewModel Properties\n vm.person = $stateParams.person;\n metaTagsService.setMetaTag(vm.person);\n\n if (vm.person.phone) {\n vm.person.phone = $filter('phoneUS')(vm.person.phone);\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('usernameService', usernameService);\n\n function usernameService($q, $http, $log, API) {\n return {\n isUsernameValid: isUsernameValid,\n isUsernameUnique: isUsernameUnique,\n };\n\n // isUsernameValid\n function isUsernameValid(username) {\n var regexp = /^[\\S]*$/;\n return regexp.test(username);\n }\n\n // isUsernameUnique\n function isUsernameUnique(username, originalUsername) {\n return $q(function(resolve, reject) {\n if (originalUsername && username.toLowerCase() === originalUsername.toLowerCase()) {\n resolve();\n }\n else {\n return $http.get(API.BASE_URL + 'api/username/check/' + username, {})\n .then(function(response) {\n $log.debug('usernameService.isUsernameUnique-success:\\n', response);\n resolve();\n })\n .catch(function(error) {\n $log.error('usernameService.isUsernameUnique-error:\\n', error);\n reject();\n });\n }\n });\n }\n }\n})();\n\n(function () {\n \"use strict\";\n\n angular\n .module(\"app.services.utility\")\n .factory(\"taxonomyService\", taxonomyService);\n\n function taxonomyService($log, specialtiesRepository) {\n return {\n filter: filterWithSpecialty,\n group: groupCategories,\n };\n\n // filterWithSpecialty\n function filterWithSpecialty(categories) {\n return specialtiesRepository\n .list()\n .then(function (response) {\n $log.debug(\n \"MainController.filterWithSpecialty-success:\\n\",\n response\n );\n\n var catsIds = response.data.map(function (item) {\n return item.categories.map(function (o) {\n return o.id;\n });\n });\n\n var uniqCatsIds = _.uniq(_.flatten(catsIds));\n\n return categories.filter(function (category) {\n return uniqCatsIds.includes(category._id);\n });\n })\n .catch(function (error) {\n $log.error(\n \"MainController.filterWithSpecialty-error:\\n\",\n error\n );\n Notification.error(\n \"There was an error loading Specialties.\"\n );\n });\n }\n\n // groupCategories\n function groupCategories(categories) {\n var rootKey = \"root\";\n\n var groupedByParents = _.groupBy(categories, function (item) {\n return !item.parentId ? rootKey : item.parentId;\n });\n\n var catsById = _.keyBy(categories, \"_id\");\n var omitted = _.omit(groupedByParents, rootKey);\n\n _.each(omitted, function (children, parentId) {\n catsById[parentId].children = children;\n });\n _.each(catsById, function (cat) {\n cat.isParent = !_.isEmpty(cat.children);\n cat.children = _.compact(_.union(cat.children, cat.posts));\n });\n\n var catsWithLevel = _.map(\n groupedByParents[rootKey],\n function (item) {\n return assignDeepLevel(item, 0);\n }\n );\n\n sortByWeight(catsWithLevel);\n\n return catsWithLevel;\n }\n\n // sortByWeight\n function sortByWeight(items) {\n _.each(items, function (item) {\n item.weight = item.weight ? item.weight : 0;\n if (_.isEmpty(item.children)) {\n return undefined;\n }\n sortByWeight(item.children);\n });\n\n items.sort(function (a, b) {\n return a.weight > b.weight;\n });\n }\n\n // assignDeepLevel\n function assignDeepLevel(item, level) {\n _.assign(item, {\n level: level,\n });\n\n if (_.isEmpty(item.children)) {\n return item;\n }\n\n return _.assign(item, {\n children: _.map(item.children, function (nested) {\n return assignDeepLevel(nested, level + 1);\n }),\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('responseInterceptorService', responseInterceptorService);\n\n function responseInterceptorService($rootScope, $q, $log, $injector) {\n return {\n responseError: responseError,\n };\n\n function responseError(response) {\n // HANDLE 404s\n // if (response.status === 404) {\n // $injector.get('$state').go('404server');\n // }\n\n /* If not a 404, do nothing with this error.\n * This is necessary to make a `responseError`\n * interceptor a no-op. */\n return $q.reject(response);\n }\n };\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('passService', passService);\n\n function passService($q) {\n return {\n isPasswordConfirmed: isPasswordConfirmed,\n isPasswordStrong: isPasswordStrong,\n };\n\n // isPasswordConfirmed\n function isPasswordConfirmed(passwordConfirmation, password) {\n return $q(function(resolve, reject) {\n if (passwordConfirmation === password) {\n resolve();\n }\n else {\n reject();\n }\n });\n }\n\n // isPasswordStrong\n function isPasswordStrong(password) {\n var regexp = /^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{6,}$/;\n return regexp.test(password);\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('formsService', formsService);\n\n function formsService($log) {\n return {\n canSave: canSave,\n changeOutside: changeOutside,\n getDropdownOption: getDropdownOption,\n hasError: hasError,\n refresh: refresh,\n showError: showError,\n showErrorOnSubmit: showErrorOnSubmit,\n };\n\n // Notifications\n function canSave(ngFormCtrl) {\n if (ngFormCtrl) {\n return ngFormCtrl.$dirty && ngFormCtrl.$valid;\n }\n }\n function changeOutside(ngFormCtrl) {\n if (ngFormCtrl) {\n ngFormCtrl.$setDirty();\n }\n }\n function hasError(ngModelCtrl) {\n if (ngModelCtrl) {\n return ngModelCtrl.$dirty && ngModelCtrl.$invalid;\n }\n }\n function refresh(ngFormCtrl) {\n if (ngFormCtrl) {\n ngFormCtrl.$setPristine();\n ngFormCtrl.$setUntouched();\n }\n }\n function showError(ngModelCtrl, err) {\n if (ngModelCtrl) {\n return ngModelCtrl.$dirty && ngModelCtrl.$error[err];\n }\n }\n function showErrorOnSubmit(formCtrl, ngModelCtrl, err) {\n if (ngModelCtrl) {\n return ngModelCtrl.$dirty && ngModelCtrl.$error[err] && formCtrl.$submitted;\n }\n }\n\n // Form Elements\n /*\n * Returns the exact option object so that the option is reflected in the view\n * @param currentOption\n * @param options\n * @returns {*}\n */\n function getDropdownOption(currentOption, options) {\n if (options) {\n if (!currentOption || !currentOption._id) {\n currentOption = options[0];\n }\n else {\n currentOption = options.find(function(option) {\n return option._id === currentOption._id;\n });\n }\n }\n return currentOption;\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('flashService', flashService);\n\n function flashService($log, $rootScope) {\n initService();\n\n return {\n clear: clearFlashMessage,\n error: error,\n info: info,\n success: success,\n warning: warning,\n };\n\n // initService\n function initService() {\n $rootScope.$on('$stateChangeStart', function() {\n clearFlashMessage();\n });\n }\n\n // clearFlashMessage\n function clearFlashMessage() {\n var flash = $rootScope.flash;\n\n if (flash) {\n if (!flash.keepAfterLocationChange) {\n delete $rootScope.flash;\n }\n else {\n // only keep for a single location change\n flash.keepAfterLocationChange = false;\n }\n }\n }\n\n // error\n function error(message, keepAfterLocationChange) {\n $rootScope.isDataLoading = false;\n\n $rootScope.flash = {\n message: message,\n type: 'danger',\n keepAfterLocationChange: keepAfterLocationChange,\n };\n }\n\n // info\n function info(message, keepAfterLocationChange) {\n $rootScope.isDataLoading = false;\n\n $rootScope.flash = {\n message: message,\n type: 'info',\n keepAfterLocationChange: keepAfterLocationChange,\n };\n }\n\n // success\n function success(message, keepAfterLocationChange) {\n $rootScope.isDataLoading = false;\n\n $rootScope.flash = {\n message: message,\n type: 'success',\n keepAfterLocationChange: keepAfterLocationChange,\n };\n }\n\n // warning\n function warning(message, keepAfterLocationChange) {\n $rootScope.isDataLoading = false;\n\n $rootScope.flash = {\n message: message,\n type: 'warning',\n keepAfterLocationChange: keepAfterLocationChange,\n };\n }\n }\n})();\n\n// This Service is used for Global Event Broadcasting\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('errorResponseService', errorResponseService);\n\n function errorResponseService() {\n var service = {};\n\n service.getErrorMessage = getErrorMessage;\n\n return service;\n\n function parseMessage(response) {\n var extracted = /\\[(.*?)\\]/.exec(response.message);\n if (!extracted || !extracted[1]) {\n return response.message;\n }\n var message = extracted[1].replace(/\"/g, '');\n return message.charAt(0).toUpperCase() + message.slice(1);\n }\n\n function prettifyFieldName(message) {\n var spacePos = message.indexOf(' ');\n if (spacePos === -1) {\n return message;\n }\n var fieldName = message.substr(0, spacePos);\n var prettyFieldName = fieldName.match(/[A-Z][a-z]+/g).join(' ');\n return prettyFieldName + message.substr(spacePos);\n }\n\n function getErrorMessage(response, defaultMessage) {\n if (!response.validation) {\n // unrecognized, no-validation error\n return defaultMessage;\n }\n return prettifyFieldName(parseMessage(response));\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('emailService', emailService);\n\n function emailService($log, $q, authService) {\n return {\n isEmail: isEmail,\n isEmailUnique: isEmailUnique,\n };\n\n // isEmail\n function isEmail(email) {\n var regexp = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return regexp.test(email);\n }\n\n // isEmailUnique\n function isEmailUnique(email, originalEmail) {\n return $q(function(resolve, reject) {\n if (originalEmail && email === originalEmail) {\n resolve();\n }\n else {\n authService.checkEmail(email)\n .then(function(result) {\n if (result.data.length > 0) {\n reject();\n }\n else {\n resolve();\n }\n })\n .catch(function(error) {\n $log.error('emailService.isEmailUnique-error:\\n', error);\n reject();\n });\n }\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('apiHelperService', apiHelperService);\n\n function apiHelperService($log, $http, API, ENV_VARS) {\n return {\n delete: _delete,\n get: _get,\n post: _post,\n put: _put,\n sendHTTPRequest: sendHTTPRequest,\n };\n\n function sendHTTPRequest(req) {\n if (req.method === 'GET' && ENV_VARS && ENV_VARS.s3BucketDomain && ENV_VARS.cdnDomain) {\n req.url.replace(ENV_VARS.s3BucketDomain, ENV_VARS.cdnDomain);\n }\n\n return $http(req)\n .then(function(response) {\n return response.data;\n })\n .catch(function(error) {\n throw error.data;\n });\n }\n\n function _delete(url, payload) {\n return $http({\n data: payload,\n method: 'DELETE',\n url: API.BASE_URL + url,\n })\n .then(function(response) {\n return response.data;\n })\n .catch(function(error) {\n throw error.data;\n });\n }\n\n function _get(url, params) {\n return $http({\n method: 'GET',\n params: params,\n url: API.BASE_URL + url,\n })\n .then(function(response) {\n return response.data;\n })\n .catch(function(error) {\n throw error.data;\n });\n }\n\n function _post(url, payload) {\n return $http({\n data: payload,\n method: 'POST',\n url: API.BASE_URL + url,\n })\n .then(function(response) {\n return response.data;\n })\n .catch(function(error) {\n throw error.data;\n });\n }\n\n function _put(url, payload) {\n return $http({\n data: payload,\n method: 'PUT',\n url: API.BASE_URL + url,\n })\n .then(function(response) {\n return response.data;\n })\n .catch(function(error) {\n throw error.data;\n });\n }\n }\n})();\n\n'use strict';\n\n\n/**\n * This service generates all the CRUD and Association methods for a model entity. Refer to the repositories directory\n * for implementation examples.\n */\nangular.module('app.services.utility')\n .factory('restfulResourceHelper', function($log, apiHelperService) {\n return {\n /*\n * Generate the CRUD methods for a model entity.\n * @param resourceRoute: The API route for the model entity.\n */\n generateCrudCallers: function(resourceRoute) {\n return {\n list: this.generateListCaller(resourceRoute),\n find: this.generateFindCaller(resourceRoute),\n update: this.generateUpdateCaller(resourceRoute),\n create: this.generateCreateCaller(resourceRoute),\n deleteOne: this.generateDeleteOneCaller(resourceRoute),\n deleteMany: this.generateDeleteManyCaller(resourceRoute),\n };\n },\n generateListCaller: function(resourceRoute) {\n return function(params) {\n //$log.debug(resourceRoute + '.list + params: ', params);\n\n return apiHelperService.get(resourceRoute, params)\n .then(function(response) {\n //$log.debug(resourceRoute + '.list response:\\n', response);\n return response;\n })\n .catch(function(error) {\n //$log.error(resourceRoute + '.list error:\\n', error);\n throw error;\n });\n };\n },\n generateFindCaller: function(resourceRoute) {\n return function(_id, params) {\n //$log.debug(resourceRoute + '.find + _id: ', _id, ', params: ', params);\n\n return apiHelperService.get(resourceRoute + '/' + _id, params)\n .then(function(response) {\n //$log.debug(resourceRoute + '.find response:\\n', response);\n return response;\n })\n .catch(function(error) {\n //$log.error(resourceRoute + '.find error:\\n', error);\n throw error;\n });\n };\n },\n generateUpdateCaller: function(resourceRoute) {\n return function(_id, payload) {\n delete payload.createdAt;\n delete payload.updatedAt;\n delete payload.isDeleted;\n $log.debug(resourceRoute + '.update + _id: ', _id, ', payload: ', payload);\n\n return apiHelperService.put(resourceRoute + '/' + _id, payload)\n .then(function(response) {\n $log.debug(resourceRoute + '.update response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(resourceRoute + '.update error:\\n', error);\n throw error;\n });\n };\n },\n generateCreateCaller: function(resourceRoute) {\n return function(payload) {\n $log.debug(resourceRoute + '.create + payload: ', payload);\n\n return apiHelperService.post(resourceRoute, payload)\n .then(function(response) {\n $log.debug(resourceRoute + '.create response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(resourceRoute + '.create error:\\n', error);\n throw error;\n });\n };\n },\n generateDeleteOneCaller: function(resourceRoute) {\n return function(_id) {\n $log.debug(resourceRoute + '.deleteOne + _id: ', _id);\n\n return apiHelperService.delete(resourceRoute + '/' + _id)\n .then(function(response) {\n $log.debug(resourceRoute + '.delete response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.debug(resourceRoute + '.delete error:\\n', error);\n throw error;\n });\n };\n },\n generateDeleteManyCaller: function(resourceRoute) {\n return function(payload) {\n $log.debug(resourceRoute + '.deleteMany + payload', payload);\n\n return apiHelperService.delete(resourceRoute, payload)\n .then(function(response) {\n $log.debug(resourceRoute + '.delete response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.debug(resourceRoute + '.delete error:\\n', error);\n throw error;\n });\n };\n },\n /*\n * Generate the association methods for a model entity. The parameters are explained below with examples\n * using the context of a user and their shopping cart items.\n * @param ownerRoute: The API route for the owner model, Ex: user\n * @param associationName: The name of the association for the owner model, Ex: shoppingCartItems\n * @param associationRoute: The API route for the association, Ex: cart-item\n * @param childName: The name of the child/association model, Ex: storeItem\n *\n * The generated methods will correspond with the following routes:\n *\n * DELETE /user/{ownerId}/cart-item Remove multiple storeItems from a user's list of shoppingCartItems\n * GET /user/{ownerId}/cart-item Get all of the storeItems for a user\n * POST /user/{ownerId}/cart-item Add multiple storeItems to a user's list of shoppingCartItems\n * DELETE /user/{ownerId}/cart-item/{childId} Remove a single storeItem from a user's list of shoppingCartItems\n * PUT /user/{ownerId}/cart-item/{childId} Add a single storeItem to a user's list of shoppingCartItems\n */\n generateAssociationCallers: function(ownerRoute, associationName, associationRoute, childName) {\n var resourceMethodName = associationName[0].toUpperCase() + associationName.slice(1);\n var callers = {};\n callers['get' + resourceMethodName] = this.generateGetAssociationsAssociationCaller(ownerRoute, associationRoute, resourceMethodName);\n callers['addOne' + resourceMethodName] = this.generateAddOneAssociationCaller(ownerRoute, associationRoute, resourceMethodName);\n callers['removeOne' + resourceMethodName] = this.generateRemoveOneAssociationCaller(ownerRoute, associationRoute, resourceMethodName);\n callers['addMany' + resourceMethodName] = this.generateAddManyAssociationCaller(ownerRoute, associationRoute, resourceMethodName);\n callers['removeMany' + resourceMethodName] = this.generateRemoveManyAssociationCaller(ownerRoute, associationRoute, resourceMethodName);\n\n callers['flatten' + resourceMethodName] = this.generateFlattenAssociationData(associationName, childName);\n return callers;\n },\n generateGetAssociationsAssociationCaller: function(ownerRoute, associationRoute, resourceMethodName) {\n return function(ownerId, params) {\n var methodName = ownerRoute + '.get' + resourceMethodName;\n $log.debug(methodName + ' + ownerId: ', ownerId, ', params: ', params);\n\n if (!params) {\n params = {\n isDeleted: false\n };\n }\n else if (!params.isDeleted) {\n params.isDeleted = false;\n }\n\n return apiHelperService.get(ownerRoute + '/' + ownerId + '/' + associationRoute, params)\n .then(function(response) {\n $log.debug(methodName + ' response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(methodName + ' error:\\n', error);\n throw error;\n });\n };\n },\n generateAddOneAssociationCaller: function(ownerRoute, associationRoute, resourceMethodName) {\n return function(ownerId, childId, payload) {\n var methodName = ownerRoute + '.addOne' + resourceMethodName;\n $log.debug(methodName + ' + ownerId: ', ownerId, 'childId: ', childId, ', payload: ', payload);\n\n return apiHelperService.put(ownerRoute + '/' + ownerId + '/' + associationRoute + '/' + childId, payload)\n .then(function(response) {\n $log.debug(methodName + ' response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(methodName + ' error:\\n', error);\n throw error;\n });\n };\n },\n generateRemoveOneAssociationCaller: function(ownerRoute, associationRoute, resourceMethodName) {\n return function(ownerId, childId) {\n var methodName = ownerRoute + '.removeOne' + resourceMethodName;\n $log.debug(methodName + ' + ownerId: ', ownerId, 'childResource: ', associationRoute, 'childId: ', childId);\n\n return apiHelperService.delete(ownerRoute + '/' + ownerId + '/' + associationRoute + '/' + childId)\n .then(function(response) {\n $log.debug(methodName + ' response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(methodName + ' error:\\n', error);\n throw error;\n });\n };\n },\n generateAddManyAssociationCaller: function(ownerRoute, associationRoute, resourceMethodName) {\n return function(ownerId, payload) {\n var methodName = ownerRoute + '.addMany' + resourceMethodName;\n $log.debug(methodName + ' + ownerId: ', ownerId, ', payload: ', payload);\n\n return apiHelperService.post(ownerRoute + '/' + ownerId + '/' + associationRoute, payload)\n .then(function(response) {\n $log.debug(methodName + ' response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(methodName + ' error:\\n', error);\n throw error;\n });\n };\n },\n generateRemoveManyAssociationCaller: function(ownerRoute, associationRoute, resourceMethodName) {\n return function(ownerId, payload) {\n var methodName = ownerRoute + '.removeMany' + resourceMethodName;\n $log.debug(methodName + ' + ownerId: ', ownerId, ', payload: ', payload);\n\n return apiHelperService.delete(ownerRoute + '/' + ownerId + '/' + associationRoute, payload)\n .then(function(response) {\n $log.debug(methodName + ' response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(methodName + ' error:\\n', error);\n throw error;\n });\n };\n },\n /*\n * Flattens MANY_MANY relationships so just the associated object is returned and no extra fields\n * @returns {Function}\n */\n generateFlattenAssociationData: function(associationName, childName) {\n return function(data) {\n if (!data) {\n return [];\n }\n return data.map(function(object) {\n if (childName) {\n return object[childName];\n }\n else {\n return object[associationName];\n }\n });\n };\n },\n };\n });\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('panelService', panelService);\n\n function panelService($log, $q, $state, $aside) {\n var aside;\n\n return {\n show: show,\n hide: hide,\n };\n\n // SHOW PANEL (ASIDE)\n function show(templatePath, controller) {\n if (!templatePath || !controller) {\n return $q.reject();\n }\n if (aside) {\n $log.debug(\n 'help.panel.service: instance already exists - multiple requests?'\n );\n return $q.reject();\n }\n\n aside = $aside({\n controller: controller,\n controllerAs: 'vm',\n keyboard: true,\n onHide: hide,\n show: false,\n templateUrl: templatePath\n });\n\n return aside.$promise.then(aside.show);\n\n }\n\n // CLOSE PANEL (ASIDE)\n function hide(params) {\n if (!aside) {\n return;\n }\n //$log.debug('help.modal.service: hide');\n aside.hide();\n aside = null;\n\n if (params && params.redirect) {\n $log.debug('REDIRECTING TO:', params.redirect);\n $state.go(params.redirect);\n }\n else {\n $state.go($state.current.parent);\n }\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.utility')\n .factory('modalService', modalService);\n\n function modalService($log, $q, $state, $modal) {\n var modal;\n var redirect;\n\n return {\n hide: hide,\n show: show,\n };\n\n\n // hide\n function hide(params) {\n if (modal) {\n redirect = (typeof params !== 'undefined') ? params : redirect;\n\n modal.$promise.then(modal.hide);\n }\n }\n\n // on hide panel event\n function handlePanelHide() {\n if (modal) {\n modal.destroy();\n\n // check if redirect should be\n if (redirect) {\n $state.go($state.current.parent);\n }\n }\n }\n\n // show\n function show(template, controller, params) {\n if (!template || !controller) {\n return $q.reject();\n }\n\n // if we change from modal to modal, we can skip animation\n if (modal) {\n modal.destroy();\n }\n\n modal = $modal({\n controller: controller,\n controllerAs: 'vm',\n keyboard: false,\n onHide: handlePanelHide,\n show: false,\n templateUrl: template\n });\n\n redirect = (typeof params !== 'undefined') ? params : true;\n\n return modal.$promise.then(modal.show);\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.repository', []);\n})();\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('userRepository', function($log, API, apiHelperService) {\n return _.merge(\n {\n getMy: function() {\n $log.debug(API.USERS + '.getMy + params: ');\n\n return apiHelperService.get(API.USERS + '/my')\n .then(function(response) {\n $log.debug(API.USERS + '.getMy response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(API.USERS + '.getMy error:\\n', error);\n throw error;\n });\n },\n },\n {\n updateMy: function(user) {\n $log.debug(API.USERS + '.updateMy + params: ', user);\n\n return apiHelperService.put(API.USERS + '/my', user)\n .then(function(response) {\n $log.debug(API.USERS + '.updateMy response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(API.USERS + '.updateMy error:\\n', error);\n throw error;\n });\n },\n },\n {\n changeMyPassword: function(password) {\n $log.debug(API.USERS + '.changeMyPassword + params: ');\n\n return apiHelperService.put(API.USERS + '/my/password', {password: password})\n .then(function(response) {\n $log.debug(API.USERS + '.changeMyPassword response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(API.USERS + '.changeMyPassword error:\\n', error);\n throw error;\n });\n },\n }\n );\n });\n})();\n\n/*\n ** Factory for CRUDing API.USERS\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('teamRepository', function(API, restfulResourceHelper) {\n return _.merge(restfulResourceHelper.generateCrudCallers(API.TEAM));\n });\n})();\n\n/*\n ** Factory for CRUDing API.TEAM\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('subscriptionRepository', function(API, restfulResourceHelper) {\n return _.merge(restfulResourceHelper.generateCrudCallers(API.SUBSCRIPTION));\n });\n})();\n\n/*\n ** Factory for CRUDing API.SUBSCRIPTION\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('specialtiesRepository', function(API, restfulResourceHelper) {\n return _.merge(restfulResourceHelper.generateCrudCallers(API.SPECIALTIES));\n });\n})();\n\n/*\n ** Factory for CRUDing API.SPECIALTIES\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('pagesRepository', function(API, restfulResourceHelper) {\n return _.merge(restfulResourceHelper.generateCrudCallers(API.PAGES));\n });\n})();\n\n/*\n ** Factory for CRUDing API.PAGES\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('itemRepository', function($log, API, restfulResourceHelper, apiHelperService) {\n return _.merge(\n restfulResourceHelper.generateCrudCallers(API.ITEMS),\n {\n bid: function(_id, params) {\n $log.debug(API.ITEMS + '.bid + _id', _id, ' + params: ', params);\n\n return apiHelperService.post(API.ITEMS + '/' + _id + '/bid', params)\n .then(function(response) {\n $log.debug(API.ITEMS + '.bid response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(API.ITEMS + '.bid error:\\n', error);\n throw error;\n });\n },\n }\n );\n });\n})();\n\n/*\n ** Factory for CRUDing API.ITEMS\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('highlightRepository', function(API, restfulResourceHelper) {\n return _.merge(restfulResourceHelper.generateCrudCallers(API.HIGHLIGHTS));\n });\n})();\n\n/*\n ** Factory for CRUDing API.HIGHLIGHTS\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('contactRepository', function(API, restfulResourceHelper) {\n return _.merge(restfulResourceHelper.generateCrudCallers(API.CONTACT));\n });\n})();\n\n/*\n ** Factory for CRUDing API.CONTACT\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('categoriesRepository', function(API, restfulResourceHelper) {\n return _.merge(restfulResourceHelper.generateCrudCallers(API.CATEGORIES));\n });\n})();\n\n/*\n ** Factory for CRUDing API.CATEGORIES\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('bidRepository', function($log, API, restfulResourceHelper, apiHelperService) {\n return _.merge(\n restfulResourceHelper.generateCrudCallers(API.BIDS),\n {\n deleteOneBid: restfulResourceHelper.generateRemoveOneAssociationCaller(API.BIDS, 'item'),\n listMyBids: function(email, params) {\n $log.debug(API.BIDS + '.' + email + '.user + params: ', params);\n\n return apiHelperService.get(API.BIDS + '/' + email + '/user', params)\n .then(function(response) {\n $log.debug(API.BIDS + '.' + email + '.user response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(API.BIDS + '.' + email + '.user error:\\n', error);\n throw error;\n });\n },\n });\n });\n})();\n\n/*\n ** Factory for CRUDing API.BIDS\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('auctionRepository', function(API, restfulResourceHelper) {\n return _.merge(restfulResourceHelper.generateCrudCallers(API.EVENTS));\n });\n})();\n\n/*\n ** Factory for CRUDing API.EVENTS\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('assetsRepository', function(API, restfulResourceHelper) {\n return _.merge(restfulResourceHelper.generateCrudCallers(API.ASSETS));\n });\n})();\n\n/*\n ** Factory for CRUDing API.ASSETS\n */\n\n(function() {\n 'use strict';\n\n /**\n * NOTE: Refer to the \"generateAssociationCallers\" docs (in restful-resource-utility.service.js) for insight into\n * its parameters.\n */\n\n angular\n .module('app.services.repository')\n .factory('accountRepository', function($log, API, apiHelperService) {\n return _.merge(\n {\n getMy: function() {\n $log.debug(API.ACCOUNTS + '.getMy');\n\n return apiHelperService.get(API.ACCOUNTS + '/my')\n .then(function(response) {\n $log.debug(API.ACCOUNTS + '.getMy response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(API.ACCOUNTS + '.getMy error:\\n', error);\n throw error;\n });\n },\n },\n {\n updateMy: function(user) {\n $log.debug(API.ACCOUNTS + '.updateMy + params: ', user);\n\n return apiHelperService.put(API.ACCOUNTS + '/my', user)\n .then(function(response) {\n $log.debug(API.ACCOUNTS + '.updateMy response:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error(API.ACCOUNTS + '.updateMy error:\\n', error);\n throw error;\n });\n },\n },\n {\n updateCache: function(limit, page, sort) {\n $log.debug(API.ACCOUNTS + '.updateCache: ');\n\n var accounts = {};\n\n return apiHelperService.get(API.ACCOUNTS)\n .then(function(response) {\n $log.debug(API.USERS + '.updateCache success:\\n', response);\n\n response.data.forEach(function(a) {\n accounts[a._id] = a;\n });\n\n return response;\n })\n .catch(function(error) {\n $log.error(API.USERS + '.updateCache error:\\n', error);\n throw error;\n });\n },\n }\n );\n });\n})();\n\n/*\n ** Factory for CRUDing API.ACCOUNTS\n */\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.metatags', []);\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.metatags')\n .factory('metaTagsService', metaTagsService);\n\n function metaTagsService(ngMeta, $location, ENV_VARS) {\n return {\n setMetaTag: setMetaTag,\n };\n\n // setMetaTag\n function setMetaTag(obj, type) {\n var title = obj.meta.title ? obj.meta.title + ' | ' + ENV_VARS.appName : ENV_VARS.appName;\n var description = obj.meta.description || ENV_VARS.appDesc;\n var imageUrl = obj.headerUrl || obj.eventImageUrl || obj.itemImageUrl || obj.imageUrl || obj.mainImage;\n\n ngMeta.setTitle(title);\n ngMeta.setTag('description', description);\n ngMeta.setTag('headerImage', imageUrl);\n\n ngMeta.setTag('og:title', title);\n ngMeta.setTag('og:description', description);\n ngMeta.setTag('og:image', imageUrl);\n ngMeta.setTag('og:url', $location.absUrl());\n\n if (type) {\n ngMeta.setTag('og:type', type);\n }\n else {\n ngMeta.setTag('og:type', 'website');\n }\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.metatags')\n .provider('metaTagsData', metaTagsDataProvider);\n\n function metaTagsDataProvider(ENV_VARS) {\n\n this.getMetaTagsData = function() {\n var domain = 'https://' + ENV_VARS.appDomain;\n\n var defaultMeta = {\n 'description': ENV_VARS.appDesc,\n 'headerImage': domain + '/assets/images/logo.svg',\n\n 'og:title': ENV_VARS.appName,\n 'og:image': domain + '/assets/images/logo.svg',\n 'og:url': domain,\n 'og:description': ENV_VARS.appDesc,\n 'og:type': 'website',\n };\n\n return {\n defaultMeta: defaultMeta,\n auctions: {\n 'title': 'Auctions',\n 'description': 'Upcoming Auctions, Next Auction Coming Soon, Past Auctions',\n 'og:title': 'Auctions | ' + ENV_VARS.appName,\n 'og:description': 'Upcoming Auctions, Next Auction Coming Soon, Past Auctions',\n 'og:image': domain + '/assets/images/hero-paddle.jpg',\n 'og:url': domain + '/auctions'\n },\n directions: {\n 'title': 'Directions to Vogt auction',\n 'description': \"We'll show you the way! Vogt Auction Galleries is located at: 7233 Blanco Road in San Antonio, Texas. Hours: Monday-Friday 10am-6pm, Phone: (210) 822-6155, Fax: (210) 821-5821\",\n 'og:title': 'Directions to Vogt auction | ' + ENV_VARS.appName,\n 'og:description': \"We'll show you the way! Vogt Auction Galleries is located at: 7233 Blanco Road in San Antonio, Texas. Hours: Monday-Friday 10am-6pm, Phone: (210) 822-6155, Fax: (210) 821-5821\",\n 'og:image': domain + '/assets/images/hero-directions.jpg',\n 'og:url': domain + '/directions'\n },\n settings: {\n 'title': 'Settings',\n 'og:title': 'Settings | ' + ENV_VARS.appName,\n },\n login: {\n 'title': 'Login',\n 'og:title': 'Login | ' + ENV_VARS.appName,\n },\n forgotpassword: {\n 'title': 'Forgot Password',\n 'og:title': 'Forgot Password | ' + ENV_VARS.appName,\n },\n resetpassword: {\n 'title': 'Reset Password',\n 'og:title': 'Reset Password | ' + ENV_VARS.appName,\n },\n signup: {\n 'title': 'Sign Up',\n 'og:title': 'Sign Up | ' + ENV_VARS.appName,\n },\n mybids: {\n 'title': 'My Bids',\n 'og:title': 'My Bids | ' + ENV_VARS.appName,\n },\n blog: {\n 'title': 'Blog',\n 'og:title': 'Blog | ' + ENV_VARS.appName,\n },\n about: {\n 'title': 'About us',\n 'description': \"San Antonio's trusted estates leader. We’re the leading appraisal and auction house in our region, selling more than $135,000,000 in our award-winning 43 year history. We specialize in the appraisal and sale of antique furniture, Texan & European art, decorative arts, rugs, folk art, jewelry, coins, and sterling silver. We hold weekly & specialized auctions at our central San Antonio, Texas auction house drawing hundreds of bidders to each event.\",\n\n 'og:title': 'About us | ' + ENV_VARS.appName,\n 'og:description': \"San Antonio's trusted estates leader. We’re the leading appraisal and auction house in our region, selling more than $135,000,000 in our award-winning 43 year history. We specialize in the appraisal and sale of antique furniture, Texan & European art, decorative arts, rugs, folk art, jewelry, coins, and sterling silver. We hold weekly & specialized auctions at our central San Antonio, Texas auction house drawing hundreds of bidders to each event.\",\n 'og:url': domain + '/about'\n },\n };\n };\n\n this.$get = function() {};\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.auth', []);\n})();\n\n// Based loosely around work by Witold Szczerba - https://github.com/witoldsz/angular-http-auth\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.auth')\n .factory('authService', authService);\n\n function authService($log, $timeout, $q, $http, $state, localStorageService, Notification, Session, API, REDIRECT) {\n return {\n login: login,\n loginForgot: loginForgot,\n loginReset: loginReset,\n logout: logout,\n signup: signup,\n checkEmail: checkEmail,\n getSession: getSession,\n isAuthenticated: isAuthenticated,\n isAuthorized: isAuthorized,\n };\n\n\n // login\n function login(user) {\n return $http.post(API.BASE_URL + API.LOGIN, {\n username: user.username,\n password: user.password\n })\n .then(function(response) {\n $log.debug('authService.login-success:', response.data);\n\n // EXPL: login successful if there's a user in the response\n if (response.data.session) {\n var session = angular.copy(response.data);\n var account = angular.copy(response.data.user.account);\n var user = angular.copy(response.data.user);\n var role = Object.keys(response.data.user.roles)[0];\n\n delete session.user;\n\n session.role = role;\n session.user = {\n email: user.email,\n _id: user._id,\n name: account.name,\n phone: account.phone,\n username: user.username\n };\n\n Session.create(session);\n }\n else {\n throw new Error('The response did not contain a user.');\n }\n\n return session.user;\n })\n .catch(function(error) {\n $log.error('authService.login-error:', error);\n throw error.data;\n });\n }\n\n // login forgot\n function loginForgot(email) {\n return $http.post(API.BASE_URL + API.LOGIN_FORGOT, {\n email: email\n })\n .then(function(response) {\n $log.debug('authService.loginForgot-success:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error('authService.loginForgot-error:\\n', error);\n throw error.data;\n });\n }\n\n // login reset\n function loginReset(data) {\n return $http.post(API.BASE_URL + API.LOGIN_RESET, data)\n .then(function(response) {\n $log.debug('authService.loginReset-success:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error('authService.loginReset-error:\\n', error);\n throw error.data;\n });\n }\n\n // logout\n function logout() {\n // log user out if they exist in localstorage\n if (localStorageService.get('session')) {\n Session.deprecated = true;\n\n return $http.delete(API.BASE_URL + API.LOGOUT)\n .then(function(response) {\n // call singleton to wipe session\n Session.destroy();\n // direct call to null token so user is unAuthenticated\n // to pass route resolve on login route\n Session.authHeader = null;\n Session.deprecated = false;\n\n // messaging\n $log.debug('authService.logout-success:', response);\n\n // redirect\n if ($state.includes('account')) {\n $state.go(REDIRECT.HOME);\n }\n })\n .catch(function(error) {\n // failure\n $log.error('authService.logout-error:', error);\n\n // call singleton to wipe session\n Session.destroy();\n // direct call to null token so user is unAuthenticated\n // to pass route resolve on login route\n Session.authHeader = null;\n\n // redirect\n if ($state.includes('account')) {\n $state.go(REDIRECT.HOME);\n }\n });\n }\n else {\n $log.debug('authService.logout: No session exists.');\n // redirect\n if ($state.includes('account')) {\n $state.go(REDIRECT.HOME);\n }\n }\n }\n\n // signup\n function signup(data) {\n delete data.confirmPassword;\n\n var deferred = $q.defer();\n var promise = $http.post(API.BASE_URL + API.SIGNUP, data);\n\n // EXPL: use a timeout to delay activation response for better user experience\n $timeout(function() {\n promise\n .then(function(response) {\n $log.debug('authService.signup-success:\\n', response);\n\n if (response.data.session) {\n var session = angular.copy(response.data);\n var account = angular.copy(response.data.user.roles.account);\n var user = angular.copy(response.data.user);\n var phone = angular.copy(response.config.data.phone);\n var role = Object.keys(response.data.user.roles)[0];\n\n delete session.user;\n\n $log.debug('authService.account:\\n', account);\n\n session.role = role;\n session.user = {\n email: user.email,\n _id: user._id,\n phone: phone,\n username: user.username\n };\n\n var firstName = account.name.split(' ').slice(0, -1).join(' ');\n var lastName = account.name.split(' ').slice(-1).join(' ');\n\n session.user.name = {\n first: firstName,\n last: lastName,\n };\n\n $log.debug('authService.session:\\n', session);\n\n Session.create(session);\n }\n else {\n throw new Error('The response did not contain a user.');\n }\n\n deferred.resolve(session.user);\n })\n .catch(function(error) {\n $log.error('authService.signup-error:\\n', error);\n deferred.reject(error.data);\n });\n }, 1000);\n\n return deferred.promise;\n }\n\n // check email\n function checkEmail(email) {\n return $http.get(API.BASE_URL + API.USERS + '/' + email + '/search', {})\n .then(function(response) {\n $log.debug('authService.checkEmail-success:\\n', response);\n return response;\n })\n .catch(function(error) {\n $log.error('authService.checkEmail-error:\\n', error);\n throw error.data;\n });\n }\n\n // get existing session\n function getSession() {\n // get user from localstorage\n if (localStorageService.get('session')) {\n\n $log.debug('authService.getSession-session exists');\n\n // update session with local storage\n Session.update();\n }\n else {\n $log.debug('authService.getSession-NO session exists');\n }\n }\n\n // is authenticated\n function isAuthenticated() {\n return !!Session.authHeader && !Session.deprecated;\n }\n\n // is authorized\n // pass role name to check against allowed from backend\n function isAuthorized(authorizedRoles) {\n if (!angular.isArray(authorizedRoles)) {\n // converts if no brackets around role name in the route\n authorizedRoles = [authorizedRoles];\n }\n\n // if user is authed with session, convert roles object to array to be searched\n var userRole = Session.role; // ES6 - works only in modern browsers\n\n // compare the two role sets to see if we allow access to the route\n var foundRole = authorizedRoles.indexOf(userRole);\n\n return (isAuthenticated() && foundRole > -1);\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.auth')\n .factory('Session', Session);\n\n function Session($log, $http, localStorageService) {\n var session = {\n create: create,\n destroy: destroy,\n setUser: setUser,\n update: update,\n };\n\n return session;\n\n function create(obj) {\n // add jwt token to auth header for all requests made by the $http service\n $http.defaults.headers.common.Authorization = obj.authHeader;\n\n // FUTURE: determine jwt expire time\n // var hoursToExpireTokenIn = 4;\n // var tokenExpiry = new Date(obj.time);\n // tokenExpiry.setHours(tokenExpiry.getHours() + hoursToExpireTokenIn);\n\n // save vars to keep user logged in between page refreshes\n localStorageService.set('session', {\n user: obj.user,\n role: obj.role,\n authHeader: obj.authHeader\n });\n\n // set vars for session\n session.user = obj.user;\n session.role = obj.role;\n session.authHeader = obj.authHeader;\n session.deprecated = false;\n\n $log.debug('Session created:\\n', session);\n }\n\n function destroy() {\n $log.debug('Session.destroy: clearing localstorage');\n // remove jwt token from header\n $http.defaults.headers.common.Authorization = '';\n // remove user from local storage and clear http auth header\n localStorageService.remove('session');\n }\n\n function setUser(user) {\n session.user = user;\n localStorageService.set('session', session);\n }\n\n function update() {\n // add jwt token to auth header for all requests made by the $http service\n $http.defaults.headers.common.Authorization = localStorageService.get('session').authHeader;\n\n // set vars for session on page refresh\n session.user = localStorageService.get('session').user;\n session.role = localStorageService.get('session').role;\n session.authHeader = localStorageService.get('session').authHeader;\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.auth')\n .factory('authSecurityService', authSecurityService);\n\n function authSecurityService($log, $timeout, $state, $q, authService, Notification, REDIRECT) {\n return {\n requireAccountUser: requireAccountUser,\n requireAuthenticatedUser: requireAuthenticatedUser,\n requireUnauthenticatedUser: requireUnauthenticatedUser\n };\n\n // SECURITY: ADMIN\n function requireAccountUser() {\n var defer = $q.defer();\n var authorizedRoles = ['account'];\n\n // check if user has account role\n if (authService.isAuthorized(authorizedRoles)) {\n // user is authenticated and has the correct role - let them pass\n $log.debug('auth.security: requireAccountUser: user has account role - lets resolve');\n\n defer.resolve();\n }\n else if (authService.isAuthenticated()) {\n // user is authenticated and does not have the account role - redirect home\n $log.debug('auth.security: requireAccountUser: user DOES NOT HAVE account role - lets reject');\n\n // must be wrapped with timeout for async or will hang\n $timeout(function() {\n authService.logout();\n $state.go(REDIRECT.LOGIN);\n Notification.warning({message: 'You don\\'t have the correct role to log in or access this area. Please try a different account.', title: 'Not Authorized'});\n\n });\n defer.reject();\n }\n else {\n $log.debug('auth.security: requireAccountUser: user is NOT AUTHED and DOES NOT HAVE account role - lets reject');\n // user is not authenticated (therefore doesnt have a role)\n\n // must be wrapped with timeout for async or will hang\n $timeout(function() {\n $log.debug('auth.security: ATTEMPTING REDIRECT TO LOGIN');\n $state.go(REDIRECT.LOGIN);\n Notification.warning({message: 'You don\\'t have the correct role to log in or access this area. Please try a different account.', title: 'Not Authorized'});\n });\n\n defer.reject();\n }\n\n return defer.promise;\n }\n\n // SECURITY: AUTHENTICATED\n function requireAuthenticatedUser() {\n var defer = $q.defer();\n\n // check if user is authenticated\n if (authService.isAuthenticated()) {\n // user is authenticated and does not have the account role - redirect home\n $log.debug('auth.security: requireAuthenticatedUser: user is authenitcated-resolve');\n defer.resolve();\n }\n else {\n $log.debug('auth.security: requireAuthenticatedUser: user is not authenitcated');\n\n $timeout(function() {\n $state.go(REDIRECT.LOGIN);\n });\n defer.reject();\n }\n return defer.promise;\n }\n\n // SECURITY: UNAUTHENTICATED\n function requireUnauthenticatedUser() {\n var defer = $q.defer();\n\n if (authService.isAuthenticated()) {\n // user is authenticated - dont let them access the requested page - redirect\n $log.debug('auth.security: requireUnauthenticatedUser-redirect');\n Notification.warning('You\\'re Authenticated.');\n\n // must be wrapped with timeout for async or will hang\n $timeout(function() {\n $state.go(REDIRECT.BID);\n });\n defer.reject();\n }\n else {\n $log.debug('auth.security: requireUnauthenticatedUser-resolve', $state);\n defer.resolve();\n }\n return defer.promise;\n }\n }\n})();\n\n// This service provides guard methods to support AngularJS routes.\n// You can add them as resolves to routes to require authorization levels before allowing a route change to complete\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services.auth')\n .factory('authInterceptorService', authInterceptorService);\n\n function authInterceptorService($q, $log, $injector, REDIRECT) {\n return {\n responseError: responseError\n };\n\n function responseError(response) {\n var Session = $injector.get('Session');\n var $state = $injector.get('$state');\n\n // 401 UNAUTHORIZED CAUGHT - No Valid Auth Credentials OR Session expired\n if (response.status === 401) {\n $log.debug('authInterceptor.service: 401: response:', response);\n\n // call singleton to wipe session\n Session.destroy();\n // direct call to null token so user is unAuthenticated\n // to pass route resolve on login route\n Session.authHeader = null;\n\n $state.go(REDIRECT.LOGIN);\n }\n\n /* If not a 401, do nothing with this error.\n * This is necessary to make a `responseError`\n * interceptor a no-op. */\n return $q.reject(response);\n }\n };\n\n})();\n\n// This http interceptor listens for 401 authentication failures\n// Based loosely around work by Witold Szczerba - https://github.com/witoldsz/angular-http-auth\n\n(function() {\n 'use strict';\n\n angular.module('auth.login', []);\n})();\n\n\n(function() {\n 'use strict';\n\n angular\n .module('auth.login')\n .controller('LoginResetController', LoginResetController);\n\n function LoginResetController($scope, $log, $location, Session, authService, passService, flashService, formsService) {\n var vm = this;\n\n $log.debug('LoginResetController *** GOT HERE ****');\n\n\n // ViewModel Properties\n vm.password = '';\n vm.confirmPassword = '';\n vm.success = false;\n vm.token = '';\n vm.valid = false;\n\n // ViewModel Methods\n vm.isPasswordConfirmed = passService.isPasswordConfirmed;\n vm.onSubmit = handleSubmit;\n\n // error handling utility\n $scope.hasError = formsService.hasError;\n $scope.showError = formsService.showError;\n $scope.canSave = formsService.canSave;\n\n\n (function init() {\n // reset login status - ensure user is logged out on controller load\n // user should never get to /activate-account when authenticated - this is precaution\n Session.destroy();\n Session.token = null;\n\n // if the user was directed here via a link with a key, then activate their account\n if ($location.search().token) {\n vm.valid = true;\n vm.token = $location.search().token;\n }\n else {\n $log.error('LoginResetController.init-error:', 'no token');\n flashService.error('The link you used did not contain a token. Please click on the link in your email to ' +\n 'reset your password, or proceed to the login page to request a new email.');\n }\n })();\n\n\n // Private Methods\n // handleSubmit\n function handleSubmit() {\n $scope.isDataLoading = true;\n\n return authService.loginReset({\n token: vm.token,\n password: vm.password\n })\n .then(function(response) {\n $scope.isDataLoading = false;\n\n $scope.resetForm.$setPristine();\n\n vm.user = {};\n vm.success = true;\n\n flashService.success('Your password has been reset. Please login to confirm.');\n $log.debug('LoginResetController.resetPassword-success:', response);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n vm.valid = false;\n\n if (error.message === 'Invalid email or key.') {\n flashService.error('The token in your email link has expired, proceed to the login page to request a new email.');\n }\n else {\n flashService.error('There was an error during the activation process, please try again.');\n }\n\n $log.error('LoginResetController.resetPassword-error:', error);\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('auth.login')\n .controller('LoginForgotController', LoginForgotController);\n\n function LoginForgotController($scope, $log, authService, emailService, flashService, formsService) {\n var vm = this;\n\n // ViewModel Properties\n vm.email = '';\n vm.success = false;\n\n // ViewModel Methods\n vm.isEmail = emailService.isEmail;\n vm.onSubmit = handleSubmit;\n\n // error handling utility\n $scope.hasError = formsService.hasError;\n $scope.showError = formsService.showError;\n $scope.canSave = formsService.canSave;\n\n\n // Private Methods\n // handleSubmit\n function handleSubmit() {\n $scope.isDataLoading = true;\n\n return authService.loginForgot(vm.email)\n .then(function(response) {\n $scope.loginForgotForm.$setPristine();\n\n vm.email = '';\n vm.success = true;\n\n $log.debug('loginForgot.controller-success:', response);\n flashService.info('If an account matched that address, an email will be sent with instructions.');\n }, function(error) {\n $log.error('loginForgot.controller-error:', error);\n flashService.error('Error resetting your account, please try again.');\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('account.bid', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('account.bid')\n .controller('BidPhotosController', BidPhotosController);\n\n function BidPhotosController($state, $timeout, $log, $scope, $rootScope, $stateParams, modalService, itemRepository,\n auctionRepository, bidRepository, Notification) {\n var vm = this;\n\n // ViewModel Properties\n vm.auction = {};\n vm.bid = $stateParams.bid;\n vm.bid.item.featuredImagesUrls = [];\n vm.photoIndex = 0;\n\n // ViewModel Methods\n vm.onView = handleView;\n\n\n (function init() {\n $scope.isDataLoading = false;\n getItem();\n })();\n\n\n // Private Methods\n\n // getItem\n function getItem() {\n $scope.isDataLoading = true;\n\n return itemRepository.find(vm.bid.item.id)\n .then(function(response) {\n vm.bid.item = response;\n\n // add the main image to the array\n if (vm.bid.item.itemImageUrl) {\n vm.bid.item.featuredImagesUrls.unshift(vm.bid.item.itemImageUrl);\n }\n\n getAuction();\n\n $log.debug('BidPhotosController.getItem-success:\\n', response);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('BidPhotosController.getItem-error:\\n', error);\n Notification.error('There was an error loading the item.');\n });\n }\n\n // getAuction\n function getAuction() {\n $log.debug('vm.bid.item:\\n', vm.bid.item);\n\n return auctionRepository.find(vm.bid.item.events[0].id)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n vm.auction = response;\n\n $log.debug('BidPhotosController.getAuction-success:\\n', response);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('BidPhotosController.getAuction-error:\\n', error);\n Notification.error('There was an error loading the auction.');\n });\n }\n\n\n // handleView\n function handleView() {\n modalService.hide(false);\n\n var params = {\n auctionSlug: vm.auction.meta.slug\n };\n\n $timeout(function() {\n $state.go('auction-detail', params);\n }, 500);\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('public.pages', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.pages')\n .config(pagesRouteConfig);\n\n function pagesRouteConfig($stateProvider) {\n $stateProvider\n\n .state('pages', {\n abstract: true,\n controller: 'PagesController',\n controllerAs: 'vm',\n parent: 'public',\n url: 'page',\n })\n\n .state('page-detail', {\n controller: 'PagesController',\n controllerAs: 'vm',\n templateUrl: 'app/public/pages/pages.view.html',\n parent: 'public',\n url: 'page/:pageSlug',\n })\n\n .state('page-universal', {\n controller: 'PagesController',\n controllerAs: 'vm',\n templateUrl: 'app/public/pages/pages.view.html',\n parent: 'public',\n url: \"{pageSlug:.*}\"\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.pages')\n .controller('PagesController', PagesController);\n\n function PagesController($log, $scope, $state, $sce, pagesRepository, Notification, metaTagsService) {\n var vm = this;\n\n // ViewModel Properties\n vm.page = [];\n\n\n (function init() {\n $scope.isDataLoading = false;\n\n getPage();\n })();\n\n\n // Private Methods\n // getPage\n function getPage() {\n $scope.isDataLoading = true;\n\n var params = {\n slug: $state.params.pageSlug,\n };\n $log.debug('pageSlug:', params.slug);\n\n return pagesRepository.list(params)\n .then(function(response) {\n //$log.debug('PageController.getPage-response.data:', response.data);\n\n $scope.isDataLoading = false;\n\n // ensure our stateparam exists in our object array\n vm.page = response;\n vm.page.body = $sce.trustAsHtml(vm.page.body);\n metaTagsService.setMetaTag(vm.page);\n\n // if not contained in array, go redirect home\n if (!vm.page) $state.go('home');\n\n $log.debug('PageController.getPage-vm.page:', vm.page);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('PageController.getPage-error:\\n', error);\n Notification.error('There was an error loading the page.');\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('public.home', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.home')\n .config(homeRouteConfig);\n\n function homeRouteConfig($stateProvider, metaTagsDataProvider) {\n\n var metaTagsData = metaTagsDataProvider.getMetaTagsData();\n var defaultMeta = metaTagsData.defaultMeta;\n\n $stateProvider\n\n .state('home', {\n controller: 'HomeController',\n controllerAs: 'vm',\n parent: 'public',\n templateUrl: 'app/public/home/home.view.html',\n url: '',\n data: {\n meta: defaultMeta,\n }\n })\n\n .state('directions', {\n controller: 'HomeController',\n controllerAs: 'vm',\n templateUrl: 'app/public/home/directions/directions.view.html',\n parent: 'public',\n url: 'directions',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.directions),\n }\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.home')\n .controller('HomeController', HomeController);\n\n function HomeController($q, $log, $scope, $rootScope, auctionRepository, categoriesRepository, highlightRepository, Notification) {\n var vm = this;\n\n // ViewModel Properties\n vm.activePanel = 0;\n vm.highlights = [];\n vm.auction = [];\n vm.auctionPast = [];\n vm.categories = [];\n\n\n (function init() {\n $scope.isDataLoading = false;\n getCategory();\n\n })();\n\n\n // Private Methods\n // getCategory\n function getCategory() {\n $scope.isDataLoading = true;\n\n return categoriesRepository.list()\n .then(function(response) {\n //$log.debug('HomeController.getCategory-success:\\n', response);\n\n _.forEach(response.data, function(item, i) {\n vm.categories.push({\n 'id': item._id,\n 'name': item.name,\n 'slug': item.meta.slug\n });\n });\n\n getHighlights();\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('HomeController.getCategory-error:\\n', error);\n Notification.error('There was an error loading the categories.');\n });\n }\n\n // isAuctionPast\n function isAuctionPast(auction) {\n return auction.startDates.length > 0 && auction.startDates.every(function(date) {\n return moment(date).diff(moment(), 'minutes') < 0;\n });\n }\n\n // getHighlights\n function getHighlights() {\n $scope.isDataLoading = true;\n\n return highlightRepository.list()\n .then(function(response) {\n $scope.isDataLoading = false;\n\n _.forEach(response, function(event, i) {\n //$log.debug('event', event.index + ': ' + event.title);\n\n vm.foundCategories = [];\n\n _.forEach(event.categories, function(cat) {\n //$log.debug('vm.categories', vm.categories);\n vm.foundCategories.push(_.find(vm.categories, {id: cat}));\n });\n\n\n if (event.type === $rootScope.HIGHLIGHT_TYPE.VIDEO) {\n event.video = event.url;\n delete event.url;\n }\n\n vm.highlights.push({\n 'id': event._id,\n 'url': event.url,\n 'title': event.title,\n 'categories': vm.foundCategories,\n 'foreignId': event.foreignId,\n 'type': event.type,\n 'imageUrl': event.imageUrl,\n 'video': event.video,\n 'dates': event.dates,\n 'index': event.index\n });\n });\n\n getAuctions();\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('HomeController.getHighlights-error:\\n', error);\n Notification.error('There was an error loading the highlights.');\n });\n }\n\n // getAuctions\n function getAuctions() {\n $scope.isDataLoading = true;\n\n return auctionRepository.list()\n .then(function(response) {\n\n $scope.isDataLoading = false;\n\n _.forEach(response.data, function(event, i) {\n vm.foundCategories = [];\n\n _.forEach(event.categories, function(cat) {\n vm.foundCategories.push(_.find(vm.categories, {id: cat.id}));\n });\n\n if (event.state.indexOf('published') > -1) {\n\n vm.auction.push({\n 'id': event._id,\n 'title': event.title,\n 'categories': vm.foundCategories,\n 'eventImageUrl': event.eventImageUrl,\n 'startDates': event.startDates.sort(function(a, b) {\n return a < b ? 1 : -1;\n }),\n 'state': event.state,\n 'meta': event.meta\n });\n }\n });\n\n vm.auction = vm.auction.sort(function(a, b) {\n return (a.startDates[0] < b.startDates[0]) ? 1 : -1;\n });\n\n vm.auctionPast = vm.auction.filter(isAuctionPast);\n\n //$log.debug('AuctionController.vm.auction-filtered:\\n', vm.auction);\n\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('AuctionController.getAuctions-error:\\n', error);\n Notification.error('There was an error loading the auctions.');\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('public.category', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.category')\n .factory('categoryService', categoryService);\n\n function categoryService($log, API, apiHelperService) {\n return {\n getSpecialtyAuction: getSpecialtyAuction\n };\n\n function getSpecialtyAuction(id) {\n var req = {\n method: 'GET',\n url: API.BASE_URL + API.EVENTS + '/' + id,\n };\n\n return apiHelperService.sendHTTPRequest(req);\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.category')\n .config(categoryRouteConfig);\n\n function categoryRouteConfig($stateProvider) {\n $stateProvider\n\n .state('categories', {\n url: 'category',\n parent: 'public',\n abstract: true,\n controller: 'CategoryController',\n controllerAs: 'vm'\n })\n\n .state('category-detail', {\n url: 'category/:categorySlug',\n parent: 'public',\n controller: 'CategoryController',\n controllerAs: 'vm',\n templateUrl: 'app/public/category/category.view.html',\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.category')\n .controller('CategoryController', CategoryController);\n\n function CategoryController($q, $log, $scope, $state, $stateParams, auctionRepository, categoriesRepository, specialtiesRepository, Notification, metaTagsService) {\n var vm = this;\n\n // ViewModel Properties\n vm.category = {};\n vm.categories = [];\n vm.specialty = {};\n vm.auctionNext = [];\n vm.auctionPast = [];\n vm.auction = [];\n\n (function init() {\n $scope.isDataLoading = false;\n getCategory();\n })();\n\n\n // Private Methods\n // getCategory\n function getCategory() {\n $scope.isDataLoading = true;\n\n return categoriesRepository.list()\n .then(function(response) {\n $log.debug('CategoryController.getCategory-success:\\n', response);\n\n vm.categories = response.data;\n vm.category = response.data.filter(function(item) {\n return item.meta.slug.toLowerCase() === $stateParams.categorySlug.toLowerCase();\n })[0];\n\n getSpecialties();\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('CategoryController.getCategory-error:\\n', error);\n Notification.error('There was an error loading the category.');\n });\n }\n\n\n // getSpecialties\n function getSpecialties() {\n $scope.isDataLoading = true;\n\n return specialtiesRepository.list()\n .then(function(response) {\n $log.debug('CategoryController.getSpecialties-success:\\n', response);\n\n // filter specialties using categoryId\n vm.specialty = response.data.filter(function(item) {\n return item.categories.filter(function(category) {\n return category.id === vm.category._id;\n }).length > 0;\n })[0];\n\n if (vm.specialty.events) {\n vm.specialty.events.forEach(function(event) {\n event.event.categories = event.event.categories.map(function(c) {\n return vm.categories.find(function(cat) {\n return cat._id == c.id;\n });\n });\n vm.specialty.mainImage = event.event.eventImageUrl;\n });\n }\n\n metaTagsService.setMetaTag(vm.specialty);\n\n // if not contained in array, go redirect home\n if (!vm.specialty) {\n return $state.go('home');\n }\n\n getAuctions();\n\n $scope.isDataLoading = false;\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('CategoryController.getSpecialties-error:\\n', error);\n Notification.error('There was an error loading the specialties.');\n });\n }\n\n // isAuctionNext\n function isAuctionNext(auction) {\n if (auction.startDates.length == 0) {\n return true;\n }\n return auction.startDates.some(function(date) {\n return moment(date).diff(moment(), 'minutes') > 0;\n });\n }\n\n // isAuctionPast\n function isAuctionPast(auction) {\n return auction.startDates.length > 0 && auction.startDates.every(function(date) {\n return moment(date).diff(moment(), 'minutes') < 0;\n });\n }\n\n // getAuctions\n function getAuctions() {\n $scope.isDataLoading = true;\n\n return auctionRepository.list()\n .then(function(response) {\n\n $scope.isDataLoading = false;\n\n _.forEach(response.data, function(event, i) {\n vm.foundCategories = [];\n //$log.debug('CategoryController.event:\\n', event);\n\n _.forEach(event.categories, function(cat) {\n //vm.foundCategories.push(_.find(vm.category, {id: cat.id}));\n\n if (vm.category._id===cat.id) {\n vm.auction.push({\n 'id': event._id,\n 'title': event.title,\n 'categories': vm.foundCategories,\n 'eventImageUrl': event.eventImageUrl,\n 'startDates': event.startDates.sort(function(a, b) {\n return a < b ? 1 : -1;\n }),\n 'state': event.state,\n 'meta': event.meta\n });\n }\n });\n });\n\n vm.auction = vm.auction.sort(function(a, b) {\n return (a.startDates[0] < b.startDates[0]) ? 1 : -1;\n });\n\n vm.auctionNext = vm.auction.filter(isAuctionNext);\n vm.auctionPast = vm.auction.filter(isAuctionPast);\n\n // $log.debug('CategoryController.auctionNext:', vm.auctionNext);\n // $log.debug('CategoryController.auctionPast:', vm.auctionPast);\n // $log.debug('CategoryController.getAuctions-success:\\n', response);\n $log.debug('CategoryController.vm.auction-filtered:\\n', vm.auction);\n\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('CategoryController.getAuctions-error:\\n', error);\n Notification.error('There was an error loading the auctions.');\n });\n }\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('public.blog', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.blog')\n .factory('blogService', blogService);\n\n function blogService($log, API, apiHelperService) {\n return {\n getBlogPosts: getBlogPosts,\n getBlogPostDetail: getBlogPostDetail,\n getCategories: getCategories,\n };\n\n function getBlogPosts(sort) {\n var req = {\n method: 'GET',\n url: API.BASE_URL + API.BLOG,\n params: {\n sort: sort,\n limit: 100,\n },\n };\n\n return apiHelperService.sendHTTPRequest(req);\n }\n\n function getBlogPostDetail(id) {\n var req = {\n method: 'GET',\n url: API.BASE_URL + API.BLOG + '/' + id,\n };\n\n return apiHelperService.sendHTTPRequest(req);\n }\n\n function getCategories() {\n var req = {\n method: 'GET',\n url: API.BASE_URL + API.CATEGORIES,\n };\n\n return apiHelperService.sendHTTPRequest(req);\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.blog')\n .config(blogRouteConfig);\n\n function blogRouteConfig($stateProvider, metaTagsDataProvider) {\n\n var metaTagsData = metaTagsDataProvider.getMetaTagsData();\n var defaultMeta = metaTagsData.defaultMeta;\n\n $stateProvider\n\n .state('blog', {\n controller: 'BlogController',\n controllerAs: 'vm',\n parent: 'public',\n templateUrl: 'app/public/blog/blog.view.html',\n url: 'blog',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.blog)\n }\n })\n\n .state('blog-detail', {\n controller: 'BlogDetailController',\n controllerAs: 'vm',\n parent: 'public',\n templateUrl: 'app/public/blog/blog-detail/blog-detail.view.html',\n url: 'blog/:id',\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.blog')\n .controller('BlogController', BlogController);\n\n function BlogController($sce, blogService) {\n var vm = this;\n\n vm.posts = [];\n vm.categories = [];\n\n (function init() {\n blogService.getCategories().then(function(response) {\n if (response.data) {\n // $log.debug('getCategories--response.data', response.data);\n\n _.forEach(response.data, function(item, i) {\n vm.categories.push({\n 'id': item._id,\n 'name': item.name,\n });\n });\n\n // $log.debug('vm.categories', vm.categories);\n }\n });\n\n blogService.getBlogPosts('-created').then(function(response) {\n if (response.data) {\n // $log.debug('getBlogPosts--response.data', response.data);\n\n _.forEach(response.data, function(item, i) {\n // $log.debug('item', item);\n\n vm.foundCategories = [];\n\n _.forEach(item.categories, function(cat) {\n vm.foundCategories.push(_.find(vm.categories, {id: cat.id}));\n });\n\n // $log.debug('vm.foundCategories', vm.foundCategories);\n\n vm.posts.push({\n 'id': item._id,\n 'title': item.title,\n 'categories': vm.foundCategories,\n 'image': item.headerUrl,\n 'body': $sce.trustAsResourceUrl(item.body),\n });\n });\n\n // $log.debug('vm.posts', vm.posts);\n }\n });\n })();\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.auction')\n .config(auctionRouteConfig);\n\n function auctionRouteConfig($stateProvider, metaTagsDataProvider) {\n\n var metaTagsData = metaTagsDataProvider.getMetaTagsData();\n var defaultMeta = metaTagsData.defaultMeta;\n\n $stateProvider\n\n .state('auction', {\n parent: 'public',\n url: 'auctions',\n templateUrl: 'app/public/auction/auction.view.html',\n controller: 'AuctionController',\n controllerAs: 'vm',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.auctions),\n }\n })\n\n .state('auction-detail', {\n parent: 'public',\n url: 'auctions/:auctionSlug?limit',\n templateUrl: 'app/public/auction/auction-detail/auction-detail.view.html',\n controller: 'AuctionDetailController',\n controllerAs: 'vm',\n })\n\n .state('auction-item', {\n parent: 'auction-detail',\n url: '/item/:itemSlug',\n onEnter: function($state, $stateParams, modalService) {\n if ($stateParams.itemSlug && typeof $stateParams.itemSlug === 'string') {\n modalService.show(\n 'app/public/auction/auction-detail/item/item.modal.html',\n 'ItemController'\n );\n }\n else {\n var params = {\n auctionSlug: $stateParams.auctionSlug,\n };\n\n $state.go('auction-detail', params);\n }\n },\n params: {\n itemSlug: null,\n },\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.auction')\n .controller('AuctionController', AuctionController);\n\n function AuctionController($q, $log, $scope, auctionRepository, categoriesRepository, Notification) {\n var vm = this;\n\n // ViewModel Properties\n vm.activePanel = 0;\n vm.auction = [];\n vm.auctionNext = [];\n vm.auctionPast = [];\n vm.categories = [];\n\n\n var promises = [\n getCategory(),\n getAuctions()\n ];\n\n (function init() {\n $scope.isDataLoading = false;\n return $q.all(promises);\n\n })();\n\n // Private Methods\n\n // getCategory\n function getCategory() {\n $scope.isDataLoading = true;\n\n return categoriesRepository.list()\n .then(function(response) {\n //$log.debug('AuctionController.getCategory-success:\\n', response);\n\n _.forEach(response.data, function(item, i) {\n vm.categories.push({\n 'id': item._id,\n 'name': item.name,\n 'slug': item.meta.slug\n });\n });\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('AuctionController.getCategory-error:\\n', error);\n Notification.error('There was an error loading the categories.');\n });\n }\n\n // isAuctionNext\n function isAuctionNext(auction) {\n if (auction.startDates.length == 0) {\n return true;\n }\n return auction.startDates.some(function(date) {\n return moment(date).diff(moment(), 'minutes') > 0;\n });\n }\n\n // isAuctionPast\n function isAuctionPast(auction) {\n return auction.startDates.length > 0 && auction.startDates.every(function(date) {\n return moment(date).diff(moment(), 'minutes') < 0;\n });\n }\n\n // getAuctions\n function getAuctions() {\n $scope.isDataLoading = true;\n\n return auctionRepository.list()\n .then(function(response) {\n\n $scope.isDataLoading = false;\n\n _.forEach(response.data, function(event, i) {\n\n vm.foundCategories = [];\n\n _.forEach(event.categories, function(cat) {\n vm.foundCategories.push(_.find(vm.categories, {id: cat.id}));\n });\n\n vm.auction.push({\n 'id': event._id,\n 'title': event.title,\n 'categories': vm.foundCategories,\n 'eventImageLink': event.eventImageLink,\n 'eventImageUrl': event.eventImageUrl,\n 'startDates': event.startDates.sort(function(a, b) {\n return a < b ? 1 : -1;\n }),\n 'state': event.state,\n 'meta': event.meta\n });\n });\n\n vm.auction = vm.auction.sort(function(a, b) {\n return (a.startDates[0] < b.startDates[0]) ? 1 : -1;\n });\n\n vm.auctionNext = vm.auction.filter(isAuctionNext).reverse();\n vm.auctionPast = vm.auction.filter(isAuctionPast);\n\n // $log.debug('AuctionController.auctionNext:', vm.auctionNext);\n // $log.debug('AuctionController.auctionPast:', vm.auctionPast);\n // $log.debug('AuctionController.getAuctions-success:\\n', response);\n // $log.debug('AuctionController.vm.auction-filtered:\\n', vm.auction);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('AuctionController.getAuctions-error:\\n', error);\n Notification.error('There was an error loading the auctions.');\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('public.assets', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.assets')\n .config(pagesRouteConfig);\n\n function pagesRouteConfig($stateProvider) {\n $stateProvider\n\n .state('assets', {\n abstract: true,\n controller: 'AssetsController',\n controllerAs: 'vm',\n parent: 'public',\n url: 'asset',\n })\n\n .state('assets-detail', {\n controller: 'AssetsController',\n controllerAs: 'vm',\n templateUrl: 'app/public/assets/assets.view.html',\n parent: 'public',\n url: 'asset/:assetSlug',\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.assets')\n .controller('AssetsController', AssetsController);\n\n function AssetsController($log, $scope, $state, $http, assetsRepository, Notification, metaTagsService) {\n var vm = this;\n\n // ViewModel Properties\n vm.asset = [];\n\n (function init() {\n $scope.isDataLoading = false;\n\n getAsset();\n })();\n\n\n // Private Properties\n var assetSlug = $state.params.assetSlug;\n\n // Private Methods\n // getAsset\n function getAsset() {\n $scope.isDataLoading = true;\n\n $log.debug('assetSlug:', assetSlug);\n\n return assetsRepository.list()\n .then(function(response) {\n //$log.debug('assetController.getAsset-response.data:', response.data);\n\n $scope.isDataLoading = false;\n\n // ensure our stateparam exists in our object array\n vm.asset = _.find(response.data, {meta: {slug: assetSlug}});\n metaTagsService.setMetaTag(vm.asset);\n\n // if not contained in array, go redirect home\n if (!vm.asset) $state.go('home');\n\n var isGoogleDoc = /^https:\\/\\/docs\\.google\\.com/.test(vm.asset.assetUrl);\n vm.isPdf = /\\.pdf$/.test(vm.asset.assetUrl) || isGoogleDoc;\n vm.isDoc = /\\.(doc|docx)$/.test(vm.asset.assetUrl);\n\n if (vm.isDoc) {\n $http.get(vm.asset.assetUrl, {\n responseType: 'arraybuffer'\n })\n .then(function(response) {\n var arrayBuffer = new Uint8Array(response.data);\n mammoth.convertToHtml({arrayBuffer: arrayBuffer})\n .then(function(result) {\n vm.html = result.value;\n $scope.$apply();\n })\n .done();\n });\n }\n\n $log.debug('AssetsController.getAsset-vm.asset:', vm.asset);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('AssetsController.getAsset-error:\\n', error);\n Notification.error('There was an error loading the asset.');\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.about')\n .config(aboutRouteConfig);\n\n function aboutRouteConfig($stateProvider, metaTagsDataProvider) {\n\n var metaTagsData = metaTagsDataProvider.getMetaTagsData();\n var defaultMeta = metaTagsData.defaultMeta;\n\n $stateProvider\n\n .state('about', {\n controller: 'AboutController',\n controllerAs: 'vm',\n parent: 'public',\n templateUrl: 'app/public/about/about.view.html',\n url: 'about',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.about)\n }\n })\n\n .state('person', {\n data: {\n bodyClass: 'backdrop-dark',\n },\n onEnter: function($state, $stateParams, modalService) {\n if ($stateParams.person && typeof $stateParams.person._id === 'string') {\n modalService.show(\n 'app/public/about/team/team.modal.html',\n 'TeamController'\n );\n }\n else {\n $state.go('about');\n }\n },\n params: {\n person: null,\n },\n parent: 'about',\n url: '/:personSlug',\n });\n }\n})();\n\n(function () {\n \"use strict\";\n\n angular\n .module(\"public.about\")\n .controller(\"AboutController\", AboutController);\n\n function AboutController(\n $log,\n $scope,\n $state,\n $sce,\n teamRepository,\n pagesRepository,\n Notification\n ) {\n var vm = this;\n\n // ViewModel Properties\n vm.persons = [];\n\n (function init() {\n getPage();\n getTeam();\n })();\n\n // Private Methods\n function getPage() {\n $scope.isDataLoading = true;\n\n return pagesRepository\n .list()\n .then(function (response) {\n //$log.debug('PageController.getPage-response.data:', response.data);\n\n $scope.isDataLoading = false;\n\n // ensure our stateparam exists in our object array\n vm.page = _.find(response.data, {\n meta: { slug: \"about\" },\n });\n vm.page.body = $sce.trustAsHtml(vm.page.body);\n\n // if not contained in array, go redirect home\n if (!vm.page) $state.go(\"home\");\n })\n .catch(function (error) {\n $scope.isDataLoading = false;\n\n $log.error(\"AboutController.getPage-error:\\n\", error);\n Notification.error(\n \"There was an error loading the about page.\"\n );\n });\n }\n\n // getTeam\n function getTeam() {\n $scope.isDataLoading = true;\n\n return teamRepository\n .list()\n .then(function (response) {\n $scope.isDataLoading = false;\n\n vm.persons = response.data;\n\n // add slug property\n vm.persons = vm.persons.map(function (item) {\n item.slug = item.name\n .replace(/\\s+/g, \"-\")\n .replace(/[^A-Za-z0-9-]+/g, \"\")\n .toLowerCase();\n return item;\n });\n\n $log.debug(\"AboutController.getTeam-success:\\n\", response);\n $log.debug(\n \"AboutController.vm.persons-reorder:\\n\",\n vm.persons\n );\n })\n .catch(function (error) {\n $scope.isDataLoading = false;\n\n $log.error(\"AboutController.getTeam-error:\\n\", error);\n Notification.error(\"There was an error loading the team.\");\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.services', [\n 'app.services.auth',\n 'app.services.repository',\n 'app.services.utility',\n 'app.services.metatags'\n ]);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public.assets')\n .filter('trustUrl', function($sce) {\n return function(val) {\n return $sce.trustAsResourceUrl(val);\n };\n });\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.filters', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.filters')\n .filter('phonenumberFilter', phonenumberFilter);\n\n function phonenumberFilter() {\n return function(tel) {\n if (!tel) {\n return '';\n }\n\n var value = tel.toString().trim().replace(/^\\+/, '');\n\n if (value.match(/[^0-9]/)) {\n return tel;\n }\n\n var country;\n var city;\n var number;\n\n switch (value.length) {\n case 10: // +1PPP####### -> C (PPP) ###-####\n country = 1;\n city = value.slice(0, 3);\n number = value.slice(3);\n break;\n\n case 11: // +CPPP####### -> CCC (PP) ###-####\n country = value[0];\n city = value.slice(1, 4);\n number = value.slice(4);\n break;\n\n case 12: // +CCCPP####### -> CCC (PP) ###-####\n country = value.slice(0, 3);\n city = value.slice(3, 5);\n number = value.slice(5);\n break;\n\n case 13: // +CCCPPP####### -> CCC (PPP) ###-####\n country = value.slice(0, 3);\n city = value.slice(3, 6);\n number = value.slice(6);\n break;\n\n default:\n return tel;\n }\n\n if (country == 1) {\n country = '';\n }\n\n number = number.slice(0, 3) + '-' + number.slice(3);\n\n return (country + ' (' + city + ') ' + number).trim();\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.filters')\n .filter('gtEventStartDate', gtEventStartDate);\n\n function gtEventStartDate() {\n return function( items, value ) {\n var filteredItems = [];\n\n angular.forEach(items, function( item, cnt ) {\n // if ( cnt > value ) {\n\n // to add event, must be past 3rd in index AND date must be current\n var today = new Date();\n var eventStartDates = item.startDates.map(function(date) {\n return new Date(date);\n });\n\n if (eventStartDates.some(function(date) {\n return date > today;\n })) {\n filteredItems.push(item);\n }\n // }\n });\n\n return filteredItems;\n };\n }\n})();\n\n\n/* function gtEventStartDate() {\n return function( items, value ) {\n var filteredItems = [];\n\n angular.forEach(items, function(item, cnt) {\n var today = new Date();\n var eventStartDates = item.startDates.map(function(date) {\n return new Date(date);\n });\n\n if (eventStartDates.some(function(date) {\n return date > today;\n })) {\n if ((value == 0) && (cnt > 3)) {\n // if no value provided, return first 3 (upcoming) events past today\n filteredItems.push(item);\n }\n\n if ((value > 0) && (cnt < 2)) {\n // must be greater than 3rd in index AND date must be current\n filteredItems.push(item);\n }\n }\n });\n\n return filteredItems;\n };\n} */\n\n(function() {\n 'use strict';\n\n angular\n .module('app.filters')\n .filter('formatTime', formatTime);\n\n function formatTime() {\n return function(timestamp, withtime) {\n if (!timestamp) {\n return;\n }\n\n if (withtime) {\n return moment(timestamp).format('lll'); // Jan 12, 2017\n }\n\n return moment(timestamp).format('ll'); // Jan 12, 2017\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.filters')\n .filter('capitalize', capitalize);\n\n function capitalize() {\n return function(input, scope) {\n if (input != null) {\n if (input.length >= 1) {\n input = input.toLowerCase();\n return input.substring(0, 1).toUpperCase() + input.substring(1);\n }\n }\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.filters')\n .filter('addTargetBlank', addTargetBlank);\n\n function addTargetBlank(ENV_VARS) {\n return function(content) {\n var tree = angular.element('
' + content + '
');\n\n angular.forEach(tree.find('a'), function(element) {\n var anchor = angular.element(element);\n if (isExternalUrl(element.hostname)) {\n anchor.attr('target', '_blank');\n }\n });\n\n return angular.element('
').append(tree).html();\n };\n\n function isExternalUrl(hostname) {\n if (!hostname || typeof hostname !== 'string') {\n return false;\n }\n\n return hostname.search(ENV_VARS.appDomain) < 0;\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.directives', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.directives')\n // .directive('pageTitle', pageTitle)\n // .directive('sideNavigation', sideNavigation)\n // .directive('iboxTools', iboxTools)\n // .directive('minimalizaSidebar', minimalizaSidebar)\n // .directive('vectorMap', vectorMap)\n // .directive('sparkline', sparkline)\n // .directive('icheck', icheck)\n // .directive('ionRangeSlider', ionRangeSlider)\n // .directive('dropZone', dropZone)\n // .directive('responsiveVideo', responsiveVideo)\n // .directive('chatSlimScroll', chatSlimScroll)\n // .directive('customValid', customValid)\n // .directive('fullScroll', fullScroll)\n // .directive('closeOffCanvas', closeOffCanvas)\n // .directive('clockPicker', clockPicker)\n // .directive('landingScrollspy', landingScrollspy)\n // .directive('fitHeight', fitHeight)\n // .directive('iboxToolsFullScreen', iboxToolsFullScreen)\n // .directive('slimScroll', slimScroll)\n // .directive('truncate', truncate)\n // .directive('touchSpin', touchSpin)\n // .directive('markdownEditor', markdownEditor)\n // .directive('categoryName', categoryName)\n // .directive('categorySelect', categorySelect)\n //.directive('numbersExcludingZero', numbersExcludingZero)\n .directive('youtubeEmbed', youtubeEmbed)\n .directive('topnavcollapse', topNavCollapse)\n .filter('cdn', cdnFilter)\n .directive('autofocus', ['$timeout', autofocus]);\n\n\n function youtubeEmbed($sce) {\n return {\n restrict: 'EA',\n scope: {\n code: '=',\n },\n replace: true,\n template: '
',\n link: function(scope) {\n scope.$watch('code', function(newVal) {\n if (newVal) {\n scope.url = $sce.trustAsResourceUrl(\"http://www.youtube.com/embed/\" + newVal);\n }\n });\n },\n };\n }\n\n\n function cdnFilter(ENV_VARS) {\n return function(input) {\n if (!ENV_VARS || !ENV_VARS.s3BucketDomain || !ENV_VARS.cdnDomain) return input;\n return (input || '').replace(ENV_VARS.s3BucketDomain, ENV_VARS.cdnDomain);\n };\n }\n\n // function numbersExcludingZero() {\n // return {\n // restrict: 'A',\n // link: function(scope, element, attrs) {\n // var ele = element[0];\n // var regex = new RegExp(attrs.restrictInput);\n // var value = ele.value;\n // ele.addEventListener('keyup', function(e) {\n // if (regex.test(ele.value)) {\n // value = ele.value;\n // }\n // else {\n // ele.value = value;\n // }\n // });\n // }\n // };\n // }\n\n // /**\n // * pageTitle - Directive for set Page title - mata title\n // */\n // function pageTitle($rootScope, $timeout) {\n // return {\n // link: function(scope, element) {\n // var listener = function(event, toState, toParams, fromState, fromParams) {\n // // Default title - load on Dashboard 1\n // var title = 'Vogt-Auction';\n // // Create your own title pattern\n // if (toState.data && toState.data.pageTitle) title = 'Vogt Auction | ' + toState.data.pageTitle;\n // $timeout(function() {\n // element.text(title);\n // });\n // };\n // $rootScope.$on('$stateChangeStart', listener);\n // }\n // }\n // }\n\n // /**\n // * sideNavigation - Directive for run metsiMenu on sidebar navigation\n // */\n // function sideNavigation($timeout) {\n // return {\n // restrict: 'A',\n // link: function(scope, element) {\n // // Call the metsiMenu plugin and plug it to sidebar navigation\n // $timeout(function() {\n // element.metisMenu();\n\n // });\n // }\n // };\n // }\n\n // /**\n // * responsibleVideo - Directive for responsive video\n // */\n // function responsiveVideo() {\n // return {\n // restrict: 'A',\n // link: function(scope, element) {\n // var figure = element;\n // var video = element.children();\n // video\n // .attr('data-aspectRatio', video.height() / video.width())\n // .removeAttr('height')\n // .removeAttr('width')\n\n // //We can use $watch on $window.innerWidth also.\n // $(window).resize(function() {\n // var newWidth = figure.width();\n // video\n // .width(newWidth)\n // .height(newWidth * video.attr('data-aspectRatio'));\n // }).resize();\n // }\n // }\n // }\n\n // /**\n // * iboxTools - Directive for iBox tools elements in right corner of ibox\n // */\n // function iboxTools($timeout) {\n // return {\n // restrict: 'A',\n // scope: true,\n // templateUrl: 'app/main/main-ibox_tools.view.html',\n // controller: function($scope, $element) {\n // // Function for collapse ibox\n // $scope.showhide = function() {\n // var ibox = $element.closest('div.ibox');\n // var icon = $element.find('i:first');\n // var content = ibox.find('div.ibox-content');\n // content.slideToggle(200);\n // // Toggle icon from up to down\n // icon.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');\n // ibox.toggleClass('').toggleClass('border-bottom');\n // $timeout(function() {\n // ibox.resize();\n // ibox.find('[id^=map-]').resize();\n // }, 50);\n // };\n // // Function for close ibox\n // $scope.closebox = function() {\n // var ibox = $element.closest('div.ibox');\n // ibox.remove();\n // }\n // }\n // };\n // }\n\n // /**\n // * iboxTools with full screen - Directive for iBox tools elements in right corner of ibox with full screen option\n // */\n // function iboxToolsFullScreen($timeout) {\n // return {\n // restrict: 'A',\n // scope: true,\n // templateUrl: 'app/main/main-ibox_tools_full_screen.view.html',\n // controller: function($scope, $element) {\n // // Function for collapse ibox\n // $scope.showhide = function() {\n // var ibox = $element.closest('div.ibox');\n // var icon = $element.find('i:first');\n // var content = ibox.find('div.ibox-content');\n // content.slideToggle(200);\n // // Toggle icon from up to down\n // icon.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');\n // ibox.toggleClass('').toggleClass('border-bottom');\n // $timeout(function() {\n // ibox.resize();\n // ibox.find('[id^=map-]').resize();\n // }, 50);\n // };\n // // Function for close ibox\n // $scope.closebox = function() {\n // var ibox = $element.closest('div.ibox');\n // ibox.remove();\n // };\n // // Function for full screen\n // $scope.fullscreen = function() {\n // var ibox = $element.closest('div.ibox');\n // var button = $element.find('i.fa-expand');\n // $('body').toggleClass('fullscreen-ibox-mode');\n // button.toggleClass('fa-expand').toggleClass('fa-compress');\n // ibox.toggleClass('fullscreen');\n // setTimeout(function() {\n // $(window).trigger('resize');\n // }, 100);\n // }\n // }\n // };\n // }\n\n // /**\n // * minimalizaSidebar - Directive for minimalize sidebar\n // */\n // function minimalizaSidebar($timeout) {\n // return {\n // restrict: 'A',\n // //template: '',\n // template: '
menu
',\n\n // controller: function($scope, $element) {\n // $scope.minimalize = function() {\n // angular.element('body').toggleClass('mini-navbar');\n // if (!angular.element('body').hasClass('mini-navbar') || angular.element('body').hasClass('body-small')) {\n // // Hide menu in order to smoothly turn on when maximize menu\n // angular.element('#side-menu').hide();\n // // For smoothly turn on menu\n // $timeout(function() {\n // angular.element('#side-menu').fadeIn(500);\n // }, 100);\n // }\n // else {\n // // Remove all inline style from jquery fadeIn function to reset menu state\n // angular.element('#side-menu').removeAttr('style');\n // }\n // };\n // }\n // };\n // };\n\n\n // function closeOffCanvas() {\n // return {\n // restrict: 'A',\n // template: '',\n // controller: function($scope, $element) {\n // $scope.closeOffCanvas = function() {\n // $(\"body\").toggleClass(\"mini-navbar\");\n // }\n // }\n // };\n // }\n\n // /**\n // * vectorMap - Directive for Vector map plugin\n // */\n // function vectorMap() {\n // return {\n // restrict: 'A',\n // scope: {\n // myMapData: '=',\n // },\n // link: function(scope, element, attrs) {\n // var map = element.vectorMap({\n // map: 'world_mill_en',\n // backgroundColor: \"transparent\",\n // regionStyle: {\n // initial: {\n // fill: '#e4e4e4',\n // \"fill-opacity\": 0.9,\n // stroke: 'none',\n // \"stroke-width\": 0,\n // \"stroke-opacity\": 0\n // }\n // },\n // series: {\n // regions: [{\n // values: scope.myMapData,\n // scale: [\"#1ab394\", \"#22d6b1\"],\n // normalizeFunction: 'polynomial'\n // }]\n // },\n // });\n // var destroyMap = function() {\n // element.remove();\n // };\n // scope.$on('$destroy', function() {\n // destroyMap();\n // });\n // }\n // }\n // }\n\n\n // /**\n // * sparkline - Directive for Sparkline chart\n // */\n // function sparkline() {\n // return {\n // restrict: 'A',\n // scope: {\n // sparkData: '=',\n // sparkOptions: '=',\n // },\n // link: function(scope, element, attrs) {\n // scope.$watch(scope.sparkData, function() {\n // render();\n // });\n // scope.$watch(scope.sparkOptions, function() {\n // render();\n // });\n // var render = function() {\n // $(element).sparkline(scope.sparkData, scope.sparkOptions);\n // };\n // }\n // }\n // }\n\n // /**\n // * icheck - Directive for custom checkbox icheck\n // */\n // function icheck($timeout) {\n // return {\n // restrict: 'A',\n // require: 'ngModel',\n // link: function($scope, element, $attrs, ngModel) {\n // return $timeout(function() {\n // var value;\n // value = $attrs['value'];\n\n // $scope.$watch($attrs['ngModel'], function(newValue) {\n // $(element).iCheck('update');\n // })\n\n // return $(element).iCheck({\n // checkboxClass: 'icheckbox_square-green',\n // radioClass: 'iradio_square-green'\n\n // }).on('ifChanged', function(event) {\n // if ($(element).attr('type') === 'checkbox' && $attrs['ngModel']) {\n // $scope.$apply(function() {\n // return ngModel.$setViewValue(event.target.checked);\n // });\n // }\n // if ($(element).attr('type') === 'radio' && $attrs['ngModel']) {\n // return $scope.$apply(function() {\n // return ngModel.$setViewValue(value);\n // });\n // }\n // });\n // });\n // }\n // };\n // }\n\n // /**\n // * ionRangeSlider - Directive for Ion Range Slider\n // */\n // function ionRangeSlider() {\n // return {\n // restrict: 'A',\n // scope: {\n // rangeOptions: '='\n // },\n // link: function(scope, elem, attrs) {\n // elem.ionRangeSlider(scope.rangeOptions);\n // }\n // }\n // }\n\n // /**\n // * dropZone - Directive for Drag and drop zone file upload plugin\n // */\n // function dropZone() {\n // return {\n // restrict: 'C',\n // link: function(scope, element, attrs) {\n\n // var config = {\n // url: 'http://localhost:8080/upload',\n // maxFilesize: 100,\n // paramName: \"uploadfile\",\n // maxThumbnailFilesize: 10,\n // parallelUploads: 1,\n // autoProcessQueue: false\n // };\n\n // var eventHandlers = {\n // 'addedfile': function(file) {\n // scope.file = file;\n // if (this.files[1] != null) {\n // this.removeFile(this.files[0]);\n // }\n // scope.$apply(function() {\n // scope.fileAdded = true;\n // });\n // },\n\n // 'success': function(file, response) {}\n\n // };\n\n // dropzone = new Dropzone(element[0], config);\n\n // angular.forEach(eventHandlers, function(handler, event) {\n // dropzone.on(event, handler);\n // });\n\n // scope.processDropzone = function() {\n // dropzone.processQueue();\n // };\n\n // scope.resetDropzone = function() {\n // dropzone.removeAllFiles();\n // }\n // }\n // }\n // }\n\n // /**\n // * chatSlimScroll - Directive for slim scroll for small chat\n // */\n // function chatSlimScroll($timeout) {\n // return {\n // restrict: 'A',\n // link: function(scope, element) {\n // $timeout(function() {\n // element.slimscroll({\n // height: '234px',\n // railOpacity: 0.4\n // });\n\n // });\n // }\n // };\n // }\n\n // /**\n // * customValid - Directive for custom validation example\n // */\n // function customValid() {\n // return {\n // require: 'ngModel',\n // link: function(scope, ele, attrs, c) {\n // scope.$watch(attrs.ngModel, function() {\n\n // // You can call a $http method here\n // // Or create custom validation\n\n // var validText = \"Vogt-Auction\";\n\n // if (scope.extras == validText) {\n // c.$setValidity('cvalid', true);\n // }\n // else {\n // c.$setValidity('cvalid', false);\n // }\n\n // });\n // }\n // }\n // }\n\n\n // /**\n // * fullScroll - Directive for slimScroll with 100%\n // */\n // /**\n // function fullScroll($timeout){\n // return {\n // restrict: 'A',\n // link: function(scope, element) {\n // $timeout(function(){\n // element.slimscroll({\n // height: '100%',\n // railOpacity: 0.9\n // });\n\n // });\n // }\n // };\n // }\n // **/\n // /**\n // * slimScroll - Directive for slimScroll with custom height\n // */\n // /**\n // function slimScroll($timeout){\n // return {\n // restrict: 'A',\n // scope: {\n // boxHeight: '@'\n // },\n // link: function(scope, element) {\n // $timeout(function(){\n // element.slimscroll({\n // height: scope.boxHeight,\n // railOpacity: 0.9\n // });\n\n // });\n // }\n // };\n // }\n // **/\n // /**\n // * clockPicker - Directive for clock picker plugin\n // */\n // function clockPicker() {\n // return {\n // restrict: 'A',\n // link: function(scope, element) {\n // element.clockpicker();\n // }\n // };\n // }\n\n\n // /**\n // * landingScrollspy - Directive for scrollspy in landing page\n // */\n // function landingScrollspy() {\n // return {\n // restrict: 'A',\n // link: function(scope, element, attrs) {\n // element.scrollspy({\n // target: '.navbar-fixed-top',\n // offset: 80\n // });\n // }\n // }\n // }\n\n // /**\n // * fitHeight - Directive for set height fit to window height\n // */\n // function fitHeight() {\n // return {\n // restrict: 'A',\n // link: function(scope, element) {\n // element.css(\"height\", $(window).height() + \"px\");\n // element.css(\"min-height\", $(window).height() + \"px\");\n // }\n // };\n // }\n\n // /**\n // * truncate - Directive for truncate string\n // */\n // function truncate($timeout) {\n // return {\n // restrict: 'A',\n // scope: {\n // truncateOptions: '='\n // },\n // link: function(scope, element) {\n // $timeout(function() {\n // element.dotdotdot(scope.truncateOptions);\n\n // });\n // }\n // };\n // }\n\n\n // /**\n // * touchSpin - Directive for Bootstrap TouchSpin\n // */\n // function touchSpin() {\n // return {\n // restrict: 'A',\n // scope: {\n // spinOptions: '='\n // },\n // link: function(scope, element, attrs) {\n // scope.$watch(scope.spinOptions, function() {\n // render();\n // });\n // var render = function() {\n // $(element).TouchSpin(scope.spinOptions);\n // };\n // }\n // }\n // }\n\n // /**\n // * markdownEditor - Directive for Bootstrap Markdown\n // */\n // function markdownEditor() {\n // return {\n // restrict: \"A\",\n // require: 'ngModel',\n // link: function(scope, element, attrs, ngModel) {\n // $(element).markdown({\n // savable: false,\n // onChange: function(e) {\n // ngModel.$setViewValue(e.getContent());\n // }\n // });\n // }\n // }\n // }\n\n // function categoryName(categoryService) {\n // return {\n // restrict: 'AE',\n // replace: true,\n // scope: {\n // id: '@'\n // },\n // template: '{{category.name}}',\n // link: function(scope, elem) {\n // categoryService.getById(scope.id).then(function(response){\n // scope.category = response;\n // });\n // }\n // }\n // }\n\n // function categorySelect(categoryService) {\n // return {\n // replace: true,\n // restrict: 'E',\n // scope: {\n // selectedCategoryId: '='\n // },\n // template:\n // '',\n // link: function(scope, elem) {\n // categoryService.getAll(1000, 1, '+name').then(function(response) {\n // if (response.data) {\n // scope.categories = response.data;\n // }\n // });\n // }\n // }\n // }\n\n // function categoryToggle(categoryService) {\n // return {\n // replace: false,\n // restrict: 'E',\n // scope: {\n // categories: '=',\n // onChange: '='\n // },\n // template:\n // '' +\n // '' +\n // '',\n // controller: function($scope) {\n // categoryService.getAll(1000, 1, '+name').then(function(response) {\n // if (response.data) {\n // $scope.categories = response.data;\n // // fire change handler once with all categories for default state\n // $scope.onChange($scope.categories);\n // }\n // });\n // $scope.onClick = function() {\n // $scope.onChange($scope.categories.filter(function(c) { return c.selected === true }));\n // }\n // }\n // }\n // }\n\n\n // topNavCollapse - Directive to collapse and change look of header navbar on scroll\n function topNavCollapse($window) {\n return function(scope, element, attrs) {\n angular.element($window).bind('scroll', function() {\n if ($window.pageYOffset >= 75) {\n scope.boolChangeClass = true;\n }\n else {\n scope.boolChangeClass = false;\n }\n scope.$apply();\n });\n };\n }\n\n\n // autofocus - Directive\n function autofocus($timeout) {\n return {\n restrict: 'A',\n link: function($scope, $element) {\n $timeout(function() {\n $element[0].focus();\n });\n },\n };\n }\n})();\n\n/**\n *\n * Main directives.js file\n * Define directives for used plugin\n *\n *\n * Functions (directives)\n * - sideNavigation\n * - iboxTools\n * - minimalizaSidebar\n * - vectorMap\n * - sparkline\n * - icheck\n * - ionRangeSlider\n * - dropZone\n * - responsiveVideo\n * - chatSlimScroll\n * - customValid\n * - fullScroll\n * - closeOffCanvas\n * - clockPicker\n * - landingScrollspy\n * - fitHeight\n * - iboxToolsFullScreen\n * - slimScroll\n * - truncate\n * - touchSpin\n * - markdownEditor\n * - resizeable\n *\n */\n\n(function() {\n 'use strict';\n\n angular.module('auth.signup', []);\n})();\n\n\n(function() {\n 'use strict';\n\n angular\n .module('auth.signup')\n .config(signupRouteConfig);\n\n function signupRouteConfig($stateProvider, metaTagsDataProvider) {\n\n var metaTagsData = metaTagsDataProvider.getMetaTagsData();\n var defaultMeta = metaTagsData.defaultMeta;\n\n $stateProvider\n\n .state('signup', {\n controller: 'SignupController',\n controllerAs: 'vm',\n parent: 'auth',\n templateUrl: 'app/auth/signup/signup.view.html',\n url: 'signup?token',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.signup)\n }\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('auth.signup')\n .controller('SignupController', SignupController);\n\n function SignupController($log, $scope, $rootScope, $state, Session, authService, emailService, passService, formsService, flashService, usernameService, Notification, REDIRECT) {\n var vm = this;\n\n // ViewModel Properties\n vm.isModal = ($state.current.name === 'auction-item');\n vm.user = {};\n vm.secondStep = false;\n\n // ViewModel Methods\n vm.isEmail = emailService.isEmail;\n vm.isEmailUnique = emailService.isEmailUnique;\n vm.isPasswordConfirmed = passService.isPasswordConfirmed;\n vm.isUsernameValid = usernameService.isUsernameValid;\n vm.isUsernameUnique = usernameService.isUsernameUnique;\n vm.onSubmit = handleSubmit;\n vm.onNext = handleNext;\n vm.onBack = handleBack;\n\n // error handling utility\n $scope.hasError = formsService.hasError;\n $scope.showError = formsService.showError;\n $scope.canSave = formsService.canSave;\n\n\n (function init() {\n $scope.isDataLoading = false;\n\n // reset login status - ensure user is logged out on controller load\n // user should never get to /signup when authenticaed - this is precaution\n Session.destroy();\n })();\n\n\n // Private Methods\n // handleNext\n function handleNext() {\n vm.secondStep = true;\n }\n\n // handleBack\n function handleBack() {\n vm.secondStep = false;\n }\n\n // handleSubmit\n function handleSubmit() {\n $scope.isDataLoading = true;\n\n var user = angular.copy(vm.user);\n\n return authService.signup(user)\n .then(function(response) {\n $scope.isDataLoading = false;\n $rootScope.setCurrentUser(response);\n\n if (!vm.isModal) {\n $state.go(REDIRECT.BID);\n }\n else {\n $rootScope.$broadcast('UserUpdate');\n }\n\n $log.debug('SignupController.handleSubmit-success:\\n', response);\n Notification.success('You\\'ve Successfully Signed Up!');\n flashService.clear();\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('SignupController.handleSubmit-error:\\n', error);\n flashService.error(error.message);\n });\n }\n };\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('auth.login')\n .config(loginRouteConfig);\n\n function loginRouteConfig($stateProvider, metaTagsDataProvider) {\n\n var metaTagsData = metaTagsDataProvider.getMetaTagsData();\n var defaultMeta = metaTagsData.defaultMeta;\n\n $stateProvider\n\n .state('login', {\n controller: 'LoginController',\n controllerAs: 'vm',\n parent: 'auth',\n templateUrl: 'app/auth/login/login.view.html',\n url: 'login',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.login)\n }\n })\n\n .state('forgotpw', {\n url: 'login/forgot',\n templateUrl: 'app/auth/login/forgot/login-forgot.view.html',\n controller: 'LoginForgotController',\n controllerAs: 'vm',\n parent: 'auth',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.forgotpassword)\n }\n })\n\n .state('resetpw', {\n templateUrl: 'app/auth/login/reset/login-reset.view.html',\n controller: 'LoginResetController',\n controllerAs: 'vm',\n parent: 'auth',\n url: '/login/reset',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.resetpassword)\n }\n })\n .state('resetpwtoken', {\n controller: 'LoginResetController',\n controllerAs: 'vm',\n parent: 'auth',\n templateUrl: 'app/auth/login/reset/login-reset.view.html',\n url: 'login/reset/?token',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.resetpassword)\n }\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('auth.login')\n .controller('LoginController', LoginController);\n\n function LoginController($scope, $rootScope, $state, $log, authService, Session, formsService, flashService, Notification, REDIRECT) {\n var vm = this;\n\n // ViewModel Properties\n vm.isModal = ($state.current.name === 'auction-item');\n vm.user = {};\n\n // ViewModel Methods\n vm.onSubmit = handleSubmit;\n\n // error handling utility\n $scope.hasError = formsService.hasError;\n $scope.showError = formsService.showError;\n $scope.canSave = formsService.canSave;\n\n\n (function init() {\n $scope.isDataLoading = false;\n\n // reset login status - ensure user is logged out on controller load\n // user should never get to /login when authenticaed - this is precaution\n Session.destroy();\n })();\n\n\n // Private Methods\n // handleSubmit\n function handleSubmit() {\n $scope.isDataLoading = true;\n\n return authService.login(vm.user)\n .then(function(response) {\n $scope.isDataLoading = false;\n $rootScope.setCurrentUser(response);\n\n if (!vm.isModal) {\n $state.go(REDIRECT.BID);\n }\n else {\n $rootScope.$broadcast('UserUpdate');\n }\n\n $log.debug('LoginController.handleSubmit-success:\\n', response);\n Notification.success('Login Success!');\n flashService.clear();\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('LoginController.handleSubmit-error:\\n', error);\n flashService.error(error.message);\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('account.settings', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('account.settings')\n .config(settingsRouteConfig);\n\n function settingsRouteConfig($stateProvider, metaTagsDataProvider) {\n\n var metaTagsData = metaTagsDataProvider.getMetaTagsData();\n var defaultMeta = metaTagsData.defaultMeta;\n\n $stateProvider\n\n .state('settings', {\n controller: 'SettingsController',\n controllerAs: 'vm',\n parent: 'account',\n templateUrl: 'app/account/settings/settings.view.html',\n url: 'settings',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.settings)\n }\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('account.settings')\n .controller('SettingsController', SettingsController);\n\n function SettingsController($q, $log, $scope, $rootScope, Session, formsService, passService, flashService, usernameService, Notification, accountRepository, userRepository) {\n var vm = this;\n\n // ViewModel Properties\n vm.account = {};\n vm.user = {};\n vm.confirmPassword = '';\n vm.password = '';\n vm.orginalUsername = null;\n\n // ViewModel Methods\n vm.isPasswordConfirmed = passService.isPasswordConfirmed;\n vm.onSubmit = handleSubmit;\n vm.isUsernameValid = usernameService.isUsernameValid;\n vm.isUsernameUnique = usernameService.isUsernameUnique;\n\n // error handling utility\n $scope.canSave = formsService.canSave;\n $scope.hasError = formsService.hasError;\n $scope.showError = formsService.showError;\n\n\n (function init() {\n $scope.isDataLoading = false;\n\n getUser();\n })();\n\n\n // Private Methods\n // getUser\n function getUser() {\n $scope.isDataLoading = true;\n\n var promises = [\n accountRepository.getMy(),\n userRepository.getMy()\n ];\n\n return $q.all(promises)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n $log.debug('SettingsController.getUser-success:\\n', response);\n\n var tmpAccount = response[0];\n vm.account = {\n name: tmpAccount.name,\n phone: tmpAccount.phone,\n address1: tmpAccount.address1,\n address2: tmpAccount.address2,\n city: tmpAccount.city,\n state: tmpAccount.state,\n zipcode: tmpAccount.zipcode,\n };\n\n vm.orginalUsername = response[1].username;\n vm.user = {\n email: response[1].email,\n username: response[1].username\n };\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('SettingsController.getUser-error:\\n', error);\n Notification.error('There was an error loading the user.');\n });\n }\n\n // changePassword\n function changePassword() {\n $scope.isDataLoading = true;\n\n return userRepository.changeMyPassword(vm.password)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n $log.debug('SettingAdminProfileController.changePassword-success:\\n', response);\n Notification.success('Password Successfully Updated!');\n flashService.clear();\n })\n .catch(function(error) {\n $log.error('SettingAdminProfileController.changePassword-error:\\n', error);\n flashService.error('There was an error updating the password.');\n });\n }\n\n // handleSubmit\n function handleSubmit() {\n $scope.isDataLoading = true;\n\n var promises = [];\n promises.push(accountRepository.updateMy(vm.account));\n promises.push(userRepository.updateMy(vm.user));\n\n return $q.all(promises)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n $log.debug('SettingAdminProfileController.handleSubmit-success:\\n', response);\n\n if (vm.password) {\n changePassword();\n }\n\n // update global currentUser object\n vm.orginalUsername = response[1].username;\n var user = {\n email: response[1].email,\n _id: response[1]._id,\n name: response[0].name,\n phone: response[0].phone,\n username: response[1].username\n };\n\n Session.setUser(user);\n $rootScope.setCurrentUser(user);\n\n Notification.success('Profile Successfully Updated!');\n flashService.clear();\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('SettingAdminProfileController.handleSubmit-error:\\n', error);\n flashService.error(error.message);\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('account.bid')\n .config(bidRouteConfig);\n\n function bidRouteConfig($stateProvider, metaTagsDataProvider) {\n\n var metaTagsData = metaTagsDataProvider.getMetaTagsData();\n var defaultMeta = metaTagsData.defaultMeta;\n\n $stateProvider\n\n .state('bid', {\n controller: 'BidController',\n controllerAs: 'vm',\n parent: 'account',\n templateUrl: 'app/account/bid/bid.view.html',\n url: 'my-bids',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.mybids)\n }\n })\n\n .state('bid-photos', {\n onEnter: function($state, $stateParams, modalService) {\n if ($stateParams.bid && typeof $stateParams.bid._id === 'string') {\n modalService.show(\n 'app/account/bid/bid-photos/bid-photos.modal.html',\n 'BidPhotosController'\n );\n }\n else {\n $state.go('bid');\n }\n },\n params: {\n bid: null,\n },\n parent: 'bid',\n url: '/photos',\n data: {\n meta: Object.assign({}, defaultMeta, metaTagsData.mybids)\n }\n });\n }\n})();\n\n\n(function() {\n 'use strict';\n\n angular\n .module('account.bid')\n .controller('BidController', BidController);\n\n function BidController($log, $scope, $rootScope, $timeout, $state, modalService, bidRepository, Notification, itemRepository, auctionRepository) {\n var vm = this;\n\n // ViewModel Properties\n vm.bids = [];\n vm.activePanel = 0;\n\n\n // ViewModel Methods\n vm.onImageClick = handleImageClick;\n vm.onCancel = handleCancel;\n vm.onEdit = handleEdit;\n\n // Event listeners\n $scope.$on('BidListUpdate', getMyBids);\n\n\n (function init() {\n $scope.isDataLoading = false;\n getMyBids();\n })();\n\n\n // Private Methods\n // getMyBids\n function getMyBids() {\n $scope.isDataLoading = true;\n\n return bidRepository.listMyBids($rootScope.currentUser.email)\n .then(function(response) {\n $scope.isDataLoading = false;\n vm.bids = response;\n\n getItem();\n\n $log.debug('vm.bids:\\n', vm.bids);\n\n //$log.debug('BidController.getBids-success:\\n', response);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('BidController.getBids-error:\\n', error);\n Notification.error('There was an error loading the bids.');\n });\n }\n\n // getItem\n function getItem() {\n //$scope.isDataLoading = true;\n\n _.forEach(vm.bids, function(bid, index) {\n\n return itemRepository.find(bid.item.id)\n .then(function(response) {\n $scope.isDataLoading = false;\n var item = response;\n\n vm.bids[index].items = item;\n\n getAuction(item, index);\n\n $log.debug('BidController.getItem-success:\\n', response);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n return;\n // $log.error('BidController.getItem-error:\\n', error);\n // Notification.error('There was an error loading the item.');\n });\n });\n }\n\n // getAuction\n function getAuction(item, index) {\n\n return auctionRepository.find(item.events[0].id)\n .then(function(response) {\n $scope.isDataLoading = false;\n var auction = response;\n\n // check how much time before auction start\n var timesBefore = auction.startDates.map(function(date) {\n return moment(date).diff(moment(), 'minutes');\n });\n\n if (timesBefore.every(function(time) {\n return time < -480;\n })) {\n auction.isPast = true;\n }\n else if (timesBefore.some(function(time) {\n return time < 60;\n })) {\n auction.isLive = true;\n }\n\n vm.bids[index].auction = auction;\n\n\n //$log.debug('BidController.getAuction-success:\\n', response);\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n return;\n // $log.error('BidController.getAuction-error:\\n', error);\n // Notification.error('There was an error loading the auction.');\n });\n }\n\n // handleImageClick\n function handleImageClick(bid) {\n $.fancybox.open(bid.items.featuredImagesUrls.map(function(url, index) {\n return {\n src: url.md,\n type: 'image',\n opts: {\n caption: 'LOT #' + bid.items.lot + ': ' + bid.items.title + '
' + (index+1) + '/' + bid.items.featuredImagesUrls.length\n }\n };\n }));\n }\n\n // handleCancel\n function handleCancel(bidId, itemId) {\n if (confirm('Are you sure you want to cancel your bid?')) {\n $scope.isDataLoading = true;\n\n return bidRepository.deleteOneBid(bidId, itemId)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n modalService.hide();\n\n $rootScope.$broadcast('BidListUpdate');\n\n $log.debug('BidPhotosController.handleCancel-success:', response);\n Notification.success('Bid deleted.');\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('BidPhotosController.handleCancel-error:', error);\n Notification.error('There was an error deleting the bid.');\n });\n }\n }\n\n // handleEdit\n function handleEdit(auctionSlug, itemSlug) {\n // $log.debug('auctionSlug:', auctionSlug);\n // $log.debug('itemSlug:', itemSlug);\n $scope.isDataLoading = false;\n\n modalService.hide(false);\n\n var params = {\n auctionSlug: auctionSlug,\n itemSlug: itemSlug\n };\n\n $timeout(function() {\n $state.go('auction-item', params);\n }, 500);\n }\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('public', [\n 'public.about',\n 'public.auction',\n 'public.assets',\n 'public.blog',\n 'public.category',\n 'public.home',\n 'public.pages',\n ]);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('public')\n .controller('PublicController', PublicController);\n\n function PublicController($log, $scope, contactRepository, subscriptionRepository, modalService, formsService, flashService, Notification) {\n var vm = this;\n\n // ViewModel Properties\n vm.message = {};\n vm.subscriber = {};\n\n // ViewModel Methods\n vm.onContactClick = handleContactClick;\n vm.onSubscribeClick = handleSubscribeClick;\n vm.onContactSubmit = handleContactSubmit;\n vm.onSubscribeSubmit = handleSubscribeSubmit;\n vm.onHideClick = handleHideClick;\n\n // error handling utility\n $scope.hasError = formsService.hasError;\n $scope.showError = formsService.showError;\n $scope.canSave = formsService.canSave;\n\n\n (function init() {\n $scope.isDataLoading = false;\n flashService.clear();\n })();\n\n\n // Private Methods\n // handleContactClick\n function handleContactClick() {\n modalService.show(\n 'app/public/public-contact.modal.html',\n PublicController,\n false\n );\n }\n\n // handleSubscribeClick\n function handleSubscribeClick() {\n modalService.show(\n 'app/public/public-subscribe.modal.html',\n PublicController,\n false\n );\n }\n\n // handleContactSubmit\n function handleContactSubmit() {\n $scope.isDataLoading = true;\n\n $log.debug('handleContactSubmit');\n\n return contactRepository.create(vm.message)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n modalService.hide();\n\n $log.debug('PublicController.handleContactSubmit-success:\\n', response);\n Notification.success('Message Successfully Sent!');\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('PublicController.handleContactSubmit-error:\\n', error);\n flashService.error('There was an error sending the message.');\n });\n }\n\n // handleSubscribeSubmit\n function handleSubscribeSubmit() {\n $scope.isDataLoading = true;\n\n return subscriptionRepository.create(vm.subscriber)\n .then(function(response) {\n $scope.isDataLoading = false;\n\n modalService.hide();\n\n $log.debug('PublicController.handleSubscribeSubmit-success:\\n', response);\n Notification.success('Subscriber Successfully Added!');\n })\n .catch(function(error) {\n $scope.isDataLoading = false;\n\n $log.error('PublicController.handleSubscribeSubmit-error:\\n', error);\n flashService.error('There was an error creating the subscriber.');\n });\n }\n\n // handleHideClick\n function handleHideClick() {\n $scope.isDataLoading = true;\n\n $log.debug('handleHideClick');\n\n modalService.hide();\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('main', []);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('main')\n .controller('MainController', MainController);\n\n function MainController($log, $scope, $rootScope, $aside, Session, authService, modalService, categoriesRepository, taxonomyService,\n Notification, REDIRECT, ENV_VARS, HIGHLIGHT_TYPE) {\n var vm = this;\n\n // ViewModel Properties\n vm.asideMobile = false;\n\n // ViewModel Methods\n vm.getNumber = getNumber;\n vm.isAuthenticated = authService.isAuthenticated;\n vm.isAuthorized = authService.isAuthorized;\n vm.onLogoutClick = handleLogoutClick;\n vm.onToggleClick = handleToggleClick;\n\n // GLOBAL ENV VARS\n $rootScope.appName = ENV_VARS.appName; // app name from gulp file json\n $rootScope.appDesc = ENV_VARS.appDesc; // app description from gulp file json\n $rootScope.categories = [];\n $rootScope.currentUser = {};\n $rootScope.setCurrentUser = handleCurrentUserSet;\n $rootScope.PATH = REDIRECT;\n $rootScope.HIGHLIGHT_TYPE = HIGHLIGHT_TYPE;\n\n // we set these for page refresh\n if (vm.isAuthenticated()) {\n if (Session.user) {\n $rootScope.currentUser = Session.user;\n $log.debug('MainController.$rootScope.currentUser:\\n', $rootScope.currentUser);\n\n }\n }\n\n\n (function init() {\n getCategories();\n })();\n\n\n // Private Properties\n var aside = $aside({\n onHide: handleSidebarHide,\n onBeforeShow: handleSidebarShow,\n scope: $scope,\n show: false,\n templateUrl: 'app/public/public-sidebar.view.html',\n });\n\n // Private Methods\n // handleCurrentUserSet\n function handleCurrentUserSet(user) {\n $rootScope.currentUser = user;\n }\n\n // handleLogoutClick\n function handleLogoutClick() {\n authService.logout();\n }\n\n // handleSidebarHide\n function handleSidebarHide() {\n vm.asideMobile = false;\n }\n\n // handleSidebarShow\n function handleSidebarShow() {\n vm.asideMobile = true;\n }\n\n // handleToggleClick\n function handleToggleClick() {\n aside.$promise.then(function() {\n aside.show();\n });\n }\n\n\n // STATE CHANGE\n $scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {\n // hide left aside\n aside.$promise.then(function() {\n aside.hide();\n });\n\n // hide modal window\n modalService.hide(false);\n });\n\n $scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {\n // set unique id on body tag for any state we specify in routes files\n if (toState.data) {\n vm.bodyClass = toState.data.bodyClass ? toState.data.bodyClass : '';\n vm.wrapClass = toState.data.wrapClass ? toState.data.wrapClass : '';\n }\n\n // scroll to the top of page if there is no modal windows on enter\n if (!toState.onEnter && (!fromState.onEnter || fromState.parent !== toState.name)) {\n document.body.scrollTop = document.documentElement.scrollTop = 0;\n }\n });\n\n\n // getCategories\n function getCategories() {\n return categoriesRepository.list()\n .then(function(response) {\n $log.debug('MainController.getCategories-success:\\n', response);\n\n var catsWithLevel = taxonomyService.group(response.data);\n\n // TODO: define parent category by something else\n $rootScope.categories = catsWithLevel[0].children;\n })\n .catch(function(error) {\n $log.error('MainController.getCategories-error:\\n', error);\n Notification.error('There was an error loading Categories.');\n });\n }\n\n // getNumber\n function getNumber(num) {\n return new Array(num);\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular.module('auth', [\n 'auth.login',\n 'auth.signup'\n ]);\n})();\n\n(function() {\n 'use strict';\n\n angular.module('account', [\n 'account.bid',\n 'account.settings'\n ]);\n})();\n\n(function() {\n 'use strict';\n\n angular.module('app', [\n '720kb.socialshare',\n 'angular-carousel',\n 'angular-google-analytics',\n 'angular.filter',\n 'infinite-scroll',\n 'LocalStorageModule',\n 'mgcrea.ngStrap',\n 'ngAnimate',\n 'ngMap',\n 'ngMessages',\n 'ngMeta',\n 'ngSanitize',\n 'ngTouch',\n 'ui-notification',\n 'ui.router',\n 'ui.router.title',\n 'ui.utils.masks',\n 'ui.validate',\n 'youtube-embed',\n 'wipImageZoom',\n 'ngMask',\n // setup\n 'app.env',\n 'app.directives',\n 'app.filters',\n 'app.services',\n 'main',\n // pages\n 'account',\n 'auth',\n 'public'\n ]);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .run(runBlock);\n\n function runBlock(ngMeta, authService, accountRepository) {\n // seo - meta tags\n ngMeta.init();\n\n // GET EXISTING SESSION\n // persist user session data on page refresh\n authService.getSession();\n\n if (authService.isAuthenticated()) {\n //accountRepository.updateCache();\n }\n\n }\n})();\n\n(function () {\n \"use strict\";\n\n angular.module(\"app\").config(routeConfig);\n\n function routeConfig(\n $stateProvider,\n $urlRouterProvider,\n $urlMatcherFactoryProvider\n ) {\n // redirects\n $urlMatcherFactoryProvider.strictMode(false);\n $urlMatcherFactoryProvider.caseInsensitive(true);\n\n $urlRouterProvider.when(\n \"/SSAbenefit\",\n \"auctions/ssa-benefit-art-auction\"\n );\n $urlRouterProvider.when(\n \"/ssabenefit\",\n \"auctions/ssa-benefit-art-auction\"\n );\n $urlRouterProvider.when(\"/texas\", \"category/texas-western-art\");\n $urlRouterProvider.when(\n \"/category/texas\",\n \"category/texas-western-art\"\n );\n $urlRouterProvider.when(\n \"/category/texas-art\",\n \"category/texas-western-art\"\n );\n $urlRouterProvider.when(\"/western\", \"category/texas-western-art\");\n $urlRouterProvider.when(\n \"/category/western-arts\",\n \"category/texas-western-art\"\n );\n $urlRouterProvider.when(\"/luxury\", \"category/luxury\");\n $urlRouterProvider.when(\"/antiques\", \"category/antiques\");\n $urlRouterProvider.when(\n \"/agarita\",\n \"auctions/real-estate-auction-101-e-agarita-107-e-agarita-in-monte-vis\"\n );\n $urlRouterProvider.when(\n \"/gharvey\",\n \"auctions/western-arts-auction-featuring-the-estate-of-g-harvey\"\n );\n // $urlRouterProvider.when('/blog', 'company/blog');\n // $urlRouterProvider.when('/blog/:slug', 'company/blog/:slug');\n // $urlRouterProvider.when('/latest-news', 'company/news');\n // $urlRouterProvider.when('/about', 'company/team');\n // $urlRouterProvider.when('/products/oligo-pools', 'products/pools');\n // $urlRouterProvider.when('/events', 'company/events');\n // $urlRouterProvider.when('/contact-us', 'contact');\n // $urlRouterProvider.when('/Oligo_Pools/CRISPR_Screens', 'products/pools');\n // $urlRouterProvider.when('/gene_fragments', 'products/genes#geneFragments');\n // $urlRouterProvider.when('/CRISPR_screening_oligo_pools', 'products/pools');\n\n // $urlRouterProvider.when('/press-releases', 'company/news');\n // $urlRouterProvider.when('/press', 'company/news');\n // $urlRouterProvider.when('/press-releases/:slug', 'company/press/:slug');\n // $urlRouterProvider.when('/press/:slug', 'company/press/:slug');\n\n $stateProvider\n\n // MAIN\n .state(\"main\", {\n abstract: true,\n templateUrl: \"app/main/main.view.html\",\n url: \"/\",\n })\n\n // TEMPLATES\n .state(\"account\", {\n abstract: true,\n data: {\n wrapClass: \"site-wrap-account\",\n },\n parent: \"main\",\n resolve: {\n account: function (authSecurityService) {\n return authSecurityService.requireAccountUser();\n },\n },\n views: {\n content: {\n templateUrl: \"app/account/account.view.html\",\n },\n footer: {\n controller: \"PublicController\",\n controllerAs: \"vm\",\n templateUrl: \"app/account/account-footer.view.html\",\n },\n header: {\n templateUrl: \"app/account/account-header.view.html\",\n },\n subheader: {\n templateUrl: \"app/account/account-subheader.view.html\",\n },\n },\n })\n\n .state(\"auth\", {\n abstract: true,\n data: {\n wrapClass: \"site-wrap-auth\",\n },\n parent: \"main\",\n resolve: {\n unAuthenticatedUser: function (authSecurityService) {\n return authSecurityService.requireUnauthenticatedUser();\n },\n },\n views: {\n content: {\n templateUrl: \"app/auth/auth.view.html\",\n },\n },\n })\n\n .state(\"public\", {\n abstract: true,\n data: {\n wrapClass: \"site-wrap-public\",\n },\n parent: \"main\",\n views: {\n content: {\n templateUrl: \"app/public/public.view.html\",\n },\n footer: {\n controller: \"PublicController\",\n controllerAs: \"vm\",\n templateUrl: \"app/public/public-footer.view.html\",\n },\n header: {\n templateUrl: \"app/public/public-header.view.html\",\n },\n subheader: {\n templateUrl: \"app/public/public-subheader.view.html\",\n },\n },\n })\n\n // SERVICE PAGES\n .state(\"404client\", {\n data: {\n wrapClass: \"site-wrap-404\",\n },\n parent: \"main\",\n resolve: {\n $title: function () {\n return \"Page Not Found\";\n },\n },\n views: {\n content: {\n templateUrl: \"app/main/main-404.view.html\",\n },\n },\n url: \"*path\",\n })\n\n .state(\"404server\", {\n data: {\n wrapClass: \"site-wrap-404\",\n },\n parent: \"main\",\n resolve: {\n $title: function () {\n return \"Page Not Found\";\n },\n },\n views: {\n content: {\n templateUrl: \"app/main/main-404.view.html\",\n },\n },\n });\n\n // function applyRedirects(prefix, urls) {\n // (urls || []).forEach(function(url) {\n // $urlRouterProvider.when(url, prefix + url);\n // });\n // }\n }\n})();\n\nangular.module(\"app.env\", [])\n.constant(\"ENV_VARS\", {\n \"appName\": \"Vogt Auction\",\n \"appDesc\": \"The Great Texas Auction House\",\n \"appDomain\": \"vogtauction.com\",\n \"apiUrl\": \"https://api.vogtauction.com/\",\n \"debug\": \"true\",\n \"version\": \"1.0.0\",\n \"s3BucketDomain\": \"cdn-vogtauction.s3.amazonaws.com\",\n \"cdnDomain\": \"cdn-vogtauction.s3.amazonaws.com\",\n \"googleAnalyticsKey\": \"UA-25214463-1\"\n});\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .constant('REDIRECT', {\n BID: 'bid',\n HOME: 'home',\n LOGIN: 'login',\n SETTINGS: 'settings',\n SIGNUP: 'signup'\n })\n .constant('HIGHLIGHT_TYPE', {\n EVENT: 'Event',\n PAGE: 'Page',\n VIDEO: 'Video',\n })\n .factory('API', function(ENV_VARS) {\n return {\n BASE_URL: ENV_VARS.apiUrl, // controlled from /config/app.env-vars.json file\n ACCOUNTS: 'api/accounts',\n ASSETS: 'api/assets',\n BIDS: 'api/bids',\n BLOG: 'api/blog',\n CATEGORIES: 'api/categories',\n CONTACT: 'api/contact',\n EVENTS: 'api/events',\n HIGHLIGHTS: 'api/highlights',\n ITEMS: 'api/items',\n LOGIN: 'api/login',\n LOGIN_FORGOT: 'api/login/forgot',\n LOGIN_RESET: 'api/login/reset',\n LOGOUT: 'api/logout',\n PAGES: 'api/pages',\n SIGNUP: 'api/signup',\n SIGNUP_INVITATION: 'api/signup/invitation',\n SPECIALTIES: 'api/specialties',\n SUBSCRIPTION: 'api/newsletter',\n TEAM: 'api/team',\n USERS: 'api/users'\n };\n });\n})();\n\n(function () {\n \"use strict\";\n\n angular.module(\"app\").config(config);\n\n function config(\n $logProvider,\n $locationProvider,\n $httpProvider,\n $asideProvider,\n $modalProvider,\n $tooltipProvider,\n $dropdownProvider,\n $titleProvider,\n NotificationProvider,\n AnalyticsProvider,\n ENV_VARS\n ) {\n // LOGGING (turn on/off globally)\n if (ENV_VARS.debug === \"true\") {\n $logProvider.debugEnabled(true);\n } else {\n $logProvider.debugEnabled(false);\n }\n\n // CLEAN URLS\n $locationProvider.hashPrefix(\"!\");\n $locationProvider.html5Mode({\n enabled: true,\n requireBase: false,\n });\n\n // AUTH INTERCEPTOR SERVICE (SNIFF FOR 401s)\n $httpProvider.interceptors.push(\"authInterceptorService\");\n // RESPONSE INTERCEPTOR SERVICE (SNIFF FOR 404s)\n $httpProvider.interceptors.push(\"responseInterceptorService\");\n\n // UI-NOTIFICATION\n NotificationProvider.setOptions({\n replaceMessage: true,\n startTop: 15,\n startRight: 20,\n });\n\n // ANGULAR STRAP ASIDE DEFAULTS\n angular.extend($asideProvider.defaults, {\n animation: \"am-fade-and-slide-top\",\n container: \"body\",\n html: true,\n });\n\n // ANGULAR STRAP MODAL DEFAULTS\n angular.extend($modalProvider.defaults, {\n animation: \"none\",\n container: \"body\",\n html: true,\n });\n\n // ANGULAR STRAP TOOLTIP DEFAULTS\n angular.extend($tooltipProvider.defaults, {\n container: \"body\",\n });\n\n // ANGULAR STRAP DROPDOWN DEFAULTS\n angular.extend($dropdownProvider.defaults, {\n container: \"self\",\n delay: {\n show: 0,\n hide: 200,\n },\n placement: \"bottom\",\n trigger: \"hover\",\n });\n\n // PAGE TITLE\n $titleProvider.documentTitle(function ($rootScope) {\n var title = $rootScope.ngMeta.title;\n var appName = ENV_VARS.appName;\n return title\n ? title.search(appName) >= 0\n ? title\n : title + \" | \" + appName\n : appName;\n });\n\n // Google analytics\n // GoogleAnalyticsKey must be added to `config/app.env-vars.json`\n if (ENV_VARS.googleAnalyticsKey) {\n AnalyticsProvider.setAccount(ENV_VARS.googleAnalyticsKey);\n }\n }\n})();\n\nangular.module(\"app\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/account/account-footer.view.html\",\"\");\n$templateCache.put(\"app/account/account-header.view.html\",\"\");\n$templateCache.put(\"app/account/account-subheader.view.html\",\"\");\n$templateCache.put(\"app/account/account.view.html\",\"\");\n$templateCache.put(\"app/auth/auth.view.html\",\"
\");\n$templateCache.put(\"app/main/main-404.view.html\",\"

Page Not Found

Vogt Auction recently updated their website and you may be using an old link. Click below to go to the new web experience.

\");\n$templateCache.put(\"app/main/main.view.html\",\"\");\n$templateCache.put(\"app/public/public-contact.modal.html\",\"

Send Us A Message

This field is required
This field is required Please enter a valid email
This field is required
\");\n$templateCache.put(\"app/public/public-footer.view.html\",\"\");\n$templateCache.put(\"app/public/public-header.view.html\",\"\");\n$templateCache.put(\"app/public/public-sidebar.view.html\",\"
\");\n$templateCache.put(\"app/public/public-subheader.view.html\",\"\");\n$templateCache.put(\"app/public/public-subscribe.modal.html\",\"

Get Auction Updates

This field is required
This field is required Please enter a valid email
\");\n$templateCache.put(\"app/public/public.view.html\",\"\");\n$templateCache.put(\"app/account/bid/bid.view.html\",\"

My Bids

0 && !isDataLoading\\\">
0 && !isDataLoading\\\">
Past Auction Bids
-1\\\">
My Past Bid:  ${{bid.bidamount || 0}}
LOT #{{bid.lot}}: {{bid.item.title}}
Auction Has Ended.
Call (210) 822-6155 for sales results.

You didn\\'t have any bids yet.

\");\n$templateCache.put(\"app/account/settings/settings.view.html\",\"

Settings

This field is required
This field is required
This field is required Username must only contain alpha-numeric and underscore characters Username should not contain a space. That username is already in use
The password needs to be at least 6 characters
Password and confirmation do not match
This field is required
This field is required
This field is required
This field is required
This field is required
This field is required

\");\n$templateCache.put(\"app/auth/login/login.view.html\",\"
Log In
This field is required
This field is required
\");\n$templateCache.put(\"app/auth/signup/signup.view.html\",\"
Step 1: Create Account
This field is required Please enter a valid email That email is already in use
This field is required Username must only contain alpha-numeric and underscore characters Username should not contain a space. That username is already in use
Please input your password The password needs to be at least 6 characters
Please confirm your password Password and confirmation do not match
Step 2: Complete Profile
This field is required
This field is required
This field is required
This field is required
This field is required
This field is required
or
Log In
\");\n$templateCache.put(\"app/public/about/about.view.html\",\"

About Us

The Team

\");\n$templateCache.put(\"app/public/assets/assets.view.html\",\"
\");\n$templateCache.put(\"app/public/auction/auction.view.html\",\"

Auctions

Next Auction Coming Soon!

0 && !isDataLoading\\\">
Past Auctions
-1\\\" title=\\\"{{auction.title}}\\\" ui-sref=\\\"auction-detail({auctionSlug: auction.meta.slug})\\\">

Category: {{category.name}}, 
\");\n$templateCache.put(\"app/public/blog/blog.view.html\",\"

{{vm.posts[0].title}}

{{cat.name}}, 
{{post.title}}
\");\n$templateCache.put(\"app/public/category/category.view.html\",\"

{{vm.specialty.custom.text}}
{{ block.person.name }}
{{ block.person.title }}
{{ item.title }}
{{ item.description }}
\");\n$templateCache.put(\"app/public/home/home.view.html\",\"
News We have a new website! You can now PRE-BID on everything right here on the site.

Questions? Call or text us anytime at 210-865-8648, or email rob@vogtauction.com.

0 && !isDataLoading\\\">
Past Auctions

Category: {{category.name}}, 
\");\n$templateCache.put(\"app/public/pages/pages.view.html\",\"

\");\n$templateCache.put(\"app/account/bid/bid-photos/bid-photos.modal.html\",\"
LOT #{{vm.bid.lot}}: {{vm.bid.item.title}}
0\\\" rn-carousel-indicators=\\\"\\\" rn-carousel-index=\\\"vm.photoIndex\\\">
\");\n$templateCache.put(\"app/auth/login/forgot/login-forgot.view.html\",\"
Forgot Your Password?
This field is required Please enter a valid email
Go to Log In
\");\n$templateCache.put(\"app/auth/login/reset/login-reset.view.html\",\"
Create Password
Please input your password The password needs to be at least 6 characters
Please confirm your password Password and confirmation do not match
Back to Login
\");\n$templateCache.put(\"app/public/about/team/team.modal.html\",\"
\");\n$templateCache.put(\"app/public/auction/auction-detail/auction-detail.view.html\",\"

Past Auction: {{vm.auction.title}}

Auction
Auction date TBD
Gallery Previews
{{range.start | date:\\'EEE, MMM d, h:mma\\'}} — {{range.stop | date:\\'h:mma\\'}}
3}\\\" ng-repeat=\\\"image in vm.auction.featuredImagesUrls\\\"> 1}\\\">
0 || vm.searching)\\\">
Back to Auction
No Items Found.
\");\n$templateCache.put(\"app/public/home/directions/directions.view.html\",\"

Directions to Vogt auction

We\\'ll show you the way!

Vogt Auction Galleries is located at:
7233 Blanco Road in San Antonio, Texas

Hours: Monday-Friday 10am-6pm
Phone: (210) 822-6155
Fax: (210) 821-5821




WRITTEN DIRECTIONS

Coming from the north (Austin, New Braunfels, Dallas) Take I-35 south towards San Antonio. Exit onto Loop I-410 West (Exit #166). Continue for 7 miles, then exit at Blanco (Exit #20A). Turn right onto Blanco, drive 0.3 miles up Blanco heading north - we\\'re on the left at 7233 Blanco Rd.

Coming from the Hill Country on I- 10 (Fredericksburg, Kerrville, Comfort, Boerne) Take I - 10 east towards San Antonio. Exit onto Loop 410 East (Exit #564). Continue for 4 miles, then exit at Blanco (Exit #20A). Turn left onto Blanco, drive 0.3 miles up Blanco heading north - we\\'re on the left at 7233 Blanco Rd.

Coming from the Hill Country on 281 (Marble Falls, Johnson City, Blanco) Take US-281 south towards San Antonio. Exit onto Loop 410 West (near San Antonio Intl. Airport). Continue down Loop 410 1.5 miles, then exit at Blanco (Exit #20A). Turn left and drive 0.3 miles up Blanco heading north - we\\'re on the left at 7233 Blanco Rd.

Coming from the east (Houston) Take I-10 west towards San Antonio. Exit onto Loop I-410 North (Exit #581). Continue on 410 for 13 miles, then exit at Blanco (Exit #20A). Turn left onto Blanco, drive 0.3 miles up Blanco heading north – we\\'re on the left at 7233 Blanco Rd.

Coming from the south (Corpus Christi, Rio Grande Valley, Laredo) From Corpus Christi or the Valley, take I-37 north towards San Antonio. From Laredo, take I-35 north towards San Antonio. Laredo drivers exit onto I-37/281 North at exit #158 (near downtown San Antonio). Continue north on I-37/281 for 5 miles, exiting onto Loop I-410 West (near San Antonio Intl. Airport). Continue down Loop 410 1.5 miles, then exit at Blanco (Exit #20A). Turn left and drive 0.3 miles up Blanco heading north - we\\'re on the left at 7233 Blanco Rd.

\");\n$templateCache.put(\"app/public/auction/auction-detail/item/bid-authenticated.view.html\",\"
Starting Bid: {{vm.item.startPrice | currency:\\\"$\\\":0}}
This field is required
We will email you after the auction with your results. Questions? Call us at 210-822-6155.

If you\\'d like to place a maximum bid online, you must first cancel your phone request using the link below.

\");\n$templateCache.put(\"app/public/auction/auction-detail/item/bid-unauthenticated.view.html\",\"
Starting Bid: {{vm.item.startPrice | currency:\\\"$\\\":0}}
Click the button above to sign up or log in and pre-bid online!
\");\n$templateCache.put(\"app/public/auction/auction-detail/item/call-authenticated.view.html\",\"
(Minimum $100 bid please.) (Minimum $100 bid please.) We will call you during the auction when this lot comes up for bid.

Your phone number is {{ currentUser.phone | phonenumberFilter }}.
Change my phone number.

You\\'ve requested for us to call you by phone on this lot during the auction. We\\'ll call you at the following number: {{vm.bid.phone}}

If you\\'d rather have us call you during the auction, you must first cancel your online bid using the link below.

\");\n$templateCache.put(\"app/public/auction/auction-detail/item/call-unauthenticated.view.html\",\"
Click the button above to sign up or log in to receive a phone call on this lot!
\");\n$templateCache.put(\"app/public/auction/auction-detail/item/item.modal.html\",\"
LOT #{{vm.item.lot}}: {{vm.item.title}}
Estimate: {{vm.item.lowEstimate | currency:\\\"$\\\":0}} {{vm.item.highEstimate | currency:\\\"$\\\":0}}
Auction Has Ended.
Call (210) 822-6155 for sales results.
This item has been sold.
This item is not up for bid.
Auction Has Ended.
Call (210) 822-6155 for sales results.
Sold price: {{vm.item.soldPrice | currency:\\\"$\\\":0}} Lot passed
(incl. buyer’s premium)
Come bid in person – it’s fun!

We’re at 7233 Blanco Road in San Antonio:
Vogt Auction
Click here for Google Maps
Check us out Live:

(A 5% surcharge applies)
No Live Events for this Auction.
Bid live online at LiveAuctioneers (click here) and Invaluable (linked)
Pre-bidding here has closed.
To place a bid please call us at
210-822-6155.
\");}]);"],"sourceRoot":"/source/"}