carbon-components-angular 5.37.0 → 5.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/docs/documentation/components/Slider.html +251 -94
  2. package/docs/documentation/coverage.html +1 -1
  3. package/docs/documentation/js/search/search_index.js +2 -2
  4. package/docs/documentation/modules/ComboBoxModule/dependencies.svg +4 -4
  5. package/docs/documentation/modules/ComboBoxModule.html +4 -4
  6. package/docs/documentation/modules/ContentSwitcherModule/dependencies.svg +4 -4
  7. package/docs/documentation/modules/ContentSwitcherModule.html +4 -4
  8. package/docs/documentation/modules/DatePickerInputModule/dependencies.svg +41 -37
  9. package/docs/documentation/modules/DatePickerInputModule.html +41 -37
  10. package/docs/documentation/modules/DatePickerModule/dependencies.svg +38 -38
  11. package/docs/documentation/modules/DatePickerModule.html +38 -38
  12. package/docs/documentation/modules/GridModule/dependencies.svg +60 -60
  13. package/docs/documentation/modules/GridModule.html +60 -60
  14. package/docs/documentation/modules/LoadingModule/dependencies.svg +4 -4
  15. package/docs/documentation/modules/LoadingModule.html +4 -4
  16. package/docs/documentation/modules/NFormsModule/dependencies.svg +4 -4
  17. package/docs/documentation/modules/NFormsModule.html +4 -4
  18. package/docs/documentation/modules/NumberModule/dependencies.svg +4 -4
  19. package/docs/documentation/modules/NumberModule.html +4 -4
  20. package/docs/documentation/modules/ProgressIndicatorModule/dependencies.svg +4 -4
  21. package/docs/documentation/modules/ProgressIndicatorModule.html +4 -4
  22. package/docs/documentation/modules/RadioModule/dependencies.svg +4 -4
  23. package/docs/documentation/modules/RadioModule.html +4 -4
  24. package/docs/documentation/modules/SelectModule/dependencies.svg +58 -58
  25. package/docs/documentation/modules/SelectModule.html +58 -58
  26. package/docs/documentation/modules/SliderModule/dependencies.svg +4 -4
  27. package/docs/documentation/modules/SliderModule.html +4 -4
  28. package/docs/documentation/modules/TableModule/dependencies.svg +216 -216
  29. package/docs/documentation/modules/TableModule.html +216 -216
  30. package/docs/documentation/modules/TabsModule/dependencies.svg +69 -69
  31. package/docs/documentation/modules/TabsModule.html +69 -69
  32. package/docs/documentation/modules/TagModule/dependencies.svg +4 -4
  33. package/docs/documentation/modules/TagModule.html +4 -4
  34. package/docs/documentation/modules/ThemeModule/dependencies.svg +4 -4
  35. package/docs/documentation/modules/ThemeModule.html +4 -4
  36. package/docs/documentation/modules/TilesModule/dependencies.svg +94 -94
  37. package/docs/documentation/modules/TilesModule.html +94 -94
  38. package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +4 -4
  39. package/docs/documentation/modules/TimePickerSelectModule.html +4 -4
  40. package/docs/documentation/modules/ToggleModule/dependencies.svg +20 -20
  41. package/docs/documentation/modules/ToggleModule.html +20 -20
  42. package/docs/documentation/modules/ToggletipModule/dependencies.svg +4 -4
  43. package/docs/documentation/modules/ToggletipModule.html +4 -4
  44. package/docs/documentation/modules/TooltipModule/dependencies.svg +28 -28
  45. package/docs/documentation/modules/TooltipModule.html +28 -28
  46. package/docs/documentation/modules/TreeviewModule/dependencies.svg +4 -4
  47. package/docs/documentation/modules/TreeviewModule.html +4 -4
  48. package/docs/documentation.json +185 -137
  49. package/docs/storybook/iframe.html +2 -2
  50. package/docs/storybook/{main.b583315a.iframe.bundle.js → main.c3732b9e.iframe.bundle.js} +1 -1
  51. package/docs/storybook/project.json +1 -1
  52. package/docs/storybook/{runtime~main.3bc73b8f.iframe.bundle.js → runtime~main.b5fc6cdc.iframe.bundle.js} +1 -1
  53. package/docs/storybook/{slider-slider-stories.0a70e102.iframe.bundle.js → slider-slider-stories.5884b16a.iframe.bundle.js} +1 -1
  54. package/esm2020/slider/slider.component.mjs +35 -10
  55. package/fesm2015/carbon-components-angular-slider.mjs +34 -9
  56. package/fesm2015/carbon-components-angular-slider.mjs.map +1 -1
  57. package/fesm2020/carbon-components-angular-slider.mjs +34 -9
  58. package/fesm2020/carbon-components-angular-slider.mjs.map +1 -1
  59. package/package.json +1 -1
  60. package/slider/slider.component.d.ts +5 -1
