@viewlift/player-backup 1.0.2 → 1.0.3-lighteningjs

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 (134) hide show
  1. package/.babelrc +8 -0
  2. package/.browserslistrc +2 -0
  3. package/README.md +29 -0
  4. package/babel.config.json +8 -0
  5. package/dist/38afc79c94e0bcf0.png +0 -0
  6. package/dist/3bc8b7ff04e98d37.png +0 -0
  7. package/dist/522ea7c76ac4fd33.png +0 -0
  8. package/dist/a74cd46ed4277568.png +0 -0
  9. package/dist/b739faec1fde1346.png +0 -0
  10. package/dist/ed3d0a4d9de91460.png +0 -0
  11. package/dist/index.cjs.css +2 -0
  12. package/dist/index.cjs.css.map +1 -0
  13. package/dist/index.cjs.js +2 -0
  14. package/dist/index.d.ts +24 -0
  15. package/dist/index.esm.css +2 -0
  16. package/dist/index.esm.css.map +1 -0
  17. package/dist/index.esm.js +2 -0
  18. package/dist/main-player/player-ui.d.ts +19 -0
  19. package/dist/player-components/player-buttons/playerButtons.d.ts +38 -0
  20. package/dist/player-components/player-seekbar/playerSeekbar.d.ts +25 -0
  21. package/dist/player-ui/player-ui.d.ts +18 -0
  22. package/dist/playerInitializer.d.ts +13 -0
  23. package/index.html +49 -0
  24. package/package.json +35 -15
  25. package/rollup.config.mjs +45 -0
  26. package/src/ads-manager/ads-manager.js +120 -0
  27. package/src/assets/checkIcon.png +0 -0
  28. package/src/assets/pauseIcon.png +0 -0
  29. package/src/assets/pauseIconFocus.png +0 -0
  30. package/src/assets/playIcon.png +0 -0
  31. package/src/assets/playIconFocus.png +0 -0
  32. package/src/assets/settingsIcon.png +0 -0
  33. package/src/index.ts +74 -0
  34. package/src/player-components/player-buttons/playerButtons.js +106 -0
  35. package/src/player-components/player-seekbar/playerSeekbar.js +223 -0
  36. package/src/player-components/player-setting-option-wrapper/player-setting-option-one-wrapper.js +82 -0
  37. package/src/player-components/player-setting-option-wrapper/player-setting-option-two-wrapper.js +84 -0
  38. package/src/player-components/player-sidebar/player-sidebar.js +188 -0
  39. package/src/player-components/player-title/playerTitle.js +56 -0
  40. package/src/player-ui/player-ui.js +564 -0
  41. package/src/playerControls/playerControls.css +10 -0
  42. package/src/playerControls/playerControls.js +501 -0
  43. package/src/playerInitializer.js +335 -0
  44. package/src/styles/index.css +204 -0
  45. package/src/utilities/utilities.js +79 -0
  46. package/tsconfig.json +15 -0
  47. package/cjs/autoNextVideo-815419cb.js +0 -1
  48. package/cjs/bundle.css +0 -577
  49. package/cjs/caption-settings-67212c17.js +0 -1
  50. package/cjs/caption-settings-6e301004.js +0 -1
  51. package/cjs/dvr_skin-f7f770ae.js +0 -1
  52. package/cjs/error-26d5a3c3.js +0 -1
  53. package/cjs/features-fd1e9785.js +0 -1
  54. package/cjs/generic-81b1be69.js +0 -1
  55. package/cjs/icons-51594f89.js +0 -1
  56. package/cjs/index.js +0 -1
  57. package/cjs/keyboardShortcuts-1afbf18c.js +0 -1
  58. package/cjs/loader-393b838a.js +0 -1
  59. package/cjs/multicam-1647c428.js +0 -1
  60. package/cjs/multicam-a41fe4a6.js +0 -1
  61. package/cjs/multicamv2-76d8530b.js +0 -1
  62. package/cjs/multicamv2-f48d95fe.js +0 -1
  63. package/cjs/mwebPotrait-3c11d7cf.js +0 -1
  64. package/cjs/mwebPotraitTray-a3a2715b.js +0 -1
  65. package/cjs/nextEpisodeButton-b6e6586f.js +0 -1
  66. package/cjs/nextEpisodeButton-cc80609a.js +0 -1
  67. package/cjs/nondvr_skin-ef2cb3b2.js +0 -1
  68. package/cjs/playlist-a550a735.js +0 -1
  69. package/cjs/playlist-df87ca90.js +0 -1
  70. package/cjs/renditions-c3ea26e8.js +0 -1
  71. package/cjs/resolution-51b38a3e.js +0 -1
  72. package/cjs/series-6178964e.js +0 -1
  73. package/cjs/series-9c237975.js +0 -1
  74. package/cjs/series-v2-70137d8c.js +0 -1
  75. package/cjs/series-v2-a265ff17.js +0 -1
  76. package/cjs/settings-icon-b350b587.js +0 -1
  77. package/cjs/settings-icon-e6a8feee.js +0 -1
  78. package/cjs/skin-14da56f6.js +0 -1
  79. package/cjs/skin-225252ff.js +0 -1
  80. package/cjs/skin-286f52db.js +0 -1
  81. package/cjs/skin-534810ae.js +0 -1
  82. package/cjs/skin-638aecc2.js +0 -1
  83. package/cjs/skin-84083352.js +0 -1
  84. package/cjs/skin-983a2ea7.js +0 -1
  85. package/cjs/skin-9eba464b.js +0 -1
  86. package/cjs/skin-b703ef26.js +0 -1
  87. package/cjs/skin-f225a42e.js +0 -1
  88. package/cjs/util-ce8a4138.js +0 -1
  89. package/cjs/videoSelector-a4c00f50.js +0 -1
  90. package/cjs/videoSelector-fcdf11eb.js +0 -1
  91. package/esm/autoNextVideo-89ede579.js +0 -1
  92. package/esm/bundle.css +0 -577
  93. package/esm/caption-settings-2e47813b.js +0 -1
  94. package/esm/caption-settings-3f6b6163.js +0 -1
  95. package/esm/dvr_skin-9cc1b144.js +0 -1
  96. package/esm/error-2395864b.js +0 -1
  97. package/esm/features-05101ce6.js +0 -1
  98. package/esm/generic-4a3c0d6b.js +0 -1
  99. package/esm/icons-f5378bf3.js +0 -1
  100. package/esm/index.js +0 -1
  101. package/esm/keyboardShortcuts-7fa108ec.js +0 -1
  102. package/esm/loader-580278fe.js +0 -1
  103. package/esm/multicam-bc0aea8a.js +0 -1
  104. package/esm/multicam-de741974.js +0 -1
  105. package/esm/multicamv2-d006cffa.js +0 -1
  106. package/esm/multicamv2-fb91fa98.js +0 -1
  107. package/esm/mwebPotrait-3c1805d8.js +0 -1
  108. package/esm/mwebPotraitTray-0ff12233.js +0 -1
  109. package/esm/nextEpisodeButton-a1556cdf.js +0 -1
  110. package/esm/nextEpisodeButton-ec95417f.js +0 -1
  111. package/esm/nondvr_skin-64be70e5.js +0 -1
  112. package/esm/playlist-5d3f4436.js +0 -1
  113. package/esm/playlist-7ecf432a.js +0 -1
  114. package/esm/renditions-0fdb57ed.js +0 -1
  115. package/esm/resolution-57e7767a.js +0 -1
  116. package/esm/series-041152aa.js +0 -1
  117. package/esm/series-998e2084.js +0 -1
  118. package/esm/series-v2-0727ee8c.js +0 -1
  119. package/esm/series-v2-9bcd5d54.js +0 -1
  120. package/esm/settings-icon-0125bffd.js +0 -1
  121. package/esm/settings-icon-9bac9ef3.js +0 -1
  122. package/esm/skin-0aea7a56.js +0 -1
  123. package/esm/skin-2c638dc1.js +0 -1
  124. package/esm/skin-5a02ebe6.js +0 -1
  125. package/esm/skin-665ec17e.js +0 -1
  126. package/esm/skin-80957fd8.js +0 -1
  127. package/esm/skin-851ea2fb.js +0 -1
  128. package/esm/skin-bb73c15b.js +0 -1
  129. package/esm/skin-cd537931.js +0 -1
  130. package/esm/skin-d5510f70.js +0 -1
  131. package/esm/skin-fba79111.js +0 -1
  132. package/esm/util-9c9ee6b3.js +0 -1
  133. package/esm/videoSelector-8da87dd3.js +0 -1
  134. package/esm/videoSelector-8e258d45.js +0 -1
