@pie-lib/config-ui 11.30.3-next.2 → 11.30.4-next.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 (145) hide show
  1. package/CHANGELOG.md +7 -78
  2. package/lib/__tests__/alert-dialog.test.js +262 -0
  3. package/lib/__tests__/checkbox.test.js +227 -0
  4. package/lib/__tests__/choice-utils.test.js +14 -0
  5. package/lib/__tests__/form-section.test.js +252 -0
  6. package/lib/__tests__/help.test.js +270 -0
  7. package/lib/__tests__/input.test.js +268 -0
  8. package/lib/__tests__/langs.test.js +541 -0
  9. package/lib/__tests__/number-text-field-custom.test.js +362 -0
  10. package/lib/__tests__/number-text-field.test.js +421 -0
  11. package/lib/__tests__/radio-with-label.test.js +233 -0
  12. package/lib/__tests__/settings-panel.test.js +184 -0
  13. package/lib/__tests__/settings.test.js +653 -0
  14. package/lib/__tests__/tabs.test.js +211 -0
  15. package/lib/__tests__/two-choice.test.js +124 -0
  16. package/lib/__tests__/with-stateful-model.test.js +221 -0
  17. package/lib/alert-dialog.js +36 -43
  18. package/lib/alert-dialog.js.map +1 -1
  19. package/lib/checkbox.js +57 -72
  20. package/lib/checkbox.js.map +1 -1
  21. package/lib/choice-configuration/__tests__/feedback-menu.test.js +287 -0
  22. package/lib/choice-configuration/__tests__/index.test.js +253 -0
  23. package/lib/choice-configuration/feedback-menu.js +30 -65
  24. package/lib/choice-configuration/feedback-menu.js.map +1 -1
  25. package/lib/choice-configuration/index.js +203 -263
  26. package/lib/choice-configuration/index.js.map +1 -1
  27. package/lib/choice-utils.js +7 -19
  28. package/lib/choice-utils.js.map +1 -1
  29. package/lib/feedback-config/__tests__/feedback-config.test.js +201 -0
  30. package/lib/feedback-config/__tests__/feedback-selector.test.js +177 -0
  31. package/lib/feedback-config/feedback-selector.js +80 -116
  32. package/lib/feedback-config/feedback-selector.js.map +1 -1
  33. package/lib/feedback-config/group.js +27 -41
  34. package/lib/feedback-config/group.js.map +1 -1
  35. package/lib/feedback-config/index.js +48 -91
  36. package/lib/feedback-config/index.js.map +1 -1
  37. package/lib/form-section.js +32 -34
  38. package/lib/form-section.js.map +1 -1
  39. package/lib/help.js +40 -81
  40. package/lib/help.js.map +1 -1
  41. package/lib/index.js +2 -32
  42. package/lib/index.js.map +1 -1
  43. package/lib/input.js +22 -55
  44. package/lib/input.js.map +1 -1
  45. package/lib/inputs.js +62 -96
  46. package/lib/inputs.js.map +1 -1
  47. package/lib/langs.js +59 -102
  48. package/lib/langs.js.map +1 -1
  49. package/lib/layout/__tests__/config.layout.test.js +70 -0
  50. package/lib/layout/__tests__/layout-content.test.js +6 -0
  51. package/lib/layout/config-layout.js +41 -71
  52. package/lib/layout/config-layout.js.map +1 -1
  53. package/lib/layout/index.js +1 -4
  54. package/lib/layout/index.js.map +1 -1
  55. package/lib/layout/layout-contents.js +73 -104
  56. package/lib/layout/layout-contents.js.map +1 -1
  57. package/lib/layout/settings-box.js +28 -57
  58. package/lib/layout/settings-box.js.map +1 -1
  59. package/lib/mui-box/index.js +42 -58
  60. package/lib/mui-box/index.js.map +1 -1
  61. package/lib/number-text-field-custom.js +80 -162
  62. package/lib/number-text-field-custom.js.map +1 -1
  63. package/lib/number-text-field.js +81 -115
  64. package/lib/number-text-field.js.map +1 -1
  65. package/lib/radio-with-label.js +31 -32
  66. package/lib/radio-with-label.js.map +1 -1
  67. package/lib/settings/display-size.js +17 -33
  68. package/lib/settings/display-size.js.map +1 -1
  69. package/lib/settings/index.js +15 -48
  70. package/lib/settings/index.js.map +1 -1
  71. package/lib/settings/panel.js +160 -230
  72. package/lib/settings/panel.js.map +1 -1
  73. package/lib/settings/settings-radio-label.js +29 -31
  74. package/lib/settings/settings-radio-label.js.map +1 -1
  75. package/lib/settings/toggle.js +36 -47
  76. package/lib/settings/toggle.js.map +1 -1
  77. package/lib/tabs/index.js +23 -58
  78. package/lib/tabs/index.js.map +1 -1
  79. package/lib/tags-input/__tests__/index.test.js +183 -0
  80. package/lib/tags-input/index.js +51 -100
  81. package/lib/tags-input/index.js.map +1 -1
  82. package/lib/two-choice.js +47 -91
  83. package/lib/two-choice.js.map +1 -1
  84. package/lib/with-stateful-model.js +9 -32
  85. package/lib/with-stateful-model.js.map +1 -1
  86. package/package.json +12 -20
  87. package/src/__tests__/alert-dialog.test.jsx +283 -0
  88. package/src/__tests__/checkbox.test.jsx +249 -0
  89. package/src/__tests__/form-section.test.jsx +334 -0
  90. package/src/__tests__/help.test.jsx +184 -0
  91. package/src/__tests__/input.test.jsx +192 -0
  92. package/src/__tests__/langs.test.jsx +435 -15
  93. package/src/__tests__/number-text-field-custom.test.jsx +438 -0
  94. package/src/__tests__/number-text-field.test.jsx +295 -102
  95. package/src/__tests__/radio-with-label.test.jsx +259 -0
  96. package/src/__tests__/settings-panel.test.js +66 -83
  97. package/src/__tests__/settings.test.jsx +515 -0
  98. package/src/__tests__/tabs.test.jsx +193 -0
  99. package/src/__tests__/two-choice.test.js +104 -18
  100. package/src/__tests__/with-stateful-model.test.jsx +145 -0
  101. package/src/alert-dialog.jsx +21 -19
  102. package/src/checkbox.jsx +42 -46
  103. package/src/choice-configuration/__tests__/feedback-menu.test.jsx +157 -4
  104. package/src/choice-configuration/__tests__/index.test.jsx +198 -56
  105. package/src/choice-configuration/feedback-menu.jsx +6 -6
  106. package/src/choice-configuration/index.jsx +201 -196
  107. package/src/feedback-config/__tests__/feedback-config.test.jsx +130 -60
  108. package/src/feedback-config/__tests__/feedback-selector.test.jsx +87 -40
  109. package/src/feedback-config/feedback-selector.jsx +52 -53
  110. package/src/feedback-config/group.jsx +21 -22
  111. package/src/feedback-config/index.jsx +27 -29
  112. package/src/form-section.jsx +26 -18
  113. package/src/help.jsx +20 -28
  114. package/src/input.jsx +1 -1
  115. package/src/inputs.jsx +34 -50
  116. package/src/langs.jsx +41 -46
  117. package/src/layout/__tests__/config.layout.test.jsx +55 -38
  118. package/src/layout/config-layout.jsx +38 -32
  119. package/src/layout/layout-contents.jsx +38 -39
  120. package/src/layout/settings-box.jsx +16 -19
  121. package/src/mui-box/index.jsx +35 -43
  122. package/src/number-text-field-custom.jsx +30 -36
  123. package/src/number-text-field.jsx +45 -29
  124. package/src/radio-with-label.jsx +25 -13
  125. package/src/settings/display-size.jsx +12 -11
  126. package/src/settings/panel.jsx +97 -91
  127. package/src/settings/settings-radio-label.jsx +25 -13
  128. package/src/settings/toggle.jsx +30 -29
  129. package/src/tabs/index.jsx +8 -8
  130. package/src/tags-input/__tests__/index.test.jsx +88 -37
  131. package/src/tags-input/index.jsx +35 -38
  132. package/src/two-choice.jsx +15 -19
  133. package/esm/index.css +0 -847
  134. package/esm/index.js +0 -213950
  135. package/esm/index.js.map +0 -1
  136. package/esm/package.json +0 -3
  137. package/src/__tests__/__snapshots__/langs.test.jsx.snap +0 -32
  138. package/src/__tests__/__snapshots__/settings-panel.test.js.snap +0 -115
  139. package/src/__tests__/__snapshots__/two-choice.test.js.snap +0 -171
  140. package/src/choice-configuration/__tests__/__snapshots__/feedback-menu.test.jsx.snap +0 -51
  141. package/src/choice-configuration/__tests__/__snapshots__/index.test.jsx.snap +0 -519
  142. package/src/feedback-config/__tests__/__snapshots__/feedback-config.test.jsx.snap +0 -27
  143. package/src/feedback-config/__tests__/__snapshots__/feedback-selector.test.jsx.snap +0 -38
  144. package/src/layout/__tests__/__snapshots__/config.layout.test.jsx.snap +0 -59
  145. package/src/tags-input/__tests__/__snapshots__/index.test.jsx.snap +0 -170
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mui-box/index.jsx"],"names":["log","MuiBox","theme","light","palette","type","bottomLineColor","primary","muiBox","paddingTop","spacing","unit","paddingBottom","position","left","right","bottom","height","content","transition","pointerEvents","backgroundColor","transform","focused","children","classes","names","propTypes","PropTypes","oneOfType","arrayOf","node","isRequired","bool"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,GAAG,GAAG,uBAAM,gCAAN,CAAZ;AAEA,IAAMC,MAAM,GAAG,wBAAW,UAACC,KAAD,EAAW;AACnC,MAAMC,KAAK,GAAGD,KAAK,CAACE,OAAN,CAAcC,IAAd,KAAuB,OAArC;AACA,MAAMC,eAAe,GAAGH,KAAK,GAAG,qBAAH,GAA2B,0BAAxD;AAEAH,EAAAA,GAAG,CAACE,KAAK,CAACE,OAAN,CAAcG,OAAd,CAAsBL,KAAK,CAACE,OAAN,CAAcC,IAAd,IAAsB,OAA5C,CAAD,CAAH;AAEA,SAAO;AACLG,IAAAA,MAAM,EAAE;AACNC,MAAAA,UAAU,EAAEP,KAAK,CAACQ,OAAN,CAAcC,IADpB;AAENC,MAAAA,aAAa,EAAEV,KAAK,CAACQ,OAAN,CAAcC,IAFvB;AAGNE,MAAAA,QAAQ,EAAE,UAHJ;AAIN,kBAAY;AACVC,QAAAA,IAAI,EAAE,CADI;AAEVC,QAAAA,KAAK,EAAE,CAFG;AAGVC,QAAAA,MAAM,EAAE,CAHE;AAIVC,QAAAA,MAAM,EAAE,KAJE;AAKVC,QAAAA,OAAO,EAAE,IALC;AAMVL,QAAAA,QAAQ,EAAE,UANA;AAOVM,QAAAA,UAAU,EAAE,yDAPF;AAQVC,QAAAA,aAAa,EAAE,MARL;AASVC,QAAAA,eAAe,EAAEf;AATP,OAJN;AAeN,wBAAkB;AAChBW,QAAAA,MAAM,EAAE;AADQ,OAfZ;AAkBN,iBAAW;AACTH,QAAAA,IAAI,EAAE,CADG;AAETC,QAAAA,KAAK,EAAE,CAFE;AAGTC,QAAAA,MAAM,EAAE,CAHC;AAITC,QAAAA,MAAM,EAAE,KAJC;AAKTC,QAAAA,OAAO,EAAE,IALA;AAMTL,QAAAA,QAAQ,EAAE,UAND;AAOTS,QAAAA,SAAS,EAAE,WAPF;AAQTH,QAAAA,UAAU,EAAE,kDARH;AASTC,QAAAA,aAAa,EAAE,MATN;AAUTC,QAAAA,eAAe,EAAEnB,KAAK,CAACE,OAAN,CAAcG,OAAd,CAAsBL,KAAK,CAACE,OAAN,CAAcC,IAApC,CAVR,CAUmD;;AAVnD;AAlBL,KADH;AAgCLkB,IAAAA,OAAO,EAAE;AACP,iBAAW;AACTD,QAAAA,SAAS,EAAE;AADF;AADJ;AAhCJ,GAAP;AAsCD,CA5Cc,EA4CZ,gBAAoC;AAAA,MAAjCE,QAAiC,QAAjCA,QAAiC;AAAA,MAAvBC,OAAuB,QAAvBA,OAAuB;AAAA,MAAdF,OAAc,QAAdA,OAAc;AACrC,MAAMG,KAAK,GAAG,4BAAWD,OAAO,CAACjB,MAAnB,EAA2Be,OAAO,IAAIE,OAAO,CAACF,OAA9C,CAAd;AAEA,sBAAO;AAAK,IAAA,SAAS,EAAEG;AAAhB,KAAwBF,QAAxB,CAAP;AACD,CAhDc,CAAf;AAkDAvB,MAAM,CAAC0B,SAAP,GAAmB;AACjBH,EAAAA,QAAQ,EAAEI,sBAAUC,SAAV,CAAoB,CAACD,sBAAUE,OAAV,CAAkBF,sBAAUG,IAA5B,CAAD,EAAoCH,sBAAUG,IAA9C,CAApB,EAAyEC,UADlE;AAEjBT,EAAAA,OAAO,EAAEK,sBAAUK,IAAV,CAAeD;AAFP,CAAnB;eAKe/B,M","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport debug from 'debug';\nimport classNames from 'classnames';\n\nconst log = debug('pie-elements:config-ui:mui-box');\n\nconst MuiBox = withStyles((theme) => {\n const light = theme.palette.type === 'light';\n const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n\n log(theme.palette.primary[theme.palette.type || 'light']);\n\n return {\n muiBox: {\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n position: 'relative',\n '&:before': {\n left: 0,\n right: 0,\n bottom: 0,\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n pointerEvents: 'none',\n backgroundColor: bottomLineColor,\n },\n '&:hover:before': {\n height: '2px',\n },\n '&:after': {\n left: 0,\n right: 0,\n bottom: 0,\n height: '2px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition: 'transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms',\n pointerEvents: 'none',\n backgroundColor: theme.palette.primary[theme.palette.type], //'#304ffe'\n },\n },\n focused: {\n '&:after': {\n transform: 'scaleX(1)',\n },\n },\n };\n})(({ children, classes, focused }) => {\n const names = classNames(classes.muiBox, focused && classes.focused);\n\n return <div className={names}>{children}</div>;\n});\n\nMuiBox.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n focused: PropTypes.bool.isRequired,\n};\n\nexport default MuiBox;\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_debug","log","debug","StyledMuiBox","styled","_ref","theme","focused","light","palette","mode","bottomLineColor","primary","paddingTop","spacing","paddingBottom","position","left","right","bottom","height","content","transition","pointerEvents","backgroundColor","transform","MuiBox","_ref2","children","createElement","propTypes","PropTypes","oneOfType","arrayOf","node","isRequired","bool","_default","exports"],"sources":["../../src/mui-box/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport debug from 'debug';\n\nconst log = debug('pie-elements:config-ui:mui-box');\n\nconst StyledMuiBox = styled('div')(({ theme, focused }) => {\n const light = theme.palette.mode === 'light';\n const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n\n log(theme.palette.primary[theme.palette.mode || 'light']);\n\n return {\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n position: 'relative',\n '&:before': {\n left: 0,\n right: 0,\n bottom: 0,\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n pointerEvents: 'none',\n backgroundColor: bottomLineColor,\n },\n '&:hover:before': {\n height: '2px',\n },\n '&:after': {\n left: 0,\n right: 0,\n bottom: 0,\n height: '2px',\n content: '\"\"',\n position: 'absolute',\n transform: focused ? 'scaleX(1)' : 'scaleX(0)',\n transition: 'transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms',\n pointerEvents: 'none',\n backgroundColor: theme.palette.primary[theme.palette.mode], //'#304ffe'\n },\n };\n});\n\nconst MuiBox = ({ children, focused }) => {\n return <StyledMuiBox focused={focused}>{children}</StyledMuiBox>;\n};\n\nMuiBox.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n focused: PropTypes.bool.isRequired,\n};\n\nexport default MuiBox;\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAEA,IAAMI,GAAG,GAAG,IAAAC,iBAAK,EAAC,gCAAgC,CAAC;AAEnD,IAAMC,YAAY,GAAG,IAAAC,cAAM,EAAC,KAAK,CAAC,CAAC,UAAAC,IAAA,EAAwB;EAAA,IAArBC,KAAK,GAAAD,IAAA,CAALC,KAAK;IAAEC,OAAO,GAAAF,IAAA,CAAPE,OAAO;EAClD,IAAMC,KAAK,GAAGF,KAAK,CAACG,OAAO,CAACC,IAAI,KAAK,OAAO;EAC5C,IAAMC,eAAe,GAAGH,KAAK,GAAG,qBAAqB,GAAG,0BAA0B;EAElFP,GAAG,CAACK,KAAK,CAACG,OAAO,CAACG,OAAO,CAACN,KAAK,CAACG,OAAO,CAACC,IAAI,IAAI,OAAO,CAAC,CAAC;EAEzD,OAAO;IACLG,UAAU,EAAEP,KAAK,CAACQ,OAAO,CAAC,CAAC,CAAC;IAC5BC,aAAa,EAAET,KAAK,CAACQ,OAAO,CAAC,CAAC,CAAC;IAC/BE,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE;MACVC,IAAI,EAAE,CAAC;MACPC,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CAAC;MACTC,MAAM,EAAE,KAAK;MACbC,OAAO,EAAE,IAAI;MACbL,QAAQ,EAAE,UAAU;MACpBM,UAAU,EAAE,yDAAyD;MACrEC,aAAa,EAAE,MAAM;MACrBC,eAAe,EAAEb;IACnB,CAAC;IACD,gBAAgB,EAAE;MAChBS,MAAM,EAAE;IACV,CAAC;IACD,SAAS,EAAE;MACTH,IAAI,EAAE,CAAC;MACPC,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CAAC;MACTC,MAAM,EAAE,KAAK;MACbC,OAAO,EAAE,IAAI;MACbL,QAAQ,EAAE,UAAU;MACpBS,SAAS,EAAElB,OAAO,GAAG,WAAW,GAAG,WAAW;MAC9Ce,UAAU,EAAE,kDAAkD;MAC9DC,aAAa,EAAE,MAAM;MACrBC,eAAe,EAAElB,KAAK,CAACG,OAAO,CAACG,OAAO,CAACN,KAAK,CAACG,OAAO,CAACC,IAAI,CAAC,CAAE;IAC9D;EACF,CAAC;AACH,CAAC,CAAC;AAEF,IAAMgB,MAAM,GAAG,SAATA,MAAMA,CAAAC,KAAA,EAA8B;EAAA,IAAxBC,QAAQ,GAAAD,KAAA,CAARC,QAAQ;IAAErB,OAAO,GAAAoB,KAAA,CAAPpB,OAAO;EACjC,oBAAOZ,MAAA,YAAAkC,aAAA,CAAC1B,YAAY;IAACI,OAAO,EAAEA;EAAQ,GAAEqB,QAAuB,CAAC;AAClE,CAAC;AAEDF,MAAM,CAACI,SAAS,GAAG;EACjBF,QAAQ,EAAEG,qBAAS,CAACC,SAAS,CAAC,CAACD,qBAAS,CAACE,OAAO,CAACF,qBAAS,CAACG,IAAI,CAAC,EAAEH,qBAAS,CAACG,IAAI,CAAC,CAAC,CAACC,UAAU;EAC7F5B,OAAO,EAAEwB,qBAAS,CAACK,IAAI,CAACD;AAC1B,CAAC;AAAC,IAAAE,QAAA,GAAAC,OAAA,cAEaZ,MAAM","ignoreList":[]}
@@ -1,114 +1,73 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports["default"] = exports.NumberTextFieldCustom = void 0;
11
-
12
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
-
20
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
-
22
12
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
-
24
13
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
-
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
26
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
-
28
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
29
-
30
17
  var _react = _interopRequireDefault(require("react"));