@@ -1 +1 @@
1
- {"generatedAt":1725038285308,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":true,"hasStorybookEslint":false,"refCount":0,"packageManager":{"type":"npm","version":"8.19.4"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/angular","options":{}},"builder":"@storybook/builder-webpack5","renderer":"@storybook/angular","storybookVersion":"7.6.7","storybookVersionSpecifier":"7.6.7","language":"typescript","storybookPackages":{"@storybook/addon-actions":{"version":"7.6.7"},"@storybook/angular":{"version":"7.6.7"},"@storybook/theming":{"version":"7.6.7"},"storybook":{"version":"7.6.7"}},"addons":{"@storybook/addon-links":{"version":"7.6.7"},"@storybook/addon-essentials":{"options":{"backgrounds":false},"version":"7.6.7"},"@storybook/addon-a11y":{"version":"7.6.7"},"@storybook/addon-storysource":{"version":"7.6.7"}}}
1
+ {"generatedAt":1725051402559,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":true,"hasStorybookEslint":false,"refCount":0,"packageManager":{"type":"npm","version":"8.19.4"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/angular","options":{}},"builder":"@storybook/builder-webpack5","renderer":"@storybook/angular","storybookVersion":"7.6.7","storybookVersionSpecifier":"7.6.7","language":"typescript","storybookPackages":{"@storybook/addon-actions":{"version":"7.6.7"},"@storybook/angular":{"version":"7.6.7"},"@storybook/theming":{"version":"7.6.7"},"storybook":{"version":"7.6.7"}},"addons":{"@storybook/addon-links":{"version":"7.6.7"},"@storybook/addon-essentials":{"options":{"backgrounds":false},"version":"7.6.7"},"@storybook/addon-a11y":{"version":"7.6.7"},"@storybook/addon-storysource":{"version":"7.6.7"}}}
@@ -1 +1 @@
1
- (()=>{"use strict";var deferred,leafPrototypes,getProto,inProgress,__webpack_modules__={},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(void 0!==cachedModule)return cachedModule.exports;var module=__webpack_module_cache__[moduleId]={id:moduleId,loaded:!1,exports:{}};return __webpack_modules__[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}__webpack_require__.m=__webpack_modules__,__webpack_require__.amdO={},deferred=[],__webpack_require__.O=(result,chunkIds,fn,priority)=>{if(!chunkIds){var notFulfilled=1/0;for(i=0;i<deferred.length;i++){for(var[chunkIds,fn,priority]=deferred[i],fulfilled=!0,j=0;j<chunkIds.length;j++)(!1&priority||notFulfilled>=priority)&&Object.keys(__webpack_require__.O).every((key=>__webpack_require__.O[key](chunkIds[j])))?chunkIds.splice(j--,1):(fulfilled=!1,priority<notFulfilled&&(notFulfilled=priority));if(fulfilled){deferred.splice(i--,1);var r=fn();void 0!==r&&(result=r)}}return result}priority=priority||0;for(var i=deferred.length;i>0&&deferred[i-1][2]>priority;i--)deferred[i]=deferred[i-1];deferred[i]=[chunkIds,fn,priority]},__webpack_require__.n=module=>{var getter=module&&module.__esModule?()=>module.default:()=>module;return __webpack_require__.d(getter,{a:getter}),getter},getProto=Object.getPrototypeOf?obj=>Object.getPrototypeOf(obj):obj=>obj.__proto__,__webpack_require__.t=function(value,mode){if(1&mode&&(value=this(value)),8&mode)return value;if("object"==typeof value&&value){if(4&mode&&value.__esModule)return value;if(16&mode&&"function"==typeof value.then)return value}var ns=Object.create(null);__webpack_require__.r(ns);var def={};leafPrototypes=leafPrototypes||[null,getProto({}),getProto([]),getProto(getProto)];for(var current=2&mode&&value;"object"==typeof current&&!~leafPrototypes.indexOf(current);current=getProto(current))Object.getOwnPropertyNames(current).forEach((key=>def[key]=()=>value[key]));return def.default=()=>value,__webpack_require__.d(ns,def),ns},__webpack_require__.d=(exports,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},__webpack_require__.f={},__webpack_require__.e=chunkId=>Promise.all(Object.keys(__webpack_require__.f).reduce(((promises,key)=>(__webpack_require__.f[key](chunkId,promises),promises)),[])),__webpack_require__.u=chunkId=>(({140:"dialog-overflow-menu-overflow-menu-stories",210:"list-list-stories",384:"grid-css-grid-stories",459:"tabs-tabs-stories",703:"toggletip-toggletip-stories",799:"pagination-pagination-stories",911:"button-button-stories",933:"table-table-stories",972:"patterns-loading-large-loading-stories",1127:"search-search-stories",1928:"accordion-accordion-stories",2218:"inline-loading-inline-loading-stories",2342:"radio-radio-stories",2371:"timepicker-timepicker-stories",2388:"modal-modal-stories",2399:"input-textarea-stories",2489:"toggle-toggle-stories",2494:"loading-loading-stories",2573:"grid-grid-stories",2722:"context-menu-context-menu-stories",2969:"pagination-pagination-nav-stories",3046:"input-password-stories",3280:"tiles-tiles-stories",3314:"patterns-filtering-multiple-categories-stories",3329:"checkbox-checkbox-stories",3402:"tiles-expandable-tile-stories",3523:"contained-list-contained-list-stories",3610:"patterns-filtering-single-selection-stories",3719:"tiles-clickable-tile-stories",3858:"code-snippet-code-snippet-stories",3867:"tag-tag-stories",4232:"patterns-forms-multi-step-form-stories",4253:"tooltip-tooltip-stories",4277:"patterns-dialogs-modal-with-table-stories",4391:"content-switcher-content-switcher-stories",4731:"icon-icon-stories",4762:"patterns-filtering-multi-selection-stories",5167:"button-icon-button-stories",5368:"number-input-number-stories",5455:"layer-layer-stories",5808:"progress-bar-progress-bar-stories",5980:"select-select-stories",6026:"slider-slider-stories",6115:"theme-theme-stories",6274:"tooltip-definition-tooptip-stories",6310:"file-uploader-file-uploader-stories",6322:"popover-popover-stories",6456:"treeview-treeview-stories",6634:"link-link-stories",6663:"datepicker-datepicker-stories",6842:"breadcrumb-breadcrumb-stories",6943:"input-input-stories",7081:"layout-stack-stories",7235:"index-stories",7291:"structured-list-structured-list-stories",7840:"patterns-loading-progressive-loading-stories",7869:"skeleton-skeleton-stories",7931:"notification-notification-stories",8552:"button-button-set-stories",9211:"dropdown-dropdown-stories",9325:"tiles-tile-group-stories",9552:"timepicker-select-timepicker-select-stories",9619:"progress-indicator-progress-indicator-stories",9660:"ui-shell-ui-shell-stories",9736:"combobox-combobox-stories"}[chunkId]||chunkId)+"."+{140:"e0a259e0",210:"e906cf67",384:"c703f9de",459:"066fa432",503:"7113f5a6",703:"93f48d46",760:"c83c0660",799:"05ab4dd7",901:"eac9ade7",911:"a12bca49",933:"c19aca64",972:"699b1e1b",1119:"29184bd5",1127:"2dfd7cce",1345:"99dc9be1",1470:"39923f01",1562:"1e6a79b6",1895:"0331c090",1928:"e04e2378",2218:"5226939d",2342:"b6c3c440",2371:"7bbf1029",2388:"66aa5c7c",2399:"51dab44c",2489:"def6c644",2494:"261bc118",2573:"f7a88c02",2722:"64411dcb",2969:"ad4e83e9",3046:"33a92ba2",3080:"d3996d61",3224:"c0834124",3280:"841048dc",3314:"487f9487",3329:"3aeae19d",3360:"e0c015fc",3402:"97c48cb1",3415:"bd5d140d",3446:"67748550",3523:"b0377336",3610:"e4243e65",3719:"09f1a279",3774:"c37f3d92",3858:"0b374806",3867:"dffa6874",3931:"0e7c514c",4232:"22da53c6",4253:"eb2e347f",4277:"a011175b",4391:"8f3aa078",4731:"7926f3ba",4762:"cae9c326",5069:"eabf32ea",5103:"20115e64",5167:"d6e7f30d",5368:"a1953960",5455:"9fc41371",5808:"36bb008f",5868:"06f13966",5980:"c1077d92",6026:"0a70e102",6115:"66e1727e",6274:"60d42e1c",6310:"7cbeda49",6322:"a91784a3",6456:"85954a19",6634:"9e3dd976",6663:"fb6b3054",6702:"8b6fb391",6765:"30850149",6842:"8a783f18",6943:"8154d597",7019:"b8944046",7081:"799a681c",7235:"613320d5",7291:"c86ef32b",7331:"93927803",7399:"f37bb110",7529:"5272f30b",7773:"6c3cf943",7840:"717ad729",7869:"77f9485f",7931:"624c3d04",8341:"a544f9e9",8552:"1417284a",9115:"b37cce0a",9211:"c20a8aa6",9325:"c925923c",9552:"5b57af49",9558:"5e0c598c",9619:"b7f8dfd4",9660:"b8c5a541",9672:"48c27c98",9736:"3bbada2d"}[chunkId]+".iframe.bundle.js"),__webpack_require__.miniCssF=chunkId=>{},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.hmd=module=>((module=Object.create(module)).children||(module.children=[]),Object.defineProperty(module,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+module.id)}}),module),__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop),inProgress={},__webpack_require__.l=(url,done,key,chunkId)=>{if(inProgress[url])inProgress[url].push(done);else{var script,needAttach;if(void 0!==key)for(var scripts=document.getElementsByTagName("script"),i=0;i<scripts.length;i++){var s=scripts[i];if(s.getAttribute("src")==url||s.getAttribute("data-webpack")=="carbon-components-angular:"+key){script=s;break}}script||(needAttach=!0,(script=document.createElement("script")).charset="utf-8",script.timeout=120,__webpack_require__.nc&&script.setAttribute("nonce",__webpack_require__.nc),script.setAttribute("data-webpack","carbon-components-angular:"+key),script.src=url),inProgress[url]=[done];var onScriptComplete=(prev,event)=>{script.onerror=script.onload=null,clearTimeout(timeout);var doneFns=inProgress[url];if(delete inProgress[url],script.parentNode&&script.parentNode.removeChild(script),doneFns&&doneFns.forEach((fn=>fn(event))),prev)return prev(event)},timeout=setTimeout(onScriptComplete.bind(null,void 0,{type:"timeout",target:script}),12e4);script.onerror=onScriptComplete.bind(null,script.onerror),script.onload=onScriptComplete.bind(null,script.onload),needAttach&&document.head.appendChild(script)}},__webpack_require__.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.nmd=module=>(module.paths=[],module.children||(module.children=[]),module),__webpack_require__.p="",(()=>{var installedChunks={1303:0};__webpack_require__.f.j=(chunkId,promises)=>{var installedChunkData=__webpack_require__.o(installedChunks,chunkId)?installedChunks[chunkId]:void 0;if(0!==installedChunkData)if(installedChunkData)promises.push(installedChunkData[2]);else if(1303!=chunkId){var promise=new Promise(((resolve,reject)=>installedChunkData=installedChunks[chunkId]=[resolve,reject]));promises.push(installedChunkData[2]=promise);var url=__webpack_require__.p+__webpack_require__.u(chunkId),error=new Error;__webpack_require__.l(url,(event=>{if(__webpack_require__.o(installedChunks,chunkId)&&(0!==(installedChunkData=installedChunks[chunkId])&&(installedChunks[chunkId]=void 0),installedChunkData)){var errorType=event&&("load"===event.type?"missing":event.type),realSrc=event&&event.target&&event.target.src;error.message="Loading chunk "+chunkId+" failed.\n("+errorType+": "+realSrc+")",error.name="ChunkLoadError",error.type=errorType,error.request=realSrc,installedChunkData[1](error)}}),"chunk-"+chunkId,chunkId)}else installedChunks[chunkId]=0},__webpack_require__.O.j=chunkId=>0===installedChunks[chunkId];var webpackJsonpCallback=(parentChunkLoadingFunction,data)=>{var moduleId,chunkId,[chunkIds,moreModules,runtime]=data,i=0;if(chunkIds.some((id=>0!==installedChunks[id]))){for(moduleId in moreModules)__webpack_require__.o(moreModules,moduleId)&&(__webpack_require__.m[moduleId]=moreModules[moduleId]);if(runtime)var result=runtime(__webpack_require__)}for(parentChunkLoadingFunction&&parentChunkLoadingFunction(data);i<chunkIds.length;i++)chunkId=chunkIds[i],__webpack_require__.o(installedChunks,chunkId)&&installedChunks[chunkId]&&installedChunks[chunkId][0](),installedChunks[chunkId]=0;return __webpack_require__.O(result)},chunkLoadingGlobal=self.webpackChunkcarbon_components_angular=self.webpackChunkcarbon_components_angular||[];chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null,0)),chunkLoadingGlobal.push=webpackJsonpCallback.bind(null,chunkLoadingGlobal.push.bind(chunkLoadingGlobal))})(),__webpack_require__.nc=void 0})();
1
+ (()=>{"use strict";var deferred,leafPrototypes,getProto,inProgress,__webpack_modules__={},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(void 0!==cachedModule)return cachedModule.exports;var module=__webpack_module_cache__[moduleId]={id:moduleId,loaded:!1,exports:{}};return __webpack_modules__[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}__webpack_require__.m=__webpack_modules__,__webpack_require__.amdO={},deferred=[],__webpack_require__.O=(result,chunkIds,fn,priority)=>{if(!chunkIds){var notFulfilled=1/0;for(i=0;i<deferred.length;i++){for(var[chunkIds,fn,priority]=deferred[i],fulfilled=!0,j=0;j<chunkIds.length;j++)(!1&priority||notFulfilled>=priority)&&Object.keys(__webpack_require__.O).every((key=>__webpack_require__.O[key](chunkIds[j])))?chunkIds.splice(j--,1):(fulfilled=!1,priority<notFulfilled&&(notFulfilled=priority));if(fulfilled){deferred.splice(i--,1);var r=fn();void 0!==r&&(result=r)}}return result}priority=priority||0;for(var i=deferred.length;i>0&&deferred[i-1][2]>priority;i--)deferred[i]=deferred[i-1];deferred[i]=[chunkIds,fn,priority]},__webpack_require__.n=module=>{var getter=module&&module.__esModule?()=>module.default:()=>module;return __webpack_require__.d(getter,{a:getter}),getter},getProto=Object.getPrototypeOf?obj=>Object.getPrototypeOf(obj):obj=>obj.__proto__,__webpack_require__.t=function(value,mode){if(1&mode&&(value=this(value)),8&mode)return value;if("object"==typeof value&&value){if(4&mode&&value.__esModule)return value;if(16&mode&&"function"==typeof value.then)return value}var ns=Object.create(null);__webpack_require__.r(ns);var def={};leafPrototypes=leafPrototypes||[null,getProto({}),getProto([]),getProto(getProto)];for(var current=2&mode&&value;"object"==typeof current&&!~leafPrototypes.indexOf(current);current=getProto(current))Object.getOwnPropertyNames(current).forEach((key=>def[key]=()=>value[key]));return def.default=()=>value,__webpack_require__.d(ns,def),ns},__webpack_require__.d=(exports,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},__webpack_require__.f={},__webpack_require__.e=chunkId=>Promise.all(Object.keys(__webpack_require__.f).reduce(((promises,key)=>(__webpack_require__.f[key](chunkId,promises),promises)),[])),__webpack_require__.u=chunkId=>(({140:"dialog-overflow-menu-overflow-menu-stories",210:"list-list-stories",384:"grid-css-grid-stories",459:"tabs-tabs-stories",703:"toggletip-toggletip-stories",799:"pagination-pagination-stories",911:"button-button-stories",933:"table-table-stories",972:"patterns-loading-large-loading-stories",1127:"search-search-stories",1928:"accordion-accordion-stories",2218:"inline-loading-inline-loading-stories",2342:"radio-radio-stories",2371:"timepicker-timepicker-stories",2388:"modal-modal-stories",2399:"input-textarea-stories",2489:"toggle-toggle-stories",2494:"loading-loading-stories",2573:"grid-grid-stories",2722:"context-menu-context-menu-stories",2969:"pagination-pagination-nav-stories",3046:"input-password-stories",3280:"tiles-tiles-stories",3314:"patterns-filtering-multiple-categories-stories",3329:"checkbox-checkbox-stories",3402:"tiles-expandable-tile-stories",3523:"contained-list-contained-list-stories",3610:"patterns-filtering-single-selection-stories",3719:"tiles-clickable-tile-stories",3858:"code-snippet-code-snippet-stories",3867:"tag-tag-stories",4232:"patterns-forms-multi-step-form-stories",4253:"tooltip-tooltip-stories",4277:"patterns-dialogs-modal-with-table-stories",4391:"content-switcher-content-switcher-stories",4731:"icon-icon-stories",4762:"patterns-filtering-multi-selection-stories",5167:"button-icon-button-stories",5368:"number-input-number-stories",5455:"layer-layer-stories",5808:"progress-bar-progress-bar-stories",5980:"select-select-stories",6026:"slider-slider-stories",6115:"theme-theme-stories",6274:"tooltip-definition-tooptip-stories",6310:"file-uploader-file-uploader-stories",6322:"popover-popover-stories",6456:"treeview-treeview-stories",6634:"link-link-stories",6663:"datepicker-datepicker-stories",6842:"breadcrumb-breadcrumb-stories",6943:"input-input-stories",7081:"layout-stack-stories",7235:"index-stories",7291:"structured-list-structured-list-stories",7840:"patterns-loading-progressive-loading-stories",7869:"skeleton-skeleton-stories",7931:"notification-notification-stories",8552:"button-button-set-stories",9211:"dropdown-dropdown-stories",9325:"tiles-tile-group-stories",9552:"timepicker-select-timepicker-select-stories",9619:"progress-indicator-progress-indicator-stories",9660:"ui-shell-ui-shell-stories",9736:"combobox-combobox-stories"}[chunkId]||chunkId)+"."+{140:"e0a259e0",210:"e906cf67",384:"c703f9de",459:"066fa432",503:"7113f5a6",703:"93f48d46",760:"c83c0660",799:"05ab4dd7",901:"eac9ade7",911:"a12bca49",933:"c19aca64",972:"699b1e1b",1119:"29184bd5",1127:"2dfd7cce",1345:"99dc9be1",1470:"39923f01",1562:"1e6a79b6",1895:"0331c090",1928:"e04e2378",2218:"5226939d",2342:"b6c3c440",2371:"7bbf1029",2388:"66aa5c7c",2399:"51dab44c",2489:"def6c644",2494:"261bc118",2573:"f7a88c02",2722:"64411dcb",2969:"ad4e83e9",3046:"33a92ba2",3080:"d3996d61",3224:"c0834124",3280:"841048dc",3314:"487f9487",3329:"3aeae19d",3360:"e0c015fc",3402:"97c48cb1",3415:"bd5d140d",3446:"67748550",3523:"b0377336",3610:"e4243e65",3719:"09f1a279",3774:"c37f3d92",3858:"0b374806",3867:"dffa6874",3931:"0e7c514c",4232:"22da53c6",4253:"eb2e347f",4277:"a011175b",4391:"8f3aa078",4731:"7926f3ba",4762:"cae9c326",5069:"eabf32ea",5103:"20115e64",5167:"d6e7f30d",5368:"a1953960",5455:"9fc41371",5808:"36bb008f",5868:"06f13966",5980:"c1077d92",6026:"5884b16a",6115:"66e1727e",6274:"60d42e1c",6310:"7cbeda49",6322:"a91784a3",6456:"85954a19",6634:"9e3dd976",6663:"fb6b3054",6702:"8b6fb391",6765:"30850149",6842:"8a783f18",6943:"8154d597",7019:"b8944046",7081:"799a681c",7235:"613320d5",7291:"c86ef32b",7331:"93927803",7399:"f37bb110",7529:"5272f30b",7773:"6c3cf943",7840:"717ad729",7869:"77f9485f",7931:"624c3d04",8341:"a544f9e9",8552:"1417284a",9115:"b37cce0a",9211:"c20a8aa6",9325:"c925923c",9552:"5b57af49",9558:"5e0c598c",9619:"b7f8dfd4",9660:"b8c5a541",9672:"48c27c98",9736:"3bbada2d"}[chunkId]+".iframe.bundle.js"),__webpack_require__.miniCssF=chunkId=>{},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.hmd=module=>((module=Object.create(module)).children||(module.children=[]),Object.defineProperty(module,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+module.id)}}),module),__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop),inProgress={},__webpack_require__.l=(url,done,key,chunkId)=>{if(inProgress[url])inProgress[url].push(done);else{var script,needAttach;if(void 0!==key)for(var scripts=document.getElementsByTagName("script"),i=0;i<scripts.length;i++){var s=scripts[i];if(s.getAttribute("src")==url||s.getAttribute("data-webpack")=="carbon-components-angular:"+key){script=s;break}}script||(needAttach=!0,(script=document.createElement("script")).charset="utf-8",script.timeout=120,__webpack_require__.nc&&script.setAttribute("nonce",__webpack_require__.nc),script.setAttribute("data-webpack","carbon-components-angular:"+key),script.src=url),inProgress[url]=[done];var onScriptComplete=(prev,event)=>{script.onerror=script.onload=null,clearTimeout(timeout);var doneFns=inProgress[url];if(delete inProgress[url],script.parentNode&&script.parentNode.removeChild(script),doneFns&&doneFns.forEach((fn=>fn(event))),prev)return prev(event)},timeout=setTimeout(onScriptComplete.bind(null,void 0,{type:"timeout",target:script}),12e4);script.onerror=onScriptComplete.bind(null,script.onerror),script.onload=onScriptComplete.bind(null,script.onload),needAttach&&document.head.appendChild(script)}},__webpack_require__.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.nmd=module=>(module.paths=[],module.children||(module.children=[]),module),__webpack_require__.p="",(()=>{var installedChunks={1303:0};__webpack_require__.f.j=(chunkId,promises)=>{var installedChunkData=__webpack_require__.o(installedChunks,chunkId)?installedChunks[chunkId]:void 0;if(0!==installedChunkData)if(installedChunkData)promises.push(installedChunkData[2]);else if(1303!=chunkId){var promise=new Promise(((resolve,reject)=>installedChunkData=installedChunks[chunkId]=[resolve,reject]));promises.push(installedChunkData[2]=promise);var url=__webpack_require__.p+__webpack_require__.u(chunkId),error=new Error;__webpack_require__.l(url,(event=>{if(__webpack_require__.o(installedChunks,chunkId)&&(0!==(installedChunkData=installedChunks[chunkId])&&(installedChunks[chunkId]=void 0),installedChunkData)){var errorType=event&&("load"===event.type?"missing":event.type),realSrc=event&&event.target&&event.target.src;error.message="Loading chunk "+chunkId+" failed.\n("+errorType+": "+realSrc+")",error.name="ChunkLoadError",error.type=errorType,error.request=realSrc,installedChunkData[1](error)}}),"chunk-"+chunkId,chunkId)}else installedChunks[chunkId]=0},__webpack_require__.O.j=chunkId=>0===installedChunks[chunkId];var webpackJsonpCallback=(parentChunkLoadingFunction,data)=>{var moduleId,chunkId,[chunkIds,moreModules,runtime]=data,i=0;if(chunkIds.some((id=>0!==installedChunks[id]))){for(moduleId in moreModules)__webpack_require__.o(moreModules,moduleId)&&(__webpack_require__.m[moduleId]=moreModules[moduleId]);if(runtime)var result=runtime(__webpack_require__)}for(parentChunkLoadingFunction&&parentChunkLoadingFunction(data);i<chunkIds.length;i++)chunkId=chunkIds[i],__webpack_require__.o(installedChunks,chunkId)&&installedChunks[chunkId]&&installedChunks[chunkId][0](),installedChunks[chunkId]=0;return __webpack_require__.O(result)},chunkLoadingGlobal=self.webpackChunkcarbon_components_angular=self.webpackChunkcarbon_components_angular||[];chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null,0)),chunkLoadingGlobal.push=webpackJsonpCallback.bind(null,chunkLoadingGlobal.push.bind(chunkLoadingGlobal))})(),__webpack_require__.nc=void 0})();
@@ -1 +1 @@
1
- "use strict";(self.webpackChunkcarbon_components_angular=self.webpackChunkcarbon_components_angular||[]).push([[6026],{"./node_modules/@carbon/utils-position/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{var _a,PLACEMENTS;__webpack_require__.d(__webpack_exports__,{FK:()=>position,ZP:()=>__WEBPACK_DEFAULT_EXPORT__}),function(PLACEMENTS){PLACEMENTS.LEFT="left",PLACEMENTS.RIGHT="right",PLACEMENTS.TOP="top",PLACEMENTS.BOTTOM="bottom"}(PLACEMENTS||(PLACEMENTS={}));var defaultPositions=((_a={})[PLACEMENTS.LEFT]=function(referenceOffset,target,referenceRect){return{top:referenceOffset.top-Math.round(target.offsetHeight/2)+Math.round(referenceRect.height/2),left:Math.round(referenceOffset.left-target.offsetWidth)}},_a[PLACEMENTS.RIGHT]=function(referenceOffset,target,referenceRect){return{top:referenceOffset.top-Math.round(target.offsetHeight/2)+Math.round(referenceRect.height/2),left:Math.round(referenceOffset.left+referenceRect.width)}},_a[PLACEMENTS.TOP]=function(referenceOffset,target,referenceRect){return{top:Math.round(referenceOffset.top-target.offsetHeight),left:referenceOffset.left-Math.round(target.offsetWidth/2)+Math.round(referenceRect.width/2)}},_a[PLACEMENTS.BOTTOM]=function(referenceOffset,target,referenceRect){return{top:Math.round(referenceOffset.top+referenceRect.height),left:referenceOffset.left-Math.round(target.offsetWidth/2)+Math.round(referenceRect.width/2)}},_a),windowRef="undefined"!=typeof window?window:{innerHeight:0,scrollY:0,innerWidth:0,scrollX:0},Position=function(){function Position(positions){void 0===positions&&(positions={}),this.positions=defaultPositions,this.positions=Object.assign({},defaultPositions,positions)}return Position.prototype.getRelativeOffset=function(target){for(var offsets={left:target.offsetLeft,top:target.offsetTop};target.offsetParent&&"static"===getComputedStyle(target.offsetParent).position;)offsets.left+=target.offsetLeft,offsets.top+=target.offsetTop,target=target.offsetParent;return offsets},Position.prototype.getAbsoluteOffset=function(target){for(var currentNode=target,margins={top:0,left:0};currentNode.offsetParent;){var computed=getComputedStyle(currentNode.offsetParent);"static"===computed.position&&computed.marginLeft&&computed.marginTop&&(parseInt(computed.marginTop,10)&&(margins.top+=parseInt(computed.marginTop,10)),parseInt(computed.marginLeft,10)&&(margins.left+=parseInt(computed.marginLeft,10))),currentNode=currentNode.offsetParent}var targetRect=target.getBoundingClientRect(),relativeRect=document.body.getBoundingClientRect();return{top:targetRect.top-relativeRect.top+margins.top,left:targetRect.left-relativeRect.left+margins.left}},Position.prototype.findRelative=function(reference,target,placement){var referenceOffset=this.getRelativeOffset(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findAbsolute=function(reference,target,placement){var referenceOffset=this.getAbsoluteOffset(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findPosition=function(reference,target,placement,offsetFunction){void 0===offsetFunction&&(offsetFunction=this.getAbsoluteOffset.bind(this));var referenceOffset=offsetFunction(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findPositionAt=function(offset,target,placement){return this.calculatePosition(offset,{top:0,left:0,height:0,width:0},target,placement)},Position.prototype.getPlacementBox=function(target,position){var targetBottom=target.offsetHeight+position.top,targetRight=target.offsetWidth+position.left;return{top:position.top,bottom:targetBottom,left:position.left,right:targetRight}},Position.prototype.addOffset=function(position,top,left){return void 0===top&&(top=0),void 0===left&&(left=0),Object.assign({},position,{top:position.top+top,left:position.left+left})},Position.prototype.setElement=function(element,position){element.style.top=position.top+"px",element.style.left=position.left+"px"},Position.prototype.findBestPlacement=function(reference,target,placements,containerFunction,positionFunction){var _this=this;void 0===containerFunction&&(containerFunction=this.defaultContainerFunction.bind(this)),void 0===positionFunction&&(positionFunction=this.findPosition.bind(this));var weightedPlacements=placements.map((function(placement){var pos=positionFunction(reference,target,placement),box=_this.getPlacementBox(target,pos),hiddenHeight=0,hiddenWidth=0,container=containerFunction();box.top<container.top?hiddenHeight=container.top-box.top:box.bottom>container.height&&(hiddenHeight=box.bottom-container.height),box.left<container.left?hiddenWidth=container.left-box.left:box.right>container.width&&(hiddenWidth=box.right-container.width),hiddenHeight&&!hiddenWidth?hiddenWidth=1:hiddenWidth&&!hiddenHeight&&(hiddenHeight=1);var area=target.offsetHeight*target.offsetWidth;return{placement,weight:(area-hiddenHeight*hiddenWidth)/area}}));return weightedPlacements.sort((function(a,b){return b.weight-a.weight})),weightedPlacements[0].placement},Position.prototype.findBestPlacementAt=function(offset,target,placements,containerFunction){var _this=this;void 0===containerFunction&&(containerFunction=this.defaultContainerFunction.bind(this));return this.findBestPlacement(null,target,placements,containerFunction,(function(_,target,placement){return _this.findPositionAt(offset,target,placement)}))},Position.prototype.defaultContainerFunction=function(){return{top:0,left:0,height:windowRef.innerHeight,width:windowRef.innerWidth}},Position.prototype.calculatePosition=function(referenceOffset,referenceRect,target,placement){return this.positions[placement]?this.positions[placement](referenceOffset,target,referenceRect):(console.error("No function found for placement, defaulting to 0,0"),{left:0,top:0})},Position}(),position=new Position;const __WEBPACK_DEFAULT_EXPORT__=Position},"./src/utils/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{NV:()=>AnimationFrameService,d2:()=>ElementService,PO:()=>EventService,As:()=>UtilsModule,d9:()=>clone,_K:()=>closestAttr,O3:()=>getScrollableParents,np:()=>getScrollbarWidth,OQ:()=>hasScrollableParents,TS:()=>object_merge});var tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),Subject=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Subject.js"),from=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/observable/from.js");let AnimationFrameServiceSingleton=class AnimationFrameServiceSingleton{constructor(ngZone){this.ngZone=ngZone,this.frameSource=new Subject.x,this.tick=this.frameSource.asObservable(),this.ngZone.runOutsideAngular((()=>{this.animationFrameId=requestAnimationFrame(this.doTick.bind(this))}))}ngOnDestroy(){cancelAnimationFrame(this.animationFrameId)}doTick(frame){this.frameSource.next(frame),this.ngZone.runOutsideAngular((()=>{requestAnimationFrame(this.doTick.bind(this))}))}};AnimationFrameServiceSingleton.ctorParameters=()=>[{type:core.NgZone}],AnimationFrameServiceSingleton=(0,tslib_es6.gn)([(0,core.Injectable)()],AnimationFrameServiceSingleton);let AnimationFrameService=class AnimationFrameService{constructor(singleton){this.singleton=singleton,this.tick=(0,from.D)(this.singleton.tick)}};AnimationFrameService.ctorParameters=()=>[{type:AnimationFrameServiceSingleton}],AnimationFrameService=(0,tslib_es6.gn)([(0,core.Injectable)()],AnimationFrameService);const object_merge=(target,...objects)=>{for(const object of objects)for(const key in object)object.hasOwnProperty(key)&&(object[key]instanceof Object?(target[key]||(target[key]={}),target[key]=object_merge(target[key],object[key])):target[key]=object[key]);return target};__webpack_require__("./node_modules/@carbon/utils-position/index.js");const isScrollableElement=element=>{const computedStyle=getComputedStyle(element);return"auto"===computedStyle.overflow||"scroll"===computedStyle.overflow||"auto"===computedStyle["overflow-y"]||"scroll"===computedStyle["overflow-y"]||"auto"===computedStyle["overflow-x"]||"scroll"===computedStyle["overflow-x"]},isVisibleInContainer=(element,container)=>{const elementRect=element.getBoundingClientRect(),containerRect=container.getBoundingClientRect();if("BODY"===container.tagName||"HTML"===container.tagName){const isAboveViewport=elementRect.top<0&&elementRect.top+element.clientHeight<0,isLeftOfViewport=elementRect.left<0,isBelowViewport=elementRect.bottom-element.clientHeight>(window.innerHeight||document.documentElement.clientHeight),isRightOfViewport=elementRect.right>(window.innerWidth||document.documentElement.clientWidth);return!(isAboveViewport||isBelowViewport||isLeftOfViewport||isRightOfViewport)}return elementRect.bottom-element.clientHeight<=containerRect.bottom+(container.offsetHeight-container.clientHeight)/2&&elementRect.top>=-element.clientHeight},getScrollableParents=node=>{const elements=[document.body];for(;node.parentElement&&node!==document.body;)isScrollableElement(node)&&elements.push(node),node=node.parentElement;return elements},hasScrollableParents=node=>{for(;node.parentElement&&node!==document.body;){if(isScrollableElement(node))return!0;node=node.parentElement}return!1};function clone(obj){return JSON.parse(JSON.stringify(obj))}function matchesAttr(el,attr,val){const styles=window.getComputedStyle(el);return val.includes(styles[attr])}function closestAttr(s,t,element){let el=element;if(!element)return null;do{if(matchesAttr(el,s,t))return el;el=el.parentElement||el.parentNode}while(null!==el&&1===el.nodeType);return null}var operators_map=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/operators/map.js");let ElementService=class ElementService{constructor(singleton){this.singleton=singleton,this.tick=(0,from.D)(this.singleton.tick)}visibility(target,parentElement=target){const scrollableParents=getScrollableParents(parentElement);return this.tick.pipe((0,operators_map.U)((()=>{for(const parent of scrollableParents)if(!isVisibleInContainer(target,parent))return{visible:!1};return{visible:!0}})))}};ElementService.ctorParameters=()=>[{type:AnimationFrameServiceSingleton}],ElementService=(0,tslib_es6.gn)([(0,core.Injectable)()],ElementService);var Subscription=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Subscription.js"),Observable=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Observable.js"),observable_fromEvent=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js");const getEventObservable=(targetElement,eventType)=>{switch(eventType){case"scroll":case"resize":case"touchstart":case"touchmove":case"touchend":return(0,observable_fromEvent.R)(targetElement,eventType,{passive:!0});default:return(0,observable_fromEvent.R)(targetElement,eventType)}};let DocumentService=class DocumentService{constructor(){this.globalEvents=new Map,this.documentRef=document,this.subscriptions=new Subscription.w0}handleEvent(eventType,callback){this.globalEvents.has(eventType)||(this.documentRef?this.globalEvents.set(eventType,getEventObservable(this.documentRef,eventType)):this.globalEvents.set(eventType,new Observable.y));const observable=this.globalEvents.get(eventType);this.subscriptions.add(observable.subscribe(callback))}handleClick(callback){this.handleEvent("click",callback)}ngOnDestroy(){this.subscriptions.unsubscribe(),this.globalEvents=null}};DocumentService=(0,tslib_es6.gn)([(0,core.Injectable)()],DocumentService);let EventService=class EventService{constructor(documentService){this.documentService=documentService,this.subscriptions=new Subscription.w0,this.targets=new WeakMap}on(targetElement,eventType,callback){this.targets.has(targetElement)||this.targets.set(targetElement,new Map);const eventMap=this.targets.get(targetElement);eventMap.has(eventType)||eventMap.set(eventType,getEventObservable(targetElement,eventType));const subscription=eventMap.get(eventType).subscribe(callback);this.subscriptions.add(subscription)}onDocument(eventType,callback){this.documentService.handleEvent(eventType,callback)}ngOnDestroy(){this.subscriptions.unsubscribe()}};EventService.ctorParameters=()=>[{type:DocumentService}],EventService=(0,tslib_es6.gn)([(0,core.Injectable)()],EventService);const DOCUMENT_SERVICE_PROVIDER={provide:DocumentService,deps:[[new core.Optional,new core.SkipSelf,DocumentService]],useFactory:function DOCUMENT_SERVICE_PROVIDER_FACTORY(parentService){return parentService||new DocumentService}};const ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER={provide:AnimationFrameServiceSingleton,deps:[[new core.Optional,new core.SkipSelf,AnimationFrameServiceSingleton],core.NgZone],useFactory:function ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER_FACTORY(parentService,ngZone){return parentService||new AnimationFrameServiceSingleton(ngZone)}};let UtilsModule=class UtilsModule{};UtilsModule=(0,tslib_es6.gn)([(0,core.NgModule)({providers:[DOCUMENT_SERVICE_PROVIDER,ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER,AnimationFrameServiceSingleton,DocumentService,AnimationFrameService,ElementService,EventService]})],UtilsModule);let _scrollbarWidth=-1;function getScrollbarWidth(){if(_scrollbarWidth>=0)return _scrollbarWidth;const outer=document.createElement("div");outer.style.visibility="hidden",outer.style.width="100px",outer.style.msOverflowStyle="scrollbar",document.body.appendChild(outer);const widthNoScroll=outer.offsetWidth;outer.style.overflow="scroll";const inner=document.createElement("div");inner.style.width="100%",outer.appendChild(inner);const widthWithScroll=inner.offsetWidth;return outer.parentNode.removeChild(outer),_scrollbarWidth=widthNoScroll-widthWithScroll,_scrollbarWidth}},"./node_modules/@storybook/angular/dist/client/argsToTemplate.js":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.argsToTemplate=void 0,exports.argsToTemplate=function argsToTemplate(args,options={}){const includeSet=options.include?new Set(options.include):null,excludeSet=options.exclude?new Set(options.exclude):null;return Object.entries(args).filter((([key])=>void 0!==args[key])).filter((([key])=>includeSet?includeSet.has(key):!excludeSet||!excludeSet.has(key))).map((([key,value])=>"function"==typeof value?`(${key})="${key}($event)"`:`[${key}]="${key}"`)).join(" ")}},"./node_modules/@storybook/angular/dist/client/decorators.js":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.componentWrapperDecorator=exports.applicationConfig=exports.moduleMetadata=void 0;const ComputesTemplateFromComponent_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/angular-beta/ComputesTemplateFromComponent.js"),NgComponentAnalyzer_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/angular-beta/utils/NgComponentAnalyzer.js");exports.moduleMetadata=metadata=>storyFn=>{const story=storyFn(),storyMetadata=story.moduleMetadata||{};return metadata=metadata||{},{...story,moduleMetadata:{declarations:[...metadata.declarations||[],...storyMetadata.declarations||[]],entryComponents:[...metadata.entryComponents||[],...storyMetadata.entryComponents||[]],imports:[...metadata.imports||[],...storyMetadata.imports||[]],schemas:[...metadata.schemas||[],...storyMetadata.schemas||[]],providers:[...metadata.providers||[],...storyMetadata.providers||[]]}}},exports.applicationConfig=function applicationConfig(config){return storyFn=>{const story=storyFn(),storyConfig=story.applicationConfig;return{...story,applicationConfig:storyConfig||config?{...config,...storyConfig,providers:[...config?.providers||[],...storyConfig?.providers||[]]}:void 0}}};exports.componentWrapperDecorator=(element,props)=>(storyFn,storyContext)=>{const story=storyFn(),currentProps="function"==typeof props?props(storyContext):props,template=(0,NgComponentAnalyzer_1.isComponent)(element)?(0,ComputesTemplateFromComponent_1.computesTemplateFromComponent)(element,currentProps??{},story.template):element(story.template);return{...story,template,...currentProps||story.props?{props:{...currentProps,...story.props}}:{}}}},"./node_modules/@storybook/angular/dist/client/index.js":function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.argsToTemplate=exports.applicationConfig=exports.componentWrapperDecorator=exports.moduleMetadata=void 0,__webpack_require__("./node_modules/@storybook/angular/dist/client/globals.js"),__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-api.js"),exports),__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-types.js"),exports);var decorators_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/decorators.js");Object.defineProperty(exports,"moduleMetadata",{enumerable:!0,get:function(){return decorators_1.moduleMetadata}}),Object.defineProperty(exports,"componentWrapperDecorator",{enumerable:!0,get:function(){return decorators_1.componentWrapperDecorator}}),Object.defineProperty(exports,"applicationConfig",{enumerable:!0,get:function(){return decorators_1.applicationConfig}});var argsToTemplate_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/argsToTemplate.js");Object.defineProperty(exports,"argsToTemplate",{enumerable:!0,get:function(){return argsToTemplate_1.argsToTemplate}})},"./node_modules/@storybook/angular/dist/client/public-api.js":function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)},__importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.raw=exports.forceReRender=exports.configure=exports.storiesOf=void 0;const preview_api_1=__webpack_require__("@storybook/preview-api"),render_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/render.js"),decorateStory_1=__importDefault(__webpack_require__("./node_modules/@storybook/angular/dist/client/decorateStory.js"));__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-types.js"),exports);const api=(0,preview_api_1.start)(render_1.renderToCanvas,{decorateStory:decorateStory_1.default,render:render_1.render});exports.storiesOf=(kind,m)=>api.clientApi.storiesOf(kind,m).addParameters({renderer:"angular"});exports.configure=(...args)=>api.configure("angular",...args),exports.forceReRender=api.forceReRender,exports.raw=api.clientApi.raw},"./node_modules/@storybook/angular/dist/client/public-types.js":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0})},"./node_modules/@storybook/angular/dist/index.mjs":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{var _client_index__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/@storybook/angular/dist/client/index.js");__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"applicationConfig")&&__webpack_require__.d(__webpack_exports__,{applicationConfig:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.applicationConfig}}),__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"componentWrapperDecorator")&&__webpack_require__.d(__webpack_exports__,{componentWrapperDecorator:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.componentWrapperDecorator}}),__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"moduleMetadata")&&__webpack_require__.d(__webpack_exports__,{moduleMetadata:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.moduleMetadata}})},"./src/slider/slider.stories.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Basic:()=>Basic,Range:()=>Range,__namedExportsOrder:()=>__namedExportsOrder,default:()=>slider_stories});var dist=__webpack_require__("./node_modules/@storybook/angular/dist/index.mjs"),tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),fesm2020_forms=__webpack_require__("./node_modules/@angular/forms/fesm2020/forms.mjs"),utils=__webpack_require__("./src/utils/index.ts");let Slider=class Slider{constructor(elementRef,eventService,changeDetection){this.elementRef=elementRef,this.eventService=eventService,this.changeDetection=changeDetection,this.step=1,this.id="slider-"+Slider.count++,this.shiftMultiplier=4,this.skeleton=!1,this.disableArrowKeys=!1,this.valueChange=new core.EventEmitter,this.hostClass=!0,this.labelId=`${this.id}-label`,this.bottomRangeId=`${this.id}-bottom-range`,this.topRangeId=`${this.id}-top-range`,this.fractionComplete=0,this.isMouseDown=!1,this._min=0,this._max=100,this._value=[this.min],this._previousValue=[this.min],this._disabled=!1,this._focusedThumbIndex=0,this.propagateChange=_=>{},this.onTouched=()=>{}}set min(v){v&&(this._min=v,this.value=this.value)}get min(){return this._min}set max(v){v&&(this._max=v,this.value=this.value)}get max(){return this._max}set value(v){v||(v=[this.min]),"number"!=typeof v&&"string"!=typeof v||(v=[Number(v)]),v[0]<this.min&&(v[0]=this.min),v[0]>this.max&&(v[0]=this.max),this.isRange()&&(this._previousValue[0]!==v[0]&&(v[0]>v[1]-this.step?v[0]=v[1]-this.step:v[0]>this.max?v[0]=this.max:v[0]<this.min&&(v[0]=this.min)),this._previousValue[1]!==v[1]&&(v[1]>this.max?v[1]=this.max:v[1]<this._value[0]+this.step?v[1]=this._value[0]+this.step:v[1]<this.min&&(v[1]=this.min))),this._previousValue=[...this._value],this._value=[...v],this.isRange()&&this.filledTrack?this.updateTrackRangeWidth():this.filledTrack&&(this.filledTrack.nativeElement.style.transform=`translate(0%, -50%) ${this.scaleX(this.getFractionComplete(v[0]))}`),this.inputs&&this.inputs.length&&this.inputs.forEach(((input,index)=>{input.value=this._value[index].toString()}));const valueToEmit=this.isRange()?v:v[0];this.propagateChange(valueToEmit),this.valueChange.emit(valueToEmit)}get value(){return this.isRange()?this._value:this._value[0]}set disabled(v){this._disabled=v;const inputs=this.getInputs();inputs&&inputs.length>0&&inputs.forEach((input=>input.disabled=v))}get disabled(){return this._disabled}ngAfterViewInit(){this.eventService.onDocument("mousemove",this.onMouseMove.bind(this)),this.eventService.onDocument("mouseup",this.onMouseUp.bind(this)),this.changeDetection.detectChanges(),this.inputs=this.getInputs(),this.inputs&&this.inputs.length>0&&this.inputs.forEach(((input,index)=>{input.type="number",input.classList.add("cds--slider-text-input"),input.classList.add("cds--text-input"),input.setAttribute("aria-labelledby",`${this.bottomRangeId} ${this.topRangeId}`),input.value=index<this._value.length?this._value[index].toString():this.max.toString(),this.eventService.on(input,"change",(event=>this.onChange(event,index))),0===index&&this.eventService.on(input,"focus",this.onFocus.bind(this))}))}trackThumbsBy(index,item){return index}registerOnChange(fn){this.propagateChange=fn}registerOnTouched(fn){this.onTouched=fn}writeValue(v){this.value=v}getFractionComplete(value){if(!this.track)return 0;const trackWidth=this.track.nativeElement.getBoundingClientRect().width;return this.convertToPx(value)/trackWidth}scaleX(complete){return`scaleX(${complete})`}convertToValue(pxAmount){const range=this.max-this.min,unrounded=pxAmount/this.track.nativeElement.getBoundingClientRect().width;return Math.round(range*unrounded/this.step)*this.step+this.min}convertToPx(value){if(!this.track)return 0;const trackWidth=this.track.nativeElement.getBoundingClientRect().width;return value>=this.max?trackWidth:value<=this.min?0:Math.round(trackWidth*((value-this.min)/(this.max-this.min)))}incrementValue(multiplier=1,index=0){this._value[index]=this._value[index]+this.step*multiplier,this.value=this.value}decrementValue(multiplier=1,index=0){this._value[index]=this._value[index]-this.step*multiplier,this.value=this.value}isRange(){return this._value.length>1}updateTrackRangeWidth(){const fraction=this.getFractionComplete(this._value[0]),fraction2=this.getFractionComplete(this._value[1]);this.filledTrack.nativeElement.style.transform=`translate(${100*fraction}%, -50%) ${this.scaleX(fraction2-fraction)}`}onChange(event,index){this._value[index]=Number(event.target.value),this.value=this.value}onClick(event){if(this.disabled)return;const trackLeft=this.track.nativeElement.getBoundingClientRect().left,trackValue=this.convertToValue(event.clientX-trackLeft);this.isRange()?Math.abs(this._value[0]-trackValue)<Math.abs(this._value[1]-trackValue)?this._value[0]=trackValue:this._value[1]=trackValue:this._value[0]=trackValue,this.value=this.value}onFocus({target}){target.select()}onMouseMove(event){if(this.disabled||!this.isMouseDown)return;const track=this.track.nativeElement.getBoundingClientRect();let value;event.clientX-track.left<=track.width&&event.clientX-track.left>=0&&(value=this.convertToValue(event.clientX-track.left)),event.clientX-track.left>track.width&&(value=this.max),event.clientX-track.left<0&&(value=this.min),void 0!==value&&(this._value[this._focusedThumbIndex]=value,this.value=this.value)}onMouseDown(event,index=0){event.preventDefault(),this.disabled||(this._focusedThumbIndex=index,this.thumbs.toArray()[index].nativeElement.focus(),this.isMouseDown=!0)}onMouseUp(){this.isMouseDown=!1}onKeyDown(event,index=0){if(this.disableArrowKeys)return;const multiplier=event.shiftKey?this.shiftMultiplier:1;"ArrowLeft"===event.key||"ArrowDown"===event.key?(this.decrementValue(multiplier,index),this.thumbs.toArray()[index].nativeElement.focus(),event.preventDefault()):"ArrowRight"!==event.key&&"ArrowUp"!==event.key||(this.incrementValue(multiplier,index),this.thumbs.toArray()[index].nativeElement.focus(),event.preventDefault())}isTemplate(value){return value instanceof core.TemplateRef}getInputs(){return this.elementRef.nativeElement.querySelectorAll("input:not([type=range])")}};Slider.count=0,Slider.ctorParameters=()=>[{type:core.ElementRef},{type:utils.PO},{type:core.ChangeDetectorRef}],Slider.propDecorators={min:[{type:core.Input}],max:[{type:core.Input}],step:[{type:core.Input}],value:[{type:core.Input}],id:[{type:core.Input}],shiftMultiplier:[{type:core.Input}],skeleton:[{type:core.Input}],label:[{type:core.Input}],disableArrowKeys:[{type:core.Input}],disabled:[{type:core.Input}],valueChange:[{type:core.Output}],hostClass:[{type:core.HostBinding,args:["class.cds--form-item"]}],thumbs:[{type:core.ViewChildren,args:["thumbs"]}],track:[{type:core.ViewChild,args:["track"]}],filledTrack:[{type:core.ViewChild,args:["filledTrack"]}],range:[{type:core.ViewChild,args:["range"]}]},Slider=(0,tslib_es6.gn)([(0,core.Component)({selector:"cds-slider, ibm-slider",template:'\n\t\t<ng-container *ngIf="!skeleton; else skeletonTemplate">\n\t\t\t<label\n\t\t\t\t*ngIf="label"\n\t\t\t\t[for]="id"\n\t\t\t\t[id]="labelId"\n\t\t\t\tclass="cds--label"\n\t\t\t\t[ngClass]="{\'cds--label--disabled\': disabled}">\n\t\t\t\t<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>\n\t\t\t\t<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>\n\t\t\t</label>\n\t\t\t<div class="cds--slider-container">\n\t\t\t\t<label [id]="bottomRangeId" class="cds--slider__range-label">\n\t\t\t\t\t<ng-content select="[minLabel]"></ng-content>\n\t\t\t\t</label>\n\t\t\t\t<div\n\t\t\t\t\tclass="cds--slider"\n\t\t\t\t\t(click)="onClick($event)"\n\t\t\t\t\t[ngClass]="{\'cds--slider--disabled\': disabled}">\n\t\t\t\t\t<ng-container *ngIf="!isRange()">\n\t\t\t\t\t\t<div class="cds--slider__thumb-wrapper"\n\t\t\t\t\t\t\t[ngStyle]="{insetInlineStart: getFractionComplete(value) * 100 + \'%\'}">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#thumbs\n\t\t\t\t\t\t\t\trole="slider"\n\t\t\t\t\t\t\t\t[id]="id"\n\t\t\t\t\t\t\t\t[attr.aria-labelledby]="labelId"\n\t\t\t\t\t\t\t\tclass="cds--slider__thumb"\n\t\t\t\t\t\t\t\ttabindex="0"\n\t\t\t\t\t\t\t\t(mousedown)="onMouseDown($event)"\n\t\t\t\t\t\t\t\t(keydown)="onKeyDown($event)">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<ng-container *ngIf="isRange()">\n\t\t\t\t\t\t<div class="cds--slider__thumb-wrapper"\n\t\t\t\t\t\t [ngStyle]="{insetInlineStart: getFractionComplete(thumb) * 100 + \'%\'}"\n\t\t\t\t\t\t *ngFor="let thumb of value; let i = index; trackBy: trackThumbsBy">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#thumbs\n\t\t\t\t\t\t\t\trole="slider"\n\t\t\t\t\t\t\t\t[id]="id + (i > 0 ? \'-\' + i : \'\')"\n\t\t\t\t\t\t\t\t[attr.aria-labelledby]="labelId"\n\t\t\t\t\t\t\t\tclass="cds--slider__thumb"\n\t\t\t\t\t\t\t\ttabindex="0"\n\t\t\t\t\t\t\t\t(mousedown)="onMouseDown($event, i)"\n\t\t\t\t\t\t\t\t(keydown)="onKeyDown($event, i)">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<div\n\t\t\t\t\t\t#track\n\t\t\t\t\t\tclass="cds--slider__track">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\t#filledTrack\n\t\t\t\t\t\tclass="cds--slider__filled-track">\n\t\t\t\t\t</div>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#range\n\t\t\t\t\t\taria-label="slider"\n\t\t\t\t\t\tclass="cds--slider__input"\n\t\t\t\t\t\ttype="range"\n\t\t\t\t\t\t[step]="step"\n\t\t\t\t\t\t[min]="min"\n\t\t\t\t\t\t[max]="max"\n\t\t\t\t\t\t[value]="value.toString()">\n\t\t\t\t</div>\n\t\t\t\t<label [id]="topRangeId" class="cds--slider__range-label">\n\t\t\t\t\t<ng-content select="[maxLabel]"></ng-content>\n\t\t\t\t</label>\n\t\t\t\t<ng-content select="input"></ng-content>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<ng-template #skeletonTemplate>\n\t\t\t<label *ngIf="label" class="cds--label cds--skeleton"></label>\n\t\t\t<div class="cds--slider-container cds--skeleton">\n\t\t\t\t<span class="cds--slider__range-label"></span>\n\t\t\t\t<div class="cds--slider">\n\t\t\t\t\t<div class="cds--slider__thumb"></div>\n\t\t\t\t\t<div class="cds--slider__track"></div>\n\t\t\t\t\t<div class="cds--slider__filled-track"></div>\n\t\t\t\t</div>\n\t\t\t\t<span class="cds--slider__range-label"></span>\n\t\t\t</div>\n\t\t</ng-template>\n\t',providers:[{provide:fesm2020_forms.JU,useExisting:Slider,multi:!0}]})],Slider);var common=__webpack_require__("./node_modules/@angular/common/fesm2020/common.mjs");let SliderModule=class SliderModule{};SliderModule=(0,tslib_es6.gn)([(0,core.NgModule)({declarations:[Slider],exports:[Slider],imports:[common.CommonModule,utils.As]})],SliderModule);const slider_stories={title:"Components/Slider",decorators:[(0,dist.moduleMetadata)({imports:[SliderModule]})],component:Slider},Basic=(args=>({props:args,template:'\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [skeleton]="skeleton"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n '})).bind({});Basic.args={min:0,max:100,step:1,value:0,minLabel:"0",maxLabel:"100",disabled:!1,shiftMultiplier:4,theme:"dark"},Basic.argTypes={valueChange:{control:"Value changed!"},theme:{options:["light","dark"],control:"radio"}};const Range=(args=>({props:args,template:'\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n '})).bind({});Range.args={...Basic.args,value:[20,80]},Range.argTypes={...Basic.argTypes},Basic.parameters={...Basic.parameters,docs:{...Basic.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [skeleton]="skeleton"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n `\n})',...Basic.parameters?.docs?.source}}},Range.parameters={...Range.parameters,docs:{...Range.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n `\n})',...Range.parameters?.docs?.source}}};const __namedExportsOrder=["Basic","Range"]}}]);
1
+ "use strict";(self.webpackChunkcarbon_components_angular=self.webpackChunkcarbon_components_angular||[]).push([[6026],{"./node_modules/@carbon/utils-position/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{var _a,PLACEMENTS;__webpack_require__.d(__webpack_exports__,{FK:()=>position,ZP:()=>__WEBPACK_DEFAULT_EXPORT__}),function(PLACEMENTS){PLACEMENTS.LEFT="left",PLACEMENTS.RIGHT="right",PLACEMENTS.TOP="top",PLACEMENTS.BOTTOM="bottom"}(PLACEMENTS||(PLACEMENTS={}));var defaultPositions=((_a={})[PLACEMENTS.LEFT]=function(referenceOffset,target,referenceRect){return{top:referenceOffset.top-Math.round(target.offsetHeight/2)+Math.round(referenceRect.height/2),left:Math.round(referenceOffset.left-target.offsetWidth)}},_a[PLACEMENTS.RIGHT]=function(referenceOffset,target,referenceRect){return{top:referenceOffset.top-Math.round(target.offsetHeight/2)+Math.round(referenceRect.height/2),left:Math.round(referenceOffset.left+referenceRect.width)}},_a[PLACEMENTS.TOP]=function(referenceOffset,target,referenceRect){return{top:Math.round(referenceOffset.top-target.offsetHeight),left:referenceOffset.left-Math.round(target.offsetWidth/2)+Math.round(referenceRect.width/2)}},_a[PLACEMENTS.BOTTOM]=function(referenceOffset,target,referenceRect){return{top:Math.round(referenceOffset.top+referenceRect.height),left:referenceOffset.left-Math.round(target.offsetWidth/2)+Math.round(referenceRect.width/2)}},_a),windowRef="undefined"!=typeof window?window:{innerHeight:0,scrollY:0,innerWidth:0,scrollX:0},Position=function(){function Position(positions){void 0===positions&&(positions={}),this.positions=defaultPositions,this.positions=Object.assign({},defaultPositions,positions)}return Position.prototype.getRelativeOffset=function(target){for(var offsets={left:target.offsetLeft,top:target.offsetTop};target.offsetParent&&"static"===getComputedStyle(target.offsetParent).position;)offsets.left+=target.offsetLeft,offsets.top+=target.offsetTop,target=target.offsetParent;return offsets},Position.prototype.getAbsoluteOffset=function(target){for(var currentNode=target,margins={top:0,left:0};currentNode.offsetParent;){var computed=getComputedStyle(currentNode.offsetParent);"static"===computed.position&&computed.marginLeft&&computed.marginTop&&(parseInt(computed.marginTop,10)&&(margins.top+=parseInt(computed.marginTop,10)),parseInt(computed.marginLeft,10)&&(margins.left+=parseInt(computed.marginLeft,10))),currentNode=currentNode.offsetParent}var targetRect=target.getBoundingClientRect(),relativeRect=document.body.getBoundingClientRect();return{top:targetRect.top-relativeRect.top+margins.top,left:targetRect.left-relativeRect.left+margins.left}},Position.prototype.findRelative=function(reference,target,placement){var referenceOffset=this.getRelativeOffset(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findAbsolute=function(reference,target,placement){var referenceOffset=this.getAbsoluteOffset(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findPosition=function(reference,target,placement,offsetFunction){void 0===offsetFunction&&(offsetFunction=this.getAbsoluteOffset.bind(this));var referenceOffset=offsetFunction(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findPositionAt=function(offset,target,placement){return this.calculatePosition(offset,{top:0,left:0,height:0,width:0},target,placement)},Position.prototype.getPlacementBox=function(target,position){var targetBottom=target.offsetHeight+position.top,targetRight=target.offsetWidth+position.left;return{top:position.top,bottom:targetBottom,left:position.left,right:targetRight}},Position.prototype.addOffset=function(position,top,left){return void 0===top&&(top=0),void 0===left&&(left=0),Object.assign({},position,{top:position.top+top,left:position.left+left})},Position.prototype.setElement=function(element,position){element.style.top=position.top+"px",element.style.left=position.left+"px"},Position.prototype.findBestPlacement=function(reference,target,placements,containerFunction,positionFunction){var _this=this;void 0===containerFunction&&(containerFunction=this.defaultContainerFunction.bind(this)),void 0===positionFunction&&(positionFunction=this.findPosition.bind(this));var weightedPlacements=placements.map((function(placement){var pos=positionFunction(reference,target,placement),box=_this.getPlacementBox(target,pos),hiddenHeight=0,hiddenWidth=0,container=containerFunction();box.top<container.top?hiddenHeight=container.top-box.top:box.bottom>container.height&&(hiddenHeight=box.bottom-container.height),box.left<container.left?hiddenWidth=container.left-box.left:box.right>container.width&&(hiddenWidth=box.right-container.width),hiddenHeight&&!hiddenWidth?hiddenWidth=1:hiddenWidth&&!hiddenHeight&&(hiddenHeight=1);var area=target.offsetHeight*target.offsetWidth;return{placement,weight:(area-hiddenHeight*hiddenWidth)/area}}));return weightedPlacements.sort((function(a,b){return b.weight-a.weight})),weightedPlacements[0].placement},Position.prototype.findBestPlacementAt=function(offset,target,placements,containerFunction){var _this=this;void 0===containerFunction&&(containerFunction=this.defaultContainerFunction.bind(this));return this.findBestPlacement(null,target,placements,containerFunction,(function(_,target,placement){return _this.findPositionAt(offset,target,placement)}))},Position.prototype.defaultContainerFunction=function(){return{top:0,left:0,height:windowRef.innerHeight,width:windowRef.innerWidth}},Position.prototype.calculatePosition=function(referenceOffset,referenceRect,target,placement){return this.positions[placement]?this.positions[placement](referenceOffset,target,referenceRect):(console.error("No function found for placement, defaulting to 0,0"),{left:0,top:0})},Position}(),position=new Position;const __WEBPACK_DEFAULT_EXPORT__=Position},"./src/utils/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{NV:()=>AnimationFrameService,d2:()=>ElementService,PO:()=>EventService,As:()=>UtilsModule,d9:()=>clone,_K:()=>closestAttr,O3:()=>getScrollableParents,np:()=>getScrollbarWidth,OQ:()=>hasScrollableParents,TS:()=>object_merge});var tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),Subject=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Subject.js"),from=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/observable/from.js");let AnimationFrameServiceSingleton=class AnimationFrameServiceSingleton{constructor(ngZone){this.ngZone=ngZone,this.frameSource=new Subject.x,this.tick=this.frameSource.asObservable(),this.ngZone.runOutsideAngular((()=>{this.animationFrameId=requestAnimationFrame(this.doTick.bind(this))}))}ngOnDestroy(){cancelAnimationFrame(this.animationFrameId)}doTick(frame){this.frameSource.next(frame),this.ngZone.runOutsideAngular((()=>{requestAnimationFrame(this.doTick.bind(this))}))}};AnimationFrameServiceSingleton.ctorParameters=()=>[{type:core.NgZone}],AnimationFrameServiceSingleton=(0,tslib_es6.gn)([(0,core.Injectable)()],AnimationFrameServiceSingleton);let AnimationFrameService=class AnimationFrameService{constructor(singleton){this.singleton=singleton,this.tick=(0,from.D)(this.singleton.tick)}};AnimationFrameService.ctorParameters=()=>[{type:AnimationFrameServiceSingleton}],AnimationFrameService=(0,tslib_es6.gn)([(0,core.Injectable)()],AnimationFrameService);const object_merge=(target,...objects)=>{for(const object of objects)for(const key in object)object.hasOwnProperty(key)&&(object[key]instanceof Object?(target[key]||(target[key]={}),target[key]=object_merge(target[key],object[key])):target[key]=object[key]);return target};__webpack_require__("./node_modules/@carbon/utils-position/index.js");const isScrollableElement=element=>{const computedStyle=getComputedStyle(element);return"auto"===computedStyle.overflow||"scroll"===computedStyle.overflow||"auto"===computedStyle["overflow-y"]||"scroll"===computedStyle["overflow-y"]||"auto"===computedStyle["overflow-x"]||"scroll"===computedStyle["overflow-x"]},isVisibleInContainer=(element,container)=>{const elementRect=element.getBoundingClientRect(),containerRect=container.getBoundingClientRect();if("BODY"===container.tagName||"HTML"===container.tagName){const isAboveViewport=elementRect.top<0&&elementRect.top+element.clientHeight<0,isLeftOfViewport=elementRect.left<0,isBelowViewport=elementRect.bottom-element.clientHeight>(window.innerHeight||document.documentElement.clientHeight),isRightOfViewport=elementRect.right>(window.innerWidth||document.documentElement.clientWidth);return!(isAboveViewport||isBelowViewport||isLeftOfViewport||isRightOfViewport)}return elementRect.bottom-element.clientHeight<=containerRect.bottom+(container.offsetHeight-container.clientHeight)/2&&elementRect.top>=-element.clientHeight},getScrollableParents=node=>{const elements=[document.body];for(;node.parentElement&&node!==document.body;)isScrollableElement(node)&&elements.push(node),node=node.parentElement;return elements},hasScrollableParents=node=>{for(;node.parentElement&&node!==document.body;){if(isScrollableElement(node))return!0;node=node.parentElement}return!1};function clone(obj){return JSON.parse(JSON.stringify(obj))}function matchesAttr(el,attr,val){const styles=window.getComputedStyle(el);return val.includes(styles[attr])}function closestAttr(s,t,element){let el=element;if(!element)return null;do{if(matchesAttr(el,s,t))return el;el=el.parentElement||el.parentNode}while(null!==el&&1===el.nodeType);return null}var operators_map=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/operators/map.js");let ElementService=class ElementService{constructor(singleton){this.singleton=singleton,this.tick=(0,from.D)(this.singleton.tick)}visibility(target,parentElement=target){const scrollableParents=getScrollableParents(parentElement);return this.tick.pipe((0,operators_map.U)((()=>{for(const parent of scrollableParents)if(!isVisibleInContainer(target,parent))return{visible:!1};return{visible:!0}})))}};ElementService.ctorParameters=()=>[{type:AnimationFrameServiceSingleton}],ElementService=(0,tslib_es6.gn)([(0,core.Injectable)()],ElementService);var Subscription=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Subscription.js"),Observable=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Observable.js"),observable_fromEvent=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js");const getEventObservable=(targetElement,eventType)=>{switch(eventType){case"scroll":case"resize":case"touchstart":case"touchmove":case"touchend":return(0,observable_fromEvent.R)(targetElement,eventType,{passive:!0});default:return(0,observable_fromEvent.R)(targetElement,eventType)}};let DocumentService=class DocumentService{constructor(){this.globalEvents=new Map,this.documentRef=document,this.subscriptions=new Subscription.w0}handleEvent(eventType,callback){this.globalEvents.has(eventType)||(this.documentRef?this.globalEvents.set(eventType,getEventObservable(this.documentRef,eventType)):this.globalEvents.set(eventType,new Observable.y));const observable=this.globalEvents.get(eventType);this.subscriptions.add(observable.subscribe(callback))}handleClick(callback){this.handleEvent("click",callback)}ngOnDestroy(){this.subscriptions.unsubscribe(),this.globalEvents=null}};DocumentService=(0,tslib_es6.gn)([(0,core.Injectable)()],DocumentService);let EventService=class EventService{constructor(documentService){this.documentService=documentService,this.subscriptions=new Subscription.w0,this.targets=new WeakMap}on(targetElement,eventType,callback){this.targets.has(targetElement)||this.targets.set(targetElement,new Map);const eventMap=this.targets.get(targetElement);eventMap.has(eventType)||eventMap.set(eventType,getEventObservable(targetElement,eventType));const subscription=eventMap.get(eventType).subscribe(callback);this.subscriptions.add(subscription)}onDocument(eventType,callback){this.documentService.handleEvent(eventType,callback)}ngOnDestroy(){this.subscriptions.unsubscribe()}};EventService.ctorParameters=()=>[{type:DocumentService}],EventService=(0,tslib_es6.gn)([(0,core.Injectable)()],EventService);const DOCUMENT_SERVICE_PROVIDER={provide:DocumentService,deps:[[new core.Optional,new core.SkipSelf,DocumentService]],useFactory:function DOCUMENT_SERVICE_PROVIDER_FACTORY(parentService){return parentService||new DocumentService}};const ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER={provide:AnimationFrameServiceSingleton,deps:[[new core.Optional,new core.SkipSelf,AnimationFrameServiceSingleton],core.NgZone],useFactory:function ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER_FACTORY(parentService,ngZone){return parentService||new AnimationFrameServiceSingleton(ngZone)}};let UtilsModule=class UtilsModule{};UtilsModule=(0,tslib_es6.gn)([(0,core.NgModule)({providers:[DOCUMENT_SERVICE_PROVIDER,ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER,AnimationFrameServiceSingleton,DocumentService,AnimationFrameService,ElementService,EventService]})],UtilsModule);let _scrollbarWidth=-1;function getScrollbarWidth(){if(_scrollbarWidth>=0)return _scrollbarWidth;const outer=document.createElement("div");outer.style.visibility="hidden",outer.style.width="100px",outer.style.msOverflowStyle="scrollbar",document.body.appendChild(outer);const widthNoScroll=outer.offsetWidth;outer.style.overflow="scroll";const inner=document.createElement("div");inner.style.width="100%",outer.appendChild(inner);const widthWithScroll=inner.offsetWidth;return outer.parentNode.removeChild(outer),_scrollbarWidth=widthNoScroll-widthWithScroll,_scrollbarWidth}},"./node_modules/@storybook/angular/dist/client/argsToTemplate.js":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.argsToTemplate=void 0,exports.argsToTemplate=function argsToTemplate(args,options={}){const includeSet=options.include?new Set(options.include):null,excludeSet=options.exclude?new Set(options.exclude):null;return Object.entries(args).filter((([key])=>void 0!==args[key])).filter((([key])=>includeSet?includeSet.has(key):!excludeSet||!excludeSet.has(key))).map((([key,value])=>"function"==typeof value?`(${key})="${key}($event)"`:`[${key}]="${key}"`)).join(" ")}},"./node_modules/@storybook/angular/dist/client/decorators.js":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.componentWrapperDecorator=exports.applicationConfig=exports.moduleMetadata=void 0;const ComputesTemplateFromComponent_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/angular-beta/ComputesTemplateFromComponent.js"),NgComponentAnalyzer_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/angular-beta/utils/NgComponentAnalyzer.js");exports.moduleMetadata=metadata=>storyFn=>{const story=storyFn(),storyMetadata=story.moduleMetadata||{};return metadata=metadata||{},{...story,moduleMetadata:{declarations:[...metadata.declarations||[],...storyMetadata.declarations||[]],entryComponents:[...metadata.entryComponents||[],...storyMetadata.entryComponents||[]],imports:[...metadata.imports||[],...storyMetadata.imports||[]],schemas:[...metadata.schemas||[],...storyMetadata.schemas||[]],providers:[...metadata.providers||[],...storyMetadata.providers||[]]}}},exports.applicationConfig=function applicationConfig(config){return storyFn=>{const story=storyFn(),storyConfig=story.applicationConfig;return{...story,applicationConfig:storyConfig||config?{...config,...storyConfig,providers:[...config?.providers||[],...storyConfig?.providers||[]]}:void 0}}};exports.componentWrapperDecorator=(element,props)=>(storyFn,storyContext)=>{const story=storyFn(),currentProps="function"==typeof props?props(storyContext):props,template=(0,NgComponentAnalyzer_1.isComponent)(element)?(0,ComputesTemplateFromComponent_1.computesTemplateFromComponent)(element,currentProps??{},story.template):element(story.template);return{...story,template,...currentProps||story.props?{props:{...currentProps,...story.props}}:{}}}},"./node_modules/@storybook/angular/dist/client/index.js":function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.argsToTemplate=exports.applicationConfig=exports.componentWrapperDecorator=exports.moduleMetadata=void 0,__webpack_require__("./node_modules/@storybook/angular/dist/client/globals.js"),__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-api.js"),exports),__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-types.js"),exports);var decorators_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/decorators.js");Object.defineProperty(exports,"moduleMetadata",{enumerable:!0,get:function(){return decorators_1.moduleMetadata}}),Object.defineProperty(exports,"componentWrapperDecorator",{enumerable:!0,get:function(){return decorators_1.componentWrapperDecorator}}),Object.defineProperty(exports,"applicationConfig",{enumerable:!0,get:function(){return decorators_1.applicationConfig}});var argsToTemplate_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/argsToTemplate.js");Object.defineProperty(exports,"argsToTemplate",{enumerable:!0,get:function(){return argsToTemplate_1.argsToTemplate}})},"./node_modules/@storybook/angular/dist/client/public-api.js":function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)},__importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.raw=exports.forceReRender=exports.configure=exports.storiesOf=void 0;const preview_api_1=__webpack_require__("@storybook/preview-api"),render_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/render.js"),decorateStory_1=__importDefault(__webpack_require__("./node_modules/@storybook/angular/dist/client/decorateStory.js"));__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-types.js"),exports);const api=(0,preview_api_1.start)(render_1.renderToCanvas,{decorateStory:decorateStory_1.default,render:render_1.render});exports.storiesOf=(kind,m)=>api.clientApi.storiesOf(kind,m).addParameters({renderer:"angular"});exports.configure=(...args)=>api.configure("angular",...args),exports.forceReRender=api.forceReRender,exports.raw=api.clientApi.raw},"./node_modules/@storybook/angular/dist/client/public-types.js":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0})},"./node_modules/@storybook/angular/dist/index.mjs":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{var _client_index__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/@storybook/angular/dist/client/index.js");__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"applicationConfig")&&__webpack_require__.d(__webpack_exports__,{applicationConfig:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.applicationConfig}}),__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"componentWrapperDecorator")&&__webpack_require__.d(__webpack_exports__,{componentWrapperDecorator:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.componentWrapperDecorator}}),__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"moduleMetadata")&&__webpack_require__.d(__webpack_exports__,{moduleMetadata:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.moduleMetadata}})},"./src/slider/slider.stories.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Basic:()=>Basic,Range:()=>Range,__namedExportsOrder:()=>__namedExportsOrder,default:()=>slider_stories});var dist=__webpack_require__("./node_modules/@storybook/angular/dist/index.mjs"),tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),fesm2020_forms=__webpack_require__("./node_modules/@angular/forms/fesm2020/forms.mjs"),utils=__webpack_require__("./src/utils/index.ts");let Slider=class Slider{constructor(elementRef,eventService,changeDetection){this.elementRef=elementRef,this.eventService=eventService,this.changeDetection=changeDetection,this.step=1,this.id="slider-"+Slider.count++,this.shiftMultiplier=4,this.skeleton=!1,this.disableArrowKeys=!1,this.valueChange=new core.EventEmitter,this.hostClass=!0,this.labelId=`${this.id}-label`,this.bottomRangeId=`${this.id}-bottom-range`,this.topRangeId=`${this.id}-top-range`,this.fractionComplete=0,this.isMouseDown=!1,this._min=0,this._max=100,this._value=[this.min],this._previousValue=[this.min],this._disabled=!1,this._readonly=!1,this._focusedThumbIndex=0,this.propagateChange=_=>{},this.onTouched=()=>{}}set min(v){v&&(this._min=v,this.value=this.value)}get min(){return this._min}set max(v){v&&(this._max=v,this.value=this.value)}get max(){return this._max}set value(v){v||(v=[this.min]),"number"!=typeof v&&"string"!=typeof v||(v=[Number(v)]),v[0]<this.min&&(v[0]=this.min),v[0]>this.max&&(v[0]=this.max),this.isRange()&&(this._previousValue[0]!==v[0]&&(v[0]>v[1]-this.step?v[0]=v[1]-this.step:v[0]>this.max?v[0]=this.max:v[0]<this.min&&(v[0]=this.min)),this._previousValue[1]!==v[1]&&(v[1]>this.max?v[1]=this.max:v[1]<this._value[0]+this.step?v[1]=this._value[0]+this.step:v[1]<this.min&&(v[1]=this.min))),this._previousValue=[...this._value],this._value=[...v],this.isRange()&&this.filledTrack?this.updateTrackRangeWidth():this.filledTrack&&(this.filledTrack.nativeElement.style.transform=`translate(0%, -50%) ${this.scaleX(this.getFractionComplete(v[0]))}`),this.inputs&&this.inputs.length&&this.inputs.forEach(((input,index)=>{input.value=this._value[index].toString()}));const valueToEmit=this.isRange()?v:v[0];this.propagateChange(valueToEmit),this.valueChange.emit(valueToEmit)}get value(){return this.isRange()?this._value:this._value[0]}set disabled(v){this._disabled=v;const inputs=this.getInputs();inputs&&inputs.length>0&&inputs.forEach((input=>input.disabled=v))}get disabled(){return this._disabled}set readonly(v){this._readonly=v;const inputs=this.getInputs();inputs&&inputs.length>0&&inputs.forEach((input=>input.readOnly=v))}get readonly(){return this._readonly}ngAfterViewInit(){this.eventService.onDocument("mousemove",this.onMouseMove.bind(this)),this.eventService.onDocument("mouseup",this.onMouseUp.bind(this)),this.changeDetection.detectChanges(),this.inputs=this.getInputs(),this.inputs&&this.inputs.length>0&&this.inputs.forEach(((input,index)=>{input.type="number",input.classList.add("cds--slider-text-input"),input.classList.add("cds--text-input"),input.setAttribute("aria-labelledby",`${this.bottomRangeId} ${this.topRangeId}`),input.value=index<this._value.length?this._value[index].toString():this.max.toString(),this.eventService.on(input,"change",(event=>this.onChange(event,index))),0===index&&this.eventService.on(input,"focus",this.onFocus.bind(this))}))}trackThumbsBy(index,item){return index}registerOnChange(fn){this.propagateChange=fn}registerOnTouched(fn){this.onTouched=fn}writeValue(v){this.value=v}getFractionComplete(value){if(!this.track)return 0;const trackWidth=this.track.nativeElement.getBoundingClientRect().width;return this.convertToPx(value)/trackWidth}scaleX(complete){return`scaleX(${complete})`}convertToValue(pxAmount){const range=this.max-this.min,unrounded=pxAmount/this.track.nativeElement.getBoundingClientRect().width;return Math.round(range*unrounded/this.step)*this.step+this.min}convertToPx(value){if(!this.track)return 0;const trackWidth=this.track.nativeElement.getBoundingClientRect().width;return value>=this.max?trackWidth:value<=this.min?0:Math.round(trackWidth*((value-this.min)/(this.max-this.min)))}incrementValue(multiplier=1,index=0){this._value[index]=this._value[index]+this.step*multiplier,this.value=this.value}decrementValue(multiplier=1,index=0){this._value[index]=this._value[index]-this.step*multiplier,this.value=this.value}isRange(){return this._value.length>1}updateTrackRangeWidth(){const fraction=this.getFractionComplete(this._value[0]),fraction2=this.getFractionComplete(this._value[1]);this.filledTrack.nativeElement.style.transform=`translate(${100*fraction}%, -50%) ${this.scaleX(fraction2-fraction)}`}onChange(event,index){this._value[index]=Number(event.target.value),this.value=this.value}onClick(event){if(this.disabled||this.readonly)return;const trackLeft=this.track.nativeElement.getBoundingClientRect().left,trackValue=this.convertToValue(event.clientX-trackLeft);this.isRange()?Math.abs(this._value[0]-trackValue)<Math.abs(this._value[1]-trackValue)?this._value[0]=trackValue:this._value[1]=trackValue:this._value[0]=trackValue,this.value=this.value}onFocus({target}){target.select()}onMouseMove(event){if(this.disabled||this.readonly||!this.isMouseDown)return;const track=this.track.nativeElement.getBoundingClientRect();let value;event.clientX-track.left<=track.width&&event.clientX-track.left>=0&&(value=this.convertToValue(event.clientX-track.left)),event.clientX-track.left>track.width&&(value=this.max),event.clientX-track.left<0&&(value=this.min),void 0!==value&&(this._value[this._focusedThumbIndex]=value,this.value=this.value)}onMouseDown(event,index=0){event.preventDefault(),this.disabled||this.readonly||(this._focusedThumbIndex=index,this.thumbs.toArray()[index].nativeElement.focus(),this.isMouseDown=!0)}onMouseUp(){this.isMouseDown=!1}onKeyDown(event,index=0){if(this.disableArrowKeys||this.readonly)return;const multiplier=event.shiftKey?this.shiftMultiplier:1;"ArrowLeft"===event.key||"ArrowDown"===event.key?(this.decrementValue(multiplier,index),this.thumbs.toArray()[index].nativeElement.focus(),event.preventDefault()):"ArrowRight"!==event.key&&"ArrowUp"!==event.key||(this.incrementValue(multiplier,index),this.thumbs.toArray()[index].nativeElement.focus(),event.preventDefault())}isTemplate(value){return value instanceof core.TemplateRef}getInputs(){return this.elementRef.nativeElement.querySelectorAll("input:not([type=range])")}};Slider.count=0,Slider.ctorParameters=()=>[{type:core.ElementRef},{type:utils.PO},{type:core.ChangeDetectorRef}],Slider.propDecorators={min:[{type:core.Input}],max:[{type:core.Input}],step:[{type:core.Input}],value:[{type:core.Input}],id:[{type:core.Input}],shiftMultiplier:[{type:core.Input}],skeleton:[{type:core.Input}],label:[{type:core.Input}],disableArrowKeys:[{type:core.Input}],disabled:[{type:core.Input}],readonly:[{type:core.Input}],valueChange:[{type:core.Output}],hostClass:[{type:core.HostBinding,args:["class.cds--form-item"]}],thumbs:[{type:core.ViewChildren,args:["thumbs"]}],track:[{type:core.ViewChild,args:["track"]}],filledTrack:[{type:core.ViewChild,args:["filledTrack"]}],range:[{type:core.ViewChild,args:["range"]}]},Slider=(0,tslib_es6.gn)([(0,core.Component)({selector:"cds-slider, ibm-slider",template:'\n\t\t<ng-container *ngIf="!skeleton; else skeletonTemplate">\n\t\t\t<label\n\t\t\t\t*ngIf="label"\n\t\t\t\t[for]="id"\n\t\t\t\t[id]="labelId"\n\t\t\t\tclass="cds--label"\n\t\t\t\t[ngClass]="{\'cds--label--disabled\': disabled}">\n\t\t\t\t<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>\n\t\t\t\t<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>\n\t\t\t</label>\n\t\t\t<div\n\t\t\t\tclass="cds--slider-container"\n\t\t\t\t[ngClass]="{ \'cds--slider-container--readonly\': readonly }">\n\t\t\t\t<label [id]="bottomRangeId" class="cds--slider__range-label">\n\t\t\t\t\t<ng-content select="[minLabel]"></ng-content>\n\t\t\t\t</label>\n\t\t\t\t<div\n\t\t\t\t\tclass="cds--slider"\n\t\t\t\t\t(click)="onClick($event)"\n\t\t\t\t\t[ngClass]="{\n\t\t\t\t\t\t\'cds--slider--disabled\': disabled,\n\t\t\t\t\t\t\'cds--slider--readonly\': readonly\n\t\t\t\t\t}">\n\t\t\t\t\t<ng-container *ngIf="!isRange()">\n\t\t\t\t\t\t<div class="cds--slider__thumb-wrapper"\n\t\t\t\t\t\t\t[ngStyle]="{insetInlineStart: getFractionComplete(value) * 100 + \'%\'}">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#thumbs\n\t\t\t\t\t\t\t\trole="slider"\n\t\t\t\t\t\t\t\t[id]="id"\n\t\t\t\t\t\t\t\t[attr.aria-labelledby]="labelId"\n\t\t\t\t\t\t\t\tclass="cds--slider__thumb"\n\t\t\t\t\t\t\t\ttabindex="0"\n\t\t\t\t\t\t\t\t(mousedown)="onMouseDown($event)"\n\t\t\t\t\t\t\t\t(keydown)="onKeyDown($event)">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<ng-container *ngIf="isRange()">\n\t\t\t\t\t\t<div class="cds--slider__thumb-wrapper"\n\t\t\t\t\t\t [ngStyle]="{insetInlineStart: getFractionComplete(thumb) * 100 + \'%\'}"\n\t\t\t\t\t\t *ngFor="let thumb of value; let i = index; trackBy: trackThumbsBy">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#thumbs\n\t\t\t\t\t\t\t\trole="slider"\n\t\t\t\t\t\t\t\t[id]="id + (i > 0 ? \'-\' + i : \'\')"\n\t\t\t\t\t\t\t\t[attr.aria-labelledby]="labelId"\n\t\t\t\t\t\t\t\tclass="cds--slider__thumb"\n\t\t\t\t\t\t\t\ttabindex="0"\n\t\t\t\t\t\t\t\t(mousedown)="onMouseDown($event, i)"\n\t\t\t\t\t\t\t\t(keydown)="onKeyDown($event, i)">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<div\n\t\t\t\t\t\t#track\n\t\t\t\t\t\tclass="cds--slider__track">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\t#filledTrack\n\t\t\t\t\t\tclass="cds--slider__filled-track">\n\t\t\t\t\t</div>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#range\n\t\t\t\t\t\taria-label="slider"\n\t\t\t\t\t\tclass="cds--slider__input"\n\t\t\t\t\t\ttype="range"\n\t\t\t\t\t\t[step]="step"\n\t\t\t\t\t\t[min]="min"\n\t\t\t\t\t\t[max]="max"\n\t\t\t\t\t\t[value]="value.toString()">\n\t\t\t\t</div>\n\t\t\t\t<label [id]="topRangeId" class="cds--slider__range-label">\n\t\t\t\t\t<ng-content select="[maxLabel]"></ng-content>\n\t\t\t\t</label>\n\t\t\t\t<ng-content select="input"></ng-content>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<ng-template #skeletonTemplate>\n\t\t\t<label *ngIf="label" class="cds--label cds--skeleton"></label>\n\t\t\t<div class="cds--slider-container cds--skeleton">\n\t\t\t\t<span class="cds--slider__range-label"></span>\n\t\t\t\t<div class="cds--slider">\n\t\t\t\t\t<div class="cds--slider__thumb"></div>\n\t\t\t\t\t<div class="cds--slider__track"></div>\n\t\t\t\t\t<div class="cds--slider__filled-track"></div>\n\t\t\t\t</div>\n\t\t\t\t<span class="cds--slider__range-label"></span>\n\t\t\t</div>\n\t\t</ng-template>\n\t',providers:[{provide:fesm2020_forms.JU,useExisting:Slider,multi:!0}]})],Slider);var common=__webpack_require__("./node_modules/@angular/common/fesm2020/common.mjs");let SliderModule=class SliderModule{};SliderModule=(0,tslib_es6.gn)([(0,core.NgModule)({declarations:[Slider],exports:[Slider],imports:[common.CommonModule,utils.As]})],SliderModule);const slider_stories={title:"Components/Slider",decorators:[(0,dist.moduleMetadata)({imports:[SliderModule]})],component:Slider},Basic=(args=>({props:args,template:'\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [skeleton]="skeleton"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n [readonly]="readonly"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n '})).bind({});Basic.args={min:0,max:100,step:1,value:0,minLabel:"0",maxLabel:"100",disabled:!1,readonly:!1,shiftMultiplier:4,theme:"dark"},Basic.argTypes={valueChange:{control:"Value changed!"},theme:{options:["light","dark"],control:"radio"}};const Range=(args=>({props:args,template:'\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n [readonly]="readonly"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n '})).bind({});Range.args={...Basic.args,value:[20,80]},Range.argTypes={...Basic.argTypes},Basic.parameters={...Basic.parameters,docs:{...Basic.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [skeleton]="skeleton"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n [readonly]="readonly"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n `\n})',...Basic.parameters?.docs?.source}}},Range.parameters={...Range.parameters,docs:{...Range.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n [readonly]="readonly"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n `\n})',...Range.parameters?.docs?.source}}};const __namedExportsOrder=["Basic","Range"]}}]);
@@ -75,6 +75,7 @@ export class Slider {
75
75
  this._value = [this.min];
76
76
  this._previousValue = [this.min];
77
77
  this._disabled = false;
78
+ this._readonly = false;
78
79
  this._focusedThumbIndex = 0;
79
80
  /** Send changes back to the model */
80
81
  this.propagateChange = (_) => { };
@@ -180,6 +181,18 @@ export class Slider {
180
181
  get disabled() {
181
182
  return this._disabled;
182
183
  }
184
+ /** Set to `true` for a readonly state. */
185
+ set readonly(v) {
186
+ this._readonly = v;
187
+ // for some reason `this.input` never exists here, so we have to query for it here too
188
+ const inputs = this.getInputs();
189
+ if (inputs && inputs.length > 0) {
190
+ inputs.forEach(input => input.readOnly = v);
191
+ }
192
+ }
193
+ get readonly() {
194
+ return this._readonly;
195
+ }
183
196
  ngAfterViewInit() {
184
197
  // bind mousemove and mouseup to the document so we don't have issues tracking the mouse
185
198
  this.eventService.onDocument("mousemove", this.onMouseMove.bind(this));
@@ -301,7 +314,7 @@ export class Slider {
301
314
  * Will assign the value to the closest thumb if in range mode.
302
315
  * */
303
316
  onClick(event) {
304
- if (this.disabled) {
317
+ if (this.disabled || this.readonly) {
305
318
  return;
306
319
  }
307
320
  const trackLeft = this.track.nativeElement.getBoundingClientRect().left;
@@ -325,7 +338,7 @@ export class Slider {
325
338
  }
326
339
  /** Mouse move handler. Responsible for updating the value and visual selection based on mouse movement */
327
340
  onMouseMove(event) {
328
- if (this.disabled || !this.isMouseDown) {
341
+ if (this.disabled || this.readonly || !this.isMouseDown) {
329
342
  return;
330
343
  }
331
344
  const track = this.track.nativeElement.getBoundingClientRect();
@@ -354,7 +367,7 @@ export class Slider {
354
367
  */
355
368
  onMouseDown(event, index = 0) {
356
369
  event.preventDefault();
357
- if (this.disabled) {
370
+ if (this.disabled || this.readonly) {
358
371
  return;
359
372
  }
360
373
  this._focusedThumbIndex = index;
@@ -371,7 +384,7 @@ export class Slider {
371
384
  * @param {boolean} thumb If true then `thumb` is pressed down, otherwise `thumb2` is pressed down.
372
385
  */
373
386
  onKeyDown(event, index = 0) {
374
- if (this.disableArrowKeys) {
387
+ if (this.disableArrowKeys || this.readonly) {
375
388
  return;
376
389
  }
377
390
  const multiplier = event.shiftKey ? this.shiftMultiplier : 1;
@@ -397,7 +410,7 @@ export class Slider {
397
410
  /** Used to generate unique IDs */
398
411
  Slider.count = 0;
399
412
  Slider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Slider, deps: [{ token: i0.ElementRef }, { token: i1.EventService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
400
- Slider.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Slider, selector: "cds-slider, ibm-slider", inputs: { min: "min", max: "max", step: "step", value: "value", id: "id", shiftMultiplier: "shiftMultiplier", skeleton: "skeleton", label: "label", disableArrowKeys: "disableArrowKeys", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.cds--form-item": "this.hostClass" } }, providers: [
413
+ Slider.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Slider, selector: "cds-slider, ibm-slider", inputs: { min: "min", max: "max", step: "step", value: "value", id: "id", shiftMultiplier: "shiftMultiplier", skeleton: "skeleton", label: "label", disableArrowKeys: "disableArrowKeys", disabled: "disabled", readonly: "readonly" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.cds--form-item": "this.hostClass" } }, providers: [
401
414
  {
402
415
  provide: NG_VALUE_ACCESSOR,
403
416
  useExisting: Slider,
@@ -414,14 +427,19 @@ Slider.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.
414
427
  <ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
415
428
  <ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
416
429
  </label>
417
- <div class="cds--slider-container">
430
+ <div
431
+ class="cds--slider-container"
432
+ [ngClass]="{ 'cds--slider-container--readonly': readonly }">
418
433
  <label [id]="bottomRangeId" class="cds--slider__range-label">
419
434
  <ng-content select="[minLabel]"></ng-content>
420
435
  </label>
421
436
  <div
422
437
  class="cds--slider"
423
438
  (click)="onClick($event)"
424
- [ngClass]="{'cds--slider--disabled': disabled}">
439
+ [ngClass]="{
440
+ 'cds--slider--disabled': disabled,
441
+ 'cds--slider--readonly': readonly
442
+ }">
425
443
  <ng-container *ngIf="!isRange()">
426
444
  <div class="cds--slider__thumb-wrapper"
427
445
  [ngStyle]="{insetInlineStart: getFractionComplete(value) * 100 + '%'}">
@@ -506,14 +524,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
506
524
  <ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
507
525
  <ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
508
526
  </label>
509
- <div class="cds--slider-container">
527
+ <div
528
+ class="cds--slider-container"
529
+ [ngClass]="{ 'cds--slider-container--readonly': readonly }">
510
530
  <label [id]="bottomRangeId" class="cds--slider__range-label">
511
531
  <ng-content select="[minLabel]"></ng-content>
512
532
  </label>
513
533
  <div
514
534
  class="cds--slider"
515
535
  (click)="onClick($event)"
516
- [ngClass]="{'cds--slider--disabled': disabled}">
536
+ [ngClass]="{
537
+ 'cds--slider--disabled': disabled,
538
+ 'cds--slider--readonly': readonly
539
+ }">
517
540
  <ng-container *ngIf="!isRange()">
518
541
  <div class="cds--slider__thumb-wrapper"
519
542
  [ngStyle]="{insetInlineStart: getFractionComplete(value) * 100 + '%'}">
@@ -611,6 +634,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
611
634
  type: Input
612
635
  }], disabled: [{
613
636
  type: Input
637
+ }], readonly: [{
638
+ type: Input
614
639
  }], valueChange: [{
615
640
  type: Output
616
641
  }], hostClass: [{
@@ -629,4 +654,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
629
654
  type: ViewChild,
630
655
  args: ["range"]
631
656
  }] } });
632
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksRUFHWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQ0c7QUFtR0gsTUFBTSxPQUFPLE1BQU07SUE4SWxCLFlBQ1csVUFBc0IsRUFDdEIsWUFBMEIsRUFDNUIsZUFBa0M7UUFGaEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUF4SDNDLGlDQUFpQztRQUN4QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBc0VsQiwrSEFBK0g7UUFDdEgsT0FBRSxHQUFHLFVBQVUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDekMsaUZBQWlGO1FBQ3hFLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLHlDQUF5QztRQUNoQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRzFCLGlFQUFpRTtRQUN4RCxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFjbEMsK0NBQStDO1FBQ3JDLGdCQUFXLEdBQW9DLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFHLElBQUksQ0FBQztRQU8vQyxZQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLGVBQWUsQ0FBQztRQUMxQyxlQUFVLEdB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Q0Q7NEpBTWEsR0FBRztzQkFBZixLQUFLO2dCQVVPLEdBQUc7c0JBQWYsS0FBSztnQkFXRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRU8sS0FBSztzQkFBakIsS0FBSztnQkFxRUcsRUFBRTtzQkFBVixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBYUksV0FBVztzQkFBcEIsTUFBTTtnQkFDOEIsU0FBUztzQkFBN0MsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBQ1gsTUFBTTtzQkFBN0IsWUFBWTt1QkFBQyxRQUFRO2dCQUVGLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDUSxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ0osS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRBZnRlclZpZXdJbml0LFxuXHRWaWV3Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGRyZW4sXG5cdFF1ZXJ5TGlzdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcblxuLyoqXG4gKiBVc2VkIHRvIHNlbGVjdCBmcm9tIHJhbmdlcyBvZiB2YWx1ZXMuIFtTZWUgaGVyZV0oaHR0cHM6Ly93d3cuY2FyYm9uZGVzaWduc3lzdGVtLmNvbS9jb21wb25lbnRzL3NsaWRlci91c2FnZSkgZm9yIHVzYWdlIGluZm9ybWF0aW9uLlxuICpcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU2xpZGVyTW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBUaGUgc2ltcGxlc3QgcG9zc2libGUgc2xpZGVyIHVzYWdlIGxvb2tzIHNvbWV0aGluZyBsaWtlOlxuICpcbiAqIGBgYGh0bWxcbiAqXHQ8Y2RzLXNsaWRlcj48L2Nkcy1zbGlkZXI+XG4gKiBgYGBcbiAqXG4gKiBUaGF0IHdpbGwgcmVuZGVyIGEgc2xpZGVyIHdpdGhvdXQgbGFiZWxzIG9yIGFsdGVybmF0aXZlIHZhbHVlIGlucHV0LiBMYWJlbHMgY2FuIGJlIHByb3ZpZGVkIGJ5XG4gKiBlbGVtZW50cyB3aXRoIGBbbWluTGFiZWxdYCBhbmQgYFttYXhMYWJlbF1gIGF0dHJpYnV0ZXMsIGFuZCBhbiBgaW5wdXRgIChtYXkgdXNlIHRoZSBgaWJtSW5wdXRgIGRpcmVjdGl2ZSkgY2FuIGJlIHN1cHBsaWVkXG4gKiBmb3IgdXNlIGFzIGFuIGFsdGVybmF0aXZlIHZhbHVlIGZpZWxkLlxuICpcbiAqIGV4OlxuICpcbiAqIGBgYGh0bWxcbiAqIDwhLS0gRnVsbCBleGFtcGxlIC0tPlxuICogPGNkcy1zbGlkZXI+XG4gKlx0XHQ8c3BhbiBtaW5MYWJlbD4wR0I8L3NwYW4+XG4gKlx0XHQ8c3BhbiBtYXhMYWJlbD4xMDBHQjwvc3Bhbj5cbiAqXHRcdDxpbnB1dC8+XG4gKiA8L2Nkcy1zbGlkZXI+XG4gKlxuICogPCEtLSB3aXRoIGp1c3QgYW4gaW5wdXQgLS0+XG4gKiA8Y2RzLXNsaWRlcj5cbiAqXHRcdDxpbnB1dC8+XG4gKiA8L2Nkcy1zbGlkZXI+XG4gKlxuICogPCEtLSB3aXRoIGp1c3Qgb25lIGxhYmVsIC0tPlxuICogPGNkcy1zbGlkZXI+XG4gKlx0XHQ8c3BhbiBtYXhMYWJlbD5NYXhpbXVtPC9zcGFuPlxuICogPC9jZHMtc2xpZGVyPlxuICogYGBgXG4gKlxuICogU2xpZGVyIHN1cHBvcnRzIGBOZ01vZGVsYCBieSBkZWZhdWx0LCBhcyB3ZWxsIGFzIHR3byB3YXkgYmluZGluZyB0byB0aGUgYHZhbHVlYCBpbnB1dC5cbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLXNsaWRlci0tYWR2YW5jZWQpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtc2xpZGVyLCBpYm0tc2xpZGVyXCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbjsgZWxzZSBza2VsZXRvblRlbXBsYXRlXCI+XG5cdFx0XHQ8bGFiZWxcblx0XHRcdFx0Km5nSWY9XCJsYWJlbFwiXG5cdFx0XHRcdFtmb3JdPVwiaWRcIlxuXHRcdFx0XHRbaWRdPVwibGFiZWxJZFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1sYWJlbC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGxhYmVsKVwiPnt7bGFiZWx9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGxhYmVsKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvbGFiZWw+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zbGlkZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdDxsYWJlbCBbaWRdPVwiYm90dG9tUmFuZ2VJZFwiIGNsYXNzPVwiY2RzLS1zbGlkZXJfX3JhbmdlLWxhYmVsXCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiW21pbkxhYmVsXVwiPjwvbmctY29udGVudD5cblx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJcIlxuXHRcdFx0XHRcdChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1zbGlkZXItLWRpc2FibGVkJzogZGlzYWJsZWR9XCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1JhbmdlKClcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlcl9fdGh1bWItd3JhcHBlclwiXG5cdFx0XHRcdFx0XHRcdFtuZ1N0eWxlXT1cIntpbnNldElubGluZVN0YXJ0OiBnZXRGcmFjdGlvbkNvbXBsZXRlKHZhbHVlKSAqIDEwMCArICclJ31cIj5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdCN0aHVtYnNcblx0XHRcdFx0XHRcdFx0XHRyb2xlPVwic2xpZGVyXCJcblx0XHRcdFx0XHRcdFx0XHRbaWRdPVwiaWRcIlxuXHRcdFx0XHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbElkXCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tc2xpZGVyX190aHVtYlwiXG5cdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHQobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudClcIlxuXHRcdFx0XHRcdFx0XHRcdChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmFuZ2UoKVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2xpZGVyX190aHVtYi13cmFwcGVyXCJcblx0XHRcdFx0XHRcdCBbbmdTdHlsZV09XCJ7aW5zZXRJbmxpbmVTdGFydDogZ2V0RnJhY3Rpb25Db21wbGV0ZSh0aHVtYikgKiAxMDAgKyAnJSd9XCJcblx0XHRcdFx0XHRcdCAqbmdGb3I9XCJsZXQgdGh1bWIgb2YgdmFsdWU7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrVGh1bWJzQnlcIj5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdCN0aHVtYnNcblx0XHRcdFx0XHRcdFx0XHRyb2xlPVwic2xpZGVyXCJcblx0XHRcdFx0XHRcdFx0XHRbaWRdPVwiaWQgKyAoaSA+IDAgPyAnLScgKyBpIDogJycpXCJcblx0XHRcdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxJZFwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXNsaWRlcl9fdGh1bWJcIlxuXHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0KG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQsIGkpXCJcblx0XHRcdFx0XHRcdFx0XHQoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCBpKVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdCN0cmFja1xuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXNsaWRlcl9fdHJhY2tcIj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHQjZmlsbGVkVHJhY2tcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX2ZpbGxlZC10cmFja1wiPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0I3JhbmdlXG5cdFx0XHRcdFx0XHRhcmlhLWxhYmVsPVwic2xpZGVyXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX2lucHV0XCJcblx0XHRcdFx0XHRcdHR5cGU9XCJyYW5nZVwiXG5cdFx0XHRcdFx0XHRbc3RlcF09XCJzdGVwXCJcblx0XHRcdFx0XHRcdFttaW5dPVwibWluXCJcblx0XHRcdFx0XHRcdFttYXhdPVwibWF4XCJcblx0XHRcdFx0XHRcdFt2YWx1ZV09XCJ2YWx1ZS50b1N0cmluZygpXCI+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8bGFiZWwgW2lkXT1cInRvcFJhbmdlSWRcIiBjbGFzcz1cImNkcy0tc2xpZGVyX19yYW5nZS1sYWJlbFwiPlxuXHRcdFx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXhMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG5cdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cImlucHV0XCI+PC9uZy1jb250ZW50PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHQ8bmctdGVtcGxhdGUgI3NrZWxldG9uVGVtcGxhdGU+XG5cdFx0XHQ8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiY2RzLS1sYWJlbCBjZHMtLXNrZWxldG9uXCI+PC9sYWJlbD5cblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlci1jb250YWluZXIgY2RzLS1za2VsZXRvblwiPlxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tc2xpZGVyX19yYW5nZS1sYWJlbFwiPjwvc3Bhbj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2xpZGVyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2xpZGVyX190aHVtYlwiPjwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlcl9fdHJhY2tcIj48L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zbGlkZXJfX2ZpbGxlZC10cmFja1wiPjwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLXNsaWRlcl9fcmFuZ2UtbGFiZWxcIj48L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBTbGlkZXIsXG5cdFx0XHRtdWx0aTogdHJ1ZVxuXHRcdH1cblx0XVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXIgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdC8qKiBVc2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMgKi9cblx0cHJpdmF0ZSBzdGF0aWMgY291bnQgPSAwO1xuXG5cdC8qKiBUaGUgbG93ZXIgYm91bmQgb2Ygb3VyIHJhbmdlICovXG5cdEBJbnB1dCgpIHNldCBtaW4odikge1xuXHRcdGlmICghdikgeyByZXR1cm47IH1cblx0XHR0aGlzLl9taW4gPSB2O1xuXHRcdC8vIGZvcmNlIHRoZSBjb21wb25lbnQgdG8gdXBkYXRlXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XG5cdH1cblx0Z2V0IG1pbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fbWluO1xuXHR9XG5cdC8qKiBUaGUgdXBwZXIgYm91bmQgb2Ygb3VyIHJhbmdlICovXG5cdEBJbnB1dCgpIHNldCBtYXgodikge1xuXHRcdGlmICghdikgeyByZXR1cm47IH1cblx0XHR0aGlzLl9tYXggPSB2O1xuXHRcdC8vIGZvcmNlIHRoZSBjb21wb25lbnQgdG8gdXBkYXRlXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XG5cdH1cblxuXHRnZXQgbWF4KCkge1xuXHRcdHJldHVybiB0aGlzLl9tYXg7XG5cdH1cblx0LyoqIFRoZSBpbnRlcnZhbCBmb3Igb3VyIHJhbmdlICovXG5cdEBJbnB1dCgpIHN0ZXAgPSAxO1xuXHQvKiogU2V0IHRoZSBpbml0aWFsIHZhbHVlLiBBdmFpbGFibGUgZm9yIHR3byB3YXkgYmluZGluZyAqL1xuXHRASW5wdXQoKSBzZXQgdmFsdWUodikge1xuXHRcdGlmICghdikge1xuXHRcdFx0diA9IFt0aGlzLm1pbl07XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHR2ID0gW051bWJlcih2KV07XG5cdFx0fVxuXG5cdFx0aWYgKHZbMF0gPCB0aGlzLm1pbikge1xuXHRcdFx0dlswXSA9IHRoaXMubWluO1xuXHRcdH1cblxuXHRcdGlmICh2WzBdID4gdGhpcy5tYXgpIHtcblx0XHRcdHZbMF0gPSB0aGlzLm1heDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1JhbmdlKCkpIHtcblx0XHRcdGlmICh0aGlzLl9wcmV2aW91c1ZhbHVlWzBdICE9PSB2WzBdKSB7IC8vIGxlZnQgbW92ZWRcblx0XHRcdFx0aWYgKHZbMF0gPiB2WzFdIC0gdGhpcy5zdGVwKSB7XG5cdFx0XHRcdFx0Ly8gc3RvcCB0aGUgbGVmdCBoYW5kbGUgaWYgc3VycGFzc2luZyB0aGUgcmlnaHQgb25lXG5cdFx0XHRcdFx0dlswXSA9IHZbMV0gLSB0aGlzLnN0ZXA7XG5cdFx0XHRcdH0gZWxzZSBpZiAodlswXSA+IHRoaXMubWF4KSB7XG5cdFx0XHRcdFx0dlswXSA9IHRoaXMubWF4O1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZbMF0gPCB0aGlzLm1pbikge1xuXHRcdFx0XHRcdHZbMF0gPSB0aGlzLm1pbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fcHJldmlvdXNWYWx1ZVsxXSAhPT0gdlsxXSkgeyAvLyByaWdodCBtb3ZlZFxuXHRcdFx0XHRpZiAodlsxXSA+IHRoaXMubWF4KSB7XG5cdFx0XHRcdFx0dlsxXSA9IHRoaXMubWF4O1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZbMV0gPCB0aGlzLl92YWx1ZVswXSArIHRoaXMuc3RlcCkge1xuXHRcdFx0XHRcdC8vIHN0b3AgdGhlIHJpZ2h0IGhhbmRsZSBpZiBzdXJwYXNzaW5nIHRoZSBsZWZ0IG9uZVxuXHRcdFx0XHRcdHZbMV0gPSB0aGlzLl92YWx1ZVswXSArIHRoaXMuc3RlcDtcblx0XHRcdFx0fSBlbHNlIGlmICh2WzFdIDwgdGhpcy5taW4pIHtcblx0XHRcdFx0XHR2WzFdID0gdGhpcy5taW47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLl9wcmV2aW91c1ZhbHVlID0gWy4uLnRoaXMuX3ZhbHVlXTsgLy8gc3RvcmUgYSBjb3B5LCBlbmFibGUgZGV0ZWN0aW9uIHdoaWNoIGhhbmRsZSBtb3ZlZFxuXHRcdHRoaXMuX3ZhbHVlID0gWy4uLnZdOyAvLyB0cmlnZ2VycyBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gbmdNb2RlbCB2YWx1ZSBpcyBhbiBhcnJheSAoZm9yIHJhbmdlKVxuXG5cdFx0aWYgKHRoaXMuaXNSYW5nZSgpICYmIHRoaXMuZmlsbGVkVHJhY2spIHtcblx0XHRcdHRoaXMudXBkYXRlVHJhY2tSYW5nZVdpZHRoKCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmZpbGxlZFRyYWNrKSB7XG5cdFx0XHR0aGlzLmZpbGxlZFRyYWNrLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgwJSwgLTUwJSkgJHt0aGlzLnNjYWxlWCh0aGlzLmdldEZyYWN0aW9uQ29tcGxldGUodlswXSkpfWA7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaW5wdXRzICYmIHRoaXMuaW5wdXRzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGlucHV0LnZhbHVlID0gdGhpcy5fdmFsdWVbaW5kZXhdLnRvU3RyaW5nKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZVRvRW1pdCA9IHRoaXMuaXNSYW5nZSgpID8gdiA6IHZbMF07XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsdWVUb0VtaXQpO1xuXHRcdHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVRvRW1pdCk7XG5cdH1cblxuXHRnZXQgdmFsdWUoKSB7XG5cdFx0aWYgKHRoaXMuaXNSYW5nZSgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl92YWx1ZVswXTtcblx0fVxuXG5cdC8qKiBCYXNlIElEIGZvciB0aGUgc2xpZGVyLiBUaGUgbWluIGFuZCBtYXggbGFiZWxzIGdldCBJRHMgYCR7dGhpcy5pZH0tYm90dG9tLXJhbmdlYCBhbmQgYCR7dGhpcy5pZH0tdG9wLXJhbmdlYCByZXNwZWN0aXZlbHkgKi9cblx0QElucHV0KCkgaWQgPSBgc2xpZGVyLSR7U2xpZGVyLmNvdW50Kyt9YDtcblx0LyoqIFZhbHVlIHVzZWQgdG8gXCJtdWx0aXBseVwiIHRoZSBgc3RlcGAgd2hlbiB1c2luZyBhcnJvdyBrZXlzIHRvIHNlbGVjdCB2YWx1ZXMgKi9cblx0QElucHV0KCkgc2hpZnRNdWx0aXBsaWVyID0gNDtcblx0LyoqIFNldCB0byBgdHJ1ZWAgZm9yIGEgbG9hZGluZyBzbGlkZXIgKi9cblx0QElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcblx0LyoqIFNldHMgdGhlIHRleHQgaW5zaWRlIHRoZSBgbGFiZWxgIHRhZyAqL1xuXHRASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqIFNldCB0byBgdHJ1ZWAgZm9yIGEgc2xpZGVyIHdpdGhvdXQgYXJyb3cga2V5IGludGVyYWN0aW9ucy4gKi9cblx0QElucHV0KCkgZGlzYWJsZUFycm93S2V5cyA9IGZhbHNlO1xuXHQvKiogRGlzYWJsZXMgdGhlIHJhbmdlIHZpc3VhbGx5IGFuZCBmdW5jdGlvbmFsbHkgKi9cblx0QElucHV0KCkgc2V0IGRpc2FibGVkKHYpIHtcblx0XHR0aGlzLl9kaXNhYmxlZCA9IHY7XG5cdFx0Ly8gZm9yIHNvbWUgcmVhc29uIGB0aGlzLmlucHV0YCBuZXZlciBleGlzdHMgaGVyZSwgc28gd2UgaGF2ZSB0byBxdWVyeSBmb3IgaXQgaGVyZSB0b29cblx0XHRjb25zdCBpbnB1dHMgPSB0aGlzLmdldElucHV0cygpO1xuXHRcdGlmIChpbnB1dHMgJiYgaW5wdXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGlucHV0cy5mb3JFYWNoKGlucHV0ID0+IGlucHV0LmRpc2FibGVkID0gdik7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IGRpc2FibGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9kaXNhYmxlZDtcblx0fVxuXHQvKiogRW1pdHMgZXZlcnkgdGltZSBhIG5ldyB2YWx1ZSBpcyBzZWxlY3RlZCAqL1xuXHRAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBudW1iZXJbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tZm9ybS1pdGVtXCIpIGhvc3RDbGFzcyA9IHRydWU7XG5cdEBWaWV3Q2hpbGRyZW4oXCJ0aHVtYnNcIikgdGh1bWJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cblx0QFZpZXdDaGlsZChcInRyYWNrXCIpIHRyYWNrOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKFwiZmlsbGVkVHJhY2tcIikgZmlsbGVkVHJhY2s6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoXCJyYW5nZVwiKSByYW5nZTogRWxlbWVudFJlZjtcblxuXHRwdWJsaWMgbGFiZWxJZCA9IGAke3RoaXMuaWR9LWxhYmVsYDtcblx0cHVibGljIGJvdHRvbVJhbmdlSWQgPSBgJHt0aGlzLmlkfS1ib3R0b20tcmFuZ2VgO1xuXHRwdWJsaWMgdG9wUmFuZ2VJZCA9IGAke3RoaXMuaWR9LXRvcC1yYW5nZWA7XG5cdHB1YmxpYyBmcmFjdGlvbkNvbXBsZXRlID0gMDtcblxuXHRwcm90ZWN0ZWQgaXNNb3VzZURvd24gPSBmYWxzZTtcblx0cHJvdGVjdGVkIGlucHV0czogSFRNTElucHV0RWxlbWVudFtdO1xuXHRwcm90ZWN0ZWQgX21pbiA9IDA7XG5cdHByb3RlY3RlZCBfbWF4ID0gMTAwO1xuXHRwcm90ZWN0ZWQgX3ZhbHVlID0gW3RoaXMubWluXTtcblx0cHJvdGVjdGVkIF9wcmV2aW91c1ZhbHVlID0gW3RoaXMubWluXTtcblx0cHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuXHRwcm90ZWN0ZWQgX2ZvY3VzZWRUaHVtYkluZGV4ID0gMDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcblx0XHRwcm90ZWN0ZWQgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmXG5cdCkge31cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0Ly8gYmluZCBtb3VzZW1vdmUgYW5kIG1vdXNldXAgdG8gdGhlIGRvY3VtZW50IHNvIHdlIGRvbid0IGhhdmUgaXNzdWVzIHRyYWNraW5nIHRoZSBtb3VzZVxuXHRcdHRoaXMuZXZlbnRTZXJ2aWNlLm9uRG9jdW1lbnQoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLmV2ZW50U2VydmljZS5vbkRvY3VtZW50KFwibW91c2V1cFwiLCB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpKTtcblxuXHRcdC8vIGFwcGx5IGFueSB2YWx1ZXMgd2UgZ290IGZyb20gYmVmb3JlIHRoZSB2aWV3IGluaXRpYWxpemVkXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xuXG5cdFx0Ly8gVE9ETzogb250b3VjaHN0YXJ0L29udG91Y2htb3ZlL29udG91Y2hlbmRcblxuXHRcdC8vIHNldCB1cCB0aGUgb3B0aW9uYWwgaW5wdXRcblx0XHR0aGlzLmlucHV0cyA9IHRoaXMuZ2V0SW5wdXRzKCk7XG5cdFx0aWYgKHRoaXMuaW5wdXRzICYmIHRoaXMuaW5wdXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRpbnB1dC50eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdFx0aW5wdXQuY2xhc3NMaXN0LmFkZChcImNkcy0tc2xpZGVyLXRleHQtaW5wdXRcIik7XG5cdFx0XHRcdGlucHV0LmNsYXNzTGlzdC5hZGQoXCJjZHMtLXRleHQtaW5wdXRcIik7XG5cdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxsZWRieVwiLCBgJHt0aGlzLmJvdHRvbVJhbmdlSWR9ICR7dGhpcy50b3BSYW5nZUlkfWApO1xuXG5cdFx0XHRcdGlucHV0LnZhbHVlID0gaW5kZXggPCB0aGlzLl92YWx1ZS5sZW5ndGggPyB0aGlzLl92YWx1ZVtpbmRleF0udG9TdHJpbmcoKSA6IHRoaXMubWF4LnRvU3RyaW5nKCk7XG5cdFx0XHRcdC8vIGJpbmQgZXZlbnRzIG9uIG91ciBvcHRpb25hbCBpbnB1dFxuXHRcdFx0XHR0aGlzLmV2ZW50U2VydmljZS5vbihpbnB1dCwgXCJjaGFuZ2VcIiwgZXZlbnQgPT4gdGhpcy5vbkNoYW5nZShldmVudCwgaW5kZXgpKTtcblxuXHRcdFx0XHRpZiAoaW5kZXggPT09IDApIHtcblx0XHRcdFx0XHR0aGlzLmV2ZW50U2VydmljZS5vbihpbnB1dCwgXCJmb2N1c1wiLCB0aGlzLm9uRm9jdXMuYmluZCh0aGlzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHRyYWNrVGh1bWJzQnkoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG5cdFx0cmV0dXJuIGluZGV4O1xuXHR9XG5cblx0LyoqIFNlbmQgY2hhbmdlcyBiYWNrIHRvIHRoZSBtb2RlbCAqL1xuXHRwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG5cblx0LyoqIFJlZ2lzdGVyIGEgY2hhbmdlIHByb3BhZ2F0aW9uIGZ1bmN0aW9uIGZvciBgQ29udHJvbFZhbHVlQWNjZXNzb3JgICovXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG5cdH1cblxuXHQvKiogQ2FsbGJhY2sgdG8gbm90aWZ5IHRoZSBtb2RlbCB3aGVuIG91ciBpbnB1dCBoYXMgYmVlbiB0b3VjaGVkICovXG5cdG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuXG5cdC8qKiBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIG5vdGlmeSB3aGVuIG91ciBpbnB1dCBoYXMgYmVlbiB0b3VjaGVkICovXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0LyoqIFJlY2VpdmVzIGEgdmFsdWUgZnJvbSB0aGUgbW9kZWwgKi9cblx0d3JpdGVWYWx1ZSh2OiBhbnkpIHtcblx0XHR0aGlzLnZhbHVlID0gdjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgXCJjb21wbGV0ZW5lc3NcIiBvZiBhIHZhbHVlIGFzIGEgZnJhY3Rpb24gb2YgdGhlIHRvdGFsIHRyYWNrIHdpZHRoXG5cdCAqL1xuXHRnZXRGcmFjdGlvbkNvbXBsZXRlKHZhbHVlOiBudW1iZXIpIHtcblx0XHRpZiAoIXRoaXMudHJhY2spIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRyYWNrV2lkdGggPSB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydFRvUHgodmFsdWUpIC8gdHJhY2tXaWR0aDtcblx0fVxuXG5cdC8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBDU1MgdHJhbnNmb3JtIGBzY2FsZVhgIGZ1bmN0aW9uICovXG5cdHNjYWxlWChjb21wbGV0ZSkge1xuXHRcdHJldHVybiBgc2NhbGVYKCR7Y29tcGxldGV9KWA7XG5cdH1cblxuXHQvKiogQ29udmVydHMgYSBnaXZlbiBweCB2YWx1ZSB0byBhIFwicmVhbFwiIHZhbHVlIGluIG91ciByYW5nZSAqL1xuXHRjb252ZXJ0VG9WYWx1ZShweEFtb3VudCkge1xuXHRcdC8vIGJhc2ljIGNvbmNlcHQgYm9ycm93ZWQgZnJvbSBjYXJib24tY29tcG9uZW50c1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXJib24tZGVzaWduLXN5c3RlbS9jYXJib24vYmxvYi80M2JmM2FiZGMyZjhiZGFhMzhhYTg0ZTBmNzMzYWRkZTFlMWU4ODk0L3NyYy9jb21wb25lbnRzL3NsaWRlci9zbGlkZXIuanMjTDE0Ny1MMTUxXG5cdFx0Y29uc3QgcmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xuXHRcdGNvbnN0IHRyYWNrV2lkdGggPSB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0Y29uc3QgdW5yb3VuZGVkID0gcHhBbW91bnQgLyB0cmFja1dpZHRoO1xuXHRcdGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKChyYW5nZSAqIHVucm91bmRlZCkgLyB0aGlzLnN0ZXApICogdGhpcy5zdGVwO1xuXHRcdHJldHVybiByb3VuZGVkICsgdGhpcy5taW47XG5cdH1cblxuXHQvKiogQ29udmVydHMgYSBnaXZlbiBcInJlYWxcIiB2YWx1ZSB0byBhIHB4IHZhbHVlIHdlIGNhbiB1cGRhdGUgdGhlIHZpZXcgd2l0aCAqL1xuXHRjb252ZXJ0VG9QeCh2YWx1ZSkge1xuXHRcdGlmICghdGhpcy50cmFjaykge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdHJhY2tXaWR0aCA9IHRoaXMudHJhY2submF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblx0XHRpZiAodmFsdWUgPj0gdGhpcy5tYXgpIHtcblx0XHRcdHJldHVybiB0cmFja1dpZHRoO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSA8PSB0aGlzLm1pbikge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gYWNjb3VudCBmb3IgdmFsdWUgc2hpZnRpbmcgYnkgc3VidHJhY3RpbmcgbWluIGZyb20gdmFsdWUgYW5kIG1heFxuXHRcdHJldHVybiBNYXRoLnJvdW5kKHRyYWNrV2lkdGggKiAoKHZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSk7XG5cdH1cblxuXHQvKipcblx0ICogSW5jcmVtZW50cyB0aGUgdmFsdWUgYnkgdGhlIHN0ZXAgdmFsdWUsIG9yIHRoZSBzdGVwIHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIGBtdWx0aXBsaWVyYCBhcmd1bWVudC5cblx0ICpcblx0ICogQGFyZ3VtZW50IG11bHRpcGxpZXIgRGVmYXVsdHMgdG8gYDFgLCBtdWx0aXBsaWVkIHdpdGggdGhlIHN0ZXAgdmFsdWUuXG5cdCAqL1xuXHRpbmNyZW1lbnRWYWx1ZShtdWx0aXBsaWVyID0gMSwgaW5kZXggPSAwKSB7XG5cdFx0dGhpcy5fdmFsdWVbaW5kZXhdID0gdGhpcy5fdmFsdWVbaW5kZXhdICsgKHRoaXMuc3RlcCAqIG11bHRpcGxpZXIpO1xuXHRcdHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlOyAvLyBydW4gdGhlIHNldHRlclxuXHR9XG5cblx0LyoqXG5cdCAqIERlY3JlbWVudHMgdGhlIHZhbHVlIGJ5IHRoZSBzdGVwIHZhbHVlLCBvciB0aGUgc3RlcCB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBgbXVsdGlwbGllcmAgYXJndW1lbnQuXG5cdCAqXG5cdCAqIEBhcmd1bWVudCBtdWx0aXBsaWVyIERlZmF1bHRzIHRvIGAxYCwgbXVsdGlwbGllZCB3aXRoIHRoZSBzdGVwIHZhbHVlLlxuXHQgKi9cblx0ZGVjcmVtZW50VmFsdWUobXVsdGlwbGllciA9IDEsIGluZGV4ID0gMCkge1xuXHRcdHRoaXMuX3ZhbHVlW2luZGV4XSA9IHRoaXMuX3ZhbHVlW2luZGV4XSAtICh0aGlzLnN0ZXAgKiBtdWx0aXBsaWVyKTtcblx0XHR0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTsgLy8gcnVuIHRoZSBzZXR0ZXJcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIGlmIHRoZSBzbGlkZXIgaXMgaW4gcmFuZ2UgbW9kZS5cblx0ICovXG5cdGlzUmFuZ2UoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlLmxlbmd0aCA+IDE7XG5cdH1cblxuXHQvKipcblx0ICogUmFuZ2UgbW9kZSBvbmx5LlxuXHQgKiBVcGRhdGVzIHRoZSB0cmFjayB3aWR0aCB0byBzcGFuIGZyb20gdGhlIGxvdyB0aHVtYiB0byB0aGUgaGlnaCB0aHVtYlxuXHQgKi9cblx0dXBkYXRlVHJhY2tSYW5nZVdpZHRoKCkge1xuXHRcdGNvbnN0IGZyYWN0aW9uID0gdGhpcy5nZXRGcmFjdGlvbkNvbXBsZXRlKHRoaXMuX3ZhbHVlWzBdKTtcblx0XHRjb25zdCBmcmFjdGlvbjIgPSB0aGlzLmdldEZyYWN0aW9uQ29tcGxldGUodGhpcy5fdmFsdWVbMV0pO1xuXHRcdHRoaXMuZmlsbGVkVHJhY2submF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7ZnJhY3Rpb24gKiAxMDB9JSwgLTUwJSkgJHt0aGlzLnNjYWxlWChmcmFjdGlvbjIgLSBmcmFjdGlvbil9YDtcblx0fVxuXG5cdC8qKiBDaGFuZ2UgaGFuZGxlciBmb3IgdGhlIG9wdGlvbmFsIGlucHV0ICovXG5cdG9uQ2hhbmdlKGV2ZW50LCBpbmRleCkge1xuXHRcdHRoaXMuX3ZhbHVlW2luZGV4XSA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgY2xpY2tzIG9uIHRoZSBzbGlkZXIsIGFuZCBzZXR0aW5nIHRoZSB2YWx1ZSB0byBpdCdzIFwicmVhbFwiIGVxdWl2YWxlbnQuXG5cdCAqIFdpbGwgYXNzaWduIHRoZSB2YWx1ZSB0byB0aGUgY2xvc2VzdCB0aHVtYiBpZiBpbiByYW5nZSBtb2RlLlxuXHQgKiAqL1xuXHRvbkNsaWNrKGV2ZW50KSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHsgcmV0dXJuOyB9XG5cdFx0Y29uc3QgdHJhY2tMZWZ0ID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0Y29uc3QgdHJhY2tWYWx1ZSA9IHRoaXMuY29udmVydFRvVmFsdWUoZXZlbnQuY2xpZW50WCAtIHRyYWNrTGVmdCk7XG5cdFx0aWYgKHRoaXMuaXNSYW5nZSgpKSB7XG5cdFx0XHRpZiAoTWF0aC5hYnModGhpcy5fdmFsdWVbMF0gLSB0cmFja1ZhbHVlKSA8IE1hdGguYWJzKHRoaXMuX3ZhbHVlWzFdIC0gdHJhY2tWYWx1ZSkpIHtcblx0XHRcdFx0dGhpcy5fdmFsdWVbMF0gPSB0cmFja1ZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fdmFsdWVbMV0gPSB0cmFja1ZhbHVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl92YWx1ZVswXSA9IHRyYWNrVmFsdWU7XG5cdFx0fVxuXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XG5cdH1cblxuXHQvKiogRm9jdXMgaGFuZGxlciBmb3IgdGhlIG9wdGlvbmFsIGlucHV0ICovXG5cdG9uRm9jdXMoe3RhcmdldH0pIHtcblx0XHR0YXJnZXQuc2VsZWN0KCk7XG5cdH1cblxuXHQvKiogTW91c2UgbW92ZSBoYW5kbGVyLiBSZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIHZhbHVlIGFuZCB2aXN1YWwgc2VsZWN0aW9uIGJhc2VkIG9uIG1vdXNlIG1vdmVtZW50ICovXG5cdG9uTW91c2VNb3ZlKGV2ZW50KSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaXNNb3VzZURvd24pIHsgcmV0dXJuOyB9XG5cdFx0Y29uc3QgdHJhY2sgPSB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHRsZXQgdmFsdWU7XG5cblx0XHRpZiAoXG5cdFx0XHRldmVudC5jbGllbnRYIC0gdHJhY2subGVmdCA8PSB0cmFjay53aWR0aFxuXHRcdFx0JiYgZXZlbnQuY2xpZW50WCAtIHRyYWNrLmxlZnQgPj0gMFxuXHRcdCkge1xuXHRcdFx0dmFsdWUgPSB0aGlzLmNvbnZlcnRUb1ZhbHVlKGV2ZW50LmNsaWVudFggLSB0cmFjay5sZWZ0KTtcblx0XHR9XG5cblx0XHQvLyBpZiB0aGUgbW91c2UgaXMgYmV5b25kIHRoZSBtYXgsIHNldCB0aGUgdmFsdWUgdG8gYG1heGBcblx0XHRpZiAoZXZlbnQuY2xpZW50WCAtIHRyYWNrLmxlZnQgPiB0cmFjay53aWR0aCkge1xuXHRcdFx0dmFsdWUgPSB0aGlzLm1heDtcblx0XHR9XG5cblx0XHQvLyBpZiB0aGUgbW91c2UgaXMgYmVsb3cgdGhlIG1pbiwgc2V0IHRoZSB2YWx1ZSB0byBgbWluYFxuXHRcdGlmIChldmVudC5jbGllbnRYIC0gdHJhY2subGVmdCA8IDApIHtcblx0XHRcdHZhbHVlID0gdGhpcy5taW47XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuX3ZhbHVlW3RoaXMuX2ZvY3VzZWRUaHVtYkluZGV4XSA9IHZhbHVlO1xuXHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEVuYWJsZXMgdGhlIGBvbk1vdXNlTW92ZWAgaGFuZGxlclxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHRodW1iIElmIHRydWUgdGhlbiBgdGh1bWJgIGlzIGNsaWNrZWQgZG93biwgb3RoZXJ3aXNlIGB0aHVtYjJgIGlzIGNsaWNrZWQgZG93bi5cblx0ICovXG5cdG9uTW91c2VEb3duKGV2ZW50LCBpbmRleCA9IDApIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmICh0aGlzLmRpc2FibGVkKSB7IHJldHVybjsgfVxuXHRcdHRoaXMuX2ZvY3VzZWRUaHVtYkluZGV4ID0gaW5kZXg7XG5cdFx0dGhpcy50aHVtYnMudG9BcnJheSgpW2luZGV4XS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0dGhpcy5pc01vdXNlRG93biA9IHRydWU7XG5cdH1cblxuXHQvKiogRGlzYWJsZXMgdGhlIGBvbk1vdXNlTW92ZWAgaGFuZGxlciAqL1xuXHRvbk1vdXNlVXAoKSB7XG5cdFx0dGhpcy5pc01vdXNlRG93biA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxzIGBpbmNyZW1lbnRWYWx1ZWAgZm9yIEFycm93UmlnaHQgYW5kIEFycm93VXAsIGBkZWNyZW1lbnRWYWx1ZWAgZm9yIEFycm93TGVmdCBhbmQgQXJyb3dEb3duLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHRodW1iIElmIHRydWUgdGhlbiBgdGh1bWJgIGlzIHByZXNzZWQgZG93biwgb3RoZXJ3aXNlIGB0aHVtYjJgIGlzIHByZXNzZWQgZG93bi5cblx0ICovXG5cdG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXggPSAwKSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZUFycm93S2V5cykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtdWx0aXBsaWVyID0gZXZlbnQuc2hpZnRLZXkgPyB0aGlzLnNoaWZ0TXVsdGlwbGllciA6IDE7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0xlZnRcIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcblx0XHRcdHRoaXMuZGVjcmVtZW50VmFsdWUobXVsdGlwbGllciwgaW5kZXgpO1xuXHRcdFx0dGhpcy50aHVtYnMudG9BcnJheSgpW2luZGV4XS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93UmlnaHRcIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSB7XG5cdFx0XHR0aGlzLmluY3JlbWVudFZhbHVlKG11bHRpcGxpZXIsIGluZGV4KTtcblx0XHRcdHRoaXMudGh1bWJzLnRvQXJyYXkoKVtpbmRleF0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgaXNUZW1wbGF0ZSh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuXHR9XG5cblx0LyoqIEdldCBvcHRpb25hbCBpbnB1dCBmaWVsZHMgKi9cblx0cHJvdGVjdGVkIGdldElucHV0cygpOiBIVE1MSW5wdXRFbGVtZW50W10ge1xuXHRcdHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXQ6bm90KFt0eXBlPXJhbmdlXSlcIik7XG5cdH1cbn1cbiJdfQ==
657
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksRUFHWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQ0c7QUF3R0gsTUFBTSxPQUFPLE1BQU07SUEySmxCLFlBQ1csVUFBc0IsRUFDdEIsWUFBMEIsRUFDNUIsZUFBa0M7UUFGaEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFySTNDLGlDQUFpQztRQUN4QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBc0VsQiwrSEFBK0g7UUFDdEgsT0FBRSxHQUFHLFVBQVUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDekMsaUZBQWlGO1FBQ3hFLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLHlDQUF5QztRQUNoQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRzFCLGlFQUFpRTtRQUN4RCxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUEwQmxDLCtDQUErQztRQUNyQyxnQkFBVyxHQUFvQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFPL0MsWUFBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDO1FBQzdCLGtCQUFhLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUM7UUFDMUMsZUFBVSxH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QUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRBZnRlclZpZXdJbml0LFxuXHRWaWV3Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGRyZW4sXG5cdFF1ZXJ5TGlzdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcblxuLyoqXG4gKiBVc2VkIHRvIHNlbGVjdCBmcm9tIHJhbmdlcyBvZiB2YWx1ZXMuIFtTZWUgaGVyZV0oaHR0cHM6Ly93d3cuY2FyYm9uZGVzaWduc3lzdGVtLmNvbS9jb21wb25lbnRzL3NsaWRlci91c2FnZSkgZm9yIHVzYWdlIGluZm9ybWF0aW9uLlxuICpcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU2xpZGVyTW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBUaGUgc2ltcGxlc3QgcG9zc2libGUgc2xpZGVyIHVzYWdlIGxvb2tzIHNvbWV0aGluZyBsaWtlOlxuICpcbiAqIGBgYGh0bWxcbiAqXHQ8Y2RzLXNsaWRlcj48L2Nkcy1zbGlkZXI+XG4gKiBgYGBcbiAqXG4gKiBUaGF0IHdpbGwgcmVuZGVyIGEgc2xpZGVyIHdpdGhvdXQgbGFiZWxzIG9yIGFsdGVybmF0aXZlIHZhbHVlIGlucHV0LiBMYWJlbHMgY2FuIGJlIHByb3ZpZGVkIGJ5XG4gKiBlbGVtZW50cyB3aXRoIGBbbWluTGFiZWxdYCBhbmQgYFttYXhMYWJlbF1gIGF0dHJpYnV0ZXMsIGFuZCBhbiBgaW5wdXRgIChtYXkgdXNlIHRoZSBgaWJtSW5wdXRgIGRpcmVjdGl2ZSkgY2FuIGJlIHN1cHBsaWVkXG4gKiBmb3IgdXNlIGFzIGFuIGFsdGVybmF0aXZlIHZhbHVlIGZpZWxkLlxuICpcbiAqIGV4OlxuICpcbiAqIGBgYGh0bWxcbiAqIDwhLS0gRnVsbCBleGFtcGxlIC0tPlxuICogPGNkcy1zbGlkZXI+XG4gKlx0XHQ8c3BhbiBtaW5MYWJlbD4wR0I8L3NwYW4+XG4gKlx0XHQ8c3BhbiBtYXhMYWJlbD4xMDBHQjwvc3Bhbj5cbiAqXHRcdDxpbnB1dC8+XG4gKiA8L2Nkcy1zbGlkZXI+XG4gKlxuICogPCEtLSB3aXRoIGp1c3QgYW4gaW5wdXQgLS0+XG4gKiA8Y2RzLXNsaWRlcj5cbiAqXHRcdDxpbnB1dC8+XG4gKiA8L2Nkcy1zbGlkZXI+XG4gKlxuICogPCEtLSB3aXRoIGp1c3Qgb25lIGxhYmVsIC0tPlxuICogPGNkcy1zbGlkZXI+XG4gKlx0XHQ8c3BhbiBtYXhMYWJlbD5NYXhpbXVtPC9zcGFuPlxuICogPC9jZHMtc2xpZGVyPlxuICogYGBgXG4gKlxuICogU2xpZGVyIHN1cHBvcnRzIGBOZ01vZGVsYCBieSBkZWZhdWx0LCBhcyB3ZWxsIGFzIHR3byB3YXkgYmluZGluZyB0byB0aGUgYHZhbHVlYCBpbnB1dC5cbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLXNsaWRlci0tYWR2YW5jZWQpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtc2xpZGVyLCBpYm0tc2xpZGVyXCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbjsgZWxzZSBza2VsZXRvblRlbXBsYXRlXCI+XG5cdFx0XHQ8bGFiZWxcblx0XHRcdFx0Km5nSWY9XCJsYWJlbFwiXG5cdFx0XHRcdFtmb3JdPVwiaWRcIlxuXHRcdFx0XHRbaWRdPVwibGFiZWxJZFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1sYWJlbC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGxhYmVsKVwiPnt7bGFiZWx9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGxhYmVsKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvbGFiZWw+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXItY29udGFpbmVyXCJcblx0XHRcdFx0W25nQ2xhc3NdPVwieyAnY2RzLS1zbGlkZXItY29udGFpbmVyLS1yZWFkb25seSc6IHJlYWRvbmx5IH1cIj5cblx0XHRcdFx0PGxhYmVsIFtpZF09XCJib3R0b21SYW5nZUlkXCIgY2xhc3M9XCJjZHMtLXNsaWRlcl9fcmFuZ2UtbGFiZWxcIj5cblx0XHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbbWluTGFiZWxdXCI+PC9uZy1jb250ZW50PlxuXHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXNsaWRlclwiXG5cdFx0XHRcdFx0KGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHRcdFx0J2Nkcy0tc2xpZGVyLS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuXHRcdFx0XHRcdFx0J2Nkcy0tc2xpZGVyLS1yZWFkb25seSc6IHJlYWRvbmx5XG5cdFx0XHRcdFx0fVwiPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNSYW5nZSgpXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RodW1iLXdyYXBwZXJcIlxuXHRcdFx0XHRcdFx0XHRbbmdTdHlsZV09XCJ7aW5zZXRJbmxpbmVTdGFydDogZ2V0RnJhY3Rpb25Db21wbGV0ZSh2YWx1ZSkgKiAxMDAgKyAnJSd9XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHQjdGh1bWJzXG5cdFx0XHRcdFx0XHRcdFx0cm9sZT1cInNsaWRlclwiXG5cdFx0XHRcdFx0XHRcdFx0W2lkXT1cImlkXCJcblx0XHRcdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxJZFwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXNsaWRlcl9fdGh1bWJcIlxuXHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0KG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFx0XHQoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JhbmdlKClcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlcl9fdGh1bWItd3JhcHBlclwiXG5cdFx0XHRcdFx0XHQgW25nU3R5bGVdPVwie2luc2V0SW5saW5lU3RhcnQ6IGdldEZyYWN0aW9uQ29tcGxldGUodGh1bWIpICogMTAwICsgJyUnfVwiXG5cdFx0XHRcdFx0XHQgKm5nRm9yPVwibGV0IHRodW1iIG9mIHZhbHVlOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja1RodW1ic0J5XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHQjdGh1bWJzXG5cdFx0XHRcdFx0XHRcdFx0cm9sZT1cInNsaWRlclwiXG5cdFx0XHRcdFx0XHRcdFx0W2lkXT1cImlkICsgKGkgPiAwID8gJy0nICsgaSA6ICcnKVwiXG5cdFx0XHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RodW1iXCJcblx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCBpKVwiXG5cdFx0XHRcdFx0XHRcdFx0KGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgaSlcIj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHQjdHJhY2tcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RyYWNrXCI+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0I2ZpbGxlZFRyYWNrXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tc2xpZGVyX19maWxsZWQtdHJhY2tcIj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8aW5wdXRcblx0XHRcdFx0XHRcdCNyYW5nZVxuXHRcdFx0XHRcdFx0YXJpYS1sYWJlbD1cInNsaWRlclwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tc2xpZGVyX19pbnB1dFwiXG5cdFx0XHRcdFx0XHR0eXBlPVwicmFuZ2VcIlxuXHRcdFx0XHRcdFx0W3N0ZXBdPVwic3RlcFwiXG5cdFx0XHRcdFx0XHRbbWluXT1cIm1pblwiXG5cdFx0XHRcdFx0XHRbbWF4XT1cIm1heFwiXG5cdFx0XHRcdFx0XHRbdmFsdWVdPVwidmFsdWUudG9TdHJpbmcoKVwiPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGxhYmVsIFtpZF09XCJ0b3BSYW5nZUlkXCIgY2xhc3M9XCJjZHMtLXNsaWRlcl9fcmFuZ2UtbGFiZWxcIj5cblx0XHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbbWF4TGFiZWxdXCI+PC9uZy1jb250ZW50PlxuXHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJpbnB1dFwiPjwvbmctY29udGVudD5cblx0XHRcdDwvZGl2PlxuXHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0PG5nLXRlbXBsYXRlICNza2VsZXRvblRlbXBsYXRlPlxuXHRcdFx0PGxhYmVsICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cImNkcy0tbGFiZWwgY2RzLS1za2VsZXRvblwiPjwvbGFiZWw+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zbGlkZXItY29udGFpbmVyIGNkcy0tc2tlbGV0b25cIj5cblx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLXNsaWRlcl9fcmFuZ2UtbGFiZWxcIj48L3NwYW4+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlclwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlcl9fdGh1bWJcIj48L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RyYWNrXCI+PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2xpZGVyX19maWxsZWQtdHJhY2tcIj48L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1zbGlkZXJfX3JhbmdlLWxhYmVsXCI+PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0YCxcblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogU2xpZGVyLFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXHQvKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzICovXG5cdHByaXZhdGUgc3RhdGljIGNvdW50ID0gMDtcblxuXHQvKiogVGhlIGxvd2VyIGJvdW5kIG9mIG91ciByYW5nZSAqL1xuXHRASW5wdXQoKSBzZXQgbWluKHYpIHtcblx0XHRpZiAoIXYpIHsgcmV0dXJuOyB9XG5cdFx0dGhpcy5fbWluID0gdjtcblx0XHQvLyBmb3JjZSB0aGUgY29tcG9uZW50IHRvIHVwZGF0ZVxuXHRcdHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlO1xuXHR9XG5cdGdldCBtaW4oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX21pbjtcblx0fVxuXHQvKiogVGhlIHVwcGVyIGJvdW5kIG9mIG91ciByYW5nZSAqL1xuXHRASW5wdXQoKSBzZXQgbWF4KHYpIHtcblx0XHRpZiAoIXYpIHsgcmV0dXJuOyB9XG5cdFx0dGhpcy5fbWF4ID0gdjtcblx0XHQvLyBmb3JjZSB0aGUgY29tcG9uZW50IHRvIHVwZGF0ZVxuXHRcdHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlO1xuXHR9XG5cblx0Z2V0IG1heCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fbWF4O1xuXHR9XG5cdC8qKiBUaGUgaW50ZXJ2YWwgZm9yIG91ciByYW5nZSAqL1xuXHRASW5wdXQoKSBzdGVwID0gMTtcblx0LyoqIFNldCB0aGUgaW5pdGlhbCB2YWx1ZS4gQXZhaWxhYmxlIGZvciB0d28gd2F5IGJpbmRpbmcgKi9cblx0QElucHV0KCkgc2V0IHZhbHVlKHYpIHtcblx0XHRpZiAoIXYpIHtcblx0XHRcdHYgPSBbdGhpcy5taW5dO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0diA9IFtOdW1iZXIodildO1xuXHRcdH1cblxuXHRcdGlmICh2WzBdIDwgdGhpcy5taW4pIHtcblx0XHRcdHZbMF0gPSB0aGlzLm1pbjtcblx0XHR9XG5cblx0XHRpZiAodlswXSA+IHRoaXMubWF4KSB7XG5cdFx0XHR2WzBdID0gdGhpcy5tYXg7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNSYW5nZSgpKSB7XG5cdFx0XHRpZiAodGhpcy5fcHJldmlvdXNWYWx1ZVswXSAhPT0gdlswXSkgeyAvLyBsZWZ0IG1vdmVkXG5cdFx0XHRcdGlmICh2WzBdID4gdlsxXSAtIHRoaXMuc3RlcCkge1xuXHRcdFx0XHRcdC8vIHN0b3AgdGhlIGxlZnQgaGFuZGxlIGlmIHN1cnBhc3NpbmcgdGhlIHJpZ2h0IG9uZVxuXHRcdFx0XHRcdHZbMF0gPSB2WzFdIC0gdGhpcy5zdGVwO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZbMF0gPiB0aGlzLm1heCkge1xuXHRcdFx0XHRcdHZbMF0gPSB0aGlzLm1heDtcblx0XHRcdFx0fSBlbHNlIGlmICh2WzBdIDwgdGhpcy5taW4pIHtcblx0XHRcdFx0XHR2WzBdID0gdGhpcy5taW47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX3ByZXZpb3VzVmFsdWVbMV0gIT09IHZbMV0pIHsgLy8gcmlnaHQgbW92ZWRcblx0XHRcdFx0aWYgKHZbMV0gPiB0aGlzLm1heCkge1xuXHRcdFx0XHRcdHZbMV0gPSB0aGlzLm1heDtcblx0XHRcdFx0fSBlbHNlIGlmICh2WzFdIDwgdGhpcy5fdmFsdWVbMF0gKyB0aGlzLnN0ZXApIHtcblx0XHRcdFx0XHQvLyBzdG9wIHRoZSByaWdodCBoYW5kbGUgaWYgc3VycGFzc2luZyB0aGUgbGVmdCBvbmVcblx0XHRcdFx0XHR2WzFdID0gdGhpcy5fdmFsdWVbMF0gKyB0aGlzLnN0ZXA7XG5cdFx0XHRcdH0gZWxzZSBpZiAodlsxXSA8IHRoaXMubWluKSB7XG5cdFx0XHRcdFx0dlsxXSA9IHRoaXMubWluO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fcHJldmlvdXNWYWx1ZSA9IFsuLi50aGlzLl92YWx1ZV07IC8vIHN0b3JlIGEgY29weSwgZW5hYmxlIGRldGVjdGlvbiB3aGljaCBoYW5kbGUgbW92ZWRcblx0XHR0aGlzLl92YWx1ZSA9IFsuLi52XTsgLy8gdHJpZ2dlcnMgY2hhbmdlIGRldGVjdGlvbiB3aGVuIG5nTW9kZWwgdmFsdWUgaXMgYW4gYXJyYXkgKGZvciByYW5nZSlcblxuXHRcdGlmICh0aGlzLmlzUmFuZ2UoKSAmJiB0aGlzLmZpbGxlZFRyYWNrKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZVRyYWNrUmFuZ2VXaWR0aCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5maWxsZWRUcmFjaykge1xuXHRcdFx0dGhpcy5maWxsZWRUcmFjay5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoMCUsIC01MCUpICR7dGhpcy5zY2FsZVgodGhpcy5nZXRGcmFjdGlvbkNvbXBsZXRlKHZbMF0pKX1gO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmlucHV0cyAmJiB0aGlzLmlucHV0cy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRpbnB1dC52YWx1ZSA9IHRoaXMuX3ZhbHVlW2luZGV4XS50b1N0cmluZygpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWVUb0VtaXQgPSB0aGlzLmlzUmFuZ2UoKSA/IHYgOiB2WzBdO1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbHVlVG9FbWl0KTtcblx0XHR0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVUb0VtaXQpO1xuXHR9XG5cblx0Z2V0IHZhbHVlKCkge1xuXHRcdGlmICh0aGlzLmlzUmFuZ2UoKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3ZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fdmFsdWVbMF07XG5cdH1cblxuXHQvKiogQmFzZSBJRCBmb3IgdGhlIHNsaWRlci4gVGhlIG1pbiBhbmQgbWF4IGxhYmVscyBnZXQgSURzIGAke3RoaXMuaWR9LWJvdHRvbS1yYW5nZWAgYW5kIGAke3RoaXMuaWR9LXRvcC1yYW5nZWAgcmVzcGVjdGl2ZWx5ICovXG5cdEBJbnB1dCgpIGlkID0gYHNsaWRlci0ke1NsaWRlci5jb3VudCsrfWA7XG5cdC8qKiBWYWx1ZSB1c2VkIHRvIFwibXVsdGlwbHlcIiB0aGUgYHN0ZXBgIHdoZW4gdXNpbmcgYXJyb3cga2V5cyB0byBzZWxlY3QgdmFsdWVzICovXG5cdEBJbnB1dCgpIHNoaWZ0TXVsdGlwbGllciA9IDQ7XG5cdC8qKiBTZXQgdG8gYHRydWVgIGZvciBhIGxvYWRpbmcgc2xpZGVyICovXG5cdEBJbnB1dCgpIHNrZWxldG9uID0gZmFsc2U7XG5cdC8qKiBTZXRzIHRoZSB0ZXh0IGluc2lkZSB0aGUgYGxhYmVsYCB0YWcgKi9cblx0QElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKiBTZXQgdG8gYHRydWVgIGZvciBhIHNsaWRlciB3aXRob3V0IGFycm93IGtleSBpbnRlcmFjdGlvbnMuICovXG5cdEBJbnB1dCgpIGRpc2FibGVBcnJvd0tleXMgPSBmYWxzZTtcblx0LyoqIERpc2FibGVzIHRoZSByYW5nZSB2aXN1YWxseSBhbmQgZnVuY3Rpb25hbGx5ICovXG5cdEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2KSB7XG5cdFx0dGhpcy5fZGlzYWJsZWQgPSB2O1xuXHRcdC8vIGZvciBzb21lIHJlYXNvbiBgdGhpcy5pbnB1dGAgbmV2ZXIgZXhpc3RzIGhlcmUsIHNvIHdlIGhhdmUgdG8gcXVlcnkgZm9yIGl0IGhlcmUgdG9vXG5cdFx0Y29uc3QgaW5wdXRzID0gdGhpcy5nZXRJbnB1dHMoKTtcblx0XHRpZiAoaW5wdXRzICYmIGlucHV0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiBpbnB1dC5kaXNhYmxlZCA9IHYpO1xuXHRcdH1cblx0fVxuXG5cdGdldCBkaXNhYmxlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG5cdH1cblx0LyoqIFNldCB0byBgdHJ1ZWAgZm9yIGEgcmVhZG9ubHkgc3RhdGUuICovXG5cdEBJbnB1dCgpIHNldCByZWFkb25seSh2OiBib29sZWFuKSB7XG5cdFx0dGhpcy5fcmVhZG9ubHkgPSB2O1xuXHRcdC8vIGZvciBzb21lIHJlYXNvbiBgdGhpcy5pbnB1dGAgbmV2ZXIgZXhpc3RzIGhlcmUsIHNvIHdlIGhhdmUgdG8gcXVlcnkgZm9yIGl0IGhlcmUgdG9vXG5cdFx0Y29uc3QgaW5wdXRzID0gdGhpcy5nZXRJbnB1dHMoKTtcblx0XHRpZiAoaW5wdXRzICYmIGlucHV0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiBpbnB1dC5yZWFkT25seSA9IHYpO1xuXHRcdH1cblx0fVxuXHRnZXQgcmVhZG9ubHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuXHR9XG5cdC8qKiBFbWl0cyBldmVyeSB0aW1lIGEgbmV3IHZhbHVlIGlzIHNlbGVjdGVkICovXG5cdEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bWJlcltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1mb3JtLWl0ZW1cIikgaG9zdENsYXNzID0gdHJ1ZTtcblx0QFZpZXdDaGlsZHJlbihcInRodW1ic1wiKSB0aHVtYnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuXHRAVmlld0NoaWxkKFwidHJhY2tcIikgdHJhY2s6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoXCJmaWxsZWRUcmFja1wiKSBmaWxsZWRUcmFjazogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZChcInJhbmdlXCIpIHJhbmdlOiBFbGVtZW50UmVmO1xuXG5cdHB1YmxpYyBsYWJlbElkID0gYCR7dGhpcy5pZH0tbGFiZWxgO1xuXHRwdWJsaWMgYm90dG9tUmFuZ2VJZCA9IGAke3RoaXMuaWR9LWJvdHRvbS1yYW5nZWA7XG5cdHB1YmxpYyB0b3BSYW5nZUlkID0gYCR7dGhpcy5pZH0tdG9wLXJhbmdlYDtcblx0cHVibGljIGZyYWN0aW9uQ29tcGxldGUgPSAwO1xuXG5cdHByb3RlY3RlZCBpc01vdXNlRG93biA9IGZhbHNlO1xuXHRwcm90ZWN0ZWQgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W107XG5cdHByb3RlY3RlZCBfbWluID0gMDtcblx0cHJvdGVjdGVkIF9tYXggPSAxMDA7XG5cdHByb3RlY3RlZCBfdmFsdWUgPSBbdGhpcy5taW5dO1xuXHRwcm90ZWN0ZWQgX3ByZXZpb3VzVmFsdWUgPSBbdGhpcy5taW5dO1xuXHRwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG5cdHByb3RlY3RlZCBfcmVhZG9ubHkgPSBmYWxzZTtcblx0cHJvdGVjdGVkIF9mb2N1c2VkVGh1bWJJbmRleCA9IDA7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJvdGVjdGVkIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3RvclJlZlxuXHQpIHt9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdC8vIGJpbmQgbW91c2Vtb3ZlIGFuZCBtb3VzZXVwIHRvIHRoZSBkb2N1bWVudCBzbyB3ZSBkb24ndCBoYXZlIGlzc3VlcyB0cmFja2luZyB0aGUgbW91c2Vcblx0XHR0aGlzLmV2ZW50U2VydmljZS5vbkRvY3VtZW50KFwibW91c2Vtb3ZlXCIsIHRoaXMub25Nb3VzZU1vdmUuYmluZCh0aGlzKSk7XG5cdFx0dGhpcy5ldmVudFNlcnZpY2Uub25Eb2N1bWVudChcIm1vdXNldXBcIiwgdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKSk7XG5cblx0XHQvLyBhcHBseSBhbnkgdmFsdWVzIHdlIGdvdCBmcm9tIGJlZm9yZSB0aGUgdmlldyBpbml0aWFsaXplZFxuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKTtcblxuXHRcdC8vIFRPRE86IG9udG91Y2hzdGFydC9vbnRvdWNobW92ZS9vbnRvdWNoZW5kXG5cblx0XHQvLyBzZXQgdXAgdGhlIG9wdGlvbmFsIGlucHV0XG5cdFx0dGhpcy5pbnB1dHMgPSB0aGlzLmdldElucHV0cygpO1xuXHRcdGlmICh0aGlzLmlucHV0cyAmJiB0aGlzLmlucHV0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcblx0XHRcdFx0aW5wdXQudHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHRcdGlucHV0LmNsYXNzTGlzdC5hZGQoXCJjZHMtLXNsaWRlci10ZXh0LWlucHV0XCIpO1xuXHRcdFx0XHRpbnB1dC5jbGFzc0xpc3QuYWRkKFwiY2RzLS10ZXh0LWlucHV0XCIpO1xuXHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsbGVkYnlcIiwgYCR7dGhpcy5ib3R0b21SYW5nZUlkfSAke3RoaXMudG9wUmFuZ2VJZH1gKTtcblxuXHRcdFx0XHRpbnB1dC52YWx1ZSA9IGluZGV4IDwgdGhpcy5fdmFsdWUubGVuZ3RoID8gdGhpcy5fdmFsdWVbaW5kZXhdLnRvU3RyaW5nKCkgOiB0aGlzLm1heC50b1N0cmluZygpO1xuXHRcdFx0XHQvLyBiaW5kIGV2ZW50cyBvbiBvdXIgb3B0aW9uYWwgaW5wdXRcblx0XHRcdFx0dGhpcy5ldmVudFNlcnZpY2Uub24oaW5wdXQsIFwiY2hhbmdlXCIsIGV2ZW50ID0+IHRoaXMub25DaGFuZ2UoZXZlbnQsIGluZGV4KSk7XG5cblx0XHRcdFx0aWYgKGluZGV4ID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5ldmVudFNlcnZpY2Uub24oaW5wdXQsIFwiZm9jdXNcIiwgdGhpcy5vbkZvY3VzLmJpbmQodGhpcykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHR0cmFja1RodW1ic0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuXHRcdHJldHVybiBpbmRleDtcblx0fVxuXG5cdC8qKiBTZW5kIGNoYW5nZXMgYmFjayB0byB0aGUgbW9kZWwgKi9cblx0cHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuXG5cdC8qKiBSZWdpc3RlciBhIGNoYW5nZSBwcm9wYWdhdGlvbiBmdW5jdGlvbiBmb3IgYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCAqL1xuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuXHR9XG5cblx0LyoqIENhbGxiYWNrIHRvIG5vdGlmeSB0aGUgbW9kZWwgd2hlbiBvdXIgaW5wdXQgaGFzIGJlZW4gdG91Y2hlZCAqL1xuXHRvblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IHsgfTtcblxuXHQvKiogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBub3RpZnkgd2hlbiBvdXIgaW5wdXQgaGFzIGJlZW4gdG91Y2hlZCAqL1xuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG5cdFx0dGhpcy5vblRvdWNoZWQgPSBmbjtcblx0fVxuXG5cdC8qKiBSZWNlaXZlcyBhIHZhbHVlIGZyb20gdGhlIG1vZGVsICovXG5cdHdyaXRlVmFsdWUodjogYW55KSB7XG5cdFx0dGhpcy52YWx1ZSA9IHY7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYW1vdW50IG9mIFwiY29tcGxldGVuZXNzXCIgb2YgYSB2YWx1ZSBhcyBhIGZyYWN0aW9uIG9mIHRoZSB0b3RhbCB0cmFjayB3aWR0aFxuXHQgKi9cblx0Z2V0RnJhY3Rpb25Db21wbGV0ZSh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLnRyYWNrKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRjb25zdCB0cmFja1dpZHRoID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXHRcdHJldHVybiB0aGlzLmNvbnZlcnRUb1B4KHZhbHVlKSAvIHRyYWNrV2lkdGg7XG5cdH1cblxuXHQvKiogSGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgQ1NTIHRyYW5zZm9ybSBgc2NhbGVYYCBmdW5jdGlvbiAqL1xuXHRzY2FsZVgoY29tcGxldGUpIHtcblx0XHRyZXR1cm4gYHNjYWxlWCgke2NvbXBsZXRlfSlgO1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgZ2l2ZW4gcHggdmFsdWUgdG8gYSBcInJlYWxcIiB2YWx1ZSBpbiBvdXIgcmFuZ2UgKi9cblx0Y29udmVydFRvVmFsdWUocHhBbW91bnQpIHtcblx0XHQvLyBiYXNpYyBjb25jZXB0IGJvcnJvd2VkIGZyb20gY2FyYm9uLWNvbXBvbmVudHNcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vY2FyYm9uLWRlc2lnbi1zeXN0ZW0vY2FyYm9uL2Jsb2IvNDNiZjNhYmRjMmY4YmRhYTM4YWE4NGUwZjczM2FkZGUxZTFlODg5NC9zcmMvY29tcG9uZW50cy9zbGlkZXIvc2xpZGVyLmpzI0wxNDctTDE1MVxuXHRcdGNvbnN0IHJhbmdlID0gdGhpcy5tYXggLSB0aGlzLm1pbjtcblx0XHRjb25zdCB0cmFja1dpZHRoID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXHRcdGNvbnN0IHVucm91bmRlZCA9IHB4QW1vdW50IC8gdHJhY2tXaWR0aDtcblx0XHRjb25zdCByb3VuZGVkID0gTWF0aC5yb3VuZCgocmFuZ2UgKiB1bnJvdW5kZWQpIC8gdGhpcy5zdGVwKSAqIHRoaXMuc3RlcDtcblx0XHRyZXR1cm4gcm91bmRlZCArIHRoaXMubWluO1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgZ2l2ZW4gXCJyZWFsXCIgdmFsdWUgdG8gYSBweCB2YWx1ZSB3ZSBjYW4gdXBkYXRlIHRoZSB2aWV3IHdpdGggKi9cblx0Y29udmVydFRvUHgodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMudHJhY2spIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRyYWNrV2lkdGggPSB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0aWYgKHZhbHVlID49IHRoaXMubWF4KSB7XG5cdFx0XHRyZXR1cm4gdHJhY2tXaWR0aDtcblx0XHR9XG5cblx0XHRpZiAodmFsdWUgPD0gdGhpcy5taW4pIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIGFjY291bnQgZm9yIHZhbHVlIHNoaWZ0aW5nIGJ5IHN1YnRyYWN0aW5nIG1pbiBmcm9tIHZhbHVlIGFuZCBtYXhcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCh0cmFja1dpZHRoICogKCh2YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluY3JlbWVudHMgdGhlIHZhbHVlIGJ5IHRoZSBzdGVwIHZhbHVlLCBvciB0aGUgc3RlcCB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBgbXVsdGlwbGllcmAgYXJndW1lbnQuXG5cdCAqXG5cdCAqIEBhcmd1bWVudCBtdWx0aXBsaWVyIERlZmF1bHRzIHRvIGAxYCwgbXVsdGlwbGllZCB3aXRoIHRoZSBzdGVwIHZhbHVlLlxuXHQgKi9cblx0aW5jcmVtZW50VmFsdWUobXVsdGlwbGllciA9IDEsIGluZGV4ID0gMCkge1xuXHRcdHRoaXMuX3ZhbHVlW2luZGV4XSA9IHRoaXMuX3ZhbHVlW2luZGV4XSArICh0aGlzLnN0ZXAgKiBtdWx0aXBsaWVyKTtcblx0XHR0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTsgLy8gcnVuIHRoZSBzZXR0ZXJcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWNyZW1lbnRzIHRoZSB2YWx1ZSBieSB0aGUgc3RlcCB2YWx1ZSwgb3IgdGhlIHN0ZXAgdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgYG11bHRpcGxpZXJgIGFyZ3VtZW50LlxuXHQgKlxuXHQgKiBAYXJndW1lbnQgbXVsdGlwbGllciBEZWZhdWx0cyB0byBgMWAsIG11bHRpcGxpZWQgd2l0aCB0aGUgc3RlcCB2YWx1ZS5cblx0ICovXG5cdGRlY3JlbWVudFZhbHVlKG11bHRpcGxpZXIgPSAxLCBpbmRleCA9IDApIHtcblx0XHR0aGlzLl92YWx1ZVtpbmRleF0gPSB0aGlzLl92YWx1ZVtpbmRleF0gLSAodGhpcy5zdGVwICogbXVsdGlwbGllcik7XG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7IC8vIHJ1biB0aGUgc2V0dGVyXG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiB0aGUgc2xpZGVyIGlzIGluIHJhbmdlIG1vZGUuXG5cdCAqL1xuXHRpc1JhbmdlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl92YWx1ZS5sZW5ndGggPiAxO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJhbmdlIG1vZGUgb25seS5cblx0ICogVXBkYXRlcyB0aGUgdHJhY2sgd2lkdGggdG8gc3BhbiBmcm9tIHRoZSBsb3cgdGh1bWIgdG8gdGhlIGhpZ2ggdGh1bWJcblx0ICovXG5cdHVwZGF0ZVRyYWNrUmFuZ2VXaWR0aCgpIHtcblx0XHRjb25zdCBmcmFjdGlvbiA9IHRoaXMuZ2V0RnJhY3Rpb25Db21wbGV0ZSh0aGlzLl92YWx1ZVswXSk7XG5cdFx0Y29uc3QgZnJhY3Rpb24yID0gdGhpcy5nZXRGcmFjdGlvbkNvbXBsZXRlKHRoaXMuX3ZhbHVlWzFdKTtcblx0XHR0aGlzLmZpbGxlZFRyYWNrLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2ZyYWN0aW9uICogMTAwfSUsIC01MCUpICR7dGhpcy5zY2FsZVgoZnJhY3Rpb24yIC0gZnJhY3Rpb24pfWA7XG5cdH1cblxuXHQvKiogQ2hhbmdlIGhhbmRsZXIgZm9yIHRoZSBvcHRpb25hbCBpbnB1dCAqL1xuXHRvbkNoYW5nZShldmVudCwgaW5kZXgpIHtcblx0XHR0aGlzLl92YWx1ZVtpbmRleF0gPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcblx0XHR0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGNsaWNrcyBvbiB0aGUgc2xpZGVyLCBhbmQgc2V0dGluZyB0aGUgdmFsdWUgdG8gaXQncyBcInJlYWxcIiBlcXVpdmFsZW50LlxuXHQgKiBXaWxsIGFzc2lnbiB0aGUgdmFsdWUgdG8gdGhlIGNsb3Nlc3QgdGh1bWIgaWYgaW4gcmFuZ2UgbW9kZS5cblx0ICogKi9cblx0b25DbGljayhldmVudCkge1xuXHRcdGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHsgcmV0dXJuOyB9XG5cdFx0Y29uc3QgdHJhY2tMZWZ0ID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0Y29uc3QgdHJhY2tWYWx1ZSA9IHRoaXMuY29udmVydFRvVmFsdWUoZXZlbnQuY2xpZW50WCAtIHRyYWNrTGVmdCk7XG5cdFx0aWYgKHRoaXMuaXNSYW5nZSgpKSB7XG5cdFx0XHRpZiAoTWF0aC5hYnModGhpcy5fdmFsdWVbMF0gLSB0cmFja1ZhbHVlKSA8IE1hdGguYWJzKHRoaXMuX3ZhbHVlWzFdIC0gdHJhY2tWYWx1ZSkpIHtcblx0XHRcdFx0dGhpcy5fdmFsdWVbMF0gPSB0cmFja1ZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fdmFsdWVbMV0gPSB0cmFja1ZhbHVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl92YWx1ZVswXSA9IHRyYWNrVmFsdWU7XG5cdFx0fVxuXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XG5cdH1cblxuXHQvKiogRm9jdXMgaGFuZGxlciBmb3IgdGhlIG9wdGlvbmFsIGlucHV0ICovXG5cdG9uRm9jdXMoe3RhcmdldH0pIHtcblx0XHR0YXJnZXQuc2VsZWN0KCk7XG5cdH1cblxuXHQvKiogTW91c2UgbW92ZSBoYW5kbGVyLiBSZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIHZhbHVlIGFuZCB2aXN1YWwgc2VsZWN0aW9uIGJhc2VkIG9uIG1vdXNlIG1vdmVtZW50ICovXG5cdG9uTW91c2VNb3ZlKGV2ZW50KSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSB8fCAhdGhpcy5pc01vdXNlRG93bikgeyByZXR1cm47IH1cblx0XHRjb25zdCB0cmFjayA9IHRoaXMudHJhY2submF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdGxldCB2YWx1ZTtcblxuXHRcdGlmIChcblx0XHRcdGV2ZW50LmNsaWVudFggLSB0cmFjay5sZWZ0IDw9IHRyYWNrLndpZHRoXG5cdFx0XHQmJiBldmVudC5jbGllbnRYIC0gdHJhY2subGVmdCA+PSAwXG5cdFx0KSB7XG5cdFx0XHR2YWx1ZSA9IHRoaXMuY29udmVydFRvVmFsdWUoZXZlbnQuY2xpZW50WCAtIHRyYWNrLmxlZnQpO1xuXHRcdH1cblxuXHRcdC8vIGlmIHRoZSBtb3VzZSBpcyBiZXlvbmQgdGhlIG1heCwgc2V0IHRoZSB2YWx1ZSB0byBgbWF4YFxuXHRcdGlmIChldmVudC5jbGllbnRYIC0gdHJhY2subGVmdCA+IHRyYWNrLndpZHRoKSB7XG5cdFx0XHR2YWx1ZSA9IHRoaXMubWF4O1xuXHRcdH1cblxuXHRcdC8vIGlmIHRoZSBtb3VzZSBpcyBiZWxvdyB0aGUgbWluLCBzZXQgdGhlIHZhbHVlIHRvIGBtaW5gXG5cdFx0aWYgKGV2ZW50LmNsaWVudFggLSB0cmFjay5sZWZ0IDwgMCkge1xuXHRcdFx0dmFsdWUgPSB0aGlzLm1pbjtcblx0XHR9XG5cblx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fdmFsdWVbdGhpcy5fZm9jdXNlZFRodW1iSW5kZXhdID0gdmFsdWU7XG5cdFx0XHR0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRW5hYmxlcyB0aGUgYG9uTW91c2VNb3ZlYCBoYW5kbGVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gdGh1bWIgSWYgdHJ1ZSB0aGVuIGB0aHVtYmAgaXMgY2xpY2tlZCBkb3duLCBvdGhlcndpc2UgYHRodW1iMmAgaXMgY2xpY2tlZCBkb3duLlxuXHQgKi9cblx0b25Nb3VzZURvd24oZXZlbnQsIGluZGV4ID0gMCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgeyByZXR1cm47IH1cblx0XHR0aGlzLl9mb2N1c2VkVGh1bWJJbmRleCA9IGluZGV4O1xuXHRcdHRoaXMudGh1bWJzLnRvQXJyYXkoKVtpbmRleF0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdHRoaXMuaXNNb3VzZURvd24gPSB0cnVlO1xuXHR9XG5cblx0LyoqIERpc2FibGVzIHRoZSBgb25Nb3VzZU1vdmVgIGhhbmRsZXIgKi9cblx0b25Nb3VzZVVwKCkge1xuXHRcdHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxscyBgaW5jcmVtZW50VmFsdWVgIGZvciBBcnJvd1JpZ2h0IGFuZCBBcnJvd1VwLCBgZGVjcmVtZW50VmFsdWVgIGZvciBBcnJvd0xlZnQgYW5kIEFycm93RG93bi5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSB0aHVtYiBJZiB0cnVlIHRoZW4gYHRodW1iYCBpcyBwcmVzc2VkIGRvd24sIG90aGVyd2lzZSBgdGh1bWIyYCBpcyBwcmVzc2VkIGRvd24uXG5cdCAqL1xuXHRvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4ID0gMCkge1xuXHRcdGlmICh0aGlzLmRpc2FibGVBcnJvd0tleXMgfHwgdGhpcy5yZWFkb25seSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtdWx0aXBsaWVyID0gZXZlbnQuc2hpZnRLZXkgPyB0aGlzLnNoaWZ0TXVsdGlwbGllciA6IDE7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0xlZnRcIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcblx0XHRcdHRoaXMuZGVjcmVtZW50VmFsdWUobXVsdGlwbGllciwgaW5kZXgpO1xuXHRcdFx0dGhpcy50aHVtYnMudG9BcnJheSgpW2luZGV4XS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93UmlnaHRcIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSB7XG5cdFx0XHR0aGlzLmluY3JlbWVudFZhbHVlKG11bHRpcGxpZXIsIGluZGV4KTtcblx0XHRcdHRoaXMudGh1bWJzLnRvQXJyYXkoKVtpbmRleF0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgaXNUZW1wbGF0ZSh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuXHR9XG5cblx0LyoqIEdldCBvcHRpb25hbCBpbnB1dCBmaWVsZHMgKi9cblx0cHJvdGVjdGVkIGdldElucHV0cygpOiBIVE1MSW5wdXRFbGVtZW50W10ge1xuXHRcdHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXQ6bm90KFt0eXBlPXJhbmdlXSlcIik7XG5cdH1cbn1cbiJdfQ==