{"version":3,"sources":["kendo.virtuallist.js"],"names":["f","define","$","undefined","lastFrom","array","length","toArray","value","Array","isPrimitive","dataItem","getItemCount","screenHeight","listScreens","itemHeight","Math","ceil","appendChild","parent","className","tagName","element","document","createElement","getDefaultItemHeight","lineHeight","mockList","css","position","left","visibility","appendTo","body","parseFloat","kendo","getComputedStyles","find","remove","bufferSizes","opposite","down","up","listValidator","options","downThreshold","threshold","upThreshold","list","scrollTop","lastScrollTop","top","scrollCallback","callback","force","syncList","reorder","items","index","y","support","browser","msie","version","style","webkitTransform","transform","map2","templates","arr1","arr2","i","len","item","this","trigger","ITEMCHANGE","data","ns","ui","reshift","diff","range","splice","push","apply","unshift","render","itemTemplate","template","placeholderTemplate","angular","elements","attr","uid","html","toggleClass","FOCUSED","current","SELECTED","selected","newGroup","GROUPITEM","groupTemplate","group","mapChangedItems","itemsToMatch","found","j","itemsLength","selectedLength","changed","unchanged","window","Widget","DataBoundWidget","proxy","WRAPPER","VIRTUALLIST","CONTENT","LIST","HEADER","VIRTUALITEM","ITEM","HEIGHTCONTAINER","HOVER","CHANGE","CLICK","LISTBOUND","ACTIVATE","DEACTIVATE","VIRTUAL_LIST_NS","VirtualList","extend","init","that","bound","_fetching","fn","call","addClass","content","wrap","wrapper","header","before","prev","on","removeClass","_values","_selectedDataItems","_selectedIndexes","_rangesList","_activeDeferred","_promisesList","_optionID","guid","_templates","setDataSource","dataSource","throttle","_renderItems","_triggerListBound","delay","_selectable","name","autoBind","height","oppositeBuffer","type","selectable","dataValueField","fixedGroupTemplate","mapValueTo","valueMapper","events","setOptions","_selectProxy","off","refresh","_items","destroy","unbind","_refreshHandler","source","isArray","DataSource","create","_clean","_deferValueSet","mute","bind","setDSFilter","filter","view","fetch","skip","currentRangeStart","_selectingValue","_skip","_getValues","dataItems","getter","_valueGetter","map","e","result","action","isItemChange","filtered","isFiltered","_mute","focus","_createList","skipUpdateOnBind","done","removeAt","setValue","_forcePrefetch","slice","select","_valueDeferred","state","Deferred","_prefetchByValue","idx","dataView","_dataView","valueGetter","match","forSelection","success","response","mapValueToIndex","mapValueToDataItem","indexes","removed","_deselect","_triggerChange","added","resolve","deferredRange","take","itemCount","ranges","defs","low","floor","high","pages","each","_","deferred","end","existingRange","_multiplePrefetch","when","then","prefetch","isEmptyList","_getSkip","_findDataItem","_getRange","_findRange","min","total","dataItemByIndex","selectedDataItems","scrollWith","scrollTo","scrollToIndex","candidate","id","triggerEvent","flatView","isNaN","parseInt","_getElementByIndex","_focusedIndex","hasClass","removeAttr","_getElementLocation","_screenHeight","focusIndex","focusFirst","focusLast","lastIndex","heightContainer","offsetHeight","focusPrev","focusNext","indices","isAlreadySelected","singleSelection","prefetchStarted","_getIndecies","_deselectCurrentValues","_select","_listCreated","_lastDSFilter","Query","compareFilters","skipUpdate","noop","_getElementByDataItem","_lastScrollTop","empty","_height","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","key","_generateItems","count","tabIndex","setAttribute","minHeight","_saveInitialRanges","_ranges","start","get","_buildValueGetter","_setHeight","hide","show","_getter","_onScroll","getList","_listItems","_fixedHeader","_whenChanged","_reorderList","_calculateGroupPadding","currentHeight","padHeight","innerHTML","lastRequestedRange","lastRangeStart","pageSize","flatGroups","rangeStart","flatGroup","groups","groupLength","inRange","_getterDeferred","reject","firstItemIndex","_indexConstraint","firstVisibleGroup","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","listType","currentIndex","_currentGroup","_range","_view","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","Infinity","list2","offset","range2","abs","_bufferSizes","max","buffers","getElementIndex","jQuery","elementIndex","selectedIndex","selectedIndexes","removedindexesCounter","inArray","_deselectSingleItem","children","values","page","oldSkip","_clickHandler","currentTarget","isDefaultPrevented","firstItem","first","groupHeader","padding","display","scrollbar","plugin","amd","a1","a2","a3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAwBC,SAAUA,EAAGC,QACVA,OAAO,qBAAsB,cAAeD,IAC9C,WAqtCE,MA7sCC,UAAUE,EAAGC,GAEV,QAASC,GAASC,GACd,MAAOA,GAAMA,EAAMC,OAAS,GAEhC,QAASC,GAAQC,GACb,MAAOA,aAAiBC,OAAQD,GAASA,GAE7C,QAASE,GAAYC,GACjB,MAA2B,gBAAbA,IAA6C,gBAAbA,IAA6C,iBAAbA,GAElF,QAASC,GAAaC,EAAcC,EAAaC,GAC7C,MAAOC,MAAKC,KAAKJ,EAAeC,EAAcC,GAElD,QAASG,GAAYC,EAAQC,EAAWC,GACpC,GAAIC,GAAUC,SAASC,cAAcH,GAAW,MAKhD,OAJID,KACAE,EAAQF,UAAYA,GAExBD,EAAOD,YAAYI,GACZA,EAEX,QAASG,KACL,GAAgGC,GAA5FC,EAAWzB,EAAE,6EASjB,OARAyB,GAASC,KACLC,SAAU,WACVC,KAAM,YACNC,WAAY,WAEhBJ,EAASK,SAAST,SAASU,MAC3BP,EAAaQ,WAAWC,EAAMC,kBAAkBT,EAASU,KAAK,WAAW,IAAK,gBAAgB,gBAC9FV,EAASW,SACFZ,EAEX,QAASa,GAAY1B,EAAcC,EAAa0B,GAC5C,OACIC,KAAM5B,EAAe2B,EACrBE,GAAI7B,GAAgBC,EAAc,EAAI0B,IAG9C,QAASG,GAAcC,EAAS/B,GAAhC,GACQgC,IAAiBD,EAAQ9B,YAAc,EAAI8B,EAAQE,WAAajC,EAChEkC,EAAcH,EAAQE,UAAYjC,CACtC,OAAO,UAAUmC,EAAMC,EAAWC,GAC9B,MAAID,GAAYC,EACkBL,EAAvBI,EAAYD,EAAKG,IAEJ,IAAbH,EAAKG,KAAaF,EAAYD,EAAKG,IAAMJ,GAI5D,QAASK,GAAe9B,EAAS+B,GAC7B,MAAO,UAAUC,GACb,MAAOD,GAAS/B,EAAQ2B,UAAWK,IAG3C,QAASC,GAASC,GACd,MAAO,UAAUR,EAAMM,GAEnB,MADAE,GAAQR,EAAKS,MAAOT,EAAKU,MAAOJ,GACzBN,GAGf,QAASnB,GAASP,EAASqC,GACnBxB,EAAMyB,QAAQC,QAAQC,MAAwC,GAAhC3B,EAAMyB,QAAQC,QAAQE,QACpDzC,EAAQ0C,MAAMb,IAAMQ,EAAI,MAExBrC,EAAQ0C,MAAMC,gBAAkB,cAAgBN,EAAI,MACpDrC,EAAQ0C,MAAME,UAAY,cAAgBP,EAAI,OAGtD,QAASQ,GAAKd,EAAUe,GACpB,MAAO,UAAUC,EAAMC,GACnB,IAAK,GAAIC,GAAI,EAAGC,EAAMH,EAAK/D,OAAYkE,EAAJD,EAASA,IACxClB,EAASgB,EAAKE,GAAID,EAAKC,GAAIH,GACvBE,EAAKC,GAAGE,MACRC,KAAKC,QAAQC,GACTH,KAAMvE,EAAEmE,EAAKE,IACbM,KAAMP,EAAKC,GAAGE,KACdK,GAAI3C,EAAM4C,MAM9B,QAASC,GAAQvB,EAAOwB,GACpB,GAAIC,EAQJ,OAPID,GAAO,GACPC,EAAQzB,EAAM0B,OAAO,EAAGF,GACxBxB,EAAM2B,KAAKC,MAAM5B,EAAOyB,KAExBA,EAAQzB,EAAM0B,OAAOF,GAAOA,GAC5BxB,EAAM6B,QAAQD,MAAM5B,EAAOyB,IAExBA,EAEX,QAASK,GAAOjE,EAASuD,EAAMT,GAC3B,GAAIoB,GAAepB,EAAUqB,QAC7BnE,GAAUpB,EAAEoB,GACPuD,EAAKJ,OACNe,EAAepB,EAAUsB,qBAE7BhB,KAAKiB,QAAQ,UAAW,WACpB,OAASC,UAAWtE,MAExBA,EAAQuE,KAAK,WAAYhB,EAAKJ,KAAOI,EAAKJ,KAAKqB,IAAM,IAAID,KAAK,oBAAqBhB,EAAKnB,OAAOqC,KAAKP,EAAaX,EAAKJ,WACtHnD,EAAQ0E,YAAYC,EAASpB,EAAKqB,SAClC5E,EAAQ0E,YAAYG,EAAUtB,EAAKuB,UACnC9E,EAAQ0E,YAAY,UAAWnB,EAAKwB,UACpC/E,EAAQ0E,YAAY,kBAAmBnB,EAAKJ,MACzB,IAAfI,EAAKnB,OAAemB,EAAKwB,UACzBnG,EAAE,cAAgBoG,EAAY,WAAWtE,SAASV,GAASyE,KAAK3B,EAAUmC,cAAc1B,EAAK2B,QAE7F3B,EAAK1B,MAAQhD,GACb0B,EAASP,EAAQ,GAAIuD,EAAK1B,KAE9BuB,KAAKiB,QAAQ,UAAW,WACpB,OACIC,UAAWtE,GACXuD,OACQlE,SAAUkE,EAAKJ,KACf+B,MAAO3B,EAAK2B,MACZH,SAAUxB,EAAKwB,cAKnC,QAASI,GAAgBL,EAAUM,GAAnC,GAGQ/F,GACAgG,EACApC,EAAGqC,EAJHC,EAAcH,EAAapG,OAC3BwG,EAAiBV,EAAS9F,OAI1ByG,KACAC,IACJ,IAAIF,EACA,IAAKvC,EAAI,EAAOuC,EAAJvC,EAAoBA,IAAK,CAGjC,IAFA5D,EAAWyF,EAAS7B,GACpBoC,GAAQ,EACHC,EAAI,EAAOC,EAAJD,EAAiBA,IACzB,GAAIjG,IAAa+F,EAAaE,GAAI,CAC9BD,GAAQ,EACRI,EAAQ3B,MACJ1B,MAAOa,EACPE,KAAM9D,GAEV,OAGHgG,GACDK,EAAU5B,KAAKzE,GAI3B,OACIoG,QAASA,EACTC,UAAWA,GA3JtB,GACO7E,GAAQ8E,OAAO9E,MAAO4C,EAAK5C,EAAM4C,GAAImC,EAASnC,EAAGmC,OAAQC,EAAkBpC,EAAGoC,gBAAiBC,EAAQlH,EAAEkH,MAAOC,EAAU,iBAAkBC,EAAc,iBAAkBC,EAAU,oBAAqBC,EAAO,SAAUC,EAAS,iBAAkBC,EAAc,iBAAkBC,EAAO,SAAUC,EAAkB,qBAAsBtB,EAAY,UAAWH,EAAW,mBAAoBF,EAAU,kBAAmB4B,EAAQ,gBAAiBC,EAAS,SAAUC,EAAQ,QAASC,EAAY,YAAapD,EAAa,aAAcqD,EAAW,WAAYC,EAAa,aAAcC,EAAkB,eA6JxlBC,EAAcjB,EAAgBkB,QAC9BC,KAAM,SAAUhH,EAASsB,GACrB,GAAI2F,GAAO7D,IACX6D,GAAKC,OAAM,GACXD,EAAKE,WAAY,EACjBvB,EAAOwB,GAAGJ,KAAKK,KAAKJ,EAAMjH,EAASsB,GAC9B2F,EAAK3F,QAAQ7B,aACdwH,EAAK3F,QAAQ7B,WAAaU,KAE9BmB,EAAU2F,EAAK3F,QACf2F,EAAKjH,QAAQsH,SAASpB,EAAO,IAAMF,GAAazB,KAAK,OAAQ,WAC7D0C,EAAKM,QAAUN,EAAKjH,QAAQwH,KAAK,iCAAsCvB,EAAU,YAAapG,SAC9FoH,EAAKQ,QAAUR,EAAKM,QAAQC,KAAK,eAAkBzB,EAAU,YAAalG,SAC1EoH,EAAKS,OAAST,EAAKM,QAAQI,OAAO,eAAkBxB,EAAS,YAAayB,OAC1EX,EAAKjH,QAAQ6H,GAAG,aAAehB,EAAiB,0BAA2B,WACvEjI,EAAEwE,MAAMkE,SAASf,KAClBsB,GAAG,aAAehB,EAAiB,KAAM,WACxCjI,EAAEwE,MAAM0E,YAAYvB,KAExBU,EAAKc,QAAU9I,EAAQgI,EAAK3F,QAAQpC,OACpC+H,EAAKe,sBACLf,EAAKgB,oBACLhB,EAAKiB,eACLjB,EAAKkB,gBAAkB,KACvBlB,EAAKmB,iBACLnB,EAAKoB,UAAYxH,EAAMyH,OACvBrB,EAAKsB,aACLtB,EAAKuB,cAAclH,EAAQmH,YAC3BxB,EAAKM,QAAQM,GAAG,SAAWhB,EAAiBhG,EAAM6H,SAAS,WACvDzB,EAAK0B,eACL1B,EAAK2B,qBACNtH,EAAQuH,QACX5B,EAAK6B,eAETxH,SACIyH,KAAM,cACNC,UAAU,EACVH,MAAO,IACPI,OAAQ,KACRzJ,YAAa,EACbgC,UAAW,GACX/B,WAAY,KACZyJ,eAAgB,EAChBC,KAAM,OACNC,YAAY,EACZlK,SACAmK,eAAgB,KAChBlF,SAAU,UACVC,oBAAqB,aACrBa,cAAe,UACfqE,mBAAoB,wBACpBC,WAAY,QACZC,YAAa,MAEjBC,QACIjD,EACAC,EACAC,EACApD,EACAqD,EACAC,GAEJ8C,WAAY,SAAUpI,GAClBsE,EAAOwB,GAAGsC,WAAWrC,KAAKjE,KAAM9B,GAC5B8B,KAAKuG,cAAgBvG,KAAK9B,QAAQ8H,cAAe,EACjDhG,KAAKpD,QAAQ4J,IAAInD,EAAO,IAAML,EAAahD,KAAKuG,eACxCvG,KAAKuG,cAAgBvG,KAAK9B,QAAQ8H,YAC1ChG,KAAK0F,cAET1F,KAAKmF,aACLnF,KAAKyG,WAET1H,MAAO,WACH,MAAOvD,GAAEwE,KAAK0G,SAElBC,QAAS,WACL3G,KAAKqE,QAAQmC,IAAI/C,GACjBzD,KAAKqF,WAAWuB,OAAOxD,EAAQpD,KAAK6G,iBACpCrE,EAAOwB,GAAG2C,QAAQ1C,KAAKjE,OAE3BoF,cAAe,SAAU0B,GAAV,GAGPhL,GAFA+H,EAAO7D,KACPqF,EAAayB,KAEjBzB,GAAa7J,EAAEuL,QAAQ1B,IAAgBlF,KAAMkF,GAAeA,EAC5DA,EAAa5H,EAAM0C,KAAK6G,WAAWC,OAAO5B,GACtCxB,EAAKwB,YACLxB,EAAKwB,WAAWuB,OAAOxD,EAAQS,EAAKgD,iBACpChD,EAAKqD,SACLrD,EAAKC,OAAM,GACXD,EAAKsD,gBAAiB,EACtBrL,EAAQ+H,EAAK/H,QACb+H,EAAK/H,UACL+H,EAAKuD,KAAK,WACNvD,EAAK/H,MAAMA,MAGf+H,EAAKgD,gBAAkBrL,EAAEkH,MAAMmB,EAAK4C,QAAS5C,GAEjDA,EAAKwB,WAAaA,EAAWgC,KAAKjE,EAAQS,EAAKgD,iBAC/ChD,EAAKyD,YAAYjC,EAAWkC,UACK,IAA7BlC,EAAWmC,OAAO5L,OAClBiI,EAAK4C,UACE5C,EAAK3F,QAAQ0H,UACpBP,EAAWoC,SAGnBC,KAAM,WACF,MAAO1H,MAAKqF,WAAWsC,qBAE3BnC,kBAAmB,WAAA,GACX3B,GAAO7D,KACP0H,EAAO7D,EAAK6D,MACZ7D,GAAKC,UAAYD,EAAK+D,iBAAmB/D,EAAKgE,QAAUH,IACxD7D,EAAKgE,MAAQH,EACb7D,EAAK5D,QAAQqD,KAGrBwE,WAAY,SAAUC,GAClB,GAAIC,GAAShI,KAAKiI,YAClB,OAAOzM,GAAE0M,IAAIH,EAAW,SAAU9L,GAC9B,MAAO+L,GAAO/L,MAGtBwK,QAAS,SAAU0B,GAAV,GAKDC,GAJAvE,EAAO7D,KACPqI,EAASF,GAAKA,EAAEE,OAChBC,EAA0B,eAAXD,EACfE,EAAWvI,KAAKwI,YAEhB3E,GAAK4E,QAGT5E,EAAKsD,gBAAiB,EACjBtD,EAAKE,WAiBFF,EAAK0B,cACL1B,EAAK0B,cAAa,GAEtB1B,EAAK2B,sBAnBD+C,GACA1E,EAAK6E,MAAM,GAEf7E,EAAK8E,cACAN,IAAUxE,EAAKc,QAAQ/I,QAAW2M,GAAa1E,EAAK3F,QAAQ0K,kBAQ7D/E,EAAKC,OAAM,GACXD,EAAK2B,sBARL3B,EAAK+D,iBAAkB,EACvB/D,EAAK/H,MAAM+H,EAAKc,SAAS,GAAMkE,KAAK,WAChChF,EAAKC,OAAM,GACXD,EAAK+D,iBAAkB,EACvB/D,EAAK2B,yBAYb8C,GAA2B,WAAXD,KAChBD,EAASrG,EAAgB8B,EAAKe,mBAAoBuD,EAAEpJ,OAChDqJ,EAAO/F,QAAQzG,SACX0M,EACAzE,EAAK5D,QAAQ,sBAAwBlB,MAAOqJ,EAAO/F,UAEnDwB,EAAK/H,MAAM+H,EAAKiE,WAAWM,EAAO9F,cAI9CuB,EAAKE,WAAY,IAErB+E,SAAU,SAAU3L,GAGhB,MAFA6C,MAAK6E,iBAAiBpE,OAAOtD,EAAU,GACvC6C,KAAK2E,QAAQlE,OAAOtD,EAAU,IAE1BA,SAAUA,EACVlB,SAAU+D,KAAK4E,mBAAmBnE,OAAOtD,EAAU,GAAG,KAG9D4L,SAAU,SAAUjN,GAChBkE,KAAK2E,QAAU9I,EAAQC,IAE3BA,MAAO,SAAUA,EAAOkN,GACpB,GAAInF,GAAO7D,IACX,OAAIlE,KAAUL,EACHoI,EAAKc,QAAQsE,SAEV,OAAVnN,IACAA,MAEJA,EAAQD,EAAQC,GACgB,aAA5B+H,EAAK3F,QAAQ8H,YAA6BnC,EAAKqF,SAAStN,QAAUE,EAAMF,QACxEiI,EAAKqF,OAAO,IAEXrF,EAAKsF,gBAAkD,aAAhCtF,EAAKsF,eAAeC,UAC5CvF,EAAKsF,eAAiB3N,EAAE6N,YAEvBvN,EAAMF,QACPiI,EAAKqF,OAAO,IAEhBrF,EAAKc,QAAU7I,GACX+H,EAAKC,UAAYD,EAAK4E,QAAU5E,EAAKsD,gBAAkB6B,IACvDnF,EAAKyF,iBAAiBxN,GAEnB+H,EAAKsF,iBAEhBG,iBAAkB,SAAUxN,GAAV,GACqGiE,GAC1GF,EACI0J,EAFT1F,EAAO7D,KAAMwJ,EAAW3F,EAAK4F,UAAWC,EAAc7F,EAAKoE,aAAc9B,EAAatC,EAAK3F,QAAQiI,WAAkBwD,GAAQ,EAAOC,IACxI,KAAS/J,EAAI,EAAO/D,EAAMF,OAAViE,EAAkBA,IAC9B,IAAS0J,EAAM,EAASC,EAAS5N,OAAf2N,EAAuBA,IACrCxJ,EAAOyJ,EAASD,GAAKxJ,KACjBA,IACA4J,EAAQ3N,EAAY+D,GAAQjE,EAAM+D,KAAOE,EAAOjE,EAAM+D,KAAO6J,EAAY3J,GACrE4J,GACAC,EAAalJ,KAAK8I,EAASD,GAAKvK,OAKhD,OAAI4K,GAAahO,SAAWE,EAAMF,QAC9BiI,EAAKc,WACLd,EAAKqF,OAAOU,GACZ,IAEoC,kBAA7B/F,GAAK3F,QAAQkI,YACpBvC,EAAK3F,QAAQkI,aACTtK,MAAmC,aAA5BkE,KAAK9B,QAAQ8H,WAA4BlK,EAAQA,EAAM,GAC9D+N,QAAS,SAAUC,GACI,UAAf3D,EACAtC,EAAKkG,gBAAgBD,GACC,aAAf3D,GACPtC,EAAKmG,mBAAmBF,MAKpCjG,EAAKqF,QAAQ,KAZjB,IAeJa,gBAAiB,SAAUE,GAMvB,GAJIA,EADAA,IAAYxO,GAAyB,KAAZwO,GAA8B,OAAZA,KAGjCpO,EAAQoO,GAEjBA,EAAQrO,OAEN,CACH,GAAIsO,GAAUlK,KAAKmK,cAAcD,OAC7BA,GAAQtO,QACRoE,KAAKoK,eAAeF,UAJxBD,IAAW,GAOfjK,MAAKkJ,OAAOe,IAEhBD,mBAAoB,SAAUjC,GAAV,GACZmC,GAASG,EAuBAxK,CAjBb,IAJIkI,EADAA,IAActM,GAA2B,OAAdsM,KAGflM,EAAQkM,GAEnBA,EAAUnM,OAER,CAeH,IAdAsO,EAAU1O,EAAE0M,IAAIlI,KAAK4E,mBAAoB,SAAU7E,EAAMf,GACrD,OACIA,MAAOA,EACP/C,SAAU8D,KAGlBsK,EAAQ7O,EAAE0M,IAAIH,EAAW,SAAUhI,EAAMf,GACrC,OACIA,MAAOA,EACP/C,SAAU8D,KAGlBC,KAAK4E,mBAAqBmD,EAC1B/H,KAAK6E,oBACIhF,EAAI,EAAOG,KAAK4E,mBAAmBhJ,OAA5BiE,EAAoCA,IAChDG,KAAK6E,iBAAiBnE,KAAKjF,EAE/BuE,MAAKoK,eAAeF,EAASG,GACzBrK,KAAKmJ,gBACLnJ,KAAKmJ,eAAemB,cArBxBtK,MAAKkJ,QAAQ,MAyBrBqB,cAAe,SAAUvL,GAAV,GACPqG,GAAarF,KAAKqF,WAClBmF,EAAOxK,KAAKyK,UACZC,EAAS1K,KAAK8E,YACdsD,EAAS5M,EAAE6N,WACXsB,KACAC,EAAMtO,KAAKuO,MAAM7L,EAAQwL,GAAQA,EACjCM,EAAOxO,KAAKC,KAAKyC,EAAQwL,GAAQA,EACjCO,EAAQD,IAASF,GAAOE,IACxBF,EACAE,EAuBJ,OArBAtP,GAAEwP,KAAKD,EAAO,SAAUE,EAAGvD,GAAb,GAGNwD,GAFAC,EAAMzD,EAAO8C,EACbY,EAAgBV,EAAOhD,EAEtB0D,IAAiBA,EAAcD,MAAQA,EAUxCD,EAAWE,EAAcF,UATzBA,EAAW1P,EAAE6N,WACbqB,EAAOhD,IACHyD,IAAKA,EACLD,SAAUA,GAEd7F,EAAWgG,kBAAkB3D,EAAM8C,EAAM,WACrCU,EAASZ,aAKjBK,EAAKjK,KAAKwK,KAEd1P,EAAE8P,KAAK3K,MAAMnF,EAAGmP,GAAMY,KAAK,WACvBnD,EAAOkC,YAEJlC,GAEXoD,SAAU,SAAUvB,GAChB,GAAIpG,GAAO7D,KAAMwK,EAAOxK,KAAKyK,UAAWgB,GAAe5H,EAAKmB,cAAcpJ,MAe1E,OAdKiI,GAAKkB,kBACNlB,EAAKkB,gBAAkBvJ,EAAE6N,WACzBxF,EAAKmB,kBAETxJ,EAAEwP,KAAKf,EAAS,SAAUgB,EAAGjM,GACzB6E,EAAKmB,cAActE,KAAKmD,EAAK0G,cAAc1G,EAAK6H,SAAS1M,EAAOwL,OAEhEiB,GACAjQ,EAAE8P,KAAK3K,MAAMnF,EAAGqI,EAAKmB,eAAe6D,KAAK,WACrChF,EAAKkB,gBAAgBuF,UACrBzG,EAAKkB,gBAAkB,KACvBlB,EAAKmB,mBAGNnB,EAAKkB,iBAEhB4G,cAAe,SAAUnE,EAAMxI,GAAhB,GACP8C,GAESjC,CADb,IAA0B,UAAtBG,KAAK9B,QAAQ6H,KACb,IAASlG,EAAI,EAAO2H,EAAK5L,OAATiE,EAAiBA,IAAK,CAElC,GADAiC,EAAQ0F,EAAK3H,GAAGd,QACIC,GAAhB8C,EAAMlG,QAGN,MAAOkG,GAAM9C,EAFbA,IAAgB8C,EAAMlG,OAMlC,MAAO4L,GAAKxI,IAEhB4M,UAAW,SAAUlE,EAAM8C,GACvB,MAAOxK,MAAKqF,WAAWwG,WAAWnE,EAAMpL,KAAKwP,IAAIpE,EAAO8C,EAAMxK,KAAKqF,WAAW0G,WAElFC,gBAAiB,SAAUhN,GAAV,GACTwL,GAAOxK,KAAKyK,UACZ/C,EAAO1H,KAAK0L,SAAS1M,EAAOwL,GAC5BhD,EAAOxH,KAAK4L,UAAUlE,EAAM8C,EAChC,OAAOxK,MAAK2L,cAAcnE,GAAOxI,EAAQ0I,KAE7CuE,kBAAmB,WACf,MAAOjM,MAAK4E,mBAAmBqE,SAEnCiD,WAAY,SAAUpQ,GAClBkE,KAAKmE,QAAQ5F,UAAUyB,KAAKmE,QAAQ5F,YAAczC,IAEtDqQ,SAAU,SAAUlN,GAChBe,KAAKmE,QAAQ5F,UAAUU,IAE3BmN,cAAe,SAAUpN,GACrBgB,KAAKmM,SAASnN,EAAQgB,KAAK9B,QAAQ7B,aAEvCqM,MAAO,SAAU2D,GAAV,GACCzP,GAASoC,EAAOmB,EAAMqB,EAOb+H,EAmCLpM,EA1C2Bd,EAAa2D,KAAK9B,QAAQ7B,WAAYiQ,EAAKtM,KAAKiF,UAAWsH,GAAe,CAC7G,IAAIF,IAAc5Q,EAEd,MADA+F,GAAUxB,KAAKpD,QAAQe,KAAK,IAAM4D,GAC3BC,EAAQ5F,OAAS4F,EAAU,IAEtC,IAAyB,kBAAd6K,GAEP,IADAlM,EAAOH,KAAKqF,WAAWmH,WACdjD,EAAM,EAASpJ,EAAKvE,OAAX2N,EAAmBA,IACjC,GAAI8C,EAAUlM,EAAKoJ,IAAO,CACtB8C,EAAY9C,CACZ,OAcZ,MAVI8C,aAAqBtQ,SACrBsQ,EAAY3Q,EAAS2Q,IAErBI,MAAMJ,IACNzP,EAAUpB,EAAE6Q,GACZrN,EAAQ0N,SAASlR,EAAEoB,GAASuE,KAAK,qBAAsB,MAEvDnC,EAAQqN,EACRzP,EAAUoD,KAAK2M,mBAAmB3N,IAExB,KAAVA,GACAgB,KAAKpD,QAAQe,KAAK,IAAM4D,GAASmD,YAAYnD,GAC7CvB,KAAK4M,cAAgBnR,EACrB,IAEAmB,EAAQhB,QACJgB,EAAQiQ,SAAStL,KACjBgL,GAAe,GAEfvM,KAAK4M,gBAAkBnR,IACvB+F,EAAUxB,KAAK2M,mBAAmB3M,KAAK4M,eACvCpL,EAAQkD,YAAYnD,GAASuL,WAAW,MACpCP,GACAvM,KAAKC,QAAQuD,IAGrBxD,KAAK4M,cAAgB5N,EACrBpC,EAAQsH,SAAS3C,GAASJ,KAAK,KAAMmL,GACjCnP,EAAW6C,KAAK+M,oBAAoB/N,GACvB,QAAb7B,EACA6C,KAAKmM,SAASnN,EAAQ3C,GACF,WAAbc,EACP6C,KAAKmM,SAASnN,EAAQ3C,EAAaA,EAAa2D,KAAKgN,eACjC,cAAb7P,GACP6C,KAAKmM,SAASnN,EAAQ3C,GAEtBkQ,GACAvM,KAAKC,QAAQsD,KAGjBvD,KAAK4M,cAAgB5N,EACrBgB,KAAKjB,QAAQ2F,YAAYnD,GACzBvB,KAAKoM,cAAcpN,IA3BvB,IA8BJiO,WAAY,WACR,MAAOjN,MAAK4M,eAEhBM,WAAY,WACRlN,KAAKmM,SAAS,GACdnM,KAAK0I,MAAM,IAEfyE,UAAW,WACP,GAAIC,GAAYpN,KAAKqF,WAAW0G,OAChC/L,MAAKmM,SAASnM,KAAKqN,gBAAgBC,cACnCtN,KAAK0I,MAAM0E,IAEfG,UAAW,WAAA,GAEH/L,GADAxC,EAAQgB,KAAK4M,aAEjB,QAAKH,MAAMzN,IAAUA,EAAQ,GACzBA,GAAS,EACTgB,KAAK0I,MAAM1J,GACXwC,EAAUxB,KAAK0I,QACXlH,GAAWA,EAAQqL,SAAS,oBAC5B7N,GAAS,EACTgB,KAAK0I,MAAM1J,IAERA,IAEPA,EAAQgB,KAAKqF,WAAW0G,QAAU,EAClC/L,KAAK0I,MAAM1J,GACJA,IAGfwO,UAAW,WAAA,GAGHhM,GAFAxC,EAAQgB,KAAK4M,cACbQ,EAAYpN,KAAKqF,WAAW0G,QAAU,CAE1C,QAAKU,MAAMzN,IAAkBoO,EAARpO,GACjBA,GAAS,EACTgB,KAAK0I,MAAM1J,GACXwC,EAAUxB,KAAK0I,QACXlH,GAAWA,EAAQqL,SAAS,oBAC5B7N,GAAS,EACTgB,KAAK0I,MAAM1J,IAERA,IAEPA,EAAQ,EACRgB,KAAK0I,MAAM1J,GACJA,IAGfoL,eAAgB,SAAUF,EAASG,GAC/BH,EAAUA,MACVG,EAAQA,OACJH,EAAQtO,QAAUyO,EAAMzO,SACxBoE,KAAKC,QAAQmD,GACT8G,QAASA,EACTG,MAAOA,KAInBnB,OAAQ,SAAUmD,GAAV,GACaoB,GAA2IC,EAAmBxC,EAAU9C,EA2BrLS,EA3BAhF,EAAO7D,KAAe2N,EAA8C,aAA5B9J,EAAK3F,QAAQ8H,WAA2B4H,IAAoB/J,EAAKkB,gBAAiBwD,EAAWvI,KAAKwI,aAAmD0B,IACjM,OAAImC,KAAc5Q,EACPoI,EAAKgB,iBAAiBoE,SAEjCwE,EAAU5J,EAAKgK,aAAaxB,GAC5BqB,EAAoBC,IAAoBpF,GAAY7M,EAAS+R,KAAa/R,EAASsE,KAAK6E,kBACxFqF,EAAUrG,EAAKiK,uBAAuBL,GAClCvD,EAAQtO,SAAW6R,EAAQ7R,QAAU8R,GACrC7J,EAAKuG,eAAeF,GAChBrG,EAAKsF,gBACLtF,EAAKsF,eAAemB,UAExB,IAEmB,IAAnBmD,EAAQ7R,QAA+B,KAAf6R,EAAQ,KAChCA,MAEJrF,EAASvE,EAAKsG,UAAUsD,GACxBvD,EAAU9B,EAAO8B,QACjBuD,EAAUrF,EAAOqF,QACbE,IACA9J,EAAKkB,gBAAkB,KACvB6I,GAAkB,EACdH,EAAQ7R,SACR6R,GAAW/R,EAAS+R,MAGxB5E,EAAO,WACP,GAAIwB,GAAQxG,EAAKkK,QAAQN,EACzB5J,GAAK6E,MAAM+E,GACX5J,EAAKuG,eAAeF,EAASG,GACzBxG,EAAKsF,gBACLtF,EAAKsF,eAAemB,WAG5BY,EAAWrH,EAAK2H,SAASiC,GACpBG,IACG1C,EACAA,EAASrC,KAAKA,GAEdA,KA1BR,KA8BJ/E,MAAO,SAAUA,GACb,MAAIA,KAAUrI,EACHuE,KAAKgO,cAEhBhO,KAAKgO,aAAelK,EAApB9D,IAEJoH,KAAM,SAAUzI,GACZqB,KAAKyI,OAAQ,EACb/F,EAAM/D,IAAYqB,MAClBA,KAAKyI,OAAQ,GAEjBnB,YAAa,SAAUC,GACnBvH,KAAKiO,cAAgBzS,EAAEmI,UAAW4D,IAEtCiB,WAAY,WAIR,MAHKxI,MAAKiO,eACNjO,KAAKsH,YAAYtH,KAAKqF,WAAWkC,WAE7B9J,EAAM0C,KAAK+N,MAAMC,eAAenO,KAAKqF,WAAWkC,SAAUvH,KAAKiO,gBAE3EG,WAAY5S,EAAE6S,KACd1B,mBAAoB,SAAU3N,GAC1B,MAAOgB,MAAKjB,QAAQwI,OAAO,SAAUgC,EAAK3M,GACtC,MAAOoC,KAAU0N,SAASlR,EAAEoB,GAASuE,KAAK,qBAAsB,OAGxEmN,sBAAuB,SAAUrS,GAAV,GAC6CW,GAAS+M,EAChE9J,EADL2J,EAAWxJ,KAAKyJ,UAAWC,EAAc1J,KAAKiI,YAClD,KAASpI,EAAI,EAAO2J,EAAS5N,OAAbiE,EAAqBA,IAEjC,GADA8J,EAAQH,EAAS3J,GAAGE,MAAQ/D,EAAYwN,EAAS3J,GAAGE,MAAQyJ,EAAS3J,GAAGE,OAAS9D,EAAWyN,EAAYF,EAAS3J,GAAGE,QAAU2J,EAAYzN,GAC/H,CACPW,EAAU4M,EAAS3J,EACnB,OAGR,MAAOG,MAAK2M,mBAAmB/P,EAAQoC,QAE3CkI,OAAQ,WACJlH,KAAKoI,OAAS3M,EACduE,KAAKuO,eAAiB9S,EACtBuE,KAAK6H,MAAQpM,EACbD,EAAEwE,KAAKqN,iBAAiBzP,SACxBoC,KAAKqN,gBAAkB5R,EACvBuE,KAAKpD,QAAQ4R,SAEjBC,QAAS,WACL,GAAIC,KAAY1O,KAAKqF,WAAWmC,OAAO5L,OAAQiK,EAAS7F,KAAK9B,QAAQ2H,OAAQxJ,EAAa2D,KAAK9B,QAAQ7B,WAAY0P,EAAQ/L,KAAKqF,WAAW0G,OAM3I,OALK2C,GAEM7I,EAASxJ,EAAa0P,IAC7BlG,EAASkG,EAAQ1P,GAFjBwJ,EAAS,EAINA,GAEX8I,gBAAiB,WACb,GAAI9I,GAAS7F,KAAKyO,SAClBzO,MAAKmE,QAAQ0B,OAAOA,GACpB7F,KAAKgN,cAAgBnH,GAEzB1J,aAAc,WACV,MAAO6D,MAAKgN,eAEhBD,oBAAqB,SAAU/N,GAC3B,GAAgO7B,GAA5NoB,EAAYyB,KAAKmE,QAAQ5F,YAAapC,EAAe6D,KAAKgN,cAAe3Q,EAAa2D,KAAK9B,QAAQ7B,WAAYuS,EAAY5P,EAAQ3C,EAAYwS,EAAeD,EAAYvS,EAAYyS,EAAYvQ,EAAYpC,CAUlN,OARIgB,GADAyR,IAAcrQ,EAAYlC,GAAcwS,EAAetQ,GAAyBA,EAAZqQ,EACzD,MACJA,IAAcE,GAAyBA,EAAZF,GAAqCC,EAAZC,EAChD,SACJF,GAAarQ,GAA0BA,GAAapC,EAAeE,IAAzCuS,EACtB,WAEA,aAInBzJ,WAAY,WAAA,GAQC4J,GAPL7Q,EAAU8B,KAAK9B,QACfwB,GACAqB,SAAU7C,EAAQ6C,SAClBC,oBAAqB9C,EAAQ8C,oBAC7Ba,cAAe3D,EAAQ2D,cACvBqE,mBAAoBhI,EAAQgI,mBAEhC,KAAS6I,IAAOrP,GACkB,kBAAnBA,GAAUqP,KACjBrP,EAAUqP,GAAOtR,EAAMsD,SAASrB,EAAUqP,IAAQ,IAG1D/O,MAAKN,UAAYA,GAErBsP,eAAgB,SAAUpS,EAASqS,GAE/B,IADA,GAAgBlP,GAAZhB,KAAkB1C,EAAa2D,KAAK9B,QAAQ7B,WAAa,KACtD4S,KAAU,GACblP,EAAOlD,SAASC,cAAc,MAC9BiD,EAAKmP,SAAW,GAChBnP,EAAKrD,UAAYsG,EAAc,IAAMC,EACrClD,EAAKoP,aAAa,OAAQ,UAC1BpP,EAAKT,MAAMuG,OAASxJ,EACpB0D,EAAKT,MAAM8P,UAAY/S,EACvBO,EAAQJ,YAAYuD,GACpBhB,EAAM2B,KAAKX,EAEf,OAAOhB,IAEXsQ,mBAAoB,WAAA,GAKPxP,GAJL6K,EAAS1K,KAAKqF,WAAWiK,QACzBpE,EAAW1P,EAAE6N,UAGjB,KAFA6B,EAASZ,UACTtK,KAAK8E,eACIjF,EAAI,EAAO6K,EAAO9O,OAAXiE,EAAmBA,IAC/BG,KAAK8E,YAAY4F,EAAO7K,GAAG0P,QACvBpE,IAAKT,EAAO7K,GAAGsL,IACfD,SAAUA,IAItBvC,YAAa,WACT,GAAI9E,GAAO7D,KAAMmE,EAAUN,EAAKM,QAAQqL,IAAI,GAAItR,EAAU2F,EAAK3F,QAASmH,EAAaxB,EAAKwB,UACtFxB,GAAKC,SACLD,EAAKqD,SAETrD,EAAKwL,qBACLxL,EAAK4L,oBACL5L,EAAK8K,kBACL9K,EAAK4G,UAAYvO,EAAa2H,EAAKmJ,cAAe9O,EAAQ9B,YAAa8B,EAAQ7B,YAC3EwH,EAAK4G,UAAYpF,EAAW0G,UAC5BlI,EAAK4G,UAAYpF,EAAW0G,SAEhClI,EAAK6C,OAAS7C,EAAKmL,eAAenL,EAAKjH,QAAQ,GAAIiH,EAAK4G,WACxD5G,EAAK6L,WAAWxR,EAAQ7B,WAAagJ,EAAW0G,SAChDlI,EAAK3F,QAAQ6H,MAAQV,EAAWvD,aAAelG,OAAS,QAAU,OACxC,SAAtBiI,EAAK3F,QAAQ6H,KACblC,EAAKS,OAAOqL,OAEZ9L,EAAKS,OAAOsL,OAEhB/L,EAAKmE,OAASnE,EAAKgM,QAAQ,WACvBhM,EAAK0B,cAAa,KAEtB1B,EAAKiM,UAAY,SAAUvR,EAAWK,GAClC,GAAImR,GAAUlM,EAAKmM,WAAWnM,EAAKmE,OACnC,OAAOnE,GAAKoM,aAAa1R,EAAWwR,EAAQxR,EAAWK,KAE3DiF,EAAK0B,aAAe1B,EAAKqM,aAAaxR,EAAeyF,EAASN,EAAKiM,WAAYjR,EAASgF,EAAKsM,aAAatM,EAAK6C,OAAQlL,EAAEkH,MAAM7B,EAAQgD,MACvIA,EAAK0B,eACL1B,EAAKuM,uBAAuBvM,EAAKmJ,gBAErC0C,WAAY,SAAU7J,GAAV,GACJwK,GASQC,EATOjD,EAAkBrN,KAAKqN,eAM1C,IALKA,EAGDgD,EAAgBhD,EAAgBC,aAFhCD,EAAkBrN,KAAKqN,gBAAkB7Q,EAAYwD,KAAKmE,QAAQ,GAAIjB,GAItE2C,IAAWwK,EAEX,IADAhD,EAAgBkD,UAAY,GACrB1K,EAAS,GACRyK,EAAYhU,KAAKwP,IAAIjG,EAAQ,MACjCrJ,EAAY6Q,GAAiB/N,MAAMuG,OAASyK,EAAY,KACxDzK,GAAUyK,GAItBT,QAAS,WACL,GAAIW,GAAqB,KAAMnL,EAAarF,KAAKqF,WAAYoL,EAAiBpL,EAAWqC,OAAQ3B,EAAO/F,KAAK9B,QAAQ6H,KAAM2K,EAAW1Q,KAAKyK,UAAWkG,IAMtJ,OALItL,GAAWqL,WAAaA,GACxB1Q,KAAKoH,KAAK,WACN/B,EAAWqL,SAASA,KAGrB,SAAU1R,EAAO4R,GAAjB,GA2BKxI,GAGQyI,EACAC,EACKjR,EAAOC,EACRgC,EACKI,EAAO6O,EAjC5BlN,EAAO7D,IACX,IAAKqF,EAAW2L,QAAQJ,EAAYF,GAkB7B,CAQH,GAPID,IAAmBG,GACnB5Q,KAAKoH,KAAK,WACN/B,EAAW7E,MAAMoQ,EAAYF,GAC7BD,EAAiBG,IAIZ,UAAT7K,EAAkB,CAClB,IAAK4K,EAAWC,GAGZ,IAFIC,EAAYF,EAAWC,MACvBE,EAASzL,EAAWmC,OACf3H,EAAI,EAAGC,EAAMgR,EAAOlV,OAAYkE,EAAJD,EAASA,IAE1C,IADIiC,EAAQgP,EAAOjR,GACVqC,EAAI,EAAG6O,EAAcjP,EAAM/C,MAAMnD,OAAYmV,EAAJ7O,EAAiBA,IAC/D2O,EAAUnQ,MACNX,KAAM+B,EAAM/C,MAAMmD,GAClBJ,MAAOA,EAAMhG,OAK7BsM,GAASuI,EAAWC,GAAY5R,EAAQ4R,OAExCxI,GAAS/C,EAAWmC,OAAOxI,EAAQ4R,EAEvC,OAAOxI,GA3BP,MAhBIoI,KAAuBI,IACvBJ,EAAqBI,EACrBH,EAAiBG,EACb/M,EAAKoN,iBACLpN,EAAKoN,gBAAgBC,SAEzBrN,EAAKoN,gBAAkBpN,EAAK0G,cAAcqG,GAC1C/M,EAAKoN,gBAAgB1F,KAAK,WACtB,GAAI4F,GAAiBtN,EAAKuN,iBAAiBvN,EAAKM,QAAQ,GAAG5F,UAC3DsF,GAAKoN,gBAAkB,KACLE,GAAdP,GAAkDA,EAAaF,GAA/BS,IAChCtN,EAAKE,WAAY,EACjBsB,EAAW7E,MAAMoQ,EAAYF,OAIlC,OA+BnBT,aAAc,SAAU1R,EAAWD,GAArB,GAGF+S,GAFJvP,EAAQ9B,KAAKsR,oBAAqBjV,EAAa2D,KAAK9B,QAAQ7B,WAAYkV,EAA4BjV,KAAKuO,OAAOtM,EAAYD,EAAKG,KAAOpC,GAAamV,EAAuBlT,EAAKS,MAAMwS,EAQ3L,OAPIC,IAAwBA,EAAqBzR,OACzCsR,EAAoBG,EAAqB1P,MACzCuP,IAAsBvP,IACtB9B,KAAKsE,OAAO,GAAGiM,UAAYc,GAAqB,GAChDrR,KAAKsR,oBAAsBD,IAG5B/S,GAEXmT,YAAa,SAAU1R,EAAMf,EAAOlD,GAAvB,GAWI+D,GAVT6R,EAAW1R,KAAK9B,QAAQ6H,KAAM1J,EAAa2D,KAAK9B,QAAQ7B,WAAYsV,EAAe3R,KAAK4M,cAAelL,GAAW,EAAOF,GAAU,EAAOG,GAAW,EAAOG,EAAQ,KAAM6H,GAAQ,EAAOD,EAAc1J,KAAKiI,YAShN,IARiB,UAAbyJ,IACI3R,IACA4B,EAAqB,IAAV3C,GAAegB,KAAK4R,eAAiB5R,KAAK4R,gBAAkB7R,EAAK+B,MAC5E9B,KAAK4R,cAAgB7R,EAAK+B,OAE9BA,EAAQ/B,EAAOA,EAAK+B,MAAQ,KAC5B/B,EAAOA,EAAOA,EAAKA,KAAO,OAEzBC,KAAKwI,cAAgB1M,EAAMF,QAAUmE,EACtC,IAASF,EAAI,EAAO/D,EAAMF,OAAViE,EAAkBA,IAE9B,GADA8J,EAAQ3N,EAAY+D,GAAQjE,EAAM+D,KAAOE,EAAOjE,EAAM+D,KAAO6J,EAAY3J,GAC9D,CACPjE,EAAM2E,OAAOZ,EAAG,GAChB6B,GAAW,CACX,OAOZ,MAHIiQ,KAAiB3S,IACjBwC,GAAU,IAGVzB,KAAMA,EAAOA,EAAO,KACpB+B,MAAOA,EACPH,SAAUA,EACVD,SAAUA,EACVF,QAASA,EACTxC,MAAOA,EACPP,IAAKO,EAAQ3C,IAGrBwV,OAAQ,SAAU7S,GAAV,GACsEe,GAGjEF,EAAWjE,EAHhB6O,EAAYzK,KAAKyK,UAAW3O,EAAQkE,KAAK2E,QAAQsE,QAASlK,IAG9D,KAFAiB,KAAK8R,SACL9R,KAAK4R,cAAgB,KACZ/R,EAAIb,EAAOpD,EAASoD,EAAQyL,EAAe7O,EAAJiE,EAAYA,IACxDE,EAAOC,KAAKyR,YAAYzR,KAAKgI,OAAOnI,EAAGb,GAAQa,EAAG/D,GAClDiD,EAAM2B,KAAKX,GACXC,KAAK8R,MAAM/R,EAAKf,OAASe,CAG7B,OADAC,MAAKyJ,UAAY1K,EACVA,GAEXgT,wBAAyB,SAAUxT,EAAWC,GAC1C,GAAIO,GAAQiB,KAAK6R,OAAO7R,KAAKgS,WAAWzT,EAAWC,GACnD,QACIQ,MAAOD,EAAMnD,OAASmD,EAAM,GAAGC,MAAQ,EACvCP,IAAKM,EAAMnD,OAASmD,EAAM,GAAGN,IAAM,EACnCM,MAAOA,IAGfiR,WAAY,WAAA,GACJ7T,GAAe6D,KAAKgN,cAAe9O,EAAU8B,KAAK9B,QAClD+T,EAAehU,EAAcC,EAAS/B,EAC1C,OAAOX,GAAEkH,MAAM,SAAU5G,EAAO8C,GAC5B,GAAIwJ,GAASpI,KAAKoI,OAAQ5J,EAAgBwB,KAAKuO,cAM/C,QALI3P,GAAUwJ,GAAW6J,EAAa7J,EAAQtM,EAAO0C,KACjD4J,EAASpI,KAAK+R,wBAAwBjW,EAAO0C,IAEjDwB,KAAKuO,eAAiBzS,EACtBkE,KAAKoI,OAASA,EACPA,GACRpI,OAEPkQ,aAAc,SAAUlI,EAAQrJ,GAC5B,GAAI6C,EACJ,OAAO,UAAU5C,GACb,GAAIsT,GAASlK,EAAOpJ,EAChBsT,KAAW1Q,IACXA,EAAU0Q,EACVvT,EAASuT,EAAQtT,MAI7BuR,aAAc,SAAU7R,EAAMQ,GAAhB,GACN+E,GAAO7D,KACPpE,EAAS0C,EAAK1C,OACduW,IAAiBC,EAAAA,EAErB,OADAtT,GAAUtD,EAAEkH,MAAMjD,EAAKX,EAASkB,KAAKN,WAAYM,MAC1C,SAAUqS,EAAOC,EAAQ1T,GAAzB,GAEC4B,GAAO+R,EADPhS,EAAO+R,EAASH,CAEhBvT,IAAStC,KAAKkW,IAAIjS,IAAS3E,GAC3B4E,EAAQlC,EACRiU,EAASF,IAET7R,EAAQF,EAAQhC,EAAMiC,GACtBgS,EAAShS,EAAO,EAAI8R,EAAMpJ,OAAO1I,GAAQ8R,EAAMpJ,MAAM,GAAI1I,IAE7DzB,EAAQ0B,EAAO+R,EAAQ1O,EAAKC,SAC5BqO,EAAgBG,IAGxBG,aAAc,WACV,GAAIvU,GAAU8B,KAAK9B,OACnB,OAAOL,GAAYmC,KAAKgN,cAAe9O,EAAQ9B,YAAa8B,EAAQ4H,iBAExEsL,iBAAkB,SAAUjU,GACxB,GAAIsN,GAAYzK,KAAKyK,UAAWpO,EAAa2D,KAAK9B,QAAQ7B,WAAY0P,EAAQ/L,KAAKqF,WAAW0G,OAC9F,OAAOzP,MAAKwP,IAAIxP,KAAKoW,IAAI3G,EAAQtB,EAAW,GAAInO,KAAKoW,IAAI,EAAGpW,KAAKuO,MAAM1N,EAAWd,MAEtF2V,WAAY,SAAUzT,EAAWC,GAC7B,GAAmCrB,GAA/BwV,EAAU3S,KAAKyS,cAEnB,OADAtV,GAAWoB,GAAaA,EAAYC,EAAgBmU,EAAQ5U,KAAO4U,EAAQ3U,IACpEgC,KAAKoR,iBAAiBjU,IAEjCuI,YAAa,WACL1F,KAAK9B,QAAQ8H,aACbhG,KAAKuG,aAAe/K,EAAEkH,MAAM1C,KAAM,iBAClCA,KAAKpD,QAAQ6H,GAAGpB,EAAQI,EAAiB,IAAMT,EAAahD,KAAKuG,gBAGzEqM,gBAAiB,SAAUhW,GACvB,MAAMA,aAAmBiW,QAGlBnG,SAAS9P,EAAQuE,KAAK,qBAAsB,IAFxC1F,GAIfoS,aAAc,SAAUxB,GAAV,GACOlM,GAGJoJ,EAUTuJ,EAbA1K,IACJ,IAAyB,kBAAdiE,GAEP,IADAlM,EAAOH,KAAKqF,WAAWmH,WACdjD,EAAM,EAASpJ,EAAKvE,OAAX2N,EAAmBA,IACjC,GAAI8C,EAAUlM,EAAKoJ,IAAO,CACtBnB,EAAO1H,KAAK6I,EACZ,OAcZ,MAVyB,gBAAd8C,IACPjE,EAAO1H,KAAK2L,GAEZyG,EAAe9S,KAAK4S,gBAAgBvG,GACnCI,MAAMqG,IACP1K,EAAO1H,KAAKoS,GAEZzG,YAAqBtQ,SACrBqM,EAASiE,GAENjE,GAEX+B,UAAW,SAAUsD,GAAV,GACWsF,GAAe9W,EAAgN8D,EAAM4J,EAG1OJ,EAgBA1J,EAKQqC,EAxBjBgI,KAAuC8I,EAAkBhT,KAAK6E,iBAAkBoH,EAAoBjM,KAAK4E,mBAAoBzH,EAAW,EAAG6I,EAAahG,KAAK9B,QAAQ8H,WAAYiN,EAAwB,EAAGvJ,EAAc1J,KAAKiI,aAA2BG,EAAS,IAEvQ,IADAqF,EAAUA,EAAQxE,QACdjD,KAAe,GAASyH,EAAQ7R,QAgB7B,GAAmB,aAAfoK,EACP,IAASnG,EAAI,EAAO4N,EAAQ7R,OAAZiE,EAAoBA,IAAK,CAIrC,GAHAuI,EAAS,KACTjL,EAAW3B,EAAE0X,QAAQzF,EAAQ5N,GAAImT,GACjC/W,EAAW+D,KAAKgM,gBAAgByB,EAAQ5N,IACvB,KAAb1C,GAAmBlB,EACnB,IAASiG,EAAI,EAAO+J,EAAkBrQ,OAAtBsG,EAA8BA,IAC1CyH,EAAQ3N,EAAYC,GAAYgQ,EAAkB/J,KAAOjG,EAAWyN,EAAYuC,EAAkB/J,MAAQwH,EAAYzN,GAClH0N,IACA5J,EAAOC,KAAK2M,mBAAmBc,EAAQ5N,IACvCuI,EAASpI,KAAKmT,oBAAoBpT,EAAMmC,EAAGuL,EAAQ5N,GAAIoT,QAI/DF,GAAgBC,EAAgB7V,GAC5B4V,IAAkBtX,IAClBsE,EAAOC,KAAK2M,mBAAmBoG,GAC/B3K,EAASpI,KAAKmT,oBAAoBpT,EAAM5C,EAAU4V,EAAeE,GAGrE7K,KACAqF,EAAQhN,OAAOZ,EAAG,GAClBqK,EAAQxJ,KAAK0H,GACb6K,IACApT,UAxCgC,CACxC,IAAS0J,EAAM,EAASyJ,EAAgBpX,OAAtB2N,EAA8BA,IACxCyJ,EAAgBzJ,KAAS9N,EACzBuE,KAAK2M,mBAAmBqG,EAAgBzJ,IAAM7E,YAAYjD,GACnDwK,EAAkB1C,IACzBvJ,KAAKsO,sBAAsBrC,EAAkB1C,IAAM7E,YAAYjD,GAEnEyI,EAAQxJ,MACJ1B,MAAOgU,EAAgBzJ,GACvBpM,SAAUoM,EACVtN,SAAUgQ,EAAkB1C,IAGpCvJ,MAAK2E,WACL3E,KAAK4E,sBACL5E,KAAK6E,oBA6BT,OACI4I,QAASA,EACTvD,QAASA,IAGjBiJ,oBAAqB,SAAUpT,EAAM5C,EAAU4V,EAAeE,GAC1D,GAAIhX,EACJ,IAAK8D,EAAK8M,SAAS,oBAOnB,MAJA9M,GAAK2E,YAAYjD,GACjBzB,KAAK2E,QAAQlE,OAAOtD,EAAU,GAC9B6C,KAAK6E,iBAAiBpE,OAAOtD,EAAU,GACvClB,EAAW+D,KAAK4E,mBAAmBnE,OAAOtD,EAAU,GAAG,IAEnD6B,MAAO+T,EACP5V,SAAUA,EAAW8V,EACrBhX,SAAUA,IAGlB6R,uBAAwB,SAAUL,GAAV,GAEhB3R,GAAOkD,EAAO7B,EAId+E,EALAkR,EAAWpT,KAAKpD,QAAQ,GAAGwW,SAE3BC,EAASrT,KAAK2E,QACduF,KACAX,EAAM,CAEV,IAAgC,aAA5BvJ,KAAK9B,QAAQ8H,aAA8BhG,KAAKwI,aAChD,QAEJ,IAAmB,KAAfiF,EAAQ,GAWR,MAVAjS,GAAE4X,GAAU1O,YAAY,oBACxBwF,EAAU1O,EAAE0M,IAAIlI,KAAK4E,mBAAmBqE,MAAM,GAAI,SAAUhN,EAAUsN,GAClE,OACItN,SAAUA,EACVkB,SAAUoM,KAGlBvJ,KAAK6E,oBACL7E,KAAK4E,sBACL5E,KAAK2E,WACEuF,CAEX,MAAauD,EAAQ7R,OAAd2N,EAAsBA,IAAO,CAIhC,IAHApM,EAAW,GACX6B,EAAQyO,EAAQlE,GAChBzN,EAAQkE,KAAKiI,aAAajI,KAAKgM,gBAAgBhN,IAC1CkD,EAAI,EAAOmR,EAAOzX,OAAXsG,EAAmBA,IAC3B,GAAIpG,GAASuX,EAAOnR,GAAI,CACpB/E,EAAW+E,CACX,OAGJ/E,EAAW,KACX+M,EAAQxJ,KAAKV,KAAK8I,SAAS3L,IAC3B3B,EAAE4X,EAASpU,IAAQ0F,YAAY,qBAGvC,MAAOwF,IAEXwB,SAAU,SAAU1M,EAAOwL,GACvB,GAAI8I,GAAe9I,EAARxL,EAAe,EAAI1C,KAAKuO,MAAM7L,EAAQwL,GAAQ,CACzD,QAAQ8I,EAAO,GAAK9I,GAExBuD,QAAS,SAAU9D,GACf,GAAyGhO,GAAUsX,EAA/G1P,EAAO7D,KAAM2N,EAA8C,aAA5B3N,KAAK9B,QAAQ8H,WAA2BX,EAAarF,KAAKqF,WAA+BmF,EAAOxK,KAAKyK,UAAWf,EAAc1J,KAAKiI,aAAcoC,IAuBpL,OAtBIsD,KACA9J,EAAKgB,oBACLhB,EAAKe,sBACLf,EAAKc,YAET4O,EAAUlO,EAAWqC,OACrBlM,EAAEwP,KAAKf,EAAS,SAAUgB,EAAGjM,GACzB,GAAI0I,GAAO7D,EAAK6H,SAAS1M,EAAOwL,EAChC3G,GAAKuD,KAAK,WACN/B,EAAW7E,MAAMkH,EAAM8C,GACvBvO,EAAW4H,EAAK8H,cAActG,EAAWmC,QAASxI,EAAQ0I,IAC1D7D,EAAKgB,iBAAiBnE,KAAK1B,GAC3B6E,EAAKe,mBAAmBlE,KAAKzE,GAC7B4H,EAAKc,QAAQjE,KAAK1E,EAAYC,GAAYA,EAAWyN,EAAYzN,IACjEoO,EAAM3J,MACF1B,MAAOA,EACP/C,SAAUA,IAEd4H,EAAK8I,mBAAmB3N,GAAOkF,SAASzC,GACxC4D,EAAW7E,MAAM+S,EAAS/I,OAG3BH,GAEXmJ,cAAe,SAAUrL,GACrB,GAAIpI,GAAOvE,EAAE2M,EAAEsL,gBACVtL,EAAEuL,sBAAwB3T,EAAKoB,KAAK,aACrCnB,KAAKC,QAAQoD,GAAStD,KAAMA,KAGpC0P,kBAAmB,WACfzP,KAAKiI,aAAexK,EAAMuK,OAAOhI,KAAK9B,QAAQ+H,iBAElDmK,uBAAwB,SAAUvK,GAC9B,GAAI8N,GAAY3T,KAAKjB,QAAQ6U,QAASC,EAAc7T,KAAKsE,OAAQwP,EAAU,CACvED,GAAY,IAAuC,SAAjCA,EAAY,GAAGvU,MAAMyU,UACxB,SAAXlO,IACAiO,EAAUrW,EAAMyB,QAAQ8U,aAE5BF,GAAWtW,WAAWmW,EAAUzW,IAAI,sBAAuB,IAAMM,WAAWmW,EAAUP,SAAS,YAAYlW,IAAI,SAAU,IACzH2W,EAAY3W,IAAI,gBAAiB4W,MAI7CrW,GAAM4C,GAAGqD,YAAcA,EACvBjG,EAAM4C,GAAG4T,OAAOvQ,IAClBnB,OAAO9E,MAAMoV,QACRtQ,OAAO9E,OACE,kBAAVlC,SAAwBA,OAAO2Y,IAAM3Y,OAAS,SAAU4Y,EAAIC,EAAIC,IACrEA,GAAMD","file":"kendo.virtuallist.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.virtuallist', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'virtuallist',\n name: 'VirtualList',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, proxy = $.proxy, WRAPPER = 'k-virtual-wrap', VIRTUALLIST = 'k-virtual-list', CONTENT = 'k-virtual-content', LIST = 'k-list', HEADER = 'k-group-header', VIRTUALITEM = 'k-virtual-item', ITEM = 'k-item', HEIGHTCONTAINER = 'k-height-container', GROUPITEM = 'k-group', SELECTED = 'k-state-selected', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', CHANGE = 'change', CLICK = 'click', LISTBOUND = 'listBound', ITEMCHANGE = 'itemChange', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', VIRTUAL_LIST_NS = '.VirtualList';\n function lastFrom(array) {\n return array[array.length - 1];\n }\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n function isPrimitive(dataItem) {\n return typeof dataItem === 'string' || typeof dataItem === 'number' || typeof dataItem === 'boolean';\n }\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || 'div');\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n return element;\n }\n function getDefaultItemHeight() {\n var mockList = $('
'), lineHeight;\n mockList.css({\n position: 'absolute',\n left: '-200000px',\n visibility: 'hidden'\n });\n mockList.appendTo(document.body);\n lineHeight = parseFloat(kendo.getComputedStyles(mockList.find('.k-item')[0], ['line-height'])['line-height']);\n mockList.remove();\n return lineHeight;\n }\n function bufferSizes(screenHeight, listScreens, opposite) {\n return {\n down: screenHeight * opposite,\n up: screenHeight * (listScreens - 1 - opposite)\n };\n }\n function listValidator(options, screenHeight) {\n var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n var upThreshold = options.threshold * screenHeight;\n return function (list, scrollTop, lastScrollTop) {\n if (scrollTop > lastScrollTop) {\n return scrollTop - list.top < downThreshold;\n } else {\n return list.top === 0 || scrollTop - list.top > upThreshold;\n }\n };\n }\n function scrollCallback(element, callback) {\n return function (force) {\n return callback(element.scrollTop, force);\n };\n }\n function syncList(reorder) {\n return function (list, force) {\n reorder(list.items, list.index, force);\n return list;\n };\n }\n function position(element, y) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n element.style.top = y + 'px';\n } else {\n element.style.webkitTransform = 'translateY(' + y + 'px)';\n element.style.transform = 'translateY(' + y + 'px)';\n }\n }\n function map2(callback, templates) {\n return function (arr1, arr2) {\n for (var i = 0, len = arr1.length; i < len; i++) {\n callback(arr1[i], arr2[i], templates);\n if (arr2[i].item) {\n this.trigger(ITEMCHANGE, {\n item: $(arr1[i]),\n data: arr2[i].item,\n ns: kendo.ui\n });\n }\n }\n };\n }\n function reshift(items, diff) {\n var range;\n if (diff > 0) {\n range = items.splice(0, diff);\n items.push.apply(items, range);\n } else {\n range = items.splice(diff, -diff);\n items.unshift.apply(items, range);\n }\n return range;\n }\n function render(element, data, templates) {\n var itemTemplate = templates.template;\n element = $(element);\n if (!data.item) {\n itemTemplate = templates.placeholderTemplate;\n }\n this.angular('cleanup', function () {\n return { elements: [element] };\n });\n element.attr('data-uid', data.item ? data.item.uid : '').attr('data-offset-index', data.index).html(itemTemplate(data.item || {}));\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass('k-first', data.newGroup);\n element.toggleClass('k-loading-item', !data.item);\n if (data.index !== 0 && data.newGroup) {\n $('
').appendTo(element).html(templates.groupTemplate(data.group));\n }\n if (data.top !== undefined) {\n position(element[0], data.top);\n }\n this.angular('compile', function () {\n return {\n elements: [element],\n data: [{\n dataItem: data.item,\n group: data.group,\n newGroup: data.newGroup\n }]\n };\n });\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 var VirtualList = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n that.bound(false);\n that._fetching = false;\n Widget.fn.init.call(that, element, options);\n if (!that.options.itemHeight) {\n that.options.itemHeight = getDefaultItemHeight();\n }\n options = that.options;\n that.element.addClass(LIST + ' ' + VIRTUALLIST).attr('role', 'listbox');\n that.content = that.element.wrap('
').parent();\n that.wrapper = that.content.wrap('
').parent();\n that.header = that.content.before('
').prev();\n that.element.on('mouseenter' + VIRTUAL_LIST_NS, 'li:not(.k-loading-item)', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + VIRTUAL_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n that._values = toArray(that.options.value);\n that._selectedDataItems = [];\n that._selectedIndexes = [];\n that._rangesList = {};\n that._activeDeferred = null;\n that._promisesList = [];\n that._optionID = kendo.guid();\n that._templates();\n that.setDataSource(options.dataSource);\n that.content.on('scroll' + VIRTUAL_LIST_NS, kendo.throttle(function () {\n that._renderItems();\n that._triggerListBound();\n }, options.delay));\n that._selectable();\n },\n options: {\n name: 'VirtualList',\n autoBind: true,\n delay: 100,\n height: null,\n listScreens: 4,\n threshold: 0.5,\n itemHeight: null,\n oppositeBuffer: 1,\n type: 'flat',\n selectable: false,\n value: [],\n dataValueField: null,\n template: '#:data#',\n placeholderTemplate: 'loading...',\n groupTemplate: '#:data#',\n fixedGroupTemplate: 'fixed header template',\n mapValueTo: 'index',\n valueMapper: null\n },\n events: [\n CHANGE,\n CLICK,\n LISTBOUND,\n ITEMCHANGE,\n ACTIVATE,\n DEACTIVATE\n ],\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (this._selectProxy && this.options.selectable === false) {\n this.element.off(CLICK, '.' + VIRTUALITEM, this._selectProxy);\n } else if (!this._selectProxy && this.options.selectable) {\n this._selectable();\n }\n this._templates();\n this.refresh();\n },\n items: function () {\n return $(this._items);\n },\n destroy: function () {\n this.wrapper.off(VIRTUAL_LIST_NS);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n Widget.fn.destroy.call(this);\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 that._clean();\n that.bound(false);\n that._deferValueSet = true;\n value = that.value();\n that.value([]);\n that.mute(function () {\n that.value(value);\n });\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that.setDSFilter(dataSource.filter());\n if (dataSource.view().length !== 0) {\n that.refresh();\n } else if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n skip: function () {\n return this.dataSource.currentRangeStart();\n },\n _triggerListBound: function () {\n var that = this;\n var skip = that.skip();\n if (that.bound() && !that._selectingValue && that._skip !== skip) {\n that._skip = skip;\n that.trigger(LISTBOUND);\n }\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var isItemChange = action === 'itemchange';\n var filtered = this.isFiltered();\n var result;\n if (that._mute) {\n return;\n }\n that._deferValueSet = false;\n if (!that._fetching) {\n if (filtered) {\n that.focus(0);\n }\n that._createList();\n if (!action && that._values.length && !filtered && !that.options.skipUpdateOnBind) {\n that._selectingValue = true;\n that.value(that._values, true).done(function () {\n that.bound(true);\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\n that._triggerListBound();\n }\n } else {\n if (that._renderItems) {\n that._renderItems(true);\n }\n that._triggerListBound();\n }\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._selectedDataItems, 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 }\n that._fetching = false;\n },\n removeAt: function (position) {\n this._selectedIndexes.splice(position, 1);\n this._values.splice(position, 1);\n return {\n position: position,\n dataItem: this._selectedDataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n this._values = toArray(value);\n },\n value: function (value, _forcePrefetch) {\n var that = this;\n if (value === undefined) {\n return that._values.slice();\n }\n if (value === null) {\n value = [];\n }\n value = toArray(value);\n if (that.options.selectable === 'multiple' && that.select().length && value.length) {\n that.select(-1);\n }\n if (!that._valueDeferred || that._valueDeferred.state() === 'resolved') {\n that._valueDeferred = $.Deferred();\n }\n if (!value.length) {\n that.select(-1);\n }\n that._values = value;\n if (that.bound() && !that._mute && !that._deferValueSet || _forcePrefetch) {\n that._prefetchByValue(value);\n }\n return that._valueDeferred;\n },\n _prefetchByValue: function (value) {\n var that = this, dataView = that._dataView, valueGetter = that._valueGetter, mapValueTo = that.options.mapValueTo, item, match = false, forSelection = [];\n for (var i = 0; i < value.length; i++) {\n for (var idx = 0; idx < dataView.length; idx++) {\n item = dataView[idx].item;\n if (item) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n forSelection.push(dataView[idx].index);\n }\n }\n }\n }\n if (forSelection.length === value.length) {\n that._values = [];\n that.select(forSelection);\n return;\n }\n if (typeof that.options.valueMapper === 'function') {\n that.options.valueMapper({\n value: this.options.selectable === 'multiple' ? value : value[0],\n success: function (response) {\n if (mapValueTo === 'index') {\n that.mapValueToIndex(response);\n } else if (mapValueTo === 'dataItem') {\n that.mapValueToDataItem(response);\n }\n }\n });\n } else {\n that.select([-1]);\n }\n },\n mapValueToIndex: function (indexes) {\n if (indexes === undefined || indexes === -1 || indexes === null) {\n indexes = [];\n } else {\n indexes = toArray(indexes);\n }\n if (!indexes.length) {\n indexes = [-1];\n } else {\n var removed = this._deselect([]).removed;\n if (removed.length) {\n this._triggerChange(removed, []);\n }\n }\n this.select(indexes);\n },\n mapValueToDataItem: function (dataItems) {\n var removed, added;\n if (dataItems === undefined || dataItems === null) {\n dataItems = [];\n } else {\n dataItems = toArray(dataItems);\n }\n if (!dataItems.length) {\n this.select([-1]);\n } else {\n removed = $.map(this._selectedDataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n added = $.map(dataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n this._selectedDataItems = dataItems;\n this._selectedIndexes = [];\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n this._selectedIndexes.push(undefined);\n }\n this._triggerChange(removed, added);\n if (this._valueDeferred) {\n this._valueDeferred.resolve();\n }\n }\n },\n deferredRange: function (index) {\n var dataSource = this.dataSource;\n var take = this.itemCount;\n var ranges = this._rangesList;\n var result = $.Deferred();\n var defs = [];\n var low = Math.floor(index / take) * take;\n var high = Math.ceil(index / take) * take;\n var pages = high === low ? [high] : [\n low,\n high\n ];\n $.each(pages, function (_, skip) {\n var end = skip + take;\n var existingRange = ranges[skip];\n var deferred;\n if (!existingRange || existingRange.end !== end) {\n deferred = $.Deferred();\n ranges[skip] = {\n end: end,\n deferred: deferred\n };\n dataSource._multiplePrefetch(skip, take, function () {\n deferred.resolve();\n });\n } else {\n deferred = existingRange.deferred;\n }\n defs.push(deferred);\n });\n $.when.apply($, defs).then(function () {\n result.resolve();\n });\n return result;\n },\n prefetch: function (indexes) {\n var that = this, take = this.itemCount, isEmptyList = !that._promisesList.length;\n if (!that._activeDeferred) {\n that._activeDeferred = $.Deferred();\n that._promisesList = [];\n }\n $.each(indexes, function (_, index) {\n that._promisesList.push(that.deferredRange(that._getSkip(index, take)));\n });\n if (isEmptyList) {\n $.when.apply($, that._promisesList).done(function () {\n that._activeDeferred.resolve();\n that._activeDeferred = null;\n that._promisesList = [];\n });\n }\n return that._activeDeferred;\n },\n _findDataItem: function (view, index) {\n var group;\n if (this.options.type === 'group') {\n for (var i = 0; i < view.length; i++) {\n group = view[i].items;\n if (group.length <= index) {\n index = index - group.length;\n } else {\n return group[index];\n }\n }\n }\n return view[index];\n },\n _getRange: function (skip, take) {\n return this.dataSource._findRange(skip, Math.min(skip + take, this.dataSource.total()));\n },\n dataItemByIndex: function (index) {\n var take = this.itemCount;\n var skip = this._getSkip(index, take);\n var view = this._getRange(skip, take);\n return this._findDataItem(view, [index - skip]);\n },\n selectedDataItems: function () {\n return this._selectedDataItems.slice();\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scrollTo: function (y) {\n this.content.scrollTop(y);\n },\n scrollToIndex: function (index) {\n this.scrollTo(index * this.options.itemHeight);\n },\n focus: function (candidate) {\n var element, index, data, current, itemHeight = this.options.itemHeight, id = this._optionID, triggerEvent = true;\n if (candidate === undefined) {\n current = this.element.find('.' + FOCUSED);\n return current.length ? current : null;\n }\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n break;\n }\n }\n }\n if (candidate instanceof Array) {\n candidate = lastFrom(candidate);\n }\n if (isNaN(candidate)) {\n element = $(candidate);\n index = parseInt($(element).attr('data-offset-index'), 10);\n } else {\n index = candidate;\n element = this._getElementByIndex(index);\n }\n if (index === -1) {\n this.element.find('.' + FOCUSED).removeClass(FOCUSED);\n this._focusedIndex = undefined;\n return;\n }\n if (element.length) {\n if (element.hasClass(FOCUSED)) {\n triggerEvent = false;\n }\n if (this._focusedIndex !== undefined) {\n current = this._getElementByIndex(this._focusedIndex);\n current.removeClass(FOCUSED).removeAttr('id');\n if (triggerEvent) {\n this.trigger(DEACTIVATE);\n }\n }\n this._focusedIndex = index;\n element.addClass(FOCUSED).attr('id', id);\n var position = this._getElementLocation(index);\n if (position === 'top') {\n this.scrollTo(index * itemHeight);\n } else if (position === 'bottom') {\n this.scrollTo(index * itemHeight + itemHeight - this._screenHeight);\n } else if (position === 'outScreen') {\n this.scrollTo(index * itemHeight);\n }\n if (triggerEvent) {\n this.trigger(ACTIVATE);\n }\n } else {\n this._focusedIndex = index;\n this.items().removeClass(FOCUSED);\n this.scrollToIndex(index);\n }\n },\n focusIndex: function () {\n return this._focusedIndex;\n },\n focusFirst: function () {\n this.scrollTo(0);\n this.focus(0);\n },\n focusLast: function () {\n var lastIndex = this.dataSource.total();\n this.scrollTo(this.heightContainer.offsetHeight);\n this.focus(lastIndex);\n },\n focusPrev: function () {\n var index = this._focusedIndex;\n var current;\n if (!isNaN(index) && index > 0) {\n index -= 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index += 1;\n this.focus(index);\n }\n return index;\n } else {\n index = this.dataSource.total() - 1;\n this.focus(index);\n return index;\n }\n },\n focusNext: function () {\n var index = this._focusedIndex;\n var lastIndex = this.dataSource.total() - 1;\n var current;\n if (!isNaN(index) && index < lastIndex) {\n index += 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index -= 1;\n this.focus(index);\n }\n return index;\n } else {\n index = 0;\n this.focus(index);\n return index;\n }\n },\n _triggerChange: function (removed, added) {\n removed = removed || [];\n added = added || [];\n if (removed.length || added.length) {\n this.trigger(CHANGE, {\n removed: removed,\n added: added\n });\n }\n },\n select: function (candidate) {\n var that = this, indices, singleSelection = that.options.selectable !== 'multiple', prefetchStarted = !!that._activeDeferred, filtered = this.isFiltered(), isAlreadySelected, deferred, result, removed = [];\n if (candidate === undefined) {\n return that._selectedIndexes.slice();\n }\n indices = that._getIndecies(candidate);\n isAlreadySelected = singleSelection && !filtered && lastFrom(indices) === lastFrom(this._selectedIndexes);\n removed = that._deselectCurrentValues(indices);\n if (removed.length || !indices.length || isAlreadySelected) {\n that._triggerChange(removed);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n return;\n }\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (singleSelection) {\n that._activeDeferred = null;\n prefetchStarted = false;\n if (indices.length) {\n indices = [lastFrom(indices)];\n }\n }\n var done = function () {\n var added = that._select(indices);\n that.focus(indices);\n that._triggerChange(removed, added);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n };\n deferred = that.prefetch(indices);\n if (!prefetchStarted) {\n if (deferred) {\n deferred.done(done);\n } else {\n done();\n }\n }\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._listCreated;\n }\n this._listCreated = bound;\n },\n mute: function (callback) {\n this._mute = true;\n proxy(callback(), this);\n this._mute = false;\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 skipUpdate: $.noop,\n _getElementByIndex: function (index) {\n return this.items().filter(function (idx, element) {\n return index === parseInt($(element).attr('data-offset-index'), 10);\n });\n },\n _getElementByDataItem: function (dataItem) {\n var dataView = this._dataView, valueGetter = this._valueGetter, element, match;\n for (var i = 0; i < dataView.length; i++) {\n match = dataView[i].item && isPrimitive(dataView[i].item) ? dataView[i].item === dataItem : valueGetter(dataView[i].item) === valueGetter(dataItem);\n if (match) {\n element = dataView[i];\n break;\n }\n }\n return this._getElementByIndex(element.index);\n },\n _clean: function () {\n this.result = undefined;\n this._lastScrollTop = undefined;\n this._skip = undefined;\n $(this.heightContainer).remove();\n this.heightContainer = undefined;\n this.element.empty();\n },\n _height: function () {\n var hasData = !!this.dataSource.view().length, height = this.options.height, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n if (!hasData) {\n height = 0;\n } else if (height / itemHeight > total) {\n height = total * itemHeight;\n }\n return height;\n },\n setScreenHeight: function () {\n var height = this._height();\n this.content.height(height);\n this._screenHeight = height;\n },\n screenHeight: function () {\n return this._screenHeight;\n },\n _getElementLocation: function (index) {\n var scrollTop = this.content.scrollTop(), screenHeight = this._screenHeight, itemHeight = this.options.itemHeight, yPosition = index * itemHeight, yDownPostion = yPosition + itemHeight, screenEnd = scrollTop + screenHeight, position;\n if (yPosition === scrollTop - itemHeight || yDownPostion > scrollTop && yPosition < scrollTop) {\n position = 'top';\n } else if (yPosition === screenEnd || yPosition < screenEnd && screenEnd < yDownPostion) {\n position = 'bottom';\n } else if (yPosition >= scrollTop && yPosition <= scrollTop + (screenHeight - itemHeight)) {\n position = 'inScreen';\n } else {\n position = 'outScreen';\n }\n return position;\n },\n _templates: function () {\n var options = this.options;\n var templates = {\n template: options.template,\n placeholderTemplate: options.placeholderTemplate,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n for (var key in templates) {\n if (typeof templates[key] !== 'function') {\n templates[key] = kendo.template(templates[key] || '');\n }\n }\n this.templates = templates;\n },\n _generateItems: function (element, count) {\n var items = [], item, itemHeight = this.options.itemHeight + 'px';\n while (count-- > 0) {\n item = document.createElement('li');\n item.tabIndex = -1;\n item.className = VIRTUALITEM + ' ' + ITEM;\n item.setAttribute('role', 'option');\n item.style.height = itemHeight;\n item.style.minHeight = itemHeight;\n element.appendChild(item);\n items.push(item);\n }\n return items;\n },\n _saveInitialRanges: function () {\n var ranges = this.dataSource._ranges;\n var deferred = $.Deferred();\n deferred.resolve();\n this._rangesList = {};\n for (var i = 0; i < ranges.length; i++) {\n this._rangesList[ranges[i].start] = {\n end: ranges[i].end,\n deferred: deferred\n };\n }\n },\n _createList: function () {\n var that = this, content = that.content.get(0), options = that.options, dataSource = that.dataSource;\n if (that.bound()) {\n that._clean();\n }\n that._saveInitialRanges();\n that._buildValueGetter();\n that.setScreenHeight();\n that.itemCount = getItemCount(that._screenHeight, options.listScreens, options.itemHeight);\n if (that.itemCount > dataSource.total()) {\n that.itemCount = dataSource.total();\n }\n that._items = that._generateItems(that.element[0], that.itemCount);\n that._setHeight(options.itemHeight * dataSource.total());\n that.options.type = (dataSource.group() || []).length ? 'group' : 'flat';\n if (that.options.type === 'flat') {\n that.header.hide();\n } else {\n that.header.show();\n }\n that.getter = that._getter(function () {\n that._renderItems(true);\n });\n that._onScroll = function (scrollTop, force) {\n var getList = that._listItems(that.getter);\n return that._fixedHeader(scrollTop, getList(scrollTop, force));\n };\n that._renderItems = that._whenChanged(scrollCallback(content, that._onScroll), syncList(that._reorderList(that._items, $.proxy(render, that))));\n that._renderItems();\n that._calculateGroupPadding(that._screenHeight);\n },\n _setHeight: function (height) {\n var currentHeight, heightContainer = this.heightContainer;\n if (!heightContainer) {\n heightContainer = this.heightContainer = appendChild(this.content[0], HEIGHTCONTAINER);\n } else {\n currentHeight = heightContainer.offsetHeight;\n }\n if (height !== currentHeight) {\n heightContainer.innerHTML = '';\n while (height > 0) {\n var padHeight = Math.min(height, 250000);\n appendChild(heightContainer).style.height = padHeight + 'px';\n height -= padHeight;\n }\n }\n },\n _getter: function () {\n var lastRequestedRange = null, dataSource = this.dataSource, lastRangeStart = dataSource.skip(), type = this.options.type, pageSize = this.itemCount, flatGroups = {};\n if (dataSource.pageSize() < pageSize) {\n this.mute(function () {\n dataSource.pageSize(pageSize);\n });\n }\n return function (index, rangeStart) {\n var that = this;\n if (!dataSource.inRange(rangeStart, pageSize)) {\n if (lastRequestedRange !== rangeStart) {\n lastRequestedRange = rangeStart;\n lastRangeStart = rangeStart;\n if (that._getterDeferred) {\n that._getterDeferred.reject();\n }\n that._getterDeferred = that.deferredRange(rangeStart);\n that._getterDeferred.then(function () {\n var firstItemIndex = that._indexConstraint(that.content[0].scrollTop);\n that._getterDeferred = null;\n if (rangeStart <= firstItemIndex && firstItemIndex <= rangeStart + pageSize) {\n that._fetching = true;\n dataSource.range(rangeStart, pageSize);\n }\n });\n }\n return null;\n } else {\n if (lastRangeStart !== rangeStart) {\n this.mute(function () {\n dataSource.range(rangeStart, pageSize);\n lastRangeStart = rangeStart;\n });\n }\n var result;\n if (type === 'group') {\n if (!flatGroups[rangeStart]) {\n var flatGroup = flatGroups[rangeStart] = [];\n var groups = dataSource.view();\n for (var i = 0, len = groups.length; i < len; i++) {\n var group = groups[i];\n for (var j = 0, groupLength = group.items.length; j < groupLength; j++) {\n flatGroup.push({\n item: group.items[j],\n group: group.value\n });\n }\n }\n }\n result = flatGroups[rangeStart][index - rangeStart];\n } else {\n result = dataSource.view()[index - rangeStart];\n }\n return result;\n }\n };\n },\n _fixedHeader: function (scrollTop, list) {\n var group = this.currentVisibleGroup, itemHeight = this.options.itemHeight, firstVisibleDataItemIndex = Math.floor((scrollTop - list.top) / itemHeight), firstVisibleDataItem = list.items[firstVisibleDataItemIndex];\n if (firstVisibleDataItem && firstVisibleDataItem.item) {\n var firstVisibleGroup = firstVisibleDataItem.group;\n if (firstVisibleGroup !== group) {\n this.header[0].innerHTML = firstVisibleGroup || '';\n this.currentVisibleGroup = firstVisibleGroup;\n }\n }\n return list;\n },\n _itemMapper: function (item, index, value) {\n var listType = this.options.type, itemHeight = this.options.itemHeight, currentIndex = this._focusedIndex, selected = false, current = false, newGroup = false, group = null, match = false, valueGetter = this._valueGetter;\n if (listType === 'group') {\n if (item) {\n newGroup = index === 0 || this._currentGroup && this._currentGroup !== item.group;\n this._currentGroup = item.group;\n }\n group = item ? item.group : null;\n item = item ? item.item : null;\n }\n if (!this.isFiltered() && value.length && item) {\n for (var i = 0; i < value.length; i++) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n value.splice(i, 1);\n selected = true;\n break;\n }\n }\n }\n if (currentIndex === index) {\n current = true;\n }\n return {\n item: item ? item : null,\n group: group,\n newGroup: newGroup,\n selected: selected,\n current: current,\n index: index,\n top: index * itemHeight\n };\n },\n _range: function (index) {\n var itemCount = this.itemCount, value = this._values.slice(), items = [], item;\n this._view = {};\n this._currentGroup = null;\n for (var i = index, length = index + itemCount; i < length; i++) {\n item = this._itemMapper(this.getter(i, index), i, value);\n items.push(item);\n this._view[item.index] = item;\n }\n this._dataView = items;\n return items;\n },\n _getDataItemsCollection: function (scrollTop, lastScrollTop) {\n var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n return {\n index: items.length ? items[0].index : 0,\n top: items.length ? items[0].top : 0,\n items: items\n };\n },\n _listItems: function () {\n var screenHeight = this._screenHeight, options = this.options;\n var theValidator = listValidator(options, screenHeight);\n return $.proxy(function (value, force) {\n var result = this.result, lastScrollTop = this._lastScrollTop;\n if (force || !result || !theValidator(result, value, lastScrollTop)) {\n result = this._getDataItemsCollection(value, lastScrollTop);\n }\n this._lastScrollTop = value;\n this.result = result;\n return result;\n }, this);\n },\n _whenChanged: function (getter, callback) {\n var current;\n return function (force) {\n var theNew = getter(force);\n if (theNew !== current) {\n current = theNew;\n callback(theNew, force);\n }\n };\n },\n _reorderList: function (list, reorder) {\n var that = this;\n var length = list.length;\n var currentOffset = -Infinity;\n reorder = $.proxy(map2(reorder, this.templates), this);\n return function (list2, offset, force) {\n var diff = offset - currentOffset;\n var range, range2;\n if (force || Math.abs(diff) >= length) {\n range = list;\n range2 = list2;\n } else {\n range = reshift(list, diff);\n range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n }\n reorder(range, range2, that.bound());\n currentOffset = offset;\n };\n },\n _bufferSizes: function () {\n var options = this.options;\n return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n },\n _indexConstraint: function (position) {\n var itemCount = this.itemCount, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight)));\n },\n _listIndex: function (scrollTop, lastScrollTop) {\n var buffers = this._bufferSizes(), position;\n position = scrollTop - (scrollTop > lastScrollTop ? buffers.down : buffers.up);\n return this._indexConstraint(position);\n },\n _selectable: function () {\n if (this.options.selectable) {\n this._selectProxy = $.proxy(this, '_clickHandler');\n this.element.on(CLICK + VIRTUAL_LIST_NS, '.' + VIRTUALITEM, this._selectProxy);\n }\n },\n getElementIndex: function (element) {\n if (!(element instanceof jQuery)) {\n return undefined;\n }\n return parseInt(element.attr('data-offset-index'), 10);\n },\n _getIndecies: function (candidate) {\n var result = [], data;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n result.push(idx);\n break;\n }\n }\n }\n if (typeof candidate === 'number') {\n result.push(candidate);\n }\n var elementIndex = this.getElementIndex(candidate);\n if (!isNaN(elementIndex)) {\n result.push(elementIndex);\n }\n if (candidate instanceof Array) {\n result = candidate;\n }\n return result;\n },\n _deselect: function (indices) {\n var removed = [], selectedIndex, dataItem, selectedIndexes = this._selectedIndexes, selectedDataItems = this._selectedDataItems, position = 0, selectable = this.options.selectable, removedindexesCounter = 0, valueGetter = this._valueGetter, item, match, result = null;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (var idx = 0; idx < selectedIndexes.length; idx++) {\n if (selectedIndexes[idx] !== undefined) {\n this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n } else if (selectedDataItems[idx]) {\n this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n }\n removed.push({\n index: selectedIndexes[idx],\n position: idx,\n dataItem: selectedDataItems[idx]\n });\n }\n this._values = [];\n this._selectedDataItems = [];\n this._selectedIndexes = [];\n } else if (selectable === 'multiple') {\n for (var i = 0; i < indices.length; i++) {\n result = null;\n position = $.inArray(indices[i], selectedIndexes);\n dataItem = this.dataItemByIndex(indices[i]);\n if (position === -1 && dataItem) {\n for (var j = 0; j < selectedDataItems.length; j++) {\n match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n if (match) {\n item = this._getElementByIndex(indices[i]);\n result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n }\n }\n } else {\n selectedIndex = selectedIndexes[position];\n if (selectedIndex !== undefined) {\n item = this._getElementByIndex(selectedIndex);\n result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n }\n }\n if (result) {\n indices.splice(i, 1);\n removed.push(result);\n removedindexesCounter++;\n i--;\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectSingleItem: function (item, position, selectedIndex, removedindexesCounter) {\n var dataItem;\n if (!item.hasClass('k-state-selected')) {\n return;\n }\n item.removeClass(SELECTED);\n this._values.splice(position, 1);\n this._selectedIndexes.splice(position, 1);\n dataItem = this._selectedDataItems.splice(position, 1)[0];\n return {\n index: selectedIndex,\n position: position + removedindexesCounter,\n dataItem: dataItem\n };\n },\n _deselectCurrentValues: function (indices) {\n var children = this.element[0].children;\n var value, index, position;\n var values = this._values;\n var removed = [];\n var idx = 0;\n var j;\n if (this.options.selectable !== 'multiple' || !this.isFiltered()) {\n return [];\n }\n if (indices[0] === -1) {\n $(children).removeClass('k-state-selected');\n removed = $.map(this._selectedDataItems.slice(0), function (dataItem, idx) {\n return {\n dataItem: dataItem,\n position: idx\n };\n });\n this._selectedIndexes = [];\n this._selectedDataItems = [];\n this._values = [];\n return removed;\n }\n for (; idx < indices.length; idx++) {\n position = -1;\n index = indices[idx];\n value = this._valueGetter(this.dataItemByIndex(index));\n for (j = 0; j < values.length; j++) {\n if (value == values[j]) {\n position = j;\n break;\n }\n }\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n return removed;\n },\n _getSkip: function (index, take) {\n var page = index < take ? 1 : Math.floor(index / take) + 1;\n return (page - 1) * take;\n },\n _select: function (indexes) {\n var that = this, singleSelection = this.options.selectable !== 'multiple', dataSource = this.dataSource, dataItem, oldSkip, take = this.itemCount, valueGetter = this._valueGetter, added = [];\n if (singleSelection) {\n that._selectedIndexes = [];\n that._selectedDataItems = [];\n that._values = [];\n }\n oldSkip = dataSource.skip();\n $.each(indexes, function (_, index) {\n var skip = that._getSkip(index, take);\n that.mute(function () {\n dataSource.range(skip, take);\n dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n that._selectedIndexes.push(index);\n that._selectedDataItems.push(dataItem);\n that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n added.push({\n index: index,\n dataItem: dataItem\n });\n that._getElementByIndex(index).addClass(SELECTED);\n dataSource.range(oldSkip, take);\n });\n });\n return added;\n },\n _clickHandler: function (e) {\n var item = $(e.currentTarget);\n if (!e.isDefaultPrevented() && item.attr('data-uid')) {\n this.trigger(CLICK, { item: item });\n }\n },\n _buildValueGetter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _calculateGroupPadding: function (height) {\n var firstItem = this.items().first(), groupHeader = this.header, padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(firstItem.css('border-right-width'), 10) + parseFloat(firstItem.children('.k-group').css('right'), 10);\n groupHeader.css('padding-right', padding);\n }\n }\n });\n kendo.ui.VirtualList = VirtualList;\n kendo.ui.plugin(VirtualList);\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/"}