31
-
32
- var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
33
-
34
- var _classnames = _interopRequireDefault(require("classnames"));
35
-
36
- var _styles = require("@material-ui/core/styles");
37
-
18
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
19
+ var _styles = require("@mui/material/styles");
38
20
  var _isFinite = _interopRequireDefault(require("lodash/isFinite"));
39
-
40
- var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
41
-
42
- var _InputAdornment = _interopRequireDefault(require("@material-ui/core/InputAdornment"));
43
-
44
- var _Remove = _interopRequireDefault(require("@material-ui/icons/Remove"));
45
-
46
- var _Add = _interopRequireDefault(require("@material-ui/icons/Add"));
47
-
21
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
22
+ var _InputAdornment = _interopRequireDefault(require("@mui/material/InputAdornment"));
23
+ var _Remove = _interopRequireDefault(require("@mui/icons-material/Remove"));
24
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
48
25
  var math = _interopRequireWildcard(require("mathjs"));
49
-
50
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
51
-
52
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
53
-
54
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
55
-
56
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
57
-
58
- var styles = function styles() {
26
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
27
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
28
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
29
+ var StyledTextField = (0, _styles.styled)(_TextField["default"])(function () {
59
30
  return {
60
- input: {
61
- '& input[type=number]': {
62
- '-moz-appearance': 'textfield'
63
- },
64
- '& input[type=number]::-webkit-outer-spin-button': {
65
- '-webkit-appearance': 'none',
66
- margin: 0
67
- },
68
- '& input[type=number]::-webkit-inner-spin-button': {
69
- '-webkit-appearance': 'none',
70
- margin: 0
71
- }
31
+ '& input[type=number]': {
32
+ MozAppearance: 'textfield'
33
+ },
34
+ '& input[type=number]::-webkit-outer-spin-button': {
35
+ WebkitAppearance: 'none',
36
+ margin: 0
72
37
  },
73
- iconButton: {
74
- padding: '2px'
38
+ '& input[type=number]::-webkit-inner-spin-button': {
39
+ WebkitAppearance: 'none',
40
+ margin: 0
75
41
  }
76
42
  };
77
- };
78
-
43
+ });
44
+ var StyledIconButton = (0, _styles.styled)(_IconButton["default"])(function () {
45
+ return {
46
+ padding: '2px'
47
+ };
48
+ });
79
49
  var fallbackNumber = function fallbackNumber(min, max) {
80
50
  if (!(0, _isFinite["default"])(min) && !(0, _isFinite["default"])(max)) {
81
51
  return 0;
82
52
  }
83
-
84
53
  if (!(0, _isFinite["default"])(min) && (0, _isFinite["default"])(max)) {
85
54
  return max;
86
55
  }
87
-
88
56
  if ((0, _isFinite["default"])(min)) {
89
57
  return min;
90
58
  }
91
59
  };
92
-
93
- var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
94
- (0, _inherits2["default"])(NumberTextFieldCustom, _React$Component);
95
-
96
- var _super = _createSuper(NumberTextFieldCustom);
97
-
60
+ var NumberTextFieldCustom = exports.NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
98
61
  function NumberTextFieldCustom(props) {
99
62
  var _this;
100
-
101
63
  (0, _classCallCheck2["default"])(this, NumberTextFieldCustom);
102
- _this = _super.call(this, props);
103
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "normalizeValueAndIndex", function (customValues, number, min, max) {
64
+ _this = _callSuper(this, NumberTextFieldCustom, [props]);
65
+ (0, _defineProperty2["default"])(_this, "normalizeValueAndIndex", function (customValues, number, min, max) {
104
66
  var type = _this.props.type;
105
-
106
67
  var value = _this.clamp(number, min, max);
107
-
108
68
  var currentIndex = (customValues || []).findIndex(function (val) {
109
69
  return val === value;
110
70
  });
111
-
112
71
  if ((customValues || []).length > 0 && currentIndex === -1) {
113
72
  var closestValue = type === 'text' ? _this.getClosestFractionValue(customValues, value) : _this.getClosestValue(customValues, value);
114
73
  return {
@@ -116,13 +75,12 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
116
75
  currentIndex: closestValue.index
117
76
  };
118
77
  }
119
-
120
78
  return {
121
79
  value: value,
122
80
  currentIndex: currentIndex
123
81
  };
124
82
  });
125
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getClosestValue", function (customValues, number) {
83
+ (0, _defineProperty2["default"])(_this, "getClosestValue", function (customValues, number) {
126
84
  return customValues.reduce(function (closest, value, index) {
127
85
  return Math.abs(value - number) < Math.abs(closest.value - number) ? {
128
86
  value: value,
@@ -133,7 +91,7 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
133
91
  index: 0
134
92
  });
135
93
  });
136
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getClosestFractionValue", function (customValues, number) {
94
+ (0, _defineProperty2["default"])(_this, "getClosestFractionValue", function (customValues, number) {
137
95
  return customValues.reduce(function (closest, value, index) {
138
96
  return Math.abs(math.number(math.fraction(value)) - math.number(math.fraction(number))) < Math.abs(math.number(math.fraction(closest.value)) - math.number(math.fraction(number))) ? {
139
97
  value: value,
@@ -144,67 +102,54 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
144
102
  index: 0
145
103
  });
146
104
  });
147
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getValidFraction", function (value) {
105
+ (0, _defineProperty2["default"])(_this, "getValidFraction", function (value) {
148
106
  if (_this.isPositiveInteger(value.trim())) {
149
107
  return value.trim();
150
108
  }
151
-
152
109
  if (value.trim() === '' || value.trim().split('/').length !== 2) {
153
110
  return false;
154
111
  }
155
-
156
112
  var _value$trim$split = value.trim().split('/'),
157
- _value$trim$split2 = (0, _slicedToArray2["default"])(_value$trim$split, 2),
158
- numerator = _value$trim$split2[0],
159
- denominator = _value$trim$split2[1];
160
-
113
+ _value$trim$split2 = (0, _slicedToArray2["default"])(_value$trim$split, 2),
114
+ numerator = _value$trim$split2[0],
115
+ denominator = _value$trim$split2[1];
161
116
  if (isNaN(numerator) || isNaN(denominator)) {
162
117
  return false;
163
118
  }
164
-
165
119
  numerator = parseFloat(numerator);
166
120
  denominator = parseFloat(denominator);
167
-
168
121
  if (!Number.isInteger(numerator) || !Number.isInteger(denominator)) {
169
122
  return false;
170
123
  }
171
-
172
124
  if (numerator < 0 || denominator < 1) {
173
125
  return false;
174
126
  }
175
-
176
127
  return numerator + '/' + denominator;
177
128
  });
178
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isPositiveInteger", function (n) {
129
+ (0, _defineProperty2["default"])(_this, "isPositiveInteger", function (n) {
179
130
  return n >>> 0 === parseFloat(n);
180
131
  });
181
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onBlur", function (event) {
132
+ (0, _defineProperty2["default"])(_this, "onBlur", function (event) {
182
133
  var _this$props = _this.props,
183
- customValues = _this$props.customValues,
184
- onlyIntegersAllowed = _this$props.onlyIntegersAllowed,
185
- type = _this$props.type;
134
+ customValues = _this$props.customValues,
135
+ onlyIntegersAllowed = _this$props.onlyIntegersAllowed,
136
+ type = _this$props.type;
186
137
  var value = event.target.value;
187
-
188
138
  if (type === 'text') {
189
139
  var tempValue = _this.getValidFraction(value);
190
-
191
140
  if (tempValue) {
192
141
  value = tempValue;
193
142
  } else {
194
143
  value = _this.props.value;
195
144
  }
196
145
  }
197
-
198
146
  var rawNumber = onlyIntegersAllowed ? Math.round(parseFloat(value)) : parseFloat(value);
199
-
200
147
  if (type === 'text') {
201
148
  rawNumber = value.trim();
202
149
  }
203
-
204
150
  var _this$normalizeValueA = _this.normalizeValueAndIndex(customValues, rawNumber),
205
- number = _this$normalizeValueA.value,
206
- currentIndex = _this$normalizeValueA.currentIndex;
207
-
151
+ number = _this$normalizeValueA.value,
152
+ currentIndex = _this$normalizeValueA.currentIndex;
208
153
  _this.setState({
209
154
  value: number.toString(),
210
155
  currentIndex: currentIndex
@@ -212,31 +157,26 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
212
157
  return _this.props.onChange(event, number);
213
158
  });
214
159
  });
215
-
216
160
  var _this$normalizeValueA2 = _this.normalizeValueAndIndex(props.customValues, props.value),
217
- _value = _this$normalizeValueA2.value,
218
- _currentIndex = _this$normalizeValueA2.currentIndex;
219
-
161
+ _value = _this$normalizeValueA2.value,
162
+ _currentIndex = _this$normalizeValueA2.currentIndex;
220
163
  _this.state = {
221
164
  value: _value,
222
165
  currentIndex: _currentIndex
223
166
  };
224
-
225
167
  if (_value !== props.value) {
226
168
  _this.props.onChange({}, _value);
227
169
  }
228
-
229
- _this.onChange = _this.onChange.bind((0, _assertThisInitialized2["default"])(_this));
170
+ _this.onChange = _this.onChange.bind(_this);
230
171
  return _this;
231
172
  }
232
-
233
- (0, _createClass2["default"])(NumberTextFieldCustom, [{
173
+ (0, _inherits2["default"])(NumberTextFieldCustom, _React$Component);
174
+ return (0, _createClass2["default"])(NumberTextFieldCustom, [{
234
175
  key: "UNSAFE_componentWillReceiveProps",
235
176
  value: function UNSAFE_componentWillReceiveProps(props) {
236
177
  var _this$normalizeValueA3 = this.normalizeValueAndIndex(props.customValues, props.value, props.min, props.max),
237
- value = _this$normalizeValueA3.value,
238
- currentIndex = _this$normalizeValueA3.currentIndex;
239
-
178
+ value = _this$normalizeValueA3.value,
179
+ currentIndex = _this$normalizeValueA3.currentIndex;
240
180
  this.setState({
241
181
  value: value,
242
182
  currentIndex: currentIndex
@@ -248,23 +188,18 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
248
188
  var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.props.min;
249
189
  var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.props.max;
250
190
  var customValues = this.props.customValues;
251
-
252
191
  if ((customValues || []).length > 0) {
253
192
  return value;
254
193
  }
255
-
256
194
  if (!(0, _isFinite["default"])(value)) {
257
195
  return fallbackNumber(min, max);
258
196
  }
259
-
260
197
  if ((0, _isFinite["default"])(max)) {
261
198
  value = Math.min(value, max);
262
199
  }
263
-
264
200
  if ((0, _isFinite["default"])(min)) {
265
201
  value = Math.max(value, min);
266
202
  }
267
-
268
203
  return value;
269
204
  }
270
205
  }, {
@@ -272,11 +207,9 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
272
207
  value: function onChange(event) {
273
208
  var type = this.props.type;
274
209
  var value = event.target.value;
275
-
276
210
  if (type !== 'text' && typeof value === 'string' && value.trim() === '') {
277
211
  return;
278
212
  }
279
-
280
213
  this.setState({
281
214
  value: value
282
215
  });
@@ -288,28 +221,25 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
288
221
  var shouldUpdate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
289
222
  event.preventDefault();
290
223
  var _this$props2 = this.props,
291
- customValues = _this$props2.customValues,
292
- step = _this$props2.step,
293
- onlyIntegersAllowed = _this$props2.onlyIntegersAllowed,
294
- onChange = _this$props2.onChange;
224
+ customValues = _this$props2.customValues,
225
+ step = _this$props2.step,
226
+ onlyIntegersAllowed = _this$props2.onlyIntegersAllowed,
227
+ onChange = _this$props2.onChange;
295
228
  var _this$state = this.state,
296
- currentIndex = _this$state.currentIndex,
297
- value = _this$state.value;
229
+ currentIndex = _this$state.currentIndex,
230
+ value = _this$state.value;
298
231
  var updatedIndex = currentIndex + sign * 1;
299
232
  var number;
300
-
301
233
  if (customValues.length > 0) {
302
234
  if (updatedIndex < 0 || updatedIndex >= customValues.length) {
303
235
  return;
304
236
  }
305
-
306
237
  number = customValues[updatedIndex];
307
238
  } else {
308
239
  var rawNumber = onlyIntegersAllowed ? parseInt(value) : parseFloat(value);
309
240
  var updatedValue = (rawNumber * 10000 + step * sign * 10000) / 10000;
310
241
  number = this.clamp(updatedValue);
311
242
  }
312
-
313
243
  this.setState({
314
244
  value: number.toString(),
315
245
  currentIndex: updatedIndex
@@ -323,29 +253,26 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
323
253
  key: "render",
324
254
  value: function render() {
325
255
  var _this2 = this;
326
-
327
256
  var _this$props3 = this.props,
328
- className = _this$props3.className,
329
- classes = _this$props3.classes,
330
- label = _this$props3.label,
331
- disabled = _this$props3.disabled,
332
- error = _this$props3.error,
333
- min = _this$props3.min,
334
- max = _this$props3.max,
335
- customValues = _this$props3.customValues,
336
- inputClassName = _this$props3.inputClassName,
337
- disableUnderline = _this$props3.disableUnderline,
338
- helperText = _this$props3.helperText,
339
- variant = _this$props3.variant,
340
- textAlign = _this$props3.textAlign,
341
- _this$props3$type = _this$props3.type,
342
- type = _this$props3$type === void 0 ? 'number' : _this$props3$type;
257
+ className = _this$props3.className,
258
+ label = _this$props3.label,
259
+ disabled = _this$props3.disabled,
260
+ error = _this$props3.error,
261
+ min = _this$props3.min,
262
+ max = _this$props3.max,
263
+ customValues = _this$props3.customValues,
264
+ inputClassName = _this$props3.inputClassName,
265
+ disableUnderline = _this$props3.disableUnderline,
266
+ helperText = _this$props3.helperText,
267
+ variant = _this$props3.variant,
268
+ textAlign = _this$props3.textAlign,
269
+ _this$props3$type = _this$props3.type,
270
+ type = _this$props3$type === void 0 ? 'number' : _this$props3$type;
343
271
  var value = this.state.value;
344
- var names = (0, _classnames["default"])(className, classes.input); //Logic to disable the increment and decrement buttons
345
-
272
+ var names = className;
273
+ //Logic to disable the increment and decrement buttons
346
274
  var disabledStart = false;
347
275
  var disabledEnd = false;
348
-
349
276
  if (customValues.length > 0) {
350
277
  disabledStart = value === customValues[0];
351
278
  disabledEnd = value === customValues[customValues.length - 1];
@@ -353,8 +280,7 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
353
280
  disabledStart = value === min;
354
281
  disabledEnd = value === max;
355
282
  }
356
-
357
- return /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
283
+ return /*#__PURE__*/_react["default"].createElement(StyledTextField, {
358
284
  variant: variant,
359
285
  inputRef: function inputRef(ref) {
360
286
  return _this2.inputRef = ref;
@@ -376,7 +302,6 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
376
302
  if (e.key === 'ArrowUp') {
377
303
  _this2.changeValue(e);
378
304
  }
379
-
380
305
  if (e.key === 'ArrowDown') {
381
306
  _this2.changeValue(e, -1);
382
307
  }
@@ -389,23 +314,23 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
389
314
  disableUnderline: disableUnderline,
390
315
  startAdornment: /*#__PURE__*/_react["default"].createElement(_InputAdornment["default"], {
391
316
  position: "start"
392
- }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
393
- className: classes.iconButton,
317
+ }, /*#__PURE__*/_react["default"].createElement(StyledIconButton, {
394
318
  disabled: disabled ? disabled : disabledStart,
395
319
  onClick: function onClick(e) {
396
320
  return _this2.changeValue(e, -1, true);
397
- }
321
+ },
322
+ size: "large"
398
323
  }, /*#__PURE__*/_react["default"].createElement(_Remove["default"], {
399
324
  fontSize: "small"
400
325
  }))),
401
326
  endAdornment: /*#__PURE__*/_react["default"].createElement(_InputAdornment["default"], {
402
327
  position: "end"
403
- }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
404
- className: classes.iconButton,
328
+ }, /*#__PURE__*/_react["default"].createElement(StyledIconButton, {
405
329
  disabled: disabled ? disabled : disabledEnd,
406
330
  onClick: function onClick(e) {
407
331
  return _this2.changeValue(e, 1, true);
408
- }
332
+ },
333
+ size: "large"
409
334
  }, /*#__PURE__*/_react["default"].createElement(_Add["default"], {
410
335
  fontSize: "small"
411
336
  })))
@@ -420,12 +345,8 @@ var NumberTextFieldCustom = /*#__PURE__*/function (_React$Component) {
420
345
  });
421
346
  }
422
347
  }]);
423
- return NumberTextFieldCustom;
424
348
  }(_react["default"].Component);
425
-
426
- exports.NumberTextFieldCustom = NumberTextFieldCustom;
427
349
  (0, _defineProperty2["default"])(NumberTextFieldCustom, "propTypes", {
428
- classes: _propTypes["default"].object.isRequired,
429
350
  className: _propTypes["default"].string,
430
351
  customValues: _propTypes["default"].array,
431
352
  disabled: _propTypes["default"].bool,
@@ -451,8 +372,5 @@ exports.NumberTextFieldCustom = NumberTextFieldCustom;
451
372
  variant: 'standard',
452
373
  onlyIntegersAllowed: false
453
374
  });
454
-
455
- var _default = (0, _styles.withStyles)(styles)(NumberTextFieldCustom);
456
-
457
- exports["default"] = _default;
458
- //# sourceMappingURL=number-text-field-custom.js.map
375
+ var _default = exports["default"] = NumberTextFieldCustom;
376
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfVGV4dEZpZWxkIiwiX3N0eWxlcyIsIl9pc0Zpbml0ZSIsIl9JY29uQnV0dG9uIiwiX0lucHV0QWRvcm5tZW50IiwiX1JlbW92ZSIsIl9BZGQiLCJtYXRoIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJTdHlsZWRUZXh0RmllbGQiLCJzdHlsZWQiLCJUZXh0RmllbGQiLCJNb3pBcHBlYXJhbmNlIiwiV2Via2l0QXBwZWFyYW5jZSIsIm1hcmdpbiIsIlN0eWxlZEljb25CdXR0b24iLCJJY29uQnV0dG9uIiwicGFkZGluZyIsImZhbGxiYWNrTnVtYmVyIiwibWluIiwibWF4IiwiaXNGaW5pdGUiLCJOdW1iZXJUZXh0RmllbGRDdXN0b20iLCJleHBvcnRzIiwiX1JlYWN0JENvbXBvbmVudCIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsImN1c3RvbVZhbHVlcyIsIm51bWJlciIsInR5cGUiLCJ2YWx1ZSIsImNsYW1wIiwiY3VycmVudEluZGV4IiwiZmluZEluZGV4IiwidmFsIiwibGVuZ3RoIiwiY2xvc2VzdFZhbHVlIiwiZ2V0Q2xvc2VzdEZyYWN0aW9uVmFsdWUiLCJnZXRDbG9zZXN0VmFsdWUiLCJpbmRleCIsInJlZHVjZSIsImNsb3Nlc3QiLCJNYXRoIiwiYWJzIiwiZnJhY3Rpb24iLCJpc1Bvc2l0aXZlSW50ZWdlciIsInRyaW0iLCJzcGxpdCIsIl92YWx1ZSR0cmltJHNwbGl0IiwiX3ZhbHVlJHRyaW0kc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkyIiwibnVtZXJhdG9yIiwiZGVub21pbmF0b3IiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJldmVudCIsIl90aGlzJHByb3BzIiwib25seUludGVnZXJzQWxsb3dlZCIsInRhcmdldCIsInRlbXBWYWx1ZSIsImdldFZhbGlkRnJhY3Rpb24iLCJyYXdOdW1iZXIiLCJyb3VuZCIsIl90aGlzJG5vcm1hbGl6ZVZhbHVlQSIsIm5vcm1hbGl6ZVZhbHVlQW5kSW5kZXgiLCJzZXRTdGF0ZSIsInRvU3RyaW5nIiwib25DaGFuZ2UiLCJfdGhpcyRub3JtYWxpemVWYWx1ZUEyIiwic3RhdGUiLCJiaW5kIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIl90aGlzJG5vcm1hbGl6ZVZhbHVlQTMiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJjaGFuZ2VWYWx1ZSIsInNpZ24iLCJzaG91bGRVcGRhdGUiLCJwcmV2ZW50RGVmYXVsdCIsIl90aGlzJHByb3BzMiIsInN0ZXAiLCJfdGhpcyRzdGF0ZSIsInVwZGF0ZWRJbmRleCIsInBhcnNlSW50IiwidXBkYXRlZFZhbHVlIiwicmVuZGVyIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMzIiwiY2xhc3NOYW1lIiwibGFiZWwiLCJkaXNhYmxlZCIsImVycm9yIiwiaW5wdXRDbGFzc05hbWUiLCJkaXNhYmxlVW5kZXJsaW5lIiwiaGVscGVyVGV4dCIsInZhcmlhbnQiLCJ0ZXh0QWxpZ24iLCJfdGhpcyRwcm9wczMkdHlwZSIsIm5hbWVzIiwiZGlzYWJsZWRTdGFydCIsImRpc2FibGVkRW5kIiwiY3JlYXRlRWxlbWVudCIsImlucHV0UmVmIiwicmVmIiwib25CbHVyIiwib25LZXlQcmVzcyIsImJsdXIiLCJvbktleURvd24iLCJ0aXRsZSIsIklucHV0UHJvcHMiLCJzdGFydEFkb3JubWVudCIsInBvc2l0aW9uIiwib25DbGljayIsInNpemUiLCJmb250U2l6ZSIsImVuZEFkb3JubWVudCIsImlucHV0UHJvcHMiLCJzdHlsZSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYXJyYXkiLCJib29sIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJhbnkiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9udW1iZXItdGV4dC1maWVsZC1jdXN0b20uanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRleHRGaWVsZCBmcm9tICdAbXVpL21hdGVyaWFsL1RleHRGaWVsZCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgaXNGaW5pdGUgZnJvbSAnbG9kYXNoL2lzRmluaXRlJztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSWNvbkJ1dHRvbic7XG5pbXBvcnQgSW5wdXRBZG9ybm1lbnQgZnJvbSAnQG11aS9tYXRlcmlhbC9JbnB1dEFkb3JubWVudCc7XG5pbXBvcnQgUmVtb3ZlIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvUmVtb3ZlJztcbmltcG9ydCBBZGQgZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9BZGQnO1xuaW1wb3J0ICogYXMgbWF0aCBmcm9tICdtYXRoanMnO1xuXG5jb25zdCBTdHlsZWRUZXh0RmllbGQgPSBzdHlsZWQoVGV4dEZpZWxkKSgoKSA9PiAoe1xuICAnJiBpbnB1dFt0eXBlPW51bWJlcl0nOiB7XG4gICAgTW96QXBwZWFyYW5jZTogJ3RleHRmaWVsZCcsXG4gIH0sXG4gICcmIGlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbic6IHtcbiAgICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgbWFyZ2luOiAwLFxuICB9LFxuICAnJiBpbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24nOiB7XG4gICAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAgIG1hcmdpbjogMCxcbiAgfSxcbn0pKTtcblxuY29uc3QgU3R5bGVkSWNvbkJ1dHRvbiA9IHN0eWxlZChJY29uQnV0dG9uKSgoKSA9PiAoe1xuICBwYWRkaW5nOiAnMnB4Jyxcbn0pKTtcblxuY29uc3QgZmFsbGJhY2tOdW1iZXIgPSAobWluLCBtYXgpID0+IHtcbiAgaWYgKCFpc0Zpbml0ZShtaW4pICYmICFpc0Zpbml0ZShtYXgpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoIWlzRmluaXRlKG1pbikgJiYgaXNGaW5pdGUobWF4KSkge1xuICAgIHJldHVybiBtYXg7XG4gIH1cblxuICBpZiAoaXNGaW5pdGUobWluKSkge1xuICAgIHJldHVybiBtaW47XG4gIH1cbn07XG5cbmV4cG9ydCBjbGFzcyBOdW1iZXJUZXh0RmllbGRDdXN0b20gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjdXN0b21WYWx1ZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAgIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhlbHBlclRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25seUludGVnZXJzQWxsb3dlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgbWluOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG1heDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBzdGVwOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVVbmRlcmxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAgIHRleHRBbGlnbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2YXJpYW50OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBzdGVwOiAxLFxuICAgIGN1c3RvbVZhbHVlczogW10sXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICB2YXJpYW50OiAnc3RhbmRhcmQnLFxuICAgIG9ubHlJbnRlZ2Vyc0FsbG93ZWQ6IGZhbHNlLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgY29uc3QgeyB2YWx1ZSwgY3VycmVudEluZGV4IH0gPSB0aGlzLm5vcm1hbGl6ZVZhbHVlQW5kSW5kZXgocHJvcHMuY3VzdG9tVmFsdWVzLCBwcm9wcy52YWx1ZSk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWUsXG4gICAgICBjdXJyZW50SW5kZXgsXG4gICAgfTtcblxuICAgIGlmICh2YWx1ZSAhPT0gcHJvcHMudmFsdWUpIHtcbiAgICAgIHRoaXMucHJvcHMub25DaGFuZ2Uoe30sIHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMocHJvcHMpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBjdXJyZW50SW5kZXggfSA9IHRoaXMubm9ybWFsaXplVmFsdWVBbmRJbmRleChwcm9wcy5jdXN0b21WYWx1ZXMsIHByb3BzLnZhbHVlLCBwcm9wcy5taW4sIHByb3BzLm1heCk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWUsIGN1cnJlbnRJbmRleCB9KTtcbiAgfVxuXG4gIGNsYW1wKHZhbHVlLCBtaW4gPSB0aGlzLnByb3BzLm1pbiwgbWF4ID0gdGhpcy5wcm9wcy5tYXgpIHtcbiAgICBjb25zdCB7IGN1c3RvbVZhbHVlcyB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICgoY3VzdG9tVmFsdWVzIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxsYmFja051bWJlcihtaW4sIG1heCk7XG4gICAgfVxuXG4gICAgaWYgKGlzRmluaXRlKG1heCkpIHtcbiAgICAgIHZhbHVlID0gTWF0aC5taW4odmFsdWUsIG1heCk7XG4gICAgfVxuXG4gICAgaWYgKGlzRmluaXRlKG1pbikpIHtcbiAgICAgIHZhbHVlID0gTWF0aC5tYXgodmFsdWUsIG1pbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgbm9ybWFsaXplVmFsdWVBbmRJbmRleCA9IChjdXN0b21WYWx1ZXMsIG51bWJlciwgbWluLCBtYXgpID0+IHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNsYW1wKG51bWJlciwgbWluLCBtYXgpO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IChjdXN0b21WYWx1ZXMgfHwgW10pLmZpbmRJbmRleCgodmFsKSA9PiB2YWwgPT09IHZhbHVlKTtcblxuICAgIGlmICgoY3VzdG9tVmFsdWVzIHx8IFtdKS5sZW5ndGggPiAwICYmIGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgIGNvbnN0IGNsb3Nlc3RWYWx1ZSA9XG4gICAgICAgIHR5cGUgPT09ICd0ZXh0JyA/IHRoaXMuZ2V0Q2xvc2VzdEZyYWN0aW9uVmFsdWUoY3VzdG9tVmFsdWVzLCB2YWx1ZSkgOiB0aGlzLmdldENsb3Nlc3RWYWx1ZShjdXN0b21WYWx1ZXMsIHZhbHVlKTtcblxuICAgICAgcmV0dXJuIHsgdmFsdWU6IGNsb3Nlc3RWYWx1ZS52YWx1ZSwgY3VycmVudEluZGV4OiBjbG9zZXN0VmFsdWUuaW5kZXggfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWx1ZSwgY3VycmVudEluZGV4IH07XG4gIH07XG5cbiAgZ2V0Q2xvc2VzdFZhbHVlID0gKGN1c3RvbVZhbHVlcywgbnVtYmVyKSA9PlxuICAgIGN1c3RvbVZhbHVlcy5yZWR1Y2UoXG4gICAgICAoY2xvc2VzdCwgdmFsdWUsIGluZGV4KSA9PlxuICAgICAgICBNYXRoLmFicyh2YWx1ZSAtIG51bWJlcikgPCBNYXRoLmFicyhjbG9zZXN0LnZhbHVlIC0gbnVtYmVyKSA/IHsgdmFsdWUsIGluZGV4IH0gOiBjbG9zZXN0LFxuICAgICAgeyB2YWx1ZTogY3VzdG9tVmFsdWVzWzBdLCBpbmRleDogMCB9LFxuICAgICk7XG5cbiAgZ2V0Q2xvc2VzdEZyYWN0aW9uVmFsdWUgPSAoY3VzdG9tVmFsdWVzLCBudW1iZXIpID0+XG4gICAgY3VzdG9tVmFsdWVzLnJlZHVjZShcbiAgICAgIChjbG9zZXN0LCB2YWx1ZSwgaW5kZXgpID0+XG4gICAgICAgIE1hdGguYWJzKG1hdGgubnVtYmVyKG1hdGguZnJhY3Rpb24odmFsdWUpKSAtIG1hdGgubnVtYmVyKG1hdGguZnJhY3Rpb24obnVtYmVyKSkpIDxcbiAgICAgICAgTWF0aC5hYnMobWF0aC5udW1iZXIobWF0aC5mcmFjdGlvbihjbG9zZXN0LnZhbHVlKSkgLSBtYXRoLm51bWJlcihtYXRoLmZyYWN0aW9uKG51bWJlcikpKVxuICAgICAgICAgID8geyB2YWx1ZSwgaW5kZXggfVxuICAgICAgICAgIDogY2xvc2VzdCxcbiAgICAgIHsgdmFsdWU6IGN1c3RvbVZhbHVlc1swXSwgaW5kZXg6IDAgfSxcbiAgICApO1xuXG4gIGdldFZhbGlkRnJhY3Rpb24gPSAodmFsdWUpID0+IHtcbiAgICBpZiAodGhpcy5pc1Bvc2l0aXZlSW50ZWdlcih2YWx1ZS50cmltKCkpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpO1xuICAgIH1cbiAgICBpZiAodmFsdWUudHJpbSgpID09PSAnJyB8fCB2YWx1ZS50cmltKCkuc3BsaXQoJy8nKS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IFtudW1lcmF0b3IsIGRlbm9taW5hdG9yXSA9IHZhbHVlLnRyaW0oKS5zcGxpdCgnLycpO1xuICAgIGlmIChpc05hTihudW1lcmF0b3IpIHx8IGlzTmFOKGRlbm9taW5hdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBudW1lcmF0b3IgPSBwYXJzZUZsb2F0KG51bWVyYXRvcik7XG4gICAgZGVub21pbmF0b3IgPSBwYXJzZUZsb2F0KGRlbm9taW5hdG9yKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobnVtZXJhdG9yKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihkZW5vbWluYXRvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG51bWVyYXRvciA8IDAgfHwgZGVub21pbmF0b3IgPCAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBudW1lcmF0b3IgKyAnLycgKyBkZW5vbWluYXRvcjtcbiAgfTtcblxuICBpc1Bvc2l0aXZlSW50ZWdlciA9IChuKSA9PiB7XG4gICAgcmV0dXJuIG4gPj4+IDAgPT09IHBhcnNlRmxvYXQobik7XG4gIH07XG5cbiAgb25CbHVyID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBjdXN0b21WYWx1ZXMsIG9ubHlJbnRlZ2Vyc0FsbG93ZWQsIHR5cGUgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHsgdmFsdWUgfSA9IGV2ZW50LnRhcmdldDtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICBsZXQgdGVtcFZhbHVlID0gdGhpcy5nZXRWYWxpZEZyYWN0aW9uKHZhbHVlKTtcbiAgICAgIGlmICh0ZW1wVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSB0ZW1wVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCByYXdOdW1iZXIgPSBvbmx5SW50ZWdlcnNBbGxvd2VkID8gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHZhbHVlKSkgOiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByYXdOdW1iZXIgPSB2YWx1ZS50cmltKCk7XG4gICAgfVxuICAgIGNvbnN0IHsgdmFsdWU6IG51bWJlciwgY3VycmVudEluZGV4IH0gPSB0aGlzLm5vcm1hbGl6ZVZhbHVlQW5kSW5kZXgoY3VzdG9tVmFsdWVzLCByYXdOdW1iZXIpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBudW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgY3VycmVudEluZGV4LFxuICAgICAgfSxcbiAgICAgICgpID0+IHRoaXMucHJvcHMub25DaGFuZ2UoZXZlbnQsIG51bWJlciksXG4gICAgKTtcbiAgfTtcblxuICBvbkNoYW5nZShldmVudCkge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKHR5cGUgIT09ICd0ZXh0JyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlIH0pO1xuICB9XG5cbiAgY2hhbmdlVmFsdWUoZXZlbnQsIHNpZ24gPSAxLCBzaG91bGRVcGRhdGUgPSBmYWxzZSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBjdXN0b21WYWx1ZXMsIHN0ZXAsIG9ubHlJbnRlZ2Vyc0FsbG93ZWQsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgY3VycmVudEluZGV4LCB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB1cGRhdGVkSW5kZXggPSBjdXJyZW50SW5kZXggKyBzaWduICogMTtcbiAgICBsZXQgbnVtYmVyO1xuICAgIGlmIChjdXN0b21WYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHVwZGF0ZWRJbmRleCA8IDAgfHwgdXBkYXRlZEluZGV4ID49IGN1c3RvbVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbnVtYmVyID0gY3VzdG9tVmFsdWVzW3VwZGF0ZWRJbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJhd051bWJlciA9IG9ubHlJbnRlZ2Vyc0FsbG93ZWQgPyBwYXJzZUludCh2YWx1ZSkgOiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IChyYXdOdW1iZXIgKiAxMDAwMCArIHN0ZXAgKiBzaWduICogMTAwMDApIC8gMTAwMDA7XG4gICAgICBudW1iZXIgPSB0aGlzLmNsYW1wKHVwZGF0ZWRWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBudW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgY3VycmVudEluZGV4OiB1cGRhdGVkSW5kZXgsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICAgICAgb25DaGFuZ2UoZXZlbnQsIG51bWJlcik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBsYWJlbCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgICBjdXN0b21WYWx1ZXMsXG4gICAgICBpbnB1dENsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVVbmRlcmxpbmUsXG4gICAgICBoZWxwZXJUZXh0LFxuICAgICAgdmFyaWFudCxcbiAgICAgIHRleHRBbGlnbixcbiAgICAgIHR5cGUgPSAnbnVtYmVyJyxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5hbWVzID0gY2xhc3NOYW1lO1xuICAgIC8vTG9naWMgdG8gZGlzYWJsZSB0aGUgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9uc1xuICAgIGxldCBkaXNhYmxlZFN0YXJ0ID0gZmFsc2U7XG4gICAgbGV0IGRpc2FibGVkRW5kID0gZmFsc2U7XG4gICAgaWYgKGN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICBkaXNhYmxlZFN0YXJ0ID0gdmFsdWUgPT09IGN1c3RvbVZhbHVlc1swXTtcbiAgICAgIGRpc2FibGVkRW5kID0gdmFsdWUgPT09IGN1c3RvbVZhbHVlc1tjdXN0b21WYWx1ZXMubGVuZ3RoIC0gMV07XG4gICAgfSBlbHNlIGlmIChpc0Zpbml0ZShtaW4pICYmIGlzRmluaXRlKG1heCkpIHtcbiAgICAgIGRpc2FibGVkU3RhcnQgPSB2YWx1ZSA9PT0gbWluO1xuICAgICAgZGlzYWJsZWRFbmQgPSB2YWx1ZSA9PT0gbWF4O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkVGV4dEZpZWxkXG4gICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnR9XG4gICAgICAgIGlucHV0UmVmPXsocmVmKSA9PiAodGhpcy5pbnB1dFJlZiA9IHJlZil9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgaGVscGVyVGV4dD17aGVscGVyVGV4dH1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9XG4gICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgIG9uS2V5UHJlc3M9eyhlKSA9PiB7XG4gICAgICAgICAgLy8gb25jZSB0aGUgRW50ZXIga2V5IGlzIHByZXNzZWQsIHdlIGZvcmNlIGlucHV0IGJsdXJcbiAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgdGhpcy5pbnB1dFJlZikge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5ibHVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVmFsdWUoZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZShlLCAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICB0aXRsZT17Jyd9XG4gICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgIGNsYXNzTmFtZT17bmFtZXN9XG4gICAgICAgIElucHV0UHJvcHM9e3tcbiAgICAgICAgICBjbGFzc05hbWU6IGlucHV0Q2xhc3NOYW1lLFxuICAgICAgICAgIGRpc2FibGVVbmRlcmxpbmU6IGRpc2FibGVVbmRlcmxpbmUsXG4gICAgICAgICAgc3RhcnRBZG9ybm1lbnQ6IChcbiAgICAgICAgICAgIDxJbnB1dEFkb3JubWVudCBwb3NpdGlvbj1cInN0YXJ0XCI+XG4gICAgICAgICAgICAgIDxTdHlsZWRJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkID8gZGlzYWJsZWQgOiBkaXNhYmxlZFN0YXJ0fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLmNoYW5nZVZhbHVlKGUsIC0xLCB0cnVlKX1cbiAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIj5cbiAgICAgICAgICAgICAgICA8UmVtb3ZlIGZvbnRTaXplPVwic21hbGxcIiAvPlxuICAgICAgICAgICAgICA8L1N0eWxlZEljb25CdXR0b24+XG4gICAgICAgICAgICA8L0lucHV0QWRvcm5tZW50PlxuICAgICAgICAgICksXG4gICAgICAgICAgZW5kQWRvcm5tZW50OiAoXG4gICAgICAgICAgICA8SW5wdXRBZG9ybm1lbnQgcG9zaXRpb249XCJlbmRcIj5cbiAgICAgICAgICAgICAgPFN0eWxlZEljb25CdXR0b25cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgPyBkaXNhYmxlZCA6IGRpc2FibGVkRW5kfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLmNoYW5nZVZhbHVlKGUsIDEsIHRydWUpfVxuICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiPlxuICAgICAgICAgICAgICAgIDxBZGQgZm9udFNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgICAgIDwvU3R5bGVkSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgIDwvSW5wdXRBZG9ybm1lbnQ+XG4gICAgICAgICAgKSxcbiAgICAgICAgfX1cbiAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgIHN0eWxlOiB7IHRleHRBbGlnbiB9LFxuICAgICAgICAgIG1pbixcbiAgICAgICAgICBtYXgsXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyVGV4dEZpZWxkQ3VzdG9tO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFBLENBQUFD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