{"version":3,"sources":["kendo.list.js"],"names":["f","define","$","undefined","unifyType","value","type","last","list","length","getSelectedOption","select","index","selectedIndex","options","mapChangedItems","selected","itemsToMatch","dataItem","found","i","j","itemsLength","selectedLength","changed","unchanged","push","item","isValidFilterExpr","expression","isEmptyObject","filters","removeFiltersForField","field","grep","filter","STATIC_LIST_NS","StaticList","kendo","window","ui","outerWidth","_outerWidth","outerHeight","_outerHeight","Widget","keys","support","htmlEncode","activeElement","_activeElement","ObservableArray","data","ID","CHANGE","FOCUSED","HOVER","LOADING","HIDDENCLASS","OPEN","CLOSE","CASCADE","SELECT","SELECTED","REQUESTSTART","REQUESTEND","WIDTH","extend","proxy","isArray","browser","isIE","msie","isIE8","version","quotRegExp","alternativeNames","ComboBox","DropDownList","List","DataBoundWidget","init","element","id","that","this","ns","fn","call","_isSelect","is","dataSource","dataTextField","dataValueField","ul","attr","tabIndex","aria-hidden","append","on","_listMousedown","_header","_noData","_footer","_accessors","_initValue","valuePrimitive","footerTemplate","headerTemplate","noDataTemplate","setOptions","enable","enabled","_renderFooter","_renderNoData","focus","_focused","readonly","_editable","disable","_listOptions","currentOptions","virtual","listBoundHandler","_listBound","autoBind","selectable","click","_click","change","_listChange","activate","_activateItem","deactivate","_deactivateItem","dataBinding","trigger","dataBound","height","groupTemplate","fixedGroupTemplate","template","expr","$angular","_initList","listOptions","selectedItemChange","listView","VirtualList","bind","_setListValue","done","_updateSelectionState","noop","e","filterInput","target","preventDefault","_isFilterEnabled","_hideClear","_clear","addClass","_showClear","removeClass","_clearValue","_clearText","_accessor","_filter","word","open","_change","text","_clearFilter","bound","_filterSource","force","newExpression","dataSourceState","resetPageSettings","removed","logic","_cascading","setDSFilter","page","pageSize","sort","group","aggregate","_mergeState","_angularElement","action","angular","elements","noData","destroy","remove","appendTo","children","html","instance","_toggleNoData","show","toggle","footer","header","prepend","_allowOpening","flatView","val","_old","_ignoreCase","model","reader","fields","ignoreCase","_focus","candidate","widgetOptions","toLowerCase","operator","_open","search","_inputValue","clearTimeout","_typingTimeout","enforceMinLength","minLength","_state","_searchByWord","current","items","_unbindDataSource","off","popup","_form","_resetHandler","selectedDataItems","getByUid","add","removeAttr","getter","textField","valueField","_text","_value","_aria","suggest","_blur","close","optionValue","_oldIndex","_typing","typing","_data","view","_enable","disabled","_dataValue","_offsetHeight","offsetHeight","siblings","content","prevAll","each","hasClass","_height","offsetTop","popups","footerHeight","visible","parent","hide","scrollHeight","_adjustListWidth","computedStyle","computedWidth","width","style","wrapper","getComputedStyle","parseFloat","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","css","fontFamily","autoWidth","minWidth","_openHandler","_closeHandler","_focusItem","noFocusedItem","highlightFirst","scrollToIndex","_calculateGroupPadding","li","groupHeader","prev","padding","display","scrollbar","_calculatePopupHeight","_resizePopup","one","_popup","Popup","anchor","animation","isRtl","_makeUnselectable","find","not","_toggleHover","currentTarget","toggleClass","_toggle","preventFocus","touchEnabled","mobileOS","touch","MSPointers","pointers","_prevent","_triggerCascade","_cascadeTriggered","userTriggered","_userTriggered","_triggerChange","_valueBeforeCascade","unbind","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","hasValue","Array","valueMapper","Error","inArray","node","parentNode","idx","Select","_initial","setDataSource","_dataSource","_initialIndex","fetch","_parentWidget","_cascadeSelect","_select","_accessorInput","_accessorSelect","_custom","custom","_customOption","_hideBusy","_busy","_arrowIcon","_showBusy","_request","setTimeout","_requestEnd","DataSource","create","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","_move","pressed","activeFilter","shouldTrigger","direction","key","keyCode","down","DOWN","UP","altKey","_fetch","dataItemByIndex","getElementIndex","ENTER","TAB","input","_focusElement","focusout","ESC","PAGEDOWN","PAGEUP","scrollWith","screenHeight","_fetchData","hasItems","cascadeFrom","_options","optionLabel","option","dataText","dataValue","htmlElement","indexOf","replace","setAttribute","_reset","formId","form","closest","parentElement","name","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","first","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","expressions","handler","filterValue","cascadeFromField","currentHandler","shift","wrap","before","_optionID","guid","_selectedIndices","_view","_dataItems","_values","slice","_getter","_templates","_onScroll","_scrollId","_renderHeader","events","source","_refreshHandler","refresh","_fixedHeader","skip","_render","clientHeight","scroll","scrollTop","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","dataItems","_getValues","_valueGetter","map","next","hasCandidate","_current","_get","focusIndex","skipUpdate","_skipUpdate","indices","result","deferred","filtered","singleSelection","selectedIndices","added","Deferred","resolve","isFiltered","_deselectFiltered","_deselect","_valueComparer","removeAt","position","splice","setValue","_valueDeferred","state","_valueIndices","isDefaultPrevented","_valueExpr","values","body","comparer","normalized","_valueType","Function","_dataItemPosition","valueExpr","removedIndices","_template","useWithBlock","templates","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","itemIndex","Math","floor","lastChild","forward","nextSibling","previousSibling","isGrouped","visibleItem","_renderItem","context","notFirstItem","newGroup","dataContext","_selected","innerHTML","_lastDSFilter","Query","compareFilters","skipUpdateOnBind","isItemChange","_angularItems","_bound","plugin","jQuery","amd","a1","a2","a3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAwBC,SAAUA,EAAGC,QACVA,OAAO,cACH,aACA,eACDD,IACL,WA2vDE,MAhvDC,UAAUE,EAAGC,GAkmBV,QAASC,GAAUC,EAAOC,GAUtB,MATID,KAAUF,GAAuB,KAAVE,GAA0B,OAAVA,IAC1B,YAATC,EACAD,IAAgBA,EACA,WAATC,EACPD,GAAeA,EACC,WAATC,IACPD,EAAQA,GAAAA,IAGTA,EAgkCX,QAASE,GAAKC,GACV,MAAOA,GAAKA,EAAKC,OAAS,GAE9B,QAASC,GAAkBC,GACvB,GAAIC,GAAQD,EAAOE,aACnB,OAAOD,MAAaD,EAAOG,QAAQF,MAEvC,QAASG,GAAgBC,EAAUC,GAAnC,GAGQC,GACAC,EACAC,EAAGC,EAJHC,EAAcL,EAAaR,OAC3Bc,EAAiBP,EAASP,OAI1Be,KACAC,IACJ,IAAIF,EACA,IAAKH,EAAI,EAAGA,EAAIG,EAAgBH,IAAK,CAGjC,IAFAF,EAAWF,EAASI,GACpBD,GAAQ,EACHE,EAAI,EAAGA,EAAIC,EAAaD,IACzB,GAAIH,IAAaD,EAAaI,GAAI,CAC9BF,GAAQ,EACRK,EAAQE,MACJd,MAAOQ,EACPO,KAAMT,GAEV,OAGHC,GACDM,EAAUC,KAAKR,GAI3B,OACIM,QAASA,EACTC,UAAWA,GAGnB,QAASG,GAAkBC,GACvB,SAAKA,GAAc3B,EAAE4B,cAAcD,OAG/BA,EAAWE,UAAYF,EAAWE,QAAQtB,QAKlD,QAASuB,GAAsBH,EAAYI,GAA3C,GACQF,GACAZ,GAAQ,CAeZ,OAdIU,GAAWE,UACXA,EAAU7B,EAAEgC,KAAKL,EAAWE,QAAS,SAAUI,GAE3C,MADAhB,GAAQa,EAAsBG,EAAQF,GAClCE,EAAOJ,QACAI,EAAOJ,QAAQtB,OAEf0B,EAAOF,OAASA,IAG1Bd,GAASU,EAAWE,QAAQtB,SAAWsB,EAAQtB,SAChDU,GAAQ,GAEZU,EAAWE,QAAUA,GAElBZ,EA7uDd,GAojCOiB,GACAC,EApjCAC,EAAQC,OAAOD,MAAOE,EAAKF,EAAME,GAAIC,EAAaH,EAAMI,YAAaC,EAAcL,EAAMM,aAAcC,EAASL,EAAGK,OAAQC,EAAOR,EAAMQ,KAAMC,EAAUT,EAAMS,QAASC,EAAaV,EAAMU,WAAYC,EAAgBX,EAAMY,eAAgBC,EAAkBb,EAAMc,KAAKD,gBAAiBE,EAAK,KAAMC,EAAS,SAAUC,EAAU,kBAAmBC,EAAQ,gBAAiBC,EAAU,cAAeC,EAAc,mBAAoBC,EAAO,OAAQC,EAAQ,QAASC,EAAU,UAAWC,EAAS,SAAUC,EAAW,WAAYC,EAAe,eAAgBC,EAAa,aAAcC,EAAQ,QAASC,EAASjE,EAAEiE,OAAQC,EAAQlE,EAAEkE,MAAOC,EAAUnE,EAAEmE,QAASC,EAAUvB,EAAQuB,QAASC,EAAOD,EAAQE,KAAMC,EAAQF,GAAQD,EAAQI,QAAU,EAAGC,EAAa,KAAMC,GAChvBC,SAAY,eACZC,aAAgB,YAEpBC,EAAOzC,EAAME,GAAGwC,gBAAgBb,QAChCc,KAAM,SAAUC,EAASpE,GACrB,GAA+BqE,GAA3BC,EAAOC,KAAMC,EAAKF,EAAKE,EAC3BzC,GAAO0C,GAAGN,KAAKO,KAAKJ,EAAMF,EAASpE,GACnCoE,EAAUE,EAAKF,QACfpE,EAAUsE,EAAKtE,QACfsE,EAAKK,UAAYP,EAAQQ,GAAG5B,GACxBsB,EAAKK,WAAaL,EAAKF,QAAQ,GAAGzE,SAC7BK,EAAQ6E,aACT7E,EAAQ8E,cAAgB9E,EAAQ8E,eAAiB,OACjD9E,EAAQ+E,eAAiB/E,EAAQ+E,gBAAkB,UAG3DT,EAAKU,GAAK5F,EAAE,kDAAkD6F,MAC1DC,YACAC,eAAe,IAEnBb,EAAK5E,KAAON,EAAE,mCAAqCgG,OAAOd,EAAKU,IAAIK,GAAG,YAAcb,EAAIlB,EAAMgB,EAAKgB,eAAgBhB,IACnHD,EAAKD,EAAQa,KAAK1C,GACd8B,IACAC,EAAK5E,KAAKuF,KAAK1C,EAAI8B,EAAK,SACxBC,EAAKU,GAAGC,KAAK1C,EAAI8B,EAAK,aAE1BC,EAAKiB,UACLjB,EAAKkB,UACLlB,EAAKmB,UACLnB,EAAKoB,aACLpB,EAAKqB,cAET3F,SACI4F,gBAAgB,EAChBC,eAAgB,GAChBC,eAAgB,GAChBC,eAAgB,kBAEpBC,WAAY,SAAUhG,GAClB+B,EAAO0C,GAAGuB,WAAWtB,KAAKH,KAAMvE,GAC5BA,GAAWA,EAAQiG,SAAW5G,IAC9BW,EAAQkG,QAAUlG,EAAQiG,QAE9B1B,KAAKgB,UACLhB,KAAKiB,UACLjB,KAAKkB,UACLlB,KAAK4B,gBACL5B,KAAK6B,iBAETC,MAAO,WACH9B,KAAK+B,SAASD,SAElBE,SAAU,SAAUA,GAChBhC,KAAKiC,WACDD,SAAUA,IAAalH,GAAmBkH,EAC1CE,SAAS,KAGjBR,OAAQ,SAAUA,GACd1B,KAAKiC,WACDD,UAAU,EACVE,UAAWR,EAASA,IAAW5G,GAAmB4G,MAG1DS,aAAc,SAAU1G,GAAV,GACNsE,GAAOC,KACPoC,EAAiBrC,EAAKtE,QACtB4G,EAAUD,EAAeC,QACzBC,EAAmBvD,EAAMgB,EAAKwC,WAAYxC,EA2B9C,OA1BAsC,GAA6B,gBAAZA,GAAuBA,KACxC5G,EAAUZ,EAAEiE,QACR0D,UAAU,EACVC,YAAY,EACZnC,WAAYP,EAAKO,WACjBoC,MAAO3D,EAAMgB,EAAK4C,OAAQ5C,GAC1B6C,OAAQ7D,EAAMgB,EAAK8C,YAAa9C,GAChC+C,SAAU/D,EAAMgB,EAAKgD,cAAehD,GACpCiD,WAAYjE,EAAMgB,EAAKkD,gBAAiBlD,GACxCmD,YAAa,WACTnD,EAAKoD,QAAQ,gBAEjBC,UAAWd,EACXe,OAAQjB,EAAeiB,OACvB7C,eAAgB4B,EAAe5B,eAC/BD,cAAe6B,EAAe7B,cAC9B+C,cAAelB,EAAekB,cAC9BC,mBAAoBnB,EAAemB,mBACnCC,SAAUpB,EAAeoB,UAC1B/H,EAAS4G,GACP5G,EAAQ+H,WACT/H,EAAQ+H,SAAW,KAAOvG,EAAMwG,KAAKhI,EAAQ8E,cAAe,QAAU,KAEtE6B,EAAesB,WACfjI,EAAQiI,SAAWtB,EAAesB,UAE/BjI,GAEXkI,UAAW,WAAA,GACH5D,GAAOC,KACP4D,EAAc7D,EAAKoC,cAAe0B,mBAAoB9E,EAAMgB,EAAK8C,YAAa9C,IAI9EA,GAAK+D,SAHJ/D,EAAKtE,QAAQ4G,QAGE,GAAIpF,GAAME,GAAG4G,YAAYhE,EAAKU,GAAImD,GAFlC,GAAI3G,GAAME,GAAGH,WAAW+C,EAAKU,GAAImD,GAIrD7D,EAAK+D,SAASE,KAAK,YAAajF,EAAMgB,EAAKwC,WAAYxC,IACvDA,EAAKkE,iBAETA,cAAe,SAAUjJ,GACrBA,EAAQA,GAASgF,KAAKvE,QAAQT,MAC1BA,IAAUF,GACVkF,KAAK8D,SAAS9I,MAAMA,GAAOkJ,KAAKnF,EAAMiB,KAAKmE,sBAAuBnE,QAG1EmE,sBAAuBtJ,EAAEuJ,KACzBrD,eAAgB,SAAUsD,GACjBrE,KAAKsE,aAAetE,KAAKsE,YAAY,KAAOD,EAAEE,QAC/CF,EAAEG,kBAGVC,iBAAkB,WACd,GAAI3H,GAASkD,KAAKvE,QAAQqB,MAC1B,OAAOA,IAAqB,SAAXA,GAErB4H,WAAY,WACR,GAAI3E,GAAOC,IACPD,GAAK4E,QACL3E,KAAK2E,OAAOC,SAASvG,IAG7BwG,WAAY,WACR,GAAI9E,GAAOC,IACPD,GAAK4E,QACL3E,KAAK2E,OAAOG,YAAYzG,IAGhC0G,YAAa,WACT/E,KAAKgF,aACLhF,KAAKiF,UAAU,IACfjF,KAAK8D,SAAS9I,UACVgF,KAAKyE,oBACLzE,KAAKkF,SACDC,KAAM,GACNC,MAAM,IAGdpF,KAAKqF,WAETL,WAAY,WACRhF,KAAKsF,KAAK,KAEdC,aAAc,WACLvF,KAAKvE,QAAQ4G,SACdrC,KAAK8D,SAAS0B,OAAM,GAExBxF,KAAKyF,iBAETA,cAAe,SAAU3I,EAAQ4I,GAAlB,GAUPC,GAaAC,EAtBA7F,EAAOC,KACPvE,EAAUsE,EAAKtE,QACf6E,EAAaP,EAAKO,WAClB9D,EAAasC,KAAWwB,EAAWxD,cACnC+I,EAAoB/I,GAAUN,EAAWE,SAAWF,EAAWE,QAAQtB,SAAW0B,EAClFgJ,EAAUnJ,EAAsBH,EAAYf,EAAQ8E,gBACnDzD,GAAUgJ,IAAY/F,EAAKoD,QAAQ,aAAerG,OAAQA,MAG3D6I,GACAjJ,WACAqJ,MAAO,OAEPxJ,EAAkBO,IAClB6I,EAAcjJ,QAAQL,KAAKS,GAE3BP,EAAkBC,IAClBmJ,EAAcjJ,QAAQL,KAAKG,GAE3BuD,EAAKiG,YACLhG,KAAK8D,SAASmC,YAAYN,GAE1BC,EAAkB9G,MAClBoH,KAAML,EAAoB,EAAIvF,EAAW4F,OACzCC,SAAUN,EAAoBvF,EAAW7E,QAAQ0K,SAAW7F,EAAW6F,WACvEC,KAAM9F,EAAW8F,OACjBtJ,OAAQwD,EAAWxD,SACnBuJ,MAAO/F,EAAW+F,QAClBC,UAAWhG,EAAWgG,cACrBxJ,OAAQ6I,IACbrF,EAAWoF,EAAQ,OAAS,SAASpF,EAAWiG,YAAYX,MAEhEY,gBAAiB,SAAU3G,EAAS4G,GAC3B5G,GAGLG,KAAK0G,QAAQD,EAAQ,WACjB,OAASE,SAAU9G,MAG3BoB,QAAS,WAAA,GACD2F,GAAS/L,EAAEmF,KAAK4G,QAChBpD,EAAWxD,KAAKvE,QAAQ+F,cAM5B,OALAxB,MAAK0G,QAAQ,UAAW,WACpB,OAASC,SAAUC,KAEvB3J,EAAM4J,QAAQD,GACdA,EAAOE,SACFtD,GAILxD,KAAK4G,OAAS/L,EAAE,gEAAgEkM,SAAS/G,KAAK7E,MAC9F6E,KAAKwB,eAAqC,kBAAbgC,GAA0BvG,EAAMuG,SAASA,GAAYA,EADlFxD,IAHIA,KAAK4G,OAAS,KACd,IAKR/E,cAAe,WACX,GAAI+E,GAAS5G,KAAK4G,MACbA,KAGL5G,KAAKwG,gBAAgBI,EAAQ,WAC7BA,EAAOI,SAAS,UAAUC,KAAKjH,KAAKwB,gBAAiB0F,SAAUlH,QAC/DA,KAAKwG,gBAAgBI,EAAQ,aAEjCO,cAAe,SAAUC,GACrBvM,EAAEmF,KAAK4G,QAAQS,OAAOD,IAE1BlG,QAAS,WAAA,GACDoG,GAASzM,EAAEmF,KAAKsH,QAChB9D,EAAWxD,KAAKvE,QAAQ6F,cAI5B,OAHAtB,MAAKwG,gBAAgBc,EAAQ,WAC7BrK,EAAM4J,QAAQS,GACdA,EAAOR,SACFtD,GAILxD,KAAKsH,OAASzM,EAAE,gCAAgCkM,SAAS/G,KAAK7E,MAC9D6E,KAAKsB,eAAqC,kBAAbkC,GAA0BvG,EAAMuG,SAASA,GAAYA,EADlFxD,IAHIA,KAAKsH,OAAS,KACd,IAKR1F,cAAe,WACX,GAAI0F,GAAStH,KAAKsH,MACbA,KAGLtH,KAAKwG,gBAAgBc,EAAQ,WAC7BA,EAAOL,KAAKjH,KAAKsB,gBAAiB4F,SAAUlH,QAC5CA,KAAKwG,gBAAgBc,EAAQ,aAEjCtG,QAAS,WAAA,GAUDO,GATAgG,EAAS1M,EAAEmF,KAAKuH,QAChB/D,EAAWxD,KAAKvE,QAAQ8F,cAI5B,OAHAvB,MAAKwG,gBAAgBe,EAAQ,WAC7BtK,EAAM4J,QAAQU,GACdA,EAAOT,SACFtD,GAIDjC,EAAqC,kBAAbiC,GAA0BvG,EAAMuG,SAASA,GAAYA,EACjF+D,EAAS1M,EAAE0G,OACXvB,KAAKuH,OAASA,EAAO,GAAKA,EAAS,KACnCvH,KAAK7E,KAAKqM,QAAQD,GAClBvH,KAAKwG,gBAAgBxG,KAAKuH,OAAQ,WAJ9BhG,IAHAvB,KAAKuH,OAAS,KACd,IAQRE,cAAe,WACX,MAAOzH,MAAKvE,QAAQ+F,gBAAkBxB,KAAKM,WAAWoH,WAAWtM,QAErEgG,WAAY,WACR,GAAIrB,GAAOC,KAAMhF,EAAQ+E,EAAKtE,QAAQT,KACxB,QAAVA,EACA+E,EAAKF,QAAQ8H,IAAI3M,IAEjBA,EAAQ+E,EAAKkF,YACblF,EAAKtE,QAAQT,MAAQA,GAEzB+E,EAAK6H,KAAO5M,GAEhB6M,YAAa,WACT,GAAuDjL,GAAnDmD,EAAOC,KAAM8H,EAAQ/H,EAAKO,WAAWyH,OAAOD,KAC5CA,IAASA,EAAME,SACfpL,EAAQkL,EAAME,OAAOjI,EAAKtE,QAAQ8E,eAC9B3D,GAASA,EAAM3B,MAAuB,WAAf2B,EAAM3B,OAC7B8E,EAAKtE,QAAQwM,YAAa,KAItCC,OAAQ,SAAUC,GACd,MAAOnI,MAAK8D,SAAShC,MAAMqG,IAE/BjD,QAAS,SAAUzJ,GAAV,GACDsE,GAAOC,KACPoI,EAAgBrI,EAAKtE,QACrBwM,EAAaG,EAAcH,WAC3BrL,EAAQwL,EAAc7H,cACtB/D,GACAxB,MAAOiN,EAAaxM,EAAQ0J,KAAKkD,cAAgB5M,EAAQ0J,KACzDvI,MAAOA,EACP0L,SAAUF,EAActL,OACxBmL,WAAYA,EAEhBlI,GAAKwI,MAAQ9M,EAAQ2J,KACrBrF,EAAK0F,cAAcjJ,IAEvBgM,OAAQ,SAAUrD,GACd,GAAI1J,GAAUuE,KAAKvE,OACnB0J,GAAuB,gBAATA,GAAoBA,EAAOnF,KAAKyI,cAC9CC,aAAa1I,KAAK2I,kBACblN,EAAQmN,mBAAqBzD,EAAK/J,QAAU+J,EAAK/J,QAAUK,EAAQoN,aACpE7I,KAAK8I,OAAS,SACT9I,KAAKyE,mBAGNzE,KAAKkF,SACDC,KAAMA,EACNC,MAAM,IAJVpF,KAAK+I,cAAc5D,KAS/B6D,QAAS,SAAUb,GACf,MAAOnI,MAAKkI,OAAOC,IAEvBc,MAAO,WACH,MAAOjJ,MAAKS,GAAG,GAAGuG,UAEtBH,QAAS,WAAA,GACD9G,GAAOC,KACPC,EAAKF,EAAKE,EACdzC,GAAO0C,GAAG2G,QAAQ1G,KAAKJ,GACvBA,EAAKmJ,oBACLnJ,EAAK+D,SAAS+C,UACd9G,EAAK5E,KAAKgO,IAAIlJ,GACdF,EAAKqJ,MAAMvC,UACP9G,EAAKsJ,OACLtJ,EAAKsJ,MAAMF,IAAI,QAASpJ,EAAKuJ,gBAGrCzN,SAAU,SAAUN,GAChB,GAAIwE,GAAOC,IACX,IAAIzE,IAAUT,EACV,MAAOiF,GAAK+D,SAASyF,oBAAoB,EAE7C,IAAqB,gBAAVhO,GAAoB,CAC3B,GAAIwE,EAAKtE,QAAQ4G,QACb,MAAOtC,GAAKO,WAAWkJ,SAAS3O,EAAEU,GAAOwC,KAAK,OAElDxC,GAAQV,EAAEkF,EAAKkJ,SAAS1N,MAAMA,GAElC,MAAOwE,GAAKO,WAAWoH,WAAWnM,IAEtCwH,cAAe,WACX,GAAIiG,GAAUhJ,KAAK8D,SAAShC,OACxBkH,IACAhJ,KAAK+B,SAAS0H,IAAIzJ,KAAKsE,aAAa5D,KAAK,wBAAyBsI,EAAQtI,KAAK,QAGvFuC,gBAAiB,WACbjD,KAAK+B,SAAS0H,IAAIzJ,KAAKsE,aAAaoF,WAAW,0BAEnDvI,WAAY,WAAA,GACJpB,GAAOC,KACPH,EAAUE,EAAKF,QACfpE,EAAUsE,EAAKtE,QACfkO,EAAS1M,EAAM0M,OACfC,EAAY/J,EAAQa,KAAKzD,EAAMyD,KAAK,eACpCmJ,EAAahK,EAAQa,KAAKzD,EAAMyD,KAAK,iBACpCjF,EAAQ8E,eAAiBqJ,IAC1BnO,EAAQ8E,cAAgBqJ,IAEvBnO,EAAQ+E,gBAAkBqJ,IAC3BpO,EAAQ+E,eAAiBqJ,GAE7B9J,EAAK+J,MAAQH,EAAOlO,EAAQ8E,eAC5BR,EAAKgK,OAASJ,EAAOlO,EAAQ+E,iBAEjCwJ,MAAO,SAAUlK,GACb,GAAIC,GAAOC,KAAMvE,EAAUsE,EAAKtE,QAASoE,EAAUE,EAAKgC,SAAS0H,IAAI1J,EAAKuE,YACtE7I,GAAQwO,UAAYnP,GACpB+E,EAAQa,KAAK,oBAAqBjF,EAAQwO,QAAU,OAAS,QAEjEnK,EAAKA,EAAKA,EAAK,IAAMC,EAAKU,GAAG,GAAGX,GAAKC,EAAKU,GAAG,GAAGX,GAChDD,EAAQa,KAAK,YAAaZ,GAC1BC,EAAKU,GAAGC,KAAK,YAAcX,EAAK0E,mBAA6B,SAAR,QAEzDyF,MAAO,WACH,GAAInK,GAAOC,IACXD,GAAKsF,UACLtF,EAAKoK,SAET9E,QAAS,WAAA,GAKDlC,GAJApD,EAAOC,KACPzE,EAAQwE,EAAKvE,cACb4O,EAAcrK,EAAKtE,QAAQT,MAC3BA,EAAQ+E,EAAK/E,OAEb+E,GAAKK,YAAcL,EAAK+D,SAAS0B,SAAW4E,IAC5CpP,EAAQoP,GAERpP,IAAUD,EAAUgF,EAAK6H,WAAa5M,IACtCmI,GAAU,EACH5H,IAAUT,GAAaS,IAAUwE,EAAKsK,YAC7ClH,GAAU,GAEVA,IACApD,EAAK6H,KAAO5M,EACZ+E,EAAKsK,UAAY9O,EACZwE,EAAKuK,SACNvK,EAAKF,QAAQsD,QAAQlF,GAEzB8B,EAAKoD,QAAQlF,IAEjB8B,EAAKwK,QAAS,GAElBC,MAAO,WACH,MAAOxK,MAAKM,WAAWmK,QAE3BC,QAAS,WACL,GAAI3K,GAAOC,KAAMvE,EAAUsE,EAAKtE,QAASkP,EAAW5K,EAAKF,QAAQQ,GAAG,aAChE5E,GAAQiG,SAAW5G,IACnBW,EAAQkG,QAAUlG,EAAQiG,SAEzBjG,EAAQkG,SAAWgJ,EACpB5K,EAAK2B,QAAO,GAEZ3B,EAAKiC,SAASjC,EAAKF,QAAQQ,GAAG,gBAGtCuK,WAAY,SAAU/O,GAClB,GAAIb,GAAQgF,KAAK+J,OAAOlO,EAIxB,OAHIb,KAAUF,IACVE,EAAQgF,KAAK8J,MAAMjO,IAEhBb,GAEX6P,cAAe,WAAA,GACPC,GAAe,EACfC,EAAW/K,KAAK8D,SAASkH,QAAQC,QAAQ,WAS7C,OARAF,GAASG,KAAK,WACV,GAAIrL,GAAUhF,EAAEmF,KAEZ8K,IAAgBxN,EADhBuC,EAAQsL,SAAS,iBACWtL,EAAQmH,WAERnH,KAG7BiL,GAEXM,QAAS,SAAUhQ,GAAV,GAKDiQ,GACAC,EACAC,EANAxL,EAAOC,KACP7E,EAAO4E,EAAK5E,KACZkI,EAAStD,EAAKtE,QAAQ4H,OACtBmI,EAAUzL,EAAKqJ,MAAMoC,SAIzB,IAAIpQ,GAAU2E,EAAKtE,QAAQ+F,eAAgB,CAEvC,GADA8J,EAASnQ,EAAKsO,IAAItO,EAAKsQ,OAAO,2BAA2BrE,QACpDjM,EAAKkF,GAAG,YAET,MADAiL,GAAOI,OACP,CAEJrI,GAAStD,EAAK+D,SAASkH,QAAQ,GAAGW,aAAetI,EAASA,EAAS,OACnEiI,EAAOjI,OAAOA,GACC,SAAXA,IACAgI,EAAYtL,EAAK8K,gBACjBU,EAAejO,EAAYzC,EAAEkF,EAAKuH,UAAY,EAC9CjE,EAASA,EAASgI,EAAYE,GAElCxL,EAAK+D,SAASkH,QAAQ3H,OAAOA,GACxBmI,GACDF,EAAOI,OAGf,MAAOrI,IAEXuI,iBAAkB,WACd,GAA2EC,GAAeC,EAAtF3Q,EAAO6E,KAAK7E,KAAM4Q,EAAQ5Q,EAAK,GAAG6Q,MAAMD,MAAOE,EAAUjM,KAAKiM,OAClE,IAAK9Q,EAAK4C,KAAKc,KAAUkN,EAkBzB,MAfAF,GAAgB3O,OAAOgP,iBAAmBhP,OAAOgP,iBAAiBD,EAAQ,GAAI,MAAQ,EACtFH,EAAgBK,WAAWN,GAAiBA,EAAcE,QAAU3O,EAAW6O,GAC3EJ,GAAiB5M,EAAQE,OACzB2M,GAAiBK,WAAWN,EAAcO,aAAeD,WAAWN,EAAcQ,cAAgBF,WAAWN,EAAcS,iBAAmBH,WAAWN,EAAcU,mBAGvKR,EAD2B,eAA3B5Q,EAAKqR,IAAI,cACDV,GAAiB1O,EAAWjC,GAAQA,EAAK4Q,SAEzCD,EAEZ3Q,EAAKqR,KACDC,WAAYR,EAAQO,IAAI,eACxBT,MAAO/L,KAAKvE,QAAQiR,UAAY,OAASX,EACzCY,SAAUZ,IACXhO,KAAKc,EAAOkN,IACR,GAEXa,aAAc,SAAUvI,GACpBrE,KAAK4L,mBACD5L,KAAKmD,QAAQ7E,GACb+F,EAAEG,kBAEFxE,KAAK+B,SAASrB,KAAK,iBAAiB,GACpCV,KAAKS,GAAGC,KAAK,eAAe,KAGpCmM,cAAe,SAAUxI,GACjBrE,KAAKmD,QAAQ5E,GACb8F,EAAEG,kBAEFxE,KAAK+B,SAASrB,KAAK,iBAAiB,GACpCV,KAAKS,GAAGC,KAAK,eAAe,KAGpCoM,WAAY,WAAA,GACJhJ,GAAW9D,KAAK8D,SAChBiJ,GAAiBjJ,EAAShC,QAC1BvG,EAAQL,EAAK4I,EAASxI,SACtBC,KAAUT,GAAakF,KAAKvE,QAAQuR,gBAAkBD,IACtDxR,EAAQ,GAERA,IAAUT,EACVgJ,EAAShC,MAAMvG,GACRwR,GACPjJ,EAASmJ,cAAc,IAG/BC,uBAAwB,SAAU7J,GAAV,GAChB8J,GAAKnN,KAAKS,GAAGuG,SAAS,kBACtBoG,EAAcpN,KAAK8D,SAASkH,QAAQqC,KAAK,mBACzCC,EAAU,CACVF,GAAY,IAAuC,SAAjCA,EAAY,GAAGpB,MAAMuB,UACxB,SAAXlK,IACAiK,EAAUrQ,EAAMS,QAAQ8P,aAE5BF,GAAWnB,WAAWgB,EAAGX,IAAI,sBAAuB,IAAML,WAAWgB,EAAGnG,SAAS,YAAYwF,IAAI,iBAAkB,IACnHY,EAAYZ,IAAI,gBAAiBc,KAGzCG,sBAAuB,SAAU/H,GAC7B,GAAIrC,GAASrD,KAAKoL,QAAQpL,KAAKM,WAAWoH,WAAWtM,QAAUsK,EAC/D1F,MAAKkN,uBAAuB7J,IAEhCqK,aAAc,SAAUhI,GAChB1F,KAAKvE,QAAQ4G,UAGZrC,KAAKoJ,MAAMvJ,QAAQQ,GAAG,YAOvBL,KAAKyN,sBAAsB/H,GAN3B1F,KAAKoJ,MAAMuE,IAAI,OAAQ,SAAUjI,GAC7B,MAAO3G,GAAM,WACTiB,KAAKyN,sBAAsB/H,IAC5B1F,OACLG,KAAKH,KAAM0F,MAKrBkI,OAAQ,WACJ,GAAI7N,GAAOC,IACXD,GAAKqJ,MAAQ,GAAIjM,GAAG0Q,MAAM9N,EAAK5E,KAAM2D,KAAWiB,EAAKtE,QAAQ2N,OACzD0E,OAAQ/N,EAAKkM,QACb7G,KAAMrG,EAAMgB,EAAK6M,aAAc7M,GAC/BoK,MAAOpL,EAAMgB,EAAK8M,cAAe9M,GACjCgO,UAAWhO,EAAKtE,QAAQsS,UACxBC,MAAOtQ,EAAQsQ,MAAMjO,EAAKkM,aAGlCgC,kBAAmB,WACX7O,GACAY,KAAK7E,KAAK+S,KAAK,KAAKC,IAAI,cAAczN,KAAK,eAAgB,OAGnE0N,aAAc,SAAU/J,GACpBxJ,EAAEwJ,EAAEgK,eAAeC,YAAYnQ,EAAkB,eAAXkG,EAAEpJ,OAE5CsT,QAAS,SAAUnJ,EAAMoJ,GAAhB,GACDzO,GAAOC,KACPyO,EAAe/Q,EAAQgR,WAAahR,EAAQiR,OAASjR,EAAQkR,YAAclR,EAAQmR,SACvFzJ,GAAOA,IAAStK,EAAYsK,GAAQrF,EAAKqJ,MAAMoC,UAC1CgD,GAAiBC,GAAgB1O,EAAKgC,SAAS,KAAOnE,MACvDmC,EAAK+O,UAAW,EAChB/O,EAAKgC,SAASD,QACd/B,EAAK+O,UAAW,GAEpB/O,EAAKqF,EAAO9G,EAAOC,MAEvBwQ,gBAAiB,WACb,GAAIhP,GAAOC,IACND,GAAKiP,mBAAqBjP,EAAK6H,OAAS7H,EAAK/E,SAAW+E,EAAKsK,YAActK,EAAKvE,gBACjFuE,EAAKiP,mBAAoB,EACzBjP,EAAKoD,QAAQ3E,GAAWyQ,cAAelP,EAAKmP,mBAGpDC,eAAgB,WACRnP,KAAKoP,sBAAwBpP,KAAKhF,SAClCgF,KAAKmD,QAAQlF,IAGrBiL,kBAAmB,WACf,GAAInJ,GAAOC,IACXD,GAAKO,WAAW+O,OAAO1Q,EAAcoB,EAAKuP,sBAAsBD,OAAOzQ,EAAYmB,EAAKwP,oBAAoBF,OAAO,QAAStP,EAAKyP,gBAErIC,mBAAoB,SAAUhU,EAAST,GACnC,GAAI0U,IAAYjU,EAAQT,gBAAiB2U,OAAQlU,EAAQT,MAAMI,OAASK,EAAQT,SAAWA,YAAiB2U,OAAQ3U,EAAMI,OAASJ,EACnI,IAAI0U,GAAYjU,EAAQ4G,SAAkD,kBAAhC5G,GAAQ4G,QAAQuN,YACtD,KAAUC,OAAM,sKAgB5B/Q,GAAOY,GACHoQ,QAAS,SAAUC,EAAMC,GACrB,GAAIC,GAAK7U,EAAQ2P,EAAWiF,EAAWhJ,QACvC,KAAK+I,GAAQA,EAAKC,aAAeA,EAC7B,QAEJ,KAAKC,EAAM,EAAG7U,EAAS2P,EAAS3P,OAAQ6U,EAAM7U,EAAQ6U,IAClD,GAAIF,IAAShF,EAASkF,GAClB,MAAOA,EAGf,WAEJlV,UAAWA,IAEfkC,EAAME,GAAGuC,KAAOA,EAChBvC,EAAG+S,OAASxQ,EAAKZ,QACbc,KAAM,SAAUC,EAASpE,GACrBiE,EAAKQ,GAAGN,KAAKO,KAAKH,KAAMH,EAASpE,GACjCuE,KAAKmQ,SAAWnQ,KAAKH,QAAQ8H,OAEjCyI,cAAe,SAAU9P,GAAV,GAEPmL,GADA1L,EAAOC,IAEXD,GAAKtE,QAAQ6E,WAAaA,EAC1BP,EAAKsQ,cACDtQ,EAAK+D,SAAS0B,UACdzF,EAAKuQ,cAAgB,MAEzBvQ,EAAK+D,SAASsM,cAAcrQ,EAAKO,YAC7BP,EAAKtE,QAAQ+G,UACbzC,EAAKO,WAAWiQ,QAEpB9E,EAAS1L,EAAKyQ,gBACV/E,GACA1L,EAAK0Q,eAAehF,IAG5BtB,MAAO,WACHnK,KAAKoJ,MAAMe,SAEf7O,OAAQ,SAAU6M,GACd,GAAIpI,GAAOC,IACX,OAAImI,KAAcrN,EACPiF,EAAKvE,cAELuE,EAAK2Q,QAAQvI,GAAWjE,KAAK,WAChCnE,EAAK6H,KAAO7H,EAAKkF,YACjBlF,EAAKsK,UAAYtK,EAAKvE,iBAIlCyJ,UAAW,SAAUjK,EAAOiV,GACxB,MAAOjQ,MAAKA,KAAKI,UAAY,kBAAoB,kBAAkBpF,EAAOiV,IAE9EU,eAAgB,SAAU3V,GACtB,GAAI6E,GAAUG,KAAKH,QAAQ,EAC3B,OAAI7E,KAAUF,EACH+E,EAAQ7E,OAED,OAAVA,IACAA,EAAQ,IAEZ6E,EAAQ7E,MAAQA,EAHhB,IAMR4V,gBAAiB,SAAU5V,EAAOiV,GAAjB,GAETP,GADA7P,EAAUG,KAAKH,QAAQ,EAE3B,OAAI7E,KAAUF,EACHO,EAAkBwE,GAAS7E,OAAS,IAE/CK,EAAkBwE,GAASlE,UAAW,EAClCsU,IAAQnV,IACRmV,MAEJP,EAAqB,OAAV1U,GAA4B,KAAVA,EACzB0U,GAAYO,MACZjQ,KAAK6Q,QAAQ7V,GAETA,EACA6E,EAAQ7E,MAAQA,EAEhB6E,EAAQrE,cAAgByU,EAXhC5U,IAeJwV,QAAS,SAAU7V,GAAV,GACD+E,GAAOC,KACPH,EAAUE,EAAKF,QACfiR,EAAS/Q,EAAKgR,aACbD,KACDA,EAASjW,EAAE,aACXkF,EAAKgR,cAAgBD,EACrBjR,EAAQgB,OAAOiQ,IAEnBA,EAAOxL,KAAKtK,GACZ8V,EAAO,GAAGnV,UAAW,GAEzBqV,UAAW,WACP,GAAIjR,GAAOC,IACX0I,cAAa3I,EAAKkR,OAClBlR,EAAKmR,WAAWpM,YAAY1G,GAC5B2B,EAAKgC,SAASrB,KAAK,aAAa,GAChCX,EAAKkR,MAAQ,KACblR,EAAK8E,cAETsM,UAAW,WACP,GAAIpR,GAAOC,IACXD,GAAKqR,UAAW,EACZrR,EAAKkR,QAGTlR,EAAKkR,MAAQI,WAAW,WAChBtR,EAAKmR,aACLnR,EAAKgC,SAASrB,KAAK,aAAa,GAChCX,EAAKmR,WAAWtM,SAASxG,GACzB2B,EAAK2E,eAEV,OAEP4M,YAAa,WACTtR,KAAKoR,UAAW,EAChBpR,KAAKgR,aAETX,YAAa,WACT,GAAwGJ,GAApGlQ,EAAOC,KAAMH,EAAUE,EAAKF,QAASpE,EAAUsE,EAAKtE,QAAS6E,EAAa7E,EAAQ6E,cACtFA,GAAazF,EAAEmE,QAAQsB,IAAgBvC,KAAMuC,GAAeA,EACxDP,EAAKK,YACL6P,EAAMpQ,EAAQ,GAAGrE,cACbyU,OACAxU,EAAQF,MAAQ0U,GAEpB3P,EAAWhF,OAASuE,EACpBS,EAAW0H,SACLpL,MAAOnB,EAAQ8E,gBACf3D,MAAOnB,EAAQ+E,kBAGrBT,EAAKO,WACLP,EAAKmJ,qBAELnJ,EAAKuP,qBAAuBvQ,EAAMgB,EAAKoR,UAAWpR,GAClDA,EAAKwP,mBAAqBxQ,EAAMgB,EAAKuR,YAAavR,GAClDA,EAAKyP,cAAgBzQ,EAAMgB,EAAKiR,UAAWjR,IAE/CA,EAAKO,WAAarD,EAAMc,KAAKwT,WAAWC,OAAOlR,GAAY0D,KAAKrF,EAAcoB,EAAKuP,sBAAsBtL,KAAKpF,EAAYmB,EAAKwP,oBAAoBvL,KAAK,QAASjE,EAAKyP,gBAE1KiC,WAAY,WACRzR,KAAK8D,SAAS4N,cAElBC,UAAW,WACP3R,KAAK8D,SAAS8N,aAElBC,UAAW,WACP7R,KAAK8D,SAASgO,aAElBC,UAAW,WACP/R,KAAK8D,SAASkO,aAElBC,MAAO,SAAU5N,GAAV,GAKCxI,GACAqW,EACAlJ,EAwDImJ,EAGIC,EA8BJC,EA/FJtS,EAAOC,KACP8D,EAAW/D,EAAK+D,SAChBwO,EAAMjO,EAAEkO,QACRC,EAAOF,IAAQ7U,EAAKgV,IAIxB,IAAIH,IAAQ7U,EAAKiV,IAAMF,EAAM,CACzB,GAAInO,EAAEsO,OACF5S,EAAKsH,OAAOmL,OACT,CACH,IAAK1O,EAAS0B,QAUV,MATKzF,GAAK6S,SACN7S,EAAKO,WAAWqN,IAAI1P,EAAQ,WACxB8B,EAAK6S,QAAS,EACd7S,EAAKkS,MAAM5N,KAEftE,EAAK6S,QAAS,EACd7S,EAAK0F,iBAETpB,EAAEG,kBACK,CAiBX,IAfAwE,EAAUjJ,EAAKmI,SACVnI,EAAK6S,QAAY5J,IAAWA,EAAQmC,SAAS,sBAC1CqH,GACAzS,EAAK8R,YACA9R,EAAKmI,UACNnI,EAAK4R,cAGT5R,EAAKgS,YACAhS,EAAKmI,UACNnI,EAAK0R,eAIjB5V,EAAWiI,EAAS+O,gBAAgB/O,EAASgP,gBAAgB/S,EAAKmI,WAC9DnI,EAAKoD,QAAQ1E,GACT5C,SAAUA,EACVS,KAAMyD,EAAKmI,WAGf,MADAnI,GAAKmI,OAAOc,GACZ,CAEJjJ,GAAK2Q,QAAQ3Q,EAAKmI,UAAU,GAAMhE,KAAK,WAC9BnE,EAAKqJ,MAAMoC,WACZzL,EAAKmK,UAIjB7F,EAAEG,iBACF0N,GAAU,MACP,IAAII,IAAQ7U,EAAKsV,OAAST,IAAQ7U,EAAKuV,IAAK,CAU/C,GATIjT,EAAKqJ,MAAMoC,WACXnH,EAAEG,iBAENwE,EAAUjJ,EAAKmI,SACfrM,EAAWkE,EAAKlE,WACXkE,EAAKqJ,MAAMoC,WAAe3P,GAAYkE,EAAKuF,SAAWvF,EAAK+J,MAAMjO,KAClEmN,EAAU,MAEVmJ,EAAepS,EAAKuE,aAAevE,EAAKuE,YAAY,KAAO1G,IAC3DoL,EAAS,CAGT,GAFAnN,EAAWiI,EAAS+O,gBAAgB/O,EAASgP,gBAAgB9J,IACzDoJ,EAAgBrS,EAAKgK,OAAOlO,KAAc6D,EAAK3E,UAAUgF,EAAK/E,cAAgB+E,GAAKgK,OAAOlO,IAC1FuW,GAAiBrS,EAAKoD,QAAQ1E,GAC1B5C,SAAUA,EACVS,KAAM0M,IAEV,MAEJjJ,GAAK2Q,QAAQ1H,OACNjJ,GAAKkT,QACZlT,EAAKkF,UAAUlF,EAAKkT,MAAMtL,OAC1B5H,EAAK+D,SAAS9I,MAAM+E,EAAKkT,MAAMtL,OAE/B5H,GAAKmT,eACLnT,EAAKmT,cAAcnT,EAAKkM,SAExBkG,GAAgBG,IAAQ7U,EAAKuV,IAC7BjT,EAAKkM,QAAQkH,WAEbpT,EAAKmK,QAETnK,EAAKoK,QACL+H,GAAU,MACHI,KAAQ7U,EAAK2V,KAChBrT,EAAKqJ,MAAMoC,WACXnH,EAAEG,iBAENzE,EAAKoK,QACL+H,GAAU,IACHnS,EAAKqJ,MAAMoC,WAAc8G,IAAQ7U,EAAK4V,UAAYf,IAAQ7U,EAAK6V,SACtEjP,EAAEG,iBACE6N,EAAYC,IAAQ7U,EAAK4V,SAAW,KACxCvP,EAASyP,WAAWlB,EAAYvO,EAAS0P,gBACzCtB,GAAU,EAEd,OAAOA,IAEXuB,WAAY,WAAA,GACJ1T,GAAOC,KACP0T,IAAa3T,EAAKO,WAAWmK,OAAOrP,MACpC2E,GAAKqR,UAAYrR,EAAKtE,QAAQkY,aAG7B5T,EAAK+D,SAAS0B,SAAYzF,EAAK6S,QAAWc,IAC3C3T,EAAK6S,QAAS,EACd7S,EAAKO,WAAWiQ,QAAQrM,KAAK,WACzBnE,EAAK6S,QAAS,MAI1BgB,SAAU,SAAU7V,EAAM8V,EAAa7Y,GACnC,GAAuG8Y,GAAQjY,EAAUkY,EAAUC,EAA/HjU,EAAOC,KAAMH,EAAUE,EAAKF,QAASoU,EAAcpU,EAAQ,GAAIzE,EAAS2C,EAAK3C,OAAQK,EAAU,GAA2CwU,EAAM,CAIpJ,KAHI4D,IACApY,EAAUoY,GAEP5D,EAAM7U,EAAQ6U,IACjB6D,EAAS,UACTjY,EAAWkC,EAAKkS,GAChB8D,EAAWhU,EAAK+J,MAAMjO,GACtBmY,EAAYjU,EAAKgK,OAAOlO,GACpBmY,IAAclZ,IACdkZ,GAAa,GACTA,EAAUE,QAAQ,YAClBF,EAAYA,EAAUG,QAAQ7U,EAAY,WAE9CwU,GAAU,WAAaE,EAAY,KAEvCF,GAAU,IACNC,IAAajZ,IACbgZ,GAAUnW,EAAWoW,IAEzBD,GAAU,YACVrY,GAAWqY,CAEfjU,GAAQoH,KAAKxL,GACTT,IAAUF,IACVmZ,EAAYjZ,MAAQA,EAChBiZ,EAAYjZ,QAAUA,IACtBiZ,EAAYzY,mBAGhByY,EAAYzY,qBACZsY,EAASzY,EAAkB4Y,GACvBH,GACAA,EAAOM,aAAa1V,EAAUA,KAI1C2V,OAAQ,WACJ,GAAItU,GAAOC,KAAMH,EAAUE,EAAKF,QAASyU,EAASzU,EAAQa,KAAK,QAAS6T,EAAOD,EAASzZ,EAAE,IAAMyZ,GAAUzU,EAAQ2U,QAAQ,OACtHD,GAAK,KACLxU,EAAKuJ,cAAgB,WACjB+H,WAAW,WACPtR,EAAK/E,MAAM+E,EAAKoQ,aAGxBpQ,EAAKsJ,MAAQkL,EAAKzT,GAAG,QAASf,EAAKuJ,iBAG3CkH,cAAe,WAAA,GAKPiE,GACAhJ,EALAiJ,EAAO1U,KAAKvE,QAAQiZ,IACxB,IAAK1U,KAAKvE,QAAQkY,YAQlB,MALIc,GAAgB5Z,EAAE,IAAMmF,KAAKvE,QAAQkY,aACrClI,EAASgJ,EAAc1W,KAAK,QAAU2W,GACrCjJ,IACDA,EAASgJ,EAAc1W,KAAK,QAAUwB,EAAiBmV,KAEpDjJ,GAEXkJ,SAAU,WAAA,GAIFlJ,GAHA1L,EAAOC,KACPvE,EAAUsE,EAAKtE,QACfmZ,EAAUnZ,EAAQkY,WAEtB,IAAIiB,EAAS,CAET,GADAnJ,EAAS1L,EAAKyQ,iBACT/E,EACD,MAEJ1L,GAAK8U,qBAAuB9V,EAAMgB,EAAK+U,gBAAiB/U,GACxDA,EAAKgV,0BACLtZ,EAAQ+G,UAAW,EACnBiJ,EAAOzH,KAAK,MAAO,WACfjE,EAAK4N,IAAI,MAAO,SAAUtJ,GACtBtE,EAAKiV,eAAiB3Q,EAAErJ,UAGhCyQ,EAAOwJ,MAAMzW,EAASuB,EAAK8U,sBACvBpJ,EAAO3H,SAAS0B,SAChBzF,EAAKmV,wBACLnV,EAAK0Q,eAAehF,KAEpBA,EAAOkC,IAAI,YAAa,WACpB5N,EAAKmV,0BAEJzJ,EAAOzQ,SACR+E,EAAK2B,QAAO,MAK5BwT,sBAAuB,WAAA,GACfnV,GAAOC,KACPyL,EAAS1L,EAAKyQ,gBACd2C,EAAWjU,EAAO,OAAS,UAC/BuM,GAAO1J,SAAS0H,IAAIgC,EAAOnH,aAAaN,KAAK,QAAS,WAClDyH,EAAO4D,OAAO7Q,EAASuB,EAAK8U,sBAC5BpJ,EAAOwJ,MAAMhX,EAAQ8B,EAAK8U,wBAE9BpJ,EAAO1J,SAAS0H,IAAIgC,EAAOnH,aAAaN,KAAKmP,EAAU,WACnD1H,EAAO4D,OAAOpR,EAAQ8B,EAAK8U,sBAC3BpJ,EAAOwJ,MAAMzW,EAASuB,EAAK8U,yBAGnCC,gBAAiB,SAAUzQ,GAAV,GACToH,GAASzL,KAAKwQ,gBACd2E,EAAqBnV,KAAKhF,OAC9BgF,MAAKkP,eAAiB7K,EAAE4K,cACpBjP,KAAK8D,SAAS0B,SACdxF,KAAKoV,gBAAgB3J,GAAQ,GAEjCzL,KAAKyQ,eAAehF,EAAQ0J,IAEhCE,eAAgB,SAAU5J,GAAV,GACR1L,GAAOC,KACPhF,EAAQ+E,EAAKkF,aAAelF,EAAKiV,cAChCjV,GAAKgV,uBAAuB3Z,SAC7B2E,EAAKiV,eAAiB,MAEtBjV,EAAKmP,eACLnP,EAAKqV,gBAAgB3J,GAAQ,GACtBzQ,GACHA,IAAU+E,EAAK+D,SAAS9I,QAAQ,IAChC+E,EAAK/E,MAAMA,GAEV+E,EAAKO,WAAWmK,OAAO,IAAM1K,EAAKvE,oBACnCuE,EAAKqV,gBAAgB3J,GAAQ,IAE1B1L,EAAKO,WAAWoH,WAAWtM,QAClC2E,EAAKzE,OAAOyE,EAAKtE,QAAQF,OAE7BwE,EAAK2B,SACL3B,EAAKgP,kBACLhP,EAAKoP,iBACLpP,EAAKmP,gBAAiB,GAE1BuB,eAAgB,SAAUhF,EAAQ0J,GAAlB,GAKRG,GAKIC,EATJxV,EAAOC,KACPnE,EAAW4P,EAAO5P,WAClB2Z,EAAc3Z,EAAW4P,EAAO1B,OAAOlO,GAAY,KACnDgO,EAAa9J,EAAKtE,QAAQga,kBAAoBhK,EAAOhQ,QAAQ+E,cAEjET,GAAKqP,oBAAsB+F,IAAuBra,EAAYqa,EAAqBpV,EAAK/E,QACpFwa,GAA+B,IAAhBA,GACfF,EAAcvV,EAAKO,WAAWxD,aAC9BH,EAAsB2Y,EAAazL,GAC/B0L,EAAU,WACV,GAAIG,GAAiB3V,EAAKgV,uBAAuBY,OAC7CD,IACA3V,EAAKsP,OAAO,YAAaqG,GAE7BA,EAAiB3V,EAAKgV,uBAAuB,GACzCW,GACA3V,EAAKkV,MAAM,YAAaS,GAE5B3V,EAAKsV,eAAe5J,IAExB1L,EAAKgV,uBAAuB1Y,KAAKkZ,GACU,IAAvCxV,EAAKgV,uBAAuB3Z,QAC5B2E,EAAKkV,MAAM,YAAaM,GAE5BxV,EAAKiG,YAAa,EAClBjG,EAAK0F,eACD7I,MAAOiN,EACPvB,SAAU,KACVtN,MAAOwa,IAEXzV,EAAKiG,YAAa,IAElBjG,EAAK2B,QAAO,GACZ3B,EAAKqV,gBAAgB3J,GACrB1L,EAAKgP,kBACLhP,EAAKoP,iBACLpP,EAAKmP,gBAAiB,MAI9BnS,EAAiB,cACjBC,EAAaC,EAAME,GAAGwC,gBAAgBb,QACtCc,KAAM,SAAUC,EAASpE,GACrB+B,EAAO0C,GAAGN,KAAKO,KAAKH,KAAMH,EAASpE,GACnCuE,KAAKH,QAAQa,KAAK,OAAQ,WAAWI,GAAG,QAAU/D,EAAgB,KAAMgC,EAAMiB,KAAK2C,OAAQ3C,OAAOc,GAAG,aAAe/D,EAAgB,KAAM,WACtIlC,EAAEmF,MAAM4E,SAASzG,KAClB2C,GAAG,aAAe/D,EAAgB,KAAM,WACvClC,EAAEmF,MAAM8E,YAAY3G,KAExB6B,KAAKgL,QAAUhL,KAAKH,QAAQ+V,KAAK,yDAA6DnK,SAC9FzL,KAAKuH,OAASvH,KAAKgL,QAAQ6K,OAAO,2DAA2DxI,OAC7FrN,KAAKwF,OAAM,GACXxF,KAAK8V,UAAY7Y,EAAM8Y,OACvB/V,KAAKgW,oBACLhW,KAAKiW,SACLjW,KAAKkW,cACLlW,KAAKmW,UACL,IAAInb,GAAQgF,KAAKvE,QAAQT,KACrBA,KACAgF,KAAKmW,QAAUtb,EAAEmE,QAAQhE,GAASA,EAAMob,MAAM,IAAMpb,IAExDgF,KAAKqW,UACLrW,KAAKsW,aACLtW,KAAKoQ,cAAcpQ,KAAKvE,QAAQ6E,YAChCN,KAAKuW,UAAYxX,EAAM,WACnB,GAAIgB,GAAOC,IACX0I,cAAa3I,EAAKyW,WAClBzW,EAAKyW,UAAYnF,WAAW,WACxBtR,EAAK0W,iBACN,KACJzW,OAEPvE,SACIiZ,KAAM,aACNlU,eAAgB,KAChBa,gBAAgB,EAChBoB,YAAY,EACZe,SAAU,KACVF,cAAe,KACfC,mBAAoB,MAExBmT,QACI,QACAzY,EACA,WACA,aACA,cACA,YACA,sBAEJmS,cAAe,SAAUuG,GAAV,GAGP3b,GAFA+E,EAAOC,KACPM,EAAaqW,KAEjBrW,GAAazF,EAAEmE,QAAQsB,IAAgBvC,KAAMuC,GAAeA,EAC5DA,EAAarD,EAAMc,KAAKwT,WAAWC,OAAOlR,GACtCP,EAAKO,YACLP,EAAKO,WAAW+O,OAAOpR,EAAQ8B,EAAK6W,iBACpC5b,EAAQ+E,EAAK/E,QACb+E,EAAK/E,UACL+E,EAAKyF,OAAM,GACXzF,EAAK/E,MAAMA,IAEX+E,EAAK6W,gBAAkB7X,EAAMgB,EAAK8W,QAAS9W,GAE/CA,EAAKkG,YAAY3F,EAAWxD,UAC5BiD,EAAKO,WAAaA,EAAW0D,KAAK/F,EAAQ8B,EAAK6W,iBAC/C7W,EAAK+W,gBAETC,KAAM,WACF,MAAO/W,MAAKM,WAAWyW,QAE3BtV,WAAY,SAAUhG,GAClB+B,EAAO0C,GAAGuB,WAAWtB,KAAKH,KAAMvE,GAChCuE,KAAKqW,UACLrW,KAAKsW,aACLtW,KAAKgX,WAETnQ,QAAS,WACL7G,KAAKH,QAAQsJ,IAAIpM,GACbiD,KAAK4W,iBACL5W,KAAKM,WAAW+O,OAAOpR,EAAQ+B,KAAK4W,iBAExClO,aAAa1I,KAAKwW,WAClBhZ,EAAO0C,GAAG2G,QAAQ1G,KAAKH,OAE3B6S,gBAAiB,SAAUtX,GACvB,MAAOyE,MAAKM,WAAWoH,WAAWnM,IAEtCiY,aAAc,WACV,MAAOxT,MAAKgL,QAAQ,GAAGiM,cAE3BhK,cAAe,SAAU1R,GACrB,GAAIe,GAAO0D,KAAKH,QAAQ,GAAGmH,SAASzL,EAChCe,IACA0D,KAAKkX,OAAO5a,IAGpBiX,WAAY,SAAUvY,GAClBgF,KAAKgL,QAAQmM,UAAUnX,KAAKgL,QAAQmM,YAAcnc,IAEtDkc,OAAQ,SAAU5a,GACd,GAAKA,EAAL,CAGIA,EAAK,KACLA,EAAOA,EAAK,GAEhB,IAAI0O,GAAUhL,KAAKgL,QAAQ,GAAIoM,EAAgB9a,EAAK+O,UAAWgM,EAAmB/a,EAAKwO,aAAcwM,EAAmBtM,EAAQmM,UAAWI,EAAsBvM,EAAQiM,aAAcO,EAAiBJ,EAAgBC,CACpNC,GAAmBF,EACnBE,EAAmBF,EACZI,EAAiBF,EAAmBC,IAC3CD,EAAmBE,EAAiBD,GAExCvM,EAAQmM,UAAYG,IAExB/N,kBAAmB,SAAUkO,GACzB,MAAIA,KAAc3c,EACPkF,KAAKkW,WAAWE,SAE3BpW,KAAKkW,WAAauB,EAClBzX,KAAKmW,QAAUnW,KAAK0X,WAAWD,GAD/BzX,IAGJ0X,WAAY,SAAUD,GAClB,GAAI9N,GAAS3J,KAAK2X,YAClB,OAAO9c,GAAE+c,IAAIH,EAAW,SAAU5b,GAC9B,MAAO8N,GAAO9N,MAGtBiW,UAAW,WACP,GAAI9I,GAAUhJ,KAAK8B,OAIfkH,GAHCA,EAGSA,EAAQ6O,OAFR,EAId7X,KAAK8B,MAAMkH,IAEfgJ,UAAW,WACP,GAAIhJ,GAAUhJ,KAAK8B,OAIfkH,GAHCA,EAGSA,EAAQqE,OAFRrN,KAAKH,QAAQ,GAAGmH,SAAS5L,OAAS,EAIhD4E,KAAK8B,MAAMkH,IAEf0I,WAAY,WACR1R,KAAK8B,MAAM9B,KAAKH,QAAQ,GAAGmH,SAAS,KAExC4K,UAAW,WACP5R,KAAK8B,MAAM5G,EAAK8E,KAAKH,QAAQ,GAAGmH,YAEpClF,MAAO,SAAUqG,GAAV,GAGC2P,GAFA/X,EAAOC,KACPF,EAAKC,EAAK+V,SAEd,OAAI3N,KAAcrN,EACPiF,EAAKgY,UAEhB5P,EAAYjN,EAAK6E,EAAKiY,KAAK7P,IAC3BA,EAAYtN,EAAEmF,KAAKH,QAAQ,GAAGmH,SAASmB,IACnCpI,EAAKgY,WACLhY,EAAKgY,SAASjT,YAAY5G,GAASwL,WAAW,iBAAiBA,WAAW1L,GAC1E+B,EAAKoD,QAAQ,eAEjB2U,IAAiB3P,EAAU,GACvB2P,IACA3P,EAAUvD,SAAS1G,GACnB6B,EAAKmX,OAAO/O,GACZA,EAAUzH,KAAK,KAAMZ,IAEzBC,EAAKgY,SAAWD,EAAe3P,EAAY,KAC3CpI,EAAKoD,QAAQ,YAbbgF,IAeJ8P,WAAY,WACR,MAAOjY,MAAK8B,QAAU9B,KAAK8B,QAAQvG,QAAUT,GAEjDod,WAAY,SAAUA,GAClBlY,KAAKmY,YAAcD,GAEvB5c,OAAQ,SAAU8c,GAAV,GAOAC,GAQAC,EACAC,EAfAxY,EAAOC,KACPyC,EAAa1C,EAAKtE,QAAQgH,WAC1B+V,EAAiC,aAAf/V,GAA6BA,KAAe,EAC9DgW,EAAkB1Y,EAAKiW,iBACvB0C,KACA5S,IAEJ,OAAIsS,KAAYtd,EACL2d,EAAgBrC,SAE3BgC,EAAUrY,EAAKiY,KAAKI,GACG,IAAnBA,EAAQhd,QAAgBgd,EAAQ,UAChCA,MAEAE,EAAWzd,EAAE8d,WAAWC,UACxBL,EAAWxY,EAAK8Y,aAChBN,IAAaC,GAAmBzY,EAAK+Y,kBAAkBV,GAChDE,EAEPE,IAAoBD,GAAY1d,EAAEiV,QAAQ5U,EAAKkd,GAAUK,SACrD1Y,EAAKmW,WAAW9a,QAAU2E,EAAKkW,MAAM7a,SACrC2E,EAAKmW,YAAcnW,EAAKkW,MAAMwC,EAAgB,IAAInc,OAE/Cgc,IAEXD,EAAStY,EAAKgZ,UAAUX,GACxBtS,EAAUuS,EAAOvS,QACjBsS,EAAUC,EAAOD,QACbA,EAAQhd,SACJod,IACAJ,GAAWld,EAAKkd,KAEpBM,EAAQ3Y,EAAK2Q,QAAQ0H,KAErBM,EAAMtd,QAAU0K,EAAQ1K,UACxB2E,EAAKiZ,eAAiB,KACtBjZ,EAAKoD,QAAQlF,GACTya,MAAOA,EACP5S,QAASA,KAGVwS,KAEXW,SAAU,SAAUC,GAIhB,MAHAlZ,MAAKgW,iBAAiBmD,OAAOD,EAAU,GACvClZ,KAAKmW,QAAQgD,OAAOD,EAAU,GAC9BlZ,KAAKgZ,eAAiB,MAElBE,SAAUA,EACVrd,SAAUmE,KAAKkW,WAAWiD,OAAOD,EAAU,GAAG,KAGtDE,SAAU,SAAUpe,GAChBA,EAAQH,EAAEmE,QAAQhE,IAAUA,YAAiB8C,GAAkB9C,EAAMob,MAAM,IAAMpb,GACjFgF,KAAKmW,QAAUnb,EACfgF,KAAKgZ,eAAiB,MAE1Bhe,MAAO,SAAUA,GAAV,GAGCod,GAFArY,EAAOC,KACPsY,EAAWvY,EAAKsZ,cAEpB,OAAIre,KAAUF,EACHiF,EAAKoW,QAAQC,SAExBrW,EAAKqZ,SAASpe,GACTsd,GAAiC,aAArBA,EAASgB,UACtBvZ,EAAKsZ,eAAiBf,EAAWzd,EAAE8d,YAEnC5Y,EAAKyF,UACL4S,EAAUrY,EAAKwZ,cAAcxZ,EAAKoW,SACF,aAA5BpW,EAAKtE,QAAQgH,YACb1C,EAAKzE,WAETyE,EAAKzE,OAAO8c,GACZE,EAASM,WAEb7Y,EAAKoY,aAAc,EACZG,IAEXrP,MAAO,WACH,MAAOjJ,MAAKH,QAAQmH,SAAS,YAEjCrE,OAAQ,SAAU0B,GACTA,EAAEmV,sBACExZ,KAAKmD,QAAQ,SAAW7G,KAAMzB,EAAEwJ,EAAEgK,kBACnCrO,KAAK1E,OAAO+I,EAAEgK,gBAI1BoL,WAAY,SAAUxe,EAAMye,GAAhB,GAGJC,GACAC,EAHA7Z,EAAOC,KACPiQ,EAAM,EAGN4J,IACJ,KAAK9Z,EAAKiZ,gBAAkBjZ,EAAK+Z,aAAe7e,EAAM,CAElD,IADA8E,EAAK+Z,WAAa7e,EACXgV,EAAMyJ,EAAOte,OAAQ6U,IACxB4J,EAAWxd,KAAKtB,EAAU2e,EAAOzJ,GAAMhV,GAE3C0e,GAAO,2BAA6BE,EAAWze,OAAS,wEACxDwe,EAAeG,SAAS,UAAW,SAAUJ,GAC7C5Z,EAAKiZ,eAAiB,SAAUhQ,GAC5B,MAAO4Q,GAAS5Q,EAAS6Q,IAGjC,MAAO9Z,GAAKiZ,gBAEhBgB,kBAAmB,SAAUne,EAAU6d,GAApB,GACX1e,GAAQgF,KAAK2X,aAAa9b,GAC1Boe,EAAYja,KAAKyZ,iBAAkBze,GAAO0e,EAC9C,OAAOO,GAAUjf,IAErBqb,QAAS,WACLrW,KAAK2X,aAAe1a,EAAM0M,OAAO3J,KAAKvE,QAAQ+E,iBAElDuY,UAAW,SAAUX,GAAV,GASHpc,GACAT,EAAOC,EATPuE,EAAOC,KACPgH,EAAWjH,EAAKF,QAAQ,GAAGmH,SAC3BvE,EAAa1C,EAAKtE,QAAQgH,WAC1BgW,EAAkB1Y,EAAKiW,iBACvByB,EAAY1X,EAAKmW,WACjBwD,EAAS3Z,EAAKoW,QACdrQ,KACA/J,EAAI,EAGJme,EAAiB,CAErB,IADA9B,EAAUA,EAAQhC,QACd3T,KAAe,GAAS2V,EAAQhd,QAW7B,GAAmB,aAAfqH,EACP,KAAO1G,EAAIqc,EAAQhd,OAAQW,IAEvB,GADAR,EAAQ6c,EAAQrc,GACXlB,EAAEmM,EAASzL,IAAQ4P,SAAS,oBAGjC,IAAKnP,EAAI,EAAGA,EAAIyc,EAAgBrd,OAAQY,IAEpC,GADAR,EAAgBid,EAAgBzc,GAC5BR,IAAkBD,EAAO,CACzBV,EAAEmM,EAASxL,IAAgBsJ,YAAY,oBACvCgB,EAAQzJ,MACJ6c,SAAUld,EAAIke,EACdre,SAAU4b,EAAU0B,OAAOnd,EAAG,GAAG,KAErCyc,EAAgBU,OAAOnd,EAAG,GAC1Boc,EAAQe,OAAOpd,EAAG,GAClB2d,EAAOP,OAAOnd,EAAG,GACjBke,GAAkB,EAClBne,GAAK,EACLC,GAAK,CACL,YA/B4B,CACxC,KAAOD,EAAI0c,EAAgBrd,OAAQW,IAC/BlB,EAAEmM,EAASyR,EAAgB1c,KAAK+I,YAAY,oBAC5CgB,EAAQzJ,MACJ6c,SAAUnd,EACVF,SAAU4b,EAAU1b,IAG5BgE,GAAKoW,WACLpW,EAAKmW,cACLnW,EAAKiW,oBA0BT,OACIoC,QAASA,EACTtS,QAASA,IAGjBgT,kBAAmB,SAAUV,GAKzB,IALe,GAEXvc,GAAUN,EAAO2d,EADjBlS,EAAWhH,KAAKH,QAAQ,GAAGmH,SAE3BlB,KACAmK,EAAM,EACHA,EAAMmI,EAAQhd,OAAQ6U,IACzB1U,EAAQ6c,EAAQnI,GAChBpU,EAAWmE,KAAKiW,MAAM1a,GAAOe,KAC7B4c,EAAWlZ,KAAKga,kBAAkBne,EAAUmE,KAAKmW,SAC7C+C,OACApT,EAAQzJ,KAAK2D,KAAKiZ,SAASC,IAC3Bre,EAAEmM,EAASzL,IAAQuJ,YAAY,oBAGvC,SAAIgB,EAAQ1K,SACR4E,KAAKmD,QAAQlF,GACTya,SACA5S,QAASA,KAEN,IAIf4K,QAAS,SAAU0H,GAAV,GAIDvc,GAAUN,EAHVwE,EAAOC,KACPgH,EAAWjH,EAAKF,QAAQ,GAAGmH,SAC3BjJ,EAAOgC,EAAKkW,MAEZyC,KACAzI,EAAM,CAIV,KAHI/U,EAAKkd,SACLrY,EAAK+B,MAAMsW,GAERnI,EAAMmI,EAAQhd,OAAQ6U,IACzB1U,EAAQ6c,EAAQnI,GAChBpU,EAAWkC,EAAKxC,GACZA,QAAiBM,IAGrBA,EAAWA,EAASS,KACpByD,EAAKiW,iBAAiB3Z,KAAKd,GAC3BwE,EAAKmW,WAAW7Z,KAAKR,GACrBkE,EAAKoW,QAAQ9Z,KAAK0D,EAAK4X,aAAa9b,IACpChB,EAAEmM,EAASzL,IAAQqJ,SAAS,oBAAoBlE,KAAK,iBAAiB,GACtEgY,EAAMrc,MAAOR,SAAUA,IAE3B,OAAO6c,IAEX5F,gBAAiB,SAAUjT,GACvB,MAAOhF,GAAEgF,GAAS9B,KAAK,iBAE3Bia,KAAM,SAAU7P,GAOZ,MANyB,gBAAdA,GACPA,GAAaA,GACLnJ,EAAQmJ,KAChBA,EAAYnI,KAAK8S,gBAAgB3K,GACjCA,GAAaA,IAAcrN,EAAYqN,OAEpCA,GAEXgS,UAAW,WAAA,GACHpa,GAAOC,KACPvE,EAAUsE,EAAKtE,QACf+H,EAAW/H,EAAQ+H,QASvB,OARKA,IAGDA,EAAWvG,EAAMuG,SAASA,GAC1BA,EAAW,SAAUzF,GACjB,MAAO,oEAAsEyF,EAASzF,GAAQ,UAJlGyF,EAAWvG,EAAMuG,SAAS,sEAAwEvG,EAAMwG,KAAKhI,EAAQ8E,cAAe,QAAU,UAAY6Z,cAAc,IAOrK5W,GAEX8S,WAAY,WAAA,GACJ9S,GAOK8O,EANL7W,EAAUuE,KAAKvE,QACf4e,GACA7W,SAAU/H,EAAQ+H,SAClBF,cAAe7H,EAAQ6H,cACvBC,mBAAoB9H,EAAQ8H,mBAEhC,KAAS+O,IAAO+H,GACZ7W,EAAW6W,EAAU/H,GACjB9O,GAAgC,kBAAbA,KACnB6W,EAAU/H,GAAOrV,EAAMuG,SAASA,GAGxCxD,MAAKqa,UAAYA,GAErBC,kBAAmB,SAAUlC,GAGzB,IAHe,GACXmC,MACAtK,EAAM,EACHA,EAAMmI,EAAQhd,OAAQ6U,IACrBmI,EAAQnI,KAASnV,GACjByf,EAAWle,KAAK+b,EAAQnI,GAGhC,OAAOsK,IAEXhB,cAAe,SAAUG,EAAQtB,GAAlB,GAGP7c,GAFAwC,EAAOiC,KAAKiW,MACZhG,EAAM,CAGV,IADAmI,EAAUA,EAAUA,EAAQhC,YACvBsD,EAAOte,OACR,QAEJ,MAAO6U,EAAMlS,EAAK3C,OAAQ6U,IACtB1U,EAAQyE,KAAKga,kBAAkBjc,EAAKkS,GAAK3T,KAAMod,GAC3Cne,SACA6c,EAAQ7c,GAAS0U,EAGzB,OAAOjQ,MAAKsa,kBAAkBlC,IAElCoC,kBAAmB,WAQf,IARe,GACX3a,GAAUG,KAAKH,QAAQ,GACvBmL,EAAUhL,KAAKgL,QAAQ,GACvBmM,EAAYnM,EAAQmM,UACpBsD,EAAa5f,EAAEgF,EAAQmH,SAAS,IAAI3D,SACpCqX,EAAYC,KAAKC,MAAMzD,EAAYsD,IAAe,EAClDne,EAAOuD,EAAQmH,SAAS0T,IAAc7a,EAAQgb,UAC9CC,EAAUxe,EAAK+O,UAAY8L,EACxB7a,GACH,GAAIwe,EAAS,CACT,GAAIxe,EAAK+O,UAAYoP,EAAatD,IAAc7a,EAAKye,YACjD,KAEJze,GAAOA,EAAKye,gBACT,CACH,GAAIze,EAAK+O,WAAa8L,IAAc7a,EAAK0e,gBACrC,KAEJ1e,GAAOA,EAAK0e,gBAGpB,MAAOhb,MAAKiW,MAAMpb,EAAEyB,GAAMyB,KAAK,kBAEnC+Y,aAAc,WACN9W,KAAKib,aAAejb,KAAKqa,UAAU9W,oBACnCvD,KAAKuH,OAAOH,OACZpH,KAAKgL,QAAQkM,OAAOlX,KAAKuW,aAEzBvW,KAAKuH,OAAOmE,OACZ1L,KAAKgL,QAAQ7B,IAAI,SAAUnJ,KAAKuW,aAGxCE,cAAe,WAAA,GAKPyE,GAJA1X,EAAWxD,KAAKqa,UAAU9W,kBACzBC,KAGD0X,EAAclb,KAAKwa,oBACnBU,GACAlb,KAAKuH,OAAON,KAAKzD,EAAS0X,EAAY7U,UAG9C8U,YAAa,SAAUC,GAAV,GACL9e,GAAO,kEACPT,EAAWuf,EAAQ9e,KACnB+e,EAAiC,IAAlBD,EAAQ7f,MACvBI,EAAWyf,EAAQzf,QAYvB,OAXI0f,IAAgBD,EAAQE,WACxBhf,GAAQ,YAERX,IACAW,GAAQ,qBAEZA,GAAQ,KAAOX,EAAW,wBAA0B,IAAM,uBAAyByf,EAAQ7f,MAAQ,KACnGe,GAAQ0D,KAAKqa,UAAU7W,SAAS3H,GAC5Bwf,GAAgBD,EAAQE,WACxBhf,GAAQ,wBAA0B0D,KAAKqa,UAAU/W,cAAc8X,EAAQ/U,OAAS,UAE7E/J,EAAO,SAElB0a,QAAS,WAAA,GAIDoE,GAIA/U,EAAOiV,EAAUtf,EAPjBiL,EAAO,GACPlL,EAAI,EACJkU,EAAM,EAENsL,KACA9Q,EAAOzK,KAAKM,WAAWmK,OACvBiP,EAAS1Z,KAAKhF,QAEdigB,EAAYjb,KAAKib,WACrB,IAAIA,EACA,IAAKlf,EAAI,EAAGA,EAAI0O,EAAKrP,OAAQW,IAGzB,IAFAsK,EAAQoE,EAAK1O,GACbuf,GAAW,EACNtf,EAAI,EAAGA,EAAIqK,EAAM4C,MAAM7N,OAAQY,IAChCof,GACIzf,SAAUqE,KAAKwb,UAAUnV,EAAM4C,MAAMjN,GAAI0d,GACzCpd,KAAM+J,EAAM4C,MAAMjN,GAClBqK,MAAOA,EAAMrL,MACbsgB,SAAUA,EACV/f,MAAO0U,GAEXsL,EAAYtL,GAAOmL,EACnBnL,GAAO,EACPhJ,GAAQjH,KAAKmb,YAAYC,GACzBE,GAAW,MAInB,KAAKvf,EAAI,EAAGA,EAAI0O,EAAKrP,OAAQW,IACzBqf,GACIzf,SAAUqE,KAAKwb,UAAU/Q,EAAK1O,GAAI2d,GAClCpd,KAAMmO,EAAK1O,GACXR,MAAOQ,GAEXwf,EAAYxf,GAAKqf,EACjBnU,GAAQjH,KAAKmb,YAAYC,EAGjCpb,MAAKiW,MAAQsF,EACbvb,KAAKH,QAAQ,GAAG4b,UAAYxU,EACxBgU,GAAaM,EAAYngB,QACzB4E,KAAKyW,iBAGb+E,UAAW,SAAU3f,EAAU6d,GAC3B,GAAIpe,IAAU0E,KAAK6Y,cAA4C,aAA5B7Y,KAAKvE,QAAQgH,UAChD,OAAOnH,IAAU0E,KAAKga,kBAAkBne,EAAU6d,SAEtDzT,YAAa,SAAUnJ,GACnBkD,KAAK0b,cAAgB5c,KAAWhC,IAEpC+b,WAAY,WAIR,MAHK7Y,MAAK0b,eACN1b,KAAKiG,YAAYjG,KAAKM,WAAWxD,WAE7BG,EAAMc,KAAK4d,MAAMC,eAAe5b,KAAKM,WAAWxD,SAAUkD,KAAK0b,gBAE3E7E,QAAS,SAAUxS,GAAV,GAKDgU,GAJAtY,EAAOC,KACPyG,EAASpC,GAAKA,EAAEoC,OAChBoV,EAAmB9b,EAAKtE,QAAQogB,iBAChCC,EAA0B,eAAXrV,CAEnB1G,GAAKoD,QAAQ,eACbpD,EAAKgc,cAAc,WACnBhc,EAAK+W,eACL/W,EAAKiX,UACLjX,EAAKyF,OAAM,GACPsW,GAA2B,WAAXrV,GAChB4R,EAAS3c,EAAgBqE,EAAKmW,WAAY7R,EAAE4E,OACxCoP,EAAOlc,QAAQf,SACX0gB,EACA/b,EAAKoD,QAAQ,sBAAwB8F,MAAOoP,EAAOlc,UAEnD4D,EAAK/E,MAAM+E,EAAK2X,WAAWW,EAAOjc,cAGnC2D,EAAK8Y,cAAgB9Y,EAAKoY,aACjCpY,EAAK+B,MAAM,GACP/B,EAAKoY,cACLpY,EAAKoY,aAAc,EACnBpY,EAAKiW,iBAAmBjW,EAAKwZ,cAAcxZ,EAAKoW,QAASpW,EAAKiW,oBAE1D6F,GAAsBpV,GAAqB,QAAXA,GACxC1G,EAAK/E,MAAM+E,EAAKoW,SAEhBpW,EAAKsZ,gBACLtZ,EAAKsZ,eAAeT,UAExB7Y,EAAKgc,cAAc,WACnBhc,EAAKoD,QAAQ,cAEjBqC,MAAO,SAAUA,GACb,MAAIA,KAAU1K,EACHkF,KAAKgc,QAEhBhc,KAAKgc,OAASxW,EAAdxF,IAEJib,UAAW,WACP,OAAQjb,KAAKM,WAAW+F,aAAejL,UAG/C+B,EAAG8e,OAAOjf,IAoEZE,OAAOD,MAAMif,QACRhf,OAAOD,OACE,kBAAVrC,SAAwBA,OAAOuhB,IAAMvhB,OAAS,SAAUwhB,EAAIC,EAAIC,IACrEA,GAAMD","file":"kendo.list.min.js","sourcesContent":["/*!\n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n(function (f, define) {\n    define('kendo.list', [\n        'kendo.data',\n        'kendo.popup'\n    ], f);\n}(function () {\n    var __meta__ = {\n        id: 'list',\n        name: 'List',\n        category: 'framework',\n        depends: [\n            'data',\n            'popup'\n        ],\n        hidden: true\n    };\n    (function ($, undefined) {\n        var kendo = window.kendo, ui = kendo.ui, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', HIDDENCLASS = 'k-loading-hidden', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', WIDTH = 'width', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n                'ComboBox': 'DropDownList',\n                'DropDownList': 'ComboBox'\n            };\n        var List = kendo.ui.DataBoundWidget.extend({\n            init: function (element, options) {\n                var that = this, ns = that.ns, id;\n                Widget.fn.init.call(that, element, options);\n                element = that.element;\n                options = that.options;\n                that._isSelect = element.is(SELECT);\n                if (that._isSelect && that.element[0].length) {\n                    if (!options.dataSource) {\n                        options.dataTextField = options.dataTextField || 'text';\n                        options.dataValueField = options.dataValueField || 'value';\n                    }\n                }\n                that.ul = $('<ul unselectable=\"on\" class=\"k-list k-reset\"/>').attr({\n                    tabIndex: -1,\n                    'aria-hidden': true\n                });\n                that.list = $('<div class=\\'k-list-container\\'/>').append(that.ul).on('mousedown' + ns, proxy(that._listMousedown, that));\n                id = element.attr(ID);\n                if (id) {\n                    that.list.attr(ID, id + '-list');\n                    that.ul.attr(ID, id + '_listbox');\n                }\n                that._header();\n                that._noData();\n                that._footer();\n                that._accessors();\n                that._initValue();\n            },\n            options: {\n                valuePrimitive: false,\n                footerTemplate: '',\n                headerTemplate: '',\n                noDataTemplate: 'No data found.'\n            },\n            setOptions: function (options) {\n                Widget.fn.setOptions.call(this, options);\n                if (options && options.enable !== undefined) {\n                    options.enabled = options.enable;\n                }\n                this._header();\n                this._noData();\n                this._footer();\n                this._renderFooter();\n                this._renderNoData();\n            },\n            focus: function () {\n                this._focused.focus();\n            },\n            readonly: function (readonly) {\n                this._editable({\n                    readonly: readonly === undefined ? true : readonly,\n                    disable: false\n                });\n            },\n            enable: function (enable) {\n                this._editable({\n                    readonly: false,\n                    disable: !(enable = enable === undefined ? true : enable)\n                });\n            },\n            _listOptions: function (options) {\n                var that = this;\n                var currentOptions = that.options;\n                var virtual = currentOptions.virtual;\n                var listBoundHandler = proxy(that._listBound, that);\n                virtual = typeof virtual === 'object' ? virtual : {};\n                options = $.extend({\n                    autoBind: false,\n                    selectable: true,\n                    dataSource: that.dataSource,\n                    click: proxy(that._click, that),\n                    change: proxy(that._listChange, that),\n                    activate: proxy(that._activateItem, that),\n                    deactivate: proxy(that._deactivateItem, that),\n                    dataBinding: function () {\n                        that.trigger('dataBinding');\n                    },\n                    dataBound: listBoundHandler,\n                    height: currentOptions.height,\n                    dataValueField: currentOptions.dataValueField,\n                    dataTextField: currentOptions.dataTextField,\n                    groupTemplate: currentOptions.groupTemplate,\n                    fixedGroupTemplate: currentOptions.fixedGroupTemplate,\n                    template: currentOptions.template\n                }, options, virtual);\n                if (!options.template) {\n                    options.template = '#:' + kendo.expr(options.dataTextField, 'data') + '#';\n                }\n                if (currentOptions.$angular) {\n                    options.$angular = currentOptions.$angular;\n                }\n                return options;\n            },\n            _initList: function () {\n                var that = this;\n                var listOptions = that._listOptions({ selectedItemChange: proxy(that._listChange, that) });\n                if (!that.options.virtual) {\n                    that.listView = new kendo.ui.StaticList(that.ul, listOptions);\n                } else {\n                    that.listView = new kendo.ui.VirtualList(that.ul, listOptions);\n                }\n                that.listView.bind('listBound', proxy(that._listBound, that));\n                that._setListValue();\n            },\n            _setListValue: function (value) {\n                value = value || this.options.value;\n                if (value !== undefined) {\n                    this.listView.value(value).done(proxy(this._updateSelectionState, this));\n                }\n            },\n            _updateSelectionState: $.noop,\n            _listMousedown: function (e) {\n                if (!this.filterInput || this.filterInput[0] !== e.target) {\n                    e.preventDefault();\n                }\n            },\n            _isFilterEnabled: function () {\n                var filter = this.options.filter;\n                return filter && filter !== 'none';\n            },\n            _hideClear: function () {\n                var that = this;\n                if (that._clear) {\n                    this._clear.addClass(HIDDENCLASS);\n                }\n            },\n            _showClear: function () {\n                var that = this;\n                if (that._clear) {\n                    this._clear.removeClass(HIDDENCLASS);\n                }\n            },\n            _clearValue: function () {\n                this._clearText();\n                this._accessor('');\n                this.listView.value([]);\n                if (this._isFilterEnabled()) {\n                    this._filter({\n                        word: '',\n                        open: false\n                    });\n                }\n                this._change();\n            },\n            _clearText: function () {\n                this.text('');\n            },\n            _clearFilter: function () {\n                if (!this.options.virtual) {\n                    this.listView.bound(false);\n                }\n                this._filterSource();\n            },\n            _filterSource: function (filter, force) {\n                var that = this;\n                var options = that.options;\n                var dataSource = that.dataSource;\n                var expression = extend({}, dataSource.filter() || {});\n                var resetPageSettings = filter || expression.filters && expression.filters.length && !filter;\n                var removed = removeFiltersForField(expression, options.dataTextField);\n                if ((filter || removed) && that.trigger('filtering', { filter: filter })) {\n                    return;\n                }\n                var newExpression = {\n                    filters: [],\n                    logic: 'and'\n                };\n                if (isValidFilterExpr(filter)) {\n                    newExpression.filters.push(filter);\n                }\n                if (isValidFilterExpr(expression)) {\n                    newExpression.filters.push(expression);\n                }\n                if (that._cascading) {\n                    this.listView.setDSFilter(newExpression);\n                }\n                var dataSourceState = extend({}, {\n                    page: resetPageSettings ? 1 : dataSource.page(),\n                    pageSize: resetPageSettings ? dataSource.options.pageSize : dataSource.pageSize(),\n                    sort: dataSource.sort(),\n                    filter: dataSource.filter(),\n                    group: dataSource.group(),\n                    aggregate: dataSource.aggregate()\n                }, { filter: newExpression });\n                dataSource[force ? 'read' : 'query'](dataSource._mergeState(dataSourceState));\n            },\n            _angularElement: function (element, action) {\n                if (!element) {\n                    return;\n                }\n                this.angular(action, function () {\n                    return { elements: element };\n                });\n            },\n            _noData: function () {\n                var noData = $(this.noData);\n                var template = this.options.noDataTemplate;\n                this.angular('cleanup', function () {\n                    return { elements: noData };\n                });\n                kendo.destroy(noData);\n                noData.remove();\n                if (!template) {\n                    this.noData = null;\n                    return;\n                }\n                this.noData = $('<div class=\"k-nodata\" style=\"display:none\"><div></div></div>').appendTo(this.list);\n                this.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n            },\n            _renderNoData: function () {\n                var noData = this.noData;\n                if (!noData) {\n                    return;\n                }\n                this._angularElement(noData, 'cleanup');\n                noData.children(':first').html(this.noDataTemplate({ instance: this }));\n                this._angularElement(noData, 'compile');\n            },\n            _toggleNoData: function (show) {\n                $(this.noData).toggle(show);\n            },\n            _footer: function () {\n                var footer = $(this.footer);\n                var template = this.options.footerTemplate;\n                this._angularElement(footer, 'cleanup');\n                kendo.destroy(footer);\n                footer.remove();\n                if (!template) {\n                    this.footer = null;\n                    return;\n                }\n                this.footer = $('<div class=\"k-footer\"></div>').appendTo(this.list);\n                this.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n            },\n            _renderFooter: function () {\n                var footer = this.footer;\n                if (!footer) {\n                    return;\n                }\n                this._angularElement(footer, 'cleanup');\n                footer.html(this.footerTemplate({ instance: this }));\n                this._angularElement(footer, 'compile');\n            },\n            _header: function () {\n                var header = $(this.header);\n                var template = this.options.headerTemplate;\n                this._angularElement(header, 'cleanup');\n                kendo.destroy(header);\n                header.remove();\n                if (!template) {\n                    this.header = null;\n                    return;\n                }\n                var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n                header = $(headerTemplate({}));\n                this.header = header[0] ? header : null;\n                this.list.prepend(header);\n                this._angularElement(this.header, 'compile');\n            },\n            _allowOpening: function () {\n                return this.options.noDataTemplate || this.dataSource.flatView().length;\n            },\n            _initValue: function () {\n                var that = this, value = that.options.value;\n                if (value !== null) {\n                    that.element.val(value);\n                } else {\n                    value = that._accessor();\n                    that.options.value = value;\n                }\n                that._old = value;\n            },\n            _ignoreCase: function () {\n                var that = this, model = that.dataSource.reader.model, field;\n                if (model && model.fields) {\n                    field = model.fields[that.options.dataTextField];\n                    if (field && field.type && field.type !== 'string') {\n                        that.options.ignoreCase = false;\n                    }\n                }\n            },\n            _focus: function (candidate) {\n                return this.listView.focus(candidate);\n            },\n            _filter: function (options) {\n                var that = this;\n                var widgetOptions = that.options;\n                var ignoreCase = widgetOptions.ignoreCase;\n                var field = widgetOptions.dataTextField;\n                var expression = {\n                    value: ignoreCase ? options.word.toLowerCase() : options.word,\n                    field: field,\n                    operator: widgetOptions.filter,\n                    ignoreCase: ignoreCase\n                };\n                that._open = options.open;\n                that._filterSource(expression);\n            },\n            search: function (word) {\n                var options = this.options;\n                word = typeof word === 'string' ? word : this._inputValue();\n                clearTimeout(this._typingTimeout);\n                if (!options.enforceMinLength && !word.length || word.length >= options.minLength) {\n                    this._state = 'filter';\n                    if (!this._isFilterEnabled()) {\n                        this._searchByWord(word);\n                    } else {\n                        this._filter({\n                            word: word,\n                            open: true\n                        });\n                    }\n                }\n            },\n            current: function (candidate) {\n                return this._focus(candidate);\n            },\n            items: function () {\n                return this.ul[0].children;\n            },\n            destroy: function () {\n                var that = this;\n                var ns = that.ns;\n                Widget.fn.destroy.call(that);\n                that._unbindDataSource();\n                that.listView.destroy();\n                that.list.off(ns);\n                that.popup.destroy();\n                if (that._form) {\n                    that._form.off('reset', that._resetHandler);\n                }\n            },\n            dataItem: function (index) {\n                var that = this;\n                if (index === undefined) {\n                    return that.listView.selectedDataItems()[0];\n                }\n                if (typeof index !== 'number') {\n                    if (that.options.virtual) {\n                        return that.dataSource.getByUid($(index).data('uid'));\n                    }\n                    index = $(that.items()).index(index);\n                }\n                return that.dataSource.flatView()[index];\n            },\n            _activateItem: function () {\n                var current = this.listView.focus();\n                if (current) {\n                    this._focused.add(this.filterInput).attr('aria-activedescendant', current.attr('id'));\n                }\n            },\n            _deactivateItem: function () {\n                this._focused.add(this.filterInput).removeAttr('aria-activedescendant');\n            },\n            _accessors: function () {\n                var that = this;\n                var element = that.element;\n                var options = that.options;\n                var getter = kendo.getter;\n                var textField = element.attr(kendo.attr('text-field'));\n                var valueField = element.attr(kendo.attr('value-field'));\n                if (!options.dataTextField && textField) {\n                    options.dataTextField = textField;\n                }\n                if (!options.dataValueField && valueField) {\n                    options.dataValueField = valueField;\n                }\n                that._text = getter(options.dataTextField);\n                that._value = getter(options.dataValueField);\n            },\n            _aria: function (id) {\n                var that = this, options = that.options, element = that._focused.add(that.filterInput);\n                if (options.suggest !== undefined) {\n                    element.attr('aria-autocomplete', options.suggest ? 'both' : 'list');\n                }\n                id = id ? id + ' ' + that.ul[0].id : that.ul[0].id;\n                element.attr('aria-owns', id);\n                that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n            },\n            _blur: function () {\n                var that = this;\n                that._change();\n                that.close();\n            },\n            _change: function () {\n                var that = this;\n                var index = that.selectedIndex;\n                var optionValue = that.options.value;\n                var value = that.value();\n                var trigger;\n                if (that._isSelect && !that.listView.bound() && optionValue) {\n                    value = optionValue;\n                }\n                if (value !== unifyType(that._old, typeof value)) {\n                    trigger = true;\n                } else if (index !== undefined && index !== that._oldIndex) {\n                    trigger = true;\n                }\n                if (trigger) {\n                    that._old = value;\n                    that._oldIndex = index;\n                    if (!that._typing) {\n                        that.element.trigger(CHANGE);\n                    }\n                    that.trigger(CHANGE);\n                }\n                that.typing = false;\n            },\n            _data: function () {\n                return this.dataSource.view();\n            },\n            _enable: function () {\n                var that = this, options = that.options, disabled = that.element.is('[disabled]');\n                if (options.enable !== undefined) {\n                    options.enabled = options.enable;\n                }\n                if (!options.enabled || disabled) {\n                    that.enable(false);\n                } else {\n                    that.readonly(that.element.is('[readonly]'));\n                }\n            },\n            _dataValue: function (dataItem) {\n                var value = this._value(dataItem);\n                if (value === undefined) {\n                    value = this._text(dataItem);\n                }\n                return value;\n            },\n            _offsetHeight: function () {\n                var offsetHeight = 0;\n                var siblings = this.listView.content.prevAll(':visible');\n                siblings.each(function () {\n                    var element = $(this);\n                    if (element.hasClass('k-list-filter')) {\n                        offsetHeight += outerHeight(element.children());\n                    } else {\n                        offsetHeight += outerHeight(element);\n                    }\n                });\n                return offsetHeight;\n            },\n            _height: function (length) {\n                var that = this;\n                var list = that.list;\n                var height = that.options.height;\n                var visible = that.popup.visible();\n                var offsetTop;\n                var popups;\n                var footerHeight;\n                if (length || that.options.noDataTemplate) {\n                    popups = list.add(list.parent('.k-animation-container')).show();\n                    if (!list.is(':visible')) {\n                        popups.hide();\n                        return;\n                    }\n                    height = that.listView.content[0].scrollHeight > height ? height : 'auto';\n                    popups.height(height);\n                    if (height !== 'auto') {\n                        offsetTop = that._offsetHeight();\n                        footerHeight = outerHeight($(that.footer)) || 0;\n                        height = height - offsetTop - footerHeight;\n                    }\n                    that.listView.content.height(height);\n                    if (!visible) {\n                        popups.hide();\n                    }\n                }\n                return height;\n            },\n            _adjustListWidth: function () {\n                var list = this.list, width = list[0].style.width, wrapper = this.wrapper, computedStyle, computedWidth;\n                if (!list.data(WIDTH) && width) {\n                    return;\n                }\n                computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n                computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n                if (computedStyle && browser.msie) {\n                    computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n                }\n                if (list.css('box-sizing') !== 'border-box') {\n                    width = computedWidth - (outerWidth(list) - list.width());\n                } else {\n                    width = computedWidth;\n                }\n                list.css({\n                    fontFamily: wrapper.css('font-family'),\n                    width: this.options.autoWidth ? 'auto' : width,\n                    minWidth: width\n                }).data(WIDTH, width);\n                return true;\n            },\n            _openHandler: function (e) {\n                this._adjustListWidth();\n                if (this.trigger(OPEN)) {\n                    e.preventDefault();\n                } else {\n                    this._focused.attr('aria-expanded', true);\n                    this.ul.attr('aria-hidden', false);\n                }\n            },\n            _closeHandler: function (e) {\n                if (this.trigger(CLOSE)) {\n                    e.preventDefault();\n                } else {\n                    this._focused.attr('aria-expanded', false);\n                    this.ul.attr('aria-hidden', true);\n                }\n            },\n            _focusItem: function () {\n                var listView = this.listView;\n                var noFocusedItem = !listView.focus();\n                var index = last(listView.select());\n                if (index === undefined && this.options.highlightFirst && noFocusedItem) {\n                    index = 0;\n                }\n                if (index !== undefined) {\n                    listView.focus(index);\n                } else if (noFocusedItem) {\n                    listView.scrollToIndex(0);\n                }\n            },\n            _calculateGroupPadding: function (height) {\n                var li = this.ul.children('.k-first:first');\n                var groupHeader = this.listView.content.prev('.k-group-header');\n                var padding = 0;\n                if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n                    if (height !== 'auto') {\n                        padding = kendo.support.scrollbar();\n                    }\n                    padding += parseFloat(li.css('border-right-width'), 10) + parseFloat(li.children('.k-group').css('padding-right'), 10);\n                    groupHeader.css('padding-right', padding);\n                }\n            },\n            _calculatePopupHeight: function (force) {\n                var height = this._height(this.dataSource.flatView().length || force);\n                this._calculateGroupPadding(height);\n            },\n            _resizePopup: function (force) {\n                if (this.options.virtual) {\n                    return;\n                }\n                if (!this.popup.element.is(':visible')) {\n                    this.popup.one('open', function (force) {\n                        return proxy(function () {\n                            this._calculatePopupHeight(force);\n                        }, this);\n                    }.call(this, force));\n                } else {\n                    this._calculatePopupHeight(force);\n                }\n            },\n            _popup: function () {\n                var that = this;\n                that.popup = new ui.Popup(that.list, extend({}, that.options.popup, {\n                    anchor: that.wrapper,\n                    open: proxy(that._openHandler, that),\n                    close: proxy(that._closeHandler, that),\n                    animation: that.options.animation,\n                    isRtl: support.isRtl(that.wrapper)\n                }));\n            },\n            _makeUnselectable: function () {\n                if (isIE8) {\n                    this.list.find('*').not('.k-textbox').attr('unselectable', 'on');\n                }\n            },\n            _toggleHover: function (e) {\n                $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n            },\n            _toggle: function (open, preventFocus) {\n                var that = this;\n                var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n                open = open !== undefined ? open : !that.popup.visible();\n                if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n                    that._prevent = true;\n                    that._focused.focus();\n                    that._prevent = false;\n                }\n                that[open ? OPEN : CLOSE]();\n            },\n            _triggerCascade: function () {\n                var that = this;\n                if (!that._cascadeTriggered || that._old !== that.value() || that._oldIndex !== that.selectedIndex) {\n                    that._cascadeTriggered = true;\n                    that.trigger(CASCADE, { userTriggered: that._userTriggered });\n                }\n            },\n            _triggerChange: function () {\n                if (this._valueBeforeCascade !== this.value()) {\n                    this.trigger(CHANGE);\n                }\n            },\n            _unbindDataSource: function () {\n                var that = this;\n                that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n            },\n            requireValueMapper: function (options, value) {\n                var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n                if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n                    throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n                }\n            }\n        });\n        function unifyType(value, type) {\n            if (value !== undefined && value !== '' && value !== null) {\n                if (type === 'boolean') {\n                    value = Boolean(value);\n                } else if (type === 'number') {\n                    value = Number(value);\n                } else if (type === 'string') {\n                    value = value.toString();\n                }\n            }\n            return value;\n        }\n        extend(List, {\n            inArray: function (node, parentNode) {\n                var idx, length, siblings = parentNode.children;\n                if (!node || node.parentNode !== parentNode) {\n                    return -1;\n                }\n                for (idx = 0, length = siblings.length; idx < length; idx++) {\n                    if (node === siblings[idx]) {\n                        return idx;\n                    }\n                }\n                return -1;\n            },\n            unifyType: unifyType\n        });\n        kendo.ui.List = List;\n        ui.Select = List.extend({\n            init: function (element, options) {\n                List.fn.init.call(this, element, options);\n                this._initial = this.element.val();\n            },\n            setDataSource: function (dataSource) {\n                var that = this;\n                var parent;\n                that.options.dataSource = dataSource;\n                that._dataSource();\n                if (that.listView.bound()) {\n                    that._initialIndex = null;\n                }\n                that.listView.setDataSource(that.dataSource);\n                if (that.options.autoBind) {\n                    that.dataSource.fetch();\n                }\n                parent = that._parentWidget();\n                if (parent) {\n                    that._cascadeSelect(parent);\n                }\n            },\n            close: function () {\n                this.popup.close();\n            },\n            select: function (candidate) {\n                var that = this;\n                if (candidate === undefined) {\n                    return that.selectedIndex;\n                } else {\n                    return that._select(candidate).done(function () {\n                        that._old = that._accessor();\n                        that._oldIndex = that.selectedIndex;\n                    });\n                }\n            },\n            _accessor: function (value, idx) {\n                return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n            },\n            _accessorInput: function (value) {\n                var element = this.element[0];\n                if (value === undefined) {\n                    return element.value;\n                } else {\n                    if (value === null) {\n                        value = '';\n                    }\n                    element.value = value;\n                }\n            },\n            _accessorSelect: function (value, idx) {\n                var element = this.element[0];\n                var hasValue;\n                if (value === undefined) {\n                    return getSelectedOption(element).value || '';\n                }\n                getSelectedOption(element).selected = false;\n                if (idx === undefined) {\n                    idx = -1;\n                }\n                hasValue = value !== null && value !== '';\n                if (hasValue && idx == -1) {\n                    this._custom(value);\n                } else {\n                    if (value) {\n                        element.value = value;\n                    } else {\n                        element.selectedIndex = idx;\n                    }\n                }\n            },\n            _custom: function (value) {\n                var that = this;\n                var element = that.element;\n                var custom = that._customOption;\n                if (!custom) {\n                    custom = $('<option/>');\n                    that._customOption = custom;\n                    element.append(custom);\n                }\n                custom.text(value);\n                custom[0].selected = true;\n            },\n            _hideBusy: function () {\n                var that = this;\n                clearTimeout(that._busy);\n                that._arrowIcon.removeClass(LOADING);\n                that._focused.attr('aria-busy', false);\n                that._busy = null;\n                that._showClear();\n            },\n            _showBusy: function () {\n                var that = this;\n                that._request = true;\n                if (that._busy) {\n                    return;\n                }\n                that._busy = setTimeout(function () {\n                    if (that._arrowIcon) {\n                        that._focused.attr('aria-busy', true);\n                        that._arrowIcon.addClass(LOADING);\n                        that._hideClear();\n                    }\n                }, 100);\n            },\n            _requestEnd: function () {\n                this._request = false;\n                this._hideBusy();\n            },\n            _dataSource: function () {\n                var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {}, idx;\n                dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n                if (that._isSelect) {\n                    idx = element[0].selectedIndex;\n                    if (idx > -1) {\n                        options.index = idx;\n                    }\n                    dataSource.select = element;\n                    dataSource.fields = [\n                        { field: options.dataTextField },\n                        { field: options.dataValueField }\n                    ];\n                }\n                if (that.dataSource) {\n                    that._unbindDataSource();\n                } else {\n                    that._requestStartHandler = proxy(that._showBusy, that);\n                    that._requestEndHandler = proxy(that._requestEnd, that);\n                    that._errorHandler = proxy(that._hideBusy, that);\n                }\n                that.dataSource = kendo.data.DataSource.create(dataSource).bind(REQUESTSTART, that._requestStartHandler).bind(REQUESTEND, that._requestEndHandler).bind('error', that._errorHandler);\n            },\n            _firstItem: function () {\n                this.listView.focusFirst();\n            },\n            _lastItem: function () {\n                this.listView.focusLast();\n            },\n            _nextItem: function () {\n                this.listView.focusNext();\n            },\n            _prevItem: function () {\n                this.listView.focusPrev();\n            },\n            _move: function (e) {\n                var that = this;\n                var listView = that.listView;\n                var key = e.keyCode;\n                var down = key === keys.DOWN;\n                var dataItem;\n                var pressed;\n                var current;\n                if (key === keys.UP || down) {\n                    if (e.altKey) {\n                        that.toggle(down);\n                    } else {\n                        if (!listView.bound()) {\n                            if (!that._fetch) {\n                                that.dataSource.one(CHANGE, function () {\n                                    that._fetch = false;\n                                    that._move(e);\n                                });\n                                that._fetch = true;\n                                that._filterSource();\n                            }\n                            e.preventDefault();\n                            return true;\n                        }\n                        current = that._focus();\n                        if (!that._fetch && (!current || current.hasClass('k-state-selected'))) {\n                            if (down) {\n                                that._nextItem();\n                                if (!that._focus()) {\n                                    that._lastItem();\n                                }\n                            } else {\n                                that._prevItem();\n                                if (!that._focus()) {\n                                    that._firstItem();\n                                }\n                            }\n                        }\n                        dataItem = listView.dataItemByIndex(listView.getElementIndex(that._focus()));\n                        if (that.trigger(SELECT, {\n                                dataItem: dataItem,\n                                item: that._focus()\n                            })) {\n                            that._focus(current);\n                            return;\n                        }\n                        that._select(that._focus(), true).done(function () {\n                            if (!that.popup.visible()) {\n                                that._blur();\n                            }\n                        });\n                    }\n                    e.preventDefault();\n                    pressed = true;\n                } else if (key === keys.ENTER || key === keys.TAB) {\n                    if (that.popup.visible()) {\n                        e.preventDefault();\n                    }\n                    current = that._focus();\n                    dataItem = that.dataItem();\n                    if (!that.popup.visible() && (!dataItem || that.text() !== that._text(dataItem))) {\n                        current = null;\n                    }\n                    var activeFilter = that.filterInput && that.filterInput[0] === activeElement();\n                    if (current) {\n                        dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n                        var shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n                        if (shouldTrigger && that.trigger(SELECT, {\n                                dataItem: dataItem,\n                                item: current\n                            })) {\n                            return;\n                        }\n                        that._select(current);\n                    } else if (that.input) {\n                        that._accessor(that.input.val());\n                        that.listView.value(that.input.val());\n                    }\n                    if (that._focusElement) {\n                        that._focusElement(that.wrapper);\n                    }\n                    if (activeFilter && key === keys.TAB) {\n                        that.wrapper.focusout();\n                    } else {\n                        that._blur();\n                    }\n                    that.close();\n                    pressed = true;\n                } else if (key === keys.ESC) {\n                    if (that.popup.visible()) {\n                        e.preventDefault();\n                    }\n                    that.close();\n                    pressed = true;\n                } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n                    e.preventDefault();\n                    var direction = key === keys.PAGEDOWN ? 1 : -1;\n                    listView.scrollWith(direction * listView.screenHeight());\n                    pressed = true;\n                }\n                return pressed;\n            },\n            _fetchData: function () {\n                var that = this;\n                var hasItems = !!that.dataSource.view().length;\n                if (that._request || that.options.cascadeFrom) {\n                    return;\n                }\n                if (!that.listView.bound() && !that._fetch && !hasItems) {\n                    that._fetch = true;\n                    that.dataSource.fetch().done(function () {\n                        that._fetch = false;\n                    });\n                }\n            },\n            _options: function (data, optionLabel, value) {\n                var that = this, element = that.element, htmlElement = element[0], length = data.length, options = '', option, dataItem, dataText, dataValue, idx = 0;\n                if (optionLabel) {\n                    options = optionLabel;\n                }\n                for (; idx < length; idx++) {\n                    option = '<option';\n                    dataItem = data[idx];\n                    dataText = that._text(dataItem);\n                    dataValue = that._value(dataItem);\n                    if (dataValue !== undefined) {\n                        dataValue += '';\n                        if (dataValue.indexOf('\"') !== -1) {\n                            dataValue = dataValue.replace(quotRegExp, '&quot;');\n                        }\n                        option += ' value=\"' + dataValue + '\"';\n                    }\n                    option += '>';\n                    if (dataText !== undefined) {\n                        option += htmlEncode(dataText);\n                    }\n                    option += '</option>';\n                    options += option;\n                }\n                element.html(options);\n                if (value !== undefined) {\n                    htmlElement.value = value;\n                    if (htmlElement.value && !value) {\n                        htmlElement.selectedIndex = -1;\n                    }\n                }\n                if (htmlElement.selectedIndex !== -1) {\n                    option = getSelectedOption(htmlElement);\n                    if (option) {\n                        option.setAttribute(SELECTED, SELECTED);\n                    }\n                }\n            },\n            _reset: function () {\n                var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n                if (form[0]) {\n                    that._resetHandler = function () {\n                        setTimeout(function () {\n                            that.value(that._initial);\n                        });\n                    };\n                    that._form = form.on('reset', that._resetHandler);\n                }\n            },\n            _parentWidget: function () {\n                var name = this.options.name;\n                if (!this.options.cascadeFrom) {\n                    return;\n                }\n                var parentElement = $('#' + this.options.cascadeFrom);\n                var parent = parentElement.data('kendo' + name);\n                if (!parent) {\n                    parent = parentElement.data('kendo' + alternativeNames[name]);\n                }\n                return parent;\n            },\n            _cascade: function () {\n                var that = this;\n                var options = that.options;\n                var cascade = options.cascadeFrom;\n                var parent;\n                if (cascade) {\n                    parent = that._parentWidget();\n                    if (!parent) {\n                        return;\n                    }\n                    that._cascadeHandlerProxy = proxy(that._cascadeHandler, that);\n                    that._cascadeFilterRequests = [];\n                    options.autoBind = false;\n                    parent.bind('set', function () {\n                        that.one('set', function (e) {\n                            that._selectedValue = e.value;\n                        });\n                    });\n                    parent.first(CASCADE, that._cascadeHandlerProxy);\n                    if (parent.listView.bound()) {\n                        that._toggleCascadeOnFocus();\n                        that._cascadeSelect(parent);\n                    } else {\n                        parent.one('dataBound', function () {\n                            that._toggleCascadeOnFocus();\n                        });\n                        if (!parent.value()) {\n                            that.enable(false);\n                        }\n                    }\n                }\n            },\n            _toggleCascadeOnFocus: function () {\n                var that = this;\n                var parent = that._parentWidget();\n                var focusout = isIE ? 'blur' : 'focusout';\n                parent._focused.add(parent.filterInput).bind('focus', function () {\n                    parent.unbind(CASCADE, that._cascadeHandlerProxy);\n                    parent.first(CHANGE, that._cascadeHandlerProxy);\n                });\n                parent._focused.add(parent.filterInput).bind(focusout, function () {\n                    parent.unbind(CHANGE, that._cascadeHandlerProxy);\n                    parent.first(CASCADE, that._cascadeHandlerProxy);\n                });\n            },\n            _cascadeHandler: function (e) {\n                var parent = this._parentWidget();\n                var valueBeforeCascade = this.value();\n                this._userTriggered = e.userTriggered;\n                if (this.listView.bound()) {\n                    this._clearSelection(parent, true);\n                }\n                this._cascadeSelect(parent, valueBeforeCascade);\n            },\n            _cascadeChange: function (parent) {\n                var that = this;\n                var value = that._accessor() || that._selectedValue;\n                if (!that._cascadeFilterRequests.length) {\n                    that._selectedValue = null;\n                }\n                if (that._userTriggered) {\n                    that._clearSelection(parent, true);\n                } else if (value) {\n                    if (value !== that.listView.value()[0]) {\n                        that.value(value);\n                    }\n                    if (!that.dataSource.view()[0] || that.selectedIndex === -1) {\n                        that._clearSelection(parent, true);\n                    }\n                } else if (that.dataSource.flatView().length) {\n                    that.select(that.options.index);\n                }\n                that.enable();\n                that._triggerCascade();\n                that._triggerChange();\n                that._userTriggered = false;\n            },\n            _cascadeSelect: function (parent, valueBeforeCascade) {\n                var that = this;\n                var dataItem = parent.dataItem();\n                var filterValue = dataItem ? parent._value(dataItem) : null;\n                var valueField = that.options.cascadeFromField || parent.options.dataValueField;\n                var expressions;\n                that._valueBeforeCascade = valueBeforeCascade !== undefined ? valueBeforeCascade : that.value();\n                if (filterValue || filterValue === 0) {\n                    expressions = that.dataSource.filter() || {};\n                    removeFiltersForField(expressions, valueField);\n                    var handler = function () {\n                        var currentHandler = that._cascadeFilterRequests.shift();\n                        if (currentHandler) {\n                            that.unbind('dataBound', currentHandler);\n                        }\n                        currentHandler = that._cascadeFilterRequests[0];\n                        if (currentHandler) {\n                            that.first('dataBound', currentHandler);\n                        }\n                        that._cascadeChange(parent);\n                    };\n                    that._cascadeFilterRequests.push(handler);\n                    if (that._cascadeFilterRequests.length === 1) {\n                        that.first('dataBound', handler);\n                    }\n                    that._cascading = true;\n                    that._filterSource({\n                        field: valueField,\n                        operator: 'eq',\n                        value: filterValue\n                    });\n                    that._cascading = false;\n                } else {\n                    that.enable(false);\n                    that._clearSelection(parent);\n                    that._triggerCascade();\n                    that._triggerChange();\n                    that._userTriggered = false;\n                }\n            }\n        });\n        var STATIC_LIST_NS = '.StaticList';\n        var StaticList = kendo.ui.DataBoundWidget.extend({\n            init: function (element, options) {\n                Widget.fn.init.call(this, element, options);\n                this.element.attr('role', 'listbox').on('click' + STATIC_LIST_NS, 'li', proxy(this._click, this)).on('mouseenter' + STATIC_LIST_NS, 'li', function () {\n                    $(this).addClass(HOVER);\n                }).on('mouseleave' + STATIC_LIST_NS, 'li', function () {\n                    $(this).removeClass(HOVER);\n                });\n                this.content = this.element.wrap('<div class=\\'k-list-scroller\\' unselectable=\\'on\\'></div>').parent();\n                this.header = this.content.before('<div class=\"k-group-header\" style=\"display:none\"></div>').prev();\n                this.bound(false);\n                this._optionID = kendo.guid();\n                this._selectedIndices = [];\n                this._view = [];\n                this._dataItems = [];\n                this._values = [];\n                var value = this.options.value;\n                if (value) {\n                    this._values = $.isArray(value) ? value.slice(0) : [value];\n                }\n                this._getter();\n                this._templates();\n                this.setDataSource(this.options.dataSource);\n                this._onScroll = proxy(function () {\n                    var that = this;\n                    clearTimeout(that._scrollId);\n                    that._scrollId = setTimeout(function () {\n                        that._renderHeader();\n                    }, 50);\n                }, this);\n            },\n            options: {\n                name: 'StaticList',\n                dataValueField: null,\n                valuePrimitive: false,\n                selectable: true,\n                template: null,\n                groupTemplate: null,\n                fixedGroupTemplate: null\n            },\n            events: [\n                'click',\n                CHANGE,\n                'activate',\n                'deactivate',\n                'dataBinding',\n                'dataBound',\n                'selectedItemChange'\n            ],\n            setDataSource: function (source) {\n                var that = this;\n                var dataSource = source || {};\n                var value;\n                dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n                dataSource = kendo.data.DataSource.create(dataSource);\n                if (that.dataSource) {\n                    that.dataSource.unbind(CHANGE, that._refreshHandler);\n                    value = that.value();\n                    that.value([]);\n                    that.bound(false);\n                    that.value(value);\n                } else {\n                    that._refreshHandler = proxy(that.refresh, that);\n                }\n                that.setDSFilter(dataSource.filter());\n                that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n                that._fixedHeader();\n            },\n            skip: function () {\n                return this.dataSource.skip();\n            },\n            setOptions: function (options) {\n                Widget.fn.setOptions.call(this, options);\n                this._getter();\n                this._templates();\n                this._render();\n            },\n            destroy: function () {\n                this.element.off(STATIC_LIST_NS);\n                if (this._refreshHandler) {\n                    this.dataSource.unbind(CHANGE, this._refreshHandler);\n                }\n                clearTimeout(this._scrollId);\n                Widget.fn.destroy.call(this);\n            },\n            dataItemByIndex: function (index) {\n                return this.dataSource.flatView()[index];\n            },\n            screenHeight: function () {\n                return this.content[0].clientHeight;\n            },\n            scrollToIndex: function (index) {\n                var item = this.element[0].children[index];\n                if (item) {\n                    this.scroll(item);\n                }\n            },\n            scrollWith: function (value) {\n                this.content.scrollTop(this.content.scrollTop() + value);\n            },\n            scroll: function (item) {\n                if (!item) {\n                    return;\n                }\n                if (item[0]) {\n                    item = item[0];\n                }\n                var content = this.content[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n                if (contentScrollTop > itemOffsetTop) {\n                    contentScrollTop = itemOffsetTop;\n                } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n                    contentScrollTop = bottomDistance - contentOffsetHeight;\n                }\n                content.scrollTop = contentScrollTop;\n            },\n            selectedDataItems: function (dataItems) {\n                if (dataItems === undefined) {\n                    return this._dataItems.slice();\n                }\n                this._dataItems = dataItems;\n                this._values = this._getValues(dataItems);\n            },\n            _getValues: function (dataItems) {\n                var getter = this._valueGetter;\n                return $.map(dataItems, function (dataItem) {\n                    return getter(dataItem);\n                });\n            },\n            focusNext: function () {\n                var current = this.focus();\n                if (!current) {\n                    current = 0;\n                } else {\n                    current = current.next();\n                }\n                this.focus(current);\n            },\n            focusPrev: function () {\n                var current = this.focus();\n                if (!current) {\n                    current = this.element[0].children.length - 1;\n                } else {\n                    current = current.prev();\n                }\n                this.focus(current);\n            },\n            focusFirst: function () {\n                this.focus(this.element[0].children[0]);\n            },\n            focusLast: function () {\n                this.focus(last(this.element[0].children));\n            },\n            focus: function (candidate) {\n                var that = this;\n                var id = that._optionID;\n                var hasCandidate;\n                if (candidate === undefined) {\n                    return that._current;\n                }\n                candidate = last(that._get(candidate));\n                candidate = $(this.element[0].children[candidate]);\n                if (that._current) {\n                    that._current.removeClass(FOCUSED).removeAttr('aria-selected').removeAttr(ID);\n                    that.trigger('deactivate');\n                }\n                hasCandidate = !!candidate[0];\n                if (hasCandidate) {\n                    candidate.addClass(FOCUSED);\n                    that.scroll(candidate);\n                    candidate.attr('id', id);\n                }\n                that._current = hasCandidate ? candidate : null;\n                that.trigger('activate');\n            },\n            focusIndex: function () {\n                return this.focus() ? this.focus().index() : undefined;\n            },\n            skipUpdate: function (skipUpdate) {\n                this._skipUpdate = skipUpdate;\n            },\n            select: function (indices) {\n                var that = this;\n                var selectable = that.options.selectable;\n                var singleSelection = selectable !== 'multiple' && selectable !== false;\n                var selectedIndices = that._selectedIndices;\n                var added = [];\n                var removed = [];\n                var result;\n                if (indices === undefined) {\n                    return selectedIndices.slice();\n                }\n                indices = that._get(indices);\n                if (indices.length === 1 && indices[0] === -1) {\n                    indices = [];\n                }\n                var deferred = $.Deferred().resolve();\n                var filtered = that.isFiltered();\n                if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n                    return deferred;\n                }\n                if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1) {\n                    if (that._dataItems.length && that._view.length) {\n                        that._dataItems = [that._view[selectedIndices[0]].item];\n                    }\n                    return deferred;\n                }\n                result = that._deselect(indices);\n                removed = result.removed;\n                indices = result.indices;\n                if (indices.length) {\n                    if (singleSelection) {\n                        indices = [last(indices)];\n                    }\n                    added = that._select(indices);\n                }\n                if (added.length || removed.length) {\n                    that._valueComparer = null;\n                    that.trigger(CHANGE, {\n                        added: added,\n                        removed: removed\n                    });\n                }\n                return deferred;\n            },\n            removeAt: function (position) {\n                this._selectedIndices.splice(position, 1);\n                this._values.splice(position, 1);\n                this._valueComparer = null;\n                return {\n                    position: position,\n                    dataItem: this._dataItems.splice(position, 1)[0]\n                };\n            },\n            setValue: function (value) {\n                value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n                this._values = value;\n                this._valueComparer = null;\n            },\n            value: function (value) {\n                var that = this;\n                var deferred = that._valueDeferred;\n                var indices;\n                if (value === undefined) {\n                    return that._values.slice();\n                }\n                that.setValue(value);\n                if (!deferred || deferred.state() === 'resolved') {\n                    that._valueDeferred = deferred = $.Deferred();\n                }\n                if (that.bound()) {\n                    indices = that._valueIndices(that._values);\n                    if (that.options.selectable === 'multiple') {\n                        that.select(-1);\n                    }\n                    that.select(indices);\n                    deferred.resolve();\n                }\n                that._skipUpdate = false;\n                return deferred;\n            },\n            items: function () {\n                return this.element.children('.k-item');\n            },\n            _click: function (e) {\n                if (!e.isDefaultPrevented()) {\n                    if (!this.trigger('click', { item: $(e.currentTarget) })) {\n                        this.select(e.currentTarget);\n                    }\n                }\n            },\n            _valueExpr: function (type, values) {\n                var that = this;\n                var idx = 0;\n                var body;\n                var comparer;\n                var normalized = [];\n                if (!that._valueComparer || that._valueType !== type) {\n                    that._valueType = type;\n                    for (; idx < values.length; idx++) {\n                        normalized.push(unifyType(values[idx], type));\n                    }\n                    body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + '   return idx;' + ' }' + '} ' + 'return -1;';\n                    comparer = new Function('current', 'values', body);\n                    that._valueComparer = function (current) {\n                        return comparer(current, normalized);\n                    };\n                }\n                return that._valueComparer;\n            },\n            _dataItemPosition: function (dataItem, values) {\n                var value = this._valueGetter(dataItem);\n                var valueExpr = this._valueExpr(typeof value, values);\n                return valueExpr(value);\n            },\n            _getter: function () {\n                this._valueGetter = kendo.getter(this.options.dataValueField);\n            },\n            _deselect: function (indices) {\n                var that = this;\n                var children = that.element[0].children;\n                var selectable = that.options.selectable;\n                var selectedIndices = that._selectedIndices;\n                var dataItems = that._dataItems;\n                var values = that._values;\n                var removed = [];\n                var i = 0;\n                var j;\n                var index, selectedIndex;\n                var removedIndices = 0;\n                indices = indices.slice();\n                if (selectable === true || !indices.length) {\n                    for (; i < selectedIndices.length; i++) {\n                        $(children[selectedIndices[i]]).removeClass('k-state-selected');\n                        removed.push({\n                            position: i,\n                            dataItem: dataItems[i]\n                        });\n                    }\n                    that._values = [];\n                    that._dataItems = [];\n                    that._selectedIndices = [];\n                } else if (selectable === 'multiple') {\n                    for (; i < indices.length; i++) {\n                        index = indices[i];\n                        if (!$(children[index]).hasClass('k-state-selected')) {\n                            continue;\n                        }\n                        for (j = 0; j < selectedIndices.length; j++) {\n                            selectedIndex = selectedIndices[j];\n                            if (selectedIndex === index) {\n                                $(children[selectedIndex]).removeClass('k-state-selected');\n                                removed.push({\n                                    position: j + removedIndices,\n                                    dataItem: dataItems.splice(j, 1)[0]\n                                });\n                                selectedIndices.splice(j, 1);\n                                indices.splice(i, 1);\n                                values.splice(j, 1);\n                                removedIndices += 1;\n                                i -= 1;\n                                j -= 1;\n                                break;\n                            }\n                        }\n                    }\n                }\n                return {\n                    indices: indices,\n                    removed: removed\n                };\n            },\n            _deselectFiltered: function (indices) {\n                var children = this.element[0].children;\n                var dataItem, index, position;\n                var removed = [];\n                var idx = 0;\n                for (; idx < indices.length; idx++) {\n                    index = indices[idx];\n                    dataItem = this._view[index].item;\n                    position = this._dataItemPosition(dataItem, this._values);\n                    if (position > -1) {\n                        removed.push(this.removeAt(position));\n                        $(children[index]).removeClass('k-state-selected');\n                    }\n                }\n                if (removed.length) {\n                    this.trigger(CHANGE, {\n                        added: [],\n                        removed: removed\n                    });\n                    return true;\n                }\n                return false;\n            },\n            _select: function (indices) {\n                var that = this;\n                var children = that.element[0].children;\n                var data = that._view;\n                var dataItem, index;\n                var added = [];\n                var idx = 0;\n                if (last(indices) !== -1) {\n                    that.focus(indices);\n                }\n                for (; idx < indices.length; idx++) {\n                    index = indices[idx];\n                    dataItem = data[index];\n                    if (index === -1 || !dataItem) {\n                        continue;\n                    }\n                    dataItem = dataItem.item;\n                    that._selectedIndices.push(index);\n                    that._dataItems.push(dataItem);\n                    that._values.push(that._valueGetter(dataItem));\n                    $(children[index]).addClass('k-state-selected').attr('aria-selected', true);\n                    added.push({ dataItem: dataItem });\n                }\n                return added;\n            },\n            getElementIndex: function (element) {\n                return $(element).data('offset-index');\n            },\n            _get: function (candidate) {\n                if (typeof candidate === 'number') {\n                    candidate = [candidate];\n                } else if (!isArray(candidate)) {\n                    candidate = this.getElementIndex(candidate);\n                    candidate = [candidate !== undefined ? candidate : -1];\n                }\n                return candidate;\n            },\n            _template: function () {\n                var that = this;\n                var options = that.options;\n                var template = options.template;\n                if (!template) {\n                    template = kendo.template('<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">${' + kendo.expr(options.dataTextField, 'data') + '}</li>', { useWithBlock: false });\n                } else {\n                    template = kendo.template(template);\n                    template = function (data) {\n                        return '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">' + template(data) + '</li>';\n                    };\n                }\n                return template;\n            },\n            _templates: function () {\n                var template;\n                var options = this.options;\n                var templates = {\n                    template: options.template,\n                    groupTemplate: options.groupTemplate,\n                    fixedGroupTemplate: options.fixedGroupTemplate\n                };\n                for (var key in templates) {\n                    template = templates[key];\n                    if (template && typeof template !== 'function') {\n                        templates[key] = kendo.template(template);\n                    }\n                }\n                this.templates = templates;\n            },\n            _normalizeIndices: function (indices) {\n                var newIndices = [];\n                var idx = 0;\n                for (; idx < indices.length; idx++) {\n                    if (indices[idx] !== undefined) {\n                        newIndices.push(indices[idx]);\n                    }\n                }\n                return newIndices;\n            },\n            _valueIndices: function (values, indices) {\n                var data = this._view;\n                var idx = 0;\n                var index;\n                indices = indices ? indices.slice() : [];\n                if (!values.length) {\n                    return [];\n                }\n                for (; idx < data.length; idx++) {\n                    index = this._dataItemPosition(data[idx].item, values);\n                    if (index !== -1) {\n                        indices[index] = idx;\n                    }\n                }\n                return this._normalizeIndices(indices);\n            },\n            _firstVisibleItem: function () {\n                var element = this.element[0];\n                var content = this.content[0];\n                var scrollTop = content.scrollTop;\n                var itemHeight = $(element.children[0]).height();\n                var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n                var item = element.children[itemIndex] || element.lastChild;\n                var forward = item.offsetTop < scrollTop;\n                while (item) {\n                    if (forward) {\n                        if (item.offsetTop + itemHeight > scrollTop || !item.nextSibling) {\n                            break;\n                        }\n                        item = item.nextSibling;\n                    } else {\n                        if (item.offsetTop <= scrollTop || !item.previousSibling) {\n                            break;\n                        }\n                        item = item.previousSibling;\n                    }\n                }\n                return this._view[$(item).data('offset-index')];\n            },\n            _fixedHeader: function () {\n                if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n                    this.header.show();\n                    this.content.scroll(this._onScroll);\n                } else {\n                    this.header.hide();\n                    this.content.off('scroll', this._onScroll);\n                }\n            },\n            _renderHeader: function () {\n                var template = this.templates.fixedGroupTemplate;\n                if (!template) {\n                    return;\n                }\n                var visibleItem = this._firstVisibleItem();\n                if (visibleItem) {\n                    this.header.html(template(visibleItem.group));\n                }\n            },\n            _renderItem: function (context) {\n                var item = '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item';\n                var dataItem = context.item;\n                var notFirstItem = context.index !== 0;\n                var selected = context.selected;\n                if (notFirstItem && context.newGroup) {\n                    item += ' k-first';\n                }\n                if (selected) {\n                    item += ' k-state-selected';\n                }\n                item += '\"' + (selected ? ' aria-selected=\"true\"' : '') + ' data-offset-index=\"' + context.index + '\">';\n                item += this.templates.template(dataItem);\n                if (notFirstItem && context.newGroup) {\n                    item += '<div class=\"k-group\">' + this.templates.groupTemplate(context.group) + '</div>';\n                }\n                return item + '</li>';\n            },\n            _render: function () {\n                var html = '';\n                var i = 0;\n                var idx = 0;\n                var context;\n                var dataContext = [];\n                var view = this.dataSource.view();\n                var values = this.value();\n                var group, newGroup, j;\n                var isGrouped = this.isGrouped();\n                if (isGrouped) {\n                    for (i = 0; i < view.length; i++) {\n                        group = view[i];\n                        newGroup = true;\n                        for (j = 0; j < group.items.length; j++) {\n                            context = {\n                                selected: this._selected(group.items[j], values),\n                                item: group.items[j],\n                                group: group.value,\n                                newGroup: newGroup,\n                                index: idx\n                            };\n                            dataContext[idx] = context;\n                            idx += 1;\n                            html += this._renderItem(context);\n                            newGroup = false;\n                        }\n                    }\n                } else {\n                    for (i = 0; i < view.length; i++) {\n                        context = {\n                            selected: this._selected(view[i], values),\n                            item: view[i],\n                            index: i\n                        };\n                        dataContext[i] = context;\n                        html += this._renderItem(context);\n                    }\n                }\n                this._view = dataContext;\n                this.element[0].innerHTML = html;\n                if (isGrouped && dataContext.length) {\n                    this._renderHeader();\n                }\n            },\n            _selected: function (dataItem, values) {\n                var select = !this.isFiltered() || this.options.selectable === 'multiple';\n                return select && this._dataItemPosition(dataItem, values) !== -1;\n            },\n            setDSFilter: function (filter) {\n                this._lastDSFilter = extend({}, filter);\n            },\n            isFiltered: function () {\n                if (!this._lastDSFilter) {\n                    this.setDSFilter(this.dataSource.filter());\n                }\n                return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n            },\n            refresh: function (e) {\n                var that = this;\n                var action = e && e.action;\n                var skipUpdateOnBind = that.options.skipUpdateOnBind;\n                var isItemChange = action === 'itemchange';\n                var result;\n                that.trigger('dataBinding');\n                that._angularItems('cleanup');\n                that._fixedHeader();\n                that._render();\n                that.bound(true);\n                if (isItemChange || action === 'remove') {\n                    result = mapChangedItems(that._dataItems, e.items);\n                    if (result.changed.length) {\n                        if (isItemChange) {\n                            that.trigger('selectedItemChange', { items: result.changed });\n                        } else {\n                            that.value(that._getValues(result.unchanged));\n                        }\n                    }\n                } else if (that.isFiltered() || that._skipUpdate) {\n                    that.focus(0);\n                    if (that._skipUpdate) {\n                        that._skipUpdate = false;\n                        that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n                    }\n                } else if (!skipUpdateOnBind && (!action || action === 'add')) {\n                    that.value(that._values);\n                }\n                if (that._valueDeferred) {\n                    that._valueDeferred.resolve();\n                }\n                that._angularItems('compile');\n                that.trigger('dataBound');\n            },\n            bound: function (bound) {\n                if (bound === undefined) {\n                    return this._bound;\n                }\n                this._bound = bound;\n            },\n            isGrouped: function () {\n                return (this.dataSource.group() || []).length;\n            }\n        });\n        ui.plugin(StaticList);\n        function last(list) {\n            return list[list.length - 1];\n        }\n        function getSelectedOption(select) {\n            var index = select.selectedIndex;\n            return index > -1 ? select.options[index] : {};\n        }\n        function mapChangedItems(selected, itemsToMatch) {\n            var itemsLength = itemsToMatch.length;\n            var selectedLength = selected.length;\n            var dataItem;\n            var found;\n            var i, j;\n            var changed = [];\n            var unchanged = [];\n            if (selectedLength) {\n                for (i = 0; i < selectedLength; i++) {\n                    dataItem = selected[i];\n                    found = false;\n                    for (j = 0; j < itemsLength; j++) {\n                        if (dataItem === itemsToMatch[j]) {\n                            found = true;\n                            changed.push({\n                                index: i,\n                                item: dataItem\n                            });\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        unchanged.push(dataItem);\n                    }\n                }\n            }\n            return {\n                changed: changed,\n                unchanged: unchanged\n            };\n        }\n        function isValidFilterExpr(expression) {\n            if (!expression || $.isEmptyObject(expression)) {\n                return false;\n            }\n            if (expression.filters && !expression.filters.length) {\n                return false;\n            }\n            return true;\n        }\n        function removeFiltersForField(expression, field) {\n            var filters;\n            var found = false;\n            if (expression.filters) {\n                filters = $.grep(expression.filters, function (filter) {\n                    found = removeFiltersForField(filter, field);\n                    if (filter.filters) {\n                        return filter.filters.length;\n                    } else {\n                        return filter.field != field;\n                    }\n                });\n                if (!found && expression.filters.length !== filters.length) {\n                    found = true;\n                }\n                expression.filters = filters;\n            }\n            return found;\n        }\n    }(window.kendo.jQuery));\n    return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n    (a3 || a2)();\n}));"],"sourceRoot":"/source/"}