package/.babelrc ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "presets": [
3
+ ["@babel/preset-env", {
4
+ "targets": { "ie": "11" },
5
+ "modules": false
6
+ }]
7
+ ]
8
+ }
@@ -0,0 +1,2 @@
1
+ IE 11
2
+ last 2 versions
package/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # @viewlift/ligheningjs-video-player
2
+
3
+ A LightningJS video player component for Smart TV app development.
4
+
5
+ ## Features
6
+ - Video player component for LightningJS
7
+ - TypeScript support
8
+ - Easy to use in LightningJS-based projects
9
+
10
+ ## Installation
11
+ ```bash
12
+ npm install @viewlift/ligheningjs-video-player
13
+ ```
14
+
15
+ ## Usage
16
+ ```ts
17
+ import { LightningVideoPlayer } from '@viewlift/ligheningjs-video-player';
18
+
19
+ const player = new LightningVideoPlayer();
20
+ player.play();
21
+ ```
22
+
23
+ ## Build
24
+ ```bash
25
+ npm run build
26
+ ```
27
+
28
+ ## License
29
+ ISC
@@ -0,0 +1,8 @@
1
+ {
2
+ "presets": [
3
+ ["@babel/preset-env", {
4
+ "targets": { "ie": "11" },
5
+ "modules": false
6
+ }]
7
+ ]
8
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,2 @@
1
+ body{background-color:#000;box-sizing:border-box;margin:0;padding:0}.vl-player-container .seekbar-container{background:#444;border-radius:6px;bottom:50px;cursor:pointer;height:12px;left:50%;margin:0;position:absolute;transform:translateX(-50%);user-select:none;width:90%;z-index:20}.vl-player-container .seekbar-buffer{background:#888;border-radius:6px;height:100%;position:absolute;width:0;z-index:1}.vl-player-container .seekbar-progress{background:rgba(254,253,255,.7);border-radius:6px;height:100%;position:absolute;transition:width .1s linear;width:0;z-index:2}.vl-player-container .seekbar-thumb{background:#fff;border-radius:50%;box-shadow:0 2px 8px rgba(0,0,0,.2);cursor:pointer;height:16px;position:absolute;top:50%;transform:translate(-50%,-50%);transition:background .2s;width:16px;z-index:3}.vl-player-container .seekbar-thumb:hover{background:#ffeaea}.vl-player-container .seekbar-tooltip{background:#222;border-radius:4px;bottom:24px;color:#fff;font-size:12px;left:0;padding:2px 8px;pointer-events:none;position:absolute;transform:translateX(-50%);white-space:nowrap;z-index:10}.vl-player-container .seekbar-duration-label,.vl-player-container .seekbar-time-label{color:#eee;font-size:13px;margin-right:4px;position:relative;top:18px;z-index:5}.vl-player-container .play-pause-btn{background:hsla(0,0%,100%,.5);border-radius:50%;cursor:pointer;height:70px;left:50%;position:absolute!important;top:50%;transform:translate(-50%,-50%);width:70px;z-index:20}.vl-player-container .play-pause-btn img{height:50px;left:50%;position:absolute!important;top:50%;transform:translate(-50%,-50%)}.vl-player-container .left-side-container{bottom:77px;display:flex;left:5%;position:absolute!important}.vl-player-container .right-side-container{bottom:77px;display:flex;position:absolute!important;right:5%}.vl-player-container .settings-btn{background:hsla(0,0%,100%,.5);border-radius:5px;bottom:100px;cursor:pointer;height:40px;margin:0 5px;padding:5px;width:50px;z-index:20}.vl-player-container .settings-btn img{height:100%}.vl-player-container .restart-btn{border:2px solid #fff;border-radius:8px;bottom:100px;color:#fff;cursor:pointer;display:flex;flex-direction:column;font-size:20px;font-weight:700;justify-content:center;margin:0 5px;padding:5px;right:2%;z-index:20}.vl-player-container .default-option-wrapper{align-items:center;background:#525760;border-radius:2px;box-shadow:0 10px 15px rgba(0,0,0,.1);color:#fff;cursor:pointer;display:flex;font-size:18px;font-weight:700;height:50px;justify-content:space-between;margin:20px 0;padding:5px 10px;text-transform:capitalize;width:95%}.vl-player-container .default-option-wrapper span{height:40px}.vl-player-container .default-option-wrapper span>img{height:100%}.vl-player-container .default-sidebar{background-color:rgba(30,30,30,.75);color:#fff;display:flex;flex-direction:column;height:100%;min-height:720px;padding:50px 20px 0;position:absolute;right:0;top:0;width:400px;z-index:30}.vl-player-container .focused{outline:2px solid #fff}
2
+ /*# sourceMappingURL=index.cjs.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.css"],"names":[],"mappings":"AACE,KAIE,qBAAsB,CADtB,qBAAsB,CAFtB,QAAS,CACT,SAGF,CACF,wCAMI,eAAgB,CAGhB,iBAAkB,CALlB,WAAY,CAIZ,cAAe,CAHf,WAAY,CAHZ,QAAS,CAQT,QAAS,CATT,iBAAkB,CAElB,0BAA2B,CAQ3B,gBAAiB,CAJjB,SAAU,CAKV,UACF,CAEF,qCAGI,eAAgB,CAEhB,iBAAkB,CAHlB,WAAY,CADZ,iBAAkB,CAGlB,OAAQ,CAER,SACF,CAEF,uCAGI,+BAAoC,CAEpC,iBAAkB,CAHlB,WAAY,CADZ,iBAAkB,CAMlB,2BAA6B,CAH7B,OAAQ,CAER,SAEF,CAEF,oCAMI,eAAgB,CAChB,iBAAkB,CAGlB,mCAAqC,CACrC,cAAe,CANf,WAAY,CAJZ,iBAAkB,CAClB,OAAQ,CACR,8BAAgC,CAShC,yBAA2B,CAR3B,UAAW,CAKX,SAIF,CACD,0CACG,kBACF,CAED,sCAKG,eAAgB,CAGhB,iBAAkB,CANlB,WAAY,CAIZ,UAAW,CAGX,cAAe,CANf,MAAO,CAIP,eAAgB,CAIhB,mBAAoB,CAVpB,iBAAkB,CAGlB,0BAA2B,CAM3B,kBAAmB,CAEnB,UACF,CAEF,sFAII,UAAW,CADX,cAAe,CAEf,gBAAiB,CAJjB,iBAAkB,CAClB,QAAS,CAIT,SACF,CAOF,qCASE,6BAAiC,CADjC,iBAAkB,CAElB,cAAe,CAHf,WAAY,CALZ,QAAS,CADT,2BAA6B,CAE7B,OAAQ,CACR,8BAAgC,CAEhC,UAAW,CADX,UAMF,CAEA,yCAKE,WAAY,CAHZ,QAAS,CADT,2BAA6B,CAE7B,OAAQ,CACR,8BAEF,CAGA,0CAIE,WAAY,CAFZ,YAAa,CACb,OAAQ,CAFR,2BAIF,CAEA,2CAIE,WAAY,CAFZ,YAAa,CADb,2BAA6B,CAE7B,QAEF,CAEA,mCAOE,6BAAkC,CANlC,iBAAkB,CAElB,YAAa,CAKb,cAAe,CAHf,WAAY,CACZ,YAAa,CAJb,WAAY,CAEZ,UAAW,CAKX,UACF,CAEA,uCACE,WACF,CAEA,kCAKE,qBAAsB,CAHtB,iBAAkB,CAElB,YAAa,CAEb,UAAW,CAOX,cAAe,CAJf,YAAa,CACb,qBAAsB,CAHtB,cAAe,CACf,eAAgB,CAGhB,sBAAuB,CACvB,YAAa,CATb,WAAY,CAFZ,QAAS,CAaT,UACF,CAIA,6CAGE,kBAAmB,CAGnB,kBAAmB,CAKnB,iBAAkB,CAClB,qCAAyC,CALzC,UAAW,CAQX,cAAe,CAdf,YAAa,CASb,cAAe,CADf,eAAgB,CAJhB,WAAY,CAHZ,6BAA8B,CAW9B,aAAgB,CALhB,gBAAiB,CAMjB,yBAA0B,CAV1B,SAYF,CACA,kDACE,WACF,CAEA,sDACE,WACF,CAGA,sCAME,mCAAuC,CAHvC,UAAW,CACX,YAAa,CACb,qBAAsB,CAEtB,WAAY,CACZ,gBAAiB,CAEjB,mBAAyB,CATzB,iBAAkB,CAUlB,OAAU,CATV,KAAM,CAON,WAAY,CAGZ,UAEF,CAEA,8BACI,sBACJ","file":"index.cjs.css","sourcesContent":["/*************** playerSeekbar.css ***************/\n body {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background-color: #000;\n }\n.vl-player-container .seekbar-container {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n bottom: 50px;\n height: 12px;\n background: #444;\n width: 90%;\n cursor: pointer;\n border-radius: 6px;\n margin: 0;\n user-select: none;\n z-index: 20;\n }\n \n.vl-player-container .seekbar-buffer {\n position: absolute;\n height: 100%;\n background: #888;\n width: 0;\n border-radius: 6px;\n z-index: 1;\n }\n \n.vl-player-container .seekbar-progress {\n position: absolute;\n height: 100%;\n background: rgba(254, 253, 255, 0.7);\n width: 0;\n border-radius: 6px;\n z-index: 2;\n transition: width 0.1s linear;\n }\n \n.vl-player-container .seekbar-thumb {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 16px;\n height: 16px;\n background: #fff;\n border-radius: 50%;\n /* border: 2px solid #4169E1; */\n z-index: 3;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n cursor: pointer;\n transition: background 0.2s;\n }\n .vl-player-container .seekbar-thumb:hover {\n background: #ffeaea;\n }\n \n .vl-player-container .seekbar-tooltip {\n position: absolute;\n bottom: 24px;\n left: 0;\n transform: translateX(-50%);\n background: #222;\n color: #fff;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n pointer-events: none;\n z-index: 10;\n }\n \n.vl-player-container .seekbar-time-label, .vl-player-container .seekbar-duration-label {\n position: relative;\n top: 18px;\n font-size: 13px;\n color: #eee;\n margin-right: 4px;\n z-index: 5;\n }\n \n\n\n\n/*************** playerButtons.css ***************/\n\n.vl-player-container .play-pause-btn {\n position: absolute !important;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n z-index: 20;\n width: 70px;\n height: 70px;\n border-radius: 50%;\n background: rgba(255,255,255, .5);\n cursor: pointer;\n} \n\n.vl-player-container .play-pause-btn img {\n position: absolute !important;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n height: 50px;\n}\n\n\n.vl-player-container .left-side-container {\n position: absolute !important;\n display: flex;\n left: 5%;\n bottom: 77px;\n}\n\n.vl-player-container .right-side-container {\n position: absolute !important;\n display: flex;\n right: 5%;\n bottom: 77px;\n}\n\n.vl-player-container .settings-btn {\n border-radius: 5px;\n padding: 5px;\n bottom: 100px;\n width: 50px;\n height: 40px;\n margin: 0 5px;\n background: rgba(255,255,255, 0.5);\n cursor: pointer;\n z-index: 20;\n}\n\n.vl-player-container .settings-btn img{\n height: 100%;\n}\n\n.vl-player-container .restart-btn {\n right: 2%;\n border-radius: 8px;\n padding: 5px;\n bottom: 100px;\n border: 2px solid #fff;\n color: #fff;\n font-size: 20px;\n font-weight: 700;\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin: 0 5px;\n cursor: pointer;\n z-index: 20;\n}\n\n\n/*************** player-setting-option-wrapper ***************/\n.vl-player-container .default-option-wrapper {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 95%;\n height: 50px;\n background: #525760;\n color: #fff;\n padding: 5px 10px;\n font-weight: 700;\n font-size: 18px;\n border-radius: 2px;\n box-shadow: 0 10px 15px rgba(0, 0, 0, .1);\n margin: 20px 0px;\n text-transform: capitalize;\n cursor: pointer;\n}\n.vl-player-container .default-option-wrapper span {\n height: 40px;\n}\n\n.vl-player-container .default-option-wrapper span > img{\n height: 100%;\n}\n\n\n.vl-player-container .default-sidebar {\n position: absolute;\n top: 0;\n color: #fff;\n display: flex;\n flex-direction: column;\n background-color: rgba(30, 30, 30, .75);\n height: 100%;\n min-height: 720px;\n width: 400px;\n padding: 50px 20px 0 20px;\n right: 0px;\n z-index: 30;\n /* right: -450px; */\n}\n\n.vl-player-container .focused{\n outline: 2px solid #ffffff;\n}"]}
@@ -0,0 +1,2 @@
1
+ "use strict";function t(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=Array(e);i<e;i++)n[i]=t[i];return n}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e,i){return e&&function(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,s(n.key),n)}}(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t}function n(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(e)||function(e,i){if(e){if("string"==typeof e)return t(e,i);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(e,i):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var n=i.call(t,e);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"==typeof e?e:e+""}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}var a=function(){return i(function t(i){if(e(this,t),!i)throw new Error("Button Class: props are required");if(this.imgSrc=i.imgSrc||"",this.imgAltText=i.imgAltText||"",this.buttonText=i.buttonText||"",this.klassname=i.klassname||"default-button",this.width=i.width,this.height=i.height,this.fontWeight=i.fontWeight,this.focused=i.focused||!1,this.disabled=i.disabled||!1,this.handleClick=i.handleClick||function(){},"function"!=typeof this.handleClick)throw new Error("Button Class: handleClick must be a function");this.disabled&&(this.klassname+=" disabled"),this.focused&&(this.klassname+=" focused"),this.handleClick=this.handleClick.bind(this)},[{key:"focus",value:function(){this.buttonElement&&(this.buttonElement.focus(),this.buttonElement.classList.add("focused"),this.focused=!0)}},{key:"blur",value:function(){this.buttonElement&&(this.buttonElement.blur(),this.buttonElement.classList.remove("focused"),this.focused=!1)}},{key:"mount",value:function(t){var e=this;if(!(t&&t instanceof HTMLElement))throw new Error("Button Class: mountPoint must be a valid DOM element");var i=document.createElement("div");if(i.className=this.klassname,i.style.width="".concat(this.width,"px"),i.style.height="".concat(this.height,"px"),i.style.fontWeight=this.fontWeight,i.tabIndex=0,this.imgSrc){var n=document.createElement("img");n.src=this.imgSrc,n.alt=this.imgAltText,n.onerror=function(){console.warn("Button Class: Failed to load image at",e.imgSrc)},i.appendChild(n)}else{var s=document.createElement("span");s.textContent=this.buttonText,i.appendChild(s)}this.disabled||i.addEventListener("click",this.handleClick),i.addEventListener("keydown",function(t){"Enter"!==t.key&&"OK"!==t.key||e.handleClick()}),i.addEventListener("focus",function(){e.focused=!0,i.classList.add("focused")}),i.addEventListener("blur",function(){e.focused=!1,i.classList.remove("focused")}),this.buttonElement=i,t.appendChild(i)}},{key:"unmount",value:function(){this.buttonElement&&(this.buttonElement.removeEventListener("click",this.handleClick),this.buttonElement.removeEventListener("keydown",this.handleClick),this.buttonElement.removeEventListener("focus",this.handleClick),this.buttonElement.removeEventListener("blur",this.handleClick),this.buttonElement.remove(),this.buttonElement=void 0)}}])}(),r=function(){return i(function t(i){if(e(this,t),!(i&&i instanceof HTMLVideoElement))throw new Error("PlayerSeekbar: A valid HTMLVideoElement is required");this.video=i,this.container=null,this.progress=null,this.buffer=null,this.thumb=null,this.tooltip=null,this.timeLabel=null,this.durationLabel=null,this.isDragging=!1,this.focused=!1,this.init()},[{key:"init",value:function(){var t=this;this.container=document.createElement("div"),this.container.className="seekbar-container",this.buffer=document.createElement("div"),this.buffer.className="seekbar-buffer",this.progress=document.createElement("div"),this.progress.className="seekbar-progress",this.thumb=document.createElement("div"),this.thumb.className="seekbar-thumb",this.thumb.tabIndex=0,this.tooltip=document.createElement("div"),this.tooltip.className="seekbar-tooltip",this.tooltip.style.display="none",this.timeLabel=document.createElement("span"),this.timeLabel.className="seekbar-time-label",this.durationLabel=document.createElement("span"),this.durationLabel.className="seekbar-duration-label",this.container.appendChild(this.buffer),this.container.appendChild(this.progress),this.container.appendChild(this.thumb),this.container.appendChild(this.tooltip),this.container.appendChild(this.timeLabel),this.container.appendChild(this.durationLabel),this.video.addEventListener("timeupdate",function(){return t.update()}),this.video.addEventListener("progress",function(){return t.updateBuffer()}),this.video.addEventListener("durationchange",function(){return t.update()}),this.container.addEventListener("click",function(e){return t.seek(e)}),this.thumb.addEventListener("mousedown",function(e){return t.startDrag(e)}),this.container.addEventListener("mousemove",function(e){return t.showTooltip(e)}),this.container.addEventListener("mouseleave",function(){return t.hideTooltip()}),this.thumb.addEventListener("focus",function(){t.focused=!0,t.thumb.classList.add("focused")}),this.thumb.addEventListener("blur",function(){t.focused=!1,t.thumb.classList.remove("focused")}),this.thumb.addEventListener("keydown",function(e){"ArrowRight"===e.key?(e.preventDefault(),e.stopPropagation(),t.video.currentTime=Math.min(t.video.duration,t.video.currentTime+1),t.update()):"ArrowLeft"===e.key?(e.preventDefault(),e.stopPropagation(),t.video.currentTime=Math.max(0,t.video.currentTime-1),t.update()):"Enter"===e.key&&(e.preventDefault(),e.stopPropagation(),t.video.paused&&t.video.play())})}},{key:"focus",value:function(){this.thumb&&(this.thumb.focus(),this.thumb.classList.add("focused"),this.focused=!0)}},{key:"blur",value:function(){this.thumb&&(this.thumb.blur(),this.thumb.classList.remove("focused"),this.focused=!1)}},{key:"formatTime",value:function(t){if(isNaN(t))return"0:00";var e=Math.floor(t/60),i=Math.floor(t%60);return"".concat(e,":").concat(String(i).padStart(2,"0"))}},{key:"update",value:function(){if(this.video&&this.progress&&this.thumb&&this.timeLabel&&this.durationLabel){var t=this.video.currentTime/this.video.duration*100;this.progress.style.width=t+"%",this.thumb.style.left=t+"%",this.timeLabel.textContent=this.formatTime(this.video.currentTime),this.durationLabel.textContent=" / "+this.formatTime(this.video.duration)}}},{key:"updateBuffer",value:function(){if(this.video&&this.buffer&&this.video.buffered.length){var t=this.video.buffered.end(this.video.buffered.length-1)/this.video.duration*100;this.buffer.style.width=t+"%"}}},{key:"seek",value:function(t){if(!this.isDragging&&this.container&&this.video){var e=this.container.getBoundingClientRect(),i=(t.clientX-e.left)/e.width;this.video.currentTime=i*this.video.duration}}},{key:"startDrag",value:function(t){var e=this;if(this.container&&this.video){t.preventDefault(),this.isDragging=!0;var i=function(t){var i=e.container.getBoundingClientRect(),n=(t.clientX-i.left)/i.width;n=Math.max(0,Math.min(1,n)),e.progress.style.width=100*n+"%",e.thumb.style.left=100*n+"%",e.timeLabel.textContent=e.formatTime(n*e.video.duration)},n=function(t){var s=e.container.getBoundingClientRect(),o=(t.clientX-s.left)/s.width;o=Math.max(0,Math.min(1,o)),e.video.currentTime=o*e.video.duration,e.isDragging=!1,document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",n)};document.addEventListener("mousemove",i),document.addEventListener("mouseup",n)}}},{key:"showTooltip",value:function(t){if(this.container&&this.tooltip&&this.video){var e=this.container.getBoundingClientRect(),i=(t.clientX-e.left)/e.width,n=i*this.video.duration;this.tooltip.textContent=this.formatTime(n),this.tooltip.style.display="block",this.tooltip.style.left="".concat(100*i,"%")}}},{key:"hideTooltip",value:function(){this.tooltip&&(this.tooltip.style.display="none")}},{key:"getElement",value:function(){return this.thumb}},{key:"mount",value:function(t){if(!(t&&t instanceof HTMLElement))throw new Error("PlayerSeekbar: parent must be a valid DOM element");t.appendChild(this.container),this.update(),this.updateBuffer()}},{key:"unmount",value:function(){this.video&&this.container&&this.thumb&&(this.video.removeEventListener("timeupdate",this.update),this.video.removeEventListener("progress",this.updateBuffer),this.video.removeEventListener("durationchange",this.update),this.container.removeEventListener("click",this.seek),this.thumb.removeEventListener("mousedown",this.startDrag),this.container.removeEventListener("mousemove",this.showTooltip),this.container.removeEventListener("mouseleave",this.hideTooltip),this.thumb.removeEventListener("focus",this.focus),this.thumb.removeEventListener("blur",this.blur),this.thumb.removeEventListener("keydown",this.keydownHandler),this.container&&this.container.remove())}}])}(),l=function(){return i(function t(i){if(e(this,t),!i||"object"!==o(i))throw new Error("TextContent: props must be a valid object");this.text=i.text||"",this.fontSize=i.fontSize||"16px",this.fontFamily=i.fontFamily||"Arial, sans-serif",this.fontWeight=i.fontWeight||"normal",this.textAlign=i.textAlign||"left",this.textDecoration=i.textDecoration||"none",this.textTransform=i.textTransform||"none",this.lineHeight=i.lineHeight||"normal",this.letterSpacing=i.letterSpacing||"normal",this.color=i.color||"#000",this.backgroundColor=i.backgroundColor||"transparent",this.klassname=i.klassname||"default-text-content",this.width=i.width||100,this.height=i.height||50,this.focused=i.focused||!1},[{key:"setText",value:function(t){if("string"!=typeof t)throw new Error("TextContent: text must be a string");this.text=t,this.container&&(this.container.textContent=t)}},{key:"mount",value:function(t){if(!(t&&t instanceof HTMLElement))throw new Error("TextContent: mountPoint must be a valid DOM element");var e=document.createElement("div");e.className=this.klassname,e.style.fontSize=this.fontSize,e.style.color=this.color,e.style.backgroundColor=this.backgroundColor,e.style.fontWeight=this.fontWeight,e.innerText=this.text,t.appendChild(e),this.container=e}},{key:"unmount",value:function(){this.container&&(this.container.remove(),this.container=void 0)}}])}(),u=function(){return i(function t(i){if(e(this,t),!i||"object"!==o(i))throw new Error("SettingsOptionOneWrapper: props must be a valid object");if(this.title=i.title||"Option",this.klassname=i.klassname||"default-option-wrapper",this.handleClick=i.callback||function(){},this.focused=i.focused||!1,"function"!=typeof this.handleClick)throw new Error("SettingsOptionOneWrapper: callback must be a function");this.handleClick=this.handleClick.bind(this)},[{key:"mount",value:function(t){var e=this;if(!(t&&t instanceof HTMLElement))throw new Error("SettingsOptionOneWrapper: mountPoint must be a valid DOM element");var i=document.createElement("div");i.className=this.klassname,i.tabIndex=0;var n=document.createElement("p");n.textContent=this.title,i.appendChild(n);var s=document.createElement("p");s.textContent="›",i.appendChild(s),this.focused&&i.classList.add("focused"),i.addEventListener("focus",function(){e.focused=!0,i.classList.add("focused")}),i.addEventListener("blur",function(){e.focused=!1,i.classList.remove("focused")}),i.addEventListener("keydown",function(t){"Enter"!==t.key&&"OK"!==t.key||e.handleClick()}),this.optionWrapper=i,i.instance=this,t.appendChild(i)}},{key:"unmount",value:function(){this.optionWrapper&&(this.optionWrapper.remove(),this.optionWrapper=void 0)}},{key:"focus",value:function(){this.optionWrapper&&(this.optionWrapper.focus(),this.optionWrapper.classList.add("focused"),this.focused=!0)}},{key:"blur",value:function(){this.optionWrapper&&(this.optionWrapper.blur(),this.optionWrapper.classList.remove("focused"),this.focused=!1)}}])}(),d=function(){return i(function t(i){if(e(this,t),!i||"object"!==o(i))throw new Error("SettingsOptionTwoWrapper: props must be a valid object");if(this.title=i.title||"Option",this.klassname=i.klassname||"default-option-wrapper",this.selected=i.selected||!1,this.focused=i.focused||!1,this.imgSrc=i.imgSrc||"522ea7c76ac4fd33.png",this.id=i.id,"string"!=typeof this.title)throw new Error("SettingsOptionTwoWrapper: title must be a string")},[{key:"mount",value:function(t){var e=this;if(!(t&&t instanceof HTMLElement))throw new Error("SettingsOptionTwoWrapper: mountPoint must be a valid DOM element");var i=document.createElement("div");i.className=this.klassname,i.tabIndex=0;var n=document.createElement("p");if(n.textContent=this.title,i.appendChild(n),this.selected){i.classList.add("selected");var s=document.createElement("span"),o=document.createElement("img");o.src=this.imgSrc,o.alt=this.imgAltText||"Selected",s.appendChild(o),i.appendChild(s)}this.focused&&i.classList.add("focused"),i.addEventListener("focus",function(){e.focused=!0,i.classList.add("focused")}),i.addEventListener("blur",function(){e.focused=!1,i.classList.remove("focused")}),this.optionWrapper=i,i.instance=this,t.appendChild(i)}},{key:"unmount",value:function(){this.optionWrapper&&(this.optionWrapper.remove(),this.optionWrapper=void 0)}},{key:"focus",value:function(){this.optionWrapper&&(this.optionWrapper.focus(),this.optionWrapper.classList.add("focused"),this.focused=!0)}},{key:"blur",value:function(){this.optionWrapper&&(this.optionWrapper.blur(),this.optionWrapper.classList.remove("focused"),this.focused=!1)}}])}(),c=function(){return i(function t(i){if(e(this,t),!i||"object"!==o(i))throw new Error("Sidebar: props must be a valid object");if(this.title=i.title||"Settings",this.items=i.items||[{text:"Video Quality",isSelected:!0,callback:function(){}},{text:"Audio Language",isSelected:!1,callback:function(){}},{text:"Subtitles",isSelected:!1,callback:function(){}}],this.klassname=i.klassname||"default-sidebar",this.currentFocusedOption=null,this.lastFocusedElement=i.lastFocusedElement||null,this.type=i.type||"navigation",this.focused=i.focused||!1,this.callback=i.callback||function(){},this.onselect=i.onselect||function(){},"function"!=typeof this.callback)throw new Error("Sidebar: callback must be a function");if(!["navigation","selection"].includes(this.type))throw new Error('Sidebar: type must be either "navigation" or "selection"')},[{key:"mount",value:function(t){var e=this;if(!(t&&t instanceof HTMLElement))throw new Error("Sidebar: mountPoint must be a valid DOM element");var i=document.createElement("div");i.className=this.klassname;var n=document.createElement("h2");n.textContent=this.title,n.style.fontSize="38px",i.appendChild(n);var s=document.createElement("div");"navigation"===this.type?this.items.forEach(function(t,i){var n=new u({title:t.text,klassname:"default-option-wrapper",focused:0===i,callback:t.callback});t.instance=n,0===i&&(e.currentFocusedOption=n),n.mount(s)}):"selection"===this.type&&this.items.forEach(function(t,i){var n=new d({title:t.text,klassname:"default-option-wrapper",focused:0===i,selected:t.isSelected,id:t.id});t.instance=n,0===i&&(e.currentFocusedOption=n),n.mount(s)}),i.appendChild(s),this.sidebarElement=i,t.appendChild(i),this.addEventListeners(),this.focus()}},{key:"addEventListeners",value:function(){var t=this;if(!this.sidebarElement)throw new Error("Sidebar: sidebarElement is not initialized");this.sidebarElement.addEventListener("keydown",function(e){"ArrowDown"===e.key?(e.preventDefault(),e.stopPropagation(),t.focusNext()):"ArrowUp"===e.key?(e.preventDefault(),e.stopPropagation(),t.focusPrevious()):"Backspace"===e.key||"Escape"===e.key?(e.preventDefault(),e.stopPropagation(),t.unfocus(),t.unmount()):"Enter"!==e.key&&"OK"!==e.key||(e.preventDefault(),e.stopPropagation(),"selection"===t.type&&t.selectionTypeAction())})}},{key:"selectionTypeAction",value:function(){if(this.currentFocusedOption){this.items.forEach(function(t){if(t.instance){t.instance.optionWrapper.classList.remove("selected"),t.instance.selected=!1;var e=t.instance.optionWrapper.querySelector("img");e&&e.parentElement.remove()}}),this.currentFocusedOption.optionWrapper.classList.add("selected"),this.currentFocusedOption.selected=!0;var t=document.createElement("span"),e=document.createElement("img");e.src=this.currentFocusedOption.imgSrc,e.alt="Selected",t.appendChild(e),this.currentFocusedOption.optionWrapper.appendChild(t),this.onselect(this.currentFocusedOption)}}},{key:"focusNext",value:function(){if(this.sidebarElement&&this.currentFocusedOption){var t=this.currentFocusedOption.optionWrapper.nextElementSibling;t&&(this.currentFocusedOption.blur(),this.currentFocusedOption=t.instance,this.currentFocusedOption.focus())}}},{key:"focusPrevious",value:function(){if(this.sidebarElement&&this.currentFocusedOption){var t=this.currentFocusedOption.optionWrapper.previousElementSibling;t&&(this.currentFocusedOption.blur(),this.currentFocusedOption=t.instance,this.currentFocusedOption.focus())}}},{key:"focus",value:function(){this.sidebarElement&&this.currentFocusedOption&&this.currentFocusedOption.focus()}},{key:"unfocus",value:function(){this.sidebarElement&&this.currentFocusedOption&&this.currentFocusedOption.blur()}},{key:"unmount",value:function(){this.sidebarElement&&(this.sidebarElement.remove(),this.sidebarElement=void 0,this.lastFocusedElement&&(this.callback(),this.lastFocusedElement.focus()),this.currentFocusedOption=null)}}])}(),h="ed3d0a4d9de91460.png",p="3bc8b7ff04e98d37.png",f="b739faec1fde1346.png",m="38afc79c94e0bcf0.png",v=function(){return i(function t(i){var n=i.player,s=i.config;if(e(this,t),!n||"object"!==o(n)||!n.video)throw new Error("VideoPlayerUI: player must be a valid object with a video property");this.player=n,this.videoTitleConfig=s.videoTitleConfig||{},this.selectedVideoQuality="auto",this.selectedPlaybackCaption="",this.selectedAudioQuality="",this.container=document.createElement("div"),this.container.className="video-player-ui",this.rightSideContainer=document.createElement("div"),this.rightSideContainer.className="right-side-container",this.leftSideContainer=document.createElement("div"),this.leftSideContainer.className="left-side-container",this.container.appendChild(this.rightSideContainer),this.container.appendChild(this.leftSideContainer),this.createControls()},[{key:"createControls",value:function(){this.createPlayPauseBtn(),this.createSeekbar(),this.createSettingsBtn(),this.createRestartVideoBtn(),this.createTextContent(),this.addEventListeners(),this.container.appendChild(this.player.video)}},{key:"createPlayPauseBtn",value:function(){var t=this;this.playPauseBtn=new a({imgSrc:f,imgAltText:"Play/Pause",buttonText:"Play",width:70,height:70,klassname:"play-pause-btn",focused:!1,disabled:!1,handleClick:function(){t.player.video.paused?(t.player.play(),t.playPauseBtn&&t.playPauseBtn.buttonElement&&t.playPauseBtn.buttonElement.querySelector("img")?t.playPauseBtn.buttonElement.querySelector("img").setAttribute("src",m):t.playPauseBtn&&t.playPauseBtn.buttonElement&&(t.playPauseBtn.buttonElement.textContent="Pause")):(t.player.pause(),t.playPauseBtn&&t.playPauseBtn.buttonElement?t.playPauseBtn.buttonElement.querySelector("img").setAttribute("src",f):t.playPauseBtn&&t.playPauseBtn.buttonElement&&(t.playPauseBtn.buttonElement.textContent="Play"))}}),this.playPauseBtn.mount(this.container),requestAnimationFrame(function(){t.playPauseBtn&&t.playPauseBtn.focus()}),this.addPlayPauseBtnEventListeners()}},{key:"addPlayPauseBtnEventListeners",value:function(){var t=this;this.playPauseBtn&&this.playPauseBtn.buttonElement&&(this.playPauseBtn.buttonElement.addEventListener("focus",function(){if(t.playPauseBtn&&t.playPauseBtn.buttonElement&&t.playPauseBtn.buttonElement.querySelector("img")){var e=t.player.video.paused?f:m;t.playPauseBtn.buttonElement.querySelector("img").setAttribute("src",e),t.playPauseBtn.buttonElement.style.backgroundColor="rgba(255, 255, 255)"}}),this.playPauseBtn.buttonElement.addEventListener("blur",function(){if(t.playPauseBtn&&t.playPauseBtn.buttonElement&&t.playPauseBtn.buttonElement.querySelector("img")){var e=t.player.video.paused?h:p;t.playPauseBtn.buttonElement.querySelector("img").setAttribute("src",e),t.playPauseBtn.buttonElement.style.backgroundColor="rgba(255, 255, 255, 0.5)"}}))}},{key:"addSettingsBtnEventListeners",value:function(){var t=this;this.settingsBtn&&this.settingsBtn.buttonElement&&(this.settingsBtn.buttonElement.addEventListener("focus",function(){if(t.settingsBtn&&t.settingsBtn.buttonElement&&t.settingsBtn.buttonElement.querySelector("img")){var e=t.player.video.paused?f:m;t.settingsBtn.buttonElement.querySelector("img").setAttribute("src",e),t.settingsBtn.buttonElement.style.backgroundColor="rgba(255, 255, 255)"}}),this.settingsBtn.buttonElement.addEventListener("blur",function(){if(t.settingsBtn&&t.settingsBtn.buttonElement&&t.settingsBtn.buttonElement.querySelector("img")){var e=t.player.video.paused?h:p;t.settingsBtn.buttonElement.querySelector("img").setAttribute("src",e),t.settingsBtn.buttonElement.style.backgroundColor="rgba(255, 255, 255, 0.5)"}}))}},{key:"updatePlayPauseButton",value:function(){if(this.playPauseBtn&&this.playPauseBtn.buttonElement&&this.seekbar.focused){var t=this.player.video.paused?h:p;this.playPauseBtn.buttonElement.querySelector("img").setAttribute("src",t)}}},{key:"createSeekbar",value:function(){var t=this;this.player.video&&(this.seekbar=new r(this.player.video),this.seekbar.mount(this.container),this.player.video.addEventListener("play",function(){return t.updatePlayPauseButton()}),this.player.video.addEventListener("pause",function(){return t.updatePlayPauseButton()}))}},{key:"addEventListeners",value:function(){var t=this;if(this.playPauseBtn&&this.playPauseBtn.buttonElement){this.playPauseBtn.buttonElement.addEventListener("keydown",function(e){"ArrowDown"===e.key&&(e.preventDefault(),e.stopPropagation(),t.settingsBtn?t.settingsBtn.focus():t.restartVideoBtn?t.restartVideoBtn.focus():t.seekbar&&t.seekbar.focus())}),this.settingsBtn&&this.settingsBtn.buttonElement&&this.settingsBtn.buttonElement.addEventListener("keydown",function(e){"ArrowDown"===e.key?(e.preventDefault(),e.stopPropagation(),t.seekbar&&t.seekbar.focus()):"ArrowUp"===e.key?(e.preventDefault(),e.stopPropagation(),t.playPauseBtn&&t.playPauseBtn.focus()):"ArrowRight"===e.key&&(e.preventDefault(),e.stopPropagation(),t.restartVideoBtn&&t.restartVideoBtn.focus())}),this.restartVideoBtn&&this.restartVideoBtn.buttonElement&&this.restartVideoBtn.buttonElement.addEventListener("keydown",function(e){"ArrowDown"===e.key?(e.preventDefault(),e.stopPropagation(),t.seekbar&&t.seekbar.focus()):"ArrowUp"===e.key?(e.preventDefault(),e.stopPropagation(),t.playPauseBtn&&t.playPauseBtn.focus()):"ArrowLeft"===e.key&&(e.preventDefault(),e.stopPropagation(),t.settingsBtn&&t.settingsBtn.focus())});var e=this.seekbar.getElement&&this.seekbar.getElement();e&&e.addEventListener("keydown",function(e){"ArrowUp"===e.key&&(e.preventDefault(),e.stopPropagation(),t.settingsBtn?t.settingsBtn.focus():t.restartVideoBtn?t.restartVideoBtn.focus():t.playPauseBtn&&t.playPauseBtn.focus())})}}},{key:"createSettingsBtn",value:function(){var t=this;this.settingsBtn=new a({imgSrc:"a74cd46ed4277568.png",imgAltText:"Settings",buttonText:"Settings",width:40,height:40,klassname:"settings-btn",focused:!1,disabled:!1,handleClick:function(){t.createSideBar(),t.hidePlayerControls()}}),this.settingsBtn.mount(this.rightSideContainer)}},{key:"createRestartVideoBtn",value:function(){var t=this;this.restartVideoBtn=new a({imgSrc:"",imgAltText:"Start From Beginning",buttonText:"Start From Beginning",width:void 0,height:35,fontWeight:700,klassname:"restart-btn",focused:!1,disabled:!1,handleClick:function(){t.player.video&&(t.player.video.currentTime=0)}}),this.restartVideoBtn.mount(this.rightSideContainer)}},{key:"createTextContent",value:function(){this.textContent=new l({text:this.videoTitleConfig.text,fontSize:this.videoTitleConfig.fontSize,color:this.videoTitleConfig.color,fontWeight:this.videoTitleConfig.fontWeight}),this.textContent.mount(this.leftSideContainer)}},{key:"changePlayBackQuality",value:function(t){this.selectedPlaybackQuality=t;var e=this.player.videoResolutions();if(e&&0!==e.length){if("auto"==t)this.selectedVideoQuality="auto",this.drmEnabled||(this.player.playerInstance.currentLevel=-1);else for(var i=0;i<(null==e?void 0:e.length);i++)if(e[i].height==t){this.selectedVideoQuality=e[i].height,this.drmEnabled?this.player.playerInstance.setQualityFor("video",i):this.player.playerInstance.currentLevel=i;break}}else console.warn("No video resolutions available to change playback quality.")}},{key:"changePlaybackCaptions",value:function(t){var e=this.player.captionsOptions();if(e&&0!==e.length)for(var i=["captions","subtitles","caption","subtitle"],n=0;n<e.length;n++)i.includes(e[n].kind.toLowerCase())&&(e[n].language===t?(this.selectedPlaybackCaption=t,e[n].mode="showing"):e[n].mode="disabled");else console.warn("No text tracks available to change playback captions.")}},{key:"changePlaybackAudio",value:function(t){var e=this.player.audioTracks();if(e&&0!==e.length){for(var i=0;i<e.length;i++)if(e[i].id==t||e[i].lang==t){this.selectedAudioQuality=t,this.drmEnabled?this.player.playerInstance.setCurrentTrack(e[i]):this.player.playerInstance.audioTrack=i;break}}else console.warn("No audio tracks available to change playback audio.")}},{key:"videoQualitySelector",value:function(){var t=this;if(this.mainSidebar){var e=this.player.videoResolutions(),i=this.selectedVideoQuality,s=[{text:"Auto",id:"auto",isSelected:"auto"===i,callback:function(){t.mainSidebar.currentFocusedOption.focus(),t.sidebar.unmount()}}].concat(n(e.map(function(e){return{text:"".concat(e.height,"p"),id:e.height,isSelected:i===e.height,callback:function(){t.mainSidebar.currentFocusedOption.focus(),t.sidebar.unmount()}}})));this.sidebar=new c({title:"Video Quality",items:s,klassname:"default-sidebar",lastFocusedElement:this.mainSidebar.currentFocusedOption,type:"selection",focused:!0,onselect:function(e){t.changePlayBackQuality(e.id)},callback:function(){t.mainSidebar.sidebarElement&&(t.mainSidebar.sidebarElement.style.visibility="visible")}}),this.sidebar.mount(this.container)}}},{key:"audioLanguageSelector",value:function(){var t=this;if(this.mainSidebar){var e=this.player.audioTracks(),i=this.selectedAudioQuality;this.sidebar=new c({title:"Audio Language",items:e.map(function(n,s){return{id:n.id||n.lang,text:n.name||n.lang,isSelected:1===e.length||(i?i===n.id:n.default),callback:function(){t.mainSidebar.currentFocusedOption.focus(),t.sidebar.unmount()}}}),klassname:"default-sidebar",lastFocusedElement:this.mainSidebar.currentFocusedOption,type:"selection",focused:!0,onselect:function(e){t.changePlaybackAudio(e.id)},callback:function(){t.mainSidebar.sidebarElement&&(t.mainSidebar.sidebarElement.style.visibility="visible")}}),this.sidebar.mount(this.container)}}},{key:"subtitlesSelector",value:function(){var t=this;if(this.mainSidebar){var e=this.player.captionsOptions(),i=this.selectedPlaybackCaption,s=[{id:"off",text:"Off",isSelected:"off"===i,callback:function(){t.mainSidebar.currentFocusedOption.focus(),t.sidebar.unmount()}}].concat(n(e.map(function(e){return{id:e.language,text:e.label,isSelected:i===e.language||"showing"===e.mode,callback:function(){t.mainSidebar.currentFocusedOption.focus(),t.sidebar.unmount()}}})));this.sidebar=new c({title:"Subtitles",items:s,klassname:"default-sidebar",lastFocusedElement:this.mainSidebar.currentFocusedOption,type:"selection",focused:!0,callback:function(){t.mainSidebar.sidebarElement&&(t.mainSidebar.sidebarElement.style.visibility="visible")},onselect:function(e){t.changePlaybackCaptions(e.id)}}),this.sidebar.mount(this.container)}}},{key:"createSideBar",value:function(){var t=this,e=[{text:"Video Quality",isSelected:!0,callback:function(){t.mainSidebar.sidebarElement&&(t.mainSidebar.sidebarElement.style.visibility="hidden"),t.videoQualitySelector()}}];this.player.audioTracks()&&this.player.audioTracks().length>0&&e.push({text:"Audio Language",isSelected:!1,callback:function(){t.mainSidebar.sidebarElement&&(t.mainSidebar.sidebarElement.style.visibility="hidden"),t.audioLanguageSelector()}}),this.player.captionsOptions()&&this.player.captionsOptions().length>0&&e.push({text:"Subtitles",isSelected:!1,callback:function(){t.mainSidebar.sidebarElement&&(t.mainSidebar.sidebarElement.style.visibility="hidden"),t.subtitlesSelector()}}),this.mainSidebar=new c({title:"Settings",items:e,klassname:"default-sidebar",lastFocusedElement:this.settingsBtn.buttonElement,type:"navigation",focused:!0,callback:function(){t.showPlayerControls()}}),this.mainSidebar.mount(this.container)}},{key:"hidePlayerControls",value:function(){this.rightSideContainer&&(this.rightSideContainer.style.visibility="hidden"),this.seekbar&&(this.seekbar.container.style.visibility="hidden"),this.leftSideContainer&&(this.leftSideContainer.style.visibility="hidden")}},{key:"showPlayerControls",value:function(){this.rightSideContainer&&(this.rightSideContainer.style.visibility="visible"),this.seekbar&&(this.seekbar.container.style.visibility="visible"),this.leftSideContainer&&(this.leftSideContainer.style.visibility="visible")}},{key:"attachTo",value:function(t){if(!(t&&t instanceof HTMLElement))throw new Error("VideoPlayerUI: parent must be a valid DOM element");t.appendChild(this.container)}},{key:"getElement",value:function(){return this.container}},{key:"unmount",value:function(){this.playPauseBtn&&this.playPauseBtn.buttonElement&&(this.playPauseBtn.buttonElement.removeEventListener("focus",this.updatePlayPauseButton),this.playPauseBtn.buttonElement.removeEventListener("blur",this.updatePlayPauseButton),this.playPauseBtn.buttonElement.removeEventListener("keydown",this.handlePlayPauseKeydown)),this.player.video&&(this.player.video.removeEventListener("play",this.updatePlayPauseButton),this.player.video.removeEventListener("pause",this.updatePlayPauseButton)),this.container&&this.container.remove()}}])}(),y=function(t){var e=t.match(/^(?:([0-9]+):)?([0-5][0-9]):([0-5][0-9](?:[.,][0-9]{0,3})?)/);if(null==e)throw"Invalid timestamp format: "+t;var i=parseInt(e[1]||"0",10),n=parseInt(e[2],10);return parseFloat(e[3].replace(",","."))+60*n+3600*i},b=function(){return i(function t(i,n,s){e(this,t),this.mountPoint=document.createElement("div"),this.mountPoint.id=n,this.mountPoint.className="vl-player-container",this.mountPoint.style.width="100%",this.mountPoint.style.height="100%",this.mountPoint.style.position="absolute",this.mountPoint.style.top="0",this.mountPoint.style.left="0",this.parentContainerId?(this.parentContainer=document.getElementById(i),this.parentContainer.appendChild(this.mountPoint)):document.body.appendChild(this.mountPoint),this.config=s,this.hls=null,this.dashjs=null,this.closedCaptions=s.closedCaptions||[],this.enableTrack=s.enableTrack||!1,this.captionsOptionsList=[],this.videoResolutionsList=[],this.audioList=[],this.video=document.createElement("video"),this.video.style.position="absolute",this.track=document.createElement("ttml-rendering-div"),this.video.appendChild(this.track),this.initializePlayer()},[{key:"getCaptionsOptions",value:function(){return this.captionsOptionsList}},{key:"getVideoResolutions",value:function(){return this.videoResolutionsList}},{key:"getAudioTracks",value:function(){return this.audioList}},{key:"initializePlayer",value:function(){var t=this,e=this.config.streamUrl||"";if(!e)throw new Error("Stream URL is required to create HLS player");if(this.video.controls=!1,this.video.style.width="100%",this.video.style.height="100%",this.addPlayerEventListeners(),this.config.drmEnabled){this.dashjs=window.dashjs.MediaPlayer().create();var i=this.config.drmMetadata.widevine,n=this.config.drmMetadata.playReady,s={"com.widevine.alpha":{serverURL:i.licenseUrl,httpRequestHeaders:{"X-AxDRM-Message":i.licenseToken}},"com.microsoft.playready":{serverURL:n.licenseUrl,httpRequestHeaders:{"X-AxDRM-Message":n.licenseToken}}};this.dashjs.initialize(this.video,i.url,!0),this.dashjs.attachTTMLRenderingDiv(this.track),this.dashjs.attachView(this.video),this.dashjs.setProtectionData(s),this.dashjs.preload()}else if(window.Hls&&window.Hls.isSupported()){this.hls=new window.Hls({enableWorker:!0,lowLatencyMode:!0,backBufferLength:90,maxBufferLength:12,maxMaxBufferLength:15,maxFragLookUpTolerance:.25,maxLoadingDelay:4}),this.hls.loadSource(e),this.hls.attachMedia(this.video)}else{if(!this.video.canPlayType("application/vnd.apple.mpegurl"))throw new Error("HLS is not supported in this browser.");this.video.src=e,this.video.addEventListener("loadedmetadata",function(){t.video.play()})}this.config.drmEnabled?this.dashjs.on(dashjs.MediaPlayer.events.STREAM_INITIALIZED,function(){t.videoResolutionsList=t.dashjs.getBitrateInfoListFor("video"),t.audioList=t.dashjs.getTracksFor("audio"),t.captionsoptionsList=t.dashjs.getTracksFor("text"),t.player={video:t.video,play:function(){return t.video.play()},pause:function(){return t.video.pause()},captionsOptions:function(){return t.getCaptionsOptions()},videoResolutions:function(){return t.getVideoResolutions()},audioTracks:function(){return t.getAudioTracks()},playerInstance:t.dashjs},t.ui=new v({player:t.player,config:t.config}),t.ui.attachTo(t.mountPoint)}):(this.hls.on(window.Hls.Events.AUDIO_TRACKS_UPDATED,function(){t.audioList=t.hls.audioTracks}),this.hls.on(window.Hls.Events.MANIFEST_PARSED,function(){t.videoResolutionsList=t.hls.levels,t.player={video:t.video,play:function(){return t.video.play()},pause:function(){return t.video.pause()},captionsOptions:function(){return t.getCaptionsOptions()},videoResolutions:function(){return t.getVideoResolutions()},audioTracks:function(){return t.getAudioTracks()},playerInstance:t.hls},t.ui=new v({player:t.player,config:t.config}),t.ui.attachTo(t.mountPoint)}))}},{key:"addPlayerEventListeners",value:function(){this.video&&(this.video.addEventListener("loadedmetadata",this.onVideoLoad),this.video.addEventListener("canplaythrough",this.canplaythrough.bind(this)),this.video.addEventListener("ended",this.onPlayebackEnded),this.video.addEventListener("timeupdate",this.playbackprogress),this.video.addEventListener("playing",this.onPlaying),this.video.addEventListener("error",this.onError),this.video.addEventListener("waiting",this.onBuffering),this.video.addEventListener("play",this.onPlay),this.video.addEventListener("seeked",this.onSeeked),this.video.addEventListener("stalled",this.onStalled))}},{key:"removePlayerEventListeners",value:function(){this.video&&(this.video.removeEventListener("loadedmetadata",this.onVideoLoad),this.video.removeEventListener("ended",this.onPlayebackEnded),this.video.removeEventListener("timeupdate",this.playbackprogress),this.video.removeEventListener("playing",this.onPlaying),this.video.removeEventListener("error",this.onError),this.video.removeEventListener("waiting",this.onBuffering),this.video.removeEventListener("play",this.onPlay),this.video.removeEventListener("canplaythrough",this.canplaythrough.bind(this)),this.video.removeEventListener("seeked",this.onSeeked),this.video.removeEventListener("stalled",this.onStalled))}},{key:"canplaythrough",value:function(){if(this.captionsOptionsList.length<=0){this.addAllCaptionsToPlayer(0);var t=this.video.textTracks;if(null!=t&&t.length>0)for(var e=0;e<t.length;e++)"captions"!=t[e].kind.toLowerCase()&&"subtitles"!=t[e].kind.toLowerCase()&&"caption"!=t[e].kind.toLowerCase()&&"subtitle"!=t[e].kind.toLowerCase()||this.captionsOptionsList.push(t[e])}console.log("TEXT TRACKS:",this.captionsOptionsList),console.log("VIDEO RESOLUTION:",this.videoResolutionsList),console.log("AUDIO TRACKS:",this.audioList)}},{key:"addAllCaptionsToPlayer",value:function(t){var e=this;if(!(t>=this.closedCaptions.length)){var i=this.closedCaptions[t].language;fetch(this.closedCaptions[t].url).then(function(t){return t.json()}).then(function(n){if(n.hasOwnProperty("type"))"failure"===n.type&&e.addAllCaptionsToPlayer(t+1);else{var s={data:n,label:i,lang:i};e.addCaptionToPlayer(s),e.addAllCaptionsToPlayer(t+1)}}).catch(function(i){e.addAllCaptionsToPlayer(t+1)})}}},{key:"addCaptionToPlayer",value:function(t){var e,i=null===(e=this.player)||void 0===e||null===(e=e.video)||void 0===e?void 0:e.addTextTrack("captions",t.label,t.lang);i&&(i.mode="hidden"),function(t){try{var e=t.trim().split(/[\r\n\r\n]/).map(function(t){return t.trim()})}catch(i){try{e=t.message.split(/[\r\n\r\n]/).map(function(t){return t.trim()})}catch(t){return[]}}for(var i=[],n=null,s=null,o=null,a=0;a<e.length;a++)if(e[a].indexOf("--\x3e")>=0){var r,l=e[a].split(/[ \t]+-->[ \t]+/);if(2!=l.length)throw'Error when splitting "--\x3e": '+e[a];null!=n&&null!=s&&null!=o&&((r=new VTTCue(n,s,o)).line=13,i.push(r)),o=null,n=null,s=null,l[0]&&l[1]&&-1==l[0].indexOf("undefined")&&-1==l[1].indexOf("undefined")&&(n=y(l[0]),s=y(l[1]))}else if(null!=e[a]&&""!=e[a].trim())try{Number(e[a])>0||(o=""==(o=null==o?"":o).trim()?e[a]:o+"\n"+e[a])}catch(t){o=""==(o=null==o?"":o).trim()?e[a]:o+"\n"+e[a]}return n&&s&&o&&((r=new VTTCue(n,s,o)).line=13,i.push(r)),i}(t.data).map(function(t){i&&i.addCue(t)})}},{key:"toggleCaptions",value:function(){try{if(!this.video)return;var t=this.video.textTracks;if(t&&t.length>0)for(var e=0;e<t.length;e++){var i,n=t[e],s=null===(i=n.kind)||void 0===i?void 0:i.toLowerCase();if(["captions","subtitles","caption","subtitle"].includes(s))if(this.enableTrack)n.mode="hidden";else{var o;if((null===(o=n.cues)||void 0===o?void 0:o.length)>0){n.mode="showing";break}n.mode="disabled"}}}catch(t){console.error("Error managing captions:",t)}this.track&&(this.track.style.display=this.enableTrack?"none":"flex")}},{key:"onVideoLoad",value:function(){console.log("Video metadata loaded")}},{key:"onPlayebackEnded",value:function(){console.log("Playback ended")}},{key:"playbackprogress",value:function(){console.log("Playback progress updated")}},{key:"onPlaying",value:function(){console.log("Video is playing")}},{key:"onError",value:function(t){console.error("Video error:",t)}},{key:"onBuffering",value:function(){console.log("Video is buffering")}},{key:"onPlay",value:function(){console.log("Video started playing")}},{key:"onSeeked",value:function(){console.log("Video seeked")}},{key:"onStalled",value:function(){console.log("Video stalled")}},{key:"unmount",value:function(){this.mountPoint.remove(),this.mountPoint=void 0}}])}();exports.createHlsPlayer=function(t,e,i){if(!e)throw new Error("playerId must be a valid id");if(!i||"object"!==o(i))throw new Error("Config must be a valid object");return new b(t,e,i)};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGxheWVyLWNvbXBvbmVudHMvcGxheWVyLWJ1dHRvbnMvcGxheWVyQnV0dG9ucy5qcyIsIi4uL3NyYy9wbGF5ZXItY29tcG9uZW50cy9wbGF5ZXItc2Vla2Jhci9wbGF5ZXJTZWVrYmFyLmpzIiwiLi4vc3JjL3BsYXllci1jb21wb25lbnRzL3BsYXllci10aXRsZS9wbGF5ZXJUaXRsZS5qcyIsIi4uL3NyYy9wbGF5ZXItY29tcG9uZW50cy9wbGF5ZXItc2V0dGluZy1vcHRpb24td3JhcHBlci9wbGF5ZXItc2V0dGluZy1vcHRpb24tb25lLXdyYXBwZXIuanMiLCIuLi9zcmMvcGxheWVyLWNvbXBvbmVudHMvcGxheWVyLXNldHRpbmctb3B0aW9uLXdyYXBwZXIvcGxheWVyLXNldHRpbmctb3B0aW9uLXR3by13cmFwcGVyLmpzIiwiLi4vc3JjL2Fzc2V0cy9jaGVja0ljb24ucG5nIiwiLi4vc3JjL3BsYXllci1jb21wb25lbnRzL3BsYXllci1zaWRlYmFyL3BsYXllci1zaWRlYmFyLmpzIiwiLi4vc3JjL2Fzc2V0cy9wbGF5SWNvbi5wbmciLCIuLi9zcmMvYXNzZXRzL3BhdXNlSWNvbi5wbmciLCIuLi9zcmMvYXNzZXRzL3BsYXlJY29uRm9jdXMucG5nIiwiLi4vc3JjL2Fzc2V0cy9wYXVzZUljb25Gb2N1cy5wbmciLCIuLi9zcmMvcGxheWVyLXVpL3BsYXllci11aS5qcyIsIi4uL3NyYy9hc3NldHMvc2V0dGluZ3NJY29uLnBuZyIsIi4uL3NyYy91dGlsaXRpZXMvdXRpbGl0aWVzLmpzIiwiLi4vc3JjL3BsYXllckluaXRpYWxpemVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIGlmICghcHJvcHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQnV0dG9uIENsYXNzOiBwcm9wcyBhcmUgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW1nU3JjID0gcHJvcHMuaW1nU3JjIHx8ICcnO1xuICAgICAgICB0aGlzLmltZ0FsdFRleHQgPSBwcm9wcy5pbWdBbHRUZXh0IHx8ICcnO1xuICAgICAgICB0aGlzLmJ1dHRvblRleHQgPSBwcm9wcy5idXR0b25UZXh0IHx8ICcnO1xuICAgICAgICB0aGlzLmtsYXNzbmFtZSA9IHByb3BzLmtsYXNzbmFtZSB8fCAnZGVmYXVsdC1idXR0b24nO1xuICAgICAgICB0aGlzLndpZHRoID0gcHJvcHMud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgICAgICB0aGlzLmZvbnRXZWlnaHQgPSBwcm9wcy5mb250V2VpZ2h0O1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSBwcm9wcy5mb2N1c2VkIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSBwcm9wcy5oYW5kbGVDbGljayB8fCAoKCkgPT4ge30pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYW5kbGVDbGljayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCdXR0b24gQ2xhc3M6IGhhbmRsZUNsaWNrIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMua2xhc3NuYW1lICs9ICcgZGlzYWJsZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5rbGFzc25hbWUgKz0gJyBmb2N1c2VkJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZvY3VzZWQnKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAodGhpcy5idXR0b25FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2ZvY3VzZWQnKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW91bnQobW91bnRQb2ludCkge1xuICAgICAgICBpZiAoIW1vdW50UG9pbnQgfHwgIShtb3VudFBvaW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J1dHRvbiBDbGFzczogbW91bnRQb2ludCBtdXN0IGJlIGEgdmFsaWQgRE9NIGVsZW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBidXR0b24uY2xhc3NOYW1lID0gdGhpcy5rbGFzc25hbWU7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS53aWR0aCA9IGAke3RoaXMud2lkdGh9cHhgO1xuICAgICAgICBidXR0b24uc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5oZWlnaHR9cHhgO1xuICAgICAgICBidXR0b24uc3R5bGUuZm9udFdlaWdodCA9IHRoaXMuZm9udFdlaWdodDtcbiAgICAgICAgYnV0dG9uLnRhYkluZGV4ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5pbWdTcmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICAgICAgaW1nLnNyYyA9IHRoaXMuaW1nU3JjO1xuICAgICAgICAgICAgaW1nLmFsdCA9IHRoaXMuaW1nQWx0VGV4dDtcbiAgICAgICAgICAgIGltZy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQnV0dG9uIENsYXNzOiBGYWlsZWQgdG8gbG9hZCBpbWFnZSBhdCcsIHRoaXMuaW1nU3JjKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBidXR0b24uYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gdGhpcy5idXR0b25UZXh0O1xuICAgICAgICAgICAgYnV0dG9uLmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrKTtcbiAgICAgICAgfVxuICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdPSycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2ZvY3VzZWQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnZm9jdXNlZCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b247XG4gICAgICAgIG1vdW50UG9pbnQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcbiAgICB9XG5cbiAgICB1bm1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5idXR0b25FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVDbGljayk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLmhhbmRsZUNsaWNrKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5oYW5kbGVDbGljayk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59IiwiZXhwb3J0IGNsYXNzIFBsYXllclNlZWtiYXIge1xuICBjb25zdHJ1Y3Rvcih2aWRlbykge1xuICAgIGlmICghdmlkZW8gfHwgISh2aWRlbyBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsYXllclNlZWtiYXI6IEEgdmFsaWQgSFRNTFZpZGVvRWxlbWVudCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMudmlkZW8gPSB2aWRlbztcbiAgICB0aGlzLmNvbnRhaW5lciA9IG51bGw7XG4gICAgdGhpcy5wcm9ncmVzcyA9IG51bGw7XG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMudGh1bWIgPSBudWxsO1xuICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gICAgdGhpcy50aW1lTGFiZWwgPSBudWxsO1xuICAgIHRoaXMuZHVyYXRpb25MYWJlbCA9IG51bGw7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAnc2Vla2Jhci1jb250YWluZXInO1xuXG4gICAgdGhpcy5idWZmZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLmJ1ZmZlci5jbGFzc05hbWUgPSAnc2Vla2Jhci1idWZmZXInO1xuXG4gICAgdGhpcy5wcm9ncmVzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucHJvZ3Jlc3MuY2xhc3NOYW1lID0gJ3NlZWtiYXItcHJvZ3Jlc3MnO1xuXG4gICAgdGhpcy50aHVtYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMudGh1bWIuY2xhc3NOYW1lID0gJ3NlZWtiYXItdGh1bWInO1xuICAgIHRoaXMudGh1bWIudGFiSW5kZXggPSAwOyAvLyBNYWtlIHRodW1iIGZvY3VzYWJsZVxuXG4gICAgdGhpcy50b29sdGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy50b29sdGlwLmNsYXNzTmFtZSA9ICdzZWVrYmFyLXRvb2x0aXAnO1xuICAgIHRoaXMudG9vbHRpcC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgdGhpcy50aW1lTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgdGhpcy50aW1lTGFiZWwuY2xhc3NOYW1lID0gJ3NlZWtiYXItdGltZS1sYWJlbCc7XG4gICAgdGhpcy5kdXJhdGlvbkxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHRoaXMuZHVyYXRpb25MYWJlbC5jbGFzc05hbWUgPSAnc2Vla2Jhci1kdXJhdGlvbi1sYWJlbCc7XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wcm9ncmVzcyk7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50aHVtYik7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50b29sdGlwKTtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRpbWVMYWJlbCk7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kdXJhdGlvbkxhYmVsKTtcblxuICAgIC8vIFVwZGF0ZSBVSSBhcyB2aWRlbyBwbGF5c1xuICAgIHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsICgpID0+IHRoaXMudXBkYXRlKCkpO1xuICAgIHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCAoKSA9PiB0aGlzLnVwZGF0ZUJ1ZmZlcigpKTtcbiAgICB0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2R1cmF0aW9uY2hhbmdlJywgKCkgPT4gdGhpcy51cGRhdGUoKSk7XG5cbiAgICAvLyBTZWVrIG9uIGNsaWNrXG4gICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gdGhpcy5zZWVrKGUpKTtcbiAgICAvLyBEcmFnZ2luZ1xuICAgIHRoaXMudGh1bWIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHRoaXMuc3RhcnREcmFnKGUpKTtcbiAgICAvLyBUb29sdGlwIG9uIGhvdmVyXG4gICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgKGUpID0+IHRoaXMuc2hvd1Rvb2x0aXAoZSkpO1xuICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB0aGlzLmhpZGVUb29sdGlwKCkpO1xuXG4gICAgLy8gRm9jdXMvYmx1ciBldmVudHMgZm9yIGFjY2Vzc2liaWxpdHkgYW5kIHZpc3VhbCBmZWVkYmFja1xuICAgIHRoaXMudGh1bWIuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgdGhpcy50aHVtYi5jbGFzc0xpc3QuYWRkKCdmb2N1c2VkJyk7XG4gICAgfSk7XG4gICAgdGhpcy50aHVtYi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnRodW1iLmNsYXNzTGlzdC5yZW1vdmUoJ2ZvY3VzZWQnKTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBrZXlkb3duIGV2ZW50IGxpc3RlbmVycyBmb3IgYXJyb3cga2V5cyB0byBzaW11bGF0ZSBkcmFnZ2luZ1xuICAgIHRoaXMudGh1bWIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICBjb25zdCBpbmNyZW1lbnQgPSAxOyBcbiAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy52aWRlby5jdXJyZW50VGltZSA9IE1hdGgubWluKHRoaXMudmlkZW8uZHVyYXRpb24sIHRoaXMudmlkZW8uY3VycmVudFRpbWUgKyBpbmNyZW1lbnQpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnZpZGVvLmN1cnJlbnRUaW1lID0gTWF0aC5tYXgoMCwgdGhpcy52aWRlby5jdXJyZW50VGltZSAtIGluY3JlbWVudCk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYodGhpcy52aWRlby5wYXVzZWQpIHtcbiAgICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTsgLy8gUmVzdW1lIHBsYXlpbmcgdGhlIHZpZGVvXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGlmICh0aGlzLnRodW1iKSB7XG4gICAgICB0aGlzLnRodW1iLmZvY3VzKCk7XG4gICAgICB0aGlzLnRodW1iLmNsYXNzTGlzdC5hZGQoJ2ZvY3VzZWQnKTtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgYmx1cigpIHtcbiAgICBpZiAodGhpcy50aHVtYikge1xuICAgICAgdGhpcy50aHVtYi5ibHVyKCk7XG4gICAgICB0aGlzLnRodW1iLmNsYXNzTGlzdC5yZW1vdmUoJ2ZvY3VzZWQnKTtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFRpbWUoc2Vjb25kcykge1xuICAgIGlmIChpc05hTihzZWNvbmRzKSkgcmV0dXJuICcwOjAwJztcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApO1xuICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKHNlY29uZHMgJSA2MCk7XG4gICAgcmV0dXJuIGAke219OiR7U3RyaW5nKHMpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMudmlkZW8gfHwgIXRoaXMucHJvZ3Jlc3MgfHwgIXRoaXMudGh1bWIgfHwgIXRoaXMudGltZUxhYmVsIHx8ICF0aGlzLmR1cmF0aW9uTGFiZWwpIHJldHVybjtcblxuICAgIGNvbnN0IHBlcmNlbnQgPSAodGhpcy52aWRlby5jdXJyZW50VGltZSAvIHRoaXMudmlkZW8uZHVyYXRpb24pICogMTAwO1xuICAgIHRoaXMucHJvZ3Jlc3Muc3R5bGUud2lkdGggPSBwZXJjZW50ICsgJyUnO1xuICAgIHRoaXMudGh1bWIuc3R5bGUubGVmdCA9IHBlcmNlbnQgKyAnJSc7XG4gICAgdGhpcy50aW1lTGFiZWwudGV4dENvbnRlbnQgPSB0aGlzLmZvcm1hdFRpbWUodGhpcy52aWRlby5jdXJyZW50VGltZSk7XG4gICAgdGhpcy5kdXJhdGlvbkxhYmVsLnRleHRDb250ZW50ID0gJyAvICcgKyB0aGlzLmZvcm1hdFRpbWUodGhpcy52aWRlby5kdXJhdGlvbik7XG4gIH1cblxuICB1cGRhdGVCdWZmZXIoKSB7XG4gICAgaWYgKCF0aGlzLnZpZGVvIHx8ICF0aGlzLmJ1ZmZlcikgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMudmlkZW8uYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLnZpZGVvLmJ1ZmZlcmVkLmVuZCh0aGlzLnZpZGVvLmJ1ZmZlcmVkLmxlbmd0aCAtIDEpO1xuICAgICAgY29uc3QgcGVyY2VudCA9IChlbmQgLyB0aGlzLnZpZGVvLmR1cmF0aW9uKSAqIDEwMDtcbiAgICAgIHRoaXMuYnVmZmVyLnN0eWxlLndpZHRoID0gcGVyY2VudCArICclJztcbiAgICB9XG4gIH1cblxuICBzZWVrKGUpIHtcbiAgICBpZiAodGhpcy5pc0RyYWdnaW5nIHx8ICF0aGlzLmNvbnRhaW5lciB8fCAhdGhpcy52aWRlbykgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHBlcmNlbnQgPSAoZS5jbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy52aWRlby5jdXJyZW50VGltZSA9IHBlcmNlbnQgKiB0aGlzLnZpZGVvLmR1cmF0aW9uO1xuICB9XG5cbiAgc3RhcnREcmFnKGUpIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyIHx8ICF0aGlzLnZpZGVvKSByZXR1cm47XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBvbk1vdmUgPSAobW92ZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBsZXQgcGVyY2VudCA9IChtb3ZlRXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoO1xuICAgICAgcGVyY2VudCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHBlcmNlbnQpKTtcbiAgICAgIHRoaXMucHJvZ3Jlc3Muc3R5bGUud2lkdGggPSBwZXJjZW50ICogMTAwICsgJyUnO1xuICAgICAgdGhpcy50aHVtYi5zdHlsZS5sZWZ0ID0gcGVyY2VudCAqIDEwMCArICclJztcbiAgICAgIHRoaXMudGltZUxhYmVsLnRleHRDb250ZW50ID0gdGhpcy5mb3JtYXRUaW1lKHBlcmNlbnQgKiB0aGlzLnZpZGVvLmR1cmF0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uVXAgPSAodXBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgbGV0IHBlcmNlbnQgPSAodXBFdmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGg7XG4gICAgICBwZXJjZW50ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgcGVyY2VudCkpO1xuICAgICAgdGhpcy52aWRlby5jdXJyZW50VGltZSA9IHBlcmNlbnQgKiB0aGlzLnZpZGVvLmR1cmF0aW9uO1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uVXApO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25VcCk7XG4gIH1cblxuICBzaG93VG9vbHRpcChlKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lciB8fCAhdGhpcy50b29sdGlwIHx8ICF0aGlzLnZpZGVvKSByZXR1cm47XG5cbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcGVyY2VudCA9IChlLmNsaWVudFggLSByZWN0LmxlZnQpIC8gcmVjdC53aWR0aDtcbiAgICBjb25zdCB0aW1lID0gcGVyY2VudCAqIHRoaXMudmlkZW8uZHVyYXRpb247XG4gICAgdGhpcy50b29sdGlwLnRleHRDb250ZW50ID0gdGhpcy5mb3JtYXRUaW1lKHRpbWUpO1xuICAgIHRoaXMudG9vbHRpcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLnRvb2x0aXAuc3R5bGUubGVmdCA9IGAke3BlcmNlbnQgKiAxMDB9JWA7XG4gIH1cblxuICBoaWRlVG9vbHRpcCgpIHtcbiAgICBpZiAodGhpcy50b29sdGlwKSB7XG4gICAgICB0aGlzLnRvb2x0aXAuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBnZXRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRodW1iO1xuICB9XG5cbiAgbW91bnQocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQgfHwgIShwYXJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxheWVyU2Vla2JhcjogcGFyZW50IG11c3QgYmUgYSB2YWxpZCBET00gZWxlbWVudCcpO1xuICAgIH1cblxuICAgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZUJ1ZmZlcigpO1xuICB9XG5cbiAgdW5tb3VudCgpIHtcbiAgICBpZiAoIXRoaXMudmlkZW8gfHwgIXRoaXMuY29udGFpbmVyIHx8ICF0aGlzLnRodW1iKSByZXR1cm47XG5cbiAgICB0aGlzLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLnVwZGF0ZSk7XG4gICAgdGhpcy52aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMudXBkYXRlQnVmZmVyKTtcbiAgICB0aGlzLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2R1cmF0aW9uY2hhbmdlJywgdGhpcy51cGRhdGUpO1xuICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5zZWVrKTtcbiAgICB0aGlzLnRodW1iLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuc3RhcnREcmFnKTtcbiAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLnNob3dUb29sdGlwKTtcbiAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5oaWRlVG9vbHRpcCk7XG4gICAgdGhpcy50aHVtYi5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuZm9jdXMpO1xuICAgIHRoaXMudGh1bWIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuYmx1cik7XG4gICAgdGhpcy50aHVtYi5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duSGFuZGxlcik7XG5cbiAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIFRleHRDb250ZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBpZiAoIXByb3BzIHx8IHR5cGVvZiBwcm9wcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dENvbnRlbnQ6IHByb3BzIG11c3QgYmUgYSB2YWxpZCBvYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dCA9IHByb3BzLnRleHQgfHwgJyc7XG4gICAgICAgIHRoaXMuZm9udFNpemUgPSBwcm9wcy5mb250U2l6ZSB8fCAnMTZweCc7XG4gICAgICAgIHRoaXMuZm9udEZhbWlseSA9IHByb3BzLmZvbnRGYW1pbHkgfHwgJ0FyaWFsLCBzYW5zLXNlcmlmJztcbiAgICAgICAgdGhpcy5mb250V2VpZ2h0ID0gcHJvcHMuZm9udFdlaWdodCB8fCAnbm9ybWFsJztcbiAgICAgICAgdGhpcy50ZXh0QWxpZ24gPSBwcm9wcy50ZXh0QWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICB0aGlzLnRleHREZWNvcmF0aW9uID0gcHJvcHMudGV4dERlY29yYXRpb24gfHwgJ25vbmUnO1xuICAgICAgICB0aGlzLnRleHRUcmFuc2Zvcm0gPSBwcm9wcy50ZXh0VHJhbnNmb3JtIHx8ICdub25lJztcbiAgICAgICAgdGhpcy5saW5lSGVpZ2h0ID0gcHJvcHMubGluZUhlaWdodCB8fCAnbm9ybWFsJztcbiAgICAgICAgdGhpcy5sZXR0ZXJTcGFjaW5nID0gcHJvcHMubGV0dGVyU3BhY2luZyB8fCAnbm9ybWFsJztcbiAgICAgICAgdGhpcy5jb2xvciA9IHByb3BzLmNvbG9yIHx8ICcjMDAwJztcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBwcm9wcy5iYWNrZ3JvdW5kQ29sb3IgfHwgJ3RyYW5zcGFyZW50JztcbiAgICAgICAgdGhpcy5rbGFzc25hbWUgPSBwcm9wcy5rbGFzc25hbWUgfHwgJ2RlZmF1bHQtdGV4dC1jb250ZW50JztcbiAgICAgICAgdGhpcy53aWR0aCA9IHByb3BzLndpZHRoIHx8IDEwMDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBwcm9wcy5oZWlnaHQgfHwgNTA7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IHByb3BzLmZvY3VzZWQgfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgc2V0VGV4dCh0ZXh0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dENvbnRlbnQ6IHRleHQgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW91bnQobW91bnRQb2ludCkge1xuICAgICAgICBpZiAoIW1vdW50UG9pbnQgfHwgIShtb3VudFBvaW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHRDb250ZW50OiBtb3VudFBvaW50IG11c3QgYmUgYSB2YWxpZCBET00gZWxlbWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZXh0LmNsYXNzTmFtZSA9IHRoaXMua2xhc3NuYW1lO1xuICAgICAgICB0ZXh0LnN0eWxlLmZvbnRTaXplID0gdGhpcy5mb250U2l6ZTtcbiAgICAgICAgdGV4dC5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICAgIHRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgIHRleHQuc3R5bGUuZm9udFdlaWdodCA9IHRoaXMuZm9udFdlaWdodDtcbiAgICAgICAgdGV4dC5pbm5lclRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIG1vdW50UG9pbnQuYXBwZW5kQ2hpbGQodGV4dCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGV4dDtcbiAgICB9XG5cbiAgICB1bm1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59IiwiZXhwb3J0IGNsYXNzIFNldHRpbmdzT3B0aW9uT25lV3JhcHBlciB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgaWYgKCFwcm9wcyB8fCB0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldHRpbmdzT3B0aW9uT25lV3JhcHBlcjogcHJvcHMgbXVzdCBiZSBhIHZhbGlkIG9iamVjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aXRsZSA9IHByb3BzLnRpdGxlIHx8ICdPcHRpb24nO1xuICAgICAgICB0aGlzLmtsYXNzbmFtZSA9IHByb3BzLmtsYXNzbmFtZSB8fCAnZGVmYXVsdC1vcHRpb24td3JhcHBlcic7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSBwcm9wcy5jYWxsYmFjayB8fCAoKCkgPT4ge30pO1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSBwcm9wcy5mb2N1c2VkIHx8IGZhbHNlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYW5kbGVDbGljayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXR0aW5nc09wdGlvbk9uZVdyYXBwZXI6IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBtb3VudChtb3VudFBvaW50KSB7XG4gICAgICAgIGlmICghbW91bnRQb2ludCB8fCAhKG1vdW50UG9pbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZ3NPcHRpb25PbmVXcmFwcGVyOiBtb3VudFBvaW50IG11c3QgYmUgYSB2YWxpZCBET00gZWxlbWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBvcHRpb25XcmFwcGVyLmNsYXNzTmFtZSA9IHRoaXMua2xhc3NuYW1lO1xuICAgICAgICBvcHRpb25XcmFwcGVyLnRhYkluZGV4ID0gMDtcblxuICAgICAgICBjb25zdCB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgICAgIHRpdGxlRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMudGl0bGU7XG4gICAgICAgIG9wdGlvbldyYXBwZXIuYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTtcblxuICAgICAgICBjb25zdCBhcnJvd0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgICAgIGFycm93RWxlbWVudC50ZXh0Q29udGVudCA9IFwi4oC6XCI7XG4gICAgICAgIG9wdGlvbldyYXBwZXIuYXBwZW5kQ2hpbGQoYXJyb3dFbGVtZW50KTtcblxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICBvcHRpb25XcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2ZvY3VzZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbldyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgb3B0aW9uV3JhcHBlci5jbGFzc0xpc3QuYWRkKCdmb2N1c2VkJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcHRpb25XcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIG9wdGlvbldyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnZm9jdXNlZCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBvcHRpb25XcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnT0snKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGljaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9wdGlvbldyYXBwZXIgPSBvcHRpb25XcmFwcGVyO1xuICAgICAgICBvcHRpb25XcmFwcGVyLmluc3RhbmNlID0gdGhpczsgLy8gU2V0IHRoZSBpbnN0YW5jZSBwcm9wZXJ0eVxuICAgICAgICBtb3VudFBvaW50LmFwcGVuZENoaWxkKG9wdGlvbldyYXBwZXIpO1xuICAgIH1cblxuICAgIHVubW91bnQoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbldyYXBwZXIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uV3JhcHBlci5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uV3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25XcmFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbldyYXBwZXIuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uV3JhcHBlci5jbGFzc0xpc3QuYWRkKCdmb2N1c2VkJyk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmx1cigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uV3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25XcmFwcGVyLmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1c2VkJyk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn0gICAgICAgXG4iLCJpbXBvcnQgY2hlY2tJY29uIGZyb20gJy4uLy4uL2Fzc2V0cy9jaGVja0ljb24ucG5nJztcblxuZXhwb3J0IGNsYXNzIFNldHRpbmdzT3B0aW9uVHdvV3JhcHBlciB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgaWYgKCFwcm9wcyB8fCB0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldHRpbmdzT3B0aW9uVHdvV3JhcHBlcjogcHJvcHMgbXVzdCBiZSBhIHZhbGlkIG9iamVjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aXRsZSA9IHByb3BzLnRpdGxlIHx8ICdPcHRpb24nO1xuICAgICAgICB0aGlzLmtsYXNzbmFtZSA9IHByb3BzLmtsYXNzbmFtZSB8fCAnZGVmYXVsdC1vcHRpb24td3JhcHBlcic7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBwcm9wcy5zZWxlY3RlZCB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gcHJvcHMuZm9jdXNlZCB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5pbWdTcmMgPSBwcm9wcy5pbWdTcmMgfHwgY2hlY2tJY29uO1xuICAgICAgICB0aGlzLmlkID0gcHJvcHMuaWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXR0aW5nc09wdGlvblR3b1dyYXBwZXI6IHRpdGxlIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1vdW50KG1vdW50UG9pbnQpIHtcbiAgICAgICAgaWYgKCFtb3VudFBvaW50IHx8ICEobW91bnRQb2ludCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXR0aW5nc09wdGlvblR3b1dyYXBwZXI6IG1vdW50UG9pbnQgbXVzdCBiZSBhIHZhbGlkIERPTSBlbGVtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25XcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIG9wdGlvbldyYXBwZXIuY2xhc3NOYW1lID0gdGhpcy5rbGFzc25hbWU7XG4gICAgICAgIG9wdGlvbldyYXBwZXIudGFiSW5kZXggPSAwO1xuXG4gICAgICAgIGNvbnN0IHRpdGxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy50aXRsZTtcbiAgICAgICAgb3B0aW9uV3JhcHBlci5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICBvcHRpb25XcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgICAgIGltZy5zcmMgPSB0aGlzLmltZ1NyYztcbiAgICAgICAgICAgIGltZy5hbHQgPSB0aGlzLmltZ0FsdFRleHQgfHwgJ1NlbGVjdGVkJztcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5hcHBlbmRDaGlsZChpbWcpO1xuICAgICAgICAgICAgb3B0aW9uV3JhcHBlci5hcHBlbmRDaGlsZChzZWxlY3RlZEVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgb3B0aW9uV3JhcHBlci5jbGFzc0xpc3QuYWRkKCdmb2N1c2VkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25XcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIG9wdGlvbldyYXBwZXIuY2xhc3NMaXN0LmFkZCgnZm9jdXNlZCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9uV3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICBvcHRpb25XcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ2ZvY3VzZWQnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vcHRpb25XcmFwcGVyID0gb3B0aW9uV3JhcHBlcjtcbiAgICAgICAgb3B0aW9uV3JhcHBlci5pbnN0YW5jZSA9IHRoaXM7IC8vIFNldCB0aGUgaW5zdGFuY2UgcHJvcGVydHlcbiAgICAgICAgbW91bnRQb2ludC5hcHBlbmRDaGlsZChvcHRpb25XcmFwcGVyKTtcbiAgICB9XG5cbiAgICB1bm1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25XcmFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbldyYXBwZXIucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbldyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uV3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25XcmFwcGVyLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbldyYXBwZXIuY2xhc3NMaXN0LmFkZCgnZm9jdXNlZCcpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJsdXIoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbldyYXBwZXIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uV3JhcHBlci5ibHVyKCk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbldyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnZm9jdXNlZCcpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59ICAgICAgIFxuIiwiZXhwb3J0IGRlZmF1bHQgXCI1MjJlYTdjNzZhYzRmZDMzLnBuZ1wiIiwiaW1wb3J0IHsgU2V0dGluZ3NPcHRpb25PbmVXcmFwcGVyIH0gZnJvbSAnLi4vcGxheWVyLXNldHRpbmctb3B0aW9uLXdyYXBwZXIvcGxheWVyLXNldHRpbmctb3B0aW9uLW9uZS13cmFwcGVyLmpzJztcbmltcG9ydCB7IFNldHRpbmdzT3B0aW9uVHdvV3JhcHBlciB9IGZyb20gJy4uL3BsYXllci1zZXR0aW5nLW9wdGlvbi13cmFwcGVyL3BsYXllci1zZXR0aW5nLW9wdGlvbi10d28td3JhcHBlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTaWRlYmFyIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBpZiAoIXByb3BzIHx8IHR5cGVvZiBwcm9wcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWJhcjogcHJvcHMgbXVzdCBiZSBhIHZhbGlkIG9iamVjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aXRsZSA9IHByb3BzLnRpdGxlIHx8ICdTZXR0aW5ncyc7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBwcm9wcy5pdGVtcyB8fCBbXG4gICAgICAgICAgICB7dGV4dDogJ1ZpZGVvIFF1YWxpdHknLCBpc1NlbGVjdGVkOiB0cnVlLCBjYWxsYmFjazogKCkgPT4ge319LCBcbiAgICAgICAgICAgIHt0ZXh0OiAnQXVkaW8gTGFuZ3VhZ2UnLCBpc1NlbGVjdGVkOiBmYWxzZSwgY2FsbGJhY2s6ICgpID0+IHt9fSwgXG4gICAgICAgICAgICB7dGV4dDogJ1N1YnRpdGxlcycsIGlzU2VsZWN0ZWQ6IGZhbHNlLCBjYWxsYmFjazogKCkgPT4ge319XG4gICAgICAgIF07XG4gICAgICAgIHRoaXMua2xhc3NuYW1lID0gcHJvcHMua2xhc3NuYW1lIHx8ICdkZWZhdWx0LXNpZGViYXInO1xuICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0Rm9jdXNlZEVsZW1lbnQgPSBwcm9wcy5sYXN0Rm9jdXNlZEVsZW1lbnQgfHwgbnVsbDtcbiAgICAgICAgdGhpcy50eXBlID0gcHJvcHMudHlwZSB8fCAnbmF2aWdhdGlvbic7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IHByb3BzLmZvY3VzZWQgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBwcm9wcy5jYWxsYmFjayB8fCAoKCkgPT4ge30pO1xuICAgICAgICB0aGlzLm9uc2VsZWN0ID0gcHJvcHMub25zZWxlY3QgfHwgKCgpID0+IHt9KTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWJhcjogY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIVsnbmF2aWdhdGlvbicsICdzZWxlY3Rpb24nXS5pbmNsdWRlcyh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGViYXI6IHR5cGUgbXVzdCBiZSBlaXRoZXIgXCJuYXZpZ2F0aW9uXCIgb3IgXCJzZWxlY3Rpb25cIicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW91bnQobW91bnRQb2ludCkge1xuICAgICAgICBpZiAoIW1vdW50UG9pbnQgfHwgIShtb3VudFBvaW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGViYXI6IG1vdW50UG9pbnQgbXVzdCBiZSBhIHZhbGlkIERPTSBlbGVtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHNpZGViYXIuY2xhc3NOYW1lID0gdGhpcy5rbGFzc25hbWU7XG5cbiAgICAgICAgY29uc3QgdGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDInKTtcbiAgICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy50aXRsZTtcbiAgICAgICAgdGl0bGVFbGVtZW50LnN0eWxlLmZvbnRTaXplID0gJzM4cHgnO1xuICAgICAgICBzaWRlYmFyLmFwcGVuZENoaWxkKHRpdGxlRWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSBuZXcgU2V0dGluZ3NPcHRpb25PbmVXcmFwcGVyKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAga2xhc3NuYW1lOiAnZGVmYXVsdC1vcHRpb24td3JhcHBlcicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ6IGlkeCA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGl0ZW0uY2FsbGJhY2tcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpdGVtLmluc3RhbmNlID0gbGlzdEl0ZW07IC8vIFN0b3JlIHRoZSBsaXN0SXRlbSBpbnN0YW5jZSBpbiB0aGUgaXRlbVxuICAgICAgICAgICAgICAgIGlmIChpZHggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNlZE9wdGlvbiA9IGxpc3RJdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsaXN0SXRlbS5tb3VudChsaXN0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ3NlbGVjdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSBuZXcgU2V0dGluZ3NPcHRpb25Ud29XcmFwcGVyKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAga2xhc3NuYW1lOiAnZGVmYXVsdC1vcHRpb24td3JhcHBlcicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ6IGlkeCA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGl0ZW0uaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaXRlbS5pbnN0YW5jZSA9IGxpc3RJdGVtOyAvLyBTdG9yZSB0aGUgbGlzdEl0ZW0gaW5zdGFuY2UgaW4gdGhlIGl0ZW1cbiAgICAgICAgICAgICAgICBpZiAoaWR4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvY3VzZWRPcHRpb24gPSBsaXN0SXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGlzdEl0ZW0ubW91bnQobGlzdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNpZGViYXIuYXBwZW5kQ2hpbGQobGlzdCk7XG4gICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQgPSBzaWRlYmFyO1xuICAgICAgICBtb3VudFBvaW50LmFwcGVuZENoaWxkKHNpZGViYXIpO1xuXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2lkZWJhckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWJhcjogc2lkZWJhckVsZW1lbnQgaXMgbm90IGluaXRpYWxpemVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51bmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51bm1vdW50KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdPSycpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzZWxlY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uVHlwZUFjdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VsZWN0aW9uVHlwZUFjdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvY3VzZWRPcHRpb24pIHtcbiAgICAgICAgICAgIC8vIERlc2VsZWN0IGFsbCBvcHRpb25zXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5pbnN0YW5jZS5vcHRpb25XcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaW5zdGFuY2Uuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGltYWdlIGlmIHByZXNlbnRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nID0gaXRlbS5pbnN0YW5jZS5vcHRpb25XcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW1nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcucGFyZW50RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU2VsZWN0IHRoZSBjdXJyZW50IG9wdGlvblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNlZE9wdGlvbi5vcHRpb25XcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIEFkZCBpbWFnZSB0byB0aGUgc2VsZWN0ZWQgb3B0aW9uXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgICAgIGltZy5zcmMgPSB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uLmltZ1NyYztcbiAgICAgICAgICAgIGltZy5hbHQgPSAnU2VsZWN0ZWQnO1xuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LmFwcGVuZENoaWxkKGltZyk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uLm9wdGlvbldyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMub25zZWxlY3QodGhpcy5jdXJyZW50Rm9jdXNlZE9wdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1c05leHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZGViYXJFbGVtZW50ICYmIHRoaXMuY3VycmVudEZvY3VzZWRPcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gdGhpcy5jdXJyZW50Rm9jdXNlZE9wdGlvbi5vcHRpb25XcmFwcGVyLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIGlmIChuZXh0U2libGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvY3VzZWRPcHRpb24uYmx1cigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvY3VzZWRPcHRpb24gPSBuZXh0U2libGluZy5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1c1ByZXZpb3VzKCkge1xuICAgICAgICBpZiAodGhpcy5zaWRlYmFyRWxlbWVudCAmJiB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uLm9wdGlvbldyYXBwZXIucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uLmJsdXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uID0gcHJldmlvdXNTaWJsaW5nLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvY3VzZWRPcHRpb24uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5zaWRlYmFyRWxlbWVudCAmJiB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bmZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5zaWRlYmFyRWxlbWVudCAmJiB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c2VkT3B0aW9uLmJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVubW91bnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZGViYXJFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RGb2N1c2VkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RGb2N1c2VkRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNlZE9wdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBcImVkM2QwYTRkOWRlOTE0NjAucG5nXCIiLCJleHBvcnQgZGVmYXVsdCBcIjNiYzhiN2ZmMDRlOThkMzcucG5nXCIiLCJleHBvcnQgZGVmYXVsdCBcImI3MzlmYWVjMWZkZTEzNDYucG5nXCIiLCJleHBvcnQgZGVmYXVsdCBcIjM4YWZjNzljOTRlMGJjZjAucG5nXCIiLCJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wbGF5ZXItY29tcG9uZW50cy9wbGF5ZXItYnV0dG9ucy9wbGF5ZXJCdXR0b25zLmpzJztcbmltcG9ydCB7IFBsYXllclNlZWtiYXIgfSBmcm9tICcuLi9wbGF5ZXItY29tcG9uZW50cy9wbGF5ZXItc2Vla2Jhci9wbGF5ZXJTZWVrYmFyLmpzJztcbmltcG9ydCB7IFRleHRDb250ZW50IH0gZnJvbSAnLi4vcGxheWVyLWNvbXBvbmVudHMvcGxheWVyLXRpdGxlL3BsYXllclRpdGxlLmpzJztcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tICcuLi9wbGF5ZXItY29tcG9uZW50cy9wbGF5ZXItc2lkZWJhci9wbGF5ZXItc2lkZWJhci5qcyc7XG5pbXBvcnQgcGxheUljb24gZnJvbSAnLi4vYXNzZXRzL3BsYXlJY29uLnBuZyc7XG5pbXBvcnQgcGF1c2VJY29uIGZyb20gJy4uL2Fzc2V0cy9wYXVzZUljb24ucG5nJztcbmltcG9ydCBwbGF5SWNvbkZvY3VzIGZyb20gJy4uL2Fzc2V0cy9wbGF5SWNvbkZvY3VzLnBuZyc7XG5pbXBvcnQgcGF1c2VJY29uRm9jdXMgZnJvbSAnLi4vYXNzZXRzL3BhdXNlSWNvbkZvY3VzLnBuZyc7XG5pbXBvcnQgc2V0dGluZ3NJY29uIGZyb20gJy4uL2Fzc2V0cy9zZXR0aW5nc0ljb24ucG5nJztcblxuY2xhc3MgVmlkZW9QbGF5ZXJVSSB7XG4gIGNvbnN0cnVjdG9yKHsgcGxheWVyLCBjb25maWcgfSkge1xuICAgIGlmICghcGxheWVyIHx8IHR5cGVvZiBwbGF5ZXIgIT09ICdvYmplY3QnIHx8ICFwbGF5ZXIudmlkZW8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmlkZW9QbGF5ZXJVSTogcGxheWVyIG11c3QgYmUgYSB2YWxpZCBvYmplY3Qgd2l0aCBhIHZpZGVvIHByb3BlcnR5Jyk7XG4gICAgfVxuICAgIHRoaXMucGxheWVyID0gcGxheWVyO1xuICAgIHRoaXMudmlkZW9UaXRsZUNvbmZpZyA9IGNvbmZpZy52aWRlb1RpdGxlQ29uZmlnIHx8IHt9O1xuICAgXG4gICAgdGhpcy5zZWxlY3RlZFZpZGVvUXVhbGl0eSA9IFwiYXV0b1wiO1xuICAgIHRoaXMuc2VsZWN0ZWRQbGF5YmFja0NhcHRpb24gPSBcIlwiO1xuICAgIHRoaXMuc2VsZWN0ZWRBdWRpb1F1YWxpdHkgPSBcIlwiO1xuXG4gICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAndmlkZW8tcGxheWVyLXVpJztcbiAgICB0aGlzLnJpZ2h0U2lkZUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucmlnaHRTaWRlQ29udGFpbmVyLmNsYXNzTmFtZSA9ICdyaWdodC1zaWRlLWNvbnRhaW5lcic7XG4gICAgdGhpcy5sZWZ0U2lkZUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMubGVmdFNpZGVDb250YWluZXIuY2xhc3NOYW1lID0gJ2xlZnQtc2lkZS1jb250YWluZXInO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMucmlnaHRTaWRlQ29udGFpbmVyKTtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmxlZnRTaWRlQ29udGFpbmVyKTtcbiAgICB0aGlzLmNyZWF0ZUNvbnRyb2xzKCk7XG4gIH1cblxuICBjcmVhdGVDb250cm9scygpIHtcbiAgICB0aGlzLmNyZWF0ZVBsYXlQYXVzZUJ0bigpO1xuICAgIHRoaXMuY3JlYXRlU2Vla2JhcigpO1xuICAgIHRoaXMuY3JlYXRlU2V0dGluZ3NCdG4oKTtcbiAgICB0aGlzLmNyZWF0ZVJlc3RhcnRWaWRlb0J0bigpO1xuICAgIHRoaXMuY3JlYXRlVGV4dENvbnRlbnQoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXJzKCk7XG5cbiAgICAvLyBBdHRhY2ggdGhlIHZpZGVvIGVsZW1lbnRcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnBsYXllci52aWRlbyk7XG4gIH1cblxuICBjcmVhdGVQbGF5UGF1c2VCdG4oKSB7XG4gICAgdGhpcy5wbGF5UGF1c2VCdG4gPSBuZXcgQnV0dG9uKHtcbiAgICAgIGltZ1NyYzogcGxheUljb25Gb2N1cyxcbiAgICAgIGltZ0FsdFRleHQ6ICdQbGF5L1BhdXNlJyxcbiAgICAgIGJ1dHRvblRleHQ6ICdQbGF5JyxcbiAgICAgIHdpZHRoOiA3MCxcbiAgICAgIGhlaWdodDogNzAsXG4gICAgICBrbGFzc25hbWU6ICdwbGF5LXBhdXNlLWJ0bicsXG4gICAgICBmb2N1c2VkOiBmYWxzZSxcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGhhbmRsZUNsaWNrOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBsYXllci52aWRlby5wYXVzZWQpIHtcbiAgICAgICAgICB0aGlzLnBsYXllci5wbGF5KCk7XG4gICAgICAgICAgaWYgKHRoaXMucGxheVBhdXNlQnRuICYmIHRoaXMucGxheVBhdXNlQnRuLmJ1dHRvbkVsZW1lbnQgJiYgdGhpcy5wbGF5UGF1c2VCdG4uYnV0dG9uRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbWcnKSkge1xuICAgICAgICAgICAgdGhpcy5wbGF5UGF1c2VCdG4uYnV0dG9uRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbWcnKS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHBhdXNlSWNvbkZvY3VzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGxheVBhdXNlQnRuICYmIHRoaXMucGxheVBhdXNlQnRuLmJ1dHRvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucGxheVBhdXNlQnRuLmJ1dHRvbkVsZW1lbnQudGV4dENvbnRlbnQgPSAnUGF1c2UnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBsYXllci5wYXVzZSgpO1xuICAgICAgICAgIGlmICh0aGlzLnBsYXlQYXVzZUJ0biAmJiB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLnNldEF0dHJpYnV0ZSgnc3JjJywgcGxheUljb25Gb2N1cyk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBsYXlQYXVzZUJ0biAmJiB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50LnRleHRDb250ZW50ID0gJ1BsYXknO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucGxheVBhdXNlQnRuLm1vdW50KHRoaXMuY29udGFpbmVyKTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wbGF5UGF1c2VCdG4pIHRoaXMucGxheVBhdXNlQnRuLmZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFBsYXlQYXVzZUJ0bkV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICBhZGRQbGF5UGF1c2VCdG5FdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAoIXRoaXMucGxheVBhdXNlQnRuIHx8ICF0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50KSByZXR1cm47XG5cbiAgICB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucGxheVBhdXNlQnRuICYmIHRoaXMucGxheVBhdXNlQnRuLmJ1dHRvbkVsZW1lbnQgJiYgdGhpcy5wbGF5UGF1c2VCdG4uYnV0dG9uRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbWcnKSkge1xuICAgICAgICBjb25zdCBpY29uU3JjID0gdGhpcy5wbGF5ZXIudmlkZW8ucGF1c2VkID8gcGxheUljb25Gb2N1cyA6IHBhdXNlSWNvbkZvY3VzO1xuICAgICAgICB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLnNldEF0dHJpYnV0ZSgnc3JjJywgaWNvblNyYyk7XG4gICAgICAgIHRoaXMucGxheVBhdXNlQnRuLmJ1dHRvbkVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSknO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wbGF5UGF1c2VCdG4uYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucGxheVBhdXNlQnRuICYmIHRoaXMucGxheVBhdXNlQnRuLmJ1dHRvbkVsZW1lbnQgJiYgdGhpcy5wbGF5UGF1c2VCdG4uYnV0dG9uRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbWcnKSkge1xuICAgICAgICBjb25zdCBpY29uU3JjID0gdGhpcy5wbGF5ZXIudmlkZW8ucGF1c2VkID8gcGxheUljb24gOiBwYXVzZUljb247XG4gICAgICAgIHRoaXMucGxheVBhdXNlQnRuLmJ1dHRvbkVsZW1lbnQucXVlcnlTZWxlY3RvcignaW1nJykuc2V0QXR0cmlidXRlKCdzcmMnLCBpY29uU3JjKTtcbiAgICAgICAgdGhpcy5wbGF5UGF1c2VCdG4uYnV0dG9uRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNldHRpbmdzQnRuRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzQnRuIHx8ICF0aGlzLnNldHRpbmdzQnRuLmJ1dHRvbkVsZW1lbnQpIHJldHVybjtcblxuICAgIHRoaXMuc2V0dGluZ3NCdG4uYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzQnRuICYmIHRoaXMuc2V0dGluZ3NCdG4uYnV0dG9uRWxlbWVudCAmJiB0aGlzLnNldHRpbmdzQnRuLmJ1dHRvbkVsZW1lbnQucXVlcnlTZWxlY3RvcignaW1nJykpIHtcbiAgICAgICAgY29uc3QgaWNvblNyYyA9IHRoaXMucGxheWVyLnZpZGVvLnBhdXNlZCA/IHBsYXlJY29uRm9jdXMgOiBwYXVzZUljb25Gb2N1cztcbiAgICAgICAgdGhpcy5zZXR0aW5nc0J0bi5idXR0b25FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLnNldEF0dHJpYnV0ZSgnc3JjJywgaWNvblNyYyk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3NCdG4uYnV0dG9uRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyNTUsIDI1NSwgMjU1KSc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnNldHRpbmdzQnRuLmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzQnRuICYmIHRoaXMuc2V0dGluZ3NCdG4uYnV0dG9uRWxlbWVudCAmJiB0aGlzLnNldHRpbmdzQnRuLmJ1dHRvbkVsZW1lbnQucXVlcnlTZWxlY3RvcignaW1nJykpIHtcbiAgICAgICAgY29uc3QgaWNvblNyYyA9IHRoaXMucGxheWVyLnZpZGVvLnBhdXNlZCA/IHBsYXlJY29uIDogcGF1c2VJY29uO1xuICAgICAgICB0aGlzLnNldHRpbmdzQnRuLmJ1dHRvbkVsZW1lbnQucXVlcnlTZWxlY3RvcignaW1nJykuc2V0QXR0cmlidXRlKCdzcmMnLCBpY29uU3JjKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nc0J0bi5idXR0b25FbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlUGxheVBhdXNlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnBsYXlQYXVzZUJ0biAmJiB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50ICYmIHRoaXMuc2Vla2Jhci5mb2N1c2VkKSB7XG4gICAgICBjb25zdCBpY29uU3JjID0gdGhpcy5wbGF5ZXIudmlkZW8ucGF1c2VkID8gcGxheUljb24gOiBwYXVzZUljb247XG4gICAgICB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLnNldEF0dHJpYnV0ZSgnc3JjJywgaWNvblNyYyk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlU2Vla2JhcigpIHtcbiAgICBpZiAoIXRoaXMucGxheWVyLnZpZGVvKSByZXR1cm47XG5cbiAgICB0aGlzLnNlZWtiYXIgPSBuZXcgUGxheWVyU2Vla2Jhcih0aGlzLnBsYXllci52aWRlbyk7XG4gICAgdGhpcy5zZWVrYmFyLm1vdW50KHRoaXMuY29udGFpbmVyKTtcblxuICAgIHRoaXMucGxheWVyLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCAoKSA9PiB0aGlzLnVwZGF0ZVBsYXlQYXVzZUJ1dHRvbigpKTtcbiAgICB0aGlzLnBsYXllci52aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsICgpID0+IHRoaXMudXBkYXRlUGxheVBhdXNlQnV0dG9uKCkpO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKCF0aGlzLnBsYXlQYXVzZUJ0biB8fCAhdGhpcy5wbGF5UGF1c2VCdG4uYnV0dG9uRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgdGhpcy5wbGF5UGF1c2VCdG4uYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzQnRuKSB0aGlzLnNldHRpbmdzQnRuLmZvY3VzKCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucmVzdGFydFZpZGVvQnRuKSB0aGlzLnJlc3RhcnRWaWRlb0J0bi5mb2N1cygpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnNlZWtiYXIpIHRoaXMuc2Vla2Jhci5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3NCdG4gJiYgdGhpcy5zZXR0aW5nc0J0bi5idXR0b25FbGVtZW50KSB7XG4gICAgICB0aGlzLnNldHRpbmdzQnRuLmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAodGhpcy5zZWVrYmFyKSB0aGlzLnNlZWtiYXIuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgaWYgKHRoaXMucGxheVBhdXNlQnRuKSB0aGlzLnBsYXlQYXVzZUJ0bi5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAodGhpcy5yZXN0YXJ0VmlkZW9CdG4pIHRoaXMucmVzdGFydFZpZGVvQnRuLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3RhcnRWaWRlb0J0biAmJiB0aGlzLnJlc3RhcnRWaWRlb0J0bi5idXR0b25FbGVtZW50KSB7XG4gICAgICB0aGlzLnJlc3RhcnRWaWRlb0J0bi5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmICh0aGlzLnNlZWtiYXIpIHRoaXMuc2Vla2Jhci5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAodGhpcy5wbGF5UGF1c2VCdG4pIHRoaXMucGxheVBhdXNlQnRuLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NCdG4pIHRoaXMuc2V0dGluZ3NCdG4uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vla2JhckVsZW1lbnQgPSB0aGlzLnNlZWtiYXIuZ2V0RWxlbWVudCAmJiB0aGlzLnNlZWtiYXIuZ2V0RWxlbWVudCgpO1xuICAgIGlmIChzZWVrYmFyRWxlbWVudCkge1xuICAgICAgc2Vla2JhckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0J0bikgdGhpcy5zZXR0aW5nc0J0bi5mb2N1cygpO1xuICAgICAgICAgIGVsc2UgaWYgKHRoaXMucmVzdGFydFZpZGVvQnRuKSB0aGlzLnJlc3RhcnRWaWRlb0J0bi5mb2N1cygpO1xuICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGxheVBhdXNlQnRuKSB0aGlzLnBsYXlQYXVzZUJ0bi5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVTZXR0aW5nc0J0bigpIHtcbiAgICB0aGlzLnNldHRpbmdzQnRuID0gbmV3IEJ1dHRvbih7XG4gICAgICBpbWdTcmM6IHNldHRpbmdzSWNvbixcbiAgICAgIGltZ0FsdFRleHQ6ICdTZXR0aW5ncycsXG4gICAgICBidXR0b25UZXh0OiAnU2V0dGluZ3MnLFxuICAgICAgd2lkdGg6IDQwLFxuICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgIGtsYXNzbmFtZTogJ3NldHRpbmdzLWJ0bicsXG4gICAgICBmb2N1c2VkOiBmYWxzZSxcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGhhbmRsZUNsaWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3JlYXRlU2lkZUJhcigpO1xuICAgICAgICB0aGlzLmhpZGVQbGF5ZXJDb250cm9scygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHRoaXMuYWRkU2V0dGluZ3NCdG5FdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMuc2V0dGluZ3NCdG4ubW91bnQodGhpcy5yaWdodFNpZGVDb250YWluZXIpO1xuICB9XG5cbiAgY3JlYXRlUmVzdGFydFZpZGVvQnRuKCkge1xuICAgIHRoaXMucmVzdGFydFZpZGVvQnRuID0gbmV3IEJ1dHRvbih7XG4gICAgICBpbWdTcmM6ICcnLFxuICAgICAgaW1nQWx0VGV4dDogJ1N0YXJ0IEZyb20gQmVnaW5uaW5nJyxcbiAgICAgIGJ1dHRvblRleHQ6ICdTdGFydCBGcm9tIEJlZ2lubmluZycsXG4gICAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAzNSxcbiAgICAgIGZvbnRXZWlnaHQ6IDcwMCxcbiAgICAgIGtsYXNzbmFtZTogJ3Jlc3RhcnQtYnRuJyxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlLFxuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgaGFuZGxlQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucGxheWVyLnZpZGVvKSB7XG4gICAgICAgICAgdGhpcy5wbGF5ZXIudmlkZW8uY3VycmVudFRpbWUgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZXN0YXJ0VmlkZW9CdG4ubW91bnQodGhpcy5yaWdodFNpZGVDb250YWluZXIpO1xuICB9XG5cbiAgY3JlYXRlVGV4dENvbnRlbnQoKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IG5ldyBUZXh0Q29udGVudCh7XG4gICAgICB0ZXh0OiB0aGlzLnZpZGVvVGl0bGVDb25maWcudGV4dCxcbiAgICAgIGZvbnRTaXplOiB0aGlzLnZpZGVvVGl0bGVDb25maWcuZm9udFNpemUsXG4gICAgICBjb2xvcjogdGhpcy52aWRlb1RpdGxlQ29uZmlnLmNvbG9yLFxuICAgICAgZm9udFdlaWdodDogdGhpcy52aWRlb1RpdGxlQ29uZmlnLmZvbnRXZWlnaHQsXG4gICAgfSk7XG4gICAgdGhpcy50ZXh0Q29udGVudC5tb3VudCh0aGlzLmxlZnRTaWRlQ29udGFpbmVyKTtcbiAgfVxuXG4gIGNoYW5nZVBsYXlCYWNrUXVhbGl0eShpZCkge1xuICAgIHRoaXMuc2VsZWN0ZWRQbGF5YmFja1F1YWxpdHkgPSBpZDtcbiAgICBsZXQgdmlkZW9MZXZlbHMgPSB0aGlzLnBsYXllci52aWRlb1Jlc29sdXRpb25zKCk7XG5cbiAgICBpZiAoIXZpZGVvTGV2ZWxzIHx8IHZpZGVvTGV2ZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdObyB2aWRlbyByZXNvbHV0aW9ucyBhdmFpbGFibGUgdG8gY2hhbmdlIHBsYXliYWNrIHF1YWxpdHkuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiYXV0b1wiKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlkZW9RdWFsaXR5ID0gXCJhdXRvXCI7XG4gICAgICBpZiAodGhpcy5kcm1FbmFibGVkKSB7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGxheWVyLnBsYXllckluc3RhbmNlLmN1cnJlbnRMZXZlbCA9IC0xO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZGVvTGV2ZWxzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodmlkZW9MZXZlbHNbaV0uaGVpZ2h0ID09IGlkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZpZGVvUXVhbGl0eSA9IHZpZGVvTGV2ZWxzW2ldLmhlaWdodDtcbiAgICAgICAgICBpZiAodGhpcy5kcm1FbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXllci5wbGF5ZXJJbnN0YW5jZS5zZXRRdWFsaXR5Rm9yKCd2aWRlbycsIGkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBsYXllci5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50TGV2ZWwgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVBsYXliYWNrQ2FwdGlvbnMoaWQpIHtcbiAgICBsZXQgdGV4dFRyYWNrcyA9IHRoaXMucGxheWVyLmNhcHRpb25zT3B0aW9ucygpO1xuXG4gICAgaWYgKCF0ZXh0VHJhY2tzIHx8IHRleHRUcmFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIHRleHQgdHJhY2tzIGF2YWlsYWJsZSB0byBjaGFuZ2UgcGxheWJhY2sgY2FwdGlvbnMuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkVGV4dFRyYWNrc1R5cGUgPSBbJ2NhcHRpb25zJywgJ3N1YnRpdGxlcycsICdjYXB0aW9uJywgJ3N1YnRpdGxlJ107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRUcmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKHZhbGlkVGV4dFRyYWNrc1R5cGUuaW5jbHVkZXModGV4dFRyYWNrc1tpXS5raW5kLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgaWYgKHRleHRUcmFja3NbaV0ubGFuZ3VhZ2UgPT09IGlkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFBsYXliYWNrQ2FwdGlvbiA9IGlkO1xuICAgICAgICAgIHRleHRUcmFja3NbaV0ubW9kZSA9ICdzaG93aW5nJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0VHJhY2tzW2ldLm1vZGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBjaGFuZ2VQbGF5YmFja0F1ZGlvKGlkKXtcbiAgICBsZXQgYXVkaW9UcmFja3MgPSB0aGlzLnBsYXllci5hdWRpb1RyYWNrcygpO1xuXG4gICAgaWYgKCFhdWRpb1RyYWNrcyB8fCBhdWRpb1RyYWNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gYXVkaW8gdHJhY2tzIGF2YWlsYWJsZSB0byBjaGFuZ2UgcGxheWJhY2sgYXVkaW8uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdWRpb1RyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGF1ZGlvVHJhY2tzW2ldLmlkID09IGlkIHx8IGF1ZGlvVHJhY2tzW2ldLmxhbmcgPT0gaWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF1ZGlvUXVhbGl0eSA9IGlkO1xuICAgICAgICBpZih0aGlzLmRybUVuYWJsZWQpe1xuICAgICAgICAgIHRoaXMucGxheWVyLnBsYXllckluc3RhbmNlLnNldEN1cnJlbnRUcmFjayhhdWRpb1RyYWNrc1tpXSk7XG4gICAgICAgIH0gZWxzZXtcbiAgICAgICAgICB0aGlzLnBsYXllci5wbGF5ZXJJbnN0YW5jZS5hdWRpb1RyYWNrID0gaTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2aWRlb1F1YWxpdHlTZWxlY3RvcigpIHtcbiAgICBpZiAoIXRoaXMubWFpblNpZGViYXIpIHJldHVybjtcblxuICAgIGNvbnN0IHJlc29sdXRpb25zID0gdGhpcy5wbGF5ZXIudmlkZW9SZXNvbHV0aW9ucygpO1xuICAgIGNvbnN0IGN1cnJlbnRRdWFsaXR5ID0gdGhpcy5zZWxlY3RlZFZpZGVvUXVhbGl0eTtcblxuICAgIGNvbnN0IGl0ZW1zID0gW1xuICAgICAge1xuICAgICAgICB0ZXh0OiAnQXV0bycsXG4gICAgICAgIGlkOiAnYXV0bycsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGN1cnJlbnRRdWFsaXR5ID09PSAnYXV0bycsXG4gICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYWluU2lkZWJhci5jdXJyZW50Rm9jdXNlZE9wdGlvbi5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuc2lkZWJhci51bm1vdW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAuLi5yZXNvbHV0aW9ucy5tYXAocmVzb2x1dGlvbiA9PiAoe1xuICAgICAgICB0ZXh0OiBgJHtyZXNvbHV0aW9uLmhlaWdodH1wYCxcbiAgICAgICAgaWQ6IHJlc29sdXRpb24uaGVpZ2h0LFxuICAgICAgICBpc1NlbGVjdGVkOiBjdXJyZW50UXVhbGl0eSA9PT0gcmVzb2x1dGlvbi5oZWlnaHQsXG4gICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYWluU2lkZWJhci5jdXJyZW50Rm9jdXNlZE9wdGlvbi5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuc2lkZWJhci51bm1vdW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pKVxuICAgIF07XG5cblxuICAgIHRoaXMuc2lkZWJhciA9IG5ldyBTaWRlYmFyKHtcbiAgICAgIHRpdGxlOiAnVmlkZW8gUXVhbGl0eScsXG4gICAgICBpdGVtczogaXRlbXMsXG4gICAgICBrbGFzc25hbWU6ICdkZWZhdWx0LXNpZGViYXInLFxuICAgICAgbGFzdEZvY3VzZWRFbGVtZW50OiB0aGlzLm1haW5TaWRlYmFyLmN1cnJlbnRGb2N1c2VkT3B0aW9uLFxuICAgICAgdHlwZTogJ3NlbGVjdGlvbicsXG4gICAgICBmb2N1c2VkOiB0cnVlLFxuICAgICAgb25zZWxlY3Q6IChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlUGxheUJhY2tRdWFsaXR5KGRhdGEuaWQpO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1haW5TaWRlYmFyLnNpZGViYXJFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5tYWluU2lkZWJhci5zaWRlYmFyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zaWRlYmFyLm1vdW50KHRoaXMuY29udGFpbmVyKTtcbiAgfVxuXG4gIGF1ZGlvTGFuZ3VhZ2VTZWxlY3RvcigpIHtcbiAgICBpZiAoIXRoaXMubWFpblNpZGViYXIpIHJldHVybjtcbiAgICBjb25zdCBhdWRpb1RyYWNrcyA9IHRoaXMucGxheWVyLmF1ZGlvVHJhY2tzKCk7XG4gICAgY29uc3QgY3VycmVudEF1ZGlvUXVhbGl0eSA9IHRoaXMuc2VsZWN0ZWRBdWRpb1F1YWxpdHk7XG5cbiAgICB0aGlzLnNpZGViYXIgPSBuZXcgU2lkZWJhcih7XG4gICAgICB0aXRsZTogJ0F1ZGlvIExhbmd1YWdlJyxcbiAgICAgIGl0ZW1zOiBhdWRpb1RyYWNrcy5tYXAoKGF1ZGlvLCBpZHgpID0+ICh7XG4gICAgICAgIGlkOiBhdWRpby5pZCB8fCBhdWRpby5sYW5nLFxuICAgICAgICB0ZXh0OiBhdWRpby5uYW1lIHx8IGF1ZGlvLmxhbmcsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IChhdWRpb1RyYWNrcy5sZW5ndGggPT09IDEpICB8fCAoY3VycmVudEF1ZGlvUXVhbGl0eSA/IGN1cnJlbnRBdWRpb1F1YWxpdHkgPT09IGF1ZGlvLmlkIDogYXVkaW8uZGVmYXVsdCksXG4gICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYWluU2lkZWJhci5jdXJyZW50Rm9jdXNlZE9wdGlvbi5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuc2lkZWJhci51bm1vdW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIGtsYXNzbmFtZTogJ2RlZmF1bHQtc2lkZWJhcicsXG4gICAgICBsYXN0Rm9jdXNlZEVsZW1lbnQ6IHRoaXMubWFpblNpZGViYXIuY3VycmVudEZvY3VzZWRPcHRpb24sXG4gICAgICB0eXBlOiAnc2VsZWN0aW9uJyxcbiAgICAgIGZvY3VzZWQ6IHRydWUsXG4gICAgICBvbnNlbGVjdDogKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLmNoYW5nZVBsYXliYWNrQXVkaW8oZGF0YS5pZCk7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubWFpblNpZGViYXIuc2lkZWJhckVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLm1haW5TaWRlYmFyLnNpZGViYXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNpZGViYXIubW91bnQodGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgc3VidGl0bGVzU2VsZWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLm1haW5TaWRlYmFyKSByZXR1cm47XG5cbiAgICBjb25zdCBjYXB0aW9ucyA9IHRoaXMucGxheWVyLmNhcHRpb25zT3B0aW9ucygpO1xuICAgIGNvbnN0IGN1cnJlbnRDYXB0aW9uID0gdGhpcy5zZWxlY3RlZFBsYXliYWNrQ2FwdGlvbjtcblxuXG4gICAgY29uc3QgaXRlbXMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnb2ZmJyxcbiAgICAgICAgdGV4dDogJ09mZicsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGN1cnJlbnRDYXB0aW9uID09PSAnb2ZmJywgLy8gWW91IGNhbiBlbmhhbmNlIHRoaXMgYnkgY2hlY2tpbmcgaWYgYWxsIHRyYWNrcyBhcmUgZGlzYWJsZWRcbiAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1haW5TaWRlYmFyLmN1cnJlbnRGb2N1c2VkT3B0aW9uLmZvY3VzKCk7XG4gICAgICAgICAgdGhpcy5zaWRlYmFyLnVubW91bnQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC4uLmNhcHRpb25zLm1hcChzdWJ0aXRsZSA9PiAoe1xuICAgICAgICBpZDogc3VidGl0bGUubGFuZ3VhZ2UsXG4gICAgICAgIHRleHQ6IHN1YnRpdGxlLmxhYmVsLFxuICAgICAgICBpc1NlbGVjdGVkOiBjdXJyZW50Q2FwdGlvbiA9PT0gc3VidGl0bGUubGFuZ3VhZ2UgfHwgc3VidGl0bGUubW9kZSA9PT0gJ3Nob3dpbmcnLFxuICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFpblNpZGViYXIuY3VycmVudEZvY3VzZWRPcHRpb24uZm9jdXMoKTtcbiAgICAgICAgICB0aGlzLnNpZGViYXIudW5tb3VudCgpO1xuICAgICAgICB9XG4gICAgICB9KSlcbiAgICBdO1xuXG5cbiAgICB0aGlzLnNpZGViYXIgPSBuZXcgU2lkZWJhcih7XG4gICAgICB0aXRsZTogJ1N1YnRpdGxlcycsXG4gICAgICBpdGVtczogaXRlbXMsXG4gICAgICBrbGFzc25hbWU6ICdkZWZhdWx0LXNpZGViYXInLFxuICAgICAgbGFzdEZvY3VzZWRFbGVtZW50OiB0aGlzLm1haW5TaWRlYmFyLmN1cnJlbnRGb2N1c2VkT3B0aW9uLFxuICAgICAgdHlwZTogJ3NlbGVjdGlvbicsXG4gICAgICBmb2N1c2VkOiB0cnVlLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubWFpblNpZGViYXIuc2lkZWJhckVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLm1haW5TaWRlYmFyLnNpZGViYXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbnNlbGVjdDogKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5jaGFuZ2VQbGF5YmFja0NhcHRpb25zKGRhdGEuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc2lkZWJhci5tb3VudCh0aGlzLmNvbnRhaW5lcik7XG4gIH1cblxuICBjcmVhdGVTaWRlQmFyKCkge1xuICAgIGxldCBpdGVtcyA9IFtcbiAgICAgIHtcbiAgICAgICAgdGV4dDogJ1ZpZGVvIFF1YWxpdHknLCBpc1NlbGVjdGVkOiB0cnVlLCBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm1haW5TaWRlYmFyLnNpZGViYXJFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLm1haW5TaWRlYmFyLnNpZGViYXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy52aWRlb1F1YWxpdHlTZWxlY3RvcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuXG4gICAgaWYgKHRoaXMucGxheWVyLmF1ZGlvVHJhY2tzKCkgJiYgdGhpcy5wbGF5ZXIuYXVkaW9UcmFja3MoKS5sZW5ndGggPiAwKSB7XG4gICAgICBpdGVtcy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0F1ZGlvIExhbmd1YWdlJywgaXNTZWxlY3RlZDogZmFsc2UsIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYWluU2lkZWJhci5zaWRlYmFyRWxlbWVudCkge1xuICAgICAgICAgICAgICB0aGlzLm1haW5TaWRlYmFyLnNpZGViYXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXVkaW9MYW5ndWFnZVNlbGVjdG9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGxheWVyLmNhcHRpb25zT3B0aW9ucygpICYmIHRoaXMucGxheWVyLmNhcHRpb25zT3B0aW9ucygpLmxlbmd0aCA+IDApIHtcbiAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnU3VidGl0bGVzJywgaXNTZWxlY3RlZDogZmFsc2UsIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYWluU2lkZWJhci5zaWRlYmFyRWxlbWVudCkge1xuICAgICAgICAgICAgICB0aGlzLm1haW5TaWRlYmFyLnNpZGViYXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VidGl0bGVzU2VsZWN0b3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLm1haW5TaWRlYmFyID0gbmV3IFNpZGViYXIoe1xuICAgICAgdGl0bGU6ICdTZXR0aW5ncycsXG4gICAgICBpdGVtczogaXRlbXMsXG4gICAgICBrbGFzc25hbWU6ICdkZWZhdWx0LXNpZGViYXInLFxuICAgICAgbGFzdEZvY3VzZWRFbGVtZW50OiB0aGlzLnNldHRpbmdzQnRuLmJ1dHRvbkVsZW1lbnQsXG4gICAgICB0eXBlOiAnbmF2aWdhdGlvbicsXG4gICAgICBmb2N1c2VkOiB0cnVlLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93UGxheWVyQ29udHJvbHMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm1haW5TaWRlYmFyLm1vdW50KHRoaXMuY29udGFpbmVyKTtcbiAgfVxuXG4gIGhpZGVQbGF5ZXJDb250cm9scygpIHtcbiAgICBpZiAodGhpcy5yaWdodFNpZGVDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmlnaHRTaWRlQ29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWVrYmFyKSB7XG4gICAgICB0aGlzLnNlZWtiYXIuY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZWZ0U2lkZUNvbnRhaW5lcikge1xuICAgICAgdGhpcy5sZWZ0U2lkZUNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgfVxuICB9XG5cbiAgc2hvd1BsYXllckNvbnRyb2xzKCkge1xuICAgIGlmICh0aGlzLnJpZ2h0U2lkZUNvbnRhaW5lcikge1xuICAgICAgdGhpcy5yaWdodFNpZGVDb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWVrYmFyKSB7XG4gICAgICB0aGlzLnNlZWtiYXIuY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVmdFNpZGVDb250YWluZXIpIHtcbiAgICAgIHRoaXMubGVmdFNpZGVDb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICB9XG4gIH1cblxuICBhdHRhY2hUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudCB8fCAhKHBhcmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWRlb1BsYXllclVJOiBwYXJlbnQgbXVzdCBiZSBhIHZhbGlkIERPTSBlbGVtZW50Jyk7XG4gICAgfVxuICAgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7XG4gIH1cblxuICBnZXRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIHVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMucGxheVBhdXNlQnRuICYmIHRoaXMucGxheVBhdXNlQnRuLmJ1dHRvbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMucGxheVBhdXNlQnRuLmJ1dHRvbkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLnVwZGF0ZVBsYXlQYXVzZUJ1dHRvbik7XG4gICAgICB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLnVwZGF0ZVBsYXlQYXVzZUJ1dHRvbik7XG4gICAgICB0aGlzLnBsYXlQYXVzZUJ0bi5idXR0b25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZVBsYXlQYXVzZUtleWRvd24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBsYXllci52aWRlbykge1xuICAgICAgdGhpcy5wbGF5ZXIudmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMudXBkYXRlUGxheVBhdXNlQnV0dG9uKTtcbiAgICAgIHRoaXMucGxheWVyLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy51cGRhdGVQbGF5UGF1c2VCdXR0b24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvUGxheWVyVUk7IiwiZXhwb3J0IGRlZmF1bHQgXCJhNzRjZDQ2ZWQ0Mjc3NTY4LnBuZ1wiIiwiZXhwb3J0IGNvbnN0IHZ0dF9vcl9zcnRfcGFyc2VyID0gKHZ0dCkgPT4ge1xuXG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIGxpbmVzID0gdnR0LnRyaW0oKS5zcGxpdCgvW1xcclxcblxcclxcbl0vKS5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBsaW5lLnRyaW0oKTtcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gdnR0Lm1lc3NhZ2Uuc3BsaXQoL1tcXHJcXG5cXHJcXG5dLykubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUudHJpbSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgfVxuICAgIHZhciBjdWVzID0gW107XG4gICAgdmFyIHN0YXJ0ID0gbnVsbDtcbiAgICB2YXIgZW5kID0gbnVsbDtcbiAgICB2YXIgcGF5bG9hZCA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIGlmIChsaW5lc1tpXS5pbmRleE9mKCctLT4nKSA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXR0ZWQgPSBsaW5lc1tpXS5zcGxpdCgvWyBcXHRdKy0tPlsgXFx0XSsvKTtcbiAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggIT0gMikge1xuICAgICAgICAgICAgICAgIHRocm93ICdFcnJvciB3aGVuIHNwbGl0dGluZyBcIi0tPlwiOiAnICsgbGluZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhcnQgIT0gbnVsbCAmJiBlbmQgIT0gbnVsbCAmJiBwYXlsb2FkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VlID0gbmV3IFZUVEN1ZShzdGFydCwgZW5kLCBwYXlsb2FkKTtcbiAgICAgICAgICAgICAgICBjdWUubGluZSA9IDEzO1xuICAgICAgICAgICAgICAgIGN1ZXMucHVzaChjdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXlsb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHN0YXJ0ID0gbnVsbDtcbiAgICAgICAgICAgIGVuZCA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIEFscmVhZHkgaWdub3JpbmcgYW55dGhpbmcgcGFzdCB0aGUgXCJlbmRcIiB0aW1lc3RhbXAgKGkuZS4gY3VlIHNldHRpbmdzKS5cbiAgICAgICAgICAgIGlmIChzcGxpdHRlZFswXSAmJiBzcGxpdHRlZFsxXSAmJiBzcGxpdHRlZFswXS5pbmRleE9mKFwidW5kZWZpbmVkXCIpID09IC0xICYmIHNwbGl0dGVkWzFdLmluZGV4T2YoXCJ1bmRlZmluZWRcIikgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9IHBhcnNlX3RpbWVzdGFtcChzcGxpdHRlZFswXSk7XG4gICAgICAgICAgICAgICAgZW5kID0gcGFyc2VfdGltZXN0YW1wKHNwbGl0dGVkWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsaW5lc1tpXSAhPSB1bmRlZmluZWQgJiYgbGluZXNbaV0udHJpbSgpICE9ICcnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIobGluZXNbaV0pID4gMCkge1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IChwYXlsb2FkID09IG51bGwpID8gXCJcIiA6IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSAoKHBheWxvYWQudHJpbSgpID09IFwiXCIpID8gbGluZXNbaV0gOiAocGF5bG9hZCArICdcXG4nICsgbGluZXNbaV0pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gKHBheWxvYWQgPT0gbnVsbCkgPyBcIlwiIDogcGF5bG9hZDtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gKChwYXlsb2FkLnRyaW0oKSA9PSBcIlwiKSA/IGxpbmVzW2ldIDogKHBheWxvYWQgKyAnXFxuJyArIGxpbmVzW2ldKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG5cbiAgICB9XG4gICAgaWYgKHN0YXJ0ICYmIGVuZCAmJiBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBjdWUgPSBuZXcgVlRUQ3VlKHN0YXJ0LCBlbmQsIHBheWxvYWQpO1xuICAgICAgICBjdWUubGluZSA9IDEzO1xuICAgICAgICBjdWVzLnB1c2goY3VlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3Vlcztcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlX3RpbWVzdGFtcCA9IChzKSA9PiB7XG4gICAgbGV0IG1hdGNoID0gcy5tYXRjaCgvXig/OihbMC05XSspOik/KFswLTVdWzAtOV0pOihbMC01XVswLTldKD86Wy4sXVswLTldezAsM30pPykvKTtcbiAgICBpZiAobWF0Y2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyAnSW52YWxpZCB0aW1lc3RhbXAgZm9ybWF0OiAnICsgcztcbiAgICB9XG4gICAgbGV0IGhvdXJzID0gcGFyc2VJbnQobWF0Y2hbMV0gfHwgXCIwXCIsIDEwKTtcbiAgICBsZXQgbWludXRlcyA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG4gICAgbGV0IHNlY29uZHMgPSBwYXJzZUZsb2F0KG1hdGNoWzNdLnJlcGxhY2UoJywnLCAnLicpKTtcbiAgICByZXR1cm4gc2Vjb25kcyArIDYwICogbWludXRlcyArIDYwICogNjAgKiBob3Vycztcbn0iLCJpbXBvcnQgVmlkZW9QbGF5ZXJVSSBmcm9tICcuL3BsYXllci11aS9wbGF5ZXItdWkuanMnO1xuaW1wb3J0IHsgdnR0X29yX3NydF9wYXJzZXIgfSBmcm9tICcuL3V0aWxpdGllcy91dGlsaXRpZXMuanMnO1xuaW1wb3J0IFwiLi9zdHlsZXMvaW5kZXguY3NzXCI7XG5cbmNsYXNzIFNtYXJ0VFZWaWRlb1BsYXllciB7XG4gIGNvbnN0cnVjdG9yKHBhcmVudENvbnRhaW5lcklkLCBwbGF5ZXJJZCwgY29uZmlnKSB7XG4gICAgdGhpcy5tb3VudFBvaW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5tb3VudFBvaW50LmlkID0gcGxheWVySWQ7XG4gICAgdGhpcy5tb3VudFBvaW50LmNsYXNzTmFtZSA9IFwidmwtcGxheWVyLWNvbnRhaW5lclwiO1xuICAgIHRoaXMubW91bnRQb2ludC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLm1vdW50UG9pbnQuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgIHRoaXMubW91bnRQb2ludC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgdGhpcy5tb3VudFBvaW50LnN0eWxlLnRvcCA9ICcwJztcbiAgICB0aGlzLm1vdW50UG9pbnQuc3R5bGUubGVmdCA9ICcwJztcblxuICAgIGlmKHRoaXMucGFyZW50Q29udGFpbmVySWQpe1xuICAgICAgdGhpcy5wYXJlbnRDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwYXJlbnRDb250YWluZXJJZCk7XG4gICAgICB0aGlzLnBhcmVudENvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm1vdW50UG9pbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMubW91bnRQb2ludCk7XG4gICAgfVxuXG5cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmhscyA9IG51bGw7XG4gICAgdGhpcy5kYXNoanMgPSBudWxsO1xuICAgIHRoaXMuY2xvc2VkQ2FwdGlvbnMgPSBjb25maWcuY2xvc2VkQ2FwdGlvbnMgfHwgW107XG4gICAgdGhpcy5lbmFibGVUcmFjayA9IGNvbmZpZy5lbmFibGVUcmFjayB8fCBmYWxzZTtcblxuICAgIHRoaXMuY2FwdGlvbnNPcHRpb25zTGlzdCA9IFtdO1xuICAgIHRoaXMudmlkZW9SZXNvbHV0aW9uc0xpc3QgPSBbXTtcbiAgICB0aGlzLmF1ZGlvTGlzdCA9IFtdO1xuXG4gICAgdGhpcy52aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgdGhpcy52aWRlby5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjsgXG4gICAgdGhpcy50cmFjayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3R0bWwtcmVuZGVyaW5nLWRpdicpO1xuICAgIHRoaXMudmlkZW8uYXBwZW5kQ2hpbGQodGhpcy50cmFjayk7XG5cbiAgICB0aGlzLmluaXRpYWxpemVQbGF5ZXIoKTtcbiAgfVxuXG4gIGdldENhcHRpb25zT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jYXB0aW9uc09wdGlvbnNMaXN0O1xuICB9XG5cbiAgZ2V0VmlkZW9SZXNvbHV0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy52aWRlb1Jlc29sdXRpb25zTGlzdDtcbiAgfVxuXG4gIGdldEF1ZGlvVHJhY2tzKCkge1xuICAgIHJldHVybiB0aGlzLmF1ZGlvTGlzdDtcbiAgfVxuXG4gIGluaXRpYWxpemVQbGF5ZXIoKSB7XG4gICAgY29uc3Qgc3RyZWFtVXJsID0gdGhpcy5jb25maWcuc3RyZWFtVXJsIHx8ICcnO1xuICAgIGlmICghc3RyZWFtVXJsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbSBVUkwgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIEhMUyBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICB0aGlzLnZpZGVvLmNvbnRyb2xzID0gZmFsc2U7XG4gICAgdGhpcy52aWRlby5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnZpZGVvLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcblxuICAgIHRoaXMuYWRkUGxheWVyRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgIGlmKHRoaXMuY29uZmlnLmRybUVuYWJsZWQpe1xuICAgICAgdGhpcy5kYXNoanMgID0gd2luZG93LmRhc2hqcy5NZWRpYVBsYXllcigpLmNyZWF0ZSgpO1xuXG4gICAgICBjb25zdCB3aWRldmluZSA9IHRoaXMuY29uZmlnLmRybU1ldGFkYXRhLndpZGV2aW5lO1xuICAgICAgY29uc3QgcGxheVJlYWR5PSB0aGlzLmNvbmZpZy5kcm1NZXRhZGF0YS5wbGF5UmVhZHk7XG5cbiAgICAgIGxldCBwcm90ZWN0aW9uRGF0YSA9IHtcbiAgICAgICAgICBcImNvbS53aWRldmluZS5hbHBoYVwiOiB7XG4gICAgICAgICAgICBzZXJ2ZXJVUkw6IHdpZGV2aW5lLmxpY2Vuc2VVcmwsXG4gICAgICAgICAgICBodHRwUmVxdWVzdEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgXCJYLUF4RFJNLU1lc3NhZ2VcIjogd2lkZXZpbmUubGljZW5zZVRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbS5taWNyb3NvZnQucGxheXJlYWR5XCI6IHtcbiAgICAgICAgICAgIHNlcnZlclVSTDogcGxheVJlYWR5LmxpY2Vuc2VVcmwsXG4gICAgICAgICAgICBodHRwUmVxdWVzdEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgXCJYLUF4RFJNLU1lc3NhZ2VcIjogcGxheVJlYWR5LmxpY2Vuc2VUb2tlbixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGFzaGpzLmluaXRpYWxpemUodGhpcy52aWRlbywgd2lkZXZpbmUudXJsLCB0cnVlKTtcbiAgICAgIHRoaXMuZGFzaGpzLmF0dGFjaFRUTUxSZW5kZXJpbmdEaXYodGhpcy50cmFjayk7XG4gICAgICB0aGlzLmRhc2hqcy5hdHRhY2hWaWV3KHRoaXMudmlkZW8pO1xuICAgICAgdGhpcy5kYXNoanMuc2V0UHJvdGVjdGlvbkRhdGEocHJvdGVjdGlvbkRhdGEpO1xuICAgICAgdGhpcy5kYXNoanMucHJlbG9hZCgpO1xuXG4gICAgfSBlbHNlIGlmICh3aW5kb3cuSGxzICYmIHdpbmRvdy5IbHMuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgY29uc3QgaGxzQ29uZmlnID0ge1xuICAgICAgICBcImVuYWJsZVdvcmtlclwiOiB0cnVlLFxuICAgICAgICBcImxvd0xhdGVuY3lNb2RlXCI6IHRydWUsXG4gICAgICAgIFwiYmFja0J1ZmZlckxlbmd0aFwiOiA5MCxcbiAgICAgICAgXCJtYXhCdWZmZXJMZW5ndGhcIjogMTIsXG4gICAgICAgIFwibWF4TWF4QnVmZmVyTGVuZ3RoXCI6IDE1LFxuICAgICAgICBcIm1heEZyYWdMb29rVXBUb2xlcmFuY2VcIjogMC4yNSxcbiAgICAgICAgXCJtYXhMb2FkaW5nRGVsYXlcIjogNFxuICAgICAgfTtcblxuICAgICAgdGhpcy5obHMgPSBuZXcgd2luZG93LkhscyhobHNDb25maWcpO1xuICAgICAgdGhpcy5obHMubG9hZFNvdXJjZShzdHJlYW1VcmwpO1xuICAgICAgdGhpcy5obHMuYXR0YWNoTWVkaWEodGhpcy52aWRlbyk7XG5cbiAgICAgIFxuICAgIH0gZWxzZSBpZiAodGhpcy52aWRlby5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgdGhpcy52aWRlby5zcmMgPSBzdHJlYW1Vcmw7XG4gICAgICB0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hMUyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuZHJtRW5hYmxlZCkge1xuICAgICAgdGhpcy5kYXNoanMub24oZGFzaGpzLk1lZGlhUGxheWVyLmV2ZW50cy5TVFJFQU1fSU5JVElBTElaRUQsICgpID0+IHtcbiAgICAgICAgdGhpcy52aWRlb1Jlc29sdXRpb25zTGlzdCA9IHRoaXMuZGFzaGpzLmdldEJpdHJhdGVJbmZvTGlzdEZvcigndmlkZW8nKTtcbiAgICAgICAgdGhpcy5hdWRpb0xpc3QgPSB0aGlzLmRhc2hqcy5nZXRUcmFja3NGb3IoJ2F1ZGlvJyk7XG4gICAgICAgIHRoaXMuY2FwdGlvbnNvcHRpb25zTGlzdCA9IHRoaXMuZGFzaGpzLmdldFRyYWNrc0ZvcigndGV4dCcpO1xuXG5cbiAgICAgICAgIHRoaXMucGxheWVyID0ge1xuICAgICAgICAgICAgdmlkZW86IHRoaXMudmlkZW8sXG4gICAgICAgICAgICBwbGF5OiAoKSA9PiB0aGlzLnZpZGVvLnBsYXkoKSxcbiAgICAgICAgICAgIHBhdXNlOiAoKSA9PiB0aGlzLnZpZGVvLnBhdXNlKCksXG4gICAgICAgICAgICBjYXB0aW9uc09wdGlvbnM6ICgpID0+IHRoaXMuZ2V0Q2FwdGlvbnNPcHRpb25zKCksXG4gICAgICAgICAgICB2aWRlb1Jlc29sdXRpb25zOiAoKSA9PiB0aGlzLmdldFZpZGVvUmVzb2x1dGlvbnMoKSxcbiAgICAgICAgICAgIGF1ZGlvVHJhY2tzOiAoKSA9PiB0aGlzLmdldEF1ZGlvVHJhY2tzKCksXG4gICAgICAgICAgICBwbGF5ZXJJbnN0YW5jZTogdGhpcy5kYXNoanNcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy51aSA9IG5ldyBWaWRlb1BsYXllclVJKHsgXG4gICAgICAgICAgICBwbGF5ZXI6IHRoaXMucGxheWVyLCBcbiAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnVpLmF0dGFjaFRvKHRoaXMubW91bnRQb2ludCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5obHMub24od2luZG93Lkhscy5FdmVudHMuQVVESU9fVFJBQ0tTX1VQREFURUQsICgpID0+IHtcbiAgICAgICAgdGhpcy5hdWRpb0xpc3QgPSB0aGlzLmhscy5hdWRpb1RyYWNrcztcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmhscy5vbih3aW5kb3cuSGxzLkV2ZW50cy5NQU5JRkVTVF9QQVJTRUQsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZpZGVvUmVzb2x1dGlvbnNMaXN0ID0gdGhpcy5obHMubGV2ZWxzO1xuXG4gICAgICAgICAgdGhpcy5wbGF5ZXIgPSB7XG4gICAgICAgICAgICB2aWRlbzogdGhpcy52aWRlbyxcbiAgICAgICAgICAgIHBsYXk6ICgpID0+IHRoaXMudmlkZW8ucGxheSgpLFxuICAgICAgICAgICAgcGF1c2U6ICgpID0+IHRoaXMudmlkZW8ucGF1c2UoKSxcbiAgICAgICAgICAgIGNhcHRpb25zT3B0aW9uczogKCkgPT4gdGhpcy5nZXRDYXB0aW9uc09wdGlvbnMoKSxcbiAgICAgICAgICAgIHZpZGVvUmVzb2x1dGlvbnM6ICgpID0+IHRoaXMuZ2V0VmlkZW9SZXNvbHV0aW9ucygpLFxuICAgICAgICAgICAgYXVkaW9UcmFja3M6ICgpID0+IHRoaXMuZ2V0QXVkaW9UcmFja3MoKSxcbiAgICAgICAgICAgIHBsYXllckluc3RhbmNlOiB0aGlzLmhsc1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnVpID0gbmV3IFZpZGVvUGxheWVyVUkoeyBcbiAgICAgICAgICAgIHBsYXllcjogdGhpcy5wbGF5ZXIsIFxuICAgICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMudWkuYXR0YWNoVG8odGhpcy5tb3VudFBvaW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBhZGRQbGF5ZXJFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAoIXRoaXMudmlkZW8pIHJldHVybjtcbiAgICB0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkZWRtZXRhZGF0YVwiLCB0aGlzLm9uVmlkZW9Mb2FkKTtcbiAgICB0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoXCJjYW5wbGF5dGhyb3VnaFwiLCB0aGlzLmNhbnBsYXl0aHJvdWdoLmJpbmQodGhpcykpO1xuICAgIHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcihcImVuZGVkXCIsIHRoaXMub25QbGF5ZWJhY2tFbmRlZCk7XG4gICAgdGhpcy52aWRlby5hZGRFdmVudExpc3RlbmVyKFwidGltZXVwZGF0ZVwiLCB0aGlzLnBsYXliYWNrcHJvZ3Jlc3MpO1xuICAgIHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcihcInBsYXlpbmdcIiwgdGhpcy5vblBsYXlpbmcpO1xuICAgIHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHRoaXMub25FcnJvcik7XG4gICAgdGhpcy52aWRlby5hZGRFdmVudExpc3RlbmVyKFwid2FpdGluZ1wiLCB0aGlzLm9uQnVmZmVyaW5nKTtcbiAgICB0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoXCJwbGF5XCIsIHRoaXMub25QbGF5KTtcbiAgICB0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoXCJzZWVrZWRcIiwgdGhpcy5vblNlZWtlZCk7XG4gICAgdGhpcy52aWRlby5hZGRFdmVudExpc3RlbmVyKFwic3RhbGxlZFwiLCB0aGlzLm9uU3RhbGxlZCk7XG4gIH1cblxuICByZW1vdmVQbGF5ZXJFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAoIXRoaXMudmlkZW8pIHJldHVybjtcbiAgICB0aGlzLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkZWRtZXRhZGF0YVwiLCB0aGlzLm9uVmlkZW9Mb2FkKTtcbiAgICB0aGlzLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlbmRlZFwiLCB0aGlzLm9uUGxheWViYWNrRW5kZWQpO1xuICAgIHRoaXMudmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRpbWV1cGRhdGVcIiwgdGhpcy5wbGF5YmFja3Byb2dyZXNzKTtcbiAgICB0aGlzLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwbGF5aW5nXCIsIHRoaXMub25QbGF5aW5nKTtcbiAgICB0aGlzLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCB0aGlzLm9uRXJyb3IpO1xuICAgIHRoaXMudmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndhaXRpbmdcIiwgdGhpcy5vbkJ1ZmZlcmluZyk7XG4gICAgdGhpcy52aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKFwicGxheVwiLCB0aGlzLm9uUGxheSk7XG4gICAgdGhpcy52aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2FucGxheXRocm91Z2hcIiwgdGhpcy5jYW5wbGF5dGhyb3VnaC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzZWVrZWRcIiwgdGhpcy5vblNlZWtlZCk7XG4gICAgdGhpcy52aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKFwic3RhbGxlZFwiLCB0aGlzLm9uU3RhbGxlZCk7XG4gIH1cblxuICBjYW5wbGF5dGhyb3VnaCgpIHtcbiAgICBpZih0aGlzLmNhcHRpb25zT3B0aW9uc0xpc3QubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRoaXMuYWRkQWxsQ2FwdGlvbnNUb1BsYXllcigwKTtcblxuICAgICAgbGV0IGFsbENDVHJhY2tzID0gdGhpcy52aWRlby50ZXh0VHJhY2tzO1xuXG4gICAgICBpZiAoYWxsQ0NUcmFja3MgIT0gdW5kZWZpbmVkICYmIGFsbENDVHJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxDQ1RyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChhbGxDQ1RyYWNrc1tpXS5raW5kLnRvTG93ZXJDYXNlKCkgPT0gXCJjYXB0aW9uc1wiIHx8IGFsbENDVHJhY2tzW2ldLmtpbmQudG9Mb3dlckNhc2UoKSA9PSBcInN1YnRpdGxlc1wiIHx8IGFsbENDVHJhY2tzW2ldLmtpbmQudG9Mb3dlckNhc2UoKSA9PSBcImNhcHRpb25cIiB8fCBhbGxDQ1RyYWNrc1tpXS5raW5kLnRvTG93ZXJDYXNlKCkgPT0gXCJzdWJ0aXRsZVwiKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHRpb25zT3B0aW9uc0xpc3QucHVzaChhbGxDQ1RyYWNrc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJURVhUIFRSQUNLUzpcIiwgdGhpcy5jYXB0aW9uc09wdGlvbnNMaXN0KTtcbiAgICBjb25zb2xlLmxvZyhcIlZJREVPIFJFU09MVVRJT046XCIsIHRoaXMudmlkZW9SZXNvbHV0aW9uc0xpc3QpO1xuICAgIGNvbnNvbGUubG9nKFwiQVVESU8gVFJBQ0tTOlwiLCB0aGlzLmF1ZGlvTGlzdCk7XG4gIH1cblxuICBhZGRBbGxDYXB0aW9uc1RvUGxheWVyKGNvdW50ZXJWYXJpYWJsZSkge1xuICAgIGlmIChjb3VudGVyVmFyaWFibGUgPj0gdGhpcy5jbG9zZWRDYXB0aW9ucy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRMYWJlbCA9IHRoaXMuY2xvc2VkQ2FwdGlvbnNbY291bnRlclZhcmlhYmxlXS5sYW5ndWFnZTtcblxuICAgIGZldGNoKHRoaXMuY2xvc2VkQ2FwdGlvbnNbY291bnRlclZhcmlhYmxlXS51cmwpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJ0eXBlXCIpKSB7XG4gICAgICAgICAgaWYgKGRhdGFbXCJ0eXBlXCJdID09PSBcImZhaWx1cmVcIikge1xuICAgICAgICAgICAgdGhpcy5hZGRBbGxDYXB0aW9uc1RvUGxheWVyKGNvdW50ZXJWYXJpYWJsZSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB2dHRPYmogPSB7XG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgbGFiZWw6IGN1cnJlbnRMYWJlbCxcbiAgICAgICAgICAgIGxhbmc6IGN1cnJlbnRMYWJlbCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuYWRkQ2FwdGlvblRvUGxheWVyKHZ0dE9iaik7XG4gICAgICAgICAgdGhpcy5hZGRBbGxDYXB0aW9uc1RvUGxheWVyKGNvdW50ZXJWYXJpYWJsZSArIDEpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5hZGRBbGxDYXB0aW9uc1RvUGxheWVyKGNvdW50ZXJWYXJpYWJsZSArIDEpO1xuICAgICAgfSk7XG4gIH1cblxuICBhZGRDYXB0aW9uVG9QbGF5ZXIodnR0T2JqKSB7XG4gICAgY29uc3QgdHJhY2sgPSB0aGlzLnBsYXllcj8udmlkZW8/LmFkZFRleHRUcmFjaygnY2FwdGlvbnMnLCB2dHRPYmoubGFiZWwsIHZ0dE9iai5sYW5nKTtcbiAgICBpZiAodHJhY2spIHRyYWNrLm1vZGUgPSBcImhpZGRlblwiO1xuICAgIHZ0dF9vcl9zcnRfcGFyc2VyKHZ0dE9iai5kYXRhKS5tYXAoY3VlID0+IHtcbiAgICAgIGlmICh0cmFjaykgdHJhY2suYWRkQ3VlKGN1ZSk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVDYXB0aW9ucygpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLnZpZGVvKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGFsbENDVHJhY2tzID0gdGhpcy52aWRlby50ZXh0VHJhY2tzO1xuXG4gICAgICBpZiAoYWxsQ0NUcmFja3MgJiYgYWxsQ0NUcmFja3MubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbENDVHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdHJhY2sgPSBhbGxDQ1RyYWNrc1tpXTtcbiAgICAgICAgICBjb25zdCBraW5kID0gdHJhY2sua2luZD8udG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChbJ2NhcHRpb25zJywgJ3N1YnRpdGxlcycsICdjYXB0aW9uJywgJ3N1YnRpdGxlJ10uaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVRyYWNrKSB7XG4gICAgICAgICAgICAgIHRyYWNrLm1vZGUgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRyYWNrLmN1ZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0cmFjay5tb2RlID0gXCJzaG93aW5nXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIFNob3cgZmlyc3QgdmFsaWQgdHJhY2sgb25seVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYWNrLm1vZGUgPSBcImRpc2FibGVkXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIG1hbmFnaW5nIGNhcHRpb25zOlwiLCBlcnJvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhY2spIHtcbiAgICAgIHRoaXMudHJhY2suc3R5bGUuZGlzcGxheSA9IHRoaXMuZW5hYmxlVHJhY2sgPyBcIm5vbmVcIiA6IFwiZmxleFwiO1xuICAgIH1cbiAgfVxuXG5cbiAgb25WaWRlb0xvYWQoKSB7XG4gICAgY29uc29sZS5sb2coJ1ZpZGVvIG1ldGFkYXRhIGxvYWRlZCcpO1xuICB9XG5cbiAgb25QbGF5ZWJhY2tFbmRlZCgpIHtcbiAgICBjb25zb2xlLmxvZygnUGxheWJhY2sgZW5kZWQnKTtcbiAgfVxuXG4gIHBsYXliYWNrcHJvZ3Jlc3MoKSB7XG4gICAgY29uc29sZS5sb2coJ1BsYXliYWNrIHByb2dyZXNzIHVwZGF0ZWQnKTtcbiAgfVxuXG4gIG9uUGxheWluZygpIHtcbiAgICBjb25zb2xlLmxvZygnVmlkZW8gaXMgcGxheWluZycpO1xuICB9XG5cbiAgb25FcnJvcihldmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1ZpZGVvIGVycm9yOicsIGV2ZW50KTtcbiAgfVxuXG4gIG9uQnVmZmVyaW5nKCkge1xuICAgIGNvbnNvbGUubG9nKCdWaWRlbyBpcyBidWZmZXJpbmcnKTtcbiAgfVxuXG4gIG9uUGxheSgpIHtcbiAgICBjb25zb2xlLmxvZygnVmlkZW8gc3RhcnRlZCBwbGF5aW5nJyk7XG4gIH1cblxuICBvblNlZWtlZCgpIHtcbiAgICBjb25zb2xlLmxvZygnVmlkZW8gc2Vla2VkJyk7XG4gIH1cblxuICBvblN0YWxsZWQoKSB7XG4gICAgY29uc29sZS5sb2coJ1ZpZGVvIHN0YWxsZWQnKTtcbiAgfVxuXG4gIHVubW91bnQoKXtcbiAgICB0aGlzLm1vdW50UG9pbnQucmVtb3ZlKCk7XG4gICAgdGhpcy5tb3VudFBvaW50ID0gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIbHNQbGF5ZXIocGFyZW50Q29udGFpbmVySWQsIHBsYXllcklkLCBjb25maWcpIHtcbiAgaWYgKCFwbGF5ZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGxheWVySWQgbXVzdCBiZSBhIHZhbGlkIGlkJyk7XG4gIH1cbiAgaWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZpZyBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0Jyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBTbWFydFRWVmlkZW9QbGF5ZXIocGFyZW50Q29udGFpbmVySWQsIHBsYXllcklkLCBjb25maWcpO1xufSJdLCJuYW1lcyI6WyJCdXR0b24iLCJfY3JlYXRlQ2xhc3MiLCJwcm9wcyIsIl9jbGFzc0NhbGxDaGVjayIsIkVycm9yIiwidGhpcyIsImltZ1NyYyIsImltZ0FsdFRleHQiLCJidXR0b25UZXh0Iiwia2xhc3NuYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJmb250V2VpZ2h0IiwiZm9jdXNlZCIsImRpc2FibGVkIiwiaGFuZGxlQ2xpY2siLCJiaW5kIiwia2V5IiwidmFsdWUiLCJidXR0b25FbGVtZW50IiwiZm9jdXMiLCJjbGFzc0xpc3QiLCJhZGQiLCJibHVyIiwicmVtb3ZlIiwibW91bnRQb2ludCIsIl90aGlzIiwiSFRNTEVsZW1lbnQiLCJidXR0b24iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImNvbmNhdCIsInRhYkluZGV4IiwiaW1nIiwic3JjIiwiYWx0Iiwib25lcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwiYXBwZW5kQ2hpbGQiLCJzcGFuIiwidGV4dENvbnRlbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5kZWZpbmVkIiwiUGxheWVyU2Vla2JhciIsInZpZGVvIiwiSFRNTFZpZGVvRWxlbWVudCIsImNvbnRhaW5lciIsInByb2dyZXNzIiwiYnVmZmVyIiwidGh1bWIiLCJ0b29sdGlwIiwidGltZUxhYmVsIiwiZHVyYXRpb25MYWJlbCIsImlzRHJhZ2dpbmciLCJpbml0IiwiZGlzcGxheSIsInVwZGF0ZSIsInVwZGF0ZUJ1ZmZlciIsImUiLCJzZWVrIiwic3RhcnREcmFnIiwic2hvd1Rvb2x0aXAiLCJoaWRlVG9vbHRpcCIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiY3VycmVudFRpbWUiLCJNYXRoIiwibWluIiwiZHVyYXRpb24iLCJtYXgiLCJwYXVzZWQiLCJwbGF5Iiwic2Vjb25kcyIsImlzTmFOIiwibSIsImZsb29yIiwicyIsIlN0cmluZyIsInBhZFN0YXJ0IiwicGVyY2VudCIsImxlZnQiLCJmb3JtYXRUaW1lIiwiYnVmZmVyZWQiLCJsZW5ndGgiLCJlbmQiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiY2xpZW50WCIsIl90aGlzMiIsIm9uTW92ZSIsIm1vdmVFdmVudCIsIm9uVXAiLCJ1cEV2ZW50IiwidGltZSIsInBhcmVudCIsImtleWRvd25IYW5kbGVyIiwiVGV4dENvbnRlbnQiLCJfdHlwZW9mIiwidGV4dCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsInRleHRBbGlnbiIsInRleHREZWNvcmF0aW9uIiwidGV4dFRyYW5zZm9ybSIsImxpbmVIZWlnaHQiLCJsZXR0ZXJTcGFjaW5nIiwiY29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJpbm5lclRleHQiLCJTZXR0aW5nc09wdGlvbk9uZVdyYXBwZXIiLCJ0aXRsZSIsImNhbGxiYWNrIiwib3B0aW9uV3JhcHBlciIsInRpdGxlRWxlbWVudCIsImFycm93RWxlbWVudCIsImluc3RhbmNlIiwiU2V0dGluZ3NPcHRpb25Ud29XcmFwcGVyIiwic2VsZWN0ZWQiLCJpZCIsInNlbGVjdGVkRWxlbWVudCIsIlNpZGViYXIiLCJpdGVtcyIsImlzU2VsZWN0ZWQiLCJjdXJyZW50Rm9jdXNlZE9wdGlvbiIsImxhc3RGb2N1c2VkRWxlbWVudCIsInR5cGUiLCJvbnNlbGVjdCIsImluY2x1ZGVzIiwic2lkZWJhciIsImxpc3QiLCJmb3JFYWNoIiwiaXRlbSIsImlkeCIsImxpc3RJdGVtIiwibW91bnQiLCJzaWRlYmFyRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXJzIiwiZm9jdXNOZXh0IiwiZm9jdXNQcmV2aW91cyIsInVuZm9jdXMiLCJ1bm1vdW50Iiwic2VsZWN0aW9uVHlwZUFjdGlvbiIsInF1ZXJ5U2VsZWN0b3IiLCJwYXJlbnRFbGVtZW50IiwibmV4dFNpYmxpbmciLCJuZXh0RWxlbWVudFNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwicGxheUljb24iLCJwYXVzZUljb24iLCJwbGF5SWNvbkZvY3VzIiwicGF1c2VJY29uRm9jdXMiLCJWaWRlb1BsYXllclVJIiwiX3JlZiIsInBsYXllciIsImNvbmZpZyIsInZpZGVvVGl0bGVDb25maWciLCJzZWxlY3RlZFZpZGVvUXVhbGl0eSIsInNlbGVjdGVkUGxheWJhY2tDYXB0aW9uIiwic2VsZWN0ZWRBdWRpb1F1YWxpdHkiLCJyaWdodFNpZGVDb250YWluZXIiLCJsZWZ0U2lkZUNvbnRhaW5lciIsImNyZWF0ZUNvbnRyb2xzIiwiY3JlYXRlUGxheVBhdXNlQnRuIiwiY3JlYXRlU2Vla2JhciIsImNyZWF0ZVNldHRpbmdzQnRuIiwiY3JlYXRlUmVzdGFydFZpZGVvQnRuIiwiY3JlYXRlVGV4dENvbnRlbnQiLCJwbGF5UGF1c2VCdG4iLCJzZXRBdHRyaWJ1dGUiLCJwYXVzZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImFkZFBsYXlQYXVzZUJ0bkV2ZW50TGlzdGVuZXJzIiwiaWNvblNyYyIsIl90aGlzMyIsInNldHRpbmdzQnRuIiwic2Vla2JhciIsIl90aGlzNCIsInVwZGF0ZVBsYXlQYXVzZUJ1dHRvbiIsIl90aGlzNSIsInJlc3RhcnRWaWRlb0J0biIsInNlZWtiYXJFbGVtZW50IiwiZ2V0RWxlbWVudCIsIl90aGlzNiIsImNyZWF0ZVNpZGVCYXIiLCJoaWRlUGxheWVyQ29udHJvbHMiLCJfdGhpczciLCJzZWxlY3RlZFBsYXliYWNrUXVhbGl0eSIsInZpZGVvTGV2ZWxzIiwidmlkZW9SZXNvbHV0aW9ucyIsImRybUVuYWJsZWQiLCJwbGF5ZXJJbnN0YW5jZSIsImN1cnJlbnRMZXZlbCIsImkiLCJzZXRRdWFsaXR5Rm9yIiwidGV4dFRyYWNrcyIsImNhcHRpb25zT3B0aW9ucyIsInZhbGlkVGV4dFRyYWNrc1R5cGUiLCJraW5kIiwidG9Mb3dlckNhc2UiLCJsYW5ndWFnZSIsIm1vZGUiLCJhdWRpb1RyYWNrcyIsImxhbmciLCJzZXRDdXJyZW50VHJhY2siLCJhdWRpb1RyYWNrIiwiX3RoaXM4IiwibWFpblNpZGViYXIiLCJyZXNvbHV0aW9ucyIsImN1cnJlbnRRdWFsaXR5IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWFwIiwicmVzb2x1dGlvbiIsImRhdGEiLCJjaGFuZ2VQbGF5QmFja1F1YWxpdHkiLCJ2aXNpYmlsaXR5IiwiX3RoaXM5IiwiY3VycmVudEF1ZGlvUXVhbGl0eSIsImF1ZGlvIiwibmFtZSIsImRlZmF1bHQiLCJjaGFuZ2VQbGF5YmFja0F1ZGlvIiwiX3RoaXMwIiwiY2FwdGlvbnMiLCJjdXJyZW50Q2FwdGlvbiIsInN1YnRpdGxlIiwibGFiZWwiLCJjaGFuZ2VQbGF5YmFja0NhcHRpb25zIiwiX3RoaXMxIiwidmlkZW9RdWFsaXR5U2VsZWN0b3IiLCJwdXNoIiwiYXVkaW9MYW5ndWFnZVNlbGVjdG9yIiwic3VidGl0bGVzU2VsZWN0b3IiLCJzaG93UGxheWVyQ29udHJvbHMiLCJoYW5kbGVQbGF5UGF1c2VLZXlkb3duIiwicGFyc2VfdGltZXN0YW1wIiwibWF0Y2giLCJob3VycyIsInBhcnNlSW50IiwibWludXRlcyIsInBhcnNlRmxvYXQiLCJyZXBsYWNlIiwiU21hcnRUVlZpZGVvUGxheWVyIiwicGFyZW50Q29udGFpbmVySWQiLCJwbGF5ZXJJZCIsInBvc2l0aW9uIiwidG9wIiwicGFyZW50Q29udGFpbmVyIiwiZ2V0RWxlbWVudEJ5SWQiLCJib2R5IiwiaGxzIiwiZGFzaGpzIiwiY2xvc2VkQ2FwdGlvbnMiLCJlbmFibGVUcmFjayIsImNhcHRpb25zT3B0aW9uc0xpc3QiLCJ2aWRlb1Jlc29sdXRpb25zTGlzdCIsImF1ZGlvTGlzdCIsInRyYWNrIiwiaW5pdGlhbGl6ZVBsYXllciIsInN0cmVhbVVybCIsImNvbnRyb2xzIiwiYWRkUGxheWVyRXZlbnRMaXN0ZW5lcnMiLCJ3aW5kb3ciLCJNZWRpYVBsYXllciIsImNyZWF0ZSIsIndpZGV2aW5lIiwiZHJtTWV0YWRhdGEiLCJwbGF5UmVhZHkiLCJwcm90ZWN0aW9uRGF0YSIsInNlcnZlclVSTCIsImxpY2Vuc2VVcmwiLCJodHRwUmVxdWVzdEhlYWRlcnMiLCJsaWNlbnNlVG9rZW4iLCJpbml0aWFsaXplIiwidXJsIiwiYXR0YWNoVFRNTFJlbmRlcmluZ0RpdiIsImF0dGFjaFZpZXciLCJzZXRQcm90ZWN0aW9uRGF0YSIsInByZWxvYWQiLCJIbHMiLCJpc1N1cHBvcnRlZCIsImVuYWJsZVdvcmtlciIsImxvd0xhdGVuY3lNb2RlIiwiYmFja0J1ZmZlckxlbmd0aCIsIm1heEJ1ZmZlckxlbmd0aCIsIm1heE1heEJ1ZmZlckxlbmd0aCIsIm1heEZyYWdMb29rVXBUb2xlcmFuY2UiLCJtYXhMb2FkaW5nRGVsYXkiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsIm9uIiwiZXZlbnRzIiwiU1RSRUFNX0lOSVRJQUxJWkVEIiwiZ2V0Qml0cmF0ZUluZm9MaXN0Rm9yIiwiZ2V0VHJhY2tzRm9yIiwiY2FwdGlvbnNvcHRpb25zTGlzdCIsImdldENhcHRpb25zT3B0aW9ucyIsImdldFZpZGVvUmVzb2x1dGlvbnMiLCJnZXRBdWRpb1RyYWNrcyIsInVpIiwiYXR0YWNoVG8iLCJFdmVudHMiLCJBVURJT19UUkFDS1NfVVBEQVRFRCIsIk1BTklGRVNUX1BBUlNFRCIsImxldmVscyIsIm9uVmlkZW9Mb2FkIiwiY2FucGxheXRocm91Z2giLCJvblBsYXllYmFja0VuZGVkIiwicGxheWJhY2twcm9ncmVzcyIsIm9uUGxheWluZyIsIm9uRXJyb3IiLCJvbkJ1ZmZlcmluZyIsIm9uUGxheSIsIm9uU2Vla2VkIiwib25TdGFsbGVkIiwiYWRkQWxsQ2FwdGlvbnNUb1BsYXllciIsImFsbENDVHJhY2tzIiwibG9nIiwiY291bnRlclZhcmlhYmxlIiwiY3VycmVudExhYmVsIiwiZmV0Y2giLCJ0aGVuIiwicmVzcG9uc2UiLCJqc29uIiwiaGFzT3duUHJvcGVydHkiLCJ2dHRPYmoiLCJhZGRDYXB0aW9uVG9QbGF5ZXIiLCJjYXRjaCIsImVycm9yIiwiX3RoaXMkcGxheWVyIiwiYWRkVGV4dFRyYWNrIiwidnR0IiwibGluZXMiLCJ0cmltIiwic3BsaXQiLCJsaW5lIiwibWVzc2FnZSIsImN1ZXMiLCJzdGFydCIsInBheWxvYWQiLCJpbmRleE9mIiwiY3VlIiwic3BsaXR0ZWQiLCJWVFRDdWUiLCJOdW1iZXIiLCJ2dHRfb3Jfc3J0X3BhcnNlciIsImFkZEN1ZSIsIl90cmFjayRraW5kIiwiX3RyYWNrJGN1ZXMiXSwibWFwcGluZ3MiOiIwbERBQUEsSUFBYUEsRUFBTSxXQThCZCxPQUFBQyxFQTdCRCxTQUFBRCxFQUFZRSxHQUNSLEdBRGVDLE9B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
@@ -0,0 +1,24 @@
1
+ import '@viewlift/player-backup/esm/bundle.css';
2
+ import "./styles/index.css";
3
+ export interface VideoPlayerOptions {
4
+ onPlaybackSuccess?: (result: object) => void;
5
+ onPlaybackEnded?: () => void;
6
+ onPlaybackError?: (error?: object) => void;
7
+ playerId: string;
8
+ autoplay?: boolean;
9
+ controls?: boolean;
10
+ width?: number;
11
+ height?: number;
12
+ }
13
+ export declare class VideoPlayer {
14
+ /**
15
+ * Reinitialize the current videoElement with a new set of options and handle autoplay.
16
+ */
17
+ reinitialize(options: VideoPlayerOptions, container: HTMLElement): void;
18
+ private videoElement;
19
+ private options;
20
+ private playerContainer;
21
+ constructor(options: VideoPlayerOptions, container: HTMLElement);
22
+ initialize(): any;
23
+ configureWebSDKPlayer(result: object): void;
24
+ }
@@ -0,0 +1,2 @@
1
+ body{background-color:#000;box-sizing:border-box;margin:0;padding:0}.vl-player-container .seekbar-container{background:#444;border-radius:6px;bottom:50px;cursor:pointer;height:12px;left:50%;margin:0;position:absolute;transform:translateX(-50%);user-select:none;width:90%;z-index:20}.vl-player-container .seekbar-buffer{background:#888;border-radius:6px;height:100%;position:absolute;width:0;z-index:1}.vl-player-container .seekbar-progress{background:rgba(254,253,255,.7);border-radius:6px;height:100%;position:absolute;transition:width .1s linear;width:0;z-index:2}.vl-player-container .seekbar-thumb{background:#fff;border-radius:50%;box-shadow:0 2px 8px rgba(0,0,0,.2);cursor:pointer;height:16px;position:absolute;top:50%;transform:translate(-50%,-50%);transition:background .2s;width:16px;z-index:3}.vl-player-container .seekbar-thumb:hover{background:#ffeaea}.vl-player-container .seekbar-tooltip{background:#222;border-radius:4px;bottom:24px;color:#fff;font-size:12px;left:0;padding:2px 8px;pointer-events:none;position:absolute;transform:translateX(-50%);white-space:nowrap;z-index:10}.vl-player-container .seekbar-duration-label,.vl-player-container .seekbar-time-label{color:#eee;font-size:13px;margin-right:4px;position:relative;top:18px;z-index:5}.vl-player-container .play-pause-btn{background:hsla(0,0%,100%,.5);border-radius:50%;cursor:pointer;height:70px;left:50%;position:absolute!important;top:50%;transform:translate(-50%,-50%);width:70px;z-index:20}.vl-player-container .play-pause-btn img{height:50px;left:50%;position:absolute!important;top:50%;transform:translate(-50%,-50%)}.vl-player-container .left-side-container{bottom:77px;display:flex;left:5%;position:absolute!important}.vl-player-container .right-side-container{bottom:77px;display:flex;position:absolute!important;right:5%}.vl-player-container .settings-btn{background:hsla(0,0%,100%,.5);border-radius:5px;bottom:100px;cursor:pointer;height:40px;margin:0 5px;padding:5px;width:50px;z-index:20}.vl-player-container .settings-btn img{height:100%}.vl-player-container .restart-btn{border:2px solid #fff;border-radius:8px;bottom:100px;color:#fff;cursor:pointer;display:flex;flex-direction:column;font-size:20px;font-weight:700;justify-content:center;margin:0 5px;padding:5px;right:2%;z-index:20}.vl-player-container .default-option-wrapper{align-items:center;background:#525760;border-radius:2px;box-shadow:0 10px 15px rgba(0,0,0,.1);color:#fff;cursor:pointer;display:flex;font-size:18px;font-weight:700;height:50px;justify-content:space-between;margin:20px 0;padding:5px 10px;text-transform:capitalize;width:95%}.vl-player-container .default-option-wrapper span{height:40px}.vl-player-container .default-option-wrapper span>img{height:100%}.vl-player-container .default-sidebar{background-color:rgba(30,30,30,.75);color:#fff;display:flex;flex-direction:column;height:100%;min-height:720px;padding:50px 20px 0;position:absolute;right:0;top:0;width:400px;z-index:30}.vl-player-container .focused{outline:2px solid #fff}
2
+ /*# sourceMappingURL=index.esm.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.css"],"names":[],"mappings":"AACE,KAIE,qBAAsB,CADtB,qBAAsB,CAFtB,QAAS,CACT,SAGF,CACF,wCAMI,eAAgB,CAGhB,iBAAkB,CALlB,WAAY,CAIZ,cAAe,CAHf,WAAY,CAHZ,QAAS,CAQT,QAAS,CATT,iBAAkB,CAElB,0BAA2B,CAQ3B,gBAAiB,CAJjB,SAAU,CAKV,UACF,CAEF,qCAGI,eAAgB,CAEhB,iBAAkB,CAHlB,WAAY,CADZ,iBAAkB,CAGlB,OAAQ,CAER,SACF,CAEF,uCAGI,+BAAoC,CAEpC,iBAAkB,CAHlB,WAAY,CADZ,iBAAkB,CAMlB,2BAA6B,CAH7B,OAAQ,CAER,SAEF,CAEF,oCAMI,eAAgB,CAChB,iBAAkB,CAGlB,mCAAqC,CACrC,cAAe,CANf,WAAY,CAJZ,iBAAkB,CAClB,OAAQ,CACR,8BAAgC,CAShC,yBAA2B,CAR3B,UAAW,CAKX,SAIF,CACD,0CACG,kBACF,CAED,sCAKG,eAAgB,CAGhB,iBAAkB,CANlB,WAAY,CAIZ,UAAW,CAGX,cAAe,CANf,MAAO,CAIP,eAAgB,CAIhB,mBAAoB,CAVpB,iBAAkB,CAGlB,0BAA2B,CAM3B,kBAAmB,CAEnB,UACF,CAEF,sFAII,UAAW,CADX,cAAe,CAEf,gBAAiB,CAJjB,iBAAkB,CAClB,QAAS,CAIT,SACF,CAOF,qCASE,6BAAiC,CADjC,iBAAkB,CAElB,cAAe,CAHf,WAAY,CALZ,QAAS,CADT,2BAA6B,CAE7B,OAAQ,CACR,8BAAgC,CAEhC,UAAW,CADX,UAMF,CAEA,yCAKE,WAAY,CAHZ,QAAS,CADT,2BAA6B,CAE7B,OAAQ,CACR,8BAEF,CAGA,0CAIE,WAAY,CAFZ,YAAa,CACb,OAAQ,CAFR,2BAIF,CAEA,2CAIE,WAAY,CAFZ,YAAa,CADb,2BAA6B,CAE7B,QAEF,CAEA,mCAOE,6BAAkC,CANlC,iBAAkB,CAElB,YAAa,CAKb,cAAe,CAHf,WAAY,CACZ,YAAa,CAJb,WAAY,CAEZ,UAAW,CAKX,UACF,CAEA,uCACE,WACF,CAEA,kCAKE,qBAAsB,CAHtB,iBAAkB,CAElB,YAAa,CAEb,UAAW,CAOX,cAAe,CAJf,YAAa,CACb,qBAAsB,CAHtB,cAAe,CACf,eAAgB,CAGhB,sBAAuB,CACvB,YAAa,CATb,WAAY,CAFZ,QAAS,CAaT,UACF,CAIA,6CAGE,kBAAmB,CAGnB,kBAAmB,CAKnB,iBAAkB,CAClB,qCAAyC,CALzC,UAAW,CAQX,cAAe,CAdf,YAAa,CASb,cAAe,CADf,eAAgB,CAJhB,WAAY,CAHZ,6BAA8B,CAW9B,aAAgB,CALhB,gBAAiB,CAMjB,yBAA0B,CAV1B,SAYF,CACA,kDACE,WACF,CAEA,sDACE,WACF,CAGA,sCAME,mCAAuC,CAHvC,UAAW,CACX,YAAa,CACb,qBAAsB,CAEtB,WAAY,CACZ,gBAAiB,CAEjB,mBAAyB,CATzB,iBAAkB,CAUlB,OAAU,CATV,KAAM,CAON,WAAY,CAGZ,UAEF,CAEA,8BACI,sBACJ","file":"index.esm.css","sourcesContent":["/*************** playerSeekbar.css ***************/\n body {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background-color: #000;\n }\n.vl-player-container .seekbar-container {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n bottom: 50px;\n height: 12px;\n background: #444;\n width: 90%;\n cursor: pointer;\n border-radius: 6px;\n margin: 0;\n user-select: none;\n z-index: 20;\n }\n \n.vl-player-container .seekbar-buffer {\n position: absolute;\n height: 100%;\n background: #888;\n width: 0;\n border-radius: 6px;\n z-index: 1;\n }\n \n.vl-player-container .seekbar-progress {\n position: absolute;\n height: 100%;\n background: rgba(254, 253, 255, 0.7);\n width: 0;\n border-radius: 6px;\n z-index: 2;\n transition: width 0.1s linear;\n }\n \n.vl-player-container .seekbar-thumb {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 16px;\n height: 16px;\n background: #fff;\n border-radius: 50%;\n /* border: 2px solid #4169E1; */\n z-index: 3;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n cursor: pointer;\n transition: background 0.2s;\n }\n .vl-player-container .seekbar-thumb:hover {\n background: #ffeaea;\n }\n \n .vl-player-container .seekbar-tooltip {\n position: absolute;\n bottom: 24px;\n left: 0;\n transform: translateX(-50%);\n background: #222;\n color: #fff;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n pointer-events: none;\n z-index: 10;\n }\n \n.vl-player-container .seekbar-time-label, .vl-player-container .seekbar-duration-label {\n position: relative;\n top: 18px;\n font-size: 13px;\n color: #eee;\n margin-right: 4px;\n z-index: 5;\n }\n \n\n\n\n/*************** playerButtons.css ***************/\n\n.vl-player-container .play-pause-btn {\n position: absolute !important;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n z-index: 20;\n width: 70px;\n height: 70px;\n border-radius: 50%;\n background: rgba(255,255,255, .5);\n cursor: pointer;\n} \n\n.vl-player-container .play-pause-btn img {\n position: absolute !important;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n height: 50px;\n}\n\n\n.vl-player-container .left-side-container {\n position: absolute !important;\n display: flex;\n left: 5%;\n bottom: 77px;\n}\n\n.vl-player-container .right-side-container {\n position: absolute !important;\n display: flex;\n right: 5%;\n bottom: 77px;\n}\n\n.vl-player-container .settings-btn {\n border-radius: 5px;\n padding: 5px;\n bottom: 100px;\n width: 50px;\n height: 40px;\n margin: 0 5px;\n background: rgba(255,255,255, 0.5);\n cursor: pointer;\n z-index: 20;\n}\n\n.vl-player-container .settings-btn img{\n height: 100%;\n}\n\n.vl-player-container .restart-btn {\n right: 2%;\n border-radius: 8px;\n padding: 5px;\n bottom: 100px;\n border: 2px solid #fff;\n color: #fff;\n font-size: 20px;\n font-weight: 700;\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin: 0 5px;\n cursor: pointer;\n z-index: 20;\n}\n\n\n/*************** player-setting-option-wrapper ***************/\n.vl-player-container .default-option-wrapper {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 95%;\n height: 50px;\n background: #525760;\n color: #fff;\n padding: 5px 10px;\n font-weight: 700;\n font-size: 18px;\n border-radius: 2px;\n box-shadow: 0 10px 15px rgba(0, 0, 0, .1);\n margin: 20px 0px;\n text-transform: capitalize;\n cursor: pointer;\n}\n.vl-player-container .default-option-wrapper span {\n height: 40px;\n}\n\n.vl-player-container .default-option-wrapper span > img{\n height: 100%;\n}\n\n\n.vl-player-container .default-sidebar {\n position: absolute;\n top: 0;\n color: #fff;\n display: flex;\n flex-direction: column;\n background-color: rgba(30, 30, 30, .75);\n height: 100%;\n min-height: 720px;\n width: 400px;\n padding: 50px 20px 0 20px;\n right: 0px;\n z-index: 30;\n /* right: -450px; */\n}\n\n.vl-player-container .focused{\n outline: 2px solid #ffffff;\n}"]}