{"version":3,"sources":["jquery.appear.js","timeout-dialog.js","bootstrap-datetimepicker.js","bootstrap-colorpicker-module.js","ng-file-upload.js","region-selector.js","jquery-migrate.min.js","bootstrap-input-spinner.js"],"names":["$","appeared","selector","filter","this","is","process","check_lock","index","selectorsLength","selectors","length","$appeared","trigger","$prior_appeared","$disappeared","not","add_selector","push","check_binded","defaults","interval","force_process","$window","window","expr","element","$element","window_left","scrollLeft","window_top","scrollTop","offset","left","top","height","data","width","fn","extend","appear","options","opts","on_check","setTimeout","scroll","resize","force_appear","module","require","jQuery","String","prototype","format","s","i","arguments","replace","RegExp","timeoutDialog","timestampLastKeepalive","settings","timeout","countdown","title","message","question","keep_alive_button_text","sign_out_button_text","keep_alive_url","logout_url","logout_redirect_url","restart_on_yes","dialog_width","TimeoutDialog","init","setupDialogTimer","setupBackupTimer","self","setupDialog","Date","getTime","setInterval","now","diff","bufferSeconds","signOut","destroyDialog","appendTo","dialog","modal","minHeight","closeOnEscape","draggable","resizable","classes",".ui-dialog","buttons","keep-alive-button","text","id","click","keepAlive","sign-out-button","startCountdown","remove","counter","html","clearInterval","get","is_forced","post","redirectLogout","target","location","factory","define","amd","exports","undefined","UTCDate","UTC","apply","Array","indexOf","find","n","Datetimepicker","that","container","language","dates","split","isRTL","rtl","formatType","DPGlobal","parseFormat","getDefaultFormat","isInline","isVisible","isInput","fontAwesome","bootcssVer","component","parent","componentReset","hasInput","linkField","linkFormat","minuteStep","pickerPosition","showMeridian","initialDate","zIndex","defaultTimeZone","timezone","icons","leftArrow","rightArrow","icontype","_attachEvents","clickedOutside","e","closest","hide","formatViewType","minView","convertViewMode","maxView","modes","wheelViewModeNavigation","wheelViewModeNavigationInverseDirection","wheelViewModeNavigationDelay","startViewMode","startView","viewMode","viewSelect","forceParse","template","templateV3","picker","on","proxy","mousedown","mousewheel","console","log","addClass","toggleClass","document","autoclose","keyboardNavigation","todayBtn","clearBtn","todayHighlight","weekStart","weekEnd","startDate","Infinity","endDate","datesDisabled","daysOfWeekDisabled","setStartDate","setEndDate","setDatesDisabled","setDaysOfWeekDisabled","setMinutesDisabled","minutesDisabled","setHoursDisabled","hoursDisabled","startDateDisabled","endDateDisabled","setStartDateDisabled","setEndDateDisabled","fillDow","fillMonths","update","showMode","show","constructor","_events","_detachEvents","focus","keyup","keydown","reset","el","ev","off","outerHeight","place","stopPropagation","preventDefault","type","date","val","setValue","datetimepicker","getDate","d","getUTCDate","getTimezoneOffset","getInitialDate","setInitialDate","setDate","setUTCDate","viewDate","fill","setFormat","formatted","getFormattedDate","formatDate","parseDate","updateNavArrows","isArray","map","toDateString","setTitle","value","parseInt","index_highest","each","index_current","css","containerOffset","outerWidth","bodyWidth","body","clientWidth","innerWidth","fromArgs","dowCnt","daysMin","append","monthsShort","year","getUTCFullYear","month","getUTCMonth","dayMonth","hours","getUTCHours","minutes","getUTCMinutes","startYear","startMonth","endYear","endMonth","currentDate","valueOf","today","months","toggle","clear","prevMonth","day","getDaysInMonth","getUTCDay","nextMonth","clsName","getFullYear","getMonth","inArray","empty","join","txt","meridian","meridianOld","actual","meridiem","toUpperCase","Math","floor","currentYear","end","removeClass","eq","slice","yearCont","hour","visibility","wheelPause","originalEvent","delta","wheelDelta","mode","nodeName","toLowerCase","className","dir","navStep","moveHour","moveDate","moveMonth","moveYear","convertViewModeText","getHours","getMinutes","getSeconds","_setDate","seconds","getUTCSeconds","setUTCMonth","setUTCFullYear","hasClass","setUTCHours","substr","setUTCMinutes","oldViewMode","which","change","moveMinute","new_date","new_month","test","mag","abs","dateWithinRange","keyCode","newDate","newViewDate","dateChanged","ctrlKey","shiftKey","newViewMode","max","min","old","option","args","shift","internal_return","$this","Constructor","en","days","daysShort","suffix","de","it","fr","navFnc","isLeapYear","field","Error","validParts","nonpunctuation","separators","parts","match","dateUTC","setMilliseconds","part","part_re","exec","call","filtered","toString","parsed","setters_order","setters_map","hh","v","h","HH","H","ii","ss","setUTCSeconds","yyyy","yy","m","isNaN","p","z","cnt","t","substring","M","MM","D","DD","P","Z","dd","mm","y","Y","F","j","l","w","N","S","a","g","G","A","seps","headTemplate","headTemplateV3","contTemplate","footTemplate","noConflict","angular","closestSlider","elem","matchesSelector","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","bind","parentNode","getOffset","fixedPosition","scrollX","scrollY","rect","getBoundingClientRect","offsetLeft","offsetTop","tagName","documentElement","offsetParent","pageYOffset","pageXOffset","stringParsers","re","parse","execResult","Helper","b","rgb","toRGB","r","rgba","hex","toHex","RGBtoHSB","V","C","setColor","key","hasOwnProperty","parser","values","setHue","setSaturation","setLightness","setAlpha","R","B","X","round","slider","maxLeft","maxTop","callLeft","callTop","knob","pointer","getSlider","getLeftPosition","event","pageX","getTopPosition","pageY","setSlider","targetOffset","offsetX","clientX","offsetY","clientY","children","style","componentSize","setKnob","directive","$document","$compile","Color","Slider","restrict","link","$scope","attrs","ngModel","bindMouseEvents","mousemove","mouseup","previewColor","colorpickerPreview","pickerColor","thisFormat","sliderSaturation","sliderAlpha","backgroundColor","newColor","$apply","$setViewValue","withInput","pickerColorInput","emitEvent","omitInnerInput","colorpickerValue","pickerColorPointers","getColorpickerTemplatePosition","positionValue","positionOffset","additionalSpaceBetweenElements","isDefined","colorpickerParent","position","componentHeightWithToolbars","offsetWidth","offsetHeight","componentWidthWithToolbars","documentMousedownHandler","hideColorpickerTemplate","showColorpickerTemplate","colorpickerTemplate","inline","colorpickerIsOpen","$$phase","$root","$digest","name","$emit","$modelValue","colorpicker","colorpickerPosition","colorpickerInline","colorpickerFixedPosition","colorpickerWithInput","colorpickerSize","componentSizePx","inputTemplate","closeButton","sliderHue","colorpickerCloseOnSelect","$render","$viewValue","$watch","shouldBeOpen","ngFileUpload","version","service","$http","$q","$timeout","patchXHR","fnName","newFn","XMLHttpRequest","sendHttp","config","method","headers","deferred","defer","promise","__setXHR_","xhr","__XHR","xhrFn","upload","addEventListener","notify","progressFunc","lengthComputable","then","resolve","reject","success","response","status","error","progress","abort","origXhrFn","__isFileAPIShim","orig","header","Function","addFieldToFormData","formData","isDate","toISOString","isString","sendFieldsAs","isObject","k","JSON","stringify","Blob","transformRequest","FormData","allFields","fields","formDataAppender","file","fileFormName","fileFormDataName","isFileFormNameString","fileName","http","ArrayBuffer","linkFileSelect","scope","attr","$parse","isInputTypeFile","changeFn","evt","isUpdating","fileList","__files_","files","rejFiles","item","validate","updateModel","ngfChange","ngfSelect","bindAttrToFileInput","fileElem","ngfMultiple","ngfCapture","accept","attributes","attribute","createFileInput","resetOnClick","disabled","$$ngfRefElem","replaceWith","appendChild","resetModel","clickHandler","clickAndAssign","ngfResetOnClick","ngfResetModelOnClick","shouldClickLater","navigator","userAgent","$on","search","FileAPI","ngfFixIE","ua","globStringToRegex","str","result","ngfAccept","$file","$event","fileSizeMax","ngfMaxSize","fileSizeMin","ngfMinSize","regexp","size","fileChange","noDelay","ngfKeep","ngfKeepDistinct","prevFiles","len","concat","assign","ngModelRejected","$files","$rejectedFiles","linkDrop","$location","calculateDragOverClass","accepted","items","dataTransfer","kind","clazz","ngfDragOverClass","delay","dragOverDelay","extractFiles","callback","allowDir","multiple","addFile","traverseFileTree","entry","path","isDirectory","filePath","dirReader","createReader","entries","processing","readEntries","results","protocol","webkitGetAsEntry","f","getAsFile","delays","waitForProcess","available","dropAvailable","ngfHideOnDropNotAvailable","ngfDrop","actualDragOverClass","leaveTimeout","ngfStopPropagation","effectAllowed","dropEffect","cancel","ngfAllowDir","div","createElement","ngfDropAvailable","FileReader","ngfSrc","URL","webkitURL","createObjectURL","fileReader","readAsDataURL","onload","ngfDefaultSrc","checkZipAndPlace_OnComplete","_helper","searchContainerIDDiv","parseTemplate","searchResultTemplateID","fadeIn","findRegionExact","zip","city","countryRegNr","callbackAdr","FleuropWebShop","RegionSelector","FindExact","hideTemplate","fadeOut","SetZipAndPlace","zipPlaceRegNr","helper","hiddenIDZipPlaceRegNr","zipplaceIDTextBox","blur","zipIDTextBox","placeIDTextBox","callbackonSetPlace","callerID","checkZipAndPlace","debounce","_searchText","GetZipAndPlace","migrateMute","o","jquery","u","migrateIsPatchEnabled","migrateDeduplicateWarnings","migrateWarnings","warn","migrateTrace","trace","Object","defineProperty","configurable","enumerable","set","noop","c","x","T","implementation","createHTMLDocument","innerHTML","migrateVersion","create","migrateDisablePatches","migrateEnablePatches","migrateReset","compatMode","querySelector","holdReady","uniqueSort","pseudos","parseFloat","ajax","done","fail","always","ajaxPrefilter","jsonp","url","contentType","removeAttr","bool","prop","getAttribute","setAttribute","Q","swap","cssHooks","Proxy","cssProps","Reflect","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","fontWeight","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","opacity","order","orphans","widows","zoom","cssNumber","E","hasData","fx","Tween","run","easing","requestAnimationFrame","hidden","load","q","add","O","fix","props","fixHooks","addProp","pop","_migrated_","readyState","splice","triggerHandler","special","ready","setup","UNSAFE_restoreLegacyHtmlPrefilter","W","_","I","nodeType","param","ajaxSettings","traditional","addBack","Deferred","Callbacks","exceptionHook","onPointerUp","spacePressed","onPointerDown","cancelable","originalVal","InputSpinner","inputSpinner","decrementButton","incrementButton","groupClass","buttonsClass","buttonsWidth","textAlign","autoDelay","autoInterval","boostThreshold","boostMultiplier","locale","newValue","updateInput","$original","$input","pow","decimals","numberFormat","dispatchEvent","Event","bubbles","createEvent","initEvent","stepHandling","step","calcStep","resetTimer","autoDelayHandler","autoIntervalHandler","boostStepsCount","autoMultiplier","stepMax","clearTimeout","updateAttributes","$buttonIncrement","$buttonDecrement","originalClass","inputClass","$inputGroup","newDecimals","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","parseLocaleNumber","stringNumber","thousandSeparator","decimalSeparator","prefix","prefixElement","suffixElement","prepend","observer","MutationObserver","observe","after","focusOut"],"mappings":"CAUA,SAAUA,GAaR,QAASC,GAASC,GAChB,MAAOF,GAAEE,GAAUC,OAAO,WACxB,MAAOH,GAAEI,MAAMC,GAAG,eAItB,QAASC,KACPC,GAAa,CACb,KAAK,GAAIC,GAAQ,EAAGC,EAAkBC,EAAUC,OAAQH,EAAQC,EAAiBD,IAAS,CACxF,GAAII,GAAYX,EAASS,EAAUF,GAInC,IAFAI,EAAUC,QAAQ,UAAWD,IAEzBE,EAAgBN,GAAQ,CAC1B,GAAIO,GAAeD,EAAgBN,GAAOQ,IAAIJ,EAC9CG,GAAaF,QAAQ,aAAcE,IAErCD,EAAgBN,GAASI,GAI7B,QAASK,GAAaf,GACpBQ,EAAUQ,KAAKhB,GACfY,EAAgBI,OAnClB,GAAIR,MAEAS,GAAe,EACfZ,GAAa,EACba,GACFC,SAAU,IACVC,eAAe,GAEbC,EAAUvB,EAAEwB,QAEZV,IA6BJd,GAAEyB,KAAK,KAAKxB,SAAW,SAASyB,GAC9B,GAAIC,GAAW3B,EAAE0B,EACjB,KAAKC,EAAStB,GAAG,YACf,OAAO,CAGT,IAAIuB,GAAcL,EAAQM,aACtBC,EAAaP,EAAQQ,YACrBC,EAASL,EAASK,SAClBC,EAAOD,EAAOC,KACdC,EAAMF,EAAOE,GAEjB,OAAIA,GAAMP,EAASQ,UAAYL,GAC3BI,GAAOP,EAASS,KAAK,sBAAwB,IAAMN,EAAaP,EAAQY,UACxEF,EAAON,EAASU,SAAWT,GAC3BK,GAAQN,EAASS,KAAK,uBAAyB,IAAMR,EAAcL,EAAQc,SAOjFrC,EAAEsC,GAAGC,QAEHC,OAAQ,SAASC,GACf,GAAIC,GAAO1C,EAAEuC,UAAWnB,EAAUqB,OAC9BvC,EAAWE,KAAKF,UAAYE,IAChC,KAAKe,EAAc,CACjB,GAAIwB,GAAW,WACTpC,IAGJA,GAAa,EAEbqC,WAAWtC,EAASoC,EAAKrB,WAG3BrB,GAAEwB,QAAQqB,OAAOF,GAAUG,OAAOH,GAClCxB,GAAe,EAOjB,MAJIuB,GAAKpB,eACPsB,WAAWtC,EAASoC,EAAKrB,UAE3BJ,EAAaf,GACNF,EAAEE,MAIbF,EAAEuC,QAEAQ,aAAc,WACZ,QAAI5B,IACFb,KACO,OAKZ,WACD,MAAsB,mBAAX0C,QAEFC,QAAQ,UAERC;AC3EXC,OAAOC,UAAUC,OAAS,WAItB,IAHA,GAAIC,GAAIlD,KACJmD,EAAIC,UAAU7C,OAEX4C,KACHD,EAAIA,EAAEG,QAAQ,GAAIC,QAAO,MAAQH,EAAI,MAAO,MAAOC,UAAUD,GAEjE,OAAOD,KAGV,SAAUtD,GACPA,EAAE2D,cAAgB,SAAUlB,GACxBmB,uBAAyB,CAEzB,IAAIC,IACAC,QAAS,KACTC,UAAW,GACXC,MAAO,mCACPC,QAAS,yCACTC,SAAU,iCACVC,uBAAwB,yBACxBC,qBAAsB,kBACtBC,eAAgB,cAChBC,WAAY,KACZC,oBAAqB,IACrBC,gBAAgB,EAChBC,aAAc,IAGlBzE,GAAEuC,OAAOsB,EAAUpB,EAEnB,IAAIiC,IACAC,KAAM,WACFvE,KAAKwE,mBACLxE,KAAKyE,oBAGTD,iBAAkB,WACd,GAAIE,GAAO1E,IAEXoB,QAAOoB,WAAW,WACdkC,EAAKC,eACoC,KAAzClB,EAASC,QAAUD,EAASE,aAGpCc,iBAAkB,WACd,GAAIC,GAAO1E,IACX0E,GAAKlB,wBAAyB,GAAIoB,OAAOC,UAEzCzD,OAAO0D,YAAY,WACf,GAAIC,IAAM,GAAIH,OAAOC,UACjBG,EAAOD,EAAML,EAAKlB,uBAClByB,EAAgB,EAChBD,GAA4C,KAApCvB,EAASC,QAAUuB,IAC3BP,EAAKQ,SAAQ,IAElB,MAIPP,YAAa,WACT,GAAID,GAAO1E,IACX0E,GAAKS,gBAELvF,EAAE,oDAC+B6D,EAASI,QAAQZ,OAAO,gCAAkCQ,EAASE,UAAY,WAAa,gCAC3FF,EAASK,SAAW,cAErDsB,SAAS,QACTC,QACGC,OAAO,EACPrD,MAAOwB,EAASY,aAChBkB,UAAW,OACXC,eAAe,EACfC,WAAW,EACXC,WAAW,EACXC,SAAUC,aAAc,kBACxBhC,MAAOH,EAASG,MAChBiC,SACIC,qBACIC,KAAMtC,EAASM,uBACfiC,GAAI,0BACJC,MAAO,WACHvB,EAAKwB,cAGbC,mBACIJ,KAAMtC,EAASO,qBACfgC,GAAI,0BACJC,MAAO,WACHvB,EAAKQ,SAAQ,QAM7BR,EAAK0B,kBAGTjB,cAAe,WACPvF,EAAE,mBAAmBW,SACrBX,EAAE,mBAAmByF,OAAO,SAC5BzF,EAAE,mBAAmByG,WAI7BD,eAAgB,WACZ,GAAI1B,GAAO1E,KACPsG,EAAU7C,EAASE,SAEvB3D,MAAK2D,UAAYvC,OAAO0D,YAAY,WAChCwB,GAAW,EACX1G,EAAE,sBAAsB2G,KAAKD,GAEzBA,GAAW,IACXlF,OAAOoF,cAAc9B,EAAKf,WAC1Be,EAAKQ,SAAQ,KAGlB,MAGPgB,UAAW,WACP,GAAIxB,GAAO1E,IACXA,MAAKmF,gBACL/D,OAAOoF,cAAcxG,KAAK2D,WAE1Be,EAAKlB,wBAAyB,GAAIoB,OAAOC,UACzCjF,EAAE6G,IAAIhD,EAASQ,eAAgB,SAAUjC,GACzB,MAARA,EACIyB,EAASW,gBACTM,EAAKF,mBAITE,EAAKQ,SAAQ,MAKzBA,QAAS,SAAUwB,GACf,GAAIhC,GAAO1E,IACXA,MAAKmF,gBAEsB,MAAvB1B,EAASS,WACTtE,EAAE+G,KAAKlD,EAASS,WAAY,SAAUlC,GAClC0C,EAAKkC,eAAeF,KAIxBhC,EAAKkC,eAAeF,IAK5BE,eAAgB,SAAUF,GAEtB,GAAIG,GAASpD,EAASU,mBACjBuC,KAEDtF,OAAO0F,SAAWD,IAI9BvC,GAAcC,SAEpBnD,OAAO0B;CClLR,SAASiE,GACgB,kBAAXC,SAAyBA,OAAOC,IACzCD,QAAQ,UAAWD,GAEnBA,EAD0B,gBAAZG,SACNrE,QAAQ,UAERC,SAEZ,SAASlD,EAAGuH,GA8BZ,QAASC,KACP,MAAO,IAAIxC,MAAKA,KAAKyC,IAAIC,MAAM1C,KAAMxB,YA5BjC,WAAamE,OAAMvE,YACvBuE,MAAMvE,UAAUwE,QAAU,SAAUC,EAAMtE,GACpCA,IAAMgE,IAAWhE,EAAI,GACrBA,EAAI,IAAGA,GAAKnD,KAAKO,QACjB4C,EAAI,IAAGA,EAAI,EACf,KAAK,GAAIuE,GAAI1H,KAAKO,OAAQ4C,EAAIuE,EAAGvE,IAC/B,GAAIA,IAAKnD,OAAQA,KAAKmD,KAAOsE,EAC3B,MAAOtE,EAGX,WA2BJ,IAAIwE,GAAiB,SAAUrG,EAASe,GACtC,GAAIuF,GAAO5H,IAEXA,MAAKsB,QAAU1B,EAAE0B,GAIjBtB,KAAK6H,UAAYxF,EAAQwF,WAAa,OAEtC7H,KAAK8H,SAAWzF,EAAQyF,UAAY9H,KAAKsB,QAAQU,KAAK,kBAAoB,KAC1EhC,KAAK8H,SAAW9H,KAAK8H,WAAYC,GAAQ/H,KAAK8H,SAAW9H,KAAK8H,SAASE,MAAM,KAAK,GAClFhI,KAAK8H,SAAW9H,KAAK8H,WAAYC,GAAQ/H,KAAK8H,SAAW,KACzD9H,KAAKiI,MAAQF,EAAM/H,KAAK8H,UAAUI,MAAO,EACzClI,KAAKmI,WAAa9F,EAAQ8F,YAAcnI,KAAKsB,QAAQU,KAAK,gBAAkB,WAC5EhC,KAAKiD,OAASmF,EAASC,YAAYhG,EAAQY,QAAUjD,KAAKsB,QAAQU,KAAK,gBAAkB+F,EAAM/H,KAAK8H,UAAU7E,QAAUmF,EAASE,iBAAiBtI,KAAKmI,WAAY,SAAUnI,KAAKmI,YAClLnI,KAAKuI,UAAW,EAChBvI,KAAKwI,WAAY,EACjBxI,KAAKyI,QAAUzI,KAAKsB,QAAQrB,GAAG,SAC/BD,KAAK0I,YAAcrG,EAAQqG,aAAe1I,KAAKsB,QAAQU,KAAK,kBAAmB,EAE/EhC,KAAK2I,WAAatG,EAAQsG,aAAe3I,KAAKyI,QAAWzI,KAAKsB,QAAQrB,GAAG,iBAAmB,EAAI,EAAOD,KAAK2I,WAAa3I,KAAKsB,QAAQrB,GAAG,gBAAkB,EAAI,GAE/JD,KAAK4I,YAAY5I,KAAKsB,QAAQrB,GAAG,WAAgC,GAAnBD,KAAK2I,WAAkB3I,KAAKsB,QAAQmG,KAAK,uNAAuNoB,SAAW7I,KAAKsB,QAAQmG,KAAK,2GAA2GoB,UACtb7I,KAAK8I,iBAAiB9I,KAAKsB,QAAQrB,GAAG,WAAgC,GAAnBD,KAAK2I,WAAkB3I,KAAKsB,QAAQmG,KAAK,sEAAsEoB,SAAS7I,KAAKsB,QAAQmG,KAAK,2CAA2CoB,UACxO7I,KAAK+I,SAAW/I,KAAK4I,WAAa5I,KAAKsB,QAAQmG,KAAK,SAASlH,OACzDP,KAAK4I,WAAuC,IAA1B5I,KAAK4I,UAAUrI,SACnCP,KAAK4I,WAAY,GAEnB5I,KAAKgJ,UAAY3G,EAAQ2G,WAAahJ,KAAKsB,QAAQU,KAAK,gBAAiB,EACzEhC,KAAKiJ,WAAab,EAASC,YAAYhG,EAAQ4G,YAAcjJ,KAAKsB,QAAQU,KAAK,gBAAkBoG,EAASE,iBAAiBtI,KAAKmI,WAAY,QAASnI,KAAKmI,YAC1JnI,KAAKkJ,WAAa7G,EAAQ6G,YAAclJ,KAAKsB,QAAQU,KAAK,gBAAkB,EAC5EhC,KAAKmJ,eAAiB9G,EAAQ8G,gBAAkBnJ,KAAKsB,QAAQU,KAAK,oBAAsB,eACxFhC,KAAKoJ,aAAe/G,EAAQ+G,cAAgBpJ,KAAKsB,QAAQU,KAAK,mBAAoB,EAClFhC,KAAKqJ,YAAchH,EAAQgH,aAAe,GAAIzE,MAC9C5E,KAAKsJ,OAASjH,EAAQiH,QAAUtJ,KAAKsB,QAAQU,KAAK,YAAcmF,EAChEnH,KAAK4D,MAAiC,mBAAlBvB,GAAQuB,OAAgCvB,EAAQuB,MACpE5D,KAAKuJ,gBAAkB,GACvBvJ,KAAKwJ,SAAWnH,EAAQmH,UAAYxJ,KAAKuJ,gBAEzCvJ,KAAKyJ,OACHC,UAAW1J,KAAK0I,YAAc,gBAAuC,IAApB1I,KAAK2I,WAAmB,uBAAyB,kBAClGgB,WAAY3J,KAAK0I,YAAc,iBAAwC,IAApB1I,KAAK2I,WAAmB,wBAA0B,oBAEvG3I,KAAK4J,SAAW5J,KAAK0I,YAAc,KAAO,YAE1C1I,KAAK6J,gBAEL7J,KAAK8J,eAAiB,SAAUC,GAE0B,IAAlDnK,EAAEmK,EAAElD,QAAQmD,QAAQ,mBAAmBzJ,QACvCqH,EAAKqC,QAIbjK,KAAKkK,eAAiB,WAClB,kBAAoB7H,GACtBrC,KAAKkK,eAAiB7H,EAAQ6H,eACrB,kBAAoBlK,MAAKsB,QAAQU,SAC1ChC,KAAKkK,eAAiBlK,KAAKsB,QAAQU,KAAK,mBAG1ChC,KAAKmK,QAAU,EACX,WAAa9H,GACfrC,KAAKmK,QAAU9H,EAAQ8H,QACd,WAAanK,MAAKsB,QAAQU,SACnChC,KAAKmK,QAAUnK,KAAKsB,QAAQU,KAAK,aAEnChC,KAAKmK,QAAU/B,EAASgC,gBAAgBpK,KAAKmK,SAE7CnK,KAAKqK,QAAUjC,EAASkC,MAAM/J,OAAS,EACnC,WAAa8B,GACfrC,KAAKqK,QAAUhI,EAAQgI,QACd,WAAarK,MAAKsB,QAAQU,SACnChC,KAAKqK,QAAUrK,KAAKsB,QAAQU,KAAK,aAEnChC,KAAKqK,QAAUjC,EAASgC,gBAAgBpK,KAAKqK,SAE7CrK,KAAKuK,yBAA0B,EAC3B,2BAA6BlI,GAC/BrC,KAAKuK,wBAA0BlI,EAAQkI,wBAC9B,2BAA6BvK,MAAKsB,QAAQU,SACnDhC,KAAKuK,wBAA0BvK,KAAKsB,QAAQU,KAAK,+BAGnDhC,KAAKwK,yCAA0C,EAE3C,2CAA6CnI,GAC/CrC,KAAKwK,wCAA0CnI,EAAQmI,wCAC9C,2CAA6CxK,MAAKsB,QAAQU,SACnEhC,KAAKwK,wCAA0CxK,KAAKsB,QAAQU,KAAK,2CAGnEhC,KAAKyK,6BAA+B,IAChC,gCAAkCpI,GACpCrC,KAAKyK,6BAA+BpI,EAAQoI,6BACnC,gCAAkCzK,MAAKsB,QAAQU,SACxDhC,KAAKyK,6BAA+BzK,KAAKsB,QAAQU,KAAK,qCAGxDhC,KAAK0K,cAAgB,EACjB,aAAerI,GACjBrC,KAAK0K,cAAgBrI,EAAQsI,UACpB,aAAe3K,MAAKsB,QAAQU,SACrChC,KAAK0K,cAAgB1K,KAAKsB,QAAQU,KAAK,eAEzChC,KAAK0K,cAAgBtC,EAASgC,gBAAgBpK,KAAK0K,eACnD1K,KAAK4K,SAAW5K,KAAK0K,cAErB1K,KAAK6K,WAAa7K,KAAKmK,QACnB,cAAgB9H,GAClBrC,KAAK6K,WAAaxI,EAAQwI,WACjB,cAAgB7K,MAAKsB,QAAQU,SACtChC,KAAK6K,WAAa7K,KAAKsB,QAAQU,KAAK,gBAEtChC,KAAK6K,WAAazC,EAASgC,gBAAgBpK,KAAK6K,YAEhD7K,KAAK8K,YAAa,EACd,cAAgBzI,GAClBrC,KAAK8K,WAAazI,EAAQyI,WACjB,kBAAoB9K,MAAKsB,QAAQU,SAC1ChC,KAAK8K,WAAa9K,KAAKsB,QAAQU,KAAK,oBAGtC,KADA,GAAI+I,GAA+B,IAApB/K,KAAK2I,WAAmBP,EAAS4C,WAAa5C,EAAS2C,SAC/DA,EAASvD,QAAQ,oBACtBuD,EAAWA,EAAS1H,QAAQ,aAAcrD,KAAK4J,SAEjD,MAAOmB,EAASvD,QAAQ,qBACtBuD,EAAWA,EAAS1H,QAAQ,cAAerD,KAAKyJ,MAAMC,UAExD,MAAOqB,EAASvD,QAAQ,sBACtBuD,EAAWA,EAAS1H,QAAQ,eAAgBrD,KAAKyJ,MAAME,WAsBzD,IApBA3J,KAAKiL,OAASrL,EAAEmL,GACb3F,SAASpF,KAAKuI,SAAWvI,KAAKsB,QAAUtB,KAAK6H,WAC7CqD,IACCjF,MAAWrG,EAAEuL,MAAMnL,KAAKiG,MAAOjG,MAC/BoL,UAAWxL,EAAEuL,MAAMnL,KAAKoL,UAAWpL,QAGnCA,KAAKuK,0BACH3K,EAAEsC,GAAGmJ,WACPrL,KAAKiL,OAAOC,IAAIG,WAAYzL,EAAEuL,MAAMnL,KAAKqL,WAAYrL,QAErDsL,QAAQC,IAAI,iHAIZvL,KAAKuI,SACPvI,KAAKiL,OAAOO,SAAS,yBAErBxL,KAAKiL,OAAOO,SAAS,2BAA6BxL,KAAKmJ,eAAiB,kBAEtEnJ,KAAKiI,MAAO,CACdjI,KAAKiL,OAAOO,SAAS,qBACrB,IAAI1L,GAA+B,IAApBE,KAAK2I,WAAmB,yBAA2B,kBAClE3I,MAAKiL,OAAOxD,KAAK3H,GAAU2L,YAAYzL,KAAKyJ,MAAMC,UAAY,IAAM1J,KAAKyJ,MAAME,YAGjF/J,EAAE8L,UAAUR,GAAG,YAAalL,KAAK8J,gBAEjC9J,KAAK2L,WAAY,EACb,aAAetJ,GACjBrC,KAAK2L,UAAYtJ,EAAQsJ,UAChB,iBAAmB3L,MAAKsB,QAAQU,SACzChC,KAAK2L,UAAY3L,KAAKsB,QAAQU,KAAK,mBAGrChC,KAAK4L,oBAAqB,EACtB,sBAAwBvJ,GAC1BrC,KAAK4L,mBAAqBvJ,EAAQuJ,mBACzB,0BAA4B5L,MAAKsB,QAAQU,SAClDhC,KAAK4L,mBAAqB5L,KAAKsB,QAAQU,KAAK,6BAG9ChC,KAAK6L,SAAYxJ,EAAQwJ,UAAY7L,KAAKsB,QAAQU,KAAK,oBAAqB,EAC5EhC,KAAK8L,SAAYzJ,EAAQyJ,UAAY9L,KAAKsB,QAAQU,KAAK,oBAAqB,EAC5EhC,KAAK+L,eAAkB1J,EAAQ0J,gBAAkB/L,KAAKsB,QAAQU,KAAK,0BAA2B,EAE9FhC,KAAKgM,WAAc3J,EAAQ2J,WAAahM,KAAKsB,QAAQU,KAAK,mBAAqB+F,EAAM/H,KAAK8H,UAAUkE,WAAa,GAAK,EACtHhM,KAAKiM,SAAYjM,KAAKgM,UAAY,GAAK,EACvChM,KAAKkM,YAAaC,EAAAA,GAClBnM,KAAKoM,QAAUD,EAAAA,EACfnM,KAAKqM,iBACLrM,KAAKsM,sBACLtM,KAAKuM,aAAalK,EAAQ6J,WAAalM,KAAKsB,QAAQU,KAAK,mBACzDhC,KAAKwM,WAAWnK,EAAQ+J,SAAWpM,KAAKsB,QAAQU,KAAK,iBACrDhC,KAAKyM,iBAAiBpK,EAAQgK,eAAiBrM,KAAKsB,QAAQU,KAAK,wBACjEhC,KAAK0M,sBAAsBrK,EAAQiK,oBAAsBtM,KAAKsB,QAAQU,KAAK,+BAC3EhC,KAAK2M,mBAAmBtK,EAAQuK,iBAAmB5M,KAAKsB,QAAQU,KAAK,yBACrEhC,KAAK6M,iBAAiBxK,EAAQyK,eAAiB9M,KAAKsB,QAAQU,KAAK,uBACjEhC,KAAK+M,kBAAoBZ,EAAAA,EACzBnM,KAAKgN,gBAAkBb,EAAAA,EACvBnM,KAAKiN,qBAAqB5K,EAAQ0K,mBAAqB/M,KAAKsB,QAAQU,KAAK,2BACzEhC,KAAKkN,mBAAmB7K,EAAQ2K,iBAAmBhN,KAAKsB,QAAQU,KAAK,yBACrEhC,KAAKmN,UACLnN,KAAKoN,aACLpN,KAAKqN,SACLrN,KAAKsN,WAEDtN,KAAKuI,UACPvI,KAAKuN,OAIT5F,GAAe3E,WACbwK,YAAa7F,EAEb8F,WACA5D,cAAe,WACb7J,KAAK0N,gBACD1N,KAAKyI,QACPzI,KAAKyN,UACFzN,KAAKsB,SACJqM,MAAS/N,EAAEuL,MAAMnL,KAAKuN,KAAMvN,MAC5B4N,MAAShO,EAAEuL,MAAMnL,KAAKqN,OAAQrN,MAC9B6N,QAASjO,EAAEuL,MAAMnL,KAAK6N,QAAS7N,SAI5BA,KAAK4I,WAAa5I,KAAK+I,UAC9B/I,KAAKyN,UAEFzN,KAAKsB,QAAQmG,KAAK,UACjBkG,MAAS/N,EAAEuL,MAAMnL,KAAKuN,KAAMvN,MAC5B4N,MAAShO,EAAEuL,MAAMnL,KAAKqN,OAAQrN,MAC9B6N,QAASjO,EAAEuL,MAAMnL,KAAK6N,QAAS7N,SAEhCA,KAAK4I,WACJ3C,MAAOrG,EAAEuL,MAAMnL,KAAKuN,KAAMvN,SAG1BA,KAAK8I,gBACP9I,KAAKyN,QAAQ3M,MACXd,KAAK8I,gBACJ7C,MAAOrG,EAAEuL,MAAMnL,KAAK8N,MAAO9N,UAIzBA,KAAKsB,QAAQrB,GAAG,OACvBD,KAAKuI,UAAW,EAGhBvI,KAAKyN,UACFzN,KAAKsB,SACJ2E,MAAOrG,EAAEuL,MAAMnL,KAAKuN,KAAMvN,QAIhC,KAAK,GAAW+N,GAAIC,EAAX7K,EAAI,EAAWA,EAAInD,KAAKyN,QAAQlN,OAAQ4C,IAC/C4K,EAAK/N,KAAKyN,QAAQtK,GAAG,GACrB6K,EAAKhO,KAAKyN,QAAQtK,GAAG,GACrB4K,EAAG7C,GAAG8C,IAIVN,cAAe,WACb,IAAK,GAAWK,GAAIC,EAAX7K,EAAI,EAAWA,EAAInD,KAAKyN,QAAQlN,OAAQ4C,IAC/C4K,EAAK/N,KAAKyN,QAAQtK,GAAG,GACrB6K,EAAKhO,KAAKyN,QAAQtK,GAAG,GACrB4K,EAAGE,IAAID,EAEThO,MAAKyN,YAGPF,KAAM,SAAUxD,GACd/J,KAAKiL,OAAOsC,OACZvN,KAAK+B,OAAS/B,KAAK4I,UAAY5I,KAAK4I,UAAUsF,cAAgBlO,KAAKsB,QAAQ4M,cACvElO,KAAK8K,YACP9K,KAAKqN,SAEPrN,KAAKmO,QACLvO,EAAEwB,QAAQ8J,GAAG,SAAUtL,EAAEuL,MAAMnL,KAAKmO,MAAOnO,OACvC+J,IACFA,EAAEqE,kBACFrE,EAAEsE,kBAEJrO,KAAKwI,WAAY,EACjBxI,KAAKsB,QAAQb,SACX6N,KAAM,OACNC,KAAMvO,KAAKuO,QAIftE,KAAM,SAAUF,GACT/J,KAAKwI,YACNxI,KAAKuI,WACTvI,KAAKiL,OAAOhB,OACZrK,EAAEwB,QAAQ6M,IAAI,SAAUjO,KAAKmO,OAC7BnO,KAAK4K,SAAW5K,KAAK0K,cACrB1K,KAAKsN,WACAtN,KAAKyI,SACR7I,EAAE8L,UAAUuC,IAAI,YAAajO,KAAKiK,MAIlCjK,KAAK8K,aAED9K,KAAKyI,SAAWzI,KAAKsB,QAAQkN,OAC3BxO,KAAK+I,UAAY/I,KAAKsB,QAAQmG,KAAK,SAAS+G,QAGlDxO,KAAKyO,WACPzO,KAAKwI,WAAY,EACjBxI,KAAKsB,QAAQb,SACX6N,KAAM,OACNC,KAAMvO,KAAKuO,UAIflI,OAAQ,WACNrG,KAAK0N,gBACL9N,EAAE8L,UAAUuC,IAAI,YAAajO,KAAK8J,gBAClC9J,KAAKiL,OAAO5E,eACLrG,MAAKiL,aACLjL,MAAKsB,QAAQU,OAAO0M,gBAG7BC,QAAS,WACP,GAAIC,GAAI5O,KAAK6O,YACb,OAAO,IAAIjK,MAAKgK,EAAE/J,UAAqC,IAAxB+J,EAAEE,sBAGnCD,WAAY,WACV,MAAO7O,MAAKuO,MAGdQ,eAAgB,WACd,MAAO/O,MAAKqJ,aAGd2F,eAAgB,SAAU3F,GACxBrJ,KAAKqJ,YAAcA,GAGrB4F,QAAS,SAAUL,GACjB5O,KAAKkP,WAAW,GAAItK,MAAKgK,EAAE/J,UAAqC,IAAxB+J,EAAEE,uBAG5CI,WAAY,SAAUN,GAChBA,GAAK5O,KAAKkM,WAAa0C,GAAK5O,KAAKoM,SACnCpM,KAAKuO,KAAOK,EACZ5O,KAAKyO,WACLzO,KAAKmP,SAAWnP,KAAKuO,KACrBvO,KAAKoP,QAELpP,KAAKsB,QAAQb,SACX6N,KAAW,aACXC,KAAWK,EACX1C,UAAWlM,KAAKkM,UAChBE,QAAWpM,KAAKoM,WAKtBiD,UAAW,SAAUpM,GACnBjD,KAAKiD,OAASmF,EAASC,YAAYpF,EAAQjD,KAAKmI,WAChD,IAAI7G,EACAtB,MAAKyI,QACPnH,EAAUtB,KAAKsB,QACNtB,KAAK4I,YACdtH,EAAUtB,KAAKsB,QAAQmG,KAAK,UAE1BnG,GAAWA,EAAQkN,OACrBxO,KAAKyO,YAITA,SAAU,WACR,GAAIa,GAAYtP,KAAKuP,kBAChBvP,MAAKyI,QAMRzI,KAAKsB,QAAQkN,IAAIc,IALbtP,KAAK4I,WACP5I,KAAKsB,QAAQmG,KAAK,SAAS+G,IAAIc,GAEjCtP,KAAKsB,QAAQU,KAAK,OAAQsN,IAIxBtP,KAAKgJ,WACPpJ,EAAE,IAAMI,KAAKgJ,WAAWwF,IAAIxO,KAAKuP,iBAAiBvP,KAAKiJ,cAI3DsG,iBAAkB,SAAUtM,GAE1B,MADIA,IAAUkE,IAAWlE,EAASjD,KAAKiD,QAChCmF,EAASoH,WAAWxP,KAAKuO,KAAMtL,EAAQjD,KAAK8H,SAAU9H,KAAKmI,WAAYnI,KAAKwJ,WAGrF+C,aAAc,SAAUL,GACtBlM,KAAKkM,UAAYA,KAAcC,EAAAA,GAC3BnM,KAAKkM,cAAeC,EAAAA,KACtBnM,KAAKkM,UAAY9D,EAASqH,UAAUzP,KAAKkM,UAAWlM,KAAKiD,OAAQjD,KAAK8H,SAAU9H,KAAKmI,WAAYnI,KAAKwJ,WAExGxJ,KAAKqN,SACLrN,KAAK0P,mBAGPlD,WAAY,SAAUJ,GACpBpM,KAAKoM,QAAUA,GAAWD,EAAAA,EACtBnM,KAAKoM,UAAYD,EAAAA,IACnBnM,KAAKoM,QAAUhE,EAASqH,UAAUzP,KAAKoM,QAASpM,KAAKiD,OAAQjD,KAAK8H,SAAU9H,KAAKmI,WAAYnI,KAAKwJ,WAEpGxJ,KAAKqN,SACLrN,KAAK0P,mBAGPzC,qBAAsB,SAAUF,GAC5B/M,KAAK+M,kBAAoBA,KAAsBZ,EAAAA,GAC3CnM,KAAK+M,oBAAsBZ,EAAAA,IAC3BnM,KAAK+M,kBAAoB3E,EAASqH,UAAUzP,KAAK+M,kBAAmB/M,KAAKiD,OAAQjD,KAAK8H,SAAU9H,KAAKmI,WAAYnI,KAAKwJ,WAE1HxJ,KAAKqN,SACLrN,KAAK0P,mBAGTxC,mBAAoB,SAAUF,GAC1BhN,KAAKgN,gBAAkBA,GAAmBb,EAAAA,EACtCnM,KAAKgN,kBAAoBb,EAAAA,IACzBnM,KAAKgN,gBAAkB5E,EAASqH,UAAUzP,KAAKgN,gBAAiBhN,KAAKiD,OAAQjD,KAAK8H,SAAU9H,KAAKmI,WAAYnI,KAAKwJ,WAEtHxJ,KAAKqN,SACLrN,KAAK0P,mBAGTjD,iBAAkB,SAAUJ,GAC1BrM,KAAKqM,cAAgBA,MAChBzM,EAAE+P,QAAQ3P,KAAKqM,iBAClBrM,KAAKqM,cAAgBrM,KAAKqM,cAAcrE,MAAM,SAEhDhI,KAAKqM,cAAgBzM,EAAEgQ,IAAI5P,KAAKqM,cAAe,SAAUuC,GACvD,MAAOxG,GAASqH,UAAUb,EAAG5O,KAAKiD,OAAQjD,KAAK8H,SAAU9H,KAAKmI,WAAYnI,KAAKwJ,UAAUqG,iBAE3F7P,KAAKqN,SACLrN,KAAK0P,mBAGPI,SAAU,SAAUhQ,EAAUiQ,GAC5B,MAAO/P,MAAKiL,OAAOxD,KAAK3H,GACrB2H,KAAK,YACL1B,KAAK/F,KAAK4D,SAAU,EAAQmM,EAAQ/P,KAAK4D,QAG9C8I,sBAAuB,SAAUJ,GAC/BtM,KAAKsM,mBAAqBA,MACrB1M,EAAE+P,QAAQ3P,KAAKsM,sBAClBtM,KAAKsM,mBAAqBtM,KAAKsM,mBAAmBtE,MAAM,SAE1DhI,KAAKsM,mBAAqB1M,EAAEgQ,IAAI5P,KAAKsM,mBAAoB,SAAUsC,GACjE,MAAOoB,UAASpB,EAAG,MAErB5O,KAAKqN,SACLrN,KAAK0P,mBAGP/C,mBAAoB,SAAUC,GAC5B5M,KAAK4M,gBAAkBA,MAClBhN,EAAE+P,QAAQ3P,KAAK4M,mBAClB5M,KAAK4M,gBAAkB5M,KAAK4M,gBAAgB5E,MAAM,SAEpDhI,KAAK4M,gBAAkBhN,EAAEgQ,IAAI5P,KAAK4M,gBAAiB,SAAUgC,GAC3D,MAAOoB,UAASpB,EAAG,MAErB5O,KAAKqN,SACLrN,KAAK0P,mBAGP7C,iBAAkB,SAAUC,GAC1B9M,KAAK8M,cAAgBA,MAChBlN,EAAE+P,QAAQ3P,KAAK8M,iBAClB9M,KAAK8M,cAAgB9M,KAAK8M,cAAc9E,MAAM,SAEhDhI,KAAK8M,cAAgBlN,EAAEgQ,IAAI5P,KAAK8M,cAAe,SAAU8B,GACvD,MAAOoB,UAASpB,EAAG,MAErB5O,KAAKqN,SACLrN,KAAK0P,mBAGPvB,MAAO,WACL,IAAInO,KAAKuI,SAAT,CAEA,IAAKvI,KAAKsJ,OAAQ,CAChB,GAAI2G,GAAgB,CACpBrQ,GAAE,OAAOsQ,KAAK,WACZ,GAAIC,GAAgBH,SAASpQ,EAAEI,MAAMoQ,IAAI,UAAW,GAChDD,GAAgBF,IAClBA,EAAgBE,KAGpBnQ,KAAKsJ,OAAS2G,EAAgB,GAGhC,GAAIrO,GAAQE,EAAKD,EAAMwO,CAErBA,GADErQ,KAAK6H,oBAAqBjI,GACVI,KAAK6H,UAAUjG,SAEfhC,EAAEI,KAAK6H,WAAWjG,SAGlC5B,KAAK4I,WACPhH,EAAS5B,KAAK4I,UAAUhH,SACxBC,EAAOD,EAAOC,KACa,eAAvB7B,KAAKmJ,gBAA0D,YAAvBnJ,KAAKmJ,iBAC/CtH,GAAQ7B,KAAK4I,UAAU0H,aAAetQ,KAAKiL,OAAOqF,gBAGpD1O,EAAS5B,KAAKsB,QAAQM,SACtBC,EAAOD,EAAOC,KACa,eAAvB7B,KAAKmJ,gBAA0D,YAAvBnJ,KAAKmJ,iBAC/CtH,GAAQ7B,KAAKsB,QAAQgP,aAAetQ,KAAKiL,OAAOqF,cAIpD,IAAIC,GAAY7E,SAAS8E,KAAKC,aAAerP,OAAOsP,UAChD7O,GAAO,IAAM0O,IACf1O,EAAO0O,EAAY,KAInBzO,EADyB,YAAvB9B,KAAKmJ,gBAAuD,aAAvBnJ,KAAKmJ,eACtCvH,EAAOE,IAAM9B,KAAKiL,OAAOiD,cAEzBtM,EAAOE,IAAM9B,KAAK+B,OAG1BD,GAAYuO,EAAgBvO,IAC5BD,GAAcwO,EAAgBxO,KAE9BC,GAAY,IAEZ9B,KAAKiL,OAAOmF,KACVtO,IAAQA,EACRD,KAAQA,EACRyH,OAAQtJ,KAAKsJ,WAIjB+D,OAAQ,WACN,GAAIkB,GAAMoC,GAAW,CACjBvN,YAAaA,UAAU7C,SAAmC,gBAAjB6C,WAAU,IAAmBA,UAAU,YAAcwB,QAChG2J,EAAOnL,UAAU,GACjBuN,GAAW,IAEXpC,GAAQvO,KAAKyI,QAAUzI,KAAKsB,QAAQkN,MAAQxO,KAAKsB,QAAQmG,KAAK,SAAS+G,QAAUxO,KAAKsB,QAAQU,KAAK,SAAWhC,KAAKqJ,aAChG,gBAARkF,IAAoBA,YAAgBxL,WAC7CwL,EAAOA,EAAKlL,QAAQ,aAAa,MAIhCkL,IACHA,EAAO,GAAI3J,MACX+L,GAAW,GAGb3Q,KAAKuO,KAAOnG,EAASqH,UAAUlB,EAAMvO,KAAKiD,OAAQjD,KAAK8H,SAAU9H,KAAKmI,WAAYnI,KAAKwJ,UAEnFmH,GAAU3Q,KAAKyO,WAEfzO,KAAKuO,KAAOvO,KAAKkM,UACnBlM,KAAKmP,SAAW,GAAIvK,MAAK5E,KAAKkM,WACrBlM,KAAKuO,KAAOvO,KAAKoM,QAC1BpM,KAAKmP,SAAW,GAAIvK,MAAK5E,KAAKoM,SAE9BpM,KAAKmP,SAAW,GAAIvK,MAAK5E,KAAKuO,MAEhCvO,KAAKoP,QAGPjC,QAAS,WAGP,IAFA,GAAIyD,GAAS5Q,KAAKgM,UAChBzF,EAAO,OACFqK,EAAS5Q,KAAKgM,UAAY,GAC/BzF,GAAQ,mBAAqBwB,EAAM/H,KAAK8H,UAAU+I,QAASD,IAAY,GAAK,OAE9ErK,IAAQ,QACRvG,KAAKiL,OAAOxD,KAAK,8BAA8BqJ,OAAOvK,IAGxD6G,WAAY,WAGV,IAFA,GAAI7G,GAAO,GACTpD,EAAI,EACCA,EAAI,IACToD,GAAQ,uBAAyBwB,EAAM/H,KAAK8H,UAAUiJ,YAAY5N,KAAO,SAE3EnD,MAAKiL,OAAOxD,KAAK,6BAA6BlB,KAAKA,IAGrD6I,KAAM,WACJ,GAAiB,MAAbpP,KAAKuO,MAAiC,MAAjBvO,KAAKmP,SAA9B,CAGA,GAAIP,GAAI,GAAIhK,MAAK5E,KAAKmP,UACpB6B,EAAOpC,EAAEqC,iBACTC,EAAQtC,EAAEuC,cACVC,EAAWxC,EAAEC,aACbwC,EAAQzC,EAAE0C,cACVC,EAAU3C,EAAE4C,gBACZC,EAAYzR,KAAKkM,cAAeC,EAAAA,GAAWnM,KAAKkM,UAAU+E,mBAAoB9E,EAAAA,GAC9EuF,EAAa1R,KAAKkM,cAAeC,EAAAA,GAAWnM,KAAKkM,UAAUiF,gBAAiBhF,EAAAA,GAC5EwF,EAAU3R,KAAKoM,UAAYD,EAAAA,EAAWnM,KAAKoM,QAAQ6E,iBAAmB9E,EAAAA,EACtEyF,EAAW5R,KAAKoM,UAAYD,EAAAA,EAAWnM,KAAKoM,QAAQ+E,cAAgB,EAAIhF,EAAAA,EACxE0F,EAAc,GAAKzK,GAAQpH,KAAKuO,KAAK0C,iBAAkBjR,KAAKuO,KAAK4C,cAAenR,KAAKuO,KAAKM,cAAeiD,UACzGC,EAAQ,GAAInN,KAEd,IADA5E,KAAK8P,SAAS,uBAAwB/H,EAAM/H,KAAK8H,UAAUkK,OAAOd,GAAS,IAAMF,GACtD,QAAvBhR,KAAKkK,eAA0B,CACjC,GAAIoF,GAAYtP,KAAKuP,kBACrBvP,MAAK8P,SAAS,wBAAyBR,GACvCtP,KAAK8P,SAAS,0BAA2BR,OAEzCtP,MAAK8P,SAAS,wBAAyBsB,EAAW,IAAMrJ,EAAM/H,KAAK8H,UAAUkK,OAAOd,GAAS,IAAMF,GACnGhR,KAAK8P,SAAS,0BAA2BsB,EAAW,IAAMrJ,EAAM/H,KAAK8H,UAAUkK,OAAOd,GAAS,IAAMF,EAEvGhR,MAAKiL,OAAOxD,KAAK,kBACd1B,KAAKgC,EAAM/H,KAAK8H,UAAUiK,OAAShK,EAAU,GAAEgK,OAC/CE,OAAOjS,KAAK6L,YAAa,GAC5B7L,KAAKiL,OAAOxD,KAAK,kBACd1B,KAAKgC,EAAM/H,KAAK8H,UAAUoK,OAASnK,EAAU,GAAEmK,OAC/CD,OAAOjS,KAAK8L,YAAa,GAC5B9L,KAAK0P,kBACL1P,KAAKoN,YAGL,IAAI+E,GAAY/K,EAAQ4J,EAAME,EAAQ,EAAG,GAAI,EAAG,EAAG,EAAG,GACpDkB,EAAMhK,EAASiK,eAAeF,EAAUlB,iBAAkBkB,EAAUhB,cACtEgB,GAAUjD,WAAWkD,GACrBD,EAAUjD,WAAWkD,GAAOD,EAAUG,YAActS,KAAKgM,UAAY,GAAK,EAC1E,IAAIuG,GAAY,GAAI3N,MAAKuN,EACzBI,GAAUrD,WAAWqD,EAAU1D,aAAe,IAC9C0D,EAAYA,EAAUT,SAGtB,KAFA,GACIU,GADAjM,KAEG4L,EAAUL,UAAYS,GACvBJ,EAAUG,aAAetS,KAAKgM,WAChCzF,EAAKzF,KAAK,QAEZ0R,EAAU,GACNL,EAAUlB,iBAAmBD,GAASmB,EAAUlB,kBAAoBD,GAAQmB,EAAUhB,cAAgBD,EACxGsB,GAAW,QACFL,EAAUlB,iBAAmBD,GAASmB,EAAUlB,kBAAoBD,GAAQmB,EAAUhB,cAAgBD,KAC/GsB,GAAW,QAGTxS,KAAK+L,gBACPoG,EAAUlB,kBAAoBc,EAAMU,eACpCN,EAAUhB,eAAiBY,EAAMW,YACjCP,EAAUtD,cAAgBkD,EAAMpD,YAChC6D,GAAW,UAETL,EAAUL,WAAaD,IACzBW,GAAW,YAERL,EAAUL,UAAY,OAAa9R,KAAKkM,WAAaiG,EAAUL,UAAY9R,KAAKoM,SACnFxM,EAAE+S,QAAQR,EAAUG,YAAatS,KAAKsM,0BAC3C1M,EAAE+S,QAAQR,EAAUtC,eAAgB7P,KAAKqM,uBACpCmG,GAAW,aAEbjM,EAAKzF,KAAK,iBAAmB0R,EAAU,KAAOL,EAAUtD,aAAe,SACnEsD,EAAUG,aAAetS,KAAKiM,SAChC1F,EAAKzF,KAAK,SAEZqR,EAAUjD,WAAWiD,EAAUtD,aAAe,EAEhD7O,MAAKiL,OAAOxD,KAAK,8BAA8BmL,QAAQ9B,OAAOvK,EAAKsM,KAAK,KAExEtM,IAGA,KAAK,GAFDuM,GAAM,GAAIC,EAAW,GAAIC,EAAc,GACvClG,EAAgB9M,KAAK8M,kBAChB3J,EAAI,EAAGA,EAAI,GAAIA,IACtB,GAAI2J,EAActF,QAAQrE,QAA1B,CACA,GAAI8P,GAAS7L,EAAQ4J,EAAME,EAAOE,EAAUjO,EAC5CqP,GAAU,GAELS,EAAOnB,UAAY,MAAY9R,KAAKkM,WAAa+G,EAAOnB,UAAY9R,KAAKoM,QAC1EoG,GAAW,YACJxS,KAAK+M,oBAAsBZ,EAAAA,GAAYnM,KAAKgN,kBAAoBb,EAAAA,GAAc8G,EAAOnB,UAAY,KAAS9R,KAAK+M,mBAAqBkG,EAAOnB,UAAY,KAAU,IAAO9R,KAAKgN,gBACpLwF,GAAW,YACJnB,GAASlO,IAClBqP,GAAW,WAETxS,KAAKoJ,cAAwD,GAAxCrB,EAAM/H,KAAK8H,UAAUoL,SAAS3S,QACrDwS,EAAY5P,EAAI,GAAK4E,EAAM/H,KAAK8H,UAAUoL,SAAS,GAAKnL,EAAM/H,KAAK8H,UAAUoL,SAAS,GAClFH,GAAYC,IACK,IAAfA,GACFzM,EAAKzF,KAAK,eAEZyF,EAAKzF,KAAK,kCAAoCiS,EAASI,cAAgB,cAEzEH,EAAcD,EACdD,EAAO3P,EAAI,GAAKA,EAAI,GAAK,GACzBoD,EAAKzF,KAAK,oBAAsB0R,EAAU,UAAYrP,EAAI,GAAK,KAAO,MAAQ,KAAO2P,EAAM,WAClF,IAAL3P,GACFoD,EAAKzF,KAAK,iBAGZgS,EAAM3P,EAAI,MACVoD,EAAKzF,KAAK,oBAAsB0R,EAAU,KAAOM,EAAM,YAG3D9S,KAAKiL,OAAOxD,KAAK,4BAA4BlB,KAAKA,EAAKsM,KAAK,KAE5DtM,KACAuM,EAAM,GAAIC,EAAW,GAAIC,EAAc,EAEvC,KAAK,GADDpG,GAAkB5M,KAAK4M,oBAClBzJ,EAAI,EAAGA,EAAI,GAAIA,GAAKnD,KAAKkJ,WAChC,GAAI0D,EAAgBpF,QAAQrE,QAA5B,CACA,GAAI8P,GAAS7L,EAAQ4J,EAAME,EAAOE,EAAUC,EAAOlO,EAAG,EACtDqP,GAAU,GACNS,EAAOnB,UAAY9R,KAAKkM,WAAa+G,EAAOnB,UAAY9R,KAAKoM,QAC/DoG,GAAW,YACFxS,KAAK+M,oBAAsBZ,EAAAA,GAAYnM,KAAKgN,kBAAoBb,EAAAA,GAAc8G,EAAOnB,UAAY,KAAS9R,KAAK+M,mBAAqBkG,EAAOnB,UAAY,IAAO9R,KAAKgN,gBAC1KwF,GAAW,YACJY,KAAKC,MAAM9B,EAAUvR,KAAKkJ,aAAekK,KAAKC,MAAMlQ,EAAInD,KAAKkJ,cACtEsJ,GAAW,WAETxS,KAAKoJ,cAAwD,GAAxCrB,EAAM/H,KAAK8H,UAAUoL,SAAS3S,QACrDwS,EAAY1B,EAAQ,GAAKtJ,EAAM/H,KAAK8H,UAAUoL,SAAS,GAAKnL,EAAM/H,KAAK8H,UAAUoL,SAAS,GACtFH,GAAYC,IACK,IAAfA,GACFzM,EAAKzF,KAAK,eAEZyF,EAAKzF,KAAK,oCAAsCiS,EAASI,cAAgB,cAE3EH,EAAcD,EACdD,EAAOzB,EAAQ,GAAKA,EAAQ,GAAK,GAEjC9K,EAAKzF,KAAK,sBAAwB0R,EAAU,KAAOM,EAAM,KAAO3P,EAAI,GAAK,IAAMA,EAAIA,GAAK,WAC/E,IAALA,GACFoD,EAAKzF,KAAK,iBAGZgS,EAAM3P,EAAI,MAEVoD,EAAKzF,KAAK,sBAAwB0R,EAAU,KAAOnB,EAAQ,KAAOlO,EAAI,GAAK,IAAMA,EAAIA,GAAK,YAG9FnD,KAAKiL,OAAOxD,KAAK,8BAA8BlB,KAAKA,EAAKsM,KAAK,IAE9D,IAAIS,GAActT,KAAKuO,KAAK0C,iBACxBe,EAAShS,KAAK8P,SAAS,yBAA0BkB,GAClDuC,MACA9L,KAAK,QAAQ+L,YAAY,SAC5B,IAAIF,GAAetC,EAAM,CAGvB,GAAIpP,GAASoQ,EAAOzR,OAAS,EAC7ByR,GAAOyB,GAAGzT,KAAKuO,KAAK4C,cAAgBvP,GAAQ4J,SAAS,WAEnDwF,EAAOS,GAAaT,EAAOW,IAC7BK,EAAOxG,SAAS,YAEdwF,GAAQS,GACVO,EAAO0B,MAAM,EAAGhC,GAAYlG,SAAS,YAEnCwF,GAAQW,GACVK,EAAO0B,MAAM9B,GAAUpG,SAAS,YAGlCjF,EAAO,GACPyK,EAAiC,GAA1BhB,SAASgB,EAAO,GAAI,GAC3B,IAAI2C,GAAW3T,KAAK8P,SAAS,wBAAyBkB,EAAO,KAAOA,EAAO,IACxEuC,MACA9L,KAAK,KACRuJ,IAAQ,CACR,KAAK,GAAI7N,MAAQA,EAAI,GAAIA,IACvBoD,GAAQ,qBAAuBpD,OAAgB,IAALA,EAAU,OAAS,KAAOmQ,GAAetC,EAAO,UAAY,KAAOA,EAAOS,GAAaT,EAAOW,EAAU,YAAc,IAAM,KAAOX,EAAO,UACpLA,GAAQ,CAEV2C,GAASpN,KAAKA,GACdvG,KAAKmO,UAGPuB,gBAAiB,WACf,GAAId,GAAI,GAAIhK,MAAK5E,KAAKmP,UACpB6B,EAAOpC,EAAEqC,iBACTC,EAAQtC,EAAEuC,cACViB,EAAMxD,EAAEC,aACR+E,EAAOhF,EAAE0C,aACX,QAAQtR,KAAK4K,UACX,IAAK,GACC5K,KAAKkM,cAAeC,EAAAA,IAAY6E,GAAQhR,KAAKkM,UAAU+E,kBACtDC,GAASlR,KAAKkM,UAAUiF,eACxBiB,GAAOpS,KAAKkM,UAAU2C,cACtB+E,GAAQ5T,KAAKkM,UAAUoF,cAC1BtR,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE3C7T,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,YAEzC7T,KAAKoM,UAAYD,EAAAA,GAAY6E,GAAQhR,KAAKoM,QAAQ6E,kBACjDC,GAASlR,KAAKoM,QAAQ+E,eACtBiB,GAAOpS,KAAKoM,QAAQyC,cACpB+E,GAAQ5T,KAAKoM,QAAQkF,cACxBtR,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE3C7T,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE7C,MACF,KAAK,GACC7T,KAAKkM,cAAeC,EAAAA,IAAY6E,GAAQhR,KAAKkM,UAAU+E,kBACtDC,GAASlR,KAAKkM,UAAUiF,eACxBiB,GAAOpS,KAAKkM,UAAU2C,aACzB7O,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE3C7T,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,YAEzC7T,KAAKoM,UAAYD,EAAAA,GAAY6E,GAAQhR,KAAKoM,QAAQ6E,kBACjDC,GAASlR,KAAKoM,QAAQ+E,eACtBiB,GAAOpS,KAAKoM,QAAQyC,aACvB7O,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE3C7T,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE7C,MACF,KAAK,GACC7T,KAAKkM,cAAeC,EAAAA,IAAY6E,GAAQhR,KAAKkM,UAAU+E,kBACtDC,GAASlR,KAAKkM,UAAUiF,cAC3BnR,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE3C7T,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,YAEzC7T,KAAKoM,UAAYD,EAAAA,GAAY6E,GAAQhR,KAAKoM,QAAQ6E,kBACjDC,GAASlR,KAAKoM,QAAQ+E,cACzBnR,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE3C7T,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE7C,MACF,KAAK,GACL,IAAK,GACC7T,KAAKkM,cAAeC,EAAAA,IAAY6E,GAAQhR,KAAKkM,UAAU+E,iBACzDjR,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE3C7T,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,YAEzC7T,KAAKoM,UAAYD,EAAAA,GAAY6E,GAAQhR,KAAKoM,QAAQ6E,iBACpDjR,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,WAE3C7T,KAAKiL,OAAOxD,KAAK,SAAS2I,KAAKyD,WAAY,cAMnDxI,WAAY,SAAUtB,GAKpB,GAHAA,EAAEsE,iBACFtE,EAAEqE,mBAEEpO,KAAK8T,WAAT,CAIA9T,KAAK8T,YAAa,CAElB,IAAIC,GAAgBhK,EAAEgK,cAElBC,EAAQD,EAAcE,WAEtBC,EAAOF,EAAQ,EAAI,EAAe,IAAVA,EAAe,IAEvChU,MAAKwK,0CACP0J,GAAQA,GAGVlU,KAAKsN,SAAS4G,GAEd1R,WAAW5C,EAAEuL,MAAM,WAEjBnL,KAAK8T,YAAa,GAEjB9T,MAAOA,KAAKyK,gCAIjBxE,MAAO,SAAU8D,GACfA,EAAEqE,kBACFrE,EAAEsE,gBACF,IAAIxH,GAASjH,EAAEmK,EAAElD,QAAQmD,QAAQ,uBAIjC,IAHInD,EAAO5G,GAAG,IAAMD,KAAK4J,YACvB/C,EAASjH,EAAEiH,GAAQgC,SAASmB,QAAQ,yBAEjB,GAAjBnD,EAAOtG,OAAa,CACtB,GAAIsG,EAAO5G,GAAG,aAOZ,WANAD,MAAKsB,QAAQb,SACX6N,KAAW,aACXC,KAAWvO,KAAKmP,SAChBjD,UAAWlM,KAAKkM,UAChBE,QAAWpM,KAAKoM,SAIpB,QAAQvF,EAAO,GAAGsN,SAASC,eACzB,IAAK,KACH,OAAQvN,EAAO,GAAGwN,WAChB,IAAK,SACHrU,KAAKsN,SAAS,EACd,MACF,KAAK,OACL,IAAK,OACH,GAAIgH,GAAMlM,EAASkC,MAAMtK,KAAK4K,UAAU2J,SAAkC,QAAvB1N,EAAO,GAAGwN,aAA2B,EACxF,QAAQrU,KAAK4K,UACX,IAAK,GACH5K,KAAKmP,SAAWnP,KAAKwU,SAASxU,KAAKmP,SAAUmF,EAC7C,MACF,KAAK,GACHtU,KAAKmP,SAAWnP,KAAKyU,SAASzU,KAAKmP,SAAUmF,EAC7C,MACF,KAAK,GACHtU,KAAKmP,SAAWnP,KAAK0U,UAAU1U,KAAKmP,SAAUmF,EAC9C,MACF,KAAK,GACL,IAAK,GACHtU,KAAKmP,SAAWnP,KAAK2U,SAAS3U,KAAKmP,SAAUmF,GAGjDtU,KAAKoP,OACLpP,KAAKsB,QAAQb,SACX6N,KAAWzH,EAAO,GAAGwN,UAAY,IAAMrU,KAAK4U,oBAAoB5U,KAAK4K,UACrE2D,KAAWvO,KAAKmP,SAChBjD,UAAWlM,KAAKkM,UAChBE,QAAWpM,KAAKoM,SAElB,MACF,KAAK,QACHpM,KAAK8N,QACD9N,KAAK2L,WACP3L,KAAKiK,MAEP,MACF,KAAK,QACH,GAAIsE,GAAO,GAAI3J,KACf2J,GAAOnH,EAAQmH,EAAKkE,cAAelE,EAAKmE,WAAYnE,EAAKI,UAAWJ,EAAKsG,WAAYtG,EAAKuG,aAAcvG,EAAKwG,aAAc,GAGvHxG,EAAOvO,KAAKkM,UAAWqC,EAAOvO,KAAKkM,UAC9BqC,EAAOvO,KAAKoM,UAASmC,EAAOvO,KAAKoM,SAE1CpM,KAAK4K,SAAW5K,KAAK0K,cACrB1K,KAAKsN,SAAS,GACdtN,KAAKgV,SAASzG,GACdvO,KAAKoP,OACDpP,KAAK2L,WACP3L,KAAKiK,OAIX,KACF,KAAK,OACH,IAAKpD,EAAO5G,GAAG,aAAc,CAC3B,GAAI+Q,GAAOhR,KAAKmP,SAAS8B,iBACvBC,EAAQlR,KAAKmP,SAASgC,cACtBiB,EAAMpS,KAAKmP,SAASN,aACpBwC,EAAQrR,KAAKmP,SAASmC,cACtBC,EAAUvR,KAAKmP,SAASqC,gBACxByD,EAAUjV,KAAKmP,SAAS+F,eAqD1B,IAnDIrO,EAAO5G,GAAG,WACZD,KAAKmP,SAASD,WAAW,GACzBgC,EAAQrK,EAAOgC,SAASpB,KAAK,QAAQrH,MAAMyG,GAC3CuL,EAAMpS,KAAKmP,SAASN,aACpB7O,KAAKmP,SAASgG,YAAYjE,GAC1BlR,KAAKsB,QAAQb,SACX6N,KAAM,cACNC,KAAMvO,KAAKmP,WAETnP,KAAK6K,YAAc,GACrB7K,KAAKgV,SAAS5N,EAAQ4J,EAAME,EAAOkB,EAAKf,EAAOE,EAAS0D,EAAS,KAE1DpO,EAAO5G,GAAG,UACnBD,KAAKmP,SAASD,WAAW,GACzB8B,EAAOhB,SAASnJ,EAAOd,OAAQ,KAAO,EACtC/F,KAAKmP,SAASiG,eAAepE,GAC7BhR,KAAKsB,QAAQb,SACX6N,KAAM,aACNC,KAAMvO,KAAKmP,WAETnP,KAAK6K,YAAc,GACrB7K,KAAKgV,SAAS5N,EAAQ4J,EAAME,EAAOkB,EAAKf,EAAOE,EAAS0D,EAAS,KAE1DpO,EAAO5G,GAAG,UACnBoR,EAAQrB,SAASnJ,EAAOd,OAAQ,KAAO,GACnCc,EAAOwO,SAAS,YAAcxO,EAAOwO,SAAS,cACnC,IAAThE,GAAexK,EAAOwO,SAAS,WACjChE,EAAQ,EACU,IAATA,GAAexK,EAAOwO,SAAS,aACxChE,GAAS,KAGbrR,KAAKmP,SAASmG,YAAYjE,GAC1BrR,KAAKsB,QAAQb,SACX6N,KAAM,aACNC,KAAMvO,KAAKmP,WAETnP,KAAK6K,YAAc,GACrB7K,KAAKgV,SAAS5N,EAAQ4J,EAAME,EAAOkB,EAAKf,EAAOE,EAAS0D,EAAS,KAE1DpO,EAAO5G,GAAG,aACnBsR,EAAUvB,SAASnJ,EAAOd,OAAOwP,OAAO1O,EAAOd,OAAOyB,QAAQ,KAAO,GAAI,KAAO,EAChFxH,KAAKmP,SAASqG,cAAcjE,GAC5BvR,KAAKsB,QAAQb,SACX6N,KAAM,eACNC,KAAMvO,KAAKmP,WAETnP,KAAK6K,YAAc,GACrB7K,KAAKgV,SAAS5N,EAAQ4J,EAAME,EAAOkB,EAAKf,EAAOE,EAAS0D,EAAS,KAGhD,GAAjBjV,KAAK4K,SAAe,CACtB,GAAI6K,GAAczV,KAAK4K,QACvB5K,MAAKsN,aACLtN,KAAKoP,OACDqG,GAAezV,KAAK4K,UAAY5K,KAAK2L,WACvC3L,KAAKiK,WAGPjK,MAAKoP,OACDpP,KAAK2L,WACP3L,KAAKiK,OAIX,KACF,KAAK,KACH,GAAIpD,EAAO5G,GAAG,UAAY4G,EAAO5G,GAAG,aAAc,CAChD,GAAImS,GAAMpC,SAASnJ,EAAOd,OAAQ,KAAO,EACrCiL,EAAOhR,KAAKmP,SAAS8B,iBACvBC,EAAQlR,KAAKmP,SAASgC,cACtBE,EAAQrR,KAAKmP,SAASmC,cACtBC,EAAUvR,KAAKmP,SAASqC,gBACxByD,EAAUjV,KAAKmP,SAAS+F,eACtBrO,GAAO5G,GAAG,QACE,IAAViR,GACFA,EAAQ,GACRF,GAAQ,GAERE,GAAS,EAEFrK,EAAO5G,GAAG,UACN,IAATiR,GACFA,EAAQ,EACRF,GAAQ,GAERE,GAAS,GAGblR,KAAKmP,SAASiG,eAAepE,GAC7BhR,KAAKmP,SAASgG,YAAYjE,EAAOkB,GACjCpS,KAAKsB,QAAQb,SACX6N,KAAM,YACNC,KAAMvO,KAAKmP,WAETnP,KAAK6K,YAAc,GACrB7K,KAAKgV,SAAS5N,EAAQ4J,EAAME,EAAOkB,EAAKf,EAAOE,EAAS0D,EAAS,IAGrE,GAAIQ,GAAczV,KAAK4K,QACvB5K,MAAKsN,aACLtN,KAAKoP,OACDqG,GAAezV,KAAK4K,UAAY5K,KAAK2L,WACvC3L,KAAKiK,UAOf+K,SAAU,SAAUzG,EAAMmH,GACnBA,GAAkB,QAATA,IACZ1V,KAAKuO,KAAOA,GACTmH,GAAkB,QAATA,IACZ1V,KAAKmP,SAAWZ,GAClBvO,KAAKoP,OACLpP,KAAKyO,UACL,IAAInN,EACAtB,MAAKyI,QACPnH,EAAUtB,KAAKsB,QACNtB,KAAK4I,YACdtH,EAAUtB,KAAKsB,QAAQmG,KAAK,UAE1BnG,IACFA,EAAQqU,SACJ3V,KAAK2L,aAAe+J,GAAkB,QAATA,IAInC1V,KAAKsB,QAAQb,SACX6N,KAAM,aACNC,KAAMvO,KAAK2O,YAEF,MAARJ,IACDvO,KAAKuO,KAAOvO,KAAKmP,WAGrByG,WAAY,SAAUrH,EAAM+F,GAC1B,IAAKA,EAAK,MAAO/F,EACjB,IAAIsH,GAAW,GAAIjR,MAAK2J,EAAKuD,UAG7B,OADA+D,GAASL,cAAcK,EAASrE,gBAAmB8C,EAAMtU,KAAKkJ,YACvD2M,GAGTrB,SAAU,SAAUjG,EAAM+F,GACxB,IAAKA,EAAK,MAAO/F,EACjB,IAAIsH,GAAW,GAAIjR,MAAK2J,EAAKuD,UAG7B,OADA+D,GAASP,YAAYO,EAASvE,cAAgBgD,GACvCuB,GAGTpB,SAAU,SAAUlG,EAAM+F,GACxB,IAAKA,EAAK,MAAO/F,EACjB,IAAIsH,GAAW,GAAIjR,MAAK2J,EAAKuD,UAG7B,OADA+D,GAAS3G,WAAW2G,EAAShH,aAAeyF,GACrCuB,GAGTnB,UAAW,SAAUnG,EAAM+F,GACzB,IAAKA,EAAK,MAAO/F,EACjB,IAIEuH,GAAWC,EAJTF,EAAW,GAAIjR,MAAK2J,EAAKuD,WAC3BM,EAAMyD,EAAShH,aACfqC,EAAQ2E,EAAS1E,cACjB6E,EAAM5C,KAAK6C,IAAI3B,EAGjB,IADAA,EAAMA,EAAM,EAAI,KACL,GAAP0B,EACFD,EAAOzB,MAGH,WACF,MAAOuB,GAAS1E,eAAiBD,GAI/B,WACF,MAAO2E,GAAS1E,eAAiB2E,GAEnCA,EAAY5E,EAAQoD,EACpBuB,EAASV,YAAYW,IAEjBA,EAAY,GAAKA,EAAY,MAC/BA,GAAaA,EAAY,IAAM,QAC5B,CAEL,IAAK,GAAI3S,GAAI,EAAGA,EAAI6S,EAAK7S,IAEvB0S,EAAW7V,KAAK0U,UAAUmB,EAAUvB,EAEtCwB,GAAYD,EAAS1E,cACrB0E,EAAS3G,WAAWkD,GACpB2D,EAAO,WACL,MAAOD,IAAaD,EAAS1E,eAKjC,KAAO4E,KACLF,EAAS3G,aAAakD,GACtByD,EAASV,YAAYW,EAEvB,OAAOD,IAGTlB,SAAU,SAAUpG,EAAM+F,GACxB,MAAOtU,MAAK0U,UAAUnG,EAAY,GAAN+F,IAG9B4B,gBAAiB,SAAU3H,GACzB,MAAOA,IAAQvO,KAAKkM,WAAaqC,GAAQvO,KAAKoM,SAGhDyB,QAAS,SAAU9D,GACjB,GAAI/J,KAAKiL,OAAOhL,GAAG,kBAGjB,YAFiB,IAAb8J,EAAEoM,SACJnW,KAAKuN,OAGT,IACE+G,GACA8B,EAASC,EAFPC,GAAc,CAGlB,QAAQvM,EAAEoM,SACR,IAAK,IACHnW,KAAKiK,OACLF,EAAEsE,gBACF,MACF,KAAK,IACL,IAAK,IACH,IAAKrO,KAAK4L,mBAAoB,KAC9B0I,GAAmB,IAAbvK,EAAEoM,WAAqB,EAC7BvL,SAAW5K,KAAK4K,SACZb,EAAEwM,QACJ3L,UAAY,EACHb,EAAEyM,WACX5L,UAAY,GAEE,GAAZA,UACFwL,EAAUpW,KAAK2U,SAAS3U,KAAKuO,KAAM+F,GACnC+B,EAAcrW,KAAK2U,SAAS3U,KAAKmP,SAAUmF,IACtB,GAAZ1J,UACTwL,EAAUpW,KAAK0U,UAAU1U,KAAKuO,KAAM+F,GACpC+B,EAAcrW,KAAK0U,UAAU1U,KAAKmP,SAAUmF,IACvB,GAAZ1J,UACTwL,EAAUpW,KAAKyU,SAASzU,KAAKuO,KAAM+F,GACnC+B,EAAcrW,KAAKyU,SAASzU,KAAKmP,SAAUmF,IACtB,GAAZ1J,UACTwL,EAAUpW,KAAKwU,SAASxU,KAAKuO,KAAM+F,GACnC+B,EAAcrW,KAAKwU,SAASxU,KAAKmP,SAAUmF,IACtB,GAAZ1J,WACTwL,EAAUpW,KAAK4V,WAAW5V,KAAKuO,KAAM+F,GACrC+B,EAAcrW,KAAK4V,WAAW5V,KAAKmP,SAAUmF,IAE3CtU,KAAKkW,gBAAgBE,KACvBpW,KAAKuO,KAAO6H,EACZpW,KAAKmP,SAAWkH,EAChBrW,KAAKyO,WACLzO,KAAKqN,SACLtD,EAAEsE,iBACFiI,GAAc,EAEhB,MACF,KAAK,IACL,IAAK,IACH,IAAKtW,KAAK4L,mBAAoB,KAC9B0I,GAAmB,IAAbvK,EAAEoM,WAAqB,EAC7BvL,SAAW5K,KAAK4K,SACZb,EAAEwM,QACJ3L,UAAY,EACHb,EAAEyM,WACX5L,UAAY,GAEE,GAAZA,UACFwL,EAAUpW,KAAK2U,SAAS3U,KAAKuO,KAAM+F,GACnC+B,EAAcrW,KAAK2U,SAAS3U,KAAKmP,SAAUmF,IACtB,GAAZ1J,UACTwL,EAAUpW,KAAK0U,UAAU1U,KAAKuO,KAAM+F,GACpC+B,EAAcrW,KAAK0U,UAAU1U,KAAKmP,SAAUmF,IACvB,GAAZ1J,UACTwL,EAAUpW,KAAKyU,SAASzU,KAAKuO,KAAY,EAAN+F,GACnC+B,EAAcrW,KAAKyU,SAASzU,KAAKmP,SAAgB,EAANmF,IACtB,GAAZ1J,SACL5K,KAAKoJ,cACPgN,EAAUpW,KAAKwU,SAASxU,KAAKuO,KAAY,EAAN+F,GACnC+B,EAAcrW,KAAKwU,SAASxU,KAAKmP,SAAgB,EAANmF,KAE3C8B,EAAUpW,KAAKwU,SAASxU,KAAKuO,KAAY,EAAN+F,GACnC+B,EAAcrW,KAAKwU,SAASxU,KAAKmP,SAAgB,EAANmF,IAExB,GAAZ1J,WACTwL,EAAUpW,KAAK4V,WAAW5V,KAAKuO,KAAY,EAAN+F,GACrC+B,EAAcrW,KAAK4V,WAAW5V,KAAKmP,SAAgB,EAANmF,IAE3CtU,KAAKkW,gBAAgBE,KACvBpW,KAAKuO,KAAO6H,EACZpW,KAAKmP,SAAWkH,EAChBrW,KAAKyO,WACLzO,KAAKqN,SACLtD,EAAEsE,iBACFiI,GAAc,EAEhB,MACF,KAAK,IACH,GAAqB,GAAjBtW,KAAK4K,SAAe,CACtB,GAAI6K,GAAczV,KAAK4K,QACvB5K,MAAKsN,aACLtN,KAAKoP,OACDqG,GAAezV,KAAK4K,UAAY5K,KAAK2L,WACvC3L,KAAKiK,WAGPjK,MAAKoP,OACDpP,KAAK2L,WACP3L,KAAKiK,MAGTF,GAAEsE,gBACF,MACF,KAAK,GACHrO,KAAKiK,OAGT,GAAIqM,EAAa,CACf,GAAIhV,EACAtB,MAAKyI,QACPnH,EAAUtB,KAAKsB,QACNtB,KAAK4I,YACdtH,EAAUtB,KAAKsB,QAAQmG,KAAK,UAE1BnG,GACFA,EAAQqU,SAEV3V,KAAKsB,QAAQb,SACX6N,KAAM,aACNC,KAAMvO,KAAK2O,cAKjBrB,SAAU,SAAUgH,GAClB,GAAIA,EAAK,CACP,GAAImC,GAAcrD,KAAKsD,IAAI,EAAGtD,KAAKuD,IAAIvO,EAASkC,MAAM/J,OAAS,EAAGP,KAAK4K,SAAW0J,GAC9EmC,IAAezW,KAAKmK,SAAWsM,GAAezW,KAAKqK,UACrDrK,KAAKsB,QAAQb,SACX6N,KAAa,aACbC,KAAavO,KAAKmP,SAClBsG,YAAazV,KAAK4K,SAClB6L,YAAaA,IAGfzW,KAAK4K,SAAW6L,GAapBzW,KAAKiL,OAAOxD,KAAK,QAAQwC,OAAOlK,OAAO,mBAAqBqI,EAASkC,MAAMtK,KAAK4K,UAAU4H,SAASpC,IAAI,UAAW,SAClHpQ,KAAK0P,mBAGP5B,MAAO,SAAU/D,GACf/J,KAAKgV,SAAS,KAAM,SAGtBJ,oBAAsB,SAAUhK,GAC9B,OAAQA,GACN,IAAK,GACH,MAAO,QACT,KAAK,GACH,MAAO,MACT,KAAK,GACH,MAAO,OACT,KAAK,GACH,MAAO,KACT,KAAK,GACH,MAAO,SAKf,IAAIgM,GAAMhX,EAAEsC,GAAGwM,cACf9O,GAAEsC,GAAGwM,eAAiB,SAAUmI,GAC9B,GAAIC,GAAOvP,MAAMD,MAAM,KAAMlE,UAC7B0T,GAAKC,OACL,IAAIC,EAeJ,OAdAhX,MAAKkQ,KAAK,WACR,GAAI+G,GAAQrX,EAAEI,MACZgC,EAAOiV,EAAMjV,KAAK,kBAClBK,EAA2B,gBAAVwU,IAAsBA,CAIzC,IAHK7U,GACHiV,EAAMjV,KAAK,iBAAmBA,EAAO,GAAI2F,GAAe3H,KAAMJ,EAAEuC,UAAWvC,EAAEsC,GAAGwM,eAAe1N,SAAUqB,KAEtF,gBAAVwU,IAA6C,kBAAhB7U,GAAK6U,KAC3CG,EAAkBhV,EAAK6U,GAAQvP,MAAMtF,EAAM8U,GACvCE,IAAoB7P,GACtB,OAAO,IAIT6P,IAAoB7P,EACf6P,EAEAhX,MAGXJ,EAAEsC,GAAGwM,eAAe1N,YAEpBpB,EAAEsC,GAAGwM,eAAewI,YAAcvP,CAClC,IAAII,GAAQnI,EAAEsC,GAAGwM,eAAe3G,OAC9BoP,IACEC,MAAc,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,WAAY,UAC5FC,WAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC/DxG,SAAc,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACxDmB,QAAc,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YAC5HjB,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FmC,UAAc,KAAM,MACpBoE,QAAc,KAAM,KAAM,KAAM,MAChCvF,MAAa,QACbG,MAAa,SAEfqF,IACIH,MAAO,UAAW,SAAU,WAAY,WAAY,aAAc,UAAW,UAAW,WACxFC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC7DxG,SAAU,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACpDmB,QAAS,SAAU,UAAW,OAAQ,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACpHjB,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FgB,MAAO,QACPuF,UACApE,YACAlH,UAAW,EACX/I,OAAQ,cAEZuU,IACIJ,MAAO,WAAY,SAAU,UAAW,YAAa,UAAW,UAAW,SAAU,YACrFC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC7DxG,SAAU,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACpDmB,QAAS,UAAW,WAAY,QAAS,SAAU,SAAU,SAAU,SAAU,SAAU,YAAa,UAAW,WAAY,YAC/HjB,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FgB,MAAO,OACPuF,UACApE,YACAlH,UAAW,EACX/I,OAAQ,uBAEZwU,IACIL,MAAO,WAAY,QAAS,QAAS,WAAY,QAAS,WAAY,SAAU,YAChFC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC7DxG,SAAU,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAC/CmB,QAAS,UAAW,UAAW,OAAQ,QAAS,MAAO,OAAQ,UAAW,OAAQ,YAAa,UAAW,WAAY,YACtHjB,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FgB,MAAO,cACPuF,UACApE,YACAlH,UAAW,EACX/I,OAAQ,qBAIVmF,GACFkC,QAEIkI,QAAS,UACTkF,OAAS,QACTnD,QAAS,IAGT/B,QAAS,QACTkF,OAAS,OACTnD,QAAS,IAGT/B,QAAS,OACTkF,OAAS,QACTnD,QAAS,IAGT/B,QAAS,SACTkF,OAAS,WACTnD,QAAS,IAGT/B,QAAS,QACTkF,OAAS,WACTnD,QAAS,KAGboD,WAAkB,SAAU3G,GAC1B,MAAUA,GAAO,IAAM,GAAOA,EAAO,MAAQ,GAAQA,EAAO,MAAQ,GAEtEqB,eAAkB,SAAUrB,EAAME,GAChC,OAAQ,GAAK9I,EAASuP,WAAW3G,GAAQ,GAAK,GAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAIE,IAE7F5I,iBAAkB,SAAUgG,EAAMsJ,GAChC,GAAY,YAARtJ,EACF,MAAa,SAATsJ,EACK,mBAEA,qBACJ,IAAY,OAARtJ,EACT,MAAa,SAATsJ,EACK,YAEA,aAET,MAAM,IAAIC,OAAM,yBAGpBC,WAAY,SAAUxJ,GACpB,GAAY,YAARA,EACF,MAAO,sDACF,IAAY,OAARA,EACT,MAAO,6BAEP,MAAM,IAAIuJ,OAAM,yBAGpBE,eAAgB,8BAChB1P,YAAa,SAAUpF,EAAQqL,GAG7B,GAAI0J,GAAa/U,EAAOI,QAAQrD,KAAK8X,WAAWxJ,GAAO,MAAMtG,MAAM,MACjEiQ,EAAQhV,EAAOiV,MAAMlY,KAAK8X,WAAWxJ,GACvC,KAAK0J,IAAeA,EAAWzX,SAAW0X,GAAyB,GAAhBA,EAAM1X,OACvD,KAAM,IAAIsX,OAAM,uBAElB,QAAQG,WAAYA,EAAYC,MAAOA,IAEzCxI,UAAW,SAAUlB,EAAMtL,EAAQ6E,EAAUwG,EAAM9E,GACjD,GAAI+E,YAAgB3J,MAAM,CACxB,GAAIuT,GAAU,GAAIvT,MAAK2J,EAAKuD,UAAuC,IAA3BvD,EAAKO,oBAE7C,OADAqJ,GAAQC,gBAAgB,GACjBD,EAWT,GATI,4BAA4BpC,KAAKxH,KACnCtL,EAASjD,KAAKqI,YAAY,aAAciG;AAEtC,gDAAgDyH,KAAKxH,KACvDtL,EAASjD,KAAKqI,YAAY,mBAAoBiG,IAE5C,iEAAiEyH,KAAKxH,KACxEtL,EAASjD,KAAKqI,YAAY,sBAAuBiG,IAE/C,wCAAwCyH,KAAKxH,GAAO,CACtD,GAEE8J,GAAM/D,EAFJgE,EAAU,oBACZL,EAAQ1J,EAAK2J,MAAM,qBAErB3J,GAAO,GAAI3J,KACX,KAAK,GAAIzB,GAAI,EAAGA,EAAI8U,EAAM1X,OAAQ4C,IAGhC,OAFAkV,EAAOC,EAAQC,KAAKN,EAAM9U,IAC1BmR,EAAMtE,SAASqI,EAAK,IACZA,EAAK,IACX,IAAK,IACH9J,EAAKW,WAAWX,EAAKM,aAAeyF,EACpC,MACF,KAAK,IACH/F,EAAO5G,EAAe3E,UAAU0R,UAAU8D,KAAK7Q,EAAe3E,UAAWuL,EAAM+F,EAC/E,MACF,KAAK,IACH/F,EAAKW,WAAWX,EAAKM,aAAqB,EAANyF,EACpC,MACF,KAAK,IACH/F,EAAO5G,EAAe3E,UAAU2R,SAAS6D,KAAK7Q,EAAe3E,UAAWuL,EAAM+F,GAIpF,MAAOlN,GAAQmH,EAAK0C,iBAAkB1C,EAAK4C,cAAe5C,EAAKM,aAAcN,EAAK+C,cAAe/C,EAAKiD,gBAAiBjD,EAAK2G,gBAAiB,GAE/I,GAyDE1G,GAAKiK,EAAUJ,EAzDbJ,EAAQ1J,GAAQA,EAAKmK,WAAWR,MAAMlY,KAAK+X,oBAC7CxJ,EAAO,GAAI3J,MAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAClC+T,KACAC,GAAiB,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,OAAQ,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KACtIC,GACEC,GAAM,SAAUlK,EAAGmK,GACjB,MAAOnK,GAAE0G,YAAYyD,IAEvBC,EAAM,SAAUpK,EAAGmK,GACjB,MAAOnK,GAAE0G,YAAYyD,IAEvBE,GAAM,SAAUrK,EAAGmK,GACjB,MAAOnK,GAAE0G,YAAiB,IAALyD,EAAU,EAAIA,IAErCG,EAAM,SAAUtK,EAAGmK,GACjB,MAAOnK,GAAE0G,YAAiB,IAALyD,EAAU,EAAIA,IAErCI,GAAM,SAAUvK,EAAGmK,GACjB,MAAOnK,GAAE4G,cAAcuD,IAEzB5V,EAAM,SAAUyL,EAAGmK,GACjB,MAAOnK,GAAE4G,cAAcuD,IAEzBK,GAAM,SAAUxK,EAAGmK,GACjB,MAAOnK,GAAEyK,cAAcN,IAEzB7V,EAAM,SAAU0L,EAAGmK,GACjB,MAAOnK,GAAEyK,cAAcN,IAEzBO,KAAM,SAAU1K,EAAGmK,GACjB,MAAOnK,GAAEwG,eAAe2D,IAE1BQ,GAAM,SAAU3K,EAAGmK,GACjB,MAAOnK,GAAEwG,eAAe,IAAO2D,IAEjCS,EAAM,SAAU5K,EAAGmK,GAEjB,IADAA,GAAK,EACEA,EAAI,GAAGA,GAAK,EAGnB,KAFAA,GAAK,GACLnK,EAAEuG,YAAY4D,GACPnK,EAAEuC,eAAiB4H,GACxB,CAAA,GAAIU,MAAM7K,EAAEuC,eACV,MAAOvC,EAEPA,GAAEM,WAAWN,EAAEC,aAAe,GAClC,MAAOD,IAETA,EAAM,SAAUA,EAAGmK,GACjB,MAAOnK,GAAEM,WAAW6J,IAEtBW,EAAM,SAAU9K,EAAGmK,GACjB,MAAOnK,GAAE0G,YAAiB,GAALyD,EAASnK,EAAE0C,cAAgB,GAAK1C,EAAE0C,gBAEzDqI,EAAM,WACJ,MAAOnQ,IASb,IALAqP,EAAe,EAAIA,EAAgB,GAAIA,EAAgB,GAAIA,EAAe,EAC1EA,EAAgB,GAAIA,EAAe,EACnCA,EAAe,EAAIA,EAAe,EAClCA,EAAe,EAAIA,EAAe,EAClCtK,EAAOnH,EAAQmH,EAAKkE,cAAelE,EAAKmE,WAAYnE,EAAKI,UAAWJ,EAAKsG,WAAYtG,EAAKuG,aAAcvG,EAAKwG,cACzGkD,EAAM1X,QAAU0C,EAAOgV,MAAM1X,OAAQ,CACvC,IAAK,GAAI4C,GAAI,EAAGyW,EAAM3W,EAAOgV,MAAM1X,OAAQ4C,EAAIyW,EAAKzW,IAAK,CAGvD,GAFAqL,EAAMwB,SAASiI,EAAM9U,GAAI,IACzBkV,EAAOpV,EAAOgV,MAAM9U,GAChBsW,MAAMjL,GACR,OAAQ6J,GACN,IAAK,KACHI,EAAW7Y,EAAEmI,EAAMD,GAAUkK,QAAQjS,OAAO,WAC1C,GAAIyZ,GAAIxZ,KAAK0T,MAAM,EAAGuE,EAAM9U,GAAG5C,QAC7BmZ,EAAIzB,EAAM9U,GAAGuQ,MAAM,EAAG8F,EAAEjZ,OAC1B,OAAOiZ,IAAKE,IAEdlL,EAAM5O,EAAE+S,QAAQ8F,EAAS,GAAI1Q,EAAMD,GAAUkK,QAAU,CACvD,MACF,KAAK,IACHyG,EAAW7Y,EAAEmI,EAAMD,GAAUiJ,aAAahR,OAAO,WAC/C,GAAIyZ,GAAIxZ,KAAK0T,MAAM,EAAGuE,EAAM9U,GAAG5C,QAC7BmZ,EAAIzB,EAAM9U,GAAGuQ,MAAM,EAAG8F,EAAEjZ,OAC1B,OAAOiZ,GAAEpF,eAAiBsF,EAAEtF,gBAE9B5F,EAAM5O,EAAE+S,QAAQ8F,EAAS,GAAI1Q,EAAMD,GAAUiJ,aAAe,CAC5D,MACF,KAAK,IACL,IAAK,IACHvC,EAAM5O,EAAE+S,QAAQsF,EAAM9U,GAAGiR,cAAerM,EAAMD,GAAUoL,SACxD,MACF,KAAK,IACL,IAAK,KAMTyF,EAAON,GAAQ7J,EAEjB,IAAK,GAAWtL,GAAPC,EAAI,EAAMA,EAAIyV,EAAcrY,OAAQ4C,IAC3CD,EAAI0V,EAAczV,GACdD,IAAKyV,KAAWc,MAAMd,EAAOzV,KAC/B2V,EAAY3V,GAAGqL,EAAMoK,EAAOzV,IAGlC,MAAOqL,IAETiB,WAAkB,SAAUjB,EAAMtL,EAAQ6E,EAAUwG,EAAM9E,GACxD,GAAY,MAAR+E,EACF,MAAO,EAET,IAAIC,EACJ,IAAY,YAARF,EACFE,GACEqL,EAAMtL,EAAK1J,UAEX0U,GAAMhL,EAAK0C,iBAAiByH,WAAWoB,UAAU,GACjDR,KAAM/K,EAAK0C,iBAEXuI,EAAMjL,EAAK4C,cAAgB,EAC3B4I,EAAMhS,EAAMD,GAAUiJ,YAAYxC,EAAK4C,eACvC6I,GAAMjS,EAAMD,GAAUkK,OAAOzD,EAAK4C,eAElCvC,EAAML,EAAKM,aACXoL,EAAMlS,EAAMD,GAAUuP,UAAU9I,EAAK+D,aACrC4H,GAAMnS,EAAMD,GAAUsP,KAAK7I,EAAK+D,aAChCoH,EAA0C,GAAnC3R,EAAMD,GAAUoL,SAAS3S,OAAcwH,EAAMD,GAAUoL,SAAS3E,EAAK+C,cAAgB,GAAK,EAAI,GAAK,GAE1G0H,EAAMzK,EAAK+C,cAEXnO,EAAMoL,EAAKiD,gBAEXtO,EAAMqL,EAAK2G,gBAEXyE,EAAMnQ,GAG+B,GAAnCzB,EAAMD,GAAUoL,SAAS3S,OAC3BiO,EAAI0K,EAAK1K,EAAIwK,EAAI,IAAM,EAAI,GAAKxK,EAAIwK,EAAI,GAGxCxK,EAAI0K,EAAI1K,EAAIwK,EAEdxK,EAAIyK,IAAMzK,EAAI0K,EAAI,GAAK,IAAM,IAAM1K,EAAI0K,EACvC1K,EAAI2L,EAAI3L,EAAIkL,EAAEvG,cACd3E,EAAI4L,EAAI5L,EAAImL,EACZnL,EAAIsK,IAAMtK,EAAIwK,EAAI,GAAK,IAAM,IAAMxK,EAAIwK,EACvCxK,EAAI2K,IAAM3K,EAAIrL,EAAI,GAAK,IAAM,IAAMqL,EAAIrL,EACvCqL,EAAI4K,IAAM5K,EAAItL,EAAI,GAAK,IAAM,IAAMsL,EAAItL,EACvCsL,EAAI6L,IAAM7L,EAAII,EAAI,GAAK,IAAM,IAAMJ,EAAII,EACvCJ,EAAI8L,IAAM9L,EAAIgL,EAAI,GAAK,IAAM,IAAMhL,EAAIgL,MAClC,CAAA,GAAY,OAARlL,EAmCT,KAAM,IAAIuJ,OAAM,uBAjChBrJ,IAEE+L,EAAGhM,EAAK0C,iBAAiByH,WAAWoB,UAAU,GAC9CU,EAAGjM,EAAK0C,iBAERwJ,EAAG1S,EAAMD,GAAUkK,OAAOzD,EAAK4C,eAC/B4I,EAAGhS,EAAMD,GAAUiJ,YAAYxC,EAAK4C,eACpCzJ,EAAG6G,EAAK4C,cAAgB,EACxB0I,EAAGzR,EAASiK,eAAe9D,EAAK0C,iBAAkB1C,EAAK4C,eAEvDuJ,EAAGnM,EAAKM,aACR8L,EAAG5S,EAAMD,GAAUsP,KAAK7I,EAAK+D,aAC7B2H,EAAGlS,EAAMD,GAAUuP,UAAU9I,EAAK+D,aAClCsI,EAAGrM,EAAK+D,YACRuI,EAAwB,GAApBtM,EAAK+D,YAAmB,EAAI/D,EAAK+D,YACrCwI,EAAIvM,EAAKM,aAAe,IAAM9G,EAAMD,GAAUwP,OAAO/W,OAASwH,EAAMD,GAAUwP,OAAO/I,EAAKM,aAAe,GAAK,GAAK,GAEnHkM,EAAuC,GAAnChT,EAAMD,GAAUoL,SAAS3S,OAAcwH,EAAMD,GAAUoL,SAAS3E,EAAK+C,cAAgB,GAAK,EAAI,GAAK,GACvG0J,EAAIzM,EAAK+C,cAAgB,IAAM,EAAI,GAAK/C,EAAK+C,cAAgB,GAC7D2J,EAAG1M,EAAK+C,cAERnO,EAAGoL,EAAKiD,gBAERtO,EAAGqL,EAAK2G,iBAEV1G,EAAIgL,GAAKhL,EAAI9G,EAAI,GAAK,IAAM,IAAM8G,EAAI9G,EACtC8G,EAAII,GAAKJ,EAAIkM,EAAI,GAAK,IAAM,IAAMlM,EAAIkM,EACtClM,EAAI0M,EAAI1M,EAAIuM,EAAErC,WAAWvF,cACzB3E,EAAIwK,GAAKxK,EAAIwM,EAAI,GAAK,IAAM,IAAMxM,EAAIwM,EACtCxM,EAAI0K,GAAK1K,EAAIyM,EAAI,GAAK,IAAM,IAAMzM,EAAIyM,EACtCzM,EAAIrL,GAAKqL,EAAIrL,EAAI,GAAK,IAAM,IAAMqL,EAAIrL,EACtCqL,EAAItL,GAAKsL,EAAItL,EAAI,GAAK,IAAM,IAAMsL,EAAItL,EAMxC,IAAK,GAFDqL,MACF4M,EAAOvb,EAAEuC,UAAWc,EAAO+U,YACpB7U,EAAI,EAAGyW,EAAM3W,EAAOgV,MAAM1X,OAAQ4C,EAAIyW,EAAKzW,IAC9CgY,EAAK5a,QACPgO,EAAKzN,KAAKqa,EAAKpE,SAEjBxI,EAAKzN,KAAK0N,EAAIvL,EAAOgV,MAAM9U,IAK7B,OAHIgY,GAAK5a,QACPgO,EAAKzN,KAAKqa,EAAKpE,SAEVxI,EAAKsE,KAAK,KAEnBzI,gBAAkB,SAAUQ,GAC1B,OAAQA,GACN,IAAK,GACL,IAAK,SACHA,EAAW,CACX,MACF,KAAK,GACL,IAAK,OACHA,EAAW,CACX,MACF,KAAK,GACL,IAAK,QACHA,EAAW,CACX,MACF,KAAK,GACL,IAAK,MACHA,EAAW,CACX,MACF,KAAK,GACL,IAAK,OACHA,EAAW,EAIf,MAAOA,IAETwQ,aAAc,kLAOdC,eAAgB,sMAOhBC,aAAc,gDACdC,aAAc,0GAKhBnT,GAAS2C,SAAW,mGAGlB3C,EAASgT,aACThT,EAASkT,aACTlT,EAASmT,aACT,mFAIAnT,EAASgT,aACThT,EAASkT,aACTlT,EAASmT,aACT,kFAIAnT,EAASgT,aACT,kBACAhT,EAASmT,aACT,mFAIAnT,EAASgT,aACThT,EAASkT,aACTlT,EAASmT,aACT,kFAIAnT,EAASgT,aACThT,EAASkT,aACTlT,EAASmT,aACT,uBAGFnT,EAAS4C,WAAa,mGAGpB5C,EAASiT,eACTjT,EAASkT,aACTlT,EAASmT,aACT,mFAIAnT,EAASiT,eACTjT,EAASkT,aACTlT,EAASmT,aACT,kFAIAnT,EAASiT,eACT,kBACAjT,EAASmT,aACT,mFAIAnT,EAASiT,eACTjT,EAASkT,aACTlT,EAASmT,aACT,kFAIAnT,EAASiT,eACTjT,EAASkT,aACTlT,EAASmT,aACT,uBAGF3b,EAAEsC,GAAGwM,eAAetG,SAAWA,EAK/BxI,EAAEsC,GAAGwM,eAAe8M,WAAa,WAE/B,MADA5b,GAAEsC,GAAGwM,eAAiBkI,EACf5W,MAMTJ,EAAE8L,UAAUR,GACV,8DACA,kCACA,SAAUnB,GACR,GAAIkN,GAAQrX,EAAEI,KACViX,GAAMjV,KAAK,oBACf+H,EAAEsE,iBAEF4I,EAAMvI,eAAe,WAGzB9O,EAAE,WACAA,EAAE,0CAA0C8O;AC75DhD+M,QAAQ7Y,OAAO,yBACVmE,QAAQ,SAAU,WACjB,YACA,QACE2U,cAAe,SAAUC,GACvB,GAAIC,GAAkBD,EAAKE,SAAWF,EAAKG,uBAAyBH,EAAKI,oBAAsBJ,EAAKK,iBACpG,OAAIJ,GAAgBK,KAAKN,GAAM,KACtBA,EAAKO,WAEPP,GAETQ,UAAW,SAAUR,EAAMS,GAKzB,IAJA,GACEC,GAAU,EACVC,EAAU,EACVC,EAAOZ,EAAKa,wBACPb,IAASlC,MAAMkC,EAAKc,cAAgBhD,MAAMkC,EAAKe,YAC/CN,GAAkC,SAAjBT,EAAKgB,SAIzBN,GAAWV,EAAKla,WAChB6a,GAAWX,EAAKha,YAJhB0a,GAAW3Q,SAASkR,gBAAgBnb,YAAcka,EAAKla,WACvD6a,GAAW5Q,SAASkR,gBAAgBjb,WAAaga,EAAKha,WAKxDga,EAAOA,EAAKkB,YAEd,QACE/a,IAAKya,EAAKza,IAAMV,OAAO0b,YACvBjb,KAAM0a,EAAK1a,KAAOT,OAAO2b,YACzBV,QAASA,EACTC,QAASA,IAIbU,gBAEIC,GAAI,sFACJC,MAAO,SAAUC,GACf,OACEA,EAAW,GACXA,EAAW,GACXA,EAAW,GACXA,EAAW,OAKfF,GAAI,8GACJC,MAAO,SAAUC,GACf,OACE,KAAOA,EAAW,GAClB,KAAOA,EAAW,GAClB,KAAOA,EAAW,GAClBA,EAAW,OAKfF,GAAI,oDACJC,MAAO,SAAUC,GACf,OACEnN,SAASmN,EAAW,GAAI,IACxBnN,SAASmN,EAAW,GAAI,IACxBnN,SAASmN,EAAW,GAAI,QAK5BF,GAAI,2CACJC,MAAO,SAAUC,GACf,OACEnN,SAASmN,EAAW,GAAKA,EAAW,GAAI,IACxCnN,SAASmN,EAAW,GAAKA,EAAW,GAAI,IACxCnN,SAASmN,EAAW,GAAKA,EAAW,GAAI,WAOnDpW,QAAQ,SAAU,SAAU,SAAUqW,GACrC,YACA,QACErN,OACEiJ,EAAG,EACH9V,EAAG,EACHma,EAAG,EACHtC,EAAG,GAGLuC,IAAO,WACL,GAAIA,GAAMtd,KAAKud,OACf,OAAO,OAASD,EAAIE,EAAI,IAAMF,EAAItC,EAAI,IAAMsC,EAAID,EAAI,KAEtDI,KAAQ,WACN,GAAIH,GAAMtd,KAAKud,OACf,OAAO,QAAUD,EAAIE,EAAI,IAAMF,EAAItC,EAAI,IAAMsC,EAAID,EAAI,IAAMC,EAAIvC,EAAI,KAErE2C,IAAO,WACL,MAAQ1d,MAAK2d,SAIfC,SAAU,SAAUJ,EAAGxC,EAAGqC,EAAGtC,GAC3ByC,GAAK,IACLxC,GAAK,IACLqC,GAAK,GAEL,IAAInE,GAAG4B,EAAG+C,EAAGC,CAUb,OATAD,GAAIzK,KAAKsD,IAAI8G,EAAGxC,EAAGqC,GACnBS,EAAID,EAAIzK,KAAKuD,IAAI6G,EAAGxC,EAAGqC,GACvBnE,EAAW,IAAN4E,EAAU,KACXD,IAAML,GAAKxC,EAAIqC,GAAKS,EAChBD,IAAM7C,GAAKqC,EAAIG,GAAKM,EAAI,GACnBN,EAAIxC,GAAK8C,EAAI,EAE1B5E,GAAMA,EAAI,KAAO,EAAK,GAAK,IAC3B4B,EAAU,IAANgD,EAAU,EAAIA,EAAID,GACd7E,EAAGE,GAAK,EAAGhW,EAAG4X,EAAGuC,EAAGQ,EAAG9C,EAAGA,GAAK,IAIzCgD,SAAU,SAAUvP,GAClBA,EAAM,EAAQA,EAAI4F,cAAgB5F,CAClC,KAAK,GAAIwP,KAAOZ,GAAOJ,cACrB,GAAII,EAAOJ,cAAciB,eAAeD,GAAM,CAC5C,GAAIE,GAASd,EAAOJ,cAAcgB,GAC9B9F,EAAQgG,EAAOjB,GAAG1E,KAAK/J,GACvB2P,EAASjG,GAASgG,EAAOhB,MAAMhF,EACnC,IAAIiG,EAEF,MADAne,MAAK+P,MAAQ/P,KAAK4d,SAAStW,MAAM,KAAM6W,IAChC,IAMfC,OAAQ,SAAUpF,GAChBhZ,KAAK+P,MAAMiJ,EAAI,EAAIA,GAGrBqF,cAAe,SAAUnb,GACvBlD,KAAK+P,MAAM7M,EAAIA,GAGjBob,aAAc,SAAUjB,GACtBrd,KAAK+P,MAAMsN,EAAI,EAAIA,GAGrBkB,SAAU,SAAUxD,GAClB/a,KAAK+P,MAAMgL,EAAI/K,SAAmB,KAAT,EAAI+K,GAAU,IAAM,KAK/CwC,MAAO,SAAUvE,EAAG9V,EAAGma,EAAGtC,GACnB/B,IACHA,EAAIhZ,KAAK+P,MAAMiJ,EACf9V,EAAIlD,KAAK+P,MAAM7M,EACfma,EAAIrd,KAAK+P,MAAMsN,GAEjBrE,GAAK,GACL,IAAIwF,GAAGvD,EAAGwD,EAAGC,EAAGZ,CAUhB,OATA9E,GAAKA,EAAI,IAAO,GAChB8E,EAAIT,EAAIna,EACRwb,EAAIZ,GAAK,EAAI1K,KAAK6C,IAAI+C,EAAI,EAAI,IAC9BwF,EAAIvD,EAAIwD,EAAIpB,EAAIS,EAEhB9E,IAAMA,EACNwF,IAAMV,EAAGY,EAAG,EAAG,EAAGA,EAAGZ,GAAG9E,GACxBiC,IAAMyD,EAAGZ,EAAGA,EAAGY,EAAG,EAAG,GAAG1F,GACxByF,IAAM,EAAG,EAAGC,EAAGZ,EAAGA,EAAGY,GAAG1F,IAEtBwE,EAAGpK,KAAKuL,MAAU,IAAJH,GACdxD,EAAG5H,KAAKuL,MAAU,IAAJ1D,GACdoC,EAAGjK,KAAKuL,MAAU,IAAJF,GACd1D,EAAGA,GAAK/a,KAAK+P,MAAMgL,IAIvB4C,MAAO,SAAU3E,EAAG9V,EAAGma,EAAGtC,GACxB,GAAIuC,GAAMtd,KAAKud,MAAMvE,EAAG9V,EAAGma,EAAGtC,EAC9B,OAAO,KAAQ,GAAK,GAAO/K,SAASsN,EAAIE,EAAG,KAAO,GAAOxN,SAASsN,EAAItC,EAAG,KAAO,EAAKhL,SAASsN,EAAID,EAAG,KAAK3E,SAAS,IAAInD,OAAO,QAInIxO,QAAQ,UAAW,SAAU,SAAUqW,GACtC,YACA,IACIwB,IACEC,QAAS,EACTC,OAAQ,EACRC,SAAU,KACVC,QAAS,KACTC,MACEnd,IAAK,EACLD,KAAM,IAGVqd,IAEJ,QACEC,UAAW,WACT,MAAOP,IAETQ,gBAAiB,SAASC,GACxB,MAAOjM,MAAKsD,IAAI,EAAGtD,KAAKuD,IAAIiI,EAAOC,QAASD,EAAO/c,OAASwd,EAAMC,OAASJ,EAAQrd,MAAQqd,EAAQrd,SAErG0d,eAAgB,SAASF,GACvB,MAAOjM,MAAKsD,IAAI,EAAGtD,KAAKuD,IAAIiI,EAAOE,OAAQF,EAAO9c,MAAQud,EAAMG,OAASN,EAAQpd,KAAOod,EAAQpd,QAElG2d,UAAW,SAAUJ,EAAOjD,GAC1B,GACEvV,GAASuW,EAAO1B,cAAc2D,EAAMxY,QACpC6Y,EAAetC,EAAOjB,UAAUtV,EAAQuV,GACxCG,EAAO1V,EAAO2V,wBACdmD,EAAUN,EAAMO,QAAUrD,EAAK1a,KAC/Bge,EAAUR,EAAMS,QAAUvD,EAAKza,GAEjC8c,GAAOK,KAAOpY,EAAOkZ,SAAS,GAAGC,MACjCpB,EAAO/c,KAAOwd,EAAMC,MAAQI,EAAa7d,KAAOT,OAAO2b,YAAc2C,EAAarD,QAClFuC,EAAO9c,IAAMud,EAAMG,MAAQE,EAAa5d,IAAMV,OAAO0b,YAAc4C,EAAapD,QAEhF4C,GACErd,KAAMwd,EAAMC,OAASK,EAAUf,EAAO/c,MACtCC,IAAKud,EAAMG,OAASK,EAAUjB,EAAO9c,OAGzCuc,cAAe,SAASgB,EAAOjD,EAAe6D,GAC5CrB,GACEC,QAASoB,EACTnB,OAAQmB,EACRlB,SAAU,gBACVC,QAAS,gBAEXhf,KAAKyf,UAAUJ,EAAOjD,IAExBgC,OAAQ,SAASiB,EAAOjD,EAAe6D,GACrCrB,GACEC,QAAS,EACTC,OAAQmB,EACRlB,UAAU,EACVC,QAAS,UAEXhf,KAAKyf,UAAUJ,EAAOjD,IAExBmC,SAAU,SAASc,EAAOjD,EAAe6D,GACvCrB,GACEC,QAAS,EACTC,OAAQmB,EACRlB,UAAU,EACVC,QAAS,YAEXhf,KAAKyf,UAAUJ,EAAOjD,IAExB8D,QAAS,SAASpe,EAAKD,GACrB+c,EAAOK,KAAKnd,IAAMA,EAAM,KACxB8c,EAAOK,KAAKpd,KAAOA,EAAO,UAI/Bse,UAAU,eAAgB,YAAa,WAAY,QAAS,SAAU,SAAU,SAAUC,EAAWC,EAAUC,EAAOC,EAAQnD,GAC7H,YACA,QACEva,QAAS,WACT2d,SAAU,IACVC,KAAM,SAAUC,EAAQ/E,EAAMgF,EAAOC,GAgEnC,QAASC,KACPT,EAAUlV,GAAG,YAAa4V,GAC1BV,EAAUlV,GAAG,UAAW6V,GA6E1B,QAASC,KACP,IACEC,EAAmB7Q,IAAI,kBAAmB8Q,EAAYC,MACtD,MAAOpX,GACPkX,EAAmB7Q,IAAI,kBAAmB8Q,EAAYvD,SAExDyD,EAAiBhR,IAAI,kBAAmB8Q,EAAYvD,MAAMuD,EAAYnR,MAAMiJ,EAAG,EAAG,EAAG,IAClE,SAAfmI,IACFE,EAAYjR,IAAIkR,gBAAkBJ,EAAYvD,SAIlD,QAASmD,GAAUzB,GACjB,GACIxd,GAAO0e,EAAOnB,gBAAgBC,GAC9Bvd,EAAMye,EAAOhB,eAAeF,GAC5BT,EAAS2B,EAAOpB,WAEpBoB,GAAOL,QAAQpe,EAAKD,GAEhB+c,EAAOG,UACTmC,EAAYtC,EAAOG,UAAUvG,KAAK0I,EAAarf,EAAOoe,GAEpDrB,EAAOI,SACTkC,EAAYtC,EAAOI,SAASxG,KAAK0I,EAAapf,EAAMme,GAEtDe,GACA,IAAIO,GAAWL,EAAYC,IAQ3B,OAPAxF,GAAKnN,IAAI+S,GACLX,GACFF,EAAOc,OAAOZ,EAAQa,cAAcF,IAElCG,GACFC,EAAiBnT,IAAI+S,IAEhB,EAGT,QAASR,KACPa,EAAU,wBACVxB,EAAUnS,IAAI,YAAa6S,GAC3BV,EAAUnS,IAAI,UAAW8S,GAG3B,QAAS1T,GAAOwU,GACdX,EAAYnR,MAAQ+R,EACpBZ,EAAYnD,SAASpC,EAAKnN,OACtBkT,IAAcG,GAChBF,EAAiBnT,IAAImN,EAAKnN,OAE5BuT,EAAoBtO,GAAG,GAAGrD,KACxBvO,KAAMqf,EAAYnR,MAAM7M,EAAI+c,EAAgB,KAC5Cne,IAAKme,EAAgBiB,EAAYnR,MAAMsN,EAAI4C,EAAgB,OAE7D8B,EAAoBtO,GAAG,GAAGrD,IAAI,MAAO6P,GAAiB,EAAIiB,EAAYnR,MAAMiJ,GAAK,MACjF+I,EAAoBtO,GAAG,GAAGrD,IAAI,MAAO6P,GAAiB,EAAIiB,EAAYnR,MAAMgL,GAAK,MACjF+G,EAAmBZ,EAAYnR,MAC/BiR,IAGF,QAASgB,KACP,GACIC,GACAC,EAAiB9E,EAAOjB,UAAUR,EAAK,IACvCwG,EAAiC,CA4BrC,OA1BG1G,SAAQ2G,UAAUzB,EAAM0B,qBACzBH,EAAergB,KAAO,EACtBqgB,EAAepgB,IAAM,GAGN,QAAbwgB,EACFL,GACEngB,IAAOogB,EAAepgB,IAAMygB,EAA8BJ,EAC1DtgB,KAAQqgB,EAAergB,MAEH,UAAbygB,EACTL,GACEngB,IAAOogB,EAAepgB,IACtBD,KAAQqgB,EAAergB,KAAO8Z,EAAK,GAAG6G,YAAcL,GAEhC,WAAbG,EACTL,GACEngB,IAAOogB,EAAepgB,IAAM6Z,EAAK,GAAG8G,aAAeN,EACnDtgB,KAAQqgB,EAAergB,MAEH,SAAbygB,IACTL,GACEngB,IAAOogB,EAAepgB,IACtBD,KAAQqgB,EAAergB,KAAO6gB,EAA6BP,KAI7DrgB,IAAOmgB,EAAcngB,IAAM,KAC3BD,KAAQogB,EAAcpgB,KAAO,MAIjC,QAAS8gB,KACPC,IAGF,QAASC,KAEFC,EAAoBzN,SAAS,yBAChChI,IACAyV,EACGtX,SAAS,uBACT4E,IAAI4R,KACPJ,EAAU,qBAENmB,KAAW,GAEb3C,EAAUlV,GAAG,YAAayX,GAGxBhC,EAAMqC,oBACRtC,EAAOC,EAAMqC,oBAAqB,EAC7BtC,EAAOuC,SAAYvC,EAAOwC,MAAMD,SACnCvC,EAAOyC,YAiBf,QAASvB,GAAUwB,GACbxC,GACFF,EAAO2C,MAAMD,GACXA,KAAMzC,EAAMC,QACZ7Q,MAAO6Q,EAAQ0C,cAKrB,QAASV,KACHE,EAAoBzN,SAAS,yBAC/ByN,EAAoBtP,YAAY,uBAChCoO,EAAU,sBAEVxB,EAAUnS,IAAI,YAAa0U,GAEvBhC,EAAMqC,oBACRtC,EAAOC,EAAMqC,oBAAqB,EAC7BtC,EAAOuC,SAAYvC,EAAOwC,MAAMD,SACnCvC,EAAOyC,YAzSf,GA8BI9B,GA7BAF,EAAaR,EAAM4C,YAAc5C,EAAM4C,YAAc,MACrDjB,EAAW7G,QAAQ2G,UAAUzB,EAAM6C,qBAAuB7C,EAAM6C,oBAAsB,SACtFT,IAAStH,QAAQ2G,UAAUzB,EAAM8C,oBAAqB9C,EAAM8C,kBAC5DrH,IAAgBX,QAAQ2G,UAAUzB,EAAM+C,2BAA4B/C,EAAM+C,yBAC1E7c,EAAS4U,QAAQ2G,UAAUzB,EAAM0B,mBAAqB1G,EAAK9S,SAAW4S,QAAQna,QAAQoK,SAAS8E,MAC/FkR,IAAYjG,QAAQ2G,UAAUzB,EAAMgD,uBAAwBhD,EAAMgD,qBAClE1D,EAAgBxE,QAAQ2G,UAAUzB,EAAMiD,iBAAmBjD,EAAMiD,gBAAkB,IACnFC,EAAkB5D,EAAgB,KAClC6D,EAAgBpC,EAAY,kEAAoE,GAChGqC,EAAehB,EAAoF,GAA3E,yEACxBhY,EACI,2PAMI+Y,EACAC,EACA,eAERjB,EAAsBrH,QAAQna,QAAQyJ,GACtCmW,EAAcZ,EACdwB,GACE9I,EAAG,EACH9V,EAAG,EACHma,EAAG,EACHtC,EAAG,GAGLiJ,EAAYlB,EAAoBrb,KAAK,mBACrC2Z,EAAmB0B,EAAoBrb,KAAK,0BAC5CwZ,EAAqB6B,EAAoBrb,KAAK,uBAC9Csa,EAAsBe,EAAoBrb,KAAK,KAC/Cib,EAA6B1S,SAASiQ,GAAiB,IAAqB,SAAfkB,EAAwB,GAAK,GAC1FoB,EAA8BvS,SAASiQ,GAAiB,EAU5D,IARAI,EAASyC,GAAqBpC,GAC9BoC,EAAoB1S,IAAI,YAAasS,EAA6B,MAClEtB,EAAiBhR,KACfnO,MAAU4hB,EACV9hB,OAAW8hB,IAEbG,EAAU5T,IAAI,SAAUyT,GAEpBnC,EAAW,CACb,GAAIC,GAAmBmB,EAAoBrb,KAAK,QAChDka,GAAiBvR,IAAI,QAASyT,GAC9BlC,EACKzW,GAAG,YAAa,SAASmU,GACxBA,EAAMjR,oBAETlD,GAAG,QAAS,WACX,GAAIqW,GAAWvhB,KAAK+P,KACpB4L,GAAKnN,IAAI+S,GACLX,GAAWA,EAAQ0C,cAAgB/B,IACrCb,EAAOc,OAAOZ,EAAQa,cAAcF,IACpClU,GAAO,MAUI,SAAf8T,IACF2B,EAAoBtX,SAAS,SAC7B6V,EAAcyB,EAAoBrb,KAAK,qBACvC4Z,EAAYjR,IAAI,SAAUyT,GAC1BxC,EACKnW,GAAG,QAAS,SAASmU,GACpBkB,EAAOhC,SAASc,EAAOjD,EAAe6D,GACtCa,EAAUzB,KAEXnU,GAAG,YAAa,SAASmU,GACxBkB,EAAOhC,SAASc,EAAOjD,EAAe6D,GACtCY,MAED3V,GAAG,UAAW,SAASmU,GACtBuC,EAAU,iCAIlBoC,EACK9Y,GAAG,QAAS,SAASmU,GACpBkB,EAAOnC,OAAOiB,EAAOjD,EAAe6D,GACpCa,EAAUzB,KAEXnU,GAAG,YAAa,SAASmU,GACxBkB,EAAOnC,OAAOiB,EAAOjD,EAAe6D,GACpCY,MAED3V,GAAG,UAAW,SAASmU,GACtBuC,EAAU,8BAGhBR,EACKlW,GAAG,QAAS,SAASmU,GACpBkB,EAAOlC,cAAcgB,EAAOjD,EAAe6D,GAC3Ca,EAAUzB,GACN5D,QAAQ2G,UAAUzB,EAAMsD,2BAC1BrB,MAGH1X,GAAG,YAAa,SAASmU,GACxBkB,EAAOlC,cAAcgB,EAAOjD,EAAe6D,GAC3CY,MAED3V,GAAG,UAAW,SAASmU,GACtBuC,EAAU,qCAGZxF,GACF0G,EAAoBtX,SAAS,8BAG/BsX,EAAoBtX,SAAS,wBAA0B8W,GACxC,SAAXS,GACFD,EAAoBtX,SAAS,sBAG/B3E,EAAOiK,OAAOgS,GAEVlC,IACFA,EAAQsD,QAAU,WAChBvI,EAAKnN,IAAIoS,EAAQuD,YAEjB9W,MAIJsO,EAAKzQ,GAAG,oBAAqB,WAC3BmC,MAGFsO,EAAKzQ,GAAG,WAAY,WAClB4X,EAAoBzc,WAgIlB0c,KAAW,EACbpH,EAAKzQ,GAAG,QAAS2X,GAEjBA,IAGFC,EAAoB5X,GAAG,YAAa,SAAUmU,GAC5CA,EAAMjR,kBACNiR,EAAMhR,mBA4BRyU,EAAoBrb,KAAK,UAAUyD,GAAG,QAAS,WAC7C0X,MAGEjC,EAAMqC,mBACRtC,EAAO0D,OAAOzD,EAAMqC,kBAAmB,SAASqB,GAE1CA,KAAiB,EACnBxB,IACSwB,KAAiB,GAC1BzB;AC/jBhB,GAAI0B,cAAe7I,QAAQ7Y,OAAO,kBAElC0hB,cAAaC,QAAU,QACvBD,aAAaE,QAAQ,UAAW,QAAS,KAAM,WAAY,SAAUC,EAAOC,EAAIC,GAC9E,QAASC,GAASC,EAAQC,GACxB1jB,OAAO2jB,eAAe/hB,UAAU6hB,GAAUC,EAAM1jB,OAAO2jB,eAAe/hB,UAAU6hB,IAmBlF,QAASG,GAASC,GAChBA,EAAOC,OAASD,EAAOC,QAAU,OACjCD,EAAOE,QAAUF,EAAOE,WAExB,IAAIC,GAAWV,EAAGW,QACdC,EAAUF,EAASE,OAgFvB,OA9EAL,GAAOE,QAAQI,UAAY,WACzB,MAAO,UAAUC,GACVA,IACLP,EAAOQ,MAAQD,EACXP,EAAOS,OAAOT,EAAOS,MAAMF,GAC/BA,EAAIG,OAAOC,iBAAiB,WAAY,SAAU7b,GAChDA,EAAEkb,OAASA,EACPG,EAASS,OACXT,EAASS,OAAO9b,GACPub,EAAQQ,cACjBnB,EAAS,WACPW,EAAQQ,aAAa/b,OAGxB,GAEHyb,EAAIG,OAAOC,iBAAiB,OAAQ,SAAU7b,GACxCA,EAAEgc,mBACJhc,EAAEkb,OAASA,EACPG,EAASS,OACXT,EAASS,OAAO9b,GACPub,EAAQQ,cACjBnB,EAAS,WACPW,EAAQQ,aAAa/b,QAI1B,MAIP0a,EAAMQ,GAAQe,KAAK,SAAUxI,GAC3B4H,EAASa,QAAQzI,IAChB,SAAUzT,GACXqb,EAASc,OAAOnc,IACf,SAAUrC,GACX0d,EAASS,OAAOne,KAGlB4d,EAAQa,QAAU,SAAUjkB,GAI1B,MAHAojB,GAAQU,KAAK,SAAUI,GACrBlkB,EAAGkkB,EAASpkB,KAAMokB,EAASC,OAAQD,EAASjB,QAASF,KAEhDK,GAGTA,EAAQgB,MAAQ,SAAUpkB,GAIxB,MAHAojB,GAAQU,KAAK,KAAM,SAAUI,GAC3BlkB,EAAGkkB,EAASpkB,KAAMokB,EAASC,OAAQD,EAASjB,QAASF,KAEhDK,GAGTA,EAAQiB,SAAW,SAAUrkB,GAK3B,MAJAojB,GAAQQ,aAAe5jB,EACvBojB,EAAQU,KAAK,KAAM,KAAM,SAAU3Y,GACjCnL,EAAGmL,KAEEiY,GAETA,EAAQkB,MAAQ,WAMd,MALIvB,GAAOQ,OACTd,EAAS,WACPM,EAAOQ,MAAMe,UAGVlB,GAETA,EAAQE,IAAM,SAAUtjB,GAOtB,MANA+iB,GAAOS,MAAQ,SAAWe,GACxB,MAAO,YACDA,GAAWA,EAAUnf,MAAMge,EAASliB,WACxClB,EAAGoF,MAAMge,EAASliB,aAEnB6hB,EAAOS,OACHJ,GAGFA,EArGLlkB,OAAO2jB,iBAAmB3jB,OAAO2jB,eAAe2B,iBAClD9B,EAAS,mBAAoB,SAAU+B,GACrC,MAAO,UAAUC,EAAQ7W,GACvB,GAAe,cAAX6W,EAAwB,CAC1B,GAAIpY,GAAMuB,EAAM/P,KAEZwO,aAAeqY,WACjBrY,EAAIxO,UAGN2mB,GAAKrf,MAAMtH,KAAMoD,cA8FzBpD,KAAK2lB,OAAS,SAAUV,GACtB,QAAS6B,GAAmBC,EAAUvY,EAAKwP,GACzC,GAAY7W,SAARqH,EAIF,GAHIiN,QAAQuL,OAAOxY,KACjBA,EAAMA,EAAIyY,eAERxL,QAAQyL,SAAS1Y,GACnBuY,EAASjW,OAAOkN,EAAKxP,OAChB,IAA4B,SAAxByW,EAAOkC,aAChB,GAAI1L,QAAQ2L,SAAS5Y,GACnB,IAAK,GAAI6Y,KAAK7Y,GACRA,EAAIyP,eAAeoJ,IACrBP,EAAmBC,EAAUvY,EAAI6Y,GAAIrJ,EAAM,IAAMqJ,EAAI,SAIzDN,GAASjW,OAAOkN,EAAKxP,OAGvBA,GAAMiN,QAAQyL,SAAS1Y,GAAOA,EAAM8Y,KAAKC,UAAU/Y,GACvB,cAAxByW,EAAOkC,aACTJ,EAASjW,OAAOkN,EAAK,GAAIwJ,OAAMhZ,IAAOF,KAAM,sBAE5CyY,EAASjW,OAAOkN,EAAKxP,GAgD7B,MA1CAyW,GAAOE,QAAUF,EAAOE,YACxBF,EAAOE,QAAQ,gBAAkBhe,OACjC8d,EAAOwC,iBAAmBxC,EAAOwC,iBAC9BhM,QAAQ9L,QAAQsV,EAAOwC,kBACtBxC,EAAOwC,kBAAoBxC,EAAOwC,qBACtCxC,EAAOwC,iBAAiB3mB,KAAK,SAAUkB,GACrC,GAEIgc,GAFA+I,EAAW,GAAIW,UACfC,IAEJ,KAAK3J,IAAOiH,GAAO2C,OACb3C,EAAO2C,OAAO3J,eAAeD,KAC/B2J,EAAU3J,GAAOiH,EAAO2C,OAAO5J,GAG/Bhc,KAAM2lB,EAAU3lB,KAAOA,EAC3B,KAAKgc,IAAO2J,GACV,GAAIA,EAAU1J,eAAeD,GAAM,CACjC,GAAIxP,GAAMmZ,EAAU3J,EAChBiH,GAAO4C,iBACT5C,EAAO4C,iBAAiBd,EAAU/I,EAAKxP,GAEvCsY,EAAmBC,EAAUvY,EAAKwP,GAKxC,GAAmB,MAAfiH,EAAO6C,KAAc,CACvB,GAAIC,GAAe9C,EAAO+C,kBAAoB,MAE9C,IAAIvM,QAAQ9L,QAAQsV,EAAO6C,MAEzB,IAAK,GADDG,GAAuBxM,QAAQyL,SAASa,GACnC5kB,EAAI,EAAGA,EAAI8hB,EAAO6C,KAAKvnB,OAAQ4C,IACtC4jB,EAASjW,OAAOmX,EAAuBF,EAAeA,EAAa5kB,GAAI8hB,EAAO6C,KAAK3kB,GAChF8hB,EAAOiD,UAAYjD,EAAOiD,SAAS/kB,IAAO8hB,EAAO6C,KAAK3kB,GAAGigB,UAG9D2D,GAASjW,OAAOiX,EAAc9C,EAAO6C,KAAM7C,EAAOiD,UAAYjD,EAAO6C,KAAK1E,MAG9E,MAAO2D,KAGF/B,EAASC,IAGlBjlB,KAAKmoB,KAAO,SAAUlD,GAOpB,MANAA,GAAOwC,iBAAmBxC,EAAOwC,kBAAoB,SAAUzlB,GAC3D,MAAKZ,QAAOgnB,aAAepmB,YAAgBZ,QAAOgnB,aAAgBpmB,YAAgBwlB,MACzExlB,EAEFyiB,EAAMzjB,SAASymB,iBAAiB,GAAGrkB,YAEvC4hB,EAASC,OAMpB,WAYI,QAASoD,GAAeC,EAAO3M,EAAM4M,EAAM3H,EAAS4H,EAAQ7D,EAAUtE,GA6BlE,QAASoI,KACL,MAAyC,UAAlC9M,EAAK,GAAGgB,QAAQvI,eAA6BmU,EAAKja,MAAoC,SAA5Bia,EAAKja,KAAK8F,cAK/E,QAASsU,GAASC,GACd,IAAKC,EAAY,CACbA,GAAa,CACb,KAII,IAAK,GAHDC,GAAWF,EAAIG,UAAaH,EAAI9hB,QAAU8hB,EAAI9hB,OAAOkiB,MACrDA,KAAYC,KAEP7lB,EAAI,EAAGA,EAAI0lB,EAAStoB,OAAQ4C,IAAK,CACtC,GAAI2kB,GAAOe,EAASI,KAAK9lB,EACrB+lB,GAASZ,EAAOE,EAAQD,EAAMT,EAAMa,GACpCI,EAAMjoB,KAAKgnB,GAEXkB,EAASloB,KAAKgnB,GAGtBqB,EAAYX,EAAQ7D,EAAU2D,EAAO1H,EAAS2H,EAAMA,EAAKa,WAAab,EAAKc,UAAWN,EAAOC,EAAUL,GAClF,IAAjBI,EAAMxoB,SAAcooB,EAAI9hB,OAAOkJ,MAAQgZ,GAI7C,QACEH,GAAa,IAKzB,QAASU,GAAoBC,GACrBhB,EAAKiB,aAAaD,EAAShB,KAAK,WAAYC,EAAOD,EAAKiB,aAAalB,IACrEC,EAAKkB,YAAYF,EAAShB,KAAK,UAAWC,EAAOD,EAAKkB,YAAYnB,IAClEC,EAAKmB,QAAQH,EAAShB,KAAK,SAAUA,EAAKmB,OAC9C,KAAK,GAAIvmB,GAAI,EAAGA,EAAIwY,EAAK,GAAGgO,WAAWppB,OAAQ4C,IAAK,CAChD,GAAIymB,GAAYjO,EAAK,GAAGgO,WAAWxmB,IAC9BslB,KAAwC,SAAnBmB,EAAUxG,MACZ,SAAnBwG,EAAUxG,MAAsC,UAAnBwG,EAAUxG,MACrB,OAAnBwG,EAAUxG,MAAoC,UAAnBwG,EAAUxG,OACrCmG,EAAShB,KAAKqB,EAAUxG,KAAMwG,EAAU7Z,QAKpD,QAAS8Z,GAAgBlB,EAAKmB,GAC1B,IAAInO,EAAK4M,KAAK,cAAewB,EAA7B,CAEA,IAAKD,IAAiBnB,GAAOF,KAAoB,MAAO9M,GAAKqO,cAAgBrO,CAE7E,IAAI4N,GAAW9N,QAAQna,QAAQ,sBAmB/B,OAlBAgoB,GAAoBC,GAEhBd,KACA9M,EAAKsO,YAAYV,GACjB5N,EAAO4N,EACPA,EAAShB,KAAK,eAAe,GAC7BlI,EAAS1E,GAAM2M,KAEfiB,EAASnZ,IAAI,aAAc,UAAUA,IAAI,WAAY,YAAYA,IAAI,WAAY,UAC5EA,IAAI,QAAS,OAAOA,IAAI,SAAU,OAAOA,IAAI,UAAW,WAAWA,IAAI,SAAU,QACjFA,IAAI,SAAU,OAAOA,IAAI,UAAW,OAAOmY,KAAK,WAAY,MAC7D5M,EAAKqO,cACLrO,EAAKqO,aAAa3jB,SAEtBsV,EAAKqO,aAAeT,EACpB7d,SAAS8E,KAAK0Z,YAAYX,EAAS,KAGhCA,GAGX,QAASY,GAAWxB,GAChBQ,EAAYX,EAAQ7D,EAAU2D,EAAO1H,EAAS2H,EAAMA,EAAKa,WAAab,EAAKc,gBAAmBV,GAAK,GAGvG,QAASyB,GAAazB,GAQlB,QAAS0B,GAAe1B,GAChBA,GACAY,EAAS,GAAGtjB,SAEZwiB,KAAsBE,GACtBhN,EAAKM,KAAK,iBAAkBmO,GAZzB,MAAPzB,IACAA,EAAIta,iBACJsa,EAAIva,kBAER,IAAI0b,GAAetB,EAAOD,EAAK+B,iBAAiBhC,MAAW,EACvDiB,EAAWM,EAAgBlB,EAAKmB,EAwBpC,OAbIP,KACKZ,IAAOmB,GAAcP,EAAStN,KAAK,SAAUyM,GAC9CC,GAAOmB,GAAgBtB,EAAOD,EAAKgC,sBAAsBjC,MAAW,GAAO6B,EAAWxB,GAGtF6B,EAAiBC,UAAUC,WAC3BloB,WAAW,WACP6nB,EAAe1B,IAChB,GAEH0B,EAAe1B,KAGhB,EAzHX,IAAIhN,EAAK4M,KAAK,eAAd,CAIAD,EAAMqC,IAAI,WAAY,WACdhP,EAAKqO,cAAcrO,EAAKqO,aAAa3jB,UAG7C,IAAI0jB,IAAW,CACXxB,GAAKc,UAAUuB,OAAO,sBACtBtC,EAAMlE,OAAOmE,EAAKc,UAAW,SAAU7a,GACnCub,EAAWvb,KAAQ,GAO3B,IAAIoa,IAAa,CA0GbxnB,QAAOypB,SAAWzpB,OAAOypB,QAAQC,SACjC1pB,OAAOypB,QAAQC,SAASnP,EAAMkO,EAAiBP,EAAqBZ,GAEpE0B,KAOR,QAASI,GAAiBO,GAEtB,GAAIvR,GAAIuR,EAAG7S,MAAM,4BACjB,OAAIsB,IAAKA,EAAEjZ,OAAS,EACTyP,SAASwJ,EAAE,IAAM,GAAyB,IAAnBxJ,SAASwJ,EAAE,KAAaxJ,SAASwJ,EAAE,IAAM,EAIpE,sBAAsBzD,KAAKgV,GAxKtCzG,aAAanE,UAAU,aAAc,SAAU,WAAY,WACvD,SAAUqI,EAAQ7D,EAAUtE,GACxB,OACIG,SAAU,MACV3d,QAAS,WACT4d,KAAM,SAAU6H,EAAO3M,EAAM4M,EAAM3H,GAC/ByH,EAAeC,EAAO3M,EAAM4M,EAAM3H,EAAS4H,EAAQ7D,EAAUtE,QAqK7EiE,aAAa4E,SAAW,SAAUZ,EAAOE,EAAQD,EAAMT,EAAMa,GACzD,QAASqC,GAAkBC,GACvB,GAAIA,EAAI1qB,OAAS,GAAgB,MAAX0qB,EAAI,IAAsC,MAAxBA,EAAIA,EAAI1qB,OAAS,GACrD,MAAO0qB,GAAInR,UAAU,EAAGmR,EAAI1qB,OAAS,EAEzC,IAAIyH,GAAQijB,EAAIjjB,MAAM,KAAMkjB,EAAS,EACrC,IAAIljB,EAAMzH,OAAS,EACf,IAAK,GAAI4C,GAAI,EAAGA,EAAI6E,EAAMzH,OAAQ4C,IAC9B+nB,GAAU,IAAMF,EAAkBhjB,EAAM7E,IAAM,IAC1CA,EAAI6E,EAAMzH,OAAS,IACnB2qB,GAAU,SAIO,KAArBD,EAAIzjB,QAAQ,OACZyjB,EAAM,IAAMA,GAEhBC,EAAS,IAAMD,EAAI5nB,QAAQ,GAAIC,QAAO,oCAA0C,KAAM,QAAU,IAChG4nB,EAASA,EAAO7nB,QAAQ,QAAS,MAAMA,QAAQ,QAAS,IAE5D,OAAO6nB,GAGX,GAAIxB,GAASlB,EAAOD,EAAK4C,WAAW7C,GAAQ8C,MAAOtD,EAAMuD,OAAQ1C,IAC7D2C,EAAc9C,EAAOD,EAAKgD,YAAYjD,GAAQ8C,MAAOtD,EAAMuD,OAAQ1C,KAAS,iBAC5E6C,EAAchD,EAAOD,EAAKkD,YAAYnD,GAAQ8C,MAAOtD,EAAMuD,OAAQ1C,OACvE,IAAc,MAAVe,GAAkBjO,QAAQyL,SAASwC,GAAS,CAC5C,GAAIgC,GAAS,GAAIpoB,QAAO0nB,EAAkBtB,GAAS,KACnDA,GAAuB,MAAb5B,EAAKxZ,MAAgBod,EAAO3V,KAAK+R,EAAKxZ,KAAK8F,gBACnC,MAAb0T,EAAK1E,MAAgBsI,EAAO3V,KAAK+R,EAAK1E,KAAKhP,eAEpD,OAAkB,MAAVsV,GAAkBA,KAAyB,MAAb5B,EAAK6D,MAAiB7D,EAAK6D,KAAOL,GAAexD,EAAK6D,KAAOH,IAGvGlH,aAAa6E,YAAc,SAAUX,EAAQ7D,EAAU2D,EAAO1H,EAAS2H,EAAMqD,EACxC7C,EAAOC,EAAUL,EAAKkD,GACvD,QAASxe,KACL,GAAImb,EAAOD,EAAKuD,SAASxD,MAAW,EAAM,CACtC,IAAKS,IAAUA,EAAMxoB,OACjB,MAEJ,IAAIioB,EAAOD,EAAKwD,iBAAiBzD,MAAW,EAAM,CAE9C,IAAK,GADD0D,IAAapL,EAAQ0C,iBAAmB5P,MAAM,GAAIuY,EAAMD,EAAUzrB,OAC7D4C,EAAI,EAAGA,EAAI4lB,EAAMxoB,OAAQ4C,IAAK,CACnC,IAAK,GAAIuX,GAAI,EAAGA,EAAIuR,GACZlD,EAAM5lB,GAAGigB,OAAS4I,EAAUtR,GAAG0I,KADd1I,KAGrBA,IAAMuR,GACND,EAAUlrB,KAAKioB,EAAM5lB,IAG7B,GAAI8oB,IAAQD,EAAUzrB,OAClB,MAEJwoB,MAAWmD,OAAOF,OAElBjD,IAASnI,EAAQ0C,iBAAmB4I,OAAOnD,GAG/CnI,IACA4H,EAAOD,EAAK3H,SAASuL,OAAO7D,EAAOS,GACnCpE,EAAS,WACD/D,GACAA,EAAQa,cAAuB,MAATsH,GAAkC,IAAjBA,EAAMxoB,OAAe,KAAOwoB,MAI3ER,EAAK6D,iBACL5D,EAAOD,EAAK6D,iBAAiBD,OAAO7D,EAAOU,GAE3C4C,GACApD,EAAOoD,GAAYtD,GACf+D,OAAQtD,EACRuD,eAAgBtD,EAChBqC,OAAQ1C,IAKhBkD,EACAxe,IAEAsX,EAAS,WACLtX,MAKZ,IAAI6b,GAAW5E,aAAa4E,SACxBC,EAAc7E,aAAa6E,eAInC,WAkCE,QAASoD,GAASjE,EAAO3M,EAAM4M,EAAM3H,EAAS4H,EAAQ7D,EAAU6H,GAqE9D,QAASC,GAAuBnE,EAAOC,EAAMI,GAC3C,GAAI+D,IAAW,EACXC,EAAQhE,EAAIiE,aAAaD,KAC7B,IAAa,MAATA,EACF,IAAK,GAAIxpB,GAAI,EAAGA,EAAIwpB,EAAMpsB,QAAUmsB,EAAUvpB,IAC5CupB,EAAWA,IACU,SAAlBC,EAAMxpB,GAAG0pB,MAAqC,KAAlBF,EAAMxpB,GAAG0pB,OACtC3D,EAASZ,EAAOE,EAAQD,EAAMoE,EAAMxpB,GAAIwlB,EAG9C,IAAImE,GAAQtE,EAAOD,EAAKwE,kBAAkBzE,GAAQ+C,OAAQ1C,GAK1D,OAJImE,KACEA,EAAME,QAAOC,EAAgBH,EAAME,OACnCF,EAAMpD,SAAQoD,EAAQJ,EAAWI,EAAMpD,OAASoD,EAAM5G,SAErD4G,GAASvE,EAAKwE,kBAAoB,WAG3C,QAASG,GAAavE,EAAKwE,EAAUC,EAAUC,GAG7C,QAASC,GAAQxF,GACXoB,EAASZ,EAAOE,EAAQD,EAAMT,EAAMa,GACtCI,EAAMjoB,KAAKgnB,GAEXkB,EAASloB,KAAKgnB,GAIlB,QAASyF,GAAiBxE,EAAOyE,EAAOC,GACtC,GAAa,MAATD,EACF,GAAIA,EAAME,YAAa,CACrB,GAAIC,IAAYF,GAAQ,IAAMD,EAAMpK,IACpCkK,IAASlK,KAAMoK,EAAMpK,KAAM9U,KAAM,YAAamf,KAAME,GACpD,IAAIC,GAAYJ,EAAMK,eAClBC,IACJC,IACA,IAAIC,GAAc,WAChBJ,EAAUI,YAAY,SAAUC,GAC9B,IACE,GAAKA,EAAQ1tB,OAMXutB,EAAUA,EAAQ5B,OAAO3kB,MAAMvE,UAAU0Q,MAAM8E,KAAKyV,MAAe,IACnED,QAPmB,CACnB,IAAK,GAAI7qB,GAAI,EAAGA,EAAI2qB,EAAQvtB,OAAQ4C,IAClCoqB,EAAiBxE,EAAO+E,EAAQ3qB,IAAKsqB,EAAOA,EAAO,IAAMD,EAAMpK,KAAO,IAExE2K,MAKF,MAAOhkB,GACPgkB,IACAziB,QAAQgb,MAAMvc,KAEf,WACDgkB,MAGJC,SAEAD,KACAP,EAAM1F,KAAK,SAAUA,GACnB,IACEiG,IACAjG,EAAK2F,MAAQA,EAAOA,EAAO,IAAM3F,EAAK1E,KACtCkK,EAAQxF,GACR,MAAO/d,GACPgkB,IACAziB,QAAQgb,MAAMvc,KAEf,WACDgkB,MAnDR,GAAIhF,MAAYC,KAAe2D,EAAQhE,EAAIiE,aAAaD,MAAOoB,EAAa,CAyD5E,IAAIpB,GAASA,EAAMpsB,OAAS,GAA8B,SAAzBisB,EAAU0B,WACzC,IAAK,GAAI/qB,GAAI,EAAGA,EAAIwpB,EAAMpsB,OAAQ4C,IAAK,CACrC,GAAIwpB,EAAMxpB,GAAGgrB,kBAAoBxB,EAAMxpB,GAAGgrB,oBAAsBxB,EAAMxpB,GAAGgrB,mBAAmBT,YAAa,CACvG,GAAIF,GAAQb,EAAMxpB,GAAGgrB,kBACrB,IAAIX,EAAME,cAAgBN,EACxB,QAEW,OAATI,GACFD,EAAiBxE,EAAOyE,OAErB,CACL,GAAIY,GAAIzB,EAAMxpB,GAAGkrB,WACR,OAALD,GAAWd,EAAQc,GAEzB,IAAKf,GAAYtE,EAAMxoB,OAAS,EAAG,UAEhC,CACL,GAAIsoB,GAAWF,EAAIiE,aAAa7D,KAChC,IAAgB,MAAZF,EACF,IAAK,GAAInO,GAAI,EAAGA,EAAImO,EAAStoB,SAC3B+sB,EAAQzE,EAASI,KAAKvO,IACjB2S,KAAYtE,EAAMxoB,OAAS,IAFGma,MAQzC,GAAI4T,GAAS,GACb,QAAUC,GAAevB,GACvBrI,EAAS,WACP,GAAKoJ,EAQY,GAAXO,IAAgB,KAClBC,EAAe,QATF,CACf,IAAKlB,GAAYtE,EAAMxoB,OAAS,EAAG,CAEjC,IADA4C,EAAI,EACqB,cAAlB4lB,EAAM5lB,GAAGmL,MAAsBnL,GACtC4lB,IAASA,EAAM5lB,IAEjBgqB,EAASpE,EAAOC,KAMjBgE,GAAS,MA1LhB,GAAIwB,GAAYC,GAUhB,IATIlG,EAAKkG,eACP9J,EAAS,WACH2D,EAAMC,EAAKkG,eACbnG,EAAMC,EAAKkG,eAAe1e,MAAQye,EAElClG,EAAMC,EAAKkG,eAAiBD,KAI7BA,EAIH,YAHIhG,EAAOD,EAAKmG,2BAA2BpG,MAAW,GACpD3M,EAAKvL,IAAI,UAAW,QAKxB,IAAI2Z,IAAW,CACXxB,GAAKoG,QAAQ/D,OAAO,sBACtBtC,EAAMlE,OAAOmE,EAAKoG,QAAS,SAASngB,GAClCub,EAAWvb,KAAQ,GAIvB,IAGIogB,GAHAC,EAAe,KACfzgB,EAAkBoa,EAAOD,EAAKuG,oBAC9B7B,EAAgB,CAGpBtR,GAAK,GAAGiK,iBAAiB,WAAY,SAAU+C,GAC7C,IAAIhN,EAAK4M,KAAK,cAAewB,EAA7B,CAIA,GAHApB,EAAIta,iBACAD,EAAgBka,IAAQK,EAAIva,kBAE5Bqc,UAAUC,UAAUljB,QAAQ,aAAgB,CAC9C,GAAI6V,GAAIsL,EAAIiE,aAAamC,aACzBpG,GAAIiE,aAAaoC,WAAc,SAAW3R,GAAK,aAAeA,EAAK,OAAS,OAE9EsH,EAASsK,OAAOJ,GACXvG,EAAMsG,sBACTA,EAAsBnC,EAAuBnE,EAAOC,EAAMI,IAE5DhN,EAAKnQ,SAASojB,MACb,GACHjT,EAAK,GAAGiK,iBAAiB,YAAa,SAAU+C,GAC1ChN,EAAK4M,KAAK,aAAewB,IAC7BpB,EAAIta,iBACAD,EAAgBka,IAAQK,EAAIva,qBAC/B,GACHuN,EAAK,GAAGiK,iBAAiB,YAAa,WAChCjK,EAAK4M,KAAK,aAAewB,IAC7B8E,EAAelK,EAAS,WACtBhJ,EAAKnI,YAAYob,GACjBA,EAAsB,MACrB3B,GAAiB,MACnB,GACHtR,EAAK,GAAGiK,iBAAiB,OAAQ,SAAU+C,GACrChN,EAAK4M,KAAK,aAAewB,IAC7BpB,EAAIta,iBACAD,EAAgBka,IAAQK,EAAIva,kBAChCuN,EAAKnI,YAAYob,GACjBA,EAAsB,KACtB1B,EAAavE,EAAK,SAAUI,EAAOC,GACjCG,EAAYX,EAAQ7D,EAAU2D,EAAO1H,EAAS2H,EAC5CA,EAAKa,WAAab,EAAKoG,QAAS5F,EAAOC,EAAUL,IAClDH,EAAOD,EAAK2G,aAAa5G,MAAW,EAAOC,EAAK8E,UAAY7E,EAAOD,EAAKiB,aAAalB,OACvF,GAgKL,QAASmG,KACP,GAAIU,GAAMzjB,SAAS0jB,cAAc,MACjC,OAAQ,aAAeD,IAAS,UAAYA,GAtQ9C,GAAIjG,GAAW5E,aAAa4E,SACxBC,EAAc7E,aAAa6E,WAE/B7E,cAAanE,UAAU,WAAY,SAAU,WAAY,YAAa,SAAUqI,EAAQ7D,EAAU6H,GAChG,OACEhM,SAAU,MACV3d,QAAS,WACT4d,KAAM,SAAU6H,EAAO3M,EAAM4M,EAAM3H,GACjC2L,EAASjE,EAAO3M,EAAM4M,EAAM3H,EAAS4H,EAAQ7D,EAAU6H,QAK7DlI,aAAanE,UAAU,gBAAiB,WACtC,MAAO,UAAUmI,EAAO3M,GAClB8S,KAAiB9S,EAAKvL,IAAI,UAAW,WAI7CkU,aAAanE,UAAU,oBAAqB,SAAU,WAAY,SAAUqI,EAAQ7D,GAClF,MAAO,UAAU2D,EAAO3M,EAAM4M,GAC5B,GAAIkG,IAAiB,CACnB,GAAIvsB,GAAKsmB,EAAOD,EAAK8G,iBACrB1K,GAAS,WACPziB,EAAGomB,GACCpmB,EAAGiqB,QACLjqB,EAAGiqB,OAAO7D,GAAO,UAuM3BhE,aAAanE,UAAU,UAAW,SAAU,WAAY,SAAUqI,EAAQ7D,GACxE,OACEnE,SAAU,KACVC,KAAM,SAAU6H,EAAO3M,EAAM4M,GACvBnnB,OAAOkuB,YACThH,EAAMlE,OAAOmE,EAAKgH,OAAQ,SAAUzH,GAC9BA,GACFoB,EAASZ,EAAOE,EAAQD,EAAMT,EAAM,SAClC1mB,OAAOypB,SAAWJ,UAAUC,UAAUljB,QAAQ,gBAAoBsgB,EAAK6D,KAAO,QAC9EvqB,OAAOypB,SAAWJ,UAAUC,UAAUljB,QAAQ,gBAAoBsgB,EAAK6D,KAAO,KAChFhH,EAAS,WAGP,GAAI6K,GAAMpuB,OAAOouB,KAAOpuB,OAAOquB,SAC/B,IAAID,GAAOA,EAAIE,gBACb/T,EAAK4M,KAAK,MAAOiH,EAAIE,gBAAgB5H,QAChC,CACL,GAAI6H,GAAa,GAAIL,WACrBK,GAAWC,cAAc9H,GACzB6H,EAAWE,OAAS,SAAU9lB,GAC5B4a,EAAS,WACPhJ,EAAK4M,KAAK,MAAOxe,EAAElD,OAAOqkB,cAMlCvP,EAAK4M,KAAK,MAAOA,EAAKuH,eAAiB;AC3qBrD,QAASC,6BAA4B7E,GACjC,GAAIA,EAAO3qB,QAAU,EAAG,CACpBX,EAAE,IAAMowB,QAAQC,sBAAsBrd,OAEtC,IAAIrM,GAAO2pB,cAActwB,EAAE,IAAMowB,QAAQG,wBAAwB5pB,QAAUomB,MAAOzB,GAClFtrB,GAAE2G,GAAMnB,SAAS,IAAM4qB,QAAQC,sBAG/BrwB,EAAE,IAAMowB,QAAQC,sBAAsBG,OAAO,SAIrD,QAASC,iBAAgBC,EAAKC,EAAMC,EAAcC,GAC9CC,eAAeC,eAAeC,UAAUN,EAAKC,EAAMC,EAAcC,GAGrE,QAASI,gBACLjxB,EAAE,eAAekxB,QAAQ,QACzBlxB,EAAE,eAAegT,QAIrB,QAASme,gBAAeT,EAAKniB,EAAO6iB,EAAeC,GACX,IAAhCA,EAAOC,uBACPtxB,EAAE,IAAMqxB,EAAOC,uBAAuB1iB,IAAIwiB,GAGd,IAA5BC,EAAOE,mBACPvxB,EAAE,IAAMqxB,EAAOE,mBAAmB3iB,IAAI8hB,EAAM,IAAMniB,GAElDvO,EAAE,IAAMqxB,EAAOE,mBAAmBC,SAEvB,IAAPd,IACA1wB,EAAE,IAAMqxB,EAAOI,cAAc7iB,IAAI8hB,GACjC1wB,EAAE,IAAMqxB,EAAOI,cAAcD,QAEjCxxB,EAAE,IAAMqxB,EAAOK,gBAAgB9iB,IAAIL,GACnCvO,EAAE,IAAMqxB,EAAOK,gBAAgBF,QAGnCP,eAEiC,MAA7BI,EAAOM,oBACPN,EAAOM,qBAvEf,GAAIvB,UACAqB,aAAc,GAAIC,eAAgB,GAAIH,kBAAmB,GAAIX,aAAc,GAC3EP,qBAAsB,wBAAyBE,uBAAwB,uBACvEe,sBAAuB,GAAIM,SAAW,GAAID,mBAAoB,KAOlEE,kBAAmBC,SAAS,SAAUT,GAClCjB,QAAUiB,EACVU,YAAc,GACmB,IAA7B3B,QAAQmB,mBAA2BvxB,EAAE,IAAMowB,QAAQmB,mBAAmB3iB,MAAMjO,OAAS,EACrFoxB,YAAc/xB,EAAE,IAAMowB,QAAQmB,mBAAmB3iB,MACpB,IAAxBwhB,QAAQqB,cAAsBzxB,EAAE,IAAMowB,QAAQqB,cAAc7iB,MAAMjO,OAAS,GAAKyvB,QAAQqB,cAAgBrB,QAAQwB,SACrHG,YAAc/xB,EAAE,IAAMowB,QAAQqB,cAAc7iB,MACb,IAA1BwhB,QAAQsB,gBAAwB1xB,EAAE,IAAMowB,QAAQsB,gBAAgB9iB,MAAMjO,OAAS,GAAKyvB,QAAQsB,gBAAkBtB,QAAQwB,WAC3HG,YAAc/xB,EAAE,IAAMowB,QAAQsB,gBAAgB9iB,OAE9CmjB,YAAYpxB,OAAS,EACrBmwB,eAAeC,eAAeiB,eAAeD,YAAa3B,QAAQQ,aAAcT,6BAGhFc,gBAEL;ACpCH,mBAAoB/tB,QAAO+uB,cAAc/uB,OAAO+uB,aAAY,GAAI,SAAShY,GAAG,YAAa,mBAAmB7S,SAAQA,OAAOC,IAAID,QAAQ,UAAU,SAAS+C,GAAG,MAAO8P,GAAE9P,EAAE3I,UAAU,gBAAiBwB,SAAQA,OAAOsE,QAAQtE,OAAOsE,QAAQ2S,EAAEhX,QAAQ,UAAUzB,QAAQyY,EAAE/W,OAAO1B,SAAS,SAAS8B,EAAEwE,GAAG,YAAa,SAASqC,GAAEA,GAAG,MAAO,IAAG,SAASA,EAAE8P,GAAG,IAAI,GAAI2D,GAAE,uBAAuB9V,EAAE8V,EAAEjF,KAAKxO,OAAO+nB,EAAEtU,EAAEjF,KAAKsB,OAAOkB,EAAE,EAAEA,GAAG,EAAEA,IAAI,CAAC,IAAI+W,EAAE/W,IAAIrT,EAAEqT,GAAG,MAAO,EAAE,KAAIrT,EAAEqT,IAAI+W,EAAE/W,GAAG,SAAS,MAAO,IAAG7X,EAAEhB,GAAG6vB,OAAOhoB,GAAgmB,QAASioB,GAAEjoB,EAAE8P,GAAG,GAAI2D,GAAE9V,EAAE4D,SAASpI,EAAE+uB,sBAAsBloB,IAAI7G,EAAEgvB,4BAA4BJ,EAAEjY,KAAKiY,EAAEjY,IAAG,EAAG3W,EAAEivB,gBAAgBrxB,KAAK+Y,EAAE,KAAK9P,EAAE,KAAKyT,GAAGA,EAAE4U,OAAOlvB,EAAE2uB,cAAcrU,EAAE4U,KAAK,cAAcvY,GAAG3W,EAAEmvB,cAAc7U,EAAE8U,OAAO9U,EAAE8U,UAAU,QAAS9U,GAAEzT,EAAE8P,EAAE2D,EAAE9V,EAAEoqB,GAAGS,OAAOC,eAAezoB,EAAE8P,GAAG4Y,cAAa,EAAGC,YAAW,EAAGjsB,IAAI,WAAW,MAAOurB,GAAEtqB,EAAEoqB,GAAGtU,GAAGmV,IAAI,SAAS5oB,GAAGioB,EAAEtqB,EAAEoqB,GAAGtU,EAAEzT,KAAK,QAASgR,GAAEhR,EAAE8P,EAAE2D,EAAE9V,EAAEoqB,GAAG,GAAI/W,GAAEhR,EAAE8P,EAAG9P,GAAE8P,GAAG,WAAW,MAAOiY,IAAGE,EAAEtqB,EAAEoqB,IAAI5uB,EAAE+uB,sBAAsBvqB,GAAG8V,EAAEzC,GAAG7X,EAAE0vB,MAAMtrB,MAAMtH,KAAKoD,YAAY,QAASyvB,GAAE9oB,EAAE8P,EAAE2D,EAAE9V,EAAEoqB,GAAG,IAAIA,EAAE,KAAM,IAAIja,OAAM,8BAA+B,OAAOkD,GAAEhR,EAAE8P,EAAE2D,EAAE9V,EAAEoqB,GAAG,EAAE,QAAS3uB,GAAE4G,EAAE8P,EAAE2D,EAAE9V,GAAG,MAAOqT,GAAEhR,EAAE8P,EAAE2D,EAAE9V,GAAG,EAA0jH,QAASorB,GAAE/oB,GAAG,MAAOA,GAAE1G,QAAQ,YAAY,SAAS0G,EAAE8P,GAAG,MAAOA,GAAE1G,gBAA6zL,QAAS4f,GAAEhpB,GAAG,GAAI8P,GAAEnS,EAAEgE,SAASsnB,eAAeC,mBAAmB,GAAI,OAAOpZ,GAAErJ,KAAK0iB,UAAUnpB,EAAE8P,EAAErJ,MAAMqJ,EAAErJ,KAAK0iB,UAAlwVhwB,EAAEiwB,eAAe,OAAQ,IAAItZ,GAAE0Y,OAAOa,OAAO,KAAMlwB,GAAEmwB,sBAAsB,WAAW,IAAI,GAAItpB,GAAE,EAAEA,EAAE3G,UAAU7C,OAAOwJ,IAAI8P,EAAEzW,UAAU2G,KAAI,GAAI7G,EAAEowB,qBAAqB,WAAW,IAAI,GAAIvpB,GAAE,EAAEA,EAAE3G,UAAU7C,OAAOwJ,UAAW8P,GAAEzW,UAAU2G,KAAK7G,EAAE+uB,sBAAsB,SAASloB,GAAG,OAAO8P,EAAE9P,IAAIrC,EAAE4D,SAAS5D,EAAE4D,QAAQC,MAAMrI,GAAG6G,EAAE,WAAWA,EAAE,UAAUrC,EAAE4D,QAAQC,IAAI,sCAAsCrI,EAAEivB,iBAAiBzqB,EAAE4D,QAAQC,IAAI,mDAAmD7D,EAAE4D,QAAQC,IAAI,mCAAmCrI,EAAE2uB,YAAY,GAAG,wBAAwB,aAAa3uB,EAAEiwB,gBAAiB,IAAIrB,KAAqoB5uB,GAAEgvB,4BAA2B,EAAGhvB,EAAEivB,mBAAmB,SAASjvB,EAAEmvB,eAAenvB,EAAEmvB,cAAa,GAAInvB,EAAEqwB,aAAa,WAAWzB,KAAK5uB,EAAEivB,gBAAgB5xB,OAAO,GAAG,eAAemH,EAAEgE,SAAS8nB,YAAYxB,EAAE,SAAS,4CAA6C,IAAIpjB,GAAE+L,EAAEjB,EAAE0U,KAAK5U,EAAEtW,EAAEhB,GAAGqC,KAAKgW,EAAErX,EAAEuE,KAAKuR,EAAE,wDAAwDgC,EAAE,yDAAyDjC,EAAE,qDAAsD,KAAInK,IAAKzL,GAAED,EAAEhB,GAAG,OAAO,SAAS6H,GAAG,GAAI8P,GAAEtS,MAAMvE,UAAU0Q,MAAM8E,KAAKpV,UAAW,OAAOF,GAAE+uB,sBAAsB,sBAAsB,gBAAiBloB,IAAG,MAAMA,IAAIioB,EAAE,oBAAoB,yCAAyCnY,EAAE,OAAOL,EAAElS,MAAMtH,KAAK6Z,IAAI,qBAAqB3W,EAAEhB,GAAGqC,KAAKvB,UAAUE,EAAEhB,GAAGiB,EAAED,EAAE,OAAO,SAAS2W,GAAG,GAAI2D,GAAEjW,MAAMvE,UAAU0Q,MAAM8E,KAAKpV,UAAW,IAAG,gBAAiByW,IAAGb,EAAEjD,KAAK8D,GAAG,IAAInS,EAAEgE,SAAS+nB,cAAc5Z,GAAG,MAAM9P,GAAG8P,EAAEA,EAAExW,QAAQ2X,EAAE,SAASjR,EAAE8P,EAAE2D,EAAE9V,GAAG,MAAM,IAAImS,EAAE2D,EAAE,IAAI9V,EAAE,MAAO,KAAIA,EAAEgE,SAAS+nB,cAAc5Z,GAAGmY,EAAE,gBAAgB,+CAA+CxU,EAAE,IAAIA,EAAE,GAAG3D,EAAE,MAAM9P,GAAGioB,EAAE,gBAAgB,8CAA8CxU,EAAE,KAAK,MAAOjD,GAAEjT,MAAMtH,KAAKwd,IAAI,iBAAiBjD,EAAEgY,OAAOvvB,UAAUib,eAAezF,KAAK+B,EAAE3L,KAAK1L,EAAEuE,KAAKmH,GAAG2L,EAAE3L,GAAIikB,GAAE3vB,EAAEhB,GAAG,OAAO,WAAW,MAAOlC,MAAKO,QAAQ,OAAO,wEAAwEsyB,EAAE3vB,EAAE,YAAY,WAAW,MAAOokB,MAAKpK,MAAM5V,MAAM,KAAKlE,YAAY,YAAY,kDAAkDyvB,EAAE3vB,EAAE,YAAYA,EAAEwwB,UAAU,YAAY,kCAAkCb,EAAE3vB,EAAE,SAASA,EAAEywB,WAAW,SAAS,sDAAsDnW,EAAEta,EAAE7B,KAAK,UAAU6B,EAAE7B,KAAKuyB,QAAQ,mBAAmB,8DAA8DpW,EAAEta,EAAE7B,KAAK,IAAI6B,EAAE7B,KAAKuyB,QAAQ,mBAAmB,2DAA2D7pB,EAAE,UAAU8oB,EAAE3vB,EAAE,OAAO,SAAS6G,GAAG,MAAO,OAAMA,EAAE,IAAIA,EAAE,IAAI1G,QAAQ0V,EAAE,OAAO,OAAO,wDAAwDhP,EAAE,WAAW8oB,EAAE3vB,EAAE,WAAW,SAAS6G,EAAE8P,GAAG,MAAO9P,GAAEoK,UAAUpK,EAAEoK,SAASC,gBAAgByF,EAAEzF,eAAe,WAAW,iCAAiCye,EAAE3vB,EAAE,UAAUqE,MAAMoI,QAAQ,UAAU,oDAAoD5F,EAAE,WAAW8oB,EAAE3vB,EAAE,YAAY,SAAS6G,GAAG,GAAI8P,SAAS9P,EAAE,QAAO,UAAU8P,GAAG,UAAUA,KAAKJ,MAAM1P,EAAE8pB,WAAW9pB,KAAK,YAAY,oCAAoC7G,EAAEgN,KAAK,uEAAuElI,MAAM,KAAK,SAAS+B,EAAE8P,GAAGuU,EAAE,WAAWvU,EAAE,KAAKA,EAAEzF,gBAAgBye,EAAE3vB,EAAE,OAAO,SAAS6G,GAAG,MAAO,OAAMA,EAAEA,EAAE,GAAG,gBAAiBA,IAAG,kBAAmBA,GAAEqkB,EAAEmE,OAAOvvB,UAAU0V,SAASF,KAAKzO,KAAK,eAAgBA,IAAG,OAAO,6BAA6B8oB,EAAE3vB,EAAE,aAAa,SAAS6G,GAAG,MAAM,kBAAmBA,IAAG,aAAa,qCAAqC8oB,EAAE3vB,EAAE,WAAW,SAAS6G,GAAG,MAAO,OAAMA,GAAGA,IAAIA,EAAE3I,QAAQ,WAAW,oCAAoC8B,EAAE4wB,OAAOnZ,EAAEzX,EAAE4wB,KAAKpa,EAAE,oBAAoBvW,EAAED,EAAE,OAAO,WAAW,GAAI6G,GAAE4Q,EAAErT,MAAMtH,KAAKoD,UAAW,OAAO2G,GAAEub,UAAUuN,EAAE9oB,EAAE,UAAUA,EAAEgqB,KAAK,gBAAgB,2CAA2ClB,EAAE9oB,EAAE,QAAQA,EAAEiqB,KAAK,gBAAgB,yCAAyCnB,EAAE9oB,EAAE,WAAWA,EAAEkqB,OAAO,gBAAgB,6CAA6ClqB,GAAG,iBAAiBA,EAAE,UAAU7G,EAAEgxB,cAAc,QAAQ,SAASnqB,IAAG,IAAKA,EAAEoqB,QAAQza,EAAE3D,KAAKhM,EAAEqqB,MAAM,gBAAiBrqB,GAAE/H,MAAM,KAAK+H,EAAEsqB,aAAa,IAAI7sB,QAAQ,sCAAsCkS,EAAE3D,KAAKhM,EAAE/H,QAAQgwB,EAAE,kBAAkB,gDAAiD,IAAItX,GAAExX,EAAEhB,GAAGoyB,WAAWjX,EAAEna,EAAEhB,GAAGuJ,YAAYmP,EAAE,MAAyFzX,GAAED,EAAEhB,GAAG,aAAa,SAAS6H,GAAG,GAAIyT,GAAExd,KAAK0H,GAAE,CAAG,OAAOxE,GAAEgN,KAAKnG,EAAEmO,MAAM0C,GAAG,SAAS7Q,EAAE8P,GAAG3W,EAAE7B,KAAK6W,MAAMqc,KAAKxe,KAAK8D,IAAI2D,EAAEtN,KAAK,WAAW,IAAG,IAAKhN,EAAElD,MAAMw0B,KAAK3a,GAAG,QAAQnS,GAAE,KAAMA,IAAIsqB,EAAE,kBAAkB,2DAA2DnY,GAAG2D,EAAEgX,KAAK3a,GAAE,MAAOa,EAAEpT,MAAMtH,KAAKoD,YAAY,mBAAmBD,EAAED,EAAEhB,GAAG,cAAc,SAAS2X,GAAG,MAAO,UAASA,GAAG,iBAAkBA,GAAEwD,EAAE/V,MAAMtH,KAAKoD,YAAY4uB,EAAE,mBAAmB,kDAAkDhyB,KAAKkQ,KAAK,WAAW,GAAInG,GAAE/J,KAAKy0B,cAAcz0B,KAAKy0B,aAAa,UAAU,EAAG1qB,IAAG7G,EAAElB,KAAKhC,KAAK,gBAAgB+J,GAAG/J,KAAK00B,cAAc10B,KAAK00B,aAAa,SAAS3qB,IAAG,IAAK8P,GAAG3W,EAAElB,KAAKhC,KAAK,kBAAkB,QAAQ,mBAAoB,IAAI20B,GAAEzZ,EAAEsD,GAAE,EAAGV,EAAE,SAASjD,EAAE,6HAA8H3X,GAAE0xB,MAAM1xB,EAAEgN,MAAM,SAAS,QAAQ,uBAAuB,SAASnG,EAAE8P,GAAG,GAAI2D,GAAEta,EAAE2xB,SAAShb,IAAI3W,EAAE2xB,SAAShb,GAAGpT,GAAI+W,KAAIta,EAAE2xB,SAAShb,GAAGpT,IAAI,WAAW,GAAIsD,EAAE,OAAOyU,IAAE,EAAGzU,EAAEyT,EAAElW,MAAMtH,KAAKoD,WAAWob,GAAE,EAAGzU,MAAM5G,EAAED,EAAE,OAAO,SAAS6G,EAAE8P,EAAE2D,EAAE9V,GAAG,GAAIoqB,GAAE/W,EAAE5X,IAAK,KAAI4X,IAAKyD,IAAGwT,EAAE,OAAO,gDAAgDnY,EAAE1W,EAAE4X,GAAGhR,EAAEiW,MAAMjF,GAAGhR,EAAEiW,MAAMjF,GAAGlB,EAAEkB,EAAG,KAAIA,IAAK+W,GAAEtU,EAAElW,MAAMyC,EAAErC,OAAOmS,EAAE9P,EAAEiW,MAAMjF,GAAG5X,EAAE4X,EAAG,OAAO+W,IAAG,QAAQ/nB,EAAE,UAAU,mBAAoB+qB,SAAQ5xB,EAAE6xB,SAAS,GAAID,OAAM5xB,EAAE6xB,cAAcpC,IAAI,WAAW,MAAOX,GAAE,WAAW,iCAAiCgD,QAAQrC,IAAIrrB,MAAMtH,KAAKoD,eAAe2G,EAAE,UAAUmR,GAAG+Z,yBAAwB,EAAGC,aAAY,EAAGC,aAAY,EAAGC,UAAS,EAAGC,YAAW,EAAGC,YAAW,EAAGC,UAAS,EAAGC,YAAW,EAAGC,eAAc,EAAGC,iBAAgB,EAAGC,SAAQ,EAAGC,YAAW,EAAGC,cAAa,EAAGC,YAAW,EAAGC,SAAQ,EAAGC,OAAM,EAAGC,SAAQ,EAAGC,QAAO,EAAG5sB,QAAO,EAAG6sB,MAAK,GAAI,mBAAoBrB,OAAM5xB,EAAEkzB,UAAU,GAAItB,OAAM5Z,GAAGzU,IAAI,WAAW,MAAOurB,GAAE,aAAa,kCAAkCgD,QAAQvuB,IAAIa,MAAMtH,KAAKoD,YAAYuvB,IAAI,WAAW,MAAOX,GAAE,aAAa,kCAAkCgD,QAAQrC,IAAIrrB,MAAMtH,KAAKoD,cAAcF,EAAEkzB,UAAUlb,GAAGA,EAAEhY,EAAEkzB,UAAUzB,EAAEzxB,EAAEhB,GAAGkO,IAAIjN,EAAED,EAAEhB,GAAG,MAAM,SAAS6H,EAAE8P,GAAG,GAAI2D,GAAE9V,EAAEoqB,EAAE9xB,IAAK,OAAO+J,IAAG,gBAAiBA,KAAIxC,MAAMoI,QAAQ5F,IAAI7G,EAAEgN,KAAKnG,EAAE,SAASA,EAAE8P,GAAG3W,EAAEhB,GAAGkO,IAAIoI,KAAKsZ,EAAE/nB,EAAE8P,KAAK7Z,OAAO,gBAAiB6Z,KAAI2D,EAAEsV,EAAE/oB,GAAGrC,EAAE8V,EAAEM,EAAE/H,KAAKrO,IAAImT,EAAE9E,KAAKrO,EAAE,GAAGyL,cAAczL,EAAEgM,MAAM,KAAKwH,EAAEsC,IAAIwU,EAAE,aAAa,0DAA0DjoB,EAAE,eAAe4qB,EAAErtB,MAAMtH,KAAKoD,aAAa,aAAc,IAAI0X,GAAEX,EAAEkN,EAAEnO,EAAEmd,EAAEnzB,EAAElB,IAAKmB,GAAED,EAAE,OAAO,SAAS6G,EAAE8P,EAAE2D,GAAG,GAAI9V,GAAEoqB,EAAE/W,CAAE,IAAGlB,GAAG,gBAAiBA,IAAG,IAAIzW,UAAU7C,OAAO,CAAC,IAAIwa,IAAKrT,GAAExE,EAAEozB,QAAQvsB,IAAIssB,EAAE7d,KAAKxY,KAAK+J,GAAG+nB,KAAKjY,EAAEkB,IAAI+X,EAAE/X,IAAIiX,EAAE,iBAAiB,oDAAoDjX,GAAGrT,EAAEqT,GAAGlB,EAAEkB,IAAI+W,EAAE/W,GAAGlB,EAAEkB,EAAG,OAAOsb,GAAE7d,KAAKxY,KAAK+J,EAAE+nB,GAAGjY,EAAE,MAAOA,IAAG,gBAAiBA,IAAGA,IAAIiZ,EAAEjZ,KAAKnS,EAAExE,EAAEozB,QAAQvsB,IAAIssB,EAAE7d,KAAKxY,KAAK+J,KAAK8P,IAAKnS,IAAGsqB,EAAE,iBAAiB,oDAAoDnY,GAAG,EAAEzW,UAAU7C,SAASmH,EAAEmS,GAAG2D,GAAG9V,EAAEmS,IAAIwc,EAAE/uB,MAAMtH,KAAKoD,YAAY,kBAAkBF,EAAEqzB,KAAKlP,EAAEnkB,EAAEszB,MAAMxzB,UAAUyzB,IAAIvd,EAAE,SAASnP,GAAG,MAAOA,IAAG5G,EAAED,EAAEszB,MAAMxzB,UAAU,MAAM,WAAW,EAAEE,EAAEwzB,OAAO12B,KAAK02B,QAAQn2B,SAASyxB,EAAE,iBAAiB,kBAAkBhyB,KAAK02B,OAAOhe,WAAW,kCAAkCxV,EAAEwzB,OAAO12B,KAAK02B,QAAQxd,GAAGmO,EAAE/f,MAAMtH,KAAKoD,YAAY,kBAAkB0X,EAAE5X,EAAEqzB,GAAGt1B,SAASkZ,EAAE,mCAAmCzS,EAAEivB,uBAAuBpE,OAAOC,eAAetvB,EAAEqzB,GAAG,YAAY9D,cAAa,EAAGC,YAAW,EAAGjsB,IAAI,WAAW,MAAOiB,GAAEgE,SAASkrB,QAAQ5E,EAAE,cAAc7X,GAAGjX,EAAE+uB,sBAAsB,gBAAgB,SAASnX,EAAE,GAAGA,GAAG6X,IAAI,SAAS5oB,GAAGioB,EAAE,cAAc7X,GAAGW,EAAE/Q,KAAM,IAAIgQ,GAAE7W,EAAEhB,GAAG20B,KAAKC,EAAE5zB,EAAEmc,MAAM0X,IAAIC,EAAE9zB,EAAEmc,MAAM4X,GAAI/zB,GAAEmc,MAAM6X,SAASh0B,EAAEmc,MAAM8X,YAAY3Z,EAAEta,EAAEmc,MAAM6X,MAAM,SAASh0B,EAAEmc,MAAM6X,MAAMhL,OAAO,kBAAkB,yDAAyD/oB,EAAED,EAAEmc,MAAM,MAAM,SAAStV,GAAG,GAAI8P,GAAE2D,EAAEzT,EAAEuE,KAAK5G,EAAE1H,KAAKm3B,SAAS3Z,GAAGsU,EAAE5uB,EAAEmc,MAAM6X,KAAM,IAAGpF,EAAEvxB,OAAwF,IAAhFyxB,EAAE,kBAAkB,kDAAkDF,EAAEjf,QAAcif,EAAEvxB,QAAO2C,EAAEmc,MAAM+X,QAAQtF,EAAEuF,MAAO,IAAG3vB,IAAIA,EAAE4vB,aAAa5vB,EAAE4vB,YAAW,EAAGtF,EAAE,kBAAkB,qDAAqDxU,IAAIsU,EAAEpqB,EAAEwvB,QAAQpF,EAAEvxB,QAAQ,KAAMuxB,EAAEvxB,QAAO2C,EAAEmc,MAAM+X,QAAQtF,EAAEuF,MAAO,OAAOxd,GAAEmd,EAAExe,KAAKxY,KAAK+J,GAAGrC,GAAGA,EAAE3H,OAAO2H,EAAE3H,OAAO8Z,EAAE9P,GAAG8P,GAAG,mBAAmB1W,EAAED,EAAEmc,MAAM,MAAM,SAAStV,EAAE8P,GAAG,MAAO9P,KAAIrC,GAAG,SAASmS,GAAG,aAAanS,EAAEgE,SAAS6rB,YAAYvF,EAAE,mBAAmB,iEAAiE8E,EAAExvB,MAAMtH,KAAKoD,YAAY,oBAAoBF,EAAEgN,MAAM,OAAO,SAAS,SAAS,SAASnG,EAAE8P,GAAG1W,EAAED,EAAEhB,GAAG2X,EAAE,WAAW,GAAI9P,GAAExC,MAAMvE,UAAU0Q,MAAM8E,KAAKpV,UAAU,EAAG,OAAM,SAASyW,GAAG,gBAAiB9P,GAAE,GAAGgQ,EAAEzS,MAAMtH,KAAK+J,IAAIioB,EAAE,uBAAuB,aAAanY,EAAE,oBAAoB9P,EAAEytB,OAAO,EAAE,EAAE3d,GAAGzW,UAAU7C,OAAOP,KAAKkL,GAAG5D,MAAMtH,KAAK+J,IAAI/J,KAAKy3B,eAAenwB,MAAMtH,KAAK+J,GAAG/J,QAAQ,0BAA0BkD,EAAEgN,KAAK,wLAAwLlI,MAAM,KAAK,SAAS+B,EAAEyT,GAAGqV,EAAE3vB,EAAEhB,GAAGsb,EAAE,SAASzT,EAAE8P,GAAG,MAAO,GAAEzW,UAAU7C,OAAOP,KAAKkL,GAAGsS,EAAE,KAAKzT,EAAE8P,GAAG7Z,KAAKS,QAAQ+c,IAAI,0BAA0B,aAAaA,EAAE,sCAAsCta,EAAE,WAAWA,EAAEwE,EAAEgE,UAAU+rB,eAAe,WAAWv0B,EAAEmc,MAAMqY,QAAQC,OAAOC,MAAM,WAAW53B,OAAO0H,EAAEgE,UAAUsmB,EAAE,cAAc,iCAAiCa,EAAE3vB,EAAEhB,GAAG,OAAO,SAAS6H,EAAE8P,EAAE2D,GAAG,MAAOxd,MAAKkL,GAAGnB,EAAE,KAAK8P,EAAE2D,IAAI,iBAAiB,kCAAkCqV,EAAE3vB,EAAEhB,GAAG,SAAS,SAAS6H,EAAE8P,GAAG,MAAO7Z,MAAKiO,IAAIlE,EAAE,KAAK8P,IAAI,iBAAiB,oCAAoCgZ,EAAE3vB,EAAEhB,GAAG,WAAW,SAAS6H,EAAE8P,EAAE2D,EAAE9V,GAAG,MAAO1H,MAAKkL,GAAG2O,EAAE9P,EAAEyT,EAAE9V,IAAI,iBAAiB,sCAAsCmrB,EAAE3vB,EAAEhB,GAAG,aAAa,SAAS6H,EAAE8P,EAAE2D,GAAG,MAAO,KAAIpa,UAAU7C,OAAOP,KAAKiO,IAAIlE,EAAE,MAAM/J,KAAKiO,IAAI4L,EAAE9P,GAAG,KAAKyT,IAAI,iBAAiB,wCAAwCqV,EAAE3vB,EAAEhB,GAAG,QAAQ,SAAS6H,EAAE8P,GAAG,MAAO7Z,MAAKkL,GAAG,aAAanB,GAAGmB,GAAG,aAAa2O,GAAG9P,IAAI,iBAAiB,kCAA2J,IAAI0Q,GAAE,6FAA8FvX,GAAE20B,kCAAkC,WAAW30B,EAAEowB,qBAAqB,qBAAqBnwB,EAAED,EAAE,gBAAgB,SAAS6G,GAAG,GAAI8P,GAAE2D,CAAE,QAAOA,GAAG3D,EAAE9P,GAAG1G,QAAQoX,EAAE,gBAAgBZ,GAAGkZ,EAAElZ,KAAKkZ,EAAEvV,IAAIwU,EAAE,mBAAmB,iDAAiDnY,GAAG9P,EAAE1G,QAAQoX,EAAE,cAAc,oBAAoBvX,EAAEmwB,sBAAsB,mBAAoB,IAAIpZ,GAAE6d,EAAEC,EAAEC,EAAE90B,EAAEhB,GAAGN,MAAO,OAAOuB,GAAED,EAAEhB,GAAG,SAAS,WAAW,GAAI6H,GAAE/J,KAAK,EAAG,QAAO+J,GAAGA,EAAEkuB,UAAUluB,EAAEyS,sBAAsBwb,EAAE1wB,MAAMtH,KAAKoD,YAAY4uB,EAAE,oBAAoB,mDAAmD5uB,UAAU7C,OAAOP,KAAK,SAAS,qBAAqBkD,EAAE4wB,OAAO7Z,EAAE/W,EAAEg1B,MAAM/0B,EAAED,EAAE,QAAQ,SAAS6G,EAAE8P,GAAG,GAAI2D,GAAEta,EAAEi1B,cAAcj1B,EAAEi1B,aAAaC,WAAY,OAAO,UAASve,GAAG2D,IAAIwU,EAAE,yBAAyB,iEAAiEnY,EAAE2D,GAAGvD,EAAEzB,KAAKxY,KAAK+J,EAAE8P,IAAI,2BAA2BgZ,EAAE3vB,EAAEhB,GAAG,UAAUgB,EAAEhB,GAAGm2B,QAAQ,UAAU,0EAA0En1B,EAAEo1B,WAAWR,EAAE50B,EAAEo1B,SAASP,IAAI,UAAU,OAAO70B,EAAEq1B,UAAU,eAAer1B,EAAEq1B,UAAU,eAAe,aAAa,SAAS,OAAOr1B,EAAEq1B,UAAU,eAAer1B,EAAEq1B,UAAU,eAAe,aAAa,SAAS,WAAWr1B,EAAEq1B,UAAU,UAAUr1B,EAAEq1B,UAAU,YAAYp1B,EAAED,EAAE,WAAW,SAAS6G,GAA2B,QAAS8P,KAAI,GAAIiY,GAAE1uB,SAAU,OAAOF,GAAEo1B,SAAS,SAAS5wB,GAAGxE,EAAEgN,KAAK6nB,EAAE,SAAShuB,EAAE8P,GAAG,GAAI2D,GAAE,kBAAmBsU,GAAE/nB,IAAI+nB,EAAE/nB,EAAGgR,GAAElB,EAAE,IAAI,WAAW,GAAI9P,GAAEyT,GAAGA,EAAElW,MAAMtH,KAAKoD,UAAW2G,IAAG,kBAAmBA,GAAEub,QAAQvb,EAAEub,UAAUyO,KAAKrsB,EAAEue,SAAS+N,KAAKtsB,EAAEwe,QAAQK,SAAS7e,EAAEme,QAAQne,EAAEmS,EAAE,GAAG,QAAQ7Z,OAAOmD,EAAEuE,EAAE4d,UAAUtlB,KAAKwd,GAAGzT,GAAG3G,eAAe0uB,EAAE,OAAOxM,UAAvW,GAAIvK,GAAE+c,IAAI30B,EAAE4X,EAAEuK,SAAmW,OAAOuN,GAAE9X,EAAE,OAAOlB,EAAE,gBAAgB,iCAAiCgZ,EAAE1vB,EAAE,OAAO0W,EAAE,gBAAgB,iCAAiC9P,GAAGA,EAAEyO,KAAKuC,EAAEA,GAAGA,GAAG,iBAAiB7X,EAAEo1B,SAASE,cAAcV,EAAEU,eAAet1B;CCKjqa,SAAUtD,GACR,YA6PA,SAAS64B,GAAYn3B,EAAS6rB,GAC1B7rB,EAAQskB,iBAAiB,UAAW,SAAU7b,GAC1CojB,EAASpjB,KAEbzI,EAAQskB,iBAAiB,WAAY,SAAU7b,GAC3CojB,EAASpjB,KAEbzI,EAAQskB,iBAAiB,QAAS,SAAU7b,GACtB,KAAdA,EAAEoM,UACFuiB,GAAe,EACfvL,EAASpjB,MAKrB,QAAS4uB,GAAcr3B,EAAS6rB,GAC5B7rB,EAAQskB,iBAAiB,YAAa,SAAU7b,GAC5CA,EAAEsE,iBACF8e,EAASpjB,KAEbzI,EAAQskB,iBAAiB,aAAc,SAAU7b,GACzCA,EAAE6uB,YACF7uB,EAAEsE,iBAEN8e,EAASpjB,KAEbzI,EAAQskB,iBAAiB,UAAW,SAAU7b,GACxB,KAAdA,EAAEoM,SAAmBuiB,IACrBA,GAAe,EACfvL,EAASpjB,MAxRrB,GAAI2uB,IAAe,EACfG,EAAcj5B,EAAEsC,GAAGsM,GACvB5O,GAAEsC,GAAGsM,IAAM,SAAUuB,GACjB,GAAI3M,UAAU7C,QAAU,GAChBP,KAAK,IAAMA,KAAK,GAAG,4BAA8BA,KAAK,GAAGyO,SAAU,CACnE,GAAInN,GAAUtB,KAAK,EACnBwC,YAAW,WACPlB,EAAQmN,SAASsB,KAI7B,MAAO8oB,GAAYvxB,MAAMtH,KAAMoD,YAGnCxD,EAAEsC,GAAG42B,aAAel5B,EAAEsC,GAAG62B,aAAe,SAAU12B,GAE9C,GAAI4iB,IACA+T,gBAAiB,qBACjBC,gBAAiB,qBACjBC,WAAY,GACZC,aAAc,wBACdC,aAAc,SACdC,UAAW,SACXC,UAAW,IACXC,aAAc,IACdC,eAAgB,GAChBC,gBAAiB,OACjBC,OAAQ,KAEZ,KAAK,GAAI7iB,KAAUxU,GACf4iB,EAAOpO,GAAUxU,EAAQwU,EAG7B,IAAItQ,GAAO,2BAA6B0e,EAAOiU,WAAa,gEAEzBjU,EAAOmU,aAAe,8BAAgCnU,EAAOkU,aAAe,mBAAqBlU,EAAO+T,gBAAkB,wDAE9G/T,EAAOoU,UAAY,qFAE/BpU,EAAOmU,aAAe,8BAAgCnU,EAAOkU,aAAe,mBAAqBlU,EAAOgU,gBAAkB,wBAIzJS,EAASzU,EAAOyU,QAAUjP,UAAU3iB,UAAY,OAEpD9H,MAAKkQ,KAAK,WA2EN,QAASzB,GAASkrB,EAAUC,GACJzyB,SAAhByyB,IACAA,GAAc,GAEdngB,MAAMkgB,IAA0B,KAAbA,GACnBE,EAAU,GAAG9pB,MAAQ,GACjB6pB,IACAE,EAAO,GAAG/pB,MAAQ,IAEtBA,EAAQ,IAER4pB,EAAW9F,WAAW8F,GACtBA,EAAWvmB,KAAKuD,IAAIvD,KAAKsD,IAAIijB,EAAUhjB,GAAMD,GAC7CijB,EAAWvmB,KAAKuL,MAAMgb,EAAWvmB,KAAK2mB,IAAI,GAAIC,IAAa5mB,KAAK2mB,IAAI,GAAIC,GACxEH,EAAU,GAAG9pB,MAAQ4pB,EACjBC,IACAE,EAAO,GAAG/pB,MAAQkqB,EAAah3B,OAAO02B,IAE1C5pB,EAAQ4pB,GAIhB,QAASO,GAAc34B,EAAU+M,GACzBA,GACA9L,WAAW,WACP,GAAI6c,EACmB,mBAAZ,OACPA,EAAQ,GAAI8a,OAAM7rB,GAAO8rB,SAAS,KAElC/a,EAAQ3T,SAAS2uB,YAAY,SAC7Bhb,EAAMib,UAAUhsB,GAAM,GAAM,IAEhC/M,EAAS,GAAG24B,cAAc7a,KAKtC,QAASkb,GAAaC,GACbV,EAAO,GAAG/P,WACX0Q,EAASD,GACTE,IACAC,EAAmBn4B,WAAW,WAC1Bo4B,EAAsB91B,YAAY,WAC1B+1B,EAAkB5V,EAAOuU,eACrBsB,GACAL,EAASD,EAAOxqB,SAASypB,EAAiB,KACtCA,EAAkB,MAClBA,EAAoC,IAAlBA,GAElBsB,IACAtB,EAAkBrmB,KAAKuD,IAAIokB,EAAStB,KAGxCgB,EAASD,EAAOf,GAGpBgB,EAASD,GAEbK,KACD5V,EAAOsU,eACXtU,EAAOqU,YAIlB,QAASmB,GAASD,GACV/gB,MAAM1J,KACNA,EAAQ,GAEZtB,EAAS2E,KAAKuL,MAAM5O,EAAQyqB,GAAQA,EAAOA,GAC3CN,EAAcL,EAAW,SACzBK,EAAcL,EAAW,UAG7B,QAASa,KACLG,EAAkB,EAClBpB,EAAkBA,EAAkBqB,EAAiB,EAAI7V,EAAOwU,gBAChEuB,aAAaL,GACbK,aAAaJ,GAGjB,QAASK,KAELnB,EAAOtF,KAAK,WAAYqF,EAAUrF,KAAK,aACvCsF,EAAOtF,KAAK,cAAeqF,EAAUrF,KAAK,eAC1C,IAAIzK,GAAW8P,EAAUrF,KAAK,WAC9BsF,GAAOtF,KAAK,WAAYzK,GACxBmR,EAAiB1G,KAAK,WAAYzK,GAClCoR,EAAiB3G,KAAK,WAAYzK,GAC9BA,GACA2Q,GAEJ,IAAIU,GAAgBvB,EAAUrF,KAAK,SAC/B0E,EAAa,EAEb,oBAAmBnjB,KAAKqlB,GACxBlC,EAAa,iBACN,mBAAmBnjB,KAAKqlB,KAC/BlC,EAAa,iBAEjB,IAAImC,GAAaD,EAAc/3B,QAAQ,2BAA4B,GACnEi4B,GAAY9G,KAAK,QAAS,eAAiB0E,EAAa,IAAMjU,EAAOiU,YACrEY,EAAOtF,KAAK,QAAS,gBAAkB6G,GAGvC1kB,EAAMkd,WAAWgG,EAAUrF,KAAK,SAAW,EAC3C9d,EAAM+C,MAAMogB,EAAUrF,KAAK,SAAqC,KAA1BqF,EAAUrF,KAAK,OAAgBroB,EAAAA,EAAW0nB,WAAWgG,EAAUrF,KAAK,QAC1GgG,EAAO3G,WAAWgG,EAAUrF,KAAK,UAAY,EAC7CuG,EAAU/qB,SAAS6pB,EAAUtR,KAAK,mBAAqB,CACvD,IAAIgT,GAAcvrB,SAAS6pB,EAAUtR,KAAK,mBAAqB,CAC3DyR,KAAauB,IACbvB,EAAWuB,EACXtB,EAAe,GAAIuB,MAAKC,aAAa/B,GACjCgC,sBAAuB1B,EACvB2B,sBAAuB3B,KAKnC,QAAS4B,GAAkBC,GACvB,GAAI5B,GAAe,GAAIuB,MAAKC,aAAa/B,GACrCoC,EAAoB7B,EAAah3B,OAAO,MAAMI,QAAQ,KAAM,IAC5D04B,EAAmB9B,EAAah3B,OAAO,KAAKI,QAAQ,KAAM,GAC9D,OAAOwwB,YAAWgI,EACbx4B,QAAQ,GAAIC,QAAO,KAAOw4B,EAAmB,KAAM,IACnDz4B,QAAQ,GAAIC,QAAO,KAAOy4B,GAAmB,MArMtD,GAAIlC,GAAYj6B,EAAEI,KAClB65B,GAAU,GAAG,4BAA6B,EAC1CA,EAAU5vB,MAEV,IAAI0wB,GAAmB,KACnBC,EAAsB,KACtBE,EAA4C,SAA3B7V,EAAOwU,gBACxBA,EAAkBqB,EAAiB,EAAI7V,EAAOwU,gBAE9C6B,EAAc17B,EAAE2G,GAChB40B,EAAmBG,EAAY7zB,KAAK,kBACpCyzB,EAAmBI,EAAY7zB,KAAK,kBACpCqyB,EAASwB,EAAY7zB,KAAK,SAE1BkP,EAAM,KACND,EAAM,KACN8jB,EAAO,KACPO,EAAU,KACVf,EAAW,IAEfiB,IAEA,IAAIhB,GAAe,GAAIuB,MAAKC,aAAa/B,GACrCgC,sBAAuB1B,EACvB2B,sBAAuB3B,IAEvBjqB,EAAQ8jB,WAAWgG,EAAU,GAAG9pB,OAChC8qB,EAAkB,EAElBmB,EAASnC,EAAUtR,KAAK,gBAAkB,GAC1CjR,EAASuiB,EAAUtR,KAAK,gBAAkB,EAE9C,IAAIyT,EAAQ,CACR,GAAIC,GAAgBr8B,EAAE,kCAAoCo8B,EAAS,UACnEV,GAAY7zB,KAAK,wBAAwBqJ,OAAOmrB,GAEpD,GAAI3kB,EAAQ,CACR,GAAI4kB,GAAgBt8B,EAAE,kCAAoC0X,EAAS,UACnEgkB,GAAY7zB,KAAK,uBAAuB00B,QAAQD,GAGpDrC,EAAU,GAAGprB,SAAW,SAAUkrB,GAC9BlrB,EAASkrB,GAGb,IAAIyC,GAAW,GAAIC,kBAAiB,WAChCpB,IACAxsB,EAASsB,GAAO,IAEpBqsB,GAASE,QAAQzC,EAAU,IAAKlQ,YAAY,IAE5CkQ,EAAU0C,MAAMjB,GAEhB7sB,EAASsB,GAET+pB,EAAO5uB,GAAG,8BAA+B,SAAUmU,GAC/C,GAAIsa,GAAWG,EAAO,GAAG/pB,MACrBysB,EAA0B,aAAfnd,EAAM/Q,IACrBqrB,GAAWiC,EAAkBjC,GAC7BlrB,EAASkrB,EAAU6C,GACnBtC,EAAcL,EAAWxa,EAAM/Q,QAGnCqqB,EAAcwC,EAAiB,GAAI,WAC/BZ,GAAcC,KAElB7B,EAAcuC,EAAiB,GAAI,WAC/BX,EAAaC,KAEjB/B,EAAY/sB,SAAS8E,KAAM,WACvBkqB,UAwKd53B","file":"../timeout-dialog/vendor-script-orderform.js","sourcesContent":["/*\r\n * jQuery appear plugin\r\n *\r\n * Copyright (c) 2012 Andrey Sidorov\r\n * licensed under MIT license.\r\n *\r\n * https://github.com/morr/jquery.appear/\r\n *\r\n * Version: 0.3.6\r\n */\r\n(function($) {\r\n var selectors = [];\r\n\r\n var check_binded = false;\r\n var check_lock = false;\r\n var defaults = {\r\n interval: 250,\r\n force_process: false\r\n };\r\n var $window = $(window);\r\n\r\n var $prior_appeared = [];\r\n\r\n function appeared(selector) {\r\n return $(selector).filter(function() {\r\n return $(this).is(':appeared');\r\n });\r\n }\r\n\r\n function process() {\r\n check_lock = false;\r\n for (var index = 0, selectorsLength = selectors.length; index < selectorsLength; index++) {\r\n var $appeared = appeared(selectors[index]);\r\n\r\n $appeared.trigger('appear', [$appeared]);\r\n\r\n if ($prior_appeared[index]) {\r\n var $disappeared = $prior_appeared[index].not($appeared);\r\n $disappeared.trigger('disappear', [$disappeared]);\r\n }\r\n $prior_appeared[index] = $appeared;\r\n }\r\n }\r\n\r\n function add_selector(selector) {\r\n selectors.push(selector);\r\n $prior_appeared.push();\r\n }\r\n\r\n // \"appeared\" custom filter\r\n $.expr[':'].appeared = function(element) {\r\n var $element = $(element);\r\n if (!$element.is(':visible')) {\r\n return false;\r\n }\r\n\r\n var window_left = $window.scrollLeft();\r\n var window_top = $window.scrollTop();\r\n var offset = $element.offset();\r\n var left = offset.left;\r\n var top = offset.top;\r\n\r\n if (top + $element.height() >= window_top &&\r\n top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() &&\r\n left + $element.width() >= window_left &&\r\n left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n $.fn.extend({\r\n // watching for element's appearance in browser viewport\r\n appear: function(options) {\r\n var opts = $.extend({}, defaults, options || {});\r\n var selector = this.selector || this;\r\n if (!check_binded) {\r\n var on_check = function() {\r\n if (check_lock) {\r\n return;\r\n }\r\n check_lock = true;\r\n\r\n setTimeout(process, opts.interval);\r\n };\r\n\r\n $(window).scroll(on_check).resize(on_check);\r\n check_binded = true;\r\n }\r\n\r\n if (opts.force_process) {\r\n setTimeout(process, opts.interval);\r\n }\r\n add_selector(selector);\r\n return $(selector);\r\n }\r\n });\r\n\r\n $.extend({\r\n // force elements's appearance check\r\n force_appear: function() {\r\n if (check_binded) {\r\n process();\r\n return true;\r\n }\r\n return false;\r\n }\r\n });\r\n})(function() {\r\n if (typeof module !== 'undefined') {\r\n // Node\r\n return require('jquery');\r\n } else {\r\n return jQuery;\r\n }\r\n}());\r\n","/*\r\n * timeout-dialog.js v1.0.1, 01-03-2012\r\n * \r\n * @author: Rodrigo Neri (@rigoneri)\r\n * \r\n * (The MIT License)\r\n * \r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * \r\n * The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n * \r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE. \r\n */\r\n\r\n\r\n/* String formatting, you might want to remove this if you already use it.\r\n * Example:\r\n * \r\n * var location = 'World';\r\n * alert('Hello {0}'.format(location));\r\n */\r\n\r\n/* Adaptions by Fleurop\r\n * Check and catch with shorter timer if the timeout has already passed.\r\n * This can happen if user's device is hibernating or saving energy on mobile.\r\n */\r\n\r\nString.prototype.format = function () {\r\n var s = this,\r\n i = arguments.length;\r\n\r\n while (i--) {\r\n s = s.replace(new RegExp('\\\\{' + i + '\\\\}', 'gm'), arguments[i]);\r\n }\r\n return s;\r\n};\r\n\r\n!function ($) {\r\n $.timeoutDialog = function (options) {\r\n timestampLastKeepalive = 0;\r\n\r\n var settings = {\r\n timeout: 1200,\r\n countdown: 60,\r\n title: 'Your session is about to expire!',\r\n message: 'You will be logged out in {0} seconds.',\r\n question: 'Do you want to stay signed in?',\r\n keep_alive_button_text: 'Yes, Keep me signed in',\r\n sign_out_button_text: 'No, Sign me out',\r\n keep_alive_url: '/keep-alive',\r\n logout_url: null,\r\n logout_redirect_url: '/',\r\n restart_on_yes: true,\r\n dialog_width: 450\r\n }\r\n\r\n $.extend(settings, options);\r\n\r\n var TimeoutDialog = {\r\n init: function () {\r\n this.setupDialogTimer();\r\n this.setupBackupTimer();\r\n },\r\n\r\n setupDialogTimer: function () {\r\n var self = this; \r\n\r\n window.setTimeout(function () { \r\n self.setupDialog();\r\n }, (settings.timeout - settings.countdown) * 1000);\r\n },\r\n\r\n setupBackupTimer: function () { \r\n var self = this;\r\n self.timestampLastKeepalive = new Date().getTime();\r\n\r\n window.setInterval(function () {\r\n var now = new Date().getTime();\r\n var diff = now - self.timestampLastKeepalive;\r\n var bufferSeconds = 10;\r\n if (diff > (settings.timeout + bufferSeconds) * 1000) {\r\n self.signOut(false);\r\n }\r\n }, (1) * 1000);\r\n\r\n },\r\n\r\n setupDialog: function () {\r\n var self = this;\r\n self.destroyDialog();\r\n\r\n $('
' +\r\n '

' + settings.message.format('' + settings.countdown + '') + '

' +\r\n '

' + settings.question + '

' +\r\n '
')\r\n .appendTo('body')\r\n .dialog({\r\n modal: true,\r\n width: settings.dialog_width,\r\n minHeight: 'auto',\r\n closeOnEscape: false,\r\n draggable: false,\r\n resizable: false,\r\n classes: {'.ui-dialog': 'timeout-dialog'},\r\n title: settings.title,\r\n buttons: {\r\n 'keep-alive-button': {\r\n text: settings.keep_alive_button_text,\r\n id: \"timeout-keep-signin-btn\",\r\n click: function () {\r\n self.keepAlive();\r\n }\r\n },\r\n 'sign-out-button': {\r\n text: settings.sign_out_button_text,\r\n id: \"timeout-sign-out-button\",\r\n click: function () {\r\n self.signOut(true);\r\n }\r\n }\r\n }\r\n });\r\n\r\n self.startCountdown();\r\n },\r\n\r\n destroyDialog: function () {\r\n if ($(\"#timeout-dialog\").length) {\r\n $('#timeout-dialog').dialog(\"close\");\r\n $('#timeout-dialog').remove();\r\n }\r\n },\r\n\r\n startCountdown: function () {\r\n var self = this,\r\n counter = settings.countdown;\r\n\r\n this.countdown = window.setInterval(function () {\r\n counter -= 1;\r\n $(\"#timeout-countdown\").html(counter);\r\n\r\n if (counter <= 0) {\r\n window.clearInterval(self.countdown);\r\n self.signOut(false);\r\n }\r\n\r\n }, 1000);\r\n },\r\n\r\n keepAlive: function () {\r\n var self = this;\r\n this.destroyDialog();\r\n window.clearInterval(this.countdown);\r\n\r\n self.timestampLastKeepalive = new Date().getTime();\r\n $.get(settings.keep_alive_url, function (data) {\r\n if (data == \"OK\") {\r\n if (settings.restart_on_yes) {\r\n self.setupDialogTimer();\r\n }\r\n }\r\n else {\r\n self.signOut(false);\r\n }\r\n });\r\n },\r\n\r\n signOut: function (is_forced) {\r\n var self = this;\r\n this.destroyDialog();\r\n\r\n if (settings.logout_url != null) {\r\n $.post(settings.logout_url, function (data) {\r\n self.redirectLogout(is_forced);\r\n });\r\n }\r\n else {\r\n self.redirectLogout(is_forced);\r\n }\r\n },\r\n\r\n //removed parameters cause they caused troubles with urls that already contained the questioni mark.\r\n redirectLogout: function (is_forced) {\r\n //var target = settings.logout_redirect_url + '?next=' + encodeURIComponent(window.location.pathname + window.location.search);\r\n var target = settings.logout_redirect_url;\r\n if (!is_forced)\r\n //target += '&timeout=t';\r\n window.location = target;\r\n }\r\n };\r\n\r\n TimeoutDialog.init();\r\n };\r\n}(window.jQuery);","/* =========================================================\r\n * bootstrap-datetimepicker.js\r\n * =========================================================\r\n * Copyright 2012 Stefan Petre\r\n *\r\n * Improvements by Andrew Rowls\r\n * Improvements by SĂ©bastien Malot\r\n * Improvements by Yun Lai\r\n * Improvements by Kenneth Henderick\r\n * Improvements by CuGBabyBeaR\r\n * Improvements by Christian Vaas \r\n *\r\n * Project URL : http://www.malot.fr/bootstrap-datetimepicker\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n * ========================================================= */\r\n\r\n(function(factory){\r\n if (typeof define === 'function' && define.amd)\r\n define(['jquery'], factory);\r\n else if (typeof exports === 'object')\r\n factory(require('jquery'));\r\n else\r\n factory(jQuery);\r\n\r\n}(function($, undefined){\r\n\r\n // Add ECMA262-5 Array methods if not supported natively (IE8)\r\n if (!('indexOf' in Array.prototype)) {\r\n Array.prototype.indexOf = function (find, i) {\r\n if (i === undefined) i = 0;\r\n if (i < 0) i += this.length;\r\n if (i < 0) i = 0;\r\n for (var n = this.length; i < n; i++) {\r\n if (i in this && this[i] === find) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n }\r\n\r\n function elementOrParentIsFixed (element) {\r\n var $element = $(element);\r\n var $checkElements = $element.add($element.parents());\r\n var isFixed = false;\r\n $checkElements.each(function(){\r\n if ($(this).css('position') === 'fixed') {\r\n isFixed = true;\r\n return false;\r\n }\r\n });\r\n return isFixed;\r\n }\r\n\r\n function UTCDate() {\r\n return new Date(Date.UTC.apply(Date, arguments));\r\n }\r\n\r\n function UTCToday() {\r\n var today = new Date();\r\n return UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate(), today.getUTCHours(), today.getUTCMinutes(), today.getUTCSeconds(), 0);\r\n }\r\n\r\n // Picker object\r\n var Datetimepicker = function (element, options) {\r\n var that = this;\r\n\r\n this.element = $(element);\r\n\r\n // add container for single page application\r\n // when page switch the datetimepicker div will be removed also.\r\n this.container = options.container || 'body';\r\n\r\n this.language = options.language || this.element.data('date-language') || 'en';\r\n this.language = this.language in dates ? this.language : this.language.split('-')[0]; // fr-CA fallback to fr\r\n this.language = this.language in dates ? this.language : 'en';\r\n this.isRTL = dates[this.language].rtl || false;\r\n this.formatType = options.formatType || this.element.data('format-type') || 'standard';\r\n this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || dates[this.language].format || DPGlobal.getDefaultFormat(this.formatType, 'input'), this.formatType);\r\n this.isInline = false;\r\n this.isVisible = false;\r\n this.isInput = this.element.is('input');\r\n this.fontAwesome = options.fontAwesome || this.element.data('font-awesome') || false;\r\n\r\n this.bootcssVer = options.bootcssVer || (this.isInput ? (this.element.is('.form-control') ? 3 : 2) : ( this.bootcssVer = this.element.is('.input-group') ? 3 : 2 ));\r\n\r\n this.component = this.element.is('.date') ? ( this.bootcssVer == 3 ? this.element.find('.input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o').parent() : this.element.find('.add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o').parent()) : false;\r\n this.componentReset = this.element.is('.date') ? ( this.bootcssVer == 3 ? this.element.find('.input-group-addon .glyphicon-remove, .input-group-addon .fa-times').parent():this.element.find('.add-on .icon-remove, .add-on .fa-times').parent()) : false;\r\n this.hasInput = this.component && this.element.find('input').length;\r\n if (this.component && this.component.length === 0) {\r\n this.component = false;\r\n }\r\n this.linkField = options.linkField || this.element.data('link-field') || false;\r\n this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType);\r\n this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5;\r\n this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right';\r\n this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false;\r\n this.initialDate = options.initialDate || new Date();\r\n this.zIndex = options.zIndex || this.element.data('z-index') || undefined;\r\n this.title = typeof options.title === 'undefined' ? false : options.title;\r\n this.defaultTimeZone = ''; //(new Date).toString().split('(')[1].slice(0, -1);\r\n this.timezone = options.timezone || this.defaultTimeZone;\r\n\r\n this.icons = {\r\n leftArrow: this.fontAwesome ? 'fa-arrow-left' : (this.bootcssVer === 3 ? 'glyphicon-arrow-left' : 'icon-arrow-left'),\r\n rightArrow: this.fontAwesome ? 'fa-arrow-right' : (this.bootcssVer === 3 ? 'glyphicon-arrow-right' : 'icon-arrow-right')\r\n }\r\n this.icontype = this.fontAwesome ? 'fa' : 'glyphicon';\r\n\r\n this._attachEvents();\r\n\r\n this.clickedOutside = function (e) {\r\n // Clicked outside the datetimepicker, hide it\r\n if ($(e.target).closest('.datetimepicker').length === 0) {\r\n that.hide();\r\n }\r\n }\r\n\r\n this.formatViewType = 'datetime';\r\n if ('formatViewType' in options) {\r\n this.formatViewType = options.formatViewType;\r\n } else if ('formatViewType' in this.element.data()) {\r\n this.formatViewType = this.element.data('formatViewType');\r\n }\r\n\r\n this.minView = 0;\r\n if ('minView' in options) {\r\n this.minView = options.minView;\r\n } else if ('minView' in this.element.data()) {\r\n this.minView = this.element.data('min-view');\r\n }\r\n this.minView = DPGlobal.convertViewMode(this.minView);\r\n\r\n this.maxView = DPGlobal.modes.length - 1;\r\n if ('maxView' in options) {\r\n this.maxView = options.maxView;\r\n } else if ('maxView' in this.element.data()) {\r\n this.maxView = this.element.data('max-view');\r\n }\r\n this.maxView = DPGlobal.convertViewMode(this.maxView);\r\n\r\n this.wheelViewModeNavigation = false;\r\n if ('wheelViewModeNavigation' in options) {\r\n this.wheelViewModeNavigation = options.wheelViewModeNavigation;\r\n } else if ('wheelViewModeNavigation' in this.element.data()) {\r\n this.wheelViewModeNavigation = this.element.data('view-mode-wheel-navigation');\r\n }\r\n\r\n this.wheelViewModeNavigationInverseDirection = false;\r\n\r\n if ('wheelViewModeNavigationInverseDirection' in options) {\r\n this.wheelViewModeNavigationInverseDirection = options.wheelViewModeNavigationInverseDirection;\r\n } else if ('wheelViewModeNavigationInverseDirection' in this.element.data()) {\r\n this.wheelViewModeNavigationInverseDirection = this.element.data('view-mode-wheel-navigation-inverse-dir');\r\n }\r\n\r\n this.wheelViewModeNavigationDelay = 100;\r\n if ('wheelViewModeNavigationDelay' in options) {\r\n this.wheelViewModeNavigationDelay = options.wheelViewModeNavigationDelay;\r\n } else if ('wheelViewModeNavigationDelay' in this.element.data()) {\r\n this.wheelViewModeNavigationDelay = this.element.data('view-mode-wheel-navigation-delay');\r\n }\r\n\r\n this.startViewMode = 2;\r\n if ('startView' in options) {\r\n this.startViewMode = options.startView;\r\n } else if ('startView' in this.element.data()) {\r\n this.startViewMode = this.element.data('start-view');\r\n }\r\n this.startViewMode = DPGlobal.convertViewMode(this.startViewMode);\r\n this.viewMode = this.startViewMode;\r\n\r\n this.viewSelect = this.minView;\r\n if ('viewSelect' in options) {\r\n this.viewSelect = options.viewSelect;\r\n } else if ('viewSelect' in this.element.data()) {\r\n this.viewSelect = this.element.data('view-select');\r\n }\r\n this.viewSelect = DPGlobal.convertViewMode(this.viewSelect);\r\n\r\n this.forceParse = true;\r\n if ('forceParse' in options) {\r\n this.forceParse = options.forceParse;\r\n } else if ('dateForceParse' in this.element.data()) {\r\n this.forceParse = this.element.data('date-force-parse');\r\n }\r\n var template = this.bootcssVer === 3 ? DPGlobal.templateV3 : DPGlobal.template;\r\n while (template.indexOf('{iconType}') !== -1) {\r\n template = template.replace('{iconType}', this.icontype);\r\n }\r\n while (template.indexOf('{leftArrow}') !== -1) {\r\n template = template.replace('{leftArrow}', this.icons.leftArrow);\r\n }\r\n while (template.indexOf('{rightArrow}') !== -1) {\r\n template = template.replace('{rightArrow}', this.icons.rightArrow);\r\n }\r\n this.picker = $(template)\r\n .appendTo(this.isInline ? this.element : this.container) // 'body')\r\n .on({\r\n click: $.proxy(this.click, this),\r\n mousedown: $.proxy(this.mousedown, this)\r\n });\r\n\r\n if (this.wheelViewModeNavigation) {\r\n if ($.fn.mousewheel) {\r\n this.picker.on({mousewheel: $.proxy(this.mousewheel, this)});\r\n } else {\r\n console.log('Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option');\r\n }\r\n }\r\n\r\n if (this.isInline) {\r\n this.picker.addClass('datetimepicker-inline');\r\n } else {\r\n this.picker.addClass('datetimepicker-dropdown-' + this.pickerPosition + ' dropdown-menu');\r\n }\r\n if (this.isRTL) {\r\n this.picker.addClass('datetimepicker-rtl');\r\n var selector = this.bootcssVer === 3 ? '.prev span, .next span' : '.prev i, .next i';\r\n this.picker.find(selector).toggleClass(this.icons.leftArrow + ' ' + this.icons.rightArrow);\r\n }\r\n\r\n $(document).on('mousedown', this.clickedOutside);\r\n\r\n this.autoclose = false;\r\n if ('autoclose' in options) {\r\n this.autoclose = options.autoclose;\r\n } else if ('dateAutoclose' in this.element.data()) {\r\n this.autoclose = this.element.data('date-autoclose');\r\n }\r\n\r\n this.keyboardNavigation = true;\r\n if ('keyboardNavigation' in options) {\r\n this.keyboardNavigation = options.keyboardNavigation;\r\n } else if ('dateKeyboardNavigation' in this.element.data()) {\r\n this.keyboardNavigation = this.element.data('date-keyboard-navigation');\r\n }\r\n\r\n this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false);\r\n this.clearBtn = (options.clearBtn || this.element.data('date-clear-btn') || false);\r\n this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false);\r\n\r\n this.weekStart = ((options.weekStart || this.element.data('date-weekstart') || dates[this.language].weekStart || 0) % 7);\r\n this.weekEnd = ((this.weekStart + 6) % 7);\r\n this.startDate = -Infinity;\r\n this.endDate = Infinity;\r\n this.datesDisabled = [];\r\n this.daysOfWeekDisabled = [];\r\n this.setStartDate(options.startDate || this.element.data('date-startdate'));\r\n this.setEndDate(options.endDate || this.element.data('date-enddate'));\r\n this.setDatesDisabled(options.datesDisabled || this.element.data('date-dates-disabled'));\r\n this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled'));\r\n this.setMinutesDisabled(options.minutesDisabled || this.element.data('date-minute-disabled'));\r\n this.setHoursDisabled(options.hoursDisabled || this.element.data('date-hour-disabled'));\r\n this.startDateDisabled = Infinity;\r\n this.endDateDisabled = Infinity;\r\n this.setStartDateDisabled(options.startDateDisabled || this.element.data('date-startdatedisabled'));\r\n this.setEndDateDisabled(options.endDateDisabled || this.element.data('date-enddatedisabled'));\r\n this.fillDow();\r\n this.fillMonths();\r\n this.update();\r\n this.showMode();\r\n\r\n if (this.isInline) {\r\n this.show();\r\n }\r\n };\r\n\r\n Datetimepicker.prototype = {\r\n constructor: Datetimepicker,\r\n\r\n _events: [],\r\n _attachEvents: function () {\r\n this._detachEvents();\r\n if (this.isInput) { // single input\r\n this._events = [\r\n [this.element, {\r\n focus: $.proxy(this.show, this),\r\n keyup: $.proxy(this.update, this),\r\n keydown: $.proxy(this.keydown, this)\r\n }]\r\n ];\r\n }\r\n else if (this.component && this.hasInput) { // component: input + button\r\n this._events = [\r\n // For components that are not readonly, allow keyboard nav\r\n [this.element.find('input'), {\r\n focus: $.proxy(this.show, this),\r\n keyup: $.proxy(this.update, this),\r\n keydown: $.proxy(this.keydown, this)\r\n }],\r\n [this.component, {\r\n click: $.proxy(this.show, this)\r\n }]\r\n ];\r\n if (this.componentReset) {\r\n this._events.push([\r\n this.componentReset,\r\n {click: $.proxy(this.reset, this)}\r\n ]);\r\n }\r\n }\r\n else if (this.element.is('div')) { // inline datetimepicker\r\n this.isInline = true;\r\n }\r\n else {\r\n this._events = [\r\n [this.element, {\r\n click: $.proxy(this.show, this)\r\n }]\r\n ];\r\n }\r\n for (var i = 0, el, ev; i < this._events.length; i++) {\r\n el = this._events[i][0];\r\n ev = this._events[i][1];\r\n el.on(ev);\r\n }\r\n },\r\n\r\n _detachEvents: function () {\r\n for (var i = 0, el, ev; i < this._events.length; i++) {\r\n el = this._events[i][0];\r\n ev = this._events[i][1];\r\n el.off(ev);\r\n }\r\n this._events = [];\r\n },\r\n\r\n show: function (e) {\r\n this.picker.show();\r\n this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();\r\n if (this.forceParse) {\r\n this.update();\r\n }\r\n this.place();\r\n $(window).on('resize', $.proxy(this.place, this));\r\n if (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n this.isVisible = true;\r\n this.element.trigger({\r\n type: 'show',\r\n date: this.date\r\n });\r\n },\r\n\r\n hide: function (e) {\r\n if (!this.isVisible) return;\r\n if (this.isInline) return;\r\n this.picker.hide();\r\n $(window).off('resize', this.place);\r\n this.viewMode = this.startViewMode;\r\n this.showMode();\r\n if (!this.isInput) {\r\n $(document).off('mousedown', this.hide);\r\n }\r\n\r\n if (\r\n this.forceParse &&\r\n (\r\n this.isInput && this.element.val() ||\r\n this.hasInput && this.element.find('input').val()\r\n )\r\n )\r\n this.setValue();\r\n this.isVisible = false;\r\n this.element.trigger({\r\n type: 'hide',\r\n date: this.date\r\n });\r\n },\r\n\r\n remove: function () {\r\n this._detachEvents();\r\n $(document).off('mousedown', this.clickedOutside);\r\n this.picker.remove();\r\n delete this.picker;\r\n delete this.element.data().datetimepicker;\r\n },\r\n\r\n getDate: function () {\r\n var d = this.getUTCDate();\r\n return new Date(d.getTime() + (d.getTimezoneOffset() * 60000));\r\n },\r\n\r\n getUTCDate: function () {\r\n return this.date;\r\n },\r\n\r\n getInitialDate: function () {\r\n return this.initialDate\r\n },\r\n\r\n setInitialDate: function (initialDate) {\r\n this.initialDate = initialDate;\r\n },\r\n\r\n setDate: function (d) {\r\n this.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset() * 60000)));\r\n },\r\n\r\n setUTCDate: function (d) {\r\n if (d >= this.startDate && d <= this.endDate) {\r\n this.date = d;\r\n this.setValue();\r\n this.viewDate = this.date;\r\n this.fill();\r\n } else {\r\n this.element.trigger({\r\n type: 'outOfRange',\r\n date: d,\r\n startDate: this.startDate,\r\n endDate: this.endDate\r\n });\r\n }\r\n },\r\n\r\n setFormat: function (format) {\r\n this.format = DPGlobal.parseFormat(format, this.formatType);\r\n var element;\r\n if (this.isInput) {\r\n element = this.element;\r\n } else if (this.component) {\r\n element = this.element.find('input');\r\n }\r\n if (element && element.val()) {\r\n this.setValue();\r\n }\r\n },\r\n\r\n setValue: function () {\r\n var formatted = this.getFormattedDate();\r\n if (!this.isInput) {\r\n if (this.component) {\r\n this.element.find('input').val(formatted);\r\n }\r\n this.element.data('date', formatted);\r\n } else {\r\n this.element.val(formatted);\r\n }\r\n if (this.linkField) {\r\n $('#' + this.linkField).val(this.getFormattedDate(this.linkFormat));\r\n }\r\n },\r\n\r\n getFormattedDate: function (format) {\r\n if (format == undefined) format = this.format;\r\n return DPGlobal.formatDate(this.date, format, this.language, this.formatType, this.timezone);\r\n },\r\n\r\n setStartDate: function (startDate) {\r\n this.startDate = startDate || -Infinity;\r\n if (this.startDate !== -Infinity) {\r\n this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language, this.formatType, this.timezone);\r\n }\r\n this.update();\r\n this.updateNavArrows();\r\n },\r\n\r\n setEndDate: function (endDate) {\r\n this.endDate = endDate || Infinity;\r\n if (this.endDate !== Infinity) {\r\n this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language, this.formatType, this.timezone);\r\n }\r\n this.update();\r\n this.updateNavArrows();\r\n },\r\n\r\n setStartDateDisabled: function (startDateDisabled) {\r\n this.startDateDisabled = startDateDisabled || -Infinity;\r\n if (this.startDateDisabled !== Infinity) {\r\n this.startDateDisabled = DPGlobal.parseDate(this.startDateDisabled, this.format, this.language, this.formatType, this.timezone);\r\n }\r\n this.update();\r\n this.updateNavArrows();\r\n },\r\n\r\n setEndDateDisabled: function (endDateDisabled) {\r\n this.endDateDisabled = endDateDisabled || Infinity;\r\n if (this.endDateDisabled !== Infinity) {\r\n this.endDateDisabled = DPGlobal.parseDate(this.endDateDisabled, this.format, this.language, this.formatType, this.timezone);\r\n }\r\n this.update();\r\n this.updateNavArrows();\r\n },\r\n\r\n setDatesDisabled: function (datesDisabled) {\r\n this.datesDisabled = datesDisabled || [];\r\n if (!$.isArray(this.datesDisabled)) {\r\n this.datesDisabled = this.datesDisabled.split(/,\\s*/);\r\n }\r\n this.datesDisabled = $.map(this.datesDisabled, function (d) {\r\n return DPGlobal.parseDate(d, this.format, this.language, this.formatType, this.timezone).toDateString();\r\n });\r\n this.update();\r\n this.updateNavArrows();\r\n },\r\n\r\n setTitle: function (selector, value) {\r\n return this.picker.find(selector)\r\n .find('th:eq(1)')\r\n .text(this.title === false ? value : this.title);\r\n },\r\n\r\n setDaysOfWeekDisabled: function (daysOfWeekDisabled) {\r\n this.daysOfWeekDisabled = daysOfWeekDisabled || [];\r\n if (!$.isArray(this.daysOfWeekDisabled)) {\r\n this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\\s*/);\r\n }\r\n this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) {\r\n return parseInt(d, 10);\r\n });\r\n this.update();\r\n this.updateNavArrows();\r\n },\r\n\r\n setMinutesDisabled: function (minutesDisabled) {\r\n this.minutesDisabled = minutesDisabled || [];\r\n if (!$.isArray(this.minutesDisabled)) {\r\n this.minutesDisabled = this.minutesDisabled.split(/,\\s*/);\r\n }\r\n this.minutesDisabled = $.map(this.minutesDisabled, function (d) {\r\n return parseInt(d, 10);\r\n });\r\n this.update();\r\n this.updateNavArrows();\r\n },\r\n\r\n setHoursDisabled: function (hoursDisabled) {\r\n this.hoursDisabled = hoursDisabled || [];\r\n if (!$.isArray(this.hoursDisabled)) {\r\n this.hoursDisabled = this.hoursDisabled.split(/,\\s*/);\r\n }\r\n this.hoursDisabled = $.map(this.hoursDisabled, function (d) {\r\n return parseInt(d, 10);\r\n });\r\n this.update();\r\n this.updateNavArrows();\r\n },\r\n\r\n place: function () {\r\n if (this.isInline) return;\r\n\r\n if (!this.zIndex) {\r\n var index_highest = 0;\r\n $('div').each(function () {\r\n var index_current = parseInt($(this).css('zIndex'), 10);\r\n if (index_current > index_highest) {\r\n index_highest = index_current;\r\n }\r\n });\r\n this.zIndex = index_highest + 10;\r\n }\r\n\r\n var offset, top, left, containerOffset;\r\n if (this.container instanceof $) {\r\n containerOffset = this.container.offset();\r\n } else {\r\n containerOffset = $(this.container).offset();\r\n }\r\n\r\n if (this.component) {\r\n offset = this.component.offset();\r\n left = offset.left;\r\n if (this.pickerPosition == 'bottom-left' || this.pickerPosition == 'top-left') {\r\n left += this.component.outerWidth() - this.picker.outerWidth();\r\n }\r\n } else {\r\n offset = this.element.offset();\r\n left = offset.left;\r\n if (this.pickerPosition == 'bottom-left' || this.pickerPosition == 'top-left') {\r\n left += this.element.outerWidth() - this.picker.outerWidth();\r\n }\r\n }\r\n\r\n var bodyWidth = document.body.clientWidth || window.innerWidth;\r\n if (left + 220 > bodyWidth) {\r\n left = bodyWidth - 220;\r\n }\r\n\r\n if (this.pickerPosition == 'top-left' || this.pickerPosition == 'top-right') {\r\n top = offset.top - this.picker.outerHeight();\r\n } else {\r\n top = offset.top + this.height;\r\n }\r\n\r\n top = top - containerOffset.top;\r\n left = left - containerOffset.left;\r\n\r\n top = top + 140;\r\n\r\n this.picker.css({\r\n top: top,\r\n left: left,\r\n zIndex: this.zIndex\r\n });\r\n },\r\n\r\n update: function () {\r\n var date, fromArgs = false;\r\n if (arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {\r\n date = arguments[0];\r\n fromArgs = true;\r\n } else {\r\n date = (this.isInput ? this.element.val() : this.element.find('input').val()) || this.element.data('date') || this.initialDate;\r\n if (typeof date == 'string' || date instanceof String) {\r\n date = date.replace(/^\\s+|\\s+$/g,'');\r\n }\r\n }\r\n\r\n if (!date) {\r\n date = new Date();\r\n fromArgs = false;\r\n }\r\n\r\n this.date = DPGlobal.parseDate(date, this.format, this.language, this.formatType, this.timezone);\r\n\r\n if (fromArgs) this.setValue();\r\n\r\n if (this.date < this.startDate) {\r\n this.viewDate = new Date(this.startDate);\r\n } else if (this.date > this.endDate) {\r\n this.viewDate = new Date(this.endDate);\r\n } else {\r\n this.viewDate = new Date(this.date);\r\n }\r\n this.fill();\r\n },\r\n\r\n fillDow: function () {\r\n var dowCnt = this.weekStart,\r\n html = '';\r\n while (dowCnt < this.weekStart + 7) {\r\n html += '' + dates[this.language].daysMin[(dowCnt++) % 7] + '';\r\n }\r\n html += '';\r\n this.picker.find('.datetimepicker-days thead').append(html);\r\n },\r\n\r\n fillMonths: function () {\r\n var html = '',\r\n i = 0;\r\n while (i < 12) {\r\n html += '' + dates[this.language].monthsShort[i++] + '';\r\n }\r\n this.picker.find('.datetimepicker-months td').html(html);\r\n },\r\n\r\n fill: function () {\r\n if (this.date == null || this.viewDate == null) {\r\n return;\r\n }\r\n var d = new Date(this.viewDate),\r\n year = d.getUTCFullYear(),\r\n month = d.getUTCMonth(),\r\n dayMonth = d.getUTCDate(),\r\n hours = d.getUTCHours(),\r\n minutes = d.getUTCMinutes(),\r\n startYear = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity,\r\n startMonth = this.startDate !== -Infinity ? this.startDate.getUTCMonth() : -Infinity,\r\n endYear = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity,\r\n endMonth = this.endDate !== Infinity ? this.endDate.getUTCMonth() + 1 : Infinity,\r\n currentDate = (new UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(),\r\n today = new Date();\r\n this.setTitle('.datetimepicker-days', dates[this.language].months[month] + ' ' + year)\r\n if (this.formatViewType == 'time') {\r\n var formatted = this.getFormattedDate();\r\n this.setTitle('.datetimepicker-hours', formatted);\r\n this.setTitle('.datetimepicker-minutes', formatted);\r\n } else {\r\n this.setTitle('.datetimepicker-hours', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);\r\n this.setTitle('.datetimepicker-minutes', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);\r\n }\r\n this.picker.find('tfoot th.today')\r\n .text(dates[this.language].today || dates['en'].today)\r\n .toggle(this.todayBtn !== false);\r\n this.picker.find('tfoot th.clear')\r\n .text(dates[this.language].clear || dates['en'].clear)\r\n .toggle(this.clearBtn !== false);\r\n this.updateNavArrows();\r\n this.fillMonths();\r\n /*var prevMonth = UTCDate(year, month, 0,0,0,0,0);\r\n prevMonth.setUTCDate(prevMonth.getDate() - (prevMonth.getUTCDay() - this.weekStart + 7)%7);*/\r\n var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0),\r\n day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());\r\n prevMonth.setUTCDate(day);\r\n prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7);\r\n var nextMonth = new Date(prevMonth);\r\n nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\r\n nextMonth = nextMonth.valueOf();\r\n var html = [];\r\n var clsName;\r\n while (prevMonth.valueOf() < nextMonth) {\r\n if (prevMonth.getUTCDay() == this.weekStart) {\r\n html.push('');\r\n }\r\n clsName = '';\r\n if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() < month)) {\r\n clsName += ' old';\r\n } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() > month)) {\r\n clsName += ' new';\r\n }\r\n // Compare internal UTC date with local today, not UTC today\r\n if (this.todayHighlight &&\r\n prevMonth.getUTCFullYear() == today.getFullYear() &&\r\n prevMonth.getUTCMonth() == today.getMonth() &&\r\n prevMonth.getUTCDate() == today.getDate()) {\r\n clsName += ' today';\r\n }\r\n if (prevMonth.valueOf() == currentDate) {\r\n clsName += ' active';\r\n }\r\n if ((prevMonth.valueOf() + 86400000) <= this.startDate || prevMonth.valueOf() > this.endDate ||\r\n $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1 ||\r\n\t\t\t\t\t$.inArray(prevMonth.toDateString(), this.datesDisabled) !== -1) {\r\n clsName += ' disabled';\r\n }\r\n html.push('' + prevMonth.getUTCDate() + '');\r\n if (prevMonth.getUTCDay() == this.weekEnd) {\r\n html.push('');\r\n }\r\n prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\r\n }\r\n this.picker.find('.datetimepicker-days tbody').empty().append(html.join(''));\r\n\r\n html = [];\r\n var txt = '', meridian = '', meridianOld = '';\r\n var hoursDisabled = this.hoursDisabled || [];\r\n for (var i = 0; i < 24; i++) {\r\n if (hoursDisabled.indexOf(i) !== -1) continue;\r\n var actual = UTCDate(year, month, dayMonth, i);\r\n clsName = '';\r\n // We want the previous hour for the startDate\r\n if ((actual.valueOf() + 3600000) <= this.startDate || actual.valueOf() > this.endDate) {\r\n clsName += ' disabled';\r\n } else if (this.startDateDisabled !== Infinity && this.endDateDisabled !== Infinity && ((actual.valueOf() - 1000) >= this.startDateDisabled && actual.valueOf() + 3600000 - 1000 < this.endDateDisabled)) {\r\n clsName += ' disabled';\r\n } else if (hours == i) {\r\n clsName += ' active';\r\n }\r\n if (this.showMeridian && dates[this.language].meridiem.length == 2) {\r\n meridian = (i < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);\r\n if (meridian != meridianOld) {\r\n if (meridianOld != '') {\r\n html.push('');\r\n }\r\n html.push('
' + meridian.toUpperCase() + '');\r\n }\r\n meridianOld = meridian;\r\n txt = (i % 12 ? i % 12 : 12);\r\n html.push('' + txt + '');\r\n if (i == 23) {\r\n html.push('
');\r\n }\r\n } else {\r\n txt = i + ':00';\r\n html.push('' + txt + '');\r\n }\r\n }\r\n this.picker.find('.datetimepicker-hours td').html(html.join(''));\r\n\r\n html = [];\r\n txt = '', meridian = '', meridianOld = '';\r\n var minutesDisabled = this.minutesDisabled || [];\r\n for (var i = 0; i < 60; i += this.minuteStep) {\r\n if (minutesDisabled.indexOf(i) !== -1) continue;\r\n var actual = UTCDate(year, month, dayMonth, hours, i, 0);\r\n clsName = '';\r\n if (actual.valueOf() < this.startDate || actual.valueOf() > this.endDate) {\r\n clsName += ' disabled';\r\n } else if (this.startDateDisabled !== Infinity && this.endDateDisabled !== Infinity && ((actual.valueOf() - 1000) >= this.startDateDisabled && actual.valueOf() + 1000 < this.endDateDisabled)) {\r\n clsName += ' disabled';\r\n } else if (Math.floor(minutes / this.minuteStep) == Math.floor(i / this.minuteStep)) {\r\n clsName += ' active';\r\n }\r\n if (this.showMeridian && dates[this.language].meridiem.length == 2) {\r\n meridian = (hours < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);\r\n if (meridian != meridianOld) {\r\n if (meridianOld != '') {\r\n html.push('');\r\n }\r\n html.push('
' + meridian.toUpperCase() + '');\r\n }\r\n meridianOld = meridian;\r\n txt = (hours % 12 ? hours % 12 : 12);\r\n //html.push(''+txt+'');\r\n html.push('' + txt + ':' + (i < 10 ? '0' + i : i) + '');\r\n if (i == 59) {\r\n html.push('
');\r\n }\r\n } else {\r\n txt = i + ':00';\r\n //html.push(''+txt+'');\r\n html.push('' + hours + ':' + (i < 10 ? '0' + i : i) + '');\r\n }\r\n }\r\n this.picker.find('.datetimepicker-minutes td').html(html.join(''));\r\n\r\n var currentYear = this.date.getUTCFullYear();\r\n var months = this.setTitle('.datetimepicker-months', year)\r\n .end()\r\n .find('span').removeClass('active');\r\n if (currentYear == year) {\r\n // getUTCMonths() returns 0 based, and we need to select the next one\r\n // To cater bootstrap 2 we don't need to select the next one\r\n var offset = months.length - 12;\r\n months.eq(this.date.getUTCMonth() + offset).addClass('active');\r\n }\r\n if (year < startYear || year > endYear) {\r\n months.addClass('disabled');\r\n }\r\n if (year == startYear) {\r\n months.slice(0, startMonth).addClass('disabled');\r\n }\r\n if (year == endYear) {\r\n months.slice(endMonth).addClass('disabled');\r\n }\r\n\r\n html = '';\r\n year = parseInt(year / 10, 10) * 10;\r\n var yearCont = this.setTitle('.datetimepicker-years', year + '-' + (year + 9))\r\n .end()\r\n .find('td');\r\n year -= 1;\r\n for (var i = -1; i < 11; i++) {\r\n html += ' endYear ? ' disabled' : '') + '\">' + year + '';\r\n year += 1;\r\n }\r\n yearCont.html(html);\r\n this.place();\r\n },\r\n\r\n updateNavArrows: function () {\r\n var d = new Date(this.viewDate),\r\n year = d.getUTCFullYear(),\r\n month = d.getUTCMonth(),\r\n day = d.getUTCDate(),\r\n hour = d.getUTCHours();\r\n switch (this.viewMode) {\r\n case 0:\r\n if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()\r\n && month <= this.startDate.getUTCMonth()\r\n && day <= this.startDate.getUTCDate()\r\n && hour <= this.startDate.getUTCHours()) {\r\n this.picker.find('.prev').css({visibility: 'hidden'});\r\n } else {\r\n this.picker.find('.prev').css({visibility: 'visible'});\r\n }\r\n if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()\r\n && month >= this.endDate.getUTCMonth()\r\n && day >= this.endDate.getUTCDate()\r\n && hour >= this.endDate.getUTCHours()) {\r\n this.picker.find('.next').css({visibility: 'hidden'});\r\n } else {\r\n this.picker.find('.next').css({visibility: 'visible'});\r\n }\r\n break;\r\n case 1:\r\n if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()\r\n && month <= this.startDate.getUTCMonth()\r\n && day <= this.startDate.getUTCDate()) {\r\n this.picker.find('.prev').css({visibility: 'hidden'});\r\n } else {\r\n this.picker.find('.prev').css({visibility: 'visible'});\r\n }\r\n if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()\r\n && month >= this.endDate.getUTCMonth()\r\n && day >= this.endDate.getUTCDate()) {\r\n this.picker.find('.next').css({visibility: 'hidden'});\r\n } else {\r\n this.picker.find('.next').css({visibility: 'visible'});\r\n }\r\n break;\r\n case 2:\r\n if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()\r\n && month <= this.startDate.getUTCMonth()) {\r\n this.picker.find('.prev').css({visibility: 'hidden'});\r\n } else {\r\n this.picker.find('.prev').css({visibility: 'visible'});\r\n }\r\n if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()\r\n && month >= this.endDate.getUTCMonth()) {\r\n this.picker.find('.next').css({visibility: 'hidden'});\r\n } else {\r\n this.picker.find('.next').css({visibility: 'visible'});\r\n }\r\n break;\r\n case 3:\r\n case 4:\r\n if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()) {\r\n this.picker.find('.prev').css({visibility: 'hidden'});\r\n } else {\r\n this.picker.find('.prev').css({visibility: 'visible'});\r\n }\r\n if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()) {\r\n this.picker.find('.next').css({visibility: 'hidden'});\r\n } else {\r\n this.picker.find('.next').css({visibility: 'visible'});\r\n }\r\n break;\r\n }\r\n },\r\n\r\n mousewheel: function (e) {\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (this.wheelPause) {\r\n return;\r\n }\r\n\r\n this.wheelPause = true;\r\n\r\n var originalEvent = e.originalEvent;\r\n\r\n var delta = originalEvent.wheelDelta;\r\n\r\n var mode = delta > 0 ? 1 : (delta === 0) ? 0 : -1;\r\n\r\n if (this.wheelViewModeNavigationInverseDirection) {\r\n mode = -mode;\r\n }\r\n\r\n this.showMode(mode);\r\n\r\n setTimeout($.proxy(function () {\r\n\r\n this.wheelPause = false\r\n\r\n }, this), this.wheelViewModeNavigationDelay);\r\n\r\n },\r\n\r\n click: function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n var target = $(e.target).closest('span, td, th, legend');\r\n if (target.is('.' + this.icontype)) {\r\n target = $(target).parent().closest('span, td, th, legend');\r\n }\r\n if (target.length == 1) {\r\n if (target.is('.disabled')) {\r\n this.element.trigger({\r\n type: 'outOfRange',\r\n date: this.viewDate,\r\n startDate: this.startDate,\r\n endDate: this.endDate\r\n });\r\n return;\r\n }\r\n switch (target[0].nodeName.toLowerCase()) {\r\n case 'th':\r\n switch (target[0].className) {\r\n case 'switch':\r\n this.showMode(1);\r\n break;\r\n case 'prev':\r\n case 'next':\r\n var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1);\r\n switch (this.viewMode) {\r\n case 0:\r\n this.viewDate = this.moveHour(this.viewDate, dir);\r\n break;\r\n case 1:\r\n this.viewDate = this.moveDate(this.viewDate, dir);\r\n break;\r\n case 2:\r\n this.viewDate = this.moveMonth(this.viewDate, dir);\r\n break;\r\n case 3:\r\n case 4:\r\n this.viewDate = this.moveYear(this.viewDate, dir);\r\n break;\r\n }\r\n this.fill();\r\n this.element.trigger({\r\n type: target[0].className + ':' + this.convertViewModeText(this.viewMode),\r\n date: this.viewDate,\r\n startDate: this.startDate,\r\n endDate: this.endDate\r\n });\r\n break;\r\n case 'clear':\r\n this.reset();\r\n if (this.autoclose) {\r\n this.hide();\r\n }\r\n break;\r\n case 'today':\r\n var date = new Date();\r\n date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0);\r\n\r\n // Respect startDate and endDate.\r\n if (date < this.startDate) date = this.startDate;\r\n else if (date > this.endDate) date = this.endDate;\r\n\r\n this.viewMode = this.startViewMode;\r\n this.showMode(0);\r\n this._setDate(date);\r\n this.fill();\r\n if (this.autoclose) {\r\n this.hide();\r\n }\r\n break;\r\n }\r\n break;\r\n case 'span':\r\n if (!target.is('.disabled')) {\r\n var year = this.viewDate.getUTCFullYear(),\r\n month = this.viewDate.getUTCMonth(),\r\n day = this.viewDate.getUTCDate(),\r\n hours = this.viewDate.getUTCHours(),\r\n minutes = this.viewDate.getUTCMinutes(),\r\n seconds = this.viewDate.getUTCSeconds();\r\n\r\n if (target.is('.month')) {\r\n this.viewDate.setUTCDate(1);\r\n month = target.parent().find('span').index(target);\r\n day = this.viewDate.getUTCDate();\r\n this.viewDate.setUTCMonth(month);\r\n this.element.trigger({\r\n type: 'changeMonth',\r\n date: this.viewDate\r\n });\r\n if (this.viewSelect >= 3) {\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n }\r\n } else if (target.is('.year')) {\r\n this.viewDate.setUTCDate(1);\r\n year = parseInt(target.text(), 10) || 0;\r\n this.viewDate.setUTCFullYear(year);\r\n this.element.trigger({\r\n type: 'changeYear',\r\n date: this.viewDate\r\n });\r\n if (this.viewSelect >= 4) {\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n }\r\n } else if (target.is('.hour')) {\r\n hours = parseInt(target.text(), 10) || 0;\r\n if (target.hasClass('hour_am') || target.hasClass('hour_pm')) {\r\n if (hours == 12 && target.hasClass('hour_am')) {\r\n hours = 0;\r\n } else if (hours != 12 && target.hasClass('hour_pm')) {\r\n hours += 12;\r\n }\r\n }\r\n this.viewDate.setUTCHours(hours);\r\n this.element.trigger({\r\n type: 'changeHour',\r\n date: this.viewDate\r\n });\r\n if (this.viewSelect >= 1) {\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n }\r\n } else if (target.is('.minute')) {\r\n minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0;\r\n this.viewDate.setUTCMinutes(minutes);\r\n this.element.trigger({\r\n type: 'changeMinute',\r\n date: this.viewDate\r\n });\r\n if (this.viewSelect >= 0) {\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n }\r\n }\r\n if (this.viewMode != 0) {\r\n var oldViewMode = this.viewMode;\r\n this.showMode(-1);\r\n this.fill();\r\n if (oldViewMode == this.viewMode && this.autoclose) {\r\n this.hide();\r\n }\r\n } else {\r\n this.fill();\r\n if (this.autoclose) {\r\n this.hide();\r\n }\r\n }\r\n }\r\n break;\r\n case 'td':\r\n if (target.is('.day') && !target.is('.disabled')) {\r\n var day = parseInt(target.text(), 10) || 1;\r\n var year = this.viewDate.getUTCFullYear(),\r\n month = this.viewDate.getUTCMonth(),\r\n hours = this.viewDate.getUTCHours(),\r\n minutes = this.viewDate.getUTCMinutes(),\r\n seconds = this.viewDate.getUTCSeconds();\r\n if (target.is('.old')) {\r\n if (month === 0) {\r\n month = 11;\r\n year -= 1;\r\n } else {\r\n month -= 1;\r\n }\r\n } else if (target.is('.new')) {\r\n if (month == 11) {\r\n month = 0;\r\n year += 1;\r\n } else {\r\n month += 1;\r\n }\r\n }\r\n this.viewDate.setUTCFullYear(year);\r\n this.viewDate.setUTCMonth(month, day);\r\n this.element.trigger({\r\n type: 'changeDay',\r\n date: this.viewDate\r\n });\r\n if (this.viewSelect >= 2) {\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n }\r\n }\r\n var oldViewMode = this.viewMode;\r\n this.showMode(-1);\r\n this.fill();\r\n if (oldViewMode == this.viewMode && this.autoclose) {\r\n this.hide();\r\n }\r\n break;\r\n }\r\n }\r\n },\r\n\r\n _setDate: function (date, which) {\r\n if (!which || which == 'date')\r\n this.date = date;\r\n if (!which || which == 'view')\r\n this.viewDate = date;\r\n this.fill();\r\n this.setValue();\r\n var element;\r\n if (this.isInput) {\r\n element = this.element;\r\n } else if (this.component) {\r\n element = this.element.find('input');\r\n }\r\n if (element) {\r\n element.change();\r\n if (this.autoclose && (!which || which == 'date')) {\r\n //this.hide();\r\n }\r\n }\r\n this.element.trigger({\r\n type: 'changeDate',\r\n date: this.getDate()\r\n });\r\n if(date == null)\r\n this.date = this.viewDate;\r\n },\r\n\r\n moveMinute: function (date, dir) {\r\n if (!dir) return date;\r\n var new_date = new Date(date.valueOf());\r\n //dir = dir > 0 ? 1 : -1;\r\n new_date.setUTCMinutes(new_date.getUTCMinutes() + (dir * this.minuteStep));\r\n return new_date;\r\n },\r\n\r\n moveHour: function (date, dir) {\r\n if (!dir) return date;\r\n var new_date = new Date(date.valueOf());\r\n //dir = dir > 0 ? 1 : -1;\r\n new_date.setUTCHours(new_date.getUTCHours() + dir);\r\n return new_date;\r\n },\r\n\r\n moveDate: function (date, dir) {\r\n if (!dir) return date;\r\n var new_date = new Date(date.valueOf());\r\n //dir = dir > 0 ? 1 : -1;\r\n new_date.setUTCDate(new_date.getUTCDate() + dir);\r\n return new_date;\r\n },\r\n\r\n moveMonth: function (date, dir) {\r\n if (!dir) return date;\r\n var new_date = new Date(date.valueOf()),\r\n day = new_date.getUTCDate(),\r\n month = new_date.getUTCMonth(),\r\n mag = Math.abs(dir),\r\n new_month, test;\r\n dir = dir > 0 ? 1 : -1;\r\n if (mag == 1) {\r\n test = dir == -1\r\n // If going back one month, make sure month is not current month\r\n // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\r\n ? function () {\r\n return new_date.getUTCMonth() == month;\r\n }\r\n // If going forward one month, make sure month is as expected\r\n // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\r\n : function () {\r\n return new_date.getUTCMonth() != new_month;\r\n };\r\n new_month = month + dir;\r\n new_date.setUTCMonth(new_month);\r\n // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\r\n if (new_month < 0 || new_month > 11)\r\n new_month = (new_month + 12) % 12;\r\n } else {\r\n // For magnitudes >1, move one month at a time...\r\n for (var i = 0; i < mag; i++)\r\n // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\r\n new_date = this.moveMonth(new_date, dir);\r\n // ...then reset the day, keeping it in the new month\r\n new_month = new_date.getUTCMonth();\r\n new_date.setUTCDate(day);\r\n test = function () {\r\n return new_month != new_date.getUTCMonth();\r\n };\r\n }\r\n // Common date-resetting loop -- if date is beyond end of month, make it\r\n // end of month\r\n while (test()) {\r\n new_date.setUTCDate(--day);\r\n new_date.setUTCMonth(new_month);\r\n }\r\n return new_date;\r\n },\r\n\r\n moveYear: function (date, dir) {\r\n return this.moveMonth(date, dir * 12);\r\n },\r\n\r\n dateWithinRange: function (date) {\r\n return date >= this.startDate && date <= this.endDate;\r\n },\r\n\r\n keydown: function (e) {\r\n if (this.picker.is(':not(:visible)')) {\r\n if (e.keyCode == 27) // allow escape to hide and re-show picker\r\n this.show();\r\n return;\r\n }\r\n var dateChanged = false,\r\n dir, day, month,\r\n newDate, newViewDate;\r\n switch (e.keyCode) {\r\n case 27: // escape\r\n this.hide();\r\n e.preventDefault();\r\n break;\r\n case 37: // left\r\n case 39: // right\r\n if (!this.keyboardNavigation) break;\r\n dir = e.keyCode == 37 ? -1 : 1;\r\n viewMode = this.viewMode;\r\n if (e.ctrlKey) {\r\n viewMode += 2;\r\n } else if (e.shiftKey) {\r\n viewMode += 1;\r\n }\r\n if (viewMode == 4) {\r\n newDate = this.moveYear(this.date, dir);\r\n newViewDate = this.moveYear(this.viewDate, dir);\r\n } else if (viewMode == 3) {\r\n newDate = this.moveMonth(this.date, dir);\r\n newViewDate = this.moveMonth(this.viewDate, dir);\r\n } else if (viewMode == 2) {\r\n newDate = this.moveDate(this.date, dir);\r\n newViewDate = this.moveDate(this.viewDate, dir);\r\n } else if (viewMode == 1) {\r\n newDate = this.moveHour(this.date, dir);\r\n newViewDate = this.moveHour(this.viewDate, dir);\r\n } else if (viewMode == 0) {\r\n newDate = this.moveMinute(this.date, dir);\r\n newViewDate = this.moveMinute(this.viewDate, dir);\r\n }\r\n if (this.dateWithinRange(newDate)) {\r\n this.date = newDate;\r\n this.viewDate = newViewDate;\r\n this.setValue();\r\n this.update();\r\n e.preventDefault();\r\n dateChanged = true;\r\n }\r\n break;\r\n case 38: // up\r\n case 40: // down\r\n if (!this.keyboardNavigation) break;\r\n dir = e.keyCode == 38 ? -1 : 1;\r\n viewMode = this.viewMode;\r\n if (e.ctrlKey) {\r\n viewMode += 2;\r\n } else if (e.shiftKey) {\r\n viewMode += 1;\r\n }\r\n if (viewMode == 4) {\r\n newDate = this.moveYear(this.date, dir);\r\n newViewDate = this.moveYear(this.viewDate, dir);\r\n } else if (viewMode == 3) {\r\n newDate = this.moveMonth(this.date, dir);\r\n newViewDate = this.moveMonth(this.viewDate, dir);\r\n } else if (viewMode == 2) {\r\n newDate = this.moveDate(this.date, dir * 7);\r\n newViewDate = this.moveDate(this.viewDate, dir * 7);\r\n } else if (viewMode == 1) {\r\n if (this.showMeridian) {\r\n newDate = this.moveHour(this.date, dir * 6);\r\n newViewDate = this.moveHour(this.viewDate, dir * 6);\r\n } else {\r\n newDate = this.moveHour(this.date, dir * 4);\r\n newViewDate = this.moveHour(this.viewDate, dir * 4);\r\n }\r\n } else if (viewMode == 0) {\r\n newDate = this.moveMinute(this.date, dir * 4);\r\n newViewDate = this.moveMinute(this.viewDate, dir * 4);\r\n }\r\n if (this.dateWithinRange(newDate)) {\r\n this.date = newDate;\r\n this.viewDate = newViewDate;\r\n this.setValue();\r\n this.update();\r\n e.preventDefault();\r\n dateChanged = true;\r\n }\r\n break;\r\n case 13: // enter\r\n if (this.viewMode != 0) {\r\n var oldViewMode = this.viewMode;\r\n this.showMode(-1);\r\n this.fill();\r\n if (oldViewMode == this.viewMode && this.autoclose) {\r\n this.hide();\r\n }\r\n } else {\r\n this.fill();\r\n if (this.autoclose) {\r\n this.hide();\r\n }\r\n }\r\n e.preventDefault();\r\n break;\r\n case 9: // tab\r\n this.hide();\r\n break;\r\n }\r\n if (dateChanged) {\r\n var element;\r\n if (this.isInput) {\r\n element = this.element;\r\n } else if (this.component) {\r\n element = this.element.find('input');\r\n }\r\n if (element) {\r\n element.change();\r\n }\r\n this.element.trigger({\r\n type: 'changeDate',\r\n date: this.getDate()\r\n });\r\n }\r\n },\r\n\r\n showMode: function (dir) {\r\n if (dir) {\r\n var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir));\r\n if (newViewMode >= this.minView && newViewMode <= this.maxView) {\r\n this.element.trigger({\r\n type: 'changeMode',\r\n date: this.viewDate,\r\n oldViewMode: this.viewMode,\r\n newViewMode: newViewMode\r\n });\r\n\r\n this.viewMode = newViewMode;\r\n }\r\n }\r\n /*\r\n vitalets: fixing bug of very special conditions:\r\n jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover.\r\n Method show() does not set display css correctly and datetimepicker is not shown.\r\n Changed to .css('display', 'block') solve the problem.\r\n See https://github.com/vitalets/x-editable/issues/37\r\n\r\n In jquery 1.7.2+ everything works fine.\r\n */\r\n //this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show();\r\n this.picker.find('>div').hide().filter('.datetimepicker-' + DPGlobal.modes[this.viewMode].clsName).css('display', 'block');\r\n this.updateNavArrows();\r\n },\r\n\r\n reset: function (e) {\r\n this._setDate(null, 'date');\r\n },\r\n\r\n convertViewModeText: function (viewMode) {\r\n switch (viewMode) {\r\n case 4:\r\n return 'decade';\r\n case 3:\r\n return 'year';\r\n case 2:\r\n return 'month';\r\n case 1:\r\n return 'day';\r\n case 0:\r\n return 'hour';\r\n }\r\n }\r\n };\r\n\r\n var old = $.fn.datetimepicker;\r\n $.fn.datetimepicker = function (option) {\r\n var args = Array.apply(null, arguments);\r\n args.shift();\r\n var internal_return;\r\n this.each(function () {\r\n var $this = $(this),\r\n data = $this.data('datetimepicker'),\r\n options = typeof option == 'object' && option;\r\n if (!data) {\r\n $this.data('datetimepicker', (data = new Datetimepicker(this, $.extend({}, $.fn.datetimepicker.defaults, options))));\r\n }\r\n if (typeof option == 'string' && typeof data[option] == 'function') {\r\n internal_return = data[option].apply(data, args);\r\n if (internal_return !== undefined) {\r\n return false;\r\n }\r\n }\r\n });\r\n if (internal_return !== undefined)\r\n return internal_return;\r\n else\r\n return this;\r\n };\r\n\r\n $.fn.datetimepicker.defaults = {\r\n };\r\n $.fn.datetimepicker.Constructor = Datetimepicker;\r\n var dates = $.fn.datetimepicker.dates = {\r\n en: {\r\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],\r\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\r\n daysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'],\r\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n meridiem: ['am', 'pm'],\r\n suffix: ['st', 'nd', 'rd', 'th'],\r\n today: 'Today',\r\n clear: 'Clear'\r\n },\r\n de: {\r\n days: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\", \"Sonntag\"],\r\n daysShort: [\"Son\", \"Mon\", \"Die\", \"Mit\", \"Don\", \"Fre\", \"Sam\", \"Son\"],\r\n daysMin: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\", \"So\"],\r\n months: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\r\n monthsShort: [\"Jan\", \"Feb\", \"Mär\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"],\r\n today: \"Heute\",\r\n suffix: [],\r\n meridiem: [],\r\n weekStart: 1,\r\n format: \"dd.mm.yyyy\"\r\n },\r\n it: {\r\n days: [\"Domenica\", \"Lunedi\", \"Martedi\", \"Mercoledi\", \"Giovedi\", \"Venerdi\", \"Sabato\", \"Domenica\"],\r\n daysShort: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\", \"Dom\"],\r\n daysMin: [\"Do\", \"Lu\", \"Ma\", \"Me\", \"Gi\", \"Ve\", \"Sa\", \"Do\"],\r\n months: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\r\n monthsShort: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"],\r\n today: \"Oggi\",\r\n suffix: [],\r\n meridiem: [],\r\n weekStart: 1,\r\n format: \"dd/mm/yyyy hh:ii:ss\"\r\n },\r\n fr: {\r\n days: [\"Dimanche\", \"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\", \"Dimanche\"],\r\n daysShort: [\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\", \"Dim\"],\r\n daysMin: [\"D\", \"L\", \"Ma\", \"Me\", \"J\", \"V\", \"S\", \"D\"],\r\n months: [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"],\r\n monthsShort: [\"Jan\", \"Fev\", \"Mar\", \"Avr\", \"Mai\", \"Jui\", \"Jul\", \"Aou\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n today: \"Aujourd'hui\",\r\n suffix: [],\r\n meridiem: [],\r\n weekStart: 1,\r\n format: \"dd/mm/yyyy hh:ii\"\r\n }\r\n };\r\n\r\n var DPGlobal = {\r\n modes: [\r\n {\r\n clsName: 'minutes',\r\n navFnc: 'Hours',\r\n navStep: 1\r\n },\r\n {\r\n clsName: 'hours',\r\n navFnc: 'Date',\r\n navStep: 1\r\n },\r\n {\r\n clsName: 'days',\r\n navFnc: 'Month',\r\n navStep: 1\r\n },\r\n {\r\n clsName: 'months',\r\n navFnc: 'FullYear',\r\n navStep: 1\r\n },\r\n {\r\n clsName: 'years',\r\n navFnc: 'FullYear',\r\n navStep: 10\r\n }\r\n ],\r\n isLeapYear: function (year) {\r\n return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))\r\n },\r\n getDaysInMonth: function (year, month) {\r\n return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]\r\n },\r\n getDefaultFormat: function (type, field) {\r\n if (type == 'standard') {\r\n if (field == 'input')\r\n return 'yyyy-mm-dd hh:ii';\r\n else\r\n return 'yyyy-mm-dd hh:ii:ss';\r\n } else if (type == 'php') {\r\n if (field == 'input')\r\n return 'Y-m-d H:i';\r\n else\r\n return 'Y-m-d H:i:s';\r\n } else {\r\n throw new Error('Invalid format type.');\r\n }\r\n },\r\n validParts: function (type) {\r\n if (type == 'standard') {\r\n return /t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g;\r\n } else if (type == 'php') {\r\n return /[dDjlNwzFmMnStyYaABgGhHis]/g;\r\n } else {\r\n throw new Error('Invalid format type.');\r\n }\r\n },\r\n nonpunctuation: /[^ -\\/:-@\\[-`{-~\\t\\n\\rTZ]+/g,\r\n parseFormat: function (format, type) {\r\n // IE treats \\0 as a string end in inputs (truncating the value),\r\n // so it's a bad format delimiter, anyway\r\n var separators = format.replace(this.validParts(type), '\\0').split('\\0'),\r\n parts = format.match(this.validParts(type));\r\n if (!separators || !separators.length || !parts || parts.length == 0) {\r\n throw new Error('Invalid date format.');\r\n }\r\n return {separators: separators, parts: parts};\r\n },\r\n parseDate: function (date, format, language, type, timezone) {\r\n if (date instanceof Date) {\r\n var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000);\r\n dateUTC.setMilliseconds(0);\r\n return dateUTC;\r\n }\r\n if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}$/.test(date)) {\r\n format = this.parseFormat('yyyy-mm-dd', type);\r\n }\r\n if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}[T ]\\d{1,2}\\:\\d{1,2}$/.test(date)) {\r\n format = this.parseFormat('yyyy-mm-dd hh:ii', type);\r\n }\r\n if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}[T ]\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}[Z]{0,1}$/.test(date)) {\r\n format = this.parseFormat('yyyy-mm-dd hh:ii:ss', type);\r\n }\r\n if (/^[-+]\\d+[dmwy]([\\s,]+[-+]\\d+[dmwy])*$/.test(date)) {\r\n var part_re = /([-+]\\d+)([dmwy])/,\r\n parts = date.match(/([-+]\\d+)([dmwy])/g),\r\n part, dir;\r\n date = new Date();\r\n for (var i = 0; i < parts.length; i++) {\r\n part = part_re.exec(parts[i]);\r\n dir = parseInt(part[1]);\r\n switch (part[2]) {\r\n case 'd':\r\n date.setUTCDate(date.getUTCDate() + dir);\r\n break;\r\n case 'm':\r\n date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir);\r\n break;\r\n case 'w':\r\n date.setUTCDate(date.getUTCDate() + dir * 7);\r\n break;\r\n case 'y':\r\n date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir);\r\n break;\r\n }\r\n }\r\n return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), 0);\r\n }\r\n var parts = date && date.toString().match(this.nonpunctuation) || [],\r\n date = new Date(0, 0, 0, 0, 0, 0, 0),\r\n parsed = {},\r\n setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'D', 'DD', 'd', 'dd', 'H', 'HH', 'p', 'P', 'z', 'Z'],\r\n setters_map = {\r\n hh: function (d, v) {\r\n return d.setUTCHours(v);\r\n },\r\n h: function (d, v) {\r\n return d.setUTCHours(v);\r\n },\r\n HH: function (d, v) {\r\n return d.setUTCHours(v == 12 ? 0 : v);\r\n },\r\n H: function (d, v) {\r\n return d.setUTCHours(v == 12 ? 0 : v);\r\n },\r\n ii: function (d, v) {\r\n return d.setUTCMinutes(v);\r\n },\r\n i: function (d, v) {\r\n return d.setUTCMinutes(v);\r\n },\r\n ss: function (d, v) {\r\n return d.setUTCSeconds(v);\r\n },\r\n s: function (d, v) {\r\n return d.setUTCSeconds(v);\r\n },\r\n yyyy: function (d, v) {\r\n return d.setUTCFullYear(v);\r\n },\r\n yy: function (d, v) {\r\n return d.setUTCFullYear(2000 + v);\r\n },\r\n m: function (d, v) {\r\n v -= 1;\r\n while (v < 0) v += 12;\r\n v %= 12;\r\n d.setUTCMonth(v);\r\n while (d.getUTCMonth() != v)\r\n if (isNaN(d.getUTCMonth()))\r\n return d;\r\n else\r\n d.setUTCDate(d.getUTCDate() - 1);\r\n return d;\r\n },\r\n d: function (d, v) {\r\n return d.setUTCDate(v);\r\n },\r\n p: function (d, v) {\r\n return d.setUTCHours(v == 1 ? d.getUTCHours() + 12 : d.getUTCHours());\r\n },\r\n z: function () {\r\n return timezone\r\n }\r\n },\r\n val, filtered, part;\r\n setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\r\n setters_map['dd'] = setters_map['d'];\r\n setters_map['P'] = setters_map['p'];\r\n setters_map['Z'] = setters_map['z'];\r\n date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());\r\n if (parts.length == format.parts.length) {\r\n for (var i = 0, cnt = format.parts.length; i < cnt; i++) {\r\n val = parseInt(parts[i], 10);\r\n part = format.parts[i];\r\n if (isNaN(val)) {\r\n switch (part) {\r\n case 'MM':\r\n filtered = $(dates[language].months).filter(function () {\r\n var m = this.slice(0, parts[i].length),\r\n p = parts[i].slice(0, m.length);\r\n return m == p;\r\n });\r\n val = $.inArray(filtered[0], dates[language].months) + 1;\r\n break;\r\n case 'M':\r\n filtered = $(dates[language].monthsShort).filter(function () {\r\n var m = this.slice(0, parts[i].length),\r\n p = parts[i].slice(0, m.length);\r\n return m.toLowerCase() == p.toLowerCase();\r\n });\r\n val = $.inArray(filtered[0], dates[language].monthsShort) + 1;\r\n break;\r\n case 'p':\r\n case 'P':\r\n val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem);\r\n break;\r\n case 'z':\r\n case 'Z':\r\n timezone;\r\n break;\r\n\r\n }\r\n }\r\n parsed[part] = val;\r\n }\r\n for (var i = 0, s; i < setters_order.length; i++) {\r\n s = setters_order[i];\r\n if (s in parsed && !isNaN(parsed[s]))\r\n setters_map[s](date, parsed[s])\r\n }\r\n }\r\n return date;\r\n },\r\n formatDate: function (date, format, language, type, timezone) {\r\n if (date == null) {\r\n return '';\r\n }\r\n var val;\r\n if (type == 'standard') {\r\n val = {\r\n t: date.getTime(),\r\n // year\r\n yy: date.getUTCFullYear().toString().substring(2),\r\n yyyy: date.getUTCFullYear(),\r\n // month\r\n m: date.getUTCMonth() + 1,\r\n M: dates[language].monthsShort[date.getUTCMonth()],\r\n MM: dates[language].months[date.getUTCMonth()],\r\n // day\r\n d: date.getUTCDate(),\r\n D: dates[language].daysShort[date.getUTCDay()],\r\n DD: dates[language].days[date.getUTCDay()],\r\n p: (dates[language].meridiem.length == 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),\r\n // hour\r\n h: date.getUTCHours(),\r\n // minute\r\n i: date.getUTCMinutes(),\r\n // second\r\n s: date.getUTCSeconds(),\r\n // timezone\r\n z: timezone\r\n };\r\n\r\n if (dates[language].meridiem.length == 2) {\r\n val.H = (val.h % 12 == 0 ? 12 : val.h % 12);\r\n }\r\n else {\r\n val.H = val.h;\r\n }\r\n val.HH = (val.H < 10 ? '0' : '') + val.H;\r\n val.P = val.p.toUpperCase();\r\n val.Z = val.z;\r\n val.hh = (val.h < 10 ? '0' : '') + val.h;\r\n val.ii = (val.i < 10 ? '0' : '') + val.i;\r\n val.ss = (val.s < 10 ? '0' : '') + val.s;\r\n val.dd = (val.d < 10 ? '0' : '') + val.d;\r\n val.mm = (val.m < 10 ? '0' : '') + val.m;\r\n } else if (type == 'php') {\r\n // php format\r\n val = {\r\n // year\r\n y: date.getUTCFullYear().toString().substring(2),\r\n Y: date.getUTCFullYear(),\r\n // month\r\n F: dates[language].months[date.getUTCMonth()],\r\n M: dates[language].monthsShort[date.getUTCMonth()],\r\n n: date.getUTCMonth() + 1,\r\n t: DPGlobal.getDaysInMonth(date.getUTCFullYear(), date.getUTCMonth()),\r\n // day\r\n j: date.getUTCDate(),\r\n l: dates[language].days[date.getUTCDay()],\r\n D: dates[language].daysShort[date.getUTCDay()],\r\n w: date.getUTCDay(), // 0 -> 6\r\n N: (date.getUTCDay() == 0 ? 7 : date.getUTCDay()), // 1 -> 7\r\n S: (date.getUTCDate() % 10 <= dates[language].suffix.length ? dates[language].suffix[date.getUTCDate() % 10 - 1] : ''),\r\n // hour\r\n a: (dates[language].meridiem.length == 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),\r\n g: (date.getUTCHours() % 12 == 0 ? 12 : date.getUTCHours() % 12),\r\n G: date.getUTCHours(),\r\n // minute\r\n i: date.getUTCMinutes(),\r\n // second\r\n s: date.getUTCSeconds()\r\n };\r\n val.m = (val.n < 10 ? '0' : '') + val.n;\r\n val.d = (val.j < 10 ? '0' : '') + val.j;\r\n val.A = val.a.toString().toUpperCase();\r\n val.h = (val.g < 10 ? '0' : '') + val.g;\r\n val.H = (val.G < 10 ? '0' : '') + val.G;\r\n val.i = (val.i < 10 ? '0' : '') + val.i;\r\n val.s = (val.s < 10 ? '0' : '') + val.s;\r\n } else {\r\n throw new Error('Invalid format type.');\r\n }\r\n var date = [],\r\n seps = $.extend([], format.separators);\r\n for (var i = 0, cnt = format.parts.length; i < cnt; i++) {\r\n if (seps.length) {\r\n date.push(seps.shift());\r\n }\r\n date.push(val[format.parts[i]]);\r\n }\r\n if (seps.length) {\r\n date.push(seps.shift());\r\n }\r\n return date.join('');\r\n },\r\n convertViewMode: function (viewMode) {\r\n switch (viewMode) {\r\n case 4:\r\n case 'decade':\r\n viewMode = 4;\r\n break;\r\n case 3:\r\n case 'year':\r\n viewMode = 3;\r\n break;\r\n case 2:\r\n case 'month':\r\n viewMode = 2;\r\n break;\r\n case 1:\r\n case 'day':\r\n viewMode = 1;\r\n break;\r\n case 0:\r\n case 'hour':\r\n viewMode = 0;\r\n break;\r\n }\r\n\r\n return viewMode;\r\n },\r\n headTemplate: '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '',\r\n headTemplateV3: '' +\r\n '' +\r\n ' ' +\r\n '' +\r\n ' ' +\r\n '' +\r\n '',\r\n contTemplate: '',\r\n footTemplate: '' + \r\n '' +\r\n '' +\r\n ''\r\n };\r\n DPGlobal.template = '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplate +\r\n DPGlobal.contTemplate +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplate +\r\n DPGlobal.contTemplate +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplate +\r\n '' +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplate +\r\n DPGlobal.contTemplate +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplate +\r\n DPGlobal.contTemplate +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
';\r\n DPGlobal.templateV3 = '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplateV3 +\r\n DPGlobal.contTemplate +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplateV3 +\r\n DPGlobal.contTemplate +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplateV3 +\r\n '' +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplateV3 +\r\n DPGlobal.contTemplate +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n DPGlobal.headTemplateV3 +\r\n DPGlobal.contTemplate +\r\n DPGlobal.footTemplate +\r\n '
' +\r\n '
' +\r\n '
';\r\n $.fn.datetimepicker.DPGlobal = DPGlobal;\r\n\r\n /* DATETIMEPICKER NO CONFLICT\r\n * =================== */\r\n\r\n $.fn.datetimepicker.noConflict = function () {\r\n $.fn.datetimepicker = old;\r\n return this;\r\n };\r\n\r\n /* DATETIMEPICKER DATA-API\r\n * ================== */\r\n\r\n $(document).on(\r\n 'focus.datetimepicker.data-api click.datetimepicker.data-api',\r\n '[data-provide=\"datetimepicker\"]',\r\n function (e) {\r\n var $this = $(this);\r\n if ($this.data('datetimepicker')) return;\r\n e.preventDefault();\r\n // component click requires us to explicitly show it\r\n $this.datetimepicker('show');\r\n }\r\n );\r\n $(function () {\r\n $('[data-provide=\"datetimepicker-inline\"]').datetimepicker();\r\n });\r\n\r\n}));\r\n","angular.module('colorpicker.module', [])\n .factory('Helper', function () {\n 'use strict';\n return {\n closestSlider: function (elem) {\n var matchesSelector = elem.matches || elem.webkitMatchesSelector || elem.mozMatchesSelector || elem.msMatchesSelector;\n if (matchesSelector.bind(elem)('I')) {\n return elem.parentNode;\n }\n return elem;\n },\n getOffset: function (elem, fixedPosition) {\n var\n scrollX = 0,\n scrollY = 0,\n rect = elem.getBoundingClientRect();\n while (elem && !isNaN(elem.offsetLeft) && !isNaN(elem.offsetTop)) {\n if (!fixedPosition && elem.tagName === 'BODY') {\n scrollX += document.documentElement.scrollLeft || elem.scrollLeft;\n scrollY += document.documentElement.scrollTop || elem.scrollTop;\n } else {\n scrollX += elem.scrollLeft;\n scrollY += elem.scrollTop;\n }\n elem = elem.offsetParent;\n }\n return {\n top: rect.top + window.pageYOffset,\n left: rect.left + window.pageXOffset,\n scrollX: scrollX,\n scrollY: scrollY\n };\n },\n // a set of RE's that can match strings and generate color tuples. https://github.com/jquery/jquery-color/\n stringParsers: [\n {\n re: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n parse: function (execResult) {\n return [\n execResult[1],\n execResult[2],\n execResult[3],\n execResult[4]\n ];\n }\n },\n {\n re: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n parse: function (execResult) {\n return [\n 2.55 * execResult[1],\n 2.55 * execResult[2],\n 2.55 * execResult[3],\n execResult[4]\n ];\n }\n },\n {\n re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,\n parse: function (execResult) {\n return [\n parseInt(execResult[1], 16),\n parseInt(execResult[2], 16),\n parseInt(execResult[3], 16)\n ];\n }\n },\n {\n re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,\n parse: function (execResult) {\n return [\n parseInt(execResult[1] + execResult[1], 16),\n parseInt(execResult[2] + execResult[2], 16),\n parseInt(execResult[3] + execResult[3], 16)\n ];\n }\n }\n ]\n };\n })\n .factory('Color', ['Helper', function (Helper) {\n 'use strict';\n return {\n value: {\n h: 1,\n s: 1,\n b: 1,\n a: 1\n },\n // translate a format from Color object to a string\n 'rgb': function () {\n var rgb = this.toRGB();\n return 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')';\n },\n 'rgba': function () {\n var rgb = this.toRGB();\n return 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + rgb.a + ')';\n },\n 'hex': function () {\n return this.toHex();\n },\n\n // HSBtoRGB from RaphaelJS\n RGBtoHSB: function (r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n var H, S, V, C;\n V = Math.max(r, g, b);\n C = V - Math.min(r, g, b);\n H = (C === 0 ? null :\n V === r ? (g - b) / C :\n V === g ? (b - r) / C + 2 :\n (r - g) / C + 4\n );\n H = ((H + 360) % 6) * 60 / 360;\n S = C === 0 ? 0 : C / V;\n return {h: H || 1, s: S, b: V, a: a || 1};\n },\n\n //parse a string to HSB\n setColor: function (val) {\n val = (val) ? val.toLowerCase() : val;\n for (var key in Helper.stringParsers) {\n if (Helper.stringParsers.hasOwnProperty(key)) {\n var parser = Helper.stringParsers[key];\n var match = parser.re.exec(val),\n values = match && parser.parse(match);\n if (values) {\n this.value = this.RGBtoHSB.apply(null, values);\n return false;\n }\n }\n }\n },\n\n setHue: function (h) {\n this.value.h = 1 - h;\n },\n\n setSaturation: function (s) {\n this.value.s = s;\n },\n\n setLightness: function (b) {\n this.value.b = 1 - b;\n },\n\n setAlpha: function (a) {\n this.value.a = parseInt((1 - a) * 100, 10) / 100;\n },\n\n // HSBtoRGB from RaphaelJS\n // https://github.com/DmitryBaranovskiy/raphael/\n toRGB: function (h, s, b, a) {\n if (!h) {\n h = this.value.h;\n s = this.value.s;\n b = this.value.b;\n }\n h *= 360;\n var R, G, B, X, C;\n h = (h % 360) / 60;\n C = b * s;\n X = C * (1 - Math.abs(h % 2 - 1));\n R = G = B = b - C;\n\n h = ~~h;\n R += [C, X, 0, 0, X, C][h];\n G += [X, C, C, X, 0, 0][h];\n B += [0, 0, X, C, C, X][h];\n return {\n r: Math.round(R * 255),\n g: Math.round(G * 255),\n b: Math.round(B * 255),\n a: a || this.value.a\n };\n },\n\n toHex: function (h, s, b, a) {\n var rgb = this.toRGB(h, s, b, a);\n return '#' + ((1 << 24) | (parseInt(rgb.r, 10) << 16) | (parseInt(rgb.g, 10) << 8) | parseInt(rgb.b, 10)).toString(16).substr(1);\n }\n };\n }])\n .factory('Slider', ['Helper', function (Helper) {\n 'use strict';\n var\n slider = {\n maxLeft: 0,\n maxTop: 0,\n callLeft: null,\n callTop: null,\n knob: {\n top: 0,\n left: 0\n }\n },\n pointer = {};\n\n return {\n getSlider: function() {\n return slider;\n },\n getLeftPosition: function(event) {\n return Math.max(0, Math.min(slider.maxLeft, slider.left + ((event.pageX || pointer.left) - pointer.left)));\n },\n getTopPosition: function(event) {\n return Math.max(0, Math.min(slider.maxTop, slider.top + ((event.pageY || pointer.top) - pointer.top)));\n },\n setSlider: function (event, fixedPosition) {\n var\n target = Helper.closestSlider(event.target),\n targetOffset = Helper.getOffset(target, fixedPosition),\n rect = target.getBoundingClientRect(),\n offsetX = event.clientX - rect.left,\n offsetY = event.clientY - rect.top;\n\n slider.knob = target.children[0].style;\n slider.left = event.pageX - targetOffset.left - window.pageXOffset + targetOffset.scrollX;\n slider.top = event.pageY - targetOffset.top - window.pageYOffset + targetOffset.scrollY;\n\n pointer = {\n left: event.pageX - (offsetX - slider.left),\n top: event.pageY - (offsetY - slider.top)\n };\n },\n setSaturation: function(event, fixedPosition, componentSize) {\n slider = {\n maxLeft: componentSize,\n maxTop: componentSize,\n callLeft: 'setSaturation',\n callTop: 'setLightness'\n };\n this.setSlider(event, fixedPosition);\n },\n setHue: function(event, fixedPosition, componentSize) {\n slider = {\n maxLeft: 0,\n maxTop: componentSize,\n callLeft: false,\n callTop: 'setHue'\n };\n this.setSlider(event, fixedPosition);\n },\n setAlpha: function(event, fixedPosition, componentSize) {\n slider = {\n maxLeft: 0,\n maxTop: componentSize,\n callLeft: false,\n callTop: 'setAlpha'\n };\n this.setSlider(event, fixedPosition);\n },\n setKnob: function(top, left) {\n slider.knob.top = top + 'px';\n slider.knob.left = left + 'px';\n }\n };\n }])\n .directive('colorpicker', ['$document', '$compile', 'Color', 'Slider', 'Helper', function ($document, $compile, Color, Slider, Helper) {\n 'use strict';\n return {\n require: '?ngModel',\n restrict: 'A',\n link: function ($scope, elem, attrs, ngModel) {\n var\n thisFormat = attrs.colorpicker ? attrs.colorpicker : 'hex',\n position = angular.isDefined(attrs.colorpickerPosition) ? attrs.colorpickerPosition : 'bottom',\n inline = angular.isDefined(attrs.colorpickerInline) ? attrs.colorpickerInline : false,\n fixedPosition = angular.isDefined(attrs.colorpickerFixedPosition) ? attrs.colorpickerFixedPosition : false,\n target = angular.isDefined(attrs.colorpickerParent) ? elem.parent() : angular.element(document.body),\n withInput = angular.isDefined(attrs.colorpickerWithInput) ? attrs.colorpickerWithInput : false,\n componentSize = angular.isDefined(attrs.colorpickerSize) ? attrs.colorpickerSize : 100,\n componentSizePx = componentSize + 'px',\n inputTemplate = withInput ? '' : '',\n closeButton = !inline ? '' : '',\n template =\n '
' +\n '
' +\n '' +\n '' +\n '' +\n '' +\n inputTemplate +\n closeButton +\n '
' +\n '
',\n colorpickerTemplate = angular.element(template),\n pickerColor = Color,\n colorpickerValue = {\n h: 1,\n s: 0,\n b: 1,\n a: 1\n },\n sliderAlpha,\n sliderHue = colorpickerTemplate.find('colorpicker-hue'),\n sliderSaturation = colorpickerTemplate.find('colorpicker-saturation'),\n colorpickerPreview = colorpickerTemplate.find('colorpicker-preview'),\n pickerColorPointers = colorpickerTemplate.find('i'),\n componentWidthWithToolbars = parseInt(componentSize) + 29 + (thisFormat === 'rgba' ? 15 : 0),\n componentHeightWithToolbars = parseInt(componentSize) + 55;\n\n $compile(colorpickerTemplate)($scope);\n colorpickerTemplate.css('min-width', componentWidthWithToolbars + 'px');\n sliderSaturation.css({\n 'width' : componentSizePx,\n 'height' : componentSizePx\n });\n sliderHue.css('height', componentSizePx);\n\n if (withInput) {\n var pickerColorInput = colorpickerTemplate.find('input');\n pickerColorInput.css('width', componentSizePx);\n pickerColorInput\n .on('mousedown', function(event) {\n event.stopPropagation();\n })\n .on('keyup', function() {\n var newColor = this.value;\n elem.val(newColor);\n if (ngModel && ngModel.$modelValue !== newColor) {\n $scope.$apply(ngModel.$setViewValue(newColor));\n update(true);\n }\n });\n }\n\n function bindMouseEvents() {\n $document.on('mousemove', mousemove);\n $document.on('mouseup', mouseup);\n }\n\n if (thisFormat === 'rgba') {\n colorpickerTemplate.addClass('alpha');\n sliderAlpha = colorpickerTemplate.find('colorpicker-alpha');\n sliderAlpha.css('height', componentSizePx);\n sliderAlpha\n .on('click', function(event) {\n Slider.setAlpha(event, fixedPosition, componentSize);\n mousemove(event);\n })\n .on('mousedown', function(event) {\n Slider.setAlpha(event, fixedPosition, componentSize);\n bindMouseEvents();\n })\n .on('mouseup', function(event){\n emitEvent('colorpicker-selected-alpha');\n });\n }\n\n sliderHue\n .on('click', function(event) {\n Slider.setHue(event, fixedPosition, componentSize);\n mousemove(event);\n })\n .on('mousedown', function(event) {\n Slider.setHue(event, fixedPosition, componentSize);\n bindMouseEvents();\n })\n .on('mouseup', function(event){\n emitEvent('colorpicker-selected-hue');\n });\n\n sliderSaturation\n .on('click', function(event) {\n Slider.setSaturation(event, fixedPosition, componentSize);\n mousemove(event);\n if (angular.isDefined(attrs.colorpickerCloseOnSelect)) {\n hideColorpickerTemplate();\n }\n })\n .on('mousedown', function(event) {\n Slider.setSaturation(event, fixedPosition, componentSize);\n bindMouseEvents();\n })\n .on('mouseup', function(event){\n emitEvent('colorpicker-selected-saturation');\n });\n\n if (fixedPosition) {\n colorpickerTemplate.addClass('colorpicker-fixed-position');\n }\n\n colorpickerTemplate.addClass('colorpicker-position-' + position);\n if (inline === 'true') {\n colorpickerTemplate.addClass('colorpicker-inline');\n }\n\n target.append(colorpickerTemplate);\n\n if (ngModel) {\n ngModel.$render = function () {\n elem.val(ngModel.$viewValue);\n\n update();\n };\n }\n\n elem.on('blur keyup change', function() {\n update();\n });\n\n elem.on('$destroy', function() {\n colorpickerTemplate.remove();\n });\n\n function previewColor() {\n try {\n colorpickerPreview.css('backgroundColor', pickerColor[thisFormat]());\n } catch (e) {\n colorpickerPreview.css('backgroundColor', pickerColor.toHex());\n }\n sliderSaturation.css('backgroundColor', pickerColor.toHex(pickerColor.value.h, 1, 1, 1));\n if (thisFormat === 'rgba') {\n sliderAlpha.css.backgroundColor = pickerColor.toHex();\n }\n }\n\n function mousemove(event) {\n var\n left = Slider.getLeftPosition(event),\n top = Slider.getTopPosition(event),\n slider = Slider.getSlider();\n\n Slider.setKnob(top, left);\n\n if (slider.callLeft) {\n pickerColor[slider.callLeft].call(pickerColor, left / componentSize);\n }\n if (slider.callTop) {\n pickerColor[slider.callTop].call(pickerColor, top / componentSize);\n }\n previewColor();\n var newColor = pickerColor[thisFormat]();\n elem.val(newColor);\n if (ngModel) {\n $scope.$apply(ngModel.$setViewValue(newColor));\n }\n if (withInput) {\n pickerColorInput.val(newColor);\n }\n return false;\n }\n\n function mouseup() {\n emitEvent('colorpicker-selected');\n $document.off('mousemove', mousemove);\n $document.off('mouseup', mouseup);\n }\n\n function update(omitInnerInput) {\n pickerColor.value = colorpickerValue;\n pickerColor.setColor(elem.val());\n if (withInput && !omitInnerInput) {\n pickerColorInput.val(elem.val());\n }\n pickerColorPointers.eq(0).css({\n left: pickerColor.value.s * componentSize + 'px',\n top: componentSize - pickerColor.value.b * componentSize + 'px'\n });\n pickerColorPointers.eq(1).css('top', componentSize * (1 - pickerColor.value.h) + 'px');\n pickerColorPointers.eq(2).css('top', componentSize * (1 - pickerColor.value.a) + 'px');\n colorpickerValue = pickerColor.value;\n previewColor();\n }\n\n function getColorpickerTemplatePosition() {\n var\n positionValue,\n positionOffset = Helper.getOffset(elem[0]),\n additionalSpaceBetweenElements = 2;\n\n if(angular.isDefined(attrs.colorpickerParent)) {\n positionOffset.left = 0;\n positionOffset.top = 0;\n }\n\n if (position === 'top') {\n positionValue = {\n 'top': positionOffset.top - componentHeightWithToolbars - additionalSpaceBetweenElements,\n 'left': positionOffset.left\n };\n } else if (position === 'right') {\n positionValue = {\n 'top': positionOffset.top,\n 'left': positionOffset.left + elem[0].offsetWidth + additionalSpaceBetweenElements\n };\n } else if (position === 'bottom') {\n positionValue = {\n 'top': positionOffset.top + elem[0].offsetHeight + additionalSpaceBetweenElements,\n 'left': positionOffset.left\n };\n } else if (position === 'left') {\n positionValue = {\n 'top': positionOffset.top,\n 'left': positionOffset.left - componentWidthWithToolbars - additionalSpaceBetweenElements\n };\n }\n return {\n 'top': positionValue.top + 'px',\n 'left': positionValue.left + 'px'\n };\n }\n\n function documentMousedownHandler() {\n hideColorpickerTemplate();\n }\n\n function showColorpickerTemplate() {\n\n if (!colorpickerTemplate.hasClass('colorpicker-visible')) {\n update();\n colorpickerTemplate\n .addClass('colorpicker-visible')\n .css(getColorpickerTemplatePosition());\n emitEvent('colorpicker-shown');\n\n if (inline === false) {\n // register global mousedown event to hide the colorpicker\n $document.on('mousedown', documentMousedownHandler);\n }\n\n if (attrs.colorpickerIsOpen) {\n $scope[attrs.colorpickerIsOpen] = true;\n if (!$scope.$$phase || !$scope.$root.$$phase) {\n $scope.$digest(); //trigger the watcher to fire\n }\n }\n }\n }\n\n if (inline === false) {\n elem.on('click', showColorpickerTemplate);\n } else {\n showColorpickerTemplate();\n }\n\n colorpickerTemplate.on('mousedown', function (event) {\n event.stopPropagation();\n event.preventDefault();\n });\n\n function emitEvent(name) {\n if (ngModel) {\n $scope.$emit(name, {\n name: attrs.ngModel,\n value: ngModel.$modelValue\n });\n }\n }\n\n function hideColorpickerTemplate() {\n if (colorpickerTemplate.hasClass('colorpicker-visible')) {\n colorpickerTemplate.removeClass('colorpicker-visible');\n emitEvent('colorpicker-closed');\n // unregister the global mousedown event\n $document.off('mousedown', documentMousedownHandler);\n\n if (attrs.colorpickerIsOpen) {\n $scope[attrs.colorpickerIsOpen] = false;\n if (!$scope.$$phase || !$scope.$root.$$phase) {\n $scope.$digest(); //trigger the watcher to fire\n }\n }\n }\n }\n\n colorpickerTemplate.find('button').on('click', function () {\n hideColorpickerTemplate();\n });\n\n if (attrs.colorpickerIsOpen) {\n $scope.$watch(attrs.colorpickerIsOpen, function(shouldBeOpen) {\n\n if (shouldBeOpen === true) {\n showColorpickerTemplate();\n } else if (shouldBeOpen === false) {\n hideColorpickerTemplate();\n }\n\n });\n }\n }\n };\n }]);\n","/**!\r\n * AngularJS file upload/drop directive and service with progress and abort\r\n * @author Danial \r\n * @version 5.0.6\r\n */\r\nvar ngFileUpload = angular.module('ngFileUpload', []);\r\n\r\nngFileUpload.version = '5.0.6';\r\nngFileUpload.service('Upload', ['$http', '$q', '$timeout', function ($http, $q, $timeout) {\r\n function patchXHR(fnName, newFn) {\r\n window.XMLHttpRequest.prototype[fnName] = newFn(window.XMLHttpRequest.prototype[fnName]);\r\n }\r\n\r\n if (window.XMLHttpRequest && !window.XMLHttpRequest.__isFileAPIShim) {\r\n patchXHR('setRequestHeader', function (orig) {\r\n return function (header, value) {\r\n if (header === '__setXHR_') {\r\n var val = value(this);\r\n // fix for angular < 1.2.0\r\n if (val instanceof Function) {\r\n val(this);\r\n }\r\n } else {\r\n orig.apply(this, arguments);\r\n }\r\n };\r\n });\r\n }\r\n\r\n function sendHttp(config) {\r\n config.method = config.method || 'POST';\r\n config.headers = config.headers || {};\r\n\r\n var deferred = $q.defer();\r\n var promise = deferred.promise;\r\n\r\n config.headers.__setXHR_ = function () {\r\n return function (xhr) {\r\n if (!xhr) return;\r\n config.__XHR = xhr;\r\n if (config.xhrFn) config.xhrFn(xhr);\r\n xhr.upload.addEventListener('progress', function (e) {\r\n e.config = config;\r\n if (deferred.notify) {\r\n deferred.notify(e);\r\n } else if (promise.progressFunc) {\r\n $timeout(function () {\r\n promise.progressFunc(e);\r\n });\r\n }\r\n }, false);\r\n //fix for firefox not firing upload progress end, also IE8-9\r\n xhr.upload.addEventListener('load', function (e) {\r\n if (e.lengthComputable) {\r\n e.config = config;\r\n if (deferred.notify) {\r\n deferred.notify(e);\r\n } else if (promise.progressFunc) {\r\n $timeout(function () {\r\n promise.progressFunc(e);\r\n });\r\n }\r\n }\r\n }, false);\r\n };\r\n };\r\n\r\n $http(config).then(function (r) {\r\n deferred.resolve(r);\r\n }, function (e) {\r\n deferred.reject(e);\r\n }, function (n) {\r\n deferred.notify(n);\r\n });\r\n\r\n promise.success = function (fn) {\r\n promise.then(function (response) {\r\n fn(response.data, response.status, response.headers, config);\r\n });\r\n return promise;\r\n };\r\n\r\n promise.error = function (fn) {\r\n promise.then(null, function (response) {\r\n fn(response.data, response.status, response.headers, config);\r\n });\r\n return promise;\r\n };\r\n\r\n promise.progress = function (fn) {\r\n promise.progressFunc = fn;\r\n promise.then(null, null, function (update) {\r\n fn(update);\r\n });\r\n return promise;\r\n };\r\n promise.abort = function () {\r\n if (config.__XHR) {\r\n $timeout(function () {\r\n config.__XHR.abort();\r\n });\r\n }\r\n return promise;\r\n };\r\n promise.xhr = function (fn) {\r\n config.xhrFn = (function (origXhrFn) {\r\n return function () {\r\n if (origXhrFn) origXhrFn.apply(promise, arguments);\r\n fn.apply(promise, arguments);\r\n };\r\n })(config.xhrFn);\r\n return promise;\r\n };\r\n\r\n return promise;\r\n }\r\n\r\n this.upload = function (config) {\r\n function addFieldToFormData(formData, val, key) {\r\n if (val !== undefined) {\r\n if (angular.isDate(val)) {\r\n val = val.toISOString();\r\n }\r\n if (angular.isString(val)) {\r\n formData.append(key, val);\r\n } else if (config.sendFieldsAs === 'form') {\r\n if (angular.isObject(val)) {\r\n for (var k in val) {\r\n if (val.hasOwnProperty(k)) {\r\n addFieldToFormData(formData, val[k], key + '[' + k + ']');\r\n }\r\n }\r\n } else {\r\n formData.append(key, val);\r\n }\r\n } else {\r\n val = angular.isString(val) ? val : JSON.stringify(val);\r\n if (config.sendFieldsAs === 'json-blob') {\r\n formData.append(key, new Blob([val], {type: 'application/json'}));\r\n } else {\r\n formData.append(key, val);\r\n }\r\n }\r\n }\r\n }\r\n\r\n config.headers = config.headers || {};\r\n config.headers['Content-Type'] = undefined;\r\n config.transformRequest = config.transformRequest ?\r\n (angular.isArray(config.transformRequest) ?\r\n config.transformRequest : [config.transformRequest]) : [];\r\n config.transformRequest.push(function (data) {\r\n var formData = new FormData();\r\n var allFields = {};\r\n var key;\r\n for (key in config.fields) {\r\n if (config.fields.hasOwnProperty(key)) {\r\n allFields[key] = config.fields[key];\r\n }\r\n }\r\n if (data) allFields.data = data;\r\n for (key in allFields) {\r\n if (allFields.hasOwnProperty(key)) {\r\n var val = allFields[key];\r\n if (config.formDataAppender) {\r\n config.formDataAppender(formData, key, val);\r\n } else {\r\n addFieldToFormData(formData, val, key);\r\n }\r\n }\r\n }\r\n\r\n if (config.file != null) {\r\n var fileFormName = config.fileFormDataName || 'file';\r\n\r\n if (angular.isArray(config.file)) {\r\n var isFileFormNameString = angular.isString(fileFormName);\r\n for (var i = 0; i < config.file.length; i++) {\r\n formData.append(isFileFormNameString ? fileFormName : fileFormName[i], config.file[i],\r\n (config.fileName && config.fileName[i]) || config.file[i].name);\r\n }\r\n } else {\r\n formData.append(fileFormName, config.file, config.fileName || config.file.name);\r\n }\r\n }\r\n return formData;\r\n });\r\n\r\n return sendHttp(config);\r\n };\r\n\r\n this.http = function (config) {\r\n config.transformRequest = config.transformRequest || function (data) {\r\n if ((window.ArrayBuffer && data instanceof window.ArrayBuffer) || data instanceof Blob) {\r\n return data;\r\n }\r\n return $http.defaults.transformRequest[0](arguments);\r\n };\r\n return sendHttp(config);\r\n };\r\n}\r\n\r\n]);\r\n\r\n(function () {\r\n ngFileUpload.directive('ngfSelect', ['$parse', '$timeout', '$compile',\r\n function ($parse, $timeout, $compile) {\r\n return {\r\n restrict: 'AEC',\r\n require: '?ngModel',\r\n link: function (scope, elem, attr, ngModel) {\r\n linkFileSelect(scope, elem, attr, ngModel, $parse, $timeout, $compile);\r\n }\r\n };\r\n }]);\r\n\r\n function linkFileSelect(scope, elem, attr, ngModel, $parse, $timeout, $compile) {\r\n /** @namespace attr.ngfSelect */\r\n /** @namespace attr.ngfChange */\r\n /** @namespace attr.ngModel */\r\n /** @namespace attr.ngModelRejected */\r\n /** @namespace attr.ngfMultiple */\r\n /** @namespace attr.ngfCapture */\r\n /** @namespace attr.ngfAccept */\r\n /** @namespace attr.ngfMaxSize */\r\n /** @namespace attr.ngfMinSize */\r\n /** @namespace attr.ngfResetOnClick */\r\n /** @namespace attr.ngfResetModelOnClick */\r\n /** @namespace attr.ngfKeep */\r\n /** @namespace attr.ngfKeepDistinct */\r\n\r\n if (elem.attr('__ngf_gen__')) {\r\n return;\r\n }\r\n\r\n scope.$on('$destroy', function () {\r\n if (elem.$$ngfRefElem) elem.$$ngfRefElem.remove();\r\n });\r\n\r\n var disabled = false;\r\n if (attr.ngfSelect.search(/\\W+$files\\W+/) === -1) {\r\n scope.$watch(attr.ngfSelect, function (val) {\r\n disabled = val === false;\r\n });\r\n }\r\n function isInputTypeFile() {\r\n return elem[0].tagName.toLowerCase() === 'input' && attr.type && attr.type.toLowerCase() === 'file';\r\n }\r\n\r\n var isUpdating = false;\r\n\r\n function changeFn(evt) {\r\n if (!isUpdating) {\r\n isUpdating = true;\r\n try {\r\n var fileList = evt.__files_ || (evt.target && evt.target.files);\r\n var files = [], rejFiles = [];\r\n\r\n for (var i = 0; i < fileList.length; i++) {\r\n var file = fileList.item(i);\r\n if (validate(scope, $parse, attr, file, evt)) {\r\n files.push(file);\r\n } else {\r\n rejFiles.push(file);\r\n }\r\n }\r\n updateModel($parse, $timeout, scope, ngModel, attr, attr.ngfChange || attr.ngfSelect, files, rejFiles, evt);\r\n if (files.length === 0) evt.target.value = files;\r\n// if (evt.target && evt.target.getAttribute('__ngf_gen__')) {\r\n// angular.element(evt.target).remove();\r\n// }\r\n } finally {\r\n isUpdating = false;\r\n }\r\n }\r\n }\r\n\r\n function bindAttrToFileInput(fileElem) {\r\n if (attr.ngfMultiple) fileElem.attr('multiple', $parse(attr.ngfMultiple)(scope));\r\n if (attr.ngfCapture) fileElem.attr('capture', $parse(attr.ngfCapture)(scope));\r\n if (attr.accept) fileElem.attr('accept', attr.accept);\r\n for (var i = 0; i < elem[0].attributes.length; i++) {\r\n var attribute = elem[0].attributes[i];\r\n if ((isInputTypeFile() && attribute.name !== 'type') ||\r\n (attribute.name !== 'type' && attribute.name !== 'class' &&\r\n attribute.name !== 'id' && attribute.name !== 'style')) {\r\n fileElem.attr(attribute.name, attribute.value);\r\n }\r\n }\r\n }\r\n\r\n function createFileInput(evt, resetOnClick) {\r\n if (elem.attr('disabled') || disabled) return;\r\n\r\n if (!resetOnClick && (evt || isInputTypeFile())) return elem.$$ngfRefElem || elem;\r\n\r\n var fileElem = angular.element('');\r\n bindAttrToFileInput(fileElem);\r\n\r\n if (isInputTypeFile()) {\r\n elem.replaceWith(fileElem);\r\n elem = fileElem;\r\n fileElem.attr('__ngf_gen__', true);\r\n $compile(elem)(scope);\r\n } else {\r\n fileElem.css('visibility', 'hidden').css('position', 'absolute').css('overflow', 'hidden')\r\n .css('width', '0px').css('height', '0px').css('z-index', '-100000').css('border', 'none')\r\n .css('margin', '0px').css('padding', '0px').attr('tabindex', '-1');\r\n if (elem.$$ngfRefElem) {\r\n elem.$$ngfRefElem.remove();\r\n }\r\n elem.$$ngfRefElem = fileElem;\r\n document.body.appendChild(fileElem[0]);\r\n }\r\n\r\n return fileElem;\r\n }\r\n\r\n function resetModel(evt) {\r\n updateModel($parse, $timeout, scope, ngModel, attr, attr.ngfChange || attr.ngfSelect, [], [], evt, true);\r\n }\r\n\r\n function clickHandler(evt) {\r\n if (evt != null) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n }\r\n var resetOnClick = $parse(attr.ngfResetOnClick)(scope) !== false;\r\n var fileElem = createFileInput(evt, resetOnClick);\r\n\r\n function clickAndAssign(evt) {\r\n if (evt) {\r\n fileElem[0].click();\r\n }\r\n if (isInputTypeFile() || !evt) {\r\n elem.bind('click touchend', clickHandler);\r\n }\r\n }\r\n\r\n if (fileElem) {\r\n if (!evt || resetOnClick) fileElem.bind('change', changeFn);\r\n if (evt && resetOnClick && $parse(attr.ngfResetModelOnClick)(scope) !== false) resetModel(evt);\r\n\r\n // fix for android native browser < 4.4\r\n if (shouldClickLater(navigator.userAgent)) {\r\n setTimeout(function () {\r\n clickAndAssign(evt);\r\n }, 0);\r\n } else {\r\n clickAndAssign(evt);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n if (window.FileAPI && window.FileAPI.ngfFixIE) {\r\n window.FileAPI.ngfFixIE(elem, createFileInput, bindAttrToFileInput, changeFn);\r\n } else {\r\n clickHandler();\r\n //if (!isInputTypeFile()) {\r\n // elem.bind('click touchend', clickHandler);\r\n //}\r\n }\r\n }\r\n\r\n function shouldClickLater(ua) {\r\n // android below 4.4\r\n var m = ua.match(/Android[^\\d]*(\\d+)\\.(\\d+)/);\r\n if (m && m.length > 2) {\r\n return parseInt(m[1]) < 4 || (parseInt(m[1]) === 4 && parseInt(m[2]) < 4);\r\n }\r\n\r\n // safari on windows\r\n return /.*Windows.*Safari.*/.test(ua);\r\n }\r\n\r\n ngFileUpload.validate = function (scope, $parse, attr, file, evt) {\r\n function globStringToRegex(str) {\r\n if (str.length > 2 && str[0] === '/' && str[str.length - 1] === '/') {\r\n return str.substring(1, str.length - 1);\r\n }\r\n var split = str.split(','), result = '';\r\n if (split.length > 1) {\r\n for (var i = 0; i < split.length; i++) {\r\n result += '(' + globStringToRegex(split[i]) + ')';\r\n if (i < split.length - 1) {\r\n result += '|';\r\n }\r\n }\r\n } else {\r\n if (str.indexOf('.') === 0) {\r\n str = '*' + str;\r\n }\r\n result = '^' + str.replace(new RegExp('[.\\\\\\\\+*?\\\\[\\\\^\\\\]$(){}=!<>|:\\\\' + '-]', 'g'), '\\\\$&') + '$';\r\n result = result.replace(/\\\\\\*/g, '.*').replace(/\\\\\\?/g, '.');\r\n }\r\n return result;\r\n }\r\n\r\n var accept = $parse(attr.ngfAccept)(scope, {$file: file, $event: evt});\r\n var fileSizeMax = $parse(attr.ngfMaxSize)(scope, {$file: file, $event: evt}) || 9007199254740991;\r\n var fileSizeMin = $parse(attr.ngfMinSize)(scope, {$file: file, $event: evt}) || -1;\r\n if (accept != null && angular.isString(accept)) {\r\n var regexp = new RegExp(globStringToRegex(accept), 'gi');\r\n accept = (file.type != null && regexp.test(file.type.toLowerCase())) ||\r\n (file.name != null && regexp.test(file.name.toLowerCase()));\r\n }\r\n return (accept == null || accept) && (file.size == null || (file.size < fileSizeMax && file.size > fileSizeMin));\r\n };\r\n\r\n ngFileUpload.updateModel = function ($parse, $timeout, scope, ngModel, attr, fileChange,\r\n files, rejFiles, evt, noDelay) {\r\n function update() {\r\n if ($parse(attr.ngfKeep)(scope) === true) {\r\n if (!files || !files.length) {\r\n return;\r\n }\r\n if ($parse(attr.ngfKeepDistinct)(scope) === true) {\r\n var prevFiles = (ngModel.$modelValue || []).slice(0), len = prevFiles.length;\r\n for (var i = 0; i < files.length; i++) {\r\n for (var j = 0; j < len; j++) {\r\n if (files[i].name === prevFiles[j].name) break;\r\n }\r\n if (j === len) {\r\n prevFiles.push(files[i]);\r\n }\r\n }\r\n if (len === prevFiles.length) {\r\n return;\r\n }\r\n files = [].concat(prevFiles);\r\n } else {\r\n files = (ngModel.$modelValue || []).concat(files);\r\n }\r\n }\r\n if (ngModel) {\r\n $parse(attr.ngModel).assign(scope, files);\r\n $timeout(function () {\r\n if (ngModel) {\r\n ngModel.$setViewValue(files != null && files.length === 0 ? null : files);\r\n }\r\n });\r\n }\r\n if (attr.ngModelRejected) {\r\n $parse(attr.ngModelRejected).assign(scope, rejFiles);\r\n }\r\n if (fileChange) {\r\n $parse(fileChange)(scope, {\r\n $files: files,\r\n $rejectedFiles: rejFiles,\r\n $event: evt\r\n });\r\n }\r\n }\r\n\r\n if (noDelay) {\r\n update();\r\n } else {\r\n $timeout(function () {\r\n update();\r\n });\r\n }\r\n };\r\n\r\n var validate = ngFileUpload.validate;\r\n var updateModel = ngFileUpload.updateModel;\r\n\r\n})();\r\n\r\n(function () {\r\n var validate = ngFileUpload.validate;\r\n var updateModel = ngFileUpload.updateModel;\r\n\r\n ngFileUpload.directive('ngfDrop', ['$parse', '$timeout', '$location', function ($parse, $timeout, $location) {\r\n return {\r\n restrict: 'AEC',\r\n require: '?ngModel',\r\n link: function (scope, elem, attr, ngModel) {\r\n linkDrop(scope, elem, attr, ngModel, $parse, $timeout, $location);\r\n }\r\n };\r\n }]);\r\n\r\n ngFileUpload.directive('ngfNoFileDrop', function () {\r\n return function (scope, elem) {\r\n if (dropAvailable()) elem.css('display', 'none');\r\n };\r\n });\r\n\r\n ngFileUpload.directive('ngfDropAvailable', ['$parse', '$timeout', function ($parse, $timeout) {\r\n return function (scope, elem, attr) {\r\n if (dropAvailable()) {\r\n var fn = $parse(attr.ngfDropAvailable);\r\n $timeout(function () {\r\n fn(scope);\r\n if (fn.assign) {\r\n fn.assign(scope, true);\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n function linkDrop(scope, elem, attr, ngModel, $parse, $timeout, $location) {\r\n var available = dropAvailable();\r\n if (attr.dropAvailable) {\r\n $timeout(function () {\r\n if (scope[attr.dropAvailable]) {\r\n scope[attr.dropAvailable].value = available;\r\n } else {\r\n scope[attr.dropAvailable] = available;\r\n }\r\n });\r\n }\r\n if (!available) {\r\n if ($parse(attr.ngfHideOnDropNotAvailable)(scope) === true) {\r\n elem.css('display', 'none');\r\n }\r\n return;\r\n }\r\n\r\n var disabled = false;\r\n if (attr.ngfDrop.search(/\\W+$files\\W+/) === -1) {\r\n scope.$watch(attr.ngfDrop, function(val) {\r\n disabled = val === false;\r\n });\r\n }\r\n\r\n var leaveTimeout = null;\r\n var stopPropagation = $parse(attr.ngfStopPropagation);\r\n var dragOverDelay = 1;\r\n var actualDragOverClass;\r\n\r\n elem[0].addEventListener('dragover', function (evt) {\r\n if (elem.attr('disabled') || disabled) return;\r\n evt.preventDefault();\r\n if (stopPropagation(scope)) evt.stopPropagation();\r\n // handling dragover events from the Chrome download bar\r\n if (navigator.userAgent.indexOf('Chrome') > -1) {\r\n var b = evt.dataTransfer.effectAllowed;\r\n evt.dataTransfer.dropEffect = ('move' === b || 'linkMove' === b) ? 'move' : 'copy';\r\n }\r\n $timeout.cancel(leaveTimeout);\r\n if (!scope.actualDragOverClass) {\r\n actualDragOverClass = calculateDragOverClass(scope, attr, evt);\r\n }\r\n elem.addClass(actualDragOverClass);\r\n }, false);\r\n elem[0].addEventListener('dragenter', function (evt) {\r\n if (elem.attr('disabled') || disabled) return;\r\n evt.preventDefault();\r\n if (stopPropagation(scope)) evt.stopPropagation();\r\n }, false);\r\n elem[0].addEventListener('dragleave', function () {\r\n if (elem.attr('disabled') || disabled) return;\r\n leaveTimeout = $timeout(function () {\r\n elem.removeClass(actualDragOverClass);\r\n actualDragOverClass = null;\r\n }, dragOverDelay || 1);\r\n }, false);\r\n elem[0].addEventListener('drop', function (evt) {\r\n if (elem.attr('disabled') || disabled) return;\r\n evt.preventDefault();\r\n if (stopPropagation(scope)) evt.stopPropagation();\r\n elem.removeClass(actualDragOverClass);\r\n actualDragOverClass = null;\r\n extractFiles(evt, function (files, rejFiles) {\r\n updateModel($parse, $timeout, scope, ngModel, attr,\r\n attr.ngfChange || attr.ngfDrop, files, rejFiles, evt);\r\n }, $parse(attr.ngfAllowDir)(scope) !== false, attr.multiple || $parse(attr.ngfMultiple)(scope));\r\n }, false);\r\n\r\n function calculateDragOverClass(scope, attr, evt) {\r\n var accepted = true;\r\n var items = evt.dataTransfer.items;\r\n if (items != null) {\r\n for (var i = 0; i < items.length && accepted; i++) {\r\n accepted = accepted &&\r\n (items[i].kind === 'file' || items[i].kind === '') &&\r\n validate(scope, $parse, attr, items[i], evt);\r\n }\r\n }\r\n var clazz = $parse(attr.ngfDragOverClass)(scope, {$event: evt});\r\n if (clazz) {\r\n if (clazz.delay) dragOverDelay = clazz.delay;\r\n if (clazz.accept) clazz = accepted ? clazz.accept : clazz.reject;\r\n }\r\n return clazz || attr.ngfDragOverClass || 'dragover';\r\n }\r\n\r\n function extractFiles(evt, callback, allowDir, multiple) {\r\n var files = [], rejFiles = [], items = evt.dataTransfer.items, processing = 0;\r\n\r\n function addFile(file) {\r\n if (validate(scope, $parse, attr, file, evt)) {\r\n files.push(file);\r\n } else {\r\n rejFiles.push(file);\r\n }\r\n }\r\n\r\n function traverseFileTree(files, entry, path) {\r\n if (entry != null) {\r\n if (entry.isDirectory) {\r\n var filePath = (path || '') + entry.name;\r\n addFile({name: entry.name, type: 'directory', path: filePath});\r\n var dirReader = entry.createReader();\r\n var entries = [];\r\n processing++;\r\n var readEntries = function () {\r\n dirReader.readEntries(function (results) {\r\n try {\r\n if (!results.length) {\r\n for (var i = 0; i < entries.length; i++) {\r\n traverseFileTree(files, entries[i], (path ? path : '') + entry.name + '/');\r\n }\r\n processing--;\r\n } else {\r\n entries = entries.concat(Array.prototype.slice.call(results || [], 0));\r\n readEntries();\r\n }\r\n } catch (e) {\r\n processing--;\r\n console.error(e);\r\n }\r\n }, function () {\r\n processing--;\r\n });\r\n };\r\n readEntries();\r\n } else {\r\n processing++;\r\n entry.file(function (file) {\r\n try {\r\n processing--;\r\n file.path = (path ? path : '') + file.name;\r\n addFile(file);\r\n } catch (e) {\r\n processing--;\r\n console.error(e);\r\n }\r\n }, function () {\r\n processing--;\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (items && items.length > 0 && $location.protocol() !== 'file') {\r\n for (var i = 0; i < items.length; i++) {\r\n if (items[i].webkitGetAsEntry && items[i].webkitGetAsEntry() && items[i].webkitGetAsEntry().isDirectory) {\r\n var entry = items[i].webkitGetAsEntry();\r\n if (entry.isDirectory && !allowDir) {\r\n continue;\r\n }\r\n if (entry != null) {\r\n traverseFileTree(files, entry);\r\n }\r\n } else {\r\n var f = items[i].getAsFile();\r\n if (f != null) addFile(f);\r\n }\r\n if (!multiple && files.length > 0) break;\r\n }\r\n } else {\r\n var fileList = evt.dataTransfer.files;\r\n if (fileList != null) {\r\n for (var j = 0; j < fileList.length; j++) {\r\n addFile(fileList.item(j));\r\n if (!multiple && files.length > 0) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var delays = 0;\r\n (function waitForProcess(delay) {\r\n $timeout(function () {\r\n if (!processing) {\r\n if (!multiple && files.length > 1) {\r\n i = 0;\r\n while (files[i].type === 'directory') i++;\r\n files = [files[i]];\r\n }\r\n callback(files, rejFiles);\r\n } else {\r\n if (delays++ * 10 < 20 * 1000) {\r\n waitForProcess(10);\r\n }\r\n }\r\n }, delay || 0);\r\n })();\r\n }\r\n }\r\n\r\n ngFileUpload.directive('ngfSrc', ['$parse', '$timeout', function ($parse, $timeout) {\r\n return {\r\n restrict: 'AE',\r\n link: function (scope, elem, attr) {\r\n if (window.FileReader) {\r\n scope.$watch(attr.ngfSrc, function (file) {\r\n if (file &&\r\n validate(scope, $parse, attr, file, null) &&\r\n (!window.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\r\n (!window.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\r\n $timeout(function () {\r\n //prefer URL.createObjectURL for handling refrences to files of all sizes\r\n //since it doesn´t build a large string in memory\r\n var URL = window.URL || window.webkitURL;\r\n if (URL && URL.createObjectURL) {\r\n elem.attr('src', URL.createObjectURL(file));\r\n } else {\r\n var fileReader = new FileReader();\r\n fileReader.readAsDataURL(file);\r\n fileReader.onload = function (e) {\r\n $timeout(function () {\r\n elem.attr('src', e.target.result);\r\n });\r\n };\r\n }\r\n });\r\n } else {\r\n elem.attr('src', attr.ngfDefaultSrc || '');\r\n }\r\n });\r\n }\r\n }\r\n };\r\n }]);\r\n\r\n function dropAvailable() {\r\n var div = document.createElement('div');\r\n return ('draggable' in div) && ('ondrop' in div);\r\n }\r\n\r\n})();\r\n","/*\r\n'***********************************************************\t\r\n'\tWorkfile: \tRegionSelector.js \r\n' Version:\t3\t\t \t\r\n'************************************************************\r\n*/\r\n//-------------------------------------------\r\n// This module contains RegionSelector Ajax Features\r\n// (clientside) Javascript functions \r\n//-------------------------------------------\r\n\r\nvar _helper = {\r\n zipIDTextBox: \"\", placeIDTextBox: \"\", zipplaceIDTextBox: \"\", countryRegNr: \"\",\r\n searchContainerIDDiv: \"searchResultContainer\", searchResultTemplateID: \"searchResultTemplate\",\r\n hiddenIDZipPlaceRegNr: \"\", callerID: \"\", callbackonSetPlace: null\r\n}\r\n\r\n//---------------------------------------------------------------------------------------------------------------------\r\n//Helper Functions\r\n\r\n//---------------------------------------------------------------------------------------------------------------------\r\ncheckZipAndPlace = debounce(function (helper) { \r\n _helper = helper;\r\n _searchText = \"\";\r\n if (_helper.zipplaceIDTextBox != \"\" && $(\"#\" + _helper.zipplaceIDTextBox).val().length > 2)\r\n _searchText = $(\"#\" + _helper.zipplaceIDTextBox).val();\r\n else if (_helper.zipIDTextBox != \"\" && $(\"#\" + _helper.zipIDTextBox).val().length > 2 && _helper.zipIDTextBox == _helper.callerID)\r\n _searchText = $(\"#\" + _helper.zipIDTextBox).val();\r\n else if (_helper.placeIDTextBox != \"\" && $(\"#\" + _helper.placeIDTextBox).val().length > 2 && _helper.placeIDTextBox == _helper.callerID)\r\n _searchText = $(\"#\" + _helper.placeIDTextBox).val();\r\n\r\n if (_searchText.length > 2) {\r\n FleuropWebShop.RegionSelector.GetZipAndPlace(_searchText, _helper.countryRegNr, checkZipAndPlace_OnComplete);\r\n }\r\n else {\r\n hideTemplate();\r\n }\r\n}, 700);\r\n\r\nfunction checkZipAndPlace_OnComplete(result) { \r\n if (result.length >= 1) {\r\n $('#' + _helper.searchContainerIDDiv).empty();\r\n //Template laden...\r\n var html = parseTemplate($(\"#\" + _helper.searchResultTemplateID).html(), { items: result });\r\n $(html).appendTo(\"#\" + _helper.searchContainerIDDiv);\r\n\r\n //Container zeigen\r\n $('#' + _helper.searchContainerIDDiv).fadeIn(\"slow\");\r\n }\r\n}\r\n\r\nfunction findRegionExact(zip, city, countryRegNr, callbackAdr) {\r\n FleuropWebShop.RegionSelector.FindExact(zip, city, countryRegNr, callbackAdr);\r\n}\r\n\r\nfunction hideTemplate() {\r\n $('.suggestBox').fadeOut('slow'); //#searchResultContainer\r\n $('.suggestBox').empty();\r\n}\r\n\r\n\r\nfunction SetZipAndPlace(zip, place, zipPlaceRegNr, helper) {\r\n if (helper.hiddenIDZipPlaceRegNr != \"\") {\r\n $('#' + helper.hiddenIDZipPlaceRegNr).val(zipPlaceRegNr); \r\n }\r\n\r\n if (helper.zipplaceIDTextBox != \"\") {\r\n $('#' + helper.zipplaceIDTextBox).val(zip + ' ' + place);\r\n //makes sure that the validation engine reevaluates the field.\r\n $('#' + helper.zipplaceIDTextBox).blur();\r\n } else {\r\n if (zip != '') {\r\n $('#' + helper.zipIDTextBox).val(zip);\r\n $('#' + helper.zipIDTextBox).blur();\r\n }\r\n $('#' + helper.placeIDTextBox).val(place); \r\n $('#' + helper.placeIDTextBox).blur();\r\n }\r\n\r\n hideTemplate();\r\n\r\n if (helper.callbackonSetPlace != null)\r\n helper.callbackonSetPlace();\r\n}\r\n\r\n//---------------------------------------------------------------------------------------------------------------------\r\n","/*! jQuery Migrate v3.4.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */\n\"undefined\"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(t){\"use strict\";\"function\"==typeof define&&define.amd?define([\"jquery\"],function(e){return t(e,window)}):\"object\"==typeof module&&module.exports?module.exports=t(require(\"jquery\"),window):t(jQuery,window)}(function(s,n){\"use strict\";function e(e){return 0<=function(e,t){for(var r=/^(\\d+)\\.(\\d+)\\.(\\d+)/,n=r.exec(e)||[],o=r.exec(t)||[],a=1;a<=3;a++){if(+o[a]<+n[a])return 1;if(+n[a]<+o[a])return-1}return 0}(s.fn.jquery,e)}s.migrateVersion=\"3.4.1\";var t=Object.create(null);s.migrateDisablePatches=function(){for(var e=0;e\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi;s.UNSAFE_restoreLegacyHtmlPrefilter=function(){s.migrateEnablePatches(\"self-closed-tags\")},i(s,\"htmlPrefilter\",function(e){var t,r;return(r=(t=e).replace(F,\"<$1>\"))!==t&&T(t)!==T(r)&&u(\"self-closed-tags\",\"HTML tags must be properly nested and closed: \"+t),e.replace(F,\"<$1>\")},\"self-closed-tags\"),s.migrateDisablePatches(\"self-closed-tags\");var D,W,_,I=s.fn.offset;return i(s.fn,\"offset\",function(){var e=this[0];return!e||e.nodeType&&e.getBoundingClientRect?I.apply(this,arguments):(u(\"offset-valid-elem\",\"jQuery.fn.offset() requires a valid DOM element\"),arguments.length?this:void 0)},\"offset-valid-elem\"),s.ajax&&(D=s.param,i(s,\"param\",function(e,t){var r=s.ajaxSettings&&s.ajaxSettings.traditional;return void 0===t&&r&&(u(\"param-ajax-traditional\",\"jQuery.param() no longer uses jQuery.ajaxSettings.traditional\"),t=r),D.call(this,e,t)},\"param-ajax-traditional\")),c(s.fn,\"andSelf\",s.fn.addBack,\"andSelf\",\"jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()\"),s.Deferred&&(W=s.Deferred,_=[[\"resolve\",\"done\",s.Callbacks(\"once memory\"),s.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",s.Callbacks(\"once memory\"),s.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",s.Callbacks(\"memory\"),s.Callbacks(\"memory\")]],i(s,\"Deferred\",function(e){var a=W(),i=a.promise();function t(){var o=arguments;return s.Deferred(function(n){s.each(_,function(e,t){var r=\"function\"==typeof o[e]&&o[e];a[t[1]](function(){var e=r&&r.apply(this,arguments);e&&\"function\"==typeof e.promise?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[t[0]+\"With\"](this===i?n.promise():this,r?[e]:arguments)})}),o=null}).promise()}return c(a,\"pipe\",t,\"deferred-pipe\",\"deferred.pipe() is deprecated\"),c(i,\"pipe\",t,\"deferred-pipe\",\"deferred.pipe() is deprecated\"),e&&e.call(a,a),a},\"deferred-pipe\"),s.Deferred.exceptionHook=W.exceptionHook),s});\n//# sourceMappingURL=jquery-migrate.min.map","/**\n * Author and copyright: Stefan Haack (https://shaack.com)\n * Repository: https://github.com/shaack/bootstrap-input-spinner\n * License: MIT, see file 'LICENSE'\n */\n\n;(function ($) {\n \"use strict\"\n\n var spacePressed = false\n var originalVal = $.fn.val\n $.fn.val = function (value) {\n if (arguments.length >= 1) {\n if (this[0] && this[0][\"bootstrap-input-spinner\"] && this[0].setValue) {\n var element = this[0];\n setTimeout(function () {\n element.setValue(value)\n })\n }\n }\n return originalVal.apply(this, arguments)\n }\n\n $.fn.InputSpinner = $.fn.inputSpinner = function (options) {\n\n var config = {\n decrementButton: \"-\", // button text\n incrementButton: \"+\", // ..\n groupClass: \"\", // css class of the resulting input-group\n buttonsClass: \"btn-outline-secondary\",\n buttonsWidth: \"2.5rem\",\n textAlign: \"center\",\n autoDelay: 500, // ms holding before auto value change\n autoInterval: 100, // speed of auto value change\n boostThreshold: 10, // boost after these steps\n boostMultiplier: \"auto\", // you can also set a constant number as multiplier\n locale: null // the locale for number rendering; if null, the browsers language is used\n }\n for (var option in options) {\n config[option] = options[option]\n }\n\n var html = '
' +\n '
' +\n '' +\n '
' +\n '' +\n '
' +\n '' +\n '
' +\n '
'\n\n var locale = config.locale || navigator.language || \"en-US\"\n\n this.each(function () {\n\n var $original = $(this)\n $original[0][\"bootstrap-input-spinner\"] = true\n $original.hide()\n\n var autoDelayHandler = null\n var autoIntervalHandler = null\n var autoMultiplier = config.boostMultiplier === \"auto\"\n var boostMultiplier = autoMultiplier ? 1 : config.boostMultiplier\n\n var $inputGroup = $(html)\n var $buttonDecrement = $inputGroup.find(\".btn-decrement\")\n var $buttonIncrement = $inputGroup.find(\".btn-increment\")\n var $input = $inputGroup.find(\"input\")\n\n var min = null\n var max = null\n var step = null\n var stepMax = null\n var decimals = null\n\n updateAttributes()\n\n var numberFormat = new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals\n })\n var value = parseFloat($original[0].value)\n var boostStepsCount = 0\n\n var prefix = $original.attr(\"data-prefix\") || \"\"\n var suffix = $original.attr(\"data-suffix\") || \"\"\n\n if (prefix) {\n var prefixElement = $('' + prefix + '')\n $inputGroup.find(\".input-group-prepend\").append(prefixElement)\n }\n if (suffix) {\n var suffixElement = $('' + suffix + '')\n $inputGroup.find(\".input-group-append\").prepend(suffixElement)\n }\n\n $original[0].setValue = function (newValue) {\n setValue(newValue)\n }\n\n var observer = new MutationObserver(function () {\n updateAttributes()\n setValue(value, true)\n })\n observer.observe($original[0], {attributes: true})\n\n $original.after($inputGroup)\n\n setValue(value)\n\n $input.on(\"paste input change focusout\", function (event) {\n var newValue = $input[0].value\n var focusOut = event.type === \"focusout\"\n newValue = parseLocaleNumber(newValue)\n setValue(newValue, focusOut)\n dispatchEvent($original, event.type)\n })\n\n onPointerDown($buttonDecrement[0], function () {\n stepHandling(-step)\n })\n onPointerDown($buttonIncrement[0], function () {\n stepHandling(step)\n })\n onPointerUp(document.body, function () {\n resetTimer()\n })\n\n function setValue(newValue, updateInput) {\n if (updateInput === undefined) {\n updateInput = true\n }\n if (isNaN(newValue) || newValue === \"\") {\n $original[0].value = \"\"\n if (updateInput) {\n $input[0].value = \"\"\n }\n value = 0\n } else {\n newValue = parseFloat(newValue)\n newValue = Math.min(Math.max(newValue, min), max)\n newValue = Math.round(newValue * Math.pow(10, decimals)) / Math.pow(10, decimals)\n $original[0].value = newValue\n if (updateInput) {\n $input[0].value = numberFormat.format(newValue)\n }\n value = newValue\n }\n }\n\n function dispatchEvent($element, type) {\n if (type) {\n setTimeout(function () {\n var event\n if (typeof (Event) === 'function') {\n event = new Event(type, {bubbles: true})\n } else { // IE\n event = document.createEvent('Event')\n event.initEvent(type, true, true)\n }\n $element[0].dispatchEvent(event)\n })\n }\n }\n\n function stepHandling(step) {\n if (!$input[0].disabled) {\n calcStep(step)\n resetTimer()\n autoDelayHandler = setTimeout(function () {\n autoIntervalHandler = setInterval(function () {\n if (boostStepsCount > config.boostThreshold) {\n if (autoMultiplier) {\n calcStep(step * parseInt(boostMultiplier, 10))\n if (boostMultiplier < 100000000) {\n boostMultiplier = boostMultiplier * 1.1\n }\n if (stepMax) {\n boostMultiplier = Math.min(stepMax, boostMultiplier)\n }\n } else {\n calcStep(step * boostMultiplier)\n }\n } else {\n calcStep(step)\n }\n boostStepsCount++\n }, config.autoInterval)\n }, config.autoDelay)\n }\n }\n\n function calcStep(step) {\n if (isNaN(value)) {\n value = 0\n }\n setValue(Math.round(value / step) * step + step)\n dispatchEvent($original, \"input\")\n dispatchEvent($original, \"change\")\n }\n\n function resetTimer() {\n boostStepsCount = 0\n boostMultiplier = boostMultiplier = autoMultiplier ? 1 : config.boostMultiplier\n clearTimeout(autoDelayHandler)\n clearTimeout(autoIntervalHandler)\n }\n\n function updateAttributes() {\n // copy properties from original to the new input\n $input.prop(\"required\", $original.prop(\"required\"))\n $input.prop(\"placeholder\", $original.prop(\"placeholder\"))\n var disabled = $original.prop(\"disabled\")\n $input.prop(\"disabled\", disabled)\n $buttonIncrement.prop(\"disabled\", disabled)\n $buttonDecrement.prop(\"disabled\", disabled)\n if (disabled) {\n resetTimer()\n }\n var originalClass = $original.prop(\"class\")\n var groupClass = \"\"\n // sizing\n if (/form-control-sm/g.test(originalClass)) {\n groupClass = \"input-group-sm\"\n } else if (/form-control-lg/g.test(originalClass)) {\n groupClass = \"input-group-lg\"\n }\n var inputClass = originalClass.replace(/form-control(-(sm|lg))?/g, \"\")\n $inputGroup.prop(\"class\", \"input-group \" + groupClass + \" \" + config.groupClass)\n $input.prop(\"class\", \"form-control \" + inputClass)\n\n // update the main attributes\n min = parseFloat($original.prop(\"min\")) || 0\n max = isNaN($original.prop(\"max\")) || $original.prop(\"max\") === \"\" ? Infinity : parseFloat($original.prop(\"max\"))\n step = parseFloat($original.prop(\"step\")) || 1\n stepMax = parseInt($original.attr(\"data-step-max\")) || 0\n var newDecimals = parseInt($original.attr(\"data-decimals\")) || 0\n if (decimals !== newDecimals) {\n decimals = newDecimals\n numberFormat = new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals\n })\n }\n }\n\n function parseLocaleNumber(stringNumber) {\n var numberFormat = new Intl.NumberFormat(locale)\n var thousandSeparator = numberFormat.format(1111).replace(/1/g, '')\n var decimalSeparator = numberFormat.format(1.1).replace(/1/g, '')\n return parseFloat(stringNumber\n .replace(new RegExp('\\\\' + thousandSeparator, 'g'), '')\n .replace(new RegExp('\\\\' + decimalSeparator), '.')\n )\n }\n })\n\n }\n\n function onPointerUp(element, callback) {\n element.addEventListener(\"mouseup\", function (e) {\n callback(e)\n })\n element.addEventListener(\"touchend\", function (e) {\n callback(e)\n })\n element.addEventListener(\"keyup\", function (e) {\n if (e.keyCode === 32) {\n spacePressed = false\n callback(e)\n }\n })\n }\n\n function onPointerDown(element, callback) {\n element.addEventListener(\"mousedown\", function (e) {\n e.preventDefault()\n callback(e)\n })\n element.addEventListener(\"touchstart\", function (e) {\n if (e.cancelable) {\n e.preventDefault()\n }\n callback(e)\n })\n element.addEventListener(\"keydown\", function (e) {\n if (e.keyCode === 32 && !spacePressed) {\n spacePressed = true\n callback(e)\n }\n })\n }\n\n}(jQuery))\n"]}