xgplayer-mp4 3.0.24 → 3.0.25-alpha.1
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.
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/es/error.d.ts +1 -1
- package/es/mp4Plugin.d.ts +2 -1
- package/es/mp4Plugin.js +5 -4
- package/es/version.js +1 -1
- package/es/worker/transmuxerworker.js +1 -1
- package/package.json +5 -5
package/dist/index.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("core-js/modules/es.json.stringify.js"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.regexp.test.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.promise.js"),require("core-js/modules/es.promise.finally.js"),require("core-js/modules/es.object.assign.js"),require("core-js/modules/es.array.splice.js"),require("core-js/modules/web.dom-collections.for-each.js"),require("core-js/modules/es.object.keys.js"),require("core-js/modules/es.function.name.js"),require("core-js/modules/es.array.concat.js"),require("xgplayer"),require("core-js/modules/es.array.map.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/es.typed-array.uint8-array.js"),require("core-js/modules/esnext.typed-array.at.js"),require("core-js/modules/es.typed-array.copy-within.js"),require("core-js/modules/es.typed-array.every.js"),require("core-js/modules/es.typed-array.fill.js"),require("core-js/modules/es.typed-array.filter.js"),require("core-js/modules/es.typed-array.find.js"),require("core-js/modules/es.typed-array.find-index.js"),require("core-js/modules/esnext.typed-array.find-last.js"),require("core-js/modules/esnext.typed-array.find-last-index.js"),require("core-js/modules/es.typed-array.for-each.js"),require("core-js/modules/es.typed-array.includes.js"),require("core-js/modules/es.typed-array.index-of.js"),require("core-js/modules/es.typed-array.iterator.js"),require("core-js/modules/es.typed-array.join.js"),require("core-js/modules/es.typed-array.last-index-of.js"),require("core-js/modules/es.typed-array.map.js"),require("core-js/modules/es.typed-array.reduce.js"),require("core-js/modules/es.typed-array.reduce-right.js"),require("core-js/modules/es.typed-array.reverse.js"),require("core-js/modules/es.typed-array.set.js"),require("core-js/modules/es.typed-array.slice.js"),require("core-js/modules/es.typed-array.some.js"),require("core-js/modules/es.typed-array.sort.js"),require("core-js/modules/es.typed-array.subarray.js"),require("core-js/modules/es.typed-array.to-locale-string.js"),require("core-js/modules/es.typed-array.to-string.js"),require("core-js/modules/es.array.find.js"),require("core-js/modules/es.number.constructor.js"),require("core-js/modules/es.array.filter.js"),require("core-js/modules/es.array.slice.js"),require("core-js/modules/es.symbol.js"),require("core-js/modules/es.symbol.iterator.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/web.dom-collections.iterator.js"),require("core-js/modules/es.symbol.description.js"),require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.string.includes.js"),require("core-js/modules/es.number.is-finite.js"),require("core-js/modules/es.regexp.to-string.js"),require("core-js/modules/es.math.hypot.js"),require("core-js/modules/es.array.join.js"),require("core-js/modules/es.string.from-code-point.js"),require("core-js/modules/es.string.match.js"),require("core-js/modules/es.array.sort.js"),require("core-js/modules/es.regexp.flags.js"),require("core-js/modules/es.string.pad-start.js"),require("core-js/modules/es.array.from.js"),require("core-js/modules/es.array-buffer.constructor.js"),require("core-js/modules/es.typed-array.int8-array.js"),require("core-js/modules/es.typed-array.uint8-clamped-array.js"),require("core-js/modules/es.typed-array.int16-array.js"),require("core-js/modules/es.typed-array.uint16-array.js"),require("core-js/modules/es.typed-array.int32-array.js"),require("core-js/modules/es.typed-array.uint32-array.js"),require("core-js/modules/es.typed-array.float32-array.js"),require("core-js/modules/es.typed-array.float64-array.js"),require("core-js/modules/web.url.js"),require("core-js/modules/web.url-search-params.js"),require("core-js/modules/es.string.replace.js"),require("core-js/modules/es.number.is-nan.js"),require("core-js/modules/es.object.get-prototype-of.js"),require("core-js/modules/es.string.trim.js"),require("core-js/modules/es.set.js")):"function"==typeof define&&define.amd?define(["core-js/modules/es.json.stringify.js","core-js/modules/es.regexp.exec.js","core-js/modules/es.regexp.test.js","core-js/modules/es.object.to-string.js","core-js/modules/es.promise.js","core-js/modules/es.promise.finally.js","core-js/modules/es.object.assign.js","core-js/modules/es.array.splice.js","core-js/modules/web.dom-collections.for-each.js","core-js/modules/es.object.keys.js","core-js/modules/es.function.name.js","core-js/modules/es.array.concat.js","xgplayer","core-js/modules/es.array.map.js","core-js/modules/es.array.iterator.js","core-js/modules/es.typed-array.uint8-array.js","core-js/modules/esnext.typed-array.at.js","core-js/modules/es.typed-array.copy-within.js","core-js/modules/es.typed-array.every.js","core-js/modules/es.typed-array.fill.js","core-js/modules/es.typed-array.filter.js","core-js/modules/es.typed-array.find.js","core-js/modules/es.typed-array.find-index.js","core-js/modules/esnext.typed-array.find-last.js","core-js/modules/esnext.typed-array.find-last-index.js","core-js/modules/es.typed-array.for-each.js","core-js/modules/es.typed-array.includes.js","core-js/modules/es.typed-array.index-of.js","core-js/modules/es.typed-array.iterator.js","core-js/modules/es.typed-array.join.js","core-js/modules/es.typed-array.last-index-of.js","core-js/modules/es.typed-array.map.js","core-js/modules/es.typed-array.reduce.js","core-js/modules/es.typed-array.reduce-right.js","core-js/modules/es.typed-array.reverse.js","core-js/modules/es.typed-array.set.js","core-js/modules/es.typed-array.slice.js","core-js/modules/es.typed-array.some.js","core-js/modules/es.typed-array.sort.js","core-js/modules/es.typed-array.subarray.js","core-js/modules/es.typed-array.to-locale-string.js","core-js/modules/es.typed-array.to-string.js","core-js/modules/es.array.find.js","core-js/modules/es.number.constructor.js","core-js/modules/es.array.filter.js","core-js/modules/es.array.slice.js","core-js/modules/es.symbol.js","core-js/modules/es.symbol.iterator.js","core-js/modules/es.string.iterator.js","core-js/modules/web.dom-collections.iterator.js","core-js/modules/es.symbol.description.js","core-js/modules/es.array.includes.js","core-js/modules/es.string.includes.js","core-js/modules/es.number.is-finite.js","core-js/modules/es.regexp.to-string.js","core-js/modules/es.math.hypot.js","core-js/modules/es.array.join.js","core-js/modules/es.string.from-code-point.js","core-js/modules/es.string.match.js","core-js/modules/es.array.sort.js","core-js/modules/es.regexp.flags.js","core-js/modules/es.string.pad-start.js","core-js/modules/es.array.from.js","core-js/modules/es.array-buffer.constructor.js","core-js/modules/es.typed-array.int8-array.js","core-js/modules/es.typed-array.uint8-clamped-array.js","core-js/modules/es.typed-array.int16-array.js","core-js/modules/es.typed-array.uint16-array.js","core-js/modules/es.typed-array.int32-array.js","core-js/modules/es.typed-array.uint32-array.js","core-js/modules/es.typed-array.float32-array.js","core-js/modules/es.typed-array.float64-array.js","core-js/modules/web.url.js","core-js/modules/web.url-search-params.js","core-js/modules/es.string.replace.js","core-js/modules/es.number.is-nan.js","core-js/modules/es.object.get-prototype-of.js","core-js/modules/es.string.trim.js","core-js/modules/es.set.js"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Mp4Plugin=t(null,null,null,null,null,null,null,null,null,null,null,null,e.Player)}(this,(function(e,t,i,n,s,a,r,l,o,d,c,u,m){"use strict";function h(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function p(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?h(Object(i),!0).forEach((function(t){G(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):h(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function y(){y=function(){return e};var e={},t=Object.prototype,i=t.hasOwnProperty,n=Object.defineProperty||function(e,t,i){e[t]=i.value},s="function"==typeof Symbol?Symbol:{},a=s.iterator||"@@iterator",r=s.asyncIterator||"@@asyncIterator",l=s.toStringTag||"@@toStringTag";function o(e,t,i){return Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{o({},"")}catch(k){o=function(e,t,i){return e[t]=i}}function d(e,t,i,s){var a=t&&t.prototype instanceof m?t:m,r=Object.create(a.prototype),l=new g(s||[]);return n(r,"_invoke",{value:G(e,i,l)}),r}function c(e,t,i){try{return{type:"normal",arg:e.call(t,i)}}catch(k){return{type:"throw",arg:k}}}e.wrap=d;var u={};function m(){}function h(){}function p(){}var Z={};o(Z,a,(function(){return this}));var b=Object.getPrototypeOf,f=b&&b(b(V([])));f&&f!==t&&i.call(f,a)&&(Z=f);var X=p.prototype=m.prototype=Object.create(Z);function L(e){["next","throw","return"].forEach((function(t){o(e,t,(function(e){return this._invoke(t,e)}))}))}function W(e,t){function s(n,a,r,l){var o=c(e[n],e,a);if("throw"!==o.type){var d=o.arg,u=d.value;return u&&"object"==typeof u&&i.call(u,"__await")?t.resolve(u.__await).then((function(e){s("next",e,r,l)}),(function(e){s("throw",e,r,l)})):t.resolve(u).then((function(e){d.value=e,r(d)}),(function(e){return s("throw",e,r,l)}))}l(o.arg)}var a;n(this,"_invoke",{value:function(e,i){function n(){return new t((function(t,n){s(e,i,t,n)}))}return a=a?a.then(n,n):n()}})}function G(e,t,i){var n="suspendedStart";return function(s,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===s)throw a;return{value:void 0,done:!0}}for(i.method=s,i.arg=a;;){var r=i.delegate;if(r){var l=v(r,i);if(l){if(l===u)continue;return l}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if("suspendedStart"===n)throw n="completed",i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);n="executing";var o=c(e,t,i);if("normal"===o.type){if(n=i.done?"completed":"suspendedYield",o.arg===u)continue;return{value:o.arg,done:i.done}}"throw"===o.type&&(n="completed",i.method="throw",i.arg=o.arg)}}}function v(e,t){var i=t.method,n=e.iterator[i];if(void 0===n)return t.delegate=null,"throw"===i&&e.iterator.return&&(t.method="return",t.arg=void 0,v(e,t),"throw"===t.method)||"return"!==i&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+i+"' method")),u;var s=c(n,e.iterator,t.arg);if("throw"===s.type)return t.method="throw",t.arg=s.arg,t.delegate=null,u;var a=s.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function S(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function g(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function V(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,s=function t(){for(;++n<e.length;)if(i.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return s.next=s}}return{next:Y}}function Y(){return{value:void 0,done:!0}}return h.prototype=p,n(X,"constructor",{value:p,configurable:!0}),n(p,"constructor",{value:h,configurable:!0}),h.displayName=o(p,l,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===h||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,o(e,l,"GeneratorFunction")),e.prototype=Object.create(X),e},e.awrap=function(e){return{__await:e}},L(W.prototype),o(W.prototype,r,(function(){return this})),e.AsyncIterator=W,e.async=function(t,i,n,s,a){void 0===a&&(a=Promise);var r=new W(d(t,i,n,s),a);return e.isGeneratorFunction(i)?r:r.next().then((function(e){return e.done?e.value:r.next()}))},L(X),o(X,l,"Generator"),o(X,a,(function(){return this})),o(X,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=Object(e),i=[];for(var n in t)i.push(n);return i.reverse(),function e(){for(;i.length;){var n=i.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},e.values=V,g.prototype={constructor:g,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(S),!e)for(var t in this)"t"===t.charAt(0)&&i.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(i,n){return r.type="throw",r.arg=e,t.next=i,n&&(t.method="next",t.arg=void 0),!!n}for(var s=this.tryEntries.length-1;s>=0;--s){var a=this.tryEntries[s],r=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var l=i.call(a,"catchLoc"),o=i.call(a,"finallyLoc");if(l&&o){if(this.prev<a.catchLoc)return n(a.catchLoc,!0);if(this.prev<a.finallyLoc)return n(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return n(a.catchLoc,!0)}else{if(!o)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return n(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var s=this.tryEntries[n];if(s.tryLoc<=this.prev&&i.call(s,"finallyLoc")&&this.prev<s.finallyLoc){var a=s;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var r=a?a.completion:{};return r.type=e,r.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(r)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.finallyLoc===e)return this.complete(i.completion,i.afterLoc),S(i),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.tryLoc===e){var n=i.completion;if("throw"===n.type){var s=n.arg;S(i)}return s}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:V(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=void 0),u}},e}function Z(e){return(Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function b(e,t,i,n,s,a,r){try{var l=e[a](r),o=l.value}catch(d){return void i(d)}l.done?t(o):Promise.resolve(o).then(n,s)}function f(e){return function(){var t=this,i=arguments;return new Promise((function(n,s){var a=e.apply(t,i);function r(e){b(a,n,s,r,l,"next",e)}function l(e){b(a,n,s,r,l,"throw",e)}r(void 0)}))}}function X(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function L(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,F(n.key),n)}}function W(e,t,i){return t&&L(e.prototype,t),i&&L(e,i),Object.defineProperty(e,"prototype",{writable:!1}),e}function G(e,t,i){return(t=F(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function v(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&S(e,t)}function x(e){return(x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function S(e,t){return(S=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function g(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function V(e,t,i){return(V=g()?Reflect.construct.bind():function(e,t,i){var n=[null];n.push.apply(n,t);var s=new(Function.bind.apply(e,n));return i&&S(s,i.prototype),s}).apply(null,arguments)}function Y(e){var t="function"==typeof Map?new Map:void 0;return Y=function(e){if(null===e||(i=e,-1===Function.toString.call(i).indexOf("[native code]")))return e;var i;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return V(e,arguments,x(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),S(n,e)},Y(e)}function k(e,t){if(null==e)return{};var i,n,s=function(e,t){if(null==e)return{};var i,n,s={},a=Object.keys(e);for(n=0;n<a.length;n++)i=a[n],t.indexOf(i)>=0||(s[i]=e[i]);return s}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)i=a[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s}function R(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function T(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return R(e)}function w(e){var t=g();return function(){var i,n=x(e);if(t){var s=x(this).constructor;i=Reflect.construct(n,arguments,s)}else i=n.apply(this,arguments);return T(this,i)}}function M(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=x(e)););return e}function K(){return K="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,i){var n=M(e,t);if(n){var s=Object.getOwnPropertyDescriptor(n,t);return s.get?s.get.call(arguments.length<3?e:i):s.value}},K.apply(this,arguments)}function I(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var i=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=i){var n,s,a,r,l=[],o=!0,d=!1;try{if(a=(i=i.call(e)).next,0===t){if(Object(i)!==i)return;o=!1}else for(;!(o=(n=a.call(i)).done)&&(l.push(n.value),l.length!==t);o=!0);}catch(c){d=!0,s=c}finally{try{if(!o&&null!=i.return&&(r=i.return(),Object(r)!==r))return}finally{if(d)throw s}}return l}}(e,t)||H(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e){return function(e){if(Array.isArray(e))return N(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||H(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 H(e,t){if(e){if("string"==typeof e)return N(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?N(e,t):void 0}}function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}function z(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=H(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,s=function(){};return{s:s,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,r=!0,l=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return r=e.done,e},e:function(e){l=!0,a=e},f:function(){try{r||null==i.return||i.return()}finally{if(l)throw a}}}}function F(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}var U={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,i="~";function n(){}function s(e,t,i){this.fn=e,this.context=t,this.once=i||!1}function a(e,t,n,a,r){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new s(n,a||e,r),o=i?i+t:t;return e._events[o]?e._events[o].fn?e._events[o]=[e._events[o],l]:e._events[o].push(l):(e._events[o]=l,e._eventsCount++),e}function r(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function l(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(i=!1)),l.prototype.eventNames=function(){var e,n,s=[];if(0===this._eventsCount)return s;for(n in e=this._events)t.call(e,n)&&s.push(i?n.slice(1):n);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},l.prototype.listeners=function(e){var t=i?i+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var s=0,a=n.length,r=new Array(a);s<a;s++)r[s]=n[s].fn;return r},l.prototype.listenerCount=function(e){var t=i?i+e:e,n=this._events[t];return n?n.fn?1:n.length:0},l.prototype.emit=function(e,t,n,s,a,r){var l=i?i+e:e;if(!this._events[l])return!1;var o,d,c=this._events[l],u=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,s),!0;case 5:return c.fn.call(c.context,t,n,s,a),!0;case 6:return c.fn.call(c.context,t,n,s,a,r),!0}for(d=1,o=new Array(u-1);d<u;d++)o[d-1]=arguments[d];c.fn.apply(c.context,o)}else{var m,h=c.length;for(d=0;d<h;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),u){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,s);break;default:if(!o)for(m=1,o=new Array(u-1);m<u;m++)o[m-1]=arguments[m];c[d].fn.apply(c[d].context,o)}}return!0},l.prototype.on=function(e,t,i){return a(this,e,t,i,!1)},l.prototype.once=function(e,t,i){return a(this,e,t,i,!0)},l.prototype.removeListener=function(e,t,n,s){var a=i?i+e:e;if(!this._events[a])return this;if(!t)return r(this,a),this;var l=this._events[a];if(l.fn)l.fn!==t||s&&!l.once||n&&l.context!==n||r(this,a);else{for(var o=0,d=[],c=l.length;o<c;o++)(l[o].fn!==t||s&&!l[o].once||n&&l[o].context!==n)&&d.push(l[o]);d.length?this._events[a]=1===d.length?d[0]:d:r(this,a)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=i?i+e:e,this._events[t]&&r(this,t)):(this._events=new n,this._eventsCount=0),this},l.prototype.off=l.prototype.removeListener,l.prototype.addListener=l.prototype.on,l.prefixed=i,l.EventEmitter=l,e.exports=l}(U);var J,j=U.exports,P={};Object.defineProperty(P,"__esModule",{value:!0}),P.default=function(e){for(var t=0,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=!0,r=!1,l=void 0;try{for(var o,d=n[Symbol.iterator]();!(a=(o=d.next()).done);a=!0){var c=o.value;t+=c.length}}catch(X){r=!0,l=X}finally{try{!a&&d.return&&d.return()}finally{if(r)throw l}}var u=new e(t),m=0,h=!0,p=!1,y=void 0;try{for(var Z,b=n[Symbol.iterator]();!(h=(Z=b.next()).done);h=!0){var f=Z.value;u.set(f,m),m+=f.length}}catch(X){p=!0,y=X}finally{try{!h&&b.return&&b.return()}finally{if(p)throw y}}return u};var E=((J=P)&&J.__esModule?J:{default:J}).default,D="video",B="audio",_="metadata",Q="av1",O="avc",A="hevc",q="aac",$="g7110a",ee="g7110m",te="opus",ie="mp3",ne="LARGE_AV_SHIFT",se="LARGE_VIDEO_GAP",ae="LARGE_VIDEO_GAP_BETWEEN_CHUNK",re="LARGE_AUDIO_GAP",le="AUDIO_FILLED",oe="AUDIO_DROPPED",de=function(){function e(){X(this,e),G(this,"id",1),G(this,"type",D),G(this,"codecType",O),G(this,"pid",-1),G(this,"hvcC",void 0),G(this,"codec",""),G(this,"timescale",0),G(this,"formatTimescale",0),G(this,"sequenceNumber",0),G(this,"baseMediaDecodeTime",0),G(this,"baseDts",0),G(this,"duration",0),G(this,"warnings",[]),G(this,"samples",[]),G(this,"pps",[]),G(this,"sps",[]),G(this,"vps",[]),G(this,"fpsNum",0),G(this,"fpsDen",0),G(this,"sarRatio",[]),G(this,"width",0),G(this,"height",0),G(this,"nalUnitSize",4),G(this,"present",!1),G(this,"isVideoEncryption",!1),G(this,"isAudioEncryption",!1),G(this,"isVideo",!0),G(this,"lastKeyFrameDts",0),G(this,"kid",null),G(this,"pssh",null),G(this,"ext",void 0)}return W(e,[{key:"reset",value:function(){this.sequenceNumber=this.width=this.height=this.fpsDen=this.fpsNum=this.duration=this.baseMediaDecodeTime=this.timescale=0,this.codec="",this.present=!1,this.pid=-1,this.pps=[],this.sps=[],this.vps=[],this.sarRatio=[],this.samples=[],this.warnings=[],this.hvcC=null}},{key:"firstDts",get:function(){return this.samples.length?this.samples[0].dts:null}},{key:"firstPts",get:function(){return this.samples.length?this.samples[0].pts:null}},{key:"samplesDuration",get:function(){if(this.samples.length>0){var e=this.samples[0],t=this.samples[this.samples.length-1];return t.dts-e.dts+t.duration}return 0}},{key:"exist",value:function(){return!!/av01/.test(this.codec)||!!(this.pps.length&&this.sps.length&&this.codec)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isVideoEncryption}}]),e}(),ce=function(){function e(){X(this,e),G(this,"id",2),G(this,"type",B),G(this,"codecType",q),G(this,"pid",-1),G(this,"codec",""),G(this,"container",""),G(this,"sequenceNumber",0),G(this,"sampleDuration",0),G(this,"timescale",0),G(this,"formatTimescale",0),G(this,"baseMediaDecodeTime",0),G(this,"duration",0),G(this,"warnings",[]),G(this,"samples",[]),G(this,"baseDts",0),G(this,"sampleSize",16),G(this,"sampleRate",0),G(this,"channelCount",0),G(this,"objectType",0),G(this,"sampleRateIndex",0),G(this,"parsedCodec",null),G(this,"config",[]),G(this,"present",!1),G(this,"isVideoEncryption",!1),G(this,"isAudioEncryption",!1),G(this,"kid",null),G(this,"ext",void 0)}return W(e,[{key:"reset",value:function(){this.sequenceNumber=0,this.timescale=0,this.sampleDuration=0,this.sampleRate=0,this.channelCount=0,this.baseMediaDecodeTime=0,this.present=!1,this.pid=-1,this.codec="",this.samples=[],this.config=[],this.warnings=[]}},{key:"exist",value:function(){return!(!this.sampleRate||!this.channelCount||!this.codec&&!this.container||this.codecType!==q&&this.codecType!==$&&this.codecType!==ee&&this.codecType!==te&&this.codecType!==ie)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isAudioEncryption}},{key:"firstDts",get:function(){return this.samples.length?this.samples[0].dts:null}},{key:"firstPts",get:function(){return this.samples.length?this.samples[0].pts:null}},{key:"samplesDuration",get:function(){if(this.samples.length>0){var e=this.samples[0],t=this.samples[this.samples.length-1];return t.dts-e.dts+t.duration}return 0}}]),e}(),ue=function(){function e(t,i,n){X(this,e),G(this,"flag",{}),G(this,"keyframe",!1),G(this,"gopId",0),G(this,"duration",0),G(this,"size",0),G(this,"units",[]),G(this,"chromaFormat",420),this.originPts=this.pts=t,this.originDts=this.dts=i,n&&(this.units=n)}return W(e,[{key:"cts",get:function(){return this.pts-this.dts}},{key:"setToKeyframe",value:function(){this.keyframe=!0,this.flag.dependsOn=2,this.flag.isNonSyncSample=0}}]),e}(),me=W((function e(t,i,n,s){X(this,e),G(this,"duration",1024),G(this,"flag",{dependsOn:2,isNonSyncSample:0}),G(this,"keyframe",!0),this.originPts=this.pts=this.dts=t,this.data=i,this.size=i.byteLength,this.sampleOffset=s,n&&(this.duration=n)})),he=W((function e(t,i){X(this,e),G(this,"time",0),this.data=t,this.originPts=this.pts=i})),pe=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i)}(he),ye=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i)}(he),Ze=function(){function e(){X(this,e),G(this,"id",3),G(this,"type",_),G(this,"timescale",0),G(this,"flvScriptSamples",[]),G(this,"seiSamples",[])}return W(e,[{key:"exist",value:function(){return!(!this.flvScriptSamples.length&&!this.seiSamples.length||!this.timescale)}},{key:"reset",value:function(){this.timescale=0,this.flvScriptSamples=[],this.seiSamples=[]}},{key:"hasSample",value:function(){return!(!this.flvScriptSamples.length&&!this.seiSamples.length)}}]),e}(),be=function(){function e(t){if(X(this,e),G(this,"_bytesAvailable",void 0),G(this,"_bitsAvailable",0),G(this,"_word",0),!t)throw new Error("ExpGolomb data params is required");this._data=t,this._bytesAvailable=t.byteLength,this._bytesAvailable&&this._loadWord()}return W(e,[{key:"bitsAvailable",get:function(){return this._bitsAvailable}},{key:"_loadWord",value:function(){var e=this._data.byteLength-this._bytesAvailable,t=Math.min(4,this._bytesAvailable);if(0===t)throw new Error("No bytes available");var i=new Uint8Array(4);i.set(this._data.subarray(e,e+t)),this._word=new DataView(i.buffer).getUint32(0),this._bitsAvailable=8*t,this._bytesAvailable-=t}},{key:"skipBits",value:function(e){if(this._bitsAvailable>e)this._word<<=e,this._bitsAvailable-=e;else{e-=this._bitsAvailable;var t=Math.floor(e/8);e-=8*t,this._bytesAvailable-=t,this._loadWord(),this._word<<=e,this._bitsAvailable-=e}}},{key:"readBits",value:function(e){if(e>32)throw new Error("Cannot read more than 32 bits");var t=Math.min(this._bitsAvailable,e),i=this._word>>>32-t;return this._bitsAvailable-=t,this._bitsAvailable>0?this._word<<=t:this._bytesAvailable>0&&this._loadWord(),(t=e-t)>0&&this._bitsAvailable?i<<t|this.readBits(t):i}},{key:"skipLZ",value:function(){var e;for(e=0;e<this._bitsAvailable;++e)if(0!=(this._word&2147483648>>>e))return this._word<<=e,this._bitsAvailable-=e,e;return this._loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBool",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"skipScalingList",value:function(e){for(var t=8,i=8,n=0;n<e;n++)0!==i&&(i=(t+this.readEG()+256)%256),t=0===i?t:i}}]),e}(),fe=function(){function e(t){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]")}return W(e,[{key:"warn",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).warn.apply(t,[this._prefix].concat(n))}}}],[{key:"enable",value:function(){e.disabled=!1}},{key:"disable",value:function(){e.disabled=!0}}]),e}();G(fe,"disabled",!0);var Xe=function(){function e(){X(this,e)}return W(e,null,[{key:"decode",value:function(t){for(var i=[],n=t,s=0,a=t.length;s<a;)if(n[s]<128)i.push(String.fromCharCode(n[s])),++s;else{if(n[s]<192);else if(n[s]<224){if(e._checkContinuation(n,s,1)){var r=(31&n[s])<<6|63&n[s+1];if(r>=128){i.push(String.fromCharCode(65535&r)),s+=2;continue}}}else if(n[s]<240){if(e._checkContinuation(n,s,2)){var l=(15&n[s])<<12|(63&n[s+1])<<6|63&n[s+2];if(l>=2048&&55296!=(63488&l)){i.push(String.fromCharCode(65535&l)),s+=3;continue}}}else if(n[s]<248&&e._checkContinuation(n,s,3)){var o=(7&n[s])<<18|(63&n[s+1])<<12|(63&n[s+2])<<6|63&n[s+3];if(o>65536&&o<1114112){o-=65536,i.push(String.fromCharCode(o>>>10|55296)),i.push(String.fromCharCode(1023&o|56320)),s+=4;continue}}i.push(String.fromCharCode(65533)),++s}return i.join("")}},{key:"_checkContinuation",value:function(e,t,i){var n=e;if(t+i<n.length){for(;i--;)if(128!=(192&n[++t]))return!1;return!0}return!1}}]),e}(),Le="undefined"!=typeof window,We=Le&&navigator.userAgent.toLocaleLowerCase(),Ge=Le&&/^((?!chrome|android).)*safari/.test(We),ve=Le&&We.includes("firefox"),xe=Le&&We.includes("android");function Se(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];t=t.filter(Boolean);var n=new Uint8Array(t.reduce((function(e,t){return e+t.byteLength}),0)),s=0;return t.forEach((function(e){n.set(e,s),s+=e.byteLength})),n}var ge=Math.pow(2,32);function Ve(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(e[t]<<8)+(e[t+1]||0)}function Ye(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(e[t]<<24>>>0)+(e[t+1]<<16)+(e[t+2]<<8)+(e[t+3]||0)}function ke(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Ye(e,t)*ge+Ye(e,t+4)}function Re(e){for(var t,i="avc1.",n=0;n<3;n++)(t=e[n].toString(16)).length<2&&(t="0".concat(t)),i+=t;return i}function Te(e){var t="";if(e.forEach((function(e){t+=function(e){return("0"+Number(e).toString(16)).slice(-2).toUpperCase()}(e)})),t.length<=32)for(var i=32-t.length,n=0;n<i;n++)t+="0";return t}function we(e){if(!Array.isArray(e)){for(var t=[],i="",n=0;n<e.length;n++)n%2&&(i=e[n-1]+e[n],t.push(parseInt(i,16)),i="");return t}return e.map((function(e){return parseInt(e,16)}))}function Me(e,t){return Number(e+"."+t)}var Ke=function(){function e(){X(this,e)}return W(e,null,[{key:"getRateIndexByRate",value:function(t){return e.FREQ.indexOf(t)}},{key:"parseADTS",value:function(t,i){for(var n=t.length,s=0;s+2<n&&(255!==t[s]||240!=(246&t[s+1]));)s++;if(!(s>=n)){var a=s,r=[],l=(60&t[s+2])>>>2,o=e.FREQ[l];if(!o)throw new Error("Invalid sampling index: ".concat(l));for(var d,c,u=1+((192&t[s+2])>>>6),m=(1&t[s+2])<<2|(192&t[s+3])>>>6,h=e._getConfig(l,m,u),p=h.config,y=h.codec,Z=0,b=e.getFrameDuration(o);s+7<n;)if(255===t[s]&&240==(246&t[s+1])){if(!(c=(3&t[s+3])<<11|t[s+4]<<3|(224&t[s+5])>>5)||n-s<c)break;d=2*(1&~t[s+1]),r.push({pts:i+Z*b,data:t.subarray(s+7+d,s+c)}),Z++,s+=c}else s++;return{skip:a,remaining:s>=n?void 0:t.subarray(s),frames:r,samplingFrequencyIndex:l,sampleRate:o,objectType:u,channelCount:m,codec:y,config:p,originCodec:"mp4a.40.".concat(u)}}}},{key:"parseAudioSpecificConfig",value:function(t){if(t.length){var i=t[0]>>>3,n=(7&t[0])<<1|t[1]>>>7,s=(120&t[1])>>>3,a=e.FREQ[n];if(a){var r=e._getConfig(n,s,i);return{samplingFrequencyIndex:n,sampleRate:a,objectType:i,channelCount:s,config:r.config,codec:r.codec,originCodec:"mp4a.40.".concat(i)}}}}},{key:"getFrameDuration",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e4;return 1024*t/e}},{key:"_getConfig",value:function(e,t,i){var n,s,a=[];return ve?e>=6?(n=5,s=e-3):(n=2,s=e):xe?(n=2,s=e):(n=5,s=e,e>=6?s=e-3:1===t&&(n=2,s=e)),a[0]=n<<3,a[0]|=(14&e)>>1,a[1]=(1&e)<<7,a[1]|=t<<3,5===n&&(a[1]|=(14&s)>>1,a[2]=(1&s)<<7,a[2]|=8,a[3]=0),{config:a,codec:"mp4a.40.".concat(n)}}},{key:"getSilentFrame",value:function(e,t){if("mp4a.40.2"===e){if(1===t)return new Uint8Array([0,200,0,128,35,128]);if(2===t)return new Uint8Array([33,0,73,144,2,25,0,35,128]);if(3===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,142]);if(4===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,128,44,128,8,2,56]);if(5===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,56]);if(6===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,0,178,0,32,8,224])}else{if(1===t)return new Uint8Array([1,64,34,128,163,78,230,128,186,8,0,0,0,28,6,241,193,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(2===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(3===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94])}}}]),e}();G(Ke,"FREQ",[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350]);var Ie=function(){function e(){X(this,e)}return W(e,null,[{key:"parseAnnexB",value:function(e){var t=e.byteLength-1,i=0;do{if(0!==e[t])break;i++,t--}while(t>0);i>=3&&(e=e.subarray(0,t+1));for(var n=e.length,s=2,a=0;null!==e[s]&&void 0!==e[s]&&1!==e[s];)s++;if((a=++s+2)>=n)return[];for(var r=[];a<n;)switch(e[a]){case 0:if(0!==e[a-1]){a+=2;break}if(0!==e[a-2]){a++;break}if(a<n-1&&1!==e[a+1]){a++;break}s!==a-2&&r.push(e.subarray(s,a-2));do{a++}while(1!==e[a]&&a<n);a=(s=a+1)+2;break;case 1:if(0!==e[a-1]||0!==e[a-2]){a+=3;break}s!==a-2&&r.push(e.subarray(s,a-2)),a=(s=a+1)+2;break;default:a+=3}return s<n&&r.push(e.subarray(s)),r}},{key:"parseAvcC",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;if(!(e.length<4)){for(var i,n=e.length,s=[],a=0;a+t<n;)if(i=Ye(e,a),3===t&&(i>>>=8),a+=t,i){if(a+i>n)break;s.push(e.subarray(a,a+i)),a+=i}return s}}},{key:"parseSEI",value:function(e,t){for(var i=e.length,n=t?2:1,s=0,a=0,r="";255===e[n];)s+=255,n++;for(s+=e[n++];255===e[n];)a+=255,n++;if(a+=e[n++],5===s&&i>n+16)for(var l=0;l<16;l++)r+=e[n].toString(16),n++;return{payload:e.subarray(n,n+a),type:s,size:a,uuid:r}}},{key:"removeEPB",value:function(e){for(var t=e.byteLength,i=[],n=1;n<t-2;)0===e[n]&&0===e[n+1]&&3===e[n+2]?(i.push(n+2),n+=2):n++;if(!i.length)return e;var s=t-i.length,a=new Uint8Array(s),r=0;for(n=0;n<s;r++,n++)r===i[0]&&(r++,i.shift()),a[n]=e[r];return a}}]),e}(),Ce=function(){function e(){X(this,e)}return W(e,null,[{key:"parseAVCDecoderConfigurationRecord",value:function(t){if(!(t.length<7)){for(var i,n,s=1+(3&t[4]),a=[],r=[],l=6,o=31&t[5],d=0;d<o;d++)if(n=t[l]<<8|t[l+1],l+=2,n){var c=t.subarray(l,l+n);l+=n,a.push(c),i||(i=e.parseSPS(Ie.removeEPB(c)))}var u,m=t[l];l++;for(var h=0;h<m;h++)u=t[l]<<8|t[l+1],l+=2,u&&(r.push(t.subarray(l,l+u)),l+=u);return{sps:i,spsArr:a,ppsArr:r,nalUnitSize:s}}}},{key:"parseSPS",value:function(e){var t=new be(e);t.readUByte();var i=t.readUByte(),n=t.readUByte(),s=t.readUByte();t.skipUEG();var a=420;if(100===i||110===i||122===i||244===i||44===i||83===i||86===i||118===i||128===i||138===i||144===i){var r=t.readUEG();if(r<=3&&(a=[0,420,422,444][r]),3===r&&t.skipBits(1),t.skipUEG(),t.skipUEG(),t.skipBits(1),t.readBool())for(var l=3!==r?8:12,o=0;o<l;o++)t.readBool()&&(o<6?t.skipScalingList(16):t.skipScalingList(64))}t.skipUEG();var d=t.readUEG();if(0===d)t.readUEG();else if(1===d){t.skipBits(1),t.skipUEG(),t.skipUEG();for(var c=t.readUEG(),u=0;u<c;u++)t.skipUEG()}t.skipUEG(),t.skipBits(1);var m=t.readUEG(),h=t.readUEG(),p=t.readBits(1);0===p&&t.skipBits(1),t.skipBits(1);var y,Z,b,f,X,L=0,W=0,G=0,v=0;if(t.readBool()&&(L=t.readUEG(),W=t.readUEG(),G=t.readUEG(),v=t.readUEG()),t.readBool()){if(t.readBool())switch(t.readUByte()){case 1:y=[1,1];break;case 2:y=[12,11];break;case 3:y=[10,11];break;case 4:y=[16,11];break;case 5:y=[40,33];break;case 6:y=[24,11];break;case 7:y=[20,11];break;case 8:y=[32,11];break;case 9:y=[80,33];break;case 10:y=[18,11];break;case 11:y=[15,11];break;case 12:y=[64,33];break;case 13:y=[160,99];break;case 14:y=[4,3];break;case 15:y=[3,2];break;case 16:y=[2,1];break;case 255:y=[t.readUByte()<<8|t.readUByte(),t.readUByte()<<8|t.readUByte()]}if(t.readBool()&&t.readBool(),t.readBool()&&(t.readBits(4),t.readBool()&&t.readBits(24)),t.readBool()&&(t.readUEG(),t.readUEG()),t.readBool()){var x=t.readBits(32),S=t.readBits(32);Z=t.readBool(),X=(b=S)/(f=2*x)}}return{codec:Re(e.subarray(1,4)),profileIdc:i,profileCompatibility:n,levelIdc:s,chromaFormat:a,width:Math.ceil(16*(m+1)-2*(L+W)),height:(2-p)*(h+1)*16-(p?2:4)*(G+v),sarRatio:y,fpsNum:b,fpsDen:f,fps:X,fixedFrame:Z}}}]),e}(),He=function(){function e(){X(this,e)}return W(e,null,[{key:"parseHEVCDecoderConfigurationRecord",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(t.length<23)){i=i||{};for(var n,s,a,r,l,o=1+(3&t[21]),d=[],c=[],u=[],m=23,h=t[22],p=0;p<h;p++){a=63&t[m],r=t[m+1]<<8|t[m+2],m+=3;for(var y=0;y<r;y++)if(l=t[m]<<8|t[m+1],m+=2,l){switch(a){case 32:var Z=t.subarray(m,m+l);n||(n=e.parseVPS(Ie.removeEPB(Z),i)),u.push(Z);break;case 33:var b=t.subarray(m,m+l);s||(s=e.parseSPS(Ie.removeEPB(b),i)),d.push(b);break;case 34:c.push(t.subarray(m,m+l))}m+=l}}return{hvcC:i,sps:s,spsArr:d,ppsArr:c,vpsArr:u,nalUnitSize:o}}}},{key:"parseVPS",value:function(t,i){i=i||{};var n=new be(t);n.readUByte(),n.readUByte(),n.readBits(12);var s=n.readBits(3);return i.numTemporalLayers=Math.max(i.numTemporalLayers||0,s+1),n.readBits(17),e._parseProfileTierLevel(n,s,i),i}},{key:"parseSPS",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i=i||{};var n=new be(t);n.readUByte(),n.readUByte(),n.readBits(4);var s=n.readBits(3);i.numTemporalLayers=Math.max(s+1,i.numTemporalLayers||0),i.temporalIdNested=n.readBits(1),e._parseProfileTierLevel(n,s,i),n.readUEG();var a=i.chromaFormatIdc=n.readUEG(),r=420;a<=3&&(r=[0,420,422,444][a]);var l=0;3===a&&(l=n.readBits(1));var o,d,c,u,m=n.readUEG(),h=n.readUEG(),p=n.readBits(1);if(1===p&&(o=n.readUEG(),d=n.readUEG(),c=n.readUEG(),u=n.readUEG()),i.bitDepthLumaMinus8=n.readUEG(),i.bitDepthChromaMinus8=n.readUEG(),1===p){var y=1!==a&&2!==a||0!==l?1:2,Z=1===a&&0===l?2:1;m-=y*(d+o),h-=Z*(u+c)}return{codec:"hev1.1.6.L93.B0",width:m,height:h,chromaFormat:r,hvcC:i}}},{key:"_parseProfileTierLevel",value:function(e,t,i){var n=i.generalTierFlag||0;i.generalProfileSpace=e.readBits(2),i.generalTierFlag=Math.max(e.readBits(1),n),i.generalProfileIdc=Math.max(e.readBits(5),i.generalProfileIdc||0),i.generalProfileCompatibilityFlags=e.readBits(32),i.generalConstraintIndicatorFlags=[e.readBits(8),e.readBits(8),e.readBits(8),e.readBits(8),e.readBits(8),e.readBits(8)];var s=e.readBits(8);n<i.generalTierFlag?i.generalLevelIdc=s:i.generalLevelIdc=Math.max(s,i.generalLevelIdc||0);var a=[],r=[];if(t>e.bitsAvailable)throw new Error("maxSubLayersMinus inavlid size ".concat(t));for(var l=0;l<t;l++)a[l]=e.readBits(1),r[l]=e.readBits(1);t>0&&e.readBits(2*(8-t));for(var o=0;o<t;o++)0!==a[o]&&(e.readBits(2),e.readBits(1),e.readBits(5),e.readBits(16),e.readBits(16),e.readBits(4),e.readBits(16),e.readBits(16),e.readBits(12)),0!==r[o]&&e.readBits(8)}}]),e}(),Ne=function(){function e(){X(this,e)}return W(e,null,[{key:"getFrameDuration",value:function(e){return 20}},{key:"parseHeaderPackets",value:function(e){if(e.length){for(var t=new DataView(e.buffer,e.byteOffset,e.byteLength),i="",n=0;n<8;n++)i+=String.fromCodePoint(e[n]);if("OpusHead"!==i)throw new Error("Invalid Opus MagicSignature");var s=e[9];console.log("Pre-skip",e[10],e[11]);var a=t.getUint32(12,!0),r=t.getInt16(16,!0);if(a){return{outputGain:r,sampleRate:a,channelCount:s,config:new Uint8Array(e.buffer,e.byteOffset+8,e.byteLength-8),codec:"opus",originCodec:"opus"}}}}}]),e}(),ze=1e3,Fe=5e3,Ue=function(){function e(t,i,n){X(this,e),this.videoTrack=t,this.audioTrack=i,this.metadataTrack=n,this._baseDts=-1,this._baseDtsInited=!1,this._audioNextPts=void 0,this._videoNextDts=void 0,this._audioTimestampBreak=0,this._videoTimestampBreak=0,this._lastVideoDuration=0,this._keyFrameInNextChunk=!1,this._lastAudioExceptionGapDot=-1/0,this._lastAudioExceptionOverlapDot=-1/0,this._lastAudioExceptionLargeGapDot=-1/0,this._lastVideoExceptionLargeGapDot=-1/0,this._lastVideoExceptionChunkFirstDtsDot=-1/0}return W(e,[{key:"fix",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];t=Math.round(1e3*t);var s=this.videoTrack,a=this.audioTrack;!i&&n||(this._videoLastSample=null,this._audioNextPts=void 0,this._videoNextDts=void 0,this._audioTimestampBreak=0,this._videoTimestampBreak=0,this._lastAudioExceptionGapDot=-1/0,this._lastAudioExceptionOverlapDot=-1/0,this._lastAudioExceptionLargeGapDot=-1/0,this._lastVideoExceptionLargeGapDot=-1/0,this._lastVideoExceptionChunkFirstDtsDot=-1/0),i&&!n&&(this._baseDtsInited=!1),this._baseDtsInited||this._calculateBaseDts(a,s),!n&&t&&(this._audioNextPts=this._videoNextDts=t);var r=this._baseDtsInited&&(this._videoTimestampBreak||!this.videoTrack.exist())&&(this._audioTimestampBreak||!this.audioTrack.exist());if(r&&this._resetBaseDtsWhenStreamBreaked(),this._fixAudio(a),this._keyFrameInNextChunk=!1,this._fixVideo(s),this.metadataTrack.exist()){var l=this.metadataTrack.timescale;this.metadataTrack.seiSamples.forEach((function(t){t.pts=t.originPts-e._baseDts,t.time=Math.max(0,t.pts)/l})),this.metadataTrack.flvScriptSamples.forEach((function(t){t.pts=t.originPts-e._baseDts,t.time=Math.max(0,t.pts)/l}))}s.samples.length&&(s.baseMediaDecodeTime=s.samples[0].dts),a.samples.length&&(a.baseMediaDecodeTime=a.samples[0].pts*a.timescale/1e3)}},{key:"_fixVideo",value:function(e){var t=this,i=e.samples;if(i.length){var n;if(i.forEach((function(e){e.dts-=t._baseDts,e.pts-=t._baseDts,e.keyframe&&(t._keyFrameInNextChunk=!0)})),e.fpsNum&&e.fpsDen)n=e.timescale*(e.fpsDen/e.fpsNum);else if(e.length>1){var s=e.samples[0],a=e.samples[i.length-1];n=Math.floor((a.dts-s.dts)/(i.length-1))}else n=this._lastVideoDuration||40;var r=i.pop();if(this._videoLastSample&&i.unshift(this._videoLastSample),this._videoLastSample=r,i.length){if(void 0===this._videoNextDts){var l=i[0];this._videoNextDts=l.dts}var o=i.length,d=0,c=i[0],u=this._videoNextDts-c.dts;if(Math.abs(u)>200){var m;if(Math.abs(c.dts-this._lastVideoExceptionChunkFirstDtsDot)>5e3)this._lastVideoExceptionChunkFirstDtsDot=c.dts,e.warnings.push({type:ae,nextDts:this._videoNextDts,firstSampleDts:c.dts,nextSampleDts:null===(m=i[1])||void 0===m?void 0:m.dts,sampleDuration:u});this._videoTimestampBreak>=5?(this._videoNextDts=c.dts,this._videoTimestampBreak=0):(c.dts+=u,c.pts+=u,this.audioTrack.exist()||(this._videoTimestampBreak=1))}for(var h=0;h<o;h++){var p=i[h].dts,y=i[h+1];((d=h<o-1?y.dts-p:r?r.dts-p:n)>1e3||d<0)&&(this._videoTimestampBreak++,Math.abs(p-this._lastVideoExceptionLargeGapDot)>5e3&&(this._lastVideoExceptionLargeGapDot=p,e.warnings.push({type:se,time:p/e.timescale,dts:p,originDts:i[h].originDts,nextDts:this._videoNextDts,sampleDuration:d,refSampleDuration:n})),d=n),i[h].duration=d,this._videoNextDts+=d,this._lastVideoDuration=d}}}}},{key:"_fixAudio",value:function(e){var t=this,i=e.samples;i.length&&(i.forEach((function(e){e.dts=e.pts-=t._baseDts})),this._doFixAudioInternal(e,i,1e3))}},{key:"_calculateBaseDts",value:function(e,t){var i=e.samples,n=t.samples;if(!i.length&&!n.length)return!1;var s=1/0,a=1/0;i.length&&(e.baseDts=s=i[0].pts),n.length&&(t.baseDts=a=n[0].dts),this._baseDts=Math.min(s,a);var r=a-s;return Number.isFinite(r)&&Math.abs(r)>500&&t.warnings.push({type:ne,videoBaseDts:a,audioBasePts:s,baseDts:this._baseDts,delta:r}),this._baseDtsInited=!0,!0}},{key:"_resetBaseDtsWhenStreamBreaked",value:function(){this._calculateBaseDts(this.audioTrack,this.videoTrack)&&(this.audioTrack.exist()?this.videoTrack.exist()?this._baseDts-=Math.min(this._audioNextPts,this._videoNextDts):this._baseDts-=this._audioNextPts:this._baseDts-=this._videoNextDts,this._videoTimestampBreak=0,this._audioTimestampBreak=0)}},{key:"_doFixAudioInternal",value:function(e,t,i){if(!e.sampleDuration)switch(e.codecType){case q:e.sampleDuration=Ke.getFrameDuration(e.timescale,i);break;case te:e.sampleDuration=Ne.getFrameDuration(e.samples,i);break;case $:case ee:e.sampleDuration=this._getG711Duration(e);break;default:console.error("can't fix audio codecType:",e.codecType)}var n=e.sampleDuration,s=e.codecType===te?20:e.codecType===q?1024:n*e.timescale/1e3;if(void 0===this._audioNextPts){var a=t[0];this._audioNextPts=a.pts}for(var r=0;r<t.length;r++){var l=this._audioNextPts,o=t[r],d=o.pts-l;if(0===r&&this._audioTimestampBreak>=5&&this._keyFrameInNextChunk&&(l=this._audioNextPts=o.dts,d=0,this._audioTimestampBreak=0),!this._audioTimestampBreak&&d>=3*n&&d<=ze&&!Ge){var c=this._getSilentFrame(e)||t[0].data.subarray(),u=Math.floor(d/n);Math.abs(o.pts-this._lastAudioExceptionGapDot)>Fe&&(this._lastAudioExceptionGapDot=o.pts,e.warnings.push({type:le,pts:o.pts,originPts:o.originPts,count:u,nextPts:l,refSampleDuration:n}));for(var m=0;m<u;m++){var h=new me(Math.floor(this._audioNextPts+n)-Math.floor(this._audioNextPts),c,s);h.originPts=Math.floor(this._baseDts+l),t.splice(r,0,h),this._audioNextPts+=n,r++}r--}else if(d<=-3*n&&d>=-1e3)Math.abs(o.pts-this._lastAudioExceptionOverlapDot)>Fe&&(this._lastAudioExceptionOverlapDot=o.pts,e.warnings.push({type:oe,pts:o.pts,originPts:o.originPts,nextPts:l,refSampleDuration:n})),t.splice(r,1),r--;else{if(Math.abs(d)>ze&&(this._audioTimestampBreak++,Math.abs(o.pts-this._lastAudioExceptionLargeGapDot)>Fe&&(this._lastAudioExceptionLargeGapDot=o.pts,e.warnings.push({type:re,time:o.pts/1e3,pts:o.pts,originPts:o.originPts,nextPts:l,sampleDuration:d,refSampleDuration:n}))),e.codecType===te){var p=t[t.length-1];p&&(p.duration=o.pts-p.pts)}else o.dts=o.pts=l,o.duration=s;this._audioNextPts+=n}}}},{key:"_getG711Duration",value:function(e){var t=e.sampleSize,i=e.channelCount,n=e.sampleRate,s=e.samples[0];if(s)return 2*s.data.byteLength/i/(t/8)/n*1e3}},{key:"_getSilentFrame",value:function(e){return e.codecType===q?Ke.getSilentFrame(e.codec,e.channelCount):new Uint8Array(8*e.sampleDuration*e.channelCount)}}]),e}(),Je=function(){function e(){X(this,e)}return W(e,null,[{key:"parse",value:function(t){if(!(t.length<3)){var i={},n=e._parseValue(new DataView(t.buffer,t.byteOffset,t.byteLength)),s=e._parseValue(new DataView(t.buffer,t.byteOffset+n.size,t.byteLength-n.size));return i[n.data]=s.data,i}}},{key:"_parseValue",value:function(t){var i,n=t.byteLength,s=1,a=!1;switch(t.getUint8(0)){case 0:i=t.getFloat64(1),s+=8;break;case 1:i=!!t.getUint8(1),s+=1;break;case 2:var r=e._parseString(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s));i=r.data,s+=r.size;break;case 3:i={};var l=0;for(9==(16777215&t.getUint32(n-4))&&(l=3);s<n-4;){var o=e._parseObject(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s-l)),d=o.size,c=o.data;if(o.isEnd)break;i[c.name]=c.value,s+=d}if(s<=n-3)9===(16777215&t.getUint32(s-1))&&(s+=3);break;case 8:i={},s+=4;var u=0;for(9==(16777215&t.getUint32(n-4))&&(u=3);s<n-8;){var m=e._parseObject(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s-u)),h=m.size,p=m.data;if(m.isEnd)break;i[p.name]=p.value,s+=h}if(s<=n-3)9===(16777215&t.getUint32(s-1))&&(s+=3);break;case 9:i=void 0,s=1,a=!0;break;case 10:i=[];var y=t.getUint32(1);s+=4;for(var Z=0;Z<y;Z++){var b=e._parseValue(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s)),f=b.data,X=b.size;i.push(f),s+=X}break;case 11:var L=t.getFloat64(s)+6e4*t.getInt16(s+8);i=new Date(L),s+=10;break;case 12:var W=t.getUint32(1);s+=4,i="",W>0&&(i=Xe.decode(new Uint8Array(t.buffer,t.byteOffset+s,W))),s+=W;break;default:s=n}return{data:i,size:s,isEnd:a}}},{key:"_parseString",value:function(e){var t=e.getUint16(0),i="";return t>0&&(i=Xe.decode(new Uint8Array(e.buffer,e.byteOffset+2,t))),{data:i,size:2+t}}},{key:"_parseObject",value:function(t){if(!(t.byteLength<3)){var i=e._parseString(t),n=e._parseValue(new DataView(t.buffer,t.byteOffset+i.size,t.byteLength-i.size));return{data:{name:i.data,value:n.data},size:i.size+n.size,isEnd:n.isEnd}}}}]),e}(),je=7,Pe=8,Ee=10,De=13,Be=new fe("FlvDemuxer"),_e=function(){function e(t,i,n){X(this,e),G(this,"_headerParsed",!1),G(this,"_remainingData",null),G(this,"_gopId",0),G(this,"_needAddMetaBeforeKeyFrameNal",!0),this.videoTrack=t||new de,this.audioTrack=i||new ce,this.metadataTrack=n||new Ze,this._fixer=new Ue(this.videoTrack,this.audioTrack,this.metadataTrack)}return W(e,[{key:"demux",value:function(t){var i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=arguments.length>3?arguments[3]:void 0,r=this.audioTrack,l=this.videoTrack,o=this.metadataTrack;if(!n&&s||(this._remainingData=null),n&&(this._headerParsed=!1),n?(l.reset(),r.reset(),o.reset()):(l.samples=[],r.samples=[],o.seiSamples=[],o.flvScriptSamples=[],l.warnings=[],r.warnings=[],this._remainingData&&(t=Se(this._remainingData,t),this._remainingData=null)),!t.length)return{videoTrack:l,audioTrack:r,metadataTrack:o};var d=0;if(!this._headerParsed){if(!e.probe(t))throw new Error("Invalid flv file");r.present=(4&t[4])>>>2!=0,l.present=0!=(1&t[4]),this._headerParsed=!0,d=Ye(t,5)+4}for(var c,u,m,h,p,y=t.length;d+15<y&&(c=t[d],!(d+15+(u=t[d+1]<<16|t[d+2]<<8|t[d+3])>y));)m=(t[d+7]<<24>>>0)+(t[d+4]<<16)+(t[d+5]<<8)+t[d+6],d+=11,h=t.subarray(d,d+u),8===c?this._parseAudio(h,m):9===c?(a&&(this.seamlessLoadingSwitching=!0),this._parseVideo(h,m)):18===c?this._parseScript(h,m):Be.warn("Invalid tag type: ".concat(c)),(p=Ye(t,d+=u))!==11+u&&Be.warn("Invalid PrevTagSize ".concat(p," (").concat(11+u,")")),d+=4;d<y&&(this._remainingData=t.subarray(d)),r.formatTimescale=l.formatTimescale=l.timescale=o.timescale=1e3,r.timescale=r.codecType===te?1e3:r.sampleRate||0,!r.exist()&&r.hasSample()&&r.reset(),!l.exist()&&l.hasSample()&&l.reset();var Z=o.flvScriptSamples[o.flvScriptSamples.length-1],b=null==Z||null===(i=Z.data)||void 0===i?void 0:i.onMetaData;return b&&(null!=l&&l.exist()&&(b.hasOwnProperty("duration")&&(l.duration=1e3*b.duration),!l.width&&b.hasOwnProperty("width")&&(l.width=b.width),!l.height&&b.hasOwnProperty("height")&&(l.height=b.height)),null!=r&&r.exist()&&b.hasOwnProperty("duration")&&(r.duration=1e3*b.duration)),{videoTrack:l,audioTrack:r,metadataTrack:o}}},{key:"fix",value:function(e,t,i){return this._fixer.fix(e,t,i),{videoTrack:this.videoTrack,audioTrack:this.audioTrack,metadataTrack:this.metadataTrack}}},{key:"demuxAndFix",value:function(e,t,i,n,s){return this.demux(e,t,i,s),this.fix(n,t,i)}},{key:"_parseAudio",value:function(t,i){if(t.length){var n=(240&t[0])>>>4,s=this.audioTrack;if(n!==Ee&&n!==je&&n!==Pe&&n!==De)return Be.warn("Unsupported sound format: ".concat(n)),void s.reset();if(n!==Ee&&n!==De){var a=(12&t[0])>>2,r=(2&t[0])>>1,l=1&t[0];s.sampleRate=e.AUDIO_RATE[a],s.sampleSize=r?16:8,s.channelCount=l+1}switch(n){case je:case Pe:this._parseG711(t,i,n);break;case Ee:this._parseAac(t,i);break;case De:this._parseOpus(t,i)}}}},{key:"_parseOpus",value:function(e,t){var i=this.audioTrack,n=e[1];switch(i.codecType=te,n){case 0:var s=Ne.parseHeaderPackets(e.subarray(2));s?(i.codec=s.codec,i.channelCount=s.channelCount,i.sampleRate=s.sampleRate,i.config=s.config,i.sampleDuration=Ne.getFrameDuration([],i.timescale)):(i.reset(),Be.warn("Cannot parse AudioSpecificConfig",e));break;case 1:if(null==t)return;var a=new me(t,e.subarray(2),i.sampleDuration);i.samples.push(a);break;default:Be.warn("Unknown OpusPacketType: ".concat(n))}}},{key:"_parseG711",value:function(e,t,i){var n=this.audioTrack,s=e.subarray(1);if(!(s.byteLength<1)){var a=new me(t,s);n.codecType=7===i?$:ee,n.sampleRate=8e3,n.codec=n.codecType,n.samples.push(a)}}},{key:"_parseAac",value:function(e,t){var i=this.audioTrack;if(i.codecType=q,0===e[1]){var n=Ke.parseAudioSpecificConfig(e.subarray(2));n?(i.codec=n.codec,i.channelCount=n.channelCount,i.sampleRate=n.sampleRate,i.config=n.config,i.objectType=n.objectType,i.sampleRateIndex=n.samplingFrequencyIndex):(i.reset(),Be.warn("Cannot parse AudioSpecificConfig",e))}else if(1===e[1]){if(null==t)return;i.samples.push(new me(t,e.subarray(2)))}else Be.warn("Unknown AACPacketType: ".concat(e[1]))}},{key:"_parseVideo",value:function(e,t){var i=this;if(!(e.length<6)){var n=(240&e[0])>>>4,s=15&e[0],a=this.videoTrack;if(7!==s&&12!==s)return a.reset(),void Be.warn("Unsupported codecId: ".concat(s));var r=12===s;a.codecType=r?A:O;var l=e[1],o=(e[2]<<16|e[3]<<8|e[4])<<8>>8;if(0===l){var d=e.subarray(5),c=r?He.parseHEVCDecoderConfigurationRecord(d):Ce.parseAVCDecoderConfigurationRecord(d);if(c){var u=c.hvcC,m=c.sps,h=c.ppsArr,p=c.spsArr,y=c.vpsArr,Z=c.nalUnitSize;u&&(a.hvcC=a.hvcC||u),m&&(a.codec=m.codec,a.width=m.width,a.height=m.height,a.sarRatio=m.sarRatio,a.fpsNum=m.fpsNum,a.fpsDen=m.fpsDen),p.length&&(a.sps=p),h.length&&(a.pps=h),y&&y.length&&(a.vps=y),Z&&(a.nalUnitSize=Z)}else Be.warn("Cannot parse ".concat(r?"HEVC":"AVC","DecoderConfigurationRecord"),e)}else if(1===l){var b=Ie.parseAvcC(e.subarray(5),a.nalUnitSize);if((b=this._checkAddMetaNalToUnits(r,b,a))&&b.length){var f=new ue(t+o,t,b);if(this.seamlessLoadingSwitching&&t<a.lastKeyFrameDts)return;this.seamlessLoadingSwitching=!1,1===n&&(f.setToKeyframe(),a.lastKeyFrameDts=t),a.samples.push(f),b.forEach((function(e){var n=r?e[0]>>>1&63:31&e[0];switch(n){case 5:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:if(!r&&5!==n||r&&5===n)break;f.setToKeyframe();break;case 6:case 39:case 40:if(!r&&6!==n||r&&6===n)break;i.metadataTrack.seiSamples.push(new ye(Ie.parseSEI(Ie.removeEPB(e),r),t+o))}})),f.keyframe&&this._gopId++,f.gopId=this._gopId}else Be.warn("Cannot parse NALUs",e)}else 2===l||Be.warn("Unknown AVCPacketType: ".concat(l))}}},{key:"_checkAddMetaNalToUnits",value:function(e,t,i){return e&&this._needAddMetaBeforeKeyFrameNal?t.map((function(e){return e[0]>>>1&63})).includes(32)?(this._needAddMetaBeforeKeyFrameNal=!1,t):(t.unshift(i.pps[0]),t.unshift(i.sps[0]),t.unshift(i.vps[0]),t.filter(Boolean)):(this._needAddMetaBeforeKeyFrameNal=!1,t)}},{key:"_parseScript",value:function(e,t){this.metadataTrack.flvScriptSamples.push(new pe(Je.parse(e),t))}}],[{key:"probe",value:function(e){return 70===e[0]&&76===e[1]&&86===e[2]&&1===e[3]&&Ye(e,5)>=9}}]),e}();G(_e,"AUDIO_RATE",[5500,11e3,22e3,44e3]),new fe("TsDemuxer");var Qe=function(){function e(t,i,n){X(this,e),this.dv=new DataView(t),this.start=this.offset=i||this.dv.byteOffset,this.end=n?this.start+n:this.start+this.dv.byteLength}return W(e,[{key:"buffer",get:function(){return this.dv.buffer}},{key:"unreadLength",get:function(){return Math.max(this.end-this.offset,0)}},{key:"size",get:function(){return this.end-this.start}},{key:"readFloat",value:function(e){var t=0;switch(e){case 4:t=this.dv.getFloat32(this.offset);break;case 8:t=this.dv.getFloat64(this.offset);break;default:throw new Error("read ".concat(e,"-byte float is not supported"))}return this.offset+=e,t}},{key:"back",value:function(e){this.offset-=e}},{key:"skip",value:function(e){this.offset+=e}},{key:"readInt",value:function(e){var t=this.offset;switch(this.offset+=e,e){case 1:return this.dv.getInt8(t);case 2:return this.dv.getInt16(t);case 4:return this.dv.getInt32(t);default:throw new Error("read ".concat(e,"-byte integers is not supported"))}}},{key:"read",value:function(e){var t=this.offset;switch(this.offset+=e,e){case 1:return this.dv.getUint8(t);case 2:return this.dv.getUint16(t);case 3:return(this.dv.getUint16(t)<<8)+this.dv.getUint8(t+2);case 4:return this.dv.getUint32(t);default:return this.back(e-4),this.read(e-4)+this.dv.getUint32(t)*Math.pow(256,e-4)}}},{key:"write",value:function(e,t){var i=this.offset;switch(this.offset+=e,e){case 1:return this.dv.setUint8(i,t);case 2:return this.dv.setUint16(i,t);case 3:return this.dv.setUint8(i,t>>>16),this.dv.setUint16(i+1,65535&t);case 4:return this.dv.setUint32(i,t);default:throw new Error("write ".concat(e,"-byte integers is not supported"))}}},{key:"readToBuffer",value:function(e){var t;return t=this.offset||e?this.dv.buffer.slice(this.offset,e?this.offset+e:this.end):this.dv.buffer,this.offset+=t.byteLength,t}},{key:"readToUint8",value:function(e){var t=new Uint8Array(this.dv.buffer,this.offset,e||this.unreadLength);return this.offset+=t.byteLength,t}},{key:"readString",value:function(e){for(var t=0,i="";t<e;t++)i+=String.fromCharCode(this.dv.getUint8(this.offset)),this.offset++;return i}}],[{key:"fromUint8",value:function(t){return new e(t.buffer,t.byteOffset,t.byteLength)}},{key:"concatUint8s",value:function(e){var t=new Uint8Array(e.reduce((function(e,t){return e+t.byteLength}),0)),i=0;return e.forEach((function(e){t.set(e,i),i+=e.byteLength})),t}},{key:"concatUint8",value:function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return this.concatUint8s(t)}}]),e}(),Oe=function(){function e(t,i){X(this,e),this.offset=0,this.val=t,this.size=i}return W(e,[{key:"skip",value:function(e){this.offset+=e}},{key:"read",value:function(e){var t=this.size-this.offset-e;if(t>=0){var i=0,n=0;if(this.offset+=e,this.size>31){for(;n<e;n++)i+=Math.pow(2,n);return this.val/Math.pow(2,t)&i}for(;n<e;n++)i+=1<<n;return this.val>>>t&i}throw new Error("the number of the read operation exceeds the total length limit of bits")}}],[{key:"fromByte",value:function(t,i){return new e(t.read(i),i<<3)}}]),e}(),Ae=function(){function e(){X(this,e)}return W(e,null,[{key:"findBox",value:function(t,i){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=[];if(!t)return s;for(var a=0,r="",l=0;t.length>7;){if(a=Ye(t),r=String.fromCharCode.apply(null,t.subarray(4,8)),l=8,1===a?(a=ke(t,8),l+=8):a||(a=t.length),!i[0]||r===i[0]){var o=t.subarray(0,a);if(!(i.length<2))return e.findBox(o.subarray(l),i.slice(1),n+l);s.push({start:n,size:a,headerSize:l,type:r,data:o})}n+=a,t=t.subarray(a)}return s}},{key:"tfhd",value:function(e){return tt(e,!0,(function(e,t){e.trackId=Ye(t);var i=4,n=1&e.flags,s=2&e.flags,a=8&e.flags,r=16&e.flags,l=32&e.flags;n&&(i+=4,e.baseDataOffset=Ye(t,i),i+=4),s&&(e.sampleDescriptionIndex=Ye(t,i),i+=4),a&&(e.defaultSampleDuration=Ye(t,i),i+=4),r&&(e.defaultSampleSize=Ye(t,i),i+=4),l&&(e.defaultSampleFlags=Ye(t,i))}))}},{key:"sidx",value:function(e){return tt(e,!0,(function(e,t){var i=0;e.reference_ID=Ye(t,i),i+=4,e.timescale=Ye(t,i),i+=4,0===e.version?(e.earliest_presentation_time=Ye(t,i),i+=4,e.first_offset=Ye(t,i),i+=4):(e.earliest_presentation_time=ke(t,i),i+=8,e.first_offset=ke(t,i),i+=8),i+=2,e.references=[];var n=Ve(t,i);i+=2;for(var s=0;s<n;s++){var a={};e.references.push(a);var r=Ye(t,i);i+=4,a.reference_type=r>>31&1,a.referenced_size=2147483647&r,a.subsegment_duration=Ye(t,i),r=Ye(t,i+=4),i+=4,a.starts_with_SAP=r>>31&1,a.SAP_type=r>>28&7,a.SAP_delta_time=268435455&r}}))}},{key:"moov",value:function(t){return tt(t,!1,(function(t,i,n){t.mvhd=e.mvhd(e.findBox(i,["mvhd"],n)[0]),t.trak=e.findBox(i,["trak"],n).map((function(t){return e.trak(t)})),t.pssh=e.pssh(e.findBox(i,["pssh"],n)[0])}))}},{key:"mvhd",value:function(e){return tt(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Ye(t,16),e.duration=ke(t,20),i+=28):(e.timescale=Ye(t,8),e.duration=Ye(t,12),i+=16),e.nextTrackId=Ye(t,i+76)}))}},{key:"trak",value:function(t){return tt(t,!1,(function(t,i,n){t.tkhd=e.tkhd(e.findBox(i,["tkhd"],n)[0]),t.mdia=e.mdia(e.findBox(i,["mdia"],n)[0])}))}},{key:"tkhd",value:function(e){return tt(e,!0,(function(e,t){var i=Qe.fromUint8(t);1===e.version?(i.read(8),i.read(8),e.trackId=i.read(4),i.read(4),e.duration=i.read(8)):(i.read(4),i.read(4),e.trackId=i.read(4),i.read(4),e.duration=i.read(4)),i.skip(16),e.matrix=[];for(var n=0;n<36;n++)e.matrix.push(i.read(1));i.back(36);for(var s,a=[],r=0;r<3;r++)a.push(Me(i.readInt(2),i.readInt(2))),a.push(Me(i.readInt(2),i.readInt(2))),s=i.readInt(4),a.push(Me(s>>30,1073741823&s));e.rotation=function(e){if(e.length<5)return 0;var t=Math.hypot(e[0],e[3]),i=Math.hypot(e[1],e[4]);return 0===t||0===i?0:180*Math.atan2(e[1]/i,e[0]/t)/Math.PI}(a),e.width=i.read(4),e.height=i.read(4)}))}},{key:"mdia",value:function(t){return tt(t,!1,(function(t,i,n){t.mdhd=e.mdhd(e.findBox(i,["mdhd"],n)[0]),t.hdlr=e.hdlr(e.findBox(i,["hdlr"],n)[0]),t.minf=e.minf(e.findBox(i,["minf"],n)[0])}))}},{key:"mdhd",value:function(e){return tt(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Ye(t,16),e.duration=ke(t,20),i+=28):(e.timescale=Ye(t,8),e.duration=Ye(t,12),i+=16);var n=Ve(t,i);e.language=String.fromCharCode(96+(n>>10&31),96+(n>>5&31),96+(31&n))}))}},{key:"hdlr",value:function(e){return tt(e,!0,(function(e,t){0===e.version&&(e.handlerType=String.fromCharCode.apply(null,t.subarray(4,8)))}))}},{key:"minf",value:function(t){return tt(t,!1,(function(t,i,n){t.vmhd=e.vmhd(e.findBox(i,["vmhd"],n)[0]),t.smhd=e.smhd(e.findBox(i,["smhd"],n)[0]),t.stbl=e.stbl(e.findBox(i,["stbl"],n)[0])}))}},{key:"vmhd",value:function(e){return tt(e,!0,(function(e,t){e.graphicsmode=Ve(t),e.opcolor=[Ve(t,2),Ve(t,4),Ve(t,6)]}))}},{key:"smhd",value:function(e){return tt(e,!0,(function(e,t){e.balance=Ve(t)}))}},{key:"stbl",value:function(t){return tt(t,!1,(function(t,i,n){var s,a,r;t.stsd=e.stsd(e.findBox(i,["stsd"],n)[0]),t.stts=e.stts(e.findBox(i,["stts"],n)[0]),t.ctts=e.ctts(e.findBox(i,["ctts"],n)[0]),t.stsc=e.stsc(e.findBox(i,["stsc"],n)[0]),t.stsz=e.stsz(e.findBox(i,["stsz"],n)[0]),t.stco=e.stco(e.findBox(i,["stco"],n)[0]),t.stco||(t.co64=e.co64(e.findBox(i,["co64"],n)[0]),t.stco=t.co64);var l=null===(s=t.stsd.entries[0])||void 0===s||null===(a=s.sinf)||void 0===a||null===(r=a.schi)||void 0===r?void 0:r.tenc.default_IV_size;t.stss=e.stss(e.findBox(i,["stss"],n)[0]),t.senc=e.senc(e.findBox(i,["senc"],n)[0],l)}))}},{key:"senc",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8;return tt(e,!0,(function(e,i){var n=0,s=Ye(i,n);n+=4,e.samples=[];for(var a=0;a<s;a++){for(var r={InitializationVector:[]},l=0;l<t;l++)r.InitializationVector[l]=i[n+l];if(n+=t,2&e.flags){r.subsamples=[];var o=Ve(i,n);n+=2;for(var d=0;d<o;d++){var c={};c.BytesOfClearData=Ve(i,n),n+=2,c.BytesOfProtectedData=Ye(i,n),n+=4,r.subsamples.push(c)}}e.samples.push(r)}}))}},{key:"pssh",value:function(e){return tt(e,!0,(function(e,t){for(var i=[],n=[],s=0,a=0;a<16;a++)n.push(nt(t[s+a]));if(s+=16,e.version>0){var r=Ye(t,s);s+=4;for(var l=0;l<(""+r).length;l++)for(var o=0;o<16;o++){var d=t[s];s+=1,i.push(nt(d))}}var c=Ye(t,s);e.data_size=c,s+=4,e.kid=i,e.system_id=n,e.buffer=t}))}},{key:"stsd",value:function(t){return tt(t,!0,(function(t,i,n){t.entryCount=Ye(i),t.entries=e.findBox(i.subarray(4),[],n+4).map((function(t){switch(t.type){case"av01":return e.av01(t);case"avc1":case"avc2":case"avc3":case"avc4":return e.avc1(t);case"hvc1":case"hev1":return e.hvc1(t);case"mp4a":return e.mp4a(t);case"alaw":case"ulaw":return e.alaw(t);case"enca":return tt(t,!1,(function(t,i,n){t.channelCount=Ve(i,16),t.samplesize=Ve(i,18),t.sampleRate=Ye(i,24)/65536,i=i.subarray(28),t.sinf=e.sinf(e.findBox(i,["sinf"],n)[0]),t.esds=e.esds(e.findBox(i,["esds"],n)[0])}));case"encv":return tt(t,!1,(function(t,i,n){t.width=Ve(i,24),t.height=Ve(i,26),t.horizresolution=Ye(i,28),t.vertresolution=Ye(i,32),i=i.subarray(78),t.sinf=e.sinf(e.findBox(i,["sinf"],n)[0]),t.avcC=e.avcC(e.findBox(i,["avcC"],n)[0]),t.hvcC=e.hvcC(e.findBox(i,["hvcC"],n)[0]),t.pasp=e.pasp(e.findBox(i,["pasp"],n)[0])}))}})).filter(Boolean)}))}},{key:"tenc",value:function(e){return tt(e,!1,(function(e,t){var i=6;e.default_IsEncrypted=t[i],i+=1,e.default_IV_size=t[i],i+=1,e.default_KID=[];for(var n=0;n<16;n++)e.default_KID.push(nt(t[i])),i+=1}))}},{key:"schi",value:function(t){return tt(t,!1,(function(t,i,n){t.tenc=e.tenc(e.findBox(i,["tenc"],n)[0])}))}},{key:"sinf",value:function(t){return tt(t,!1,(function(t,i,n){t.schi=e.schi(e.findBox(i,["schi"],n)[0]),t.frma=e.frma(e.findBox(i,["frma"],n)[0])}))}},{key:"frma",value:function(e){return tt(e,!1,(function(e,t){e.data_format="";for(var i=0;i<4;i++)e.data_format+=String.fromCharCode(t[i])}))}},{key:"colr",value:function(e){return tt(e,!1,(function(t,i){var n=Qe.fromUint8(i);t.data=e.data,t.colorType=n.readString(4),"nclx"===t.colorType?(t.colorPrimaries=n.read(2),t.transferCharacteristics=n.read(2),t.matrixCoefficients=n.read(2),t.fullRangeFlag=n.read(1)>>7):"rICC"!==t.colorType&&"prof"!==t.colorType||(t.iccProfile=i.readToUint8())}))}},{key:"av01",value:function(t){return tt(t,!1,(function(t,i,n){var s=$e(t,i),a=i.subarray(s);n+=s,t.av1C=e.av1C(e.findBox(a,["av1C"],n)[0]),t.colr=e.colr(e.findBox(a,["colr"],n)[0])}))}},{key:"av1C",value:function(e){return tt(e,!1,(function(t,i){t.data=e.data;var n,s=Qe.fromUint8(i),a=Oe.fromByte(s,4);t.marker=a.read(1),t.version=a.read(7),t.seqProfile=a.read(3),t.seqLevelIdx0=a.read(5),t.seqTier0=a.read(1),t.highBitdepth=a.read(1),t.twelveBit=a.read(1),t.monochrome=a.read(1),t.chromaSubsamplingX=a.read(1),t.chromaSubsamplingY=a.read(1),t.chromaSamplePosition=a.read(2),t.reserved=a.read(3),t.initialPresentationDelayPresent=a.read(1),t.initialPresentationDelayPresent?t.initialPresentationDelayMinusOne=a.read(4):t.initialPresentationDelayMinusOne=0,t.configOBUs=s.readToUint8(),2===t.seqLevelIdx0&&1===t.highBitdepth?n=1===t.twelveBit?"12":"10":t.seqProfile<=2&&(n=1===t.highBitdepth?"10":"08"),t.codec=["av01",t.seqProfile,(t.seqLevelIdx0<10?"0"+t.seqLevelIdx0:t.seqLevelIdx0)+(t.seqTier0?"H":"M"),n].join(".")}))}},{key:"avc1",value:function(t){return tt(t,!1,(function(t,i,n){var s=$e(t,i),a=i.subarray(s);n+=s,t.avcC=e.avcC(e.findBox(a,["avcC"],n)[0]),t.pasp=e.pasp(e.findBox(a,["pasp"],n)[0])}))}},{key:"avcC",value:function(e){return tt(e,!1,(function(t,i){t.data=e.data,t.configurationVersion=i[0],t.AVCProfileIndication=i[1],t.profileCompatibility=i[2],t.AVCLevelIndication=i[3],t.codec=Re([i[1],i[2],i[3]]),t.lengthSizeMinusOne=3&i[4],t.spsLength=31&i[5],t.sps=[];for(var n=6,s=0;s<t.spsLength;s++){var a=Ve(i,n);n+=2,t.sps.push(i.subarray(n,n+a)),n+=a}t.ppsLength=i[n],n+=1,t.pps=[];for(var r=0;r<t.ppsLength;r++){var l=Ve(i,n);n+=2,t.pps.push(i.subarray(n,n+=l)),n+=l}}))}},{key:"hvc1",value:function(t){return tt(t,!1,(function(t,i,n){var s=$e(t,i),a=i.subarray(s);n+=s,t.hvcC=e.hvcC(e.findBox(a,["hvcC"],n)[0]),t.pasp=e.pasp(e.findBox(a,["pasp"],n)[0])}))}},{key:"hvcC",value:function(e){return tt(e,!1,(function(t,i){t.data=e.data,t.codec="hev1.1.6.L93.B0",t.configurationVersion=i[0];var n=i[1];t.generalProfileSpace=n>>6,t.generalTierFlag=(32&n)>>5,t.generalProfileIdc=31&n,t.generalProfileCompatibility=Ye(i,2),t.generalConstraintIndicatorFlags=i.subarray(6,12),t.generalLevelIdc=i[12],t.avgFrameRate=Ve(i,19),t.numOfArrays=i[22],t.vps=[],t.sps=[],t.pps=[];for(var s=23,a=0,r=0,l=0,o=0;o<t.numOfArrays;o++){a=63&i[s],r=Ve(i,s+1),s+=3;for(var d,c=[],u=0;u<r;u++)l=Ve(i,s),s+=2,c.push(i.subarray(s,s+l)),s+=l;if(32===a)(d=t.vps).push.apply(d,c);else if(33===a){var m;(m=t.sps).push.apply(m,c)}else if(34===a){var h;(h=t.pps).push.apply(h,c)}}}))}},{key:"pasp",value:function(e){return tt(e,!1,(function(e,t){e.hSpacing=Ye(t),e.vSpacing=Ye(t,4)}))}},{key:"mp4a",value:function(t){return tt(t,!1,(function(t,i,n){var s=et(t,i);t.esds=e.esds(e.findBox(i.subarray(s),["esds"],n+s)[0])}))}},{key:"esds",value:function(e){return tt(e,!0,(function(e,t){e.codec="mp4a.";for(var i=0,n=0,s=0,a=0;t.length;){for(a=t[i=0],n=t[i+1],i+=2;128&n;)s=(127&n)<<7,n=t[i],i+=1;if(s+=127&n,3===a)t=t.subarray(i+3);else{if(4!==a){if(5===a){var r=e.config=t.subarray(i,i+s),l=(248&r[0])>>3;if(31===l&&r.length>=2&&(l=32+((7&r[0])<<3)+((224&r[1])>>5)),e.objectType=l,e.codec+=l.toString(16),/^mp4a/gi.test(e.codec)&&r.length>=2){var o=(7&r[0])<<1|(128&r[1])>>7;e.samplingFrequencyIndex=o,o<Ke.FREQ.length&&(e.sampleRate=Ke.FREQ[o])}return void("."===e.codec[e.codec.length-1]&&(e.codec=e.codec.substring(0,e.codec.length-1)))}return void("."===e.codec[e.codec.length-1]&&(e.codec=e.codec.substring(0,e.codec.length-1)))}e.codec+=(t[i].toString(16)+".").padStart(3,"0"),t=t.subarray(i+13)}}}))}},{key:"alaw",value:function(e){return tt(e,!1,(function(e,t){et(e,t)}))}},{key:"stts",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push({count:Ye(t,s),delta:Ye(t,s+4)}),s+=8;e.entryCount=i,e.entries=n}))}},{key:"ctts",value:function(e){return tt(e,!0,(function(e,t){var i=Ye(t),n=[],s=4;if(1===e.version)for(var a=0;a<i;a++)n.push({count:Ye(t,s),offset:Ye(t,s+4)}),s+=8;else for(var r=0;r<i;r++)n.push({count:Ye(t,s),offset:-(1+~Ye(t,s+4))}),s+=8;e.entryCount=i,e.entries=n}))}},{key:"stsc",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push({firstChunk:Ye(t,s),samplesPerChunk:Ye(t,s+4),sampleDescriptionIndex:Ye(t,s+8)}),s+=12;e.entryCount=i,e.entries=n}))}},{key:"stsz",value:function(e){return tt(e,!0,(function(e,t){var i=Ye(t),n=Ye(t,4),s=[];if(!i)for(var a=8,r=0;r<n;r++)s.push(Ye(t,a)),a+=4;e.sampleSize=i,e.sampleCount=n,e.entrySizes=s}))}},{key:"stco",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push(Ye(t,s)),s+=4;e.entryCount=i,e.entries=n}))}},{key:"co64",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push(ke(t,s)),s+=8;e.entryCount=i,e.entries=n}))}},{key:"stss",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push(Ye(t,s)),s+=4;e.entryCount=i,e.entries=n}))}},{key:"moof",value:function(t){return tt(t,!1,(function(t,i,n){t.mfhd=e.mfhd(e.findBox(i,["mfhd"],n)[0]),t.traf=e.findBox(i,["traf"],n).map((function(t){return e.traf(t)}))}))}},{key:"mfhd",value:function(e){return tt(e,!0,(function(e,t){e.sequenceNumber=Ye(t)}))}},{key:"traf",value:function(t){return tt(t,!1,(function(t,i,n){t.tfhd=e.tfhd(e.findBox(i,["tfhd"],n)[0]),t.tfdt=e.tfdt(e.findBox(i,["tfdt"],n)[0]),t.trun=e.trun(e.findBox(i,["trun"],n)[0])}))}},{key:"trun",value:function(e){return tt(e,!0,(function(e,t){var i=e.version,n=e.flags,s=t.length,a=e.sampleCount=Ye(t),r=4;if(s>r&&1&n&&(e.dataOffset=-(1+~Ye(t,r)),r+=4),s>r&&4&n&&(e.firstSampleFlags=Ye(t,r),r+=4),e.samples=[],s>r)for(var l,o=0;o<a;o++)l={},256&n&&(l.duration=Ye(t,r),r+=4),512&n&&(l.size=Ye(t,r),r+=4),1024&n&&(l.flags=Ye(t,r),r+=4),2048&n&&(l.cts=i?-(1+~Ye(t,r+4)):Ye(t,r),r+=4),e.samples.push(l)}))}},{key:"tfdt",value:function(e){return tt(e,!0,(function(e,t){1===e.version?e.baseMediaDecodeTime=ke(t):e.baseMediaDecodeTime=Ye(t)}))}},{key:"probe",value:function(t){return!!e.findBox(t,["ftyp"])}},{key:"parseSampleFlags",value:function(e){return{isLeading:(12&e[0])>>>2,dependsOn:3&e[0],isDependedOn:(192&e[1])>>>6,hasRedundancy:(48&e[1])>>>4,paddingValue:(14&e[1])>>>1,isNonSyncSample:1&e[1],degradationPriority:e[2]<<8|e[3]}}},{key:"moovToTrack",value:function(e,t,i){var n,s,a=e.trak;if(a&&a.length){var r=a.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),l=a.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(r&&t){var o,d,c,u,m,h,p,y=t,Z=null===(o=r.tkhd)||void 0===o?void 0:o.trackId;null!=Z&&(y.id=r.tkhd.trackId),y.tkhdDuration=r.tkhd.duration,y.mvhdDurtion=e.mvhd.duration,y.mvhdTimecale=e.mvhd.timescale,y.timescale=y.formatTimescale=r.mdia.mdhd.timescale,y.duration=r.mdia.mdhd.duration||y.mvhdDurtion/y.mvhdTimecale*y.timescale,y.rotation=r.tkhd.rotation,y.matrix=r.tkhd.matrix;var b,f,X,L,W,G,v,x,S=r.mdia.minf.stbl.stsd.entries[0];if(y.width=S.width,y.height=S.height,S.pasp&&(y.sarRatio=[S.pasp.hSpacing,S.pasp.vSpacing]),S.av1C)y.codecType=Q,y.codec=S.av1C.codec,y.av1C=S.av1C.data,S.colr&&(y.colr=S.colr.data);else if(S.hvcC)y.codecType=A,y.codec=S.hvcC.codec,y.vps=S.hvcC.vps,y.sps=S.hvcC.sps,y.pps=S.hvcC.pps,y.hvcC=S.hvcC.data;else{if(!S.avcC)throw new Error("unknown video stsd entry");y.codec=S.avcC.codec,y.sps=S.avcC.sps,y.pps=S.avcC.pps}if(y.present=!0,y.ext={},y.ext.stss=null===(d=r.mdia)||void 0===d||null===(c=d.minf)||void 0===c||null===(u=c.stbl)||void 0===u?void 0:u.stss,y.ext.ctts=null===(m=r.mdia)||void 0===m||null===(h=m.minf)||void 0===h||null===(p=h.stbl)||void 0===p?void 0:p.ctts,S&&"encv"===S.type)y.isVideoEncryption=!0,S.default_KID=null===(b=S.sinf)||void 0===b||null===(f=b.schi)||void 0===f?void 0:f.tenc.default_KID,S.default_IsEncrypted=null===(X=S.sinf)||void 0===X||null===(L=X.schi)||void 0===L?void 0:L.tenc.default_IsEncrypted,S.default_IV_size=null===(W=S.sinf)||void 0===W||null===(G=W.schi)||void 0===G?void 0:G.tenc.default_IV_size,y.videoSenc=r.mdia.minf.stbl.senc&&r.mdia.minf.stbl.senc.samples,S.data_format=null===(v=S.sinf)||void 0===v||null===(x=v.frma)||void 0===x?void 0:x.data_format,y.useEME=e.useEME,y.kidValue=e.kidValue,y.pssh=e.pssh,y.encv=S}if(l&&i){var g,V,Y,k,R,T,w,M,K,I=i,C=null===(g=l.tkhd)||void 0===g?void 0:g.trackId;null!=C&&(I.id=l.tkhd.trackId),I.tkhdDuration=l.tkhd.duration,I.mvhdDurtion=e.mvhd.duration,I.mvhdTimecale=e.mvhd.timescale,I.timescale=I.formatTimescale=l.mdia.mdhd.timescale,I.duration=l.mdia.mdhd.duration||I.mvhdDurtion/I.mvhdTimecale*I.timescale;var H,N,z,F,U,J,j,P,E=l.mdia.minf.stbl.stsd.entries[0];switch(I.sampleSize=E.sampleSize,I.sampleRate=function(e){var t=0;t="mp4a"===e.type?e.sampleRate>0?e.sampleRate:e.esds.sampleRate:e.sampleRate;return t||0}(E),I.channelCount=E.channelCount,I.present=!0,E.type){case"alaw":I.codecType=I.codec=$,I.sampleRate=8e3;break;case"ulaw":I.codecType=I.codec=ee,I.sampleRate=8e3;break;default:I.sampleDuration=Ke.getFrameDuration(I.sampleRate,I.timescale),I.sampleRateIndex=Ke.getRateIndexByRate(I.sampleRate),I.objectType=(null===(n=E.esds)||void 0===n?void 0:n.objectType)||2,E.esds&&(I.config=Array.from(E.esds.config)),I.codec=(null===(s=E.esds)||void 0===s?void 0:s.codec)||"mp4a.40.2"}if(I.sampleDuration=Ke.getFrameDuration(I.sampleRate,I.timescale),I.objectType=(null===(V=E.esds)||void 0===V?void 0:V.objectType)||2,E.esds&&(E.esds.config?I.config=Array.from(E.esds.config):console.warn("esds config is null")),I.codec=(null===(Y=E.esds)||void 0===Y?void 0:Y.codec)||"mp4a.40.2",I.sampleRateIndex=Ke.getRateIndexByRate(I.sampleRate),I.ext={},I.ext.stss=null===(k=l.mdia)||void 0===k||null===(R=k.minf)||void 0===R||null===(T=R.stbl)||void 0===T?void 0:T.stss,I.ext.ctts=null===(w=l.mdia)||void 0===w||null===(M=w.minf)||void 0===M||null===(K=M.stbl)||void 0===K?void 0:K.ctts,I.present=!0,E&&"enca"===E.type)I.isAudioEncryption=!0,E.data_format=null===(H=E.sinf)||void 0===H||null===(N=H.frma)||void 0===N?void 0:N.data_format,E.default_KID=null===(z=E.sinf)||void 0===z||null===(F=z.schi)||void 0===F?void 0:F.tenc.default_KID,E.default_IsEncrypted=null===(U=E.sinf)||void 0===U||null===(J=U.schi)||void 0===J?void 0:J.tenc.default_IsEncrypted,E.default_IV_size=null===(j=E.sinf)||void 0===j||null===(P=j.schi)||void 0===P?void 0:P.tenc.default_IV_size,I.audioSenc=l.mdia.minf.stbl.senc&&l.mdia.minf.stbl.senc.samples,I.useEME=e.useEME,I.kidValue=e.kidValue,I.enca=E}if(i&&(i.isVideoEncryption=!!t&&t.isVideoEncryption),t&&(t.isAudioEncryption=!!i&&i.isAudioEncryption),null!=t&&t.encv||null!=i&&i.enca){var D,B,_=null==t||null===(D=t.encv)||void 0===D?void 0:D.default_KID,O=null==i||null===(B=i.enca)||void 0===B?void 0:B.default_KID,q=_||O?(_||O).join(""):null;t&&(t.kid=q),i&&(i.kid=q)}return t&&(t.flags=3841),i&&(i.flags=1793),{videoTrack:t,audioTrack:i}}}},{key:"evaluateDefaultDuration",value:function(e,t,i){var n,s=null==t||null===(n=t.samples)||void 0===n?void 0:n.length;return s?1024*s/t.timescale*e.timescale/i:1024}},{key:"moofToSamples",value:function(t,i,n){var s={};return t.mfhd&&(i&&(i.sequenceNumber=t.mfhd.sequenceNumber),n&&(n.sequenceNumber=t.mfhd.sequenceNumber)),t.traf.forEach((function(t){var a=t.tfhd,r=t.tfdt,l=t.trun;if(a&&l){r&&(i&&i.id===a.trackId&&(i.baseMediaDecodeTime=r.baseMediaDecodeTime),n&&n.id===a.trackId&&(n.baseMediaDecodeTime=r.baseMediaDecodeTime));var o=a.defaultSampleSize||0,d=a.defaultSampleDuration||e.evaluateDefaultDuration(i,n,l.samples.length||l.sampleCount),c=l.dataOffset||0,u=0,m=-1;if(!l.samples.length&&l.sampleCount){s[a.trackId]=[];for(var h=0;h<l.sampleCount;h++)s[a.trackId].push({offset:c,dts:u,duration:d,size:o}),u+=d,c+=o}else s[a.trackId]=l.samples.map((function(e,t){return(e={offset:c,dts:u,pts:u+(e.cts||0),duration:e.duration||d,size:e.size||o,gopId:m,keyframe:0===t||null!==e.flags&&void 0!==e.flags&&(65536&e.flags)>>>0!=65536}).keyframe&&(m++,e.gopId=m),u+=e.duration,c+=e.size,e}))}})),s}},{key:"moovToSamples",value:function(e){var t=e.trak;if(t&&t.length){var i=t.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),n=t.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(i||n){var s,a;if(i){var r,l,o=null===(r=i.mdia)||void 0===r||null===(l=r.minf)||void 0===l?void 0:l.stbl;if(!o)return;var d=o.stts,c=o.stsc,u=o.stsz,m=o.stco,h=o.stss,p=o.ctts;if(!(d&&c&&u&&m&&h))return;s=qe(d,c,u,m,p,h)}if(n){var y,Z,b,f=null===(y=n.mdia)||void 0===y||null===(Z=y.minf)||void 0===Z?void 0:Z.stbl;if(!f)return;var X=null===(b=n.mdia.mdhd)||void 0===b?void 0:b.timescale,L=f.stts,W=f.stsc,G=f.stsz,v=f.stco;if(!(X&&L&&W&&G&&v))return;a=qe(L,W,G,v)}return{videoSamples:s,audioSamples:a}}}}}]),e}();function qe(e,t,i,n,s,a){var r,l,o,d=[],c=null==s?void 0:s.entries,u=t.entries,m=n.entries,h=i.entrySizes,p=null==a?void 0:a.entries;p&&(r={},p.forEach((function(e){r[e-1]=!0}))),c&&(l=[],c.forEach((function(e){for(var t=e.count,i=e.offset,n=0;n<t;n++)l.push(i)})));var y=-1,Z=0,b=0,f=0,X=0,L=0,W=u[0].samplesPerChunk,G=u[1]?u[1].firstChunk-1:1/0;return e.entries.forEach((function(e){for(var t=e.count,n=e.delta,s=0;s<t;s++)o={dts:Z,duration:n,size:h[b]||i.sampleSize,offset:m[f]+L,index:b},p&&(o.keyframe=r[b],o.keyframe&&y++,o.gopId=y),l&&b<l.length&&(o.pts=o.dts+l[b]),d.push(o),Z+=n,++b<W?L+=o.size:(f++,L=0,f>=G&&(X++,G=u[X+1]?u[X+1].firstChunk-1:1/0),W+=u[X].samplesPerChunk)})),d}function $e(e,t){return e.dataReferenceIndex=Ve(t,6),e.width=Ve(t,24),e.height=Ve(t,26),e.horizresolution=Ye(t,28),e.vertresolution=Ye(t,32),e.frameCount=Ve(t,40),e.depth=Ve(t,74),78}function et(e,t){return e.dataReferenceIndex=Ve(t,6),e.channelCount=Ve(t,16),e.sampleSize=Ve(t,18),e.sampleRate=Ye(t,24)/65536,28}function tt(e,t,i){if(e){if(e.size!==e.data.length)throw new Error("box ".concat(e.type," size !== data.length"));var n={start:e.start,size:e.size,headerSize:e.headerSize,type:e.type};return t&&(n.version=e.data[e.headerSize],n.flags=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(e[t]<<16)+(e[t+1]<<8)+(e[t+2]||0)}(e.data,e.headerSize+1),n.headerSize+=4),i(n,e.data.subarray(n.headerSize),n.start+n.headerSize),n}}var it=function(e,t,i){for(var n=String(i),s=t>>0,a=Math.ceil(s/n.length),r=[],l=String(e);a--;)r.push(n);return r.join("").substring(0,s-l.length)+l},nt=function(){for(var e=[],t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];return i.forEach((function(t){e.push(it(Number(t).toString(16),2,0))})),e[0]},st=function(){function e(t,i,n){X(this,e),G(this,"__loadedMoofWraps",[]),G(this,"__lastRemainData",null),G(this,"__lastRemainDataStart",0),G(this,"__nextMoofStart",-1),this.videoTrack=t||new de,this.audioTrack=i||new ce,this.metadataTrack=n||new Ze}return W(e,[{key:"demuxPart",value:function(e,t,i){var n=this,s=this.videoTrack,a=this.audioTrack,r=s.exist(),l=a.exist(),o=/av01/.test(s.codec);s.samples=[],a.samples=[];var d=e,c=t;if(this.__lastRemainData){var u=this.__lastRemainDataStart+this.__lastRemainData.byteLength;if(t<=u&&t>this.__lastRemainDataStart&&t+e.byteLength>u){var m=e.subarray(this.__lastRemainData.byteLength+this.__lastRemainDataStart-t);d=Se(this.__lastRemainData,m),c=this.__lastRemainDataStart,this.__lastRemainData=null}else this.__lastRemainData=null,this.__lastRemainDataStart=0,this.__nextMoofStart=-1}if(!i){var h=Ae.findBox(d,["moov"])[0];if(!h)throw new Error("cannot found moov box");i=Ae.moov(h)}if(d){var p=c+d.byteLength;r||l||Ae.moovToTrack(i,s,a);var y=[];this.__nextMoofStart<0?Ae.findBox(d,["moof"],c).forEach((function(e){return y.push(e)})):this.__nextMoofStart>=c&&this.__nextMoofStart<=p-8&&Ae.findBox(d.subarray(this.__nextMoofStart-c),["moof"],this.__nextMoofStart).forEach((function(e){return y.push(e)})),y.filter((function(e){return e.size<=e.data.length})).forEach((function(e){var t=Ae.moof(e);n.__nextMoofStart=t.start+Math.max.apply(Math,C(t.traf.map((function(e){return e.trun.samples.reduce((function(e,t){return e+t.size}),e.trun.dataOffset||0)})))),n.__loadedMoofWraps.push({start:t.start,nextMoofStart:n.__nextMoofStart,moof:t}),n.__loadedMoofWraps.sort((function(e,t){return e.start-t.start}))}));var Z,b=z(this.__loadedMoofWraps);try{var f=function(){var e=Z.value;if(e.start>p||e.nextMoofStart<c)return"continue";var t,i=e.start,r=Ae.moofToSamples(e.moof,s,a),l=s.baseMediaDecodeTime,u=a.baseMediaDecodeTime;Object.keys(r).forEach((function(e){s.id==e?r[e].some((function(e){var a=e.offset+=i;if(!(a<c)){if(a+e.size>p)return!0;var r=new ue((e.pts||e.dts)+l,e.dts+l);r.duration=e.duration,r.gopId=e.gopId,e.keyframe&&r.setToKeyframe();var u=d.subarray(a-c,a-c+e.size);if(r.data=u,!o)for(var m=0,h=u.length-1;m<h;)t=Ye(u,m),m+=4,r.units.push(u.subarray(m,m+t)),m+=t;n.__lastRemainDataStart=a+e.size,s.samples.push(r)}})):a.id==e&&r[e].some((function(e){var t=e.offset+i;if(!(t<c)){if(t+e.size>p)return!0;var s=d.subarray(t-c,t-c+e.size);a.samples.push(new me(e.dts+u,s,e.duration)),n.__lastRemainDataStart=t+e.size}}))}))};for(b.s();!(Z=b.n()).done;)f()}catch(X){b.e(X)}finally{b.f()}}return this.__lastRemainDataStart>c&&this.__lastRemainDataStart<d.byteLength+c?this.__lastRemainData=d.subarray(this.__lastRemainDataStart-c):(this.__lastRemainData=d,this.__lastRemainDataStart=c),s.samples.length&&(s.baseMediaDecodeTime=s.samples[0].pts),a.samples.length&&(a.baseMediaDecodeTime=a.samples[0].pts),{videoTrack:s,audioTrack:a,metadataTrack:this.metadataTrack}}},{key:"demux",value:function(e,t){var i=this.videoTrack,n=this.audioTrack,s=i.exist(),a=n.exist();if(i.samples=[],n.samples=[],t){if(!a){var r=Ae.findBox(t,["moov"])[0];if(!r)throw new Error("cannot found moov box");Ae.moovToTrack(Ae.moov(r),null,n)}var l=Ae.findBox(t,["moof"])[0];if(l){var o=Ae.moofToSamples(Ae.moof(l),null,n)[n.id],d=n.baseMediaDecodeTime;if(o){var c=l.start;o.map((function(e){e.offset+=c;var i=t.subarray(e.offset,e.offset+e.size);n.samples.push(new me(e.dts+d,i,e.duration))}))}}}if(e){if(!s&&!a){var u=Ae.findBox(e,["moov"])[0];if(!u)throw new Error("cannot found moov box");Ae.moovToTrack(Ae.moov(u),i,n)}var m=Ae.findBox(e,["moof"])[0];if(m){var h,p=Ae.moofToSamples(Ae.moof(m),i,n),y=i.baseMediaDecodeTime,Z=n.baseMediaDecodeTime,b=m.start;Object.keys(p).forEach((function(t){i.id==t?p[t].map((function(t){t.offset+=b;var n=new ue((t.pts||t.dts)+y,t.dts+y);n.duration=t.duration,n.gopId=t.gopId,t.keyframe&&n.setToKeyframe();var s=e.subarray(t.offset,t.offset+t.size);n.data=s;for(var a=0,r=s.length-1;a<r;)h=Ye(s,a),a+=4,n.units.push(s.subarray(a,a+h)),a+=h;i.samples.push(n)})):n.id==t&&p[t].map((function(t){t.offset+=b;var i=e.subarray(t.offset,t.offset+t.size);n.samples.push(new me(t.dts+Z,i,t.duration))}))}))}}return{videoTrack:i,audioTrack:n,metadataTrack:this.metadataTrack}}},{key:"reset",value:function(){this.videoTrack.reset(),this.audioTrack.reset(),this.metadataTrack.reset()}}],[{key:"probe",value:function(e){return Ae.probe(e)}}]),e}();function at(e){for(var t=0,i=arguments.length,n=new Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];n.forEach((function(e){t+=e.length}));var a=new e(t),r=0;return n.forEach((function(e){a.set(e,r),r+=e.length})),a}var rt=function(){function e(){X(this,e),this.buffer=new Uint8Array(0)}return W(e,[{key:"write",value:function(){for(var e=this,t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];i.forEach((function(t){t?e.buffer=at(Uint8Array,e.buffer,t):window.console.warn(t)}))}}],[{key:"writeUint16",value:function(e){return new Uint8Array([e>>8&255,255&e])}},{key:"writeUint32",value:function(e){return new Uint8Array([e>>24,e>>16&255,e>>8&255,255&e])}}]),e}(),lt=Math.pow(2,32)-1,ot=function(){function e(){X(this,e)}return W(e,null,[{key:"box",value:function(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];var s=8+(i=i.filter(Boolean)).reduce((function(e,t){return e+t.byteLength}),0),a=new Uint8Array(s);a[0]=s>>24&255,a[1]=s>>16&255,a[2]=s>>8&255,a[3]=255&s,a.set(e,4);var r=8;return i.forEach((function(e){a.set(e,r),r+=e.byteLength})),a}},{key:"ftyp",value:function(t){return t.find((function(e){return e.type===D&&e.codecType===A}))?e.FTYPHEV1:e.FTYPAVC1}},{key:"initSegment",value:function(t){return Se(e.ftyp(t),e.moov(t))}},{key:"pssh",value:function(t){var i=new Uint8Array([1,0,0,0].concat([16,119,239,236,192,178,77,2,172,227,60,30,82,226,251,75],[0,0,0,1],we(t.kid),[0,0,0,0]));return e.box(e.types.pssh,i)}},{key:"moov",value:function(t){if(t[0].useEME&&(t[0].encv||t[0].enca)){t[0].pssh||(t[0].pssh={kid:t[0].kid});var i=this.pssh(t[0].pssh);return e.box.apply(e,[e.types.moov,e.mvhd(t[0].mvhdDurtion||t[0].duration,t[0].mvhdTimecale||t[0].timescale),e.mvex(t)].concat(C(t.map((function(t){return e.trak(t)}))),[i]))}return e.box.apply(e,[e.types.moov,e.mvhd(t[0].mvhdDurtion||t[0].duration,t[0].mvhdTimecale||t[0].timescale)].concat(C(t.map((function(t){return e.trak(t)}))),[e.mvex(t)]))}},{key:"mvhd",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e4,n=e.box(e.types.mvhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i,t>>24&255,t>>16&255,t>>8&255,255&t,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]));return n}},{key:"trak",value:function(t){return e.box(e.types.trak,e.tkhd(t.id,t.tkhdDuration||0,t.width,t.height),e.mdia(t))}},{key:"tkhd",value:function(t,i){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,n>>8&255,255&n,0,0,s>>8&255,255&s,0,0]));return a}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.duration,t.timescale),e.hdlr(t.type),e.minf(t))}},{key:"mdhd",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e4,n=e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i,t>>24&255,t>>16&255,t>>8&255,255&t,85,196,0,0]));return n}},{key:"hdlr",value:function(t){return e.box(e.types.hdlr,e.HDLR_TYPES[t])}},{key:"minf",value:function(t){return e.box(e.types.minf,t.type===D?e.VMHD:e.SMHD,e.DINF,e.stbl(t))}},{key:"stbl",value:function(t){var i=[];return t&&t.ext&&t.ext.stss&&i.push(e.stss(t.ext.stss.entries)),e.box(e.types.stbl,e.stsd(t),e.STTS,i[0],e.STSC,e.STSZ,e.STCO)}},{key:"stsd",value:function(t){var i;return i="audio"===t.type?t.useEME&&t.enca?e.enca(t):t.codecType===te?e.opus(t):e.mp4a(t):t.useEME&&t.encv?e.encv(t):t.av1C?e.av01(t):e.avc1hev1(t),e.box(e.types.stsd,new Uint8Array([0,0,0,0,0,0,0,1]),i)}},{key:"enca",value:function(t){var i=t.enca.channelCount,n=t.enca.sampleRate,s=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,i,0,16,0,0,0,0,n>>8&255,255&n,0,0]),a=e.esds(t.config),r=e.sinf(t.enca);return e.box(e.types.enca,s,a,r)}},{key:"encv",value:function(t){var i,n,s=t.sps.length>0?t.sps[0]:[],a=t.pps.length>0?t.pps[0]:[],r=t.width,l=t.height,o=t.sarRatio[0],d=t.sarRatio[1],c=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,r>>8&255,255&r,l>>8&255,255&l,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),u=new Uint8Array((i=(n=[1,s[1],s[2],s[3],255,225,s.length>>>8&255,255&s.length]).concat.apply(n,C(s)).concat([1,a.length>>>8&255,255&a.length])).concat.apply(i,C(a))),m=new Uint8Array([0,0,88,57,0,15,200,192,0,4,86,72]),h=e.sinf(t.encv),p=new Uint8Array([o>>24,o>>16&255,o>>8&255,255&o,d>>24,d>>16&255,d>>8&255,255&d]);return e.box(e.types.encv,c,e.box(e.types.avcC,u),e.box(e.types.btrt,m),h,e.box(e.types.pasp,p))}},{key:"schi",value:function(t){var i=new Uint8Array([]),n=e.tenc(t);return e.box(e.types.schi,i,n)}},{key:"tenc",value:function(t){var i=new Uint8Array([0,0,0,0,0,0,255&t.default_IsEncrypted,255&t.default_IV_size].concat(we(t.default_KID)));return e.box(e.types.tenc,i)}},{key:"sinf",value:function(t){var i=new Uint8Array([]),n=new Uint8Array([t.data_format.charCodeAt(0),t.data_format.charCodeAt(1),t.data_format.charCodeAt(2),t.data_format.charCodeAt(3)]),s=new Uint8Array([0,0,0,0,99,101,110,99,0,1,0,0]),a=e.schi(t);return e.box(e.types.sinf,i,e.box(e.types.frma,n),e.box(e.types.schm,s),a)}},{key:"av01",value:function(t){return e.box(e.types.av01,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,t.width>>8&255,255&t.width,t.height>>8&255,255&t.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),t.av1C,t.colr)}},{key:"avc1hev1",value:function(t){var i=t.codecType===A,n=i?e.types.hvc1:e.types.avc1,s=i?e.hvcC(t):e.avcC(t),a=[new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,t.width>>8&255,255&t.width,t.height>>8&255,255&t.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),s];return i?a.push(e.box(e.types.fiel,new Uint8Array([1,0]))):t.sarRatio&&t.sarRatio.length>1&&a.push(e.pasp(t.sarRatio)),e.box.apply(e,[n].concat(a))}},{key:"avcC",value:function(t){var i,n,s,a=[],r=[];return t.sps.forEach((function(e){s=e.byteLength,a.push(s>>>8&255),a.push(255&s),a.push.apply(a,C(e))})),t.pps.forEach((function(e){s=e.byteLength,r.push(s>>>8&255),r.push(255&s),r.push.apply(r,C(e))})),e.box(e.types.avcC,new Uint8Array((i=(n=[1,a[3],a[4],a[5],255,224|t.sps.length]).concat.apply(n,a).concat([t.pps.length])).concat.apply(i,r)))}},{key:"hvcC",value:function(t){var i=t.hvcC;if(i instanceof ArrayBuffer||i instanceof Uint8Array)return i;var n,s=t.vps,a=t.sps,r=t.pps;if(i){var l=i.generalProfileCompatibilityFlags,o=i.generalConstraintIndicatorFlags,d=(s.length&&1)+(a.length&&1)+(r.length&&1);n=[1,i.generalProfileSpace<<6|i.generalTierFlag<<5|i.generalProfileIdc,l>>>24,l>>>16,l>>>8,l,o[0],o[1],o[2],o[3],o[4],o[5],i.generalLevelIdc,240,0,252,252|i.chromaFormatIdc,248|i.bitDepthLumaMinus8,248|i.bitDepthChromaMinus8,0,0,i.numTemporalLayers<<3|i.temporalIdNested<<2|3,d];var c=function(e){var t;n.push(e.length>>8,e.length),(t=n).push.apply(t,C(e))};s.length&&(n.push(160,0,s.length),s.forEach(c)),a.length&&(n.push(161,0,a.length),a.forEach(c)),r.length&&(n.push(162,0,r.length),r.forEach(c))}else n=[1,1,96,0,0,0,144,0,0,0,0,0,93,240,0,252,253,248,248,0,0,15,3,160,0,1,0,24,64,1,12,1,255,255,1,96,0,0,3,0,144,0,0,3,0,0,3,0,93,153,152,9,161,0,1,0,45,66,1,1,1,96,0,0,3,0,144,0,0,3,0,0,3,0,93,160,2,128,128,45,22,89,153,164,147,43,154,128,128,128,130,0,0,3,0,2,0,0,3,0,50,16,162,0,1,0,7,68,1,193,114,180,98,64];return e.box(e.types.hvcC,new Uint8Array(n))}},{key:"pasp",value:function(t){var i=I(t,2),n=i[0],s=i[1];return e.box(e.types.pasp,new Uint8Array([n>>24,n>>16&255,n>>8&255,255&n,s>>24,s>>16&255,s>>8&255,255&s]))}},{key:"mp4a",value:function(t){return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,t.sampleRate>>8&255,255&t.sampleRate,0,0]),t.config.length?e.esds(t.config):void 0)}},{key:"esds",value:function(t){var i=t.length;return e.box(e.types.esds,new Uint8Array([0,0,0,0,3,23+i,0,0,0,4,15+i,64,21,0,6,0,0,0,218,192,0,0,218,192,5].concat([i]).concat(t).concat([6,1,2])))}},{key:"opus",value:function(t){var i=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,t.sampleRate>>8&255,255&t.sampleRate,0,0]),n=t.config.length?e.dOps(t):[];return e.box(e.types.Opus,i,n)}},{key:"dOps",value:function(t){if(t.config)return t.config[4]=t.sampleRate>>>24&255,t.config[5]=t.sampleRate>>>16&255,t.config[6]=t.sampleRate>>>8&255,t.config[7]=255&t.sampleRate,e.box(e.types.dOps,t.config)}},{key:"mvex",value:function(t){return e.box.apply(e,[e.types.mvex].concat(C(t.map((function(t){return e.trex(t.id)})))))}},{key:"trex",value:function(t){return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trex1",value:function(t){return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,2,0,0,0,0,0,0,1,0,0]))}},{key:"trex2",value:function(t){return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,4,0,0,0,0,0,2,0,0,0]))}},{key:"moof",value:function(t){return e.box.apply(e,[e.types.moof,e.mfhd(t[0].samples?t[0].samples[0].gopId:0)].concat(C(t.map((function(t){return e.traf(t)})))))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"traf",value:function(t){var i=e.tfhd(t.id),n=e.tfdt(t,t.baseMediaDecodeTime),s=0;if(t.isVideo&&t.videoSenc&&t.videoSenc.forEach((function(e){s+=8,e.subsamples&&e.subsamples.length&&(s+=2,s+=6*e.subsamples.length)})),t.videoSencLength=s,t.useEME&&(t.isVideoEncryption||t.isAudioEncryption)){if(t.isVideoEncryption){if(t.isVideo){var a=e.saiz(t),r=e.saio(t),l=e.trun1(t),o=e.senc(t);return e.box(e.types.traf,i,n,a,r,l,o)}if(t.isAudioEncryption){var d=e.sbgp(),c=e.saiz(t),u=e.saio(t),m=e.senc(t),h=e.trun1(t);return e.box(e.types.traf,i,n,d,c,u,m,h)}var p=e.sbgp(),y=e.trun1(t);return e.box(e.types.traf,i,n,p,y)}if(t.isVideo){var Z=e.trun1(t);return e.box(e.types.traf,i,n,Z)}var b=e.sbgp(),f=e.saiz(t),X=e.saio(t),L=e.senc(t),W=e.trun1(t);return e.box(e.types.traf,i,n,b,f,X,L,W)}var G=e.sdtp(t);return e.box(e.types.traf,i,n,G,e.trun(t.samples,G.byteLength+76))}},{key:"sdtp",value:function(t){var i=new rt;return t.samples.forEach((function(e){i.write(new Uint8Array(t.isVideo?[e.keyframe?32:16]:[16]))})),e.box(e.types.sdtp,this.extension(0,0),i.buffer)}},{key:"trun1",value:function(t){var i=new rt,n=rt.writeUint32(t.samples.length),s=null;if(t.isVideo){var a=t.videoSencLength;s=rt.writeUint32(16*t.samples.length+a+149),!t.isVideoEncryption&&t.isAudioEncryption&&(s=rt.writeUint32(16*t.samples.length+92))}else{var r=12*t.samples.length+124;t.isAudioEncryption&&(r=12*t.samples.length+8*t.audioSenc.length+177),s=rt.writeUint32(r)}return t.samples.forEach((function(e){i.write(rt.writeUint32(e.duration)),i.write(rt.writeUint32(e.size)),i.write(rt.writeUint32(e.keyframe?33554432:65536)),t.isVideo&&i.write(rt.writeUint32(e.cts?e.cts:0))})),e.box(e.types.trun,this.extension(0,t.flags),n,s,i.buffer)}},{key:"senc",value:function(t){var i=new rt,n=t.samples.length,s=t.isVideo?16:8,a=t.isVideo?2:0,r=[],l=0;return t.isVideo?(r=t.videoSenc,l=t.videoSencLength):r=t.audioSenc,l=l||s*n,i.write(rt.writeUint32(16+l),e.types.senc,this.extension(0,a)),i.write(rt.writeUint32(n)),r.forEach((function(e){for(var t=0;t<e.InitializationVector.length;t++)i.write(new Uint8Array([e.InitializationVector[t]]));e.subsamples&&e.subsamples.length&&(i.write(rt.writeUint16(e.subsamples.length)),e.subsamples.forEach((function(e){i.write(rt.writeUint16(e.BytesOfClearData)),i.write(rt.writeUint32(e.BytesOfProtectedData))})))})),i.buffer}},{key:"saio",value:function(t){var i=12*t.samples.length+141;!t.isVideo&&t.isAudioEncryption&&(i=149);var n=new Uint8Array([1,0,0,0,0,0,0,1,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i]);return e.box(e.types.saio,n)}},{key:"saiz",value:function(t){var i=t.samples.length,n=new Uint8Array([0,0,0,0,16,i>>24&255,i>>16&255,i>>8&255,255&i]);return e.box(e.types.saiz,n)}},{key:"sbgp",value:function(){var t=new Uint8Array([114,111,108,108,0,0,0,1,0,0,1,25,0,0,0,1]);return e.box(e.types.sbgp,this.extension(0,0),t)}},{key:"extension",value:function(e,t){return new Uint8Array([e,t>>16&255,t>>8&255,255&t])}},{key:"tfhd",value:function(t){return e.box(e.types.tfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"tfdt",value:function(t,i){var n=Math.floor(i/(lt+1)),s=Math.floor(i%(lt+1));return t.useEME&&(t.isVideoEncryption||t.isAudioEncryption)?e.box(e.types.tfdt,new Uint8Array([0,0,0,0,s>>24,s>>16&255,s>>8&255,255&s])):e.box(e.types.tfdt,new Uint8Array([1,0,0,0,n>>24,n>>16&255,n>>8&255,255&n,s>>24,s>>16&255,s>>8&255,255&s]))}},{key:"trun",value:function(t,i){var n=t.length,s=12+16*n;i+=8+s;var a=new Uint8Array(s);a.set([0,0,15,1,n>>>24&255,n>>>16&255,n>>>8&255,255&n,i>>>24&255,i>>>16&255,i>>>8&255,255&i],0);for(var r=0;r<n;r++){var l=t[r],o=l.duration,d=l.size,c=l.flag,u=void 0===c?{}:c,m=l.cts,h=void 0===m?0:m;a.set([o>>>24&255,o>>>16&255,o>>>8&255,255&o,d>>>24&255,d>>>16&255,d>>>8&255,255&d,u.isLeading<<2|(null===u.dependsOn||void 0===u.dependsOn?1:u.dependsOn),u.isDependedOn<<6|u.hasRedundancy<<4|u.paddingValue<<1|(null===u.isNonSyncSample||void 0===u.isNonSyncSample?1:u.isNonSyncSample),61440&u.degradationPriority,15&u.degradationPriority,h>>>24&255,h>>>16&255,h>>>8&255,255&h],12+16*r)}return e.box(e.types.trun,a)}},{key:"moovMP4",value:function(t){return e.box.apply(e,[e.types.moov,e.mvhd(t[0].duration,t[0].timescale)].concat(C(t.map((function(t){return e.trackMP4(t)})))))}},{key:"trackMP4",value:function(t){return e.box(e.types.trak,e.tkhd(t.id,t.duration,t.width,t.height),e.mdiaMP4(t))}},{key:"mdiaMP4",value:function(t){return e.box(e.types.mdia,e.mdhd(t.duration,t.timescale),e.hdlr(t.type),e.minfMP4(t))}},{key:"minfMP4",value:function(t){return e.box(e.types.minf,t.type===D?e.VMHD:e.SMHD,e.DINF,e.stblMP4(t))}},{key:"stblMP4",value:function(t){var i=t.ext,n=[e.stsd(t),e.stts(i.stts),e.stsc(i.stsc),e.stsz(i.stsz),e.stco(i.stco)];return i.stss.length&&n.push(e.stss(i.stss)),i.ctts.length&&n.push(e.ctts(i.ctts)),e.box.apply(e,[e.types.stbl].concat(n))}},{key:"stts",value:function(t){var i=t.length,n=new Uint8Array(8*i),s=0;return t.forEach((function(e){var t=e.value,i=e.count;n.set([i>>24,i>>16&255,i>>8&255,255&i,t>>24,t>>16&255,t>>8&255,255&t],s),s+=8})),e.box(e.types.stts,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stsc",value:function(t){var i=t.length,n=new Uint8Array(12*i),s=0;return t.forEach((function(e){var t=e.firstChunk,i=e.samplesPerChunk,a=e.sampleDescIndex;n.set([t>>24,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a],s),s+=12})),e.box(e.types.stsc,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stsz",value:function(t){var i=t.length,n=new Uint8Array(4*i),s=0;return t.forEach((function(e){n.set([e>>24,e>>16&255,e>>8&255,255&e],s),s+=4})),e.box(e.types.stsz,Se(new Uint8Array([0,0,0,0,0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stco",value:function(t){var i=t.length,n=new Uint8Array(4*i),s=0;return t.forEach((function(e){n.set([e>>24,e>>16&255,e>>8&255,255&e],s),s+=4})),e.box(e.types.stco,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stss",value:function(t){var i=t.length,n=new Uint8Array(4*i),s=0;return t.forEach((function(e){n.set([e>>24,e>>16&255,e>>8&255,255&e],s),s+=4})),e.box(e.types.stss,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"ctts",value:function(t){var i=t.length,n=new Uint8Array(8*i),s=0;return t.forEach((function(e){var t=e.value,i=e.count;n.set([i>>24,i>>16&255,i>>8&255,255&i,t>>24,t>>16&255,t>>8&255,255&t],s),s+=8})),e.box(e.types.ctts,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"styp",value:function(){return e.box(e.types.styp,new Uint8Array([109,115,100,104,0,0,0,0,109,115,100,104,109,115,105,120]))}},{key:"sidx",value:function(t){var i=t.timescale,n=t.samples[0].duration,s=n*t.samples.length,a=t.samples[0].sampleOffset*n,r=8;t.samples.forEach((function(e){r+=e.size}));var l=0;if(t.isVideo){var o,d=0;t.videoSenc&&(o=t.videoSenc),t.isVideo&&o.forEach((function(e){d+=8,e.subsamples&&e.subsamples.length&&(d+=2,d+=6*e.subsamples.length)})),t.videoSencLength=d,l=r+141+16*t.samples.length+d,t.useEME&&t.isAudioEncryption&&!t.isVideoEncryption&&(l=r+16*t.samples.length+84)}else l=r+116+12*t.samples.length,t.useEME&&t.isAudioEncryption&&(l=r+169+12*t.samples.length+8*t.audioSenc.length);var c=new Uint8Array([0,0,0,0,0,0,0,255&t.id,i>>24&255,i>>16&255,i>>8&255,255&i,a>>24&255,a>>16&255,a>>8&255,255&a,0,0,0,0,0,0,0,1,0,l>>16&255,l>>8&255,255&l,s>>24&255,s>>16&255,s>>8&255,255&s,144,0,0,0]);return e.box(e.types.sidx,c)}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}}]),e}();G(ot,"types",["Opus","dOps","av01","av1C","avc1","avcC","hvc1","hvcC","dinf","dref","esds","ftyp","hdlr","mdat","mdhd","mdia","mfhd","minf","moof","moov","mp4a","mvex","mvhd","pasp","stbl","stco","stsc","stsd","stsz","stts","tfdt","tfhd","traf","trak","trex","tkhd","vmhd","smhd","ctts","stss","styp","pssh","sidx","sbgp","saiz","saio","senc","trun","encv","enca","sinf","btrt","frma","tenc","schm","schi","mehd","fiel","sdtp"].reduce((function(e,t){return e[t]=[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)],e}),Object.create(null))),G(ot,"HDLR_TYPES",{video:new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),audio:new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0])}),G(ot,"FTYPAVC1",ot.box(ot.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]))),G(ot,"FTYPHEV1",ot.box(ot.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,104,101,118,49]))),G(ot,"DINF",ot.box(ot.types.dinf,ot.box(ot.types.dref,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1])))),G(ot,"VMHD",ot.box(ot.types.vmhd,new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0]))),G(ot,"SMHD",ot.box(ot.types.smhd,new Uint8Array([0,0,0,0,0,0,0,0]))),G(ot,"StblTable",new Uint8Array([0,0,0,0,0,0,0,0])),G(ot,"STTS",ot.box(ot.types.stts,ot.StblTable)),G(ot,"STSC",ot.box(ot.types.stsc,ot.StblTable)),G(ot,"STSZ",ot.box(ot.types.stsz,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]))),G(ot,"STCO",ot.box(ot.types.stco,ot.StblTable));var dt=function(){function e(t,i){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]"),e.disabled=i}return W(e,[{key:"debug",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).debug.apply(t,[this._prefix].concat(n))}}},{key:"log",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).log.apply(t,[this._prefix].concat(n))}}},{key:"warn",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).warn.apply(t,[this._prefix].concat(n))}}},{key:"error",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).error.apply(t,[this._prefix].concat(n))}}},{key:"table",value:function(){var t;e.disabled||(console.group(this._prefix),(t=console).table.apply(t,arguments),console.groupEnd())}}],[{key:"enable",value:function(){e.disabled=!1}},{key:"disable",value:function(){e.disabled=!0}}]),e}();G(dt,"disabled",!0);for(var ct=function(){function e(t,i,n){X(this,e),this.videoTrack=t,this.audioTrack=i;var s=/Chrome\/([^.]+)/.exec(navigator.userAgent);this.forceFirstIDR=s&&Number(s[1])<50,this.log=new dt("FMP4Remuxer",!n||!n.openLog||!n.openLog)}return W(e,[{key:"remux",value:function(){var e,t,i,n,s,a=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=this.videoTrack,o=this.audioTrack,d=l.exist(),c=o.exist(),u=[];return a&&(r&&r.initMerge?(d&&u.push(this.videoTrack),c&&u.push(this.audioTrack),i=ot.initSegment(u)):(d&&(e=ot.initSegment([this.videoTrack])),c&&(t=ot.initSegment([this.audioTrack])))),d&&l.hasSample()&&(n=this._remuxVideo()),c&&o.hasSample()&&(s=this._remuxAudio()),l.samples=[],o.samples=[],{initSegment:i,videoInitSegment:e,audioInitSegment:t,videoSegment:n,audioSegment:s}}},{key:"_remuxVideo",value:function(){var e=this.videoTrack;this.forceFirstIDR&&(e.samples[0].flag={dependsOn:2,isNonSyncSample:0});var t=e.samples,i=/av01/.test(e.codec),n=0;i?t.forEach((function(e){n+=e.data.byteLength})):t.forEach((function(e){n+=e.units.reduce((function(e,t){return e+t.byteLength}),0),n+=4*e.units.length}));var s=new Uint8Array(n);if(i)for(var a,r=0,l=t.length,o=0;r<l;r++)a=t[r],s.set(a.data,o),a.size=a.data.byteLength,o+=a.size;else for(var d,c=new DataView(s.buffer),u=function(e,i){i=t[m];var n=0;i.units.forEach((function(t){c.setUint32(e,t.byteLength),e+=4,s.set(t,e),e+=t.byteLength,n+=4+t.byteLength})),i.size=n,p=e,d=i},m=0,h=t.length,p=0;m<h;m++)u(p,d);var y=ot.mdat(s);return Se(ot.moof([e]),y)}},{key:"_remuxAudio",value:function(){var e=this.audioTrack,t=new Uint8Array(e.samples.reduce((function(e,t){return e+t.size}),0));e.samples.reduce((function(e,i){return t.set(i.data,e),e+i.size}),0);var i=ot.mdat(t);return Se(ot.moof([e]),i)}},{key:"reset",value:function(){this.videoTrack.reset(),this.audioTrack.reset()}}]),e}(),ut=function(){function e(){X(this,e)}return W(e,[{key:"mixIn",value:function(e){return Object.assign(this,e)}},{key:"clone",value:function(){var e=new this.constructor;return Object.assign(e,this),e}}],[{key:"create",value:function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return V(this,t)}}]),e}(),mt=function(e){v(i,e);var t=w(i);function i(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4*n.length;X(this,i),e=t.call(this);var a=n;if(a instanceof ArrayBuffer&&(a=new Uint8Array(a)),(a instanceof Int8Array||a instanceof Uint8ClampedArray||a instanceof Int16Array||a instanceof Uint16Array||a instanceof Int32Array||a instanceof Uint32Array||a instanceof Float32Array||a instanceof Float64Array)&&(a=new Uint8Array(a.buffer,a.byteOffset,a.byteLength)),a instanceof Uint8Array){for(var r=a.byteLength,l=[],o=0;o<r;o+=1)l[o>>>2]|=a[o]<<24-o%4*8;e.words=l,e.sigBytes=r}else e.words=n,e.sigBytes=s;return e}return W(i,[{key:"toString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ht;return e.stringify(this)}},{key:"concat",value:function(e){var t=this.words,i=e.words,n=this.sigBytes,s=e.sigBytes;if(this.clamp(),n%4)for(var a=0;a<s;a+=1){var r=i[a>>>2]>>>24-a%4*8&255;t[n+a>>>2]|=r<<24-(n+a)%4*8}else for(var l=0;l<s;l+=4)t[n+l>>>2]=i[l>>>2];return this.sigBytes+=s,this}},{key:"clamp",value:function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=Math.ceil(t/4)}},{key:"clone",value:function(){var e=K(x(i.prototype),"clone",this).call(this);return e.words=this.words.slice(0),e}}],[{key:"random",value:function(e){for(var t,n=[],s=function(e){var t=e,i=987654321,n=4294967295;return function(){var e=((i=36969*(65535&i)+(i>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return e/=4294967296,(e+=.5)*(Math.random()>.5?1:-1)}},a=0;a<e;a+=4){var r=s(4294967296*(t||Math.random()));t=987654071*r(),n.push(4294967296*r()|0)}return new i(n,e)}}]),i}(ut),ht={stringify:function(e){for(var t=e.words,i=e.sigBytes,n=[],s=0;s<i;s+=1){var a=t[s>>>2]>>>24-s%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,i=[],n=0;n<t;n+=2)i[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new mt(i,t/2)}},pt=function(e){for(var t=e.length,i=[],n=0;n<t;n+=1)i[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new mt(i,t)},yt=function(e){return pt(unescape(encodeURIComponent(e)))},Zt=function(e){v(i,e);var t=w(i);function i(){var e;return X(this,i),(e=t.call(this))._minBufferSize=0,e}return W(i,[{key:"reset",value:function(){this._data=new mt,this._nDataBytes=0}},{key:"_append",value:function(e){var t=e;"string"==typeof t&&(t=yt(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes}},{key:"_process",value:function(e){var t,i=this._data,n=this.blockSize,s=i.words,a=i.sigBytes,r=a/(4*n),l=(r=e?Math.ceil(r):Math.max((0|r)-this._minBufferSize,0))*n,o=Math.min(4*l,a);if(l){for(var d=0;d<l;d+=n)this._doProcessBlock(s,d);t=s.splice(0,l),i.sigBytes-=o}return new mt(t,o)}},{key:"clone",value:function(){var e=K(x(i.prototype),"clone",this).call(this);return e._data=this._data.clone(),e}}]),i}(ut),bt=function(e){v(i,e);var t=w(i);function i(e){var n;return X(this,i),(n=t.call(this)).blockSize=16,n.cfg=Object.assign(new ut,e),n.reset(),n}return W(i,[{key:"reset",value:function(){K(x(i.prototype),"reset",this).call(this),this._doReset()}},{key:"update",value:function(e){return this._append(e),this._process(),this}},{key:"finalize",value:function(e){return e&&this._append(e),this._doFinalize()}}],[{key:"_createHelper",value:function(e){return function(t,i){return new e(i).finalize(t)}}},{key:"_createHmacHelper",value:function(e){return function(t,i){return new ft(e,i).finalize(t)}}}]),i}(Zt),ft=function(e){v(i,e);var t=w(i);function i(e,n){var s;X(this,i),s=t.call(this);var a=new e;s._hasher=a;var r=n;"string"==typeof r&&(r=yt(r));var l=a.blockSize,o=4*l;r.sigBytes>o&&(r=a.finalize(n)),r.clamp();var d=r.clone();s._oKey=d;var c=r.clone();s._iKey=c;for(var u=d.words,m=c.words,h=0;h<l;h+=1)u[h]^=1549556828,m[h]^=909522486;return d.sigBytes=o,c.sigBytes=o,s.reset(),s}return W(i,[{key:"reset",value:function(){var e=this._hasher;e.reset(),e.update(this._iKey)}},{key:"update",value:function(e){return this._hasher.update(e),this}},{key:"finalize",value:function(e){var t=this._hasher,i=t.finalize(e);return t.reset(),t.finalize(this._oKey.clone().concat(i))}}]),i}(ut),Xt={stringify:function(e){var t=e.words,i=e.sigBytes,n=this._map;e.clamp();for(var s=[],a=0;a<i;a+=3)for(var r=(t[a>>>2]>>>24-a%4*8&255)<<16|(t[a+1>>>2]>>>24-(a+1)%4*8&255)<<8|t[a+2>>>2]>>>24-(a+2)%4*8&255,l=0;l<4&&a+.75*l<i;l+=1)s.push(n.charAt(r>>>6*(3-l)&63));var o=n.charAt(64);if(o)for(;s.length%4;)s.push(o);return s.join("")},parse:function(e){var t=e.length,i=this._map,n=this._reverseMap;if(!n){this._reverseMap=[],n=this._reverseMap;for(var s=0;s<i.length;s+=1)n[i.charCodeAt(s)]=s}var a=i.charAt(64);if(a){var r=e.indexOf(a);-1!==r&&(t=r)}return function(e,t,i){for(var n=[],s=0,a=0;a<t;a+=1)if(a%4){var r=i[e.charCodeAt(a-1)]<<a%4*2|i[e.charCodeAt(a)]>>>6-a%4*2;n[s>>>2]|=r<<24-s%4*8,s+=1}return mt.create(n,s)}(e,t,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},Lt=[],Wt=0;Wt<64;Wt+=1)Lt[Wt]=4294967296*Math.abs(Math.sin(Wt+1))|0;var Gt=function(e,t,i,n,s,a,r){var l=e+(t&i|~t&n)+s+r;return(l<<a|l>>>32-a)+t},vt=function(e,t,i,n,s,a,r){var l=e+(t&n|i&~n)+s+r;return(l<<a|l>>>32-a)+t},xt=function(e,t,i,n,s,a,r){var l=e+(t^i^n)+s+r;return(l<<a|l>>>32-a)+t},St=function(e,t,i,n,s,a,r){var l=e+(i^(t|~n))+s+r;return(l<<a|l>>>32-a)+t},gt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i,[{key:"_doReset",value:function(){this._hash=new mt([1732584193,4023233417,2562383102,271733878])}},{key:"_doProcessBlock",value:function(e,t){for(var i=e,n=0;n<16;n+=1){var s=t+n,a=e[s];i[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}var r=this._hash.words,l=i[t+0],o=i[t+1],d=i[t+2],c=i[t+3],u=i[t+4],m=i[t+5],h=i[t+6],p=i[t+7],y=i[t+8],Z=i[t+9],b=i[t+10],f=i[t+11],X=i[t+12],L=i[t+13],W=i[t+14],G=i[t+15],v=r[0],x=r[1],S=r[2],g=r[3];v=Gt(v,x,S,g,l,7,Lt[0]),g=Gt(g,v,x,S,o,12,Lt[1]),S=Gt(S,g,v,x,d,17,Lt[2]),x=Gt(x,S,g,v,c,22,Lt[3]),v=Gt(v,x,S,g,u,7,Lt[4]),g=Gt(g,v,x,S,m,12,Lt[5]),S=Gt(S,g,v,x,h,17,Lt[6]),x=Gt(x,S,g,v,p,22,Lt[7]),v=Gt(v,x,S,g,y,7,Lt[8]),g=Gt(g,v,x,S,Z,12,Lt[9]),S=Gt(S,g,v,x,b,17,Lt[10]),x=Gt(x,S,g,v,f,22,Lt[11]),v=Gt(v,x,S,g,X,7,Lt[12]),g=Gt(g,v,x,S,L,12,Lt[13]),S=Gt(S,g,v,x,W,17,Lt[14]),x=Gt(x,S,g,v,G,22,Lt[15]),v=vt(v,x,S,g,o,5,Lt[16]),g=vt(g,v,x,S,h,9,Lt[17]),S=vt(S,g,v,x,f,14,Lt[18]),x=vt(x,S,g,v,l,20,Lt[19]),v=vt(v,x,S,g,m,5,Lt[20]),g=vt(g,v,x,S,b,9,Lt[21]),S=vt(S,g,v,x,G,14,Lt[22]),x=vt(x,S,g,v,u,20,Lt[23]),v=vt(v,x,S,g,Z,5,Lt[24]),g=vt(g,v,x,S,W,9,Lt[25]),S=vt(S,g,v,x,c,14,Lt[26]),x=vt(x,S,g,v,y,20,Lt[27]),v=vt(v,x,S,g,L,5,Lt[28]),g=vt(g,v,x,S,d,9,Lt[29]),S=vt(S,g,v,x,p,14,Lt[30]),x=vt(x,S,g,v,X,20,Lt[31]),v=xt(v,x,S,g,m,4,Lt[32]),g=xt(g,v,x,S,y,11,Lt[33]),S=xt(S,g,v,x,f,16,Lt[34]),x=xt(x,S,g,v,W,23,Lt[35]),v=xt(v,x,S,g,o,4,Lt[36]),g=xt(g,v,x,S,u,11,Lt[37]),S=xt(S,g,v,x,p,16,Lt[38]),x=xt(x,S,g,v,b,23,Lt[39]),v=xt(v,x,S,g,L,4,Lt[40]),g=xt(g,v,x,S,l,11,Lt[41]),S=xt(S,g,v,x,c,16,Lt[42]),x=xt(x,S,g,v,h,23,Lt[43]),v=xt(v,x,S,g,Z,4,Lt[44]),g=xt(g,v,x,S,X,11,Lt[45]),S=xt(S,g,v,x,G,16,Lt[46]),x=xt(x,S,g,v,d,23,Lt[47]),v=St(v,x,S,g,l,6,Lt[48]),g=St(g,v,x,S,p,10,Lt[49]),S=St(S,g,v,x,W,15,Lt[50]),x=St(x,S,g,v,m,21,Lt[51]),v=St(v,x,S,g,X,6,Lt[52]),g=St(g,v,x,S,c,10,Lt[53]),S=St(S,g,v,x,b,15,Lt[54]),x=St(x,S,g,v,o,21,Lt[55]),v=St(v,x,S,g,y,6,Lt[56]),g=St(g,v,x,S,G,10,Lt[57]),S=St(S,g,v,x,h,15,Lt[58]),x=St(x,S,g,v,L,21,Lt[59]),v=St(v,x,S,g,u,6,Lt[60]),g=St(g,v,x,S,f,10,Lt[61]),S=St(S,g,v,x,d,15,Lt[62]),x=St(x,S,g,v,Z,21,Lt[63]),r[0]=r[0]+v|0,r[1]=r[1]+x|0,r[2]=r[2]+S|0,r[3]=r[3]+g|0}},{key:"_doFinalize",value:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;t[n>>>5]|=128<<24-n%32;var s=Math.floor(i/4294967296),a=i;t[15+(n+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),t[14+(n+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),e.sigBytes=4*(t.length+1),this._process();for(var r=this._hash,l=r.words,o=0;o<4;o+=1){var d=l[o];l[o]=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8)}return r}},{key:"clone",value:function(){var e=K(x(i.prototype),"clone",this).call(this);return e._hash=this._hash.clone(),e}}]),i}(bt);bt._createHelper(gt),bt._createHmacHelper(gt);var Vt=function(e){v(i,e);var t=w(i);function i(e){var n;return X(this,i),(n=t.call(this)).cfg=Object.assign(new ut,{keySize:4,hasher:gt,iterations:1},e),n}return W(i,[{key:"compute",value:function(e,t){for(var i,n=this.cfg,s=n.hasher.create(),a=mt.create(),r=a.words,l=n.keySize,o=n.iterations;r.length<l;){i&&s.update(i),i=s.update(e).finalize(t),s.reset();for(var d=1;d<o;d+=1)i=s.finalize(i),s.reset();a.concat(i)}return a.sigBytes=4*l,a}}]),i}(ut),Yt=function(e){v(i,e);var t=w(i);function i(e,n,s){var a;return X(this,i),(a=t.call(this)).cfg=Object.assign(new ut,s),a._xformMode=e,a._key=n,a.reset(),a}return W(i,[{key:"reset",value:function(){K(x(i.prototype),"reset",this).call(this),this._doReset()}},{key:"process",value:function(e){return this._append(e),this._process()}},{key:"finalize",value:function(e){return e&&this._append(e),this._doFinalize()}}],[{key:"createEncryptor",value:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)}},{key:"createDecryptor",value:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)}},{key:"_createHelper",value:function(e){var t=function(e){return"string"==typeof e?Nt:Ct};return{encrypt:function(i,n,s){return t(n).encrypt(e,i,n,s)},decrypt:function(i,n,s){return t(n).decrypt(e,i,n,s)}}}}]),i}(Zt);Yt._ENC_XFORM_MODE=1,Yt._DEC_XFORM_MODE=2,Yt.keySize=4,Yt.ivSize=4;var kt=function(e){v(i,e);var t=w(i);function i(e,n){var s;return X(this,i),(s=t.call(this))._cipher=e,s._iv=n,s}return W(i,null,[{key:"createEncryptor",value:function(e,t){return this.Encryptor.create(e,t)}},{key:"createDecryptor",value:function(e,t){return this.Decryptor.create(e,t)}}]),i}(ut);function Rt(e,t,i){var n,s=e,a=this._iv;a?(n=a,this._iv=void 0):n=this._prevBlock;for(var r=0;r<i;r+=1)s[t+r]^=n[r]}var Tt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i)}(kt);Tt.Encryptor=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize;Rt.call(this,e,t,n),i.encryptBlock(e,t),this._prevBlock=e.slice(t,t+n)}}]),i}(Tt),Tt.Decryptor=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize,s=e.slice(t,t+n);i.decryptBlock(e,t),Rt.call(this,e,t,n),this._prevBlock=s}}]),i}(Tt);var wt={pad:function(e,t){for(var i=4*t,n=i-e.sigBytes%i,s=n<<24|n<<16|n<<8|n,a=[],r=0;r<n;r+=4)a.push(s);var l=mt.create(a,n);e.concat(l)},unpad:function(e){var t=e,i=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=i}},Mt=function(e){v(i,e);var t=w(i);function i(e,n,s){var a;return X(this,i),(a=t.call(this,e,n,Object.assign({mode:Tt,padding:wt},s))).blockSize=4,a}return W(i,[{key:"reset",value:function(){var e;K(x(i.prototype),"reset",this).call(this);var t=this.cfg,n=t.iv,s=t.mode;this._xformMode===this.constructor._ENC_XFORM_MODE?e=s.createEncryptor:(e=s.createDecryptor,this._minBufferSize=1),this._mode=e.call(s,this,n&&n.words),this._mode.__creator=e}},{key:"_doProcessBlock",value:function(e,t){this._mode.processBlock(e,t)}},{key:"_doFinalize",value:function(){var e,t=this.cfg.padding;return this._xformMode===this.constructor._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e}}]),i}(Yt),Kt=function(e){v(i,e);var t=w(i);function i(e){var n;return X(this,i),(n=t.call(this)).mixIn(e),n}return W(i,[{key:"toString",value:function(e){return(e||this.formatter).stringify(this)}}]),i}(ut),It={stringify:function(e){var t=e.ciphertext,i=e.salt;return(i?mt.create([1398893684,1701076831]).concat(i).concat(t):t).toString(Xt)},parse:function(e){var t,i=Xt.parse(e),n=i.words;return 1398893684===n[0]&&1701076831===n[1]&&(t=mt.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),Kt.create({ciphertext:i,salt:t})}},Ct=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i,null,[{key:"encrypt",value:function(e,t,i,n){var s=Object.assign(new ut,this.cfg,n),a=e.createEncryptor(i,s),r=a.finalize(t),l=a.cfg;return Kt.create({ciphertext:r,key:i,iv:l.iv,algorithm:e,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:s.format})}},{key:"decrypt",value:function(e,t,i,n){var s=t,a=Object.assign(new ut,this.cfg,n);return s=this._parse(s,a.format),e.createDecryptor(i,a).finalize(s.ciphertext)}},{key:"_parse",value:function(e,t){return"string"==typeof e?t.parse(e,this):e}}]),i}(ut);Ct.cfg=Object.assign(new ut,{format:It});var Ht={execute:function(e,t,i,n){var s=n;s||(s=mt.random(8));var a=Vt.create({keySize:t+i}).compute(e,s),r=mt.create(a.words.slice(t),4*i);return a.sigBytes=4*t,Kt.create({key:a,iv:r,salt:s})}},Nt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i,null,[{key:"encrypt",value:function(e,t,i,n){var s=Object.assign(new ut,this.cfg,n),a=s.kdf.execute(i,e.keySize,e.ivSize);s.iv=a.iv;var r=Ct.encrypt.call(this,e,t,a.key,s);return r.mixIn(a),r}},{key:"decrypt",value:function(e,t,i,n){var s=t,a=Object.assign(new ut,this.cfg,n);s=this._parse(s,a.format);var r=a.kdf.execute(i,e.keySize,e.ivSize,s.salt);return a.iv=r.iv,Ct.decrypt.call(this,e,s,r.key,a)}}]),i}(Ct);Nt.cfg=Object.assign(Ct.cfg,{kdf:Ht});for(var zt=[],Ft=[],Ut=[],Jt=[],jt=[],Pt=[],Et=[],Dt=[],Bt=[],_t=[],Qt=[],Ot=0;Ot<256;Ot+=1)Qt[Ot]=Ot<128?Ot<<1:Ot<<1^283;for(var At=0,qt=0,$t=0;$t<256;$t+=1){var ei=qt^qt<<1^qt<<2^qt<<3^qt<<4;ei=ei>>>8^255&ei^99,zt[At]=ei,Ft[ei]=At;var ti=Qt[At],ii=Qt[ti],ni=Qt[ii],si=257*Qt[ei]^16843008*ei;Ut[At]=si<<24|si>>>8,Jt[At]=si<<16|si>>>16,jt[At]=si<<8|si>>>24,Pt[At]=si,si=16843009*ni^65537*ii^257*ti^16843008*At,Et[ei]=si<<24|si>>>8,Dt[ei]=si<<16|si>>>16,Bt[ei]=si<<8|si>>>24,_t[ei]=si,At?(At=ti^Qt[Qt[Qt[ni^ti]]],qt^=Qt[Qt[qt]]):At=qt=1}var ai=[0,1,2,4,8,16,32,64,128,27,54],ri=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i,[{key:"_doReset",value:function(){var e;if(!this._nRounds||this._keyPriorReset!==this._key){this._keyPriorReset=this._key;var t=this._keyPriorReset,i=t.words,n=t.sigBytes/4;this._nRounds=n+6;var s=4*(this._nRounds+1);this._keySchedule=[];for(var a=this._keySchedule,r=0;r<s;r+=1)r<n?a[r]=i[r]:(e=a[r-1],r%n?n>6&&r%n==4&&(e=zt[e>>>24]<<24|zt[e>>>16&255]<<16|zt[e>>>8&255]<<8|zt[255&e]):(e=zt[(e=e<<8|e>>>24)>>>24]<<24|zt[e>>>16&255]<<16|zt[e>>>8&255]<<8|zt[255&e],e^=ai[r/n|0]<<24),a[r]=a[r-n]^e);this._invKeySchedule=[];for(var l=this._invKeySchedule,o=0;o<s;o+=1){var d=s-o;e=o%4?a[d]:a[d-4],l[o]=o<4||d<=4?e:Et[zt[e>>>24]]^Dt[zt[e>>>16&255]]^Bt[zt[e>>>8&255]]^_t[zt[255&e]]}}}},{key:"encryptBlock",value:function(e,t){this._doCryptBlock(e,t,this._keySchedule,Ut,Jt,jt,Pt,zt)}},{key:"decryptBlock",value:function(e,t){var i=e,n=i[t+1];i[t+1]=i[t+3],i[t+3]=n,this._doCryptBlock(i,t,this._invKeySchedule,Et,Dt,Bt,_t,Ft),n=i[t+1],i[t+1]=i[t+3],i[t+3]=n}},{key:"_doCryptBlock",value:function(e,t,i,n,s,a,r,l){for(var o=e,d=this._nRounds,c=o[t]^i[0],u=o[t+1]^i[1],m=o[t+2]^i[2],h=o[t+3]^i[3],p=4,y=1;y<d;y+=1){var Z=n[c>>>24]^s[u>>>16&255]^a[m>>>8&255]^r[255&h]^i[p];p+=1;var b=n[u>>>24]^s[m>>>16&255]^a[h>>>8&255]^r[255&c]^i[p];p+=1;var f=n[m>>>24]^s[h>>>16&255]^a[c>>>8&255]^r[255&u]^i[p];p+=1;var X=n[h>>>24]^s[c>>>16&255]^a[u>>>8&255]^r[255&m]^i[p];p+=1,c=Z,u=b,m=f,h=X}var L=(l[c>>>24]<<24|l[u>>>16&255]<<16|l[m>>>8&255]<<8|l[255&h])^i[p];p+=1;var W=(l[u>>>24]<<24|l[m>>>16&255]<<16|l[h>>>8&255]<<8|l[255&c])^i[p];p+=1;var G=(l[m>>>24]<<24|l[h>>>16&255]<<16|l[c>>>8&255]<<8|l[255&u])^i[p];p+=1;var v=(l[h>>>24]<<24|l[c>>>16&255]<<16|l[u>>>8&255]<<8|l[255&m])^i[p];p+=1,o[t]=L,o[t+1]=W,o[t+2]=G,o[t+3]=v}}]),i}(Mt);ri.keySize=8;var li=Mt._createHelper(ri),oi=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i)}(kt);oi.Encryptor=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return W(i,[{key:"processBlock",value:function(e,t){var i=e,n=this._cipher,s=n.blockSize,a=this._iv,r=this._counter;a&&(this._counter=a.slice(0),r=this._counter,this._iv=void 0);var l=r.slice(0);n.encryptBlock(l,0),r[s-1]=r[s-1]+1|0;for(var o=0;o<s;o+=1)i[t+o]^=l[o]}}]),i}(oi),oi.Decryptor=oi.Encryptor;var di,ci={pad:function(){},unpad:function(){}},ui={decryptWordArray:function(e,t,i){var n=ht.parse(t),s=ht.parse(Te(i)),a=mt.create(new Uint8Array(e)),r=li.decrypt(Kt.create({ciphertext:a}),n,{iv:s,mode:oi,padding:ci});return ui.wordArrayToUint8Array(r)},wordArrayToUint8Array:function(e){for(var t=e.sigBytes,i=e.words,n=new Uint8Array(t),s=0,a=0;s!==t;){var r=i[a++];if(n[s++]=(4278190080&r)>>>24,s===t)break;if(n[s++]=(16711680&r)>>>16,s===t)break;if(n[s++]=(65280&r)>>>8,s===t)break;n[s++]=255&r}return n},decoderAESCTRData:function(e,t,i){if(e.videoSenc){var n=e.kidValue,s=e.videoSenc;e.samples.forEach((function(t,a){var r=s[a],l=t.data,o=[],d=[],c=r.InitializationVector;if(r.subsamples&&r.subsamples.length)r.subsamples.forEach((function(e){var t=e.BytesOfClearData+e.BytesOfProtectedData,i=l.slice(0,t);o.push(i.slice(0,e.BytesOfClearData)),d.push(i.slice(e.BytesOfClearData)),l=l.slice(t)}));else{var u=t.size;o.push(l.slice(0,0)),d.push(l.slice(0,u)),l=l.slice(u)}var m=new rt;m.write.apply(m,d);var h=i?i(m.buffer,n,c):ui.decryptWordArray(m.buffer,n,c),p=new rt;o.forEach((function(e,t){var i=d[t].length,n=h.slice(0,i);p.write(e),p.write(n),h=h.slice(i)})),e.samples[a].data=p.buffer}))}if(t.audioSenc){var a=t.kidValue,r=t.audioSenc;t.samples.forEach((function(e,n){var s=r[n],l=i?i(e.data,a,s.InitializationVector):ui.decryptWordArray(e.data,a,s.InitializationVector);t.samples[n].data=l}))}}},mi=function(){function e(t,i,n,s){var a=this;X(this,e),G(this,"_videoSamples",[]),G(this,"_audioSamples",[]),G(this,"_lastRemainBuffer",[]),G(this,"_lastRemainBufferStartPos",0),this.videoTrack=new de,this.audioTrack=new ce,this.metadataTrack=n||new Ze,this.log=new dt("MP4Demuxer",!s||!s.openLog||!s.openLog),t&&t.forEach((function(e){var t;(t=a._videoSamples).push.apply(t,C(e.frames))})),i&&i.forEach((function(e){var t;(t=a._audioSamples).push.apply(t,C(e.frames))}))}return W(e,[{key:"parseSamples",value:function(e){if(!e)throw new Error("moov is required");if(this.videoTrack.codec||this.audioTrack.codec||(Ae.moovToTrack(e,this.videoTrack,this.audioTrack),this.videoSenc=this.videoTrack.videoSenc,this.audioSenc=this.audioTrack.audioSenc),!this._audioSamples.length&&!this._videoSamples.length){var t=Ae.moovToSamples(e);if(!t)throw new Error("cannot parse samples from moov box");this._videoSamples=t.videoSamples||[],this._audioSamples=t.audioSamples||[]}}},{key:"demux",value:function(e,t,i,n,s){this.parseSamples(s);var a,r,l,o=this.videoTrack,d=this.audioTrack;if(o.samples=[],d.samples=[],i){for(var c,u=0,m=i[0],h=i[1];m<=h;m++){if(!(a=this._videoSamples[m]))throw new Error("cannot found video frame #".concat(m));l=a.offset-t,r=e.subarray(l,l+a.size),(c=new ue(a.pts||a.dts,a.dts)).duration=a.duration,c.gopId=a.gopId,a.keyframe&&c.setToKeyframe();for(var p=0,y=r.length-1;p<y;)u=Ye(r,p),p+=4,c.units.push(r.subarray(p,p+u)),p+=u;o.samples.push(c)}o.baseMediaDecodeTime=o.samples[0].dts}if(n){for(var Z=n[0],b=n[1];Z<=b;Z++){if(!(a=this._audioSamples[Z]))throw new Error("cannot found video frame #".concat(Z));l=a.offset-t,r=e.subarray(l,l+a.size),d.samples.push(new me(a.dts,r,a.duration))}d.baseMediaDecodeTime=d.samples[0].dts}return{videoTrack:o,audioTrack:d,metadataTrack:this.metadataTrack}}},{key:"demuxPart",value:function(e,t,i,n,s,a,r,l){if(this.parseSamples(s),this.videoTrack.useEME=a,this.audioTrack.useEME=a,this._lastRemainBuffer&&this._lastRemainBuffer.byteLength>0&&t>this._lastRemainBufferStartPos&&t<=this._lastRemainBufferStartPos+this._lastRemainBuffer.byteLength)for(var o=0;o<20;)try{var d=this._lastRemainBuffer.subarray(0,t-this._lastRemainBufferStartPos),c=new Uint8Array(e.byteLength+d.byteLength);c.set(d,0),c.set(new Uint8Array(e),d.byteLength),e=c,t-=d.byteLength,this._lastRemainBuffer=null,this._lastRemainBufferStartPos=0;break}catch(V){if(!(o<20))throw new Error("new Uint8Array error:,"+V.errorMessage);o++}var u,m,h,p=this.videoTrack,y=this.audioTrack;p.samples=[],y.samples=[],p.videoSenc=null,y.audioSenc=null;var Z=0,b=0;if(this._videoSamples.length>0&&i.length>0){for(var f,X=e.byteLength+t,L=i[0];L<=i[1];L++){if(!(u=this._videoSamples[L]))throw new Error("cannot found video frame #".concat(L));u.offset>=t&&u.offset+u.size<=X&&(Z=(h=u.offset-t)+u.size,m=e.subarray(h,Z),(f=new ue(u.pts||u.dts,u.dts)).duration=u.duration,f.gopId=u.gopId,f.sampleOffset=u.index,u.keyframe&&f.setToKeyframe(),f.data=m,f.size=u.size,p.samples.push(f))}p.samples.length>0&&(p.gopId=p.samples[0].gopId,p.baseMediaDecodeTime=p.samples[0].dts,p.startPts=p.samples[0].pts/p.timescale,p.endPts=p.samples[p.samples.length-1].pts/p.timescale,this.videoSenc&&(p.videoSenc=this.videoSenc.slice(p.samples[0].sampleOffset,p.samples[0].sampleOffset+p.samples.length),p.kidValue=r))}if(this._audioSamples.length>0&&n.length>0){for(var W=n[0];W<=n[1];W++){if(!(u=this._audioSamples[W]))throw new Error("cannot found video frame #".concat(W));u.offset>=t&&u.offset+u.size<=e.byteLength+t&&(b=(h=u.offset-t)+u.size,m=e.subarray(h,b),y.samples.push(new me(u.dts,m,u.duration,u.index)))}y.samples.length>0&&(y.gopId=y.samples[0].gopId||p.gopId,y.baseMediaDecodeTime=y.samples[0].dts,y.startPts=y.samples[0].pts/y.timescale,y.endPts=y.samples[y.samples.length-1].pts/y.timescale,this.audioSenc&&(y.audioSenc=this.audioSenc.slice(y.samples[0].sampleOffset,y.samples[0].sampleOffset+y.samples.length),y.kidValue=r))}this.decoderData(p,y,l);for(var G=0,v=0;v<p.samples.length;v++)for(var x=0,S=p.samples[v].data,g=S.length-1;x<g;)G=Ye(S,x),x+=4,p.samples[v].units.push(S.subarray(x,x+G)),x+=G;return this._lastRemainBuffer=e.subarray(Math.max(Z,b)),this._lastRemainBuffer.byteLength>0?this._lastRemainBufferStartPos=t+e.byteLength-this._lastRemainBuffer.byteLength:this._lastRemainBufferStartPos=0,{videoTrack:p,audioTrack:y,metadataTrack:this.metadataTrack}}},{key:"reset",value:function(){this._videoSamples=[],this._audioSamples=[],this._lastRemainBuffer=null,this._lastRemainBufferStartPos=0,this.videoTrack.reset(),this.audioTrack.reset(),this.metadataTrack.reset()}},{key:"decoderData",value:function(e,t,i){e.useEME||t.useEME||ui.decoderAESCTRData(e,t,i)}}],[{key:"probe",value:function(e){return Ae.probe(e)}}]),e}(),hi="3.0.24",pi=function(){function e(){X(this,e)}return W(e,null,[{key:"start",value:function(e){return e&&e.length?1===e.length&&e.end(0)-e.start(0)<1e-6||1===e.length&&e.start(0)<0?0:e.start(0):0}},{key:"end",value:function(e){return e&&e.length?1===e.length&&e.end(0)-e.start(0)<1e-6?0:e.end(e.length-1):0}},{key:"get",value:function(e){if(e)try{return e.buffered}catch(t){}}},{key:"buffers",value:function(e,t){if(!e||!e.length)return[];for(var i=[],n=0,s=e.length;n<s;n++){var a=i.length;if(a&&t){var r=i[a-1],l=r[1];if(e.start(n)-l<=t){var o=e.end(n);o>l&&(r[1]=o)}else i.push([e.start(n),e.end(n)])}else i.push([e.start(n),e.end(n)])}return i}},{key:"totalLength",value:function(e){return e&&e.length?e.reduce((function(e,t){return e+(t[1]-t[0])}),0):0}},{key:"info",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(!t||!t.length)return{start:0,end:0,buffers:[]};for(var s=0,a=0,r=0,l=0,o=0,d=0,c=0,u=e.buffers(t,n),m=0,h=u.length;m<h;m++){var p=u[m];if(i+n>=p[0]&&i<=p[1])s=p[0],a=p[1],r=m;else{if(i+n<p[0]){l=p[0],o=p[1];break}i+n>p[1]&&(d=p[0],c=p[1])}}return{start:s,end:a,index:r,buffers:u,nextStart:l,nextEnd:o,prevStart:d,prevEnd:c,currentTime:i,behind:i-s,remaining:a?a-i:0,length:e.totalLength&&e.totalLength(u)}}},{key:"isBuffered",value:function(t,i){if(t){var n=e.get(t);if(null!=n&&n.length)for(var s=0;s<n.length;s++)if(i>=n.start(s)&&i<=n.end(s))return!0}return!1}}]),e}(),yi="undefined"!=typeof window,Zi={MANIFEST:"manifest",NETWORK:"network",NETWORK_TIMEOUT:"network_timeout",NETWORK_FORBIDDEN:"network_forbidden",NETWORK_NOTFOUND:"network_notfound",NETWROK_RANGE_NOT_SATISFIABLE:"network_range_not_satisfiable",DEMUX:"demux",REMUX:"remux",MEDIA:"media",DRM:"drm",OTHER:"other",RUNTIME:"runtime",SUB_TYPES:{FLV:"FLV",HLS:"HLS",MP4:"MP4",FMP4:"FMP4",MSE_ADD_SB:"MSE_ADD_SB",MSE_APPEND_BUFFER:"MSE_APPEND_BUFFER",MSE_OTHER:"MSE_OTHER",MSE_FULL:"MSE_FULL",MSE_CHANGE_TYPE:"MSE_CHANGE_TYPE",OPTION:"OPTION",DASH:"DASH",LICENSE:"LICENSE",CUSTOM_LICENSE:"CUSTOM_LICENSE",MSE_HIJACK:"MSE_HIJACK",EME_HIJACK:"EME_HIJACK",SIDX:"SIDX",NO_CANPLAY_ERROR:"NO_CANPLAY_ERROR",BUFFERBREAK_ERROR:"BUFFERBREAK_ERROR",WAITING_TIMEOUT_ERROR:"WAITING_TIMEOUT_ERROR",MEDIA_ERR_ABORTED:"MEDIA_ERR_ABORTED",MEDIA_ERR_NETWORK:"MEDIA_ERR_NETWORK",MEDIA_ERR_DECODE:"MEDIA_ERR_DECODE",MEDIA_ERR_SRC_NOT_SUPPORTED:"MEDIA_ERR_SRC_NOT_SUPPORTED",MEDIA_ERR_CODEC_NOT_SUPPORTED:"MEDIA_ERR_CODEC_NOT_SUPPORTED",MEDIA_ERR_URL_EMPTY:"MEDIA_ERR_URL_EMPTY"}},bi=(G(di={},Zi.MANIFEST,{HLS:1100,DASH:1200}),G(di,Zi.NETWORK,2100),G(di,Zi.NETWORK_TIMEOUT,2101),G(di,Zi.NETWORK_FORBIDDEN,2103),G(di,Zi.NETWORK_NOTFOUND,2104),G(di,Zi.NETWROK_RANGE_NOT_SATISFIABLE,2116),G(di,Zi.DEMUX,{FLV:3100,HLS:3200,MP4:3300,FMP4:3400,SIDX:3410}),G(di,Zi.REMUX,{FMP4:4100,MP4:4200}),G(di,Zi.MEDIA,{MEDIA_ERR_ABORTED:5101,MEDIA_ERR_NETWORK:5102,MEDIA_ERR_DECODE:5103,MEDIA_ERR_SRC_NOT_SUPPORTED:5104,MEDIA_ERR_CODEC_NOT_SUPPORTED:5105,MEDIA_ERR_URL_EMPTY:5106,MSE_ADD_SB:5200,MSE_APPEND_BUFFER:5201,MSE_OTHER:5202,MSE_FULL:5203,MSE_HIJACK:5204,MSE_CHANGE_TYPE:5205,EME_HIJACK:5301}),G(di,Zi.DRM,{LICENSE:7100,CUSTOM_LICENSE:7200}),G(di,Zi.OTHER,8e3),G(di,Zi.RUNTIME,{NO_CANPLAY_ERROR:9001,BUFFERBREAK_ERROR:9002,WAITING_TIMEOUT_ERROR:9003}),di),fi=function(e){v(i,e);var t=w(i);function i(e,n,s,a,r){var l;return X(this,i),(l=t.call(this,r||(null==s?void 0:s.message))).errorType=e===Zi.NETWORK_TIMEOUT?Zi.NETWORK:e,l.originError=s,l.ext=a,l.errorCode=bi[e][n]||bi[e],l.errorMessage=l.message,l.errorCode||(l.errorType=Zi.OTHER,l.errorCode=bi[l.errorType]),l}return W(i,null,[{key:"create",value:function(e,t,n,s,a){return e instanceof i?e:(e instanceof Error&&(n=e,e=""),e||(e=Zi.OTHER),new i(e,t,n,s,a))}},{key:"network",value:function(e){var t;return new i(null!=e&&e.isTimeout?Zi.NETWORK_TIMEOUT:Zi.NETWORK,null,e instanceof Error?e:null,{url:null==e?void 0:e.url,response:null==e?void 0:e.response,httpCode:null==e||null===(t=e.response)||void 0===t?void 0:t.status})}}]),i}(Y(Error)),Xi={DEBUG:1,LOG:2,WARN:3,ERROR:4},Li=["Boolean","Number","String","Undefined","Null","Date","Object"],Wi=function(){function e(t,i){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]"),this.logCacheLevel=(null==i?void 0:i.logCacheLevel)||3,this.logMaxSize=(null==i?void 0:i.logMaxSize)||204800,this.logSize=0,this.logTextArray=[]}return W(e,[{key:"debug",value:function(){for(var t,i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];this.logCache.apply(this,[Xi.DEBUG].concat(n)),e.disabled||(t=console).debug.apply(t,["[".concat(Gi(),"]"),this._prefix].concat(n))}},{key:"log",value:function(){for(var t,i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];this.logCache.apply(this,[Xi.LOG].concat(n)),e.disabled||(t=console).log.apply(t,["[".concat(Gi(),"]"),this._prefix].concat(n))}},{key:"warn",value:function(){for(var t,i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];this.logCache.apply(this,[Xi.WARN].concat(n)),e.disabled||(t=console).warn.apply(t,["[".concat(Gi(),"]"),this._prefix].concat(n))}},{key:"error",value:function(){for(var t,i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];this.logCache.apply(this,[Xi.ERROR].concat(n)),e.disabled||(t=console).error.apply(t,["[".concat(Gi(),"]"),this._prefix].concat(n))}},{key:"logCache",value:function(e){if(!(e<this.logCacheLevel)){var t="";try{for(var i=arguments.length,n=new Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=n.map((function(e){return xi(e)}));t="[".concat(Gi(),"]")+this._prefix+JSON.stringify(a)}catch(l){return}if(e>=this.logCacheLevel&&(this.logSize+=t.length,this.logTextArray.push(t)),this.logSize>this.logMaxSize){var r=this.logTextArray.shift();this.logSize-=r.length}}}},{key:"getLogCache",value:function(){var e=this.logTextArray.join("\n");return this.reset(),e}},{key:"reset",value:function(){this.logTextArray=[],this.logSize=0}},{key:"table",value:function(){var t;e.disabled||(console.group(this._prefix),(t=console).table.apply(t,arguments),console.groupEnd())}},{key:"setLogLevel",value:function(e){this.logCacheLevel=e}}],[{key:"enable",value:function(){e.disabled=!1}},{key:"disable",value:function(){e.disabled=!0}}]),e}();function Gi(){return(new Date).toLocaleString()}function vi(e){if("object"!==Z(e))return e;var t=Object.prototype.toString.call(e).slice(8,-1);switch(t){case"Array":case"Uint8Array":case"ArrayBuffer":return t+"["+e.length+"]";case"Object":return"{}";default:return t}}function xi(e,t,i){i||(i=1),t||(t=2);var n={};if(!e||"object"!==Z(e))return e;var s=Object.prototype.toString.call(e).slice(8,-1);if(!Li.includes(s))return s;if(!(i>t)){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(i===t?n[a]=vi(e[a]):"object"===Z(e[a])?n[a]=xi(e[a],t,i+1):n[a]=e[a]);return n}}function Si(){var e,t,i=new Promise((function(i,n){e=i,t=n}));return i.used=!1,i.resolve=function(){return i.used=!0,e.apply(void 0,arguments)},i.reject=function(){return i.used=!0,t.apply(void 0,arguments)},i}function gi(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}}G(Wi,"disabled",!0);var Vi=function(e){try{return JSON.stringify(e)}catch(t){return""}};function Yi(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];try{return yi?e&&"undefined"!=typeof ManagedMediaSource?ManagedMediaSource:window.MediaSource:null}catch(t){}}function ki(e){return/ManagedMediaSource/gi.test(Object.prototype.toString.call(e))}var Ri="appendBuffer",Ti="removeBuffer",wi="updateDuration",Mi=function(){function e(t,i){var n=this;X(this,e),G(this,"media",null),G(this,"mediaSource",null),G(this,"_openPromise",Si()),G(this,"_queue",Object.create(null)),G(this,"_sourceBuffer",Object.create(null)),G(this,"_mseFullFlag",{}),G(this,"_st",0),G(this,"_opst",0),G(this,"_logger",null),G(this,"_config",null),G(this,"_url",null),G(this,"_onStartStreaming",(function(){n._logger.debug("startstreaming")})),G(this,"_onEndStreaming",(function(){n._logger.debug("endstreaming")})),G(this,"_onSBUpdateEnd",(function(e){var t=n._queue[e];if(t){var i=t[0];if((null==i?void 0:i.opName)!==wi&&t.shift(),i){var s,a,r=gi()-n._opst;n._logger.debug("UpdateEnd(".concat(e,"/").concat(i.opName,")"),Vi(function(e){var t=[];if(e instanceof TimeRanges)for(var i=0;i<e.length;i++)t.push({start:e.start(i),end:e.end(i)});return t}(null===(s=n._sourceBuffer[e])||void 0===s?void 0:s.buffered)),r,i.context),i.promise.resolve({name:i.opName,context:i.context,costtime:r});var l=null===(a=i.context)||void 0===a?void 0:a.callback;l&&"function"==typeof l&&l(i.context),n._startQueue(e)}}})),G(this,"_onSBUpdateError",(function(e,t){var i=n._queue[e];if(i){var s=i[0];s&&(n._logger.error("UpdateError",e,s.opName,s.context),s.promise.reject(new fi(Zi.MEDIA,Zi.SUB_TYPES.MSE_APPEND_BUFFER,t)))}})),this._config=Object.assign(e.getDefaultConfig(),i),t&&this.bindMedia(t),this._logger=new Wi("MSE"),this._config.openLog&&Wi.enable()}var t,i,n;return W(e,[{key:"isOpened",get:function(){var e;return"open"===(null===(e=this.mediaSource)||void 0===e?void 0:e.readyState)}},{key:"hasOpTasks",get:function(){var e=this,t=!1;return Object.keys(this._queue).forEach((function(i){var n=e._queue[i];Array.isArray(n)&&(t||(t=n.length>0))})),t}},{key:"url",get:function(){return this._url}},{key:"duration",get:function(){var e;return(null===(e=this.mediaSource)||void 0===e?void 0:e.duration)||-1}},{key:"isEnded",get:function(){return!!this.mediaSource&&"ended"===this.mediaSource.readyState}},{key:"streaming",get:function(){return!ki(this.mediaSource)||this.mediaSource.streaming}},{key:"isFull",value:function(t){return t?this._mseFullFlag[t]:this._mseFullFlag[e.VIDEO]}},{key:"updateDuration",value:function(e){var t=this,i=this.mediaSource&&this.mediaSource.duration>e;if(this.mediaSource&&this.mediaSource.duration>e){var n=0;if(Object.keys(this._sourceBuffer).forEach((function(e){try{n=Math.max(t.bufferEnd(e)||0,n)}catch(i){}})),e<n)return Promise.resolve()}return this._enqueueBlockingOp((function(){t.isEnded?t._logger.debug("setDuration but ended"):t.mediaSource&&(t.mediaSource.duration=e,t._logger.debug("setDuration",e))}),wi,{isReduceDuration:i})}},{key:"open",value:function(){var e=this;if(this._openPromise.used&&!this.isOpened&&this.mediaSource){var t=this.mediaSource;t.addEventListener("sourceopen",(function i(){var n=gi()-e._st;e._logger.debug("sourceopen",n),t.removeEventListener("sourceopen",i),e._openPromise.resolve({costtime:n})})),this._openPromise=Si()}return this._openPromise}},{key:"bindMedia",value:(n=f(y().mark((function e(t){var i,n,s,a,r=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.mediaSource&&!this.media){e.next=3;break}return e.next=3,this.unbindMedia();case 3:if(i=Yi(this._config.preferMMS),t&&i){e.next=6;break}throw new Error("Param media or MediaSource does not exist");case 6:return this.media=t,n=this.mediaSource=new i,s=ki(n),this._st=gi(),a=function e(){var i=gi()-r._st;r._logger.debug("sourceopen"),n.removeEventListener("sourceopen",e),URL.revokeObjectURL(t.src),r._openPromise.resolve({costtime:i})},n.addEventListener("sourceopen",a),s&&(n.addEventListener("startstreaming",this._onStartStreaming),n.addEventListener("endstreaming",this._onEndStreaming)),this._url=URL.createObjectURL(n),t.src=this._url,t.disableRemotePlayback=s,e.abrupt("return",this._openPromise);case 17:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"unbindMedia",value:(i=f(y().mark((function e(){var t,i,n,s=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._openPromise.used||this._openPromise.resolve(),t=this.mediaSource){if(Object.keys(this._queue).forEach((function(e){var t=s._queue[e];t&&t.forEach((function(e){var t,i;return null===(t=e.promise)||void 0===t||null===(i=t.resolve)||void 0===i?void 0:i.call(t)}))})),i=!!this.media&&this.media.readyState>=1,n="open"===t.readyState,i&&n)try{t.endOfStream()}catch(a){}Object.keys(this._sourceBuffer).forEach((function(e){try{t.removeSourceBuffer(s._sourceBuffer[e])}catch(a){}})),ki(t)&&(t.removeEventListener("startstreaming",this._onStartStreaming),t.removeEventListener("endstreaming",this._onEndStreaming))}if(this.media){this.media.disableRemotePlayback=!1,this.media.removeAttribute("src");try{this.media.load()}catch(a){}this.media=null}this.mediaSource=null,this._openPromise=Si(),this._queue=Object.create(null),this._sourceBuffer=Object.create(null);case 8:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"createSource",value:function(e,t){if(!this._sourceBuffer[e]&&this.mediaSource){var i;try{i=this._sourceBuffer[e]=this.mediaSource.addSourceBuffer(t)}catch(n){throw new fi(Zi.MEDIA,Zi.SUB_TYPES.MSE_ADD_SB,n)}i.mimeType=t,i.addEventListener("updateend",this._onSBUpdateEnd.bind(this,e)),i.addEventListener("error",this._onSBUpdateError.bind(this,e))}}},{key:"changeType",value:function(e,t){var i=this,n=this._sourceBuffer[e];return this.mediaSource&&n&&n.mimeType!==t?"function"!=typeof n.changeType?Promise.reject(new fi(Zi.MEDIA,Zi.SUB_TYPES.MSE_CHANGE_TYPE,new Error("changeType is not a function"))):this._enqueueOp(e,(function(){try{n.changeType(t)}catch(s){throw new fi(Zi.MEDIA,Zi.SUB_TYPES.MSE_CHANGE_TYPE,s)}n.mimeType=t,i._onSBUpdateEnd(e)}),"changeType",{mimeType:t}):Promise.resolve()}},{key:"createOrChangeSource",value:function(e,t){return this.createSource(e,t),this.changeType(e,t)}},{key:"append",value:function(e,t,i){var n=this;return t&&t.byteLength&&this._sourceBuffer[e]?this._enqueueOp(e,(function(){var s;n.mediaSource&&!n.media.error&&(n._logger.debug("MSE APPEND START",i),n._opst=gi(),null===(s=n._sourceBuffer[e])||void 0===s||s.appendBuffer(t))}),Ri,i):Promise.resolve()}},{key:"remove",value:function(e,t,i,n){var s=this,a=!1;return this._mseFullFlag[e]&&(a=!0),this._enqueueOp(e,(function(){if(s.mediaSource&&!s.media.error){var a=s._sourceBuffer[e];t>=i||!a?s._onSBUpdateEnd(e):(s._opst=gi(),s._logger.debug("MSE REMOVE START",e,t,i,n),a.remove(t,i))}}),Ti,n,a)}},{key:"clearBuffer",value:function(e,t){var i,n=this;return Object.keys(this._sourceBuffer).forEach((function(s){i=n.remove(s,e,t)})),i||Promise.resolve()}},{key:"clearAllBuffer",value:function(){var e,t=this;return Object.keys(this._sourceBuffer).forEach((function(i){var n=t._sourceBuffer[i];e=t.remove(i,0,pi.end(pi.get(n)))})),e}},{key:"clearOpQueues",value:function(e,t){var i;this._logger.debug("MSE clearOpQueue START");var n=this._queue[e];if(t&&n)this._queue[e]=[];else if(n&&n[e]&&!(n.length<5)){var s=[];n.forEach((function(e){e.context&&e.context.isinit&&s.push(e)})),this._queue[e]=n.slice(0,2),s.length>0&&(i=this._queue[e]).push.apply(i,s)}}},{key:"endOfStream",value:function(e){var t=this;return this.mediaSource&&"open"===this.mediaSource.readyState?this._enqueueBlockingOp((function(){var i=t.mediaSource;i&&"open"===i.readyState&&(t._logger.debug("MSE endOfStream START"),e?i.endOfStream(e):i.endOfStream())}),"endOfStream"):Promise.resolve()}},{key:"setLiveSeekableRange",value:function(e,t){var i=this.mediaSource;e<0||t<e||null==i||!i.setLiveSeekableRange||"open"!==i.readyState||i.setLiveSeekableRange(e,t)}},{key:"getSourceBuffer",value:function(e){return this._sourceBuffer[e]}},{key:"buffered",value:function(e){return pi.get(this._sourceBuffer[e])}},{key:"bufferStart",value:function(e){return pi.start(this.buffered(e))}},{key:"bufferEnd",value:function(e){return pi.end(this.buffered(e))}},{key:"_enqueueOp",value:function(e,t,i,n,s){var a=this;if(!this.mediaSource)return Promise.resolve();var r=this._queue[e]=this._queue[e]||[],l={exec:t,promise:Si(),opName:i,context:n};return s?(r.splice(0,0,l),this._mseFullFlag[e]=!1,this._startQueue(e)):r.push(l),this.isOpened||this.isEnded?1===r.length&&this._startQueue(e):this._openPromise.then((function(){1===r.length&&a._startQueue(e)})),l.promise}},{key:"_enqueueBlockingOp",value:(t=f(y().mark((function e(t,i,n){var s,a,r=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.mediaSource){e.next=2;break}return e.abrupt("return",Promise.resolve());case 2:if((s=Object.keys(this._sourceBuffer)).length){e.next=5;break}return e.abrupt("return",t());case 5:return a=[],s.forEach((function(e){var t=r._queue[e],s=Si();a.push(s),t.push({exec:function(){s.resolve()},promise:s,opName:i,context:n}),1===t.length&&r._startQueue(e)})),e.abrupt("return",Promise.all(a).then((function(){try{return t()}finally{s.forEach((function(e){var t=r._queue[e],i=r._sourceBuffer[e];null==t||t.shift(),i&&i.updating||r._startQueue(e)}))}})));case 8:case"end":return e.stop()}}),e,this)}))),function(e,i,n){return t.apply(this,arguments)})},{key:"_startQueue",value:function(e){var t=this._queue[e];if(t){var i=t[0];if(i&&!this._mseFullFlag[e])try{i.exec()}catch(a){var n,s;if(a&&a.message&&a.message.indexOf("SourceBuffer is full")>=0)this._mseFullFlag[e]=!0,i.context&&"object"===Z(i.context)&&(i.context.isFull=!0),this._logger.error("[MSE error], context,",i.context," ,name,",i.opName,",err,SourceBuffer is full"),null==i||null===(n=i.promise)||void 0===n||n.reject(new fi(Zi.MEDIA,Zi.SUB_TYPES.MSE_FULL,a));else this._logger.error(a),null==i||null===(s=i.promise)||void 0===s||s.reject(a.constructor===fi?a:new fi(Zi.MEDIA,Zi.SUB_TYPES.MSE_OTHER,a)),t.shift(),this._startQueue(e)}}}},{key:"setTimeoffset",value:function(e,t,i){var n=this;return this._enqueueOp(e,(function(){t<0&&(t+=.001),n._sourceBuffer[e].timestampOffset=t,n._onSBUpdateEnd(e)}),"setTimeoffset",i)}},{key:"abort",value:function(e,t){var i=this;return this.isOpened?this._enqueueOp(e,(function(){i._sourceBuffer[e].abort(),i._onSBUpdateEnd(e)}),"abort",t):Promise.resolve()}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'video/mp4; codecs="avc1.42E01E,mp4a.40.2"',t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=Yi(t);if(!i)return!1;try{return i.isTypeSupported(e)}catch(n){return this._logger.error(e,n),!1}}},{key:"isMMSOnly",value:function(){return"undefined"!=typeof ManagedMediaSource&&"undefined"==typeof MediaSource}},{key:"getDefaultConfig",value:function(){return{openLog:!1,preferMMS:!1}}}]),e}();G(Mi,"VIDEO","video"),G(Mi,"AUDIO","audio");var Ki="fetch",Ii="xhr",Ci="arraybuffer",Hi="text",Ni="json",zi=function(e){v(i,e);var t=w(i);function i(e,n,s,a){var r;return X(this,i),G(R(r=t.call(this,a)),"retryCount",0),G(R(r),"isTimeout",!1),G(R(r),"loaderType",Ki),G(R(r),"startTime",0),G(R(r),"endTime",0),G(R(r),"options",{}),r.url=e,r.request=n,r.response=s,r}return W(i)}(Y(Error)),Fi=Object.prototype.toString;function Ui(e){if("[object Object]"!==Fi.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function Ji(e){if(e&&null!==e[0]&&void 0!==e[0]&&(0!==e[0]||null!==e[1]&&void 0!==e[1])){var t="bytes="+e[0]+"-";return e[1]&&(t+=e[1]),t}}function ji(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Pi(e,t){if(e){if(!t)return e;var i,n=Object.keys(t).map((function(e){if(null!=(i=t[e]))return Array.isArray(i)?e+="[]":i=[i],i.map((function(t){var i;return i=t,"[object Date]"===Fi.call(i)?t=t.toISOString():function(e){return null!==e&&"object"===Z(e)}(t)&&(t=JSON.stringify(t)),"".concat(ji(e),"=").concat(ji(t))})).join("&")})).filter(Boolean).join("&");if(n){var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e}}function Ei(e,t,i,n,s,a,r,l,o,d,c){return s=null!=s?parseFloat(s):null,n=parseInt(n||"0",10),Number.isNaN(n)&&(n=0),{data:e,done:t,options:{range:o,vid:d,index:l,contentLength:n,age:s,startTime:a,firstByteTime:r,endTime:Date.now(),priOptions:c},response:i}}function Di(e,t){return Math.round(8*e*1e3/t/1024)}var Bi="real_time_speed",_i=2097152,Qi=function(e){v(n,e);var t,i=w(n);function n(){var e;return X(this,n),G(R(e=i.call(this)),"_abortController",null),G(R(e),"_timeoutTimer",null),G(R(e),"_reader",null),G(R(e),"_response",null),G(R(e),"_aborted",!1),G(R(e),"_index",-1),G(R(e),"_range",null),G(R(e),"_receivedLength",0),G(R(e),"_running",!1),G(R(e),"_logger",null),G(R(e),"_vid",""),G(R(e),"_firtstByte",0),G(R(e),"_onProcessMinLen",0),G(R(e),"_onCancel",null),G(R(e),"_priOptions",null),e}return W(n,[{key:"load",value:function(e){var t,i=this,n=e.url,s=e.vid,a=e.timeout,r=e.responseType,l=e.onProgress,o=e.index,d=e.onTimeout,c=e.onCancel,u=e.range,m=e.transformResponse,h=e.request,p=e.params,Z=e.logger,b=e.method,X=e.headers,L=e.body,W=e.mode,G=e.credentials,v=e.cache,x=e.redirect,S=e.referrer,g=e.referrerPolicy,V=e.onProcessMinLen,Y=e.priOptions,k=e.streamRes,R=e.firstMaxChunkSize;this._logger=Z,this._aborted=!1,this._onProcessMinLen=V,this._onCancel=c,this._abortController="undefined"!=typeof AbortController&&new AbortController,this._running=!0,this._index=o,this._range=u||[0,0],this._vid=s||n,this._priOptions=Y||{},this._firstMaxChunkSize=R;var T={method:b,headers:X,body:L,mode:W,credentials:G,cache:v,redirect:x,referrer:S,referrerPolicy:g,signal:null===(t=this._abortController)||void 0===t?void 0:t.signal},w=!1;clearTimeout(this._timeoutTimer),n=Pi(n,p);var M=Ji(u);M&&(X=h?h.headers:T.headers=T.headers||(Headers?new Headers:{}),Headers&&X instanceof Headers?X.append("Range",M):X.Range=M),a&&(this._timeoutTimer=setTimeout((function(){if(w=!0,i.cancel(),d){var e=new zi(n,T,null,"timeout");e.isTimeout=!0,d(e,{index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions})}}),a));var K=Date.now();return this._logger.debug("[fetch load start], index,",o,",range,",u),new Promise((function(e,t){(k?new Promise((function(e){e(k)})):fetch(h||n,h?void 0:T)).then(function(){var s=f(y().mark((function s(a){var d,c,h,p;return y().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:if(clearTimeout(i._timeoutTimer),i._response=a,!i._aborted&&i._running){s.next=4;break}return s.abrupt("return");case 4:if(m&&(a=m(a,n)||a),a.ok){s.next=7;break}throw new zi(n,T,a,"bad network response");case 7:if(d=Date.now(),r!==Hi){s.next=15;break}return s.next=11,a.text();case 11:c=s.sent,i._running=!1,s.next=37;break;case 15:if(r!==Ni){s.next=22;break}return s.next=18,a.json();case 18:c=s.sent,i._running=!1,s.next=37;break;case 22:if(!l){s.next=29;break}return i.resolve=e,i.reject=t,i._loadChunk(a,l,K,d),s.abrupt("return");case 29:return s.next=31,a.arrayBuffer();case 31:c=s.sent,c=new Uint8Array(c),i._running=!1,h=Date.now()-K,p=Di(c.byteLength,h),i.emit(Bi,{speed:p,len:c.byteLength,time:h,vid:i._vid,index:i._index,range:i._range,priOptions:i._priOptions});case 37:i._logger.debug("[fetch load end], index,",o,",range,",u),e(Ei(c,!0,a,a.headers.get("Content-Length"),a.headers.get("age"),K,d,o,u,i._vid,i._priOptions));case 39:case"end":return s.stop()}}),s)})));return function(e){return s.apply(this,arguments)}}()).catch((function(e){var s;clearTimeout(i._timeoutTimer),i._running=!1,i._aborted&&!w||((e=e instanceof zi?e:new zi(n,T,null,null===(s=e)||void 0===s?void 0:s.message)).startTime=K,e.endTime=Date.now(),e.isTimeout=w,e.options={index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions},t(e))}))}))}},{key:"cancel",value:(t=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._aborted){e.next=2;break}return e.abrupt("return");case 2:if(this._aborted=!0,this._running=!1,!this._response){e.next=14;break}if(e.prev=5,!this._reader){e.next=9;break}return e.next=9,this._reader.cancel();case 9:e.next=13;break;case 11:e.prev=11,e.t0=e.catch(5);case 13:this._response=this._reader=null;case 14:if(this._abortController){try{this._abortController.abort()}catch(t){}this._abortController=null}this._onCancel&&this._onCancel({index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions});case 16:case"end":return e.stop()}}),e,this,[[5,11]])}))),function(){return t.apply(this,arguments)})},{key:"_loadChunk",value:function(e,t,i,n){var s=this;if(!e.body||!e.body.getReader){this._running=!1;var a=new zi(e.url,"",e,"onProgress of bad response.body.getReader");return a.options={index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions},void this.reject(a)}this._onProcessMinLen>0&&(this._cache=new Uint8Array(_i),this._writeIdx=0);var r,l,o,d=this._reader=e.body.getReader(),c=function(){var a=f(y().mark((function a(){var u,m,h,p,Z,b,f,X,L,W;return y().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return l=Date.now(),a.prev=1,a.next=4,d.read();case 4:r=a.sent,o=Date.now(),a.next=13;break;case 8:return a.prev=8,a.t0=a.catch(1),o=Date.now(),s._aborted||(s._running=!1,a.t0.options={index:s._index,range:s._range,vid:s._vid,priOptions:s._priOptions},s.reject(a.t0)),a.abrupt("return");case 13:if(m=(null===(u=s._range)||void 0===u?void 0:u.length)>0?s._range[0]:0,h=m+s._receivedLength,!s._aborted){a.next=19;break}return s._running=!1,t(void 0,!1,{range:[h,h],vid:s._vid,index:s._index,startTime:l,endTime:o,st:i,firstByteTime:n,priOptions:s._priOptions},e),a.abrupt("return");case 19:p=r.value?r.value.byteLength:0,s._receivedLength+=p,s._logger.debug("【fetchLoader,onProgress call】,task,",s._range,", start,",h,", end,",m+s._receivedLength,", done,",r.done),s._onProcessMinLen>0?s._writeIdx+p>=s._onProcessMinLen||r.done?((Z=new Uint8Array(s._writeIdx+p)).set(s._cache.slice(0,s._writeIdx),0),p>0&&Z.set(r.value,s._writeIdx),s._writeIdx=0,s._logger.debug("【fetchLoader,onProgress enough】,done,",r.done,",len,",Z.byteLength,", writeIdx,",s._writeIdx)):p>0&&s._writeIdx+p<_i?(s._cache.set(r.value,s._writeIdx),s._writeIdx+=p,s._logger.debug("【fetchLoader,onProgress cache】,len,",p,", writeIdx,",s._writeIdx)):p>0&&(b=new Uint8Array(s._writeIdx+p+2048),s._logger.debug("【fetchLoader,onProgress extra start】,size,",s._writeIdx+p+2048,", datalen,",p,", writeIdx,",s._writeIdx),b.set(s._cache.slice(0,s._writeIdx),0),p>0&&b.set(r.value,s._writeIdx),s._writeIdx+=p,delete s._cache,s._cache=b,s._logger.debug("【fetchLoader,onProgress extra end】,len,",p,", writeIdx,",s._writeIdx)):Z=r.value,(Z&&Z.byteLength>0||r.done)&&(s._firstMaxChunkSize&&(s._firtstByte?s._cacheData&&((X=new Uint8Array(s._cacheData.byteLength+Z.byteLength)).set(s._cacheData,0),X.set(Z,s._cacheData.byteLength),Z=X,s._cacheData=null):(s._firtstByte++,f=Z.slice(0,s._firstMaxChunkSize),s._cacheData=Z.slice(s._firstMaxChunkSize),Z=f)),t(Z,r.done,{range:[s._range[0]+s._receivedLength-(Z?Z.byteLength:0),s._range[0]+s._receivedLength],vid:s._vid,index:s._index,startTime:l,endTime:o,st:i,firstByteTime:n,priOptions:s._priOptions},e)),r.done?(L=Date.now()-i,W=Di(s._receivedLength,L),s.emit(Bi,{speed:W,len:s._receivedLength,time:L,vid:s._vid,index:s._index,range:s._range,priOptions:s._priOptions}),s._running=!1,s._logger.debug("[fetchLoader onProgress end],task,",s._range,",done,",r.done),s.resolve(Ei(r,!0,e,e.headers.get("Content-Length"),e.headers.get("age"),i,n,s._index,s._range,s._vid,s._priOptions))):s._firstMaxChunkSize?setTimeout((function(){c()}),0):c();case 25:case"end":return a.stop()}}),a,null,[[1,8]])})));return function(){return a.apply(this,arguments)}}();c()}},{key:"receiveLen",get:function(){return this._receivedLength}},{key:"running",get:function(){return this._running},set:function(e){this._running=e}}],[{key:"isSupported",value:function(){return!("undefined"==typeof fetch)}}]),n}(j);var Oi=function(e){v(i,e);var t=w(i);function i(){var e;return X(this,i),G(R(e=t.call(this)),"_xhr",null),G(R(e),"_aborted",!1),G(R(e),"_timeoutTimer",null),G(R(e),"_range",null),G(R(e),"_receivedLength",0),G(R(e),"_url",null),G(R(e),"_onProgress",null),G(R(e),"_index",-1),G(R(e),"_headers",null),G(R(e),"_currentChunkSizeKB",384),G(R(e),"_timeout",null),G(R(e),"_xhr",null),G(R(e),"_withCredentials",null),G(R(e),"_startTime",-1),G(R(e),"_loadCompleteResolve",null),G(R(e),"_loadCompleteReject",null),G(R(e),"_runing",!1),G(R(e),"_logger",!1),G(R(e),"_vid",""),G(R(e),"_responseType",void 0),G(R(e),"_credentials",void 0),G(R(e),"_method",void 0),G(R(e),"_transformResponse",void 0),G(R(e),"_firstRtt",void 0),G(R(e),"_onCancel",null),G(R(e),"_priOptions",null),e}return W(i,[{key:"load",value:function(e){var t=this;clearTimeout(this._timeoutTimer),this._logger=e.logger,this._range=e.range,this._onProgress=e.onProgress,this._index=e.index,this._headers=e.headers,this._withCredentials="include"===e.credentials||"same-origin"===e.credentials,this._body=e.body||null,e.method&&(this._method=e.method),this._timeout=e.timeout||null,this._runing=!0,this._vid=e.vid||e.url,this._responseType=e.responseType,this._firstRtt=-1,this._onTimeout=e.onTimeout,this._onCancel=e.onCancel,this._request=e.request,this._priOptions=e.priOptions||{},this._logger.debug("【xhrLoader task】, range",this._range),this._url=Pi(e.url,e.params);var i=Date.now();return new Promise((function(e,i){t._loadCompleteResolve=e,t._loadCompleteReject=i,t._startLoad()})).catch((function(e){if(clearTimeout(t._timeoutTimer),t._runing=!1,!t._aborted)throw(e=e instanceof zi?e:new zi(t._url,t._request)).startTime=i,e.endTime=Date.now(),e.options={index:t._index,vid:t._vid,priOptions:t._priOptions},e}))}},{key:"_startLoad",value:function(){var e=null;if(this._responseType===Ci&&this._range&&this._range.length>1)if(this._onProgress){this._firstRtt=-1;var t=1024*this._currentChunkSizeKB,i=this._range[0]+this._receivedLength,n=this._range[1];t<this._range[1]-i&&(n=i+t),e=[i,n],this._logger.debug("[xhr_loader->],tast :",this._range,", SubRange, ",e)}else e=this._range,this._logger.debug("[xhr_loader->],tast :",this._range,", allRange, ",e);this._internalOpen(e)}},{key:"_internalOpen",value:function(e){var t=this;try{this._startTime=Date.now();var i=this._xhr=new XMLHttpRequest;i.open(this._method||"GET",this._url,!0),i.responseType=this._responseType,this._timeout&&(i.timeout=this._timeout),i.withCredentials=this._withCredentials,i.onload=this._onLoad.bind(this),i.onreadystatechange=this._onReadyStatechange.bind(this),i.onerror=function(e){var i,n,s;t._running=!1;var a=new zi(t._url,t._request,null==e||null===(i=e.currentTarget)||void 0===i?void 0:i.response,"xhr.onerror.status:"+(null==e||null===(n=e.currentTarget)||void 0===n?void 0:n.status)+",statusText,"+(null==e||null===(s=e.currentTarget)||void 0===s?void 0:s.statusText));a.options={index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions},t._loadCompleteReject(a)},i.ontimeout=function(e){t.cancel();var i=new zi(t._url,t._request,{status:408},"timeout");t._onTimeout&&(i.isTimeout=!0,t._onTimeout(i,{index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions})),i.options={index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions},t._loadCompleteReject(i)};var n=this._headers||{},s=Ji(e);s&&(n.Range=s),n&&Object.keys(n).forEach((function(e){i.setRequestHeader(e,n[e])})),this._logger.debug("[xhr.send->] tast,",this._range,",load sub range, ",e),i.send(this._body)}catch(a){a.options={index:this._index,range:e,vid:this._vid,priOptions:this._priOptions},this._loadCompleteReject(a)}}},{key:"_onReadyStatechange",value:function(e){2===e.target.readyState&&this._firstRtt<0&&(this._firstRtt=Date.now())}},{key:"_onLoad",value:function(e){var t,i=e.target.status;if(i<200||i>299){var n=new zi(this._url,null,p(p({},e.target.response),{},{status:i}),"bad response,status:"+i);return n.options={index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions},this._loadCompleteReject(n)}var s,a=null,r=!1,l=(null===(t=this._range)||void 0===t?void 0:t.length)>0?this._range[0]:0;if(this._responseType===Ci){var o,d=new Uint8Array(e.target.response);if(s=l+this._receivedLength,d&&d.byteLength>0){this._receivedLength+=d.byteLength;var c=Date.now()-this._startTime,u=Di(this._receivedLength,c);this.emit(Bi,{speed:u,len:this._receivedLength,time:c,vid:this._vid,index:this._index,range:[s,l+this._receivedLength],priOptions:this._priOptions})}a=d,r=!((null===(o=this._range)||void 0===o?void 0:o.length)>1&&this._range[1]&&this._receivedLength<this._range[1]-this._range[0]),this._logger.debug("[xhr load done->], tast :",this._range,", start",s,"end ",l+this._receivedLength,",dataLen,",d?d.byteLength:0,",receivedLength",this._receivedLength,",index,",this._index,", done,",r)}else r=!0,a=e.target.response;var m={ok:i>=200&&i<300,status:i,statusText:this._xhr.statusText,url:this._xhr.responseURL,headers:this._getHeaders(this._xhr),body:this._xhr.response};this._transformResponse&&(m=this._transformResponse(m,this._url)||m),this._onProgress&&this._onProgress(a,r,{index:this._index,vid:this._vid,range:[s,l+this._receivedLength],startTime:this._startTime,endTime:Date.now(),priOptions:this._priOptions},m),r?(this._runing=!1,this._loadCompleteResolve&&this._loadCompleteResolve(Ei(this._onProgress?null:a,r,m,m.headers["content-length"],m.headers.age,this._startTime,this._firstRtt,this._index,this._range,this._vid,this._priOptions))):this._startLoad()}},{key:"cancel",value:function(){if(!this._aborted)return this._aborted=!0,this._runing=!1,K(x(i.prototype),"removeAllListeners",this).call(this),this._onCancel&&this._onCancel({index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions}),this._xhr?this._xhr.abort():void 0}},{key:"receiveLen",get:function(){return this._receivedLength}},{key:"running",get:function(){return this._running},set:function(e){this._running=e}},{key:"_getHeaders",value:function(e){var t,i={},n=z(e.getAllResponseHeaders().trim().split("\r\n"));try{for(n.s();!(t=n.n()).done;){var s=t.value.split(": ");i[s[0].toLowerCase()]=s.slice(1).join(": ")}}catch(a){n.e(a)}finally{n.f()}return i}}],[{key:"isSupported",value:function(){return"undefined"!=typeof XMLHttpRequest}}]),i}(j),Ai=["retry","retryDelay","onRetryError","transformError"],qi=function(){function e(t,i){X(this,e),this.promise=Si(),this.alive=!!i.onProgress,!i.logger&&(i.logger=new Wi("Loader")),this._loaderType=t,this._loader=t===Ki&&"undefined"!=typeof fetch?new Qi:new Oi,this._config=i,this._retryCount=0,this._retryTimer=null,this._canceled=!1,this._retryCheckFunc=i.retryCheckFunc,this._logger=i.logger}var t;return W(e,[{key:"exec",value:function(){var e=this,t=this._config,i=t.retry,n=t.retryDelay,s=t.onRetryError,a=t.transformError,r=k(t,Ai),l=function(){var t=f(y().mark((function t(){var o,d,c;return y().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,e._loader.load(r);case 3:o=t.sent,e.promise.resolve(o),t.next=27;break;case 7:if(t.prev=7,t.t0=t.catch(0),e._loader.running=!1,e._logger.debug("[task request catch err]",t.t0),!e._canceled){t.next=13;break}return t.abrupt("return");case 13:if(t.t0.loaderType=e._loaderType,t.t0.retryCount=e._retryCount,d=t.t0,a&&(d=a(d)||d),s&&e._retryCount>0&&s(d,e._retryCount,{index:r.index,vid:r.vid,range:r.range,priOptions:r.priOptions}),e._retryCount++,c=!0,e._retryCheckFunc&&(c=e._retryCheckFunc(t.t0)),!(c&&e._retryCount<=i)){t.next=26;break}return clearTimeout(e._retryTimer),e._logger.debug("[task request setTimeout],retry",e._retryCount,",retry range,",r.range),e._retryTimer=setTimeout(l,n),t.abrupt("return");case 26:e.promise.reject(d);case 27:case"end":return t.stop()}}),t,null,[[0,7]])})));return function(){return t.apply(this,arguments)}}();return l(),this.promise}},{key:"cancel",value:(t=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return clearTimeout(this._retryTimer),this._canceled=!0,this._loader.running=!1,e.abrupt("return",this._loader.cancel());case 4:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"running",get:function(){return this._loader&&this._loader.running}},{key:"loader",get:function(){return this._loader}}]),e}();function $i(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];if((t=t.filter(Boolean)).length<2)return t[0];var n=new Uint8Array(t.reduce((function(e,t){return e+t.byteLength}),0)),s=0;return t.forEach((function(e){n.set(e,s),s+=e.byteLength})),n}function en(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Promise((function(t){return setTimeout(t,e)}))}var tn=function(e){v(n,e);var t,i=w(n);function n(e){var t;return X(this,n),G(R(t=i.call(this,e)),"type",Ki),G(R(t),"_queue",[]),G(R(t),"_alive",[]),G(R(t),"_currentTask",null),G(R(t),"_finnalUrl",""),G(R(t),"_config",void 0),t._config=function(e){return p({loaderType:Ki,retry:0,retryDelay:0,timeout:0,request:null,onTimeout:void 0,onProgress:void 0,onRetryError:void 0,transformRequest:void 0,transformResponse:void 0,transformError:void 0,responseType:Hi,range:void 0,url:"",params:void 0,method:"GET",headers:{},body:void 0,mode:void 0,credentials:void 0,cache:void 0,redirect:void 0,referrer:void 0,referrerPolicy:void 0,integrity:void 0,onProcessMinLen:0},e)}(e),t._config.loaderType!==Ii&&Qi.isSupported()||(t.type=Ii),t.log=e.logger,t}return W(n,[{key:"isFetch",value:function(){return this.type===Ki}},{key:"load",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"string"!=typeof e&&e?i=e:i.url=e||i.url||this._config.url,(i=Object.assign({},this._config,i)).params&&(i.params=Object.assign({},i.params)),i.headers&&Ui(i.headers)&&(i.headers=Object.assign({},i.headers)),i.body&&Ui(i.body)&&(i.body=Object.assign({},i.body)),i.transformRequest&&(i=i.transformRequest(i)||i),i.logger=this.log;var n=new qi(this.type,i);return n.loader.on(Bi,(function(e){t.emit(Bi,e)})),this._queue.push(n),1!==this._queue.length||this._currentTask&&this._currentTask.running||this._processTask(),n.promise}},{key:"cancel",value:(t=f(y().mark((function e(){var t;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this._queue.map((function(e){return e.cancel()})).concat(this._alive.map((function(e){return e.cancel()}))),this._currentTask&&t.push(this._currentTask.cancel()),this._queue=[],this._alive=[],e.next=6,Promise.all(t);case 6:return e.next=8,en();case 8:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"_processTask",value:function(){var e=this;if(this._currentTask=this._queue.shift(),this._currentTask){this._currentTask.alive&&this._alive.push(this._currentTask);var t=this._currentTask.exec().catch((function(e){}));t&&"function"==typeof t.finally&&t.finally((function(){var t,i;null!==(t=e._currentTask)&&void 0!==t&&t.alive&&(null===(i=e._alive)||void 0===i?void 0:i.length)>0&&(e._alive=e._alive.filter((function(t){return t&&t!==e._currentTask}))),e._processTask()}))}}}],[{key:"isFetchSupport",value:function(){return Qi.isSupported()}}]),n}(j),nn={416:bi[Zi.NETWROK_RANGE_NOT_SATISFIABLE],403:bi[Zi.NETWORK_FORBIDDEN],404:bi[Zi.NETWORK_NOTFOUND],timeout:bi[Zi.NETWORK_TIMEOUT],"4xx":"".concat(bi[Zi.NETWORK],"4XX"),"5xx":"".concat(bi[Zi.NETWORK],"5XX"),networkError:bi[Zi.NETWORK],contentError:"".concat(bi[Zi.NETWORK],"contentError"),mse:bi[Zi.MEDIA][Zi.SUB_TYPES.MSE_OTHER],mseOpen:bi[Zi.MEDIA][Zi.SUB_TYPES.MSE_ADD_SB],mseAppend:bi[Zi.MEDIA][Zi.SUB_TYPES.MSE_APPEND_BUFFER],mse_hijack:bi[Zi.MEDIA][Zi.SUB_TYPES.MSE_HIJACK],eme_hijack:bi[Zi.MEDIA][Zi.SUB_TYPES.EME_HIJACK],metaError:bi[Zi.DEMUX][Zi.SUB_TYPES.MP4],muxError:bi[Zi.REMUX][Zi.SUB_TYPES.FMP4],other:bi[Zi.OTHER],waitTimeout:bi[Zi.RUNTIME][Zi.SUB_TYPES.BUFFERBREAK_ERROR],waitTimeoutWithHidden:bi[Zi.RUNTIME][Zi.SUB_TYPES.WAITING_TIMEOUT_ERROR],drm:bi[Zi.DRM][Zi.SUB_TYPES.LICENSE]},sn=Zi;var an=W((function e(t,i,n){X(this,e);var s=0,a=0;n&&n.range&&n.range.length>1&&(s=n.range[0],a=n.range[1]);var r=function(e){return nn[e]||e}(i);return{errorCode:r,errorType:t,errorMessage:(null==n?void 0:n.httpText)||(null==n?void 0:n.message),url:null==n?void 0:n.url,httpCode:i,version:hi,rangeStart:s,rangeEnd:a,ext:n,mediaError:{code:r,message:(null==n?void 0:n.httpText)||(null==n?void 0:n.message)}}})),rn=W((function e(t,i,n){return X(this,e),{errorCode:i,errorType:t,version:hi,errorMessage:n.msg,ext:n,mediaError:{code:i,message:n.msg}}})),ln={};ln.nowTime=function(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}},ln.concatData=function(e,t){var i=[],n=0;e&&i.push(e),t&&i.push(t),i.every((function(e){return e&&(n+=e.byteLength),!0}));var s=new Uint8Array(n),a=0;return i.every((function(e){return e&&(s.set(e,a),a+=e.byteLength),!0})),s};var on=W((function e(t,i){X(this,e),this.type="file",this.message=t,this.data=i})),dn=function(){function e(){X(this,e),G(this,"_data",Object.create(null))}return W(e,[{key:"set",value:function(e,t){this._data[e]=t}},{key:"get",value:function(e){return this._data[e]}},{key:"clear",value:function(){this._data=Object.create(null)}}]),e}();function cn(e,t){var i=e.trak;if(i&&i.length){var n=i.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),s=i.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(n||s){var a=[],r=[];if(t){var l=[],o=0,d=t.start+t.size;t.references.forEach((function(e,i){l.push({index:i,startTime:o,endTime:o+e.subsegment_duration/t.timescale,duration:e.subsegment_duration/t.timescale,range:[d,d+e.referenced_size],frames:[]}),o+=e.subsegment_duration/t.timescale,d+=e.referenced_size})),a=l,r=l}else{var c,u,m=function(t){return t?[{index:0,startTime:0,endTime:t.duration/t.timescale,duration:t.duration/t.timescale,range:[e.start+e.size,""],frames:[]}]:[]};r=m(e.mvhd.duration?e.mvhd:null===(c=n.mdia)||void 0===c?void 0:c.mdhd),a=m(e.mvhd.duration?e.mvhd:null===(u=s.mdia)||void 0===u?void 0:u.mdhd)}return{videoSegments:r,audioSegments:a}}}}function un(e,t){var i=e.trak;if(i&&i.length){var n=i.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),s=i.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(n||s){var a,r=[],l=[];if(n){var o,d,c,u=null===(o=n.mdia)||void 0===o||null===(d=o.minf)||void 0===d?void 0:d.stbl;if(!u)return;var m=null===(c=n.mdia.mdhd)||void 0===c?void 0:c.timescale,h=u.stts,p=u.stsc,y=u.stsz,Z=u.stco,b=u.stss,f=u.ctts;if(!(m&&h&&p&&y&&Z&&b))return;a=(r=mn(t,m,h,p,y,Z,b,f)).map((function(e){return e.duration}))}if(s){var X,L,W,G=null===(X=s.mdia)||void 0===X||null===(L=X.minf)||void 0===L?void 0:L.stbl;if(!G)return;var v=null===(W=s.mdia.mdhd)||void 0===W?void 0:W.timescale,x=G.stts,S=G.stsc,g=G.stsz,V=G.stco;if(!(v&&x&&S&&g&&V))return;l=mn(t,v,x,S,g,V,null,null,a)}return{videoSegments:r,audioSegments:l}}}}function mn(e,t,i,n,s,a,r,l,o){var d,c,u,m,h,p=[],y=[],Z=[],b=n.entries,f=a.entries,X=s.entrySizes,L=null==r?void 0:r.entries,W=null==l?void 0:l.entries;W&&(c=[],W.forEach((function(e){for(var t=e.count,i=e.offset,n=0;n<t;n++)c.push(i)}))),L&&(u={},L.forEach((function(e){u[e-1]=!0})));var G=0,v=0,x=0,S=0,g=0,V=null===(d=b[0])||void 0===d?void 0:d.samplesPerChunk,Y=b[1]?b[1].firstChunk-1:1/0,k=0,R=-1;i.entries.forEach((function(e){var t=e.count,i=e.delta;h=i;for(var n=0;n<t;n++)m={dts:k,startTime:G,duration:h,size:X[v]||s.sampleSize,offset:f[x]+g,index:v},L&&(m.keyframe=u[v],m.keyframe?(R++,y.push([m]),Z.push(m.duration)):(y[y.length-1].push(m),Z[y.length-1]+=m.duration),m.gopId=R),c&&v<c.length&&(m.pts=k+c[v]),0===v&&(m.pts=0),p.push(m),G+=h,k+=i,++v<V?g+=m.size:(x++,g=0,x>=Y&&(S++,Y=b[S+1]?b[S+1].firstChunk-1:1/0),V+=b[S].samplesPerChunk)}));var T=p.length;if(!T||r&&!p[0].keyframe)return[];var w,M=[],K=[],I=0,H=0,N=function(e){var i;w=K[K.length-1],M.push({index:M.length,startTime:(null===(i=M[M.length-1])||void 0===i?void 0:i.endTime)||K[0].startTime/t,endTime:(w.startTime+w.duration)/t,duration:e,range:[K[0].offset,w.offset+w.size],frames:K}),I=0,K=[]};if(r)for(var z=e*t,F=0,U=y.length;F<U;F++){var J;I+=Z[F],(J=K).push.apply(J,C(y[F])),F+1<U?(0===F||I>z)&&N(I/t):N(I/t)}else for(var j=(o=o||[])[0]||e,P=0;P<T;P++){K.push(p[P]);var E=(I+=p[P].duration)/t;(P+1>=T||E+H>=j)&&(H+=E-j,N(E),j=o[M.length]||e)}return M}function hn(e,t){var i="",n="",s=0,a=0,r=0,l=0,o=0,d=0,c=0;e.mvhd&&(o=e.mvhd.duration/e.mvhd.timescale);var u,m=e.trak;if(m){var h,p,y,Z,b,f,X,L,W,G,v,x,S,g,V,Y,k,R=m.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),T=m.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),w=null;if(R)if(w=null===(p=R.mdia)||void 0===p||null===(y=p.minf)||void 0===y||null===(Z=y.stbl)||void 0===Z?void 0:Z.stsd.entries[0])if(s=w.width,a=w.height,d=null===(b=R.mdia)||void 0===b||null===(f=b.mdhd)||void 0===f?void 0:f.timescale,i=null===(X=w.avcC||w.hvcC||w.av1C)||void 0===X?void 0:X.codec,"encv"===w.type)h=null===(L=w.sinf)||void 0===L||null===(W=L.schi)||void 0===W?void 0:W.tenc.default_KID;if(T)if(w=null===(G=T.mdia)||void 0===G||null===(v=G.minf)||void 0===v||null===(x=v.stbl)||void 0===x?void 0:x.stsd.entries[0])if(r=w.channelCount,l=("mp4a"===(u=w).type?u.sampleRate>0?u.sampleRate:u.esds.sampleRate:u.sampleRate)||0,n=null===(S=w.esds)||void 0===S?void 0:S.codec,c=null===(g=T.mdia)||void 0===g||null===(V=g.mdhd)||void 0===V?void 0:V.timescale,"enca"===w.type)h=h||(null===(Y=w.sinf)||void 0===Y||null===(k=Y.schi)||void 0===k?void 0:k.tenc.default_KID);return{kid:h?h.join(""):null,videoCodec:i,audioCodec:n,width:s,height:a,videoTimescale:d,audioChannelCount:r,audioSampleRate:l,duration:o,audioTimescale:c,moov:e,isFragmentMP4:t}}}function pn(e){return"number"==typeof e&&!Number.isNaN(e)}var yn=["vid","cache"],Zn=function(e){v(h,e);var t,i,n,s,a,r,l,o,d,c,u,m=w(h);function h(e){var t;X(this,h),G(R(t=m.call(this)),"vid",""),G(R(t),"url",""),G(R(t),"meta",{}),G(R(t),"downloadInfo",[]),G(R(t),"videoSegments",[]),G(R(t),"audioSegments",[]),G(R(t),"cache",null),G(R(t),"_currentSegmentIndex",-1),G(R(t),"_currentLoadingSegmentIndex",-1),G(R(t),"buffer",void 0),G(R(t),"_error",void 0),G(R(t),"_transformError",(function(e){return e})),t._config=p({vid:"",moovEnd:8e4,segmentDuration:2,maxDownloadInfoSize:30,responseType:"arraybuffer",cache:null},e);var i=t._config,n=i.vid,s=i.cache,a=k(i,yn);return t.cache=s||new dn,t.vid=n||a.url,t.url=a.url,a.transformError=t._transformError,t.logger=new Wi("MP4Loader_"+t.vid),e.openLog&&Wi.enable(),a.logger=t.logger,t._loader=new tn(a),t._loader.on(Bi,(function(e){t.emit(Bi,e)})),t}return W(h,[{key:"isMetaLoaded",get:function(){return this.videoSegments.length||this.audioSegments.length}},{key:"setCurrentSegment",value:function(e){pn(e)&&(this._currentSegmentIndex=e)}},{key:"isLastSegment",value:function(e){var t,i;return!!pn(e)&&e>=((null===(t=this.videoSegments[this.videoSegments.length-1])||void 0===t?void 0:t.index)||(null===(i=this.audioSegments[this.audioSegments.length-1])||void 0===i?void 0:i.index)||0)}},{key:"isSegmentLoading",value:function(e){return e===this._currentLoadingSegmentIndex}},{key:"changeUrl",value:(u=f(y().mark((function e(t){var i,n,s,a=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=a.length>1&&void 0!==a[1]?a[1]:t,n=a.length>2?a[2]:void 0,s=a.length>3?a[3]:void 0,e.next=5,this.reset(s);case 5:t&&(this.url=t),i&&(this.vid=i),n&&(this._config.moovEnd=n);case 8:case"end":return e.stop()}}),e,this)}))),function(e){return u.apply(this,arguments)})},{key:"getOrLoadMeta",value:(c=f(y().mark((function e(t){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isMetaLoaded){e.next=3;break}return e.next=3,this.loadMeta(t);case 3:return e.abrupt("return",this.meta);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return c.apply(this,arguments)})},{key:"loadMetaProcess",value:(d=f(y().mark((function e(t,i,n,s){var a,r,l,o,d=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=I(i,2),r=a[0],l=a[1],this._error=!1,this.logger.debug("[loadMetaProcess start], range,",[r,l]),o=function(){var e=f(y().mark((function e(i,a,o){var c,u,m,h,p,Z,b,X,L,W,G,v,x;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(d.meta&&null!=o&&o.range&&o.range.length>0&&o.range[1]>=l&&(a=!0,d.logger.debug("[loadMetaProcess],data done,setstate true,[",r,l,"]")),a&&null!=o&&o.range&&o.range.length>0&&o.range[1]<l&&(a=!1,d.logger.debug("[loadMetaProcess],data not done,setstate false,[",r,l,"]")),d.logger.debug("[loadMetaProcess],task,[",r,l,"], range,",o.range,",dataLen,",i?i.byteLength:void 0,", state,",a,",err,",d._error),!d._error&&i&&i.byteLength>0&&n(i,a,o),!d.meta.moov&&!d._error){e.next=6;break}return e.abrupt("return");case 6:if(!(i&&i.byteLength>0)){e.next=51;break}if(d.buffer=$i(d.buffer,i),c=Ae.findBox(d.buffer,["moov"])[0]){e.next=23;break}if(u=Ae.findBox(d.buffer,["mdat"])[0],!a){e.next=23;break}if(u){e.next=18;break}return d._error=!0,n(null,a,o,{err:"cannot find moov or mdat box"}),e.abrupt("return");case 18:return m=u.start+u.size,e.next=21,d.loadData([m,""],t,s);case 21:(h=e.sent)&&(c=Ae.findBox(h.data,["moov"])[0]);case 23:if(!(c&&a&&c.size>c.data.length)){e.next=27;break}return d.logger.debug("[loadMetaProcess],moov not all, range,",o.range[1],",dataLen,",d.buffer.byteLength,", state,",a),e.next=27,d.loadMetaProcess(t,[o.range[1],c.start+c.size-1],n);case 27:if(!(c&&c.size<=c.data.length)||d.meta.moov){e.next=51;break}if(p=Ae.moov(c)){e.next=33;break}return d._error=!0,n(null,a,o,{err:"cannot parse moov box"}),e.abrupt("return");case 33:if(Z=un(p,d._config.segmentDuration),b=function(){var e=f(y().mark((function e(i){var n,a;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(n=Ae.findBox(d.buffer,[i])[0])){e.next=11;break}if(!(n.size>n.data.length)){e.next=10;break}return e.next=5,d.loadData([n.start,n.start+n.size-1],t,s);case 5:if(!(a=e.sent)){e.next=8;break}return e.abrupt("return",Ae.findBox(a.data,[i])[0]);case 8:e.next=11;break;case 10:return e.abrupt("return",n);case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),X=!1,Z&&Z.videoSegments.length&&Z.audioSegments.length){e.next=41;break}return e.next=39,b("sidx");case 39:(L=e.sent)&&(W=Ae.sidx(L))&&(Z=cn(p,W),X=!0);case 41:if(Z){e.next=45;break}return d._error=!0,n(null,a,o,{err:"cannot parse segments"}),e.abrupt("return");case 45:d.meta=hn(p,X),v=(G=Z).videoSegments,x=G.audioSegments,d.videoSegments=v,d.audioSegments=x,d.logger.debug("[loadMetaProcess] moov ok"),n(void 0,a,{meta:{meta:d.meta,videoSegments:v,audioSegments:x}});case 51:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}(),e.next=6,this.loadData([r,l||this._config.moovEnd],t,p({onProgress:o},s));case 6:case"end":return e.stop()}}),e,this)}))),function(e,t,i,n){return d.apply(this,arguments)})},{key:"loadMeta",value:(o=f(y().mark((function e(t,i,n){var s,a,r,l,o,d,c,u,m,h,p,Z,b,f;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=[],this.logger.debug("[loadMeta start]"),e.next=4,this.loadData([0,i||this._config.moovEnd],t,n);case 4:if(a=e.sent){e.next=7;break}return e.abrupt("return");case 7:if(s.push(a),r=Ae.findBox(a.data,["moov"])[0]){e.next=23;break}if(l=Ae.findBox(a.data,["mdat"])[0]){e.next=13;break}throw new on("cannot find moov or mdat box",a.data);case 13:return o=l.start+l.size,e.next=16,this.loadData([o],t,n);case 16:if(a=e.sent){e.next=19;break}return e.abrupt("return");case 19:if(s.push(a),r=Ae.findBox(a.data,["moov"],o)[0]){e.next=23;break}throw new on("cannot find moov box",a.data);case 23:if(!(r.size>r.data.length)){e.next=31;break}return e.next=26,this.loadData([a.data.length,r.start+r.size-1],t,n);case 26:if(a=e.sent){e.next=29;break}return e.abrupt("return");case 29:s.push(a),r.data=$i(r.data,a.data);case 31:if(d=Ae.moov(r)){e.next=34;break}throw new on("cannot parse moov box",r.data);case 34:if(c=un(d,this._config.segmentDuration)){e.next=37;break}throw new on("cannot parse segments",r.data);case 37:return c.videoSegments.length&&c.audioSegments.length||(m=Ae.findBox(this.buffer,["moof"])[0],h=Ae.findBox(this.buffer,["sidx"])[0],m&&m.size<=m.data.length&&h&&(p=Ae.moof(m),u=Ae.sidx(h),p&&u&&(c=cn(d,u)))),this.meta=hn(d,u),b=(Z=c).videoSegments,f=Z.audioSegments,this.videoSegments=b,this.audioSegments=f,this.logger.debug("[load moov end!!!!!]"),e.abrupt("return",{meta:this.meta,videoSegments:b,audioSegments:f,responses:s});case 44:case"end":return e.stop()}}),e,this)}))),function(e,t,i){return o.apply(this,arguments)})},{key:"loadCacheMeta",value:function(e,t){var i=un(e.moov,this._config.segmentDuration),n=i.videoSegments,s=i.audioSegments;this.videoSegments=n,this.audioSegments=s,this._currentSegmentIndex=t,this.meta=e}},{key:"getSegmentByTime",value:function(e){var t,i;return this.videoSegments.length?(t=this.videoSegments.find((function(t){return t.startTime<=e&&t.endTime>e})))&&(i=this.audioSegments[t.index]):i=this.audioSegments.find((function(t){return t.startTime<=e&&t.endTime>e})),{video:t,audio:i}}},{key:"loadSegmentByTime",value:(l=f(y().mark((function e(t,i){var n,s,a,r,l,o=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=!(o.length>2&&void 0!==o[2])||o[2],s=o.length>3&&void 0!==o[3]?o[3]:{},this.isMetaLoaded){e.next=5;break}return e.next=5,this.loadMeta(i);case 5:return a=this.getSegmentByTime(t),r=a.video,l=a.audio,e.abrupt("return",this._loadSegment(r,l,i,n,s));case 7:case"end":return e.stop()}}),e,this)}))),function(e,t){return l.apply(this,arguments)})},{key:"loadNextSegment",value:(r=f(y().mark((function e(t){var i,n,s,a,r=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=!(r.length>1&&void 0!==r[1])||r[1],n=r.length>2&&void 0!==r[2]?r[2]:{},this.isMetaLoaded){e.next=5;break}return e.next=5,this.loadMeta();case 5:return s=this.videoSegments[this._currentSegmentIndex+1],a=this.audioSegments[this._currentSegmentIndex+1],e.abrupt("return",this._loadSegment(s,a,t,i,n));case 8:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"preload",value:(a=f(y().mark((function e(t){var i,n,s,a,r,l,o,d=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isMetaLoaded){e.next=3;break}return e.next=3,this.loadMeta(!0);case 3:if(t&&!(t<0)){e.next=5;break}return e.abrupt("return");case 5:if(i=this.getSegmentByTime(t),n=i.video,s=i.audio,a=Math.max((null==n?void 0:n.index)||0,(null==s?void 0:s.index)||0)){e.next=9;break}return e.abrupt("return");case 9:return r=this.videoSegments.slice(0,a),l=this.audioSegments.slice(0,a),o=function(){var e=f(y().mark((function e(t){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(t>a)){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,d._loadSegment(r[t],l[t],!0,!1);case 4:return e.next=6,o(t+1);case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),e.next=14,o(0);case 14:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"cancel",value:function(){return this._loader.cancel()}},{key:"reset",value:(s=f(y().mark((function e(){var t=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.length>0&&void 0!==t[0]&&t[0]){e.next=5;break}return this.logger.debug("[MP4loader reset func call loader.cancel]"),e.next=5,this._loader.cancel();case 5:this.vid=this.url="",this.meta={},this.downloadInfo=[],this.videoSegments=[],this.audioSegments=[],this._currentSegmentIndex=-1,this._currentLoadingSegmentIndex=-1;case 12:case"end":return e.stop()}}),e,this)}))),function(){return s.apply(this,arguments)})},{key:"destroy",value:(n=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.reset();case 2:this.cache.clear();case 3:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})},{key:"_loadSegment",value:(i=f(y().mark((function e(t,i,n,s,a){var r,l;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t||i){e.next=2;break}return e.abrupt("return");case 2:return r=(null==t?void 0:t.index)||(null==i?void 0:i.index)||0,this._currentLoadingSegmentIndex=r,e.prev=4,e.next=7,this.loadData([Math.min((null==t?void 0:t.range[0])||1/0,(null==i?void 0:i.range[0])||1/0),Math.max((null==t?void 0:t.range[1])||0,(null==i?void 0:i.range[1])||0)],n,a);case 7:l=e.sent;case 8:return e.prev=8,this._currentLoadingSegmentIndex=-1,e.finish(8);case 11:if(l){e.next=13;break}return e.abrupt("return");case 13:return s&&(this._currentSegmentIndex=r),l.video=t,l.audio=i,e.abrupt("return",l);case 17:case"end":return e.stop()}}),e,this,[[4,,8,11]])}))),function(e,t,n,s,a){return i.apply(this,arguments)})},{key:"loadData",value:(t=f(y().mark((function e(t,i,n){var s,a,r,l;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=this._getCacheKey(t),e.next=3,this.cache.get(s);case 3:if(a=e.sent){e.next=11;break}return l=n&&n.url?n.url:this.url,e.next=8,this._loader.load(l,p({range:t,vid:this.vid},n));case 8:r=e.sent,e.next=12;break;case 11:r={data:a,state:!0,options:{fromCache:!0,range:t,vid:this.vid}};case 12:if(r){e.next=14;break}return e.abrupt("return");case 14:return a||(r.data&&this.downloadInfo.push({startTime:r.startTime,endTime:r.endTime,size:r.data.byteLength,range:t}),this.downloadInfo&&this.downloadInfo.length>this._config.maxDownloadInfoSize&&(this.downloadInfo=this.downloadInfo.slice(-this._config.maxDownloadInfoSize))),e.abrupt("return",r);case 17:case"end":return e.stop()}}),e,this)}))),function(e,i,n){return t.apply(this,arguments)})},{key:"_getCacheKey",value:function(e){return(this.vid||this.url)+":"+e}}]),h}(j),bn=function(){try{return"undefined"!=typeof localStorage&&"setItem"in window.localStorage&&!!window.localStorage.setItem}catch(e){return!1}}()&&!function(){var e="_localstorage_support_test";try{return window.localStorage.setItem(e,!0),window.localStorage.removeItem(e),!1}catch(t){return!0}}(),fn=Xn();function Xn(){if(bn)try{return!!window.localStorage.getItem("playerlog")}catch(e){return!1}return!1}function Ln(e){for(var t,i=arguments.length,n=new Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];fn&&console.log&&(t=console).log.apply(t,["[logger]",ln.nowTime(),e].concat(n))}!function(){if(bn)try{return!!window.localStorage.getItem("playertestlog")}catch(e){return!1}}();var Wn="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihhPWEuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLGEpfXJldHVybiByfWZ1bmN0aW9uIHQodCl7Zm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dmFyIGE9bnVsbCE9YXJndW1lbnRzW3JdP2FyZ3VtZW50c1tyXTp7fTtyJTI/ZShPYmplY3QoYSksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kodCxlLGFbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOmUoT2JqZWN0KGEpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGsoYS5rZXkpLGEpfX1mdW5jdGlvbiBuKGUsdCxyKXtyZXR1cm4gdCYmYShlLnByb3RvdHlwZSx0KSxyJiZhKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBpKGUsdCxyKXtyZXR1cm4odD1rKHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuKG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuKHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBjKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4obD1jKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1bbnVsbF07YS5wdXNoLmFwcGx5KGEsdCk7dmFyIG49bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZSxhKSk7cmV0dXJuIHImJnUobixyLnByb3RvdHlwZSksbn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCl7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX1mdW5jdGlvbiBkKGUpe3ZhciB0PWMoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPW8oZSk7aWYodCl7dmFyIG49byh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLG4pfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZih0aGlzLHIpfX1mdW5jdGlvbiBoKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1vKGUpKTspO3JldHVybiBlfWZ1bmN0aW9uIHAoKXtyZXR1cm4gcD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIGE9aChlLHQpO2lmKGEpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSx0KTtyZXR1cm4gbi5nZXQ/bi5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTpuLnZhbHVlfX0scC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBhLG4saSxzLG89W10sdT0hMCxjPSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47dT0hMX1lbHNlIGZvcig7ISh1PShhPWkuY2FsbChyKSkuZG9uZSkmJihvLnB1c2goYS52YWx1ZSksby5sZW5ndGghPT10KTt1PSEwKTt9Y2F0Y2gobCl7Yz0hMCxuPWx9ZmluYWxseXt0cnl7aWYoIXUmJm51bGwhPXIucmV0dXJuJiYocz1yLnJldHVybigpLE9iamVjdChzKSE9PXMpKXJldHVybn1maW5hbGx5e2lmKGMpdGhyb3cgbn19cmV0dXJuIG99fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB5KGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBnKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBtKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBnKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLGE9bmV3IEFycmF5KHQpO3I8dDtyKyspYVtyXT1lW3JdO3JldHVybiBhfWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX12YXIgYj0idmlkZW8iLF89ImF1ZGlvIix3PSJtZXRhZGF0YSIseD0iYXYxIixTPSJhdmMiLEQ9ImhldmMiLEE9ImFhYyIsVD0iZzcxMTBhIixFPSJnNzExMG0iLEI9Im9wdXMiLFU9Im1wMyIsQz0iTEFSR0VfQVZfU0hJRlQiLFA9IkxBUkdFX1ZJREVPX0dBUCIsST0iTEFSR0VfVklERU9fR0FQX0JFVFdFRU5fQ0hVTksiLE09IkxBUkdFX0FVRElPX0dBUCIsej0iQVVESU9fRklMTEVEIixPPSJBVURJT19EUk9QUEVEIixSPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSxpKHRoaXMsImlkIiwxKSxpKHRoaXMsInR5cGUiLGIpLGkodGhpcywiY29kZWNUeXBlIixTKSxpKHRoaXMsInBpZCIsLTEpLGkodGhpcywiaHZjQyIsdm9pZCAwKSxpKHRoaXMsImNvZGVjIiwiIiksaSh0aGlzLCJ0aW1lc2NhbGUiLDApLGkodGhpcywiZm9ybWF0VGltZXNjYWxlIiwwKSxpKHRoaXMsInNlcXVlbmNlTnVtYmVyIiwwKSxpKHRoaXMsImJhc2VNZWRpYURlY29kZVRpbWUiLDApLGkodGhpcywiYmFzZUR0cyIsMCksaSh0aGlzLCJkdXJhdGlvbiIsMCksaSh0aGlzLCJ3YXJuaW5ncyIsW10pLGkodGhpcywic2FtcGxlcyIsW10pLGkodGhpcywicHBzIixbXSksaSh0aGlzLCJzcHMiLFtdKSxpKHRoaXMsInZwcyIsW10pLGkodGhpcywiZnBzTnVtIiwwKSxpKHRoaXMsImZwc0RlbiIsMCksaSh0aGlzLCJzYXJSYXRpbyIsW10pLGkodGhpcywid2lkdGgiLDApLGkodGhpcywiaGVpZ2h0IiwwKSxpKHRoaXMsIm5hbFVuaXRTaXplIiw0KSxpKHRoaXMsInByZXNlbnQiLCExKSxpKHRoaXMsImlzVmlkZW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJpc0F1ZGlvRW5jcnlwdGlvbiIsITEpLGkodGhpcywiaXNWaWRlbyIsITApLGkodGhpcywibGFzdEtleUZyYW1lRHRzIiwwKSxpKHRoaXMsImtpZCIsbnVsbCksaSh0aGlzLCJwc3NoIixudWxsKSxpKHRoaXMsImV4dCIsdm9pZCAwKX1yZXR1cm4gbihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlTnVtYmVyPXRoaXMud2lkdGg9dGhpcy5oZWlnaHQ9dGhpcy5mcHNEZW49dGhpcy5mcHNOdW09dGhpcy5kdXJhdGlvbj10aGlzLmJhc2VNZWRpYURlY29kZVRpbWU9dGhpcy50aW1lc2NhbGU9MCx0aGlzLmNvZGVjPSIiLHRoaXMucHJlc2VudD0hMSx0aGlzLnBpZD0tMSx0aGlzLnBwcz1bXSx0aGlzLnNwcz1bXSx0aGlzLnZwcz1bXSx0aGlzLnNhclJhdGlvPVtdLHRoaXMuc2FtcGxlcz1bXSx0aGlzLndhcm5pbmdzPVtdLHRoaXMuaHZjQz1udWxsfX0se2tleToiZmlyc3REdHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXMubGVuZ3RoP3RoaXMuc2FtcGxlc1swXS5kdHM6bnVsbH19LHtrZXk6ImZpcnN0UHRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYW1wbGVzLmxlbmd0aD90aGlzLnNhbXBsZXNbMF0ucHRzOm51bGx9fSx7a2V5OiJzYW1wbGVzRHVyYXRpb24iLGdldDpmdW5jdGlvbigpe2lmKHRoaXMuc2FtcGxlcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5zYW1wbGVzWzBdLHQ9dGhpcy5zYW1wbGVzW3RoaXMuc2FtcGxlcy5sZW5ndGgtMV07cmV0dXJuIHQuZHRzLWUuZHRzK3QuZHVyYXRpb259cmV0dXJuIDB9fSx7a2V5OiJleGlzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIS9hdjAxLy50ZXN0KHRoaXMuY29kZWMpfHwhISh0aGlzLnBwcy5sZW5ndGgmJnRoaXMuc3BzLmxlbmd0aCYmdGhpcy5jb2RlYyl9fSx7a2V5OiJoYXNTYW1wbGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnNhbXBsZXMubGVuZ3RofX0se2tleToiaXNFbmNyeXB0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZpZGVvRW5jcnlwdGlvbn19XSksZX0oKSxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSxpKHRoaXMsImlkIiwyKSxpKHRoaXMsInR5cGUiLF8pLGkodGhpcywiY29kZWNUeXBlIixBKSxpKHRoaXMsInBpZCIsLTEpLGkodGhpcywiY29kZWMiLCIiKSxpKHRoaXMsImNvbnRhaW5lciIsIiIpLGkodGhpcywic2VxdWVuY2VOdW1iZXIiLDApLGkodGhpcywic2FtcGxlRHVyYXRpb24iLDApLGkodGhpcywidGltZXNjYWxlIiwwKSxpKHRoaXMsImZvcm1hdFRpbWVzY2FsZSIsMCksaSh0aGlzLCJiYXNlTWVkaWFEZWNvZGVUaW1lIiwwKSxpKHRoaXMsImR1cmF0aW9uIiwwKSxpKHRoaXMsIndhcm5pbmdzIixbXSksaSh0aGlzLCJzYW1wbGVzIixbXSksaSh0aGlzLCJiYXNlRHRzIiwwKSxpKHRoaXMsInNhbXBsZVNpemUiLDE2KSxpKHRoaXMsInNhbXBsZVJhdGUiLDApLGkodGhpcywiY2hhbm5lbENvdW50IiwwKSxpKHRoaXMsIm9iamVjdFR5cGUiLDApLGkodGhpcywic2FtcGxlUmF0ZUluZGV4IiwwKSxpKHRoaXMsInBhcnNlZENvZGVjIixudWxsKSxpKHRoaXMsImNvbmZpZyIsW10pLGkodGhpcywicHJlc2VudCIsITEpLGkodGhpcywiaXNWaWRlb0VuY3J5cHRpb24iLCExKSxpKHRoaXMsImlzQXVkaW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJraWQiLG51bGwpLGkodGhpcywiZXh0Iix2b2lkIDApfXJldHVybiBuKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VOdW1iZXI9MCx0aGlzLnRpbWVzY2FsZT0wLHRoaXMuc2FtcGxlRHVyYXRpb249MCx0aGlzLnNhbXBsZVJhdGU9MCx0aGlzLmNoYW5uZWxDb3VudD0wLHRoaXMuYmFzZU1lZGlhRGVjb2RlVGltZT0wLHRoaXMucHJlc2VudD0hMSx0aGlzLnBpZD0tMSx0aGlzLmNvZGVjPSIiLHRoaXMuc2FtcGxlcz1bXSx0aGlzLmNvbmZpZz1bXSx0aGlzLndhcm5pbmdzPVtdfX0se2tleToiZXhpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5zYW1wbGVSYXRlfHwhdGhpcy5jaGFubmVsQ291bnR8fCF0aGlzLmNvZGVjJiYhdGhpcy5jb250YWluZXJ8fHRoaXMuY29kZWNUeXBlIT09QSYmdGhpcy5jb2RlY1R5cGUhPT1UJiZ0aGlzLmNvZGVjVHlwZSE9PUUmJnRoaXMuY29kZWNUeXBlIT09QiYmdGhpcy5jb2RlY1R5cGUhPT1VKX19LHtrZXk6Imhhc1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc2FtcGxlcy5sZW5ndGh9fSx7a2V5OiJpc0VuY3J5cHRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQXVkaW9FbmNyeXB0aW9ufX0se2tleToiZmlyc3REdHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXMubGVuZ3RoP3RoaXMuc2FtcGxlc1swXS5kdHM6bnVsbH19LHtrZXk6ImZpcnN0UHRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYW1wbGVzLmxlbmd0aD90aGlzLnNhbXBsZXNbMF0ucHRzOm51bGx9fSx7a2V5OiJzYW1wbGVzRHVyYXRpb24iLGdldDpmdW5jdGlvbigpe2lmKHRoaXMuc2FtcGxlcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5zYW1wbGVzWzBdLHQ9dGhpcy5zYW1wbGVzW3RoaXMuc2FtcGxlcy5sZW5ndGgtMV07cmV0dXJuIHQuZHRzLWUuZHRzK3QuZHVyYXRpb259cmV0dXJuIDB9fV0pLGV9KCksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSxpKHRoaXMsImZsYWciLHt9KSxpKHRoaXMsImtleWZyYW1lIiwhMSksaSh0aGlzLCJnb3BJZCIsMCksaSh0aGlzLCJkdXJhdGlvbiIsMCksaSh0aGlzLCJzaXplIiwwKSxpKHRoaXMsInVuaXRzIixbXSksaSh0aGlzLCJjaHJvbWFGb3JtYXQiLDQyMCksdGhpcy5vcmlnaW5QdHM9dGhpcy5wdHM9dCx0aGlzLm9yaWdpbkR0cz10aGlzLmR0cz1hLG4mJih0aGlzLnVuaXRzPW4pfXJldHVybiBuKGUsW3trZXk6ImN0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHRzLXRoaXMuZHRzfX0se2tleToic2V0VG9LZXlmcmFtZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmtleWZyYW1lPSEwLHRoaXMuZmxhZy5kZXBlbmRzT249Mix0aGlzLmZsYWcuaXNOb25TeW5jU2FtcGxlPTB9fV0pLGV9KCksRj1uKChmdW5jdGlvbiBlKHQsYSxuLHMpe3IodGhpcyxlKSxpKHRoaXMsImR1cmF0aW9uIiwxMDI0KSxpKHRoaXMsImZsYWciLHtkZXBlbmRzT246Mixpc05vblN5bmNTYW1wbGU6MH0pLGkodGhpcywia2V5ZnJhbWUiLCEwKSx0aGlzLm9yaWdpblB0cz10aGlzLnB0cz10aGlzLmR0cz10LHRoaXMuZGF0YT1hLHRoaXMuc2l6ZT1hLmJ5dGVMZW5ndGgsdGhpcy5zYW1wbGVPZmZzZXQ9cyxuJiYodGhpcy5kdXJhdGlvbj1uKX0pKSxOPW4oKGZ1bmN0aW9uIGUodCxhKXtyKHRoaXMsZSksaSh0aGlzLCJ0aW1lIiwwKSx0aGlzLmRhdGE9dCx0aGlzLm9yaWdpblB0cz10aGlzLnB0cz1hfSkpLGo9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KE4pLEc9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KE4pLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLGkodGhpcywiaWQiLDMpLGkodGhpcywidHlwZSIsdyksaSh0aGlzLCJ0aW1lc2NhbGUiLDApLGkodGhpcywiZmx2U2NyaXB0U2FtcGxlcyIsW10pLGkodGhpcywic2VpU2FtcGxlcyIsW10pfXJldHVybiBuKGUsW3trZXk6ImV4aXN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZmx2U2NyaXB0U2FtcGxlcy5sZW5ndGgmJiF0aGlzLnNlaVNhbXBsZXMubGVuZ3RofHwhdGhpcy50aW1lc2NhbGUpfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy50aW1lc2NhbGU9MCx0aGlzLmZsdlNjcmlwdFNhbXBsZXM9W10sdGhpcy5zZWlTYW1wbGVzPVtdfX0se2tleToiaGFzU2FtcGxlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZmx2U2NyaXB0U2FtcGxlcy5sZW5ndGgmJiF0aGlzLnNlaVNhbXBsZXMubGVuZ3RoKX19XSksZX0oKSxLPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZihyKHRoaXMsZSksaSh0aGlzLCJfYnl0ZXNBdmFpbGFibGUiLHZvaWQgMCksaSh0aGlzLCJfYml0c0F2YWlsYWJsZSIsMCksaSh0aGlzLCJfd29yZCIsMCksIXQpdGhyb3cgbmV3IEVycm9yKCJFeHBHb2xvbWIgZGF0YSBwYXJhbXMgaXMgcmVxdWlyZWQiKTt0aGlzLl9kYXRhPXQsdGhpcy5fYnl0ZXNBdmFpbGFibGU9dC5ieXRlTGVuZ3RoLHRoaXMuX2J5dGVzQXZhaWxhYmxlJiZ0aGlzLl9sb2FkV29yZCgpfXJldHVybiBuKGUsW3trZXk6ImJpdHNBdmFpbGFibGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9iaXRzQXZhaWxhYmxlfX0se2tleToiX2xvYWRXb3JkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2RhdGEuYnl0ZUxlbmd0aC10aGlzLl9ieXRlc0F2YWlsYWJsZSx0PU1hdGgubWluKDQsdGhpcy5fYnl0ZXNBdmFpbGFibGUpO2lmKDA9PT10KXRocm93IG5ldyBFcnJvcigiTm8gYnl0ZXMgYXZhaWxhYmxlIik7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoNCk7ci5zZXQodGhpcy5fZGF0YS5zdWJhcnJheShlLGUrdCkpLHRoaXMuX3dvcmQ9bmV3IERhdGFWaWV3KHIuYnVmZmVyKS5nZXRVaW50MzIoMCksdGhpcy5fYml0c0F2YWlsYWJsZT04KnQsdGhpcy5fYnl0ZXNBdmFpbGFibGUtPXR9fSx7a2V5OiJza2lwQml0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fYml0c0F2YWlsYWJsZT5lKXRoaXMuX3dvcmQ8PD1lLHRoaXMuX2JpdHNBdmFpbGFibGUtPWU7ZWxzZXtlLT10aGlzLl9iaXRzQXZhaWxhYmxlO3ZhciB0PU1hdGguZmxvb3IoZS84KTtlLT04KnQsdGhpcy5fYnl0ZXNBdmFpbGFibGUtPXQsdGhpcy5fbG9hZFdvcmQoKSx0aGlzLl93b3JkPDw9ZSx0aGlzLl9iaXRzQXZhaWxhYmxlLT1lfX19LHtrZXk6InJlYWRCaXRzIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlPjMyKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYWQgbW9yZSB0aGFuIDMyIGJpdHMiKTt2YXIgdD1NYXRoLm1pbih0aGlzLl9iaXRzQXZhaWxhYmxlLGUpLHI9dGhpcy5fd29yZD4+PjMyLXQ7cmV0dXJuIHRoaXMuX2JpdHNBdmFpbGFibGUtPXQsdGhpcy5fYml0c0F2YWlsYWJsZT4wP3RoaXMuX3dvcmQ8PD10OnRoaXMuX2J5dGVzQXZhaWxhYmxlPjAmJnRoaXMuX2xvYWRXb3JkKCksKHQ9ZS10KT4wJiZ0aGlzLl9iaXRzQXZhaWxhYmxlP3I8PHR8dGhpcy5yZWFkQml0cyh0KTpyfX0se2tleToic2tpcExaIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO2ZvcihlPTA7ZTx0aGlzLl9iaXRzQXZhaWxhYmxlOysrZSlpZigwIT0odGhpcy5fd29yZCYyMTQ3NDgzNjQ4Pj4+ZSkpcmV0dXJuIHRoaXMuX3dvcmQ8PD1lLHRoaXMuX2JpdHNBdmFpbGFibGUtPWUsZTtyZXR1cm4gdGhpcy5fbG9hZFdvcmQoKSxlK3RoaXMuc2tpcExaKCl9fSx7a2V5OiJza2lwVUVHIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2tpcEJpdHMoMSt0aGlzLnNraXBMWigpKX19LHtrZXk6InJlYWRVRUciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5za2lwTFooKTtyZXR1cm4gdGhpcy5yZWFkQml0cyhlKzEpLTF9fSx7a2V5OiJyZWFkRUciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVUVHKCk7cmV0dXJuIDEmZT8xK2U+Pj4xOi0xKihlPj4+MSl9fSx7a2V5OiJyZWFkQm9vbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMucmVhZEJpdHMoMSl9fSx7a2V5OiJyZWFkVUJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZEJpdHMoOCl9fSx7a2V5OiJza2lwU2NhbGluZ0xpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD04LHI9OCxhPTA7YTxlO2ErKykwIT09ciYmKHI9KHQrdGhpcy5yZWFkRUcoKSsyNTYpJTI1NiksdD0wPT09cj90OnJ9fV0pLGV9KCkscT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cih0aGlzLGUpLHRoaXMubmFtZT10fHwiIix0aGlzLl9wcmVmaXg9IlsiLmNvbmNhdCh0aGlzLm5hbWUsIl0iKX1yZXR1cm4gbihlLFt7a2V5OiJ3YXJuIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2lmKCFlLmRpc2FibGVkKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyKSxuPTA7bjxyO24rKylhW25dPWFyZ3VtZW50c1tuXTsodD1jb25zb2xlKS53YXJuLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fV0sW3trZXk6ImVuYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSExfX0se2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSEwfX1dKSxlfSgpO2kocSwiZGlzYWJsZWQiLCEwKTt2YXIgVz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJkZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxhPXQsbj0wLGk9dC5sZW5ndGg7bjxpOylpZihhW25dPDEyOClyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhW25dKSksKytuO2Vsc2V7aWYoYVtuXTwxOTIpO2Vsc2UgaWYoYVtuXTwyMjQpe2lmKGUuX2NoZWNrQ29udGludWF0aW9uKGEsbiwxKSl7dmFyIHM9KDMxJmFbbl0pPDw2fDYzJmFbbisxXTtpZihzPj0xMjgpe3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDY1NTM1JnMpKSxuKz0yO2NvbnRpbnVlfX19ZWxzZSBpZihhW25dPDI0MCl7aWYoZS5fY2hlY2tDb250aW51YXRpb24oYSxuLDIpKXt2YXIgbz0oMTUmYVtuXSk8PDEyfCg2MyZhW24rMV0pPDw2fDYzJmFbbisyXTtpZihvPj0yMDQ4JiY1NTI5NiE9KDYzNDg4Jm8pKXtyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzNSZvKSksbis9Mztjb250aW51ZX19fWVsc2UgaWYoYVtuXTwyNDgmJmUuX2NoZWNrQ29udGludWF0aW9uKGEsbiwzKSl7dmFyIHU9KDcmYVtuXSk8PDE4fCg2MyZhW24rMV0pPDwxMnwoNjMmYVtuKzJdKTw8Nnw2MyZhW24rM107aWYodT42NTUzNiYmdTwxMTE0MTEyKXt1LT02NTUzNixyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh1Pj4+MTB8NTUyOTYpKSxyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMDIzJnV8NTYzMjApKSxuKz00O2NvbnRpbnVlfX1yLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzMykpLCsrbn1yZXR1cm4gci5qb2luKCIiKX19LHtrZXk6Il9jaGVja0NvbnRpbnVhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPWU7aWYodCtyPGEubGVuZ3RoKXtmb3IoO3ItLTspaWYoMTI4IT0oMTkyJmFbKyt0XSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9fV0pLGV9KCksWD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyxZPVgmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb2NhbGVMb3dlckNhc2UoKSxRPVgmJi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS8udGVzdChZKSxaPVgmJlkuaW5jbHVkZXMoImZpcmVmb3giKSxKPVgmJlkuaW5jbHVkZXMoImFuZHJvaWQiKTtmdW5jdGlvbiAkKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07dD10LmZpbHRlcihCb29sZWFuKTt2YXIgYT1uZXcgVWludDhBcnJheSh0LnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LmJ5dGVMZW5ndGh9KSwwKSksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2Euc2V0KGUsbiksbis9ZS5ieXRlTGVuZ3RofSkpLGF9dmFyIGVlPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIHRlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihlW3RdPDw4KSsoZVt0KzFdfHwwKX1mdW5jdGlvbiByZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4oZVt0XTw8MjQ+Pj4wKSsoZVt0KzFdPDwxNikrKGVbdCsyXTw8OCkrKGVbdCszXXx8MCl9ZnVuY3Rpb24gYWUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuIHJlKGUsdCkqZWUrcmUoZSx0KzQpfWZ1bmN0aW9uIG5lKGUpe2Zvcih2YXIgdCxyPSJhdmMxLiIsYT0wO2E8MzthKyspKHQ9ZVthXS50b1N0cmluZygxNikpLmxlbmd0aDwyJiYodD0iMCIuY29uY2F0KHQpKSxyKz10O3JldHVybiByfWZ1bmN0aW9uIGllKGUpe3ZhciB0PSIiO2lmKGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9ZnVuY3Rpb24oZSl7cmV0dXJuKCIwIitOdW1iZXIoZSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMikudG9VcHBlckNhc2UoKX0oZSl9KSksdC5sZW5ndGg8PTMyKWZvcih2YXIgcj0zMi10Lmxlbmd0aCxhPTA7YTxyO2ErKyl0Kz0iMCI7cmV0dXJuIHR9ZnVuY3Rpb24gc2UoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD1bXSxyPSIiLGE9MDthPGUubGVuZ3RoO2ErKylhJTImJihyPWVbYS0xXStlW2FdLHQucHVzaChwYXJzZUludChyLDE2KSkscj0iIik7cmV0dXJuIHR9cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZSwxNil9KSl9ZnVuY3Rpb24gb2UoZSx0KXtyZXR1cm4gTnVtYmVyKGUrIi4iK3QpfXZhciB1ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJnZXRSYXRlSW5kZXhCeVJhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLkZSRVEuaW5kZXhPZih0KX19LHtrZXk6InBhcnNlQURUUyIsdmFsdWU6ZnVuY3Rpb24odCxyKXtmb3IodmFyIGE9dC5sZW5ndGgsbj0wO24rMjxhJiYoMjU1IT09dFtuXXx8MjQwIT0oMjQ2JnRbbisxXSkpOyluKys7aWYoIShuPj1hKSl7dmFyIGk9bixzPVtdLG89KDYwJnRbbisyXSk+Pj4yLHU9ZS5GUkVRW29dO2lmKCF1KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzYW1wbGluZyBpbmRleDogIi5jb25jYXQobykpO2Zvcih2YXIgYyxsLGY9MSsoKDE5MiZ0W24rMl0pPj4+NiksZD0oMSZ0W24rMl0pPDwyfCgxOTImdFtuKzNdKT4+PjYsaD1lLl9nZXRDb25maWcobyxkLGYpLHA9aC5jb25maWcsdj1oLmNvZGVjLHk9MCxtPWUuZ2V0RnJhbWVEdXJhdGlvbih1KTtuKzc8YTspaWYoMjU1PT09dFtuXSYmMjQwPT0oMjQ2JnRbbisxXSkpe2lmKCEobD0oMyZ0W24rM10pPDwxMXx0W24rNF08PDN8KDIyNCZ0W24rNV0pPj41KXx8YS1uPGwpYnJlYWs7Yz0yKigxJn50W24rMV0pLHMucHVzaCh7cHRzOnIreSptLGRhdGE6dC5zdWJhcnJheShuKzcrYyxuK2wpfSkseSsrLG4rPWx9ZWxzZSBuKys7cmV0dXJue3NraXA6aSxyZW1haW5pbmc6bj49YT92b2lkIDA6dC5zdWJhcnJheShuKSxmcmFtZXM6cyxzYW1wbGluZ0ZyZXF1ZW5jeUluZGV4Om8sc2FtcGxlUmF0ZTp1LG9iamVjdFR5cGU6ZixjaGFubmVsQ291bnQ6ZCxjb2RlYzp2LGNvbmZpZzpwLG9yaWdpbkNvZGVjOiJtcDRhLjQwLiIuY29uY2F0KGYpfX19fSx7a2V5OiJwYXJzZUF1ZGlvU3BlY2lmaWNDb25maWciLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoKXt2YXIgcj10WzBdPj4+MyxhPSg3JnRbMF0pPDwxfHRbMV0+Pj43LG49KDEyMCZ0WzFdKT4+PjMsaT1lLkZSRVFbYV07aWYoaSl7dmFyIHM9ZS5fZ2V0Q29uZmlnKGEsbixyKTtyZXR1cm57c2FtcGxpbmdGcmVxdWVuY3lJbmRleDphLHNhbXBsZVJhdGU6aSxvYmplY3RUeXBlOnIsY2hhbm5lbENvdW50Om4sY29uZmlnOnMuY29uZmlnLGNvZGVjOnMuY29kZWMsb3JpZ2luQ29kZWM6Im1wNGEuNDAuIi5jb25jYXQocil9fX19fSx7a2V5OiJnZXRGcmFtZUR1cmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06OWU0O3JldHVybiAxMDI0KnQvZX19LHtrZXk6Il9nZXRDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxuLGk9W107cmV0dXJuIFo/ZT49Nj8oYT01LG49ZS0zKTooYT0yLG49ZSk6Sj8oYT0yLG49ZSk6KGE9NSxuPWUsZT49Nj9uPWUtMzoxPT09dCYmKGE9MixuPWUpKSxpWzBdPWE8PDMsaVswXXw9KDE0JmUpPj4xLGlbMV09KDEmZSk8PDcsaVsxXXw9dDw8Myw1PT09YSYmKGlbMV18PSgxNCZuKT4+MSxpWzJdPSgxJm4pPDw3LGlbMl18PTgsaVszXT0wKSx7Y29uZmlnOmksY29kZWM6Im1wNGEuNDAuIi5jb25jYXQoYSl9fX0se2tleToiZ2V0U2lsZW50RnJhbWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIm1wNGEuNDAuMiI9PT1lKXtpZigxPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDM1LDEyOF0pO2lmKDI9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMzMsMCw3MywxNDQsMiwyNSwwLDM1LDEyOF0pO2lmKDM9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMCwyMDAsMCwxMjgsMzIsMTMyLDEsMzgsNjQsOCwxMDAsMCwxNDJdKTtpZig0PT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTI4LDQ0LDEyOCw4LDIsNTZdKTtpZig1PT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTMwLDQ4LDQsMTUzLDAsMzMsMTQ0LDIsNTZdKTtpZig2PT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTMwLDQ4LDQsMTUzLDAsMzMsMTQ0LDIsMCwxNzgsMCwzMiw4LDIyNF0pfWVsc2V7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFsxLDY0LDM0LDEyOCwxNjMsNzgsMjMwLDEyOCwxODYsOCwwLDAsMCwyOCw2LDI0MSwxOTMsMTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTRdKTtpZigyPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzEsNjQsMzQsMTI4LDE2Myw5NCwyMzAsMTI4LDE4Niw4LDAsMCwwLDAsMTQ5LDAsNiwyNDEsMTYxLDEwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDk0XSk7aWYoMz09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFsxLDY0LDM0LDEyOCwxNjMsOTQsMjMwLDEyOCwxODYsOCwwLDAsMCwwLDE0OSwwLDYsMjQxLDE2MSwxMCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5NF0pfX19XSksZX0oKTtpKHVlLCJGUkVRIixbOTZlMyw4ODIwMCw2NGUzLDQ4ZTMsNDQxMDAsMzJlMywyNGUzLDIyMDUwLDE2ZTMsMTJlMywxMTAyNSw4ZTMsNzM1MF0pO3ZhciBjZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ieXRlTGVuZ3RoLTEscj0wO2Rve2lmKDAhPT1lW3RdKWJyZWFrO3IrKyx0LS19d2hpbGUodD4wKTtyPj0zJiYoZT1lLnN1YmFycmF5KDAsdCsxKSk7Zm9yKHZhciBhPWUubGVuZ3RoLG49MixpPTA7bnVsbCE9PWVbbl0mJnZvaWQgMCE9PWVbbl0mJjEhPT1lW25dOyluKys7aWYoKGk9KytuKzIpPj1hKXJldHVybltdO2Zvcih2YXIgcz1bXTtpPGE7KXN3aXRjaChlW2ldKXtjYXNlIDA6aWYoMCE9PWVbaS0xXSl7aSs9MjticmVha31pZigwIT09ZVtpLTJdKXtpKys7YnJlYWt9aWYoaTxhLTEmJjEhPT1lW2krMV0pe2krKzticmVha31uIT09aS0yJiZzLnB1c2goZS5zdWJhcnJheShuLGktMikpO2Rve2krK313aGlsZSgxIT09ZVtpXSYmaTxhKTtpPShuPWkrMSkrMjticmVhaztjYXNlIDE6aWYoMCE9PWVbaS0xXXx8MCE9PWVbaS0yXSl7aSs9MzticmVha31uIT09aS0yJiZzLnB1c2goZS5zdWJhcnJheShuLGktMikpLGk9KG49aSsxKSsyO2JyZWFrO2RlZmF1bHQ6aSs9M31yZXR1cm4gbjxhJiZzLnB1c2goZS5zdWJhcnJheShuKSksc319LHtrZXk6InBhcnNlQXZjQyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7aWYoIShlLmxlbmd0aDw0KSl7Zm9yKHZhciByLGE9ZS5sZW5ndGgsbj1bXSxpPTA7aSt0PGE7KWlmKHI9cmUoZSxpKSwzPT09dCYmKHI+Pj49OCksaSs9dCxyKXtpZihpK3I+YSlicmVhaztuLnB1c2goZS5zdWJhcnJheShpLGkrcikpLGkrPXJ9cmV0dXJuIG59fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLGE9dD8yOjEsbj0wLGk9MCxzPSIiOzI1NT09PWVbYV07KW4rPTI1NSxhKys7Zm9yKG4rPWVbYSsrXTsyNTU9PT1lW2FdOylpKz0yNTUsYSsrO2lmKGkrPWVbYSsrXSw1PT09biYmcj5hKzE2KWZvcih2YXIgbz0wO288MTY7bysrKXMrPWVbYV0udG9TdHJpbmcoMTYpLGErKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KGEsYStpKSx0eXBlOm4sc2l6ZTppLHV1aWQ6c319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgscj1bXSxhPTE7YTx0LTI7KTA9PT1lW2FdJiYwPT09ZVthKzFdJiYzPT09ZVthKzJdPyhyLnB1c2goYSsyKSxhKz0yKTphKys7aWYoIXIubGVuZ3RoKXJldHVybiBlO3ZhciBuPXQtci5sZW5ndGgsaT1uZXcgVWludDhBcnJheShuKSxzPTA7Zm9yKGE9MDthPG47cysrLGErKylzPT09clswXSYmKHMrKyxyLnNoaWZ0KCkpLGlbYV09ZVtzXTtyZXR1cm4gaX19XSksZX0oKSxsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDcpKXtmb3IodmFyIHIsYSxuPTErKDMmdFs0XSksaT1bXSxzPVtdLG89Nix1PTMxJnRbNV0sYz0wO2M8dTtjKyspaWYoYT10W29dPDw4fHRbbysxXSxvKz0yLGEpe3ZhciBsPXQuc3ViYXJyYXkobyxvK2EpO28rPWEsaS5wdXNoKGwpLHJ8fChyPWUucGFyc2VTUFMoY2UucmVtb3ZlRVBCKGwpKSl9dmFyIGYsZD10W29dO28rKztmb3IodmFyIGg9MDtoPGQ7aCsrKWY9dFtvXTw8OHx0W28rMV0sbys9MixmJiYocy5wdXNoKHQuc3ViYXJyYXkobyxvK2YpKSxvKz1mKTtyZXR1cm57c3BzOnIsc3BzQXJyOmkscHBzQXJyOnMsbmFsVW5pdFNpemU6bn19fX0se2tleToicGFyc2VTUFMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBLKGUpO3QucmVhZFVCeXRlKCk7dmFyIHI9dC5yZWFkVUJ5dGUoKSxhPXQucmVhZFVCeXRlKCksbj10LnJlYWRVQnl0ZSgpO3Quc2tpcFVFRygpO3ZhciBpPTQyMDtpZigxMDA9PT1yfHwxMTA9PT1yfHwxMjI9PT1yfHwyNDQ9PT1yfHw0ND09PXJ8fDgzPT09cnx8ODY9PT1yfHwxMTg9PT1yfHwxMjg9PT1yfHwxMzg9PT1yfHwxNDQ9PT1yKXt2YXIgcz10LnJlYWRVRUcoKTtpZihzPD0zJiYoaT1bMCw0MjAsNDIyLDQ0NF1bc10pLDM9PT1zJiZ0LnNraXBCaXRzKDEpLHQuc2tpcFVFRygpLHQuc2tpcFVFRygpLHQuc2tpcEJpdHMoMSksdC5yZWFkQm9vbCgpKWZvcih2YXIgbz0zIT09cz84OjEyLHU9MDt1PG87dSsrKXQucmVhZEJvb2woKSYmKHU8Nj90LnNraXBTY2FsaW5nTGlzdCgxNik6dC5za2lwU2NhbGluZ0xpc3QoNjQpKX10LnNraXBVRUcoKTt2YXIgYz10LnJlYWRVRUcoKTtpZigwPT09Yyl0LnJlYWRVRUcoKTtlbHNlIGlmKDE9PT1jKXt0LnNraXBCaXRzKDEpLHQuc2tpcFVFRygpLHQuc2tpcFVFRygpO2Zvcih2YXIgbD10LnJlYWRVRUcoKSxmPTA7ZjxsO2YrKyl0LnNraXBVRUcoKX10LnNraXBVRUcoKSx0LnNraXBCaXRzKDEpO3ZhciBkPXQucmVhZFVFRygpLGg9dC5yZWFkVUVHKCkscD10LnJlYWRCaXRzKDEpOzA9PT1wJiZ0LnNraXBCaXRzKDEpLHQuc2tpcEJpdHMoMSk7dmFyIHYseSxtLGcsayxiPTAsXz0wLHc9MCx4PTA7aWYodC5yZWFkQm9vbCgpJiYoYj10LnJlYWRVRUcoKSxfPXQucmVhZFVFRygpLHc9dC5yZWFkVUVHKCkseD10LnJlYWRVRUcoKSksdC5yZWFkQm9vbCgpKXtpZih0LnJlYWRCb29sKCkpc3dpdGNoKHQucmVhZFVCeXRlKCkpe2Nhc2UgMTp2PVsxLDFdO2JyZWFrO2Nhc2UgMjp2PVsxMiwxMV07YnJlYWs7Y2FzZSAzOnY9WzEwLDExXTticmVhaztjYXNlIDQ6dj1bMTYsMTFdO2JyZWFrO2Nhc2UgNTp2PVs0MCwzM107YnJlYWs7Y2FzZSA2OnY9WzI0LDExXTticmVhaztjYXNlIDc6dj1bMjAsMTFdO2JyZWFrO2Nhc2UgODp2PVszMiwxMV07YnJlYWs7Y2FzZSA5OnY9WzgwLDMzXTticmVhaztjYXNlIDEwOnY9WzE4LDExXTticmVhaztjYXNlIDExOnY9WzE1LDExXTticmVhaztjYXNlIDEyOnY9WzY0LDMzXTticmVhaztjYXNlIDEzOnY9WzE2MCw5OV07YnJlYWs7Y2FzZSAxNDp2PVs0LDNdO2JyZWFrO2Nhc2UgMTU6dj1bMywyXTticmVhaztjYXNlIDE2OnY9WzIsMV07YnJlYWs7Y2FzZSAyNTU6dj1bdC5yZWFkVUJ5dGUoKTw8OHx0LnJlYWRVQnl0ZSgpLHQucmVhZFVCeXRlKCk8PDh8dC5yZWFkVUJ5dGUoKV19aWYodC5yZWFkQm9vbCgpJiZ0LnJlYWRCb29sKCksdC5yZWFkQm9vbCgpJiYodC5yZWFkQml0cyg0KSx0LnJlYWRCb29sKCkmJnQucmVhZEJpdHMoMjQpKSx0LnJlYWRCb29sKCkmJih0LnJlYWRVRUcoKSx0LnJlYWRVRUcoKSksdC5yZWFkQm9vbCgpKXt2YXIgUz10LnJlYWRCaXRzKDMyKSxEPXQucmVhZEJpdHMoMzIpO3k9dC5yZWFkQm9vbCgpLGs9KG09RCkvKGc9MipTKX19cmV0dXJue2NvZGVjOm5lKGUuc3ViYXJyYXkoMSw0KSkscHJvZmlsZUlkYzpyLHByb2ZpbGVDb21wYXRpYmlsaXR5OmEsbGV2ZWxJZGM6bixjaHJvbWFGb3JtYXQ6aSx3aWR0aDpNYXRoLmNlaWwoMTYqKGQrMSktMiooYitfKSksaGVpZ2h0OigyLXApKihoKzEpKjE2LShwPzI6NCkqKHcreCksc2FyUmF0aW86dixmcHNOdW06bSxmcHNEZW46ZyxmcHM6ayxmaXhlZEZyYW1lOnl9fX1dKSxlfSgpLGZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6InBhcnNlSEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoISh0Lmxlbmd0aDwyMykpe3I9cnx8e307Zm9yKHZhciBhLG4saSxzLG8sdT0xKygzJnRbMjFdKSxjPVtdLGw9W10sZj1bXSxkPTIzLGg9dFsyMl0scD0wO3A8aDtwKyspe2k9NjMmdFtkXSxzPXRbZCsxXTw8OHx0W2QrMl0sZCs9Mztmb3IodmFyIHY9MDt2PHM7disrKWlmKG89dFtkXTw8OHx0W2QrMV0sZCs9MixvKXtzd2l0Y2goaSl7Y2FzZSAzMjp2YXIgeT10LnN1YmFycmF5KGQsZCtvKTthfHwoYT1lLnBhcnNlVlBTKGNlLnJlbW92ZUVQQih5KSxyKSksZi5wdXNoKHkpO2JyZWFrO2Nhc2UgMzM6dmFyIG09dC5zdWJhcnJheShkLGQrbyk7bnx8KG49ZS5wYXJzZVNQUyhjZS5yZW1vdmVFUEIobSkscikpLGMucHVzaChtKTticmVhaztjYXNlIDM0OmwucHVzaCh0LnN1YmFycmF5KGQsZCtvKSl9ZCs9b319cmV0dXJue2h2Y0M6cixzcHM6bixzcHNBcnI6YyxwcHNBcnI6bCx2cHNBcnI6ZixuYWxVbml0U2l6ZTp1fX19fSx7a2V5OiJwYXJzZVZQUyIsdmFsdWU6ZnVuY3Rpb24odCxyKXtyPXJ8fHt9O3ZhciBhPW5ldyBLKHQpO2EucmVhZFVCeXRlKCksYS5yZWFkVUJ5dGUoKSxhLnJlYWRCaXRzKDEyKTt2YXIgbj1hLnJlYWRCaXRzKDMpO3JldHVybiByLm51bVRlbXBvcmFsTGF5ZXJzPU1hdGgubWF4KHIubnVtVGVtcG9yYWxMYXllcnN8fDAsbisxKSxhLnJlYWRCaXRzKDE3KSxlLl9wYXJzZVByb2ZpbGVUaWVyTGV2ZWwoYSxuLHIpLHJ9fSx7a2V5OiJwYXJzZVNQUyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3I9cnx8e307dmFyIGE9bmV3IEsodCk7YS5yZWFkVUJ5dGUoKSxhLnJlYWRVQnl0ZSgpLGEucmVhZEJpdHMoNCk7dmFyIG49YS5yZWFkQml0cygzKTtyLm51bVRlbXBvcmFsTGF5ZXJzPU1hdGgubWF4KG4rMSxyLm51bVRlbXBvcmFsTGF5ZXJzfHwwKSxyLnRlbXBvcmFsSWROZXN0ZWQ9YS5yZWFkQml0cygxKSxlLl9wYXJzZVByb2ZpbGVUaWVyTGV2ZWwoYSxuLHIpLGEucmVhZFVFRygpO3ZhciBpPXIuY2hyb21hRm9ybWF0SWRjPWEucmVhZFVFRygpLHM9NDIwO2k8PTMmJihzPVswLDQyMCw0MjIsNDQ0XVtpXSk7dmFyIG89MDszPT09aSYmKG89YS5yZWFkQml0cygxKSk7dmFyIHUsYyxsLGYsZD1hLnJlYWRVRUcoKSxoPWEucmVhZFVFRygpLHA9YS5yZWFkQml0cygxKTtpZigxPT09cCYmKHU9YS5yZWFkVUVHKCksYz1hLnJlYWRVRUcoKSxsPWEucmVhZFVFRygpLGY9YS5yZWFkVUVHKCkpLHIuYml0RGVwdGhMdW1hTWludXM4PWEucmVhZFVFRygpLHIuYml0RGVwdGhDaHJvbWFNaW51czg9YS5yZWFkVUVHKCksMT09PXApe3ZhciB2PTEhPT1pJiYyIT09aXx8MCE9PW8/MToyLHk9MT09PWkmJjA9PT1vPzI6MTtkLT12KihjK3UpLGgtPXkqKGYrbCl9cmV0dXJue2NvZGVjOiJoZXYxLjEuNi5MOTMuQjAiLHdpZHRoOmQsaGVpZ2h0OmgsY2hyb21hRm9ybWF0OnMsaHZjQzpyfX19LHtrZXk6Il9wYXJzZVByb2ZpbGVUaWVyTGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1yLmdlbmVyYWxUaWVyRmxhZ3x8MDtyLmdlbmVyYWxQcm9maWxlU3BhY2U9ZS5yZWFkQml0cygyKSxyLmdlbmVyYWxUaWVyRmxhZz1NYXRoLm1heChlLnJlYWRCaXRzKDEpLGEpLHIuZ2VuZXJhbFByb2ZpbGVJZGM9TWF0aC5tYXgoZS5yZWFkQml0cyg1KSxyLmdlbmVyYWxQcm9maWxlSWRjfHwwKSxyLmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZsYWdzPWUucmVhZEJpdHMoMzIpLHIuZ2VuZXJhbENvbnN0cmFpbnRJbmRpY2F0b3JGbGFncz1bZS5yZWFkQml0cyg4KSxlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCksZS5yZWFkQml0cyg4KSxlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCldO3ZhciBuPWUucmVhZEJpdHMoOCk7YTxyLmdlbmVyYWxUaWVyRmxhZz9yLmdlbmVyYWxMZXZlbElkYz1uOnIuZ2VuZXJhbExldmVsSWRjPU1hdGgubWF4KG4sci5nZW5lcmFsTGV2ZWxJZGN8fDApO3ZhciBpPVtdLHM9W107aWYodD5lLmJpdHNBdmFpbGFibGUpdGhyb3cgbmV3IEVycm9yKCJtYXhTdWJMYXllcnNNaW51cyBpbmF2bGlkIHNpemUgIi5jb25jYXQodCkpO2Zvcih2YXIgbz0wO288dDtvKyspaVtvXT1lLnJlYWRCaXRzKDEpLHNbb109ZS5yZWFkQml0cygxKTt0PjAmJmUucmVhZEJpdHMoMiooOC10KSk7Zm9yKHZhciB1PTA7dTx0O3UrKykwIT09aVt1XSYmKGUucmVhZEJpdHMoMiksZS5yZWFkQml0cygxKSxlLnJlYWRCaXRzKDUpLGUucmVhZEJpdHMoMTYpLGUucmVhZEJpdHMoMTYpLGUucmVhZEJpdHMoNCksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cygxMikpLDAhPT1zW3VdJiZlLnJlYWRCaXRzKDgpfX1dKSxlfSgpLGRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6ImdldEZyYW1lRHVyYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiAyMH19LHtrZXk6InBhcnNlSGVhZGVyUGFja2V0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGgpe2Zvcih2YXIgdD1uZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCkscj0iIixhPTA7YTw4O2ErKylyKz1TdHJpbmcuZnJvbUNvZGVQb2ludChlW2FdKTtpZigiT3B1c0hlYWQiIT09cil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgT3B1cyBNYWdpY1NpZ25hdHVyZSIpO3ZhciBuPWVbOV07Y29uc29sZS5sb2coIlByZS1za2lwIixlWzEwXSxlWzExXSk7dmFyIGk9dC5nZXRVaW50MzIoMTIsITApLHM9dC5nZXRJbnQxNigxNiwhMCk7aWYoaSl7cmV0dXJue291dHB1dEdhaW46cyxzYW1wbGVSYXRlOmksY2hhbm5lbENvdW50Om4sY29uZmlnOm5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCs4LGUuYnl0ZUxlbmd0aC04KSxjb2RlYzoib3B1cyIsb3JpZ2luQ29kZWM6Im9wdXMifX19fX1dKSxlfSgpLGhlPTFlMyxwZT01ZTMsdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsYSxuKXtyKHRoaXMsZSksdGhpcy52aWRlb1RyYWNrPXQsdGhpcy5hdWRpb1RyYWNrPWEsdGhpcy5tZXRhZGF0YVRyYWNrPW4sdGhpcy5fYmFzZUR0cz0tMSx0aGlzLl9iYXNlRHRzSW5pdGVkPSExLHRoaXMuX2F1ZGlvTmV4dFB0cz12b2lkIDAsdGhpcy5fdmlkZW9OZXh0RHRzPXZvaWQgMCx0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaz0wLHRoaXMuX2xhc3RWaWRlb0R1cmF0aW9uPTAsdGhpcy5fa2V5RnJhbWVJbk5leHRDaHVuaz0hMSx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25HYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25PdmVybGFwRG90PS0xLzAsdGhpcy5fbGFzdEF1ZGlvRXhjZXB0aW9uTGFyZ2VHYXBEb3Q9LTEvMCx0aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkNodW5rRmlyc3REdHNEb3Q9LTEvMH1yZXR1cm4gbihlLFt7a2V5OiJmaXgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07dD1NYXRoLnJvdW5kKDFlMyp0KTt2YXIgbj10aGlzLnZpZGVvVHJhY2ssaT10aGlzLmF1ZGlvVHJhY2s7IXImJmF8fCh0aGlzLl92aWRlb0xhc3RTYW1wbGU9bnVsbCx0aGlzLl9hdWRpb05leHRQdHM9dm9pZCAwLHRoaXMuX3ZpZGVvTmV4dER0cz12b2lkIDAsdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz0wLHRoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWs9MCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25HYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25PdmVybGFwRG90PS0xLzAsdGhpcy5fbGFzdEF1ZGlvRXhjZXB0aW9uTGFyZ2VHYXBEb3Q9LTEvMCx0aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkNodW5rRmlyc3REdHNEb3Q9LTEvMCksciYmIWEmJih0aGlzLl9iYXNlRHRzSW5pdGVkPSExKSx0aGlzLl9iYXNlRHRzSW5pdGVkfHx0aGlzLl9jYWxjdWxhdGVCYXNlRHRzKGksbiksIWEmJnQmJih0aGlzLl9hdWRpb05leHRQdHM9dGhpcy5fdmlkZW9OZXh0RHRzPXQpO3ZhciBzPXRoaXMuX2Jhc2VEdHNJbml0ZWQmJih0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrfHwhdGhpcy52aWRlb1RyYWNrLmV4aXN0KCkpJiYodGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVha3x8IXRoaXMuYXVkaW9UcmFjay5leGlzdCgpKTtpZihzJiZ0aGlzLl9yZXNldEJhc2VEdHNXaGVuU3RyZWFtQnJlYWtlZCgpLHRoaXMuX2ZpeEF1ZGlvKGkpLHRoaXMuX2tleUZyYW1lSW5OZXh0Q2h1bms9ITEsdGhpcy5fZml4VmlkZW8obiksdGhpcy5tZXRhZGF0YVRyYWNrLmV4aXN0KCkpe3ZhciBvPXRoaXMubWV0YWRhdGFUcmFjay50aW1lc2NhbGU7dGhpcy5tZXRhZGF0YVRyYWNrLnNlaVNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5wdHM9dC5vcmlnaW5QdHMtZS5fYmFzZUR0cyx0LnRpbWU9TWF0aC5tYXgoMCx0LnB0cykvb30pKSx0aGlzLm1ldGFkYXRhVHJhY2suZmx2U2NyaXB0U2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnB0cz10Lm9yaWdpblB0cy1lLl9iYXNlRHRzLHQudGltZT1NYXRoLm1heCgwLHQucHRzKS9vfSkpfW4uc2FtcGxlcy5sZW5ndGgmJihuLmJhc2VNZWRpYURlY29kZVRpbWU9bi5zYW1wbGVzWzBdLmR0cyksaS5zYW1wbGVzLmxlbmd0aCYmKGkuYmFzZU1lZGlhRGVjb2RlVGltZT1pLnNhbXBsZXNbMF0ucHRzKmkudGltZXNjYWxlLzFlMyl9fSx7a2V5OiJfZml4VmlkZW8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLnNhbXBsZXM7aWYoci5sZW5ndGgpe3ZhciBhO2lmKHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5kdHMtPXQuX2Jhc2VEdHMsZS5wdHMtPXQuX2Jhc2VEdHMsZS5rZXlmcmFtZSYmKHQuX2tleUZyYW1lSW5OZXh0Q2h1bms9ITApfSkpLGUuZnBzTnVtJiZlLmZwc0RlbilhPWUudGltZXNjYWxlKihlLmZwc0Rlbi9lLmZwc051bSk7ZWxzZSBpZihlLmxlbmd0aD4xKXt2YXIgbj1lLnNhbXBsZXNbMF0saT1lLnNhbXBsZXNbci5sZW5ndGgtMV07YT1NYXRoLmZsb29yKChpLmR0cy1uLmR0cykvKHIubGVuZ3RoLTEpKX1lbHNlIGE9dGhpcy5fbGFzdFZpZGVvRHVyYXRpb258fDQwO3ZhciBzPXIucG9wKCk7aWYodGhpcy5fdmlkZW9MYXN0U2FtcGxlJiZyLnVuc2hpZnQodGhpcy5fdmlkZW9MYXN0U2FtcGxlKSx0aGlzLl92aWRlb0xhc3RTYW1wbGU9cyxyLmxlbmd0aCl7aWYodm9pZCAwPT09dGhpcy5fdmlkZW9OZXh0RHRzKXt2YXIgbz1yWzBdO3RoaXMuX3ZpZGVvTmV4dER0cz1vLmR0c312YXIgdT1yLmxlbmd0aCxjPTAsbD1yWzBdLGY9dGhpcy5fdmlkZW9OZXh0RHRzLWwuZHRzO2lmKE1hdGguYWJzKGYpPjIwMCl7dmFyIGQ7aWYoTWF0aC5hYnMobC5kdHMtdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdCk+NWUzKXRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkNodW5rRmlyc3REdHNEb3Q9bC5kdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOkksbmV4dER0czp0aGlzLl92aWRlb05leHREdHMsZmlyc3RTYW1wbGVEdHM6bC5kdHMsbmV4dFNhbXBsZUR0czpudWxsPT09KGQ9clsxXSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuZHRzLHNhbXBsZUR1cmF0aW9uOmZ9KTt0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPj01Pyh0aGlzLl92aWRlb05leHREdHM9bC5kdHMsdGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaz0wKToobC5kdHMrPWYsbC5wdHMrPWYsdGhpcy5hdWRpb1RyYWNrLmV4aXN0KCl8fCh0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTEpKX1mb3IodmFyIGg9MDtoPHU7aCsrKXt2YXIgcD1yW2hdLmR0cyx2PXJbaCsxXTsoKGM9aDx1LTE/di5kdHMtcDpzP3MuZHRzLXA6YSk+MWUzfHxjPDApJiYodGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaysrLE1hdGguYWJzKHAtdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uTGFyZ2VHYXBEb3QpPjVlMyYmKHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkxhcmdlR2FwRG90PXAsZS53YXJuaW5ncy5wdXNoKHt0eXBlOlAsdGltZTpwL2UudGltZXNjYWxlLGR0czpwLG9yaWdpbkR0czpyW2hdLm9yaWdpbkR0cyxuZXh0RHRzOnRoaXMuX3ZpZGVvTmV4dER0cyxzYW1wbGVEdXJhdGlvbjpjLHJlZlNhbXBsZUR1cmF0aW9uOmF9KSksYz1hKSxyW2hdLmR1cmF0aW9uPWMsdGhpcy5fdmlkZW9OZXh0RHRzKz1jLHRoaXMuX2xhc3RWaWRlb0R1cmF0aW9uPWN9fX19fSx7a2V5OiJfZml4QXVkaW8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLnNhbXBsZXM7ci5sZW5ndGgmJihyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuZHRzPWUucHRzLT10Ll9iYXNlRHRzfSkpLHRoaXMuX2RvRml4QXVkaW9JbnRlcm5hbChlLHIsMWUzKSl9fSx7a2V5OiJfY2FsY3VsYXRlQmFzZUR0cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnNhbXBsZXMsYT10LnNhbXBsZXM7aWYoIXIubGVuZ3RoJiYhYS5sZW5ndGgpcmV0dXJuITE7dmFyIG49MS8wLGk9MS8wO3IubGVuZ3RoJiYoZS5iYXNlRHRzPW49clswXS5wdHMpLGEubGVuZ3RoJiYodC5iYXNlRHRzPWk9YVswXS5kdHMpLHRoaXMuX2Jhc2VEdHM9TWF0aC5taW4obixpKTt2YXIgcz1pLW47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShzKSYmTWF0aC5hYnMocyk+NTAwJiZ0Lndhcm5pbmdzLnB1c2goe3R5cGU6Qyx2aWRlb0Jhc2VEdHM6aSxhdWRpb0Jhc2VQdHM6bixiYXNlRHRzOnRoaXMuX2Jhc2VEdHMsZGVsdGE6c30pLHRoaXMuX2Jhc2VEdHNJbml0ZWQ9ITAsITB9fSx7a2V5OiJfcmVzZXRCYXNlRHRzV2hlblN0cmVhbUJyZWFrZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2FsY3VsYXRlQmFzZUR0cyh0aGlzLmF1ZGlvVHJhY2ssdGhpcy52aWRlb1RyYWNrKSYmKHRoaXMuYXVkaW9UcmFjay5leGlzdCgpP3RoaXMudmlkZW9UcmFjay5leGlzdCgpP3RoaXMuX2Jhc2VEdHMtPU1hdGgubWluKHRoaXMuX2F1ZGlvTmV4dFB0cyx0aGlzLl92aWRlb05leHREdHMpOnRoaXMuX2Jhc2VEdHMtPXRoaXMuX2F1ZGlvTmV4dFB0czp0aGlzLl9iYXNlRHRzLT10aGlzLl92aWRlb05leHREdHMsdGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaz0wLHRoaXMuX2F1ZGlvVGltZXN0YW1wQnJlYWs9MCl9fSx7a2V5OiJfZG9GaXhBdWRpb0ludGVybmFsIix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYoIWUuc2FtcGxlRHVyYXRpb24pc3dpdGNoKGUuY29kZWNUeXBlKXtjYXNlIEE6ZS5zYW1wbGVEdXJhdGlvbj11ZS5nZXRGcmFtZUR1cmF0aW9uKGUudGltZXNjYWxlLHIpO2JyZWFrO2Nhc2UgQjplLnNhbXBsZUR1cmF0aW9uPWRlLmdldEZyYW1lRHVyYXRpb24oZS5zYW1wbGVzLHIpO2JyZWFrO2Nhc2UgVDpjYXNlIEU6ZS5zYW1wbGVEdXJhdGlvbj10aGlzLl9nZXRHNzExRHVyYXRpb24oZSk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJjYW4ndCBmaXggYXVkaW8gY29kZWNUeXBlOiIsZS5jb2RlY1R5cGUpfXZhciBhPWUuc2FtcGxlRHVyYXRpb24sbj1lLmNvZGVjVHlwZT09PUI/MjA6ZS5jb2RlY1R5cGU9PT1BPzEwMjQ6YSplLnRpbWVzY2FsZS8xZTM7aWYodm9pZCAwPT09dGhpcy5fYXVkaW9OZXh0UHRzKXt2YXIgaT10WzBdO3RoaXMuX2F1ZGlvTmV4dFB0cz1pLnB0c31mb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIG89dGhpcy5fYXVkaW9OZXh0UHRzLHU9dFtzXSxjPXUucHRzLW87aWYoMD09PXMmJnRoaXMuX2F1ZGlvVGltZXN0YW1wQnJlYWs+PTUmJnRoaXMuX2tleUZyYW1lSW5OZXh0Q2h1bmsmJihvPXRoaXMuX2F1ZGlvTmV4dFB0cz11LmR0cyxjPTAsdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz0wKSwhdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhayYmYz49MyphJiZjPD1oZSYmIVEpe3ZhciBsPXRoaXMuX2dldFNpbGVudEZyYW1lKGUpfHx0WzBdLmRhdGEuc3ViYXJyYXkoKSxmPU1hdGguZmxvb3IoYy9hKTtNYXRoLmFicyh1LnB0cy10aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25HYXBEb3QpPnBlJiYodGhpcy5fbGFzdEF1ZGlvRXhjZXB0aW9uR2FwRG90PXUucHRzLGUud2FybmluZ3MucHVzaCh7dHlwZTp6LHB0czp1LnB0cyxvcmlnaW5QdHM6dS5vcmlnaW5QdHMsY291bnQ6ZixuZXh0UHRzOm8scmVmU2FtcGxlRHVyYXRpb246YX0pKTtmb3IodmFyIGQ9MDtkPGY7ZCsrKXt2YXIgaD1uZXcgRihNYXRoLmZsb29yKHRoaXMuX2F1ZGlvTmV4dFB0cythKS1NYXRoLmZsb29yKHRoaXMuX2F1ZGlvTmV4dFB0cyksbCxuKTtoLm9yaWdpblB0cz1NYXRoLmZsb29yKHRoaXMuX2Jhc2VEdHMrbyksdC5zcGxpY2UocywwLGgpLHRoaXMuX2F1ZGlvTmV4dFB0cys9YSxzKyt9cy0tfWVsc2UgaWYoYzw9LTMqYSYmYz49LTFlMylNYXRoLmFicyh1LnB0cy10aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25PdmVybGFwRG90KT5wZSYmKHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9dS5wdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOk8scHRzOnUucHRzLG9yaWdpblB0czp1Lm9yaWdpblB0cyxuZXh0UHRzOm8scmVmU2FtcGxlRHVyYXRpb246YX0pKSx0LnNwbGljZShzLDEpLHMtLTtlbHNle2lmKE1hdGguYWJzKGMpPmhlJiYodGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaysrLE1hdGguYWJzKHUucHRzLXRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkxhcmdlR2FwRG90KT5wZSYmKHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkxhcmdlR2FwRG90PXUucHRzLGUud2FybmluZ3MucHVzaCh7dHlwZTpNLHRpbWU6dS5wdHMvMWUzLHB0czp1LnB0cyxvcmlnaW5QdHM6dS5vcmlnaW5QdHMsbmV4dFB0czpvLHNhbXBsZUR1cmF0aW9uOmMscmVmU2FtcGxlRHVyYXRpb246YX0pKSksZS5jb2RlY1R5cGU9PT1CKXt2YXIgcD10W3QubGVuZ3RoLTFdO3AmJihwLmR1cmF0aW9uPXUucHRzLXAucHRzKX1lbHNlIHUuZHRzPXUucHRzPW8sdS5kdXJhdGlvbj1uO3RoaXMuX2F1ZGlvTmV4dFB0cys9YX19fX0se2tleToiX2dldEc3MTFEdXJhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zYW1wbGVTaXplLHI9ZS5jaGFubmVsQ291bnQsYT1lLnNhbXBsZVJhdGUsbj1lLnNhbXBsZXNbMF07aWYobilyZXR1cm4gMipuLmRhdGEuYnl0ZUxlbmd0aC9yLyh0LzgpL2EqMWUzfX0se2tleToiX2dldFNpbGVudEZyYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb2RlY1R5cGU9PT1BP3VlLmdldFNpbGVudEZyYW1lKGUuY29kZWMsZS5jaGFubmVsQ291bnQpOm5ldyBVaW50OEFycmF5KDgqZS5zYW1wbGVEdXJhdGlvbiplLmNoYW5uZWxDb3VudCl9fV0pLGV9KCkseWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8Mykpe3ZhciByPXt9LGE9ZS5fcGFyc2VWYWx1ZShuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLG49ZS5fcGFyc2VWYWx1ZShuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K2Euc2l6ZSx0LmJ5dGVMZW5ndGgtYS5zaXplKSk7cmV0dXJuIHJbYS5kYXRhXT1uLmRhdGEscn19fSx7a2V5OiJfcGFyc2VWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHIsYT10LmJ5dGVMZW5ndGgsbj0xLGk9ITE7c3dpdGNoKHQuZ2V0VWludDgoMCkpe2Nhc2UgMDpyPXQuZ2V0RmxvYXQ2NCgxKSxuKz04O2JyZWFrO2Nhc2UgMTpyPSEhdC5nZXRVaW50OCgxKSxuKz0xO2JyZWFrO2Nhc2UgMjp2YXIgcz1lLl9wYXJzZVN0cmluZyhuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K24sdC5ieXRlTGVuZ3RoLW4pKTtyPXMuZGF0YSxuKz1zLnNpemU7YnJlYWs7Y2FzZSAzOnI9e307dmFyIG89MDtmb3IoOT09KDE2Nzc3MjE1JnQuZ2V0VWludDMyKGEtNCkpJiYobz0zKTtuPGEtNDspe3ZhciB1PWUuX3BhcnNlT2JqZWN0KG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbix0LmJ5dGVMZW5ndGgtbi1vKSksYz11LnNpemUsbD11LmRhdGE7aWYodS5pc0VuZClicmVhaztyW2wubmFtZV09bC52YWx1ZSxuKz1jfWlmKG48PWEtMyk5PT09KDE2Nzc3MjE1JnQuZ2V0VWludDMyKG4tMSkpJiYobis9Myk7YnJlYWs7Y2FzZSA4OnI9e30sbis9NDt2YXIgZj0wO2Zvcig5PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIoYS00KSkmJihmPTMpO248YS04Oyl7dmFyIGQ9ZS5fcGFyc2VPYmplY3QobmV3IERhdGFWaWV3KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLHQuYnl0ZUxlbmd0aC1uLWYpKSxoPWQuc2l6ZSxwPWQuZGF0YTtpZihkLmlzRW5kKWJyZWFrO3JbcC5uYW1lXT1wLnZhbHVlLG4rPWh9aWYobjw9YS0zKTk9PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIobi0xKSkmJihuKz0zKTticmVhaztjYXNlIDk6cj12b2lkIDAsbj0xLGk9ITA7YnJlYWs7Y2FzZSAxMDpyPVtdO3ZhciB2PXQuZ2V0VWludDMyKDEpO24rPTQ7Zm9yKHZhciB5PTA7eTx2O3krKyl7dmFyIG09ZS5fcGFyc2VWYWx1ZShuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K24sdC5ieXRlTGVuZ3RoLW4pKSxnPW0uZGF0YSxrPW0uc2l6ZTtyLnB1c2goZyksbis9a31icmVhaztjYXNlIDExOnZhciBiPXQuZ2V0RmxvYXQ2NChuKSs2ZTQqdC5nZXRJbnQxNihuKzgpO3I9bmV3IERhdGUoYiksbis9MTA7YnJlYWs7Y2FzZSAxMjp2YXIgXz10LmdldFVpbnQzMigxKTtuKz00LHI9IiIsXz4wJiYocj1XLmRlY29kZShuZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbixfKSkpLG4rPV87YnJlYWs7ZGVmYXVsdDpuPWF9cmV0dXJue2RhdGE6cixzaXplOm4saXNFbmQ6aX19fSx7a2V5OiJfcGFyc2VTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VWludDE2KDApLHI9IiI7cmV0dXJuIHQ+MCYmKHI9Vy5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0KzIsdCkpKSx7ZGF0YTpyLHNpemU6Mit0fX19LHtrZXk6Il9wYXJzZU9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoISh0LmJ5dGVMZW5ndGg8Mykpe3ZhciByPWUuX3BhcnNlU3RyaW5nKHQpLGE9ZS5fcGFyc2VWYWx1ZShuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K3Iuc2l6ZSx0LmJ5dGVMZW5ndGgtci5zaXplKSk7cmV0dXJue2RhdGE6e25hbWU6ci5kYXRhLHZhbHVlOmEuZGF0YX0sc2l6ZTpyLnNpemUrYS5zaXplLGlzRW5kOmEuaXNFbmR9fX19XSksZX0oKSxtZT03LGdlPTgsa2U9MTAsYmU9MTMsX2U9bmV3IHEoIkZsdkRlbXV4ZXIiKSx3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSxpKHRoaXMsIl9oZWFkZXJQYXJzZWQiLCExKSxpKHRoaXMsIl9yZW1haW5pbmdEYXRhIixudWxsKSxpKHRoaXMsIl9nb3BJZCIsMCksaSh0aGlzLCJfbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbCIsITApLHRoaXMudmlkZW9UcmFjaz10fHxuZXcgUix0aGlzLmF1ZGlvVHJhY2s9YXx8bmV3IEwsdGhpcy5tZXRhZGF0YVRyYWNrPW58fG5ldyBILHRoaXMuX2ZpeGVyPW5ldyB2ZSh0aGlzLnZpZGVvVHJhY2ssdGhpcy5hdWRpb1RyYWNrLHRoaXMubWV0YWRhdGFUcmFjayl9cmV0dXJuIG4oZSxbe2tleToiZGVtdXgiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0saT1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxzPXRoaXMuYXVkaW9UcmFjayxvPXRoaXMudmlkZW9UcmFjayx1PXRoaXMubWV0YWRhdGFUcmFjaztpZighYSYmbnx8KHRoaXMuX3JlbWFpbmluZ0RhdGE9bnVsbCksYSYmKHRoaXMuX2hlYWRlclBhcnNlZD0hMSksYT8oby5yZXNldCgpLHMucmVzZXQoKSx1LnJlc2V0KCkpOihvLnNhbXBsZXM9W10scy5zYW1wbGVzPVtdLHUuc2VpU2FtcGxlcz1bXSx1LmZsdlNjcmlwdFNhbXBsZXM9W10sby53YXJuaW5ncz1bXSxzLndhcm5pbmdzPVtdLHRoaXMuX3JlbWFpbmluZ0RhdGEmJih0PSQodGhpcy5fcmVtYWluaW5nRGF0YSx0KSx0aGlzLl9yZW1haW5pbmdEYXRhPW51bGwpKSwhdC5sZW5ndGgpcmV0dXJue3ZpZGVvVHJhY2s6byxhdWRpb1RyYWNrOnMsbWV0YWRhdGFUcmFjazp1fTt2YXIgYz0wO2lmKCF0aGlzLl9oZWFkZXJQYXJzZWQpe2lmKCFlLnByb2JlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBmbHYgZmlsZSIpO3MucHJlc2VudD0oNCZ0WzRdKT4+PjIhPTAsby5wcmVzZW50PTAhPSgxJnRbNF0pLHRoaXMuX2hlYWRlclBhcnNlZD0hMCxjPXJlKHQsNSkrNH1mb3IodmFyIGwsZixkLGgscCx2PXQubGVuZ3RoO2MrMTU8diYmKGw9dFtjXSwhKGMrMTUrKGY9dFtjKzFdPDwxNnx0W2MrMl08PDh8dFtjKzNdKT52KSk7KWQ9KHRbYys3XTw8MjQ+Pj4wKSsodFtjKzRdPDwxNikrKHRbYys1XTw8OCkrdFtjKzZdLGMrPTExLGg9dC5zdWJhcnJheShjLGMrZiksOD09PWw/dGhpcy5fcGFyc2VBdWRpbyhoLGQpOjk9PT1sPyhpJiYodGhpcy5zZWFtbGVzc0xvYWRpbmdTd2l0Y2hpbmc9ITApLHRoaXMuX3BhcnNlVmlkZW8oaCxkKSk6MTg9PT1sP3RoaXMuX3BhcnNlU2NyaXB0KGgsZCk6X2Uud2FybigiSW52YWxpZCB0YWcgdHlwZTogIi5jb25jYXQobCkpLChwPXJlKHQsYys9ZikpIT09MTErZiYmX2Uud2FybigiSW52YWxpZCBQcmV2VGFnU2l6ZSAiLmNvbmNhdChwLCIgKCIpLmNvbmNhdCgxMStmLCIpIikpLGMrPTQ7Yzx2JiYodGhpcy5fcmVtYWluaW5nRGF0YT10LnN1YmFycmF5KGMpKSxzLmZvcm1hdFRpbWVzY2FsZT1vLmZvcm1hdFRpbWVzY2FsZT1vLnRpbWVzY2FsZT11LnRpbWVzY2FsZT0xZTMscy50aW1lc2NhbGU9cy5jb2RlY1R5cGU9PT1CPzFlMzpzLnNhbXBsZVJhdGV8fDAsIXMuZXhpc3QoKSYmcy5oYXNTYW1wbGUoKSYmcy5yZXNldCgpLCFvLmV4aXN0KCkmJm8uaGFzU2FtcGxlKCkmJm8ucmVzZXQoKTt2YXIgeT11LmZsdlNjcmlwdFNhbXBsZXNbdS5mbHZTY3JpcHRTYW1wbGVzLmxlbmd0aC0xXSxtPW51bGw9PXl8fG51bGw9PT0ocj15LmRhdGEpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uTWV0YURhdGE7cmV0dXJuIG0mJihudWxsIT1vJiZvLmV4aXN0KCkmJihtLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpJiYoby5kdXJhdGlvbj0xZTMqbS5kdXJhdGlvbiksIW8ud2lkdGgmJm0uaGFzT3duUHJvcGVydHkoIndpZHRoIikmJihvLndpZHRoPW0ud2lkdGgpLCFvLmhlaWdodCYmbS5oYXNPd25Qcm9wZXJ0eSgiaGVpZ2h0IikmJihvLmhlaWdodD1tLmhlaWdodCkpLG51bGwhPXMmJnMuZXhpc3QoKSYmbS5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSYmKHMuZHVyYXRpb249MWUzKm0uZHVyYXRpb24pKSx7dmlkZW9UcmFjazpvLGF1ZGlvVHJhY2s6cyxtZXRhZGF0YVRyYWNrOnV9fX0se2tleToiZml4Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2ZpeGVyLmZpeChlLHQscikse3ZpZGVvVHJhY2s6dGhpcy52aWRlb1RyYWNrLGF1ZGlvVHJhY2s6dGhpcy5hdWRpb1RyYWNrLG1ldGFkYXRhVHJhY2s6dGhpcy5tZXRhZGF0YVRyYWNrfX19LHtrZXk6ImRlbXV4QW5kRml4Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLG4pe3JldHVybiB0aGlzLmRlbXV4KGUsdCxyLG4pLHRoaXMuZml4KGEsdCxyKX19LHtrZXk6Il9wYXJzZUF1ZGlvIix2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKHQubGVuZ3RoKXt2YXIgYT0oMjQwJnRbMF0pPj4+NCxuPXRoaXMuYXVkaW9UcmFjaztpZihhIT09a2UmJmEhPT1tZSYmYSE9PWdlJiZhIT09YmUpcmV0dXJuIF9lLndhcm4oIlVuc3VwcG9ydGVkIHNvdW5kIGZvcm1hdDogIi5jb25jYXQoYSkpLHZvaWQgbi5yZXNldCgpO2lmKGEhPT1rZSYmYSE9PWJlKXt2YXIgaT0oMTImdFswXSk+PjIscz0oMiZ0WzBdKT4+MSxvPTEmdFswXTtuLnNhbXBsZVJhdGU9ZS5BVURJT19SQVRFW2ldLG4uc2FtcGxlU2l6ZT1zPzE2Ojgsbi5jaGFubmVsQ291bnQ9bysxfXN3aXRjaChhKXtjYXNlIG1lOmNhc2UgZ2U6dGhpcy5fcGFyc2VHNzExKHQscixhKTticmVhaztjYXNlIGtlOnRoaXMuX3BhcnNlQWFjKHQscik7YnJlYWs7Y2FzZSBiZTp0aGlzLl9wYXJzZU9wdXModCxyKX19fX0se2tleToiX3BhcnNlT3B1cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmF1ZGlvVHJhY2ssYT1lWzFdO3N3aXRjaChyLmNvZGVjVHlwZT1CLGEpe2Nhc2UgMDp2YXIgbj1kZS5wYXJzZUhlYWRlclBhY2tldHMoZS5zdWJhcnJheSgyKSk7bj8oci5jb2RlYz1uLmNvZGVjLHIuY2hhbm5lbENvdW50PW4uY2hhbm5lbENvdW50LHIuc2FtcGxlUmF0ZT1uLnNhbXBsZVJhdGUsci5jb25maWc9bi5jb25maWcsci5zYW1wbGVEdXJhdGlvbj1kZS5nZXRGcmFtZUR1cmF0aW9uKFtdLHIudGltZXNjYWxlKSk6KHIucmVzZXQoKSxfZS53YXJuKCJDYW5ub3QgcGFyc2UgQXVkaW9TcGVjaWZpY0NvbmZpZyIsZSkpO2JyZWFrO2Nhc2UgMTppZihudWxsPT10KXJldHVybjt2YXIgaT1uZXcgRih0LGUuc3ViYXJyYXkoMiksci5zYW1wbGVEdXJhdGlvbik7ci5zYW1wbGVzLnB1c2goaSk7YnJlYWs7ZGVmYXVsdDpfZS53YXJuKCJVbmtub3duIE9wdXNQYWNrZXRUeXBlOiAiLmNvbmNhdChhKSl9fX0se2tleToiX3BhcnNlRzcxMSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuYXVkaW9UcmFjayxuPWUuc3ViYXJyYXkoMSk7aWYoIShuLmJ5dGVMZW5ndGg8MSkpe3ZhciBpPW5ldyBGKHQsbik7YS5jb2RlY1R5cGU9Nz09PXI/VDpFLGEuc2FtcGxlUmF0ZT04ZTMsYS5jb2RlYz1hLmNvZGVjVHlwZSxhLnNhbXBsZXMucHVzaChpKX19fSx7a2V5OiJfcGFyc2VBYWMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5hdWRpb1RyYWNrO2lmKHIuY29kZWNUeXBlPUEsMD09PWVbMV0pe3ZhciBhPXVlLnBhcnNlQXVkaW9TcGVjaWZpY0NvbmZpZyhlLnN1YmFycmF5KDIpKTthPyhyLmNvZGVjPWEuY29kZWMsci5jaGFubmVsQ291bnQ9YS5jaGFubmVsQ291bnQsci5zYW1wbGVSYXRlPWEuc2FtcGxlUmF0ZSxyLmNvbmZpZz1hLmNvbmZpZyxyLm9iamVjdFR5cGU9YS5vYmplY3RUeXBlLHIuc2FtcGxlUmF0ZUluZGV4PWEuc2FtcGxpbmdGcmVxdWVuY3lJbmRleCk6KHIucmVzZXQoKSxfZS53YXJuKCJDYW5ub3QgcGFyc2UgQXVkaW9TcGVjaWZpY0NvbmZpZyIsZSkpfWVsc2UgaWYoMT09PWVbMV0pe2lmKG51bGw9PXQpcmV0dXJuO3Iuc2FtcGxlcy5wdXNoKG5ldyBGKHQsZS5zdWJhcnJheSgyKSkpfWVsc2UgX2Uud2FybigiVW5rbm93biBBQUNQYWNrZXRUeXBlOiAiLmNvbmNhdChlWzFdKSl9fSx7a2V5OiJfcGFyc2VWaWRlbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2lmKCEoZS5sZW5ndGg8Nikpe3ZhciBhPSgyNDAmZVswXSk+Pj40LG49MTUmZVswXSxpPXRoaXMudmlkZW9UcmFjaztpZig3IT09biYmMTIhPT1uKXJldHVybiBpLnJlc2V0KCksdm9pZCBfZS53YXJuKCJVbnN1cHBvcnRlZCBjb2RlY0lkOiAiLmNvbmNhdChuKSk7dmFyIHM9MTI9PT1uO2kuY29kZWNUeXBlPXM/RDpTO3ZhciBvPWVbMV0sdT0oZVsyXTw8MTZ8ZVszXTw8OHxlWzRdKTw8OD4+ODtpZigwPT09byl7dmFyIGM9ZS5zdWJhcnJheSg1KSxsPXM/ZmUucGFyc2VIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQoYyk6bGUucGFyc2VBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZChjKTtpZihsKXt2YXIgZj1sLmh2Y0MsZD1sLnNwcyxoPWwucHBzQXJyLHA9bC5zcHNBcnIsdj1sLnZwc0Fycix5PWwubmFsVW5pdFNpemU7ZiYmKGkuaHZjQz1pLmh2Y0N8fGYpLGQmJihpLmNvZGVjPWQuY29kZWMsaS53aWR0aD1kLndpZHRoLGkuaGVpZ2h0PWQuaGVpZ2h0LGkuc2FyUmF0aW89ZC5zYXJSYXRpbyxpLmZwc051bT1kLmZwc051bSxpLmZwc0Rlbj1kLmZwc0RlbikscC5sZW5ndGgmJihpLnNwcz1wKSxoLmxlbmd0aCYmKGkucHBzPWgpLHYmJnYubGVuZ3RoJiYoaS52cHM9dikseSYmKGkubmFsVW5pdFNpemU9eSl9ZWxzZSBfZS53YXJuKCJDYW5ub3QgcGFyc2UgIi5jb25jYXQocz8iSEVWQyI6IkFWQyIsIkRlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIiksZSl9ZWxzZSBpZigxPT09byl7dmFyIG09Y2UucGFyc2VBdmNDKGUuc3ViYXJyYXkoNSksaS5uYWxVbml0U2l6ZSk7aWYoKG09dGhpcy5fY2hlY2tBZGRNZXRhTmFsVG9Vbml0cyhzLG0saSkpJiZtLmxlbmd0aCl7dmFyIGc9bmV3IFYodCt1LHQsbSk7aWYodGhpcy5zZWFtbGVzc0xvYWRpbmdTd2l0Y2hpbmcmJnQ8aS5sYXN0S2V5RnJhbWVEdHMpcmV0dXJuO3RoaXMuc2VhbWxlc3NMb2FkaW5nU3dpdGNoaW5nPSExLDE9PT1hJiYoZy5zZXRUb0tleWZyYW1lKCksaS5sYXN0S2V5RnJhbWVEdHM9dCksaS5zYW1wbGVzLnB1c2goZyksbS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgYT1zP2VbMF0+Pj4xJjYzOjMxJmVbMF07c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDE5OmNhc2UgMjA6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6aWYoIXMmJjUhPT1hfHxzJiY1PT09YSlicmVhaztnLnNldFRvS2V5ZnJhbWUoKTticmVhaztjYXNlIDY6Y2FzZSAzOTpjYXNlIDQwOmlmKCFzJiY2IT09YXx8cyYmNj09PWEpYnJlYWs7ci5tZXRhZGF0YVRyYWNrLnNlaVNhbXBsZXMucHVzaChuZXcgRyhjZS5wYXJzZVNFSShjZS5yZW1vdmVFUEIoZSkscyksdCt1KSl9fSkpLGcua2V5ZnJhbWUmJnRoaXMuX2dvcElkKyssZy5nb3BJZD10aGlzLl9nb3BJZH1lbHNlIF9lLndhcm4oIkNhbm5vdCBwYXJzZSBOQUxVcyIsZSl9ZWxzZSAyPT09b3x8X2Uud2FybigiVW5rbm93biBBVkNQYWNrZXRUeXBlOiAiLmNvbmNhdChvKSl9fX0se2tleToiX2NoZWNrQWRkTWV0YU5hbFRvVW5pdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSYmdGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD90Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0+Pj4xJjYzfSkpLmluY2x1ZGVzKDMyKT8odGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD0hMSx0KToodC51bnNoaWZ0KHIucHBzWzBdKSx0LnVuc2hpZnQoci5zcHNbMF0pLHQudW5zaGlmdChyLnZwc1swXSksdC5maWx0ZXIoQm9vbGVhbikpOih0aGlzLl9uZWVkQWRkTWV0YUJlZm9yZUtleUZyYW1lTmFsPSExLHQpfX0se2tleToiX3BhcnNlU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubWV0YWRhdGFUcmFjay5mbHZTY3JpcHRTYW1wbGVzLnB1c2gobmV3IGooeWUucGFyc2UoZSksdCkpfX1dLFt7a2V5OiJwcm9iZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDcwPT09ZVswXSYmNzY9PT1lWzFdJiY4Nj09PWVbMl0mJjE9PT1lWzNdJiZyZShlLDUpPj05fX1dKSxlfSgpO2kod2UsIkFVRElPX1JBVEUiLFs1NTAwLDExZTMsMjJlMyw0NGUzXSksbmV3IHEoIlRzRGVtdXhlciIpO3ZhciB4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSx0aGlzLmR2PW5ldyBEYXRhVmlldyh0KSx0aGlzLnN0YXJ0PXRoaXMub2Zmc2V0PWF8fHRoaXMuZHYuYnl0ZU9mZnNldCx0aGlzLmVuZD1uP3RoaXMuc3RhcnQrbjp0aGlzLnN0YXJ0K3RoaXMuZHYuYnl0ZUxlbmd0aH1yZXR1cm4gbihlLFt7a2V5OiJidWZmZXIiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmR2LmJ1ZmZlcn19LHtrZXk6InVucmVhZExlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZW5kLXRoaXMub2Zmc2V0LDApfX0se2tleToic2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMuc3RhcnR9fSx7a2V5OiJyZWFkRmxvYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PTA7c3dpdGNoKGUpe2Nhc2UgNDp0PXRoaXMuZHYuZ2V0RmxvYXQzMih0aGlzLm9mZnNldCk7YnJlYWs7Y2FzZSA4OnQ9dGhpcy5kdi5nZXRGbG9hdDY0KHRoaXMub2Zmc2V0KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigicmVhZCAiLmNvbmNhdChlLCItYnl0ZSBmbG9hdCBpcyBub3Qgc3VwcG9ydGVkIikpfXJldHVybiB0aGlzLm9mZnNldCs9ZSx0fX0se2tleToiYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vZmZzZXQtPWV9fSx7a2V5OiJza2lwIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9mZnNldCs9ZX19LHtrZXk6InJlYWRJbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub2Zmc2V0O3N3aXRjaCh0aGlzLm9mZnNldCs9ZSxlKXtjYXNlIDE6cmV0dXJuIHRoaXMuZHYuZ2V0SW50OCh0KTtjYXNlIDI6cmV0dXJuIHRoaXMuZHYuZ2V0SW50MTYodCk7Y2FzZSA0OnJldHVybiB0aGlzLmR2LmdldEludDMyKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJyZWFkICIuY29uY2F0KGUsIi1ieXRlIGludGVnZXJzIGlzIG5vdCBzdXBwb3J0ZWQiKSl9fX0se2tleToicmVhZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vZmZzZXQ7c3dpdGNoKHRoaXMub2Zmc2V0Kz1lLGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5kdi5nZXRVaW50OCh0KTtjYXNlIDI6cmV0dXJuIHRoaXMuZHYuZ2V0VWludDE2KHQpO2Nhc2UgMzpyZXR1cm4odGhpcy5kdi5nZXRVaW50MTYodCk8PDgpK3RoaXMuZHYuZ2V0VWludDgodCsyKTtjYXNlIDQ6cmV0dXJuIHRoaXMuZHYuZ2V0VWludDMyKHQpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuYmFjayhlLTQpLHRoaXMucmVhZChlLTQpK3RoaXMuZHYuZ2V0VWludDMyKHQpKk1hdGgucG93KDI1NixlLTQpfX19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMub2Zmc2V0O3N3aXRjaCh0aGlzLm9mZnNldCs9ZSxlKXtjYXNlIDE6cmV0dXJuIHRoaXMuZHYuc2V0VWludDgocix0KTtjYXNlIDI6cmV0dXJuIHRoaXMuZHYuc2V0VWludDE2KHIsdCk7Y2FzZSAzOnJldHVybiB0aGlzLmR2LnNldFVpbnQ4KHIsdD4+PjE2KSx0aGlzLmR2LnNldFVpbnQxNihyKzEsNjU1MzUmdCk7Y2FzZSA0OnJldHVybiB0aGlzLmR2LnNldFVpbnQzMihyLHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ3cml0ZSAiLmNvbmNhdChlLCItYnl0ZSBpbnRlZ2VycyBpcyBub3Qgc3VwcG9ydGVkIikpfX19LHtrZXk6InJlYWRUb0J1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5vZmZzZXR8fGU/dGhpcy5kdi5idWZmZXIuc2xpY2UodGhpcy5vZmZzZXQsZT90aGlzLm9mZnNldCtlOnRoaXMuZW5kKTp0aGlzLmR2LmJ1ZmZlcix0aGlzLm9mZnNldCs9dC5ieXRlTGVuZ3RoLHR9fSx7a2V5OiJyZWFkVG9VaW50OCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkodGhpcy5kdi5idWZmZXIsdGhpcy5vZmZzZXQsZXx8dGhpcy51bnJlYWRMZW5ndGgpO3JldHVybiB0aGlzLm9mZnNldCs9dC5ieXRlTGVuZ3RoLHR9fSx7a2V5OiJyZWFkU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPSIiO3Q8ZTt0Kyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmR2LmdldFVpbnQ4KHRoaXMub2Zmc2V0KSksdGhpcy5vZmZzZXQrKztyZXR1cm4gcn19XSxbe2tleToiZnJvbVVpbnQ4Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9fSx7a2V5OiJjb25jYXRVaW50OHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBVaW50OEFycmF5KGUucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuYnl0ZUxlbmd0aH0pLDApKSxyPTA7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5zZXQoZSxyKSxyKz1lLmJ5dGVMZW5ndGh9KSksdH19LHtrZXk6ImNvbmNhdFVpbnQ4Iix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiB0aGlzLmNvbmNhdFVpbnQ4cyh0KX19XSksZX0oKSxTZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhKXtyKHRoaXMsZSksdGhpcy5vZmZzZXQ9MCx0aGlzLnZhbD10LHRoaXMuc2l6ZT1hfXJldHVybiBuKGUsW3trZXk6InNraXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0Kz1lfX0se2tleToicmVhZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zaXplLXRoaXMub2Zmc2V0LWU7aWYodD49MCl7dmFyIHI9MCxhPTA7aWYodGhpcy5vZmZzZXQrPWUsdGhpcy5zaXplPjMxKXtmb3IoO2E8ZTthKyspcis9TWF0aC5wb3coMixhKTtyZXR1cm4gdGhpcy52YWwvTWF0aC5wb3coMix0KSZyfWZvcig7YTxlO2ErKylyKz0xPDxhO3JldHVybiB0aGlzLnZhbD4+PnQmcn10aHJvdyBuZXcgRXJyb3IoInRoZSBudW1iZXIgb2YgdGhlIHJlYWQgb3BlcmF0aW9uIGV4Y2VlZHMgdGhlIHRvdGFsIGxlbmd0aCBsaW1pdCBvZiBiaXRzIil9fV0sW3trZXk6ImZyb21CeXRlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZSh0LnJlYWQocikscjw8Myl9fV0pLGV9KCksRGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToiZmluZEJveCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxuPVtdO2lmKCF0KXJldHVybiBuO2Zvcih2YXIgaT0wLHM9IiIsbz0wO3QubGVuZ3RoPjc7KXtpZihpPXJlKHQpLHM9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc3ViYXJyYXkoNCw4KSksbz04LDE9PT1pPyhpPWFlKHQsOCksbys9OCk6aXx8KGk9dC5sZW5ndGgpLCFyWzBdfHxzPT09clswXSl7dmFyIHU9dC5zdWJhcnJheSgwLGkpO2lmKCEoci5sZW5ndGg8MikpcmV0dXJuIGUuZmluZEJveCh1LnN1YmFycmF5KG8pLHIuc2xpY2UoMSksYStvKTtuLnB1c2goe3N0YXJ0OmEsc2l6ZTppLGhlYWRlclNpemU6byx0eXBlOnMsZGF0YTp1fSl9YSs9aSx0PXQuc3ViYXJyYXkoaSl9cmV0dXJuIG59fSx7a2V5OiJ0ZmhkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXtlLnRyYWNrSWQ9cmUodCk7dmFyIHI9NCxhPTEmZS5mbGFncyxuPTImZS5mbGFncyxpPTgmZS5mbGFncyxzPTE2JmUuZmxhZ3Msbz0zMiZlLmZsYWdzO2EmJihyKz00LGUuYmFzZURhdGFPZmZzZXQ9cmUodCxyKSxyKz00KSxuJiYoZS5zYW1wbGVEZXNjcmlwdGlvbkluZGV4PXJlKHQscikscis9NCksaSYmKGUuZGVmYXVsdFNhbXBsZUR1cmF0aW9uPXJlKHQscikscis9NCkscyYmKGUuZGVmYXVsdFNhbXBsZVNpemU9cmUodCxyKSxyKz00KSxvJiYoZS5kZWZhdWx0U2FtcGxlRmxhZ3M9cmUodCxyKSl9KSl9fSx7a2V5OiJzaWR4Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0wO2UucmVmZXJlbmNlX0lEPXJlKHQscikscis9NCxlLnRpbWVzY2FsZT1yZSh0LHIpLHIrPTQsMD09PWUudmVyc2lvbj8oZS5lYXJsaWVzdF9wcmVzZW50YXRpb25fdGltZT1yZSh0LHIpLHIrPTQsZS5maXJzdF9vZmZzZXQ9cmUodCxyKSxyKz00KTooZS5lYXJsaWVzdF9wcmVzZW50YXRpb25fdGltZT1hZSh0LHIpLHIrPTgsZS5maXJzdF9vZmZzZXQ9YWUodCxyKSxyKz04KSxyKz0yLGUucmVmZXJlbmNlcz1bXTt2YXIgYT10ZSh0LHIpO3IrPTI7Zm9yKHZhciBuPTA7bjxhO24rKyl7dmFyIGk9e307ZS5yZWZlcmVuY2VzLnB1c2goaSk7dmFyIHM9cmUodCxyKTtyKz00LGkucmVmZXJlbmNlX3R5cGU9cz4+MzEmMSxpLnJlZmVyZW5jZWRfc2l6ZT0yMTQ3NDgzNjQ3JnMsaS5zdWJzZWdtZW50X2R1cmF0aW9uPXJlKHQscikscz1yZSh0LHIrPTQpLHIrPTQsaS5zdGFydHNfd2l0aF9TQVA9cz4+MzEmMSxpLlNBUF90eXBlPXM+PjI4JjcsaS5TQVBfZGVsdGFfdGltZT0yNjg0MzU0NTUmc319KSl9fSx7a2V5OiJtb292Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3QubXZoZD1lLm12aGQoZS5maW5kQm94KHIsWyJtdmhkIl0sYSlbMF0pLHQudHJhaz1lLmZpbmRCb3gocixbInRyYWsiXSxhKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYWsodCl9KSksdC5wc3NoPWUucHNzaChlLmZpbmRCb3gocixbInBzc2giXSxhKVswXSl9KSl9fSx7a2V5OiJtdmhkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0wOzE9PT1lLnZlcnNpb24/KGUudGltZXNjYWxlPXJlKHQsMTYpLGUuZHVyYXRpb249YWUodCwyMCkscis9MjgpOihlLnRpbWVzY2FsZT1yZSh0LDgpLGUuZHVyYXRpb249cmUodCwxMikscis9MTYpLGUubmV4dFRyYWNrSWQ9cmUodCxyKzc2KX0pKX19LHtrZXk6InRyYWsiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC50a2hkPWUudGtoZChlLmZpbmRCb3gocixbInRraGQiXSxhKVswXSksdC5tZGlhPWUubWRpYShlLmZpbmRCb3gocixbIm1kaWEiXSxhKVswXSl9KSl9fSx7a2V5OiJ0a2hkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj14ZS5mcm9tVWludDgodCk7MT09PWUudmVyc2lvbj8oci5yZWFkKDgpLHIucmVhZCg4KSxlLnRyYWNrSWQ9ci5yZWFkKDQpLHIucmVhZCg0KSxlLmR1cmF0aW9uPXIucmVhZCg4KSk6KHIucmVhZCg0KSxyLnJlYWQoNCksZS50cmFja0lkPXIucmVhZCg0KSxyLnJlYWQoNCksZS5kdXJhdGlvbj1yLnJlYWQoNCkpLHIuc2tpcCgxNiksZS5tYXRyaXg9W107Zm9yKHZhciBhPTA7YTwzNjthKyspZS5tYXRyaXgucHVzaChyLnJlYWQoMSkpO3IuYmFjaygzNik7Zm9yKHZhciBuLGk9W10scz0wO3M8MztzKyspaS5wdXNoKG9lKHIucmVhZEludCgyKSxyLnJlYWRJbnQoMikpKSxpLnB1c2gob2Uoci5yZWFkSW50KDIpLHIucmVhZEludCgyKSkpLG49ci5yZWFkSW50KDQpLGkucHVzaChvZShuPj4zMCwxMDczNzQxODIzJm4pKTtlLnJvdGF0aW9uPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPDUpcmV0dXJuIDA7dmFyIHQ9TWF0aC5oeXBvdChlWzBdLGVbM10pLHI9TWF0aC5oeXBvdChlWzFdLGVbNF0pO3JldHVybiAwPT09dHx8MD09PXI/MDoxODAqTWF0aC5hdGFuMihlWzFdL3IsZVswXS90KS9NYXRoLlBJfShpKSxlLndpZHRoPXIucmVhZCg0KSxlLmhlaWdodD1yLnJlYWQoNCl9KSl9fSx7a2V5OiJtZGlhIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3QubWRoZD1lLm1kaGQoZS5maW5kQm94KHIsWyJtZGhkIl0sYSlbMF0pLHQuaGRscj1lLmhkbHIoZS5maW5kQm94KHIsWyJoZGxyIl0sYSlbMF0pLHQubWluZj1lLm1pbmYoZS5maW5kQm94KHIsWyJtaW5mIl0sYSlbMF0pfSkpfX0se2tleToibWRoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9MDsxPT09ZS52ZXJzaW9uPyhlLnRpbWVzY2FsZT1yZSh0LDE2KSxlLmR1cmF0aW9uPWFlKHQsMjApLHIrPTI4KTooZS50aW1lc2NhbGU9cmUodCw4KSxlLmR1cmF0aW9uPXJlKHQsMTIpLHIrPTE2KTt2YXIgYT10ZSh0LHIpO2UubGFuZ3VhZ2U9U3RyaW5nLmZyb21DaGFyQ29kZSg5NisoYT4+MTAmMzEpLDk2KyhhPj41JjMxKSw5NisoMzEmYSkpfSkpfX0se2tleToiaGRsciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7MD09PWUudmVyc2lvbiYmKGUuaGFuZGxlclR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc3ViYXJyYXkoNCw4KSkpfSkpfX0se2tleToibWluZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnZtaGQ9ZS52bWhkKGUuZmluZEJveChyLFsidm1oZCJdLGEpWzBdKSx0LnNtaGQ9ZS5zbWhkKGUuZmluZEJveChyLFsic21oZCJdLGEpWzBdKSx0LnN0Ymw9ZS5zdGJsKGUuZmluZEJveChyLFsic3RibCJdLGEpWzBdKX0pKX19LHtrZXk6InZtaGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCEwLChmdW5jdGlvbihlLHQpe2UuZ3JhcGhpY3Ntb2RlPXRlKHQpLGUub3Bjb2xvcj1bdGUodCwyKSx0ZSh0LDQpLHRlKHQsNildfSkpfX0se2tleToic21oZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7ZS5iYWxhbmNlPXRlKHQpfSkpfX0se2tleToic3RibCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt2YXIgbixpLHM7dC5zdHNkPWUuc3RzZChlLmZpbmRCb3gocixbInN0c2QiXSxhKVswXSksdC5zdHRzPWUuc3R0cyhlLmZpbmRCb3gocixbInN0dHMiXSxhKVswXSksdC5jdHRzPWUuY3R0cyhlLmZpbmRCb3gocixbImN0dHMiXSxhKVswXSksdC5zdHNjPWUuc3RzYyhlLmZpbmRCb3gocixbInN0c2MiXSxhKVswXSksdC5zdHN6PWUuc3RzeihlLmZpbmRCb3gocixbInN0c3oiXSxhKVswXSksdC5zdGNvPWUuc3RjbyhlLmZpbmRCb3gocixbInN0Y28iXSxhKVswXSksdC5zdGNvfHwodC5jbzY0PWUuY282NChlLmZpbmRCb3gocixbImNvNjQiXSxhKVswXSksdC5zdGNvPXQuY282NCk7dmFyIG89bnVsbD09PShuPXQuc3RzZC5lbnRyaWVzWzBdKXx8dm9pZCAwPT09bnx8bnVsbD09PShpPW4uc2luZil8fHZvaWQgMD09PWl8fG51bGw9PT0ocz1pLnNjaGkpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnRlbmMuZGVmYXVsdF9JVl9zaXplO3Quc3Rzcz1lLnN0c3MoZS5maW5kQm94KHIsWyJzdHNzIl0sYSlbMF0pLHQuc2VuYz1lLnNlbmMoZS5maW5kQm94KHIsWyJzZW5jIl0sYSlbMF0sbyl9KSl9fSx7a2V5OiJzZW5jIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ODtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSxyKXt2YXIgYT0wLG49cmUocixhKTthKz00LGUuc2FtcGxlcz1bXTtmb3IodmFyIGk9MDtpPG47aSsrKXtmb3IodmFyIHM9e0luaXRpYWxpemF0aW9uVmVjdG9yOltdfSxvPTA7bzx0O28rKylzLkluaXRpYWxpemF0aW9uVmVjdG9yW29dPXJbYStvXTtpZihhKz10LDImZS5mbGFncyl7cy5zdWJzYW1wbGVzPVtdO3ZhciB1PXRlKHIsYSk7YSs9Mjtmb3IodmFyIGM9MDtjPHU7YysrKXt2YXIgbD17fTtsLkJ5dGVzT2ZDbGVhckRhdGE9dGUocixhKSxhKz0yLGwuQnl0ZXNPZlByb3RlY3RlZERhdGE9cmUocixhKSxhKz00LHMuc3Vic2FtcGxlcy5wdXNoKGwpfX1lLnNhbXBsZXMucHVzaChzKX19KSl9fSx7a2V5OiJwc3NoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sYT1bXSxuPTAsaT0wO2k8MTY7aSsrKWEucHVzaChDZSh0W24raV0pKTtpZihuKz0xNixlLnZlcnNpb24+MCl7dmFyIHM9cmUodCxuKTtuKz00O2Zvcih2YXIgbz0wO288KCIiK3MpLmxlbmd0aDtvKyspZm9yKHZhciB1PTA7dTwxNjt1Kyspe3ZhciBjPXRbbl07bis9MSxyLnB1c2goQ2UoYykpfX12YXIgbD1yZSh0LG4pO2UuZGF0YV9zaXplPWwsbis9NCxlLmtpZD1yLGUuc3lzdGVtX2lkPWEsZS5idWZmZXI9dH0pKX19LHtrZXk6InN0c2QiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCEwLChmdW5jdGlvbih0LHIsYSl7dC5lbnRyeUNvdW50PXJlKHIpLHQuZW50cmllcz1lLmZpbmRCb3goci5zdWJhcnJheSg0KSxbXSxhKzQpLm1hcCgoZnVuY3Rpb24odCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhdjAxIjpyZXR1cm4gZS5hdjAxKHQpO2Nhc2UiYXZjMSI6Y2FzZSJhdmMyIjpjYXNlImF2YzMiOmNhc2UiYXZjNCI6cmV0dXJuIGUuYXZjMSh0KTtjYXNlImh2YzEiOmNhc2UiaGV2MSI6cmV0dXJuIGUuaHZjMSh0KTtjYXNlIm1wNGEiOnJldHVybiBlLm1wNGEodCk7Y2FzZSJhbGF3IjpjYXNlInVsYXciOnJldHVybiBlLmFsYXcodCk7Y2FzZSJlbmNhIjpyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3QuY2hhbm5lbENvdW50PXRlKHIsMTYpLHQuc2FtcGxlc2l6ZT10ZShyLDE4KSx0LnNhbXBsZVJhdGU9cmUociwyNCkvNjU1MzYscj1yLnN1YmFycmF5KDI4KSx0LnNpbmY9ZS5zaW5mKGUuZmluZEJveChyLFsic2luZiJdLGEpWzBdKSx0LmVzZHM9ZS5lc2RzKGUuZmluZEJveChyLFsiZXNkcyJdLGEpWzBdKX0pKTtjYXNlImVuY3YiOnJldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC53aWR0aD10ZShyLDI0KSx0LmhlaWdodD10ZShyLDI2KSx0Lmhvcml6cmVzb2x1dGlvbj1yZShyLDI4KSx0LnZlcnRyZXNvbHV0aW9uPXJlKHIsMzIpLHI9ci5zdWJhcnJheSg3OCksdC5zaW5mPWUuc2luZihlLmZpbmRCb3gocixbInNpbmYiXSxhKVswXSksdC5hdmNDPWUuYXZjQyhlLmZpbmRCb3gocixbImF2Y0MiXSxhKVswXSksdC5odmNDPWUuaHZjQyhlLmZpbmRCb3gocixbImh2Y0MiXSxhKVswXSksdC5wYXNwPWUucGFzcChlLmZpbmRCb3gocixbInBhc3AiXSxhKVswXSl9KSl9fSkpLmZpbHRlcihCb29sZWFuKX0pKX19LHtrZXk6InRlbmMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCExLChmdW5jdGlvbihlLHQpe3ZhciByPTY7ZS5kZWZhdWx0X0lzRW5jcnlwdGVkPXRbcl0scis9MSxlLmRlZmF1bHRfSVZfc2l6ZT10W3JdLHIrPTEsZS5kZWZhdWx0X0tJRD1bXTtmb3IodmFyIGE9MDthPDE2O2ErKyllLmRlZmF1bHRfS0lELnB1c2goQ2UodFtyXSkpLHIrPTF9KSl9fSx7a2V5OiJzY2hpIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3QudGVuYz1lLnRlbmMoZS5maW5kQm94KHIsWyJ0ZW5jIl0sYSlbMF0pfSkpfX0se2tleToic2luZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnNjaGk9ZS5zY2hpKGUuZmluZEJveChyLFsic2NoaSJdLGEpWzBdKSx0LmZybWE9ZS5mcm1hKGUuZmluZEJveChyLFsiZnJtYSJdLGEpWzBdKX0pKX19LHtrZXk6ImZybWEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCExLChmdW5jdGlvbihlLHQpe2UuZGF0YV9mb3JtYXQ9IiI7Zm9yKHZhciByPTA7cjw0O3IrKyllLmRhdGFfZm9ybWF0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbcl0pfSkpfX0se2tleToiY29sciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITEsKGZ1bmN0aW9uKHQscil7dmFyIGE9eGUuZnJvbVVpbnQ4KHIpO3QuZGF0YT1lLmRhdGEsdC5jb2xvclR5cGU9YS5yZWFkU3RyaW5nKDQpLCJuY2x4Ij09PXQuY29sb3JUeXBlPyh0LmNvbG9yUHJpbWFyaWVzPWEucmVhZCgyKSx0LnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzPWEucmVhZCgyKSx0Lm1hdHJpeENvZWZmaWNpZW50cz1hLnJlYWQoMiksdC5mdWxsUmFuZ2VGbGFnPWEucmVhZCgxKT4+Nyk6InJJQ0MiIT09dC5jb2xvclR5cGUmJiJwcm9mIiE9PXQuY29sb3JUeXBlfHwodC5pY2NQcm9maWxlPXIucmVhZFRvVWludDgoKSl9KSl9fSx7a2V5OiJhdjAxIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3ZhciBuPVRlKHQsciksaT1yLnN1YmFycmF5KG4pO2ErPW4sdC5hdjFDPWUuYXYxQyhlLmZpbmRCb3goaSxbImF2MUMiXSxhKVswXSksdC5jb2xyPWUuY29scihlLmZpbmRCb3goaSxbImNvbHIiXSxhKVswXSl9KSl9fSx7a2V5OiJhdjFDIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMSwoZnVuY3Rpb24odCxyKXt0LmRhdGE9ZS5kYXRhO3ZhciBhLG49eGUuZnJvbVVpbnQ4KHIpLGk9U2UuZnJvbUJ5dGUobiw0KTt0Lm1hcmtlcj1pLnJlYWQoMSksdC52ZXJzaW9uPWkucmVhZCg3KSx0LnNlcVByb2ZpbGU9aS5yZWFkKDMpLHQuc2VxTGV2ZWxJZHgwPWkucmVhZCg1KSx0LnNlcVRpZXIwPWkucmVhZCgxKSx0LmhpZ2hCaXRkZXB0aD1pLnJlYWQoMSksdC50d2VsdmVCaXQ9aS5yZWFkKDEpLHQubW9ub2Nocm9tZT1pLnJlYWQoMSksdC5jaHJvbWFTdWJzYW1wbGluZ1g9aS5yZWFkKDEpLHQuY2hyb21hU3Vic2FtcGxpbmdZPWkucmVhZCgxKSx0LmNocm9tYVNhbXBsZVBvc2l0aW9uPWkucmVhZCgyKSx0LnJlc2VydmVkPWkucmVhZCgzKSx0LmluaXRpYWxQcmVzZW50YXRpb25EZWxheVByZXNlbnQ9aS5yZWFkKDEpLHQuaW5pdGlhbFByZXNlbnRhdGlvbkRlbGF5UHJlc2VudD90LmluaXRpYWxQcmVzZW50YXRpb25EZWxheU1pbnVzT25lPWkucmVhZCg0KTp0LmluaXRpYWxQcmVzZW50YXRpb25EZWxheU1pbnVzT25lPTAsdC5jb25maWdPQlVzPW4ucmVhZFRvVWludDgoKSwyPT09dC5zZXFMZXZlbElkeDAmJjE9PT10LmhpZ2hCaXRkZXB0aD9hPTE9PT10LnR3ZWx2ZUJpdD8iMTIiOiIxMCI6dC5zZXFQcm9maWxlPD0yJiYoYT0xPT09dC5oaWdoQml0ZGVwdGg/IjEwIjoiMDgiKSx0LmNvZGVjPVsiYXYwMSIsdC5zZXFQcm9maWxlLCh0LnNlcUxldmVsSWR4MDwxMD8iMCIrdC5zZXFMZXZlbElkeDA6dC5zZXFMZXZlbElkeDApKyh0LnNlcVRpZXIwPyJIIjoiTSIpLGFdLmpvaW4oIi4iKX0pKX19LHtrZXk6ImF2YzEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG49VGUodCxyKSxpPXIuc3ViYXJyYXkobik7YSs9bix0LmF2Y0M9ZS5hdmNDKGUuZmluZEJveChpLFsiYXZjQyJdLGEpWzBdKSx0LnBhc3A9ZS5wYXNwKGUuZmluZEJveChpLFsicGFzcCJdLGEpWzBdKX0pKX19LHtrZXk6ImF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCExLChmdW5jdGlvbih0LHIpe3QuZGF0YT1lLmRhdGEsdC5jb25maWd1cmF0aW9uVmVyc2lvbj1yWzBdLHQuQVZDUHJvZmlsZUluZGljYXRpb249clsxXSx0LnByb2ZpbGVDb21wYXRpYmlsaXR5PXJbMl0sdC5BVkNMZXZlbEluZGljYXRpb249clszXSx0LmNvZGVjPW5lKFtyWzFdLHJbMl0sclszXV0pLHQubGVuZ3RoU2l6ZU1pbnVzT25lPTMmcls0XSx0LnNwc0xlbmd0aD0zMSZyWzVdLHQuc3BzPVtdO2Zvcih2YXIgYT02LG49MDtuPHQuc3BzTGVuZ3RoO24rKyl7dmFyIGk9dGUocixhKTthKz0yLHQuc3BzLnB1c2goci5zdWJhcnJheShhLGEraSkpLGErPWl9dC5wcHNMZW5ndGg9clthXSxhKz0xLHQucHBzPVtdO2Zvcih2YXIgcz0wO3M8dC5wcHNMZW5ndGg7cysrKXt2YXIgbz10ZShyLGEpO2ErPTIsdC5wcHMucHVzaChyLnN1YmFycmF5KGEsYSs9bykpLGErPW99fSkpfX0se2tleToiaHZjMSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt2YXIgbj1UZSh0LHIpLGk9ci5zdWJhcnJheShuKTthKz1uLHQuaHZjQz1lLmh2Y0MoZS5maW5kQm94KGksWyJodmNDIl0sYSlbMF0pLHQucGFzcD1lLnBhc3AoZS5maW5kQm94KGksWyJwYXNwIl0sYSlbMF0pfSkpfX0se2tleToiaHZjQyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITEsKGZ1bmN0aW9uKHQscil7dC5kYXRhPWUuZGF0YSx0LmNvZGVjPSJoZXYxLjEuNi5MOTMuQjAiLHQuY29uZmlndXJhdGlvblZlcnNpb249clswXTt2YXIgYT1yWzFdO3QuZ2VuZXJhbFByb2ZpbGVTcGFjZT1hPj42LHQuZ2VuZXJhbFRpZXJGbGFnPSgzMiZhKT4+NSx0LmdlbmVyYWxQcm9maWxlSWRjPTMxJmEsdC5nZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHk9cmUociwyKSx0LmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3M9ci5zdWJhcnJheSg2LDEyKSx0LmdlbmVyYWxMZXZlbElkYz1yWzEyXSx0LmF2Z0ZyYW1lUmF0ZT10ZShyLDE5KSx0Lm51bU9mQXJyYXlzPXJbMjJdLHQudnBzPVtdLHQuc3BzPVtdLHQucHBzPVtdO2Zvcih2YXIgbj0yMyxpPTAscz0wLG89MCx1PTA7dTx0Lm51bU9mQXJyYXlzO3UrKyl7aT02MyZyW25dLHM9dGUocixuKzEpLG4rPTM7Zm9yKHZhciBjLGw9W10sZj0wO2Y8cztmKyspbz10ZShyLG4pLG4rPTIsbC5wdXNoKHIuc3ViYXJyYXkobixuK28pKSxuKz1vO2lmKDMyPT09aSkoYz10LnZwcykucHVzaC5hcHBseShjLGwpO2Vsc2UgaWYoMzM9PT1pKXt2YXIgZDsoZD10LnNwcykucHVzaC5hcHBseShkLGwpfWVsc2UgaWYoMzQ9PT1pKXt2YXIgaDsoaD10LnBwcykucHVzaC5hcHBseShoLGwpfX19KSl9fSx7a2V5OiJwYXNwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMSwoZnVuY3Rpb24oZSx0KXtlLmhTcGFjaW5nPXJlKHQpLGUudlNwYWNpbmc9cmUodCw0KX0pKX19LHtrZXk6Im1wNGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG49RWUodCxyKTt0LmVzZHM9ZS5lc2RzKGUuZmluZEJveChyLnN1YmFycmF5KG4pLFsiZXNkcyJdLGErbilbMF0pfSkpfX0se2tleToiZXNkcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7ZS5jb2RlYz0ibXA0YS4iO2Zvcih2YXIgcj0wLGE9MCxuPTAsaT0wO3QubGVuZ3RoOyl7Zm9yKGk9dFtyPTBdLGE9dFtyKzFdLHIrPTI7MTI4JmE7KW49KDEyNyZhKTw8NyxhPXRbcl0scis9MTtpZihuKz0xMjcmYSwzPT09aSl0PXQuc3ViYXJyYXkociszKTtlbHNle2lmKDQhPT1pKXtpZig1PT09aSl7dmFyIHM9ZS5jb25maWc9dC5zdWJhcnJheShyLHIrbiksbz0oMjQ4JnNbMF0pPj4zO2lmKDMxPT09byYmcy5sZW5ndGg+PTImJihvPTMyKygoNyZzWzBdKTw8MykrKCgyMjQmc1sxXSk+PjUpKSxlLm9iamVjdFR5cGU9byxlLmNvZGVjKz1vLnRvU3RyaW5nKDE2KSwvXm1wNGEvZ2kudGVzdChlLmNvZGVjKSYmcy5sZW5ndGg+PTIpe3ZhciB1PSg3JnNbMF0pPDwxfCgxMjgmc1sxXSk+Pjc7ZS5zYW1wbGluZ0ZyZXF1ZW5jeUluZGV4PXUsdTx1ZS5GUkVRLmxlbmd0aCYmKGUuc2FtcGxlUmF0ZT11ZS5GUkVRW3VdKX1yZXR1cm4gdm9pZCgiLiI9PT1lLmNvZGVjW2UuY29kZWMubGVuZ3RoLTFdJiYoZS5jb2RlYz1lLmNvZGVjLnN1YnN0cmluZygwLGUuY29kZWMubGVuZ3RoLTEpKSl9cmV0dXJuIHZvaWQoIi4iPT09ZS5jb2RlY1tlLmNvZGVjLmxlbmd0aC0xXSYmKGUuY29kZWM9ZS5jb2RlYy5zdWJzdHJpbmcoMCxlLmNvZGVjLmxlbmd0aC0xKSkpfWUuY29kZWMrPSh0W3JdLnRvU3RyaW5nKDE2KSsiLiIpLnBhZFN0YXJ0KDMsIjAiKSx0PXQuc3ViYXJyYXkocisxMyl9fX0pKX19LHtrZXk6ImFsYXciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCExLChmdW5jdGlvbihlLHQpe0VlKGUsdCl9KSl9fSx7a2V5OiJzdHRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9cmUodCksYT1bXSxuPTQsaT0wO2k8cjtpKyspYS5wdXNoKHtjb3VudDpyZSh0LG4pLGRlbHRhOnJlKHQsbis0KX0pLG4rPTg7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJjdHRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1yZSh0KSxhPVtdLG49NDtpZigxPT09ZS52ZXJzaW9uKWZvcih2YXIgaT0wO2k8cjtpKyspYS5wdXNoKHtjb3VudDpyZSh0LG4pLG9mZnNldDpyZSh0LG4rNCl9KSxuKz04O2Vsc2UgZm9yKHZhciBzPTA7czxyO3MrKylhLnB1c2goe2NvdW50OnJlKHQsbiksb2Zmc2V0Oi0oMSt+cmUodCxuKzQpKX0pLG4rPTg7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHNjIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9cmUodCksYT1bXSxuPTQsaT0wO2k8cjtpKyspYS5wdXNoKHtmaXJzdENodW5rOnJlKHQsbiksc2FtcGxlc1BlckNodW5rOnJlKHQsbis0KSxzYW1wbGVEZXNjcmlwdGlvbkluZGV4OnJlKHQsbis4KX0pLG4rPTEyO2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToic3RzeiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9cmUodCksYT1yZSh0LDQpLG49W107aWYoIXIpZm9yKHZhciBpPTgscz0wO3M8YTtzKyspbi5wdXNoKHJlKHQsaSkpLGkrPTQ7ZS5zYW1wbGVTaXplPXIsZS5zYW1wbGVDb3VudD1hLGUuZW50cnlTaXplcz1ufSkpfX0se2tleToic3RjbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXJlKHQpLGE9W10sbj00LGk9MDtpPHI7aSsrKWEucHVzaChyZSh0LG4pKSxuKz00O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToiY282NCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXJlKHQpLGE9W10sbj00LGk9MDtpPHI7aSsrKWEucHVzaChhZSh0LG4pKSxuKz04O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToic3RzcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXJlKHQpLGE9W10sbj00LGk9MDtpPHI7aSsrKWEucHVzaChyZSh0LG4pKSxuKz00O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToibW9vZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm1maGQ9ZS5tZmhkKGUuZmluZEJveChyLFsibWZoZCJdLGEpWzBdKSx0LnRyYWY9ZS5maW5kQm94KHIsWyJ0cmFmIl0sYSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFmKHQpfSkpfSkpfX0se2tleToibWZoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7ZS5zZXF1ZW5jZU51bWJlcj1yZSh0KX0pKX19LHtrZXk6InRyYWYiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC50ZmhkPWUudGZoZChlLmZpbmRCb3gocixbInRmaGQiXSxhKVswXSksdC50ZmR0PWUudGZkdChlLmZpbmRCb3gocixbInRmZHQiXSxhKVswXSksdC50cnVuPWUudHJ1bihlLmZpbmRCb3gocixbInRydW4iXSxhKVswXSl9KSl9fSx7a2V5OiJ0cnVuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZlcnNpb24sYT1lLmZsYWdzLG49dC5sZW5ndGgsaT1lLnNhbXBsZUNvdW50PXJlKHQpLHM9NDtpZihuPnMmJjEmYSYmKGUuZGF0YU9mZnNldD0tKDErfnJlKHQscykpLHMrPTQpLG4+cyYmNCZhJiYoZS5maXJzdFNhbXBsZUZsYWdzPXJlKHQscykscys9NCksZS5zYW1wbGVzPVtdLG4+cylmb3IodmFyIG8sdT0wO3U8aTt1Kyspbz17fSwyNTYmYSYmKG8uZHVyYXRpb249cmUodCxzKSxzKz00KSw1MTImYSYmKG8uc2l6ZT1yZSh0LHMpLHMrPTQpLDEwMjQmYSYmKG8uZmxhZ3M9cmUodCxzKSxzKz00KSwyMDQ4JmEmJihvLmN0cz1yPy0oMSt+cmUodCxzKzQpKTpyZSh0LHMpLHMrPTQpLGUuc2FtcGxlcy5wdXNoKG8pfSkpfX0se2tleToidGZkdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7MT09PWUudmVyc2lvbj9lLmJhc2VNZWRpYURlY29kZVRpbWU9YWUodCk6ZS5iYXNlTWVkaWFEZWNvZGVUaW1lPXJlKHQpfSkpfX0se2tleToicHJvYmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEhZS5maW5kQm94KHQsWyJmdHlwIl0pfX0se2tleToicGFyc2VTYW1wbGVGbGFncyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJue2lzTGVhZGluZzooMTImZVswXSk+Pj4yLGRlcGVuZHNPbjozJmVbMF0saXNEZXBlbmRlZE9uOigxOTImZVsxXSk+Pj42LGhhc1JlZHVuZGFuY3k6KDQ4JmVbMV0pPj4+NCxwYWRkaW5nVmFsdWU6KDE0JmVbMV0pPj4+MSxpc05vblN5bmNTYW1wbGU6MSZlWzFdLGRlZ3JhZGF0aW9uUHJpb3JpdHk6ZVsyXTw8OHxlWzNdfX19LHtrZXk6Im1vb3ZUb1RyYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGEsbixpPWUudHJhaztpZihpJiZpLmxlbmd0aCl7dmFyIHM9aS5maW5kKChmdW5jdGlvbihlKXt2YXIgdCxyO3JldHVybiJ2aWRlIj09PShudWxsPT09KHQ9ZS5tZGlhKXx8dm9pZCAwPT09dHx8bnVsbD09PShyPXQuaGRscil8fHZvaWQgMD09PXI/dm9pZCAwOnIuaGFuZGxlclR5cGUpfSkpLG89aS5maW5kKChmdW5jdGlvbihlKXt2YXIgdCxyO3JldHVybiJzb3VuIj09PShudWxsPT09KHQ9ZS5tZGlhKXx8dm9pZCAwPT09dHx8bnVsbD09PShyPXQuaGRscil8fHZvaWQgMD09PXI/dm9pZCAwOnIuaGFuZGxlclR5cGUpfSkpO2lmKHMmJnQpe3ZhciB1LGMsbCxmLGQsaCxwLHY9dCx5PW51bGw9PT0odT1zLnRraGQpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnRyYWNrSWQ7bnVsbCE9eSYmKHYuaWQ9cy50a2hkLnRyYWNrSWQpLHYudGtoZER1cmF0aW9uPXMudGtoZC5kdXJhdGlvbix2Lm12aGREdXJ0aW9uPWUubXZoZC5kdXJhdGlvbix2Lm12aGRUaW1lY2FsZT1lLm12aGQudGltZXNjYWxlLHYudGltZXNjYWxlPXYuZm9ybWF0VGltZXNjYWxlPXMubWRpYS5tZGhkLnRpbWVzY2FsZSx2LmR1cmF0aW9uPXMubWRpYS5tZGhkLmR1cmF0aW9ufHx2Lm12aGREdXJ0aW9uL3YubXZoZFRpbWVjYWxlKnYudGltZXNjYWxlLHYucm90YXRpb249cy50a2hkLnJvdGF0aW9uLHYubWF0cml4PXMudGtoZC5tYXRyaXg7dmFyIG0sZyxrLGIsXyx3LFMsQSxCPXMubWRpYS5taW5mLnN0Ymwuc3RzZC5lbnRyaWVzWzBdO2lmKHYud2lkdGg9Qi53aWR0aCx2LmhlaWdodD1CLmhlaWdodCxCLnBhc3AmJih2LnNhclJhdGlvPVtCLnBhc3AuaFNwYWNpbmcsQi5wYXNwLnZTcGFjaW5nXSksQi5hdjFDKXYuY29kZWNUeXBlPXgsdi5jb2RlYz1CLmF2MUMuY29kZWMsdi5hdjFDPUIuYXYxQy5kYXRhLEIuY29sciYmKHYuY29scj1CLmNvbHIuZGF0YSk7ZWxzZSBpZihCLmh2Y0Mpdi5jb2RlY1R5cGU9RCx2LmNvZGVjPUIuaHZjQy5jb2RlYyx2LnZwcz1CLmh2Y0MudnBzLHYuc3BzPUIuaHZjQy5zcHMsdi5wcHM9Qi5odmNDLnBwcyx2Lmh2Y0M9Qi5odmNDLmRhdGE7ZWxzZXtpZighQi5hdmNDKXRocm93IG5ldyBFcnJvcigidW5rbm93biB2aWRlbyBzdHNkIGVudHJ5Iik7di5jb2RlYz1CLmF2Y0MuY29kZWMsdi5zcHM9Qi5hdmNDLnNwcyx2LnBwcz1CLmF2Y0MucHBzfWlmKHYucHJlc2VudD0hMCx2LmV4dD17fSx2LmV4dC5zdHNzPW51bGw9PT0oYz1zLm1kaWEpfHx2b2lkIDA9PT1jfHxudWxsPT09KGw9Yy5taW5mKXx8dm9pZCAwPT09bHx8bnVsbD09PShmPWwuc3RibCl8fHZvaWQgMD09PWY/dm9pZCAwOmYuc3Rzcyx2LmV4dC5jdHRzPW51bGw9PT0oZD1zLm1kaWEpfHx2b2lkIDA9PT1kfHxudWxsPT09KGg9ZC5taW5mKXx8dm9pZCAwPT09aHx8bnVsbD09PShwPWguc3RibCl8fHZvaWQgMD09PXA/dm9pZCAwOnAuY3R0cyxCJiYiZW5jdiI9PT1CLnR5cGUpdi5pc1ZpZGVvRW5jcnlwdGlvbj0hMCxCLmRlZmF1bHRfS0lEPW51bGw9PT0obT1CLnNpbmYpfHx2b2lkIDA9PT1tfHxudWxsPT09KGc9bS5zY2hpKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy50ZW5jLmRlZmF1bHRfS0lELEIuZGVmYXVsdF9Jc0VuY3J5cHRlZD1udWxsPT09KGs9Qi5zaW5mKXx8dm9pZCAwPT09a3x8bnVsbD09PShiPWsuc2NoaSl8fHZvaWQgMD09PWI/dm9pZCAwOmIudGVuYy5kZWZhdWx0X0lzRW5jcnlwdGVkLEIuZGVmYXVsdF9JVl9zaXplPW51bGw9PT0oXz1CLnNpbmYpfHx2b2lkIDA9PT1ffHxudWxsPT09KHc9Xy5zY2hpKXx8dm9pZCAwPT09dz92b2lkIDA6dy50ZW5jLmRlZmF1bHRfSVZfc2l6ZSx2LnZpZGVvU2VuYz1zLm1kaWEubWluZi5zdGJsLnNlbmMmJnMubWRpYS5taW5mLnN0Ymwuc2VuYy5zYW1wbGVzLEIuZGF0YV9mb3JtYXQ9bnVsbD09PShTPUIuc2luZil8fHZvaWQgMD09PVN8fG51bGw9PT0oQT1TLmZybWEpfHx2b2lkIDA9PT1BP3ZvaWQgMDpBLmRhdGFfZm9ybWF0LHYudXNlRU1FPWUudXNlRU1FLHYua2lkVmFsdWU9ZS5raWRWYWx1ZSx2LnBzc2g9ZS5wc3NoLHYuZW5jdj1CfWlmKG8mJnIpe3ZhciBVLEMsUCxJLE0seixPLFIsTCxWPXIsRj1udWxsPT09KFU9by50a2hkKXx8dm9pZCAwPT09VT92b2lkIDA6VS50cmFja0lkO251bGwhPUYmJihWLmlkPW8udGtoZC50cmFja0lkKSxWLnRraGREdXJhdGlvbj1vLnRraGQuZHVyYXRpb24sVi5tdmhkRHVydGlvbj1lLm12aGQuZHVyYXRpb24sVi5tdmhkVGltZWNhbGU9ZS5tdmhkLnRpbWVzY2FsZSxWLnRpbWVzY2FsZT1WLmZvcm1hdFRpbWVzY2FsZT1vLm1kaWEubWRoZC50aW1lc2NhbGUsVi5kdXJhdGlvbj1vLm1kaWEubWRoZC5kdXJhdGlvbnx8Vi5tdmhkRHVydGlvbi9WLm12aGRUaW1lY2FsZSpWLnRpbWVzY2FsZTt2YXIgTixqLEcsSCxLLHEsVyxYLFk9by5tZGlhLm1pbmYuc3RibC5zdHNkLmVudHJpZXNbMF07c3dpdGNoKFYuc2FtcGxlU2l6ZT1ZLnNhbXBsZVNpemUsVi5zYW1wbGVSYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PTA7dD0ibXA0YSI9PT1lLnR5cGU/ZS5zYW1wbGVSYXRlPjA/ZS5zYW1wbGVSYXRlOmUuZXNkcy5zYW1wbGVSYXRlOmUuc2FtcGxlUmF0ZTtyZXR1cm4gdHx8MH0oWSksVi5jaGFubmVsQ291bnQ9WS5jaGFubmVsQ291bnQsVi5wcmVzZW50PSEwLFkudHlwZSl7Y2FzZSJhbGF3IjpWLmNvZGVjVHlwZT1WLmNvZGVjPVQsVi5zYW1wbGVSYXRlPThlMzticmVhaztjYXNlInVsYXciOlYuY29kZWNUeXBlPVYuY29kZWM9RSxWLnNhbXBsZVJhdGU9OGUzO2JyZWFrO2RlZmF1bHQ6Vi5zYW1wbGVEdXJhdGlvbj11ZS5nZXRGcmFtZUR1cmF0aW9uKFYuc2FtcGxlUmF0ZSxWLnRpbWVzY2FsZSksVi5zYW1wbGVSYXRlSW5kZXg9dWUuZ2V0UmF0ZUluZGV4QnlSYXRlKFYuc2FtcGxlUmF0ZSksVi5vYmplY3RUeXBlPShudWxsPT09KGE9WS5lc2RzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vYmplY3RUeXBlKXx8MixZLmVzZHMmJihWLmNvbmZpZz1BcnJheS5mcm9tKFkuZXNkcy5jb25maWcpKSxWLmNvZGVjPShudWxsPT09KG49WS5lc2RzKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlYyl8fCJtcDRhLjQwLjIifWlmKFYuc2FtcGxlRHVyYXRpb249dWUuZ2V0RnJhbWVEdXJhdGlvbihWLnNhbXBsZVJhdGUsVi50aW1lc2NhbGUpLFYub2JqZWN0VHlwZT0obnVsbD09PShDPVkuZXNkcyl8fHZvaWQgMD09PUM/dm9pZCAwOkMub2JqZWN0VHlwZSl8fDIsWS5lc2RzJiYoWS5lc2RzLmNvbmZpZz9WLmNvbmZpZz1BcnJheS5mcm9tKFkuZXNkcy5jb25maWcpOmNvbnNvbGUud2FybigiZXNkcyBjb25maWcgaXMgbnVsbCIpKSxWLmNvZGVjPShudWxsPT09KFA9WS5lc2RzKXx8dm9pZCAwPT09UD92b2lkIDA6UC5jb2RlYyl8fCJtcDRhLjQwLjIiLFYuc2FtcGxlUmF0ZUluZGV4PXVlLmdldFJhdGVJbmRleEJ5UmF0ZShWLnNhbXBsZVJhdGUpLFYuZXh0PXt9LFYuZXh0LnN0c3M9bnVsbD09PShJPW8ubWRpYSl8fHZvaWQgMD09PUl8fG51bGw9PT0oTT1JLm1pbmYpfHx2b2lkIDA9PT1NfHxudWxsPT09KHo9TS5zdGJsKXx8dm9pZCAwPT09ej92b2lkIDA6ei5zdHNzLFYuZXh0LmN0dHM9bnVsbD09PShPPW8ubWRpYSl8fHZvaWQgMD09PU98fG51bGw9PT0oUj1PLm1pbmYpfHx2b2lkIDA9PT1SfHxudWxsPT09KEw9Ui5zdGJsKXx8dm9pZCAwPT09TD92b2lkIDA6TC5jdHRzLFYucHJlc2VudD0hMCxZJiYiZW5jYSI9PT1ZLnR5cGUpVi5pc0F1ZGlvRW5jcnlwdGlvbj0hMCxZLmRhdGFfZm9ybWF0PW51bGw9PT0oTj1ZLnNpbmYpfHx2b2lkIDA9PT1OfHxudWxsPT09KGo9Ti5mcm1hKXx8dm9pZCAwPT09aj92b2lkIDA6ai5kYXRhX2Zvcm1hdCxZLmRlZmF1bHRfS0lEPW51bGw9PT0oRz1ZLnNpbmYpfHx2b2lkIDA9PT1HfHxudWxsPT09KEg9Ry5zY2hpKXx8dm9pZCAwPT09SD92b2lkIDA6SC50ZW5jLmRlZmF1bHRfS0lELFkuZGVmYXVsdF9Jc0VuY3J5cHRlZD1udWxsPT09KEs9WS5zaW5mKXx8dm9pZCAwPT09S3x8bnVsbD09PShxPUsuc2NoaSl8fHZvaWQgMD09PXE/dm9pZCAwOnEudGVuYy5kZWZhdWx0X0lzRW5jcnlwdGVkLFkuZGVmYXVsdF9JVl9zaXplPW51bGw9PT0oVz1ZLnNpbmYpfHx2b2lkIDA9PT1XfHxudWxsPT09KFg9Vy5zY2hpKXx8dm9pZCAwPT09WD92b2lkIDA6WC50ZW5jLmRlZmF1bHRfSVZfc2l6ZSxWLmF1ZGlvU2VuYz1vLm1kaWEubWluZi5zdGJsLnNlbmMmJm8ubWRpYS5taW5mLnN0Ymwuc2VuYy5zYW1wbGVzLFYudXNlRU1FPWUudXNlRU1FLFYua2lkVmFsdWU9ZS5raWRWYWx1ZSxWLmVuY2E9WX1pZihyJiYoci5pc1ZpZGVvRW5jcnlwdGlvbj0hIXQmJnQuaXNWaWRlb0VuY3J5cHRpb24pLHQmJih0LmlzQXVkaW9FbmNyeXB0aW9uPSEhciYmci5pc0F1ZGlvRW5jcnlwdGlvbiksbnVsbCE9dCYmdC5lbmN2fHxudWxsIT1yJiZyLmVuY2Epe3ZhciBRLFosSj1udWxsPT10fHxudWxsPT09KFE9dC5lbmN2KXx8dm9pZCAwPT09UT92b2lkIDA6US5kZWZhdWx0X0tJRCwkPW51bGw9PXJ8fG51bGw9PT0oWj1yLmVuY2EpfHx2b2lkIDA9PT1aP3ZvaWQgMDpaLmRlZmF1bHRfS0lELGVlPUp8fCQ/KEp8fCQpLmpvaW4oIiIpOm51bGw7dCYmKHQua2lkPWVlKSxyJiYoci5raWQ9ZWUpfXJldHVybiB0JiYodC5mbGFncz0zODQxKSxyJiYoci5mbGFncz0xNzkzKSx7dmlkZW9UcmFjazp0LGF1ZGlvVHJhY2s6cn19fX0se2tleToiZXZhbHVhdGVEZWZhdWx0RHVyYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxuPW51bGw9PXR8fG51bGw9PT0oYT10LnNhbXBsZXMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aDtyZXR1cm4gbj8xMDI0Km4vdC50aW1lc2NhbGUqZS50aW1lc2NhbGUvcjoxMDI0fX0se2tleToibW9vZlRvU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24odCxyLGEpe3ZhciBuPXt9O3JldHVybiB0Lm1maGQmJihyJiYoci5zZXF1ZW5jZU51bWJlcj10Lm1maGQuc2VxdWVuY2VOdW1iZXIpLGEmJihhLnNlcXVlbmNlTnVtYmVyPXQubWZoZC5zZXF1ZW5jZU51bWJlcikpLHQudHJhZi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnRmaGQscz10LnRmZHQsbz10LnRydW47aWYoaSYmbyl7cyYmKHImJnIuaWQ9PT1pLnRyYWNrSWQmJihyLmJhc2VNZWRpYURlY29kZVRpbWU9cy5iYXNlTWVkaWFEZWNvZGVUaW1lKSxhJiZhLmlkPT09aS50cmFja0lkJiYoYS5iYXNlTWVkaWFEZWNvZGVUaW1lPXMuYmFzZU1lZGlhRGVjb2RlVGltZSkpO3ZhciB1PWkuZGVmYXVsdFNhbXBsZVNpemV8fDAsYz1pLmRlZmF1bHRTYW1wbGVEdXJhdGlvbnx8ZS5ldmFsdWF0ZURlZmF1bHREdXJhdGlvbihyLGEsby5zYW1wbGVzLmxlbmd0aHx8by5zYW1wbGVDb3VudCksbD1vLmRhdGFPZmZzZXR8fDAsZj0wLGQ9LTE7aWYoIW8uc2FtcGxlcy5sZW5ndGgmJm8uc2FtcGxlQ291bnQpe25baS50cmFja0lkXT1bXTtmb3IodmFyIGg9MDtoPG8uc2FtcGxlQ291bnQ7aCsrKW5baS50cmFja0lkXS5wdXNoKHtvZmZzZXQ6bCxkdHM6ZixkdXJhdGlvbjpjLHNpemU6dX0pLGYrPWMsbCs9dX1lbHNlIG5baS50cmFja0lkXT1vLnNhbXBsZXMubWFwKChmdW5jdGlvbihlLHQpe3JldHVybihlPXtvZmZzZXQ6bCxkdHM6ZixwdHM6ZisoZS5jdHN8fDApLGR1cmF0aW9uOmUuZHVyYXRpb258fGMsc2l6ZTplLnNpemV8fHUsZ29wSWQ6ZCxrZXlmcmFtZTowPT09dHx8bnVsbCE9PWUuZmxhZ3MmJnZvaWQgMCE9PWUuZmxhZ3MmJig2NTUzNiZlLmZsYWdzKT4+PjAhPTY1NTM2fSkua2V5ZnJhbWUmJihkKyssZS5nb3BJZD1kKSxmKz1lLmR1cmF0aW9uLGwrPWUuc2l6ZSxlfSkpfX0pKSxufX0se2tleToibW9vdlRvU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmFrO2lmKHQmJnQubGVuZ3RoKXt2YXIgcj10LmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInZpZGUiPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSksYT10LmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInNvdW4iPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSk7aWYocnx8YSl7dmFyIG4saTtpZihyKXt2YXIgcyxvLHU9bnVsbD09PShzPXIubWRpYSl8fHZvaWQgMD09PXN8fG51bGw9PT0obz1zLm1pbmYpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0Ymw7aWYoIXUpcmV0dXJuO3ZhciBjPXUuc3R0cyxsPXUuc3RzYyxmPXUuc3RzeixkPXUuc3RjbyxoPXUuc3RzcyxwPXUuY3R0cztpZighKGMmJmwmJmYmJmQmJmgpKXJldHVybjtuPUFlKGMsbCxmLGQscCxoKX1pZihhKXt2YXIgdix5LG0sZz1udWxsPT09KHY9YS5tZGlhKXx8dm9pZCAwPT09dnx8bnVsbD09PSh5PXYubWluZil8fHZvaWQgMD09PXk/dm9pZCAwOnkuc3RibDtpZighZylyZXR1cm47dmFyIGs9bnVsbD09PShtPWEubWRpYS5tZGhkKXx8dm9pZCAwPT09bT92b2lkIDA6bS50aW1lc2NhbGUsYj1nLnN0dHMsXz1nLnN0c2Msdz1nLnN0c3oseD1nLnN0Y287aWYoIShrJiZiJiZfJiZ3JiZ4KSlyZXR1cm47aT1BZShiLF8sdyx4KX1yZXR1cm57dmlkZW9TYW1wbGVzOm4sYXVkaW9TYW1wbGVzOml9fX19fV0pLGV9KCk7ZnVuY3Rpb24gQWUoZSx0LHIsYSxuLGkpe3ZhciBzLG8sdSxjPVtdLGw9bnVsbD09bj92b2lkIDA6bi5lbnRyaWVzLGY9dC5lbnRyaWVzLGQ9YS5lbnRyaWVzLGg9ci5lbnRyeVNpemVzLHA9bnVsbD09aT92b2lkIDA6aS5lbnRyaWVzO3AmJihzPXt9LHAuZm9yRWFjaCgoZnVuY3Rpb24oZSl7c1tlLTFdPSEwfSkpKSxsJiYobz1bXSxsLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNvdW50LHI9ZS5vZmZzZXQsYT0wO2E8dDthKyspby5wdXNoKHIpfSkpKTt2YXIgdj0tMSx5PTAsbT0wLGc9MCxrPTAsYj0wLF89ZlswXS5zYW1wbGVzUGVyQ2h1bmssdz1mWzFdP2ZbMV0uZmlyc3RDaHVuay0xOjEvMDtyZXR1cm4gZS5lbnRyaWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNvdW50LGE9ZS5kZWx0YSxuPTA7bjx0O24rKyl1PXtkdHM6eSxkdXJhdGlvbjphLHNpemU6aFttXXx8ci5zYW1wbGVTaXplLG9mZnNldDpkW2ddK2IsaW5kZXg6bX0scCYmKHUua2V5ZnJhbWU9c1ttXSx1LmtleWZyYW1lJiZ2KyssdS5nb3BJZD12KSxvJiZtPG8ubGVuZ3RoJiYodS5wdHM9dS5kdHMrb1ttXSksYy5wdXNoKHUpLHkrPWEsKyttPF8/Yis9dS5zaXplOihnKyssYj0wLGc+PXcmJihrKyssdz1mW2srMV0/ZltrKzFdLmZpcnN0Q2h1bmstMToxLzApLF8rPWZba10uc2FtcGxlc1BlckNodW5rKX0pKSxjfWZ1bmN0aW9uIFRlKGUsdCl7cmV0dXJuIGUuZGF0YVJlZmVyZW5jZUluZGV4PXRlKHQsNiksZS53aWR0aD10ZSh0LDI0KSxlLmhlaWdodD10ZSh0LDI2KSxlLmhvcml6cmVzb2x1dGlvbj1yZSh0LDI4KSxlLnZlcnRyZXNvbHV0aW9uPXJlKHQsMzIpLGUuZnJhbWVDb3VudD10ZSh0LDQwKSxlLmRlcHRoPXRlKHQsNzQpLDc4fWZ1bmN0aW9uIEVlKGUsdCl7cmV0dXJuIGUuZGF0YVJlZmVyZW5jZUluZGV4PXRlKHQsNiksZS5jaGFubmVsQ291bnQ9dGUodCwxNiksZS5zYW1wbGVTaXplPXRlKHQsMTgpLGUuc2FtcGxlUmF0ZT1yZSh0LDI0KS82NTUzNiwyOH1mdW5jdGlvbiBCZShlLHQscil7aWYoZSl7aWYoZS5zaXplIT09ZS5kYXRhLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImJveCAiLmNvbmNhdChlLnR5cGUsIiBzaXplICE9PSBkYXRhLmxlbmd0aCIpKTt2YXIgYT17c3RhcnQ6ZS5zdGFydCxzaXplOmUuc2l6ZSxoZWFkZXJTaXplOmUuaGVhZGVyU2l6ZSx0eXBlOmUudHlwZX07cmV0dXJuIHQmJihhLnZlcnNpb249ZS5kYXRhW2UuaGVhZGVyU2l6ZV0sYS5mbGFncz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4oZVt0XTw8MTYpKyhlW3QrMV08PDgpKyhlW3QrMl18fDApfShlLmRhdGEsZS5oZWFkZXJTaXplKzEpLGEuaGVhZGVyU2l6ZSs9NCkscihhLGUuZGF0YS5zdWJhcnJheShhLmhlYWRlclNpemUpLGEuc3RhcnQrYS5oZWFkZXJTaXplKSxhfX12YXIgVWU9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1TdHJpbmcociksbj10Pj4wLGk9TWF0aC5jZWlsKG4vYS5sZW5ndGgpLHM9W10sbz1TdHJpbmcoZSk7aS0tOylzLnB1c2goYSk7cmV0dXJuIHMuam9pbigiIikuc3Vic3RyaW5nKDAsbi1vLmxlbmd0aCkrb30sQ2U9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KHQpLGE9MDthPHQ7YSsrKXJbYV09YXJndW1lbnRzW2FdO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHVzaChVZShOdW1iZXIodCkudG9TdHJpbmcoMTYpLDIsMCkpfSkpLGVbMF19O2Z1bmN0aW9uIFBlKGUpe2Zvcih2YXIgdD0wLHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyPjE/ci0xOjApLG49MTtuPHI7bisrKWFbbi0xXT1hcmd1bWVudHNbbl07YS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz1lLmxlbmd0aH0pKTt2YXIgaT1uZXcgZSh0KSxzPTA7cmV0dXJuIGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5zZXQoZSxzKSxzKz1lLmxlbmd0aH0pKSxpfXZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSksdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMCl9cmV0dXJuIG4oZSxbe2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KHQpLGE9MDthPHQ7YSsrKXJbYV09YXJndW1lbnRzW2FdO3IuZm9yRWFjaCgoZnVuY3Rpb24odCl7dD9lLmJ1ZmZlcj1QZShVaW50OEFycmF5LGUuYnVmZmVyLHQpOndpbmRvdy5jb25zb2xlLndhcm4odCl9KSl9fV0sW3trZXk6IndyaXRlVWludDE2Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW2U+PjgmMjU1LDI1NSZlXSl9fSx7a2V5OiJ3cml0ZVVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj4yNCxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdKX19XSksZX0oKSxNZT1NYXRoLnBvdygyLDMyKS0xLHplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6ImJveCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodD4xP3QtMTowKSxhPTE7YTx0O2ErKylyW2EtMV09YXJndW1lbnRzW2FdO3ZhciBuPTgrKHI9ci5maWx0ZXIoQm9vbGVhbikpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LmJ5dGVMZW5ndGh9KSwwKSxpPW5ldyBVaW50OEFycmF5KG4pO2lbMF09bj4+MjQmMjU1LGlbMV09bj4+MTYmMjU1LGlbMl09bj4+OCYyNTUsaVszXT0yNTUmbixpLnNldChlLDQpO3ZhciBzPTg7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5zZXQoZSxzKSxzKz1lLmJ5dGVMZW5ndGh9KSksaX19LHtrZXk6ImZ0eXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT1iJiZlLmNvZGVjVHlwZT09PUR9KSk/ZS5GVFlQSEVWMTplLkZUWVBBVkMxfX0se2tleToiaW5pdFNlZ21lbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiAkKGUuZnR5cCh0KSxlLm1vb3YodCkpfX0se2tleToicHNzaCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoWzEsMCwwLDBdLmNvbmNhdChbMTYsMTE5LDIzOSwyMzYsMTkyLDE3OCw3NywyLDE3MiwyMjcsNjAsMzAsODIsMjI2LDI1MSw3NV0sWzAsMCwwLDFdLHNlKHQua2lkKSxbMCwwLDAsMF0pKTtyZXR1cm4gZS5ib3goZS50eXBlcy5wc3NoLHIpfX0se2tleToibW9vdiIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodFswXS51c2VFTUUmJih0WzBdLmVuY3Z8fHRbMF0uZW5jYSkpe3RbMF0ucHNzaHx8KHRbMF0ucHNzaD17a2lkOnRbMF0ua2lkfSk7dmFyIHI9dGhpcy5wc3NoKHRbMF0ucHNzaCk7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubW9vdixlLm12aGQodFswXS5tdmhkRHVydGlvbnx8dFswXS5kdXJhdGlvbix0WzBdLm12aGRUaW1lY2FsZXx8dFswXS50aW1lc2NhbGUpLGUubXZleCh0KV0uY29uY2F0KHkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYWsodCl9KSkpLFtyXSkpfXJldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb3YsZS5tdmhkKHRbMF0ubXZoZER1cnRpb258fHRbMF0uZHVyYXRpb24sdFswXS5tdmhkVGltZWNhbGV8fHRbMF0udGltZXNjYWxlKV0uY29uY2F0KHkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYWsodCl9KSkpLFtlLm12ZXgodCldKSl9fSx7a2V5OiJtdmhkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06OWU0LGE9ZS5ib3goZS50eXBlcy5tdmhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCxyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMCwxLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjU1LDI1NSwyNTUsMjU1XSkpO3JldHVybiBhfX0se2tleToidHJhayIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhayxlLnRraGQodC5pZCx0LnRraGREdXJhdGlvbnx8MCx0LndpZHRoLHQuaGVpZ2h0KSxlLm1kaWEodCkpfX0se2tleToidGtoZCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLGk9ZS5ib3goZS50eXBlcy50a2hkLG5ldyBVaW50OEFycmF5KFswLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCx0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMCwwLDAscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmciwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2NCwwLDAsMCxhPj44JjI1NSwyNTUmYSwwLDAsbj4+OCYyNTUsMjU1Jm4sMCwwXSkpO3JldHVybiBpfX0se2tleToibWRpYSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWRpYSxlLm1kaGQodC5kdXJhdGlvbix0LnRpbWVzY2FsZSksZS5oZGxyKHQudHlwZSksZS5taW5mKHQpKX19LHtrZXk6Im1kaGQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo5ZTQsYT1lLmJveChlLnR5cGVzLm1kaGQsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLHI+PjI0JjI1NSxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCw4NSwxOTYsMCwwXSkpO3JldHVybiBhfX0se2tleToiaGRsciIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMuaGRscixlLkhETFJfVFlQRVNbdF0pfX0se2tleToibWluZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWluZix0LnR5cGU9PT1iP2UuVk1IRDplLlNNSEQsZS5ESU5GLGUuc3RibCh0KSl9fSx7a2V5OiJzdGJsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1bXTtyZXR1cm4gdCYmdC5leHQmJnQuZXh0LnN0c3MmJnIucHVzaChlLnN0c3ModC5leHQuc3Rzcy5lbnRyaWVzKSksZS5ib3goZS50eXBlcy5zdGJsLGUuc3RzZCh0KSxlLlNUVFMsclswXSxlLlNUU0MsZS5TVFNaLGUuU1RDTyl9fSx7a2V5OiJzdHNkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4gcj0iYXVkaW8iPT09dC50eXBlP3QudXNlRU1FJiZ0LmVuY2E/ZS5lbmNhKHQpOnQuY29kZWNUeXBlPT09Qj9lLm9wdXModCk6ZS5tcDRhKHQpOnQudXNlRU1FJiZ0LmVuY3Y/ZS5lbmN2KHQpOnQuYXYxQz9lLmF2MDEodCk6ZS5hdmMxaGV2MSh0KSxlLmJveChlLnR5cGVzLnN0c2QsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMV0pLHIpfX0se2tleToiZW5jYSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5lbmNhLmNoYW5uZWxDb3VudCxhPXQuZW5jYS5zYW1wbGVSYXRlLG49bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCxyLDAsMTYsMCwwLDAsMCxhPj44JjI1NSwyNTUmYSwwLDBdKSxpPWUuZXNkcyh0LmNvbmZpZykscz1lLnNpbmYodC5lbmNhKTtyZXR1cm4gZS5ib3goZS50eXBlcy5lbmNhLG4saSxzKX19LHtrZXk6ImVuY3YiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLGEsbj10LnNwcy5sZW5ndGg+MD90LnNwc1swXTpbXSxpPXQucHBzLmxlbmd0aD4wP3QucHBzWzBdOltdLHM9dC53aWR0aCxvPXQuaGVpZ2h0LHU9dC5zYXJSYXRpb1swXSxjPXQuc2FyUmF0aW9bMV0sbD1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAscz4+OCYyNTUsMjU1JnMsbz4+OCYyNTUsMjU1Jm8sMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMTgsMTAwLDk3LDEwNSwxMDgsMTIxLDEwOSwxMTEsMTE2LDEwNSwxMTEsMTEwLDQ3LDEwNCwxMDgsMTE1LDQ2LDEwNiwxMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI0LDE3LDE3XSksZj1uZXcgVWludDhBcnJheSgocj0oYT1bMSxuWzFdLG5bMl0sblszXSwyNTUsMjI1LG4ubGVuZ3RoPj4+OCYyNTUsMjU1Jm4ubGVuZ3RoXSkuY29uY2F0LmFwcGx5KGEseShuKSkuY29uY2F0KFsxLGkubGVuZ3RoPj4+OCYyNTUsMjU1JmkubGVuZ3RoXSkpLmNvbmNhdC5hcHBseShyLHkoaSkpKSxkPW5ldyBVaW50OEFycmF5KFswLDAsODgsNTcsMCwxNSwyMDAsMTkyLDAsNCw4Niw3Ml0pLGg9ZS5zaW5mKHQuZW5jdikscD1uZXcgVWludDhBcnJheShbdT4+MjQsdT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1LGM+PjI0LGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmY10pO3JldHVybiBlLmJveChlLnR5cGVzLmVuY3YsbCxlLmJveChlLnR5cGVzLmF2Y0MsZiksZS5ib3goZS50eXBlcy5idHJ0LGQpLGgsZS5ib3goZS50eXBlcy5wYXNwLHApKX19LHtrZXk6InNjaGkiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFtdKSxhPWUudGVuYyh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy5zY2hpLHIsYSl9fSx7a2V5OiJ0ZW5jIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMjU1JnQuZGVmYXVsdF9Jc0VuY3J5cHRlZCwyNTUmdC5kZWZhdWx0X0lWX3NpemVdLmNvbmNhdChzZSh0LmRlZmF1bHRfS0lEKSkpO3JldHVybiBlLmJveChlLnR5cGVzLnRlbmMscil9fSx7a2V5OiJzaW5mIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgVWludDhBcnJheShbXSksYT1uZXcgVWludDhBcnJheShbdC5kYXRhX2Zvcm1hdC5jaGFyQ29kZUF0KDApLHQuZGF0YV9mb3JtYXQuY2hhckNvZGVBdCgxKSx0LmRhdGFfZm9ybWF0LmNoYXJDb2RlQXQoMiksdC5kYXRhX2Zvcm1hdC5jaGFyQ29kZUF0KDMpXSksbj1uZXcgVWludDhBcnJheShbMCwwLDAsMCw5OSwxMDEsMTEwLDk5LDAsMSwwLDBdKSxpPWUuc2NoaSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy5zaW5mLHIsZS5ib3goZS50eXBlcy5mcm1hLGEpLGUuYm94KGUudHlwZXMuc2NobSxuKSxpKX19LHtrZXk6ImF2MDEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLmF2MDEsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLHQud2lkdGg+PjgmMjU1LDI1NSZ0LndpZHRoLHQuaGVpZ2h0Pj44JjI1NSwyNTUmdC5oZWlnaHQsMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMTcsMTddKSx0LmF2MUMsdC5jb2xyKX19LHtrZXk6ImF2YzFoZXYxIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LmNvZGVjVHlwZT09PUQsYT1yP2UudHlwZXMuaHZjMTplLnR5cGVzLmF2YzEsbj1yP2UuaHZjQyh0KTplLmF2Y0ModCksaT1bbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLHQud2lkdGg+PjgmMjU1LDI1NSZ0LndpZHRoLHQuaGVpZ2h0Pj44JjI1NSwyNTUmdC5oZWlnaHQsMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMTcsMTddKSxuXTtyZXR1cm4gcj9pLnB1c2goZS5ib3goZS50eXBlcy5maWVsLG5ldyBVaW50OEFycmF5KFsxLDBdKSkpOnQuc2FyUmF0aW8mJnQuc2FyUmF0aW8ubGVuZ3RoPjEmJmkucHVzaChlLnBhc3AodC5zYXJSYXRpbykpLGUuYm94LmFwcGx5KGUsW2FdLmNvbmNhdChpKSl9fSx7a2V5OiJhdmNDIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcixhLG4saT1bXSxzPVtdO3JldHVybiB0LnNwcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuPWUuYnl0ZUxlbmd0aCxpLnB1c2gobj4+PjgmMjU1KSxpLnB1c2goMjU1Jm4pLGkucHVzaC5hcHBseShpLHkoZSkpfSkpLHQucHBzLmZvckVhY2goKGZ1bmN0aW9uKGUpe249ZS5ieXRlTGVuZ3RoLHMucHVzaChuPj4+OCYyNTUpLHMucHVzaCgyNTUmbikscy5wdXNoLmFwcGx5KHMseShlKSl9KSksZS5ib3goZS50eXBlcy5hdmNDLG5ldyBVaW50OEFycmF5KChyPShhPVsxLGlbM10saVs0XSxpWzVdLDI1NSwyMjR8dC5zcHMubGVuZ3RoXSkuY29uY2F0LmFwcGx5KGEsaSkuY29uY2F0KFt0LnBwcy5sZW5ndGhdKSkuY29uY2F0LmFwcGx5KHIscykpKX19LHtrZXk6Imh2Y0MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuaHZjQztpZihyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiByO3ZhciBhLG49dC52cHMsaT10LnNwcyxzPXQucHBzO2lmKHIpe3ZhciBvPXIuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3MsdT1yLmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3MsYz0obi5sZW5ndGgmJjEpKyhpLmxlbmd0aCYmMSkrKHMubGVuZ3RoJiYxKTthPVsxLHIuZ2VuZXJhbFByb2ZpbGVTcGFjZTw8NnxyLmdlbmVyYWxUaWVyRmxhZzw8NXxyLmdlbmVyYWxQcm9maWxlSWRjLG8+Pj4yNCxvPj4+MTYsbz4+Pjgsbyx1WzBdLHVbMV0sdVsyXSx1WzNdLHVbNF0sdVs1XSxyLmdlbmVyYWxMZXZlbElkYywyNDAsMCwyNTIsMjUyfHIuY2hyb21hRm9ybWF0SWRjLDI0OHxyLmJpdERlcHRoTHVtYU1pbnVzOCwyNDh8ci5iaXREZXB0aENocm9tYU1pbnVzOCwwLDAsci5udW1UZW1wb3JhbExheWVyczw8M3xyLnRlbXBvcmFsSWROZXN0ZWQ8PDJ8MyxjXTt2YXIgbD1mdW5jdGlvbihlKXt2YXIgdDthLnB1c2goZS5sZW5ndGg+PjgsZS5sZW5ndGgpLCh0PWEpLnB1c2guYXBwbHkodCx5KGUpKX07bi5sZW5ndGgmJihhLnB1c2goMTYwLDAsbi5sZW5ndGgpLG4uZm9yRWFjaChsKSksaS5sZW5ndGgmJihhLnB1c2goMTYxLDAsaS5sZW5ndGgpLGkuZm9yRWFjaChsKSkscy5sZW5ndGgmJihhLnB1c2goMTYyLDAscy5sZW5ndGgpLHMuZm9yRWFjaChsKSl9ZWxzZSBhPVsxLDEsOTYsMCwwLDAsMTQ0LDAsMCwwLDAsMCw5MywyNDAsMCwyNTIsMjUzLDI0OCwyNDgsMCwwLDE1LDMsMTYwLDAsMSwwLDI0LDY0LDEsMTIsMSwyNTUsMjU1LDEsOTYsMCwwLDMsMCwxNDQsMCwwLDMsMCwwLDMsMCw5MywxNTMsMTUyLDksMTYxLDAsMSwwLDQ1LDY2LDEsMSwxLDk2LDAsMCwzLDAsMTQ0LDAsMCwzLDAsMCwzLDAsOTMsMTYwLDIsMTI4LDEyOCw0NSwyMiw4OSwxNTMsMTY0LDE0Nyw0MywxNTQsMTI4LDEyOCwxMjgsMTMwLDAsMCwzLDAsMiwwLDAsMywwLDUwLDE2LDE2MiwwLDEsMCw3LDY4LDEsMTkzLDExNCwxODAsOTgsNjRdO3JldHVybiBlLmJveChlLnR5cGVzLmh2Y0MsbmV3IFVpbnQ4QXJyYXkoYSkpfX0se2tleToicGFzcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dih0LDIpLGE9clswXSxuPXJbMV07cmV0dXJuIGUuYm94KGUudHlwZXMucGFzcCxuZXcgVWludDhBcnJheShbYT4+MjQsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhLG4+PjI0LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbl0pKX19LHtrZXk6Im1wNGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1wNGEsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCx0LmNoYW5uZWxDb3VudCwwLDE2LDAsMCwwLDAsdC5zYW1wbGVSYXRlPj44JjI1NSwyNTUmdC5zYW1wbGVSYXRlLDAsMF0pLHQuY29uZmlnLmxlbmd0aD9lLmVzZHModC5jb25maWcpOnZvaWQgMCl9fSx7a2V5OiJlc2RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aDtyZXR1cm4gZS5ib3goZS50eXBlcy5lc2RzLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDMsMjMrciwwLDAsMCw0LDE1K3IsNjQsMjEsMCw2LDAsMCwwLDIxOCwxOTIsMCwwLDIxOCwxOTIsNV0uY29uY2F0KFtyXSkuY29uY2F0KHQpLmNvbmNhdChbNiwxLDJdKSkpfX0se2tleToib3B1cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCx0LmNoYW5uZWxDb3VudCwwLDE2LDAsMCwwLDAsdC5zYW1wbGVSYXRlPj44JjI1NSwyNTUmdC5zYW1wbGVSYXRlLDAsMF0pLGE9dC5jb25maWcubGVuZ3RoP2UuZE9wcyh0KTpbXTtyZXR1cm4gZS5ib3goZS50eXBlcy5PcHVzLHIsYSl9fSx7a2V5OiJkT3BzIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0LmNvbmZpZylyZXR1cm4gdC5jb25maWdbNF09dC5zYW1wbGVSYXRlPj4+MjQmMjU1LHQuY29uZmlnWzVdPXQuc2FtcGxlUmF0ZT4+PjE2JjI1NSx0LmNvbmZpZ1s2XT10LnNhbXBsZVJhdGU+Pj44JjI1NSx0LmNvbmZpZ1s3XT0yNTUmdC5zYW1wbGVSYXRlLGUuYm94KGUudHlwZXMuZE9wcyx0LmNvbmZpZyl9fSx7a2V5OiJtdmV4Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3guYXBwbHkoZSxbZS50eXBlcy5tdmV4XS5jb25jYXQoeSh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUudHJleCh0LmlkKX0pKSkpKX19LHtrZXk6InRyZXgiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRyZXgsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDFdKSl9fSx7a2V5OiJ0cmV4MSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudHJleCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMCwwLDAsMSwwLDAsMiwwLDAsMCwwLDAsMCwxLDAsMF0pKX19LHtrZXk6InRyZXgyIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy50cmV4LG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwwLDAsMCwxLDAsMCw0LDAsMCwwLDAsMCwyLDAsMCwwXSkpfX0se2tleToibW9vZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubW9vZixlLm1maGQodFswXS5zYW1wbGVzP3RbMF0uc2FtcGxlc1swXS5nb3BJZDowKV0uY29uY2F0KHkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYWYodCl9KSkpKSl9fSx7a2V5OiJtZmhkIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5tZmhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF0pKX19LHtrZXk6InRyYWYiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPWUudGZoZCh0LmlkKSxhPWUudGZkdCh0LHQuYmFzZU1lZGlhRGVjb2RlVGltZSksbj0wO2lmKHQuaXNWaWRlbyYmdC52aWRlb1NlbmMmJnQudmlkZW9TZW5jLmZvckVhY2goKGZ1bmN0aW9uKGUpe24rPTgsZS5zdWJzYW1wbGVzJiZlLnN1YnNhbXBsZXMubGVuZ3RoJiYobis9MixuKz02KmUuc3Vic2FtcGxlcy5sZW5ndGgpfSkpLHQudmlkZW9TZW5jTGVuZ3RoPW4sdC51c2VFTUUmJih0LmlzVmlkZW9FbmNyeXB0aW9ufHx0LmlzQXVkaW9FbmNyeXB0aW9uKSl7aWYodC5pc1ZpZGVvRW5jcnlwdGlvbil7aWYodC5pc1ZpZGVvKXt2YXIgaT1lLnNhaXoodCkscz1lLnNhaW8odCksbz1lLnRydW4xKHQpLHU9ZS5zZW5jKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnRyYWYscixhLGkscyxvLHUpfWlmKHQuaXNBdWRpb0VuY3J5cHRpb24pe3ZhciBjPWUuc2JncCgpLGw9ZS5zYWl6KHQpLGY9ZS5zYWlvKHQpLGQ9ZS5zZW5jKHQpLGg9ZS50cnVuMSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSxjLGwsZixkLGgpfXZhciBwPWUuc2JncCgpLHY9ZS50cnVuMSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSxwLHYpfWlmKHQuaXNWaWRlbyl7dmFyIHk9ZS50cnVuMSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSx5KX12YXIgbT1lLnNiZ3AoKSxnPWUuc2Fpeih0KSxrPWUuc2Fpbyh0KSxiPWUuc2VuYyh0KSxfPWUudHJ1bjEodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEsbSxnLGssYixfKX12YXIgdz1lLnNkdHAodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEsdyxlLnRydW4odC5zYW1wbGVzLHcuYnl0ZUxlbmd0aCs3NikpfX0se2tleToic2R0cCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9bmV3IEllO3JldHVybiB0LnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ci53cml0ZShuZXcgVWludDhBcnJheSh0LmlzVmlkZW8/W2Uua2V5ZnJhbWU/MzI6MTZdOlsxNl0pKX0pKSxlLmJveChlLnR5cGVzLnNkdHAsdGhpcy5leHRlbnNpb24oMCwwKSxyLmJ1ZmZlcil9fSx7a2V5OiJ0cnVuMSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9bmV3IEllLGE9SWUud3JpdGVVaW50MzIodC5zYW1wbGVzLmxlbmd0aCksbj1udWxsO2lmKHQuaXNWaWRlbyl7dmFyIGk9dC52aWRlb1NlbmNMZW5ndGg7bj1JZS53cml0ZVVpbnQzMigxNip0LnNhbXBsZXMubGVuZ3RoK2krMTQ5KSwhdC5pc1ZpZGVvRW5jcnlwdGlvbiYmdC5pc0F1ZGlvRW5jcnlwdGlvbiYmKG49SWUud3JpdGVVaW50MzIoMTYqdC5zYW1wbGVzLmxlbmd0aCs5MikpfWVsc2V7dmFyIHM9MTIqdC5zYW1wbGVzLmxlbmd0aCsxMjQ7dC5pc0F1ZGlvRW5jcnlwdGlvbiYmKHM9MTIqdC5zYW1wbGVzLmxlbmd0aCs4KnQuYXVkaW9TZW5jLmxlbmd0aCsxNzcpLG49SWUud3JpdGVVaW50MzIocyl9cmV0dXJuIHQuc2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyLndyaXRlKEllLndyaXRlVWludDMyKGUuZHVyYXRpb24pKSxyLndyaXRlKEllLndyaXRlVWludDMyKGUuc2l6ZSkpLHIud3JpdGUoSWUud3JpdGVVaW50MzIoZS5rZXlmcmFtZT8zMzU1NDQzMjo2NTUzNikpLHQuaXNWaWRlbyYmci53cml0ZShJZS53cml0ZVVpbnQzMihlLmN0cz9lLmN0czowKSl9KSksZS5ib3goZS50eXBlcy50cnVuLHRoaXMuZXh0ZW5zaW9uKDAsdC5mbGFncyksYSxuLHIuYnVmZmVyKX19LHtrZXk6InNlbmMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBJZSxhPXQuc2FtcGxlcy5sZW5ndGgsbj10LmlzVmlkZW8/MTY6OCxpPXQuaXNWaWRlbz8yOjAscz1bXSxvPTA7cmV0dXJuIHQuaXNWaWRlbz8ocz10LnZpZGVvU2VuYyxvPXQudmlkZW9TZW5jTGVuZ3RoKTpzPXQuYXVkaW9TZW5jLG89b3x8biphLHIud3JpdGUoSWUud3JpdGVVaW50MzIoMTYrbyksZS50eXBlcy5zZW5jLHRoaXMuZXh0ZW5zaW9uKDAsaSkpLHIud3JpdGUoSWUud3JpdGVVaW50MzIoYSkpLHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLkluaXRpYWxpemF0aW9uVmVjdG9yLmxlbmd0aDt0Kyspci53cml0ZShuZXcgVWludDhBcnJheShbZS5Jbml0aWFsaXphdGlvblZlY3Rvclt0XV0pKTtlLnN1YnNhbXBsZXMmJmUuc3Vic2FtcGxlcy5sZW5ndGgmJihyLndyaXRlKEllLndyaXRlVWludDE2KGUuc3Vic2FtcGxlcy5sZW5ndGgpKSxlLnN1YnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ci53cml0ZShJZS53cml0ZVVpbnQxNihlLkJ5dGVzT2ZDbGVhckRhdGEpKSxyLndyaXRlKEllLndyaXRlVWludDMyKGUuQnl0ZXNPZlByb3RlY3RlZERhdGEpKX0pKSl9KSksci5idWZmZXJ9fSx7a2V5OiJzYWlvIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj0xMip0LnNhbXBsZXMubGVuZ3RoKzE0MTshdC5pc1ZpZGVvJiZ0LmlzQXVkaW9FbmNyeXB0aW9uJiYocj0xNDkpO3ZhciBhPW5ldyBVaW50OEFycmF5KFsxLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCxyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSk7cmV0dXJuIGUuYm94KGUudHlwZXMuc2FpbyxhKX19LHtrZXk6InNhaXoiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuc2FtcGxlcy5sZW5ndGgsYT1uZXcgVWludDhBcnJheShbMCwwLDAsMCwxNixyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSk7cmV0dXJuIGUuYm94KGUudHlwZXMuc2FpeixhKX19LHtrZXk6InNiZ3AiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoWzExNCwxMTEsMTA4LDEwOCwwLDAsMCwxLDAsMCwxLDI1LDAsMCwwLDFdKTtyZXR1cm4gZS5ib3goZS50eXBlcy5zYmdwLHRoaXMuZXh0ZW5zaW9uKDAsMCksdCl9fSx7a2V5OiJleHRlbnNpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlLHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF0pfX0se2tleToidGZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudGZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdKSl9fSx7a2V5OiJ0ZmR0Iix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPU1hdGguZmxvb3Ioci8oTWUrMSkpLG49TWF0aC5mbG9vcihyJShNZSsxKSk7cmV0dXJuIHQudXNlRU1FJiYodC5pc1ZpZGVvRW5jcnlwdGlvbnx8dC5pc0F1ZGlvRW5jcnlwdGlvbik/ZS5ib3goZS50eXBlcy50ZmR0LG5ldyBVaW50OEFycmF5KFswLDAsMCwwLG4+PjI0LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbl0pKTplLmJveChlLnR5cGVzLnRmZHQsbmV3IFVpbnQ4QXJyYXkoWzEsMCwwLDAsYT4+MjQsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhLG4+PjI0LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbl0pKX19LHtrZXk6InRydW4iLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIGE9dC5sZW5ndGgsbj0xMisxNiphO3IrPTgrbjt2YXIgaT1uZXcgVWludDhBcnJheShuKTtpLnNldChbMCwwLDE1LDEsYT4+PjI0JjI1NSxhPj4+MTYmMjU1LGE+Pj44JjI1NSwyNTUmYSxyPj4+MjQmMjU1LHI+Pj4xNiYyNTUscj4+PjgmMjU1LDI1NSZyXSwwKTtmb3IodmFyIHM9MDtzPGE7cysrKXt2YXIgbz10W3NdLHU9by5kdXJhdGlvbixjPW8uc2l6ZSxsPW8uZmxhZyxmPXZvaWQgMD09PWw/e306bCxkPW8uY3RzLGg9dm9pZCAwPT09ZD8wOmQ7aS5zZXQoW3U+Pj4yNCYyNTUsdT4+PjE2JjI1NSx1Pj4+OCYyNTUsMjU1JnUsYz4+PjI0JjI1NSxjPj4+MTYmMjU1LGM+Pj44JjI1NSwyNTUmYyxmLmlzTGVhZGluZzw8MnwobnVsbD09PWYuZGVwZW5kc09ufHx2b2lkIDA9PT1mLmRlcGVuZHNPbj8xOmYuZGVwZW5kc09uKSxmLmlzRGVwZW5kZWRPbjw8NnxmLmhhc1JlZHVuZGFuY3k8PDR8Zi5wYWRkaW5nVmFsdWU8PDF8KG51bGw9PT1mLmlzTm9uU3luY1NhbXBsZXx8dm9pZCAwPT09Zi5pc05vblN5bmNTYW1wbGU/MTpmLmlzTm9uU3luY1NhbXBsZSksNjE0NDAmZi5kZWdyYWRhdGlvblByaW9yaXR5LDE1JmYuZGVncmFkYXRpb25Qcmlvcml0eSxoPj4+MjQmMjU1LGg+Pj4xNiYyNTUsaD4+PjgmMjU1LDI1NSZoXSwxMisxNipzKX1yZXR1cm4gZS5ib3goZS50eXBlcy50cnVuLGkpfX0se2tleToibW9vdk1QNCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubW9vdixlLm12aGQodFswXS5kdXJhdGlvbix0WzBdLnRpbWVzY2FsZSldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFja01QNCh0KX0pKSkpKX19LHtrZXk6InRyYWNrTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFrLGUudGtoZCh0LmlkLHQuZHVyYXRpb24sdC53aWR0aCx0LmhlaWdodCksZS5tZGlhTVA0KHQpKX19LHtrZXk6Im1kaWFNUDQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1kaWEsZS5tZGhkKHQuZHVyYXRpb24sdC50aW1lc2NhbGUpLGUuaGRscih0LnR5cGUpLGUubWluZk1QNCh0KSl9fSx7a2V5OiJtaW5mTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5taW5mLHQudHlwZT09PWI/ZS5WTUhEOmUuU01IRCxlLkRJTkYsZS5zdGJsTVA0KHQpKX19LHtrZXk6InN0YmxNUDQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuZXh0LGE9W2Uuc3RzZCh0KSxlLnN0dHMoci5zdHRzKSxlLnN0c2Moci5zdHNjKSxlLnN0c3ooci5zdHN6KSxlLnN0Y28oci5zdGNvKV07cmV0dXJuIHIuc3Rzcy5sZW5ndGgmJmEucHVzaChlLnN0c3Moci5zdHNzKSksci5jdHRzLmxlbmd0aCYmYS5wdXNoKGUuY3R0cyhyLmN0dHMpKSxlLmJveC5hcHBseShlLFtlLnR5cGVzLnN0YmxdLmNvbmNhdChhKSl9fSx7a2V5OiJzdHRzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDgqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUscj1lLmNvdW50O2Euc2V0KFtyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0XSxuKSxuKz04fSkpLGUuYm94KGUudHlwZXMuc3R0cywkKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6InN0c2MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoMTIqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZmlyc3RDaHVuayxyPWUuc2FtcGxlc1BlckNodW5rLGk9ZS5zYW1wbGVEZXNjSW5kZXg7YS5zZXQoW3Q+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsaT4+MjQsaT4+MTYmMjU1LGk+PjgmMjU1LDI1NSZpXSxuKSxuKz0xMn0pKSxlLmJveChlLnR5cGVzLnN0c2MsJChuZXcgVWludDhBcnJheShbMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJzdHN6Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2Euc2V0KFtlPj4yNCxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdLG4pLG4rPTR9KSksZS5ib3goZS50eXBlcy5zdHN6LCQobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJzdGNvIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2Euc2V0KFtlPj4yNCxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdLG4pLG4rPTR9KSksZS5ib3goZS50eXBlcy5zdGNvLCQobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToic3RzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsYT1uZXcgVWludDhBcnJheSg0KnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChbZT4+MjQsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXSxuKSxuKz00fSkpLGUuYm94KGUudHlwZXMuc3RzcywkKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6ImN0dHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoOCpyKSxuPTA7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZSxyPWUuY291bnQ7YS5zZXQoW3I+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcix0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdLG4pLG4rPTh9KSksZS5ib3goZS50eXBlcy5jdHRzLCQobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToic3R5cCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5ib3goZS50eXBlcy5zdHlwLG5ldyBVaW50OEFycmF5KFsxMDksMTE1LDEwMCwxMDQsMCwwLDAsMCwxMDksMTE1LDEwMCwxMDQsMTA5LDExNSwxMDUsMTIwXSkpfX0se2tleToic2lkeCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC50aW1lc2NhbGUsYT10LnNhbXBsZXNbMF0uZHVyYXRpb24sbj1hKnQuc2FtcGxlcy5sZW5ndGgsaT10LnNhbXBsZXNbMF0uc2FtcGxlT2Zmc2V0KmEscz04O3Quc2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtzKz1lLnNpemV9KSk7dmFyIG89MDtpZih0LmlzVmlkZW8pe3ZhciB1LGM9MDt0LnZpZGVvU2VuYyYmKHU9dC52aWRlb1NlbmMpLHQuaXNWaWRlbyYmdS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKz04LGUuc3Vic2FtcGxlcyYmZS5zdWJzYW1wbGVzLmxlbmd0aCYmKGMrPTIsYys9NiplLnN1YnNhbXBsZXMubGVuZ3RoKX0pKSx0LnZpZGVvU2VuY0xlbmd0aD1jLG89cysxNDErMTYqdC5zYW1wbGVzLmxlbmd0aCtjLHQudXNlRU1FJiZ0LmlzQXVkaW9FbmNyeXB0aW9uJiYhdC5pc1ZpZGVvRW5jcnlwdGlvbiYmKG89cysxNip0LnNhbXBsZXMubGVuZ3RoKzg0KX1lbHNlIG89cysxMTYrMTIqdC5zYW1wbGVzLmxlbmd0aCx0LnVzZUVNRSYmdC5pc0F1ZGlvRW5jcnlwdGlvbiYmKG89cysxNjkrMTIqdC5zYW1wbGVzLmxlbmd0aCs4KnQuYXVkaW9TZW5jLmxlbmd0aCk7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMjU1JnQuaWQscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcixpPj4yNCYyNTUsaT4+MTYmMjU1LGk+PjgmMjU1LDI1NSZpLDAsMCwwLDAsMCwwLDAsMSwwLG8+PjE2JjI1NSxvPj44JjI1NSwyNTUmbyxuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLDE0NCwwLDAsMF0pO3JldHVybiBlLmJveChlLnR5cGVzLnNpZHgsbCl9fSx7a2V5OiJtZGF0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5tZGF0LHQpfX1dKSxlfSgpO2koemUsInR5cGVzIixbIk9wdXMiLCJkT3BzIiwiYXYwMSIsImF2MUMiLCJhdmMxIiwiYXZjQyIsImh2YzEiLCJodmNDIiwiZGluZiIsImRyZWYiLCJlc2RzIiwiZnR5cCIsImhkbHIiLCJtZGF0IiwibWRoZCIsIm1kaWEiLCJtZmhkIiwibWluZiIsIm1vb2YiLCJtb292IiwibXA0YSIsIm12ZXgiLCJtdmhkIiwicGFzcCIsInN0YmwiLCJzdGNvIiwic3RzYyIsInN0c2QiLCJzdHN6Iiwic3R0cyIsInRmZHQiLCJ0ZmhkIiwidHJhZiIsInRyYWsiLCJ0cmV4IiwidGtoZCIsInZtaGQiLCJzbWhkIiwiY3R0cyIsInN0c3MiLCJzdHlwIiwicHNzaCIsInNpZHgiLCJzYmdwIiwic2FpeiIsInNhaW8iLCJzZW5jIiwidHJ1biIsImVuY3YiLCJlbmNhIiwic2luZiIsImJ0cnQiLCJmcm1hIiwidGVuYyIsInNjaG0iLCJzY2hpIiwibWVoZCIsImZpZWwiLCJzZHRwIl0ucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPVt0LmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDEpLHQuY2hhckNvZGVBdCgyKSx0LmNoYXJDb2RlQXQoMyldLGV9KSxPYmplY3QuY3JlYXRlKG51bGwpKSksaSh6ZSwiSERMUl9UWVBFUyIse3ZpZGVvOm5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMTE4LDEwNSwxMDAsMTAxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDg2LDEwNSwxMDAsMTAxLDExMSw3Miw5NywxMTAsMTAwLDEwOCwxMDEsMTE0LDBdKSxhdWRpbzpuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDExNSwxMTEsMTE3LDExMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MywxMTEsMTE3LDExMCwxMDAsNzIsOTcsMTEwLDEwMCwxMDgsMTAxLDExNCwwXSl9KSxpKHplLCJGVFlQQVZDMSIsemUuYm94KHplLnR5cGVzLmZ0eXAsbmV3IFVpbnQ4QXJyYXkoWzEwNSwxMTUsMTExLDEwOSwwLDAsMCwxLDEwNSwxMTUsMTExLDEwOSw5NywxMTgsOTksNDldKSkpLGkoemUsIkZUWVBIRVYxIix6ZS5ib3goemUudHlwZXMuZnR5cCxuZXcgVWludDhBcnJheShbMTA1LDExNSwxMTEsMTA5LDAsMCwwLDEsMTA1LDExNSwxMTEsMTA5LDEwNCwxMDEsMTE4LDQ5XSkpKSxpKHplLCJESU5GIix6ZS5ib3goemUudHlwZXMuZGluZix6ZS5ib3goemUudHlwZXMuZHJlZixuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEyLDExNywxMTQsMTA4LDMyLDAsMCwwLDFdKSkpKSxpKHplLCJWTUhEIix6ZS5ib3goemUudHlwZXMudm1oZCxuZXcgVWludDhBcnJheShbMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDBdKSkpLGkoemUsIlNNSEQiLHplLmJveCh6ZS50eXBlcy5zbWhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDBdKSkpLGkoemUsIlN0YmxUYWJsZSIsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMF0pKSxpKHplLCJTVFRTIix6ZS5ib3goemUudHlwZXMuc3R0cyx6ZS5TdGJsVGFibGUpKSxpKHplLCJTVFNDIix6ZS5ib3goemUudHlwZXMuc3RzYyx6ZS5TdGJsVGFibGUpKSxpKHplLCJTVFNaIix6ZS5ib3goemUudHlwZXMuc3RzeixuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpLGkoemUsIlNUQ08iLHplLmJveCh6ZS50eXBlcy5zdGNvLHplLlN0YmxUYWJsZSkpO3ZhciBPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhKXtyKHRoaXMsZSksdGhpcy5uYW1lPXR8fCIiLHRoaXMuX3ByZWZpeD0iWyIuY29uY2F0KHRoaXMubmFtZSwiXSIpLGUuZGlzYWJsZWQ9YX1yZXR1cm4gbihlLFt7a2V5OiJkZWJ1ZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkuZGVidWcuYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6ImxvZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkubG9nLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fSx7a2V5OiJ3YXJuIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2lmKCFlLmRpc2FibGVkKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyKSxuPTA7bjxyO24rKylhW25dPWFyZ3VtZW50c1tuXTsodD1jb25zb2xlKS53YXJuLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkuZXJyb3IuYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6InRhYmxlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2UuZGlzYWJsZWR8fChjb25zb2xlLmdyb3VwKHRoaXMuX3ByZWZpeCksKHQ9Y29uc29sZSkudGFibGUuYXBwbHkodCxhcmd1bWVudHMpLGNvbnNvbGUuZ3JvdXBFbmQoKSl9fV0sW3trZXk6ImVuYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSExfX0se2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSEwfX1dKSxlfSgpO2koT2UsImRpc2FibGVkIiwhMCk7Zm9yKHZhciBSZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSx0aGlzLnZpZGVvVHJhY2s9dCx0aGlzLmF1ZGlvVHJhY2s9YTt2YXIgaT0vQ2hyb21lXC8oW14uXSspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpO3RoaXMuZm9yY2VGaXJzdElEUj1pJiZOdW1iZXIoaVsxXSk8NTAsdGhpcy5sb2c9bmV3IE9lKCJGTVA0UmVtdXhlciIsIW58fCFuLm9wZW5Mb2d8fCFuLm9wZW5Mb2cpfXJldHVybiBuKGUsW3trZXk6InJlbXV4Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLG4saT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG89dGhpcy52aWRlb1RyYWNrLHU9dGhpcy5hdWRpb1RyYWNrLGM9by5leGlzdCgpLGw9dS5leGlzdCgpLGY9W107cmV0dXJuIGkmJihzJiZzLmluaXRNZXJnZT8oYyYmZi5wdXNoKHRoaXMudmlkZW9UcmFjayksbCYmZi5wdXNoKHRoaXMuYXVkaW9UcmFjaykscj16ZS5pbml0U2VnbWVudChmKSk6KGMmJihlPXplLmluaXRTZWdtZW50KFt0aGlzLnZpZGVvVHJhY2tdKSksbCYmKHQ9emUuaW5pdFNlZ21lbnQoW3RoaXMuYXVkaW9UcmFja10pKSkpLGMmJm8uaGFzU2FtcGxlKCkmJihhPXRoaXMuX3JlbXV4VmlkZW8oKSksbCYmdS5oYXNTYW1wbGUoKSYmKG49dGhpcy5fcmVtdXhBdWRpbygpKSxvLnNhbXBsZXM9W10sdS5zYW1wbGVzPVtdLHtpbml0U2VnbWVudDpyLHZpZGVvSW5pdFNlZ21lbnQ6ZSxhdWRpb0luaXRTZWdtZW50OnQsdmlkZW9TZWdtZW50OmEsYXVkaW9TZWdtZW50Om59fX0se2tleToiX3JlbXV4VmlkZW8iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWRlb1RyYWNrO3RoaXMuZm9yY2VGaXJzdElEUiYmKGUuc2FtcGxlc1swXS5mbGFnPXtkZXBlbmRzT246Mixpc05vblN5bmNTYW1wbGU6MH0pO3ZhciB0PWUuc2FtcGxlcyxyPS9hdjAxLy50ZXN0KGUuY29kZWMpLGE9MDtyP3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSs9ZS5kYXRhLmJ5dGVMZW5ndGh9KSk6dC5mb3JFYWNoKChmdW5jdGlvbihlKXthKz1lLnVuaXRzLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LmJ5dGVMZW5ndGh9KSwwKSxhKz00KmUudW5pdHMubGVuZ3RofSkpO3ZhciBuPW5ldyBVaW50OEFycmF5KGEpO2lmKHIpZm9yKHZhciBpLHM9MCxvPXQubGVuZ3RoLHU9MDtzPG87cysrKWk9dFtzXSxuLnNldChpLmRhdGEsdSksaS5zaXplPWkuZGF0YS5ieXRlTGVuZ3RoLHUrPWkuc2l6ZTtlbHNlIGZvcih2YXIgYyxsPW5ldyBEYXRhVmlldyhuLmJ1ZmZlciksZj1mdW5jdGlvbihlLHIpe3I9dFtkXTt2YXIgYT0wO3IudW5pdHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bC5zZXRVaW50MzIoZSx0LmJ5dGVMZW5ndGgpLGUrPTQsbi5zZXQodCxlKSxlKz10LmJ5dGVMZW5ndGgsYSs9NCt0LmJ5dGVMZW5ndGh9KSksci5zaXplPWEscD1lLGM9cn0sZD0wLGg9dC5sZW5ndGgscD0wO2Q8aDtkKyspZihwLGMpO3ZhciB2PXplLm1kYXQobik7cmV0dXJuICQoemUubW9vZihbZV0pLHYpfX0se2tleToiX3JlbXV4QXVkaW8iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hdWRpb1RyYWNrLHQ9bmV3IFVpbnQ4QXJyYXkoZS5zYW1wbGVzLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LnNpemV9KSwwKSk7ZS5zYW1wbGVzLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5zZXQoci5kYXRhLGUpLGUrci5zaXplfSksMCk7dmFyIHI9emUubWRhdCh0KTtyZXR1cm4gJCh6ZS5tb29mKFtlXSkscil9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnZpZGVvVHJhY2sucmVzZXQoKSx0aGlzLmF1ZGlvVHJhY2sucmVzZXQoKX19XSksZX0oKSxMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxbe2tleToibWl4SW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKHRoaXMsZSl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcjtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHRoaXMpLGV9fV0sW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gbCh0aGlzLHQpfX1dKSxlfSgpLFZlPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXt2YXIgZSxuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSxpPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0Km4ubGVuZ3RoO3IodGhpcyxhKSxlPXQuY2FsbCh0aGlzKTt2YXIgcz1uO2lmKHMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmKHM9bmV3IFVpbnQ4QXJyYXkocykpLChzIGluc3RhbmNlb2YgSW50OEFycmF5fHxzIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fHMgaW5zdGFuY2VvZiBJbnQxNkFycmF5fHxzIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fHMgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxzIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fHMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHMgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpJiYocz1uZXcgVWludDhBcnJheShzLmJ1ZmZlcixzLmJ5dGVPZmZzZXQscy5ieXRlTGVuZ3RoKSkscyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2Zvcih2YXIgbz1zLmJ5dGVMZW5ndGgsdT1bXSxjPTA7YzxvO2MrPTEpdVtjPj4+Ml18PXNbY108PDI0LWMlNCo4O2Uud29yZHM9dSxlLnNpZ0J5dGVzPW99ZWxzZSBlLndvcmRzPW4sZS5zaWdCeXRlcz1pO3JldHVybiBlfXJldHVybiBuKGEsW3trZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpGZTtyZXR1cm4gZS5zdHJpbmdpZnkodGhpcyl9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMud29yZHMscj1lLndvcmRzLGE9dGhpcy5zaWdCeXRlcyxuPWUuc2lnQnl0ZXM7aWYodGhpcy5jbGFtcCgpLGElNClmb3IodmFyIGk9MDtpPG47aSs9MSl7dmFyIHM9cltpPj4+Ml0+Pj4yNC1pJTQqOCYyNTU7dFthK2k+Pj4yXXw9czw8MjQtKGEraSklNCo4fWVsc2UgZm9yKHZhciBvPTA7bzxuO28rPTQpdFthK28+Pj4yXT1yW28+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9bix0aGlzfX0se2tleToiY2xhbXAiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53b3Jkcyx0PXRoaXMuc2lnQnl0ZXM7ZVt0Pj4+Ml0mPTQyOTQ5NjcyOTU8PDMyLXQlNCo4LGUubGVuZ3RoPU1hdGguY2VpbCh0LzQpfX0se2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cChvKGEucHJvdG90eXBlKSwiY2xvbmUiLHRoaXMpLmNhbGwodGhpcyk7cmV0dXJuIGUud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxlfX1dLFt7a2V5OiJyYW5kb20iLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPVtdLG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPTk4NzY1NDMyMSxhPTQyOTQ5NjcyOTU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9KChyPTM2OTY5Kig2NTUzNSZyKSsocj4+MTYpJmEpPDwxNikrKHQ9MThlMyooNjU1MzUmdCkrKHQ+PjE2KSZhKSZhO3JldHVybiBlLz00Mjk0OTY3Mjk2LChlKz0uNSkqKE1hdGgucmFuZG9tKCk+LjU/MTotMSl9fSxpPTA7aTxlO2krPTQpe3ZhciBzPW4oNDI5NDk2NzI5NioodHx8TWF0aC5yYW5kb20oKSkpO3Q9OTg3NjU0MDcxKnMoKSxyLnB1c2goNDI5NDk2NzI5NipzKCl8MCl9cmV0dXJuIG5ldyBhKHIsZSl9fV0pLGF9KExlKSxGZT17c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLndvcmRzLHI9ZS5zaWdCeXRlcyxhPVtdLG49MDtuPHI7bis9MSl7dmFyIGk9dFtuPj4+Ml0+Pj4yNC1uJTQqOCYyNTU7YS5wdXNoKChpPj4+NCkudG9TdHJpbmcoMTYpKSxhLnB1c2goKDE1JmkpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIGEuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVtdLGE9MDthPHQ7YSs9MilyW2E+Pj4zXXw9cGFyc2VJbnQoZS5zdWJzdHIoYSwyKSwxNik8PDI0LWElOCo0O3JldHVybiBuZXcgVmUocix0LzIpfX0sTmU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9W10sYT0wO2E8dDthKz0xKXJbYT4+PjJdfD0oMjU1JmUuY2hhckNvZGVBdChhKSk8PDI0LWElNCo4O3JldHVybiBuZXcgVmUocix0KX0samU9ZnVuY3Rpb24oZSl7cmV0dXJuIE5lKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSkpfSxHZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7dmFyIGU7cmV0dXJuIHIodGhpcyxhKSwoZT10LmNhbGwodGhpcykpLl9taW5CdWZmZXJTaXplPTAsZX1yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBWZSx0aGlzLl9uRGF0YUJ5dGVzPTB9fSx7a2V5OiJfYXBwZW5kIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lOyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9amUodCkpLHRoaXMuX2RhdGEuY29uY2F0KHQpLHRoaXMuX25EYXRhQnl0ZXMrPXQuc2lnQnl0ZXN9fSx7a2V5OiJfcHJvY2VzcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLl9kYXRhLGE9dGhpcy5ibG9ja1NpemUsbj1yLndvcmRzLGk9ci5zaWdCeXRlcyxzPWkvKDQqYSksbz0ocz1lP01hdGguY2VpbChzKTpNYXRoLm1heCgoMHxzKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSphLHU9TWF0aC5taW4oNCpvLGkpO2lmKG8pe2Zvcih2YXIgYz0wO2M8bztjKz1hKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKG4sYyk7dD1uLnNwbGljZSgwLG8pLHIuc2lnQnl0ZXMtPXV9cmV0dXJuIG5ldyBWZSh0LHUpfX0se2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cChvKGEucHJvdG90eXBlKSwiY2xvbmUiLHRoaXMpLmNhbGwodGhpcyk7cmV0dXJuIGUuX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLGV9fV0pLGF9KExlKSxIZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKGUpe3ZhciBuO3JldHVybiByKHRoaXMsYSksKG49dC5jYWxsKHRoaXMpKS5ibG9ja1NpemU9MTYsbi5jZmc9T2JqZWN0LmFzc2lnbihuZXcgTGUsZSksbi5yZXNldCgpLG59cmV0dXJuIG4oYSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cChvKGEucHJvdG90eXBlKSwicmVzZXQiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYXBwZW5kKGUpLHRoaXMuX3Byb2Nlc3MoKSx0aGlzfX0se2tleToiZmluYWxpemUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0aGlzLl9hcHBlbmQoZSksdGhpcy5fZG9GaW5hbGl6ZSgpfX1dLFt7a2V5OiJfY3JlYXRlSGVscGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gbmV3IGUocikuZmluYWxpemUodCl9fX0se2tleToiX2NyZWF0ZUhtYWNIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBuZXcgS2UoZSxyKS5maW5hbGl6ZSh0KX19fV0pLGF9KEdlKSxLZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKGUsbil7dmFyIGk7cih0aGlzLGEpLGk9dC5jYWxsKHRoaXMpO3ZhciBzPW5ldyBlO2kuX2hhc2hlcj1zO3ZhciBvPW47InN0cmluZyI9PXR5cGVvZiBvJiYobz1qZShvKSk7dmFyIHU9cy5ibG9ja1NpemUsYz00KnU7by5zaWdCeXRlcz5jJiYobz1zLmZpbmFsaXplKG4pKSxvLmNsYW1wKCk7dmFyIGw9by5jbG9uZSgpO2kuX29LZXk9bDt2YXIgZj1vLmNsb25lKCk7aS5faUtleT1mO2Zvcih2YXIgZD1sLndvcmRzLGg9Zi53b3JkcyxwPTA7cDx1O3ArPTEpZFtwXV49MTU0OTU1NjgyOCxoW3BdXj05MDk1MjI0ODY7cmV0dXJuIGwuc2lnQnl0ZXM9YyxmLnNpZ0J5dGVzPWMsaS5yZXNldCgpLGl9cmV0dXJuIG4oYSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faGFzaGVyO2UucmVzZXQoKSxlLnVwZGF0ZSh0aGlzLl9pS2V5KX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhc2hlci51cGRhdGUoZSksdGhpc319LHtrZXk6ImZpbmFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9oYXNoZXIscj10LmZpbmFsaXplKGUpO3JldHVybiB0LnJlc2V0KCksdC5maW5hbGl6ZSh0aGlzLl9vS2V5LmNsb25lKCkuY29uY2F0KHIpKX19XSksYX0oTGUpLHFlPXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53b3JkcyxyPWUuc2lnQnl0ZXMsYT10aGlzLl9tYXA7ZS5jbGFtcCgpO2Zvcih2YXIgbj1bXSxpPTA7aTxyO2krPTMpZm9yKHZhciBzPSh0W2k+Pj4yXT4+PjI0LWklNCo4JjI1NSk8PDE2fCh0W2krMT4+PjJdPj4+MjQtKGkrMSklNCo4JjI1NSk8PDh8dFtpKzI+Pj4yXT4+PjI0LShpKzIpJTQqOCYyNTUsbz0wO288NCYmaSsuNzUqbzxyO28rPTEpbi5wdXNoKGEuY2hhckF0KHM+Pj42KigzLW8pJjYzKSk7dmFyIHU9YS5jaGFyQXQoNjQpO2lmKHUpZm9yKDtuLmxlbmd0aCU0OyluLnB1c2godSk7cmV0dXJuIG4uam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLHI9dGhpcy5fbWFwLGE9dGhpcy5fcmV2ZXJzZU1hcDtpZighYSl7dGhpcy5fcmV2ZXJzZU1hcD1bXSxhPXRoaXMuX3JldmVyc2VNYXA7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKz0xKWFbci5jaGFyQ29kZUF0KG4pXT1ufXZhciBpPXIuY2hhckF0KDY0KTtpZihpKXt2YXIgcz1lLmluZGV4T2YoaSk7LTEhPT1zJiYodD1zKX1yZXR1cm4gZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1bXSxuPTAsaT0wO2k8dDtpKz0xKWlmKGklNCl7dmFyIHM9cltlLmNoYXJDb2RlQXQoaS0xKV08PGklNCoyfHJbZS5jaGFyQ29kZUF0KGkpXT4+PjYtaSU0KjI7YVtuPj4+Ml18PXM8PDI0LW4lNCo4LG4rPTF9cmV0dXJuIFZlLmNyZWF0ZShhLG4pfShlLHQsYSl9LF9tYXA6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89In0sV2U9W10sWGU9MDtYZTw2NDtYZSs9MSlXZVtYZV09NDI5NDk2NzI5NipNYXRoLmFicyhNYXRoLnNpbihYZSsxKSl8MDt2YXIgWWU9ZnVuY3Rpb24oZSx0LHIsYSxuLGkscyl7dmFyIG89ZSsodCZyfH50JmEpK24rcztyZXR1cm4obzw8aXxvPj4+MzItaSkrdH0sUWU9ZnVuY3Rpb24oZSx0LHIsYSxuLGkscyl7dmFyIG89ZSsodCZhfHImfmEpK24rcztyZXR1cm4obzw8aXxvPj4+MzItaSkrdH0sWmU9ZnVuY3Rpb24oZSx0LHIsYSxuLGkscyl7dmFyIG89ZSsodF5yXmEpK24rcztyZXR1cm4obzw8aXxvPj4+MzItaSkrdH0sSmU9ZnVuY3Rpb24oZSx0LHIsYSxuLGkscyl7dmFyIG89ZSsocl4odHx+YSkpK24rcztyZXR1cm4obzw8aXxvPj4+MzItaSkrdH0sJGU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxbe2tleToiX2RvUmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1uZXcgVmUoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfX0se2tleToiX2RvUHJvY2Vzc0Jsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLGE9MDthPDE2O2ErPTEpe3ZhciBuPXQrYSxpPWVbbl07cltuXT0xNjcxMTkzNSYoaTw8OHxpPj4+MjQpfDQyNzgyNTUzNjAmKGk8PDI0fGk+Pj44KX12YXIgcz10aGlzLl9oYXNoLndvcmRzLG89clt0KzBdLHU9clt0KzFdLGM9clt0KzJdLGw9clt0KzNdLGY9clt0KzRdLGQ9clt0KzVdLGg9clt0KzZdLHA9clt0KzddLHY9clt0KzhdLHk9clt0KzldLG09clt0KzEwXSxnPXJbdCsxMV0saz1yW3QrMTJdLGI9clt0KzEzXSxfPXJbdCsxNF0sdz1yW3QrMTVdLHg9c1swXSxTPXNbMV0sRD1zWzJdLEE9c1szXTt4PVllKHgsUyxELEEsbyw3LFdlWzBdKSxBPVllKEEseCxTLEQsdSwxMixXZVsxXSksRD1ZZShELEEseCxTLGMsMTcsV2VbMl0pLFM9WWUoUyxELEEseCxsLDIyLFdlWzNdKSx4PVllKHgsUyxELEEsZiw3LFdlWzRdKSxBPVllKEEseCxTLEQsZCwxMixXZVs1XSksRD1ZZShELEEseCxTLGgsMTcsV2VbNl0pLFM9WWUoUyxELEEseCxwLDIyLFdlWzddKSx4PVllKHgsUyxELEEsdiw3LFdlWzhdKSxBPVllKEEseCxTLEQseSwxMixXZVs5XSksRD1ZZShELEEseCxTLG0sMTcsV2VbMTBdKSxTPVllKFMsRCxBLHgsZywyMixXZVsxMV0pLHg9WWUoeCxTLEQsQSxrLDcsV2VbMTJdKSxBPVllKEEseCxTLEQsYiwxMixXZVsxM10pLEQ9WWUoRCxBLHgsUyxfLDE3LFdlWzE0XSksUz1ZZShTLEQsQSx4LHcsMjIsV2VbMTVdKSx4PVFlKHgsUyxELEEsdSw1LFdlWzE2XSksQT1RZShBLHgsUyxELGgsOSxXZVsxN10pLEQ9UWUoRCxBLHgsUyxnLDE0LFdlWzE4XSksUz1RZShTLEQsQSx4LG8sMjAsV2VbMTldKSx4PVFlKHgsUyxELEEsZCw1LFdlWzIwXSksQT1RZShBLHgsUyxELG0sOSxXZVsyMV0pLEQ9UWUoRCxBLHgsUyx3LDE0LFdlWzIyXSksUz1RZShTLEQsQSx4LGYsMjAsV2VbMjNdKSx4PVFlKHgsUyxELEEseSw1LFdlWzI0XSksQT1RZShBLHgsUyxELF8sOSxXZVsyNV0pLEQ9UWUoRCxBLHgsUyxsLDE0LFdlWzI2XSksUz1RZShTLEQsQSx4LHYsMjAsV2VbMjddKSx4PVFlKHgsUyxELEEsYiw1LFdlWzI4XSksQT1RZShBLHgsUyxELGMsOSxXZVsyOV0pLEQ9UWUoRCxBLHgsUyxwLDE0LFdlWzMwXSksUz1RZShTLEQsQSx4LGssMjAsV2VbMzFdKSx4PVplKHgsUyxELEEsZCw0LFdlWzMyXSksQT1aZShBLHgsUyxELHYsMTEsV2VbMzNdKSxEPVplKEQsQSx4LFMsZywxNixXZVszNF0pLFM9WmUoUyxELEEseCxfLDIzLFdlWzM1XSkseD1aZSh4LFMsRCxBLHUsNCxXZVszNl0pLEE9WmUoQSx4LFMsRCxmLDExLFdlWzM3XSksRD1aZShELEEseCxTLHAsMTYsV2VbMzhdKSxTPVplKFMsRCxBLHgsbSwyMyxXZVszOV0pLHg9WmUoeCxTLEQsQSxiLDQsV2VbNDBdKSxBPVplKEEseCxTLEQsbywxMSxXZVs0MV0pLEQ9WmUoRCxBLHgsUyxsLDE2LFdlWzQyXSksUz1aZShTLEQsQSx4LGgsMjMsV2VbNDNdKSx4PVplKHgsUyxELEEseSw0LFdlWzQ0XSksQT1aZShBLHgsUyxELGssMTEsV2VbNDVdKSxEPVplKEQsQSx4LFMsdywxNixXZVs0Nl0pLFM9WmUoUyxELEEseCxjLDIzLFdlWzQ3XSkseD1KZSh4LFMsRCxBLG8sNixXZVs0OF0pLEE9SmUoQSx4LFMsRCxwLDEwLFdlWzQ5XSksRD1KZShELEEseCxTLF8sMTUsV2VbNTBdKSxTPUplKFMsRCxBLHgsZCwyMSxXZVs1MV0pLHg9SmUoeCxTLEQsQSxrLDYsV2VbNTJdKSxBPUplKEEseCxTLEQsbCwxMCxXZVs1M10pLEQ9SmUoRCxBLHgsUyxtLDE1LFdlWzU0XSksUz1KZShTLEQsQSx4LHUsMjEsV2VbNTVdKSx4PUplKHgsUyxELEEsdiw2LFdlWzU2XSksQT1KZShBLHgsUyxELHcsMTAsV2VbNTddKSxEPUplKEQsQSx4LFMsaCwxNSxXZVs1OF0pLFM9SmUoUyxELEEseCxiLDIxLFdlWzU5XSkseD1KZSh4LFMsRCxBLGYsNixXZVs2MF0pLEE9SmUoQSx4LFMsRCxnLDEwLFdlWzYxXSksRD1KZShELEEseCxTLGMsMTUsV2VbNjJdKSxTPUplKFMsRCxBLHgseSwyMSxXZVs2M10pLHNbMF09c1swXSt4fDAsc1sxXT1zWzFdK1N8MCxzWzJdPXNbMl0rRHwwLHNbM109c1szXStBfDB9fSx7a2V5OiJfZG9GaW5hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9kYXRhLHQ9ZS53b3JkcyxyPTgqdGhpcy5fbkRhdGFCeXRlcyxhPTgqZS5zaWdCeXRlczt0W2E+Pj41XXw9MTI4PDwyNC1hJTMyO3ZhciBuPU1hdGguZmxvb3Ioci80Mjk0OTY3Mjk2KSxpPXI7dFsxNSsoYSs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYobjw8OHxuPj4+MjQpfDQyNzgyNTUzNjAmKG48PDI0fG4+Pj44KSx0WzE0KyhhKzY0Pj4+OTw8NCldPTE2NzExOTM1JihpPDw4fGk+Pj4yNCl8NDI3ODI1NTM2MCYoaTw8MjR8aT4+PjgpLGUuc2lnQnl0ZXM9NCoodC5sZW5ndGgrMSksdGhpcy5fcHJvY2VzcygpO2Zvcih2YXIgcz10aGlzLl9oYXNoLG89cy53b3Jkcyx1PTA7dTw0O3UrPTEpe3ZhciBjPW9bdV07b1t1XT0xNjcxMTkzNSYoYzw8OHxjPj4+MjQpfDQyNzgyNTUzNjAmKGM8PDI0fGM+Pj44KX1yZXR1cm4gc319LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXAobyhhLnByb3RvdHlwZSksImNsb25lIix0aGlzKS5jYWxsKHRoaXMpO3JldHVybiBlLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxlfX1dKSxhfShIZSk7SGUuX2NyZWF0ZUhlbHBlcigkZSksSGUuX2NyZWF0ZUhtYWNIZWxwZXIoJGUpO3ZhciBldD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKGUpe3ZhciBuO3JldHVybiByKHRoaXMsYSksKG49dC5jYWxsKHRoaXMpKS5jZmc9T2JqZWN0LmFzc2lnbihuZXcgTGUse2tleVNpemU6NCxoYXNoZXI6JGUsaXRlcmF0aW9uczoxfSxlKSxufXJldHVybiBuKGEsW3trZXk6ImNvbXB1dGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLGE9dGhpcy5jZmcsbj1hLmhhc2hlci5jcmVhdGUoKSxpPVZlLmNyZWF0ZSgpLHM9aS53b3JkcyxvPWEua2V5U2l6ZSx1PWEuaXRlcmF0aW9ucztzLmxlbmd0aDxvOyl7ciYmbi51cGRhdGUocikscj1uLnVwZGF0ZShlKS5maW5hbGl6ZSh0KSxuLnJlc2V0KCk7Zm9yKHZhciBjPTE7Yzx1O2MrPTEpcj1uLmZpbmFsaXplKHIpLG4ucmVzZXQoKTtpLmNvbmNhdChyKX1yZXR1cm4gaS5zaWdCeXRlcz00Km8saX19XSksYX0oTGUpLHR0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSxuLGkpe3ZhciBzO3JldHVybiByKHRoaXMsYSksKHM9dC5jYWxsKHRoaXMpKS5jZmc9T2JqZWN0LmFzc2lnbihuZXcgTGUsaSkscy5feGZvcm1Nb2RlPWUscy5fa2V5PW4scy5yZXNldCgpLHN9cmV0dXJuIG4oYSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cChvKGEucHJvdG90eXBlKSwicmVzZXQiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfX0se2tleToicHJvY2VzcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2FwcGVuZChlKSx0aGlzLl9wcm9jZXNzKCl9fSx7a2V5OiJmaW5hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnRoaXMuX2FwcGVuZChlKSx0aGlzLl9kb0ZpbmFsaXplKCl9fV0sW3trZXk6ImNyZWF0ZUVuY3J5cHRvciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fRU5DX1hGT1JNX01PREUsZSx0KX19LHtrZXk6ImNyZWF0ZURlY3J5cHRvciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fREVDX1hGT1JNX01PREUsZSx0KX19LHtrZXk6Il9jcmVhdGVIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9mdDpjdH07cmV0dXJue2VuY3J5cHQ6ZnVuY3Rpb24ocixhLG4pe3JldHVybiB0KGEpLmVuY3J5cHQoZSxyLGEsbil9LGRlY3J5cHQ6ZnVuY3Rpb24ocixhLG4pe3JldHVybiB0KGEpLmRlY3J5cHQoZSxyLGEsbil9fX19XSksYX0oR2UpO3R0Ll9FTkNfWEZPUk1fTU9ERT0xLHR0Ll9ERUNfWEZPUk1fTU9ERT0yLHR0LmtleVNpemU9NCx0dC5pdlNpemU9NDt2YXIgcnQ9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYShlLG4pe3ZhciBpO3JldHVybiByKHRoaXMsYSksKGk9dC5jYWxsKHRoaXMpKS5fY2lwaGVyPWUsaS5faXY9bixpfXJldHVybiBuKGEsbnVsbCxbe2tleToiY3JlYXRlRW5jcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLkVuY3J5cHRvci5jcmVhdGUoZSx0KX19LHtrZXk6ImNyZWF0ZURlY3J5cHRvciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5EZWNyeXB0b3IuY3JlYXRlKGUsdCl9fV0pLGF9KExlKTtmdW5jdGlvbiBhdChlLHQscil7dmFyIGEsbj1lLGk9dGhpcy5faXY7aT8oYT1pLHRoaXMuX2l2PXZvaWQgMCk6YT10aGlzLl9wcmV2QmxvY2s7Zm9yKHZhciBzPTA7czxyO3MrPTEpblt0K3NdXj1hW3NdfXZhciBudD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhKX0ocnQpO250LkVuY3J5cHRvcj1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLFt7a2V5OiJwcm9jZXNzQmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fY2lwaGVyLGE9ci5ibG9ja1NpemU7YXQuY2FsbCh0aGlzLGUsdCxhKSxyLmVuY3J5cHRCbG9jayhlLHQpLHRoaXMuX3ByZXZCbG9jaz1lLnNsaWNlKHQsdCthKX19XSksYX0obnQpLG50LkRlY3J5cHRvcj1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLFt7a2V5OiJwcm9jZXNzQmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fY2lwaGVyLGE9ci5ibG9ja1NpemUsbj1lLnNsaWNlKHQsdCthKTtyLmRlY3J5cHRCbG9jayhlLHQpLGF0LmNhbGwodGhpcyxlLHQsYSksdGhpcy5fcHJldkJsb2NrPW59fV0pLGF9KG50KTt2YXIgaXQ9e3BhZDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj00KnQsYT1yLWUuc2lnQnl0ZXMlcixuPWE8PDI0fGE8PDE2fGE8PDh8YSxpPVtdLHM9MDtzPGE7cys9NClpLnB1c2gobik7dmFyIG89VmUuY3JlYXRlKGksYSk7ZS5jb25jYXQobyl9LHVucGFkOmZ1bmN0aW9uKGUpe3ZhciB0PWUscj0yNTUmdC53b3Jkc1t0LnNpZ0J5dGVzLTE+Pj4yXTt0LnNpZ0J5dGVzLT1yfX0sc3Q9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYShlLG4saSl7dmFyIHM7cmV0dXJuIHIodGhpcyxhKSwocz10LmNhbGwodGhpcyxlLG4sT2JqZWN0LmFzc2lnbih7bW9kZTpudCxwYWRkaW5nOml0fSxpKSkpLmJsb2NrU2l6ZT00LHN9cmV0dXJuIG4oYSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cChvKGEucHJvdG90eXBlKSwicmVzZXQiLHRoaXMpLmNhbGwodGhpcyk7dmFyIHQ9dGhpcy5jZmcscj10Lml2LG49dC5tb2RlO3RoaXMuX3hmb3JtTW9kZT09PXRoaXMuY29uc3RydWN0b3IuX0VOQ19YRk9STV9NT0RFP2U9bi5jcmVhdGVFbmNyeXB0b3I6KGU9bi5jcmVhdGVEZWNyeXB0b3IsdGhpcy5fbWluQnVmZmVyU2l6ZT0xKSx0aGlzLl9tb2RlPWUuY2FsbChuLHRoaXMsciYmci53b3JkcyksdGhpcy5fbW9kZS5fX2NyZWF0b3I9ZX19LHtrZXk6Il9kb1Byb2Nlc3NCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9tb2RlLnByb2Nlc3NCbG9jayhlLHQpfX0se2tleToiX2RvRmluYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmNmZy5wYWRkaW5nO3JldHVybiB0aGlzLl94Zm9ybU1vZGU9PT10aGlzLmNvbnN0cnVjdG9yLl9FTkNfWEZPUk1fTU9ERT8odC5wYWQodGhpcy5fZGF0YSx0aGlzLmJsb2NrU2l6ZSksZT10aGlzLl9wcm9jZXNzKCEwKSk6KGU9dGhpcy5fcHJvY2VzcyghMCksdC51bnBhZChlKSksZX19XSksYX0odHQpLG90PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSl7dmFyIG47cmV0dXJuIHIodGhpcyxhKSwobj10LmNhbGwodGhpcykpLm1peEluKGUpLG59cmV0dXJuIG4oYSxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybihlfHx0aGlzLmZvcm1hdHRlcikuc3RyaW5naWZ5KHRoaXMpfX1dKSxhfShMZSksdXQ9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXt2YXIgdD1lLmNpcGhlcnRleHQscj1lLnNhbHQ7cmV0dXJuKHI/VmUuY3JlYXRlKFsxMzk4ODkzNjg0LDE3MDEwNzY4MzFdKS5jb25jYXQocikuY29uY2F0KHQpOnQpLnRvU3RyaW5nKHFlKX0scGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQscj1xZS5wYXJzZShlKSxhPXIud29yZHM7cmV0dXJuIDEzOTg4OTM2ODQ9PT1hWzBdJiYxNzAxMDc2ODMxPT09YVsxXSYmKHQ9VmUuY3JlYXRlKGEuc2xpY2UoMiw0KSksYS5zcGxpY2UoMCw0KSxyLnNpZ0J5dGVzLT0xNiksb3QuY3JlYXRlKHtjaXBoZXJ0ZXh0OnIsc2FsdDp0fSl9fSxjdD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLG51bGwsW3trZXk6ImVuY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBuPU9iamVjdC5hc3NpZ24obmV3IExlLHRoaXMuY2ZnLGEpLGk9ZS5jcmVhdGVFbmNyeXB0b3IocixuKSxzPWkuZmluYWxpemUodCksbz1pLmNmZztyZXR1cm4gb3QuY3JlYXRlKHtjaXBoZXJ0ZXh0OnMsa2V5OnIsaXY6by5pdixhbGdvcml0aG06ZSxtb2RlOm8ubW9kZSxwYWRkaW5nOm8ucGFkZGluZyxibG9ja1NpemU6aS5ibG9ja1NpemUsZm9ybWF0dGVyOm4uZm9ybWF0fSl9fSx7a2V5OiJkZWNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbj10LGk9T2JqZWN0LmFzc2lnbihuZXcgTGUsdGhpcy5jZmcsYSk7cmV0dXJuIG49dGhpcy5fcGFyc2UobixpLmZvcm1hdCksZS5jcmVhdGVEZWNyeXB0b3IocixpKS5maW5hbGl6ZShuLmNpcGhlcnRleHQpfX0se2tleToiX3BhcnNlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT90LnBhcnNlKGUsdGhpcyk6ZX19XSksYX0oTGUpO2N0LmNmZz1PYmplY3QuYXNzaWduKG5ldyBMZSx7Zm9ybWF0OnV0fSk7dmFyIGx0PXtleGVjdXRlOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBuPWE7bnx8KG49VmUucmFuZG9tKDgpKTt2YXIgaT1ldC5jcmVhdGUoe2tleVNpemU6dCtyfSkuY29tcHV0ZShlLG4pLHM9VmUuY3JlYXRlKGkud29yZHMuc2xpY2UodCksNCpyKTtyZXR1cm4gaS5zaWdCeXRlcz00KnQsb3QuY3JlYXRlKHtrZXk6aSxpdjpzLHNhbHQ6bn0pfX0sZnQ9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxudWxsLFt7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbj1PYmplY3QuYXNzaWduKG5ldyBMZSx0aGlzLmNmZyxhKSxpPW4ua2RmLmV4ZWN1dGUocixlLmtleVNpemUsZS5pdlNpemUpO24uaXY9aS5pdjt2YXIgcz1jdC5lbmNyeXB0LmNhbGwodGhpcyxlLHQsaS5rZXksbik7cmV0dXJuIHMubWl4SW4oaSksc319LHtrZXk6ImRlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBuPXQsaT1PYmplY3QuYXNzaWduKG5ldyBMZSx0aGlzLmNmZyxhKTtuPXRoaXMuX3BhcnNlKG4saS5mb3JtYXQpO3ZhciBzPWkua2RmLmV4ZWN1dGUocixlLmtleVNpemUsZS5pdlNpemUsbi5zYWx0KTtyZXR1cm4gaS5pdj1zLml2LGN0LmRlY3J5cHQuY2FsbCh0aGlzLGUsbixzLmtleSxpKX19XSksYX0oY3QpO2Z0LmNmZz1PYmplY3QuYXNzaWduKGN0LmNmZyx7a2RmOmx0fSk7Zm9yKHZhciBkdD1bXSxodD1bXSxwdD1bXSx2dD1bXSx5dD1bXSxtdD1bXSxndD1bXSxrdD1bXSxidD1bXSxfdD1bXSx3dD1bXSx4dD0wO3h0PDI1Njt4dCs9MSl3dFt4dF09eHQ8MTI4P3h0PDwxOnh0PDwxXjI4Mztmb3IodmFyIFN0PTAsRHQ9MCxBdD0wO0F0PDI1NjtBdCs9MSl7dmFyIFR0PUR0XkR0PDwxXkR0PDwyXkR0PDwzXkR0PDw0O1R0PVR0Pj4+OF4yNTUmVHReOTksZHRbU3RdPVR0LGh0W1R0XT1TdDt2YXIgRXQ9d3RbU3RdLEJ0PXd0W0V0XSxVdD13dFtCdF0sQ3Q9MjU3Knd0W1R0XV4xNjg0MzAwOCpUdDtwdFtTdF09Q3Q8PDI0fEN0Pj4+OCx2dFtTdF09Q3Q8PDE2fEN0Pj4+MTYseXRbU3RdPUN0PDw4fEN0Pj4+MjQsbXRbU3RdPUN0LEN0PTE2ODQzMDA5KlV0XjY1NTM3KkJ0XjI1NypFdF4xNjg0MzAwOCpTdCxndFtUdF09Q3Q8PDI0fEN0Pj4+OCxrdFtUdF09Q3Q8PDE2fEN0Pj4+MTYsYnRbVHRdPUN0PDw4fEN0Pj4+MjQsX3RbVHRdPUN0LFN0PyhTdD1FdF53dFt3dFt3dFtVdF5FdF1dXSxEdF49d3Rbd3RbRHRdXSk6U3Q9RHQ9MX12YXIgUHQ9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLEl0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsW3trZXk6Il9kb1Jlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO2lmKCF0aGlzLl9uUm91bmRzfHx0aGlzLl9rZXlQcmlvclJlc2V0IT09dGhpcy5fa2V5KXt0aGlzLl9rZXlQcmlvclJlc2V0PXRoaXMuX2tleTt2YXIgdD10aGlzLl9rZXlQcmlvclJlc2V0LHI9dC53b3JkcyxhPXQuc2lnQnl0ZXMvNDt0aGlzLl9uUm91bmRzPWErNjt2YXIgbj00Kih0aGlzLl9uUm91bmRzKzEpO3RoaXMuX2tleVNjaGVkdWxlPVtdO2Zvcih2YXIgaT10aGlzLl9rZXlTY2hlZHVsZSxzPTA7czxuO3MrPTEpczxhP2lbc109cltzXTooZT1pW3MtMV0scyVhP2E+NiYmcyVhPT00JiYoZT1kdFtlPj4+MjRdPDwyNHxkdFtlPj4+MTYmMjU1XTw8MTZ8ZHRbZT4+PjgmMjU1XTw8OHxkdFsyNTUmZV0pOihlPWR0WyhlPWU8PDh8ZT4+PjI0KT4+PjI0XTw8MjR8ZHRbZT4+PjE2JjI1NV08PDE2fGR0W2U+Pj44JjI1NV08PDh8ZHRbMjU1JmVdLGVePVB0W3MvYXwwXTw8MjQpLGlbc109aVtzLWFdXmUpO3RoaXMuX2ludktleVNjaGVkdWxlPVtdO2Zvcih2YXIgbz10aGlzLl9pbnZLZXlTY2hlZHVsZSx1PTA7dTxuO3UrPTEpe3ZhciBjPW4tdTtlPXUlND9pW2NdOmlbYy00XSxvW3VdPXU8NHx8Yzw9ND9lOmd0W2R0W2U+Pj4yNF1dXmt0W2R0W2U+Pj4xNiYyNTVdXV5idFtkdFtlPj4+OCYyNTVdXV5fdFtkdFsyNTUmZV1dfX19fSx7a2V5OiJlbmNyeXB0QmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZG9DcnlwdEJsb2NrKGUsdCx0aGlzLl9rZXlTY2hlZHVsZSxwdCx2dCx5dCxtdCxkdCl9fSx7a2V5OiJkZWNyeXB0QmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZSxhPXJbdCsxXTtyW3QrMV09clt0KzNdLHJbdCszXT1hLHRoaXMuX2RvQ3J5cHRCbG9jayhyLHQsdGhpcy5faW52S2V5U2NoZWR1bGUsZ3Qsa3QsYnQsX3QsaHQpLGE9clt0KzFdLHJbdCsxXT1yW3QrM10sclt0KzNdPWF9fSx7a2V5OiJfZG9DcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQscixhLG4saSxzLG8pe2Zvcih2YXIgdT1lLGM9dGhpcy5fblJvdW5kcyxsPXVbdF1eclswXSxmPXVbdCsxXV5yWzFdLGQ9dVt0KzJdXnJbMl0saD11W3QrM11eclszXSxwPTQsdj0xO3Y8Yzt2Kz0xKXt2YXIgeT1hW2w+Pj4yNF1ebltmPj4+MTYmMjU1XV5pW2Q+Pj44JjI1NV1ec1syNTUmaF1ecltwXTtwKz0xO3ZhciBtPWFbZj4+PjI0XV5uW2Q+Pj4xNiYyNTVdXmlbaD4+PjgmMjU1XV5zWzI1NSZsXV5yW3BdO3ArPTE7dmFyIGc9YVtkPj4+MjRdXm5baD4+PjE2JjI1NV1eaVtsPj4+OCYyNTVdXnNbMjU1JmZdXnJbcF07cCs9MTt2YXIgaz1hW2g+Pj4yNF1ebltsPj4+MTYmMjU1XV5pW2Y+Pj44JjI1NV1ec1syNTUmZF1ecltwXTtwKz0xLGw9eSxmPW0sZD1nLGg9a312YXIgYj0ob1tsPj4+MjRdPDwyNHxvW2Y+Pj4xNiYyNTVdPDwxNnxvW2Q+Pj44JjI1NV08PDh8b1syNTUmaF0pXnJbcF07cCs9MTt2YXIgXz0ob1tmPj4+MjRdPDwyNHxvW2Q+Pj4xNiYyNTVdPDwxNnxvW2g+Pj44JjI1NV08PDh8b1syNTUmbF0pXnJbcF07cCs9MTt2YXIgdz0ob1tkPj4+MjRdPDwyNHxvW2g+Pj4xNiYyNTVdPDwxNnxvW2w+Pj44JjI1NV08PDh8b1syNTUmZl0pXnJbcF07cCs9MTt2YXIgeD0ob1toPj4+MjRdPDwyNHxvW2w+Pj4xNiYyNTVdPDwxNnxvW2Y+Pj44JjI1NV08PDh8b1syNTUmZF0pXnJbcF07cCs9MSx1W3RdPWIsdVt0KzFdPV8sdVt0KzJdPXcsdVt0KzNdPXh9fV0pLGF9KHN0KTtJdC5rZXlTaXplPTg7dmFyIE10PXN0Ll9jcmVhdGVIZWxwZXIoSXQpLHp0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEpfShydCk7enQuRW5jcnlwdG9yPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsW3trZXk6InByb2Nlc3NCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLGE9dGhpcy5fY2lwaGVyLG49YS5ibG9ja1NpemUsaT10aGlzLl9pdixzPXRoaXMuX2NvdW50ZXI7aSYmKHRoaXMuX2NvdW50ZXI9aS5zbGljZSgwKSxzPXRoaXMuX2NvdW50ZXIsdGhpcy5faXY9dm9pZCAwKTt2YXIgbz1zLnNsaWNlKDApO2EuZW5jcnlwdEJsb2NrKG8sMCksc1tuLTFdPXNbbi0xXSsxfDA7Zm9yKHZhciB1PTA7dTxuO3UrPTEpclt0K3VdXj1vW3VdfX1dKSxhfSh6dCksenQuRGVjcnlwdG9yPXp0LkVuY3J5cHRvcjt2YXIgT3Q9e3BhZDpmdW5jdGlvbigpe30sdW5wYWQ6ZnVuY3Rpb24oKXt9fSxSdD17ZGVjcnlwdFdvcmRBcnJheTpmdW5jdGlvbihlLHQscil7dmFyIGE9RmUucGFyc2UodCksbj1GZS5wYXJzZShpZShyKSksaT1WZS5jcmVhdGUobmV3IFVpbnQ4QXJyYXkoZSkpLHM9TXQuZGVjcnlwdChvdC5jcmVhdGUoe2NpcGhlcnRleHQ6aX0pLGEse2l2Om4sbW9kZTp6dCxwYWRkaW5nOk90fSk7cmV0dXJuIFJ0LndvcmRBcnJheVRvVWludDhBcnJheShzKX0sd29yZEFycmF5VG9VaW50OEFycmF5OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNpZ0J5dGVzLHI9ZS53b3JkcyxhPW5ldyBVaW50OEFycmF5KHQpLG49MCxpPTA7biE9PXQ7KXt2YXIgcz1yW2krK107aWYoYVtuKytdPSg0Mjc4MTkwMDgwJnMpPj4+MjQsbj09PXQpYnJlYWs7aWYoYVtuKytdPSgxNjcxMTY4MCZzKT4+PjE2LG49PT10KWJyZWFrO2lmKGFbbisrXT0oNjUyODAmcyk+Pj44LG49PT10KWJyZWFrO2FbbisrXT0yNTUmc31yZXR1cm4gYX0sZGVjb2RlckFFU0NUUkRhdGE6ZnVuY3Rpb24oZSx0LHIpe2lmKGUudmlkZW9TZW5jKXt2YXIgYT1lLmtpZFZhbHVlLG49ZS52aWRlb1NlbmM7ZS5zYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7dmFyIHM9bltpXSxvPXQuZGF0YSx1PVtdLGM9W10sbD1zLkluaXRpYWxpemF0aW9uVmVjdG9yO2lmKHMuc3Vic2FtcGxlcyYmcy5zdWJzYW1wbGVzLmxlbmd0aClzLnN1YnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5CeXRlc09mQ2xlYXJEYXRhK2UuQnl0ZXNPZlByb3RlY3RlZERhdGEscj1vLnNsaWNlKDAsdCk7dS5wdXNoKHIuc2xpY2UoMCxlLkJ5dGVzT2ZDbGVhckRhdGEpKSxjLnB1c2goci5zbGljZShlLkJ5dGVzT2ZDbGVhckRhdGEpKSxvPW8uc2xpY2UodCl9KSk7ZWxzZXt2YXIgZj10LnNpemU7dS5wdXNoKG8uc2xpY2UoMCwwKSksYy5wdXNoKG8uc2xpY2UoMCxmKSksbz1vLnNsaWNlKGYpfXZhciBkPW5ldyBJZTtkLndyaXRlLmFwcGx5KGQsYyk7dmFyIGg9cj9yKGQuYnVmZmVyLGEsbCk6UnQuZGVjcnlwdFdvcmRBcnJheShkLmJ1ZmZlcixhLGwpLHA9bmV3IEllO3UuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1jW3RdLmxlbmd0aCxhPWguc2xpY2UoMCxyKTtwLndyaXRlKGUpLHAud3JpdGUoYSksaD1oLnNsaWNlKHIpfSkpLGUuc2FtcGxlc1tpXS5kYXRhPXAuYnVmZmVyfSkpfWlmKHQuYXVkaW9TZW5jKXt2YXIgaT10LmtpZFZhbHVlLHM9dC5hdWRpb1NlbmM7dC5zYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKGUsYSl7dmFyIG49c1thXSxvPXI/cihlLmRhdGEsaSxuLkluaXRpYWxpemF0aW9uVmVjdG9yKTpSdC5kZWNyeXB0V29yZEFycmF5KGUuZGF0YSxpLG4uSW5pdGlhbGl6YXRpb25WZWN0b3IpO3Quc2FtcGxlc1thXS5kYXRhPW99KSl9fX0sTHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsYSxuLHMpe3ZhciBvPXRoaXM7cih0aGlzLGUpLGkodGhpcywiX3ZpZGVvU2FtcGxlcyIsW10pLGkodGhpcywiX2F1ZGlvU2FtcGxlcyIsW10pLGkodGhpcywiX2xhc3RSZW1haW5CdWZmZXIiLFtdKSxpKHRoaXMsIl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3MiLDApLHRoaXMudmlkZW9UcmFjaz1uZXcgUix0aGlzLmF1ZGlvVHJhY2s9bmV3IEwsdGhpcy5tZXRhZGF0YVRyYWNrPW58fG5ldyBILHRoaXMubG9nPW5ldyBPZSgiTVA0RGVtdXhlciIsIXN8fCFzLm9wZW5Mb2d8fCFzLm9wZW5Mb2cpLHQmJnQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ7KHQ9by5fdmlkZW9TYW1wbGVzKS5wdXNoLmFwcGx5KHQseShlLmZyYW1lcykpfSkpLGEmJmEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ7KHQ9by5fYXVkaW9TYW1wbGVzKS5wdXNoLmFwcGx5KHQseShlLmZyYW1lcykpfSkpfXJldHVybiBuKGUsW3trZXk6InBhcnNlU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJtb292IGlzIHJlcXVpcmVkIik7aWYodGhpcy52aWRlb1RyYWNrLmNvZGVjfHx0aGlzLmF1ZGlvVHJhY2suY29kZWN8fChEZS5tb292VG9UcmFjayhlLHRoaXMudmlkZW9UcmFjayx0aGlzLmF1ZGlvVHJhY2spLHRoaXMudmlkZW9TZW5jPXRoaXMudmlkZW9UcmFjay52aWRlb1NlbmMsdGhpcy5hdWRpb1NlbmM9dGhpcy5hdWRpb1RyYWNrLmF1ZGlvU2VuYyksIXRoaXMuX2F1ZGlvU2FtcGxlcy5sZW5ndGgmJiF0aGlzLl92aWRlb1NhbXBsZXMubGVuZ3RoKXt2YXIgdD1EZS5tb292VG9TYW1wbGVzKGUpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiY2Fubm90IHBhcnNlIHNhbXBsZXMgZnJvbSBtb292IGJveCIpO3RoaXMuX3ZpZGVvU2FtcGxlcz10LnZpZGVvU2FtcGxlc3x8W10sdGhpcy5fYXVkaW9TYW1wbGVzPXQuYXVkaW9TYW1wbGVzfHxbXX19fSx7a2V5OiJkZW11eCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxuKXt0aGlzLnBhcnNlU2FtcGxlcyhuKTt2YXIgaSxzLG8sdT10aGlzLnZpZGVvVHJhY2ssYz10aGlzLmF1ZGlvVHJhY2s7aWYodS5zYW1wbGVzPVtdLGMuc2FtcGxlcz1bXSxyKXtmb3IodmFyIGwsZj0wLGQ9clswXSxoPXJbMV07ZDw9aDtkKyspe2lmKCEoaT10aGlzLl92aWRlb1NhbXBsZXNbZF0pKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZvdW5kIHZpZGVvIGZyYW1lICMiLmNvbmNhdChkKSk7bz1pLm9mZnNldC10LHM9ZS5zdWJhcnJheShvLG8raS5zaXplKSwobD1uZXcgVihpLnB0c3x8aS5kdHMsaS5kdHMpKS5kdXJhdGlvbj1pLmR1cmF0aW9uLGwuZ29wSWQ9aS5nb3BJZCxpLmtleWZyYW1lJiZsLnNldFRvS2V5ZnJhbWUoKTtmb3IodmFyIHA9MCx2PXMubGVuZ3RoLTE7cDx2OylmPXJlKHMscCkscCs9NCxsLnVuaXRzLnB1c2gocy5zdWJhcnJheShwLHArZikpLHArPWY7dS5zYW1wbGVzLnB1c2gobCl9dS5iYXNlTWVkaWFEZWNvZGVUaW1lPXUuc2FtcGxlc1swXS5kdHN9aWYoYSl7Zm9yKHZhciB5PWFbMF0sbT1hWzFdO3k8PW07eSsrKXtpZighKGk9dGhpcy5fYXVkaW9TYW1wbGVzW3ldKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmb3VuZCB2aWRlbyBmcmFtZSAjIi5jb25jYXQoeSkpO289aS5vZmZzZXQtdCxzPWUuc3ViYXJyYXkobyxvK2kuc2l6ZSksYy5zYW1wbGVzLnB1c2gobmV3IEYoaS5kdHMscyxpLmR1cmF0aW9uKSl9Yy5iYXNlTWVkaWFEZWNvZGVUaW1lPWMuc2FtcGxlc1swXS5kdHN9cmV0dXJue3ZpZGVvVHJhY2s6dSxhdWRpb1RyYWNrOmMsbWV0YWRhdGFUcmFjazp0aGlzLm1ldGFkYXRhVHJhY2t9fX0se2tleToiZGVtdXhQYXJ0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLG4saSxzLG8pe2lmKHRoaXMucGFyc2VTYW1wbGVzKG4pLHRoaXMudmlkZW9UcmFjay51c2VFTUU9aSx0aGlzLmF1ZGlvVHJhY2sudXNlRU1FPWksdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlciYmdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5ieXRlTGVuZ3RoPjAmJnQ+dGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zJiZ0PD10aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3MrdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5ieXRlTGVuZ3RoKWZvcih2YXIgdT0wO3U8MjA7KXRyeXt2YXIgYz10aGlzLl9sYXN0UmVtYWluQnVmZmVyLnN1YmFycmF5KDAsdC10aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3MpLGw9bmV3IFVpbnQ4QXJyYXkoZS5ieXRlTGVuZ3RoK2MuYnl0ZUxlbmd0aCk7bC5zZXQoYywwKSxsLnNldChuZXcgVWludDhBcnJheShlKSxjLmJ5dGVMZW5ndGgpLGU9bCx0LT1jLmJ5dGVMZW5ndGgsdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlcj1udWxsLHRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcz0wO2JyZWFrfWNhdGNoKFQpe2lmKCEodTwyMCkpdGhyb3cgbmV3IEVycm9yKCJuZXcgVWludDhBcnJheSBlcnJvcjosIitULmVycm9yTWVzc2FnZSk7dSsrfXZhciBmLGQsaCxwPXRoaXMudmlkZW9UcmFjayx2PXRoaXMuYXVkaW9UcmFjaztwLnNhbXBsZXM9W10sdi5zYW1wbGVzPVtdLHAudmlkZW9TZW5jPW51bGwsdi5hdWRpb1NlbmM9bnVsbDt2YXIgeT0wLG09MDtpZih0aGlzLl92aWRlb1NhbXBsZXMubGVuZ3RoPjAmJnIubGVuZ3RoPjApe2Zvcih2YXIgZyxrPWUuYnl0ZUxlbmd0aCt0LGI9clswXTtiPD1yWzFdO2IrKyl7aWYoIShmPXRoaXMuX3ZpZGVvU2FtcGxlc1tiXSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZm91bmQgdmlkZW8gZnJhbWUgIyIuY29uY2F0KGIpKTtmLm9mZnNldD49dCYmZi5vZmZzZXQrZi5zaXplPD1rJiYoeT0oaD1mLm9mZnNldC10KStmLnNpemUsZD1lLnN1YmFycmF5KGgseSksKGc9bmV3IFYoZi5wdHN8fGYuZHRzLGYuZHRzKSkuZHVyYXRpb249Zi5kdXJhdGlvbixnLmdvcElkPWYuZ29wSWQsZy5zYW1wbGVPZmZzZXQ9Zi5pbmRleCxmLmtleWZyYW1lJiZnLnNldFRvS2V5ZnJhbWUoKSxnLmRhdGE9ZCxnLnNpemU9Zi5zaXplLHAuc2FtcGxlcy5wdXNoKGcpKX1wLnNhbXBsZXMubGVuZ3RoPjAmJihwLmdvcElkPXAuc2FtcGxlc1swXS5nb3BJZCxwLmJhc2VNZWRpYURlY29kZVRpbWU9cC5zYW1wbGVzWzBdLmR0cyxwLnN0YXJ0UHRzPXAuc2FtcGxlc1swXS5wdHMvcC50aW1lc2NhbGUscC5lbmRQdHM9cC5zYW1wbGVzW3Auc2FtcGxlcy5sZW5ndGgtMV0ucHRzL3AudGltZXNjYWxlLHRoaXMudmlkZW9TZW5jJiYocC52aWRlb1NlbmM9dGhpcy52aWRlb1NlbmMuc2xpY2UocC5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCxwLnNhbXBsZXNbMF0uc2FtcGxlT2Zmc2V0K3Auc2FtcGxlcy5sZW5ndGgpLHAua2lkVmFsdWU9cykpfWlmKHRoaXMuX2F1ZGlvU2FtcGxlcy5sZW5ndGg+MCYmYS5sZW5ndGg+MCl7Zm9yKHZhciBfPWFbMF07Xzw9YVsxXTtfKyspe2lmKCEoZj10aGlzLl9hdWRpb1NhbXBsZXNbX10pKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZvdW5kIHZpZGVvIGZyYW1lICMiLmNvbmNhdChfKSk7Zi5vZmZzZXQ+PXQmJmYub2Zmc2V0K2Yuc2l6ZTw9ZS5ieXRlTGVuZ3RoK3QmJihtPShoPWYub2Zmc2V0LXQpK2Yuc2l6ZSxkPWUuc3ViYXJyYXkoaCxtKSx2LnNhbXBsZXMucHVzaChuZXcgRihmLmR0cyxkLGYuZHVyYXRpb24sZi5pbmRleCkpKX12LnNhbXBsZXMubGVuZ3RoPjAmJih2LmdvcElkPXYuc2FtcGxlc1swXS5nb3BJZHx8cC5nb3BJZCx2LmJhc2VNZWRpYURlY29kZVRpbWU9di5zYW1wbGVzWzBdLmR0cyx2LnN0YXJ0UHRzPXYuc2FtcGxlc1swXS5wdHMvdi50aW1lc2NhbGUsdi5lbmRQdHM9di5zYW1wbGVzW3Yuc2FtcGxlcy5sZW5ndGgtMV0ucHRzL3YudGltZXNjYWxlLHRoaXMuYXVkaW9TZW5jJiYodi5hdWRpb1NlbmM9dGhpcy5hdWRpb1NlbmMuc2xpY2Uodi5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCx2LnNhbXBsZXNbMF0uc2FtcGxlT2Zmc2V0K3Yuc2FtcGxlcy5sZW5ndGgpLHYua2lkVmFsdWU9cykpfXRoaXMuZGVjb2RlckRhdGEocCx2LG8pO2Zvcih2YXIgdz0wLHg9MDt4PHAuc2FtcGxlcy5sZW5ndGg7eCsrKWZvcih2YXIgUz0wLEQ9cC5zYW1wbGVzW3hdLmRhdGEsQT1ELmxlbmd0aC0xO1M8QTspdz1yZShELFMpLFMrPTQscC5zYW1wbGVzW3hdLnVuaXRzLnB1c2goRC5zdWJhcnJheShTLFMrdykpLFMrPXc7cmV0dXJuIHRoaXMuX2xhc3RSZW1haW5CdWZmZXI9ZS5zdWJhcnJheShNYXRoLm1heCh5LG0pKSx0aGlzLl9sYXN0UmVtYWluQnVmZmVyLmJ5dGVMZW5ndGg+MD90aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9dCtlLmJ5dGVMZW5ndGgtdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5ieXRlTGVuZ3RoOnRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcz0wLHt2aWRlb1RyYWNrOnAsYXVkaW9UcmFjazp2LG1ldGFkYXRhVHJhY2s6dGhpcy5tZXRhZGF0YVRyYWNrfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3ZpZGVvU2FtcGxlcz1bXSx0aGlzLl9hdWRpb1NhbXBsZXM9W10sdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlcj1udWxsLHRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcz0wLHRoaXMudmlkZW9UcmFjay5yZXNldCgpLHRoaXMuYXVkaW9UcmFjay5yZXNldCgpLHRoaXMubWV0YWRhdGFUcmFjay5yZXNldCgpfX0se2tleToiZGVjb2RlckRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtlLnVzZUVNRXx8dC51c2VFTUV8fFJ0LmRlY29kZXJBRVNDVFJEYXRhKGUsdCxyKX19XSxbe2tleToicHJvYmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBEZS5wcm9iZShlKX19XSksZX0oKSxWdD17bm93VGltZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gcGFyc2VJbnQocGVyZm9ybWFuY2Uubm93KCksMTApfWNhdGNoKGUpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0sY29uY2F0RGF0YTpmdW5jdGlvbihlLHQpe3ZhciByPVtdLGE9MDtlJiZyLnB1c2goZSksdCYmci5wdXNoKHQpLHIuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYoYSs9ZS5ieXRlTGVuZ3RoKSwhMH0pKTt2YXIgbj1uZXcgVWludDhBcnJheShhKSxpPTA7cmV0dXJuIHIuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYobi5zZXQoZSxpKSxpKz1lLmJ5dGVMZW5ndGgpLCEwfSkpLG59fTtvbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kYXRhO3N3aXRjaChyLm1ldGhvZCl7Y2FzZSJpbml0Ijp0aGlzLmNvZGVjVHlwZT1yLmFyZ3MuY29kZWNUeXBlLHRoaXMub3BlbmxvZz1yLmFyZ3Mub3BlbkxvZyx0aGlzLk1QNERlbXV4ZXI9bnVsbCx0aGlzLkZNUDRSZW11eGVyPW51bGwsdGhpcy5fbmVlZEluaXRTZWdtZW50PSEwLHRoaXMuc3VwcG9ydEhldmM9ci5hcmdzLnN1cHBvcnRIZXZjO2JyZWFrO2Nhc2UidHJhbnNtdXgiOnZhciBhPWUuZGF0YS5hcmdzLG49bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmJ1ZmZlcik7dGhpcy5NUDREZW11eGVyfHwodGhpcy5NUDREZW11eGVyPW5ldyBMdChudWxsLG51bGwsbnVsbCx7b3BlbmxvZzp0aGlzLm9wZW5sb2d9KSk7dmFyIGkscz10aGlzLk1QNERlbXV4ZXIuZGVtdXhQYXJ0KG4sYS5zdGFydCxhLnZpZGVvSWR4LGEuYXVkaW9JZHgsYS5tb292LGEudXNlRU1FLGEua2lkVmFsdWUpO2lmKHRoaXMuRk1QNFJlbXV4ZXJ8fCJoMjY1Ij09PXRoaXMuY29kZWNUeXBlJiYhdGhpcy5zdXBwb3J0SGV2Y3x8KHRoaXMuRk1QNFJlbXV4ZXI9bmV3IFJlKHRoaXMuTVA0RGVtdXhlci52aWRlb1RyYWNrLHRoaXMuTVA0RGVtdXhlci5hdWRpb1RyYWNrLHtvcGVuTG9nOnRoaXMub3BlbmxvZ30pKSx0aGlzLkZNUDRSZW11eGVyKXt2YXIgbz10aGlzLkZNUDRSZW11eGVyLnJlbXV4KHRoaXMuX25lZWRJbml0U2VnbWVudCx7aW5pdE1lcmdlOiEwfSk7by5pbml0U2VnbWVudCYmKHRoaXMuX25lZWRJbml0U2VnbWVudD0hMSksaT17YnVmZmVyOlZ0LmNvbmNhdERhdGEoby5hdWRpb1NlZ21lbnQsby52aWRlb1NlZ21lbnQpLHJhbmdlOmEuY29udGV4dC5yYW5nZSxzdGF0ZTphLmNvbnRleHQuc3RhdGUsY29udGV4dDp7cmFuZ2U6YS5jb250ZXh0LnJhbmdlLGZyYWdJbmRleDphLmNvbnRleHQuZnJhZ0luZGV4LHN0YXJ0UHRzOk1hdGgubWluKHMudmlkZW9UcmFjay5zdGFydFB0cyxzLmF1ZGlvVHJhY2suc3RhcnRQdHMpLGVuZFB0czpNYXRoLm1heChzLnZpZGVvVHJhY2suZW5kUHRzLHMuYXVkaW9UcmFjay5lbmRQdHMpfSxpbml0U2VnOm8uaW5pdFNlZ21lbnR9fXRoaXMucG9zdE1lc3NhZ2Uoe21ldGhvZDoidHJhbnNtdXgiLGlkOmUuZGF0YS5pZCxhcmdzOnQoe30saSl9KTticmVhaztjYXNlInJlc2V0Ijp0aGlzLkZNUDRSZW11eGVyJiZ0aGlzLkZNUDRSZW11eGVyLnJlc2V0KCksdGhpcy5NUDREZW11eGVyJiZ0aGlzLk1QNERlbXV4ZXIucmVzZXQoKSx0aGlzLkZNUDRSZW11eGVyPW51bGwsdGhpcy5NUDREZW11eGVyPW51bGwsdGhpcy5fbmVlZEluaXRTZWdtZW50PSEwfX19KCk7Cg==",Gn="undefined"!=typeof window&&window.Blob&&new Blob([atob(Wn)],{type:"text/javascript;charset=utf-8"});function vn(){var e=Gn&&(window.URL||window.webkitURL).createObjectURL(Gn);try{return e?new Worker(e,{}):new Worker("data:application/javascript;base64,"+Wn,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}var xn=function(e){v(i,e);var t=w(i);function i(e){var n;return X(this,i),(n=t.call(this)).openlog=e.openLog,n.codecType=e.codecType,n.supportHevc=e.supportHevc,n.worker=new vn,n.worker.onmessage=function(e){n.emit(e.data.method,e.data)},n.worker.postMessage({method:"init",id:e.id||0,args:{openlog:n.openlog,supportHevc:n.supportHevc,codecType:n.codecType}}),n}return W(i,[{key:"transmux",value:function(e,t,i,n,s,a,r,l,o){var d=t.buffer;this.worker&&this.worker.postMessage({method:"transmux",id:e,buffer:d,args:{start:i,videoIdx:n,audioIdx:s,moov:a,useEME:r,kidValue:l,context:o}},[d])}},{key:"reset",value:function(){this.worker&&this.worker.postMessage({method:"reset"})}},{key:"destroy",value:function(){this.worker&&this.worker.terminate()}}]),i}(j),Sn="error",gn="metaReady",Vn="moov_request_Progress",Yn="update_load_fragmentIdx",kn=function(e){v(u,e);var t,i,n,s,a,r,l,o,d,c=w(u);function u(e,t){var i;if(X(this,u),G(R(i=c.call(this)),"onprogressDataArrive",function(){var e=f(y().mark((function e(t,n,s){var a;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t&&t.byteLength>0&&((a=i.timeRange[s.index].range)&&s.range[1]>=a[1]&&!n&&(n=!0),i.log("[mp4.loadFragment onprogressDataArrive ] receive data, >>> index,",s.index,",range,",JSON.stringify(s.range),", dataLen,",t.byteLength),i._mux(t,s.range[0],s.index,n)),n&&(i.timeRange[s.index].downloaded=!0,i.bufferLoadedPos=-1,i.log("[FragLoadDowned],fragmentIdx,",s.index,",rangeEnd,",s.range[1]));case 2:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}()),i.url=e,i.options=u.getDefaultConfig(),Object.keys(t).map((function(e){void 0!==t[e]&&null!==t[e]&&(i.options[e]=t[e])})),i.timeRange=[],i.CHUNK_SIZE=i.options.chunkSize,i.bufferLoaded=new Uint8Array(0),i.bufferLoadedPos=0,i.meta=null,i.videoTrak=null,i.audioTrak=null,i.canDownload=!0,i._loadSuccessCallBack=null,i._isPending=!1,i._metaLoading=!1,i.MP4Loader=new Zn(p(p({segmentDuration:i.options.segmentDuration,url:e,vid:t.vid,retry:i.options.retryCount,retryDelay:i.options.retryDelay,timeout:i.options.timeout},t.reqOptions),{},{preferMMS:i.options.preferMMS,openLog:Xn()})),i.fMP4Demuxer=null,i.MP4Demuxer=null,i.FMP4Remuxer=null,i._needInitSegment=!0,i._switchBitRate=!1,i.enableWorker=i.options.enableWorker,i.enableWorker&&"undefined"!=typeof Worker)try{i.workerSequence=0,i.transmuxerWorkerControl=new xn({id:i.workerSequence,codecType:t.codecType,supportHevc:i.options.supportHevc,openLog:Xn()}),i.transmuxerWorkerControl.on("transmux",(function(e){var t=e.args;i.log("[transmuxerworker end] ,range, ",JSON.stringify(t.range),",dataLen,",t.buffer.byteLength,t.context),i._loadSuccessCallBack&&i._loadSuccessCallBack(t)}))}catch(n){i.log("Error in worker:",n),i.enableWorker=!1,i.transmuxerWorkerControl=null}return i.enableWorker||(i.MP4Demuxer=null,i.FMP4Remuxer=null),i.seekTime=-1,i.changeBitRateTime=-1,i}return W(u,[{key:"changeBitRate",value:(d=f(y().mark((function e(t){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.url=t.url,e.next=3,this.MP4Loader.changeUrl(this.url,this.options.vid+Date.now(),this.CHUNK_SIZE);case 3:this._switchBitRate=!0,this.log("[switchBitrate] changeUrl, bitRate,",this.url);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return d.apply(this,arguments)})},{key:"log",value:function(e){for(var t=this.options,i=t&&t.vid?"[MP4] ".concat(t.vid," ").concat(e):"[MP4] ".concat(e),n=arguments.length,s=new Array(n>1?n-1:0),a=1;a<n;a++)s[a-1]=arguments[a];Ln.apply(void 0,[i].concat(s))}},{key:"errorHandler",value:(o=f(y().mark((function e(t,i){var n,s,a,r;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=t.response,s=t.message,a=this.options?this.options.vid:"",r=null,this._isPending=!0,n?(r=new an("network",n.status,{httpText:n.httpText,message:s,url:n.url}),this.emit(Sn,r)):(console.log("[MP4] [".concat(a,"] errorHandler,"),t),r=t,this.emit(Sn,r));case 6:case"end":return e.stop()}}),e,this)}))),function(e,t){return o.apply(this,arguments)})},{key:"init",value:(l=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.url){e.next=3;break}return e.next=3,this.MP4Loader.changeUrl(this.url,this.options.vid+Date.now(),this.CHUNK_SIZE);case 3:return e.next=5,this.getMetaInfo();case 5:case"end":return e.stop()}}),e,this)}))),function(){return l.apply(this,arguments)})},{key:"getTimeRange",value:function(){for(var e=[],t=null,i=0;this.videoTrak&&i<this.videoTrak.length;i++)t={startTime:this.videoTrak[i].startTime,endTime:this.videoTrak[i].endTime,downloaded:!1,isLoading:!1},e.push(t);if(this.audioTrak&&this.audioTrak.length>e.length)for(var n=e.length;n<this.audioTrak.length;n++)t={startTime:Math.max(this.audioTrak[n].startTime,t?t.endTime:0),endTime:Math.max(this.audioTrak[n].endTime,t?t.endTime:0),downloaded:!1,isLoading:!1},e.push(t);return e}},{key:"getMetaInfo",value:(r=f(y().mark((function e(){var t,i,n,s=this,a=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=!(a.length>0&&void 0!==a[0])||a[0],e.prev=1,this._metaLoading=!0,this.log("getMetaInfo start"),this.bufferLoaded=new Uint8Array(0),i=0,n=function(){var e=f(y().mark((function e(n,a,r){var l;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s.log("getMetaInfo onProgressHandle, dataLen,",n?n.byteLength:-1,", state,",a,",range,",JSON.stringify(r.range)),n&&r.range[0]===i&&(s.bufferLoaded=E(Uint8Array,s.bufferLoaded,new Uint8Array(n)),i+=n.byteLength),r.meta&&!s.meta&&(l=r.meta,s.videoTrak=l.videoSegments,s.audioTrak=l.audioSegments,s.timeRange=s.getTimeRange(),s.meta=p(p({},l.meta),{},{ext:{videoTrak:s.videoTrak,audioTrak:s.audioTrak}}),l.bufferLoaded=s.bufferLoaded,s.log("meta reach"),t&&s.emit(gn,s.meta)),s.meta&&a&&(s.log("[getMetaInfo req end]"),s._metaLoading=!1),s.meta&&(n||a)&&(s.log("emit moov_req_progress"),s.emit(Vn));case 5:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}(),e.next=9,this.MP4Loader.loadMetaProcess(this.MP4Loader.cache,[0,this.CHUNK_SIZE],n);case 9:e.next=15;break;case 11:e.prev=11,e.t0=e.catch(1),console.error("[MP4] trigger errorHandler getMetaInfo",null===e.t0||void 0===e.t0?void 0:e.t0.message),this.loadError(e.t0,"getMetaInfo");case 15:case"end":return e.stop()}}),e,this,[[1,11]])}))),function(){return r.apply(this,arguments)})},{key:"getFragmentIdx",value:function(e){var t,i;if(this.videoTrak.length){if(t=this.videoTrak.find((function(t){return t.startTime<=e&&t.endTime>e})),i=this.audioTrak.find((function(t){return t.startTime<=e&&t.endTime>e})),t&&i)return Math.min(t.index,i.index);if(t||i)return t?t.index:i.index;var n=Number.MAX_VALUE;return this.videoTrak&&this.videoTrak.length>0&&(n=this.videoTrak.length-1),this.audioTrak&&this.audioTrak.length>0&&(n=Math.min(this.audioTrak.length-1,n)),n}return(i=this.audioTrak.find((function(t){return t.startTime<=e&&t.endTime>e})))?i.index:0}},{key:"_checkHasMeta",value:(a=f(y().mark((function e(){var t;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.log(" loadMeta start"),this._metaLoading=!0,e.next=4,this.MP4Loader.loadMeta(this.MP4Loader.cache,Math.round(this.CHUNK_SIZE/2));case 4:return t=e.sent,this._metaLoading=!1,this.videoTrak=t.videoSegments,this.audioTrak=t.audioSegments,this.meta=p(p({},t.meta),{},{ext:{videoTrak:this.videoTrak,audioTrak:this.audioTrak}}),this.timeRange=this.getTimeRange(),this.bufferLoaded=new Uint8Array(0),t.bufferLoaded=this.bufferLoaded,e.abrupt("return",!0);case 13:case"end":return e.stop()}}),e,this)}))),function(){return a.apply(this,arguments)})},{key:"resetFragmentLoadState",value:function(e){for(var t=0;t<this.timeRange.length;t++)t<e?(this.timeRange[t].downloaded=!0,this.timeRange[t].isLoading=!0):(this.timeRange[t].downloaded=!1,this.timeRange[t].isLoading=!1)}},{key:"getFragRange",value:function(e){var t,i,n,s,a=null;this.videoTrak&&(a=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1]);var r=null;this.audioTrak&&(r=e<this.audioTrak.length?this.audioTrak[e]:this.audioTrak[this.audioTrak.length-1]);var l=0,o=0;this.videoTrak&&e>=this.videoTrak.length-1&&(l=-1),this.audioTrak&&e>=this.audioTrak.length-1&&(o=-1);var d=[Math.min((null===(t=a)||void 0===t?void 0:t.range[0])||1/0,(null===(i=r)||void 0===i?void 0:i.range[0])||1/0),Math.max((null===(n=a)||void 0===n?void 0:n.range[1])+l||0,(null===(s=r)||void 0===s?void 0:s.range[1])+o||0)];return e<this.timeRange.length&&(this.timeRange[e].range=d),d}},{key:"load",value:(s=f(y().mark((function e(t,i){var n,s,a;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._loadSuccessCallBack=i,!this._switchBitRate||this._metaLoading){e.next=12;break}return this.log("[switchBitrate], switch bitRate start load, time,",t>=this.videoTrak.length?this.audioTrak[t].startTime:this.videoTrak[t].startTime,", fragIndex,",t),e.next=5,this._checkHasMeta();case 5:n=e.sent,this.changeBitRateTime>0&&(this.timeRange[t].startTime<=this.changeBitRateTime&&this.changeBitRateTime<this.timeRange[t].endTime?this.log("[switchBitrate], not need update load fragIndex",t,",stTime,",this.changeBitRateTime):(t=this.getFragmentIdx(this.changeBitRateTime),this.log("[switchBitrate], need update load fragIndex",t,",stTime,",this.changeBitRateTime,",newBitrateTimeRange,",this.timeRange[t].startTime,"-",this.timeRange[t].endTime),this.emit(Yn,t)),this.seekTime=this.changeBitRateTime,this.changeBitRateTime=-1),this.resetFragmentLoadState(t),this.log("[switchBitrate], reset timerange state,",t),this._needInitSegment=!0,this.resetTansmuxer(),n&&(this._switchBitRate=!1);case 12:if(!this._switchBitRate||!this._metaLoading){e.next=14;break}return e.abrupt("return");case 14:s=this.getFragRange(t),this.log("loadFragment,",t,",range,",JSON.stringify(s)),this.seekTime>0?(a=this.getSubRange(t,this.seekTime,s),this.loadFragment(t,a),this.seekTime=-1):this.loadFragment(t,s);case 17:case"end":return e.stop()}}),e,this)}))),function(e,t){return s.apply(this,arguments)})},{key:"getSubRange",value:function(e,t,i){var n=i[0],s=i[0],a=1,r=!1;if(this.log(">>>>>getSubRange time,",t,JSON.stringify(i)),this.videoTrak&&this.videoTrak.length>0){var l=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1];if(0===l.frames.length)return this.log(">>>>>getSubRange video, no frames"),i;var o=l.frames.filter(Rn),d=this.meta.videoTimescale,c=o[0].startTime/d;this.log(">>>>>getSubRange video, startTime,",l.startTime,",endTime,",l.endTime);for(var u=0;u<o.length;u++)this.log(">>>>>getSubRange video keyFrameList, startTime,",o[u].startTime/d,",range,",o[u].offset);for(;a<o.length;a++){var m=o[a].startTime/d;if(c<=t&&t<m&&i[0]<o[a-1].offset){n=o[a-1].offset,r=!0,this.log(">>>>>getSubRange video end, startTime,",c,",endTime,",m,",startRange,",n,", keyFrameIndex,",a-1);break}c=m}!r&&c<=t&&t<l.endTime+.8&&(n=o[a-1].offset,this.log(">>>>>getSubRange video last, startTime,",c,",endTime,",l.endTime,",startRange,",n))}if(a=1,this.audioTrak&&this.audioTrak.length>0){var h=e<this.audioTrak.length?this.audioTrak[e]:this.audioTrak[this.audioTrak.length-1];if(0===h.frames.length)return this.log(">>>>>getSubRange video, no frames"),i;var p=h.frames,y=this.meta.audioTimescale;a=Math.floor((t*y-p[0].startTime)/h.frames[0].duration);for(var Z=(a=Math.min(p.length-1,a))>0?p[a-1].startTime/y:p[0].startTime/y;a>=0&&a<p.length;)if(a>0&&Z>t)Z=p[a-=1].startTime/y;else{var b=(p[a].startTime+p[a].duration)/y;if(Z<=t&&t<b&&i[0]<p[a].offset){s=p[a].offset,r=!0,this.log(">>>>>getSubRange audio end, startTime,",Z,",endTime,",b,",startRange,",s,", index,",a);break}Z=b,a++}}var f=[Math.min(s,n),i[1]];return this.log(">>>>>getSubRange finalRange ",JSON.stringify(f),",oldRange,",JSON.stringify(i)),f}},{key:"_mux",value:function(e,t,i,n){var s=this.getSamplesRange(i,"video"),a=this.getSamplesRange(i,"audio"),r=[t,t+e.byteLength];if(this.transmuxerWorkerControl&&!this.meta.isFragmentMP4){var l={range:r,state:n,fragIndex:i};this.log("[transmuxerworker start] ,range, ",JSON.stringify(r),",dataLen,",e.byteLength,l),this.transmuxerWorkerControl.transmux(this.workerSequence,e,t,s,a,this.meta.moov,this.useEME,this.kidValue,l)}else try{var o,d;this.meta.isFragmentMP4?(this.fMP4Demuxer||(this.fMP4Demuxer=new st),o=this.fMP4Demuxer.demuxPart(e,t,this.meta.moov)):(this.MP4Demuxer||(this.MP4Demuxer=new mi(this.videoTrak,this.audioTrak,null,{openLog:Xn()})),o=this.MP4Demuxer.demuxPart(e,t,s,a,this.meta.moov,this.useEME,this.kidValue)),this.FMP4Remuxer||this.checkCodecH265()&&!this.options.supportHevc||(this.FMP4Remuxer=new ct(o.videoTrack,o.audioTrack,{openLog:Xn()})),this.log("[mux], videoTimeRange,",o.videoTrack?[o.videoTrack.startPts,o.videoTrack.endPts]:null,",audioTimeRange,",o.audioTrack?[o.audioTrack.startPts,o.audioTrack.endPts]:null);var c=[Math.min(o.videoTrack.startPts,o.audioTrack.startPts),Math.max(o.videoTrack.endPts,o.audioTrack.endPts)];if(this.FMP4Remuxer){var u=this.FMP4Remuxer.remux(this._needInitSegment,{initMerge:!0,range:r});u.initSegment&&(this._needInitSegment=!1),d={buffer:ln.concatData(u.audioSegment,u.videoSegment),range:r,state:n,context:{range:r,fragIndex:i,timeRange:c},initSeg:u.initSegment}}else d={videoTrack:o.videoTrack,audioTrack:o.audioTrack,buffer:null,range:r,state:n,context:{range:r,fragIndex:i,timeRange:c}};this._loadSuccessCallBack&&this._loadSuccessCallBack(d)}catch(h){console.error("mux err:",h);var m=new rn(sn.remux,nn.muxError,{msg:JSON.stringify(h)});this.errorHandler(m,"mux",{fragIndex:i,range:[t,t+e.byteLength]})}}},{key:"getSamplesRange",value:function(e,t){var i=[];switch(t){case"video":if(this.videoTrak&&e<this.videoTrak.length){var n=this.videoTrak[e].frames;if(!n.length)break;i.push(n[0].index),i.push(n[n.length-1].index)}break;case"audio":if(this.audioTrak&&e<this.audioTrak.length){var s=this.audioTrak[e].frames;if(!s.length)break;i.push(s[0].index),i.push(s[s.length-1].index)}break;default:console.warn("[getSamplesRange] type ",t," is invalid")}return i}},{key:"loadFragment",value:(n=f(y().mark((function e(t,i){var n,s,a,r;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(this._isPending||i.length>0&&0===i[0]&&0===i[1]||this.timeRange[t].isLoading)){e.next=2;break}return e.abrupt("return");case 2:if(this.log("[MP4.loadFragment] ,fragIndex,",t,",range ",i,",len ,",i[1]-i[0],", bufferLoaded_Len,",this.bufferLoaded.byteLength),!(i.length>=2&&i[1]&&i[1]>0&&i[1]<=this.bufferLoaded.byteLength)){e.next=13;break}this.timeRange[t].isLoading=!0,n=Math.max(i[0],this.bufferLoadedPos),s=new Uint8Array(this.bufferLoaded.slice(n,i[1])),this.log("[mp4.loadFragment] has all data: ",n,i[1]),this.timeRange[t].downloaded=!0,this.bufferLoadedPos=-1,this._mux(s,n,t,!0),e.next=34;break;case 13:if(!(i.length>=2&&i[0]&&i[0]<=this.bufferLoaded.byteLength)){e.next=29;break}if(this.timeRange[t].isLoading){e.next=27;break}if(a=Math.max(i[0],this.bufferLoadedPos),!((r=new Uint8Array(this.bufferLoaded.slice(a,i[1]))).byteLength>0)){e.next=22;break}return this.bufferLoadedPos=a+r.byteLength,this.log("[mp4.loadFragment] has part data: ",a,a+r.byteLength),this._mux(r,a,t,i[1]<=this.bufferLoadedPos),e.abrupt("return");case 22:if(this._metaLoading||this.timeRange[t].isLoading){e.next=27;break}return this.log("[mp4.loadFragment] ready to load part data >>> ",this.bufferLoaded.byteLength,i[1]),this.timeRange[t].isLoading=!0,e.next=27,this.startLoad([this.bufferLoaded.byteLength,i[1]],t);case 27:e.next=34;break;case 29:if(this._metaLoading&&!(i[0]>=this.CHUNK_SIZE)||this.timeRange[t].isLoading){e.next=34;break}return this.timeRange[t].isLoading=!0,this.log("[mp4.loadFragment],ready to load all data ,segmentIdx, ",t,",range >>> ",JSON.stringify(i)),e.next=34,this.startLoad(i,t);case 34:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"startLoad",value:(i=f(y().mark((function e(t,i){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.MP4Loader.loadData(t,this.MP4Loader.cache,{index:i,onProgress:this.onprogressDataArrive,onProcessMinLen:this.options.onProcessMinLen});case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("[MP4] trigger errorHandler getMetaInfo",null===e.t0||void 0===e.t0?void 0:e.t0.message),this.loadError(e.t0,"loadFragment",{range:t,fragIndex:i});case 9:case"end":return e.stop()}}),e,this,[[0,5]])}))),function(e,t){return i.apply(this,arguments)})},{key:"loadError",value:function(e,t,i){var n;!e.response&&(e.response={}),e.isTimeout?e.response.status="timeout":null!=e&&null!==(n=e.response)&&void 0!==n&&n.status||(e.response.status="networkError"),this.errorHandler(e,t,i)}},{key:"cancelLoading",value:(t=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.MP4Loader;case 2:if(e.t0=e.sent,!e.t0){e.next=5;break}this.MP4Loader.cancel();case 5:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"update",value:function(e){this.url=e}},{key:"checkCodecH265",value:function(){return this.meta&&(this.meta.videoCodec.indexOf("hvc1")>-1||this.meta.videoCodec.indexOf("hev1")>-1)}},{key:"destroy",value:function(){this.hasDestroyed||(this.resetTansmuxer(),this.transmuxerWorkerControl&&this.transmuxerWorkerControl.destroy(),this._isPending=!1,this._metaLoading=!1,this.bufferLoadedPos=0,this.bufferLoaded=new Uint8Array(0),this.MP4Loader&&(this.MP4Loader.cancel(),this.MP4Loader.destroy()),this.hasDestroyed=!0)}},{key:"resetTansmuxer",value:function(){this.MP4Demuxer&&this.MP4Demuxer.reset(),this.MP4Demuxer=null,this.FMP4Remuxer&&this.FMP4Remuxer.reset(),this.FMP4Remuxer=null,this.transmuxerWorkerControl&&this.transmuxerWorkerControl.reset()}}],[{key:"getDefaultConfig",value:function(){return{segmentDuration:5,onProcessMinLen:1024,chunkSize:8e5,retryCount:3,retryDelay:1e3,timeout:3e3,enableWorker:!1,playerId:"",vid:"",ext:{},preferMMS:!1}}}]),u}(j);function Rn(e){if(e.keyframe)return e}var Tn=function(){function e(t){X(this,e),this.onTick_=t,this.cancelPending_=null}return W(e,[{key:"tickAfter",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.stop();var n=!0,s=null;this.cancelPending_=function(){window.clearTimeout(s),n=!1};var a=function(){n&&(t.onTick_(),i&&i())};return s=window.setTimeout(a,1e3*e),this}},{key:"tickEvery",value:function(e){var t=this;this.tickAfter(e,(function(){t.tickEvery(e)}))}},{key:"stop",value:function(){this.cancelPending_&&(this.cancelPending_(),this.cancelPending_=null)}}]),e}(),wn=function(){function e(){var t,i;X(this,e);var n=new Promise((function(e,n){t=e,i=n}));return n.resolve=function(e){t(e),n.state="fulfilled"},n.reject=function(e){i(e),n.state="rejected",n.isBreak="DESTROYED"===e},n.state="pending",n}return W(e,[{key:"resolve",value:function(e){}},{key:"reject",value:function(e){}}]),e}(),Mn=null,Kn=null,In=null,Cn=null,Hn=function(e){v(a,e);var t,i,n,s=w(a);function a(e){var t;return X(this,a),G(R(t=s.call(this,e)),"_onMp4DataCallBack",(function(){t._isMseInit&&t._onTimeUpdate()})),G(R(t),"_onMp4MetaReady",(function(e){var i=R(t).config,n=t.mp4.checkCodecH265();try{if(n&&!t.config.supportHevc){var s="browser not support HEVC",a=new m.Errors(t.player,{errorType:"runtime",errorTypeCode:sn.runtime,errorCode:nn.h265Error,errorMessage:s,vid:i.vid,mediaError:{code:nn.h265Error,message:s}});t._errorHandler(a)}else t._initMse(e),t._initPromise.resolve()}catch(l){var r=new m.Errors(t.player,{errorType:"runtime",errorTypeCode:sn.runtime,errorCode:nn.mse,errorMessage:null==l?void 0:l.message,vid:i.vid,mediaError:{code:nn.other1,message:null==l?void 0:l.message}});return void t._errorHandler(r)}t._loadData()})),G(R(t),"_onMp4Error",(function(e){var i=t.playerConfig.vid;console.error("[Index] _onMp4Error",i,e),t._errorHandler(e)})),G(R(t),"_loadDataSuccess",(function(e){if(!t.isDestroy&&t.mse){t.log("[loadFragment] _loadDataSuccess ",JSON.stringify(e.context.range),",dataLen,",e.buffer?e.buffer.byteLength:0,e.state);try{e.initSeg&&(t._appendInitSeg(e.initSeg),(!e.buffer||e.buffer.byteLength<1)&&(t.log("no data, must load data"),t._onTimeUpdate()));var i=e.buffer,n=e.state,s=e.context;if(t.mse&&n&&(!i||i.byteLength<=0)&&s.fragIndex===t.mp4.timeRange.length-1){var a=t.player.buffered;a&&a.length>0&&(t.bufferEndTime=a.end(a.length-1)),t._isEnded(),t.log("loaded ended !!!==>>>",JSON.stringify(s.range),", fragIndex,",s.fragIndex,", bufferEndTime,",t.bufferEndTime,",meta_duration,",t.mp4.meta.duration)}if(t.mse&&n&&s.fragIndex===t.mp4.timeRange.length-1&&(!i||i.byteLength<=0)){var r=t.player.buffered;r&&r.length>0&&(t.bufferEndTime=r.end(r.length-1)),t._isEnded(),t.log("load ended !!!==>>>",t.playerConfig.vid,JSON.stringify(s.range),", fragIndex,",s.fragIndex,", bufferEndTime,",t.bufferEndTime,",meta_duration,",t.mp4.meta.duration)}i&&t.mse&&i&&i.byteLength>0&&t._appendBuffer(Mi.VIDEO,i,s,n)}catch(o){t.log("appendBuffer error",o);var l=new m.Errors(t.player,{errorType:"runtime",errorTypeCode:sn.runtime,errorCode:nn.mse,vid:t.player.config.vid,errorMessage:o.message,mediaError:{code:nn.mse,message:o.message}});t._errorHandler(l)}null!=e&&e.state&&t._onTimeUpdate()}})),G(R(t),"_onWaiting",(function(){var e=R(t),i=e.player,n=e.config;clearTimeout(t._waitInBufferTimer),t._waitInBufferTimer=null;var s=i.currentTime,a=i.bufferedPoint;a.end>0&&a.end-i.currentTime>=2&&t._waitAdjustTimeCnt<n.waitJampBufferMaxCnt&&(t._waitInBufferTimer=setTimeout((function(){t._waitAdjustTimeCnt++,i.currentTime=i.currentTime+.5,t.log("[waitInBufferTimeout], waitAdjustTimeCnt,",t._waitAdjustTimeCnt,",curtime,",s,ln.nowTime())}),n.waitingInBufferTimeOut))})),G(R(t),"_onSeeking",f(y().mark((function e(){var i,n,s,a,r,l,o,d,c,u,m;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=R(t),n=i.player,s=i.mp4,a=n.currentTime,t.log("[seekTime], curTime,",a,",buffer,",n.buffered2.bufferedList),s&&s.meta){e.next=5;break}return e.abrupt("return");case 5:if(t.endofstream=!1,s.bufferLoadedPos=-1,s._metaLoading=!1,r=n.bufferedPoint,l=!1,o=0,!(r.end>0)){e.next=25;break}if(l=!0,!(s.meta.duration-r.end<.5)){e.next=17;break}return t._startProgress(),t.log("[seeking in buffered range], buffer end,",r.end,", duration,",s.meta.duration),e.abrupt("return");case 17:if(o=s.getFragmentIdx(r.end),t._curLoadSegmentIdx!==o){e.next=22;break}return t._startProgress(),t.log("[seeking in buffered range], seek fragIndex is current load segmentIdx",o),e.abrupt("return");case 22:s.seekTime=r.end,o<0&&(o=t._curLoadSegmentIdx),t.log("[seeking in buffered range], seekTime ",a,",bufferRange,",r.start,"-",r.end,", fragIndex,",o);case 25:return l||(s.seekTime=a,(o=s.getFragmentIdx(a))<0&&(o=t._curLoadSegmentIdx),t.log("[seekTime out buffer range], curTime,",a,", Idx,",o),d=R(t),(c=d.mse)&&c.isFull()&&(u=n.buffered2.bufferedList,m=u[u.length-1],c.clearOpQueues(Mi.VIDEO),t._checkRemoveSourceBuffer([m.start,m.end],n.currentTime,!0,!0))),e.next=28,s.cancelLoading();case 28:s.resetFragmentLoadState(o),t._curLoadSegmentIdx=o,t._onTimeUpdate(),t._startProgress(),t._isEnded();case 33:case"end":return e.stop()}}),e)})))),G(R(t),"changeDefineCanPlay",(function(e,i,n,s){var a=R(t).player;a.ended?a.currentTime=0:(t.log("[oldChangeDefinition],this._changeDefState,",t._changeDefState),a.currentTime=t._changeDefState?t._changeDefState.currentTime:e,(t._changeDefState?t._changeDefState.paused:i)?a.pause():a.play(),t._changeDefState=null,a.emit(m.Events.AFTER_DEFINITION_CHANGE,{from:n,to:s}))})),G(R(t),"changeDefinition",function(){var e=f(y().mark((function e(i,n){var s,a,r,l,o,d,c;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=R(t),a=s.player,r=s.config,l=s.mp4,n||(n=a.curDefinition),t._MSEError=!1,!r.witchBitRateWay){e.next=6;break}return t.oldChangeDefinition(i,n),e.abrupt("return");case 6:if(a.emit(m.Events.DEFINITION_CHANGE,{from:n,to:i}),o=a.currentTime,(d=l.getFragmentIdx(o))<0&&(d=t._curLoadSegmentIdx),t.log("switchBitrate:point,fragIndex,",d,",startTime,",l.timeRange[d].startTime,",currentTime,",a.currentTime),!l){e.next=16;break}return t.mp4.changeBitRateTime=o,e.next=15,l.cancelLoading();case 15:l._metaLoading&&(l._metaLoading=!1);case 16:return t._removeBuffeEndTime=l.timeRange[d].startTime,t._isChangeDefinition=!0,(c=a.getBufferedRange(a.buffered))[1]>0&&c[1]-a.currentTime>5&&(t.mse.clearOpQueues(Mi.VIDEO),t.mse.remove(Mi.VIDEO,a.currentTime+5,c[1])),t.log("switchBitrate: resetFragmentLoadState,",d),l.resetFragmentLoadState(d),t._curLoadSegmentIdx=d,e.next=25,t.mp4.changeBitRate(i);case 25:t._onTimeUpdate(),a.emit("RESOLUTION_UPDATE",i);case 27:case"end":return e.stop()}}),e)})));return function(t,i){return e.apply(this,arguments)}}()),G(R(t),"_replayHook",(function(){var e;return null===(e=t.player)||void 0===e||e.play(),!1})),G(R(t),"_retryHook",(function(){return t.beforePlayerInit(),!1})),t.mp4=null,t.mse=null,t._waitAdjustTimeCnt=0,t._lastCheckTime=ln.nowTime(),t._removeBuffeEndTime=0,t._pendingPromises=[],t}return W(a,[{key:"afterCreate",value:function(){var e=this;window.__mp4player=this;try{m.BasePlugin.defineGetterOrSetter(this.player,{__url:{get:function(){try{return e.mse?e.mse.url:e.config.url}catch(t){return null}}}})}catch(t){}this._proxyPlayer()}},{key:"attachEvents",value:function(){this.off(m.Events.SEEKING,this._onSeeking),this.on(m.Events.SEEKING,this._onSeeking),this.on(m.Events.WAITING,this._onWaiting),this.off(m.Events.URL_CHANGE,this.switchURL),this.on(m.Events.URL_CHANGE,this.switchURL)}},{key:"detachEvents",value:function(){this.off(m.Events.SEEKING,this._onSeeking),this.off(m.Events.WAITING,this._onWaiting),this.off(m.Events.URL_CHANGE,this.switchURL)}},{key:"_proxyPlayer",value:function(){var e=this;"function"==typeof this.player.playNext&&(Mn=this.player.playNext),this.player.playNext=function(){e.playNext.apply(e,arguments)},Kn=this.player._startInit,Cn=this.player.switchURL,In=this.player.changeDefinition,this.player._startInit=this._playerStartInit.bind(this),this.player.switchURL=this.switchURL.bind(this),this.player.changeDefinition=this.changeDefinition.bind(this),this.player.removeHooks("replay",this._replayHook),this.player.removeHooks("retry",this._retryHook)}},{key:"_playerStartInit",value:function(e){var t=this,i=this.config,n=this.playerConfig;void 0===i.supportHevc&&null!==m.Sniffer&&void 0!==m.Sniffer&&m.Sniffer.isHevcSupported&&m.Sniffer.isHevcSupported()&&(i.supportHevc=!0);var s=this.initMp4();this._initPromise=s,this._addPendingPromise(this._initPromise),this.mse&&"String"===m.Util.typeOf(e)&&/^blob/.test(e)&&e!==this.mse.url&&(e=n.url),s.then((function(){t.mse&&(e=t.mse.url),t.attachEvents(),t._startProgress()})).catch((function(i){var n=!!t._initPromise&&t._initPromise.isBreak;if(!t.isDestroy&&!n){var s=i;s.errorCode||((s=new m.Errors(t.player,{errorType:sn.RUNTIME,errorCode:(null==i?void 0:i.errorCode)||nn.other,vid:t.playerConfig.vid,errorMessage:(null==i?void 0:i.errorMessage)||(null==i?void 0:i.message),mediaError:{code:(null==i?void 0:i.httpCode)||nn.other,message:(null==i?void 0:i.errorMessage)||(null==i?void 0:i.message),errorType:null==i?void 0:i.errorType}})).url=e),t.useVideoLoad=!0,t.player.vtype="MP4_1",t.player.emit("playCatch",t.player.vtype,s)}})).finally((function(){if(t._initPromise){var i=t._initPromise.isBreak;i||(t._initPromise&&t._removePendingPromise(t._initPromise),t._initPromise=null,!t.isDestroy&&!i&&Kn.call(t.player,e))}}))}},{key:"initMp4",value:function(){var e=this,t=this.player;t.config.vid||(t.config.vid=Date.now());var i=new wn;return this.mp4&&(this.mp4.off(gn,this._onMp4MetaReady),this.mp4.off(Sn,this._onMp4Error),this.mp4.off(Vn,this._onMp4DataCallBack),this.mp4.destroy(),this.mp4=null),this.mp4=new kn(t.config.url,p(p({},this.config),{},{vid:t.config.vid})),this.mp4.on(gn,this._onMp4MetaReady),this.mp4.on(Sn,this._onMp4Error),this.mp4.on(Vn,this._onMp4DataCallBack),this.mp4.on(Yn,(function(t){e._curLoadSegmentIdx=t,e.log("[update curLoadSegmentIdx]",t)})),this.mp4.init(),i}},{key:"setConfig",value:function(e){this.config=Object.assign(this.config,e)}},{key:"playNext",value:function(e){var t=this.player;this._defInited=!1,t.resetState(),t._currentTime=0,t._duration=0,t.isPlaying=!1,this._MSEError=!1,t.pause(),this._reset(),t.setConfig(e),this.log("[Index] playNext",e),t.play(),this.emit("playnext")}},{key:"checkDegrade",value:function(e){return!this.config.closeDowngrade||"networkError"===e.httpCode}},{key:"_errorHandler",value:function(e){var t,i=this.player,n=this.config;if(i&&!this.useVideoLoad){!e.url&&null!==(t=this.mp4)&&void 0!==t&&t.url&&(e.url=this.mp4.url);var s=i.paused;if(console.error("final error !!!!, ",n.vid,e),this.player.vtype="MP4_2",this.player.emit("playCatch",this.player.vtype,e),this.checkDegrade(e))this._initPromise?this._removeAndRejectInitPromise(e):this._startDegradedPlayback(e,s);else{this.player.pause(),this._reset();var a=i.currentTime;this.destroyMSE(),i.currentTime=a,this.emit("error",e)}}}},{key:"_startDegradedPlayback",value:function(e,t){var i=this;console.log(">>>_startDegradedPlayback");var n=this.player,s=this.playerConfig;this.useVideoLoad=!0,this.destroyMSE(),this._currentTime=n.currentTime,this.__onmetadataHandle=function(){i._currentTime&&(n.currentTime=i._currentTime),t?i.player.pause():i.player.play(),n.media.removeEventListener("loadedmetadata",i.__onmetadataHandle),i.__onmetadataHandle=null},n.media.addEventListener("loadedmetadata",this.__onmetadataHandle);var a=s.url;n.media.src=a}},{key:"_addPendingPromise",value:function(e){this._pendingPromises.push(e)}},{key:"_removePendingPromise",value:function(e){var t=this._pendingPromises.indexOf(e);t>-1&&this._pendingPromises.splice(t,1)}},{key:"_cancelPendingPromises",value:function(){this._pendingPromises.length>0&&this._pendingPromises.forEach((function(e){e.reject("DESTROYED")})),this._pendingPromises=[]}},{key:"_removeAndRejectInitPromise",value:function(e){this._initPromise&&(this._removePendingPromise(this._initPromise),this._initPromise.reject(e))}},{key:"_initMse",value:(n=f(y().mark((function e(t){var i,n,s,a,r=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.mse){e.next=4;break}return e.next=3,this.mse.unbindMedia();case 3:this.mse=null;case 4:i=!!t.videoCodec,n=!!t.audioCodec,s=i&&n?'video/mp4; codecs="'.concat(t.videoCodec,', mp4a.40.5"'):i?'video/mp4; codecs="'.concat(t.videoCodec,'"'):'video/mp4; codecs="mp4a.40.5"',a=G({},Mi.VIDEO,{mimeType:"video/mp4",codec:s}),this.mse=new Mi(null,{preferMMS:this.config.preferMMS}),this.mse.bindMedia(this.player.video).then((function(){var e=Object.keys(a);try{for(var t=0;t<e.length;t++){var i=e[t];r.mse.createSource(i,a[i].codec)}}catch(n){console.error("MSE error: ",n),r._errorHandler(n)}r._isMseInit=!0,r._onTimeUpdate()}));case 11:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"destroyMSE",value:(i=f(y().mark((function e(){var t;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null===(t=this.mse)||void 0===t?void 0:t.unbindMedia();case 2:this.mse=null;case 3:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"_onTimeUpdate",value:function(){var e=this,t=this.mse,i=this.mp4,n=this.player,s=this.config;if(i){var a=i.timeRange,r=n.getBufferedRange(n.buffered2);if(t&&i&&i.canDownload){ln.nowTime()-this._lastCheckTime>1e3&&(this._lastCheckTime=ln.nowTime(),this._loadStuckCheck(),this._checkRemoveSourceBuffer(r,n.currentTime));var l=n.paused?n.currentTime+s.minBufferLength:n.currentTime+s.maxBufferLength;r[1]-l<0&&a.every((function(t,i){return!!t.downloaded||(!e._isChangeDefinition&&t.endTime-t.startTime>1&&e._isInBuffer(t)?(t.downloaded=!0,t.isLoading=!0,e.log("onTimeUpdate, ".concat(i," download segment, has buffer"),t.startTime,t.endTime),!0):void(t.startTime-n.currentTime<s.maxBufferLength&&(e._curLoadSegmentIdx=i,e.log("[onTimeUpdate],load index==>>>, ",i,",IdxTimeRange, ",t.startTime,"-",t.endTime,",buffEnd, ",r[1],",playCurTime,",n.currentTime,", bufferLen,",r[1]-n.currentTime,",bufferRangeList,",e.player.buffered2?e.player.buffered2.bufferedList:null),e._loadData())))})),this._isEnded()}this.checkRemoveOldBitrateBuffer()}}},{key:"checkRemoveOldBitrateBuffer",value:function(){var e=this.mse,t=this.player;e&&this._removeBuffeEndTime>0&&t.currentTime>this._removeBuffeEndTime+1&&(this.log("remove old bitrate buffer",this._removeBuffeEndTime),e.remove(Mi.VIDEO,0,this._removeBuffeEndTime-1),this._removeBuffeEndTime=0)}},{key:"_isInBuffer",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=!1,n=this.player.video.buffered,s=0;s<n.length;s++){var a=n.start(s)-t,r=n.end(s)+t;if(a<=e.startTime&&e.endTime<=r){i=!0;break}}return i}},{key:"_loadData",value:(t=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.mp4&&this._isMseInit){e.next=3;break}return this.log("loadData, player.mp4 null",this._isMseInit),e.abrupt("return");case 3:return e.prev=3,e.next=6,this.mp4.load(this._curLoadSegmentIdx,this._loadDataSuccess);case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error("[Index] _loadData error",this.playerConfig.vid,e.t0);case 11:case"end":return e.stop()}}),e,this,[[3,8]])}))),function(){return t.apply(this,arguments)})},{key:"_appendInitSeg",value:function(e){var t=this;this.mp4&&this.mse&&this.mse.append(Mi.VIDEO,e,{vid:this.playerConfig.vid,range:null,dataLen:e.byteLength,isinit:!0}).then((function(e){t.log("appendInitSeg end ==>>>",null==e?void 0:e.context," costTime,",null==e?void 0:e.costtime)}))}},{key:"_appendBuffer",value:function(e,t){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=arguments.length>3?arguments[3]:void 0,a=this.mse,r=this.config;a.append(e,t,{vid:r.vid,fragIndex:n.fragIndex,range:n.range,dataLen:t.byteLength,state:s}).then((function(e){if(i.log("player appendBuffer end ==>>>",e.context?e.context:null,", costTime,",e.costtime,", opt,",e.name,",bufferRange,",i.player.getBufferedRange()),i.mse&&n.state&&n.fragIndex===i.mp4.timeRange.length-1){var t=i.player.buffered;t&&t.length>0&&(i.bufferEndTime=t.end(t.length-1)),i._isEnded(),i.log("loaded ended !!!==>>>",n.range,", fragIndex,",n.fragIndex,", bufferEndTime,",i.bufferEndTime,",meta_duration,",i.mp4.meta.duration)}})).catch((function(e){if(console.log("[MSE error]",e),e&&null!=a&&a.isFull()){var t=i.player.getBufferedRange(i.player.buffered2);i._checkRemoveSourceBuffer(t,i.player.currentTime,!0)}}))}},{key:"_checkRemoveSourceBuffer",value:function(e,t,i){var n=this,s=this.mse,a=this.mp4,r=this.player;if(s&&a&&r&&(i&&(clearTimeout(this._removeBufferTimer),this._removeBufferTimer=null),e||(e=r.getBufferedRange(r.buffered2)),t||(t=r.currentTime),!(!i&&ln.nowTime()-this._checkRemoveBufferLastTime<=this.config.removeBufferLen||this.endofstream)&&(this._checkRemoveBufferLastTime=ln.nowTime(),e&&e[0]>=0&&(t-e[0]>this.config.removeBufferLen||s.isFull())))){var l=e[1],o=a.getFragmentIdx(l);if(o>=0&&a.timeRange[o].startTime<t){var d=Math.floor(Math.min(a.timeRange[o].startTime,e[1]));e[0]<d?(this.log("[checkremoveSourceBuffer], remove range==>>>",e[0],d),s.remove(Mi.VIDEO,e[0],d)):s.isFull()&&!this._removeBufferTimer&&(this._removeBufferTimer=setTimeout((function(){n._checkRemoveSourceBuffer(null,null,!0)}),1e4))}}}},{key:"_isEnded",value:function(){var e=this.player,t=this.mp4,i=e.bufferedPoint,n=i?i.end:0;return!this.endofstream&&this.mse&&t.meta.duration-e.currentTime<.5&&(this.log("[check player isEnded],deal mse.endOfStream, currentTime,",e.currentTime,", bufferend,",n,", duration,",t.meta.duration),this.endofstream=!0,this.mse.endOfStream()),!!(t&&t.meta&&t.meta.duration-e.currentTime<.5)&&(this._stopProgress(),this.log("[check player isEnded],stopProgress and endOfStream,currentTime, ",e.currentTime,", bufferend,",n,", duration,",t.meta.duration),this.mse&&this.mse.endOfStream(),!0)}},{key:"switchURL",value:function(e){this.changeDefinition(e)}},{key:"oldChangeDefinition",value:function(e,t){var i=this,n=this.config,s=this.player;this.log("[oldChangeDefinition],currentTime,",s.currentTime,",from,",t,",to,",e);var a=s.currentTime,r=s.paused;this._changeDefState||(this._changeDefState={currentTime:a,paused:r},this.log("[oldChangeDefinition],currentTime,",s.currentTime,",pause,",r)),s.config.url=e.url,n.focusUserDefinition=!0,s.currentTime=0,s.pause(),this._reset(),this._isMseInit=!1,this._changeDefineCanPlay&&s.off("canplay",this._changeDefineCanPlay),this._changeDefineCanPlay=function(){i.changeDefineCanPlay(a,r,t,e),i._changeDefineCanPlay=null},s.once("canplay",this._changeDefineCanPlay),this.player.video.load(),this.initMp4()}},{key:"_loadStuckCheck",value:function(){var e=this,t=this.config,i=this.player;t.disableBufferBreakCheck||(i.currentTime-(this._lastCurrentTime||0)>.1||i.paused?1!==this._bufferBreakFlag&&2!==this._bufferBreakFlag||(this.log("视频没有卡死,重置卡死标记"),this._bufferBreakFlag=0,clearTimeout(this._bufferBreakTimer),this._bufferBreakFlag=null):this._bufferBreakFlag||(this._bufferBreakFlag=1,this.log("卡死计时开始! 持续".concat(t.waitingTimeOut,"毫秒则确认卡死")),this._bufferBreakTimer=setTimeout((function(){e.isDestroy||(1===e._bufferBreakFlag&&(e._bufferBreakFlag=2,e.log("确认卡死!!!"),e._errorHandler(new m.Errors(e.player,{errorType:"runtime",errorTypeCode:sn.runtime,errorCode:nn.waitTimeout,errorMessage:"wait_timeout",vid:t.vid}))),e._bufferBreakTimer=null)}),t.waitingTimeOut)),this._lastCurrentTime=i.currentTime)}},{key:"isDestroy",get:function(){return!this.player}},{key:"_stopProgress",value:function(){this._hasStartProgress=!1,this._requestTimer&&(this._requestTimer.stop(),this._requestTimer=null),this._bufferBreakTimer&&(clearTimeout(this._bufferBreakTimer),this._bufferBreakTimer=null,this._bufferBreakFlag=void 0)}},{key:"_startProgress",value:function(){var e=this;this._hasStartProgress||(this._stopProgress(),this._requestTimer=new Tn((function(){e._requestTimer&&e._onTimeUpdate()})),this._requestTimer.tickEvery(this.config.tickInSeconds),this._hasStartProgress=!0)}},{key:"log",value:function(e){for(var t=this.playerConfig,i=t&&t.vid?"[Index]".concat(t.vid," ").concat(e):"[Index] ".concat(e),n=arguments.length,s=new Array(n>1?n-1:0),a=1;a<n;a++)s[a-1]=arguments[a];Ln.apply(void 0,[i].concat(s))}},{key:"_reset",value:function(){this._isMseInit=!1,this.endofstream=!1,this._curLoadSegmentIdx=0,this._removeBuffeEndTime=0,this._isChangeDefinition=!1,this._stopProgress(),this.mp4&&(this.mp4.off(gn,this._onMp4MetaReady),this.mp4.off(Sn,this._onMp4Error),this.mp4.off(Vn,this._onMp4DataCallBack),this.mp4.destroy(),this.mp4=null),this.mse&&(this.mse.unbindMedia(),this.mse=null),this._unloadVideo()}},{key:"_unloadVideo",value:function(){var e=this.player;try{this.log("unloadVideo src ".concat(e.video.src)),e.video&&e.video.src&&(e.video.removeAttribute("src"),e.video.load())}catch(t){this.log("unloadVideo error",t)}}},{key:"destroy",value:function(){var e=this.player;e.removeHooks("replay",this._replayHook),e.removeHooks("retry",this._retryHook),this.detachEvents(),this._reset(),this.player.playNext=Mn,this.player._startInit=Kn,this.player.changeDefinition=In,this.player.switchURL=Cn,this._bufferBreakTimer&&clearInterval(this._bufferBreakTimer),this._removeBufferTimer&&(clearTimeout(this._removeBufferTimer),this._removeBufferTimer=null),this._waitInBufferTimer&&(clearTimeout(this._waitInBufferTimer),this._waitInBufferTimer=null)}}],[{key:"pluginName",get:function(){return"mp4Plugin"}},{key:"defaultConfig",get:function(){return{maxBufferLength:40,minBufferLength:5,disableBufferBreakCheck:!1,waitingTimeOut:15e3,waitingInBufferTimeOut:5e3,waitJampBufferMaxCnt:3,tickInSeconds:.1,reqOptions:null,closeDowngrade:!1,preferMMS:!1}}},{key:"version",get:function(){return"3.0.24"}}]),a}(m.BasePlugin);return Hn}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("core-js/modules/es.json.stringify.js"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.regexp.test.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.promise.js"),require("core-js/modules/es.promise.finally.js"),require("core-js/modules/es.object.assign.js"),require("core-js/modules/es.array.splice.js"),require("core-js/modules/web.dom-collections.for-each.js"),require("core-js/modules/es.object.keys.js"),require("core-js/modules/es.function.name.js"),require("core-js/modules/es.array.concat.js"),require("xgplayer"),require("core-js/modules/es.array.map.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/es.typed-array.uint8-array.js"),require("core-js/modules/esnext.typed-array.at.js"),require("core-js/modules/es.typed-array.copy-within.js"),require("core-js/modules/es.typed-array.every.js"),require("core-js/modules/es.typed-array.fill.js"),require("core-js/modules/es.typed-array.filter.js"),require("core-js/modules/es.typed-array.find.js"),require("core-js/modules/es.typed-array.find-index.js"),require("core-js/modules/esnext.typed-array.find-last.js"),require("core-js/modules/esnext.typed-array.find-last-index.js"),require("core-js/modules/es.typed-array.for-each.js"),require("core-js/modules/es.typed-array.includes.js"),require("core-js/modules/es.typed-array.index-of.js"),require("core-js/modules/es.typed-array.iterator.js"),require("core-js/modules/es.typed-array.join.js"),require("core-js/modules/es.typed-array.last-index-of.js"),require("core-js/modules/es.typed-array.map.js"),require("core-js/modules/es.typed-array.reduce.js"),require("core-js/modules/es.typed-array.reduce-right.js"),require("core-js/modules/es.typed-array.reverse.js"),require("core-js/modules/es.typed-array.set.js"),require("core-js/modules/es.typed-array.slice.js"),require("core-js/modules/es.typed-array.some.js"),require("core-js/modules/es.typed-array.sort.js"),require("core-js/modules/es.typed-array.subarray.js"),require("core-js/modules/es.typed-array.to-locale-string.js"),require("core-js/modules/es.typed-array.to-string.js"),require("core-js/modules/es.array.find.js"),require("core-js/modules/es.number.constructor.js"),require("core-js/modules/es.array.filter.js"),require("core-js/modules/es.array.slice.js"),require("core-js/modules/es.symbol.js"),require("core-js/modules/es.symbol.iterator.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/web.dom-collections.iterator.js"),require("core-js/modules/es.symbol.description.js"),require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.string.includes.js"),require("core-js/modules/es.number.is-finite.js"),require("core-js/modules/es.regexp.to-string.js"),require("core-js/modules/es.math.hypot.js"),require("core-js/modules/es.array.join.js"),require("core-js/modules/es.string.from-code-point.js"),require("core-js/modules/es.string.match.js"),require("core-js/modules/es.array.sort.js"),require("core-js/modules/es.regexp.flags.js"),require("core-js/modules/es.string.pad-start.js"),require("core-js/modules/es.array.from.js"),require("core-js/modules/es.array-buffer.constructor.js"),require("core-js/modules/es.global-this.js"),require("core-js/modules/es.typed-array.uint32-array.js"),require("core-js/modules/es.typed-array.int8-array.js"),require("core-js/modules/es.typed-array.uint8-clamped-array.js"),require("core-js/modules/es.typed-array.int16-array.js"),require("core-js/modules/es.typed-array.uint16-array.js"),require("core-js/modules/es.typed-array.int32-array.js"),require("core-js/modules/es.typed-array.float32-array.js"),require("core-js/modules/es.typed-array.float64-array.js"),require("core-js/modules/web.url.js"),require("core-js/modules/web.url-search-params.js"),require("core-js/modules/es.string.replace.js"),require("core-js/modules/es.number.is-nan.js"),require("core-js/modules/es.object.get-prototype-of.js"),require("core-js/modules/es.array.find-index.js"),require("core-js/modules/es.string.trim.js"),require("core-js/modules/es.set.js")):"function"==typeof define&&define.amd?define(["core-js/modules/es.json.stringify.js","core-js/modules/es.regexp.exec.js","core-js/modules/es.regexp.test.js","core-js/modules/es.object.to-string.js","core-js/modules/es.promise.js","core-js/modules/es.promise.finally.js","core-js/modules/es.object.assign.js","core-js/modules/es.array.splice.js","core-js/modules/web.dom-collections.for-each.js","core-js/modules/es.object.keys.js","core-js/modules/es.function.name.js","core-js/modules/es.array.concat.js","xgplayer","core-js/modules/es.array.map.js","core-js/modules/es.array.iterator.js","core-js/modules/es.typed-array.uint8-array.js","core-js/modules/esnext.typed-array.at.js","core-js/modules/es.typed-array.copy-within.js","core-js/modules/es.typed-array.every.js","core-js/modules/es.typed-array.fill.js","core-js/modules/es.typed-array.filter.js","core-js/modules/es.typed-array.find.js","core-js/modules/es.typed-array.find-index.js","core-js/modules/esnext.typed-array.find-last.js","core-js/modules/esnext.typed-array.find-last-index.js","core-js/modules/es.typed-array.for-each.js","core-js/modules/es.typed-array.includes.js","core-js/modules/es.typed-array.index-of.js","core-js/modules/es.typed-array.iterator.js","core-js/modules/es.typed-array.join.js","core-js/modules/es.typed-array.last-index-of.js","core-js/modules/es.typed-array.map.js","core-js/modules/es.typed-array.reduce.js","core-js/modules/es.typed-array.reduce-right.js","core-js/modules/es.typed-array.reverse.js","core-js/modules/es.typed-array.set.js","core-js/modules/es.typed-array.slice.js","core-js/modules/es.typed-array.some.js","core-js/modules/es.typed-array.sort.js","core-js/modules/es.typed-array.subarray.js","core-js/modules/es.typed-array.to-locale-string.js","core-js/modules/es.typed-array.to-string.js","core-js/modules/es.array.find.js","core-js/modules/es.number.constructor.js","core-js/modules/es.array.filter.js","core-js/modules/es.array.slice.js","core-js/modules/es.symbol.js","core-js/modules/es.symbol.iterator.js","core-js/modules/es.string.iterator.js","core-js/modules/web.dom-collections.iterator.js","core-js/modules/es.symbol.description.js","core-js/modules/es.array.includes.js","core-js/modules/es.string.includes.js","core-js/modules/es.number.is-finite.js","core-js/modules/es.regexp.to-string.js","core-js/modules/es.math.hypot.js","core-js/modules/es.array.join.js","core-js/modules/es.string.from-code-point.js","core-js/modules/es.string.match.js","core-js/modules/es.array.sort.js","core-js/modules/es.regexp.flags.js","core-js/modules/es.string.pad-start.js","core-js/modules/es.array.from.js","core-js/modules/es.array-buffer.constructor.js","core-js/modules/es.global-this.js","core-js/modules/es.typed-array.uint32-array.js","core-js/modules/es.typed-array.int8-array.js","core-js/modules/es.typed-array.uint8-clamped-array.js","core-js/modules/es.typed-array.int16-array.js","core-js/modules/es.typed-array.uint16-array.js","core-js/modules/es.typed-array.int32-array.js","core-js/modules/es.typed-array.float32-array.js","core-js/modules/es.typed-array.float64-array.js","core-js/modules/web.url.js","core-js/modules/web.url-search-params.js","core-js/modules/es.string.replace.js","core-js/modules/es.number.is-nan.js","core-js/modules/es.object.get-prototype-of.js","core-js/modules/es.array.find-index.js","core-js/modules/es.string.trim.js","core-js/modules/es.set.js"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Mp4Plugin=t(null,null,null,null,null,null,null,null,null,null,null,null,e.Player)}(this,(function(e,t,i,n,s,a,r,l,o,d,c,u,m){"use strict";function h(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function p(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?h(Object(i),!0).forEach((function(t){L(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):h(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function y(){y=function(){return e};var e={},t=Object.prototype,i=t.hasOwnProperty,n=Object.defineProperty||function(e,t,i){e[t]=i.value},s="function"==typeof Symbol?Symbol:{},a=s.iterator||"@@iterator",r=s.asyncIterator||"@@asyncIterator",l=s.toStringTag||"@@toStringTag";function o(e,t,i){return Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{o({},"")}catch(k){o=function(e,t,i){return e[t]=i}}function d(e,t,i,s){var a=t&&t.prototype instanceof m?t:m,r=Object.create(a.prototype),l=new g(s||[]);return n(r,"_invoke",{value:L(e,i,l)}),r}function c(e,t,i){try{return{type:"normal",arg:e.call(t,i)}}catch(k){return{type:"throw",arg:k}}}e.wrap=d;var u={};function m(){}function h(){}function p(){}var b={};o(b,a,(function(){return this}));var Z=Object.getPrototypeOf,f=Z&&Z(Z(V([])));f&&f!==t&&i.call(f,a)&&(b=f);var X=p.prototype=m.prototype=Object.create(b);function W(e){["next","throw","return"].forEach((function(t){o(e,t,(function(e){return this._invoke(t,e)}))}))}function v(e,t){function s(n,a,r,l){var o=c(e[n],e,a);if("throw"!==o.type){var d=o.arg,u=d.value;return u&&"object"==typeof u&&i.call(u,"__await")?t.resolve(u.__await).then((function(e){s("next",e,r,l)}),(function(e){s("throw",e,r,l)})):t.resolve(u).then((function(e){d.value=e,r(d)}),(function(e){return s("throw",e,r,l)}))}l(o.arg)}var a;n(this,"_invoke",{value:function(e,i){function n(){return new t((function(t,n){s(e,i,t,n)}))}return a=a?a.then(n,n):n()}})}function L(e,t,i){var n="suspendedStart";return function(s,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===s)throw a;return{value:void 0,done:!0}}for(i.method=s,i.arg=a;;){var r=i.delegate;if(r){var l=G(r,i);if(l){if(l===u)continue;return l}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if("suspendedStart"===n)throw n="completed",i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);n="executing";var o=c(e,t,i);if("normal"===o.type){if(n=i.done?"completed":"suspendedYield",o.arg===u)continue;return{value:o.arg,done:i.done}}"throw"===o.type&&(n="completed",i.method="throw",i.arg=o.arg)}}}function G(e,t){var i=t.method,n=e.iterator[i];if(void 0===n)return t.delegate=null,"throw"===i&&e.iterator.return&&(t.method="return",t.arg=void 0,G(e,t),"throw"===t.method)||"return"!==i&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+i+"' method")),u;var s=c(n,e.iterator,t.arg);if("throw"===s.type)return t.method="throw",t.arg=s.arg,t.delegate=null,u;var a=s.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function S(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function g(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function V(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,s=function t(){for(;++n<e.length;)if(i.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return s.next=s}}return{next:Y}}function Y(){return{value:void 0,done:!0}}return h.prototype=p,n(X,"constructor",{value:p,configurable:!0}),n(p,"constructor",{value:h,configurable:!0}),h.displayName=o(p,l,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===h||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,o(e,l,"GeneratorFunction")),e.prototype=Object.create(X),e},e.awrap=function(e){return{__await:e}},W(v.prototype),o(v.prototype,r,(function(){return this})),e.AsyncIterator=v,e.async=function(t,i,n,s,a){void 0===a&&(a=Promise);var r=new v(d(t,i,n,s),a);return e.isGeneratorFunction(i)?r:r.next().then((function(e){return e.done?e.value:r.next()}))},W(X),o(X,l,"Generator"),o(X,a,(function(){return this})),o(X,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=Object(e),i=[];for(var n in t)i.push(n);return i.reverse(),function e(){for(;i.length;){var n=i.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},e.values=V,g.prototype={constructor:g,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(S),!e)for(var t in this)"t"===t.charAt(0)&&i.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(i,n){return r.type="throw",r.arg=e,t.next=i,n&&(t.method="next",t.arg=void 0),!!n}for(var s=this.tryEntries.length-1;s>=0;--s){var a=this.tryEntries[s],r=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var l=i.call(a,"catchLoc"),o=i.call(a,"finallyLoc");if(l&&o){if(this.prev<a.catchLoc)return n(a.catchLoc,!0);if(this.prev<a.finallyLoc)return n(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return n(a.catchLoc,!0)}else{if(!o)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return n(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var s=this.tryEntries[n];if(s.tryLoc<=this.prev&&i.call(s,"finallyLoc")&&this.prev<s.finallyLoc){var a=s;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var r=a?a.completion:{};return r.type=e,r.arg=t,a?(this.method="next",this.next=a.finallyLoc,u):this.complete(r)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.finallyLoc===e)return this.complete(i.completion,i.afterLoc),S(i),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.tryLoc===e){var n=i.completion;if("throw"===n.type){var s=n.arg;S(i)}return s}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:V(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=void 0),u}},e}function b(e){return(b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Z(e,t,i,n,s,a,r){try{var l=e[a](r),o=l.value}catch(d){return void i(d)}l.done?t(o):Promise.resolve(o).then(n,s)}function f(e){return function(){var t=this,i=arguments;return new Promise((function(n,s){var a=e.apply(t,i);function r(e){Z(a,n,s,r,l,"next",e)}function l(e){Z(a,n,s,r,l,"throw",e)}r(void 0)}))}}function X(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function W(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,z(n.key),n)}}function v(e,t,i){return t&&W(e.prototype,t),i&&W(e,i),Object.defineProperty(e,"prototype",{writable:!1}),e}function L(e,t,i){return(t=z(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function G(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&S(e,t)}function x(e){return(x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function S(e,t){return(S=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function g(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function V(e,t,i){return(V=g()?Reflect.construct.bind():function(e,t,i){var n=[null];n.push.apply(n,t);var s=new(Function.bind.apply(e,n));return i&&S(s,i.prototype),s}).apply(null,arguments)}function Y(e){var t="function"==typeof Map?new Map:void 0;return Y=function(e){if(null===e||(i=e,-1===Function.toString.call(i).indexOf("[native code]")))return e;var i;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return V(e,arguments,x(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),S(n,e)},Y(e)}function k(e,t){if(null==e)return{};var i,n,s=function(e,t){if(null==e)return{};var i,n,s={},a=Object.keys(e);for(n=0;n<a.length;n++)i=a[n],t.indexOf(i)>=0||(s[i]=e[i]);return s}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)i=a[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s}function R(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function T(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return R(e)}function M(e){var t=g();return function(){var i,n=x(e);if(t){var s=x(this).constructor;i=Reflect.construct(n,arguments,s)}else i=n.apply(this,arguments);return T(this,i)}}function w(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=x(e)););return e}function K(){return K="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,i){var n=w(e,t);if(n){var s=Object.getOwnPropertyDescriptor(n,t);return s.get?s.get.call(arguments.length<3?e:i):s.value}},K.apply(this,arguments)}function I(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var i=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=i){var n,s,a,r,l=[],o=!0,d=!1;try{if(a=(i=i.call(e)).next,0===t){if(Object(i)!==i)return;o=!1}else for(;!(o=(n=a.call(i)).done)&&(l.push(n.value),l.length!==t);o=!0);}catch(c){d=!0,s=c}finally{try{if(!o&&null!=i.return&&(r=i.return(),Object(r)!==r))return}finally{if(d)throw s}}return l}}(e,t)||H(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e){return function(e){if(Array.isArray(e))return N(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||H(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 H(e,t){if(e){if("string"==typeof e)return N(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?N(e,t):void 0}}function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}function F(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=H(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,s=function(){};return{s:s,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,r=!0,l=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return r=e.done,e},e:function(e){l=!0,a=e},f:function(){try{r||null==i.return||i.return()}finally{if(l)throw a}}}}function z(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}var U={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,i="~";function n(){}function s(e,t,i){this.fn=e,this.context=t,this.once=i||!1}function a(e,t,n,a,r){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new s(n,a||e,r),o=i?i+t:t;return e._events[o]?e._events[o].fn?e._events[o]=[e._events[o],l]:e._events[o].push(l):(e._events[o]=l,e._eventsCount++),e}function r(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function l(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(i=!1)),l.prototype.eventNames=function(){var e,n,s=[];if(0===this._eventsCount)return s;for(n in e=this._events)t.call(e,n)&&s.push(i?n.slice(1):n);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},l.prototype.listeners=function(e){var t=i?i+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var s=0,a=n.length,r=new Array(a);s<a;s++)r[s]=n[s].fn;return r},l.prototype.listenerCount=function(e){var t=i?i+e:e,n=this._events[t];return n?n.fn?1:n.length:0},l.prototype.emit=function(e,t,n,s,a,r){var l=i?i+e:e;if(!this._events[l])return!1;var o,d,c=this._events[l],u=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,s),!0;case 5:return c.fn.call(c.context,t,n,s,a),!0;case 6:return c.fn.call(c.context,t,n,s,a,r),!0}for(d=1,o=new Array(u-1);d<u;d++)o[d-1]=arguments[d];c.fn.apply(c.context,o)}else{var m,h=c.length;for(d=0;d<h;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),u){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,s);break;default:if(!o)for(m=1,o=new Array(u-1);m<u;m++)o[m-1]=arguments[m];c[d].fn.apply(c[d].context,o)}}return!0},l.prototype.on=function(e,t,i){return a(this,e,t,i,!1)},l.prototype.once=function(e,t,i){return a(this,e,t,i,!0)},l.prototype.removeListener=function(e,t,n,s){var a=i?i+e:e;if(!this._events[a])return this;if(!t)return r(this,a),this;var l=this._events[a];if(l.fn)l.fn!==t||s&&!l.once||n&&l.context!==n||r(this,a);else{for(var o=0,d=[],c=l.length;o<c;o++)(l[o].fn!==t||s&&!l[o].once||n&&l[o].context!==n)&&d.push(l[o]);d.length?this._events[a]=1===d.length?d[0]:d:r(this,a)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=i?i+e:e,this._events[t]&&r(this,t)):(this._events=new n,this._eventsCount=0),this},l.prototype.off=l.prototype.removeListener,l.prototype.addListener=l.prototype.on,l.prefixed=i,l.EventEmitter=l,e.exports=l}(U);var j,J=U.exports,P={};Object.defineProperty(P,"__esModule",{value:!0}),P.default=function(e){for(var t=0,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=!0,r=!1,l=void 0;try{for(var o,d=n[Symbol.iterator]();!(a=(o=d.next()).done);a=!0){var c=o.value;t+=c.length}}catch(X){r=!0,l=X}finally{try{!a&&d.return&&d.return()}finally{if(r)throw l}}var u=new e(t),m=0,h=!0,p=!1,y=void 0;try{for(var b,Z=n[Symbol.iterator]();!(h=(b=Z.next()).done);h=!0){var f=b.value;u.set(f,m),m+=f.length}}catch(X){p=!0,y=X}finally{try{!h&&Z.return&&Z.return()}finally{if(p)throw y}}return u};var D=((j=P)&&j.__esModule?j:{default:j}).default,E="video",B="audio",_="metadata",Q="av1",O="avc",A="hevc",q="aac",$="g7110a",ee="g7110m",te="opus",ie="mp3",ne="LARGE_AV_SHIFT",se="LARGE_VIDEO_GAP",ae="LARGE_VIDEO_GAP_BETWEEN_CHUNK",re="LARGE_AUDIO_GAP",le="AUDIO_FILLED",oe="AUDIO_DROPPED",de=function(){function e(){X(this,e),L(this,"id",1),L(this,"type",E),L(this,"codecType",O),L(this,"pid",-1),L(this,"hvcC",void 0),L(this,"codec",""),L(this,"timescale",0),L(this,"formatTimescale",0),L(this,"sequenceNumber",0),L(this,"baseMediaDecodeTime",0),L(this,"baseDts",0),L(this,"duration",0),L(this,"warnings",[]),L(this,"samples",[]),L(this,"pps",[]),L(this,"sps",[]),L(this,"vps",[]),L(this,"fpsNum",0),L(this,"fpsDen",0),L(this,"sarRatio",[]),L(this,"width",0),L(this,"height",0),L(this,"nalUnitSize",4),L(this,"present",!1),L(this,"isVideoEncryption",!1),L(this,"isAudioEncryption",!1),L(this,"isVideo",!0),L(this,"lastKeyFrameDts",0),L(this,"kid",null),L(this,"pssh",null),L(this,"ext",void 0)}return v(e,[{key:"reset",value:function(){this.sequenceNumber=this.width=this.height=this.fpsDen=this.fpsNum=this.duration=this.baseMediaDecodeTime=this.timescale=0,this.codec="",this.present=!1,this.pid=-1,this.pps=[],this.sps=[],this.vps=[],this.sarRatio=[],this.samples=[],this.warnings=[],this.hvcC=null}},{key:"firstDts",get:function(){return this.samples.length?this.samples[0].dts:null}},{key:"firstPts",get:function(){return this.samples.length?this.samples[0].pts:null}},{key:"samplesDuration",get:function(){if(this.samples.length>0){var e=this.samples[0],t=this.samples[this.samples.length-1];return t.dts-e.dts+t.duration}return 0}},{key:"exist",value:function(){return!!/av01/.test(this.codec)||!!(this.pps.length&&this.sps.length&&this.codec)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isVideoEncryption}}]),e}(),ce=function(){function e(){X(this,e),L(this,"id",2),L(this,"type",B),L(this,"codecType",q),L(this,"pid",-1),L(this,"codec",""),L(this,"container",""),L(this,"sequenceNumber",0),L(this,"sampleDuration",0),L(this,"timescale",0),L(this,"formatTimescale",0),L(this,"baseMediaDecodeTime",0),L(this,"duration",0),L(this,"warnings",[]),L(this,"samples",[]),L(this,"baseDts",0),L(this,"sampleSize",16),L(this,"sampleRate",0),L(this,"channelCount",0),L(this,"objectType",0),L(this,"sampleRateIndex",0),L(this,"parsedCodec",null),L(this,"config",[]),L(this,"present",!1),L(this,"isVideoEncryption",!1),L(this,"isAudioEncryption",!1),L(this,"kid",null),L(this,"ext",void 0)}return v(e,[{key:"reset",value:function(){this.sequenceNumber=0,this.timescale=0,this.sampleDuration=0,this.sampleRate=0,this.channelCount=0,this.baseMediaDecodeTime=0,this.present=!1,this.pid=-1,this.codec="",this.samples=[],this.config=[],this.warnings=[]}},{key:"exist",value:function(){return!(!this.sampleRate||!this.channelCount||!this.codec&&!this.container||this.codecType!==q&&this.codecType!==$&&this.codecType!==ee&&this.codecType!==te&&this.codecType!==ie)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isAudioEncryption}},{key:"firstDts",get:function(){return this.samples.length?this.samples[0].dts:null}},{key:"firstPts",get:function(){return this.samples.length?this.samples[0].pts:null}},{key:"samplesDuration",get:function(){if(this.samples.length>0){var e=this.samples[0],t=this.samples[this.samples.length-1];return t.dts-e.dts+t.duration}return 0}}]),e}(),ue=function(){function e(t,i,n){X(this,e),L(this,"flag",{}),L(this,"keyframe",!1),L(this,"gopId",0),L(this,"duration",0),L(this,"size",0),L(this,"units",[]),L(this,"chromaFormat",420),this.originPts=this.pts=t,this.originDts=this.dts=i,n&&(this.units=n)}return v(e,[{key:"cts",get:function(){return this.pts-this.dts}},{key:"setToKeyframe",value:function(){this.keyframe=!0,this.flag.dependsOn=2,this.flag.isNonSyncSample=0}}]),e}(),me=v((function e(t,i,n,s){X(this,e),L(this,"duration",1024),L(this,"flag",{dependsOn:2,isNonSyncSample:0}),L(this,"keyframe",!0),this.originPts=this.pts=this.dts=t,this.data=i,this.size=i.byteLength,this.sampleOffset=s,n&&(this.duration=n)})),he=v((function e(t,i){X(this,e),L(this,"time",0),this.data=t,this.originPts=this.pts=i})),pe=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i)}(he),ye=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i)}(he),be=function(){function e(){X(this,e),L(this,"id",3),L(this,"type",_),L(this,"timescale",0),L(this,"flvScriptSamples",[]),L(this,"seiSamples",[])}return v(e,[{key:"exist",value:function(){return!(!this.flvScriptSamples.length&&!this.seiSamples.length||!this.timescale)}},{key:"reset",value:function(){this.timescale=0,this.flvScriptSamples=[],this.seiSamples=[]}},{key:"hasSample",value:function(){return!(!this.flvScriptSamples.length&&!this.seiSamples.length)}}]),e}(),Ze=function(){function e(t){if(X(this,e),L(this,"_bytesAvailable",void 0),L(this,"_bitsAvailable",0),L(this,"_word",0),!t)throw new Error("ExpGolomb data params is required");this._data=t,this._bytesAvailable=t.byteLength,this._bytesAvailable&&this._loadWord()}return v(e,[{key:"bitsAvailable",get:function(){return this._bitsAvailable}},{key:"_loadWord",value:function(){var e=this._data.byteLength-this._bytesAvailable,t=Math.min(4,this._bytesAvailable);if(0===t)throw new Error("No bytes available");var i=new Uint8Array(4);i.set(this._data.subarray(e,e+t)),this._word=new DataView(i.buffer).getUint32(0),this._bitsAvailable=8*t,this._bytesAvailable-=t}},{key:"skipBits",value:function(e){if(this._bitsAvailable>e)this._word<<=e,this._bitsAvailable-=e;else{e-=this._bitsAvailable;var t=Math.floor(e/8);e-=8*t,this._bytesAvailable-=t,this._loadWord(),this._word<<=e,this._bitsAvailable-=e}}},{key:"readBits",value:function(e){if(e>32)throw new Error("Cannot read more than 32 bits");var t=Math.min(this._bitsAvailable,e),i=this._word>>>32-t;return this._bitsAvailable-=t,this._bitsAvailable>0?this._word<<=t:this._bytesAvailable>0&&this._loadWord(),(t=e-t)>0&&this._bitsAvailable?i<<t|this.readBits(t):i}},{key:"skipLZ",value:function(){var e;for(e=0;e<this._bitsAvailable;++e)if(0!=(this._word&2147483648>>>e))return this._word<<=e,this._bitsAvailable-=e,e;return this._loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBool",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"skipScalingList",value:function(e){for(var t=8,i=8,n=0;n<e;n++)0!==i&&(i=(t+this.readEG()+256)%256),t=0===i?t:i}}]),e}(),fe=function(){function e(t){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]")}return v(e,[{key:"warn",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).warn.apply(t,[this._prefix].concat(n))}}}],[{key:"enable",value:function(){e.disabled=!1}},{key:"disable",value:function(){e.disabled=!0}}]),e}();L(fe,"disabled",!0);var Xe=function(){function e(){X(this,e)}return v(e,null,[{key:"decode",value:function(t){for(var i=[],n=t,s=0,a=t.length;s<a;)if(n[s]<128)i.push(String.fromCharCode(n[s])),++s;else{if(n[s]<192);else if(n[s]<224){if(e._checkContinuation(n,s,1)){var r=(31&n[s])<<6|63&n[s+1];if(r>=128){i.push(String.fromCharCode(65535&r)),s+=2;continue}}}else if(n[s]<240){if(e._checkContinuation(n,s,2)){var l=(15&n[s])<<12|(63&n[s+1])<<6|63&n[s+2];if(l>=2048&&55296!=(63488&l)){i.push(String.fromCharCode(65535&l)),s+=3;continue}}}else if(n[s]<248&&e._checkContinuation(n,s,3)){var o=(7&n[s])<<18|(63&n[s+1])<<12|(63&n[s+2])<<6|63&n[s+3];if(o>65536&&o<1114112){o-=65536,i.push(String.fromCharCode(o>>>10|55296)),i.push(String.fromCharCode(1023&o|56320)),s+=4;continue}}i.push(String.fromCharCode(65533)),++s}return i.join("")}},{key:"_checkContinuation",value:function(e,t,i){var n=e;if(t+i<n.length){for(;i--;)if(128!=(192&n[++t]))return!1;return!0}return!1}}]),e}(),We="undefined"!=typeof window,ve=We&&navigator.userAgent.toLocaleLowerCase(),Le=We&&/^((?!chrome|android).)*safari/.test(ve),Ge=We&&ve.includes("firefox"),xe=We&&ve.includes("android");function Se(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];t=t.filter(Boolean);var n=new Uint8Array(t.reduce((function(e,t){return e+t.byteLength}),0)),s=0;return t.forEach((function(e){n.set(e,s),s+=e.byteLength})),n}var ge=Math.pow(2,32);function Ve(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(e[t]<<8)+(e[t+1]||0)}function Ye(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(e[t]<<24>>>0)+(e[t+1]<<16)+(e[t+2]<<8)+(e[t+3]||0)}function ke(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Ye(e,t)*ge+Ye(e,t+4)}function Re(e){for(var t,i="avc1.",n=0;n<3;n++)(t=e[n].toString(16)).length<2&&(t="0".concat(t)),i+=t;return i}function Te(e){var t="";if(e.forEach((function(e){t+=function(e){return("0"+Number(e).toString(16)).slice(-2).toUpperCase()}(e)})),t.length<=32)for(var i=32-t.length,n=0;n<i;n++)t+="0";return t}function Me(e){if(!Array.isArray(e)){for(var t=[],i="",n=0;n<e.length;n++)n%2&&(i=e[n-1]+e[n],t.push(parseInt(i,16)),i="");return t}return e.map((function(e){return parseInt(e,16)}))}function we(e,t){return Number(e+"."+t)}var Ke=function(){function e(){X(this,e)}return v(e,null,[{key:"getRateIndexByRate",value:function(t){return e.FREQ.indexOf(t)}},{key:"parseADTS",value:function(t,i){for(var n=t.length,s=0;s+2<n&&(255!==t[s]||240!=(246&t[s+1]));)s++;if(!(s>=n)){var a=s,r=[],l=(60&t[s+2])>>>2,o=e.FREQ[l];if(!o)throw new Error("Invalid sampling index: ".concat(l));for(var d,c,u=1+((192&t[s+2])>>>6),m=(1&t[s+2])<<2|(192&t[s+3])>>>6,h=e._getConfig(l,m,u),p=h.config,y=h.codec,b=0,Z=e.getFrameDuration(o);s+7<n;)if(255===t[s]&&240==(246&t[s+1])){if(!(c=(3&t[s+3])<<11|t[s+4]<<3|(224&t[s+5])>>5)||n-s<c)break;d=2*(1&~t[s+1]),r.push({pts:i+b*Z,data:t.subarray(s+7+d,s+c)}),b++,s+=c}else s++;return{skip:a,remaining:s>=n?void 0:t.subarray(s),frames:r,samplingFrequencyIndex:l,sampleRate:o,objectType:u,channelCount:m,codec:y,config:p,originCodec:"mp4a.40.".concat(u)}}}},{key:"parseAudioSpecificConfig",value:function(t){if(t.length){var i=t[0]>>>3,n=(7&t[0])<<1|t[1]>>>7,s=(120&t[1])>>>3,a=e.FREQ[n];if(a){var r=e._getConfig(n,s,i);return{samplingFrequencyIndex:n,sampleRate:a,objectType:i,channelCount:s,config:r.config,codec:r.codec,originCodec:"mp4a.40.".concat(i)}}}}},{key:"getFrameDuration",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e4;return 1024*t/e}},{key:"_getConfig",value:function(e,t,i){var n,s,a=[];return Ge?e>=6?(n=5,s=e-3):(n=2,s=e):xe?(n=2,s=e):(n=5,s=e,e>=6?s=e-3:1===t&&(n=2,s=e)),a[0]=n<<3,a[0]|=(14&e)>>1,a[1]=(1&e)<<7,a[1]|=t<<3,5===n&&(a[1]|=(14&s)>>1,a[2]=(1&s)<<7,a[2]|=8,a[3]=0),{config:a,codec:"mp4a.40.".concat(n)}}},{key:"getSilentFrame",value:function(e,t){if("mp4a.40.2"===e){if(1===t)return new Uint8Array([0,200,0,128,35,128]);if(2===t)return new Uint8Array([33,0,73,144,2,25,0,35,128]);if(3===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,142]);if(4===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,128,44,128,8,2,56]);if(5===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,56]);if(6===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,0,178,0,32,8,224])}else{if(1===t)return new Uint8Array([1,64,34,128,163,78,230,128,186,8,0,0,0,28,6,241,193,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(2===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(3===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94])}}}]),e}();L(Ke,"FREQ",[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350]);var Ie=function(){function e(){X(this,e)}return v(e,null,[{key:"parseAnnexB",value:function(e){var t=e.byteLength-1,i=0;do{if(0!==e[t])break;i++,t--}while(t>0);i>=3&&(e=e.subarray(0,t+1));for(var n=e.length,s=2,a=0;null!==e[s]&&void 0!==e[s]&&1!==e[s];)s++;if((a=++s+2)>=n)return[];for(var r=[];a<n;)switch(e[a]){case 0:if(0!==e[a-1]){a+=2;break}if(0!==e[a-2]){a++;break}if(a<n-1&&1!==e[a+1]){a++;break}s!==a-2&&r.push(e.subarray(s,a-2));do{a++}while(1!==e[a]&&a<n);a=(s=a+1)+2;break;case 1:if(0!==e[a-1]||0!==e[a-2]){a+=3;break}s!==a-2&&r.push(e.subarray(s,a-2)),a=(s=a+1)+2;break;default:a+=3}return s<n&&r.push(e.subarray(s)),r}},{key:"parseAvcC",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;if(!(e.length<4)){for(var i,n=e.length,s=[],a=0;a+t<n;)if(i=Ye(e,a),3===t&&(i>>>=8),a+=t,i){if(a+i>n)break;s.push(e.subarray(a,a+i)),a+=i}return s}}},{key:"parseSEI",value:function(e,t){for(var i=e.length,n=t?2:1,s=0,a=0,r="";255===e[n];)s+=255,n++;for(s+=e[n++];255===e[n];)a+=255,n++;if(a+=e[n++],5===s&&i>n+16)for(var l=0;l<16;l++)r+=e[n].toString(16),n++;return{payload:e.subarray(n,n+a),type:s,size:a,uuid:r}}},{key:"removeEPB",value:function(e){for(var t=e.byteLength,i=[],n=1;n<t-2;)0===e[n]&&0===e[n+1]&&3===e[n+2]?(i.push(n+2),n+=2):n++;if(!i.length)return e;var s=t-i.length,a=new Uint8Array(s),r=0;for(n=0;n<s;r++,n++)r===i[0]&&(r++,i.shift()),a[n]=e[r];return a}}]),e}(),Ce=function(){function e(){X(this,e)}return v(e,null,[{key:"parseAVCDecoderConfigurationRecord",value:function(t){if(!(t.length<7)){for(var i,n,s=1+(3&t[4]),a=[],r=[],l=6,o=31&t[5],d=0;d<o;d++)if(n=t[l]<<8|t[l+1],l+=2,n){var c=t.subarray(l,l+n);l+=n,a.push(c),i||(i=e.parseSPS(Ie.removeEPB(c)))}var u,m=t[l];l++;for(var h=0;h<m;h++)u=t[l]<<8|t[l+1],l+=2,u&&(r.push(t.subarray(l,l+u)),l+=u);return{sps:i,spsArr:a,ppsArr:r,nalUnitSize:s}}}},{key:"parseSPS",value:function(e){var t=new Ze(e);t.readUByte();var i=t.readUByte(),n=t.readUByte(),s=t.readUByte();t.skipUEG();var a=420;if(100===i||110===i||122===i||244===i||44===i||83===i||86===i||118===i||128===i||138===i||144===i){var r=t.readUEG();if(r<=3&&(a=[0,420,422,444][r]),3===r&&t.skipBits(1),t.skipUEG(),t.skipUEG(),t.skipBits(1),t.readBool())for(var l=3!==r?8:12,o=0;o<l;o++)t.readBool()&&(o<6?t.skipScalingList(16):t.skipScalingList(64))}t.skipUEG();var d=t.readUEG();if(0===d)t.readUEG();else if(1===d){t.skipBits(1),t.skipUEG(),t.skipUEG();for(var c=t.readUEG(),u=0;u<c;u++)t.skipUEG()}t.skipUEG(),t.skipBits(1);var m=t.readUEG(),h=t.readUEG(),p=t.readBits(1);0===p&&t.skipBits(1),t.skipBits(1);var y,b,Z,f,X,W=0,v=0,L=0,G=0;if(t.readBool()&&(W=t.readUEG(),v=t.readUEG(),L=t.readUEG(),G=t.readUEG()),t.readBool()){if(t.readBool())switch(t.readUByte()){case 1:y=[1,1];break;case 2:y=[12,11];break;case 3:y=[10,11];break;case 4:y=[16,11];break;case 5:y=[40,33];break;case 6:y=[24,11];break;case 7:y=[20,11];break;case 8:y=[32,11];break;case 9:y=[80,33];break;case 10:y=[18,11];break;case 11:y=[15,11];break;case 12:y=[64,33];break;case 13:y=[160,99];break;case 14:y=[4,3];break;case 15:y=[3,2];break;case 16:y=[2,1];break;case 255:y=[t.readUByte()<<8|t.readUByte(),t.readUByte()<<8|t.readUByte()]}if(t.readBool()&&t.readBool(),t.readBool()&&(t.readBits(4),t.readBool()&&t.readBits(24)),t.readBool()&&(t.readUEG(),t.readUEG()),t.readBool()){var x=t.readBits(32),S=t.readBits(32);b=t.readBool(),X=(Z=S)/(f=2*x)}}return{codec:Re(e.subarray(1,4)),profileIdc:i,profileCompatibility:n,levelIdc:s,chromaFormat:a,width:Math.ceil(16*(m+1)-2*(W+v)),height:(2-p)*(h+1)*16-(p?2:4)*(L+G),sarRatio:y,fpsNum:Z,fpsDen:f,fps:X,fixedFrame:b}}}]),e}(),He=function(){function e(){X(this,e)}return v(e,null,[{key:"parseHEVCDecoderConfigurationRecord",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(t.length<23)){i=i||{};for(var n,s,a,r,l,o=1+(3&t[21]),d=[],c=[],u=[],m=23,h=t[22],p=0;p<h;p++){a=63&t[m],r=t[m+1]<<8|t[m+2],m+=3;for(var y=0;y<r;y++)if(l=t[m]<<8|t[m+1],m+=2,l){switch(a){case 32:var b=t.subarray(m,m+l);n||(n=e.parseVPS(Ie.removeEPB(b),i)),u.push(b);break;case 33:var Z=t.subarray(m,m+l);s||(s=e.parseSPS(Ie.removeEPB(Z),i)),d.push(Z);break;case 34:c.push(t.subarray(m,m+l))}m+=l}}return{hvcC:i,sps:s,spsArr:d,ppsArr:c,vpsArr:u,nalUnitSize:o}}}},{key:"parseVPS",value:function(t,i){i=i||{};var n=new Ze(t);n.readUByte(),n.readUByte(),n.readBits(12);var s=n.readBits(3);return i.numTemporalLayers=Math.max(i.numTemporalLayers||0,s+1),n.readBits(17),e._parseProfileTierLevel(n,s,i),i}},{key:"parseSPS",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i=i||{};var n=new Ze(t);n.readUByte(),n.readUByte(),n.readBits(4);var s=n.readBits(3);i.numTemporalLayers=Math.max(s+1,i.numTemporalLayers||0),i.temporalIdNested=n.readBits(1),e._parseProfileTierLevel(n,s,i),n.readUEG();var a=i.chromaFormatIdc=n.readUEG(),r=420;a<=3&&(r=[0,420,422,444][a]);var l=0;3===a&&(l=n.readBits(1));var o,d,c,u,m=n.readUEG(),h=n.readUEG(),p=n.readBits(1);if(1===p&&(o=n.readUEG(),d=n.readUEG(),c=n.readUEG(),u=n.readUEG()),i.bitDepthLumaMinus8=n.readUEG(),i.bitDepthChromaMinus8=n.readUEG(),1===p){var y=1!==a&&2!==a||0!==l?1:2,b=1===a&&0===l?2:1;m-=y*(d+o),h-=b*(u+c)}return{codec:"hev1.1.6.L93.B0",width:m,height:h,chromaFormat:r,hvcC:i}}},{key:"_parseProfileTierLevel",value:function(e,t,i){var n=i.generalTierFlag||0;i.generalProfileSpace=e.readBits(2),i.generalTierFlag=Math.max(e.readBits(1),n),i.generalProfileIdc=Math.max(e.readBits(5),i.generalProfileIdc||0),i.generalProfileCompatibilityFlags=e.readBits(32),i.generalConstraintIndicatorFlags=[e.readBits(8),e.readBits(8),e.readBits(8),e.readBits(8),e.readBits(8),e.readBits(8)];var s=e.readBits(8);n<i.generalTierFlag?i.generalLevelIdc=s:i.generalLevelIdc=Math.max(s,i.generalLevelIdc||0);var a=[],r=[];if(t>e.bitsAvailable)throw new Error("maxSubLayersMinus inavlid size ".concat(t));for(var l=0;l<t;l++)a[l]=e.readBits(1),r[l]=e.readBits(1);t>0&&e.readBits(2*(8-t));for(var o=0;o<t;o++)0!==a[o]&&(e.readBits(2),e.readBits(1),e.readBits(5),e.readBits(16),e.readBits(16),e.readBits(4),e.readBits(16),e.readBits(16),e.readBits(12)),0!==r[o]&&e.readBits(8)}}]),e}(),Ne=function(){function e(){X(this,e)}return v(e,null,[{key:"getFrameDuration",value:function(e){return 20}},{key:"parseHeaderPackets",value:function(e){if(e.length){for(var t=new DataView(e.buffer,e.byteOffset,e.byteLength),i="",n=0;n<8;n++)i+=String.fromCodePoint(e[n]);if("OpusHead"!==i)throw new Error("Invalid Opus MagicSignature");var s=e[9];console.log("Pre-skip",e[10],e[11]);var a=t.getUint32(12,!0),r=t.getInt16(16,!0);if(a){return{outputGain:r,sampleRate:a,channelCount:s,config:new Uint8Array(e.buffer,e.byteOffset+8,e.byteLength-8),codec:"opus",originCodec:"opus"}}}}}]),e}(),Fe=1e3,ze=5e3,Ue=function(){function e(t,i,n){X(this,e),this.videoTrack=t,this.audioTrack=i,this.metadataTrack=n,this._baseDts=-1,this._baseDtsInited=!1,this._audioNextPts=void 0,this._videoNextDts=void 0,this._audioTimestampBreak=0,this._videoTimestampBreak=0,this._lastVideoDuration=0,this._keyFrameInNextChunk=!1,this._lastAudioExceptionGapDot=-1/0,this._lastAudioExceptionOverlapDot=-1/0,this._lastAudioExceptionLargeGapDot=-1/0,this._lastVideoExceptionLargeGapDot=-1/0,this._lastVideoExceptionChunkFirstDtsDot=-1/0}return v(e,[{key:"fix",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];t=Math.round(1e3*t);var s=this.videoTrack,a=this.audioTrack;!i&&n||(this._videoLastSample=null,this._audioNextPts=void 0,this._videoNextDts=void 0,this._audioTimestampBreak=0,this._videoTimestampBreak=0,this._lastAudioExceptionGapDot=-1/0,this._lastAudioExceptionOverlapDot=-1/0,this._lastAudioExceptionLargeGapDot=-1/0,this._lastVideoExceptionLargeGapDot=-1/0,this._lastVideoExceptionChunkFirstDtsDot=-1/0),i&&!n&&(this._baseDtsInited=!1),this._baseDtsInited||this._calculateBaseDts(a,s),!n&&t&&(this._audioNextPts=this._videoNextDts=t);var r=this._baseDtsInited&&(this._videoTimestampBreak||!this.videoTrack.exist())&&(this._audioTimestampBreak||!this.audioTrack.exist());if(r&&this._resetBaseDtsWhenStreamBreaked(),this._fixAudio(a),this._keyFrameInNextChunk=!1,this._fixVideo(s),this.metadataTrack.exist()){var l=this.metadataTrack.timescale;this.metadataTrack.seiSamples.forEach((function(t){t.pts=t.originPts-e._baseDts,t.time=Math.max(0,t.pts)/l})),this.metadataTrack.flvScriptSamples.forEach((function(t){t.pts=t.originPts-e._baseDts,t.time=Math.max(0,t.pts)/l}))}s.samples.length&&(s.baseMediaDecodeTime=s.samples[0].dts),a.samples.length&&(a.baseMediaDecodeTime=a.samples[0].pts*a.timescale/1e3)}},{key:"_fixVideo",value:function(e){var t=this,i=e.samples;if(i.length){var n;if(i.forEach((function(e){e.dts-=t._baseDts,e.pts-=t._baseDts,e.keyframe&&(t._keyFrameInNextChunk=!0)})),e.fpsNum&&e.fpsDen)n=e.timescale*(e.fpsDen/e.fpsNum);else if(e.length>1){var s=e.samples[0],a=e.samples[i.length-1];n=Math.floor((a.dts-s.dts)/(i.length-1))}else n=this._lastVideoDuration||40;var r=i.pop();if(this._videoLastSample&&i.unshift(this._videoLastSample),this._videoLastSample=r,i.length){if(void 0===this._videoNextDts){var l=i[0];this._videoNextDts=l.dts}var o=i.length,d=0,c=i[0],u=this._videoNextDts-c.dts;if(Math.abs(u)>200){var m;if(Math.abs(c.dts-this._lastVideoExceptionChunkFirstDtsDot)>5e3)this._lastVideoExceptionChunkFirstDtsDot=c.dts,e.warnings.push({type:ae,nextDts:this._videoNextDts,firstSampleDts:c.dts,nextSampleDts:null===(m=i[1])||void 0===m?void 0:m.dts,sampleDuration:u});this._videoTimestampBreak>=5?(this._videoNextDts=c.dts,this._videoTimestampBreak=0):(c.dts+=u,c.pts+=u,this.audioTrack.exist()||(this._videoTimestampBreak=1))}for(var h=0;h<o;h++){var p=i[h].dts,y=i[h+1];((d=h<o-1?y.dts-p:r?r.dts-p:n)>1e3||d<0)&&(this._videoTimestampBreak++,Math.abs(p-this._lastVideoExceptionLargeGapDot)>5e3&&(this._lastVideoExceptionLargeGapDot=p,e.warnings.push({type:se,time:p/e.timescale,dts:p,originDts:i[h].originDts,nextDts:this._videoNextDts,sampleDuration:d,refSampleDuration:n})),d=n),i[h].duration=d,this._videoNextDts+=d,this._lastVideoDuration=d}}}}},{key:"_fixAudio",value:function(e){var t=this,i=e.samples;i.length&&(i.forEach((function(e){e.dts=e.pts-=t._baseDts})),this._doFixAudioInternal(e,i,1e3))}},{key:"_calculateBaseDts",value:function(e,t){var i=e.samples,n=t.samples;if(!i.length&&!n.length)return!1;var s=1/0,a=1/0;i.length&&(e.baseDts=s=i[0].pts),n.length&&(t.baseDts=a=n[0].dts),this._baseDts=Math.min(s,a);var r=a-s;return Number.isFinite(r)&&Math.abs(r)>500&&t.warnings.push({type:ne,videoBaseDts:a,audioBasePts:s,baseDts:this._baseDts,delta:r}),this._baseDtsInited=!0,!0}},{key:"_resetBaseDtsWhenStreamBreaked",value:function(){this._calculateBaseDts(this.audioTrack,this.videoTrack)&&(this.audioTrack.exist()?this.videoTrack.exist()?this._baseDts-=Math.min(this._audioNextPts,this._videoNextDts):this._baseDts-=this._audioNextPts:this._baseDts-=this._videoNextDts,this._videoTimestampBreak=0,this._audioTimestampBreak=0)}},{key:"_doFixAudioInternal",value:function(e,t,i){if(!e.sampleDuration)switch(e.codecType){case q:e.sampleDuration=Ke.getFrameDuration(e.timescale,i);break;case te:e.sampleDuration=Ne.getFrameDuration(e.samples,i);break;case $:case ee:e.sampleDuration=this._getG711Duration(e);break;default:console.error("can't fix audio codecType:",e.codecType)}var n=e.sampleDuration,s=e.codecType===te?20:e.codecType===q?1024:n*e.timescale/1e3;if(void 0===this._audioNextPts){var a=t[0];this._audioNextPts=a.pts}for(var r=0;r<t.length;r++){var l=this._audioNextPts,o=t[r],d=o.pts-l;if(0===r&&this._audioTimestampBreak>=5&&this._keyFrameInNextChunk&&(l=this._audioNextPts=o.dts,d=0,this._audioTimestampBreak=0),!this._audioTimestampBreak&&d>=3*n&&d<=Fe&&!Le){var c=this._getSilentFrame(e)||t[0].data.subarray(),u=Math.floor(d/n);Math.abs(o.pts-this._lastAudioExceptionGapDot)>ze&&(this._lastAudioExceptionGapDot=o.pts,e.warnings.push({type:le,pts:o.pts,originPts:o.originPts,count:u,nextPts:l,refSampleDuration:n}));for(var m=0;m<u;m++){var h=new me(Math.floor(this._audioNextPts+n)-Math.floor(this._audioNextPts),c,s);h.originPts=Math.floor(this._baseDts+l),t.splice(r,0,h),this._audioNextPts+=n,r++}r--}else if(d<=-3*n&&d>=-1e3)Math.abs(o.pts-this._lastAudioExceptionOverlapDot)>ze&&(this._lastAudioExceptionOverlapDot=o.pts,e.warnings.push({type:oe,pts:o.pts,originPts:o.originPts,nextPts:l,refSampleDuration:n})),t.splice(r,1),r--;else{if(Math.abs(d)>Fe&&(this._audioTimestampBreak++,Math.abs(o.pts-this._lastAudioExceptionLargeGapDot)>ze&&(this._lastAudioExceptionLargeGapDot=o.pts,e.warnings.push({type:re,time:o.pts/1e3,pts:o.pts,originPts:o.originPts,nextPts:l,sampleDuration:d,refSampleDuration:n}))),e.codecType===te){var p=t[t.length-1];p&&(p.duration=o.pts-p.pts)}else o.dts=o.pts=l,o.duration=s;this._audioNextPts+=n}}}},{key:"_getG711Duration",value:function(e){var t=e.sampleSize,i=e.channelCount,n=e.sampleRate,s=e.samples[0];if(s)return 2*s.data.byteLength/i/(t/8)/n*1e3}},{key:"_getSilentFrame",value:function(e){return e.codecType===q?Ke.getSilentFrame(e.codec,e.channelCount):new Uint8Array(8*e.sampleDuration*e.channelCount)}}]),e}(),je=function(){function e(){X(this,e)}return v(e,null,[{key:"parse",value:function(t){if(!(t.length<3)){var i={},n=e._parseValue(new DataView(t.buffer,t.byteOffset,t.byteLength)),s=e._parseValue(new DataView(t.buffer,t.byteOffset+n.size,t.byteLength-n.size));return i[n.data]=s.data,i}}},{key:"_parseValue",value:function(t){var i,n=t.byteLength,s=1,a=!1;switch(t.getUint8(0)){case 0:i=t.getFloat64(1),s+=8;break;case 1:i=!!t.getUint8(1),s+=1;break;case 2:var r=e._parseString(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s));i=r.data,s+=r.size;break;case 3:i={};var l=0;for(9==(16777215&t.getUint32(n-4))&&(l=3);s<n-4;){var o=e._parseObject(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s-l)),d=o.size,c=o.data;if(o.isEnd)break;i[c.name]=c.value,s+=d}if(s<=n-3)9===(16777215&t.getUint32(s-1))&&(s+=3);break;case 8:i={},s+=4;var u=0;for(9==(16777215&t.getUint32(n-4))&&(u=3);s<n-8;){var m=e._parseObject(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s-u)),h=m.size,p=m.data;if(m.isEnd)break;i[p.name]=p.value,s+=h}if(s<=n-3)9===(16777215&t.getUint32(s-1))&&(s+=3);break;case 9:i=void 0,s=1,a=!0;break;case 10:i=[];var y=t.getUint32(1);s+=4;for(var b=0;b<y;b++){var Z=e._parseValue(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s)),f=Z.data,X=Z.size;i.push(f),s+=X}break;case 11:var W=t.getFloat64(s)+6e4*t.getInt16(s+8);i=new Date(W),s+=10;break;case 12:var v=t.getUint32(1);s+=4,i="",v>0&&(i=Xe.decode(new Uint8Array(t.buffer,t.byteOffset+s,v))),s+=v;break;default:s=n}return{data:i,size:s,isEnd:a}}},{key:"_parseString",value:function(e){var t=e.getUint16(0),i="";return t>0&&(i=Xe.decode(new Uint8Array(e.buffer,e.byteOffset+2,t))),{data:i,size:2+t}}},{key:"_parseObject",value:function(t){if(!(t.byteLength<3)){var i=e._parseString(t),n=e._parseValue(new DataView(t.buffer,t.byteOffset+i.size,t.byteLength-i.size));return{data:{name:i.data,value:n.data},size:i.size+n.size,isEnd:n.isEnd}}}}]),e}(),Je=7,Pe=8,De=10,Ee=13,Be=new fe("FlvDemuxer"),_e=function(){function e(t,i,n){X(this,e),L(this,"_headerParsed",!1),L(this,"_remainingData",null),L(this,"_gopId",0),L(this,"_needAddMetaBeforeKeyFrameNal",!0),this.videoTrack=t||new de,this.audioTrack=i||new ce,this.metadataTrack=n||new be,this._fixer=new Ue(this.videoTrack,this.audioTrack,this.metadataTrack)}return v(e,[{key:"demux",value:function(t){var i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=arguments.length>3?arguments[3]:void 0,r=this.audioTrack,l=this.videoTrack,o=this.metadataTrack;if(!n&&s||(this._remainingData=null),n&&(this._headerParsed=!1),n?(l.reset(),r.reset(),o.reset()):(l.samples=[],r.samples=[],o.seiSamples=[],o.flvScriptSamples=[],l.warnings=[],r.warnings=[],this._remainingData&&(t=Se(this._remainingData,t),this._remainingData=null)),!t.length)return{videoTrack:l,audioTrack:r,metadataTrack:o};var d=0;if(!this._headerParsed){if(!e.probe(t))throw new Error("Invalid flv file");r.present=(4&t[4])>>>2!=0,l.present=0!=(1&t[4]),this._headerParsed=!0,d=Ye(t,5)+4}for(var c,u,m,h,p,y=t.length;d+15<y&&(c=t[d],!(d+15+(u=t[d+1]<<16|t[d+2]<<8|t[d+3])>y));)m=(t[d+7]<<24>>>0)+(t[d+4]<<16)+(t[d+5]<<8)+t[d+6],d+=11,h=t.subarray(d,d+u),8===c?this._parseAudio(h,m):9===c?(a&&(this.seamlessLoadingSwitching=!0),this._parseVideo(h,m)):18===c?this._parseScript(h,m):Be.warn("Invalid tag type: ".concat(c)),(p=Ye(t,d+=u))!==11+u&&Be.warn("Invalid PrevTagSize ".concat(p," (").concat(11+u,")")),d+=4;d<y&&(this._remainingData=t.subarray(d)),r.formatTimescale=l.formatTimescale=l.timescale=o.timescale=1e3,r.timescale=r.codecType===te?1e3:r.sampleRate||0,!r.exist()&&r.hasSample()&&r.reset(),!l.exist()&&l.hasSample()&&l.reset();var b=o.flvScriptSamples[o.flvScriptSamples.length-1],Z=null==b||null===(i=b.data)||void 0===i?void 0:i.onMetaData;return Z&&(null!=l&&l.exist()&&(Z.hasOwnProperty("duration")&&(l.duration=1e3*Z.duration),!l.width&&Z.hasOwnProperty("width")&&(l.width=Z.width),!l.height&&Z.hasOwnProperty("height")&&(l.height=Z.height)),null!=r&&r.exist()&&Z.hasOwnProperty("duration")&&(r.duration=1e3*Z.duration)),{videoTrack:l,audioTrack:r,metadataTrack:o}}},{key:"fix",value:function(e,t,i){return this._fixer.fix(e,t,i),{videoTrack:this.videoTrack,audioTrack:this.audioTrack,metadataTrack:this.metadataTrack}}},{key:"demuxAndFix",value:function(e,t,i,n,s){return this.demux(e,t,i,s),this.fix(n,t,i)}},{key:"_parseAudio",value:function(t,i){if(t.length){var n=(240&t[0])>>>4,s=this.audioTrack;if(n!==De&&n!==Je&&n!==Pe&&n!==Ee)return Be.warn("Unsupported sound format: ".concat(n)),void s.reset();if(n!==De&&n!==Ee){var a=(12&t[0])>>2,r=(2&t[0])>>1,l=1&t[0];s.sampleRate=e.AUDIO_RATE[a],s.sampleSize=r?16:8,s.channelCount=l+1}switch(n){case Je:case Pe:this._parseG711(t,i,n);break;case De:this._parseAac(t,i);break;case Ee:this._parseOpus(t,i)}}}},{key:"_parseOpus",value:function(e,t){var i=this.audioTrack,n=e[1];switch(i.codecType=te,n){case 0:var s=Ne.parseHeaderPackets(e.subarray(2));s?(i.codec=s.codec,i.channelCount=s.channelCount,i.sampleRate=s.sampleRate,i.config=s.config,i.sampleDuration=Ne.getFrameDuration([],i.timescale)):(i.reset(),Be.warn("Cannot parse AudioSpecificConfig",e));break;case 1:if(null==t)return;var a=new me(t,e.subarray(2),i.sampleDuration);i.samples.push(a);break;default:Be.warn("Unknown OpusPacketType: ".concat(n))}}},{key:"_parseG711",value:function(e,t,i){var n=this.audioTrack,s=e.subarray(1);if(!(s.byteLength<1)){var a=new me(t,s);n.codecType=7===i?$:ee,n.sampleRate=8e3,n.codec=n.codecType,n.samples.push(a)}}},{key:"_parseAac",value:function(e,t){var i=this.audioTrack;if(i.codecType=q,0===e[1]){var n=Ke.parseAudioSpecificConfig(e.subarray(2));n?(i.codec=n.codec,i.channelCount=n.channelCount,i.sampleRate=n.sampleRate,i.config=n.config,i.objectType=n.objectType,i.sampleRateIndex=n.samplingFrequencyIndex):(i.reset(),Be.warn("Cannot parse AudioSpecificConfig",e))}else if(1===e[1]){if(null==t)return;i.samples.push(new me(t,e.subarray(2)))}else Be.warn("Unknown AACPacketType: ".concat(e[1]))}},{key:"_parseVideo",value:function(e,t){var i=this;if(!(e.length<6)){var n=(240&e[0])>>>4,s=15&e[0],a=this.videoTrack;if(7!==s&&12!==s)return a.reset(),void Be.warn("Unsupported codecId: ".concat(s));var r=12===s;a.codecType=r?A:O;var l=e[1],o=(e[2]<<16|e[3]<<8|e[4])<<8>>8;if(0===l){var d=e.subarray(5),c=r?He.parseHEVCDecoderConfigurationRecord(d):Ce.parseAVCDecoderConfigurationRecord(d);if(c){var u=c.hvcC,m=c.sps,h=c.ppsArr,p=c.spsArr,y=c.vpsArr,b=c.nalUnitSize;u&&(a.hvcC=a.hvcC||u),m&&(a.codec=m.codec,a.width=m.width,a.height=m.height,a.sarRatio=m.sarRatio,a.fpsNum=m.fpsNum,a.fpsDen=m.fpsDen),p.length&&(a.sps=p),h.length&&(a.pps=h),y&&y.length&&(a.vps=y),b&&(a.nalUnitSize=b)}else Be.warn("Cannot parse ".concat(r?"HEVC":"AVC","DecoderConfigurationRecord"),e)}else if(1===l){var Z=Ie.parseAvcC(e.subarray(5),a.nalUnitSize);if((Z=this._checkAddMetaNalToUnits(r,Z,a))&&Z.length){var f=new ue(t+o,t,Z);if(this.seamlessLoadingSwitching&&t<a.lastKeyFrameDts)return;this.seamlessLoadingSwitching=!1,1===n&&(f.setToKeyframe(),a.lastKeyFrameDts=t),a.samples.push(f),Z.forEach((function(e){var n=r?e[0]>>>1&63:31&e[0];switch(n){case 5:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:if(!r&&5!==n||r&&5===n)break;f.setToKeyframe();break;case 6:case 39:case 40:if(!r&&6!==n||r&&6===n)break;i.metadataTrack.seiSamples.push(new ye(Ie.parseSEI(Ie.removeEPB(e),r),t+o))}})),f.keyframe&&this._gopId++,f.gopId=this._gopId}else Be.warn("Cannot parse NALUs",e)}else 2===l||Be.warn("Unknown AVCPacketType: ".concat(l))}}},{key:"_checkAddMetaNalToUnits",value:function(e,t,i){return e&&this._needAddMetaBeforeKeyFrameNal?t.map((function(e){return e[0]>>>1&63})).includes(32)?(this._needAddMetaBeforeKeyFrameNal=!1,t):(t.unshift(i.pps[0]),t.unshift(i.sps[0]),t.unshift(i.vps[0]),t.filter(Boolean)):(this._needAddMetaBeforeKeyFrameNal=!1,t)}},{key:"_parseScript",value:function(e,t){this.metadataTrack.flvScriptSamples.push(new pe(je.parse(e),t))}}],[{key:"probe",value:function(e){return 70===e[0]&&76===e[1]&&86===e[2]&&1===e[3]&&Ye(e,5)>=9}}]),e}();L(_e,"AUDIO_RATE",[5500,11e3,22e3,44e3]),new fe("TsDemuxer");var Qe=function(){function e(t,i,n){X(this,e),this.dv=new DataView(t),this.start=this.offset=i||this.dv.byteOffset,this.end=n?this.start+n:this.start+this.dv.byteLength}return v(e,[{key:"buffer",get:function(){return this.dv.buffer}},{key:"unreadLength",get:function(){return Math.max(this.end-this.offset,0)}},{key:"size",get:function(){return this.end-this.start}},{key:"readFloat",value:function(e){var t=0;switch(e){case 4:t=this.dv.getFloat32(this.offset);break;case 8:t=this.dv.getFloat64(this.offset);break;default:throw new Error("read ".concat(e,"-byte float is not supported"))}return this.offset+=e,t}},{key:"back",value:function(e){this.offset-=e}},{key:"skip",value:function(e){this.offset+=e}},{key:"readInt",value:function(e){var t=this.offset;switch(this.offset+=e,e){case 1:return this.dv.getInt8(t);case 2:return this.dv.getInt16(t);case 4:return this.dv.getInt32(t);default:throw new Error("read ".concat(e,"-byte integers is not supported"))}}},{key:"read",value:function(e){var t=this.offset;switch(this.offset+=e,e){case 1:return this.dv.getUint8(t);case 2:return this.dv.getUint16(t);case 3:return(this.dv.getUint16(t)<<8)+this.dv.getUint8(t+2);case 4:return this.dv.getUint32(t);default:return this.back(e-4),this.read(e-4)+this.dv.getUint32(t)*Math.pow(256,e-4)}}},{key:"write",value:function(e,t){var i=this.offset;switch(this.offset+=e,e){case 1:return this.dv.setUint8(i,t);case 2:return this.dv.setUint16(i,t);case 3:return this.dv.setUint8(i,t>>>16),this.dv.setUint16(i+1,65535&t);case 4:return this.dv.setUint32(i,t);default:throw new Error("write ".concat(e,"-byte integers is not supported"))}}},{key:"readToBuffer",value:function(e){var t;return t=this.offset||e?this.dv.buffer.slice(this.offset,e?this.offset+e:this.end):this.dv.buffer,this.offset+=t.byteLength,t}},{key:"readToUint8",value:function(e){var t=new Uint8Array(this.dv.buffer,this.offset,e||this.unreadLength);return this.offset+=t.byteLength,t}},{key:"readString",value:function(e){for(var t=0,i="";t<e;t++)i+=String.fromCharCode(this.dv.getUint8(this.offset)),this.offset++;return i}}],[{key:"fromUint8",value:function(t){return new e(t.buffer,t.byteOffset,t.byteLength)}},{key:"concatUint8s",value:function(e){var t=new Uint8Array(e.reduce((function(e,t){return e+t.byteLength}),0)),i=0;return e.forEach((function(e){t.set(e,i),i+=e.byteLength})),t}},{key:"concatUint8",value:function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return this.concatUint8s(t)}}]),e}(),Oe=function(){function e(t,i){X(this,e),this.offset=0,this.val=t,this.size=i}return v(e,[{key:"skip",value:function(e){this.offset+=e}},{key:"read",value:function(e){var t=this.size-this.offset-e;if(t>=0){var i=0,n=0;if(this.offset+=e,this.size>31){for(;n<e;n++)i+=Math.pow(2,n);return this.val/Math.pow(2,t)&i}for(;n<e;n++)i+=1<<n;return this.val>>>t&i}throw new Error("the number of the read operation exceeds the total length limit of bits")}}],[{key:"fromByte",value:function(t,i){return new e(t.read(i),i<<3)}}]),e}(),Ae=function(){function e(){X(this,e)}return v(e,null,[{key:"findBox",value:function(t,i){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=[];if(!t)return s;for(var a=0,r="",l=0;t.length>7;){if(a=Ye(t),r=String.fromCharCode.apply(null,t.subarray(4,8)),l=8,1===a?(a=ke(t,8),l+=8):a||(a=t.length),!i[0]||r===i[0]){var o=t.subarray(0,a);if(!(i.length<2))return e.findBox(o.subarray(l),i.slice(1),n+l);s.push({start:n,size:a,headerSize:l,type:r,data:o})}n+=a,t=t.subarray(a)}return s}},{key:"tfhd",value:function(e){return tt(e,!0,(function(e,t){e.trackId=Ye(t);var i=4,n=1&e.flags,s=2&e.flags,a=8&e.flags,r=16&e.flags,l=32&e.flags;n&&(i+=4,e.baseDataOffset=Ye(t,i),i+=4),s&&(e.sampleDescriptionIndex=Ye(t,i),i+=4),a&&(e.defaultSampleDuration=Ye(t,i),i+=4),r&&(e.defaultSampleSize=Ye(t,i),i+=4),l&&(e.defaultSampleFlags=Ye(t,i))}))}},{key:"sidx",value:function(e){return tt(e,!0,(function(e,t){var i=0;e.reference_ID=Ye(t,i),i+=4,e.timescale=Ye(t,i),i+=4,0===e.version?(e.earliest_presentation_time=Ye(t,i),i+=4,e.first_offset=Ye(t,i),i+=4):(e.earliest_presentation_time=ke(t,i),i+=8,e.first_offset=ke(t,i),i+=8),i+=2,e.references=[];var n=Ve(t,i);i+=2;for(var s=0;s<n;s++){var a={};e.references.push(a);var r=Ye(t,i);i+=4,a.reference_type=r>>31&1,a.referenced_size=2147483647&r,a.subsegment_duration=Ye(t,i),r=Ye(t,i+=4),i+=4,a.starts_with_SAP=r>>31&1,a.SAP_type=r>>28&7,a.SAP_delta_time=268435455&r}}))}},{key:"moov",value:function(t){return tt(t,!1,(function(t,i,n){t.mvhd=e.mvhd(e.findBox(i,["mvhd"],n)[0]),t.trak=e.findBox(i,["trak"],n).map((function(t){return e.trak(t)})),t.pssh=e.pssh(e.findBox(i,["pssh"],n)[0])}))}},{key:"mvhd",value:function(e){return tt(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Ye(t,16),e.duration=ke(t,20),i+=28):(e.timescale=Ye(t,8),e.duration=Ye(t,12),i+=16),e.nextTrackId=Ye(t,i+76)}))}},{key:"trak",value:function(t){return tt(t,!1,(function(t,i,n){t.tkhd=e.tkhd(e.findBox(i,["tkhd"],n)[0]),t.mdia=e.mdia(e.findBox(i,["mdia"],n)[0])}))}},{key:"tkhd",value:function(e){return tt(e,!0,(function(e,t){var i=Qe.fromUint8(t);1===e.version?(i.read(8),i.read(8),e.trackId=i.read(4),i.read(4),e.duration=i.read(8)):(i.read(4),i.read(4),e.trackId=i.read(4),i.read(4),e.duration=i.read(4)),i.skip(16),e.matrix=[];for(var n=0;n<36;n++)e.matrix.push(i.read(1));i.back(36);for(var s,a=[],r=0;r<3;r++)a.push(we(i.readInt(2),i.readInt(2))),a.push(we(i.readInt(2),i.readInt(2))),s=i.readInt(4),a.push(we(s>>30,1073741823&s));e.rotation=function(e){if(e.length<5)return 0;var t=Math.hypot(e[0],e[3]),i=Math.hypot(e[1],e[4]);return 0===t||0===i?0:180*Math.atan2(e[1]/i,e[0]/t)/Math.PI}(a),e.width=i.read(4),e.height=i.read(4)}))}},{key:"mdia",value:function(t){return tt(t,!1,(function(t,i,n){t.mdhd=e.mdhd(e.findBox(i,["mdhd"],n)[0]),t.hdlr=e.hdlr(e.findBox(i,["hdlr"],n)[0]),t.minf=e.minf(e.findBox(i,["minf"],n)[0])}))}},{key:"mdhd",value:function(e){return tt(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Ye(t,16),e.duration=ke(t,20),i+=28):(e.timescale=Ye(t,8),e.duration=Ye(t,12),i+=16);var n=Ve(t,i);e.language=String.fromCharCode(96+(n>>10&31),96+(n>>5&31),96+(31&n))}))}},{key:"hdlr",value:function(e){return tt(e,!0,(function(e,t){0===e.version&&(e.handlerType=String.fromCharCode.apply(null,t.subarray(4,8)))}))}},{key:"minf",value:function(t){return tt(t,!1,(function(t,i,n){t.vmhd=e.vmhd(e.findBox(i,["vmhd"],n)[0]),t.smhd=e.smhd(e.findBox(i,["smhd"],n)[0]),t.stbl=e.stbl(e.findBox(i,["stbl"],n)[0])}))}},{key:"vmhd",value:function(e){return tt(e,!0,(function(e,t){e.graphicsmode=Ve(t),e.opcolor=[Ve(t,2),Ve(t,4),Ve(t,6)]}))}},{key:"smhd",value:function(e){return tt(e,!0,(function(e,t){e.balance=Ve(t)}))}},{key:"stbl",value:function(t){return tt(t,!1,(function(t,i,n){var s,a,r;t.stsd=e.stsd(e.findBox(i,["stsd"],n)[0]),t.stts=e.stts(e.findBox(i,["stts"],n)[0]),t.ctts=e.ctts(e.findBox(i,["ctts"],n)[0]),t.stsc=e.stsc(e.findBox(i,["stsc"],n)[0]),t.stsz=e.stsz(e.findBox(i,["stsz"],n)[0]),t.stco=e.stco(e.findBox(i,["stco"],n)[0]),t.stco||(t.co64=e.co64(e.findBox(i,["co64"],n)[0]),t.stco=t.co64);var l=null===(s=t.stsd.entries[0])||void 0===s||null===(a=s.sinf)||void 0===a||null===(r=a.schi)||void 0===r?void 0:r.tenc.default_IV_size;t.stss=e.stss(e.findBox(i,["stss"],n)[0]),t.senc=e.senc(e.findBox(i,["senc"],n)[0],l)}))}},{key:"senc",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8;return tt(e,!0,(function(e,i){var n=0,s=Ye(i,n);n+=4,e.samples=[];for(var a=0;a<s;a++){for(var r={InitializationVector:[]},l=0;l<t;l++)r.InitializationVector[l]=i[n+l];if(n+=t,2&e.flags){r.subsamples=[];var o=Ve(i,n);n+=2;for(var d=0;d<o;d++){var c={};c.BytesOfClearData=Ve(i,n),n+=2,c.BytesOfProtectedData=Ye(i,n),n+=4,r.subsamples.push(c)}}e.samples.push(r)}}))}},{key:"pssh",value:function(e){return tt(e,!0,(function(e,t){for(var i=[],n=[],s=0,a=0;a<16;a++)n.push(nt(t[s+a]));if(s+=16,e.version>0){var r=Ye(t,s);s+=4;for(var l=0;l<(""+r).length;l++)for(var o=0;o<16;o++){var d=t[s];s+=1,i.push(nt(d))}}var c=Ye(t,s);e.data_size=c,s+=4,e.kid=i,e.system_id=n,e.buffer=t}))}},{key:"stsd",value:function(t){return tt(t,!0,(function(t,i,n){t.entryCount=Ye(i),t.entries=e.findBox(i.subarray(4),[],n+4).map((function(t){switch(t.type){case"av01":return e.av01(t);case"avc1":case"avc2":case"avc3":case"avc4":return e.avc1(t);case"hvc1":case"hev1":return e.hvc1(t);case"mp4a":return e.mp4a(t);case"alaw":case"ulaw":return e.alaw(t);case"enca":return tt(t,!1,(function(t,i,n){t.channelCount=Ve(i,16),t.samplesize=Ve(i,18),t.sampleRate=Ye(i,24)/65536,i=i.subarray(28),t.sinf=e.sinf(e.findBox(i,["sinf"],n)[0]),t.esds=e.esds(e.findBox(i,["esds"],n)[0])}));case"encv":return tt(t,!1,(function(t,i,n){t.width=Ve(i,24),t.height=Ve(i,26),t.horizresolution=Ye(i,28),t.vertresolution=Ye(i,32),i=i.subarray(78),t.sinf=e.sinf(e.findBox(i,["sinf"],n)[0]),t.avcC=e.avcC(e.findBox(i,["avcC"],n)[0]),t.hvcC=e.hvcC(e.findBox(i,["hvcC"],n)[0]),t.pasp=e.pasp(e.findBox(i,["pasp"],n)[0])}))}})).filter(Boolean)}))}},{key:"tenc",value:function(e){return tt(e,!1,(function(e,t){var i=6;e.default_IsEncrypted=t[i],i+=1,e.default_IV_size=t[i],i+=1,e.default_KID=[];for(var n=0;n<16;n++)e.default_KID.push(nt(t[i])),i+=1}))}},{key:"schi",value:function(t){return tt(t,!1,(function(t,i,n){t.tenc=e.tenc(e.findBox(i,["tenc"],n)[0])}))}},{key:"sinf",value:function(t){return tt(t,!1,(function(t,i,n){t.schi=e.schi(e.findBox(i,["schi"],n)[0]),t.frma=e.frma(e.findBox(i,["frma"],n)[0])}))}},{key:"frma",value:function(e){return tt(e,!1,(function(e,t){e.data_format="";for(var i=0;i<4;i++)e.data_format+=String.fromCharCode(t[i])}))}},{key:"colr",value:function(e){return tt(e,!1,(function(t,i){var n=Qe.fromUint8(i);t.data=e.data,t.colorType=n.readString(4),"nclx"===t.colorType?(t.colorPrimaries=n.read(2),t.transferCharacteristics=n.read(2),t.matrixCoefficients=n.read(2),t.fullRangeFlag=n.read(1)>>7):"rICC"!==t.colorType&&"prof"!==t.colorType||(t.iccProfile=i.readToUint8())}))}},{key:"av01",value:function(t){return tt(t,!1,(function(t,i,n){var s=$e(t,i),a=i.subarray(s);n+=s,t.av1C=e.av1C(e.findBox(a,["av1C"],n)[0]),t.colr=e.colr(e.findBox(a,["colr"],n)[0])}))}},{key:"av1C",value:function(e){return tt(e,!1,(function(t,i){t.data=e.data;var n,s=Qe.fromUint8(i),a=Oe.fromByte(s,4);t.marker=a.read(1),t.version=a.read(7),t.seqProfile=a.read(3),t.seqLevelIdx0=a.read(5),t.seqTier0=a.read(1),t.highBitdepth=a.read(1),t.twelveBit=a.read(1),t.monochrome=a.read(1),t.chromaSubsamplingX=a.read(1),t.chromaSubsamplingY=a.read(1),t.chromaSamplePosition=a.read(2),t.reserved=a.read(3),t.initialPresentationDelayPresent=a.read(1),t.initialPresentationDelayPresent?t.initialPresentationDelayMinusOne=a.read(4):t.initialPresentationDelayMinusOne=0,t.configOBUs=s.readToUint8(),2===t.seqLevelIdx0&&1===t.highBitdepth?n=1===t.twelveBit?"12":"10":t.seqProfile<=2&&(n=1===t.highBitdepth?"10":"08"),t.codec=["av01",t.seqProfile,(t.seqLevelIdx0<10?"0"+t.seqLevelIdx0:t.seqLevelIdx0)+(t.seqTier0?"H":"M"),n].join(".")}))}},{key:"avc1",value:function(t){return tt(t,!1,(function(t,i,n){var s=$e(t,i),a=i.subarray(s);n+=s,t.avcC=e.avcC(e.findBox(a,["avcC"],n)[0]),t.pasp=e.pasp(e.findBox(a,["pasp"],n)[0])}))}},{key:"avcC",value:function(e){return tt(e,!1,(function(t,i){t.data=e.data,t.configurationVersion=i[0],t.AVCProfileIndication=i[1],t.profileCompatibility=i[2],t.AVCLevelIndication=i[3],t.codec=Re([i[1],i[2],i[3]]),t.lengthSizeMinusOne=3&i[4],t.spsLength=31&i[5],t.sps=[];for(var n=6,s=0;s<t.spsLength;s++){var a=Ve(i,n);n+=2,t.sps.push(i.subarray(n,n+a)),n+=a}t.ppsLength=i[n],n+=1,t.pps=[];for(var r=0;r<t.ppsLength;r++){var l=Ve(i,n);n+=2,t.pps.push(i.subarray(n,n+=l)),n+=l}}))}},{key:"hvc1",value:function(t){return tt(t,!1,(function(t,i,n){var s=$e(t,i),a=i.subarray(s);n+=s,t.hvcC=e.hvcC(e.findBox(a,["hvcC"],n)[0]),t.pasp=e.pasp(e.findBox(a,["pasp"],n)[0])}))}},{key:"hvcC",value:function(e){return tt(e,!1,(function(t,i){t.data=e.data,t.codec="hev1.1.6.L93.B0",t.configurationVersion=i[0];var n=i[1];t.generalProfileSpace=n>>6,t.generalTierFlag=(32&n)>>5,t.generalProfileIdc=31&n,t.generalProfileCompatibility=Ye(i,2),t.generalConstraintIndicatorFlags=i.subarray(6,12),t.generalLevelIdc=i[12],t.avgFrameRate=Ve(i,19),t.numOfArrays=i[22],t.vps=[],t.sps=[],t.pps=[];for(var s=23,a=0,r=0,l=0,o=0;o<t.numOfArrays;o++){a=63&i[s],r=Ve(i,s+1),s+=3;for(var d,c=[],u=0;u<r;u++)l=Ve(i,s),s+=2,c.push(i.subarray(s,s+l)),s+=l;if(32===a)(d=t.vps).push.apply(d,c);else if(33===a){var m;(m=t.sps).push.apply(m,c)}else if(34===a){var h;(h=t.pps).push.apply(h,c)}}}))}},{key:"pasp",value:function(e){return tt(e,!1,(function(e,t){e.hSpacing=Ye(t),e.vSpacing=Ye(t,4)}))}},{key:"mp4a",value:function(t){return tt(t,!1,(function(t,i,n){var s=et(t,i);t.esds=e.esds(e.findBox(i.subarray(s),["esds"],n+s)[0])}))}},{key:"esds",value:function(e){return tt(e,!0,(function(e,t){e.codec="mp4a.";for(var i=0,n=0,s=0,a=0;t.length;){for(a=t[i=0],n=t[i+1],i+=2;128&n;)s=(127&n)<<7,n=t[i],i+=1;if(s+=127&n,3===a)t=t.subarray(i+3);else{if(4!==a){if(5===a){var r=e.config=t.subarray(i,i+s),l=(248&r[0])>>3;if(31===l&&r.length>=2&&(l=32+((7&r[0])<<3)+((224&r[1])>>5)),e.objectType=l,e.codec+=l.toString(16),/^mp4a/gi.test(e.codec)&&r.length>=2){var o=(7&r[0])<<1|(128&r[1])>>7;e.samplingFrequencyIndex=o,o<Ke.FREQ.length&&(e.sampleRate=Ke.FREQ[o])}return void("."===e.codec[e.codec.length-1]&&(e.codec=e.codec.substring(0,e.codec.length-1)))}return void("."===e.codec[e.codec.length-1]&&(e.codec=e.codec.substring(0,e.codec.length-1)))}e.codec+=(t[i].toString(16)+".").padStart(3,"0"),t=t.subarray(i+13)}}}))}},{key:"alaw",value:function(e){return tt(e,!1,(function(e,t){et(e,t)}))}},{key:"stts",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push({count:Ye(t,s),delta:Ye(t,s+4)}),s+=8;e.entryCount=i,e.entries=n}))}},{key:"ctts",value:function(e){return tt(e,!0,(function(e,t){var i=Ye(t),n=[],s=4;if(1===e.version)for(var a=0;a<i;a++)n.push({count:Ye(t,s),offset:Ye(t,s+4)}),s+=8;else for(var r=0;r<i;r++)n.push({count:Ye(t,s),offset:-(1+~Ye(t,s+4))}),s+=8;e.entryCount=i,e.entries=n}))}},{key:"stsc",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push({firstChunk:Ye(t,s),samplesPerChunk:Ye(t,s+4),sampleDescriptionIndex:Ye(t,s+8)}),s+=12;e.entryCount=i,e.entries=n}))}},{key:"stsz",value:function(e){return tt(e,!0,(function(e,t){var i=Ye(t),n=Ye(t,4),s=[];if(!i)for(var a=8,r=0;r<n;r++)s.push(Ye(t,a)),a+=4;e.sampleSize=i,e.sampleCount=n,e.entrySizes=s}))}},{key:"stco",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push(Ye(t,s)),s+=4;e.entryCount=i,e.entries=n}))}},{key:"co64",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push(ke(t,s)),s+=8;e.entryCount=i,e.entries=n}))}},{key:"stss",value:function(e){return tt(e,!0,(function(e,t){for(var i=Ye(t),n=[],s=4,a=0;a<i;a++)n.push(Ye(t,s)),s+=4;e.entryCount=i,e.entries=n}))}},{key:"moof",value:function(t){return tt(t,!1,(function(t,i,n){t.mfhd=e.mfhd(e.findBox(i,["mfhd"],n)[0]),t.traf=e.findBox(i,["traf"],n).map((function(t){return e.traf(t)}))}))}},{key:"mfhd",value:function(e){return tt(e,!0,(function(e,t){e.sequenceNumber=Ye(t)}))}},{key:"traf",value:function(t){return tt(t,!1,(function(t,i,n){t.tfhd=e.tfhd(e.findBox(i,["tfhd"],n)[0]),t.tfdt=e.tfdt(e.findBox(i,["tfdt"],n)[0]),t.trun=e.trun(e.findBox(i,["trun"],n)[0])}))}},{key:"trun",value:function(e){return tt(e,!0,(function(e,t){var i=e.version,n=e.flags,s=t.length,a=e.sampleCount=Ye(t),r=4;if(s>r&&1&n&&(e.dataOffset=-(1+~Ye(t,r)),r+=4),s>r&&4&n&&(e.firstSampleFlags=Ye(t,r),r+=4),e.samples=[],s>r)for(var l,o=0;o<a;o++)l={},256&n&&(l.duration=Ye(t,r),r+=4),512&n&&(l.size=Ye(t,r),r+=4),1024&n&&(l.flags=Ye(t,r),r+=4),2048&n&&(l.cts=i?-(1+~Ye(t,r+4)):Ye(t,r),r+=4),e.samples.push(l)}))}},{key:"tfdt",value:function(e){return tt(e,!0,(function(e,t){1===e.version?e.baseMediaDecodeTime=ke(t):e.baseMediaDecodeTime=Ye(t)}))}},{key:"probe",value:function(t){return!!e.findBox(t,["ftyp"])}},{key:"parseSampleFlags",value:function(e){return{isLeading:(12&e[0])>>>2,dependsOn:3&e[0],isDependedOn:(192&e[1])>>>6,hasRedundancy:(48&e[1])>>>4,paddingValue:(14&e[1])>>>1,isNonSyncSample:1&e[1],degradationPriority:e[2]<<8|e[3]}}},{key:"moovToTrack",value:function(e,t,i){var n,s,a=e.trak;if(a&&a.length){var r=a.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),l=a.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(r&&t){var o,d,c,u,m,h,p,y=t,b=null===(o=r.tkhd)||void 0===o?void 0:o.trackId;null!=b&&(y.id=r.tkhd.trackId),y.tkhdDuration=r.tkhd.duration,y.mvhdDurtion=e.mvhd.duration,y.mvhdTimecale=e.mvhd.timescale,y.timescale=y.formatTimescale=r.mdia.mdhd.timescale,y.duration=r.mdia.mdhd.duration||y.mvhdDurtion/y.mvhdTimecale*y.timescale,y.rotation=r.tkhd.rotation,y.matrix=r.tkhd.matrix;var Z,f,X,W,v,L,G,x,S=r.mdia.minf.stbl.stsd.entries[0];if(y.width=S.width,y.height=S.height,S.pasp&&(y.sarRatio=[S.pasp.hSpacing,S.pasp.vSpacing]),S.av1C)y.codecType=Q,y.codec=S.av1C.codec,y.av1C=S.av1C.data,S.colr&&(y.colr=S.colr.data);else if(S.hvcC)y.codecType=A,y.codec=S.hvcC.codec,y.vps=S.hvcC.vps,y.sps=S.hvcC.sps,y.pps=S.hvcC.pps,y.hvcC=S.hvcC.data;else{if(!S.avcC)throw new Error("unknown video stsd entry");y.codec=S.avcC.codec,y.sps=S.avcC.sps,y.pps=S.avcC.pps}if(y.present=!0,y.ext={},y.ext.stss=null===(d=r.mdia)||void 0===d||null===(c=d.minf)||void 0===c||null===(u=c.stbl)||void 0===u?void 0:u.stss,y.ext.ctts=null===(m=r.mdia)||void 0===m||null===(h=m.minf)||void 0===h||null===(p=h.stbl)||void 0===p?void 0:p.ctts,S&&"encv"===S.type)y.isVideoEncryption=!0,S.default_KID=null===(Z=S.sinf)||void 0===Z||null===(f=Z.schi)||void 0===f?void 0:f.tenc.default_KID,S.default_IsEncrypted=null===(X=S.sinf)||void 0===X||null===(W=X.schi)||void 0===W?void 0:W.tenc.default_IsEncrypted,S.default_IV_size=null===(v=S.sinf)||void 0===v||null===(L=v.schi)||void 0===L?void 0:L.tenc.default_IV_size,y.videoSenc=r.mdia.minf.stbl.senc&&r.mdia.minf.stbl.senc.samples,S.data_format=null===(G=S.sinf)||void 0===G||null===(x=G.frma)||void 0===x?void 0:x.data_format,y.useEME=e.useEME,y.kidValue=e.kidValue,y.pssh=e.pssh,y.encv=S}if(l&&i){var g,V,Y,k,R,T,M,w,K,I=i,C=null===(g=l.tkhd)||void 0===g?void 0:g.trackId;null!=C&&(I.id=l.tkhd.trackId),I.tkhdDuration=l.tkhd.duration,I.mvhdDurtion=e.mvhd.duration,I.mvhdTimecale=e.mvhd.timescale,I.timescale=I.formatTimescale=l.mdia.mdhd.timescale,I.duration=l.mdia.mdhd.duration||I.mvhdDurtion/I.mvhdTimecale*I.timescale;var H,N,F,z,U,j,J,P,D=l.mdia.minf.stbl.stsd.entries[0];switch(I.sampleSize=D.sampleSize,I.sampleRate=function(e){var t=0;t="mp4a"===e.type?e.sampleRate>0?e.sampleRate:e.esds.sampleRate:e.sampleRate;return t||0}(D),I.channelCount=D.channelCount,I.present=!0,D.type){case"alaw":I.codecType=I.codec=$,I.sampleRate=8e3;break;case"ulaw":I.codecType=I.codec=ee,I.sampleRate=8e3;break;default:I.sampleDuration=Ke.getFrameDuration(I.sampleRate,I.timescale),I.sampleRateIndex=Ke.getRateIndexByRate(I.sampleRate),I.objectType=(null===(n=D.esds)||void 0===n?void 0:n.objectType)||2,D.esds&&(I.config=Array.from(D.esds.config)),I.codec=(null===(s=D.esds)||void 0===s?void 0:s.codec)||"mp4a.40.2"}if(I.sampleDuration=Ke.getFrameDuration(I.sampleRate,I.timescale),I.objectType=(null===(V=D.esds)||void 0===V?void 0:V.objectType)||2,D.esds&&(D.esds.config?I.config=Array.from(D.esds.config):console.warn("esds config is null")),I.codec=(null===(Y=D.esds)||void 0===Y?void 0:Y.codec)||"mp4a.40.2",I.sampleRateIndex=Ke.getRateIndexByRate(I.sampleRate),I.ext={},I.ext.stss=null===(k=l.mdia)||void 0===k||null===(R=k.minf)||void 0===R||null===(T=R.stbl)||void 0===T?void 0:T.stss,I.ext.ctts=null===(M=l.mdia)||void 0===M||null===(w=M.minf)||void 0===w||null===(K=w.stbl)||void 0===K?void 0:K.ctts,I.present=!0,D&&"enca"===D.type)I.isAudioEncryption=!0,D.data_format=null===(H=D.sinf)||void 0===H||null===(N=H.frma)||void 0===N?void 0:N.data_format,D.default_KID=null===(F=D.sinf)||void 0===F||null===(z=F.schi)||void 0===z?void 0:z.tenc.default_KID,D.default_IsEncrypted=null===(U=D.sinf)||void 0===U||null===(j=U.schi)||void 0===j?void 0:j.tenc.default_IsEncrypted,D.default_IV_size=null===(J=D.sinf)||void 0===J||null===(P=J.schi)||void 0===P?void 0:P.tenc.default_IV_size,I.audioSenc=l.mdia.minf.stbl.senc&&l.mdia.minf.stbl.senc.samples,I.useEME=e.useEME,I.kidValue=e.kidValue,I.enca=D}if(i&&(i.isVideoEncryption=!!t&&t.isVideoEncryption),t&&(t.isAudioEncryption=!!i&&i.isAudioEncryption),null!=t&&t.encv||null!=i&&i.enca){var E,B,_=null==t||null===(E=t.encv)||void 0===E?void 0:E.default_KID,O=null==i||null===(B=i.enca)||void 0===B?void 0:B.default_KID,q=_||O?(_||O).join(""):null;t&&(t.kid=q),i&&(i.kid=q)}return t&&(t.flags=3841),i&&(i.flags=1793),{videoTrack:t,audioTrack:i}}}},{key:"evaluateDefaultDuration",value:function(e,t,i){var n,s=null==t||null===(n=t.samples)||void 0===n?void 0:n.length;return s?1024*s/t.timescale*e.timescale/i:1024}},{key:"moofToSamples",value:function(t,i,n){var s={};return t.mfhd&&(i&&(i.sequenceNumber=t.mfhd.sequenceNumber),n&&(n.sequenceNumber=t.mfhd.sequenceNumber)),t.traf.forEach((function(t){var a=t.tfhd,r=t.tfdt,l=t.trun;if(a&&l){r&&(i&&i.id===a.trackId&&(i.baseMediaDecodeTime=r.baseMediaDecodeTime),n&&n.id===a.trackId&&(n.baseMediaDecodeTime=r.baseMediaDecodeTime));var o=a.defaultSampleSize||0,d=a.defaultSampleDuration||e.evaluateDefaultDuration(i,n,l.samples.length||l.sampleCount),c=l.dataOffset||0,u=0,m=-1;if(!l.samples.length&&l.sampleCount){s[a.trackId]=[];for(var h=0;h<l.sampleCount;h++)s[a.trackId].push({offset:c,dts:u,duration:d,size:o}),u+=d,c+=o}else s[a.trackId]=l.samples.map((function(e,t){return(e={offset:c,dts:u,pts:u+(e.cts||0),duration:e.duration||d,size:e.size||o,gopId:m,keyframe:0===t||null!==e.flags&&void 0!==e.flags&&(65536&e.flags)>>>0!=65536}).keyframe&&(m++,e.gopId=m),u+=e.duration,c+=e.size,e}))}})),s}},{key:"moovToSamples",value:function(e){var t=e.trak;if(t&&t.length){var i=t.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),n=t.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(i||n){var s,a;if(i){var r,l,o=null===(r=i.mdia)||void 0===r||null===(l=r.minf)||void 0===l?void 0:l.stbl;if(!o)return;var d=o.stts,c=o.stsc,u=o.stsz,m=o.stco,h=o.stss,p=o.ctts;if(!(d&&c&&u&&m&&h))return;s=qe(d,c,u,m,p,h)}if(n){var y,b,Z,f=null===(y=n.mdia)||void 0===y||null===(b=y.minf)||void 0===b?void 0:b.stbl;if(!f)return;var X=null===(Z=n.mdia.mdhd)||void 0===Z?void 0:Z.timescale,W=f.stts,v=f.stsc,L=f.stsz,G=f.stco;if(!(X&&W&&v&&L&&G))return;a=qe(W,v,L,G)}return{videoSamples:s,audioSamples:a}}}}}]),e}();function qe(e,t,i,n,s,a){var r,l,o,d=[],c=null==s?void 0:s.entries,u=t.entries,m=n.entries,h=i.entrySizes,p=null==a?void 0:a.entries;p&&(r={},p.forEach((function(e){r[e-1]=!0}))),c&&(l=[],c.forEach((function(e){for(var t=e.count,i=e.offset,n=0;n<t;n++)l.push(i)})));var y=-1,b=0,Z=0,f=0,X=0,W=0,v=u[0].samplesPerChunk,L=u[1]?u[1].firstChunk-1:1/0;return e.entries.forEach((function(e){for(var t=e.count,n=e.delta,s=0;s<t;s++)o={dts:b,duration:n,size:h[Z]||i.sampleSize,offset:m[f]+W,index:Z},p&&(o.keyframe=r[Z],o.keyframe&&y++,o.gopId=y),l&&Z<l.length&&(o.pts=o.dts+l[Z]),d.push(o),b+=n,++Z<v?W+=o.size:(f++,W=0,f>=L&&(X++,L=u[X+1]?u[X+1].firstChunk-1:1/0),v+=u[X].samplesPerChunk)})),d}function $e(e,t){return e.dataReferenceIndex=Ve(t,6),e.width=Ve(t,24),e.height=Ve(t,26),e.horizresolution=Ye(t,28),e.vertresolution=Ye(t,32),e.frameCount=Ve(t,40),e.depth=Ve(t,74),78}function et(e,t){return e.dataReferenceIndex=Ve(t,6),e.channelCount=Ve(t,16),e.sampleSize=Ve(t,18),e.sampleRate=Ye(t,24)/65536,28}function tt(e,t,i){if(e){if(e.size!==e.data.length)throw new Error("box ".concat(e.type," size !== data.length"));var n={start:e.start,size:e.size,headerSize:e.headerSize,type:e.type};return t&&(n.version=e.data[e.headerSize],n.flags=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(e[t]<<16)+(e[t+1]<<8)+(e[t+2]||0)}(e.data,e.headerSize+1),n.headerSize+=4),i(n,e.data.subarray(n.headerSize),n.start+n.headerSize),n}}var it=function(e,t,i){for(var n=String(i),s=t>>0,a=Math.ceil(s/n.length),r=[],l=String(e);a--;)r.push(n);return r.join("").substring(0,s-l.length)+l},nt=function(){for(var e=[],t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];return i.forEach((function(t){e.push(it(Number(t).toString(16),2,0))})),e[0]},st=function(){function e(t,i,n){X(this,e),L(this,"__loadedMoofWraps",[]),L(this,"__lastRemainData",null),L(this,"__lastRemainDataStart",0),L(this,"__nextMoofStart",-1),this.videoTrack=t||new de,this.audioTrack=i||new ce,this.metadataTrack=n||new be}return v(e,[{key:"demuxPart",value:function(e,t,i){var n=this,s=this.videoTrack,a=this.audioTrack,r=s.exist(),l=a.exist(),o=/av01/.test(s.codec);s.samples=[],a.samples=[];var d=e,c=t;if(this.__lastRemainData){var u=this.__lastRemainDataStart+this.__lastRemainData.byteLength;if(t<=u&&t>this.__lastRemainDataStart&&t+e.byteLength>u){var m=e.subarray(this.__lastRemainData.byteLength+this.__lastRemainDataStart-t);d=Se(this.__lastRemainData,m),c=this.__lastRemainDataStart,this.__lastRemainData=null}else this.__lastRemainData=null,this.__lastRemainDataStart=0,this.__nextMoofStart=-1}if(!i){var h=Ae.findBox(d,["moov"])[0];if(!h)throw new Error("cannot found moov box");i=Ae.moov(h)}if(d){var p=c+d.byteLength;r||l||Ae.moovToTrack(i,s,a);var y=[];this.__nextMoofStart<0?Ae.findBox(d,["moof"],c).forEach((function(e){return y.push(e)})):this.__nextMoofStart>=c&&this.__nextMoofStart<=p-8&&Ae.findBox(d.subarray(this.__nextMoofStart-c),["moof"],this.__nextMoofStart).forEach((function(e){return y.push(e)})),y.filter((function(e){return e.size<=e.data.length})).forEach((function(e){var t=Ae.moof(e);n.__nextMoofStart=t.start+Math.max.apply(Math,C(t.traf.map((function(e){return e.trun.samples.reduce((function(e,t){return e+t.size}),e.trun.dataOffset||0)})))),n.__loadedMoofWraps.push({start:t.start,nextMoofStart:n.__nextMoofStart,moof:t}),n.__loadedMoofWraps.sort((function(e,t){return e.start-t.start}))}));var b,Z=F(this.__loadedMoofWraps);try{var f=function(){var e=b.value;if(e.start>p||e.nextMoofStart<c)return"continue";var t,i=e.start,r=Ae.moofToSamples(e.moof,s,a),l=s.baseMediaDecodeTime,u=a.baseMediaDecodeTime;Object.keys(r).forEach((function(e){s.id==e?r[e].some((function(e){var a=e.offset+=i;if(!(a<c)){if(a+e.size>p)return!0;var r=new ue((e.pts||e.dts)+l,e.dts+l);r.duration=e.duration,r.gopId=e.gopId,e.keyframe&&r.setToKeyframe();var u=d.subarray(a-c,a-c+e.size);if(r.data=u,!o)for(var m=0,h=u.length-1;m<h;)t=Ye(u,m),m+=4,r.units.push(u.subarray(m,m+t)),m+=t;n.__lastRemainDataStart=a+e.size,s.samples.push(r)}})):a.id==e&&r[e].some((function(e){var t=e.offset+i;if(!(t<c)){if(t+e.size>p)return!0;var s=d.subarray(t-c,t-c+e.size);a.samples.push(new me(e.dts+u,s,e.duration)),n.__lastRemainDataStart=t+e.size}}))}))};for(Z.s();!(b=Z.n()).done;)f()}catch(X){Z.e(X)}finally{Z.f()}}return this.__lastRemainDataStart>c&&this.__lastRemainDataStart<d.byteLength+c?this.__lastRemainData=d.subarray(this.__lastRemainDataStart-c):(this.__lastRemainData=d,this.__lastRemainDataStart=c),s.samples.length&&(s.baseMediaDecodeTime=s.samples[0].pts),a.samples.length&&(a.baseMediaDecodeTime=a.samples[0].pts),{videoTrack:s,audioTrack:a,metadataTrack:this.metadataTrack}}},{key:"demux",value:function(e,t){var i=this.videoTrack,n=this.audioTrack,s=i.exist(),a=n.exist();if(i.samples=[],n.samples=[],t){if(!a){var r=Ae.findBox(t,["moov"])[0];if(!r)throw new Error("cannot found moov box");Ae.moovToTrack(Ae.moov(r),null,n)}var l=Ae.findBox(t,["moof"])[0];if(l){var o=Ae.moofToSamples(Ae.moof(l),null,n)[n.id],d=n.baseMediaDecodeTime;if(o){var c=l.start;o.map((function(e){e.offset+=c;var i=t.subarray(e.offset,e.offset+e.size);n.samples.push(new me(e.dts+d,i,e.duration))}))}}}if(e){if(!s&&!a){var u=Ae.findBox(e,["moov"])[0];if(!u)throw new Error("cannot found moov box");Ae.moovToTrack(Ae.moov(u),i,n)}var m=Ae.findBox(e,["moof"])[0];if(m){var h,p=Ae.moofToSamples(Ae.moof(m),i,n),y=i.baseMediaDecodeTime,b=n.baseMediaDecodeTime,Z=m.start;Object.keys(p).forEach((function(t){i.id==t?p[t].map((function(t){t.offset+=Z;var n=new ue((t.pts||t.dts)+y,t.dts+y);n.duration=t.duration,n.gopId=t.gopId,t.keyframe&&n.setToKeyframe();var s=e.subarray(t.offset,t.offset+t.size);n.data=s;for(var a=0,r=s.length-1;a<r;)h=Ye(s,a),a+=4,n.units.push(s.subarray(a,a+h)),a+=h;i.samples.push(n)})):n.id==t&&p[t].map((function(t){t.offset+=Z;var i=e.subarray(t.offset,t.offset+t.size);n.samples.push(new me(t.dts+b,i,t.duration))}))}))}}return{videoTrack:i,audioTrack:n,metadataTrack:this.metadataTrack}}},{key:"reset",value:function(){this.videoTrack.reset(),this.audioTrack.reset(),this.metadataTrack.reset()}}],[{key:"probe",value:function(e){return Ae.probe(e)}}]),e}();function at(e){for(var t=0,i=arguments.length,n=new Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];n.forEach((function(e){t+=e.length}));var a=new e(t),r=0;return n.forEach((function(e){a.set(e,r),r+=e.length})),a}var rt=function(){function e(){X(this,e),this.buffer=new Uint8Array(0)}return v(e,[{key:"write",value:function(){for(var e=this,t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];i.forEach((function(t){t?e.buffer=at(Uint8Array,e.buffer,t):window.console.warn(t)}))}}],[{key:"writeUint16",value:function(e){return new Uint8Array([e>>8&255,255&e])}},{key:"writeUint32",value:function(e){return new Uint8Array([e>>24,e>>16&255,e>>8&255,255&e])}}]),e}(),lt=Math.pow(2,32)-1,ot=function(){function e(){X(this,e)}return v(e,null,[{key:"box",value:function(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];var s=8+(i=i.filter(Boolean)).reduce((function(e,t){return e+t.byteLength}),0),a=new Uint8Array(s);a[0]=s>>24&255,a[1]=s>>16&255,a[2]=s>>8&255,a[3]=255&s,a.set(e,4);var r=8;return i.forEach((function(e){a.set(e,r),r+=e.byteLength})),a}},{key:"ftyp",value:function(t){return t.find((function(e){return e.type===E&&e.codecType===A}))?e.FTYPHEV1:e.FTYPAVC1}},{key:"initSegment",value:function(t){return Se(e.ftyp(t),e.moov(t))}},{key:"pssh",value:function(t){var i=new Uint8Array([1,0,0,0].concat([16,119,239,236,192,178,77,2,172,227,60,30,82,226,251,75],[0,0,0,1],Me(t.kid),[0,0,0,0]));return e.box(e.types.pssh,i)}},{key:"moov",value:function(t){if(t[0].useEME&&(t[0].encv||t[0].enca)){t[0].pssh||(t[0].pssh={kid:t[0].kid});var i=this.pssh(t[0].pssh);return e.box.apply(e,[e.types.moov,e.mvhd(t[0].mvhdDurtion||t[0].duration,t[0].mvhdTimecale||t[0].timescale),e.mvex(t)].concat(C(t.map((function(t){return e.trak(t)}))),[i]))}return e.box.apply(e,[e.types.moov,e.mvhd(t[0].mvhdDurtion||t[0].duration,t[0].mvhdTimecale||t[0].timescale)].concat(C(t.map((function(t){return e.trak(t)}))),[e.mvex(t)]))}},{key:"mvhd",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e4,n=e.box(e.types.mvhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i,t>>24&255,t>>16&255,t>>8&255,255&t,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]));return n}},{key:"trak",value:function(t){return e.box(e.types.trak,e.tkhd(t.id,t.tkhdDuration||0,t.width,t.height),e.mdia(t))}},{key:"tkhd",value:function(t,i){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,n>>8&255,255&n,0,0,s>>8&255,255&s,0,0]));return a}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.duration,t.timescale),e.hdlr(t.type),e.minf(t))}},{key:"mdhd",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e4,n=e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i,t>>24&255,t>>16&255,t>>8&255,255&t,85,196,0,0]));return n}},{key:"hdlr",value:function(t){return e.box(e.types.hdlr,e.HDLR_TYPES[t])}},{key:"minf",value:function(t){return e.box(e.types.minf,t.type===E?e.VMHD:e.SMHD,e.DINF,e.stbl(t))}},{key:"stbl",value:function(t){var i=[];return t&&t.ext&&t.ext.stss&&i.push(e.stss(t.ext.stss.entries)),e.box(e.types.stbl,e.stsd(t),e.STTS,i[0],e.STSC,e.STSZ,e.STCO)}},{key:"stsd",value:function(t){var i;return i="audio"===t.type?t.useEME&&t.enca?e.enca(t):t.codecType===te?e.opus(t):e.mp4a(t):t.useEME&&t.encv?e.encv(t):t.av1C?e.av01(t):e.avc1hev1(t),e.box(e.types.stsd,new Uint8Array([0,0,0,0,0,0,0,1]),i)}},{key:"enca",value:function(t){var i=t.enca.channelCount,n=t.enca.sampleRate,s=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,i,0,16,0,0,0,0,n>>8&255,255&n,0,0]),a=e.esds(t.config),r=e.sinf(t.enca);return e.box(e.types.enca,s,a,r)}},{key:"encv",value:function(t){var i,n,s=t.sps.length>0?t.sps[0]:[],a=t.pps.length>0?t.pps[0]:[],r=t.width,l=t.height,o=t.sarRatio[0],d=t.sarRatio[1],c=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,r>>8&255,255&r,l>>8&255,255&l,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),u=new Uint8Array((i=(n=[1,s[1],s[2],s[3],255,225,s.length>>>8&255,255&s.length]).concat.apply(n,C(s)).concat([1,a.length>>>8&255,255&a.length])).concat.apply(i,C(a))),m=new Uint8Array([0,0,88,57,0,15,200,192,0,4,86,72]),h=e.sinf(t.encv),p=new Uint8Array([o>>24,o>>16&255,o>>8&255,255&o,d>>24,d>>16&255,d>>8&255,255&d]);return e.box(e.types.encv,c,e.box(e.types.avcC,u),e.box(e.types.btrt,m),h,e.box(e.types.pasp,p))}},{key:"schi",value:function(t){var i=new Uint8Array([]),n=e.tenc(t);return e.box(e.types.schi,i,n)}},{key:"tenc",value:function(t){var i=new Uint8Array([0,0,0,0,0,0,255&t.default_IsEncrypted,255&t.default_IV_size].concat(Me(t.default_KID)));return e.box(e.types.tenc,i)}},{key:"sinf",value:function(t){var i=new Uint8Array([]),n=new Uint8Array([t.data_format.charCodeAt(0),t.data_format.charCodeAt(1),t.data_format.charCodeAt(2),t.data_format.charCodeAt(3)]),s=new Uint8Array([0,0,0,0,99,101,110,99,0,1,0,0]),a=e.schi(t);return e.box(e.types.sinf,i,e.box(e.types.frma,n),e.box(e.types.schm,s),a)}},{key:"av01",value:function(t){return e.box(e.types.av01,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,t.width>>8&255,255&t.width,t.height>>8&255,255&t.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),t.av1C,t.colr)}},{key:"avc1hev1",value:function(t){var i=t.codecType===A,n=i?e.types.hvc1:e.types.avc1,s=i?e.hvcC(t):e.avcC(t),a=[new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,t.width>>8&255,255&t.width,t.height>>8&255,255&t.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),s];return i?a.push(e.box(e.types.fiel,new Uint8Array([1,0]))):t.sarRatio&&t.sarRatio.length>1&&a.push(e.pasp(t.sarRatio)),e.box.apply(e,[n].concat(a))}},{key:"avcC",value:function(t){var i,n,s,a=[],r=[];return t.sps.forEach((function(e){s=e.byteLength,a.push(s>>>8&255),a.push(255&s),a.push.apply(a,C(e))})),t.pps.forEach((function(e){s=e.byteLength,r.push(s>>>8&255),r.push(255&s),r.push.apply(r,C(e))})),e.box(e.types.avcC,new Uint8Array((i=(n=[1,a[3],a[4],a[5],255,224|t.sps.length]).concat.apply(n,a).concat([t.pps.length])).concat.apply(i,r)))}},{key:"hvcC",value:function(t){var i=t.hvcC;if(i instanceof ArrayBuffer||i instanceof Uint8Array)return i;var n,s=t.vps,a=t.sps,r=t.pps;if(i){var l=i.generalProfileCompatibilityFlags,o=i.generalConstraintIndicatorFlags,d=(s.length&&1)+(a.length&&1)+(r.length&&1);n=[1,i.generalProfileSpace<<6|i.generalTierFlag<<5|i.generalProfileIdc,l>>>24,l>>>16,l>>>8,l,o[0],o[1],o[2],o[3],o[4],o[5],i.generalLevelIdc,240,0,252,252|i.chromaFormatIdc,248|i.bitDepthLumaMinus8,248|i.bitDepthChromaMinus8,0,0,i.numTemporalLayers<<3|i.temporalIdNested<<2|3,d];var c=function(e){var t;n.push(e.length>>8,e.length),(t=n).push.apply(t,C(e))};s.length&&(n.push(160,0,s.length),s.forEach(c)),a.length&&(n.push(161,0,a.length),a.forEach(c)),r.length&&(n.push(162,0,r.length),r.forEach(c))}else n=[1,1,96,0,0,0,144,0,0,0,0,0,93,240,0,252,253,248,248,0,0,15,3,160,0,1,0,24,64,1,12,1,255,255,1,96,0,0,3,0,144,0,0,3,0,0,3,0,93,153,152,9,161,0,1,0,45,66,1,1,1,96,0,0,3,0,144,0,0,3,0,0,3,0,93,160,2,128,128,45,22,89,153,164,147,43,154,128,128,128,130,0,0,3,0,2,0,0,3,0,50,16,162,0,1,0,7,68,1,193,114,180,98,64];return e.box(e.types.hvcC,new Uint8Array(n))}},{key:"pasp",value:function(t){var i=I(t,2),n=i[0],s=i[1];return e.box(e.types.pasp,new Uint8Array([n>>24,n>>16&255,n>>8&255,255&n,s>>24,s>>16&255,s>>8&255,255&s]))}},{key:"mp4a",value:function(t){return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,t.sampleRate>>8&255,255&t.sampleRate,0,0]),t.config.length?e.esds(t.config):void 0)}},{key:"esds",value:function(t){var i=t.length;return e.box(e.types.esds,new Uint8Array([0,0,0,0,3,23+i,0,0,0,4,15+i,64,21,0,6,0,0,0,218,192,0,0,218,192,5].concat([i]).concat(t).concat([6,1,2])))}},{key:"opus",value:function(t){var i=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,t.sampleRate>>8&255,255&t.sampleRate,0,0]),n=t.config.length?e.dOps(t):[];return e.box(e.types.Opus,i,n)}},{key:"dOps",value:function(t){if(t.config)return t.config[4]=t.sampleRate>>>24&255,t.config[5]=t.sampleRate>>>16&255,t.config[6]=t.sampleRate>>>8&255,t.config[7]=255&t.sampleRate,e.box(e.types.dOps,t.config)}},{key:"mvex",value:function(t){return e.box.apply(e,[e.types.mvex].concat(C(t.map((function(t){return e.trex(t.id)})))))}},{key:"trex",value:function(t){return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trex1",value:function(t){return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,2,0,0,0,0,0,0,1,0,0]))}},{key:"trex2",value:function(t){return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,4,0,0,0,0,0,2,0,0,0]))}},{key:"moof",value:function(t){return e.box.apply(e,[e.types.moof,e.mfhd(t[0].samples?t[0].samples[0].gopId:0)].concat(C(t.map((function(t){return e.traf(t)})))))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"traf",value:function(t){var i=e.tfhd(t.id),n=e.tfdt(t,t.baseMediaDecodeTime),s=0;if(t.isVideo&&t.videoSenc&&t.videoSenc.forEach((function(e){s+=8,e.subsamples&&e.subsamples.length&&(s+=2,s+=6*e.subsamples.length)})),t.videoSencLength=s,t.useEME&&(t.isVideoEncryption||t.isAudioEncryption)){if(t.isVideoEncryption){if(t.isVideo){var a=e.saiz(t),r=e.saio(t),l=e.trun1(t),o=e.senc(t);return e.box(e.types.traf,i,n,a,r,l,o)}if(t.isAudioEncryption){var d=e.sbgp(),c=e.saiz(t),u=e.saio(t),m=e.senc(t),h=e.trun1(t);return e.box(e.types.traf,i,n,d,c,u,m,h)}var p=e.sbgp(),y=e.trun1(t);return e.box(e.types.traf,i,n,p,y)}if(t.isVideo){var b=e.trun1(t);return e.box(e.types.traf,i,n,b)}var Z=e.sbgp(),f=e.saiz(t),X=e.saio(t),W=e.senc(t),v=e.trun1(t);return e.box(e.types.traf,i,n,Z,f,X,W,v)}var L=e.sdtp(t);return e.box(e.types.traf,i,n,L,e.trun(t.samples,L.byteLength+76))}},{key:"sdtp",value:function(t){var i=new rt;return t.samples.forEach((function(e){i.write(new Uint8Array(t.isVideo?[e.keyframe?32:16]:[16]))})),e.box(e.types.sdtp,this.extension(0,0),i.buffer)}},{key:"trun1",value:function(t){var i=new rt,n=rt.writeUint32(t.samples.length),s=null;if(t.isVideo){var a=t.videoSencLength;s=rt.writeUint32(16*t.samples.length+a+149),!t.isVideoEncryption&&t.isAudioEncryption&&(s=rt.writeUint32(16*t.samples.length+92))}else{var r=12*t.samples.length+124;t.isAudioEncryption&&(r=12*t.samples.length+8*t.audioSenc.length+177),s=rt.writeUint32(r)}return t.samples.forEach((function(e){i.write(rt.writeUint32(e.duration)),i.write(rt.writeUint32(e.size)),i.write(rt.writeUint32(e.keyframe?33554432:65536)),t.isVideo&&i.write(rt.writeUint32(e.cts?e.cts:0))})),e.box(e.types.trun,this.extension(0,t.flags),n,s,i.buffer)}},{key:"senc",value:function(t){var i=new rt,n=t.samples.length,s=t.isVideo?16:8,a=t.isVideo?2:0,r=[],l=0;return t.isVideo?(r=t.videoSenc,l=t.videoSencLength):r=t.audioSenc,l=l||s*n,i.write(rt.writeUint32(16+l),e.types.senc,this.extension(0,a)),i.write(rt.writeUint32(n)),r.forEach((function(e){for(var t=0;t<e.InitializationVector.length;t++)i.write(new Uint8Array([e.InitializationVector[t]]));e.subsamples&&e.subsamples.length&&(i.write(rt.writeUint16(e.subsamples.length)),e.subsamples.forEach((function(e){i.write(rt.writeUint16(e.BytesOfClearData)),i.write(rt.writeUint32(e.BytesOfProtectedData))})))})),i.buffer}},{key:"saio",value:function(t){var i=12*t.samples.length+141;!t.isVideo&&t.isAudioEncryption&&(i=149);var n=new Uint8Array([1,0,0,0,0,0,0,1,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i]);return e.box(e.types.saio,n)}},{key:"saiz",value:function(t){var i=t.samples.length,n=new Uint8Array([0,0,0,0,16,i>>24&255,i>>16&255,i>>8&255,255&i]);return e.box(e.types.saiz,n)}},{key:"sbgp",value:function(){var t=new Uint8Array([114,111,108,108,0,0,0,1,0,0,1,25,0,0,0,1]);return e.box(e.types.sbgp,this.extension(0,0),t)}},{key:"extension",value:function(e,t){return new Uint8Array([e,t>>16&255,t>>8&255,255&t])}},{key:"tfhd",value:function(t){return e.box(e.types.tfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"tfdt",value:function(t,i){var n=Math.floor(i/(lt+1)),s=Math.floor(i%(lt+1));return t.useEME&&(t.isVideoEncryption||t.isAudioEncryption)?e.box(e.types.tfdt,new Uint8Array([0,0,0,0,s>>24,s>>16&255,s>>8&255,255&s])):e.box(e.types.tfdt,new Uint8Array([1,0,0,0,n>>24,n>>16&255,n>>8&255,255&n,s>>24,s>>16&255,s>>8&255,255&s]))}},{key:"trun",value:function(t,i){var n=t.length,s=12+16*n;i+=8+s;var a=new Uint8Array(s);a.set([0,0,15,1,n>>>24&255,n>>>16&255,n>>>8&255,255&n,i>>>24&255,i>>>16&255,i>>>8&255,255&i],0);for(var r=0;r<n;r++){var l=t[r],o=l.duration,d=l.size,c=l.flag,u=void 0===c?{}:c,m=l.cts,h=void 0===m?0:m;a.set([o>>>24&255,o>>>16&255,o>>>8&255,255&o,d>>>24&255,d>>>16&255,d>>>8&255,255&d,u.isLeading<<2|(null===u.dependsOn||void 0===u.dependsOn?1:u.dependsOn),u.isDependedOn<<6|u.hasRedundancy<<4|u.paddingValue<<1|(null===u.isNonSyncSample||void 0===u.isNonSyncSample?1:u.isNonSyncSample),61440&u.degradationPriority,15&u.degradationPriority,h>>>24&255,h>>>16&255,h>>>8&255,255&h],12+16*r)}return e.box(e.types.trun,a)}},{key:"moovMP4",value:function(t){return e.box.apply(e,[e.types.moov,e.mvhd(t[0].duration,t[0].timescale)].concat(C(t.map((function(t){return e.trackMP4(t)})))))}},{key:"trackMP4",value:function(t){return e.box(e.types.trak,e.tkhd(t.id,t.duration,t.width,t.height),e.mdiaMP4(t))}},{key:"mdiaMP4",value:function(t){return e.box(e.types.mdia,e.mdhd(t.duration,t.timescale),e.hdlr(t.type),e.minfMP4(t))}},{key:"minfMP4",value:function(t){return e.box(e.types.minf,t.type===E?e.VMHD:e.SMHD,e.DINF,e.stblMP4(t))}},{key:"stblMP4",value:function(t){var i=t.ext,n=[e.stsd(t),e.stts(i.stts),e.stsc(i.stsc),e.stsz(i.stsz),e.stco(i.stco)];return i.stss.length&&n.push(e.stss(i.stss)),i.ctts.length&&n.push(e.ctts(i.ctts)),e.box.apply(e,[e.types.stbl].concat(n))}},{key:"stts",value:function(t){var i=t.length,n=new Uint8Array(8*i),s=0;return t.forEach((function(e){var t=e.value,i=e.count;n.set([i>>24,i>>16&255,i>>8&255,255&i,t>>24,t>>16&255,t>>8&255,255&t],s),s+=8})),e.box(e.types.stts,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stsc",value:function(t){var i=t.length,n=new Uint8Array(12*i),s=0;return t.forEach((function(e){var t=e.firstChunk,i=e.samplesPerChunk,a=e.sampleDescIndex;n.set([t>>24,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a],s),s+=12})),e.box(e.types.stsc,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stsz",value:function(t){var i=t.length,n=new Uint8Array(4*i),s=0;return t.forEach((function(e){n.set([e>>24,e>>16&255,e>>8&255,255&e],s),s+=4})),e.box(e.types.stsz,Se(new Uint8Array([0,0,0,0,0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stco",value:function(t){var i=t.length,n=new Uint8Array(4*i),s=0;return t.forEach((function(e){n.set([e>>24,e>>16&255,e>>8&255,255&e],s),s+=4})),e.box(e.types.stco,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stss",value:function(t){var i=t.length,n=new Uint8Array(4*i),s=0;return t.forEach((function(e){n.set([e>>24,e>>16&255,e>>8&255,255&e],s),s+=4})),e.box(e.types.stss,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"ctts",value:function(t){var i=t.length,n=new Uint8Array(8*i),s=0;return t.forEach((function(e){var t=e.value,i=e.count;n.set([i>>24,i>>16&255,i>>8&255,255&i,t>>24,t>>16&255,t>>8&255,255&t],s),s+=8})),e.box(e.types.ctts,Se(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"styp",value:function(){return e.box(e.types.styp,new Uint8Array([109,115,100,104,0,0,0,0,109,115,100,104,109,115,105,120]))}},{key:"sidx",value:function(t){var i=t.timescale,n=t.samples[0].duration,s=n*t.samples.length,a=t.samples[0].sampleOffset*n,r=8;t.samples.forEach((function(e){r+=e.size}));var l=0;if(t.isVideo){var o,d=0;t.videoSenc&&(o=t.videoSenc),t.isVideo&&o.forEach((function(e){d+=8,e.subsamples&&e.subsamples.length&&(d+=2,d+=6*e.subsamples.length)})),t.videoSencLength=d,l=r+141+16*t.samples.length+d,t.useEME&&t.isAudioEncryption&&!t.isVideoEncryption&&(l=r+16*t.samples.length+84)}else l=r+116+12*t.samples.length,t.useEME&&t.isAudioEncryption&&(l=r+169+12*t.samples.length+8*t.audioSenc.length);var c=new Uint8Array([0,0,0,0,0,0,0,255&t.id,i>>24&255,i>>16&255,i>>8&255,255&i,a>>24&255,a>>16&255,a>>8&255,255&a,0,0,0,0,0,0,0,1,0,l>>16&255,l>>8&255,255&l,s>>24&255,s>>16&255,s>>8&255,255&s,144,0,0,0]);return e.box(e.types.sidx,c)}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}}]),e}();L(ot,"types",["Opus","dOps","av01","av1C","avc1","avcC","hvc1","hvcC","dinf","dref","esds","ftyp","hdlr","mdat","mdhd","mdia","mfhd","minf","moof","moov","mp4a","mvex","mvhd","pasp","stbl","stco","stsc","stsd","stsz","stts","tfdt","tfhd","traf","trak","trex","tkhd","vmhd","smhd","ctts","stss","styp","pssh","sidx","sbgp","saiz","saio","senc","trun","encv","enca","sinf","btrt","frma","tenc","schm","schi","mehd","fiel","sdtp"].reduce((function(e,t){return e[t]=[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)],e}),Object.create(null))),L(ot,"HDLR_TYPES",{video:new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),audio:new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0])}),L(ot,"FTYPAVC1",ot.box(ot.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]))),L(ot,"FTYPHEV1",ot.box(ot.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,104,101,118,49]))),L(ot,"DINF",ot.box(ot.types.dinf,ot.box(ot.types.dref,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1])))),L(ot,"VMHD",ot.box(ot.types.vmhd,new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0]))),L(ot,"SMHD",ot.box(ot.types.smhd,new Uint8Array([0,0,0,0,0,0,0,0]))),L(ot,"StblTable",new Uint8Array([0,0,0,0,0,0,0,0])),L(ot,"STTS",ot.box(ot.types.stts,ot.StblTable)),L(ot,"STSC",ot.box(ot.types.stsc,ot.StblTable)),L(ot,"STSZ",ot.box(ot.types.stsz,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]))),L(ot,"STCO",ot.box(ot.types.stco,ot.StblTable));var dt=function(){function e(t,i){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]"),e.disabled=i}return v(e,[{key:"debug",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).debug.apply(t,[this._prefix].concat(n))}}},{key:"log",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).log.apply(t,[this._prefix].concat(n))}}},{key:"warn",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).warn.apply(t,[this._prefix].concat(n))}}},{key:"error",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];(t=console).error.apply(t,[this._prefix].concat(n))}}},{key:"table",value:function(){var t;e.disabled||(console.group(this._prefix),(t=console).table.apply(t,arguments),console.groupEnd())}}],[{key:"enable",value:function(){e.disabled=!1}},{key:"disable",value:function(){e.disabled=!0}}]),e}();L(dt,"disabled",!0);var ct,ut,mt,ht,pt,yt,bt,Zt=function(){function e(t,i,n){X(this,e),this.videoTrack=t,this.audioTrack=i;var s=/Chrome\/([^.]+)/.exec(navigator.userAgent);this.forceFirstIDR=s&&Number(s[1])<50,this.log=new dt("FMP4Remuxer",!n||!n.openLog||!n.openLog)}return v(e,[{key:"remux",value:function(){var e,t,i,n,s,a=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=this.videoTrack,o=this.audioTrack,d=l.exist(),c=o.exist(),u=[];return a&&(r&&r.initMerge?(d&&u.push(this.videoTrack),c&&u.push(this.audioTrack),i=ot.initSegment(u)):(d&&(e=ot.initSegment([this.videoTrack])),c&&(t=ot.initSegment([this.audioTrack])))),d&&l.hasSample()&&(n=this._remuxVideo()),c&&o.hasSample()&&(s=this._remuxAudio()),l.samples=[],o.samples=[],{initSegment:i,videoInitSegment:e,audioInitSegment:t,videoSegment:n,audioSegment:s}}},{key:"_remuxVideo",value:function(){var e=this.videoTrack;this.forceFirstIDR&&(e.samples[0].flag={dependsOn:2,isNonSyncSample:0});var t=e.samples,i=/av01/.test(e.codec),n=0;i?t.forEach((function(e){n+=e.data.byteLength})):t.forEach((function(e){n+=e.units.reduce((function(e,t){return e+t.byteLength}),0),n+=4*e.units.length}));var s=new Uint8Array(n);if(i)for(var a,r=0,l=t.length,o=0;r<l;r++)a=t[r],s.set(a.data,o),a.size=a.data.byteLength,o+=a.size;else for(var d,c=new DataView(s.buffer),u=function(e,i){i=t[m];var n=0;i.units.forEach((function(t){c.setUint32(e,t.byteLength),e+=4,s.set(t,e),e+=t.byteLength,n+=4+t.byteLength})),i.size=n,p=e,d=i},m=0,h=t.length,p=0;m<h;m++)u(p,d);var y=ot.mdat(s);return Se(ot.moof([e]),y)}},{key:"_remuxAudio",value:function(){var e=this.audioTrack,t=new Uint8Array(e.samples.reduce((function(e,t){return e+t.size}),0));e.samples.reduce((function(e,i){return t.set(i.data,e),e+i.size}),0);var i=ot.mdat(t);return Se(ot.moof([e]),i)}},{key:"reset",value:function(){this.videoTrack.reset(),this.audioTrack.reset()}}]),e}(),ft=(null===(ct="undefined"!=typeof globalThis?globalThis:void 0)||void 0===ct?void 0:ct.crypto)||(null===(ut="undefined"!=typeof global?global:void 0)||void 0===ut?void 0:ut.crypto)||(null===(mt="undefined"!=typeof window?window:void 0)||void 0===mt?void 0:mt.crypto)||(null===(ht="undefined"!=typeof self?self:void 0)||void 0===ht?void 0:ht.crypto)||(null===(pt="undefined"!=typeof frames?frames:void 0)||void 0===pt||null===(yt=pt[0])||void 0===yt?void 0:yt.crypto);bt=ft?function(e){for(var t=[],i=0;i<e;i+=4)t.push(ft.getRandomValues(new Uint32Array(1))[0]);return new Wt(t,e)}:function(e){for(var t,i=[],n=function(e){var t=e,i=987654321,n=4294967295;return function(){var e=((i=36969*(65535&i)+(i>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return e/=4294967296,(e+=.5)*(Math.random()>.5?1:-1)}},s=0;s<e;s+=4){var a=n(4294967296*(t||Math.random()));t=987654071*a(),i.push(4294967296*a()|0)}return new Wt(i,e)};var Xt=function(){function e(){X(this,e)}return v(e,[{key:"mixIn",value:function(e){return Object.assign(this,e)}},{key:"clone",value:function(){var e=new this.constructor;return Object.assign(e,this),e}}],[{key:"create",value:function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return V(this,t)}}]),e}(),Wt=function(e){G(i,e);var t=M(i);function i(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4*n.length;X(this,i),e=t.call(this);var a=n;if(a instanceof ArrayBuffer&&(a=new Uint8Array(a)),(a instanceof Int8Array||a instanceof Uint8ClampedArray||a instanceof Int16Array||a instanceof Uint16Array||a instanceof Int32Array||a instanceof Uint32Array||a instanceof Float32Array||a instanceof Float64Array)&&(a=new Uint8Array(a.buffer,a.byteOffset,a.byteLength)),a instanceof Uint8Array){for(var r=a.byteLength,l=[],o=0;o<r;o+=1)l[o>>>2]|=a[o]<<24-o%4*8;e.words=l,e.sigBytes=r}else e.words=n,e.sigBytes=s;return e}return v(i,[{key:"toString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:vt;return e.stringify(this)}},{key:"concat",value:function(e){var t=this.words,i=e.words,n=this.sigBytes,s=e.sigBytes;if(this.clamp(),n%4)for(var a=0;a<s;a+=1){var r=i[a>>>2]>>>24-a%4*8&255;t[n+a>>>2]|=r<<24-(n+a)%4*8}else for(var l=0;l<s;l+=4)t[n+l>>>2]=i[l>>>2];return this.sigBytes+=s,this}},{key:"clamp",value:function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=Math.ceil(t/4)}},{key:"clone",value:function(){var e=K(x(i.prototype),"clone",this).call(this);return e.words=this.words.slice(0),e}}]),i}(Xt);L(Wt,"random",bt);for(var vt={stringify:function(e){for(var t=e.words,i=e.sigBytes,n=[],s=0;s<i;s+=1){var a=t[s>>>2]>>>24-s%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,i=[],n=0;n<t;n+=2)i[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new Wt(i,t/2)}},Lt=function(e){for(var t=e.length,i=[],n=0;n<t;n+=1)i[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new Wt(i,t)},Gt=function(e){return Lt(unescape(encodeURIComponent(e)))},xt=function(e){G(i,e);var t=M(i);function i(){var e;return X(this,i),(e=t.call(this))._minBufferSize=0,e}return v(i,[{key:"reset",value:function(){this._data=new Wt,this._nDataBytes=0}},{key:"_append",value:function(e){var t=e;"string"==typeof t&&(t=Gt(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes}},{key:"_process",value:function(e){var t,i=this._data,n=this.blockSize,s=i.words,a=i.sigBytes,r=a/(4*n),l=(r=e?Math.ceil(r):Math.max((0|r)-this._minBufferSize,0))*n,o=Math.min(4*l,a);if(l){for(var d=0;d<l;d+=n)this._doProcessBlock(s,d);t=s.splice(0,l),i.sigBytes-=o}return new Wt(t,o)}},{key:"clone",value:function(){var e=K(x(i.prototype),"clone",this).call(this);return e._data=this._data.clone(),e}}]),i}(Xt),St=function(e){G(i,e);var t=M(i);function i(e){var n;return X(this,i),(n=t.call(this)).blockSize=16,n.cfg=Object.assign(new Xt,e),n.reset(),n}return v(i,[{key:"reset",value:function(){K(x(i.prototype),"reset",this).call(this),this._doReset()}},{key:"update",value:function(e){return this._append(e),this._process(),this}},{key:"finalize",value:function(e){return e&&this._append(e),this._doFinalize()}}],[{key:"_createHelper",value:function(e){return function(t,i){return new e(i).finalize(t)}}},{key:"_createHmacHelper",value:function(e){return function(t,i){return new gt(e,i).finalize(t)}}}]),i}(xt),gt=function(e){G(i,e);var t=M(i);function i(e,n){var s;X(this,i),s=t.call(this);var a=new e;s._hasher=a;var r=n;"string"==typeof r&&(r=Gt(r));var l=a.blockSize,o=4*l;r.sigBytes>o&&(r=a.finalize(n)),r.clamp();var d=r.clone();s._oKey=d;var c=r.clone();s._iKey=c;for(var u=d.words,m=c.words,h=0;h<l;h+=1)u[h]^=1549556828,m[h]^=909522486;return d.sigBytes=o,c.sigBytes=o,s.reset(),s}return v(i,[{key:"reset",value:function(){var e=this._hasher;e.reset(),e.update(this._iKey)}},{key:"update",value:function(e){return this._hasher.update(e),this}},{key:"finalize",value:function(e){var t=this._hasher,i=t.finalize(e);return t.reset(),t.finalize(this._oKey.clone().concat(i))}}]),i}(Xt),Vt={stringify:function(e){var t=e.words,i=e.sigBytes,n=this._map;e.clamp();for(var s=[],a=0;a<i;a+=3)for(var r=(t[a>>>2]>>>24-a%4*8&255)<<16|(t[a+1>>>2]>>>24-(a+1)%4*8&255)<<8|t[a+2>>>2]>>>24-(a+2)%4*8&255,l=0;l<4&&a+.75*l<i;l+=1)s.push(n.charAt(r>>>6*(3-l)&63));var o=n.charAt(64);if(o)for(;s.length%4;)s.push(o);return s.join("")},parse:function(e){var t=e.length,i=this._map,n=this._reverseMap;if(!n){this._reverseMap=[],n=this._reverseMap;for(var s=0;s<i.length;s+=1)n[i.charCodeAt(s)]=s}var a=i.charAt(64);if(a){var r=e.indexOf(a);-1!==r&&(t=r)}return function(e,t,i){for(var n=[],s=0,a=0;a<t;a+=1)if(a%4){var r=i[e.charCodeAt(a-1)]<<a%4*2|i[e.charCodeAt(a)]>>>6-a%4*2;n[s>>>2]|=r<<24-s%4*8,s+=1}return Wt.create(n,s)}(e,t,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},Yt=[],kt=0;kt<64;kt+=1)Yt[kt]=4294967296*Math.abs(Math.sin(kt+1))|0;var Rt=function(e,t,i,n,s,a,r){var l=e+(t&i|~t&n)+s+r;return(l<<a|l>>>32-a)+t},Tt=function(e,t,i,n,s,a,r){var l=e+(t&n|i&~n)+s+r;return(l<<a|l>>>32-a)+t},Mt=function(e,t,i,n,s,a,r){var l=e+(t^i^n)+s+r;return(l<<a|l>>>32-a)+t},wt=function(e,t,i,n,s,a,r){var l=e+(i^(t|~n))+s+r;return(l<<a|l>>>32-a)+t},Kt=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"_doReset",value:function(){this._hash=new Wt([1732584193,4023233417,2562383102,271733878])}},{key:"_doProcessBlock",value:function(e,t){for(var i=e,n=0;n<16;n+=1){var s=t+n,a=e[s];i[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}var r=this._hash.words,l=i[t+0],o=i[t+1],d=i[t+2],c=i[t+3],u=i[t+4],m=i[t+5],h=i[t+6],p=i[t+7],y=i[t+8],b=i[t+9],Z=i[t+10],f=i[t+11],X=i[t+12],W=i[t+13],v=i[t+14],L=i[t+15],G=r[0],x=r[1],S=r[2],g=r[3];G=Rt(G,x,S,g,l,7,Yt[0]),g=Rt(g,G,x,S,o,12,Yt[1]),S=Rt(S,g,G,x,d,17,Yt[2]),x=Rt(x,S,g,G,c,22,Yt[3]),G=Rt(G,x,S,g,u,7,Yt[4]),g=Rt(g,G,x,S,m,12,Yt[5]),S=Rt(S,g,G,x,h,17,Yt[6]),x=Rt(x,S,g,G,p,22,Yt[7]),G=Rt(G,x,S,g,y,7,Yt[8]),g=Rt(g,G,x,S,b,12,Yt[9]),S=Rt(S,g,G,x,Z,17,Yt[10]),x=Rt(x,S,g,G,f,22,Yt[11]),G=Rt(G,x,S,g,X,7,Yt[12]),g=Rt(g,G,x,S,W,12,Yt[13]),S=Rt(S,g,G,x,v,17,Yt[14]),x=Rt(x,S,g,G,L,22,Yt[15]),G=Tt(G,x,S,g,o,5,Yt[16]),g=Tt(g,G,x,S,h,9,Yt[17]),S=Tt(S,g,G,x,f,14,Yt[18]),x=Tt(x,S,g,G,l,20,Yt[19]),G=Tt(G,x,S,g,m,5,Yt[20]),g=Tt(g,G,x,S,Z,9,Yt[21]),S=Tt(S,g,G,x,L,14,Yt[22]),x=Tt(x,S,g,G,u,20,Yt[23]),G=Tt(G,x,S,g,b,5,Yt[24]),g=Tt(g,G,x,S,v,9,Yt[25]),S=Tt(S,g,G,x,c,14,Yt[26]),x=Tt(x,S,g,G,y,20,Yt[27]),G=Tt(G,x,S,g,W,5,Yt[28]),g=Tt(g,G,x,S,d,9,Yt[29]),S=Tt(S,g,G,x,p,14,Yt[30]),x=Tt(x,S,g,G,X,20,Yt[31]),G=Mt(G,x,S,g,m,4,Yt[32]),g=Mt(g,G,x,S,y,11,Yt[33]),S=Mt(S,g,G,x,f,16,Yt[34]),x=Mt(x,S,g,G,v,23,Yt[35]),G=Mt(G,x,S,g,o,4,Yt[36]),g=Mt(g,G,x,S,u,11,Yt[37]),S=Mt(S,g,G,x,p,16,Yt[38]),x=Mt(x,S,g,G,Z,23,Yt[39]),G=Mt(G,x,S,g,W,4,Yt[40]),g=Mt(g,G,x,S,l,11,Yt[41]),S=Mt(S,g,G,x,c,16,Yt[42]),x=Mt(x,S,g,G,h,23,Yt[43]),G=Mt(G,x,S,g,b,4,Yt[44]),g=Mt(g,G,x,S,X,11,Yt[45]),S=Mt(S,g,G,x,L,16,Yt[46]),x=Mt(x,S,g,G,d,23,Yt[47]),G=wt(G,x,S,g,l,6,Yt[48]),g=wt(g,G,x,S,p,10,Yt[49]),S=wt(S,g,G,x,v,15,Yt[50]),x=wt(x,S,g,G,m,21,Yt[51]),G=wt(G,x,S,g,X,6,Yt[52]),g=wt(g,G,x,S,c,10,Yt[53]),S=wt(S,g,G,x,Z,15,Yt[54]),x=wt(x,S,g,G,o,21,Yt[55]),G=wt(G,x,S,g,y,6,Yt[56]),g=wt(g,G,x,S,L,10,Yt[57]),S=wt(S,g,G,x,h,15,Yt[58]),x=wt(x,S,g,G,W,21,Yt[59]),G=wt(G,x,S,g,u,6,Yt[60]),g=wt(g,G,x,S,f,10,Yt[61]),S=wt(S,g,G,x,d,15,Yt[62]),x=wt(x,S,g,G,b,21,Yt[63]),r[0]=r[0]+G|0,r[1]=r[1]+x|0,r[2]=r[2]+S|0,r[3]=r[3]+g|0}},{key:"_doFinalize",value:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;t[n>>>5]|=128<<24-n%32;var s=Math.floor(i/4294967296),a=i;t[15+(n+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),t[14+(n+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),e.sigBytes=4*(t.length+1),this._process();for(var r=this._hash,l=r.words,o=0;o<4;o+=1){var d=l[o];l[o]=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8)}return r}},{key:"clone",value:function(){var e=K(x(i.prototype),"clone",this).call(this);return e._hash=this._hash.clone(),e}}]),i}(St);St._createHelper(Kt),St._createHmacHelper(Kt);var It=function(e){G(i,e);var t=M(i);function i(e){var n;return X(this,i),(n=t.call(this)).cfg=Object.assign(new Xt,{keySize:4,hasher:Kt,iterations:1},e),n}return v(i,[{key:"compute",value:function(e,t){for(var i,n=this.cfg,s=n.hasher.create(),a=Wt.create(),r=a.words,l=n.keySize,o=n.iterations;r.length<l;){i&&s.update(i),i=s.update(e).finalize(t),s.reset();for(var d=1;d<o;d+=1)i=s.finalize(i),s.reset();a.concat(i)}return a.sigBytes=4*l,a}}]),i}(Xt),Ct=function(e){G(i,e);var t=M(i);function i(e,n,s){var a;return X(this,i),(a=t.call(this)).cfg=Object.assign(new Xt,s),a._xformMode=e,a._key=n,a.reset(),a}return v(i,[{key:"reset",value:function(){K(x(i.prototype),"reset",this).call(this),this._doReset()}},{key:"process",value:function(e){return this._append(e),this._process()}},{key:"finalize",value:function(e){return e&&this._append(e),this._doFinalize()}}],[{key:"createEncryptor",value:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)}},{key:"createDecryptor",value:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)}},{key:"_createHelper",value:function(e){var t=function(e){return"string"==typeof e?Et:Pt};return{encrypt:function(i,n,s){return t(n).encrypt(e,i,n,s)},decrypt:function(i,n,s){return t(n).decrypt(e,i,n,s)}}}}]),i}(xt);Ct._ENC_XFORM_MODE=1,Ct._DEC_XFORM_MODE=2,Ct.keySize=4,Ct.ivSize=4;var Ht=function(e){G(i,e);var t=M(i);function i(e,n){var s;return X(this,i),(s=t.call(this))._cipher=e,s._iv=n,s}return v(i,null,[{key:"createEncryptor",value:function(e,t){return this.Encryptor.create(e,t)}},{key:"createDecryptor",value:function(e,t){return this.Decryptor.create(e,t)}}]),i}(Xt);function Nt(e,t,i){var n,s=e,a=this._iv;a?(n=a,this._iv=void 0):n=this._prevBlock;for(var r=0;r<i;r+=1)s[t+r]^=n[r]}var Ft=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i)}(Ht);Ft.Encryptor=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize;Nt.call(this,e,t,n),i.encryptBlock(e,t),this._prevBlock=e.slice(t,t+n)}}]),i}(Ft),Ft.Decryptor=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize,s=e.slice(t,t+n);i.decryptBlock(e,t),Nt.call(this,e,t,n),this._prevBlock=s}}]),i}(Ft);var zt={pad:function(e,t){for(var i=4*t,n=i-e.sigBytes%i,s=n<<24|n<<16|n<<8|n,a=[],r=0;r<n;r+=4)a.push(s);var l=Wt.create(a,n);e.concat(l)},unpad:function(e){var t=e,i=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=i}},Ut=function(e){G(i,e);var t=M(i);function i(e,n,s){var a;return X(this,i),(a=t.call(this,e,n,Object.assign({mode:Ft,padding:zt},s))).blockSize=4,a}return v(i,[{key:"reset",value:function(){var e;K(x(i.prototype),"reset",this).call(this);var t=this.cfg,n=t.iv,s=t.mode;this._xformMode===this.constructor._ENC_XFORM_MODE?e=s.createEncryptor:(e=s.createDecryptor,this._minBufferSize=1),this._mode=e.call(s,this,n&&n.words),this._mode.__creator=e}},{key:"_doProcessBlock",value:function(e,t){this._mode.processBlock(e,t)}},{key:"_doFinalize",value:function(){var e,t=this.cfg.padding;return this._xformMode===this.constructor._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e}}]),i}(Ct),jt=function(e){G(i,e);var t=M(i);function i(e){var n;return X(this,i),(n=t.call(this)).mixIn(e),n}return v(i,[{key:"toString",value:function(e){return(e||this.formatter).stringify(this)}}]),i}(Xt),Jt={stringify:function(e){var t=e.ciphertext,i=e.salt;return(i?Wt.create([1398893684,1701076831]).concat(i).concat(t):t).toString(Vt)},parse:function(e){var t,i=Vt.parse(e),n=i.words;return 1398893684===n[0]&&1701076831===n[1]&&(t=Wt.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),jt.create({ciphertext:i,salt:t})}},Pt=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,null,[{key:"encrypt",value:function(e,t,i,n){var s=Object.assign(new Xt,this.cfg,n),a=e.createEncryptor(i,s),r=a.finalize(t),l=a.cfg;return jt.create({ciphertext:r,key:i,iv:l.iv,algorithm:e,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:s.format})}},{key:"decrypt",value:function(e,t,i,n){var s=t,a=Object.assign(new Xt,this.cfg,n);return s=this._parse(s,a.format),e.createDecryptor(i,a).finalize(s.ciphertext)}},{key:"_parse",value:function(e,t){return"string"==typeof e?t.parse(e,this):e}}]),i}(Xt);Pt.cfg=Object.assign(new Xt,{format:Jt});var Dt={execute:function(e,t,i,n,s){var a,r=n;r||(r=Wt.random(8)),a=s?It.create({keySize:t+i,hasher:s}).compute(e,r):It.create({keySize:t+i}).compute(e,r);var l=Wt.create(a.words.slice(t),4*i);return a.sigBytes=4*t,jt.create({key:a,iv:l,salt:r})}},Et=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,null,[{key:"encrypt",value:function(e,t,i,n){var s=Object.assign(new Xt,this.cfg,n),a=s.kdf.execute(i,e.keySize,e.ivSize,s.salt,s.hasher);s.iv=a.iv;var r=Pt.encrypt.call(this,e,t,a.key,s);return r.mixIn(a),r}},{key:"decrypt",value:function(e,t,i,n){var s=t,a=Object.assign(new Xt,this.cfg,n);s=this._parse(s,a.format);var r=a.kdf.execute(i,e.keySize,e.ivSize,s.salt,a.hasher);return a.iv=r.iv,Pt.decrypt.call(this,e,s,r.key,a)}}]),i}(Pt);Et.cfg=Object.assign(Pt.cfg,{kdf:Dt});for(var Bt=[],_t=[],Qt=[],Ot=[],At=[],qt=[],$t=[],ei=[],ti=[],ii=[],ni=[],si=0;si<256;si+=1)ni[si]=si<128?si<<1:si<<1^283;for(var ai=0,ri=0,li=0;li<256;li+=1){var oi=ri^ri<<1^ri<<2^ri<<3^ri<<4;oi=oi>>>8^255&oi^99,Bt[ai]=oi,_t[oi]=ai;var di=ni[ai],ci=ni[di],ui=ni[ci],mi=257*ni[oi]^16843008*oi;Qt[ai]=mi<<24|mi>>>8,Ot[ai]=mi<<16|mi>>>16,At[ai]=mi<<8|mi>>>24,qt[ai]=mi,mi=16843009*ui^65537*ci^257*di^16843008*ai,$t[oi]=mi<<24|mi>>>8,ei[oi]=mi<<16|mi>>>16,ti[oi]=mi<<8|mi>>>24,ii[oi]=mi,ai?(ai=di^ni[ni[ni[ui^di]]],ri^=ni[ni[ri]]):ai=ri=1}var hi=[0,1,2,4,8,16,32,64,128,27,54],pi=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"_doReset",value:function(){var e;if(!this._nRounds||this._keyPriorReset!==this._key){this._keyPriorReset=this._key;var t=this._keyPriorReset,i=t.words,n=t.sigBytes/4;this._nRounds=n+6;var s=4*(this._nRounds+1);this._keySchedule=[];for(var a=this._keySchedule,r=0;r<s;r+=1)r<n?a[r]=i[r]:(e=a[r-1],r%n?n>6&&r%n==4&&(e=Bt[e>>>24]<<24|Bt[e>>>16&255]<<16|Bt[e>>>8&255]<<8|Bt[255&e]):(e=Bt[(e=e<<8|e>>>24)>>>24]<<24|Bt[e>>>16&255]<<16|Bt[e>>>8&255]<<8|Bt[255&e],e^=hi[r/n|0]<<24),a[r]=a[r-n]^e);this._invKeySchedule=[];for(var l=this._invKeySchedule,o=0;o<s;o+=1){var d=s-o;e=o%4?a[d]:a[d-4],l[o]=o<4||d<=4?e:$t[Bt[e>>>24]]^ei[Bt[e>>>16&255]]^ti[Bt[e>>>8&255]]^ii[Bt[255&e]]}}}},{key:"encryptBlock",value:function(e,t){this._doCryptBlock(e,t,this._keySchedule,Qt,Ot,At,qt,Bt)}},{key:"decryptBlock",value:function(e,t){var i=e,n=i[t+1];i[t+1]=i[t+3],i[t+3]=n,this._doCryptBlock(i,t,this._invKeySchedule,$t,ei,ti,ii,_t),n=i[t+1],i[t+1]=i[t+3],i[t+3]=n}},{key:"_doCryptBlock",value:function(e,t,i,n,s,a,r,l){for(var o=e,d=this._nRounds,c=o[t]^i[0],u=o[t+1]^i[1],m=o[t+2]^i[2],h=o[t+3]^i[3],p=4,y=1;y<d;y+=1){var b=n[c>>>24]^s[u>>>16&255]^a[m>>>8&255]^r[255&h]^i[p];p+=1;var Z=n[u>>>24]^s[m>>>16&255]^a[h>>>8&255]^r[255&c]^i[p];p+=1;var f=n[m>>>24]^s[h>>>16&255]^a[c>>>8&255]^r[255&u]^i[p];p+=1;var X=n[h>>>24]^s[c>>>16&255]^a[u>>>8&255]^r[255&m]^i[p];p+=1,c=b,u=Z,m=f,h=X}var W=(l[c>>>24]<<24|l[u>>>16&255]<<16|l[m>>>8&255]<<8|l[255&h])^i[p];p+=1;var v=(l[u>>>24]<<24|l[m>>>16&255]<<16|l[h>>>8&255]<<8|l[255&c])^i[p];p+=1;var L=(l[m>>>24]<<24|l[h>>>16&255]<<16|l[c>>>8&255]<<8|l[255&u])^i[p];p+=1;var G=(l[h>>>24]<<24|l[c>>>16&255]<<16|l[u>>>8&255]<<8|l[255&m])^i[p];p+=1,o[t]=W,o[t+1]=v,o[t+2]=L,o[t+3]=G}}]),i}(Ut);pi.keySize=8;var yi=Ut._createHelper(pi),bi=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i)}(Ht);bi.Encryptor=function(e){G(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"processBlock",value:function(e,t){var i=e,n=this._cipher,s=n.blockSize,a=this._iv,r=this._counter;a&&(this._counter=a.slice(0),r=this._counter,this._iv=void 0);var l=r.slice(0);n.encryptBlock(l,0),r[s-1]=r[s-1]+1|0;for(var o=0;o<s;o+=1)i[t+o]^=l[o]}}]),i}(bi),bi.Decryptor=bi.Encryptor;var Zi,fi={pad:function(){},unpad:function(){}},Xi={decryptWordArray:function(e,t,i){var n=vt.parse(t),s=vt.parse(Te(i)),a=Wt.create(new Uint8Array(e)),r=yi.decrypt(jt.create({ciphertext:a}),n,{iv:s,mode:bi,padding:fi});return Xi.wordArrayToUint8Array(r)},wordArrayToUint8Array:function(e){for(var t=e.sigBytes,i=e.words,n=new Uint8Array(t),s=0,a=0;s!==t;){var r=i[a++];if(n[s++]=(4278190080&r)>>>24,s===t)break;if(n[s++]=(16711680&r)>>>16,s===t)break;if(n[s++]=(65280&r)>>>8,s===t)break;n[s++]=255&r}return n},decoderAESCTRData:function(e,t,i){if(e.videoSenc){var n=e.kidValue,s=e.videoSenc;e.samples.forEach((function(t,a){var r=s[a],l=t.data,o=[],d=[],c=r.InitializationVector;if(r.subsamples&&r.subsamples.length)r.subsamples.forEach((function(e){var t=e.BytesOfClearData+e.BytesOfProtectedData,i=l.slice(0,t);o.push(i.slice(0,e.BytesOfClearData)),d.push(i.slice(e.BytesOfClearData)),l=l.slice(t)}));else{var u=t.size;o.push(l.slice(0,0)),d.push(l.slice(0,u)),l=l.slice(u)}var m=new rt;m.write.apply(m,d);var h=i?i(m.buffer,n,c):Xi.decryptWordArray(m.buffer,n,c),p=new rt;o.forEach((function(e,t){var i=d[t].length,n=h.slice(0,i);p.write(e),p.write(n),h=h.slice(i)})),e.samples[a].data=p.buffer}))}if(t.audioSenc){var a=t.kidValue,r=t.audioSenc;t.samples.forEach((function(e,n){var s=r[n],l=i?i(e.data,a,s.InitializationVector):Xi.decryptWordArray(e.data,a,s.InitializationVector);t.samples[n].data=l}))}}},Wi=function(){function e(t,i,n,s){var a=this;X(this,e),L(this,"_videoSamples",[]),L(this,"_audioSamples",[]),L(this,"_lastRemainBuffer",[]),L(this,"_lastRemainBufferStartPos",0),this.videoTrack=new de,this.audioTrack=new ce,this.metadataTrack=n||new be,this.log=new dt("MP4Demuxer",!s||!s.openLog||!s.openLog),t&&t.forEach((function(e){var t;(t=a._videoSamples).push.apply(t,C(e.frames))})),i&&i.forEach((function(e){var t;(t=a._audioSamples).push.apply(t,C(e.frames))}))}return v(e,[{key:"parseSamples",value:function(e){if(!e)throw new Error("moov is required");if(this.videoTrack.codec||this.audioTrack.codec||(Ae.moovToTrack(e,this.videoTrack,this.audioTrack),this.videoSenc=this.videoTrack.videoSenc,this.audioSenc=this.audioTrack.audioSenc),!this._audioSamples.length&&!this._videoSamples.length){var t=Ae.moovToSamples(e);if(!t)throw new Error("cannot parse samples from moov box");this._videoSamples=t.videoSamples||[],this._audioSamples=t.audioSamples||[]}}},{key:"demux",value:function(e,t,i,n,s){this.parseSamples(s);var a,r,l,o=this.videoTrack,d=this.audioTrack;if(o.samples=[],d.samples=[],i){for(var c,u=0,m=i[0],h=i[1];m<=h;m++){if(!(a=this._videoSamples[m]))throw new Error("cannot found video frame #".concat(m));l=a.offset-t,r=e.subarray(l,l+a.size),(c=new ue(a.pts||a.dts,a.dts)).duration=a.duration,c.gopId=a.gopId,a.keyframe&&c.setToKeyframe();for(var p=0,y=r.length-1;p<y;)u=Ye(r,p),p+=4,c.units.push(r.subarray(p,p+u)),p+=u;o.samples.push(c)}o.baseMediaDecodeTime=o.samples[0].dts}if(n){for(var b=n[0],Z=n[1];b<=Z;b++){if(!(a=this._audioSamples[b]))throw new Error("cannot found video frame #".concat(b));l=a.offset-t,r=e.subarray(l,l+a.size),d.samples.push(new me(a.dts,r,a.duration))}d.baseMediaDecodeTime=d.samples[0].dts}return{videoTrack:o,audioTrack:d,metadataTrack:this.metadataTrack}}},{key:"demuxPart",value:function(e,t,i,n,s,a,r,l){if(this.parseSamples(s),this.videoTrack.useEME=a,this.audioTrack.useEME=a,this._lastRemainBuffer&&this._lastRemainBuffer.byteLength>0&&t>this._lastRemainBufferStartPos&&t<=this._lastRemainBufferStartPos+this._lastRemainBuffer.byteLength)for(var o=0;o<20;)try{var d=this._lastRemainBuffer.subarray(0,t-this._lastRemainBufferStartPos),c=new Uint8Array(e.byteLength+d.byteLength);c.set(d,0),c.set(new Uint8Array(e),d.byteLength),e=c,t-=d.byteLength,this._lastRemainBuffer=null,this._lastRemainBufferStartPos=0;break}catch(V){if(!(o<20))throw new Error("new Uint8Array error:,"+V.errorMessage);o++}var u,m,h,p=this.videoTrack,y=this.audioTrack;p.samples=[],y.samples=[],p.videoSenc=null,y.audioSenc=null;var b=0,Z=0;if(this._videoSamples.length>0&&i.length>0){for(var f,X=e.byteLength+t,W=i[0];W<=i[1];W++){if(!(u=this._videoSamples[W]))throw new Error("cannot found video frame #".concat(W));u.offset>=t&&u.offset+u.size<=X&&(b=(h=u.offset-t)+u.size,m=e.subarray(h,b),(f=new ue(u.pts||u.dts,u.dts)).duration=u.duration,f.gopId=u.gopId,f.sampleOffset=u.index,u.keyframe&&f.setToKeyframe(),f.data=m,f.size=u.size,p.samples.push(f))}p.samples.length>0&&(p.gopId=p.samples[0].gopId,p.baseMediaDecodeTime=p.samples[0].dts,p.startPts=p.samples[0].pts/p.timescale,p.endPts=p.samples[p.samples.length-1].pts/p.timescale,this.videoSenc&&(p.videoSenc=this.videoSenc.slice(p.samples[0].sampleOffset,p.samples[0].sampleOffset+p.samples.length),p.kidValue=r))}if(this._audioSamples.length>0&&n.length>0){for(var v=n[0];v<=n[1];v++){if(!(u=this._audioSamples[v]))throw new Error("cannot found video frame #".concat(v));u.offset>=t&&u.offset+u.size<=e.byteLength+t&&(Z=(h=u.offset-t)+u.size,m=e.subarray(h,Z),y.samples.push(new me(u.dts,m,u.duration,u.index)))}y.samples.length>0&&(y.gopId=y.samples[0].gopId||p.gopId,y.baseMediaDecodeTime=y.samples[0].dts,y.startPts=y.samples[0].pts/y.timescale,y.endPts=y.samples[y.samples.length-1].pts/y.timescale,this.audioSenc&&(y.audioSenc=this.audioSenc.slice(y.samples[0].sampleOffset,y.samples[0].sampleOffset+y.samples.length),y.kidValue=r))}this.decoderData(p,y,l);for(var L=0,G=0;G<p.samples.length;G++)for(var x=0,S=p.samples[G].data,g=S.length-1;x<g;)L=Ye(S,x),x+=4,p.samples[G].units.push(S.subarray(x,x+L)),x+=L;return this._lastRemainBuffer=e.subarray(Math.max(b,Z)),this._lastRemainBuffer.byteLength>0?this._lastRemainBufferStartPos=t+e.byteLength-this._lastRemainBuffer.byteLength:this._lastRemainBufferStartPos=0,{videoTrack:p,audioTrack:y,metadataTrack:this.metadataTrack}}},{key:"reset",value:function(){this._videoSamples=[],this._audioSamples=[],this._lastRemainBuffer=null,this._lastRemainBufferStartPos=0,this.videoTrack.reset(),this.audioTrack.reset(),this.metadataTrack.reset()}},{key:"decoderData",value:function(e,t,i){e.useEME||t.useEME||Xi.decoderAESCTRData(e,t,i)}}],[{key:"probe",value:function(e){return Ae.probe(e)}}]),e}(),vi="3.0.25-alpha.1",Li=function(){function e(){X(this,e)}return v(e,null,[{key:"start",value:function(e){return e&&e.length?1===e.length&&e.end(0)-e.start(0)<1e-6||1===e.length&&e.start(0)<0?0:e.start(0):0}},{key:"end",value:function(e){return e&&e.length?1===e.length&&e.end(0)-e.start(0)<1e-6?0:e.end(e.length-1):0}},{key:"get",value:function(e){if(e)try{return e.buffered}catch(t){}}},{key:"buffers",value:function(e,t){if(!e||!e.length)return[];for(var i=[],n=0,s=e.length;n<s;n++){var a=i.length;if(a&&t){var r=i[a-1],l=r[1];if(e.start(n)-l<=t){var o=e.end(n);o>l&&(r[1]=o)}else i.push([e.start(n),e.end(n)])}else i.push([e.start(n),e.end(n)])}return i}},{key:"totalLength",value:function(e){return e&&e.length?e.reduce((function(e,t){return e+(t[1]-t[0])}),0):0}},{key:"info",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(!t||!t.length)return{start:0,end:0,buffers:[]};for(var s=0,a=0,r=0,l=0,o=0,d=0,c=0,u=e.buffers(t,n),m=0,h=u.length;m<h;m++){var p=u[m];if(i+n>=p[0]&&i<=p[1])s=p[0],a=p[1],r=m;else{if(i+n<p[0]){l=p[0],o=p[1];break}i+n>p[1]&&(d=p[0],c=p[1])}}return{start:s,end:a,index:r,buffers:u,nextStart:l,nextEnd:o,prevStart:d,prevEnd:c,currentTime:i,behind:i-s,remaining:a?a-i:0,length:e.totalLength&&e.totalLength(u)}}},{key:"isBuffered",value:function(t,i){if(t){var n=e.get(t);if(null!=n&&n.length)for(var s=0;s<n.length;s++)if(i>=n.start(s)&&i<=n.end(s))return!0}return!1}}]),e}(),Gi="undefined"!=typeof window,xi={MANIFEST:"manifest",NETWORK:"network",NETWORK_TIMEOUT:"network_timeout",NETWORK_FORBIDDEN:"network_forbidden",NETWORK_NOTFOUND:"network_notfound",NETWROK_RANGE_NOT_SATISFIABLE:"network_range_not_satisfiable",DEMUX:"demux",REMUX:"remux",MEDIA:"media",DRM:"drm",OTHER:"other",RUNTIME:"runtime",SUB_TYPES:{FLV:"FLV",HLS:"HLS",MP4:"MP4",FMP4:"FMP4",MSE_ADD_SB:"MSE_ADD_SB",MSE_APPEND_BUFFER:"MSE_APPEND_BUFFER",MSE_OTHER:"MSE_OTHER",MSE_FULL:"MSE_FULL",MSE_CHANGE_TYPE:"MSE_CHANGE_TYPE",OPTION:"OPTION",DASH:"DASH",LICENSE:"LICENSE",CUSTOM_LICENSE:"CUSTOM_LICENSE",MSE_HIJACK:"MSE_HIJACK",EME_HIJACK:"EME_HIJACK",SIDX:"SIDX",NO_CANPLAY_ERROR:"NO_CANPLAY_ERROR",BUFFERBREAK_ERROR:"BUFFERBREAK_ERROR",WAITING_TIMEOUT_ERROR:"WAITING_TIMEOUT_ERROR",MEDIA_ERR_ABORTED:"MEDIA_ERR_ABORTED",MEDIA_ERR_NETWORK:"MEDIA_ERR_NETWORK",MEDIA_ERR_DECODE:"MEDIA_ERR_DECODE",MEDIA_ERR_SRC_NOT_SUPPORTED:"MEDIA_ERR_SRC_NOT_SUPPORTED",MEDIA_ERR_CODEC_NOT_SUPPORTED:"MEDIA_ERR_CODEC_NOT_SUPPORTED",MEDIA_ERR_URL_EMPTY:"MEDIA_ERR_URL_EMPTY"}},Si=(L(Zi={},xi.MANIFEST,{HLS:1100,DASH:1200}),L(Zi,xi.NETWORK,2100),L(Zi,xi.NETWORK_TIMEOUT,2101),L(Zi,xi.NETWORK_FORBIDDEN,2103),L(Zi,xi.NETWORK_NOTFOUND,2104),L(Zi,xi.NETWROK_RANGE_NOT_SATISFIABLE,2116),L(Zi,xi.DEMUX,{FLV:3100,HLS:3200,MP4:3300,FMP4:3400,SIDX:3410}),L(Zi,xi.REMUX,{FMP4:4100,MP4:4200}),L(Zi,xi.MEDIA,{MEDIA_ERR_ABORTED:5101,MEDIA_ERR_NETWORK:5102,MEDIA_ERR_DECODE:5103,MEDIA_ERR_SRC_NOT_SUPPORTED:5104,MEDIA_ERR_CODEC_NOT_SUPPORTED:5105,MEDIA_ERR_URL_EMPTY:5106,MSE_ADD_SB:5200,MSE_APPEND_BUFFER:5201,MSE_OTHER:5202,MSE_FULL:5203,MSE_HIJACK:5204,MSE_CHANGE_TYPE:5205,EME_HIJACK:5301}),L(Zi,xi.DRM,{LICENSE:7100,CUSTOM_LICENSE:7200}),L(Zi,xi.OTHER,8e3),L(Zi,xi.RUNTIME,{NO_CANPLAY_ERROR:9001,BUFFERBREAK_ERROR:9002,WAITING_TIMEOUT_ERROR:9003}),Zi),gi=function(e){G(i,e);var t=M(i);function i(e,n,s,a,r){var l;return X(this,i),(l=t.call(this,r||(null==s?void 0:s.message))).errorType=e===xi.NETWORK_TIMEOUT?xi.NETWORK:e,l.originError=s,l.ext=a,l.errorCode=Si[e][n]||Si[e],l.errorMessage=l.message,l.errorCode||(l.errorType=xi.OTHER,l.errorCode=Si[l.errorType]),l}return v(i,null,[{key:"create",value:function(e,t,n,s,a){return e instanceof i?e:(e instanceof Error&&(n=e,e=""),e||(e=xi.OTHER),new i(e,t,n,s,a))}},{key:"network",value:function(e){var t;return new i(null!=e&&e.isTimeout?xi.NETWORK_TIMEOUT:xi.NETWORK,null,e instanceof Error?e:null,{url:null==e?void 0:e.url,response:null==e?void 0:e.response,httpCode:null==e||null===(t=e.response)||void 0===t?void 0:t.status})}}]),i}(Y(Error)),Vi={DEBUG:1,LOG:2,WARN:3,ERROR:4},Yi=["Boolean","Number","String","Undefined","Null","Date","Object"],ki=function(){function e(t,i){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]"),this.logCacheLevel=(null==i?void 0:i.logCacheLevel)||3,this.logMaxSize=(null==i?void 0:i.logMaxSize)||204800,this.logSize=0,this.logTextArray=[]}return v(e,[{key:"debug",value:function(){for(var t,i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];this.logCache.apply(this,[Vi.DEBUG].concat(n)),e.disabled||(t=console).debug.apply(t,["[".concat(Ri(),"]"),this._prefix].concat(n))}},{key:"log",value:function(){for(var t,i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];this.logCache.apply(this,[Vi.LOG].concat(n)),e.disabled||(t=console).log.apply(t,["[".concat(Ri(),"]"),this._prefix].concat(n))}},{key:"warn",value:function(){for(var t,i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];this.logCache.apply(this,[Vi.WARN].concat(n)),e.disabled||(t=console).warn.apply(t,["[".concat(Ri(),"]"),this._prefix].concat(n))}},{key:"error",value:function(){for(var t,i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];this.logCache.apply(this,[Vi.ERROR].concat(n)),e.disabled||(t=console).error.apply(t,["[".concat(Ri(),"]"),this._prefix].concat(n))}},{key:"logCache",value:function(e){if(!(e<this.logCacheLevel)){var t="";try{for(var i=arguments.length,n=new Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=n.map((function(e){return Mi(e)}));t="[".concat(Ri(),"]")+this._prefix+JSON.stringify(a)}catch(l){return}if(e>=this.logCacheLevel&&(this.logSize+=t.length,this.logTextArray.push(t)),this.logSize>this.logMaxSize){var r=this.logTextArray.shift();this.logSize-=r.length}}}},{key:"getLogCache",value:function(){var e=this.logTextArray.join("\n");return this.reset(),e}},{key:"reset",value:function(){this.logTextArray=[],this.logSize=0}},{key:"table",value:function(){var t;e.disabled||(console.group(this._prefix),(t=console).table.apply(t,arguments),console.groupEnd())}},{key:"setLogLevel",value:function(e){this.logCacheLevel=e}}],[{key:"enable",value:function(){e.disabled=!1}},{key:"disable",value:function(){e.disabled=!0}}]),e}();function Ri(){return(new Date).toLocaleString()}function Ti(e){if("object"!==b(e))return e;var t=Object.prototype.toString.call(e).slice(8,-1);switch(t){case"Array":case"Uint8Array":case"ArrayBuffer":return t+"["+e.length+"]";case"Object":return"{}";default:return t}}function Mi(e,t,i){i||(i=1),t||(t=2);var n={};if(!e||"object"!==b(e))return e;var s=Object.prototype.toString.call(e).slice(8,-1);if(!Yi.includes(s))return s;if(!(i>t)){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(i===t?n[a]=Ti(e[a]):"object"===b(e[a])?n[a]=Mi(e[a],t,i+1):n[a]=e[a]);return n}}function wi(){var e,t,i=new Promise((function(i,n){e=i,t=n}));return i.used=!1,i.resolve=function(){return i.used=!0,e.apply(void 0,arguments)},i.reject=function(){return i.used=!0,t.apply(void 0,arguments)},i}function Ki(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}}L(ki,"disabled",!0);var Ii=function(e){try{return JSON.stringify(e)}catch(t){return""}};function Ci(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];try{return Gi?e&&"undefined"!=typeof ManagedMediaSource?ManagedMediaSource:window.MediaSource:null}catch(t){}}function Hi(e){return/ManagedMediaSource/gi.test(Object.prototype.toString.call(e))}function Ni(e,t){e.querySelectorAll("source").forEach((function(i){t&&!t.test(i.src)||e.removeChild(i)}))}function Fi(e,t,i){var n=self.document.createElement("source");n.type=t,n.src=i,e.appendChild(n)}var zi="appendBuffer",Ui="removeBuffer",ji="updateDuration",Ji=function(){function e(t,i){var n=this;X(this,e),L(this,"media",null),L(this,"mediaSource",null),L(this,"_openPromise",wi()),L(this,"_queue",Object.create(null)),L(this,"_sourceBuffer",Object.create(null)),L(this,"_mseFullFlag",{}),L(this,"_st",0),L(this,"_opst",0),L(this,"_logger",null),L(this,"_config",null),L(this,"_url",null),L(this,"_onStartStreaming",(function(){n._logger.debug("startstreaming")})),L(this,"_onEndStreaming",(function(){n._logger.debug("endstreaming")})),L(this,"_onSBUpdateEnd",(function(e){var t=n._queue[e];if(t){var i=t[0];if((null==i?void 0:i.opName)!==ji&&t.shift(),i){var s,a,r=Ki()-n._opst;n._logger.debug("UpdateEnd(".concat(e,"/").concat(i.opName,")"),Ii(function(e){var t=[];if(e instanceof TimeRanges)for(var i=0;i<e.length;i++)t.push({start:e.start(i),end:e.end(i)});return t}(null===(s=n._sourceBuffer[e])||void 0===s?void 0:s.buffered)),r,i.context),i.promise.resolve({name:i.opName,context:i.context,costtime:r});var l=null===(a=i.context)||void 0===a?void 0:a.callback;l&&"function"==typeof l&&l(i.context),n._startQueue(e)}}})),L(this,"_onSBUpdateError",(function(e,t){var i=n._queue[e];if(i){var s=i[0];s&&(n._logger.error("UpdateError",e,s.opName,s.context),s.promise.reject(new gi(xi.MEDIA,xi.SUB_TYPES.MSE_APPEND_BUFFER,t)))}})),this._config=Object.assign(e.getDefaultConfig(),i),t&&this.bindMedia(t),this._logger=new ki("MSE"),this._config.openLog&&ki.enable()}var t,i,n;return v(e,[{key:"isOpened",get:function(){var e;return"open"===(null===(e=this.mediaSource)||void 0===e?void 0:e.readyState)}},{key:"hasOpTasks",get:function(){var e=this,t=!1;return Object.keys(this._queue).forEach((function(i){var n=e._queue[i];Array.isArray(n)&&(t||(t=n.length>0))})),t}},{key:"url",get:function(){return this._url}},{key:"duration",get:function(){var e;return(null===(e=this.mediaSource)||void 0===e?void 0:e.duration)||-1}},{key:"isEnded",get:function(){return!!this.mediaSource&&"ended"===this.mediaSource.readyState}},{key:"streaming",get:function(){return!Hi(this.mediaSource)||this.mediaSource.streaming}},{key:"isFull",value:function(t){return t?this._mseFullFlag[t]:this._mseFullFlag[e.VIDEO]}},{key:"updateDuration",value:function(e){var t=this,i=this.mediaSource&&this.mediaSource.duration>e;if(this.mediaSource&&this.mediaSource.duration>e){var n=0;if(Object.keys(this._sourceBuffer).forEach((function(e){try{n=Math.max(t.bufferEnd(e)||0,n)}catch(i){}})),e<n)return Promise.resolve()}return this._enqueueBlockingOp((function(){t.isEnded?t._logger.debug("setDuration but ended"):t.mediaSource&&(t.mediaSource.duration=e,t._logger.debug("setDuration",e))}),ji,{isReduceDuration:i})}},{key:"open",value:function(){var e=this;if(this._openPromise.used&&!this.isOpened&&this.mediaSource){var t=this.mediaSource;t.addEventListener("sourceopen",(function i(){var n=Ki()-e._st;e._logger.debug("sourceopen",n),t.removeEventListener("sourceopen",i),e._openPromise.resolve({costtime:n})})),this._openPromise=wi()}return this._openPromise}},{key:"bindMedia",value:(n=f(y().mark((function e(t){var i,n,s,a,r,l=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.mediaSource&&!this.media){e.next=3;break}return e.next=3,this.unbindMedia();case 3:if(i=this._config,n=Ci(i.preferMMS),t&&n){e.next=7;break}throw new Error("Param media or MediaSource does not exist");case 7:return this.media=t,s=this.mediaSource=new n,a=Hi(s),this._st=Ki(),r=function e(){var i=Ki()-l._st;l._logger.debug("sourceopen"),s.removeEventListener("sourceopen",e),URL.revokeObjectURL(t.src),l._openPromise.resolve({costtime:i})},s.addEventListener("sourceopen",r),a&&(s.addEventListener("startstreaming",this._onStartStreaming),s.addEventListener("endstreaming",this._onEndStreaming)),this._url=URL.createObjectURL(s),Ni(t),i.useSourceTag?(Fi(t,"video/mp4",this._url),i.alternativeSource&&Fi(t,i.alternativeSource.type,i.alternativeSource.src)):(t.src=this._url,t.disableRemotePlayback=a),e.abrupt("return",this._openPromise);case 18:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"unbindMedia",value:(i=f(y().mark((function e(){var t,i,n,s=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._openPromise.used||this._openPromise.resolve(),t=this.mediaSource){if(Object.keys(this._queue).forEach((function(e){var t=s._queue[e];t&&t.forEach((function(e){var t,i;return null===(t=e.promise)||void 0===t||null===(i=t.resolve)||void 0===i?void 0:i.call(t)}))})),i=!!this.media&&this.media.readyState>=1,n="open"===t.readyState,i&&n)try{t.endOfStream()}catch(a){}Object.keys(this._sourceBuffer).forEach((function(e){try{t.removeSourceBuffer(s._sourceBuffer[e])}catch(a){}})),Hi(t)&&(t.removeEventListener("startstreaming",this._onStartStreaming),t.removeEventListener("endstreaming",this._onEndStreaming))}if(this.media){this.media.disableRemotePlayback=!1,Ni(this.media,/^blob\:/),this.media.removeAttribute("src");try{this.media.load()}catch(a){}this.media=null}this.mediaSource=null,this._openPromise=wi(),this._queue=Object.create(null),this._sourceBuffer=Object.create(null);case 8:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"createSource",value:function(e,t){if(!this._sourceBuffer[e]&&this.mediaSource){var i;try{i=this._sourceBuffer[e]=this.mediaSource.addSourceBuffer(t)}catch(n){throw new gi(xi.MEDIA,xi.SUB_TYPES.MSE_ADD_SB,n)}i.mimeType=t,i.addEventListener("updateend",this._onSBUpdateEnd.bind(this,e)),i.addEventListener("error",this._onSBUpdateError.bind(this,e))}}},{key:"changeType",value:function(e,t){var i=this,n=this._sourceBuffer[e];return this.mediaSource&&n&&n.mimeType!==t?"function"!=typeof n.changeType?Promise.reject(new gi(xi.MEDIA,xi.SUB_TYPES.MSE_CHANGE_TYPE,new Error("changeType is not a function"))):this._enqueueOp(e,(function(){try{n.changeType(t)}catch(s){throw new gi(xi.MEDIA,xi.SUB_TYPES.MSE_CHANGE_TYPE,s)}n.mimeType=t,i._onSBUpdateEnd(e)}),"changeType",{mimeType:t}):Promise.resolve()}},{key:"createOrChangeSource",value:function(e,t){return this.createSource(e,t),this.changeType(e,t)}},{key:"append",value:function(e,t,i){var n=this;return t&&t.byteLength&&this._sourceBuffer[e]?this._enqueueOp(e,(function(){var s;n.mediaSource&&!n.media.error&&(n._logger.debug("MSE APPEND START",i),n._opst=Ki(),null===(s=n._sourceBuffer[e])||void 0===s||s.appendBuffer(t))}),zi,i):Promise.resolve()}},{key:"remove",value:function(e,t,i,n){var s=this,a=!1;return this._mseFullFlag[e]&&(a=!0),this._enqueueOp(e,(function(){if(s.mediaSource&&!s.media.error){var a=s._sourceBuffer[e];t>=i||!a?s._onSBUpdateEnd(e):(s._opst=Ki(),s._logger.debug("MSE REMOVE START",e,t,i,n),a.remove(t,i))}}),Ui,n,a)}},{key:"clearBuffer",value:function(e,t){var i,n=this;return Object.keys(this._sourceBuffer).forEach((function(s){i=n.remove(s,e,t)})),i||Promise.resolve()}},{key:"clearAllBuffer",value:function(){var e,t=this;return Object.keys(this._sourceBuffer).forEach((function(i){var n=t._sourceBuffer[i];e=t.remove(i,0,Li.end(Li.get(n)))})),e}},{key:"clearOpQueues",value:function(e,t){var i;this._logger.debug("MSE clearOpQueue START");var n=this._queue[e];if(t&&n)this._queue[e]=[];else if(n&&n[e]&&!(n.length<5)){var s=[];n.forEach((function(e){e.context&&e.context.isinit&&s.push(e)})),this._queue[e]=n.slice(0,2),s.length>0&&(i=this._queue[e]).push.apply(i,s)}}},{key:"endOfStream",value:function(e){var t=this;return this.mediaSource&&"open"===this.mediaSource.readyState?this._enqueueBlockingOp((function(){var i=t.mediaSource;i&&"open"===i.readyState&&(t._logger.debug("MSE endOfStream START"),e?i.endOfStream(e):i.endOfStream())}),"endOfStream"):Promise.resolve()}},{key:"setLiveSeekableRange",value:function(e,t){var i=this.mediaSource;e<0||t<e||null==i||!i.setLiveSeekableRange||"open"!==i.readyState||i.setLiveSeekableRange(e,t)}},{key:"getSourceBuffer",value:function(e){return this._sourceBuffer[e]}},{key:"buffered",value:function(e){return Li.get(this._sourceBuffer[e])}},{key:"bufferStart",value:function(e){return Li.start(this.buffered(e))}},{key:"bufferEnd",value:function(e){return Li.end(this.buffered(e))}},{key:"_enqueueOp",value:function(e,t,i,n,s){var a=this;if(!this.mediaSource)return Promise.resolve();var r=this._queue[e]=this._queue[e]||[],l={exec:t,promise:wi(),opName:i,context:n};return s?(r.splice(0,0,l),this._mseFullFlag[e]=!1,this._startQueue(e)):r.push(l),this.isOpened||this.isEnded?1===r.length&&this._startQueue(e):this._openPromise.then((function(){1===r.length&&a._startQueue(e)})),l.promise}},{key:"_enqueueBlockingOp",value:(t=f(y().mark((function e(t,i,n){var s,a,r=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.mediaSource){e.next=2;break}return e.abrupt("return",Promise.resolve());case 2:if((s=Object.keys(this._sourceBuffer)).length){e.next=5;break}return e.abrupt("return",t());case 5:return a=[],s.forEach((function(e){var t=r._queue[e],s=wi();a.push(s),t.push({exec:function(){s.resolve()},promise:s,opName:i,context:n}),1===t.length&&r._startQueue(e)})),e.abrupt("return",Promise.all(a).then((function(){try{return t()}finally{s.forEach((function(e){var t=r._queue[e],i=r._sourceBuffer[e];null==t||t.shift(),i&&i.updating||r._startQueue(e)}))}})));case 8:case"end":return e.stop()}}),e,this)}))),function(e,i,n){return t.apply(this,arguments)})},{key:"_startQueue",value:function(e){var t=this._queue[e];if(t){var i=t[0];if(i&&!this._mseFullFlag[e])try{i.exec()}catch(a){var n,s;if(a&&a.message&&a.message.indexOf("SourceBuffer is full")>=0)this._mseFullFlag[e]=!0,i.context&&"object"===b(i.context)&&(i.context.isFull=!0),this._logger.error("[MSE error], context,",i.context," ,name,",i.opName,",err,SourceBuffer is full"),null==i||null===(n=i.promise)||void 0===n||n.reject(new gi(xi.MEDIA,xi.SUB_TYPES.MSE_FULL,a));else this._logger.error(a),null==i||null===(s=i.promise)||void 0===s||s.reject(a.constructor===gi?a:new gi(xi.MEDIA,xi.SUB_TYPES.MSE_OTHER,a)),t.shift(),this._startQueue(e)}}}},{key:"setTimeoffset",value:function(e,t,i){var n=this;return this._enqueueOp(e,(function(){t<0&&(t+=.001),n._sourceBuffer[e].timestampOffset=t,n._onSBUpdateEnd(e)}),"setTimeoffset",i)}},{key:"abort",value:function(e,t){var i=this;return this.isOpened?this._enqueueOp(e,(function(){i._sourceBuffer[e].abort(),i._onSBUpdateEnd(e)}),"abort",t):Promise.resolve()}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'video/mp4; codecs="avc1.42E01E,mp4a.40.2"',t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=Ci(t);if(!i)return!1;try{return i.isTypeSupported(e)}catch(n){return this._logger.error(e,n),!1}}},{key:"isMMSOnly",value:function(){return"undefined"!=typeof ManagedMediaSource&&"undefined"==typeof MediaSource}},{key:"getDefaultConfig",value:function(){return{openLog:!1,preferMMS:!1,useSourceTag:!1,alternativeSource:null}}}]),e}();L(Ji,"VIDEO","video"),L(Ji,"AUDIO","audio");var Pi="fetch",Di="xhr",Ei="arraybuffer",Bi="text",_i="json",Qi=function(e){G(i,e);var t=M(i);function i(e,n,s,a){var r;return X(this,i),L(R(r=t.call(this,a)),"retryCount",0),L(R(r),"isTimeout",!1),L(R(r),"loaderType",Pi),L(R(r),"startTime",0),L(R(r),"endTime",0),L(R(r),"options",{}),r.url=e,r.request=n,r.response=s,r}return v(i)}(Y(Error)),Oi=Object.prototype.toString;function Ai(e){if("[object Object]"!==Oi.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function qi(e){if(e&&null!==e[0]&&void 0!==e[0]&&(0!==e[0]||null!==e[1]&&void 0!==e[1])){var t="bytes="+e[0]+"-";return e[1]&&(t+=e[1]),t}}function $i(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function en(e,t){if(e){if(!t)return e;var i,n=Object.keys(t).map((function(e){if(null!=(i=t[e]))return Array.isArray(i)?e+="[]":i=[i],i.map((function(t){var i;return i=t,"[object Date]"===Oi.call(i)?t=t.toISOString():function(e){return null!==e&&"object"===b(e)}(t)&&(t=JSON.stringify(t)),"".concat($i(e),"=").concat($i(t))})).join("&")})).filter(Boolean).join("&");if(n){var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e}}function tn(e,t,i,n,s,a,r,l,o,d,c){return s=null!=s?parseFloat(s):null,n=parseInt(n||"0",10),Number.isNaN(n)&&(n=0),{data:e,done:t,options:{range:o,vid:d,index:l,contentLength:n,age:s,startTime:a,firstByteTime:r,endTime:Date.now(),priOptions:c},response:i}}function nn(e,t){return Math.round(8*e*1e3/t/1024)}var sn="real_time_speed",an=2097152,rn=function(e){G(n,e);var t,i=M(n);function n(){var e;return X(this,n),L(R(e=i.call(this)),"_abortController",null),L(R(e),"_timeoutTimer",null),L(R(e),"_reader",null),L(R(e),"_response",null),L(R(e),"_aborted",!1),L(R(e),"_index",-1),L(R(e),"_range",null),L(R(e),"_receivedLength",0),L(R(e),"_running",!1),L(R(e),"_logger",null),L(R(e),"_vid",""),L(R(e),"_firtstByte",0),L(R(e),"_onProcessMinLen",0),L(R(e),"_onCancel",null),L(R(e),"_priOptions",null),e}return v(n,[{key:"load",value:function(e){var t,i=this,n=e.url,s=e.vid,a=e.timeout,r=e.dynamicTimeoutIns,l=e.responseType,o=e.onProgress,d=e.index,c=e.onTimeout,u=e.onCancel,m=e.range,h=e.transformResponse,p=e.request,b=e.params,Z=e.logger,X=e.method,W=e.headers,v=e.body,L=e.mode,G=e.credentials,x=e.cache,S=e.redirect,g=e.referrer,V=e.referrerPolicy,Y=e.onProcessMinLen,k=e.priOptions,R=e.streamRes,T=e.firstMaxChunkSize;this._logger=Z,this._aborted=!1,this._onProcessMinLen=Y,this._onCancel=u,this._abortController="undefined"!=typeof AbortController&&new AbortController,this._running=!0,this._index=d,this._range=m||[0,0],this._vid=s||n,this._priOptions=k||{},this._firstMaxChunkSize=T;var M={method:X,headers:W,body:v,mode:L,credentials:G,cache:x,redirect:S,referrer:g,referrerPolicy:V,signal:null===(t=this._abortController)||void 0===t?void 0:t.signal},w=!1;clearTimeout(this._timeoutTimer),n=en(n,b);var K=qi(m);K&&(W=p?p.headers:M.headers=M.headers||(Headers?new Headers:{}),Headers&&W instanceof Headers?W.append("Range",K):W.Range=K);var I=r&&"function"==typeof r.getTimeout?r.getTimeout(a):a;I&&(this._timeoutTimer=setTimeout((function(){if(w=!0,r&&"function"==typeof r.update&&(i._logger.debug("[dytimeout], fetch timeout update rtt,",5*I),r.update(5*I)),i.cancel(),c){var e=new Qi(n,M,null,"timeout");e.isTimeout=!0,c(e,{index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions})}}),I));var C=Date.now();return this._logger.debug("[fetch load start], index,",d,",range,",m,",[dytimeout]",I),new Promise((function(e,t){(R?new Promise((function(e){e(R)})):fetch(p||n,p?void 0:M)).then(function(){var s=f(y().mark((function s(a){var c,u,p,b,Z;return y().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:if(clearTimeout(i._timeoutTimer),i._response=a,!i._aborted&&i._running){s.next=4;break}return s.abrupt("return");case 4:if(h&&(a=h(a,n)||a),a.ok){s.next=7;break}throw new Qi(n,M,a,"bad network response");case 7:if(c=Date.now(),r&&"function"==typeof r.update&&(u=c-C,i._logger.debug("[dytimeout] fetch update rtt,",u),r.update(u)),l!==Bi){s.next=16;break}return s.next=12,a.text();case 12:p=s.sent,i._running=!1,s.next=38;break;case 16:if(l!==_i){s.next=23;break}return s.next=19,a.json();case 19:p=s.sent,i._running=!1,s.next=38;break;case 23:if(!o){s.next=30;break}return i.resolve=e,i.reject=t,i._loadChunk(a,o,C,c),s.abrupt("return");case 30:return s.next=32,a.arrayBuffer();case 32:p=s.sent,p=new Uint8Array(p),i._running=!1,b=Date.now()-C,Z=nn(p.byteLength,b),i.emit(sn,{speed:Z,len:p.byteLength,time:b,vid:i._vid,index:i._index,range:i._range,priOptions:i._priOptions});case 38:i._logger.debug("[fetch load end], index,",d,",range,",m),e(tn(p,!0,a,a.headers.get("Content-Length"),a.headers.get("age"),C,c,d,m,i._vid,i._priOptions));case 40:case"end":return s.stop()}}),s)})));return function(e){return s.apply(this,arguments)}}()).catch((function(e){var s;clearTimeout(i._timeoutTimer),i._running=!1,i._aborted&&!w||((e=e instanceof Qi?e:new Qi(n,M,null,null===(s=e)||void 0===s?void 0:s.message)).startTime=C,e.endTime=Date.now(),e.isTimeout=w,e.options={index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions},t(e))}))}))}},{key:"cancel",value:(t=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._aborted){e.next=2;break}return e.abrupt("return");case 2:if(this._aborted=!0,this._running=!1,!this._response){e.next=14;break}if(e.prev=5,!this._reader){e.next=9;break}return e.next=9,this._reader.cancel();case 9:e.next=13;break;case 11:e.prev=11,e.t0=e.catch(5);case 13:this._response=this._reader=null;case 14:if(this._abortController){try{this._abortController.abort()}catch(t){}this._abortController=null}this._onCancel&&this._onCancel({index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions});case 16:case"end":return e.stop()}}),e,this,[[5,11]])}))),function(){return t.apply(this,arguments)})},{key:"_loadChunk",value:function(e,t,i,n){var s=this;if(!e.body||!e.body.getReader){this._running=!1;var a=new Qi(e.url,"",e,"onProgress of bad response.body.getReader");return a.options={index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions},void this.reject(a)}this._onProcessMinLen>0&&(this._cache=new Uint8Array(an),this._writeIdx=0);var r,l,o,d=this._reader=e.body.getReader(),c=function(){var a=f(y().mark((function a(){var u,m,h,p,b,Z,f,X,W,v;return y().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return l=Date.now(),a.prev=1,a.next=4,d.read();case 4:r=a.sent,o=Date.now(),a.next=13;break;case 8:return a.prev=8,a.t0=a.catch(1),o=Date.now(),s._aborted||(s._running=!1,a.t0.options={index:s._index,range:s._range,vid:s._vid,priOptions:s._priOptions},s.reject(a.t0)),a.abrupt("return");case 13:if(m=(null===(u=s._range)||void 0===u?void 0:u.length)>0?s._range[0]:0,h=m+s._receivedLength,!s._aborted){a.next=19;break}return s._running=!1,t(void 0,!1,{range:[h,h],vid:s._vid,index:s._index,startTime:l,endTime:o,st:i,firstByteTime:n,priOptions:s._priOptions},e),a.abrupt("return");case 19:p=r.value?r.value.byteLength:0,s._receivedLength+=p,s._logger.debug("【fetchLoader,onProgress call】,task,",s._range,", start,",h,", end,",m+s._receivedLength,", done,",r.done),s._onProcessMinLen>0?s._writeIdx+p>=s._onProcessMinLen||r.done?((b=new Uint8Array(s._writeIdx+p)).set(s._cache.slice(0,s._writeIdx),0),p>0&&b.set(r.value,s._writeIdx),s._writeIdx=0,s._logger.debug("【fetchLoader,onProgress enough】,done,",r.done,",len,",b.byteLength,", writeIdx,",s._writeIdx)):p>0&&s._writeIdx+p<an?(s._cache.set(r.value,s._writeIdx),s._writeIdx+=p,s._logger.debug("【fetchLoader,onProgress cache】,len,",p,", writeIdx,",s._writeIdx)):p>0&&(Z=new Uint8Array(s._writeIdx+p+2048),s._logger.debug("【fetchLoader,onProgress extra start】,size,",s._writeIdx+p+2048,", datalen,",p,", writeIdx,",s._writeIdx),Z.set(s._cache.slice(0,s._writeIdx),0),p>0&&Z.set(r.value,s._writeIdx),s._writeIdx+=p,delete s._cache,s._cache=Z,s._logger.debug("【fetchLoader,onProgress extra end】,len,",p,", writeIdx,",s._writeIdx)):b=r.value,(b&&b.byteLength>0||r.done)&&(s._firstMaxChunkSize&&(s._firtstByte?s._cacheData&&((X=new Uint8Array(s._cacheData.byteLength+b.byteLength)).set(s._cacheData,0),X.set(b,s._cacheData.byteLength),b=X,s._cacheData=null):(s._firtstByte++,f=b.slice(0,s._firstMaxChunkSize),s._cacheData=b.slice(s._firstMaxChunkSize),b=f)),t(b,r.done,{range:[s._range[0]+s._receivedLength-(b?b.byteLength:0),s._range[0]+s._receivedLength],vid:s._vid,index:s._index,startTime:l,endTime:o,st:i,firstByteTime:n,priOptions:s._priOptions},e)),r.done?(W=Date.now()-i,v=nn(s._receivedLength,W),s.emit(sn,{speed:v,len:s._receivedLength,time:W,vid:s._vid,index:s._index,range:s._range,priOptions:s._priOptions}),s._running=!1,s._logger.debug("[fetchLoader onProgress end],task,",s._range,",done,",r.done),s.resolve(tn(r,!0,e,e.headers.get("Content-Length"),e.headers.get("age"),i,n,s._index,s._range,s._vid,s._priOptions))):s._firstMaxChunkSize?setTimeout((function(){c()}),0):c();case 25:case"end":return a.stop()}}),a,null,[[1,8]])})));return function(){return a.apply(this,arguments)}}();c()}},{key:"receiveLen",get:function(){return this._receivedLength}},{key:"running",get:function(){return this._running},set:function(e){this._running=e}}],[{key:"isSupported",value:function(){return!("undefined"==typeof fetch)}}]),n}(J);var ln=function(e){G(i,e);var t=M(i);function i(){var e;return X(this,i),L(R(e=t.call(this)),"_xhr",null),L(R(e),"_aborted",!1),L(R(e),"_timeoutTimer",null),L(R(e),"_range",null),L(R(e),"_receivedLength",0),L(R(e),"_url",null),L(R(e),"_onProgress",null),L(R(e),"_index",-1),L(R(e),"_headers",null),L(R(e),"_currentChunkSizeKB",384),L(R(e),"_timeout",null),L(R(e),"_xhr",null),L(R(e),"_withCredentials",null),L(R(e),"_startTime",-1),L(R(e),"_loadCompleteResolve",null),L(R(e),"_loadCompleteReject",null),L(R(e),"_runing",!1),L(R(e),"_logger",!1),L(R(e),"_vid",""),L(R(e),"_responseType",void 0),L(R(e),"_credentials",void 0),L(R(e),"_method",void 0),L(R(e),"_transformResponse",void 0),L(R(e),"_firstRtt",void 0),L(R(e),"_onCancel",null),L(R(e),"_priOptions",null),L(R(e),"_dynamicTimeoutIns",null),e}return v(i,[{key:"load",value:function(e){var t=this;clearTimeout(this._timeoutTimer),this._logger=e.logger,this._range=e.range,this._onProgress=e.onProgress,this._index=e.index,this._headers=e.headers,this._withCredentials="include"===e.credentials||"same-origin"===e.credentials,this._body=e.body||null,e.method&&(this._method=e.method),this._timeout=e.timeout||null,this._runing=!0,this._vid=e.vid||e.url,this._responseType=e.responseType,this._dynamicTimeoutIns=e.dynamicTimeoutIns,this._firstRtt=-1,this._onTimeout=e.onTimeout,this._onCancel=e.onCancel,this._request=e.request,this._priOptions=e.priOptions||{},this._logger.debug("【xhrLoader task】, range",this._range),this._url=en(e.url,e.params);var i=Date.now();return new Promise((function(e,i){t._loadCompleteResolve=e,t._loadCompleteReject=i,t._startLoad()})).catch((function(e){if(clearTimeout(t._timeoutTimer),t._runing=!1,!t._aborted||"timeout"===e.message)throw(e=e instanceof Qi?e:new Qi(t._url,t._request)).startTime=i,e.endTime=Date.now(),e.options={index:t._index,vid:t._vid,priOptions:t._priOptions},e}))}},{key:"_startLoad",value:function(){var e=null;if(this._responseType===Ei&&this._range&&this._range.length>1)if(this._onProgress){this._firstRtt=-1;var t=1024*this._currentChunkSizeKB,i=this._range[0]+this._receivedLength,n=this._range[1];t<this._range[1]-i&&(n=i+t),e=[i,n],this._logger.debug("[xhr_loader->],tast :",this._range,", SubRange, ",e)}else e=this._range,this._logger.debug("[xhr_loader->],tast :",this._range,", allRange, ",e);this._internalOpen(e)}},{key:"_internalOpen",value:function(e){var t=this;try{this._startTime=Date.now();var i=this._xhr=new XMLHttpRequest;i.open(this._method||"GET",this._url,!0),i.responseType=this._responseType;var n=this._dynamicTimeoutIns&&"function"==typeof this._dynamicTimeoutIns.getTimeout?this._dynamicTimeoutIns.getTimeout(this._timeout):this._timeout;n&&(i.timeout=n),this._logger.debug("[dytimeout], xhr set timeout",n),i.withCredentials=this._withCredentials,i.onload=this._onLoad.bind(this),i.onreadystatechange=this._onReadyStatechange.bind(this),i.onerror=function(e){var i,n,s;t._running=!1;var a=new Qi(t._url,t._request,null==e||null===(i=e.currentTarget)||void 0===i?void 0:i.response,"xhr.onerror.status:"+(null==e||null===(n=e.currentTarget)||void 0===n?void 0:n.status)+",statusText,"+(null==e||null===(s=e.currentTarget)||void 0===s?void 0:s.statusText));a.options={index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions},t._loadCompleteReject(a)},i.ontimeout=function(e){t._dynamicTimeoutIns&&"function"==typeof t._dynamicTimeoutIns.update&&(t._logger.debug("[dytimeout], xhr timeout update rtt,",5*n),t._dynamicTimeoutIns.update(5*i.timeout)),t.cancel();var s=new Qi(t._url,t._request,{status:408},"timeout");t._onTimeout&&(s.isTimeout=!0,t._onTimeout(s,{index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions})),s.options={index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions},t._loadCompleteReject(s)};var s=this._headers||{},a=qi(e);a&&(s.Range=a),s&&Object.keys(s).forEach((function(e){i.setRequestHeader(e,s[e])})),this._logger.debug("[xhr.send->] tast,",this._range,",load sub range, ",e,",[dytimeout],",n),i.send(this._body)}catch(r){r.options={index:this._index,range:e,vid:this._vid,priOptions:this._priOptions},this._loadCompleteReject(r)}}},{key:"_onReadyStatechange",value:function(e){if(2===e.target.readyState&&(this._firstRtt<0&&(this._firstRtt=Date.now()),this._dynamicTimeoutIns&&"function"==typeof this._dynamicTimeoutIns.update)){var t=Date.now()-this._startTime;this._logger.debug("[dytimeout] xhr update rtt,",t),this._dynamicTimeoutIns.update(t)}}},{key:"_onLoad",value:function(e){var t,i=e.target.status;if(i<200||i>299){var n=new Qi(this._url,null,p(p({},e.target.response),{},{status:i}),"bad response,status:"+i);return n.options={index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions},this._loadCompleteReject(n)}var s,a=null,r=!1,l=(null===(t=this._range)||void 0===t?void 0:t.length)>0?this._range[0]:0;if(this._responseType===Ei){var o,d=new Uint8Array(e.target.response);if(s=l+this._receivedLength,d&&d.byteLength>0){this._receivedLength+=d.byteLength;var c=Date.now()-this._startTime,u=nn(this._receivedLength,c);this.emit(sn,{speed:u,len:this._receivedLength,time:c,vid:this._vid,index:this._index,range:[s,l+this._receivedLength],priOptions:this._priOptions})}a=d,r=!((null===(o=this._range)||void 0===o?void 0:o.length)>1&&this._range[1]&&this._receivedLength<this._range[1]-this._range[0]),this._logger.debug("[xhr load done->], tast :",this._range,", start",s,"end ",l+this._receivedLength,",dataLen,",d?d.byteLength:0,",receivedLength",this._receivedLength,",index,",this._index,", done,",r)}else r=!0,a=e.target.response;var m={ok:i>=200&&i<300,status:i,statusText:this._xhr.statusText,url:this._xhr.responseURL,headers:this._getHeaders(this._xhr),body:this._xhr.response};this._transformResponse&&(m=this._transformResponse(m,this._url)||m),this._onProgress&&this._onProgress(a,r,{index:this._index,vid:this._vid,range:[s,l+this._receivedLength],startTime:this._startTime,endTime:Date.now(),priOptions:this._priOptions},m),r?(this._runing=!1,this._loadCompleteResolve&&this._loadCompleteResolve(tn(this._onProgress?null:a,r,m,m.headers["content-length"],m.headers.age,this._startTime,this._firstRtt,this._index,this._range,this._vid,this._priOptions))):this._startLoad()}},{key:"cancel",value:function(){if(!this._aborted)return this._aborted=!0,this._runing=!1,K(x(i.prototype),"removeAllListeners",this).call(this),this._onCancel&&this._onCancel({index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions}),this._xhr?this._xhr.abort():void 0}},{key:"receiveLen",get:function(){return this._receivedLength}},{key:"running",get:function(){return this._running},set:function(e){this._running=e}},{key:"_getHeaders",value:function(e){var t,i={},n=F(e.getAllResponseHeaders().trim().split("\r\n"));try{for(n.s();!(t=n.n()).done;){var s=t.value.split(": ");i[s[0].toLowerCase()]=s.slice(1).join(": ")}}catch(a){n.e(a)}finally{n.f()}return i}}],[{key:"isSupported",value:function(){return"undefined"!=typeof XMLHttpRequest}}]),i}(J),on=["retry","retryDelay","onRetryError","transformError","changeUrlRetry"],dn=function(){function e(t,i){X(this,e),this.promise=wi(),this.alive=!!i.onProgress,!i.logger&&(i.logger=new ki("Loader")),this._loaderType=t,this._loader=t===Pi&&"undefined"!=typeof fetch?new rn:new ln,this._config=i,this._retryCount=0,this._retryTimer=null,this._canceled=!1,this._retryCheckFunc=i.retryCheckFunc,this._logger=i.logger,this._useUrlIdx=-1}var t;return v(e,[{key:"exec",value:function(){var e=this,t=this._config,i=t.retry,n=t.retryDelay,s=t.onRetryError,a=t.transformError,r=t.changeUrlRetry,l=k(t,on),o=l.urlList||this._config.urlList||[],d=function(){var t=f(y().mark((function t(){var c,u,m,h,p,b;return y().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,c=l,e._changeUrl&&(e._changeUrl=!1,null!=o&&o[e._useUrlIdx]&&(c=Object.assign({},c,{url:o[e._useUrlIdx]}),e._logger.debug("[task],changeUrlRetry,urlIdx:",e._useUrlIdx,c.url))),t.next=5,e._loader.load(c);case 5:u=t.sent,e.promise.resolve(u),t.next=30;break;case 9:if(t.prev=9,t.t0=t.catch(0),e._loader.running=!1,e._logger.debug("[task request catch err]",t.t0),!e._canceled){t.next=15;break}return t.abrupt("return");case 15:if(t.t0.loaderType=e._loaderType,t.t0.retryCount=e._retryCount,m=t.t0,a&&(m=a(m)||m),s&&e._retryCount>0&&s(m,e._retryCount,{index:l.index,vid:l.vid,range:l.range,priOptions:l.priOptions}),e._retryCount++,h=!0,e._retryCheckFunc&&(h=e._retryCheckFunc(t.t0)),!(h&&e._retryCount<=i)){t.next=29;break}return clearTimeout(e._retryTimer),e._logger.debug("[task request setTimeout],retry",e._retryCount,",retry range,",l.range),r&&e._useUrlIdx<(null==o?void 0:o.length)-1&&(e._useUrlIdx<0&&(p=new URL(l.url),b=p.hostname,e._useUrlIdx=o.findIndex((function(e){return e.indexOf(b)>=0}))),e._useUrlIdx++,e._changeUrl=!0,e._logger.debug("retry changeurl, urlIdx: ",e._useUrlIdx,",retry range,",l.range)),e._retryTimer=setTimeout(d,n),t.abrupt("return");case 29:e.promise.reject(m);case 30:case"end":return t.stop()}}),t,null,[[0,9]])})));return function(){return t.apply(this,arguments)}}();return d(),this.promise}},{key:"cancel",value:(t=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return clearTimeout(this._retryTimer),this._canceled=!0,this._loader.running=!1,e.abrupt("return",this._loader.cancel());case 4:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"running",get:function(){return this._loader&&this._loader.running}},{key:"loader",get:function(){return this._loader}}]),e}();function cn(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];if((t=t.filter(Boolean)).length<2)return t[0];var n=new Uint8Array(t.reduce((function(e,t){return e+t.byteLength}),0)),s=0;return t.forEach((function(e){n.set(e,s),s+=e.byteLength})),n}function un(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Promise((function(t){return setTimeout(t,e)}))}var mn=function(e){G(n,e);var t,i=M(n);function n(e){var t;return X(this,n),L(R(t=i.call(this,e)),"type",Pi),L(R(t),"_queue",[]),L(R(t),"_alive",[]),L(R(t),"_currentTask",null),L(R(t),"_finnalUrl",""),L(R(t),"_config",void 0),t._config=function(e){return p({loaderType:Pi,retry:0,retryDelay:0,timeout:0,request:null,onTimeout:void 0,onProgress:void 0,onRetryError:void 0,transformRequest:void 0,transformResponse:void 0,transformError:void 0,responseType:Bi,range:void 0,url:"",params:void 0,method:"GET",headers:{},body:void 0,mode:void 0,credentials:void 0,cache:void 0,redirect:void 0,referrer:void 0,referrerPolicy:void 0,integrity:void 0,onProcessMinLen:0},e)}(e),t._config.loaderType!==Di&&rn.isSupported()||(t.type=Di),t.log=e.logger,t}return v(n,[{key:"isFetch",value:function(){return this.type===Pi}},{key:"load",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"string"!=typeof e&&e?i=e:i.url=e||i.url||this._config.url,(i=Object.assign({},this._config,i)).params&&(i.params=Object.assign({},i.params)),i.headers&&Ai(i.headers)&&(i.headers=Object.assign({},i.headers)),i.body&&Ai(i.body)&&(i.body=Object.assign({},i.body)),i.transformRequest&&(i=i.transformRequest(i)||i),i.logger=this.log,i.dynamicTimeoutIns=this._config.dynamicTimeoutIns;var n=new dn(this.type,i);return n.loader.on(sn,(function(e){t.emit(sn,e)})),this._queue.push(n),1!==this._queue.length||this._currentTask&&this._currentTask.running||this._processTask(),n.promise}},{key:"cancel",value:(t=f(y().mark((function e(){var t;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this._queue.map((function(e){return e.cancel()})).concat(this._alive.map((function(e){return e.cancel()}))),this._currentTask&&t.push(this._currentTask.cancel()),this._queue=[],this._alive=[],e.next=6,Promise.all(t);case 6:return e.next=8,un();case 8:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"_processTask",value:function(){var e=this;if(this._currentTask=this._queue.shift(),this._currentTask){this._currentTask.alive&&this._alive.push(this._currentTask);var t=this._currentTask.exec().catch((function(e){}));t&&"function"==typeof t.finally&&t.finally((function(){var t,i;null!==(t=e._currentTask)&&void 0!==t&&t.alive&&(null===(i=e._alive)||void 0===i?void 0:i.length)>0&&(e._alive=e._alive.filter((function(t){return t&&t!==e._currentTask}))),e._processTask()}))}}}],[{key:"isFetchSupport",value:function(){return rn.isSupported()}}]),n}(J),hn={416:Si[xi.NETWROK_RANGE_NOT_SATISFIABLE],403:Si[xi.NETWORK_FORBIDDEN],404:Si[xi.NETWORK_NOTFOUND],timeout:Si[xi.NETWORK_TIMEOUT],"4xx":"".concat(Si[xi.NETWORK],"4XX"),"5xx":"".concat(Si[xi.NETWORK],"5XX"),networkError:Si[xi.NETWORK],contentError:"".concat(Si[xi.NETWORK],"contentError"),mse:Si[xi.MEDIA][xi.SUB_TYPES.MSE_OTHER],mseOpen:Si[xi.MEDIA][xi.SUB_TYPES.MSE_ADD_SB],mseAppend:Si[xi.MEDIA][xi.SUB_TYPES.MSE_APPEND_BUFFER],mse_hijack:Si[xi.MEDIA][xi.SUB_TYPES.MSE_HIJACK],eme_hijack:Si[xi.MEDIA][xi.SUB_TYPES.EME_HIJACK],metaError:Si[xi.DEMUX][xi.SUB_TYPES.MP4],muxError:Si[xi.REMUX][xi.SUB_TYPES.FMP4],other:Si[xi.OTHER],waitTimeout:Si[xi.RUNTIME][xi.SUB_TYPES.BUFFERBREAK_ERROR],waitTimeoutWithHidden:Si[xi.RUNTIME][xi.SUB_TYPES.WAITING_TIMEOUT_ERROR],drm:Si[xi.DRM][xi.SUB_TYPES.LICENSE]},pn=xi;var yn=v((function e(t,i,n){X(this,e);var s=0,a=0;n&&n.range&&n.range.length>1&&(s=n.range[0],a=n.range[1]);var r=function(e){return hn[e]||e}(i);return{errorCode:r,errorType:t,errorMessage:(null==n?void 0:n.httpText)||(null==n?void 0:n.message),url:null==n?void 0:n.url,httpCode:i,version:vi,rangeStart:s,rangeEnd:a,ext:n,mediaError:{code:r,message:(null==n?void 0:n.httpText)||(null==n?void 0:n.message)}}})),bn=v((function e(t,i,n){return X(this,e),{errorCode:i,errorType:t,version:vi,errorMessage:n.msg,ext:n,mediaError:{code:i,message:n.msg}}})),Zn={};Zn.nowTime=function(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}},Zn.concatData=function(e,t){var i=[],n=0;e&&i.push(e),t&&i.push(t),i.every((function(e){return e&&(n+=e.byteLength),!0}));var s=new Uint8Array(n),a=0;return i.every((function(e){return e&&(s.set(e,a),a+=e.byteLength),!0})),s};var fn=v((function e(t,i){X(this,e),this.type="file",this.message=t,this.data=i})),Xn=function(){function e(){X(this,e),L(this,"_data",Object.create(null))}return v(e,[{key:"set",value:function(e,t){this._data[e]=t}},{key:"get",value:function(e){return this._data[e]}},{key:"clear",value:function(){this._data=Object.create(null)}}]),e}();function Wn(e,t){var i=e.trak;if(i&&i.length){var n=i.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),s=i.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(n||s){var a=[],r=[];if(t){var l=[],o=0,d=t.start+t.size;t.references.forEach((function(e,i){l.push({index:i,startTime:o,endTime:o+e.subsegment_duration/t.timescale,duration:e.subsegment_duration/t.timescale,range:[d,d+e.referenced_size],frames:[]}),o+=e.subsegment_duration/t.timescale,d+=e.referenced_size})),a=l,r=l}else{var c,u,m=function(t){return t?[{index:0,startTime:0,endTime:t.duration/t.timescale,duration:t.duration/t.timescale,range:[e.start+e.size,""],frames:[]}]:[]};r=m(e.mvhd.duration?e.mvhd:null===(c=n.mdia)||void 0===c?void 0:c.mdhd),a=m(e.mvhd.duration?e.mvhd:null===(u=s.mdia)||void 0===u?void 0:u.mdhd)}return{videoSegments:r,audioSegments:a}}}}function vn(e,t){var i=e.trak;if(i&&i.length){var n=i.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),s=i.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(n||s){var a,r=[],l=[];if(n){var o,d,c,u=null===(o=n.mdia)||void 0===o||null===(d=o.minf)||void 0===d?void 0:d.stbl;if(!u)return;var m=null===(c=n.mdia.mdhd)||void 0===c?void 0:c.timescale,h=u.stts,p=u.stsc,y=u.stsz,b=u.stco,Z=u.stss,f=u.ctts;if(!(m&&h&&p&&y&&b&&Z))return;a=(r=Ln(t,m,h,p,y,b,Z,f)).map((function(e){return e.duration}))}if(s){var X,W,v,L=null===(X=s.mdia)||void 0===X||null===(W=X.minf)||void 0===W?void 0:W.stbl;if(!L)return;var G=null===(v=s.mdia.mdhd)||void 0===v?void 0:v.timescale,x=L.stts,S=L.stsc,g=L.stsz,V=L.stco;if(!(G&&x&&S&&g&&V))return;l=Ln(t,G,x,S,g,V,null,null,a)}return{videoSegments:r,audioSegments:l}}}}function Ln(e,t,i,n,s,a,r,l,o){var d,c,u,m,h,p=[],y=[],b=[],Z=n.entries,f=a.entries,X=s.entrySizes,W=null==r?void 0:r.entries,v=null==l?void 0:l.entries;v&&(c=[],v.forEach((function(e){for(var t=e.count,i=e.offset,n=0;n<t;n++)c.push(i)}))),W&&(u={},W.forEach((function(e){u[e-1]=!0})));var L=0,G=0,x=0,S=0,g=0,V=null===(d=Z[0])||void 0===d?void 0:d.samplesPerChunk,Y=Z[1]?Z[1].firstChunk-1:1/0,k=0,R=-1;i.entries.forEach((function(e){var t=e.count,i=e.delta;h=i;for(var n=0;n<t;n++)m={dts:k,startTime:L,duration:h,size:X[G]||s.sampleSize,offset:f[x]+g,index:G},W&&(m.keyframe=u[G],m.keyframe?(R++,y.push([m]),b.push(m.duration)):(y[y.length-1].push(m),b[y.length-1]+=m.duration),m.gopId=R),c&&G<c.length&&(m.pts=k+c[G]),0===G&&(m.pts=0),p.push(m),L+=h,k+=i,++G<V?g+=m.size:(x++,g=0,x>=Y&&(S++,Y=Z[S+1]?Z[S+1].firstChunk-1:1/0),V+=Z[S].samplesPerChunk)}));var T=p.length;if(!T||r&&!p[0].keyframe)return[];var M,w=[],K=[],I=0,H=0,N=function(e){var i;M=K[K.length-1],w.push({index:w.length,startTime:(null===(i=w[w.length-1])||void 0===i?void 0:i.endTime)||K[0].startTime/t,endTime:(M.startTime+M.duration)/t,duration:e,range:[K[0].offset,M.offset+M.size],frames:K}),I=0,K=[]};if(r)for(var F=e*t,z=0,U=y.length;z<U;z++){var j;I+=b[z],(j=K).push.apply(j,C(y[z])),z+1<U?(0===z||I>F)&&N(I/t):N(I/t)}else for(var J=(o=o||[])[0]||e,P=0;P<T;P++){K.push(p[P]);var D=(I+=p[P].duration)/t;(P+1>=T||D+H>=J)&&(H+=D-J,N(D),J=o[w.length]||e)}return w}function Gn(e,t){var i="",n="",s=0,a=0,r=0,l=0,o=0,d=0,c=0;e.mvhd&&(o=e.mvhd.duration/e.mvhd.timescale);var u,m=e.trak;if(m){var h,p,y,b,Z,f,X,W,v,L,G,x,S,g,V,Y,k,R=m.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),T=m.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),M=null;if(R)if(M=null===(p=R.mdia)||void 0===p||null===(y=p.minf)||void 0===y||null===(b=y.stbl)||void 0===b?void 0:b.stsd.entries[0])if(s=M.width,a=M.height,d=null===(Z=R.mdia)||void 0===Z||null===(f=Z.mdhd)||void 0===f?void 0:f.timescale,i=null===(X=M.avcC||M.hvcC||M.av1C)||void 0===X?void 0:X.codec,"encv"===M.type)h=null===(W=M.sinf)||void 0===W||null===(v=W.schi)||void 0===v?void 0:v.tenc.default_KID;if(T)if(M=null===(L=T.mdia)||void 0===L||null===(G=L.minf)||void 0===G||null===(x=G.stbl)||void 0===x?void 0:x.stsd.entries[0])if(r=M.channelCount,l=("mp4a"===(u=M).type?u.sampleRate>0?u.sampleRate:u.esds.sampleRate:u.sampleRate)||0,n=null===(S=M.esds)||void 0===S?void 0:S.codec,c=null===(g=T.mdia)||void 0===g||null===(V=g.mdhd)||void 0===V?void 0:V.timescale,"enca"===M.type)h=h||(null===(Y=M.sinf)||void 0===Y||null===(k=Y.schi)||void 0===k?void 0:k.tenc.default_KID);return{kid:h?h.join(""):null,videoCodec:i,audioCodec:n,width:s,height:a,videoTimescale:d,audioChannelCount:r,audioSampleRate:l,duration:o,audioTimescale:c,moov:e,isFragmentMP4:t}}}function xn(e){return"number"==typeof e&&!Number.isNaN(e)}var Sn=["vid","cache"],gn=function(e){G(h,e);var t,i,n,s,a,r,l,o,d,c,u,m=M(h);function h(e){var t;X(this,h),L(R(t=m.call(this)),"vid",""),L(R(t),"url",""),L(R(t),"meta",{}),L(R(t),"downloadInfo",[]),L(R(t),"videoSegments",[]),L(R(t),"audioSegments",[]),L(R(t),"cache",null),L(R(t),"_currentSegmentIndex",-1),L(R(t),"_currentLoadingSegmentIndex",-1),L(R(t),"buffer",void 0),L(R(t),"_error",void 0),L(R(t),"_transformError",(function(e){return e})),t._config=p({vid:"",moovEnd:8e4,segmentDuration:2,maxDownloadInfoSize:30,responseType:"arraybuffer",cache:null},e);var i=t._config,n=i.vid,s=i.cache,a=k(i,Sn);return t.cache=s||new Xn,t.vid=n||a.url,t.url=a.url,a.transformError=t._transformError,t.logger=new ki("MP4Loader_"+t.vid),e.openLog&&ki.enable(),a.logger=t.logger,t._loader=new mn(a),t._loader.on(sn,(function(e){t.emit(sn,e)})),t}return v(h,[{key:"isMetaLoaded",get:function(){return this.videoSegments.length||this.audioSegments.length}},{key:"setCurrentSegment",value:function(e){xn(e)&&(this._currentSegmentIndex=e)}},{key:"isLastSegment",value:function(e){var t,i;return!!xn(e)&&e>=((null===(t=this.videoSegments[this.videoSegments.length-1])||void 0===t?void 0:t.index)||(null===(i=this.audioSegments[this.audioSegments.length-1])||void 0===i?void 0:i.index)||0)}},{key:"isSegmentLoading",value:function(e){return e===this._currentLoadingSegmentIndex}},{key:"changeUrl",value:(u=f(y().mark((function e(t){var i,n,s,a=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=a.length>1&&void 0!==a[1]?a[1]:t,n=a.length>2?a[2]:void 0,s=a.length>3?a[3]:void 0,e.next=5,this.reset(s);case 5:t&&(this.url=t),i&&(this.vid=i),n&&(this._config.moovEnd=n);case 8:case"end":return e.stop()}}),e,this)}))),function(e){return u.apply(this,arguments)})},{key:"getOrLoadMeta",value:(c=f(y().mark((function e(t){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isMetaLoaded){e.next=3;break}return e.next=3,this.loadMeta(t);case 3:return e.abrupt("return",this.meta);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return c.apply(this,arguments)})},{key:"loadMetaProcess",value:(d=f(y().mark((function e(t,i,n,s){var a,r,l,o,d=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=I(i,2),r=a[0],l=a[1],this._error=!1,this.logger.debug("[loadMetaProcess start], range,",[r,l]),o=function(){var e=f(y().mark((function e(i,a,o){var c,u,m,h,p,b,Z,X,W,v,L,G,x;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(d.meta&&null!=o&&o.range&&o.range.length>0&&o.range[1]>=l&&(a=!0,d.logger.debug("[loadMetaProcess],data done,setstate true,[",r,l,"]")),a&&null!=o&&o.range&&o.range.length>0&&o.range[1]<l&&(a=!1,d.logger.debug("[loadMetaProcess],data not done,setstate false,[",r,l,"]")),d.logger.debug("[loadMetaProcess],task,[",r,l,"], range,",o.range,",dataLen,",i?i.byteLength:void 0,", state,",a,",err,",d._error),!d._error&&i&&i.byteLength>0&&n(i,a,o),!d.meta.moov&&!d._error){e.next=6;break}return e.abrupt("return");case 6:if(!(i&&i.byteLength>0)){e.next=51;break}if(d.buffer=cn(d.buffer,i),c=Ae.findBox(d.buffer,["moov"])[0]){e.next=23;break}if(u=Ae.findBox(d.buffer,["mdat"])[0],!a){e.next=23;break}if(u){e.next=18;break}return d._error=!0,n(null,a,o,{err:"cannot find moov or mdat box"}),e.abrupt("return");case 18:return m=u.start+u.size,e.next=21,d.loadData([m,""],t,s);case 21:(h=e.sent)&&(c=Ae.findBox(h.data,["moov"])[0]);case 23:if(!(c&&a&&c.size>c.data.length)){e.next=27;break}return d.logger.debug("[loadMetaProcess],moov not all, range,",o.range[1],",dataLen,",d.buffer.byteLength,", state,",a),e.next=27,d.loadMetaProcess(t,[o.range[1],c.start+c.size-1],n);case 27:if(!(c&&c.size<=c.data.length)||d.meta.moov){e.next=51;break}if(p=Ae.moov(c)){e.next=33;break}return d._error=!0,n(null,a,o,{err:"cannot parse moov box"}),e.abrupt("return");case 33:if(b=vn(p,d._config.segmentDuration),Z=function(){var e=f(y().mark((function e(i){var n,a;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(n=Ae.findBox(d.buffer,[i])[0])){e.next=11;break}if(!(n.size>n.data.length)){e.next=10;break}return e.next=5,d.loadData([n.start,n.start+n.size-1],t,s);case 5:if(!(a=e.sent)){e.next=8;break}return e.abrupt("return",Ae.findBox(a.data,[i])[0]);case 8:e.next=11;break;case 10:return e.abrupt("return",n);case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),X=!1,b&&b.videoSegments.length&&b.audioSegments.length){e.next=41;break}return e.next=39,Z("sidx");case 39:(W=e.sent)&&(v=Ae.sidx(W))&&(b=Wn(p,v),X=!0);case 41:if(b){e.next=45;break}return d._error=!0,n(null,a,o,{err:"cannot parse segments"}),e.abrupt("return");case 45:d.meta=Gn(p,X),G=(L=b).videoSegments,x=L.audioSegments,d.videoSegments=G,d.audioSegments=x,d.logger.debug("[loadMetaProcess] moov ok"),n(void 0,a,{meta:{meta:d.meta,videoSegments:G,audioSegments:x}});case 51:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}(),e.next=6,this.loadData([r,l||this._config.moovEnd],t,p({onProgress:o},s));case 6:case"end":return e.stop()}}),e,this)}))),function(e,t,i,n){return d.apply(this,arguments)})},{key:"loadMeta",value:(o=f(y().mark((function e(t,i,n){var s,a,r,l,o,d,c,u,m,h,p,b,Z,f;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=[],this.logger.debug("[loadMeta start]"),e.next=4,this.loadData([0,i||this._config.moovEnd],t,n);case 4:if(a=e.sent){e.next=7;break}return e.abrupt("return");case 7:if(s.push(a),r=Ae.findBox(a.data,["moov"])[0]){e.next=23;break}if(l=Ae.findBox(a.data,["mdat"])[0]){e.next=13;break}throw new fn("cannot find moov or mdat box",a.data);case 13:return o=l.start+l.size,e.next=16,this.loadData([o],t,n);case 16:if(a=e.sent){e.next=19;break}return e.abrupt("return");case 19:if(s.push(a),r=Ae.findBox(a.data,["moov"],o)[0]){e.next=23;break}throw new fn("cannot find moov box",a.data);case 23:if(!(r.size>r.data.length)){e.next=31;break}return e.next=26,this.loadData([a.data.length,r.start+r.size-1],t,n);case 26:if(a=e.sent){e.next=29;break}return e.abrupt("return");case 29:s.push(a),r.data=cn(r.data,a.data);case 31:if(d=Ae.moov(r)){e.next=34;break}throw new fn("cannot parse moov box",r.data);case 34:if(c=vn(d,this._config.segmentDuration)){e.next=37;break}throw new fn("cannot parse segments",r.data);case 37:return c.videoSegments.length&&c.audioSegments.length||(m=Ae.findBox(this.buffer,["moof"])[0],h=Ae.findBox(this.buffer,["sidx"])[0],m&&m.size<=m.data.length&&h&&(p=Ae.moof(m),u=Ae.sidx(h),p&&u&&(c=Wn(d,u)))),this.meta=Gn(d,u),Z=(b=c).videoSegments,f=b.audioSegments,this.videoSegments=Z,this.audioSegments=f,this.logger.debug("[load moov end!!!!!]"),e.abrupt("return",{meta:this.meta,videoSegments:Z,audioSegments:f,responses:s});case 44:case"end":return e.stop()}}),e,this)}))),function(e,t,i){return o.apply(this,arguments)})},{key:"loadCacheMeta",value:function(e,t){var i=vn(e.moov,this._config.segmentDuration),n=i.videoSegments,s=i.audioSegments;this.videoSegments=n,this.audioSegments=s,this._currentSegmentIndex=t,this.meta=e}},{key:"getSegmentByTime",value:function(e){var t,i;return this.videoSegments.length?(t=this.videoSegments.find((function(t){return t.startTime<=e&&t.endTime>e})))&&(i=this.audioSegments[t.index]):i=this.audioSegments.find((function(t){return t.startTime<=e&&t.endTime>e})),{video:t,audio:i}}},{key:"loadSegmentByTime",value:(l=f(y().mark((function e(t,i){var n,s,a,r,l,o=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=!(o.length>2&&void 0!==o[2])||o[2],s=o.length>3&&void 0!==o[3]?o[3]:{},this.isMetaLoaded){e.next=5;break}return e.next=5,this.loadMeta(i);case 5:return a=this.getSegmentByTime(t),r=a.video,l=a.audio,e.abrupt("return",this._loadSegment(r,l,i,n,s));case 7:case"end":return e.stop()}}),e,this)}))),function(e,t){return l.apply(this,arguments)})},{key:"loadNextSegment",value:(r=f(y().mark((function e(t){var i,n,s,a,r=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=!(r.length>1&&void 0!==r[1])||r[1],n=r.length>2&&void 0!==r[2]?r[2]:{},this.isMetaLoaded){e.next=5;break}return e.next=5,this.loadMeta();case 5:return s=this.videoSegments[this._currentSegmentIndex+1],a=this.audioSegments[this._currentSegmentIndex+1],e.abrupt("return",this._loadSegment(s,a,t,i,n));case 8:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"preload",value:(a=f(y().mark((function e(t){var i,n,s,a,r,l,o,d=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isMetaLoaded){e.next=3;break}return e.next=3,this.loadMeta(!0);case 3:if(t&&!(t<0)){e.next=5;break}return e.abrupt("return");case 5:if(i=this.getSegmentByTime(t),n=i.video,s=i.audio,a=Math.max((null==n?void 0:n.index)||0,(null==s?void 0:s.index)||0)){e.next=9;break}return e.abrupt("return");case 9:return r=this.videoSegments.slice(0,a),l=this.audioSegments.slice(0,a),o=function(){var e=f(y().mark((function e(t){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(t>a)){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,d._loadSegment(r[t],l[t],!0,!1);case 4:return e.next=6,o(t+1);case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),e.next=14,o(0);case 14:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"cancel",value:function(){return this._loader.cancel()}},{key:"reset",value:(s=f(y().mark((function e(){var t=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.length>0&&void 0!==t[0]&&t[0]){e.next=5;break}return this.logger.debug("[MP4loader reset func call loader.cancel]"),e.next=5,this._loader.cancel();case 5:this.vid=this.url="",this.meta={},this.downloadInfo=[],this.videoSegments=[],this.audioSegments=[],this._currentSegmentIndex=-1,this._currentLoadingSegmentIndex=-1;case 12:case"end":return e.stop()}}),e,this)}))),function(){return s.apply(this,arguments)})},{key:"destroy",value:(n=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.reset();case 2:this.cache.clear();case 3:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})},{key:"_loadSegment",value:(i=f(y().mark((function e(t,i,n,s,a){var r,l;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t||i){e.next=2;break}return e.abrupt("return");case 2:return r=(null==t?void 0:t.index)||(null==i?void 0:i.index)||0,this._currentLoadingSegmentIndex=r,e.prev=4,e.next=7,this.loadData([Math.min((null==t?void 0:t.range[0])||1/0,(null==i?void 0:i.range[0])||1/0),Math.max((null==t?void 0:t.range[1])||0,(null==i?void 0:i.range[1])||0)],n,a);case 7:l=e.sent;case 8:return e.prev=8,this._currentLoadingSegmentIndex=-1,e.finish(8);case 11:if(l){e.next=13;break}return e.abrupt("return");case 13:return s&&(this._currentSegmentIndex=r),l.video=t,l.audio=i,e.abrupt("return",l);case 17:case"end":return e.stop()}}),e,this,[[4,,8,11]])}))),function(e,t,n,s,a){return i.apply(this,arguments)})},{key:"loadData",value:(t=f(y().mark((function e(t,i,n){var s,a,r,l;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=this._getCacheKey(t),e.next=3,this.cache.get(s);case 3:if(a=e.sent){e.next=11;break}return l=n&&n.url?n.url:this.url,e.next=8,this._loader.load(l,p({range:t,vid:this.vid},n));case 8:r=e.sent,e.next=12;break;case 11:r={data:a,state:!0,options:{fromCache:!0,range:t,vid:this.vid}};case 12:if(r){e.next=14;break}return e.abrupt("return");case 14:return a||(r.data&&this.downloadInfo.push({startTime:r.startTime,endTime:r.endTime,size:r.data.byteLength,range:t}),this.downloadInfo&&this.downloadInfo.length>this._config.maxDownloadInfoSize&&(this.downloadInfo=this.downloadInfo.slice(-this._config.maxDownloadInfoSize))),e.abrupt("return",r);case 17:case"end":return e.stop()}}),e,this)}))),function(e,i,n){return t.apply(this,arguments)})},{key:"_getCacheKey",value:function(e){return(this.vid||this.url)+":"+e}}]),h}(J),Vn=function(){try{return"undefined"!=typeof localStorage&&"setItem"in window.localStorage&&!!window.localStorage.setItem}catch(e){return!1}}()&&!function(){var e="_localstorage_support_test";try{return window.localStorage.setItem(e,!0),window.localStorage.removeItem(e),!1}catch(t){return!0}}(),Yn=kn();function kn(){if(Vn)try{return!!window.localStorage.getItem("playerlog")}catch(e){return!1}return!1}function Rn(e){for(var t,i=arguments.length,n=new Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];Yn&&console.log&&(t=console).log.apply(t,["[logger]",Zn.nowTime(),e].concat(n))}!function(){if(Vn)try{return!!window.localStorage.getItem("playertestlog")}catch(e){return!1}}();var Tn="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihhPWEuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLGEpfXJldHVybiByfWZ1bmN0aW9uIHQodCl7Zm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dmFyIGE9bnVsbCE9YXJndW1lbnRzW3JdP2FyZ3VtZW50c1tyXTp7fTtyJTI/ZShPYmplY3QoYSksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kodCxlLGFbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOmUoT2JqZWN0KGEpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGsoYS5rZXkpLGEpfX1mdW5jdGlvbiBuKGUsdCxyKXtyZXR1cm4gdCYmYShlLnByb3RvdHlwZSx0KSxyJiZhKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBpKGUsdCxyKXtyZXR1cm4odD1rKHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuKG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuKHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBjKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4obD1jKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1bbnVsbF07YS5wdXNoLmFwcGx5KGEsdCk7dmFyIG49bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZSxhKSk7cmV0dXJuIHImJnUobixyLnByb3RvdHlwZSksbn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCl7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX1mdW5jdGlvbiBkKGUpe3ZhciB0PWMoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPW8oZSk7aWYodCl7dmFyIG49byh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLG4pfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZih0aGlzLHIpfX1mdW5jdGlvbiBoKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1vKGUpKTspO3JldHVybiBlfWZ1bmN0aW9uIHAoKXtyZXR1cm4gcD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIGE9aChlLHQpO2lmKGEpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSx0KTtyZXR1cm4gbi5nZXQ/bi5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTpuLnZhbHVlfX0scC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBhLG4saSxzLG89W10sdT0hMCxjPSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47dT0hMX1lbHNlIGZvcig7ISh1PShhPWkuY2FsbChyKSkuZG9uZSkmJihvLnB1c2goYS52YWx1ZSksby5sZW5ndGghPT10KTt1PSEwKTt9Y2F0Y2gobCl7Yz0hMCxuPWx9ZmluYWxseXt0cnl7aWYoIXUmJm51bGwhPXIucmV0dXJuJiYocz1yLnJldHVybigpLE9iamVjdChzKSE9PXMpKXJldHVybn1maW5hbGx5e2lmKGMpdGhyb3cgbn19cmV0dXJuIG99fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB5KGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBnKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBtKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBnKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLGE9bmV3IEFycmF5KHQpO3I8dDtyKyspYVtyXT1lW3JdO3JldHVybiBhfWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX12YXIgYj0idmlkZW8iLF89ImF1ZGlvIix3PSJtZXRhZGF0YSIseD0iYXYxIixTPSJhdmMiLEE9ImhldmMiLEQ9ImFhYyIsVD0iZzcxMTBhIixFPSJnNzExMG0iLEI9Im9wdXMiLFU9Im1wMyIsQz0iTEFSR0VfQVZfU0hJRlQiLFA9IkxBUkdFX1ZJREVPX0dBUCIsST0iTEFSR0VfVklERU9fR0FQX0JFVFdFRU5fQ0hVTksiLE09IkxBUkdFX0FVRElPX0dBUCIsej0iQVVESU9fRklMTEVEIixPPSJBVURJT19EUk9QUEVEIixSPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSxpKHRoaXMsImlkIiwxKSxpKHRoaXMsInR5cGUiLGIpLGkodGhpcywiY29kZWNUeXBlIixTKSxpKHRoaXMsInBpZCIsLTEpLGkodGhpcywiaHZjQyIsdm9pZCAwKSxpKHRoaXMsImNvZGVjIiwiIiksaSh0aGlzLCJ0aW1lc2NhbGUiLDApLGkodGhpcywiZm9ybWF0VGltZXNjYWxlIiwwKSxpKHRoaXMsInNlcXVlbmNlTnVtYmVyIiwwKSxpKHRoaXMsImJhc2VNZWRpYURlY29kZVRpbWUiLDApLGkodGhpcywiYmFzZUR0cyIsMCksaSh0aGlzLCJkdXJhdGlvbiIsMCksaSh0aGlzLCJ3YXJuaW5ncyIsW10pLGkodGhpcywic2FtcGxlcyIsW10pLGkodGhpcywicHBzIixbXSksaSh0aGlzLCJzcHMiLFtdKSxpKHRoaXMsInZwcyIsW10pLGkodGhpcywiZnBzTnVtIiwwKSxpKHRoaXMsImZwc0RlbiIsMCksaSh0aGlzLCJzYXJSYXRpbyIsW10pLGkodGhpcywid2lkdGgiLDApLGkodGhpcywiaGVpZ2h0IiwwKSxpKHRoaXMsIm5hbFVuaXRTaXplIiw0KSxpKHRoaXMsInByZXNlbnQiLCExKSxpKHRoaXMsImlzVmlkZW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJpc0F1ZGlvRW5jcnlwdGlvbiIsITEpLGkodGhpcywiaXNWaWRlbyIsITApLGkodGhpcywibGFzdEtleUZyYW1lRHRzIiwwKSxpKHRoaXMsImtpZCIsbnVsbCksaSh0aGlzLCJwc3NoIixudWxsKSxpKHRoaXMsImV4dCIsdm9pZCAwKX1yZXR1cm4gbihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlTnVtYmVyPXRoaXMud2lkdGg9dGhpcy5oZWlnaHQ9dGhpcy5mcHNEZW49dGhpcy5mcHNOdW09dGhpcy5kdXJhdGlvbj10aGlzLmJhc2VNZWRpYURlY29kZVRpbWU9dGhpcy50aW1lc2NhbGU9MCx0aGlzLmNvZGVjPSIiLHRoaXMucHJlc2VudD0hMSx0aGlzLnBpZD0tMSx0aGlzLnBwcz1bXSx0aGlzLnNwcz1bXSx0aGlzLnZwcz1bXSx0aGlzLnNhclJhdGlvPVtdLHRoaXMuc2FtcGxlcz1bXSx0aGlzLndhcm5pbmdzPVtdLHRoaXMuaHZjQz1udWxsfX0se2tleToiZmlyc3REdHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXMubGVuZ3RoP3RoaXMuc2FtcGxlc1swXS5kdHM6bnVsbH19LHtrZXk6ImZpcnN0UHRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYW1wbGVzLmxlbmd0aD90aGlzLnNhbXBsZXNbMF0ucHRzOm51bGx9fSx7a2V5OiJzYW1wbGVzRHVyYXRpb24iLGdldDpmdW5jdGlvbigpe2lmKHRoaXMuc2FtcGxlcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5zYW1wbGVzWzBdLHQ9dGhpcy5zYW1wbGVzW3RoaXMuc2FtcGxlcy5sZW5ndGgtMV07cmV0dXJuIHQuZHRzLWUuZHRzK3QuZHVyYXRpb259cmV0dXJuIDB9fSx7a2V5OiJleGlzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIS9hdjAxLy50ZXN0KHRoaXMuY29kZWMpfHwhISh0aGlzLnBwcy5sZW5ndGgmJnRoaXMuc3BzLmxlbmd0aCYmdGhpcy5jb2RlYyl9fSx7a2V5OiJoYXNTYW1wbGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnNhbXBsZXMubGVuZ3RofX0se2tleToiaXNFbmNyeXB0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZpZGVvRW5jcnlwdGlvbn19XSksZX0oKSxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSxpKHRoaXMsImlkIiwyKSxpKHRoaXMsInR5cGUiLF8pLGkodGhpcywiY29kZWNUeXBlIixEKSxpKHRoaXMsInBpZCIsLTEpLGkodGhpcywiY29kZWMiLCIiKSxpKHRoaXMsImNvbnRhaW5lciIsIiIpLGkodGhpcywic2VxdWVuY2VOdW1iZXIiLDApLGkodGhpcywic2FtcGxlRHVyYXRpb24iLDApLGkodGhpcywidGltZXNjYWxlIiwwKSxpKHRoaXMsImZvcm1hdFRpbWVzY2FsZSIsMCksaSh0aGlzLCJiYXNlTWVkaWFEZWNvZGVUaW1lIiwwKSxpKHRoaXMsImR1cmF0aW9uIiwwKSxpKHRoaXMsIndhcm5pbmdzIixbXSksaSh0aGlzLCJzYW1wbGVzIixbXSksaSh0aGlzLCJiYXNlRHRzIiwwKSxpKHRoaXMsInNhbXBsZVNpemUiLDE2KSxpKHRoaXMsInNhbXBsZVJhdGUiLDApLGkodGhpcywiY2hhbm5lbENvdW50IiwwKSxpKHRoaXMsIm9iamVjdFR5cGUiLDApLGkodGhpcywic2FtcGxlUmF0ZUluZGV4IiwwKSxpKHRoaXMsInBhcnNlZENvZGVjIixudWxsKSxpKHRoaXMsImNvbmZpZyIsW10pLGkodGhpcywicHJlc2VudCIsITEpLGkodGhpcywiaXNWaWRlb0VuY3J5cHRpb24iLCExKSxpKHRoaXMsImlzQXVkaW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJraWQiLG51bGwpLGkodGhpcywiZXh0Iix2b2lkIDApfXJldHVybiBuKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VOdW1iZXI9MCx0aGlzLnRpbWVzY2FsZT0wLHRoaXMuc2FtcGxlRHVyYXRpb249MCx0aGlzLnNhbXBsZVJhdGU9MCx0aGlzLmNoYW5uZWxDb3VudD0wLHRoaXMuYmFzZU1lZGlhRGVjb2RlVGltZT0wLHRoaXMucHJlc2VudD0hMSx0aGlzLnBpZD0tMSx0aGlzLmNvZGVjPSIiLHRoaXMuc2FtcGxlcz1bXSx0aGlzLmNvbmZpZz1bXSx0aGlzLndhcm5pbmdzPVtdfX0se2tleToiZXhpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5zYW1wbGVSYXRlfHwhdGhpcy5jaGFubmVsQ291bnR8fCF0aGlzLmNvZGVjJiYhdGhpcy5jb250YWluZXJ8fHRoaXMuY29kZWNUeXBlIT09RCYmdGhpcy5jb2RlY1R5cGUhPT1UJiZ0aGlzLmNvZGVjVHlwZSE9PUUmJnRoaXMuY29kZWNUeXBlIT09QiYmdGhpcy5jb2RlY1R5cGUhPT1VKX19LHtrZXk6Imhhc1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc2FtcGxlcy5sZW5ndGh9fSx7a2V5OiJpc0VuY3J5cHRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQXVkaW9FbmNyeXB0aW9ufX0se2tleToiZmlyc3REdHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXMubGVuZ3RoP3RoaXMuc2FtcGxlc1swXS5kdHM6bnVsbH19LHtrZXk6ImZpcnN0UHRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYW1wbGVzLmxlbmd0aD90aGlzLnNhbXBsZXNbMF0ucHRzOm51bGx9fSx7a2V5OiJzYW1wbGVzRHVyYXRpb24iLGdldDpmdW5jdGlvbigpe2lmKHRoaXMuc2FtcGxlcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5zYW1wbGVzWzBdLHQ9dGhpcy5zYW1wbGVzW3RoaXMuc2FtcGxlcy5sZW5ndGgtMV07cmV0dXJuIHQuZHRzLWUuZHRzK3QuZHVyYXRpb259cmV0dXJuIDB9fV0pLGV9KCksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSxpKHRoaXMsImZsYWciLHt9KSxpKHRoaXMsImtleWZyYW1lIiwhMSksaSh0aGlzLCJnb3BJZCIsMCksaSh0aGlzLCJkdXJhdGlvbiIsMCksaSh0aGlzLCJzaXplIiwwKSxpKHRoaXMsInVuaXRzIixbXSksaSh0aGlzLCJjaHJvbWFGb3JtYXQiLDQyMCksdGhpcy5vcmlnaW5QdHM9dGhpcy5wdHM9dCx0aGlzLm9yaWdpbkR0cz10aGlzLmR0cz1hLG4mJih0aGlzLnVuaXRzPW4pfXJldHVybiBuKGUsW3trZXk6ImN0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHRzLXRoaXMuZHRzfX0se2tleToic2V0VG9LZXlmcmFtZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmtleWZyYW1lPSEwLHRoaXMuZmxhZy5kZXBlbmRzT249Mix0aGlzLmZsYWcuaXNOb25TeW5jU2FtcGxlPTB9fV0pLGV9KCksRj1uKChmdW5jdGlvbiBlKHQsYSxuLHMpe3IodGhpcyxlKSxpKHRoaXMsImR1cmF0aW9uIiwxMDI0KSxpKHRoaXMsImZsYWciLHtkZXBlbmRzT246Mixpc05vblN5bmNTYW1wbGU6MH0pLGkodGhpcywia2V5ZnJhbWUiLCEwKSx0aGlzLm9yaWdpblB0cz10aGlzLnB0cz10aGlzLmR0cz10LHRoaXMuZGF0YT1hLHRoaXMuc2l6ZT1hLmJ5dGVMZW5ndGgsdGhpcy5zYW1wbGVPZmZzZXQ9cyxuJiYodGhpcy5kdXJhdGlvbj1uKX0pKSxOPW4oKGZ1bmN0aW9uIGUodCxhKXtyKHRoaXMsZSksaSh0aGlzLCJ0aW1lIiwwKSx0aGlzLmRhdGE9dCx0aGlzLm9yaWdpblB0cz10aGlzLnB0cz1hfSkpLGo9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KE4pLEc9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KE4pLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLGkodGhpcywiaWQiLDMpLGkodGhpcywidHlwZSIsdyksaSh0aGlzLCJ0aW1lc2NhbGUiLDApLGkodGhpcywiZmx2U2NyaXB0U2FtcGxlcyIsW10pLGkodGhpcywic2VpU2FtcGxlcyIsW10pfXJldHVybiBuKGUsW3trZXk6ImV4aXN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZmx2U2NyaXB0U2FtcGxlcy5sZW5ndGgmJiF0aGlzLnNlaVNhbXBsZXMubGVuZ3RofHwhdGhpcy50aW1lc2NhbGUpfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy50aW1lc2NhbGU9MCx0aGlzLmZsdlNjcmlwdFNhbXBsZXM9W10sdGhpcy5zZWlTYW1wbGVzPVtdfX0se2tleToiaGFzU2FtcGxlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZmx2U2NyaXB0U2FtcGxlcy5sZW5ndGgmJiF0aGlzLnNlaVNhbXBsZXMubGVuZ3RoKX19XSksZX0oKSxLPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZihyKHRoaXMsZSksaSh0aGlzLCJfYnl0ZXNBdmFpbGFibGUiLHZvaWQgMCksaSh0aGlzLCJfYml0c0F2YWlsYWJsZSIsMCksaSh0aGlzLCJfd29yZCIsMCksIXQpdGhyb3cgbmV3IEVycm9yKCJFeHBHb2xvbWIgZGF0YSBwYXJhbXMgaXMgcmVxdWlyZWQiKTt0aGlzLl9kYXRhPXQsdGhpcy5fYnl0ZXNBdmFpbGFibGU9dC5ieXRlTGVuZ3RoLHRoaXMuX2J5dGVzQXZhaWxhYmxlJiZ0aGlzLl9sb2FkV29yZCgpfXJldHVybiBuKGUsW3trZXk6ImJpdHNBdmFpbGFibGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9iaXRzQXZhaWxhYmxlfX0se2tleToiX2xvYWRXb3JkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2RhdGEuYnl0ZUxlbmd0aC10aGlzLl9ieXRlc0F2YWlsYWJsZSx0PU1hdGgubWluKDQsdGhpcy5fYnl0ZXNBdmFpbGFibGUpO2lmKDA9PT10KXRocm93IG5ldyBFcnJvcigiTm8gYnl0ZXMgYXZhaWxhYmxlIik7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoNCk7ci5zZXQodGhpcy5fZGF0YS5zdWJhcnJheShlLGUrdCkpLHRoaXMuX3dvcmQ9bmV3IERhdGFWaWV3KHIuYnVmZmVyKS5nZXRVaW50MzIoMCksdGhpcy5fYml0c0F2YWlsYWJsZT04KnQsdGhpcy5fYnl0ZXNBdmFpbGFibGUtPXR9fSx7a2V5OiJza2lwQml0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fYml0c0F2YWlsYWJsZT5lKXRoaXMuX3dvcmQ8PD1lLHRoaXMuX2JpdHNBdmFpbGFibGUtPWU7ZWxzZXtlLT10aGlzLl9iaXRzQXZhaWxhYmxlO3ZhciB0PU1hdGguZmxvb3IoZS84KTtlLT04KnQsdGhpcy5fYnl0ZXNBdmFpbGFibGUtPXQsdGhpcy5fbG9hZFdvcmQoKSx0aGlzLl93b3JkPDw9ZSx0aGlzLl9iaXRzQXZhaWxhYmxlLT1lfX19LHtrZXk6InJlYWRCaXRzIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlPjMyKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYWQgbW9yZSB0aGFuIDMyIGJpdHMiKTt2YXIgdD1NYXRoLm1pbih0aGlzLl9iaXRzQXZhaWxhYmxlLGUpLHI9dGhpcy5fd29yZD4+PjMyLXQ7cmV0dXJuIHRoaXMuX2JpdHNBdmFpbGFibGUtPXQsdGhpcy5fYml0c0F2YWlsYWJsZT4wP3RoaXMuX3dvcmQ8PD10OnRoaXMuX2J5dGVzQXZhaWxhYmxlPjAmJnRoaXMuX2xvYWRXb3JkKCksKHQ9ZS10KT4wJiZ0aGlzLl9iaXRzQXZhaWxhYmxlP3I8PHR8dGhpcy5yZWFkQml0cyh0KTpyfX0se2tleToic2tpcExaIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO2ZvcihlPTA7ZTx0aGlzLl9iaXRzQXZhaWxhYmxlOysrZSlpZigwIT0odGhpcy5fd29yZCYyMTQ3NDgzNjQ4Pj4+ZSkpcmV0dXJuIHRoaXMuX3dvcmQ8PD1lLHRoaXMuX2JpdHNBdmFpbGFibGUtPWUsZTtyZXR1cm4gdGhpcy5fbG9hZFdvcmQoKSxlK3RoaXMuc2tpcExaKCl9fSx7a2V5OiJza2lwVUVHIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2tpcEJpdHMoMSt0aGlzLnNraXBMWigpKX19LHtrZXk6InJlYWRVRUciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5za2lwTFooKTtyZXR1cm4gdGhpcy5yZWFkQml0cyhlKzEpLTF9fSx7a2V5OiJyZWFkRUciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVUVHKCk7cmV0dXJuIDEmZT8xK2U+Pj4xOi0xKihlPj4+MSl9fSx7a2V5OiJyZWFkQm9vbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMucmVhZEJpdHMoMSl9fSx7a2V5OiJyZWFkVUJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZEJpdHMoOCl9fSx7a2V5OiJza2lwU2NhbGluZ0xpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD04LHI9OCxhPTA7YTxlO2ErKykwIT09ciYmKHI9KHQrdGhpcy5yZWFkRUcoKSsyNTYpJTI1NiksdD0wPT09cj90OnJ9fV0pLGV9KCkscT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cih0aGlzLGUpLHRoaXMubmFtZT10fHwiIix0aGlzLl9wcmVmaXg9IlsiLmNvbmNhdCh0aGlzLm5hbWUsIl0iKX1yZXR1cm4gbihlLFt7a2V5OiJ3YXJuIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2lmKCFlLmRpc2FibGVkKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyKSxuPTA7bjxyO24rKylhW25dPWFyZ3VtZW50c1tuXTsodD1jb25zb2xlKS53YXJuLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fV0sW3trZXk6ImVuYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSExfX0se2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSEwfX1dKSxlfSgpO2kocSwiZGlzYWJsZWQiLCEwKTt2YXIgVz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJkZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxhPXQsbj0wLGk9dC5sZW5ndGg7bjxpOylpZihhW25dPDEyOClyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhW25dKSksKytuO2Vsc2V7aWYoYVtuXTwxOTIpO2Vsc2UgaWYoYVtuXTwyMjQpe2lmKGUuX2NoZWNrQ29udGludWF0aW9uKGEsbiwxKSl7dmFyIHM9KDMxJmFbbl0pPDw2fDYzJmFbbisxXTtpZihzPj0xMjgpe3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDY1NTM1JnMpKSxuKz0yO2NvbnRpbnVlfX19ZWxzZSBpZihhW25dPDI0MCl7aWYoZS5fY2hlY2tDb250aW51YXRpb24oYSxuLDIpKXt2YXIgbz0oMTUmYVtuXSk8PDEyfCg2MyZhW24rMV0pPDw2fDYzJmFbbisyXTtpZihvPj0yMDQ4JiY1NTI5NiE9KDYzNDg4Jm8pKXtyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzNSZvKSksbis9Mztjb250aW51ZX19fWVsc2UgaWYoYVtuXTwyNDgmJmUuX2NoZWNrQ29udGludWF0aW9uKGEsbiwzKSl7dmFyIHU9KDcmYVtuXSk8PDE4fCg2MyZhW24rMV0pPDwxMnwoNjMmYVtuKzJdKTw8Nnw2MyZhW24rM107aWYodT42NTUzNiYmdTwxMTE0MTEyKXt1LT02NTUzNixyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh1Pj4+MTB8NTUyOTYpKSxyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMDIzJnV8NTYzMjApKSxuKz00O2NvbnRpbnVlfX1yLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzMykpLCsrbn1yZXR1cm4gci5qb2luKCIiKX19LHtrZXk6Il9jaGVja0NvbnRpbnVhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPWU7aWYodCtyPGEubGVuZ3RoKXtmb3IoO3ItLTspaWYoMTI4IT0oMTkyJmFbKyt0XSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9fV0pLGV9KCksWD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyxZPVgmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb2NhbGVMb3dlckNhc2UoKSxRPVgmJi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS8udGVzdChZKSxaPVgmJlkuaW5jbHVkZXMoImZpcmVmb3giKSxKPVgmJlkuaW5jbHVkZXMoImFuZHJvaWQiKTtmdW5jdGlvbiAkKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07dD10LmZpbHRlcihCb29sZWFuKTt2YXIgYT1uZXcgVWludDhBcnJheSh0LnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LmJ5dGVMZW5ndGh9KSwwKSksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2Euc2V0KGUsbiksbis9ZS5ieXRlTGVuZ3RofSkpLGF9dmFyIGVlPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIHRlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihlW3RdPDw4KSsoZVt0KzFdfHwwKX1mdW5jdGlvbiByZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4oZVt0XTw8MjQ+Pj4wKSsoZVt0KzFdPDwxNikrKGVbdCsyXTw8OCkrKGVbdCszXXx8MCl9ZnVuY3Rpb24gYWUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuIHJlKGUsdCkqZWUrcmUoZSx0KzQpfWZ1bmN0aW9uIG5lKGUpe2Zvcih2YXIgdCxyPSJhdmMxLiIsYT0wO2E8MzthKyspKHQ9ZVthXS50b1N0cmluZygxNikpLmxlbmd0aDwyJiYodD0iMCIuY29uY2F0KHQpKSxyKz10O3JldHVybiByfWZ1bmN0aW9uIGllKGUpe3ZhciB0PSIiO2lmKGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9ZnVuY3Rpb24oZSl7cmV0dXJuKCIwIitOdW1iZXIoZSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMikudG9VcHBlckNhc2UoKX0oZSl9KSksdC5sZW5ndGg8PTMyKWZvcih2YXIgcj0zMi10Lmxlbmd0aCxhPTA7YTxyO2ErKyl0Kz0iMCI7cmV0dXJuIHR9ZnVuY3Rpb24gc2UoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD1bXSxyPSIiLGE9MDthPGUubGVuZ3RoO2ErKylhJTImJihyPWVbYS0xXStlW2FdLHQucHVzaChwYXJzZUludChyLDE2KSkscj0iIik7cmV0dXJuIHR9cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZSwxNil9KSl9ZnVuY3Rpb24gb2UoZSx0KXtyZXR1cm4gTnVtYmVyKGUrIi4iK3QpfXZhciB1ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJnZXRSYXRlSW5kZXhCeVJhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLkZSRVEuaW5kZXhPZih0KX19LHtrZXk6InBhcnNlQURUUyIsdmFsdWU6ZnVuY3Rpb24odCxyKXtmb3IodmFyIGE9dC5sZW5ndGgsbj0wO24rMjxhJiYoMjU1IT09dFtuXXx8MjQwIT0oMjQ2JnRbbisxXSkpOyluKys7aWYoIShuPj1hKSl7dmFyIGk9bixzPVtdLG89KDYwJnRbbisyXSk+Pj4yLHU9ZS5GUkVRW29dO2lmKCF1KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzYW1wbGluZyBpbmRleDogIi5jb25jYXQobykpO2Zvcih2YXIgYyxsLGY9MSsoKDE5MiZ0W24rMl0pPj4+NiksZD0oMSZ0W24rMl0pPDwyfCgxOTImdFtuKzNdKT4+PjYsaD1lLl9nZXRDb25maWcobyxkLGYpLHA9aC5jb25maWcsdj1oLmNvZGVjLHk9MCxtPWUuZ2V0RnJhbWVEdXJhdGlvbih1KTtuKzc8YTspaWYoMjU1PT09dFtuXSYmMjQwPT0oMjQ2JnRbbisxXSkpe2lmKCEobD0oMyZ0W24rM10pPDwxMXx0W24rNF08PDN8KDIyNCZ0W24rNV0pPj41KXx8YS1uPGwpYnJlYWs7Yz0yKigxJn50W24rMV0pLHMucHVzaCh7cHRzOnIreSptLGRhdGE6dC5zdWJhcnJheShuKzcrYyxuK2wpfSkseSsrLG4rPWx9ZWxzZSBuKys7cmV0dXJue3NraXA6aSxyZW1haW5pbmc6bj49YT92b2lkIDA6dC5zdWJhcnJheShuKSxmcmFtZXM6cyxzYW1wbGluZ0ZyZXF1ZW5jeUluZGV4Om8sc2FtcGxlUmF0ZTp1LG9iamVjdFR5cGU6ZixjaGFubmVsQ291bnQ6ZCxjb2RlYzp2LGNvbmZpZzpwLG9yaWdpbkNvZGVjOiJtcDRhLjQwLiIuY29uY2F0KGYpfX19fSx7a2V5OiJwYXJzZUF1ZGlvU3BlY2lmaWNDb25maWciLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoKXt2YXIgcj10WzBdPj4+MyxhPSg3JnRbMF0pPDwxfHRbMV0+Pj43LG49KDEyMCZ0WzFdKT4+PjMsaT1lLkZSRVFbYV07aWYoaSl7dmFyIHM9ZS5fZ2V0Q29uZmlnKGEsbixyKTtyZXR1cm57c2FtcGxpbmdGcmVxdWVuY3lJbmRleDphLHNhbXBsZVJhdGU6aSxvYmplY3RUeXBlOnIsY2hhbm5lbENvdW50Om4sY29uZmlnOnMuY29uZmlnLGNvZGVjOnMuY29kZWMsb3JpZ2luQ29kZWM6Im1wNGEuNDAuIi5jb25jYXQocil9fX19fSx7a2V5OiJnZXRGcmFtZUR1cmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06OWU0O3JldHVybiAxMDI0KnQvZX19LHtrZXk6Il9nZXRDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxuLGk9W107cmV0dXJuIFo/ZT49Nj8oYT01LG49ZS0zKTooYT0yLG49ZSk6Sj8oYT0yLG49ZSk6KGE9NSxuPWUsZT49Nj9uPWUtMzoxPT09dCYmKGE9MixuPWUpKSxpWzBdPWE8PDMsaVswXXw9KDE0JmUpPj4xLGlbMV09KDEmZSk8PDcsaVsxXXw9dDw8Myw1PT09YSYmKGlbMV18PSgxNCZuKT4+MSxpWzJdPSgxJm4pPDw3LGlbMl18PTgsaVszXT0wKSx7Y29uZmlnOmksY29kZWM6Im1wNGEuNDAuIi5jb25jYXQoYSl9fX0se2tleToiZ2V0U2lsZW50RnJhbWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIm1wNGEuNDAuMiI9PT1lKXtpZigxPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDM1LDEyOF0pO2lmKDI9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMzMsMCw3MywxNDQsMiwyNSwwLDM1LDEyOF0pO2lmKDM9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMCwyMDAsMCwxMjgsMzIsMTMyLDEsMzgsNjQsOCwxMDAsMCwxNDJdKTtpZig0PT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTI4LDQ0LDEyOCw4LDIsNTZdKTtpZig1PT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTMwLDQ4LDQsMTUzLDAsMzMsMTQ0LDIsNTZdKTtpZig2PT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTMwLDQ4LDQsMTUzLDAsMzMsMTQ0LDIsMCwxNzgsMCwzMiw4LDIyNF0pfWVsc2V7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFsxLDY0LDM0LDEyOCwxNjMsNzgsMjMwLDEyOCwxODYsOCwwLDAsMCwyOCw2LDI0MSwxOTMsMTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTRdKTtpZigyPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzEsNjQsMzQsMTI4LDE2Myw5NCwyMzAsMTI4LDE4Niw4LDAsMCwwLDAsMTQ5LDAsNiwyNDEsMTYxLDEwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDk0XSk7aWYoMz09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFsxLDY0LDM0LDEyOCwxNjMsOTQsMjMwLDEyOCwxODYsOCwwLDAsMCwwLDE0OSwwLDYsMjQxLDE2MSwxMCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5NF0pfX19XSksZX0oKTtpKHVlLCJGUkVRIixbOTZlMyw4ODIwMCw2NGUzLDQ4ZTMsNDQxMDAsMzJlMywyNGUzLDIyMDUwLDE2ZTMsMTJlMywxMTAyNSw4ZTMsNzM1MF0pO3ZhciBjZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ieXRlTGVuZ3RoLTEscj0wO2Rve2lmKDAhPT1lW3RdKWJyZWFrO3IrKyx0LS19d2hpbGUodD4wKTtyPj0zJiYoZT1lLnN1YmFycmF5KDAsdCsxKSk7Zm9yKHZhciBhPWUubGVuZ3RoLG49MixpPTA7bnVsbCE9PWVbbl0mJnZvaWQgMCE9PWVbbl0mJjEhPT1lW25dOyluKys7aWYoKGk9KytuKzIpPj1hKXJldHVybltdO2Zvcih2YXIgcz1bXTtpPGE7KXN3aXRjaChlW2ldKXtjYXNlIDA6aWYoMCE9PWVbaS0xXSl7aSs9MjticmVha31pZigwIT09ZVtpLTJdKXtpKys7YnJlYWt9aWYoaTxhLTEmJjEhPT1lW2krMV0pe2krKzticmVha31uIT09aS0yJiZzLnB1c2goZS5zdWJhcnJheShuLGktMikpO2Rve2krK313aGlsZSgxIT09ZVtpXSYmaTxhKTtpPShuPWkrMSkrMjticmVhaztjYXNlIDE6aWYoMCE9PWVbaS0xXXx8MCE9PWVbaS0yXSl7aSs9MzticmVha31uIT09aS0yJiZzLnB1c2goZS5zdWJhcnJheShuLGktMikpLGk9KG49aSsxKSsyO2JyZWFrO2RlZmF1bHQ6aSs9M31yZXR1cm4gbjxhJiZzLnB1c2goZS5zdWJhcnJheShuKSksc319LHtrZXk6InBhcnNlQXZjQyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7aWYoIShlLmxlbmd0aDw0KSl7Zm9yKHZhciByLGE9ZS5sZW5ndGgsbj1bXSxpPTA7aSt0PGE7KWlmKHI9cmUoZSxpKSwzPT09dCYmKHI+Pj49OCksaSs9dCxyKXtpZihpK3I+YSlicmVhaztuLnB1c2goZS5zdWJhcnJheShpLGkrcikpLGkrPXJ9cmV0dXJuIG59fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLGE9dD8yOjEsbj0wLGk9MCxzPSIiOzI1NT09PWVbYV07KW4rPTI1NSxhKys7Zm9yKG4rPWVbYSsrXTsyNTU9PT1lW2FdOylpKz0yNTUsYSsrO2lmKGkrPWVbYSsrXSw1PT09biYmcj5hKzE2KWZvcih2YXIgbz0wO288MTY7bysrKXMrPWVbYV0udG9TdHJpbmcoMTYpLGErKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KGEsYStpKSx0eXBlOm4sc2l6ZTppLHV1aWQ6c319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgscj1bXSxhPTE7YTx0LTI7KTA9PT1lW2FdJiYwPT09ZVthKzFdJiYzPT09ZVthKzJdPyhyLnB1c2goYSsyKSxhKz0yKTphKys7aWYoIXIubGVuZ3RoKXJldHVybiBlO3ZhciBuPXQtci5sZW5ndGgsaT1uZXcgVWludDhBcnJheShuKSxzPTA7Zm9yKGE9MDthPG47cysrLGErKylzPT09clswXSYmKHMrKyxyLnNoaWZ0KCkpLGlbYV09ZVtzXTtyZXR1cm4gaX19XSksZX0oKSxsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDcpKXtmb3IodmFyIHIsYSxuPTErKDMmdFs0XSksaT1bXSxzPVtdLG89Nix1PTMxJnRbNV0sYz0wO2M8dTtjKyspaWYoYT10W29dPDw4fHRbbysxXSxvKz0yLGEpe3ZhciBsPXQuc3ViYXJyYXkobyxvK2EpO28rPWEsaS5wdXNoKGwpLHJ8fChyPWUucGFyc2VTUFMoY2UucmVtb3ZlRVBCKGwpKSl9dmFyIGYsZD10W29dO28rKztmb3IodmFyIGg9MDtoPGQ7aCsrKWY9dFtvXTw8OHx0W28rMV0sbys9MixmJiYocy5wdXNoKHQuc3ViYXJyYXkobyxvK2YpKSxvKz1mKTtyZXR1cm57c3BzOnIsc3BzQXJyOmkscHBzQXJyOnMsbmFsVW5pdFNpemU6bn19fX0se2tleToicGFyc2VTUFMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBLKGUpO3QucmVhZFVCeXRlKCk7dmFyIHI9dC5yZWFkVUJ5dGUoKSxhPXQucmVhZFVCeXRlKCksbj10LnJlYWRVQnl0ZSgpO3Quc2tpcFVFRygpO3ZhciBpPTQyMDtpZigxMDA9PT1yfHwxMTA9PT1yfHwxMjI9PT1yfHwyNDQ9PT1yfHw0ND09PXJ8fDgzPT09cnx8ODY9PT1yfHwxMTg9PT1yfHwxMjg9PT1yfHwxMzg9PT1yfHwxNDQ9PT1yKXt2YXIgcz10LnJlYWRVRUcoKTtpZihzPD0zJiYoaT1bMCw0MjAsNDIyLDQ0NF1bc10pLDM9PT1zJiZ0LnNraXBCaXRzKDEpLHQuc2tpcFVFRygpLHQuc2tpcFVFRygpLHQuc2tpcEJpdHMoMSksdC5yZWFkQm9vbCgpKWZvcih2YXIgbz0zIT09cz84OjEyLHU9MDt1PG87dSsrKXQucmVhZEJvb2woKSYmKHU8Nj90LnNraXBTY2FsaW5nTGlzdCgxNik6dC5za2lwU2NhbGluZ0xpc3QoNjQpKX10LnNraXBVRUcoKTt2YXIgYz10LnJlYWRVRUcoKTtpZigwPT09Yyl0LnJlYWRVRUcoKTtlbHNlIGlmKDE9PT1jKXt0LnNraXBCaXRzKDEpLHQuc2tpcFVFRygpLHQuc2tpcFVFRygpO2Zvcih2YXIgbD10LnJlYWRVRUcoKSxmPTA7ZjxsO2YrKyl0LnNraXBVRUcoKX10LnNraXBVRUcoKSx0LnNraXBCaXRzKDEpO3ZhciBkPXQucmVhZFVFRygpLGg9dC5yZWFkVUVHKCkscD10LnJlYWRCaXRzKDEpOzA9PT1wJiZ0LnNraXBCaXRzKDEpLHQuc2tpcEJpdHMoMSk7dmFyIHYseSxtLGcsayxiPTAsXz0wLHc9MCx4PTA7aWYodC5yZWFkQm9vbCgpJiYoYj10LnJlYWRVRUcoKSxfPXQucmVhZFVFRygpLHc9dC5yZWFkVUVHKCkseD10LnJlYWRVRUcoKSksdC5yZWFkQm9vbCgpKXtpZih0LnJlYWRCb29sKCkpc3dpdGNoKHQucmVhZFVCeXRlKCkpe2Nhc2UgMTp2PVsxLDFdO2JyZWFrO2Nhc2UgMjp2PVsxMiwxMV07YnJlYWs7Y2FzZSAzOnY9WzEwLDExXTticmVhaztjYXNlIDQ6dj1bMTYsMTFdO2JyZWFrO2Nhc2UgNTp2PVs0MCwzM107YnJlYWs7Y2FzZSA2OnY9WzI0LDExXTticmVhaztjYXNlIDc6dj1bMjAsMTFdO2JyZWFrO2Nhc2UgODp2PVszMiwxMV07YnJlYWs7Y2FzZSA5OnY9WzgwLDMzXTticmVhaztjYXNlIDEwOnY9WzE4LDExXTticmVhaztjYXNlIDExOnY9WzE1LDExXTticmVhaztjYXNlIDEyOnY9WzY0LDMzXTticmVhaztjYXNlIDEzOnY9WzE2MCw5OV07YnJlYWs7Y2FzZSAxNDp2PVs0LDNdO2JyZWFrO2Nhc2UgMTU6dj1bMywyXTticmVhaztjYXNlIDE2OnY9WzIsMV07YnJlYWs7Y2FzZSAyNTU6dj1bdC5yZWFkVUJ5dGUoKTw8OHx0LnJlYWRVQnl0ZSgpLHQucmVhZFVCeXRlKCk8PDh8dC5yZWFkVUJ5dGUoKV19aWYodC5yZWFkQm9vbCgpJiZ0LnJlYWRCb29sKCksdC5yZWFkQm9vbCgpJiYodC5yZWFkQml0cyg0KSx0LnJlYWRCb29sKCkmJnQucmVhZEJpdHMoMjQpKSx0LnJlYWRCb29sKCkmJih0LnJlYWRVRUcoKSx0LnJlYWRVRUcoKSksdC5yZWFkQm9vbCgpKXt2YXIgUz10LnJlYWRCaXRzKDMyKSxBPXQucmVhZEJpdHMoMzIpO3k9dC5yZWFkQm9vbCgpLGs9KG09QSkvKGc9MipTKX19cmV0dXJue2NvZGVjOm5lKGUuc3ViYXJyYXkoMSw0KSkscHJvZmlsZUlkYzpyLHByb2ZpbGVDb21wYXRpYmlsaXR5OmEsbGV2ZWxJZGM6bixjaHJvbWFGb3JtYXQ6aSx3aWR0aDpNYXRoLmNlaWwoMTYqKGQrMSktMiooYitfKSksaGVpZ2h0OigyLXApKihoKzEpKjE2LShwPzI6NCkqKHcreCksc2FyUmF0aW86dixmcHNOdW06bSxmcHNEZW46ZyxmcHM6ayxmaXhlZEZyYW1lOnl9fX1dKSxlfSgpLGZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6InBhcnNlSEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoISh0Lmxlbmd0aDwyMykpe3I9cnx8e307Zm9yKHZhciBhLG4saSxzLG8sdT0xKygzJnRbMjFdKSxjPVtdLGw9W10sZj1bXSxkPTIzLGg9dFsyMl0scD0wO3A8aDtwKyspe2k9NjMmdFtkXSxzPXRbZCsxXTw8OHx0W2QrMl0sZCs9Mztmb3IodmFyIHY9MDt2PHM7disrKWlmKG89dFtkXTw8OHx0W2QrMV0sZCs9MixvKXtzd2l0Y2goaSl7Y2FzZSAzMjp2YXIgeT10LnN1YmFycmF5KGQsZCtvKTthfHwoYT1lLnBhcnNlVlBTKGNlLnJlbW92ZUVQQih5KSxyKSksZi5wdXNoKHkpO2JyZWFrO2Nhc2UgMzM6dmFyIG09dC5zdWJhcnJheShkLGQrbyk7bnx8KG49ZS5wYXJzZVNQUyhjZS5yZW1vdmVFUEIobSkscikpLGMucHVzaChtKTticmVhaztjYXNlIDM0OmwucHVzaCh0LnN1YmFycmF5KGQsZCtvKSl9ZCs9b319cmV0dXJue2h2Y0M6cixzcHM6bixzcHNBcnI6YyxwcHNBcnI6bCx2cHNBcnI6ZixuYWxVbml0U2l6ZTp1fX19fSx7a2V5OiJwYXJzZVZQUyIsdmFsdWU6ZnVuY3Rpb24odCxyKXtyPXJ8fHt9O3ZhciBhPW5ldyBLKHQpO2EucmVhZFVCeXRlKCksYS5yZWFkVUJ5dGUoKSxhLnJlYWRCaXRzKDEyKTt2YXIgbj1hLnJlYWRCaXRzKDMpO3JldHVybiByLm51bVRlbXBvcmFsTGF5ZXJzPU1hdGgubWF4KHIubnVtVGVtcG9yYWxMYXllcnN8fDAsbisxKSxhLnJlYWRCaXRzKDE3KSxlLl9wYXJzZVByb2ZpbGVUaWVyTGV2ZWwoYSxuLHIpLHJ9fSx7a2V5OiJwYXJzZVNQUyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3I9cnx8e307dmFyIGE9bmV3IEsodCk7YS5yZWFkVUJ5dGUoKSxhLnJlYWRVQnl0ZSgpLGEucmVhZEJpdHMoNCk7dmFyIG49YS5yZWFkQml0cygzKTtyLm51bVRlbXBvcmFsTGF5ZXJzPU1hdGgubWF4KG4rMSxyLm51bVRlbXBvcmFsTGF5ZXJzfHwwKSxyLnRlbXBvcmFsSWROZXN0ZWQ9YS5yZWFkQml0cygxKSxlLl9wYXJzZVByb2ZpbGVUaWVyTGV2ZWwoYSxuLHIpLGEucmVhZFVFRygpO3ZhciBpPXIuY2hyb21hRm9ybWF0SWRjPWEucmVhZFVFRygpLHM9NDIwO2k8PTMmJihzPVswLDQyMCw0MjIsNDQ0XVtpXSk7dmFyIG89MDszPT09aSYmKG89YS5yZWFkQml0cygxKSk7dmFyIHUsYyxsLGYsZD1hLnJlYWRVRUcoKSxoPWEucmVhZFVFRygpLHA9YS5yZWFkQml0cygxKTtpZigxPT09cCYmKHU9YS5yZWFkVUVHKCksYz1hLnJlYWRVRUcoKSxsPWEucmVhZFVFRygpLGY9YS5yZWFkVUVHKCkpLHIuYml0RGVwdGhMdW1hTWludXM4PWEucmVhZFVFRygpLHIuYml0RGVwdGhDaHJvbWFNaW51czg9YS5yZWFkVUVHKCksMT09PXApe3ZhciB2PTEhPT1pJiYyIT09aXx8MCE9PW8/MToyLHk9MT09PWkmJjA9PT1vPzI6MTtkLT12KihjK3UpLGgtPXkqKGYrbCl9cmV0dXJue2NvZGVjOiJoZXYxLjEuNi5MOTMuQjAiLHdpZHRoOmQsaGVpZ2h0OmgsY2hyb21hRm9ybWF0OnMsaHZjQzpyfX19LHtrZXk6Il9wYXJzZVByb2ZpbGVUaWVyTGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1yLmdlbmVyYWxUaWVyRmxhZ3x8MDtyLmdlbmVyYWxQcm9maWxlU3BhY2U9ZS5yZWFkQml0cygyKSxyLmdlbmVyYWxUaWVyRmxhZz1NYXRoLm1heChlLnJlYWRCaXRzKDEpLGEpLHIuZ2VuZXJhbFByb2ZpbGVJZGM9TWF0aC5tYXgoZS5yZWFkQml0cyg1KSxyLmdlbmVyYWxQcm9maWxlSWRjfHwwKSxyLmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZsYWdzPWUucmVhZEJpdHMoMzIpLHIuZ2VuZXJhbENvbnN0cmFpbnRJbmRpY2F0b3JGbGFncz1bZS5yZWFkQml0cyg4KSxlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCksZS5yZWFkQml0cyg4KSxlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCldO3ZhciBuPWUucmVhZEJpdHMoOCk7YTxyLmdlbmVyYWxUaWVyRmxhZz9yLmdlbmVyYWxMZXZlbElkYz1uOnIuZ2VuZXJhbExldmVsSWRjPU1hdGgubWF4KG4sci5nZW5lcmFsTGV2ZWxJZGN8fDApO3ZhciBpPVtdLHM9W107aWYodD5lLmJpdHNBdmFpbGFibGUpdGhyb3cgbmV3IEVycm9yKCJtYXhTdWJMYXllcnNNaW51cyBpbmF2bGlkIHNpemUgIi5jb25jYXQodCkpO2Zvcih2YXIgbz0wO288dDtvKyspaVtvXT1lLnJlYWRCaXRzKDEpLHNbb109ZS5yZWFkQml0cygxKTt0PjAmJmUucmVhZEJpdHMoMiooOC10KSk7Zm9yKHZhciB1PTA7dTx0O3UrKykwIT09aVt1XSYmKGUucmVhZEJpdHMoMiksZS5yZWFkQml0cygxKSxlLnJlYWRCaXRzKDUpLGUucmVhZEJpdHMoMTYpLGUucmVhZEJpdHMoMTYpLGUucmVhZEJpdHMoNCksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cygxMikpLDAhPT1zW3VdJiZlLnJlYWRCaXRzKDgpfX1dKSxlfSgpLGRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6ImdldEZyYW1lRHVyYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiAyMH19LHtrZXk6InBhcnNlSGVhZGVyUGFja2V0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGgpe2Zvcih2YXIgdD1uZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCkscj0iIixhPTA7YTw4O2ErKylyKz1TdHJpbmcuZnJvbUNvZGVQb2ludChlW2FdKTtpZigiT3B1c0hlYWQiIT09cil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgT3B1cyBNYWdpY1NpZ25hdHVyZSIpO3ZhciBuPWVbOV07Y29uc29sZS5sb2coIlByZS1za2lwIixlWzEwXSxlWzExXSk7dmFyIGk9dC5nZXRVaW50MzIoMTIsITApLHM9dC5nZXRJbnQxNigxNiwhMCk7aWYoaSl7cmV0dXJue291dHB1dEdhaW46cyxzYW1wbGVSYXRlOmksY2hhbm5lbENvdW50Om4sY29uZmlnOm5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCs4LGUuYnl0ZUxlbmd0aC04KSxjb2RlYzoib3B1cyIsb3JpZ2luQ29kZWM6Im9wdXMifX19fX1dKSxlfSgpLGhlPTFlMyxwZT01ZTMsdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsYSxuKXtyKHRoaXMsZSksdGhpcy52aWRlb1RyYWNrPXQsdGhpcy5hdWRpb1RyYWNrPWEsdGhpcy5tZXRhZGF0YVRyYWNrPW4sdGhpcy5fYmFzZUR0cz0tMSx0aGlzLl9iYXNlRHRzSW5pdGVkPSExLHRoaXMuX2F1ZGlvTmV4dFB0cz12b2lkIDAsdGhpcy5fdmlkZW9OZXh0RHRzPXZvaWQgMCx0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaz0wLHRoaXMuX2xhc3RWaWRlb0R1cmF0aW9uPTAsdGhpcy5fa2V5RnJhbWVJbk5leHRDaHVuaz0hMSx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25HYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25PdmVybGFwRG90PS0xLzAsdGhpcy5fbGFzdEF1ZGlvRXhjZXB0aW9uTGFyZ2VHYXBEb3Q9LTEvMCx0aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkNodW5rRmlyc3REdHNEb3Q9LTEvMH1yZXR1cm4gbihlLFt7a2V5OiJmaXgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07dD1NYXRoLnJvdW5kKDFlMyp0KTt2YXIgbj10aGlzLnZpZGVvVHJhY2ssaT10aGlzLmF1ZGlvVHJhY2s7IXImJmF8fCh0aGlzLl92aWRlb0xhc3RTYW1wbGU9bnVsbCx0aGlzLl9hdWRpb05leHRQdHM9dm9pZCAwLHRoaXMuX3ZpZGVvTmV4dER0cz12b2lkIDAsdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz0wLHRoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWs9MCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25HYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25PdmVybGFwRG90PS0xLzAsdGhpcy5fbGFzdEF1ZGlvRXhjZXB0aW9uTGFyZ2VHYXBEb3Q9LTEvMCx0aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkNodW5rRmlyc3REdHNEb3Q9LTEvMCksciYmIWEmJih0aGlzLl9iYXNlRHRzSW5pdGVkPSExKSx0aGlzLl9iYXNlRHRzSW5pdGVkfHx0aGlzLl9jYWxjdWxhdGVCYXNlRHRzKGksbiksIWEmJnQmJih0aGlzLl9hdWRpb05leHRQdHM9dGhpcy5fdmlkZW9OZXh0RHRzPXQpO3ZhciBzPXRoaXMuX2Jhc2VEdHNJbml0ZWQmJih0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrfHwhdGhpcy52aWRlb1RyYWNrLmV4aXN0KCkpJiYodGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVha3x8IXRoaXMuYXVkaW9UcmFjay5leGlzdCgpKTtpZihzJiZ0aGlzLl9yZXNldEJhc2VEdHNXaGVuU3RyZWFtQnJlYWtlZCgpLHRoaXMuX2ZpeEF1ZGlvKGkpLHRoaXMuX2tleUZyYW1lSW5OZXh0Q2h1bms9ITEsdGhpcy5fZml4VmlkZW8obiksdGhpcy5tZXRhZGF0YVRyYWNrLmV4aXN0KCkpe3ZhciBvPXRoaXMubWV0YWRhdGFUcmFjay50aW1lc2NhbGU7dGhpcy5tZXRhZGF0YVRyYWNrLnNlaVNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5wdHM9dC5vcmlnaW5QdHMtZS5fYmFzZUR0cyx0LnRpbWU9TWF0aC5tYXgoMCx0LnB0cykvb30pKSx0aGlzLm1ldGFkYXRhVHJhY2suZmx2U2NyaXB0U2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnB0cz10Lm9yaWdpblB0cy1lLl9iYXNlRHRzLHQudGltZT1NYXRoLm1heCgwLHQucHRzKS9vfSkpfW4uc2FtcGxlcy5sZW5ndGgmJihuLmJhc2VNZWRpYURlY29kZVRpbWU9bi5zYW1wbGVzWzBdLmR0cyksaS5zYW1wbGVzLmxlbmd0aCYmKGkuYmFzZU1lZGlhRGVjb2RlVGltZT1pLnNhbXBsZXNbMF0ucHRzKmkudGltZXNjYWxlLzFlMyl9fSx7a2V5OiJfZml4VmlkZW8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLnNhbXBsZXM7aWYoci5sZW5ndGgpe3ZhciBhO2lmKHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5kdHMtPXQuX2Jhc2VEdHMsZS5wdHMtPXQuX2Jhc2VEdHMsZS5rZXlmcmFtZSYmKHQuX2tleUZyYW1lSW5OZXh0Q2h1bms9ITApfSkpLGUuZnBzTnVtJiZlLmZwc0RlbilhPWUudGltZXNjYWxlKihlLmZwc0Rlbi9lLmZwc051bSk7ZWxzZSBpZihlLmxlbmd0aD4xKXt2YXIgbj1lLnNhbXBsZXNbMF0saT1lLnNhbXBsZXNbci5sZW5ndGgtMV07YT1NYXRoLmZsb29yKChpLmR0cy1uLmR0cykvKHIubGVuZ3RoLTEpKX1lbHNlIGE9dGhpcy5fbGFzdFZpZGVvRHVyYXRpb258fDQwO3ZhciBzPXIucG9wKCk7aWYodGhpcy5fdmlkZW9MYXN0U2FtcGxlJiZyLnVuc2hpZnQodGhpcy5fdmlkZW9MYXN0U2FtcGxlKSx0aGlzLl92aWRlb0xhc3RTYW1wbGU9cyxyLmxlbmd0aCl7aWYodm9pZCAwPT09dGhpcy5fdmlkZW9OZXh0RHRzKXt2YXIgbz1yWzBdO3RoaXMuX3ZpZGVvTmV4dER0cz1vLmR0c312YXIgdT1yLmxlbmd0aCxjPTAsbD1yWzBdLGY9dGhpcy5fdmlkZW9OZXh0RHRzLWwuZHRzO2lmKE1hdGguYWJzKGYpPjIwMCl7dmFyIGQ7aWYoTWF0aC5hYnMobC5kdHMtdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdCk+NWUzKXRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkNodW5rRmlyc3REdHNEb3Q9bC5kdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOkksbmV4dER0czp0aGlzLl92aWRlb05leHREdHMsZmlyc3RTYW1wbGVEdHM6bC5kdHMsbmV4dFNhbXBsZUR0czpudWxsPT09KGQ9clsxXSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuZHRzLHNhbXBsZUR1cmF0aW9uOmZ9KTt0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPj01Pyh0aGlzLl92aWRlb05leHREdHM9bC5kdHMsdGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaz0wKToobC5kdHMrPWYsbC5wdHMrPWYsdGhpcy5hdWRpb1RyYWNrLmV4aXN0KCl8fCh0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTEpKX1mb3IodmFyIGg9MDtoPHU7aCsrKXt2YXIgcD1yW2hdLmR0cyx2PXJbaCsxXTsoKGM9aDx1LTE/di5kdHMtcDpzP3MuZHRzLXA6YSk+MWUzfHxjPDApJiYodGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaysrLE1hdGguYWJzKHAtdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uTGFyZ2VHYXBEb3QpPjVlMyYmKHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkxhcmdlR2FwRG90PXAsZS53YXJuaW5ncy5wdXNoKHt0eXBlOlAsdGltZTpwL2UudGltZXNjYWxlLGR0czpwLG9yaWdpbkR0czpyW2hdLm9yaWdpbkR0cyxuZXh0RHRzOnRoaXMuX3ZpZGVvTmV4dER0cyxzYW1wbGVEdXJhdGlvbjpjLHJlZlNhbXBsZUR1cmF0aW9uOmF9KSksYz1hKSxyW2hdLmR1cmF0aW9uPWMsdGhpcy5fdmlkZW9OZXh0RHRzKz1jLHRoaXMuX2xhc3RWaWRlb0R1cmF0aW9uPWN9fX19fSx7a2V5OiJfZml4QXVkaW8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLnNhbXBsZXM7ci5sZW5ndGgmJihyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuZHRzPWUucHRzLT10Ll9iYXNlRHRzfSkpLHRoaXMuX2RvRml4QXVkaW9JbnRlcm5hbChlLHIsMWUzKSl9fSx7a2V5OiJfY2FsY3VsYXRlQmFzZUR0cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnNhbXBsZXMsYT10LnNhbXBsZXM7aWYoIXIubGVuZ3RoJiYhYS5sZW5ndGgpcmV0dXJuITE7dmFyIG49MS8wLGk9MS8wO3IubGVuZ3RoJiYoZS5iYXNlRHRzPW49clswXS5wdHMpLGEubGVuZ3RoJiYodC5iYXNlRHRzPWk9YVswXS5kdHMpLHRoaXMuX2Jhc2VEdHM9TWF0aC5taW4obixpKTt2YXIgcz1pLW47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShzKSYmTWF0aC5hYnMocyk+NTAwJiZ0Lndhcm5pbmdzLnB1c2goe3R5cGU6Qyx2aWRlb0Jhc2VEdHM6aSxhdWRpb0Jhc2VQdHM6bixiYXNlRHRzOnRoaXMuX2Jhc2VEdHMsZGVsdGE6c30pLHRoaXMuX2Jhc2VEdHNJbml0ZWQ9ITAsITB9fSx7a2V5OiJfcmVzZXRCYXNlRHRzV2hlblN0cmVhbUJyZWFrZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2FsY3VsYXRlQmFzZUR0cyh0aGlzLmF1ZGlvVHJhY2ssdGhpcy52aWRlb1RyYWNrKSYmKHRoaXMuYXVkaW9UcmFjay5leGlzdCgpP3RoaXMudmlkZW9UcmFjay5leGlzdCgpP3RoaXMuX2Jhc2VEdHMtPU1hdGgubWluKHRoaXMuX2F1ZGlvTmV4dFB0cyx0aGlzLl92aWRlb05leHREdHMpOnRoaXMuX2Jhc2VEdHMtPXRoaXMuX2F1ZGlvTmV4dFB0czp0aGlzLl9iYXNlRHRzLT10aGlzLl92aWRlb05leHREdHMsdGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaz0wLHRoaXMuX2F1ZGlvVGltZXN0YW1wQnJlYWs9MCl9fSx7a2V5OiJfZG9GaXhBdWRpb0ludGVybmFsIix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYoIWUuc2FtcGxlRHVyYXRpb24pc3dpdGNoKGUuY29kZWNUeXBlKXtjYXNlIEQ6ZS5zYW1wbGVEdXJhdGlvbj11ZS5nZXRGcmFtZUR1cmF0aW9uKGUudGltZXNjYWxlLHIpO2JyZWFrO2Nhc2UgQjplLnNhbXBsZUR1cmF0aW9uPWRlLmdldEZyYW1lRHVyYXRpb24oZS5zYW1wbGVzLHIpO2JyZWFrO2Nhc2UgVDpjYXNlIEU6ZS5zYW1wbGVEdXJhdGlvbj10aGlzLl9nZXRHNzExRHVyYXRpb24oZSk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJjYW4ndCBmaXggYXVkaW8gY29kZWNUeXBlOiIsZS5jb2RlY1R5cGUpfXZhciBhPWUuc2FtcGxlRHVyYXRpb24sbj1lLmNvZGVjVHlwZT09PUI/MjA6ZS5jb2RlY1R5cGU9PT1EPzEwMjQ6YSplLnRpbWVzY2FsZS8xZTM7aWYodm9pZCAwPT09dGhpcy5fYXVkaW9OZXh0UHRzKXt2YXIgaT10WzBdO3RoaXMuX2F1ZGlvTmV4dFB0cz1pLnB0c31mb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIG89dGhpcy5fYXVkaW9OZXh0UHRzLHU9dFtzXSxjPXUucHRzLW87aWYoMD09PXMmJnRoaXMuX2F1ZGlvVGltZXN0YW1wQnJlYWs+PTUmJnRoaXMuX2tleUZyYW1lSW5OZXh0Q2h1bmsmJihvPXRoaXMuX2F1ZGlvTmV4dFB0cz11LmR0cyxjPTAsdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz0wKSwhdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhayYmYz49MyphJiZjPD1oZSYmIVEpe3ZhciBsPXRoaXMuX2dldFNpbGVudEZyYW1lKGUpfHx0WzBdLmRhdGEuc3ViYXJyYXkoKSxmPU1hdGguZmxvb3IoYy9hKTtNYXRoLmFicyh1LnB0cy10aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25HYXBEb3QpPnBlJiYodGhpcy5fbGFzdEF1ZGlvRXhjZXB0aW9uR2FwRG90PXUucHRzLGUud2FybmluZ3MucHVzaCh7dHlwZTp6LHB0czp1LnB0cyxvcmlnaW5QdHM6dS5vcmlnaW5QdHMsY291bnQ6ZixuZXh0UHRzOm8scmVmU2FtcGxlRHVyYXRpb246YX0pKTtmb3IodmFyIGQ9MDtkPGY7ZCsrKXt2YXIgaD1uZXcgRihNYXRoLmZsb29yKHRoaXMuX2F1ZGlvTmV4dFB0cythKS1NYXRoLmZsb29yKHRoaXMuX2F1ZGlvTmV4dFB0cyksbCxuKTtoLm9yaWdpblB0cz1NYXRoLmZsb29yKHRoaXMuX2Jhc2VEdHMrbyksdC5zcGxpY2UocywwLGgpLHRoaXMuX2F1ZGlvTmV4dFB0cys9YSxzKyt9cy0tfWVsc2UgaWYoYzw9LTMqYSYmYz49LTFlMylNYXRoLmFicyh1LnB0cy10aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25PdmVybGFwRG90KT5wZSYmKHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9dS5wdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOk8scHRzOnUucHRzLG9yaWdpblB0czp1Lm9yaWdpblB0cyxuZXh0UHRzOm8scmVmU2FtcGxlRHVyYXRpb246YX0pKSx0LnNwbGljZShzLDEpLHMtLTtlbHNle2lmKE1hdGguYWJzKGMpPmhlJiYodGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaysrLE1hdGguYWJzKHUucHRzLXRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkxhcmdlR2FwRG90KT5wZSYmKHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkxhcmdlR2FwRG90PXUucHRzLGUud2FybmluZ3MucHVzaCh7dHlwZTpNLHRpbWU6dS5wdHMvMWUzLHB0czp1LnB0cyxvcmlnaW5QdHM6dS5vcmlnaW5QdHMsbmV4dFB0czpvLHNhbXBsZUR1cmF0aW9uOmMscmVmU2FtcGxlRHVyYXRpb246YX0pKSksZS5jb2RlY1R5cGU9PT1CKXt2YXIgcD10W3QubGVuZ3RoLTFdO3AmJihwLmR1cmF0aW9uPXUucHRzLXAucHRzKX1lbHNlIHUuZHRzPXUucHRzPW8sdS5kdXJhdGlvbj1uO3RoaXMuX2F1ZGlvTmV4dFB0cys9YX19fX0se2tleToiX2dldEc3MTFEdXJhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zYW1wbGVTaXplLHI9ZS5jaGFubmVsQ291bnQsYT1lLnNhbXBsZVJhdGUsbj1lLnNhbXBsZXNbMF07aWYobilyZXR1cm4gMipuLmRhdGEuYnl0ZUxlbmd0aC9yLyh0LzgpL2EqMWUzfX0se2tleToiX2dldFNpbGVudEZyYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb2RlY1R5cGU9PT1EP3VlLmdldFNpbGVudEZyYW1lKGUuY29kZWMsZS5jaGFubmVsQ291bnQpOm5ldyBVaW50OEFycmF5KDgqZS5zYW1wbGVEdXJhdGlvbiplLmNoYW5uZWxDb3VudCl9fV0pLGV9KCkseWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8Mykpe3ZhciByPXt9LGE9ZS5fcGFyc2VWYWx1ZShuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLG49ZS5fcGFyc2VWYWx1ZShuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K2Euc2l6ZSx0LmJ5dGVMZW5ndGgtYS5zaXplKSk7cmV0dXJuIHJbYS5kYXRhXT1uLmRhdGEscn19fSx7a2V5OiJfcGFyc2VWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHIsYT10LmJ5dGVMZW5ndGgsbj0xLGk9ITE7c3dpdGNoKHQuZ2V0VWludDgoMCkpe2Nhc2UgMDpyPXQuZ2V0RmxvYXQ2NCgxKSxuKz04O2JyZWFrO2Nhc2UgMTpyPSEhdC5nZXRVaW50OCgxKSxuKz0xO2JyZWFrO2Nhc2UgMjp2YXIgcz1lLl9wYXJzZVN0cmluZyhuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K24sdC5ieXRlTGVuZ3RoLW4pKTtyPXMuZGF0YSxuKz1zLnNpemU7YnJlYWs7Y2FzZSAzOnI9e307dmFyIG89MDtmb3IoOT09KDE2Nzc3MjE1JnQuZ2V0VWludDMyKGEtNCkpJiYobz0zKTtuPGEtNDspe3ZhciB1PWUuX3BhcnNlT2JqZWN0KG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbix0LmJ5dGVMZW5ndGgtbi1vKSksYz11LnNpemUsbD11LmRhdGE7aWYodS5pc0VuZClicmVhaztyW2wubmFtZV09bC52YWx1ZSxuKz1jfWlmKG48PWEtMyk5PT09KDE2Nzc3MjE1JnQuZ2V0VWludDMyKG4tMSkpJiYobis9Myk7YnJlYWs7Y2FzZSA4OnI9e30sbis9NDt2YXIgZj0wO2Zvcig5PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIoYS00KSkmJihmPTMpO248YS04Oyl7dmFyIGQ9ZS5fcGFyc2VPYmplY3QobmV3IERhdGFWaWV3KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLHQuYnl0ZUxlbmd0aC1uLWYpKSxoPWQuc2l6ZSxwPWQuZGF0YTtpZihkLmlzRW5kKWJyZWFrO3JbcC5uYW1lXT1wLnZhbHVlLG4rPWh9aWYobjw9YS0zKTk9PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIobi0xKSkmJihuKz0zKTticmVhaztjYXNlIDk6cj12b2lkIDAsbj0xLGk9ITA7YnJlYWs7Y2FzZSAxMDpyPVtdO3ZhciB2PXQuZ2V0VWludDMyKDEpO24rPTQ7Zm9yKHZhciB5PTA7eTx2O3krKyl7dmFyIG09ZS5fcGFyc2VWYWx1ZShuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K24sdC5ieXRlTGVuZ3RoLW4pKSxnPW0uZGF0YSxrPW0uc2l6ZTtyLnB1c2goZyksbis9a31icmVhaztjYXNlIDExOnZhciBiPXQuZ2V0RmxvYXQ2NChuKSs2ZTQqdC5nZXRJbnQxNihuKzgpO3I9bmV3IERhdGUoYiksbis9MTA7YnJlYWs7Y2FzZSAxMjp2YXIgXz10LmdldFVpbnQzMigxKTtuKz00LHI9IiIsXz4wJiYocj1XLmRlY29kZShuZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbixfKSkpLG4rPV87YnJlYWs7ZGVmYXVsdDpuPWF9cmV0dXJue2RhdGE6cixzaXplOm4saXNFbmQ6aX19fSx7a2V5OiJfcGFyc2VTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VWludDE2KDApLHI9IiI7cmV0dXJuIHQ+MCYmKHI9Vy5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0KzIsdCkpKSx7ZGF0YTpyLHNpemU6Mit0fX19LHtrZXk6Il9wYXJzZU9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoISh0LmJ5dGVMZW5ndGg8Mykpe3ZhciByPWUuX3BhcnNlU3RyaW5nKHQpLGE9ZS5fcGFyc2VWYWx1ZShuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K3Iuc2l6ZSx0LmJ5dGVMZW5ndGgtci5zaXplKSk7cmV0dXJue2RhdGE6e25hbWU6ci5kYXRhLHZhbHVlOmEuZGF0YX0sc2l6ZTpyLnNpemUrYS5zaXplLGlzRW5kOmEuaXNFbmR9fX19XSksZX0oKSxtZT03LGdlPTgsa2U9MTAsYmU9MTMsX2U9bmV3IHEoIkZsdkRlbXV4ZXIiKSx3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSxpKHRoaXMsIl9oZWFkZXJQYXJzZWQiLCExKSxpKHRoaXMsIl9yZW1haW5pbmdEYXRhIixudWxsKSxpKHRoaXMsIl9nb3BJZCIsMCksaSh0aGlzLCJfbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbCIsITApLHRoaXMudmlkZW9UcmFjaz10fHxuZXcgUix0aGlzLmF1ZGlvVHJhY2s9YXx8bmV3IEwsdGhpcy5tZXRhZGF0YVRyYWNrPW58fG5ldyBILHRoaXMuX2ZpeGVyPW5ldyB2ZSh0aGlzLnZpZGVvVHJhY2ssdGhpcy5hdWRpb1RyYWNrLHRoaXMubWV0YWRhdGFUcmFjayl9cmV0dXJuIG4oZSxbe2tleToiZGVtdXgiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0saT1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxzPXRoaXMuYXVkaW9UcmFjayxvPXRoaXMudmlkZW9UcmFjayx1PXRoaXMubWV0YWRhdGFUcmFjaztpZighYSYmbnx8KHRoaXMuX3JlbWFpbmluZ0RhdGE9bnVsbCksYSYmKHRoaXMuX2hlYWRlclBhcnNlZD0hMSksYT8oby5yZXNldCgpLHMucmVzZXQoKSx1LnJlc2V0KCkpOihvLnNhbXBsZXM9W10scy5zYW1wbGVzPVtdLHUuc2VpU2FtcGxlcz1bXSx1LmZsdlNjcmlwdFNhbXBsZXM9W10sby53YXJuaW5ncz1bXSxzLndhcm5pbmdzPVtdLHRoaXMuX3JlbWFpbmluZ0RhdGEmJih0PSQodGhpcy5fcmVtYWluaW5nRGF0YSx0KSx0aGlzLl9yZW1haW5pbmdEYXRhPW51bGwpKSwhdC5sZW5ndGgpcmV0dXJue3ZpZGVvVHJhY2s6byxhdWRpb1RyYWNrOnMsbWV0YWRhdGFUcmFjazp1fTt2YXIgYz0wO2lmKCF0aGlzLl9oZWFkZXJQYXJzZWQpe2lmKCFlLnByb2JlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBmbHYgZmlsZSIpO3MucHJlc2VudD0oNCZ0WzRdKT4+PjIhPTAsby5wcmVzZW50PTAhPSgxJnRbNF0pLHRoaXMuX2hlYWRlclBhcnNlZD0hMCxjPXJlKHQsNSkrNH1mb3IodmFyIGwsZixkLGgscCx2PXQubGVuZ3RoO2MrMTU8diYmKGw9dFtjXSwhKGMrMTUrKGY9dFtjKzFdPDwxNnx0W2MrMl08PDh8dFtjKzNdKT52KSk7KWQ9KHRbYys3XTw8MjQ+Pj4wKSsodFtjKzRdPDwxNikrKHRbYys1XTw8OCkrdFtjKzZdLGMrPTExLGg9dC5zdWJhcnJheShjLGMrZiksOD09PWw/dGhpcy5fcGFyc2VBdWRpbyhoLGQpOjk9PT1sPyhpJiYodGhpcy5zZWFtbGVzc0xvYWRpbmdTd2l0Y2hpbmc9ITApLHRoaXMuX3BhcnNlVmlkZW8oaCxkKSk6MTg9PT1sP3RoaXMuX3BhcnNlU2NyaXB0KGgsZCk6X2Uud2FybigiSW52YWxpZCB0YWcgdHlwZTogIi5jb25jYXQobCkpLChwPXJlKHQsYys9ZikpIT09MTErZiYmX2Uud2FybigiSW52YWxpZCBQcmV2VGFnU2l6ZSAiLmNvbmNhdChwLCIgKCIpLmNvbmNhdCgxMStmLCIpIikpLGMrPTQ7Yzx2JiYodGhpcy5fcmVtYWluaW5nRGF0YT10LnN1YmFycmF5KGMpKSxzLmZvcm1hdFRpbWVzY2FsZT1vLmZvcm1hdFRpbWVzY2FsZT1vLnRpbWVzY2FsZT11LnRpbWVzY2FsZT0xZTMscy50aW1lc2NhbGU9cy5jb2RlY1R5cGU9PT1CPzFlMzpzLnNhbXBsZVJhdGV8fDAsIXMuZXhpc3QoKSYmcy5oYXNTYW1wbGUoKSYmcy5yZXNldCgpLCFvLmV4aXN0KCkmJm8uaGFzU2FtcGxlKCkmJm8ucmVzZXQoKTt2YXIgeT11LmZsdlNjcmlwdFNhbXBsZXNbdS5mbHZTY3JpcHRTYW1wbGVzLmxlbmd0aC0xXSxtPW51bGw9PXl8fG51bGw9PT0ocj15LmRhdGEpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uTWV0YURhdGE7cmV0dXJuIG0mJihudWxsIT1vJiZvLmV4aXN0KCkmJihtLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpJiYoby5kdXJhdGlvbj0xZTMqbS5kdXJhdGlvbiksIW8ud2lkdGgmJm0uaGFzT3duUHJvcGVydHkoIndpZHRoIikmJihvLndpZHRoPW0ud2lkdGgpLCFvLmhlaWdodCYmbS5oYXNPd25Qcm9wZXJ0eSgiaGVpZ2h0IikmJihvLmhlaWdodD1tLmhlaWdodCkpLG51bGwhPXMmJnMuZXhpc3QoKSYmbS5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSYmKHMuZHVyYXRpb249MWUzKm0uZHVyYXRpb24pKSx7dmlkZW9UcmFjazpvLGF1ZGlvVHJhY2s6cyxtZXRhZGF0YVRyYWNrOnV9fX0se2tleToiZml4Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2ZpeGVyLmZpeChlLHQscikse3ZpZGVvVHJhY2s6dGhpcy52aWRlb1RyYWNrLGF1ZGlvVHJhY2s6dGhpcy5hdWRpb1RyYWNrLG1ldGFkYXRhVHJhY2s6dGhpcy5tZXRhZGF0YVRyYWNrfX19LHtrZXk6ImRlbXV4QW5kRml4Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLG4pe3JldHVybiB0aGlzLmRlbXV4KGUsdCxyLG4pLHRoaXMuZml4KGEsdCxyKX19LHtrZXk6Il9wYXJzZUF1ZGlvIix2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKHQubGVuZ3RoKXt2YXIgYT0oMjQwJnRbMF0pPj4+NCxuPXRoaXMuYXVkaW9UcmFjaztpZihhIT09a2UmJmEhPT1tZSYmYSE9PWdlJiZhIT09YmUpcmV0dXJuIF9lLndhcm4oIlVuc3VwcG9ydGVkIHNvdW5kIGZvcm1hdDogIi5jb25jYXQoYSkpLHZvaWQgbi5yZXNldCgpO2lmKGEhPT1rZSYmYSE9PWJlKXt2YXIgaT0oMTImdFswXSk+PjIscz0oMiZ0WzBdKT4+MSxvPTEmdFswXTtuLnNhbXBsZVJhdGU9ZS5BVURJT19SQVRFW2ldLG4uc2FtcGxlU2l6ZT1zPzE2Ojgsbi5jaGFubmVsQ291bnQ9bysxfXN3aXRjaChhKXtjYXNlIG1lOmNhc2UgZ2U6dGhpcy5fcGFyc2VHNzExKHQscixhKTticmVhaztjYXNlIGtlOnRoaXMuX3BhcnNlQWFjKHQscik7YnJlYWs7Y2FzZSBiZTp0aGlzLl9wYXJzZU9wdXModCxyKX19fX0se2tleToiX3BhcnNlT3B1cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmF1ZGlvVHJhY2ssYT1lWzFdO3N3aXRjaChyLmNvZGVjVHlwZT1CLGEpe2Nhc2UgMDp2YXIgbj1kZS5wYXJzZUhlYWRlclBhY2tldHMoZS5zdWJhcnJheSgyKSk7bj8oci5jb2RlYz1uLmNvZGVjLHIuY2hhbm5lbENvdW50PW4uY2hhbm5lbENvdW50LHIuc2FtcGxlUmF0ZT1uLnNhbXBsZVJhdGUsci5jb25maWc9bi5jb25maWcsci5zYW1wbGVEdXJhdGlvbj1kZS5nZXRGcmFtZUR1cmF0aW9uKFtdLHIudGltZXNjYWxlKSk6KHIucmVzZXQoKSxfZS53YXJuKCJDYW5ub3QgcGFyc2UgQXVkaW9TcGVjaWZpY0NvbmZpZyIsZSkpO2JyZWFrO2Nhc2UgMTppZihudWxsPT10KXJldHVybjt2YXIgaT1uZXcgRih0LGUuc3ViYXJyYXkoMiksci5zYW1wbGVEdXJhdGlvbik7ci5zYW1wbGVzLnB1c2goaSk7YnJlYWs7ZGVmYXVsdDpfZS53YXJuKCJVbmtub3duIE9wdXNQYWNrZXRUeXBlOiAiLmNvbmNhdChhKSl9fX0se2tleToiX3BhcnNlRzcxMSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuYXVkaW9UcmFjayxuPWUuc3ViYXJyYXkoMSk7aWYoIShuLmJ5dGVMZW5ndGg8MSkpe3ZhciBpPW5ldyBGKHQsbik7YS5jb2RlY1R5cGU9Nz09PXI/VDpFLGEuc2FtcGxlUmF0ZT04ZTMsYS5jb2RlYz1hLmNvZGVjVHlwZSxhLnNhbXBsZXMucHVzaChpKX19fSx7a2V5OiJfcGFyc2VBYWMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5hdWRpb1RyYWNrO2lmKHIuY29kZWNUeXBlPUQsMD09PWVbMV0pe3ZhciBhPXVlLnBhcnNlQXVkaW9TcGVjaWZpY0NvbmZpZyhlLnN1YmFycmF5KDIpKTthPyhyLmNvZGVjPWEuY29kZWMsci5jaGFubmVsQ291bnQ9YS5jaGFubmVsQ291bnQsci5zYW1wbGVSYXRlPWEuc2FtcGxlUmF0ZSxyLmNvbmZpZz1hLmNvbmZpZyxyLm9iamVjdFR5cGU9YS5vYmplY3RUeXBlLHIuc2FtcGxlUmF0ZUluZGV4PWEuc2FtcGxpbmdGcmVxdWVuY3lJbmRleCk6KHIucmVzZXQoKSxfZS53YXJuKCJDYW5ub3QgcGFyc2UgQXVkaW9TcGVjaWZpY0NvbmZpZyIsZSkpfWVsc2UgaWYoMT09PWVbMV0pe2lmKG51bGw9PXQpcmV0dXJuO3Iuc2FtcGxlcy5wdXNoKG5ldyBGKHQsZS5zdWJhcnJheSgyKSkpfWVsc2UgX2Uud2FybigiVW5rbm93biBBQUNQYWNrZXRUeXBlOiAiLmNvbmNhdChlWzFdKSl9fSx7a2V5OiJfcGFyc2VWaWRlbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2lmKCEoZS5sZW5ndGg8Nikpe3ZhciBhPSgyNDAmZVswXSk+Pj40LG49MTUmZVswXSxpPXRoaXMudmlkZW9UcmFjaztpZig3IT09biYmMTIhPT1uKXJldHVybiBpLnJlc2V0KCksdm9pZCBfZS53YXJuKCJVbnN1cHBvcnRlZCBjb2RlY0lkOiAiLmNvbmNhdChuKSk7dmFyIHM9MTI9PT1uO2kuY29kZWNUeXBlPXM/QTpTO3ZhciBvPWVbMV0sdT0oZVsyXTw8MTZ8ZVszXTw8OHxlWzRdKTw8OD4+ODtpZigwPT09byl7dmFyIGM9ZS5zdWJhcnJheSg1KSxsPXM/ZmUucGFyc2VIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQoYyk6bGUucGFyc2VBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZChjKTtpZihsKXt2YXIgZj1sLmh2Y0MsZD1sLnNwcyxoPWwucHBzQXJyLHA9bC5zcHNBcnIsdj1sLnZwc0Fycix5PWwubmFsVW5pdFNpemU7ZiYmKGkuaHZjQz1pLmh2Y0N8fGYpLGQmJihpLmNvZGVjPWQuY29kZWMsaS53aWR0aD1kLndpZHRoLGkuaGVpZ2h0PWQuaGVpZ2h0LGkuc2FyUmF0aW89ZC5zYXJSYXRpbyxpLmZwc051bT1kLmZwc051bSxpLmZwc0Rlbj1kLmZwc0RlbikscC5sZW5ndGgmJihpLnNwcz1wKSxoLmxlbmd0aCYmKGkucHBzPWgpLHYmJnYubGVuZ3RoJiYoaS52cHM9dikseSYmKGkubmFsVW5pdFNpemU9eSl9ZWxzZSBfZS53YXJuKCJDYW5ub3QgcGFyc2UgIi5jb25jYXQocz8iSEVWQyI6IkFWQyIsIkRlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIiksZSl9ZWxzZSBpZigxPT09byl7dmFyIG09Y2UucGFyc2VBdmNDKGUuc3ViYXJyYXkoNSksaS5uYWxVbml0U2l6ZSk7aWYoKG09dGhpcy5fY2hlY2tBZGRNZXRhTmFsVG9Vbml0cyhzLG0saSkpJiZtLmxlbmd0aCl7dmFyIGc9bmV3IFYodCt1LHQsbSk7aWYodGhpcy5zZWFtbGVzc0xvYWRpbmdTd2l0Y2hpbmcmJnQ8aS5sYXN0S2V5RnJhbWVEdHMpcmV0dXJuO3RoaXMuc2VhbWxlc3NMb2FkaW5nU3dpdGNoaW5nPSExLDE9PT1hJiYoZy5zZXRUb0tleWZyYW1lKCksaS5sYXN0S2V5RnJhbWVEdHM9dCksaS5zYW1wbGVzLnB1c2goZyksbS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgYT1zP2VbMF0+Pj4xJjYzOjMxJmVbMF07c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDE5OmNhc2UgMjA6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6aWYoIXMmJjUhPT1hfHxzJiY1PT09YSlicmVhaztnLnNldFRvS2V5ZnJhbWUoKTticmVhaztjYXNlIDY6Y2FzZSAzOTpjYXNlIDQwOmlmKCFzJiY2IT09YXx8cyYmNj09PWEpYnJlYWs7ci5tZXRhZGF0YVRyYWNrLnNlaVNhbXBsZXMucHVzaChuZXcgRyhjZS5wYXJzZVNFSShjZS5yZW1vdmVFUEIoZSkscyksdCt1KSl9fSkpLGcua2V5ZnJhbWUmJnRoaXMuX2dvcElkKyssZy5nb3BJZD10aGlzLl9nb3BJZH1lbHNlIF9lLndhcm4oIkNhbm5vdCBwYXJzZSBOQUxVcyIsZSl9ZWxzZSAyPT09b3x8X2Uud2FybigiVW5rbm93biBBVkNQYWNrZXRUeXBlOiAiLmNvbmNhdChvKSl9fX0se2tleToiX2NoZWNrQWRkTWV0YU5hbFRvVW5pdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSYmdGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD90Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0+Pj4xJjYzfSkpLmluY2x1ZGVzKDMyKT8odGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD0hMSx0KToodC51bnNoaWZ0KHIucHBzWzBdKSx0LnVuc2hpZnQoci5zcHNbMF0pLHQudW5zaGlmdChyLnZwc1swXSksdC5maWx0ZXIoQm9vbGVhbikpOih0aGlzLl9uZWVkQWRkTWV0YUJlZm9yZUtleUZyYW1lTmFsPSExLHQpfX0se2tleToiX3BhcnNlU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubWV0YWRhdGFUcmFjay5mbHZTY3JpcHRTYW1wbGVzLnB1c2gobmV3IGooeWUucGFyc2UoZSksdCkpfX1dLFt7a2V5OiJwcm9iZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDcwPT09ZVswXSYmNzY9PT1lWzFdJiY4Nj09PWVbMl0mJjE9PT1lWzNdJiZyZShlLDUpPj05fX1dKSxlfSgpO2kod2UsIkFVRElPX1JBVEUiLFs1NTAwLDExZTMsMjJlMyw0NGUzXSksbmV3IHEoIlRzRGVtdXhlciIpO3ZhciB4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSx0aGlzLmR2PW5ldyBEYXRhVmlldyh0KSx0aGlzLnN0YXJ0PXRoaXMub2Zmc2V0PWF8fHRoaXMuZHYuYnl0ZU9mZnNldCx0aGlzLmVuZD1uP3RoaXMuc3RhcnQrbjp0aGlzLnN0YXJ0K3RoaXMuZHYuYnl0ZUxlbmd0aH1yZXR1cm4gbihlLFt7a2V5OiJidWZmZXIiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmR2LmJ1ZmZlcn19LHtrZXk6InVucmVhZExlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZW5kLXRoaXMub2Zmc2V0LDApfX0se2tleToic2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMuc3RhcnR9fSx7a2V5OiJyZWFkRmxvYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PTA7c3dpdGNoKGUpe2Nhc2UgNDp0PXRoaXMuZHYuZ2V0RmxvYXQzMih0aGlzLm9mZnNldCk7YnJlYWs7Y2FzZSA4OnQ9dGhpcy5kdi5nZXRGbG9hdDY0KHRoaXMub2Zmc2V0KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigicmVhZCAiLmNvbmNhdChlLCItYnl0ZSBmbG9hdCBpcyBub3Qgc3VwcG9ydGVkIikpfXJldHVybiB0aGlzLm9mZnNldCs9ZSx0fX0se2tleToiYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vZmZzZXQtPWV9fSx7a2V5OiJza2lwIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9mZnNldCs9ZX19LHtrZXk6InJlYWRJbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub2Zmc2V0O3N3aXRjaCh0aGlzLm9mZnNldCs9ZSxlKXtjYXNlIDE6cmV0dXJuIHRoaXMuZHYuZ2V0SW50OCh0KTtjYXNlIDI6cmV0dXJuIHRoaXMuZHYuZ2V0SW50MTYodCk7Y2FzZSA0OnJldHVybiB0aGlzLmR2LmdldEludDMyKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJyZWFkICIuY29uY2F0KGUsIi1ieXRlIGludGVnZXJzIGlzIG5vdCBzdXBwb3J0ZWQiKSl9fX0se2tleToicmVhZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vZmZzZXQ7c3dpdGNoKHRoaXMub2Zmc2V0Kz1lLGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5kdi5nZXRVaW50OCh0KTtjYXNlIDI6cmV0dXJuIHRoaXMuZHYuZ2V0VWludDE2KHQpO2Nhc2UgMzpyZXR1cm4odGhpcy5kdi5nZXRVaW50MTYodCk8PDgpK3RoaXMuZHYuZ2V0VWludDgodCsyKTtjYXNlIDQ6cmV0dXJuIHRoaXMuZHYuZ2V0VWludDMyKHQpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuYmFjayhlLTQpLHRoaXMucmVhZChlLTQpK3RoaXMuZHYuZ2V0VWludDMyKHQpKk1hdGgucG93KDI1NixlLTQpfX19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMub2Zmc2V0O3N3aXRjaCh0aGlzLm9mZnNldCs9ZSxlKXtjYXNlIDE6cmV0dXJuIHRoaXMuZHYuc2V0VWludDgocix0KTtjYXNlIDI6cmV0dXJuIHRoaXMuZHYuc2V0VWludDE2KHIsdCk7Y2FzZSAzOnJldHVybiB0aGlzLmR2LnNldFVpbnQ4KHIsdD4+PjE2KSx0aGlzLmR2LnNldFVpbnQxNihyKzEsNjU1MzUmdCk7Y2FzZSA0OnJldHVybiB0aGlzLmR2LnNldFVpbnQzMihyLHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ3cml0ZSAiLmNvbmNhdChlLCItYnl0ZSBpbnRlZ2VycyBpcyBub3Qgc3VwcG9ydGVkIikpfX19LHtrZXk6InJlYWRUb0J1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5vZmZzZXR8fGU/dGhpcy5kdi5idWZmZXIuc2xpY2UodGhpcy5vZmZzZXQsZT90aGlzLm9mZnNldCtlOnRoaXMuZW5kKTp0aGlzLmR2LmJ1ZmZlcix0aGlzLm9mZnNldCs9dC5ieXRlTGVuZ3RoLHR9fSx7a2V5OiJyZWFkVG9VaW50OCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkodGhpcy5kdi5idWZmZXIsdGhpcy5vZmZzZXQsZXx8dGhpcy51bnJlYWRMZW5ndGgpO3JldHVybiB0aGlzLm9mZnNldCs9dC5ieXRlTGVuZ3RoLHR9fSx7a2V5OiJyZWFkU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPSIiO3Q8ZTt0Kyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmR2LmdldFVpbnQ4KHRoaXMub2Zmc2V0KSksdGhpcy5vZmZzZXQrKztyZXR1cm4gcn19XSxbe2tleToiZnJvbVVpbnQ4Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9fSx7a2V5OiJjb25jYXRVaW50OHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBVaW50OEFycmF5KGUucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuYnl0ZUxlbmd0aH0pLDApKSxyPTA7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5zZXQoZSxyKSxyKz1lLmJ5dGVMZW5ndGh9KSksdH19LHtrZXk6ImNvbmNhdFVpbnQ4Iix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiB0aGlzLmNvbmNhdFVpbnQ4cyh0KX19XSksZX0oKSxTZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhKXtyKHRoaXMsZSksdGhpcy5vZmZzZXQ9MCx0aGlzLnZhbD10LHRoaXMuc2l6ZT1hfXJldHVybiBuKGUsW3trZXk6InNraXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0Kz1lfX0se2tleToicmVhZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zaXplLXRoaXMub2Zmc2V0LWU7aWYodD49MCl7dmFyIHI9MCxhPTA7aWYodGhpcy5vZmZzZXQrPWUsdGhpcy5zaXplPjMxKXtmb3IoO2E8ZTthKyspcis9TWF0aC5wb3coMixhKTtyZXR1cm4gdGhpcy52YWwvTWF0aC5wb3coMix0KSZyfWZvcig7YTxlO2ErKylyKz0xPDxhO3JldHVybiB0aGlzLnZhbD4+PnQmcn10aHJvdyBuZXcgRXJyb3IoInRoZSBudW1iZXIgb2YgdGhlIHJlYWQgb3BlcmF0aW9uIGV4Y2VlZHMgdGhlIHRvdGFsIGxlbmd0aCBsaW1pdCBvZiBiaXRzIil9fV0sW3trZXk6ImZyb21CeXRlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZSh0LnJlYWQocikscjw8Myl9fV0pLGV9KCksQWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToiZmluZEJveCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxuPVtdO2lmKCF0KXJldHVybiBuO2Zvcih2YXIgaT0wLHM9IiIsbz0wO3QubGVuZ3RoPjc7KXtpZihpPXJlKHQpLHM9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc3ViYXJyYXkoNCw4KSksbz04LDE9PT1pPyhpPWFlKHQsOCksbys9OCk6aXx8KGk9dC5sZW5ndGgpLCFyWzBdfHxzPT09clswXSl7dmFyIHU9dC5zdWJhcnJheSgwLGkpO2lmKCEoci5sZW5ndGg8MikpcmV0dXJuIGUuZmluZEJveCh1LnN1YmFycmF5KG8pLHIuc2xpY2UoMSksYStvKTtuLnB1c2goe3N0YXJ0OmEsc2l6ZTppLGhlYWRlclNpemU6byx0eXBlOnMsZGF0YTp1fSl9YSs9aSx0PXQuc3ViYXJyYXkoaSl9cmV0dXJuIG59fSx7a2V5OiJ0ZmhkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXtlLnRyYWNrSWQ9cmUodCk7dmFyIHI9NCxhPTEmZS5mbGFncyxuPTImZS5mbGFncyxpPTgmZS5mbGFncyxzPTE2JmUuZmxhZ3Msbz0zMiZlLmZsYWdzO2EmJihyKz00LGUuYmFzZURhdGFPZmZzZXQ9cmUodCxyKSxyKz00KSxuJiYoZS5zYW1wbGVEZXNjcmlwdGlvbkluZGV4PXJlKHQscikscis9NCksaSYmKGUuZGVmYXVsdFNhbXBsZUR1cmF0aW9uPXJlKHQscikscis9NCkscyYmKGUuZGVmYXVsdFNhbXBsZVNpemU9cmUodCxyKSxyKz00KSxvJiYoZS5kZWZhdWx0U2FtcGxlRmxhZ3M9cmUodCxyKSl9KSl9fSx7a2V5OiJzaWR4Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0wO2UucmVmZXJlbmNlX0lEPXJlKHQscikscis9NCxlLnRpbWVzY2FsZT1yZSh0LHIpLHIrPTQsMD09PWUudmVyc2lvbj8oZS5lYXJsaWVzdF9wcmVzZW50YXRpb25fdGltZT1yZSh0LHIpLHIrPTQsZS5maXJzdF9vZmZzZXQ9cmUodCxyKSxyKz00KTooZS5lYXJsaWVzdF9wcmVzZW50YXRpb25fdGltZT1hZSh0LHIpLHIrPTgsZS5maXJzdF9vZmZzZXQ9YWUodCxyKSxyKz04KSxyKz0yLGUucmVmZXJlbmNlcz1bXTt2YXIgYT10ZSh0LHIpO3IrPTI7Zm9yKHZhciBuPTA7bjxhO24rKyl7dmFyIGk9e307ZS5yZWZlcmVuY2VzLnB1c2goaSk7dmFyIHM9cmUodCxyKTtyKz00LGkucmVmZXJlbmNlX3R5cGU9cz4+MzEmMSxpLnJlZmVyZW5jZWRfc2l6ZT0yMTQ3NDgzNjQ3JnMsaS5zdWJzZWdtZW50X2R1cmF0aW9uPXJlKHQscikscz1yZSh0LHIrPTQpLHIrPTQsaS5zdGFydHNfd2l0aF9TQVA9cz4+MzEmMSxpLlNBUF90eXBlPXM+PjI4JjcsaS5TQVBfZGVsdGFfdGltZT0yNjg0MzU0NTUmc319KSl9fSx7a2V5OiJtb292Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3QubXZoZD1lLm12aGQoZS5maW5kQm94KHIsWyJtdmhkIl0sYSlbMF0pLHQudHJhaz1lLmZpbmRCb3gocixbInRyYWsiXSxhKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYWsodCl9KSksdC5wc3NoPWUucHNzaChlLmZpbmRCb3gocixbInBzc2giXSxhKVswXSl9KSl9fSx7a2V5OiJtdmhkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0wOzE9PT1lLnZlcnNpb24/KGUudGltZXNjYWxlPXJlKHQsMTYpLGUuZHVyYXRpb249YWUodCwyMCkscis9MjgpOihlLnRpbWVzY2FsZT1yZSh0LDgpLGUuZHVyYXRpb249cmUodCwxMikscis9MTYpLGUubmV4dFRyYWNrSWQ9cmUodCxyKzc2KX0pKX19LHtrZXk6InRyYWsiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC50a2hkPWUudGtoZChlLmZpbmRCb3gocixbInRraGQiXSxhKVswXSksdC5tZGlhPWUubWRpYShlLmZpbmRCb3gocixbIm1kaWEiXSxhKVswXSl9KSl9fSx7a2V5OiJ0a2hkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj14ZS5mcm9tVWludDgodCk7MT09PWUudmVyc2lvbj8oci5yZWFkKDgpLHIucmVhZCg4KSxlLnRyYWNrSWQ9ci5yZWFkKDQpLHIucmVhZCg0KSxlLmR1cmF0aW9uPXIucmVhZCg4KSk6KHIucmVhZCg0KSxyLnJlYWQoNCksZS50cmFja0lkPXIucmVhZCg0KSxyLnJlYWQoNCksZS5kdXJhdGlvbj1yLnJlYWQoNCkpLHIuc2tpcCgxNiksZS5tYXRyaXg9W107Zm9yKHZhciBhPTA7YTwzNjthKyspZS5tYXRyaXgucHVzaChyLnJlYWQoMSkpO3IuYmFjaygzNik7Zm9yKHZhciBuLGk9W10scz0wO3M8MztzKyspaS5wdXNoKG9lKHIucmVhZEludCgyKSxyLnJlYWRJbnQoMikpKSxpLnB1c2gob2Uoci5yZWFkSW50KDIpLHIucmVhZEludCgyKSkpLG49ci5yZWFkSW50KDQpLGkucHVzaChvZShuPj4zMCwxMDczNzQxODIzJm4pKTtlLnJvdGF0aW9uPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPDUpcmV0dXJuIDA7dmFyIHQ9TWF0aC5oeXBvdChlWzBdLGVbM10pLHI9TWF0aC5oeXBvdChlWzFdLGVbNF0pO3JldHVybiAwPT09dHx8MD09PXI/MDoxODAqTWF0aC5hdGFuMihlWzFdL3IsZVswXS90KS9NYXRoLlBJfShpKSxlLndpZHRoPXIucmVhZCg0KSxlLmhlaWdodD1yLnJlYWQoNCl9KSl9fSx7a2V5OiJtZGlhIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3QubWRoZD1lLm1kaGQoZS5maW5kQm94KHIsWyJtZGhkIl0sYSlbMF0pLHQuaGRscj1lLmhkbHIoZS5maW5kQm94KHIsWyJoZGxyIl0sYSlbMF0pLHQubWluZj1lLm1pbmYoZS5maW5kQm94KHIsWyJtaW5mIl0sYSlbMF0pfSkpfX0se2tleToibWRoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9MDsxPT09ZS52ZXJzaW9uPyhlLnRpbWVzY2FsZT1yZSh0LDE2KSxlLmR1cmF0aW9uPWFlKHQsMjApLHIrPTI4KTooZS50aW1lc2NhbGU9cmUodCw4KSxlLmR1cmF0aW9uPXJlKHQsMTIpLHIrPTE2KTt2YXIgYT10ZSh0LHIpO2UubGFuZ3VhZ2U9U3RyaW5nLmZyb21DaGFyQ29kZSg5NisoYT4+MTAmMzEpLDk2KyhhPj41JjMxKSw5NisoMzEmYSkpfSkpfX0se2tleToiaGRsciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7MD09PWUudmVyc2lvbiYmKGUuaGFuZGxlclR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc3ViYXJyYXkoNCw4KSkpfSkpfX0se2tleToibWluZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnZtaGQ9ZS52bWhkKGUuZmluZEJveChyLFsidm1oZCJdLGEpWzBdKSx0LnNtaGQ9ZS5zbWhkKGUuZmluZEJveChyLFsic21oZCJdLGEpWzBdKSx0LnN0Ymw9ZS5zdGJsKGUuZmluZEJveChyLFsic3RibCJdLGEpWzBdKX0pKX19LHtrZXk6InZtaGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCEwLChmdW5jdGlvbihlLHQpe2UuZ3JhcGhpY3Ntb2RlPXRlKHQpLGUub3Bjb2xvcj1bdGUodCwyKSx0ZSh0LDQpLHRlKHQsNildfSkpfX0se2tleToic21oZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7ZS5iYWxhbmNlPXRlKHQpfSkpfX0se2tleToic3RibCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt2YXIgbixpLHM7dC5zdHNkPWUuc3RzZChlLmZpbmRCb3gocixbInN0c2QiXSxhKVswXSksdC5zdHRzPWUuc3R0cyhlLmZpbmRCb3gocixbInN0dHMiXSxhKVswXSksdC5jdHRzPWUuY3R0cyhlLmZpbmRCb3gocixbImN0dHMiXSxhKVswXSksdC5zdHNjPWUuc3RzYyhlLmZpbmRCb3gocixbInN0c2MiXSxhKVswXSksdC5zdHN6PWUuc3RzeihlLmZpbmRCb3gocixbInN0c3oiXSxhKVswXSksdC5zdGNvPWUuc3RjbyhlLmZpbmRCb3gocixbInN0Y28iXSxhKVswXSksdC5zdGNvfHwodC5jbzY0PWUuY282NChlLmZpbmRCb3gocixbImNvNjQiXSxhKVswXSksdC5zdGNvPXQuY282NCk7dmFyIG89bnVsbD09PShuPXQuc3RzZC5lbnRyaWVzWzBdKXx8dm9pZCAwPT09bnx8bnVsbD09PShpPW4uc2luZil8fHZvaWQgMD09PWl8fG51bGw9PT0ocz1pLnNjaGkpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnRlbmMuZGVmYXVsdF9JVl9zaXplO3Quc3Rzcz1lLnN0c3MoZS5maW5kQm94KHIsWyJzdHNzIl0sYSlbMF0pLHQuc2VuYz1lLnNlbmMoZS5maW5kQm94KHIsWyJzZW5jIl0sYSlbMF0sbyl9KSl9fSx7a2V5OiJzZW5jIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ODtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSxyKXt2YXIgYT0wLG49cmUocixhKTthKz00LGUuc2FtcGxlcz1bXTtmb3IodmFyIGk9MDtpPG47aSsrKXtmb3IodmFyIHM9e0luaXRpYWxpemF0aW9uVmVjdG9yOltdfSxvPTA7bzx0O28rKylzLkluaXRpYWxpemF0aW9uVmVjdG9yW29dPXJbYStvXTtpZihhKz10LDImZS5mbGFncyl7cy5zdWJzYW1wbGVzPVtdO3ZhciB1PXRlKHIsYSk7YSs9Mjtmb3IodmFyIGM9MDtjPHU7YysrKXt2YXIgbD17fTtsLkJ5dGVzT2ZDbGVhckRhdGE9dGUocixhKSxhKz0yLGwuQnl0ZXNPZlByb3RlY3RlZERhdGE9cmUocixhKSxhKz00LHMuc3Vic2FtcGxlcy5wdXNoKGwpfX1lLnNhbXBsZXMucHVzaChzKX19KSl9fSx7a2V5OiJwc3NoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sYT1bXSxuPTAsaT0wO2k8MTY7aSsrKWEucHVzaChDZSh0W24raV0pKTtpZihuKz0xNixlLnZlcnNpb24+MCl7dmFyIHM9cmUodCxuKTtuKz00O2Zvcih2YXIgbz0wO288KCIiK3MpLmxlbmd0aDtvKyspZm9yKHZhciB1PTA7dTwxNjt1Kyspe3ZhciBjPXRbbl07bis9MSxyLnB1c2goQ2UoYykpfX12YXIgbD1yZSh0LG4pO2UuZGF0YV9zaXplPWwsbis9NCxlLmtpZD1yLGUuc3lzdGVtX2lkPWEsZS5idWZmZXI9dH0pKX19LHtrZXk6InN0c2QiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCEwLChmdW5jdGlvbih0LHIsYSl7dC5lbnRyeUNvdW50PXJlKHIpLHQuZW50cmllcz1lLmZpbmRCb3goci5zdWJhcnJheSg0KSxbXSxhKzQpLm1hcCgoZnVuY3Rpb24odCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhdjAxIjpyZXR1cm4gZS5hdjAxKHQpO2Nhc2UiYXZjMSI6Y2FzZSJhdmMyIjpjYXNlImF2YzMiOmNhc2UiYXZjNCI6cmV0dXJuIGUuYXZjMSh0KTtjYXNlImh2YzEiOmNhc2UiaGV2MSI6cmV0dXJuIGUuaHZjMSh0KTtjYXNlIm1wNGEiOnJldHVybiBlLm1wNGEodCk7Y2FzZSJhbGF3IjpjYXNlInVsYXciOnJldHVybiBlLmFsYXcodCk7Y2FzZSJlbmNhIjpyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3QuY2hhbm5lbENvdW50PXRlKHIsMTYpLHQuc2FtcGxlc2l6ZT10ZShyLDE4KSx0LnNhbXBsZVJhdGU9cmUociwyNCkvNjU1MzYscj1yLnN1YmFycmF5KDI4KSx0LnNpbmY9ZS5zaW5mKGUuZmluZEJveChyLFsic2luZiJdLGEpWzBdKSx0LmVzZHM9ZS5lc2RzKGUuZmluZEJveChyLFsiZXNkcyJdLGEpWzBdKX0pKTtjYXNlImVuY3YiOnJldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC53aWR0aD10ZShyLDI0KSx0LmhlaWdodD10ZShyLDI2KSx0Lmhvcml6cmVzb2x1dGlvbj1yZShyLDI4KSx0LnZlcnRyZXNvbHV0aW9uPXJlKHIsMzIpLHI9ci5zdWJhcnJheSg3OCksdC5zaW5mPWUuc2luZihlLmZpbmRCb3gocixbInNpbmYiXSxhKVswXSksdC5hdmNDPWUuYXZjQyhlLmZpbmRCb3gocixbImF2Y0MiXSxhKVswXSksdC5odmNDPWUuaHZjQyhlLmZpbmRCb3gocixbImh2Y0MiXSxhKVswXSksdC5wYXNwPWUucGFzcChlLmZpbmRCb3gocixbInBhc3AiXSxhKVswXSl9KSl9fSkpLmZpbHRlcihCb29sZWFuKX0pKX19LHtrZXk6InRlbmMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCExLChmdW5jdGlvbihlLHQpe3ZhciByPTY7ZS5kZWZhdWx0X0lzRW5jcnlwdGVkPXRbcl0scis9MSxlLmRlZmF1bHRfSVZfc2l6ZT10W3JdLHIrPTEsZS5kZWZhdWx0X0tJRD1bXTtmb3IodmFyIGE9MDthPDE2O2ErKyllLmRlZmF1bHRfS0lELnB1c2goQ2UodFtyXSkpLHIrPTF9KSl9fSx7a2V5OiJzY2hpIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3QudGVuYz1lLnRlbmMoZS5maW5kQm94KHIsWyJ0ZW5jIl0sYSlbMF0pfSkpfX0se2tleToic2luZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnNjaGk9ZS5zY2hpKGUuZmluZEJveChyLFsic2NoaSJdLGEpWzBdKSx0LmZybWE9ZS5mcm1hKGUuZmluZEJveChyLFsiZnJtYSJdLGEpWzBdKX0pKX19LHtrZXk6ImZybWEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCExLChmdW5jdGlvbihlLHQpe2UuZGF0YV9mb3JtYXQ9IiI7Zm9yKHZhciByPTA7cjw0O3IrKyllLmRhdGFfZm9ybWF0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbcl0pfSkpfX0se2tleToiY29sciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITEsKGZ1bmN0aW9uKHQscil7dmFyIGE9eGUuZnJvbVVpbnQ4KHIpO3QuZGF0YT1lLmRhdGEsdC5jb2xvclR5cGU9YS5yZWFkU3RyaW5nKDQpLCJuY2x4Ij09PXQuY29sb3JUeXBlPyh0LmNvbG9yUHJpbWFyaWVzPWEucmVhZCgyKSx0LnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzPWEucmVhZCgyKSx0Lm1hdHJpeENvZWZmaWNpZW50cz1hLnJlYWQoMiksdC5mdWxsUmFuZ2VGbGFnPWEucmVhZCgxKT4+Nyk6InJJQ0MiIT09dC5jb2xvclR5cGUmJiJwcm9mIiE9PXQuY29sb3JUeXBlfHwodC5pY2NQcm9maWxlPXIucmVhZFRvVWludDgoKSl9KSl9fSx7a2V5OiJhdjAxIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gQmUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3ZhciBuPVRlKHQsciksaT1yLnN1YmFycmF5KG4pO2ErPW4sdC5hdjFDPWUuYXYxQyhlLmZpbmRCb3goaSxbImF2MUMiXSxhKVswXSksdC5jb2xyPWUuY29scihlLmZpbmRCb3goaSxbImNvbHIiXSxhKVswXSl9KSl9fSx7a2V5OiJhdjFDIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMSwoZnVuY3Rpb24odCxyKXt0LmRhdGE9ZS5kYXRhO3ZhciBhLG49eGUuZnJvbVVpbnQ4KHIpLGk9U2UuZnJvbUJ5dGUobiw0KTt0Lm1hcmtlcj1pLnJlYWQoMSksdC52ZXJzaW9uPWkucmVhZCg3KSx0LnNlcVByb2ZpbGU9aS5yZWFkKDMpLHQuc2VxTGV2ZWxJZHgwPWkucmVhZCg1KSx0LnNlcVRpZXIwPWkucmVhZCgxKSx0LmhpZ2hCaXRkZXB0aD1pLnJlYWQoMSksdC50d2VsdmVCaXQ9aS5yZWFkKDEpLHQubW9ub2Nocm9tZT1pLnJlYWQoMSksdC5jaHJvbWFTdWJzYW1wbGluZ1g9aS5yZWFkKDEpLHQuY2hyb21hU3Vic2FtcGxpbmdZPWkucmVhZCgxKSx0LmNocm9tYVNhbXBsZVBvc2l0aW9uPWkucmVhZCgyKSx0LnJlc2VydmVkPWkucmVhZCgzKSx0LmluaXRpYWxQcmVzZW50YXRpb25EZWxheVByZXNlbnQ9aS5yZWFkKDEpLHQuaW5pdGlhbFByZXNlbnRhdGlvbkRlbGF5UHJlc2VudD90LmluaXRpYWxQcmVzZW50YXRpb25EZWxheU1pbnVzT25lPWkucmVhZCg0KTp0LmluaXRpYWxQcmVzZW50YXRpb25EZWxheU1pbnVzT25lPTAsdC5jb25maWdPQlVzPW4ucmVhZFRvVWludDgoKSwyPT09dC5zZXFMZXZlbElkeDAmJjE9PT10LmhpZ2hCaXRkZXB0aD9hPTE9PT10LnR3ZWx2ZUJpdD8iMTIiOiIxMCI6dC5zZXFQcm9maWxlPD0yJiYoYT0xPT09dC5oaWdoQml0ZGVwdGg/IjEwIjoiMDgiKSx0LmNvZGVjPVsiYXYwMSIsdC5zZXFQcm9maWxlLCh0LnNlcUxldmVsSWR4MDwxMD8iMCIrdC5zZXFMZXZlbElkeDA6dC5zZXFMZXZlbElkeDApKyh0LnNlcVRpZXIwPyJIIjoiTSIpLGFdLmpvaW4oIi4iKX0pKX19LHtrZXk6ImF2YzEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG49VGUodCxyKSxpPXIuc3ViYXJyYXkobik7YSs9bix0LmF2Y0M9ZS5hdmNDKGUuZmluZEJveChpLFsiYXZjQyJdLGEpWzBdKSx0LnBhc3A9ZS5wYXNwKGUuZmluZEJveChpLFsicGFzcCJdLGEpWzBdKX0pKX19LHtrZXk6ImF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCExLChmdW5jdGlvbih0LHIpe3QuZGF0YT1lLmRhdGEsdC5jb25maWd1cmF0aW9uVmVyc2lvbj1yWzBdLHQuQVZDUHJvZmlsZUluZGljYXRpb249clsxXSx0LnByb2ZpbGVDb21wYXRpYmlsaXR5PXJbMl0sdC5BVkNMZXZlbEluZGljYXRpb249clszXSx0LmNvZGVjPW5lKFtyWzFdLHJbMl0sclszXV0pLHQubGVuZ3RoU2l6ZU1pbnVzT25lPTMmcls0XSx0LnNwc0xlbmd0aD0zMSZyWzVdLHQuc3BzPVtdO2Zvcih2YXIgYT02LG49MDtuPHQuc3BzTGVuZ3RoO24rKyl7dmFyIGk9dGUocixhKTthKz0yLHQuc3BzLnB1c2goci5zdWJhcnJheShhLGEraSkpLGErPWl9dC5wcHNMZW5ndGg9clthXSxhKz0xLHQucHBzPVtdO2Zvcih2YXIgcz0wO3M8dC5wcHNMZW5ndGg7cysrKXt2YXIgbz10ZShyLGEpO2ErPTIsdC5wcHMucHVzaChyLnN1YmFycmF5KGEsYSs9bykpLGErPW99fSkpfX0se2tleToiaHZjMSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt2YXIgbj1UZSh0LHIpLGk9ci5zdWJhcnJheShuKTthKz1uLHQuaHZjQz1lLmh2Y0MoZS5maW5kQm94KGksWyJodmNDIl0sYSlbMF0pLHQucGFzcD1lLnBhc3AoZS5maW5kQm94KGksWyJwYXNwIl0sYSlbMF0pfSkpfX0se2tleToiaHZjQyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITEsKGZ1bmN0aW9uKHQscil7dC5kYXRhPWUuZGF0YSx0LmNvZGVjPSJoZXYxLjEuNi5MOTMuQjAiLHQuY29uZmlndXJhdGlvblZlcnNpb249clswXTt2YXIgYT1yWzFdO3QuZ2VuZXJhbFByb2ZpbGVTcGFjZT1hPj42LHQuZ2VuZXJhbFRpZXJGbGFnPSgzMiZhKT4+NSx0LmdlbmVyYWxQcm9maWxlSWRjPTMxJmEsdC5nZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHk9cmUociwyKSx0LmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3M9ci5zdWJhcnJheSg2LDEyKSx0LmdlbmVyYWxMZXZlbElkYz1yWzEyXSx0LmF2Z0ZyYW1lUmF0ZT10ZShyLDE5KSx0Lm51bU9mQXJyYXlzPXJbMjJdLHQudnBzPVtdLHQuc3BzPVtdLHQucHBzPVtdO2Zvcih2YXIgbj0yMyxpPTAscz0wLG89MCx1PTA7dTx0Lm51bU9mQXJyYXlzO3UrKyl7aT02MyZyW25dLHM9dGUocixuKzEpLG4rPTM7Zm9yKHZhciBjLGw9W10sZj0wO2Y8cztmKyspbz10ZShyLG4pLG4rPTIsbC5wdXNoKHIuc3ViYXJyYXkobixuK28pKSxuKz1vO2lmKDMyPT09aSkoYz10LnZwcykucHVzaC5hcHBseShjLGwpO2Vsc2UgaWYoMzM9PT1pKXt2YXIgZDsoZD10LnNwcykucHVzaC5hcHBseShkLGwpfWVsc2UgaWYoMzQ9PT1pKXt2YXIgaDsoaD10LnBwcykucHVzaC5hcHBseShoLGwpfX19KSl9fSx7a2V5OiJwYXNwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMSwoZnVuY3Rpb24oZSx0KXtlLmhTcGFjaW5nPXJlKHQpLGUudlNwYWNpbmc9cmUodCw0KX0pKX19LHtrZXk6Im1wNGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG49RWUodCxyKTt0LmVzZHM9ZS5lc2RzKGUuZmluZEJveChyLnN1YmFycmF5KG4pLFsiZXNkcyJdLGErbilbMF0pfSkpfX0se2tleToiZXNkcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7ZS5jb2RlYz0ibXA0YS4iO2Zvcih2YXIgcj0wLGE9MCxuPTAsaT0wO3QubGVuZ3RoOyl7Zm9yKGk9dFtyPTBdLGE9dFtyKzFdLHIrPTI7MTI4JmE7KW49KDEyNyZhKTw8NyxhPXRbcl0scis9MTtpZihuKz0xMjcmYSwzPT09aSl0PXQuc3ViYXJyYXkociszKTtlbHNle2lmKDQhPT1pKXtpZig1PT09aSl7dmFyIHM9ZS5jb25maWc9dC5zdWJhcnJheShyLHIrbiksbz0oMjQ4JnNbMF0pPj4zO2lmKDMxPT09byYmcy5sZW5ndGg+PTImJihvPTMyKygoNyZzWzBdKTw8MykrKCgyMjQmc1sxXSk+PjUpKSxlLm9iamVjdFR5cGU9byxlLmNvZGVjKz1vLnRvU3RyaW5nKDE2KSwvXm1wNGEvZ2kudGVzdChlLmNvZGVjKSYmcy5sZW5ndGg+PTIpe3ZhciB1PSg3JnNbMF0pPDwxfCgxMjgmc1sxXSk+Pjc7ZS5zYW1wbGluZ0ZyZXF1ZW5jeUluZGV4PXUsdTx1ZS5GUkVRLmxlbmd0aCYmKGUuc2FtcGxlUmF0ZT11ZS5GUkVRW3VdKX1yZXR1cm4gdm9pZCgiLiI9PT1lLmNvZGVjW2UuY29kZWMubGVuZ3RoLTFdJiYoZS5jb2RlYz1lLmNvZGVjLnN1YnN0cmluZygwLGUuY29kZWMubGVuZ3RoLTEpKSl9cmV0dXJuIHZvaWQoIi4iPT09ZS5jb2RlY1tlLmNvZGVjLmxlbmd0aC0xXSYmKGUuY29kZWM9ZS5jb2RlYy5zdWJzdHJpbmcoMCxlLmNvZGVjLmxlbmd0aC0xKSkpfWUuY29kZWMrPSh0W3JdLnRvU3RyaW5nKDE2KSsiLiIpLnBhZFN0YXJ0KDMsIjAiKSx0PXQuc3ViYXJyYXkocisxMyl9fX0pKX19LHtrZXk6ImFsYXciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBCZShlLCExLChmdW5jdGlvbihlLHQpe0VlKGUsdCl9KSl9fSx7a2V5OiJzdHRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9cmUodCksYT1bXSxuPTQsaT0wO2k8cjtpKyspYS5wdXNoKHtjb3VudDpyZSh0LG4pLGRlbHRhOnJlKHQsbis0KX0pLG4rPTg7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJjdHRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1yZSh0KSxhPVtdLG49NDtpZigxPT09ZS52ZXJzaW9uKWZvcih2YXIgaT0wO2k8cjtpKyspYS5wdXNoKHtjb3VudDpyZSh0LG4pLG9mZnNldDpyZSh0LG4rNCl9KSxuKz04O2Vsc2UgZm9yKHZhciBzPTA7czxyO3MrKylhLnB1c2goe2NvdW50OnJlKHQsbiksb2Zmc2V0Oi0oMSt+cmUodCxuKzQpKX0pLG4rPTg7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHNjIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9cmUodCksYT1bXSxuPTQsaT0wO2k8cjtpKyspYS5wdXNoKHtmaXJzdENodW5rOnJlKHQsbiksc2FtcGxlc1BlckNodW5rOnJlKHQsbis0KSxzYW1wbGVEZXNjcmlwdGlvbkluZGV4OnJlKHQsbis4KX0pLG4rPTEyO2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToic3RzeiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9cmUodCksYT1yZSh0LDQpLG49W107aWYoIXIpZm9yKHZhciBpPTgscz0wO3M8YTtzKyspbi5wdXNoKHJlKHQsaSkpLGkrPTQ7ZS5zYW1wbGVTaXplPXIsZS5zYW1wbGVDb3VudD1hLGUuZW50cnlTaXplcz1ufSkpfX0se2tleToic3RjbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXJlKHQpLGE9W10sbj00LGk9MDtpPHI7aSsrKWEucHVzaChyZSh0LG4pKSxuKz00O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToiY282NCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXJlKHQpLGE9W10sbj00LGk9MDtpPHI7aSsrKWEucHVzaChhZSh0LG4pKSxuKz04O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToic3RzcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXJlKHQpLGE9W10sbj00LGk9MDtpPHI7aSsrKWEucHVzaChyZSh0LG4pKSxuKz00O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToibW9vZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEJlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm1maGQ9ZS5tZmhkKGUuZmluZEJveChyLFsibWZoZCJdLGEpWzBdKSx0LnRyYWY9ZS5maW5kQm94KHIsWyJ0cmFmIl0sYSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFmKHQpfSkpfSkpfX0se2tleToibWZoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7ZS5zZXF1ZW5jZU51bWJlcj1yZSh0KX0pKX19LHtrZXk6InRyYWYiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBCZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC50ZmhkPWUudGZoZChlLmZpbmRCb3gocixbInRmaGQiXSxhKVswXSksdC50ZmR0PWUudGZkdChlLmZpbmRCb3gocixbInRmZHQiXSxhKVswXSksdC50cnVuPWUudHJ1bihlLmZpbmRCb3gocixbInRydW4iXSxhKVswXSl9KSl9fSx7a2V5OiJ0cnVuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZlcnNpb24sYT1lLmZsYWdzLG49dC5sZW5ndGgsaT1lLnNhbXBsZUNvdW50PXJlKHQpLHM9NDtpZihuPnMmJjEmYSYmKGUuZGF0YU9mZnNldD0tKDErfnJlKHQscykpLHMrPTQpLG4+cyYmNCZhJiYoZS5maXJzdFNhbXBsZUZsYWdzPXJlKHQscykscys9NCksZS5zYW1wbGVzPVtdLG4+cylmb3IodmFyIG8sdT0wO3U8aTt1Kyspbz17fSwyNTYmYSYmKG8uZHVyYXRpb249cmUodCxzKSxzKz00KSw1MTImYSYmKG8uc2l6ZT1yZSh0LHMpLHMrPTQpLDEwMjQmYSYmKG8uZmxhZ3M9cmUodCxzKSxzKz00KSwyMDQ4JmEmJihvLmN0cz1yPy0oMSt+cmUodCxzKzQpKTpyZSh0LHMpLHMrPTQpLGUuc2FtcGxlcy5wdXNoKG8pfSkpfX0se2tleToidGZkdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKGUsITAsKGZ1bmN0aW9uKGUsdCl7MT09PWUudmVyc2lvbj9lLmJhc2VNZWRpYURlY29kZVRpbWU9YWUodCk6ZS5iYXNlTWVkaWFEZWNvZGVUaW1lPXJlKHQpfSkpfX0se2tleToicHJvYmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEhZS5maW5kQm94KHQsWyJmdHlwIl0pfX0se2tleToicGFyc2VTYW1wbGVGbGFncyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJue2lzTGVhZGluZzooMTImZVswXSk+Pj4yLGRlcGVuZHNPbjozJmVbMF0saXNEZXBlbmRlZE9uOigxOTImZVsxXSk+Pj42LGhhc1JlZHVuZGFuY3k6KDQ4JmVbMV0pPj4+NCxwYWRkaW5nVmFsdWU6KDE0JmVbMV0pPj4+MSxpc05vblN5bmNTYW1wbGU6MSZlWzFdLGRlZ3JhZGF0aW9uUHJpb3JpdHk6ZVsyXTw8OHxlWzNdfX19LHtrZXk6Im1vb3ZUb1RyYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGEsbixpPWUudHJhaztpZihpJiZpLmxlbmd0aCl7dmFyIHM9aS5maW5kKChmdW5jdGlvbihlKXt2YXIgdCxyO3JldHVybiJ2aWRlIj09PShudWxsPT09KHQ9ZS5tZGlhKXx8dm9pZCAwPT09dHx8bnVsbD09PShyPXQuaGRscil8fHZvaWQgMD09PXI/dm9pZCAwOnIuaGFuZGxlclR5cGUpfSkpLG89aS5maW5kKChmdW5jdGlvbihlKXt2YXIgdCxyO3JldHVybiJzb3VuIj09PShudWxsPT09KHQ9ZS5tZGlhKXx8dm9pZCAwPT09dHx8bnVsbD09PShyPXQuaGRscil8fHZvaWQgMD09PXI/dm9pZCAwOnIuaGFuZGxlclR5cGUpfSkpO2lmKHMmJnQpe3ZhciB1LGMsbCxmLGQsaCxwLHY9dCx5PW51bGw9PT0odT1zLnRraGQpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnRyYWNrSWQ7bnVsbCE9eSYmKHYuaWQ9cy50a2hkLnRyYWNrSWQpLHYudGtoZER1cmF0aW9uPXMudGtoZC5kdXJhdGlvbix2Lm12aGREdXJ0aW9uPWUubXZoZC5kdXJhdGlvbix2Lm12aGRUaW1lY2FsZT1lLm12aGQudGltZXNjYWxlLHYudGltZXNjYWxlPXYuZm9ybWF0VGltZXNjYWxlPXMubWRpYS5tZGhkLnRpbWVzY2FsZSx2LmR1cmF0aW9uPXMubWRpYS5tZGhkLmR1cmF0aW9ufHx2Lm12aGREdXJ0aW9uL3YubXZoZFRpbWVjYWxlKnYudGltZXNjYWxlLHYucm90YXRpb249cy50a2hkLnJvdGF0aW9uLHYubWF0cml4PXMudGtoZC5tYXRyaXg7dmFyIG0sZyxrLGIsXyx3LFMsRCxCPXMubWRpYS5taW5mLnN0Ymwuc3RzZC5lbnRyaWVzWzBdO2lmKHYud2lkdGg9Qi53aWR0aCx2LmhlaWdodD1CLmhlaWdodCxCLnBhc3AmJih2LnNhclJhdGlvPVtCLnBhc3AuaFNwYWNpbmcsQi5wYXNwLnZTcGFjaW5nXSksQi5hdjFDKXYuY29kZWNUeXBlPXgsdi5jb2RlYz1CLmF2MUMuY29kZWMsdi5hdjFDPUIuYXYxQy5kYXRhLEIuY29sciYmKHYuY29scj1CLmNvbHIuZGF0YSk7ZWxzZSBpZihCLmh2Y0Mpdi5jb2RlY1R5cGU9QSx2LmNvZGVjPUIuaHZjQy5jb2RlYyx2LnZwcz1CLmh2Y0MudnBzLHYuc3BzPUIuaHZjQy5zcHMsdi5wcHM9Qi5odmNDLnBwcyx2Lmh2Y0M9Qi5odmNDLmRhdGE7ZWxzZXtpZighQi5hdmNDKXRocm93IG5ldyBFcnJvcigidW5rbm93biB2aWRlbyBzdHNkIGVudHJ5Iik7di5jb2RlYz1CLmF2Y0MuY29kZWMsdi5zcHM9Qi5hdmNDLnNwcyx2LnBwcz1CLmF2Y0MucHBzfWlmKHYucHJlc2VudD0hMCx2LmV4dD17fSx2LmV4dC5zdHNzPW51bGw9PT0oYz1zLm1kaWEpfHx2b2lkIDA9PT1jfHxudWxsPT09KGw9Yy5taW5mKXx8dm9pZCAwPT09bHx8bnVsbD09PShmPWwuc3RibCl8fHZvaWQgMD09PWY/dm9pZCAwOmYuc3Rzcyx2LmV4dC5jdHRzPW51bGw9PT0oZD1zLm1kaWEpfHx2b2lkIDA9PT1kfHxudWxsPT09KGg9ZC5taW5mKXx8dm9pZCAwPT09aHx8bnVsbD09PShwPWguc3RibCl8fHZvaWQgMD09PXA/dm9pZCAwOnAuY3R0cyxCJiYiZW5jdiI9PT1CLnR5cGUpdi5pc1ZpZGVvRW5jcnlwdGlvbj0hMCxCLmRlZmF1bHRfS0lEPW51bGw9PT0obT1CLnNpbmYpfHx2b2lkIDA9PT1tfHxudWxsPT09KGc9bS5zY2hpKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy50ZW5jLmRlZmF1bHRfS0lELEIuZGVmYXVsdF9Jc0VuY3J5cHRlZD1udWxsPT09KGs9Qi5zaW5mKXx8dm9pZCAwPT09a3x8bnVsbD09PShiPWsuc2NoaSl8fHZvaWQgMD09PWI/dm9pZCAwOmIudGVuYy5kZWZhdWx0X0lzRW5jcnlwdGVkLEIuZGVmYXVsdF9JVl9zaXplPW51bGw9PT0oXz1CLnNpbmYpfHx2b2lkIDA9PT1ffHxudWxsPT09KHc9Xy5zY2hpKXx8dm9pZCAwPT09dz92b2lkIDA6dy50ZW5jLmRlZmF1bHRfSVZfc2l6ZSx2LnZpZGVvU2VuYz1zLm1kaWEubWluZi5zdGJsLnNlbmMmJnMubWRpYS5taW5mLnN0Ymwuc2VuYy5zYW1wbGVzLEIuZGF0YV9mb3JtYXQ9bnVsbD09PShTPUIuc2luZil8fHZvaWQgMD09PVN8fG51bGw9PT0oRD1TLmZybWEpfHx2b2lkIDA9PT1EP3ZvaWQgMDpELmRhdGFfZm9ybWF0LHYudXNlRU1FPWUudXNlRU1FLHYua2lkVmFsdWU9ZS5raWRWYWx1ZSx2LnBzc2g9ZS5wc3NoLHYuZW5jdj1CfWlmKG8mJnIpe3ZhciBVLEMsUCxJLE0seixPLFIsTCxWPXIsRj1udWxsPT09KFU9by50a2hkKXx8dm9pZCAwPT09VT92b2lkIDA6VS50cmFja0lkO251bGwhPUYmJihWLmlkPW8udGtoZC50cmFja0lkKSxWLnRraGREdXJhdGlvbj1vLnRraGQuZHVyYXRpb24sVi5tdmhkRHVydGlvbj1lLm12aGQuZHVyYXRpb24sVi5tdmhkVGltZWNhbGU9ZS5tdmhkLnRpbWVzY2FsZSxWLnRpbWVzY2FsZT1WLmZvcm1hdFRpbWVzY2FsZT1vLm1kaWEubWRoZC50aW1lc2NhbGUsVi5kdXJhdGlvbj1vLm1kaWEubWRoZC5kdXJhdGlvbnx8Vi5tdmhkRHVydGlvbi9WLm12aGRUaW1lY2FsZSpWLnRpbWVzY2FsZTt2YXIgTixqLEcsSCxLLHEsVyxYLFk9by5tZGlhLm1pbmYuc3RibC5zdHNkLmVudHJpZXNbMF07c3dpdGNoKFYuc2FtcGxlU2l6ZT1ZLnNhbXBsZVNpemUsVi5zYW1wbGVSYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PTA7dD0ibXA0YSI9PT1lLnR5cGU/ZS5zYW1wbGVSYXRlPjA/ZS5zYW1wbGVSYXRlOmUuZXNkcy5zYW1wbGVSYXRlOmUuc2FtcGxlUmF0ZTtyZXR1cm4gdHx8MH0oWSksVi5jaGFubmVsQ291bnQ9WS5jaGFubmVsQ291bnQsVi5wcmVzZW50PSEwLFkudHlwZSl7Y2FzZSJhbGF3IjpWLmNvZGVjVHlwZT1WLmNvZGVjPVQsVi5zYW1wbGVSYXRlPThlMzticmVhaztjYXNlInVsYXciOlYuY29kZWNUeXBlPVYuY29kZWM9RSxWLnNhbXBsZVJhdGU9OGUzO2JyZWFrO2RlZmF1bHQ6Vi5zYW1wbGVEdXJhdGlvbj11ZS5nZXRGcmFtZUR1cmF0aW9uKFYuc2FtcGxlUmF0ZSxWLnRpbWVzY2FsZSksVi5zYW1wbGVSYXRlSW5kZXg9dWUuZ2V0UmF0ZUluZGV4QnlSYXRlKFYuc2FtcGxlUmF0ZSksVi5vYmplY3RUeXBlPShudWxsPT09KGE9WS5lc2RzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vYmplY3RUeXBlKXx8MixZLmVzZHMmJihWLmNvbmZpZz1BcnJheS5mcm9tKFkuZXNkcy5jb25maWcpKSxWLmNvZGVjPShudWxsPT09KG49WS5lc2RzKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlYyl8fCJtcDRhLjQwLjIifWlmKFYuc2FtcGxlRHVyYXRpb249dWUuZ2V0RnJhbWVEdXJhdGlvbihWLnNhbXBsZVJhdGUsVi50aW1lc2NhbGUpLFYub2JqZWN0VHlwZT0obnVsbD09PShDPVkuZXNkcyl8fHZvaWQgMD09PUM/dm9pZCAwOkMub2JqZWN0VHlwZSl8fDIsWS5lc2RzJiYoWS5lc2RzLmNvbmZpZz9WLmNvbmZpZz1BcnJheS5mcm9tKFkuZXNkcy5jb25maWcpOmNvbnNvbGUud2FybigiZXNkcyBjb25maWcgaXMgbnVsbCIpKSxWLmNvZGVjPShudWxsPT09KFA9WS5lc2RzKXx8dm9pZCAwPT09UD92b2lkIDA6UC5jb2RlYyl8fCJtcDRhLjQwLjIiLFYuc2FtcGxlUmF0ZUluZGV4PXVlLmdldFJhdGVJbmRleEJ5UmF0ZShWLnNhbXBsZVJhdGUpLFYuZXh0PXt9LFYuZXh0LnN0c3M9bnVsbD09PShJPW8ubWRpYSl8fHZvaWQgMD09PUl8fG51bGw9PT0oTT1JLm1pbmYpfHx2b2lkIDA9PT1NfHxudWxsPT09KHo9TS5zdGJsKXx8dm9pZCAwPT09ej92b2lkIDA6ei5zdHNzLFYuZXh0LmN0dHM9bnVsbD09PShPPW8ubWRpYSl8fHZvaWQgMD09PU98fG51bGw9PT0oUj1PLm1pbmYpfHx2b2lkIDA9PT1SfHxudWxsPT09KEw9Ui5zdGJsKXx8dm9pZCAwPT09TD92b2lkIDA6TC5jdHRzLFYucHJlc2VudD0hMCxZJiYiZW5jYSI9PT1ZLnR5cGUpVi5pc0F1ZGlvRW5jcnlwdGlvbj0hMCxZLmRhdGFfZm9ybWF0PW51bGw9PT0oTj1ZLnNpbmYpfHx2b2lkIDA9PT1OfHxudWxsPT09KGo9Ti5mcm1hKXx8dm9pZCAwPT09aj92b2lkIDA6ai5kYXRhX2Zvcm1hdCxZLmRlZmF1bHRfS0lEPW51bGw9PT0oRz1ZLnNpbmYpfHx2b2lkIDA9PT1HfHxudWxsPT09KEg9Ry5zY2hpKXx8dm9pZCAwPT09SD92b2lkIDA6SC50ZW5jLmRlZmF1bHRfS0lELFkuZGVmYXVsdF9Jc0VuY3J5cHRlZD1udWxsPT09KEs9WS5zaW5mKXx8dm9pZCAwPT09S3x8bnVsbD09PShxPUsuc2NoaSl8fHZvaWQgMD09PXE/dm9pZCAwOnEudGVuYy5kZWZhdWx0X0lzRW5jcnlwdGVkLFkuZGVmYXVsdF9JVl9zaXplPW51bGw9PT0oVz1ZLnNpbmYpfHx2b2lkIDA9PT1XfHxudWxsPT09KFg9Vy5zY2hpKXx8dm9pZCAwPT09WD92b2lkIDA6WC50ZW5jLmRlZmF1bHRfSVZfc2l6ZSxWLmF1ZGlvU2VuYz1vLm1kaWEubWluZi5zdGJsLnNlbmMmJm8ubWRpYS5taW5mLnN0Ymwuc2VuYy5zYW1wbGVzLFYudXNlRU1FPWUudXNlRU1FLFYua2lkVmFsdWU9ZS5raWRWYWx1ZSxWLmVuY2E9WX1pZihyJiYoci5pc1ZpZGVvRW5jcnlwdGlvbj0hIXQmJnQuaXNWaWRlb0VuY3J5cHRpb24pLHQmJih0LmlzQXVkaW9FbmNyeXB0aW9uPSEhciYmci5pc0F1ZGlvRW5jcnlwdGlvbiksbnVsbCE9dCYmdC5lbmN2fHxudWxsIT1yJiZyLmVuY2Epe3ZhciBRLFosSj1udWxsPT10fHxudWxsPT09KFE9dC5lbmN2KXx8dm9pZCAwPT09UT92b2lkIDA6US5kZWZhdWx0X0tJRCwkPW51bGw9PXJ8fG51bGw9PT0oWj1yLmVuY2EpfHx2b2lkIDA9PT1aP3ZvaWQgMDpaLmRlZmF1bHRfS0lELGVlPUp8fCQ/KEp8fCQpLmpvaW4oIiIpOm51bGw7dCYmKHQua2lkPWVlKSxyJiYoci5raWQ9ZWUpfXJldHVybiB0JiYodC5mbGFncz0zODQxKSxyJiYoci5mbGFncz0xNzkzKSx7dmlkZW9UcmFjazp0LGF1ZGlvVHJhY2s6cn19fX0se2tleToiZXZhbHVhdGVEZWZhdWx0RHVyYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxuPW51bGw9PXR8fG51bGw9PT0oYT10LnNhbXBsZXMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aDtyZXR1cm4gbj8xMDI0Km4vdC50aW1lc2NhbGUqZS50aW1lc2NhbGUvcjoxMDI0fX0se2tleToibW9vZlRvU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24odCxyLGEpe3ZhciBuPXt9O3JldHVybiB0Lm1maGQmJihyJiYoci5zZXF1ZW5jZU51bWJlcj10Lm1maGQuc2VxdWVuY2VOdW1iZXIpLGEmJihhLnNlcXVlbmNlTnVtYmVyPXQubWZoZC5zZXF1ZW5jZU51bWJlcikpLHQudHJhZi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnRmaGQscz10LnRmZHQsbz10LnRydW47aWYoaSYmbyl7cyYmKHImJnIuaWQ9PT1pLnRyYWNrSWQmJihyLmJhc2VNZWRpYURlY29kZVRpbWU9cy5iYXNlTWVkaWFEZWNvZGVUaW1lKSxhJiZhLmlkPT09aS50cmFja0lkJiYoYS5iYXNlTWVkaWFEZWNvZGVUaW1lPXMuYmFzZU1lZGlhRGVjb2RlVGltZSkpO3ZhciB1PWkuZGVmYXVsdFNhbXBsZVNpemV8fDAsYz1pLmRlZmF1bHRTYW1wbGVEdXJhdGlvbnx8ZS5ldmFsdWF0ZURlZmF1bHREdXJhdGlvbihyLGEsby5zYW1wbGVzLmxlbmd0aHx8by5zYW1wbGVDb3VudCksbD1vLmRhdGFPZmZzZXR8fDAsZj0wLGQ9LTE7aWYoIW8uc2FtcGxlcy5sZW5ndGgmJm8uc2FtcGxlQ291bnQpe25baS50cmFja0lkXT1bXTtmb3IodmFyIGg9MDtoPG8uc2FtcGxlQ291bnQ7aCsrKW5baS50cmFja0lkXS5wdXNoKHtvZmZzZXQ6bCxkdHM6ZixkdXJhdGlvbjpjLHNpemU6dX0pLGYrPWMsbCs9dX1lbHNlIG5baS50cmFja0lkXT1vLnNhbXBsZXMubWFwKChmdW5jdGlvbihlLHQpe3JldHVybihlPXtvZmZzZXQ6bCxkdHM6ZixwdHM6ZisoZS5jdHN8fDApLGR1cmF0aW9uOmUuZHVyYXRpb258fGMsc2l6ZTplLnNpemV8fHUsZ29wSWQ6ZCxrZXlmcmFtZTowPT09dHx8bnVsbCE9PWUuZmxhZ3MmJnZvaWQgMCE9PWUuZmxhZ3MmJig2NTUzNiZlLmZsYWdzKT4+PjAhPTY1NTM2fSkua2V5ZnJhbWUmJihkKyssZS5nb3BJZD1kKSxmKz1lLmR1cmF0aW9uLGwrPWUuc2l6ZSxlfSkpfX0pKSxufX0se2tleToibW9vdlRvU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmFrO2lmKHQmJnQubGVuZ3RoKXt2YXIgcj10LmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInZpZGUiPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSksYT10LmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInNvdW4iPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSk7aWYocnx8YSl7dmFyIG4saTtpZihyKXt2YXIgcyxvLHU9bnVsbD09PShzPXIubWRpYSl8fHZvaWQgMD09PXN8fG51bGw9PT0obz1zLm1pbmYpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0Ymw7aWYoIXUpcmV0dXJuO3ZhciBjPXUuc3R0cyxsPXUuc3RzYyxmPXUuc3RzeixkPXUuc3RjbyxoPXUuc3RzcyxwPXUuY3R0cztpZighKGMmJmwmJmYmJmQmJmgpKXJldHVybjtuPURlKGMsbCxmLGQscCxoKX1pZihhKXt2YXIgdix5LG0sZz1udWxsPT09KHY9YS5tZGlhKXx8dm9pZCAwPT09dnx8bnVsbD09PSh5PXYubWluZil8fHZvaWQgMD09PXk/dm9pZCAwOnkuc3RibDtpZighZylyZXR1cm47dmFyIGs9bnVsbD09PShtPWEubWRpYS5tZGhkKXx8dm9pZCAwPT09bT92b2lkIDA6bS50aW1lc2NhbGUsYj1nLnN0dHMsXz1nLnN0c2Msdz1nLnN0c3oseD1nLnN0Y287aWYoIShrJiZiJiZfJiZ3JiZ4KSlyZXR1cm47aT1EZShiLF8sdyx4KX1yZXR1cm57dmlkZW9TYW1wbGVzOm4sYXVkaW9TYW1wbGVzOml9fX19fV0pLGV9KCk7ZnVuY3Rpb24gRGUoZSx0LHIsYSxuLGkpe3ZhciBzLG8sdSxjPVtdLGw9bnVsbD09bj92b2lkIDA6bi5lbnRyaWVzLGY9dC5lbnRyaWVzLGQ9YS5lbnRyaWVzLGg9ci5lbnRyeVNpemVzLHA9bnVsbD09aT92b2lkIDA6aS5lbnRyaWVzO3AmJihzPXt9LHAuZm9yRWFjaCgoZnVuY3Rpb24oZSl7c1tlLTFdPSEwfSkpKSxsJiYobz1bXSxsLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNvdW50LHI9ZS5vZmZzZXQsYT0wO2E8dDthKyspby5wdXNoKHIpfSkpKTt2YXIgdj0tMSx5PTAsbT0wLGc9MCxrPTAsYj0wLF89ZlswXS5zYW1wbGVzUGVyQ2h1bmssdz1mWzFdP2ZbMV0uZmlyc3RDaHVuay0xOjEvMDtyZXR1cm4gZS5lbnRyaWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNvdW50LGE9ZS5kZWx0YSxuPTA7bjx0O24rKyl1PXtkdHM6eSxkdXJhdGlvbjphLHNpemU6aFttXXx8ci5zYW1wbGVTaXplLG9mZnNldDpkW2ddK2IsaW5kZXg6bX0scCYmKHUua2V5ZnJhbWU9c1ttXSx1LmtleWZyYW1lJiZ2KyssdS5nb3BJZD12KSxvJiZtPG8ubGVuZ3RoJiYodS5wdHM9dS5kdHMrb1ttXSksYy5wdXNoKHUpLHkrPWEsKyttPF8/Yis9dS5zaXplOihnKyssYj0wLGc+PXcmJihrKyssdz1mW2srMV0/ZltrKzFdLmZpcnN0Q2h1bmstMToxLzApLF8rPWZba10uc2FtcGxlc1BlckNodW5rKX0pKSxjfWZ1bmN0aW9uIFRlKGUsdCl7cmV0dXJuIGUuZGF0YVJlZmVyZW5jZUluZGV4PXRlKHQsNiksZS53aWR0aD10ZSh0LDI0KSxlLmhlaWdodD10ZSh0LDI2KSxlLmhvcml6cmVzb2x1dGlvbj1yZSh0LDI4KSxlLnZlcnRyZXNvbHV0aW9uPXJlKHQsMzIpLGUuZnJhbWVDb3VudD10ZSh0LDQwKSxlLmRlcHRoPXRlKHQsNzQpLDc4fWZ1bmN0aW9uIEVlKGUsdCl7cmV0dXJuIGUuZGF0YVJlZmVyZW5jZUluZGV4PXRlKHQsNiksZS5jaGFubmVsQ291bnQ9dGUodCwxNiksZS5zYW1wbGVTaXplPXRlKHQsMTgpLGUuc2FtcGxlUmF0ZT1yZSh0LDI0KS82NTUzNiwyOH1mdW5jdGlvbiBCZShlLHQscil7aWYoZSl7aWYoZS5zaXplIT09ZS5kYXRhLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImJveCAiLmNvbmNhdChlLnR5cGUsIiBzaXplICE9PSBkYXRhLmxlbmd0aCIpKTt2YXIgYT17c3RhcnQ6ZS5zdGFydCxzaXplOmUuc2l6ZSxoZWFkZXJTaXplOmUuaGVhZGVyU2l6ZSx0eXBlOmUudHlwZX07cmV0dXJuIHQmJihhLnZlcnNpb249ZS5kYXRhW2UuaGVhZGVyU2l6ZV0sYS5mbGFncz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4oZVt0XTw8MTYpKyhlW3QrMV08PDgpKyhlW3QrMl18fDApfShlLmRhdGEsZS5oZWFkZXJTaXplKzEpLGEuaGVhZGVyU2l6ZSs9NCkscihhLGUuZGF0YS5zdWJhcnJheShhLmhlYWRlclNpemUpLGEuc3RhcnQrYS5oZWFkZXJTaXplKSxhfX12YXIgVWU9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1TdHJpbmcociksbj10Pj4wLGk9TWF0aC5jZWlsKG4vYS5sZW5ndGgpLHM9W10sbz1TdHJpbmcoZSk7aS0tOylzLnB1c2goYSk7cmV0dXJuIHMuam9pbigiIikuc3Vic3RyaW5nKDAsbi1vLmxlbmd0aCkrb30sQ2U9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KHQpLGE9MDthPHQ7YSsrKXJbYV09YXJndW1lbnRzW2FdO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHVzaChVZShOdW1iZXIodCkudG9TdHJpbmcoMTYpLDIsMCkpfSkpLGVbMF19O2Z1bmN0aW9uIFBlKGUpe2Zvcih2YXIgdD0wLHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyPjE/ci0xOjApLG49MTtuPHI7bisrKWFbbi0xXT1hcmd1bWVudHNbbl07YS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz1lLmxlbmd0aH0pKTt2YXIgaT1uZXcgZSh0KSxzPTA7cmV0dXJuIGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5zZXQoZSxzKSxzKz1lLmxlbmd0aH0pKSxpfXZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSksdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMCl9cmV0dXJuIG4oZSxbe2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KHQpLGE9MDthPHQ7YSsrKXJbYV09YXJndW1lbnRzW2FdO3IuZm9yRWFjaCgoZnVuY3Rpb24odCl7dD9lLmJ1ZmZlcj1QZShVaW50OEFycmF5LGUuYnVmZmVyLHQpOndpbmRvdy5jb25zb2xlLndhcm4odCl9KSl9fV0sW3trZXk6IndyaXRlVWludDE2Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW2U+PjgmMjU1LDI1NSZlXSl9fSx7a2V5OiJ3cml0ZVVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj4yNCxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdKX19XSksZX0oKSxNZT1NYXRoLnBvdygyLDMyKS0xLHplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6ImJveCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodD4xP3QtMTowKSxhPTE7YTx0O2ErKylyW2EtMV09YXJndW1lbnRzW2FdO3ZhciBuPTgrKHI9ci5maWx0ZXIoQm9vbGVhbikpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LmJ5dGVMZW5ndGh9KSwwKSxpPW5ldyBVaW50OEFycmF5KG4pO2lbMF09bj4+MjQmMjU1LGlbMV09bj4+MTYmMjU1LGlbMl09bj4+OCYyNTUsaVszXT0yNTUmbixpLnNldChlLDQpO3ZhciBzPTg7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5zZXQoZSxzKSxzKz1lLmJ5dGVMZW5ndGh9KSksaX19LHtrZXk6ImZ0eXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT1iJiZlLmNvZGVjVHlwZT09PUF9KSk/ZS5GVFlQSEVWMTplLkZUWVBBVkMxfX0se2tleToiaW5pdFNlZ21lbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiAkKGUuZnR5cCh0KSxlLm1vb3YodCkpfX0se2tleToicHNzaCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoWzEsMCwwLDBdLmNvbmNhdChbMTYsMTE5LDIzOSwyMzYsMTkyLDE3OCw3NywyLDE3MiwyMjcsNjAsMzAsODIsMjI2LDI1MSw3NV0sWzAsMCwwLDFdLHNlKHQua2lkKSxbMCwwLDAsMF0pKTtyZXR1cm4gZS5ib3goZS50eXBlcy5wc3NoLHIpfX0se2tleToibW9vdiIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodFswXS51c2VFTUUmJih0WzBdLmVuY3Z8fHRbMF0uZW5jYSkpe3RbMF0ucHNzaHx8KHRbMF0ucHNzaD17a2lkOnRbMF0ua2lkfSk7dmFyIHI9dGhpcy5wc3NoKHRbMF0ucHNzaCk7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubW9vdixlLm12aGQodFswXS5tdmhkRHVydGlvbnx8dFswXS5kdXJhdGlvbix0WzBdLm12aGRUaW1lY2FsZXx8dFswXS50aW1lc2NhbGUpLGUubXZleCh0KV0uY29uY2F0KHkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYWsodCl9KSkpLFtyXSkpfXJldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb3YsZS5tdmhkKHRbMF0ubXZoZER1cnRpb258fHRbMF0uZHVyYXRpb24sdFswXS5tdmhkVGltZWNhbGV8fHRbMF0udGltZXNjYWxlKV0uY29uY2F0KHkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYWsodCl9KSkpLFtlLm12ZXgodCldKSl9fSx7a2V5OiJtdmhkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06OWU0LGE9ZS5ib3goZS50eXBlcy5tdmhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCxyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMCwxLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjU1LDI1NSwyNTUsMjU1XSkpO3JldHVybiBhfX0se2tleToidHJhayIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhayxlLnRraGQodC5pZCx0LnRraGREdXJhdGlvbnx8MCx0LndpZHRoLHQuaGVpZ2h0KSxlLm1kaWEodCkpfX0se2tleToidGtoZCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLGk9ZS5ib3goZS50eXBlcy50a2hkLG5ldyBVaW50OEFycmF5KFswLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCx0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMCwwLDAscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmciwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2NCwwLDAsMCxhPj44JjI1NSwyNTUmYSwwLDAsbj4+OCYyNTUsMjU1Jm4sMCwwXSkpO3JldHVybiBpfX0se2tleToibWRpYSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWRpYSxlLm1kaGQodC5kdXJhdGlvbix0LnRpbWVzY2FsZSksZS5oZGxyKHQudHlwZSksZS5taW5mKHQpKX19LHtrZXk6Im1kaGQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo5ZTQsYT1lLmJveChlLnR5cGVzLm1kaGQsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLHI+PjI0JjI1NSxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCw4NSwxOTYsMCwwXSkpO3JldHVybiBhfX0se2tleToiaGRsciIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMuaGRscixlLkhETFJfVFlQRVNbdF0pfX0se2tleToibWluZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWluZix0LnR5cGU9PT1iP2UuVk1IRDplLlNNSEQsZS5ESU5GLGUuc3RibCh0KSl9fSx7a2V5OiJzdGJsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1bXTtyZXR1cm4gdCYmdC5leHQmJnQuZXh0LnN0c3MmJnIucHVzaChlLnN0c3ModC5leHQuc3Rzcy5lbnRyaWVzKSksZS5ib3goZS50eXBlcy5zdGJsLGUuc3RzZCh0KSxlLlNUVFMsclswXSxlLlNUU0MsZS5TVFNaLGUuU1RDTyl9fSx7a2V5OiJzdHNkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4gcj0iYXVkaW8iPT09dC50eXBlP3QudXNlRU1FJiZ0LmVuY2E/ZS5lbmNhKHQpOnQuY29kZWNUeXBlPT09Qj9lLm9wdXModCk6ZS5tcDRhKHQpOnQudXNlRU1FJiZ0LmVuY3Y/ZS5lbmN2KHQpOnQuYXYxQz9lLmF2MDEodCk6ZS5hdmMxaGV2MSh0KSxlLmJveChlLnR5cGVzLnN0c2QsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMV0pLHIpfX0se2tleToiZW5jYSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5lbmNhLmNoYW5uZWxDb3VudCxhPXQuZW5jYS5zYW1wbGVSYXRlLG49bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCxyLDAsMTYsMCwwLDAsMCxhPj44JjI1NSwyNTUmYSwwLDBdKSxpPWUuZXNkcyh0LmNvbmZpZykscz1lLnNpbmYodC5lbmNhKTtyZXR1cm4gZS5ib3goZS50eXBlcy5lbmNhLG4saSxzKX19LHtrZXk6ImVuY3YiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLGEsbj10LnNwcy5sZW5ndGg+MD90LnNwc1swXTpbXSxpPXQucHBzLmxlbmd0aD4wP3QucHBzWzBdOltdLHM9dC53aWR0aCxvPXQuaGVpZ2h0LHU9dC5zYXJSYXRpb1swXSxjPXQuc2FyUmF0aW9bMV0sbD1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAscz4+OCYyNTUsMjU1JnMsbz4+OCYyNTUsMjU1Jm8sMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMTgsMTAwLDk3LDEwNSwxMDgsMTIxLDEwOSwxMTEsMTE2LDEwNSwxMTEsMTEwLDQ3LDEwNCwxMDgsMTE1LDQ2LDEwNiwxMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI0LDE3LDE3XSksZj1uZXcgVWludDhBcnJheSgocj0oYT1bMSxuWzFdLG5bMl0sblszXSwyNTUsMjI1LG4ubGVuZ3RoPj4+OCYyNTUsMjU1Jm4ubGVuZ3RoXSkuY29uY2F0LmFwcGx5KGEseShuKSkuY29uY2F0KFsxLGkubGVuZ3RoPj4+OCYyNTUsMjU1JmkubGVuZ3RoXSkpLmNvbmNhdC5hcHBseShyLHkoaSkpKSxkPW5ldyBVaW50OEFycmF5KFswLDAsODgsNTcsMCwxNSwyMDAsMTkyLDAsNCw4Niw3Ml0pLGg9ZS5zaW5mKHQuZW5jdikscD1uZXcgVWludDhBcnJheShbdT4+MjQsdT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1LGM+PjI0LGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmY10pO3JldHVybiBlLmJveChlLnR5cGVzLmVuY3YsbCxlLmJveChlLnR5cGVzLmF2Y0MsZiksZS5ib3goZS50eXBlcy5idHJ0LGQpLGgsZS5ib3goZS50eXBlcy5wYXNwLHApKX19LHtrZXk6InNjaGkiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFtdKSxhPWUudGVuYyh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy5zY2hpLHIsYSl9fSx7a2V5OiJ0ZW5jIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMjU1JnQuZGVmYXVsdF9Jc0VuY3J5cHRlZCwyNTUmdC5kZWZhdWx0X0lWX3NpemVdLmNvbmNhdChzZSh0LmRlZmF1bHRfS0lEKSkpO3JldHVybiBlLmJveChlLnR5cGVzLnRlbmMscil9fSx7a2V5OiJzaW5mIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgVWludDhBcnJheShbXSksYT1uZXcgVWludDhBcnJheShbdC5kYXRhX2Zvcm1hdC5jaGFyQ29kZUF0KDApLHQuZGF0YV9mb3JtYXQuY2hhckNvZGVBdCgxKSx0LmRhdGFfZm9ybWF0LmNoYXJDb2RlQXQoMiksdC5kYXRhX2Zvcm1hdC5jaGFyQ29kZUF0KDMpXSksbj1uZXcgVWludDhBcnJheShbMCwwLDAsMCw5OSwxMDEsMTEwLDk5LDAsMSwwLDBdKSxpPWUuc2NoaSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy5zaW5mLHIsZS5ib3goZS50eXBlcy5mcm1hLGEpLGUuYm94KGUudHlwZXMuc2NobSxuKSxpKX19LHtrZXk6ImF2MDEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLmF2MDEsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLHQud2lkdGg+PjgmMjU1LDI1NSZ0LndpZHRoLHQuaGVpZ2h0Pj44JjI1NSwyNTUmdC5oZWlnaHQsMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMTcsMTddKSx0LmF2MUMsdC5jb2xyKX19LHtrZXk6ImF2YzFoZXYxIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LmNvZGVjVHlwZT09PUEsYT1yP2UudHlwZXMuaHZjMTplLnR5cGVzLmF2YzEsbj1yP2UuaHZjQyh0KTplLmF2Y0ModCksaT1bbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLHQud2lkdGg+PjgmMjU1LDI1NSZ0LndpZHRoLHQuaGVpZ2h0Pj44JjI1NSwyNTUmdC5oZWlnaHQsMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMTcsMTddKSxuXTtyZXR1cm4gcj9pLnB1c2goZS5ib3goZS50eXBlcy5maWVsLG5ldyBVaW50OEFycmF5KFsxLDBdKSkpOnQuc2FyUmF0aW8mJnQuc2FyUmF0aW8ubGVuZ3RoPjEmJmkucHVzaChlLnBhc3AodC5zYXJSYXRpbykpLGUuYm94LmFwcGx5KGUsW2FdLmNvbmNhdChpKSl9fSx7a2V5OiJhdmNDIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcixhLG4saT1bXSxzPVtdO3JldHVybiB0LnNwcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuPWUuYnl0ZUxlbmd0aCxpLnB1c2gobj4+PjgmMjU1KSxpLnB1c2goMjU1Jm4pLGkucHVzaC5hcHBseShpLHkoZSkpfSkpLHQucHBzLmZvckVhY2goKGZ1bmN0aW9uKGUpe249ZS5ieXRlTGVuZ3RoLHMucHVzaChuPj4+OCYyNTUpLHMucHVzaCgyNTUmbikscy5wdXNoLmFwcGx5KHMseShlKSl9KSksZS5ib3goZS50eXBlcy5hdmNDLG5ldyBVaW50OEFycmF5KChyPShhPVsxLGlbM10saVs0XSxpWzVdLDI1NSwyMjR8dC5zcHMubGVuZ3RoXSkuY29uY2F0LmFwcGx5KGEsaSkuY29uY2F0KFt0LnBwcy5sZW5ndGhdKSkuY29uY2F0LmFwcGx5KHIscykpKX19LHtrZXk6Imh2Y0MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuaHZjQztpZihyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiByO3ZhciBhLG49dC52cHMsaT10LnNwcyxzPXQucHBzO2lmKHIpe3ZhciBvPXIuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3MsdT1yLmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3MsYz0obi5sZW5ndGgmJjEpKyhpLmxlbmd0aCYmMSkrKHMubGVuZ3RoJiYxKTthPVsxLHIuZ2VuZXJhbFByb2ZpbGVTcGFjZTw8NnxyLmdlbmVyYWxUaWVyRmxhZzw8NXxyLmdlbmVyYWxQcm9maWxlSWRjLG8+Pj4yNCxvPj4+MTYsbz4+Pjgsbyx1WzBdLHVbMV0sdVsyXSx1WzNdLHVbNF0sdVs1XSxyLmdlbmVyYWxMZXZlbElkYywyNDAsMCwyNTIsMjUyfHIuY2hyb21hRm9ybWF0SWRjLDI0OHxyLmJpdERlcHRoTHVtYU1pbnVzOCwyNDh8ci5iaXREZXB0aENocm9tYU1pbnVzOCwwLDAsci5udW1UZW1wb3JhbExheWVyczw8M3xyLnRlbXBvcmFsSWROZXN0ZWQ8PDJ8MyxjXTt2YXIgbD1mdW5jdGlvbihlKXt2YXIgdDthLnB1c2goZS5sZW5ndGg+PjgsZS5sZW5ndGgpLCh0PWEpLnB1c2guYXBwbHkodCx5KGUpKX07bi5sZW5ndGgmJihhLnB1c2goMTYwLDAsbi5sZW5ndGgpLG4uZm9yRWFjaChsKSksaS5sZW5ndGgmJihhLnB1c2goMTYxLDAsaS5sZW5ndGgpLGkuZm9yRWFjaChsKSkscy5sZW5ndGgmJihhLnB1c2goMTYyLDAscy5sZW5ndGgpLHMuZm9yRWFjaChsKSl9ZWxzZSBhPVsxLDEsOTYsMCwwLDAsMTQ0LDAsMCwwLDAsMCw5MywyNDAsMCwyNTIsMjUzLDI0OCwyNDgsMCwwLDE1LDMsMTYwLDAsMSwwLDI0LDY0LDEsMTIsMSwyNTUsMjU1LDEsOTYsMCwwLDMsMCwxNDQsMCwwLDMsMCwwLDMsMCw5MywxNTMsMTUyLDksMTYxLDAsMSwwLDQ1LDY2LDEsMSwxLDk2LDAsMCwzLDAsMTQ0LDAsMCwzLDAsMCwzLDAsOTMsMTYwLDIsMTI4LDEyOCw0NSwyMiw4OSwxNTMsMTY0LDE0Nyw0MywxNTQsMTI4LDEyOCwxMjgsMTMwLDAsMCwzLDAsMiwwLDAsMywwLDUwLDE2LDE2MiwwLDEsMCw3LDY4LDEsMTkzLDExNCwxODAsOTgsNjRdO3JldHVybiBlLmJveChlLnR5cGVzLmh2Y0MsbmV3IFVpbnQ4QXJyYXkoYSkpfX0se2tleToicGFzcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dih0LDIpLGE9clswXSxuPXJbMV07cmV0dXJuIGUuYm94KGUudHlwZXMucGFzcCxuZXcgVWludDhBcnJheShbYT4+MjQsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhLG4+PjI0LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbl0pKX19LHtrZXk6Im1wNGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1wNGEsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCx0LmNoYW5uZWxDb3VudCwwLDE2LDAsMCwwLDAsdC5zYW1wbGVSYXRlPj44JjI1NSwyNTUmdC5zYW1wbGVSYXRlLDAsMF0pLHQuY29uZmlnLmxlbmd0aD9lLmVzZHModC5jb25maWcpOnZvaWQgMCl9fSx7a2V5OiJlc2RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aDtyZXR1cm4gZS5ib3goZS50eXBlcy5lc2RzLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDMsMjMrciwwLDAsMCw0LDE1K3IsNjQsMjEsMCw2LDAsMCwwLDIxOCwxOTIsMCwwLDIxOCwxOTIsNV0uY29uY2F0KFtyXSkuY29uY2F0KHQpLmNvbmNhdChbNiwxLDJdKSkpfX0se2tleToib3B1cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCx0LmNoYW5uZWxDb3VudCwwLDE2LDAsMCwwLDAsdC5zYW1wbGVSYXRlPj44JjI1NSwyNTUmdC5zYW1wbGVSYXRlLDAsMF0pLGE9dC5jb25maWcubGVuZ3RoP2UuZE9wcyh0KTpbXTtyZXR1cm4gZS5ib3goZS50eXBlcy5PcHVzLHIsYSl9fSx7a2V5OiJkT3BzIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0LmNvbmZpZylyZXR1cm4gdC5jb25maWdbNF09dC5zYW1wbGVSYXRlPj4+MjQmMjU1LHQuY29uZmlnWzVdPXQuc2FtcGxlUmF0ZT4+PjE2JjI1NSx0LmNvbmZpZ1s2XT10LnNhbXBsZVJhdGU+Pj44JjI1NSx0LmNvbmZpZ1s3XT0yNTUmdC5zYW1wbGVSYXRlLGUuYm94KGUudHlwZXMuZE9wcyx0LmNvbmZpZyl9fSx7a2V5OiJtdmV4Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3guYXBwbHkoZSxbZS50eXBlcy5tdmV4XS5jb25jYXQoeSh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUudHJleCh0LmlkKX0pKSkpKX19LHtrZXk6InRyZXgiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRyZXgsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDFdKSl9fSx7a2V5OiJ0cmV4MSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudHJleCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMCwwLDAsMSwwLDAsMiwwLDAsMCwwLDAsMCwxLDAsMF0pKX19LHtrZXk6InRyZXgyIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy50cmV4LG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwwLDAsMCwxLDAsMCw0LDAsMCwwLDAsMCwyLDAsMCwwXSkpfX0se2tleToibW9vZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubW9vZixlLm1maGQodFswXS5zYW1wbGVzP3RbMF0uc2FtcGxlc1swXS5nb3BJZDowKV0uY29uY2F0KHkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYWYodCl9KSkpKSl9fSx7a2V5OiJtZmhkIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5tZmhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF0pKX19LHtrZXk6InRyYWYiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPWUudGZoZCh0LmlkKSxhPWUudGZkdCh0LHQuYmFzZU1lZGlhRGVjb2RlVGltZSksbj0wO2lmKHQuaXNWaWRlbyYmdC52aWRlb1NlbmMmJnQudmlkZW9TZW5jLmZvckVhY2goKGZ1bmN0aW9uKGUpe24rPTgsZS5zdWJzYW1wbGVzJiZlLnN1YnNhbXBsZXMubGVuZ3RoJiYobis9MixuKz02KmUuc3Vic2FtcGxlcy5sZW5ndGgpfSkpLHQudmlkZW9TZW5jTGVuZ3RoPW4sdC51c2VFTUUmJih0LmlzVmlkZW9FbmNyeXB0aW9ufHx0LmlzQXVkaW9FbmNyeXB0aW9uKSl7aWYodC5pc1ZpZGVvRW5jcnlwdGlvbil7aWYodC5pc1ZpZGVvKXt2YXIgaT1lLnNhaXoodCkscz1lLnNhaW8odCksbz1lLnRydW4xKHQpLHU9ZS5zZW5jKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnRyYWYscixhLGkscyxvLHUpfWlmKHQuaXNBdWRpb0VuY3J5cHRpb24pe3ZhciBjPWUuc2JncCgpLGw9ZS5zYWl6KHQpLGY9ZS5zYWlvKHQpLGQ9ZS5zZW5jKHQpLGg9ZS50cnVuMSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSxjLGwsZixkLGgpfXZhciBwPWUuc2JncCgpLHY9ZS50cnVuMSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSxwLHYpfWlmKHQuaXNWaWRlbyl7dmFyIHk9ZS50cnVuMSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSx5KX12YXIgbT1lLnNiZ3AoKSxnPWUuc2Fpeih0KSxrPWUuc2Fpbyh0KSxiPWUuc2VuYyh0KSxfPWUudHJ1bjEodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEsbSxnLGssYixfKX12YXIgdz1lLnNkdHAodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEsdyxlLnRydW4odC5zYW1wbGVzLHcuYnl0ZUxlbmd0aCs3NikpfX0se2tleToic2R0cCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9bmV3IEllO3JldHVybiB0LnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ci53cml0ZShuZXcgVWludDhBcnJheSh0LmlzVmlkZW8/W2Uua2V5ZnJhbWU/MzI6MTZdOlsxNl0pKX0pKSxlLmJveChlLnR5cGVzLnNkdHAsdGhpcy5leHRlbnNpb24oMCwwKSxyLmJ1ZmZlcil9fSx7a2V5OiJ0cnVuMSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9bmV3IEllLGE9SWUud3JpdGVVaW50MzIodC5zYW1wbGVzLmxlbmd0aCksbj1udWxsO2lmKHQuaXNWaWRlbyl7dmFyIGk9dC52aWRlb1NlbmNMZW5ndGg7bj1JZS53cml0ZVVpbnQzMigxNip0LnNhbXBsZXMubGVuZ3RoK2krMTQ5KSwhdC5pc1ZpZGVvRW5jcnlwdGlvbiYmdC5pc0F1ZGlvRW5jcnlwdGlvbiYmKG49SWUud3JpdGVVaW50MzIoMTYqdC5zYW1wbGVzLmxlbmd0aCs5MikpfWVsc2V7dmFyIHM9MTIqdC5zYW1wbGVzLmxlbmd0aCsxMjQ7dC5pc0F1ZGlvRW5jcnlwdGlvbiYmKHM9MTIqdC5zYW1wbGVzLmxlbmd0aCs4KnQuYXVkaW9TZW5jLmxlbmd0aCsxNzcpLG49SWUud3JpdGVVaW50MzIocyl9cmV0dXJuIHQuc2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyLndyaXRlKEllLndyaXRlVWludDMyKGUuZHVyYXRpb24pKSxyLndyaXRlKEllLndyaXRlVWludDMyKGUuc2l6ZSkpLHIud3JpdGUoSWUud3JpdGVVaW50MzIoZS5rZXlmcmFtZT8zMzU1NDQzMjo2NTUzNikpLHQuaXNWaWRlbyYmci53cml0ZShJZS53cml0ZVVpbnQzMihlLmN0cz9lLmN0czowKSl9KSksZS5ib3goZS50eXBlcy50cnVuLHRoaXMuZXh0ZW5zaW9uKDAsdC5mbGFncyksYSxuLHIuYnVmZmVyKX19LHtrZXk6InNlbmMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBJZSxhPXQuc2FtcGxlcy5sZW5ndGgsbj10LmlzVmlkZW8/MTY6OCxpPXQuaXNWaWRlbz8yOjAscz1bXSxvPTA7cmV0dXJuIHQuaXNWaWRlbz8ocz10LnZpZGVvU2VuYyxvPXQudmlkZW9TZW5jTGVuZ3RoKTpzPXQuYXVkaW9TZW5jLG89b3x8biphLHIud3JpdGUoSWUud3JpdGVVaW50MzIoMTYrbyksZS50eXBlcy5zZW5jLHRoaXMuZXh0ZW5zaW9uKDAsaSkpLHIud3JpdGUoSWUud3JpdGVVaW50MzIoYSkpLHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLkluaXRpYWxpemF0aW9uVmVjdG9yLmxlbmd0aDt0Kyspci53cml0ZShuZXcgVWludDhBcnJheShbZS5Jbml0aWFsaXphdGlvblZlY3Rvclt0XV0pKTtlLnN1YnNhbXBsZXMmJmUuc3Vic2FtcGxlcy5sZW5ndGgmJihyLndyaXRlKEllLndyaXRlVWludDE2KGUuc3Vic2FtcGxlcy5sZW5ndGgpKSxlLnN1YnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ci53cml0ZShJZS53cml0ZVVpbnQxNihlLkJ5dGVzT2ZDbGVhckRhdGEpKSxyLndyaXRlKEllLndyaXRlVWludDMyKGUuQnl0ZXNPZlByb3RlY3RlZERhdGEpKX0pKSl9KSksci5idWZmZXJ9fSx7a2V5OiJzYWlvIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj0xMip0LnNhbXBsZXMubGVuZ3RoKzE0MTshdC5pc1ZpZGVvJiZ0LmlzQXVkaW9FbmNyeXB0aW9uJiYocj0xNDkpO3ZhciBhPW5ldyBVaW50OEFycmF5KFsxLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCxyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSk7cmV0dXJuIGUuYm94KGUudHlwZXMuc2FpbyxhKX19LHtrZXk6InNhaXoiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuc2FtcGxlcy5sZW5ndGgsYT1uZXcgVWludDhBcnJheShbMCwwLDAsMCwxNixyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSk7cmV0dXJuIGUuYm94KGUudHlwZXMuc2FpeixhKX19LHtrZXk6InNiZ3AiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoWzExNCwxMTEsMTA4LDEwOCwwLDAsMCwxLDAsMCwxLDI1LDAsMCwwLDFdKTtyZXR1cm4gZS5ib3goZS50eXBlcy5zYmdwLHRoaXMuZXh0ZW5zaW9uKDAsMCksdCl9fSx7a2V5OiJleHRlbnNpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlLHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF0pfX0se2tleToidGZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudGZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdKSl9fSx7a2V5OiJ0ZmR0Iix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPU1hdGguZmxvb3Ioci8oTWUrMSkpLG49TWF0aC5mbG9vcihyJShNZSsxKSk7cmV0dXJuIHQudXNlRU1FJiYodC5pc1ZpZGVvRW5jcnlwdGlvbnx8dC5pc0F1ZGlvRW5jcnlwdGlvbik/ZS5ib3goZS50eXBlcy50ZmR0LG5ldyBVaW50OEFycmF5KFswLDAsMCwwLG4+PjI0LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbl0pKTplLmJveChlLnR5cGVzLnRmZHQsbmV3IFVpbnQ4QXJyYXkoWzEsMCwwLDAsYT4+MjQsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhLG4+PjI0LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbl0pKX19LHtrZXk6InRydW4iLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIGE9dC5sZW5ndGgsbj0xMisxNiphO3IrPTgrbjt2YXIgaT1uZXcgVWludDhBcnJheShuKTtpLnNldChbMCwwLDE1LDEsYT4+PjI0JjI1NSxhPj4+MTYmMjU1LGE+Pj44JjI1NSwyNTUmYSxyPj4+MjQmMjU1LHI+Pj4xNiYyNTUscj4+PjgmMjU1LDI1NSZyXSwwKTtmb3IodmFyIHM9MDtzPGE7cysrKXt2YXIgbz10W3NdLHU9by5kdXJhdGlvbixjPW8uc2l6ZSxsPW8uZmxhZyxmPXZvaWQgMD09PWw/e306bCxkPW8uY3RzLGg9dm9pZCAwPT09ZD8wOmQ7aS5zZXQoW3U+Pj4yNCYyNTUsdT4+PjE2JjI1NSx1Pj4+OCYyNTUsMjU1JnUsYz4+PjI0JjI1NSxjPj4+MTYmMjU1LGM+Pj44JjI1NSwyNTUmYyxmLmlzTGVhZGluZzw8MnwobnVsbD09PWYuZGVwZW5kc09ufHx2b2lkIDA9PT1mLmRlcGVuZHNPbj8xOmYuZGVwZW5kc09uKSxmLmlzRGVwZW5kZWRPbjw8NnxmLmhhc1JlZHVuZGFuY3k8PDR8Zi5wYWRkaW5nVmFsdWU8PDF8KG51bGw9PT1mLmlzTm9uU3luY1NhbXBsZXx8dm9pZCAwPT09Zi5pc05vblN5bmNTYW1wbGU/MTpmLmlzTm9uU3luY1NhbXBsZSksNjE0NDAmZi5kZWdyYWRhdGlvblByaW9yaXR5LDE1JmYuZGVncmFkYXRpb25Qcmlvcml0eSxoPj4+MjQmMjU1LGg+Pj4xNiYyNTUsaD4+PjgmMjU1LDI1NSZoXSwxMisxNipzKX1yZXR1cm4gZS5ib3goZS50eXBlcy50cnVuLGkpfX0se2tleToibW9vdk1QNCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubW9vdixlLm12aGQodFswXS5kdXJhdGlvbix0WzBdLnRpbWVzY2FsZSldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFja01QNCh0KX0pKSkpKX19LHtrZXk6InRyYWNrTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFrLGUudGtoZCh0LmlkLHQuZHVyYXRpb24sdC53aWR0aCx0LmhlaWdodCksZS5tZGlhTVA0KHQpKX19LHtrZXk6Im1kaWFNUDQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1kaWEsZS5tZGhkKHQuZHVyYXRpb24sdC50aW1lc2NhbGUpLGUuaGRscih0LnR5cGUpLGUubWluZk1QNCh0KSl9fSx7a2V5OiJtaW5mTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5taW5mLHQudHlwZT09PWI/ZS5WTUhEOmUuU01IRCxlLkRJTkYsZS5zdGJsTVA0KHQpKX19LHtrZXk6InN0YmxNUDQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuZXh0LGE9W2Uuc3RzZCh0KSxlLnN0dHMoci5zdHRzKSxlLnN0c2Moci5zdHNjKSxlLnN0c3ooci5zdHN6KSxlLnN0Y28oci5zdGNvKV07cmV0dXJuIHIuc3Rzcy5sZW5ndGgmJmEucHVzaChlLnN0c3Moci5zdHNzKSksci5jdHRzLmxlbmd0aCYmYS5wdXNoKGUuY3R0cyhyLmN0dHMpKSxlLmJveC5hcHBseShlLFtlLnR5cGVzLnN0YmxdLmNvbmNhdChhKSl9fSx7a2V5OiJzdHRzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDgqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUscj1lLmNvdW50O2Euc2V0KFtyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0XSxuKSxuKz04fSkpLGUuYm94KGUudHlwZXMuc3R0cywkKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6InN0c2MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoMTIqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZmlyc3RDaHVuayxyPWUuc2FtcGxlc1BlckNodW5rLGk9ZS5zYW1wbGVEZXNjSW5kZXg7YS5zZXQoW3Q+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsaT4+MjQsaT4+MTYmMjU1LGk+PjgmMjU1LDI1NSZpXSxuKSxuKz0xMn0pKSxlLmJveChlLnR5cGVzLnN0c2MsJChuZXcgVWludDhBcnJheShbMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJzdHN6Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2Euc2V0KFtlPj4yNCxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdLG4pLG4rPTR9KSksZS5ib3goZS50eXBlcy5zdHN6LCQobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJzdGNvIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2Euc2V0KFtlPj4yNCxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdLG4pLG4rPTR9KSksZS5ib3goZS50eXBlcy5zdGNvLCQobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToic3RzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsYT1uZXcgVWludDhBcnJheSg0KnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChbZT4+MjQsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXSxuKSxuKz00fSkpLGUuYm94KGUudHlwZXMuc3RzcywkKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6ImN0dHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoOCpyKSxuPTA7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZSxyPWUuY291bnQ7YS5zZXQoW3I+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcix0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdLG4pLG4rPTh9KSksZS5ib3goZS50eXBlcy5jdHRzLCQobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToic3R5cCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5ib3goZS50eXBlcy5zdHlwLG5ldyBVaW50OEFycmF5KFsxMDksMTE1LDEwMCwxMDQsMCwwLDAsMCwxMDksMTE1LDEwMCwxMDQsMTA5LDExNSwxMDUsMTIwXSkpfX0se2tleToic2lkeCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC50aW1lc2NhbGUsYT10LnNhbXBsZXNbMF0uZHVyYXRpb24sbj1hKnQuc2FtcGxlcy5sZW5ndGgsaT10LnNhbXBsZXNbMF0uc2FtcGxlT2Zmc2V0KmEscz04O3Quc2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtzKz1lLnNpemV9KSk7dmFyIG89MDtpZih0LmlzVmlkZW8pe3ZhciB1LGM9MDt0LnZpZGVvU2VuYyYmKHU9dC52aWRlb1NlbmMpLHQuaXNWaWRlbyYmdS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKz04LGUuc3Vic2FtcGxlcyYmZS5zdWJzYW1wbGVzLmxlbmd0aCYmKGMrPTIsYys9NiplLnN1YnNhbXBsZXMubGVuZ3RoKX0pKSx0LnZpZGVvU2VuY0xlbmd0aD1jLG89cysxNDErMTYqdC5zYW1wbGVzLmxlbmd0aCtjLHQudXNlRU1FJiZ0LmlzQXVkaW9FbmNyeXB0aW9uJiYhdC5pc1ZpZGVvRW5jcnlwdGlvbiYmKG89cysxNip0LnNhbXBsZXMubGVuZ3RoKzg0KX1lbHNlIG89cysxMTYrMTIqdC5zYW1wbGVzLmxlbmd0aCx0LnVzZUVNRSYmdC5pc0F1ZGlvRW5jcnlwdGlvbiYmKG89cysxNjkrMTIqdC5zYW1wbGVzLmxlbmd0aCs4KnQuYXVkaW9TZW5jLmxlbmd0aCk7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMjU1JnQuaWQscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcixpPj4yNCYyNTUsaT4+MTYmMjU1LGk+PjgmMjU1LDI1NSZpLDAsMCwwLDAsMCwwLDAsMSwwLG8+PjE2JjI1NSxvPj44JjI1NSwyNTUmbyxuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLDE0NCwwLDAsMF0pO3JldHVybiBlLmJveChlLnR5cGVzLnNpZHgsbCl9fSx7a2V5OiJtZGF0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5tZGF0LHQpfX1dKSxlfSgpO2koemUsInR5cGVzIixbIk9wdXMiLCJkT3BzIiwiYXYwMSIsImF2MUMiLCJhdmMxIiwiYXZjQyIsImh2YzEiLCJodmNDIiwiZGluZiIsImRyZWYiLCJlc2RzIiwiZnR5cCIsImhkbHIiLCJtZGF0IiwibWRoZCIsIm1kaWEiLCJtZmhkIiwibWluZiIsIm1vb2YiLCJtb292IiwibXA0YSIsIm12ZXgiLCJtdmhkIiwicGFzcCIsInN0YmwiLCJzdGNvIiwic3RzYyIsInN0c2QiLCJzdHN6Iiwic3R0cyIsInRmZHQiLCJ0ZmhkIiwidHJhZiIsInRyYWsiLCJ0cmV4IiwidGtoZCIsInZtaGQiLCJzbWhkIiwiY3R0cyIsInN0c3MiLCJzdHlwIiwicHNzaCIsInNpZHgiLCJzYmdwIiwic2FpeiIsInNhaW8iLCJzZW5jIiwidHJ1biIsImVuY3YiLCJlbmNhIiwic2luZiIsImJ0cnQiLCJmcm1hIiwidGVuYyIsInNjaG0iLCJzY2hpIiwibWVoZCIsImZpZWwiLCJzZHRwIl0ucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPVt0LmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDEpLHQuY2hhckNvZGVBdCgyKSx0LmNoYXJDb2RlQXQoMyldLGV9KSxPYmplY3QuY3JlYXRlKG51bGwpKSksaSh6ZSwiSERMUl9UWVBFUyIse3ZpZGVvOm5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMTE4LDEwNSwxMDAsMTAxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDg2LDEwNSwxMDAsMTAxLDExMSw3Miw5NywxMTAsMTAwLDEwOCwxMDEsMTE0LDBdKSxhdWRpbzpuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDExNSwxMTEsMTE3LDExMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MywxMTEsMTE3LDExMCwxMDAsNzIsOTcsMTEwLDEwMCwxMDgsMTAxLDExNCwwXSl9KSxpKHplLCJGVFlQQVZDMSIsemUuYm94KHplLnR5cGVzLmZ0eXAsbmV3IFVpbnQ4QXJyYXkoWzEwNSwxMTUsMTExLDEwOSwwLDAsMCwxLDEwNSwxMTUsMTExLDEwOSw5NywxMTgsOTksNDldKSkpLGkoemUsIkZUWVBIRVYxIix6ZS5ib3goemUudHlwZXMuZnR5cCxuZXcgVWludDhBcnJheShbMTA1LDExNSwxMTEsMTA5LDAsMCwwLDEsMTA1LDExNSwxMTEsMTA5LDEwNCwxMDEsMTE4LDQ5XSkpKSxpKHplLCJESU5GIix6ZS5ib3goemUudHlwZXMuZGluZix6ZS5ib3goemUudHlwZXMuZHJlZixuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEyLDExNywxMTQsMTA4LDMyLDAsMCwwLDFdKSkpKSxpKHplLCJWTUhEIix6ZS5ib3goemUudHlwZXMudm1oZCxuZXcgVWludDhBcnJheShbMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDBdKSkpLGkoemUsIlNNSEQiLHplLmJveCh6ZS50eXBlcy5zbWhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDBdKSkpLGkoemUsIlN0YmxUYWJsZSIsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMF0pKSxpKHplLCJTVFRTIix6ZS5ib3goemUudHlwZXMuc3R0cyx6ZS5TdGJsVGFibGUpKSxpKHplLCJTVFNDIix6ZS5ib3goemUudHlwZXMuc3RzYyx6ZS5TdGJsVGFibGUpKSxpKHplLCJTVFNaIix6ZS5ib3goemUudHlwZXMuc3RzeixuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpLGkoemUsIlNUQ08iLHplLmJveCh6ZS50eXBlcy5zdGNvLHplLlN0YmxUYWJsZSkpO3ZhciBPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhKXtyKHRoaXMsZSksdGhpcy5uYW1lPXR8fCIiLHRoaXMuX3ByZWZpeD0iWyIuY29uY2F0KHRoaXMubmFtZSwiXSIpLGUuZGlzYWJsZWQ9YX1yZXR1cm4gbihlLFt7a2V5OiJkZWJ1ZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkuZGVidWcuYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6ImxvZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkubG9nLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fSx7a2V5OiJ3YXJuIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2lmKCFlLmRpc2FibGVkKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyKSxuPTA7bjxyO24rKylhW25dPWFyZ3VtZW50c1tuXTsodD1jb25zb2xlKS53YXJuLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkuZXJyb3IuYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6InRhYmxlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2UuZGlzYWJsZWR8fChjb25zb2xlLmdyb3VwKHRoaXMuX3ByZWZpeCksKHQ9Y29uc29sZSkudGFibGUuYXBwbHkodCxhcmd1bWVudHMpLGNvbnNvbGUuZ3JvdXBFbmQoKSl9fV0sW3trZXk6ImVuYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSExfX0se2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSEwfX1dKSxlfSgpO2koT2UsImRpc2FibGVkIiwhMCk7dmFyIFJlLExlLFZlLEZlLE5lLGplLEdlLEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGEsbil7cih0aGlzLGUpLHRoaXMudmlkZW9UcmFjaz10LHRoaXMuYXVkaW9UcmFjaz1hO3ZhciBpPS9DaHJvbWVcLyhbXi5dKykvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk7dGhpcy5mb3JjZUZpcnN0SURSPWkmJk51bWJlcihpWzFdKTw1MCx0aGlzLmxvZz1uZXcgT2UoIkZNUDRSZW11eGVyIiwhbnx8IW4ub3BlbkxvZ3x8IW4ub3BlbkxvZyl9cmV0dXJuIG4oZSxbe2tleToicmVtdXgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLGEsbixpPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0scz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbz10aGlzLnZpZGVvVHJhY2ssdT10aGlzLmF1ZGlvVHJhY2ssYz1vLmV4aXN0KCksbD11LmV4aXN0KCksZj1bXTtyZXR1cm4gaSYmKHMmJnMuaW5pdE1lcmdlPyhjJiZmLnB1c2godGhpcy52aWRlb1RyYWNrKSxsJiZmLnB1c2godGhpcy5hdWRpb1RyYWNrKSxyPXplLmluaXRTZWdtZW50KGYpKTooYyYmKGU9emUuaW5pdFNlZ21lbnQoW3RoaXMudmlkZW9UcmFja10pKSxsJiYodD16ZS5pbml0U2VnbWVudChbdGhpcy5hdWRpb1RyYWNrXSkpKSksYyYmby5oYXNTYW1wbGUoKSYmKGE9dGhpcy5fcmVtdXhWaWRlbygpKSxsJiZ1Lmhhc1NhbXBsZSgpJiYobj10aGlzLl9yZW11eEF1ZGlvKCkpLG8uc2FtcGxlcz1bXSx1LnNhbXBsZXM9W10se2luaXRTZWdtZW50OnIsdmlkZW9Jbml0U2VnbWVudDplLGF1ZGlvSW5pdFNlZ21lbnQ6dCx2aWRlb1NlZ21lbnQ6YSxhdWRpb1NlZ21lbnQ6bn19fSx7a2V5OiJfcmVtdXhWaWRlbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZpZGVvVHJhY2s7dGhpcy5mb3JjZUZpcnN0SURSJiYoZS5zYW1wbGVzWzBdLmZsYWc9e2RlcGVuZHNPbjoyLGlzTm9uU3luY1NhbXBsZTowfSk7dmFyIHQ9ZS5zYW1wbGVzLHI9L2F2MDEvLnRlc3QoZS5jb2RlYyksYT0wO3I/dC5mb3JFYWNoKChmdW5jdGlvbihlKXthKz1lLmRhdGEuYnl0ZUxlbmd0aH0pKTp0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2ErPWUudW5pdHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuYnl0ZUxlbmd0aH0pLDApLGErPTQqZS51bml0cy5sZW5ndGh9KSk7dmFyIG49bmV3IFVpbnQ4QXJyYXkoYSk7aWYocilmb3IodmFyIGkscz0wLG89dC5sZW5ndGgsdT0wO3M8bztzKyspaT10W3NdLG4uc2V0KGkuZGF0YSx1KSxpLnNpemU9aS5kYXRhLmJ5dGVMZW5ndGgsdSs9aS5zaXplO2Vsc2UgZm9yKHZhciBjLGw9bmV3IERhdGFWaWV3KG4uYnVmZmVyKSxmPWZ1bmN0aW9uKGUscil7cj10W2RdO3ZhciBhPTA7ci51bml0cy5mb3JFYWNoKChmdW5jdGlvbih0KXtsLnNldFVpbnQzMihlLHQuYnl0ZUxlbmd0aCksZSs9NCxuLnNldCh0LGUpLGUrPXQuYnl0ZUxlbmd0aCxhKz00K3QuYnl0ZUxlbmd0aH0pKSxyLnNpemU9YSxwPWUsYz1yfSxkPTAsaD10Lmxlbmd0aCxwPTA7ZDxoO2QrKylmKHAsYyk7dmFyIHY9emUubWRhdChuKTtyZXR1cm4gJCh6ZS5tb29mKFtlXSksdil9fSx7a2V5OiJfcmVtdXhBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF1ZGlvVHJhY2ssdD1uZXcgVWludDhBcnJheShlLnNhbXBsZXMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3Quc2l6ZX0pLDApKTtlLnNhbXBsZXMucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiB0LnNldChyLmRhdGEsZSksZStyLnNpemV9KSwwKTt2YXIgcj16ZS5tZGF0KHQpO3JldHVybiAkKHplLm1vb2YoW2VdKSxyKX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudmlkZW9UcmFjay5yZXNldCgpLHRoaXMuYXVkaW9UcmFjay5yZXNldCgpfX1dKSxlfSgpLEtlPShudWxsPT09KFJlPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnZvaWQgMCl8fHZvaWQgMD09PVJlP3ZvaWQgMDpSZS5jcnlwdG8pfHwobnVsbD09PShMZT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6dm9pZCAwKXx8dm9pZCAwPT09TGU/dm9pZCAwOkxlLmNyeXB0byl8fChudWxsPT09KFZlPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDApfHx2b2lkIDA9PT1WZT92b2lkIDA6VmUuY3J5cHRvKXx8KG51bGw9PT0oRmU9InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dm9pZCAwKXx8dm9pZCAwPT09RmU/dm9pZCAwOkZlLmNyeXB0byl8fChudWxsPT09KE5lPSJ1bmRlZmluZWQiIT10eXBlb2YgZnJhbWVzP2ZyYW1lczp2b2lkIDApfHx2b2lkIDA9PT1OZXx8bnVsbD09PShqZT1OZVswXSl8fHZvaWQgMD09PWplP3ZvaWQgMDpqZS5jcnlwdG8pO0dlPUtlP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlO3IrPTQpdC5wdXNoKEtlLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMSkpWzBdKTtyZXR1cm4gbmV3IFdlKHQsZSl9OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPVtdLGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPTk4NzY1NDMyMSxhPTQyOTQ5NjcyOTU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9KChyPTM2OTY5Kig2NTUzNSZyKSsocj4+MTYpJmEpPDwxNikrKHQ9MThlMyooNjU1MzUmdCkrKHQ+PjE2KSZhKSZhO3JldHVybiBlLz00Mjk0OTY3Mjk2LChlKz0uNSkqKE1hdGgucmFuZG9tKCk+LjU/MTotMSl9fSxuPTA7bjxlO24rPTQpe3ZhciBpPWEoNDI5NDk2NzI5NioodHx8TWF0aC5yYW5kb20oKSkpO3Q9OTg3NjU0MDcxKmkoKSxyLnB1c2goNDI5NDk2NzI5NippKCl8MCl9cmV0dXJuIG5ldyBXZShyLGUpfTt2YXIgcWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsW3trZXk6Im1peEluIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzLGUpfX0se2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9bmV3IHRoaXMuY29uc3RydWN0b3I7cmV0dXJuIE9iamVjdC5hc3NpZ24oZSx0aGlzKSxlfX1dLFt7a2V5OiJjcmVhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIGwodGhpcyx0KX19XSksZX0oKSxXZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7dmFyIGUsbj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10saT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NCpuLmxlbmd0aDtyKHRoaXMsYSksZT10LmNhbGwodGhpcyk7dmFyIHM9bjtpZihzIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJihzPW5ldyBVaW50OEFycmF5KHMpKSwocyBpbnN0YW5jZW9mIEludDhBcnJheXx8cyBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxzIGluc3RhbmNlb2YgSW50MTZBcnJheXx8cyBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHxzIGluc3RhbmNlb2YgSW50MzJBcnJheXx8cyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHxzIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHxzIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSYmKHM9bmV3IFVpbnQ4QXJyYXkocy5idWZmZXIscy5ieXRlT2Zmc2V0LHMuYnl0ZUxlbmd0aCkpLHMgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtmb3IodmFyIG89cy5ieXRlTGVuZ3RoLHU9W10sYz0wO2M8bztjKz0xKXVbYz4+PjJdfD1zW2NdPDwyNC1jJTQqODtlLndvcmRzPXUsZS5zaWdCeXRlcz1vfWVsc2UgZS53b3Jkcz1uLGUuc2lnQnl0ZXM9aTtyZXR1cm4gZX1yZXR1cm4gbihhLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06WGU7cmV0dXJuIGUuc3RyaW5naWZ5KHRoaXMpfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLndvcmRzLHI9ZS53b3JkcyxhPXRoaXMuc2lnQnl0ZXMsbj1lLnNpZ0J5dGVzO2lmKHRoaXMuY2xhbXAoKSxhJTQpZm9yKHZhciBpPTA7aTxuO2krPTEpe3ZhciBzPXJbaT4+PjJdPj4+MjQtaSU0KjgmMjU1O3RbYStpPj4+Ml18PXM8PDI0LShhK2kpJTQqOH1lbHNlIGZvcih2YXIgbz0wO288bjtvKz00KXRbYStvPj4+Ml09cltvPj4+Ml07cmV0dXJuIHRoaXMuc2lnQnl0ZXMrPW4sdGhpc319LHtrZXk6ImNsYW1wIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMud29yZHMsdD10aGlzLnNpZ0J5dGVzO2VbdD4+PjJdJj00Mjk0OTY3Mjk1PDwzMi10JTQqOCxlLmxlbmd0aD1NYXRoLmNlaWwodC80KX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXAobyhhLnByb3RvdHlwZSksImNsb25lIix0aGlzKS5jYWxsKHRoaXMpO3JldHVybiBlLndvcmRzPXRoaXMud29yZHMuc2xpY2UoMCksZX19XSksYX0ocWUpO2koV2UsInJhbmRvbSIsR2UpO2Zvcih2YXIgWGU9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS53b3JkcyxyPWUuc2lnQnl0ZXMsYT1bXSxuPTA7bjxyO24rPTEpe3ZhciBpPXRbbj4+PjJdPj4+MjQtbiU0KjgmMjU1O2EucHVzaCgoaT4+PjQpLnRvU3RyaW5nKDE2KSksYS5wdXNoKCgxNSZpKS50b1N0cmluZygxNikpfXJldHVybiBhLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bXSxhPTA7YTx0O2ErPTIpclthPj4+M118PXBhcnNlSW50KGUuc3Vic3RyKGEsMiksMTYpPDwyNC1hJTgqNDtyZXR1cm4gbmV3IFdlKHIsdC8yKX19LFllPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVtdLGE9MDthPHQ7YSs9MSlyW2E+Pj4yXXw9KDI1NSZlLmNoYXJDb2RlQXQoYSkpPDwyNC1hJTQqODtyZXR1cm4gbmV3IFdlKHIsdCl9LFFlPWZ1bmN0aW9uKGUpe3JldHVybiBZZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpKX0sWmU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3ZhciBlO3JldHVybiByKHRoaXMsYSksKGU9dC5jYWxsKHRoaXMpKS5fbWluQnVmZmVyU2l6ZT0wLGV9cmV0dXJuIG4oYSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgV2UsdGhpcy5fbkRhdGFCeXRlcz0wfX0se2tleToiX2FwcGVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZTsic3RyaW5nIj09dHlwZW9mIHQmJih0PVFlKHQpKSx0aGlzLl9kYXRhLmNvbmNhdCh0KSx0aGlzLl9uRGF0YUJ5dGVzKz10LnNpZ0J5dGVzfX0se2tleToiX3Byb2Nlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9dGhpcy5fZGF0YSxhPXRoaXMuYmxvY2tTaXplLG49ci53b3JkcyxpPXIuc2lnQnl0ZXMscz1pLyg0KmEpLG89KHM9ZT9NYXRoLmNlaWwocyk6TWF0aC5tYXgoKDB8cyktdGhpcy5fbWluQnVmZmVyU2l6ZSwwKSkqYSx1PU1hdGgubWluKDQqbyxpKTtpZihvKXtmb3IodmFyIGM9MDtjPG87Yys9YSl0aGlzLl9kb1Byb2Nlc3NCbG9jayhuLGMpO3Q9bi5zcGxpY2UoMCxvKSxyLnNpZ0J5dGVzLT11fXJldHVybiBuZXcgV2UodCx1KX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXAobyhhLnByb3RvdHlwZSksImNsb25lIix0aGlzKS5jYWxsKHRoaXMpO3JldHVybiBlLl9kYXRhPXRoaXMuX2RhdGEuY2xvbmUoKSxlfX1dKSxhfShxZSksSmU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYShlKXt2YXIgbjtyZXR1cm4gcih0aGlzLGEpLChuPXQuY2FsbCh0aGlzKSkuYmxvY2tTaXplPTE2LG4uY2ZnPU9iamVjdC5hc3NpZ24obmV3IHFlLGUpLG4ucmVzZXQoKSxufXJldHVybiBuKGEsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3AobyhhLnByb3RvdHlwZSksInJlc2V0Iix0aGlzKS5jYWxsKHRoaXMpLHRoaXMuX2RvUmVzZXQoKX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2FwcGVuZChlKSx0aGlzLl9wcm9jZXNzKCksdGhpc319LHtrZXk6ImZpbmFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy5fYXBwZW5kKGUpLHRoaXMuX2RvRmluYWxpemUoKX19XSxbe2tleToiX2NyZWF0ZUhlbHBlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKHIpLmZpbmFsaXplKHQpfX19LHtrZXk6Il9jcmVhdGVIbWFjSGVscGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gbmV3ICRlKGUscikuZmluYWxpemUodCl9fX1dKSxhfShaZSksJGU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYShlLG4pe3ZhciBpO3IodGhpcyxhKSxpPXQuY2FsbCh0aGlzKTt2YXIgcz1uZXcgZTtpLl9oYXNoZXI9czt2YXIgbz1uOyJzdHJpbmciPT10eXBlb2YgbyYmKG89UWUobykpO3ZhciB1PXMuYmxvY2tTaXplLGM9NCp1O28uc2lnQnl0ZXM+YyYmKG89cy5maW5hbGl6ZShuKSksby5jbGFtcCgpO3ZhciBsPW8uY2xvbmUoKTtpLl9vS2V5PWw7dmFyIGY9by5jbG9uZSgpO2kuX2lLZXk9Zjtmb3IodmFyIGQ9bC53b3JkcyxoPWYud29yZHMscD0wO3A8dTtwKz0xKWRbcF1ePTE1NDk1NTY4MjgsaFtwXV49OTA5NTIyNDg2O3JldHVybiBsLnNpZ0J5dGVzPWMsZi5zaWdCeXRlcz1jLGkucmVzZXQoKSxpfXJldHVybiBuKGEsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2hhc2hlcjtlLnJlc2V0KCksZS51cGRhdGUodGhpcy5faUtleSl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYXNoZXIudXBkYXRlKGUpLHRoaXN9fSx7a2V5OiJmaW5hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faGFzaGVyLHI9dC5maW5hbGl6ZShlKTtyZXR1cm4gdC5yZXNldCgpLHQuZmluYWxpemUodGhpcy5fb0tleS5jbG9uZSgpLmNvbmNhdChyKSl9fV0pLGF9KHFlKSxldD17c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe3ZhciB0PWUud29yZHMscj1lLnNpZ0J5dGVzLGE9dGhpcy5fbWFwO2UuY2xhbXAoKTtmb3IodmFyIG49W10saT0wO2k8cjtpKz0zKWZvcih2YXIgcz0odFtpPj4+Ml0+Pj4yNC1pJTQqOCYyNTUpPDwxNnwodFtpKzE+Pj4yXT4+PjI0LShpKzEpJTQqOCYyNTUpPDw4fHRbaSsyPj4+Ml0+Pj4yNC0oaSsyKSU0KjgmMjU1LG89MDtvPDQmJmkrLjc1Km88cjtvKz0xKW4ucHVzaChhLmNoYXJBdChzPj4+NiooMy1vKSY2MykpO3ZhciB1PWEuY2hhckF0KDY0KTtpZih1KWZvcig7bi5sZW5ndGglNDspbi5wdXNoKHUpO3JldHVybiBuLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxyPXRoaXMuX21hcCxhPXRoaXMuX3JldmVyc2VNYXA7aWYoIWEpe3RoaXMuX3JldmVyc2VNYXA9W10sYT10aGlzLl9yZXZlcnNlTWFwO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bis9MSlhW3IuY2hhckNvZGVBdChuKV09bn12YXIgaT1yLmNoYXJBdCg2NCk7aWYoaSl7dmFyIHM9ZS5pbmRleE9mKGkpOy0xIT09cyYmKHQ9cyl9cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9W10sbj0wLGk9MDtpPHQ7aSs9MSlpZihpJTQpe3ZhciBzPXJbZS5jaGFyQ29kZUF0KGktMSldPDxpJTQqMnxyW2UuY2hhckNvZGVBdChpKV0+Pj42LWklNCoyO2Fbbj4+PjJdfD1zPDwyNC1uJTQqOCxuKz0xfXJldHVybiBXZS5jcmVhdGUoYSxuKX0oZSx0LGEpfSxfbWFwOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSJ9LHR0PVtdLHJ0PTA7cnQ8NjQ7cnQrPTEpdHRbcnRdPTQyOTQ5NjcyOTYqTWF0aC5hYnMoTWF0aC5zaW4ocnQrMSkpfDA7dmFyIGF0PWZ1bmN0aW9uKGUsdCxyLGEsbixpLHMpe3ZhciBvPWUrKHQmcnx+dCZhKStuK3M7cmV0dXJuKG88PGl8bz4+PjMyLWkpK3R9LG50PWZ1bmN0aW9uKGUsdCxyLGEsbixpLHMpe3ZhciBvPWUrKHQmYXxyJn5hKStuK3M7cmV0dXJuKG88PGl8bz4+PjMyLWkpK3R9LGl0PWZ1bmN0aW9uKGUsdCxyLGEsbixpLHMpe3ZhciBvPWUrKHRecl5hKStuK3M7cmV0dXJuKG88PGl8bz4+PjMyLWkpK3R9LHN0PWZ1bmN0aW9uKGUsdCxyLGEsbixpLHMpe3ZhciBvPWUrKHJeKHR8fmEpKStuK3M7cmV0dXJuKG88PGl8bz4+PjMyLWkpK3R9LG90PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsW3trZXk6Il9kb1Jlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IFdlKFsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzhdKX19LHtrZXk6Il9kb1Byb2Nlc3NCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZSxhPTA7YTwxNjthKz0xKXt2YXIgbj10K2EsaT1lW25dO3Jbbl09MTY3MTE5MzUmKGk8PDh8aT4+PjI0KXw0Mjc4MjU1MzYwJihpPDwyNHxpPj4+OCl9dmFyIHM9dGhpcy5faGFzaC53b3JkcyxvPXJbdCswXSx1PXJbdCsxXSxjPXJbdCsyXSxsPXJbdCszXSxmPXJbdCs0XSxkPXJbdCs1XSxoPXJbdCs2XSxwPXJbdCs3XSx2PXJbdCs4XSx5PXJbdCs5XSxtPXJbdCsxMF0sZz1yW3QrMTFdLGs9clt0KzEyXSxiPXJbdCsxM10sXz1yW3QrMTRdLHc9clt0KzE1XSx4PXNbMF0sUz1zWzFdLEE9c1syXSxEPXNbM107eD1hdCh4LFMsQSxELG8sNyx0dFswXSksRD1hdChELHgsUyxBLHUsMTIsdHRbMV0pLEE9YXQoQSxELHgsUyxjLDE3LHR0WzJdKSxTPWF0KFMsQSxELHgsbCwyMix0dFszXSkseD1hdCh4LFMsQSxELGYsNyx0dFs0XSksRD1hdChELHgsUyxBLGQsMTIsdHRbNV0pLEE9YXQoQSxELHgsUyxoLDE3LHR0WzZdKSxTPWF0KFMsQSxELHgscCwyMix0dFs3XSkseD1hdCh4LFMsQSxELHYsNyx0dFs4XSksRD1hdChELHgsUyxBLHksMTIsdHRbOV0pLEE9YXQoQSxELHgsUyxtLDE3LHR0WzEwXSksUz1hdChTLEEsRCx4LGcsMjIsdHRbMTFdKSx4PWF0KHgsUyxBLEQsayw3LHR0WzEyXSksRD1hdChELHgsUyxBLGIsMTIsdHRbMTNdKSxBPWF0KEEsRCx4LFMsXywxNyx0dFsxNF0pLFM9YXQoUyxBLEQseCx3LDIyLHR0WzE1XSkseD1udCh4LFMsQSxELHUsNSx0dFsxNl0pLEQ9bnQoRCx4LFMsQSxoLDksdHRbMTddKSxBPW50KEEsRCx4LFMsZywxNCx0dFsxOF0pLFM9bnQoUyxBLEQseCxvLDIwLHR0WzE5XSkseD1udCh4LFMsQSxELGQsNSx0dFsyMF0pLEQ9bnQoRCx4LFMsQSxtLDksdHRbMjFdKSxBPW50KEEsRCx4LFMsdywxNCx0dFsyMl0pLFM9bnQoUyxBLEQseCxmLDIwLHR0WzIzXSkseD1udCh4LFMsQSxELHksNSx0dFsyNF0pLEQ9bnQoRCx4LFMsQSxfLDksdHRbMjVdKSxBPW50KEEsRCx4LFMsbCwxNCx0dFsyNl0pLFM9bnQoUyxBLEQseCx2LDIwLHR0WzI3XSkseD1udCh4LFMsQSxELGIsNSx0dFsyOF0pLEQ9bnQoRCx4LFMsQSxjLDksdHRbMjldKSxBPW50KEEsRCx4LFMscCwxNCx0dFszMF0pLFM9bnQoUyxBLEQseCxrLDIwLHR0WzMxXSkseD1pdCh4LFMsQSxELGQsNCx0dFszMl0pLEQ9aXQoRCx4LFMsQSx2LDExLHR0WzMzXSksQT1pdChBLEQseCxTLGcsMTYsdHRbMzRdKSxTPWl0KFMsQSxELHgsXywyMyx0dFszNV0pLHg9aXQoeCxTLEEsRCx1LDQsdHRbMzZdKSxEPWl0KEQseCxTLEEsZiwxMSx0dFszN10pLEE9aXQoQSxELHgsUyxwLDE2LHR0WzM4XSksUz1pdChTLEEsRCx4LG0sMjMsdHRbMzldKSx4PWl0KHgsUyxBLEQsYiw0LHR0WzQwXSksRD1pdChELHgsUyxBLG8sMTEsdHRbNDFdKSxBPWl0KEEsRCx4LFMsbCwxNix0dFs0Ml0pLFM9aXQoUyxBLEQseCxoLDIzLHR0WzQzXSkseD1pdCh4LFMsQSxELHksNCx0dFs0NF0pLEQ9aXQoRCx4LFMsQSxrLDExLHR0WzQ1XSksQT1pdChBLEQseCxTLHcsMTYsdHRbNDZdKSxTPWl0KFMsQSxELHgsYywyMyx0dFs0N10pLHg9c3QoeCxTLEEsRCxvLDYsdHRbNDhdKSxEPXN0KEQseCxTLEEscCwxMCx0dFs0OV0pLEE9c3QoQSxELHgsUyxfLDE1LHR0WzUwXSksUz1zdChTLEEsRCx4LGQsMjEsdHRbNTFdKSx4PXN0KHgsUyxBLEQsayw2LHR0WzUyXSksRD1zdChELHgsUyxBLGwsMTAsdHRbNTNdKSxBPXN0KEEsRCx4LFMsbSwxNSx0dFs1NF0pLFM9c3QoUyxBLEQseCx1LDIxLHR0WzU1XSkseD1zdCh4LFMsQSxELHYsNix0dFs1Nl0pLEQ9c3QoRCx4LFMsQSx3LDEwLHR0WzU3XSksQT1zdChBLEQseCxTLGgsMTUsdHRbNThdKSxTPXN0KFMsQSxELHgsYiwyMSx0dFs1OV0pLHg9c3QoeCxTLEEsRCxmLDYsdHRbNjBdKSxEPXN0KEQseCxTLEEsZywxMCx0dFs2MV0pLEE9c3QoQSxELHgsUyxjLDE1LHR0WzYyXSksUz1zdChTLEEsRCx4LHksMjEsdHRbNjNdKSxzWzBdPXNbMF0reHwwLHNbMV09c1sxXStTfDAsc1syXT1zWzJdK0F8MCxzWzNdPXNbM10rRHwwfX0se2tleToiX2RvRmluYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZGF0YSx0PWUud29yZHMscj04KnRoaXMuX25EYXRhQnl0ZXMsYT04KmUuc2lnQnl0ZXM7dFthPj4+NV18PTEyODw8MjQtYSUzMjt2YXIgbj1NYXRoLmZsb29yKHIvNDI5NDk2NzI5NiksaT1yO3RbMTUrKGErNjQ+Pj45PDw0KV09MTY3MTE5MzUmKG48PDh8bj4+PjI0KXw0Mjc4MjU1MzYwJihuPDwyNHxuPj4+OCksdFsxNCsoYSs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYoaTw8OHxpPj4+MjQpfDQyNzgyNTUzNjAmKGk8PDI0fGk+Pj44KSxlLnNpZ0J5dGVzPTQqKHQubGVuZ3RoKzEpLHRoaXMuX3Byb2Nlc3MoKTtmb3IodmFyIHM9dGhpcy5faGFzaCxvPXMud29yZHMsdT0wO3U8NDt1Kz0xKXt2YXIgYz1vW3VdO29bdV09MTY3MTE5MzUmKGM8PDh8Yz4+PjI0KXw0Mjc4MjU1MzYwJihjPDwyNHxjPj4+OCl9cmV0dXJuIHN9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1wKG8oYS5wcm90b3R5cGUpLCJjbG9uZSIsdGhpcykuY2FsbCh0aGlzKTtyZXR1cm4gZS5faGFzaD10aGlzLl9oYXNoLmNsb25lKCksZX19XSksYX0oSmUpO0plLl9jcmVhdGVIZWxwZXIob3QpLEplLl9jcmVhdGVIbWFjSGVscGVyKG90KTt2YXIgdXQ9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYShlKXt2YXIgbjtyZXR1cm4gcih0aGlzLGEpLChuPXQuY2FsbCh0aGlzKSkuY2ZnPU9iamVjdC5hc3NpZ24obmV3IHFlLHtrZXlTaXplOjQsaGFzaGVyOm90LGl0ZXJhdGlvbnM6MX0sZSksbn1yZXR1cm4gbihhLFt7a2V5OiJjb21wdXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixhPXRoaXMuY2ZnLG49YS5oYXNoZXIuY3JlYXRlKCksaT1XZS5jcmVhdGUoKSxzPWkud29yZHMsbz1hLmtleVNpemUsdT1hLml0ZXJhdGlvbnM7cy5sZW5ndGg8bzspe3ImJm4udXBkYXRlKHIpLHI9bi51cGRhdGUoZSkuZmluYWxpemUodCksbi5yZXNldCgpO2Zvcih2YXIgYz0xO2M8dTtjKz0xKXI9bi5maW5hbGl6ZShyKSxuLnJlc2V0KCk7aS5jb25jYXQocil9cmV0dXJuIGkuc2lnQnl0ZXM9NCpvLGl9fV0pLGF9KHFlKSxjdD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKGUsbixpKXt2YXIgcztyZXR1cm4gcih0aGlzLGEpLChzPXQuY2FsbCh0aGlzKSkuY2ZnPU9iamVjdC5hc3NpZ24obmV3IHFlLGkpLHMuX3hmb3JtTW9kZT1lLHMuX2tleT1uLHMucmVzZXQoKSxzfXJldHVybiBuKGEsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3AobyhhLnByb3RvdHlwZSksInJlc2V0Iix0aGlzKS5jYWxsKHRoaXMpLHRoaXMuX2RvUmVzZXQoKX19LHtrZXk6InByb2Nlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hcHBlbmQoZSksdGhpcy5fcHJvY2VzcygpfX0se2tleToiZmluYWxpemUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0aGlzLl9hcHBlbmQoZSksdGhpcy5fZG9GaW5hbGl6ZSgpfX1dLFt7a2V5OiJjcmVhdGVFbmNyeXB0b3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0VOQ19YRk9STV9NT0RFLGUsdCl9fSx7a2V5OiJjcmVhdGVEZWNyeXB0b3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0RFQ19YRk9STV9NT0RFLGUsdCl9fSx7a2V5OiJfY3JlYXRlSGVscGVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/a3Q6bXR9O3JldHVybntlbmNyeXB0OmZ1bmN0aW9uKHIsYSxuKXtyZXR1cm4gdChhKS5lbmNyeXB0KGUscixhLG4pfSxkZWNyeXB0OmZ1bmN0aW9uKHIsYSxuKXtyZXR1cm4gdChhKS5kZWNyeXB0KGUscixhLG4pfX19fV0pLGF9KFplKTtjdC5fRU5DX1hGT1JNX01PREU9MSxjdC5fREVDX1hGT1JNX01PREU9MixjdC5rZXlTaXplPTQsY3QuaXZTaXplPTQ7dmFyIGx0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSxuKXt2YXIgaTtyZXR1cm4gcih0aGlzLGEpLChpPXQuY2FsbCh0aGlzKSkuX2NpcGhlcj1lLGkuX2l2PW4saX1yZXR1cm4gbihhLG51bGwsW3trZXk6ImNyZWF0ZUVuY3J5cHRvciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5FbmNyeXB0b3IuY3JlYXRlKGUsdCl9fSx7a2V5OiJjcmVhdGVEZWNyeXB0b3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuRGVjcnlwdG9yLmNyZWF0ZShlLHQpfX1dKSxhfShxZSk7ZnVuY3Rpb24gZnQoZSx0LHIpe3ZhciBhLG49ZSxpPXRoaXMuX2l2O2k/KGE9aSx0aGlzLl9pdj12b2lkIDApOmE9dGhpcy5fcHJldkJsb2NrO2Zvcih2YXIgcz0wO3M8cjtzKz0xKW5bdCtzXV49YVtzXX12YXIgZHQ9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KGx0KTtkdC5FbmNyeXB0b3I9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxbe2tleToicHJvY2Vzc0Jsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2NpcGhlcixhPXIuYmxvY2tTaXplO2Z0LmNhbGwodGhpcyxlLHQsYSksci5lbmNyeXB0QmxvY2soZSx0KSx0aGlzLl9wcmV2QmxvY2s9ZS5zbGljZSh0LHQrYSl9fV0pLGF9KGR0KSxkdC5EZWNyeXB0b3I9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxbe2tleToicHJvY2Vzc0Jsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2NpcGhlcixhPXIuYmxvY2tTaXplLG49ZS5zbGljZSh0LHQrYSk7ci5kZWNyeXB0QmxvY2soZSx0KSxmdC5jYWxsKHRoaXMsZSx0LGEpLHRoaXMuX3ByZXZCbG9jaz1ufX1dKSxhfShkdCk7dmFyIGh0PXtwYWQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9NCp0LGE9ci1lLnNpZ0J5dGVzJXIsbj1hPDwyNHxhPDwxNnxhPDw4fGEsaT1bXSxzPTA7czxhO3MrPTQpaS5wdXNoKG4pO3ZhciBvPVdlLmNyZWF0ZShpLGEpO2UuY29uY2F0KG8pfSx1bnBhZDpmdW5jdGlvbihlKXt2YXIgdD1lLHI9MjU1JnQud29yZHNbdC5zaWdCeXRlcy0xPj4+Ml07dC5zaWdCeXRlcy09cn19LHB0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSxuLGkpe3ZhciBzO3JldHVybiByKHRoaXMsYSksKHM9dC5jYWxsKHRoaXMsZSxuLE9iamVjdC5hc3NpZ24oe21vZGU6ZHQscGFkZGluZzpodH0saSkpKS5ibG9ja1NpemU9NCxzfXJldHVybiBuKGEsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO3AobyhhLnByb3RvdHlwZSksInJlc2V0Iix0aGlzKS5jYWxsKHRoaXMpO3ZhciB0PXRoaXMuY2ZnLHI9dC5pdixuPXQubW9kZTt0aGlzLl94Zm9ybU1vZGU9PT10aGlzLmNvbnN0cnVjdG9yLl9FTkNfWEZPUk1fTU9ERT9lPW4uY3JlYXRlRW5jcnlwdG9yOihlPW4uY3JlYXRlRGVjcnlwdG9yLHRoaXMuX21pbkJ1ZmZlclNpemU9MSksdGhpcy5fbW9kZT1lLmNhbGwobix0aGlzLHImJnIud29yZHMpLHRoaXMuX21vZGUuX19jcmVhdG9yPWV9fSx7a2V5OiJfZG9Qcm9jZXNzQmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbW9kZS5wcm9jZXNzQmxvY2soZSx0KX19LHtrZXk6Il9kb0ZpbmFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jZmcucGFkZGluZztyZXR1cm4gdGhpcy5feGZvcm1Nb2RlPT09dGhpcy5jb25zdHJ1Y3Rvci5fRU5DX1hGT1JNX01PREU/KHQucGFkKHRoaXMuX2RhdGEsdGhpcy5ibG9ja1NpemUpLGU9dGhpcy5fcHJvY2VzcyghMCkpOihlPXRoaXMuX3Byb2Nlc3MoITApLHQudW5wYWQoZSkpLGV9fV0pLGF9KGN0KSx2dD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKGUpe3ZhciBuO3JldHVybiByKHRoaXMsYSksKG49dC5jYWxsKHRoaXMpKS5taXhJbihlKSxufXJldHVybiBuKGEsW3trZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oZXx8dGhpcy5mb3JtYXR0ZXIpLnN0cmluZ2lmeSh0aGlzKX19XSksYX0ocWUpLHl0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaXBoZXJ0ZXh0LHI9ZS5zYWx0O3JldHVybihyP1dlLmNyZWF0ZShbMTM5ODg5MzY4NCwxNzAxMDc2ODMxXSkuY29uY2F0KHIpLmNvbmNhdCh0KTp0KS50b1N0cmluZyhldCl9LHBhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ZXQucGFyc2UoZSksYT1yLndvcmRzO3JldHVybiAxMzk4ODkzNjg0PT09YVswXSYmMTcwMTA3NjgzMT09PWFbMV0mJih0PVdlLmNyZWF0ZShhLnNsaWNlKDIsNCkpLGEuc3BsaWNlKDAsNCksci5zaWdCeXRlcy09MTYpLHZ0LmNyZWF0ZSh7Y2lwaGVydGV4dDpyLHNhbHQ6dH0pfX0sbXQ9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxudWxsLFt7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbj1PYmplY3QuYXNzaWduKG5ldyBxZSx0aGlzLmNmZyxhKSxpPWUuY3JlYXRlRW5jcnlwdG9yKHIsbikscz1pLmZpbmFsaXplKHQpLG89aS5jZmc7cmV0dXJuIHZ0LmNyZWF0ZSh7Y2lwaGVydGV4dDpzLGtleTpyLGl2Om8uaXYsYWxnb3JpdGhtOmUsbW9kZTpvLm1vZGUscGFkZGluZzpvLnBhZGRpbmcsYmxvY2tTaXplOmkuYmxvY2tTaXplLGZvcm1hdHRlcjpuLmZvcm1hdH0pfX0se2tleToiZGVjcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49dCxpPU9iamVjdC5hc3NpZ24obmV3IHFlLHRoaXMuY2ZnLGEpO3JldHVybiBuPXRoaXMuX3BhcnNlKG4saS5mb3JtYXQpLGUuY3JlYXRlRGVjcnlwdG9yKHIsaSkuZmluYWxpemUobi5jaXBoZXJ0ZXh0KX19LHtrZXk6Il9wYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/dC5wYXJzZShlLHRoaXMpOmV9fV0pLGF9KHFlKTttdC5jZmc9T2JqZWN0LmFzc2lnbihuZXcgcWUse2Zvcm1hdDp5dH0pO3ZhciBndD17ZXhlY3V0ZTpmdW5jdGlvbihlLHQscixhLG4pe3ZhciBpLHM9YTtzfHwocz1XZS5yYW5kb20oOCkpLGk9bj91dC5jcmVhdGUoe2tleVNpemU6dCtyLGhhc2hlcjpufSkuY29tcHV0ZShlLHMpOnV0LmNyZWF0ZSh7a2V5U2l6ZTp0K3J9KS5jb21wdXRlKGUscyk7dmFyIG89V2UuY3JlYXRlKGkud29yZHMuc2xpY2UodCksNCpyKTtyZXR1cm4gaS5zaWdCeXRlcz00KnQsdnQuY3JlYXRlKHtrZXk6aSxpdjpvLHNhbHQ6c30pfX0sa3Q9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxudWxsLFt7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbj1PYmplY3QuYXNzaWduKG5ldyBxZSx0aGlzLmNmZyxhKSxpPW4ua2RmLmV4ZWN1dGUocixlLmtleVNpemUsZS5pdlNpemUsbi5zYWx0LG4uaGFzaGVyKTtuLml2PWkuaXY7dmFyIHM9bXQuZW5jcnlwdC5jYWxsKHRoaXMsZSx0LGkua2V5LG4pO3JldHVybiBzLm1peEluKGkpLHN9fSx7a2V5OiJkZWNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbj10LGk9T2JqZWN0LmFzc2lnbihuZXcgcWUsdGhpcy5jZmcsYSk7bj10aGlzLl9wYXJzZShuLGkuZm9ybWF0KTt2YXIgcz1pLmtkZi5leGVjdXRlKHIsZS5rZXlTaXplLGUuaXZTaXplLG4uc2FsdCxpLmhhc2hlcik7cmV0dXJuIGkuaXY9cy5pdixtdC5kZWNyeXB0LmNhbGwodGhpcyxlLG4scy5rZXksaSl9fV0pLGF9KG10KTtrdC5jZmc9T2JqZWN0LmFzc2lnbihtdC5jZmcse2tkZjpndH0pO2Zvcih2YXIgYnQ9W10sX3Q9W10sd3Q9W10seHQ9W10sU3Q9W10sQXQ9W10sRHQ9W10sVHQ9W10sRXQ9W10sQnQ9W10sVXQ9W10sQ3Q9MDtDdDwyNTY7Q3QrPTEpVXRbQ3RdPUN0PDEyOD9DdDw8MTpDdDw8MV4yODM7Zm9yKHZhciBQdD0wLEl0PTAsTXQ9MDtNdDwyNTY7TXQrPTEpe3ZhciB6dD1JdF5JdDw8MV5JdDw8Ml5JdDw8M15JdDw8NDt6dD16dD4+PjheMjU1Jnp0Xjk5LGJ0W1B0XT16dCxfdFt6dF09UHQ7dmFyIE90PVV0W1B0XSxSdD1VdFtPdF0sTHQ9VXRbUnRdLFZ0PTI1NypVdFt6dF1eMTY4NDMwMDgqenQ7d3RbUHRdPVZ0PDwyNHxWdD4+PjgseHRbUHRdPVZ0PDwxNnxWdD4+PjE2LFN0W1B0XT1WdDw8OHxWdD4+PjI0LEF0W1B0XT1WdCxWdD0xNjg0MzAwOSpMdF42NTUzNypSdF4yNTcqT3ReMTY4NDMwMDgqUHQsRHRbenRdPVZ0PDwyNHxWdD4+PjgsVHRbenRdPVZ0PDwxNnxWdD4+PjE2LEV0W3p0XT1WdDw8OHxWdD4+PjI0LEJ0W3p0XT1WdCxQdD8oUHQ9T3ReVXRbVXRbVXRbTHReT3RdXV0sSXRePVV0W1V0W0l0XV0pOlB0PUl0PTF9dmFyIEZ0PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxOdD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLFt7a2V5OiJfZG9SZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtpZighdGhpcy5fblJvdW5kc3x8dGhpcy5fa2V5UHJpb3JSZXNldCE9PXRoaXMuX2tleSl7dGhpcy5fa2V5UHJpb3JSZXNldD10aGlzLl9rZXk7dmFyIHQ9dGhpcy5fa2V5UHJpb3JSZXNldCxyPXQud29yZHMsYT10LnNpZ0J5dGVzLzQ7dGhpcy5fblJvdW5kcz1hKzY7dmFyIG49NCoodGhpcy5fblJvdW5kcysxKTt0aGlzLl9rZXlTY2hlZHVsZT1bXTtmb3IodmFyIGk9dGhpcy5fa2V5U2NoZWR1bGUscz0wO3M8bjtzKz0xKXM8YT9pW3NdPXJbc106KGU9aVtzLTFdLHMlYT9hPjYmJnMlYT09NCYmKGU9YnRbZT4+PjI0XTw8MjR8YnRbZT4+PjE2JjI1NV08PDE2fGJ0W2U+Pj44JjI1NV08PDh8YnRbMjU1JmVdKTooZT1idFsoZT1lPDw4fGU+Pj4yNCk+Pj4yNF08PDI0fGJ0W2U+Pj4xNiYyNTVdPDwxNnxidFtlPj4+OCYyNTVdPDw4fGJ0WzI1NSZlXSxlXj1GdFtzL2F8MF08PDI0KSxpW3NdPWlbcy1hXV5lKTt0aGlzLl9pbnZLZXlTY2hlZHVsZT1bXTtmb3IodmFyIG89dGhpcy5faW52S2V5U2NoZWR1bGUsdT0wO3U8bjt1Kz0xKXt2YXIgYz1uLXU7ZT11JTQ/aVtjXTppW2MtNF0sb1t1XT11PDR8fGM8PTQ/ZTpEdFtidFtlPj4+MjRdXV5UdFtidFtlPj4+MTYmMjU1XV1eRXRbYnRbZT4+PjgmMjU1XV1eQnRbYnRbMjU1JmVdXX19fX0se2tleToiZW5jcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX2RvQ3J5cHRCbG9jayhlLHQsdGhpcy5fa2V5U2NoZWR1bGUsd3QseHQsU3QsQXQsYnQpfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUsYT1yW3QrMV07clt0KzFdPXJbdCszXSxyW3QrM109YSx0aGlzLl9kb0NyeXB0QmxvY2socix0LHRoaXMuX2ludktleVNjaGVkdWxlLER0LFR0LEV0LEJ0LF90KSxhPXJbdCsxXSxyW3QrMV09clt0KzNdLHJbdCszXT1hfX0se2tleToiX2RvQ3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxuLGkscyxvKXtmb3IodmFyIHU9ZSxjPXRoaXMuX25Sb3VuZHMsbD11W3RdXnJbMF0sZj11W3QrMV1eclsxXSxkPXVbdCsyXV5yWzJdLGg9dVt0KzNdXnJbM10scD00LHY9MTt2PGM7dis9MSl7dmFyIHk9YVtsPj4+MjRdXm5bZj4+PjE2JjI1NV1eaVtkPj4+OCYyNTVdXnNbMjU1JmhdXnJbcF07cCs9MTt2YXIgbT1hW2Y+Pj4yNF1ebltkPj4+MTYmMjU1XV5pW2g+Pj44JjI1NV1ec1syNTUmbF1ecltwXTtwKz0xO3ZhciBnPWFbZD4+PjI0XV5uW2g+Pj4xNiYyNTVdXmlbbD4+PjgmMjU1XV5zWzI1NSZmXV5yW3BdO3ArPTE7dmFyIGs9YVtoPj4+MjRdXm5bbD4+PjE2JjI1NV1eaVtmPj4+OCYyNTVdXnNbMjU1JmRdXnJbcF07cCs9MSxsPXksZj1tLGQ9ZyxoPWt9dmFyIGI9KG9bbD4+PjI0XTw8MjR8b1tmPj4+MTYmMjU1XTw8MTZ8b1tkPj4+OCYyNTVdPDw4fG9bMjU1JmhdKV5yW3BdO3ArPTE7dmFyIF89KG9bZj4+PjI0XTw8MjR8b1tkPj4+MTYmMjU1XTw8MTZ8b1toPj4+OCYyNTVdPDw4fG9bMjU1JmxdKV5yW3BdO3ArPTE7dmFyIHc9KG9bZD4+PjI0XTw8MjR8b1toPj4+MTYmMjU1XTw8MTZ8b1tsPj4+OCYyNTVdPDw4fG9bMjU1JmZdKV5yW3BdO3ArPTE7dmFyIHg9KG9baD4+PjI0XTw8MjR8b1tsPj4+MTYmMjU1XTw8MTZ8b1tmPj4+OCYyNTVdPDw4fG9bMjU1JmRdKV5yW3BdO3ArPTEsdVt0XT1iLHVbdCsxXT1fLHVbdCsyXT13LHVbdCszXT14fX1dKSxhfShwdCk7TnQua2V5U2l6ZT04O3ZhciBqdD1wdC5fY3JlYXRlSGVscGVyKE50KSxHdD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhKX0obHQpO0d0LkVuY3J5cHRvcj1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLFt7a2V5OiJwcm9jZXNzQmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZSxhPXRoaXMuX2NpcGhlcixuPWEuYmxvY2tTaXplLGk9dGhpcy5faXYscz10aGlzLl9jb3VudGVyO2kmJih0aGlzLl9jb3VudGVyPWkuc2xpY2UoMCkscz10aGlzLl9jb3VudGVyLHRoaXMuX2l2PXZvaWQgMCk7dmFyIG89cy5zbGljZSgwKTthLmVuY3J5cHRCbG9jayhvLDApLHNbbi0xXT1zW24tMV0rMXwwO2Zvcih2YXIgdT0wO3U8bjt1Kz0xKXJbdCt1XV49b1t1XX19XSksYX0oR3QpLEd0LkRlY3J5cHRvcj1HdC5FbmNyeXB0b3I7dmFyIEh0PXtwYWQ6ZnVuY3Rpb24oKXt9LHVucGFkOmZ1bmN0aW9uKCl7fX0sS3Q9e2RlY3J5cHRXb3JkQXJyYXk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPVhlLnBhcnNlKHQpLG49WGUucGFyc2UoaWUocikpLGk9V2UuY3JlYXRlKG5ldyBVaW50OEFycmF5KGUpKSxzPWp0LmRlY3J5cHQodnQuY3JlYXRlKHtjaXBoZXJ0ZXh0Oml9KSxhLHtpdjpuLG1vZGU6R3QscGFkZGluZzpIdH0pO3JldHVybiBLdC53b3JkQXJyYXlUb1VpbnQ4QXJyYXkocyl9LHdvcmRBcnJheVRvVWludDhBcnJheTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5zaWdCeXRlcyxyPWUud29yZHMsYT1uZXcgVWludDhBcnJheSh0KSxuPTAsaT0wO24hPT10Oyl7dmFyIHM9cltpKytdO2lmKGFbbisrXT0oNDI3ODE5MDA4MCZzKT4+PjI0LG49PT10KWJyZWFrO2lmKGFbbisrXT0oMTY3MTE2ODAmcyk+Pj4xNixuPT09dClicmVhaztpZihhW24rK109KDY1MjgwJnMpPj4+OCxuPT09dClicmVhazthW24rK109MjU1JnN9cmV0dXJuIGF9LGRlY29kZXJBRVNDVFJEYXRhOmZ1bmN0aW9uKGUsdCxyKXtpZihlLnZpZGVvU2VuYyl7dmFyIGE9ZS5raWRWYWx1ZSxuPWUudmlkZW9TZW5jO2Uuc2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbih0LGkpe3ZhciBzPW5baV0sbz10LmRhdGEsdT1bXSxjPVtdLGw9cy5Jbml0aWFsaXphdGlvblZlY3RvcjtpZihzLnN1YnNhbXBsZXMmJnMuc3Vic2FtcGxlcy5sZW5ndGgpcy5zdWJzYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuQnl0ZXNPZkNsZWFyRGF0YStlLkJ5dGVzT2ZQcm90ZWN0ZWREYXRhLHI9by5zbGljZSgwLHQpO3UucHVzaChyLnNsaWNlKDAsZS5CeXRlc09mQ2xlYXJEYXRhKSksYy5wdXNoKHIuc2xpY2UoZS5CeXRlc09mQ2xlYXJEYXRhKSksbz1vLnNsaWNlKHQpfSkpO2Vsc2V7dmFyIGY9dC5zaXplO3UucHVzaChvLnNsaWNlKDAsMCkpLGMucHVzaChvLnNsaWNlKDAsZikpLG89by5zbGljZShmKX12YXIgZD1uZXcgSWU7ZC53cml0ZS5hcHBseShkLGMpO3ZhciBoPXI/cihkLmJ1ZmZlcixhLGwpOkt0LmRlY3J5cHRXb3JkQXJyYXkoZC5idWZmZXIsYSxsKSxwPW5ldyBJZTt1LmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9Y1t0XS5sZW5ndGgsYT1oLnNsaWNlKDAscik7cC53cml0ZShlKSxwLndyaXRlKGEpLGg9aC5zbGljZShyKX0pKSxlLnNhbXBsZXNbaV0uZGF0YT1wLmJ1ZmZlcn0pKX1pZih0LmF1ZGlvU2VuYyl7dmFyIGk9dC5raWRWYWx1ZSxzPXQuYXVkaW9TZW5jO3Quc2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlLGEpe3ZhciBuPXNbYV0sbz1yP3IoZS5kYXRhLGksbi5Jbml0aWFsaXphdGlvblZlY3Rvcik6S3QuZGVjcnlwdFdvcmRBcnJheShlLmRhdGEsaSxuLkluaXRpYWxpemF0aW9uVmVjdG9yKTt0LnNhbXBsZXNbYV0uZGF0YT1vfSkpfX19LHF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGEsbixzKXt2YXIgbz10aGlzO3IodGhpcyxlKSxpKHRoaXMsIl92aWRlb1NhbXBsZXMiLFtdKSxpKHRoaXMsIl9hdWRpb1NhbXBsZXMiLFtdKSxpKHRoaXMsIl9sYXN0UmVtYWluQnVmZmVyIixbXSksaSh0aGlzLCJfbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zIiwwKSx0aGlzLnZpZGVvVHJhY2s9bmV3IFIsdGhpcy5hdWRpb1RyYWNrPW5ldyBMLHRoaXMubWV0YWRhdGFUcmFjaz1ufHxuZXcgSCx0aGlzLmxvZz1uZXcgT2UoIk1QNERlbXV4ZXIiLCFzfHwhcy5vcGVuTG9nfHwhcy5vcGVuTG9nKSx0JiZ0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PW8uX3ZpZGVvU2FtcGxlcykucHVzaC5hcHBseSh0LHkoZS5mcmFtZXMpKX0pKSxhJiZhLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PW8uX2F1ZGlvU2FtcGxlcykucHVzaC5hcHBseSh0LHkoZS5mcmFtZXMpKX0pKX1yZXR1cm4gbihlLFt7a2V5OiJwYXJzZVNhbXBsZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigibW9vdiBpcyByZXF1aXJlZCIpO2lmKHRoaXMudmlkZW9UcmFjay5jb2RlY3x8dGhpcy5hdWRpb1RyYWNrLmNvZGVjfHwoQWUubW9vdlRvVHJhY2soZSx0aGlzLnZpZGVvVHJhY2ssdGhpcy5hdWRpb1RyYWNrKSx0aGlzLnZpZGVvU2VuYz10aGlzLnZpZGVvVHJhY2sudmlkZW9TZW5jLHRoaXMuYXVkaW9TZW5jPXRoaXMuYXVkaW9UcmFjay5hdWRpb1NlbmMpLCF0aGlzLl9hdWRpb1NhbXBsZXMubGVuZ3RoJiYhdGhpcy5fdmlkZW9TYW1wbGVzLmxlbmd0aCl7dmFyIHQ9QWUubW9vdlRvU2FtcGxlcyhlKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBwYXJzZSBzYW1wbGVzIGZyb20gbW9vdiBib3giKTt0aGlzLl92aWRlb1NhbXBsZXM9dC52aWRlb1NhbXBsZXN8fFtdLHRoaXMuX2F1ZGlvU2FtcGxlcz10LmF1ZGlvU2FtcGxlc3x8W119fX0se2tleToiZGVtdXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEsbil7dGhpcy5wYXJzZVNhbXBsZXMobik7dmFyIGkscyxvLHU9dGhpcy52aWRlb1RyYWNrLGM9dGhpcy5hdWRpb1RyYWNrO2lmKHUuc2FtcGxlcz1bXSxjLnNhbXBsZXM9W10scil7Zm9yKHZhciBsLGY9MCxkPXJbMF0saD1yWzFdO2Q8PWg7ZCsrKXtpZighKGk9dGhpcy5fdmlkZW9TYW1wbGVzW2RdKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmb3VuZCB2aWRlbyBmcmFtZSAjIi5jb25jYXQoZCkpO289aS5vZmZzZXQtdCxzPWUuc3ViYXJyYXkobyxvK2kuc2l6ZSksKGw9bmV3IFYoaS5wdHN8fGkuZHRzLGkuZHRzKSkuZHVyYXRpb249aS5kdXJhdGlvbixsLmdvcElkPWkuZ29wSWQsaS5rZXlmcmFtZSYmbC5zZXRUb0tleWZyYW1lKCk7Zm9yKHZhciBwPTAsdj1zLmxlbmd0aC0xO3A8djspZj1yZShzLHApLHArPTQsbC51bml0cy5wdXNoKHMuc3ViYXJyYXkocCxwK2YpKSxwKz1mO3Uuc2FtcGxlcy5wdXNoKGwpfXUuYmFzZU1lZGlhRGVjb2RlVGltZT11LnNhbXBsZXNbMF0uZHRzfWlmKGEpe2Zvcih2YXIgeT1hWzBdLG09YVsxXTt5PD1tO3krKyl7aWYoIShpPXRoaXMuX2F1ZGlvU2FtcGxlc1t5XSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZm91bmQgdmlkZW8gZnJhbWUgIyIuY29uY2F0KHkpKTtvPWkub2Zmc2V0LXQscz1lLnN1YmFycmF5KG8sbytpLnNpemUpLGMuc2FtcGxlcy5wdXNoKG5ldyBGKGkuZHRzLHMsaS5kdXJhdGlvbikpfWMuYmFzZU1lZGlhRGVjb2RlVGltZT1jLnNhbXBsZXNbMF0uZHRzfXJldHVybnt2aWRlb1RyYWNrOnUsYXVkaW9UcmFjazpjLG1ldGFkYXRhVHJhY2s6dGhpcy5tZXRhZGF0YVRyYWNrfX19LHtrZXk6ImRlbXV4UGFydCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxuLGkscyxvKXtpZih0aGlzLnBhcnNlU2FtcGxlcyhuKSx0aGlzLnZpZGVvVHJhY2sudXNlRU1FPWksdGhpcy5hdWRpb1RyYWNrLnVzZUVNRT1pLHRoaXMuX2xhc3RSZW1haW5CdWZmZXImJnRoaXMuX2xhc3RSZW1haW5CdWZmZXIuYnl0ZUxlbmd0aD4wJiZ0PnRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcyYmdDw9dGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zK3RoaXMuX2xhc3RSZW1haW5CdWZmZXIuYnl0ZUxlbmd0aClmb3IodmFyIHU9MDt1PDIwOyl0cnl7dmFyIGM9dGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5zdWJhcnJheSgwLHQtdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zKSxsPW5ldyBVaW50OEFycmF5KGUuYnl0ZUxlbmd0aCtjLmJ5dGVMZW5ndGgpO2wuc2V0KGMsMCksbC5zZXQobmV3IFVpbnQ4QXJyYXkoZSksYy5ieXRlTGVuZ3RoKSxlPWwsdC09Yy5ieXRlTGVuZ3RoLHRoaXMuX2xhc3RSZW1haW5CdWZmZXI9bnVsbCx0aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9MDticmVha31jYXRjaChUKXtpZighKHU8MjApKXRocm93IG5ldyBFcnJvcigibmV3IFVpbnQ4QXJyYXkgZXJyb3I6LCIrVC5lcnJvck1lc3NhZ2UpO3UrK312YXIgZixkLGgscD10aGlzLnZpZGVvVHJhY2ssdj10aGlzLmF1ZGlvVHJhY2s7cC5zYW1wbGVzPVtdLHYuc2FtcGxlcz1bXSxwLnZpZGVvU2VuYz1udWxsLHYuYXVkaW9TZW5jPW51bGw7dmFyIHk9MCxtPTA7aWYodGhpcy5fdmlkZW9TYW1wbGVzLmxlbmd0aD4wJiZyLmxlbmd0aD4wKXtmb3IodmFyIGcsaz1lLmJ5dGVMZW5ndGgrdCxiPXJbMF07Yjw9clsxXTtiKyspe2lmKCEoZj10aGlzLl92aWRlb1NhbXBsZXNbYl0pKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZvdW5kIHZpZGVvIGZyYW1lICMiLmNvbmNhdChiKSk7Zi5vZmZzZXQ+PXQmJmYub2Zmc2V0K2Yuc2l6ZTw9ayYmKHk9KGg9Zi5vZmZzZXQtdCkrZi5zaXplLGQ9ZS5zdWJhcnJheShoLHkpLChnPW5ldyBWKGYucHRzfHxmLmR0cyxmLmR0cykpLmR1cmF0aW9uPWYuZHVyYXRpb24sZy5nb3BJZD1mLmdvcElkLGcuc2FtcGxlT2Zmc2V0PWYuaW5kZXgsZi5rZXlmcmFtZSYmZy5zZXRUb0tleWZyYW1lKCksZy5kYXRhPWQsZy5zaXplPWYuc2l6ZSxwLnNhbXBsZXMucHVzaChnKSl9cC5zYW1wbGVzLmxlbmd0aD4wJiYocC5nb3BJZD1wLnNhbXBsZXNbMF0uZ29wSWQscC5iYXNlTWVkaWFEZWNvZGVUaW1lPXAuc2FtcGxlc1swXS5kdHMscC5zdGFydFB0cz1wLnNhbXBsZXNbMF0ucHRzL3AudGltZXNjYWxlLHAuZW5kUHRzPXAuc2FtcGxlc1twLnNhbXBsZXMubGVuZ3RoLTFdLnB0cy9wLnRpbWVzY2FsZSx0aGlzLnZpZGVvU2VuYyYmKHAudmlkZW9TZW5jPXRoaXMudmlkZW9TZW5jLnNsaWNlKHAuc2FtcGxlc1swXS5zYW1wbGVPZmZzZXQscC5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCtwLnNhbXBsZXMubGVuZ3RoKSxwLmtpZFZhbHVlPXMpKX1pZih0aGlzLl9hdWRpb1NhbXBsZXMubGVuZ3RoPjAmJmEubGVuZ3RoPjApe2Zvcih2YXIgXz1hWzBdO188PWFbMV07XysrKXtpZighKGY9dGhpcy5fYXVkaW9TYW1wbGVzW19dKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmb3VuZCB2aWRlbyBmcmFtZSAjIi5jb25jYXQoXykpO2Yub2Zmc2V0Pj10JiZmLm9mZnNldCtmLnNpemU8PWUuYnl0ZUxlbmd0aCt0JiYobT0oaD1mLm9mZnNldC10KStmLnNpemUsZD1lLnN1YmFycmF5KGgsbSksdi5zYW1wbGVzLnB1c2gobmV3IEYoZi5kdHMsZCxmLmR1cmF0aW9uLGYuaW5kZXgpKSl9di5zYW1wbGVzLmxlbmd0aD4wJiYodi5nb3BJZD12LnNhbXBsZXNbMF0uZ29wSWR8fHAuZ29wSWQsdi5iYXNlTWVkaWFEZWNvZGVUaW1lPXYuc2FtcGxlc1swXS5kdHMsdi5zdGFydFB0cz12LnNhbXBsZXNbMF0ucHRzL3YudGltZXNjYWxlLHYuZW5kUHRzPXYuc2FtcGxlc1t2LnNhbXBsZXMubGVuZ3RoLTFdLnB0cy92LnRpbWVzY2FsZSx0aGlzLmF1ZGlvU2VuYyYmKHYuYXVkaW9TZW5jPXRoaXMuYXVkaW9TZW5jLnNsaWNlKHYuc2FtcGxlc1swXS5zYW1wbGVPZmZzZXQsdi5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCt2LnNhbXBsZXMubGVuZ3RoKSx2LmtpZFZhbHVlPXMpKX10aGlzLmRlY29kZXJEYXRhKHAsdixvKTtmb3IodmFyIHc9MCx4PTA7eDxwLnNhbXBsZXMubGVuZ3RoO3grKylmb3IodmFyIFM9MCxBPXAuc2FtcGxlc1t4XS5kYXRhLEQ9QS5sZW5ndGgtMTtTPEQ7KXc9cmUoQSxTKSxTKz00LHAuc2FtcGxlc1t4XS51bml0cy5wdXNoKEEuc3ViYXJyYXkoUyxTK3cpKSxTKz13O3JldHVybiB0aGlzLl9sYXN0UmVtYWluQnVmZmVyPWUuc3ViYXJyYXkoTWF0aC5tYXgoeSxtKSksdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5ieXRlTGVuZ3RoPjA/dGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zPXQrZS5ieXRlTGVuZ3RoLXRoaXMuX2xhc3RSZW1haW5CdWZmZXIuYnl0ZUxlbmd0aDp0aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9MCx7dmlkZW9UcmFjazpwLGF1ZGlvVHJhY2s6dixtZXRhZGF0YVRyYWNrOnRoaXMubWV0YWRhdGFUcmFja319fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl92aWRlb1NhbXBsZXM9W10sdGhpcy5fYXVkaW9TYW1wbGVzPVtdLHRoaXMuX2xhc3RSZW1haW5CdWZmZXI9bnVsbCx0aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9MCx0aGlzLnZpZGVvVHJhY2sucmVzZXQoKSx0aGlzLmF1ZGlvVHJhY2sucmVzZXQoKSx0aGlzLm1ldGFkYXRhVHJhY2sucmVzZXQoKX19LHtrZXk6ImRlY29kZXJEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQscil7ZS51c2VFTUV8fHQudXNlRU1FfHxLdC5kZWNvZGVyQUVTQ1RSRGF0YShlLHQscil9fV0sW3trZXk6InByb2JlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQWUucHJvYmUoZSl9fV0pLGV9KCksV3Q9e25vd1RpbWU6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHBhcnNlSW50KHBlcmZvcm1hbmNlLm5vdygpLDEwKX1jYXRjaChlKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19LGNvbmNhdERhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxhPTA7ZSYmci5wdXNoKGUpLHQmJnIucHVzaCh0KSxyLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gZSYmKGErPWUuYnl0ZUxlbmd0aCksITB9KSk7dmFyIG49bmV3IFVpbnQ4QXJyYXkoYSksaT0wO3JldHVybiByLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gZSYmKG4uc2V0KGUsaSksaSs9ZS5ieXRlTGVuZ3RoKSwhMH0pKSxufX07b25tZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciByPWUuZGF0YTtzd2l0Y2goci5tZXRob2Qpe2Nhc2UiaW5pdCI6dGhpcy5jb2RlY1R5cGU9ci5hcmdzLmNvZGVjVHlwZSx0aGlzLm9wZW5sb2c9ci5hcmdzLm9wZW5Mb2csdGhpcy5NUDREZW11eGVyPW51bGwsdGhpcy5GTVA0UmVtdXhlcj1udWxsLHRoaXMuX25lZWRJbml0U2VnbWVudD0hMCx0aGlzLnN1cHBvcnRIZXZjPXIuYXJncy5zdXBwb3J0SGV2YzticmVhaztjYXNlInRyYW5zbXV4Ijp2YXIgYT1lLmRhdGEuYXJncyxuPW5ldyBVaW50OEFycmF5KGUuZGF0YS5idWZmZXIpO3RoaXMuTVA0RGVtdXhlcnx8KHRoaXMuTVA0RGVtdXhlcj1uZXcgcXQobnVsbCxudWxsLG51bGwse29wZW5sb2c6dGhpcy5vcGVubG9nfSkpO3ZhciBpLHM9dGhpcy5NUDREZW11eGVyLmRlbXV4UGFydChuLGEuc3RhcnQsYS52aWRlb0lkeCxhLmF1ZGlvSWR4LGEubW9vdixhLnVzZUVNRSxhLmtpZFZhbHVlKTtpZih0aGlzLkZNUDRSZW11eGVyfHwiaDI2NSI9PT10aGlzLmNvZGVjVHlwZSYmIXRoaXMuc3VwcG9ydEhldmN8fCh0aGlzLkZNUDRSZW11eGVyPW5ldyBIZSh0aGlzLk1QNERlbXV4ZXIudmlkZW9UcmFjayx0aGlzLk1QNERlbXV4ZXIuYXVkaW9UcmFjayx7b3BlbkxvZzp0aGlzLm9wZW5sb2d9KSksdGhpcy5GTVA0UmVtdXhlcil7dmFyIG89dGhpcy5GTVA0UmVtdXhlci5yZW11eCh0aGlzLl9uZWVkSW5pdFNlZ21lbnQse2luaXRNZXJnZTohMH0pO28uaW5pdFNlZ21lbnQmJih0aGlzLl9uZWVkSW5pdFNlZ21lbnQ9ITEpLGk9e2J1ZmZlcjpXdC5jb25jYXREYXRhKG8uYXVkaW9TZWdtZW50LG8udmlkZW9TZWdtZW50KSxyYW5nZTphLmNvbnRleHQucmFuZ2Usc3RhdGU6YS5jb250ZXh0LnN0YXRlLGNvbnRleHQ6e3JhbmdlOmEuY29udGV4dC5yYW5nZSxmcmFnSW5kZXg6YS5jb250ZXh0LmZyYWdJbmRleCxzdGFydFB0czpNYXRoLm1pbihzLnZpZGVvVHJhY2suc3RhcnRQdHMscy5hdWRpb1RyYWNrLnN0YXJ0UHRzKSxlbmRQdHM6TWF0aC5tYXgocy52aWRlb1RyYWNrLmVuZFB0cyxzLmF1ZGlvVHJhY2suZW5kUHRzKX0saW5pdFNlZzpvLmluaXRTZWdtZW50fX10aGlzLnBvc3RNZXNzYWdlKHttZXRob2Q6InRyYW5zbXV4IixpZDplLmRhdGEuaWQsYXJnczp0KHt9LGkpfSk7YnJlYWs7Y2FzZSJyZXNldCI6dGhpcy5GTVA0UmVtdXhlciYmdGhpcy5GTVA0UmVtdXhlci5yZXNldCgpLHRoaXMuTVA0RGVtdXhlciYmdGhpcy5NUDREZW11eGVyLnJlc2V0KCksdGhpcy5GTVA0UmVtdXhlcj1udWxsLHRoaXMuTVA0RGVtdXhlcj1udWxsLHRoaXMuX25lZWRJbml0U2VnbWVudD0hMH19fSgpOwo=",Mn="undefined"!=typeof window&&window.Blob&&new Blob([atob(Tn)],{type:"text/javascript;charset=utf-8"});function wn(){var e=Mn&&(window.URL||window.webkitURL).createObjectURL(Mn);try{return e?new Worker(e,{}):new Worker("data:application/javascript;base64,"+Tn,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}var Kn=function(e){G(i,e);var t=M(i);function i(e){var n;return X(this,i),(n=t.call(this)).openlog=e.openLog,n.codecType=e.codecType,n.supportHevc=e.supportHevc,n.worker=new wn,n.worker.onmessage=function(e){n.emit(e.data.method,e.data)},n.worker.postMessage({method:"init",id:e.id||0,args:{openlog:n.openlog,supportHevc:n.supportHevc,codecType:n.codecType}}),n}return v(i,[{key:"transmux",value:function(e,t,i,n,s,a,r,l,o){var d=t.buffer;this.worker&&this.worker.postMessage({method:"transmux",id:e,buffer:d,args:{start:i,videoIdx:n,audioIdx:s,moov:a,useEME:r,kidValue:l,context:o}},[d])}},{key:"reset",value:function(){this.worker&&this.worker.postMessage({method:"reset"})}},{key:"destroy",value:function(){this.worker&&this.worker.terminate()}}]),i}(J),In="error",Cn="metaReady",Hn="moov_request_Progress",Nn="update_load_fragmentIdx",Fn=function(e){G(u,e);var t,i,n,s,a,r,l,o,d,c=M(u);function u(e,t){var i;if(X(this,u),L(R(i=c.call(this)),"onprogressDataArrive",function(){var e=f(y().mark((function e(t,n,s){var a;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t&&t.byteLength>0&&((a=i.timeRange[s.index].range)&&s.range[1]>=a[1]&&!n&&(n=!0),i.log("[mp4.loadFragment onprogressDataArrive ] receive data, >>> index,",s.index,",range,",JSON.stringify(s.range),", dataLen,",t.byteLength),i._mux(t,s.range[0],s.index,n)),n&&(i.timeRange[s.index].downloaded=!0,i.bufferLoadedPos=-1,i.log("[FragLoadDowned],fragmentIdx,",s.index,",rangeEnd,",s.range[1]));case 2:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}()),i.url=e,i.options=u.getDefaultConfig(),Object.keys(t).map((function(e){void 0!==t[e]&&null!==t[e]&&(i.options[e]=t[e])})),i.timeRange=[],i.CHUNK_SIZE=i.options.chunkSize,i.bufferLoaded=new Uint8Array(0),i.bufferLoadedPos=0,i.meta=null,i.videoTrak=null,i.audioTrak=null,i.canDownload=!0,i._loadSuccessCallBack=null,i._isPending=!1,i._metaLoading=!1,i.MP4Loader=new gn(p(p({segmentDuration:i.options.segmentDuration,url:e,vid:t.vid,retry:i.options.retryCount,retryDelay:i.options.retryDelay,timeout:i.options.timeout},t.reqOptions),{},{preferMMS:i.options.preferMMS,openLog:kn()})),i.fMP4Demuxer=null,i.MP4Demuxer=null,i.FMP4Remuxer=null,i._needInitSegment=!0,i._switchBitRate=!1,i.enableWorker=i.options.enableWorker,i.enableWorker&&"undefined"!=typeof Worker)try{i.workerSequence=0,i.transmuxerWorkerControl=new Kn({id:i.workerSequence,codecType:t.codecType,supportHevc:i.options.supportHevc,openLog:kn()}),i.transmuxerWorkerControl.on("transmux",(function(e){var t=e.args;i.log("[transmuxerworker end] ,range, ",JSON.stringify(t.range),",dataLen,",t.buffer.byteLength,t.context),i._loadSuccessCallBack&&i._loadSuccessCallBack(t)}))}catch(n){i.log("Error in worker:",n),i.enableWorker=!1,i.transmuxerWorkerControl=null}return i.enableWorker||(i.MP4Demuxer=null,i.FMP4Remuxer=null),i.seekTime=-1,i.changeBitRateTime=-1,i}return v(u,[{key:"changeBitRate",value:(d=f(y().mark((function e(t){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.url=t.url,e.next=3,this.MP4Loader.changeUrl(this.url,this.options.vid+Date.now(),this.CHUNK_SIZE);case 3:this._switchBitRate=!0,this.log("[switchBitrate] changeUrl, bitRate,",this.url);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return d.apply(this,arguments)})},{key:"log",value:function(e){for(var t=this.options,i=t&&t.vid?"[MP4] ".concat(t.vid," ").concat(e):"[MP4] ".concat(e),n=arguments.length,s=new Array(n>1?n-1:0),a=1;a<n;a++)s[a-1]=arguments[a];Rn.apply(void 0,[i].concat(s))}},{key:"errorHandler",value:(o=f(y().mark((function e(t,i){var n,s,a,r;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=t.response,s=t.message,a=this.options?this.options.vid:"",r=null,this._isPending=!0,n?(r=new yn("network",n.status,{httpText:n.httpText,message:s,url:n.url}),this.emit(In,r)):(console.log("[MP4] [".concat(a,"] errorHandler,"),t),r=t,this.emit(In,r));case 6:case"end":return e.stop()}}),e,this)}))),function(e,t){return o.apply(this,arguments)})},{key:"init",value:(l=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.url){e.next=3;break}return e.next=3,this.MP4Loader.changeUrl(this.url,this.options.vid+Date.now(),this.CHUNK_SIZE);case 3:return e.next=5,this.getMetaInfo();case 5:case"end":return e.stop()}}),e,this)}))),function(){return l.apply(this,arguments)})},{key:"getTimeRange",value:function(){for(var e=[],t=null,i=0;this.videoTrak&&i<this.videoTrak.length;i++)t={startTime:this.videoTrak[i].startTime,endTime:this.videoTrak[i].endTime,downloaded:!1,isLoading:!1},e.push(t);if(this.audioTrak&&this.audioTrak.length>e.length)for(var n=e.length;n<this.audioTrak.length;n++)t={startTime:Math.max(this.audioTrak[n].startTime,t?t.endTime:0),endTime:Math.max(this.audioTrak[n].endTime,t?t.endTime:0),downloaded:!1,isLoading:!1},e.push(t);return e}},{key:"getMetaInfo",value:(r=f(y().mark((function e(){var t,i,n,s=this,a=arguments;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=!(a.length>0&&void 0!==a[0])||a[0],e.prev=1,this._metaLoading=!0,this.log("getMetaInfo start"),this.bufferLoaded=new Uint8Array(0),i=0,n=function(){var e=f(y().mark((function e(n,a,r){var l;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s.log("getMetaInfo onProgressHandle, dataLen,",n?n.byteLength:-1,", state,",a,",range,",JSON.stringify(r.range)),n&&r.range[0]===i&&(s.bufferLoaded=D(Uint8Array,s.bufferLoaded,new Uint8Array(n)),i+=n.byteLength),r.meta&&!s.meta&&(l=r.meta,s.videoTrak=l.videoSegments,s.audioTrak=l.audioSegments,s.timeRange=s.getTimeRange(),s.meta=p(p({},l.meta),{},{ext:{videoTrak:s.videoTrak,audioTrak:s.audioTrak}}),l.bufferLoaded=s.bufferLoaded,s.log("meta reach"),t&&s.emit(Cn,s.meta)),s.meta&&a&&(s.log("[getMetaInfo req end]"),s._metaLoading=!1),s.meta&&(n||a)&&(s.log("emit moov_req_progress"),s.emit(Hn));case 5:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}(),e.next=9,this.MP4Loader.loadMetaProcess(this.MP4Loader.cache,[0,this.CHUNK_SIZE],n);case 9:e.next=15;break;case 11:e.prev=11,e.t0=e.catch(1),console.error("[MP4] trigger errorHandler getMetaInfo",null===e.t0||void 0===e.t0?void 0:e.t0.message),this.loadError(e.t0,"getMetaInfo");case 15:case"end":return e.stop()}}),e,this,[[1,11]])}))),function(){return r.apply(this,arguments)})},{key:"getFragmentIdx",value:function(e){var t,i;if(this.videoTrak.length){if(t=this.videoTrak.find((function(t){return t.startTime<=e&&t.endTime>e})),i=this.audioTrak.find((function(t){return t.startTime<=e&&t.endTime>e})),t&&i)return Math.min(t.index,i.index);if(t||i)return t?t.index:i.index;var n=Number.MAX_VALUE;return this.videoTrak&&this.videoTrak.length>0&&(n=this.videoTrak.length-1),this.audioTrak&&this.audioTrak.length>0&&(n=Math.min(this.audioTrak.length-1,n)),n}return(i=this.audioTrak.find((function(t){return t.startTime<=e&&t.endTime>e})))?i.index:0}},{key:"_checkHasMeta",value:(a=f(y().mark((function e(){var t;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.log(" loadMeta start"),this._metaLoading=!0,e.next=4,this.MP4Loader.loadMeta(this.MP4Loader.cache,Math.round(this.CHUNK_SIZE/2));case 4:return t=e.sent,this._metaLoading=!1,this.videoTrak=t.videoSegments,this.audioTrak=t.audioSegments,this.meta=p(p({},t.meta),{},{ext:{videoTrak:this.videoTrak,audioTrak:this.audioTrak}}),this.timeRange=this.getTimeRange(),this.bufferLoaded=new Uint8Array(0),t.bufferLoaded=this.bufferLoaded,e.abrupt("return",!0);case 13:case"end":return e.stop()}}),e,this)}))),function(){return a.apply(this,arguments)})},{key:"resetFragmentLoadState",value:function(e){for(var t=0;t<this.timeRange.length;t++)t<e?(this.timeRange[t].downloaded=!0,this.timeRange[t].isLoading=!0):(this.timeRange[t].downloaded=!1,this.timeRange[t].isLoading=!1)}},{key:"getFragRange",value:function(e){var t,i,n,s,a=null;this.videoTrak&&(a=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1]);var r=null;this.audioTrak&&(r=e<this.audioTrak.length?this.audioTrak[e]:this.audioTrak[this.audioTrak.length-1]);var l=0,o=0;this.videoTrak&&e>=this.videoTrak.length-1&&(l=-1),this.audioTrak&&e>=this.audioTrak.length-1&&(o=-1);var d=[Math.min((null===(t=a)||void 0===t?void 0:t.range[0])||1/0,(null===(i=r)||void 0===i?void 0:i.range[0])||1/0),Math.max((null===(n=a)||void 0===n?void 0:n.range[1])+l||0,(null===(s=r)||void 0===s?void 0:s.range[1])+o||0)];return e<this.timeRange.length&&(this.timeRange[e].range=d),d}},{key:"load",value:(s=f(y().mark((function e(t,i){var n,s,a;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._loadSuccessCallBack=i,!this._switchBitRate||this._metaLoading){e.next=12;break}return this.log("[switchBitrate], switch bitRate start load, time,",t>=this.videoTrak.length?this.audioTrak[t].startTime:this.videoTrak[t].startTime,", fragIndex,",t),e.next=5,this._checkHasMeta();case 5:n=e.sent,this.changeBitRateTime>0&&(this.timeRange[t].startTime<=this.changeBitRateTime&&this.changeBitRateTime<this.timeRange[t].endTime?this.log("[switchBitrate], not need update load fragIndex",t,",stTime,",this.changeBitRateTime):(t=this.getFragmentIdx(this.changeBitRateTime),this.log("[switchBitrate], need update load fragIndex",t,",stTime,",this.changeBitRateTime,",newBitrateTimeRange,",this.timeRange[t].startTime,"-",this.timeRange[t].endTime),this.emit(Nn,t)),this.seekTime=this.changeBitRateTime,this.changeBitRateTime=-1),this.resetFragmentLoadState(t),this.log("[switchBitrate], reset timerange state,",t),this._needInitSegment=!0,this.resetTansmuxer(),n&&(this._switchBitRate=!1);case 12:if(!this._switchBitRate||!this._metaLoading){e.next=14;break}return e.abrupt("return");case 14:s=this.getFragRange(t),this.log("loadFragment,",t,",range,",JSON.stringify(s)),this.seekTime>0?(a=this.getSubRange(t,this.seekTime,s),this.loadFragment(t,a),this.seekTime=-1):this.loadFragment(t,s);case 17:case"end":return e.stop()}}),e,this)}))),function(e,t){return s.apply(this,arguments)})},{key:"getSubRange",value:function(e,t,i){var n=i[0],s=i[0],a=1,r=!1;if(this.log(">>>>>getSubRange time,",t,JSON.stringify(i)),this.videoTrak&&this.videoTrak.length>0){var l=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1];if(0===l.frames.length)return this.log(">>>>>getSubRange video, no frames"),i;var o=l.frames.filter(zn),d=this.meta.videoTimescale,c=o[0].startTime/d;this.log(">>>>>getSubRange video, startTime,",l.startTime,",endTime,",l.endTime);for(var u=0;u<o.length;u++)this.log(">>>>>getSubRange video keyFrameList, startTime,",o[u].startTime/d,",range,",o[u].offset);for(;a<o.length;a++){var m=o[a].startTime/d;if(c<=t&&t<m&&i[0]<o[a-1].offset){n=o[a-1].offset,r=!0,this.log(">>>>>getSubRange video end, startTime,",c,",endTime,",m,",startRange,",n,", keyFrameIndex,",a-1);break}c=m}!r&&c<=t&&t<l.endTime+.8&&(n=o[a-1].offset,this.log(">>>>>getSubRange video last, startTime,",c,",endTime,",l.endTime,",startRange,",n))}if(a=1,this.audioTrak&&this.audioTrak.length>0){var h=e<this.audioTrak.length?this.audioTrak[e]:this.audioTrak[this.audioTrak.length-1];if(0===h.frames.length)return this.log(">>>>>getSubRange video, no frames"),i;var p=h.frames,y=this.meta.audioTimescale;a=Math.floor((t*y-p[0].startTime)/h.frames[0].duration);for(var b=(a=Math.min(p.length-1,a))>0?p[a-1].startTime/y:p[0].startTime/y;a>=0&&a<p.length;)if(a>0&&b>t)b=p[a-=1].startTime/y;else{var Z=(p[a].startTime+p[a].duration)/y;if(b<=t&&t<Z&&i[0]<p[a].offset){s=p[a].offset,r=!0,this.log(">>>>>getSubRange audio end, startTime,",b,",endTime,",Z,",startRange,",s,", index,",a);break}b=Z,a++}}var f=[Math.min(s,n),i[1]];return this.log(">>>>>getSubRange finalRange ",JSON.stringify(f),",oldRange,",JSON.stringify(i)),f}},{key:"_mux",value:function(e,t,i,n){var s=this.getSamplesRange(i,"video"),a=this.getSamplesRange(i,"audio"),r=[t,t+e.byteLength];if(this.transmuxerWorkerControl&&!this.meta.isFragmentMP4){var l={range:r,state:n,fragIndex:i};this.log("[transmuxerworker start] ,range, ",JSON.stringify(r),",dataLen,",e.byteLength,l),this.transmuxerWorkerControl.transmux(this.workerSequence,e,t,s,a,this.meta.moov,this.useEME,this.kidValue,l)}else try{var o,d;this.meta.isFragmentMP4?(this.fMP4Demuxer||(this.fMP4Demuxer=new st),o=this.fMP4Demuxer.demuxPart(e,t,this.meta.moov)):(this.MP4Demuxer||(this.MP4Demuxer=new Wi(this.videoTrak,this.audioTrak,null,{openLog:kn()})),o=this.MP4Demuxer.demuxPart(e,t,s,a,this.meta.moov,this.useEME,this.kidValue)),this.FMP4Remuxer||this.checkCodecH265()&&!this.options.supportHevc||(this.FMP4Remuxer=new Zt(o.videoTrack,o.audioTrack,{openLog:kn()})),this.log("[mux], videoTimeRange,",o.videoTrack?[o.videoTrack.startPts,o.videoTrack.endPts]:null,",audioTimeRange,",o.audioTrack?[o.audioTrack.startPts,o.audioTrack.endPts]:null);var c=[Math.min(o.videoTrack.startPts,o.audioTrack.startPts),Math.max(o.videoTrack.endPts,o.audioTrack.endPts)];if(this.FMP4Remuxer){var u=this.FMP4Remuxer.remux(this._needInitSegment,{initMerge:!0,range:r});u.initSegment&&(this._needInitSegment=!1),d={buffer:Zn.concatData(u.audioSegment,u.videoSegment),range:r,state:n,context:{range:r,fragIndex:i,timeRange:c},initSeg:u.initSegment}}else d={videoTrack:o.videoTrack,audioTrack:o.audioTrack,buffer:null,range:r,state:n,context:{range:r,fragIndex:i,timeRange:c}};this._loadSuccessCallBack&&this._loadSuccessCallBack(d)}catch(h){console.error("mux err:",h);var m=new bn(pn.remux,hn.muxError,{msg:JSON.stringify(h)});this.errorHandler(m,"mux",{fragIndex:i,range:[t,t+e.byteLength]})}}},{key:"getSamplesRange",value:function(e,t){var i=[];switch(t){case"video":if(this.videoTrak&&e<this.videoTrak.length){var n=this.videoTrak[e].frames;if(!n.length)break;i.push(n[0].index),i.push(n[n.length-1].index)}break;case"audio":if(this.audioTrak&&e<this.audioTrak.length){var s=this.audioTrak[e].frames;if(!s.length)break;i.push(s[0].index),i.push(s[s.length-1].index)}break;default:console.warn("[getSamplesRange] type ",t," is invalid")}return i}},{key:"loadFragment",value:(n=f(y().mark((function e(t,i){var n,s,a,r;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(this._isPending||i.length>0&&0===i[0]&&0===i[1]||this.timeRange[t].isLoading)){e.next=2;break}return e.abrupt("return");case 2:if(this.log("[MP4.loadFragment] ,fragIndex,",t,",range ",i,",len ,",i[1]-i[0],", bufferLoaded_Len,",this.bufferLoaded.byteLength),!(i.length>=2&&i[1]&&i[1]>0&&i[1]<=this.bufferLoaded.byteLength)){e.next=13;break}this.timeRange[t].isLoading=!0,n=Math.max(i[0],this.bufferLoadedPos),s=new Uint8Array(this.bufferLoaded.slice(n,i[1])),this.log("[mp4.loadFragment] has all data: ",n,i[1]),this.timeRange[t].downloaded=!0,this.bufferLoadedPos=-1,this._mux(s,n,t,!0),e.next=34;break;case 13:if(!(i.length>=2&&i[0]&&i[0]<=this.bufferLoaded.byteLength)){e.next=29;break}if(this.timeRange[t].isLoading){e.next=27;break}if(a=Math.max(i[0],this.bufferLoadedPos),!((r=new Uint8Array(this.bufferLoaded.slice(a,i[1]))).byteLength>0)){e.next=22;break}return this.bufferLoadedPos=a+r.byteLength,this.log("[mp4.loadFragment] has part data: ",a,a+r.byteLength),this._mux(r,a,t,i[1]<=this.bufferLoadedPos),e.abrupt("return");case 22:if(this._metaLoading||this.timeRange[t].isLoading){e.next=27;break}return this.log("[mp4.loadFragment] ready to load part data >>> ",this.bufferLoaded.byteLength,i[1]),this.timeRange[t].isLoading=!0,e.next=27,this.startLoad([this.bufferLoaded.byteLength,i[1]],t);case 27:e.next=34;break;case 29:if(this._metaLoading&&!(i[0]>=this.CHUNK_SIZE)||this.timeRange[t].isLoading){e.next=34;break}return this.timeRange[t].isLoading=!0,this.log("[mp4.loadFragment],ready to load all data ,segmentIdx, ",t,",range >>> ",JSON.stringify(i)),e.next=34,this.startLoad(i,t);case 34:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"startLoad",value:(i=f(y().mark((function e(t,i){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.MP4Loader.loadData(t,this.MP4Loader.cache,{index:i,onProgress:this.onprogressDataArrive,onProcessMinLen:this.options.onProcessMinLen});case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("[MP4] trigger errorHandler getMetaInfo",null===e.t0||void 0===e.t0?void 0:e.t0.message),this.loadError(e.t0,"loadFragment",{range:t,fragIndex:i});case 9:case"end":return e.stop()}}),e,this,[[0,5]])}))),function(e,t){return i.apply(this,arguments)})},{key:"loadError",value:function(e,t,i){var n;!e.response&&(e.response={}),e.isTimeout?e.response.status="timeout":null!=e&&null!==(n=e.response)&&void 0!==n&&n.status||(e.response.status="networkError"),this.errorHandler(e,t,i)}},{key:"cancelLoading",value:(t=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.MP4Loader;case 2:if(e.t0=e.sent,!e.t0){e.next=5;break}this.MP4Loader.cancel();case 5:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"update",value:function(e){this.url=e}},{key:"checkCodecH265",value:function(){return this.meta&&(this.meta.videoCodec.indexOf("hvc1")>-1||this.meta.videoCodec.indexOf("hev1")>-1)}},{key:"destroy",value:function(){this.hasDestroyed||(this.resetTansmuxer(),this.transmuxerWorkerControl&&this.transmuxerWorkerControl.destroy(),this._isPending=!1,this._metaLoading=!1,this.bufferLoadedPos=0,this.bufferLoaded=new Uint8Array(0),this.MP4Loader&&(this.MP4Loader.cancel(),this.MP4Loader.destroy()),this.hasDestroyed=!0)}},{key:"resetTansmuxer",value:function(){this.MP4Demuxer&&this.MP4Demuxer.reset(),this.MP4Demuxer=null,this.FMP4Remuxer&&this.FMP4Remuxer.reset(),this.FMP4Remuxer=null,this.transmuxerWorkerControl&&this.transmuxerWorkerControl.reset()}}],[{key:"getDefaultConfig",value:function(){return{segmentDuration:5,onProcessMinLen:1024,chunkSize:8e5,retryCount:3,retryDelay:1e3,timeout:3e3,enableWorker:!1,playerId:"",vid:"",ext:{},preferMMS:!1}}}]),u}(J);function zn(e){if(e.keyframe)return e}var Un=function(){function e(t){X(this,e),this.onTick_=t,this.cancelPending_=null}return v(e,[{key:"tickAfter",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.stop();var n=!0,s=null;this.cancelPending_=function(){window.clearTimeout(s),n=!1};var a=function(){n&&(t.onTick_(),i&&i())};return s=window.setTimeout(a,1e3*e),this}},{key:"tickEvery",value:function(e){var t=this;this.tickAfter(e,(function(){t.tickEvery(e)}))}},{key:"stop",value:function(){this.cancelPending_&&(this.cancelPending_(),this.cancelPending_=null)}}]),e}(),jn=function(){function e(){var t,i;X(this,e);var n=new Promise((function(e,n){t=e,i=n}));return n.resolve=function(e){t(e),n.state="fulfilled"},n.reject=function(e){i(e),n.state="rejected",n.isBreak="DESTROYED"===e},n.state="pending",n}return v(e,[{key:"resolve",value:function(e){}},{key:"reject",value:function(e){}}]),e}(),Jn=null,Pn=null,Dn=null,En=null,Bn=function(e){G(a,e);var t,i,n,s=M(a);function a(e){var t;return X(this,a),L(R(t=s.call(this,e)),"_onMp4DataCallBack",(function(){t._isMseInit&&t._onTimeUpdate()})),L(R(t),"_onMp4MetaReady",(function(e){var i=R(t).config,n=t.mp4.checkCodecH265();try{if(n&&!t.config.supportHevc){var s="browser not support HEVC",a=new m.Errors(t.player,{errorType:"runtime",errorTypeCode:pn.runtime,errorCode:hn.h265Error,errorMessage:s,vid:i.vid,mediaError:{code:hn.h265Error,message:s}});t._errorHandler(a)}else t._initMse(e),t._initPromise.resolve()}catch(l){var r=new m.Errors(t.player,{errorType:"runtime",errorTypeCode:pn.runtime,errorCode:hn.mse,errorMessage:null==l?void 0:l.message,vid:i.vid,mediaError:{code:hn.other1,message:null==l?void 0:l.message}});return void t._errorHandler(r)}t._loadData()})),L(R(t),"_onMp4Error",(function(e){var i=t.playerConfig.vid;console.error("[Index] _onMp4Error",i,e),t._errorHandler(e)})),L(R(t),"_loadDataSuccess",(function(e){if(!t.isDestroy&&t.mse){t.log("[loadFragment] _loadDataSuccess ",JSON.stringify(e.context.range),",dataLen,",e.buffer?e.buffer.byteLength:0,e.state);try{e.initSeg&&(t._appendInitSeg(e.initSeg),(!e.buffer||e.buffer.byteLength<1)&&(t.log("no data, must load data"),t._onTimeUpdate()));var i=e.buffer,n=e.state,s=e.context;if(t.mse&&n&&(!i||i.byteLength<=0)&&s.fragIndex===t.mp4.timeRange.length-1){var a=t.player.buffered;a&&a.length>0&&(t.bufferEndTime=a.end(a.length-1)),t._isEnded(),t.log("loaded ended !!!==>>>",JSON.stringify(s.range),", fragIndex,",s.fragIndex,", bufferEndTime,",t.bufferEndTime,",meta_duration,",t.mp4.meta.duration)}if(t.mse&&n&&s.fragIndex===t.mp4.timeRange.length-1&&(!i||i.byteLength<=0)){var r=t.player.buffered;r&&r.length>0&&(t.bufferEndTime=r.end(r.length-1)),t._isEnded(),t.log("load ended !!!==>>>",t.playerConfig.vid,JSON.stringify(s.range),", fragIndex,",s.fragIndex,", bufferEndTime,",t.bufferEndTime,",meta_duration,",t.mp4.meta.duration)}i&&t.mse&&i&&i.byteLength>0&&t._appendBuffer(Ji.VIDEO,i,s,n)}catch(o){t.log("appendBuffer error",o);var l=new m.Errors(t.player,{errorType:"runtime",errorTypeCode:pn.runtime,errorCode:hn.mse,vid:t.player.config.vid,errorMessage:o.message,mediaError:{code:hn.mse,message:o.message}});t._errorHandler(l)}null!=e&&e.state&&t._onTimeUpdate()}})),L(R(t),"_onWaiting",(function(){var e=R(t),i=e.player,n=e.config;clearTimeout(t._waitInBufferTimer),t._waitInBufferTimer=null;var s=i.currentTime,a=i.bufferedPoint;a.end>0&&a.end-i.currentTime>=2&&t._waitAdjustTimeCnt<n.waitJampBufferMaxCnt&&(t._waitInBufferTimer=setTimeout((function(){t._waitAdjustTimeCnt++,i.currentTime=i.currentTime+.5,t.log("[waitInBufferTimeout], waitAdjustTimeCnt,",t._waitAdjustTimeCnt,",curtime,",s,Zn.nowTime())}),n.waitingInBufferTimeOut))})),L(R(t),"_onSeeking",f(y().mark((function e(){var i,n,s,a,r,l,o,d,c,u,m;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=R(t),n=i.player,s=i.mp4,a=n.currentTime,t.log("[seekTime], curTime,",a,",buffer,",n.buffered2.bufferedList),s&&s.meta){e.next=5;break}return e.abrupt("return");case 5:if(t.endofstream=!1,s.bufferLoadedPos=-1,s._metaLoading=!1,r=n.bufferedPoint,l=!1,o=0,!(r.end>0)){e.next=25;break}if(l=!0,!(s.meta.duration-r.end<.5)){e.next=17;break}return t._startProgress(),t.log("[seeking in buffered range], buffer end,",r.end,", duration,",s.meta.duration),e.abrupt("return");case 17:if(o=s.getFragmentIdx(r.end),t._curLoadSegmentIdx!==o){e.next=22;break}return t._startProgress(),t.log("[seeking in buffered range], seek fragIndex is current load segmentIdx",o),e.abrupt("return");case 22:s.seekTime=r.end,o<0&&(o=t._curLoadSegmentIdx),t.log("[seeking in buffered range], seekTime ",a,",bufferRange,",r.start,"-",r.end,", fragIndex,",o);case 25:return l||(s.seekTime=a,(o=s.getFragmentIdx(a))<0&&(o=t._curLoadSegmentIdx),t.log("[seekTime out buffer range], curTime,",a,", Idx,",o),d=R(t),(c=d.mse)&&c.isFull()&&(u=n.buffered2.bufferedList,m=u[u.length-1],c.clearOpQueues(Ji.VIDEO),t._checkRemoveSourceBuffer([m.start,m.end],n.currentTime,!0,!0))),e.next=28,s.cancelLoading();case 28:s.resetFragmentLoadState(o),t._curLoadSegmentIdx=o,t._onTimeUpdate(),t._startProgress(),t._isEnded();case 33:case"end":return e.stop()}}),e)})))),L(R(t),"changeDefineCanPlay",(function(e,i,n,s){var a=R(t).player;a.ended?a.currentTime=0:(t.log("[oldChangeDefinition],this._changeDefState,",t._changeDefState),a.currentTime=t._changeDefState?t._changeDefState.currentTime:e,(t._changeDefState?t._changeDefState.paused:i)?a.pause():a.play(),t._changeDefState=null,a.emit(m.Events.AFTER_DEFINITION_CHANGE,{from:n,to:s}))})),L(R(t),"changeDefinition",function(){var e=f(y().mark((function e(i,n){var s,a,r,l,o,d,c;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=R(t),a=s.player,r=s.config,l=s.mp4,n||(n=a.curDefinition),t._MSEError=!1,!r.witchBitRateWay){e.next=6;break}return t.oldChangeDefinition(i,n),e.abrupt("return");case 6:if(a.emit(m.Events.DEFINITION_CHANGE,{from:n,to:i}),o=a.currentTime,(d=l.getFragmentIdx(o))<0&&(d=t._curLoadSegmentIdx),t.log("switchBitrate:point,fragIndex,",d,",startTime,",l.timeRange[d].startTime,",currentTime,",a.currentTime),!l){e.next=16;break}return t.mp4.changeBitRateTime=o,e.next=15,l.cancelLoading();case 15:l._metaLoading&&(l._metaLoading=!1);case 16:return t._removeBuffeEndTime=l.timeRange[d].startTime,t._isChangeDefinition=!0,(c=a.getBufferedRange(a.buffered))[1]>0&&c[1]-a.currentTime>5&&(t.mse.clearOpQueues(Ji.VIDEO),t.mse.remove(Ji.VIDEO,a.currentTime+5,c[1])),t.log("switchBitrate: resetFragmentLoadState,",d),l.resetFragmentLoadState(d),t._curLoadSegmentIdx=d,e.next=25,t.mp4.changeBitRate(i);case 25:t._onTimeUpdate(),a.emit("RESOLUTION_UPDATE",i);case 27:case"end":return e.stop()}}),e)})));return function(t,i){return e.apply(this,arguments)}}()),L(R(t),"_replayHook",(function(){var e;return null===(e=t.player)||void 0===e||e.play(),!1})),L(R(t),"_retryHook",(function(){return t.beforePlayerInit(),!1})),t.mp4=null,t.mse=null,t._waitAdjustTimeCnt=0,t._lastCheckTime=Zn.nowTime(),t._removeBuffeEndTime=0,t._pendingPromises=[],t}return v(a,[{key:"afterCreate",value:function(){var e=this;window.__mp4player=this;try{m.BasePlugin.defineGetterOrSetter(this.player,{__url:{get:function(){try{return e.mse?e.mse.url:e.config.url}catch(t){return null}}}})}catch(t){}this._proxyPlayer()}},{key:"attachEvents",value:function(){this.off(m.Events.SEEKING,this._onSeeking),this.on(m.Events.SEEKING,this._onSeeking),this.on(m.Events.WAITING,this._onWaiting),this.off(m.Events.URL_CHANGE,this.switchURL),this.on(m.Events.URL_CHANGE,this.switchURL)}},{key:"detachEvents",value:function(){this.off(m.Events.SEEKING,this._onSeeking),this.off(m.Events.WAITING,this._onWaiting),this.off(m.Events.URL_CHANGE,this.switchURL)}},{key:"_proxyPlayer",value:function(){var e=this;"function"==typeof this.player.playNext&&(Jn=this.player.playNext),this.player.playNext=function(){e.playNext.apply(e,arguments)},Pn=this.player._startInit,En=this.player.switchURL,Dn=this.player.changeDefinition,this.player._startInit=this._playerStartInit.bind(this),this.player.switchURL=this.switchURL.bind(this),this.player.changeDefinition=this.changeDefinition.bind(this),this.player.removeHooks("replay",this._replayHook),this.player.removeHooks("retry",this._retryHook)}},{key:"_playerStartInit",value:function(e){var t=this,i=this.config,n=this.playerConfig;void 0===i.supportHevc&&null!==m.Sniffer&&void 0!==m.Sniffer&&m.Sniffer.isHevcSupported&&m.Sniffer.isHevcSupported()&&(i.supportHevc=!0);var s=this.initMp4();this._initPromise=s,this._addPendingPromise(this._initPromise),this.mse&&"String"===m.Util.typeOf(e)&&/^blob/.test(e)&&e!==this.mse.url&&(e=n.url),s.then((function(){t.mse&&(e=t.mse.url),t.attachEvents(),t._startProgress()})).catch((function(i){var n=!!t._initPromise&&t._initPromise.isBreak;if(!t.isDestroy&&!n){var s=i;s.errorCode||((s=new m.Errors(t.player,{errorType:pn.RUNTIME,errorCode:(null==i?void 0:i.errorCode)||hn.other,vid:t.playerConfig.vid,errorMessage:(null==i?void 0:i.errorMessage)||(null==i?void 0:i.message),mediaError:{code:(null==i?void 0:i.httpCode)||hn.other,message:(null==i?void 0:i.errorMessage)||(null==i?void 0:i.message),errorType:null==i?void 0:i.errorType}})).url=e),t.useVideoLoad=!0,t.player.vtype="MP4_1",t.player.emit("playCatch",t.player.vtype,s)}})).finally((function(){if(t._initPromise){var i=t._initPromise.isBreak;i||(t._initPromise&&t._removePendingPromise(t._initPromise),t._initPromise=null,!t.isDestroy&&!i&&Pn.call(t.player,e))}}))}},{key:"initMp4",value:function(){var e=this,t=this.player;t.config.vid||(t.config.vid=Date.now());var i=new jn;return this.mp4&&(this.mp4.off(Cn,this._onMp4MetaReady),this.mp4.off(In,this._onMp4Error),this.mp4.off(Hn,this._onMp4DataCallBack),this.mp4.destroy(),this.mp4=null),this.mp4=new Fn(t.config.url,p(p({},this.config),{},{vid:t.config.vid})),this.mp4.on(Cn,this._onMp4MetaReady),this.mp4.on(In,this._onMp4Error),this.mp4.on(Hn,this._onMp4DataCallBack),this.mp4.on(Nn,(function(t){e._curLoadSegmentIdx=t,e.log("[update curLoadSegmentIdx]",t)})),this.mp4.init(),i}},{key:"setConfig",value:function(e){this.config=Object.assign(this.config,e)}},{key:"playNext",value:function(e){var t=this.player;this._defInited=!1,t.resetState(),t._currentTime=0,t._duration=0,t.isPlaying=!1,this._MSEError=!1,t.pause(),this._reset(),t.setConfig(e),this.log("[Index] playNext",e),t.play(),this.emit("playnext")}},{key:"checkDegrade",value:function(e){return!this.config.closeDowngrade||"networkError"===e.httpCode}},{key:"_errorHandler",value:function(e){var t,i=this.player,n=this.config;if(i&&!this.useVideoLoad){!e.url&&null!==(t=this.mp4)&&void 0!==t&&t.url&&(e.url=this.mp4.url);var s=i.paused;if(console.error("final error !!!!, ",n.vid,e),this.player.vtype="MP4_2",this.player.emit("playCatch",this.player.vtype,e),this.checkDegrade(e))this._initPromise?this._removeAndRejectInitPromise(e):this._startDegradedPlayback(e,s);else{this.player.pause(),this._reset();var a=i.currentTime;this.destroyMSE(),i.currentTime=a,this.emit("error",e)}}}},{key:"_startDegradedPlayback",value:function(e,t){var i=this;console.log(">>>_startDegradedPlayback");var n=this.player,s=this.playerConfig;this.useVideoLoad=!0,this.destroyMSE(),this._currentTime=n.currentTime,this.__onmetadataHandle=function(){i._currentTime&&(n.currentTime=i._currentTime),t?i.player.pause():i.player.play(),n.media.removeEventListener("loadedmetadata",i.__onmetadataHandle),i.__onmetadataHandle=null},n.media.addEventListener("loadedmetadata",this.__onmetadataHandle);var a=s.url;n.media.src=a}},{key:"_addPendingPromise",value:function(e){this._pendingPromises.push(e)}},{key:"_removePendingPromise",value:function(e){var t=this._pendingPromises.indexOf(e);t>-1&&this._pendingPromises.splice(t,1)}},{key:"_cancelPendingPromises",value:function(){this._pendingPromises.length>0&&this._pendingPromises.forEach((function(e){e.reject("DESTROYED")})),this._pendingPromises=[]}},{key:"_removeAndRejectInitPromise",value:function(e){this._initPromise&&(this._removePendingPromise(this._initPromise),this._initPromise.reject(e))}},{key:"_initMse",value:(n=f(y().mark((function e(t){var i,n,s,a,r=this;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.mse){e.next=4;break}return e.next=3,this.mse.unbindMedia();case 3:this.mse=null;case 4:i=!!t.videoCodec,n=!!t.audioCodec,s=i&&n?'video/mp4; codecs="'.concat(t.videoCodec,', mp4a.40.5"'):i?'video/mp4; codecs="'.concat(t.videoCodec,'"'):'video/mp4; codecs="mp4a.40.5"',a=L({},Ji.VIDEO,{mimeType:"video/mp4",codec:s}),this.mse=new Ji(null,{preferMMS:this.config.preferMMS}),this.mse.bindMedia(this.player.video).then((function(){var e=Object.keys(a);try{for(var t=0;t<e.length;t++){var i=e[t];r.mse.createSource(i,a[i].codec)}}catch(n){console.error("MSE error: ",n),r._errorHandler(n)}r._isMseInit=!0,r._onTimeUpdate()}));case 11:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"destroyMSE",value:(i=f(y().mark((function e(){var t;return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null===(t=this.mse)||void 0===t?void 0:t.unbindMedia();case 2:this.mse=null;case 3:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"_onTimeUpdate",value:function(){var e=this,t=this.mse,i=this.mp4,n=this.player,s=this.config;if(i){var a=i.timeRange,r=n.getBufferedRange(n.buffered2);if(t&&i&&i.canDownload){Zn.nowTime()-this._lastCheckTime>1e3&&(this._lastCheckTime=Zn.nowTime(),this._loadStuckCheck(),this._checkRemoveSourceBuffer(r,n.currentTime));var l=n.paused?n.currentTime+s.minBufferLength:n.currentTime+s.maxBufferLength;r[1]-l<0&&a.every((function(t,i){return!!t.downloaded||(!e._isChangeDefinition&&t.endTime-t.startTime>1&&e._isInBuffer(t)?(t.downloaded=!0,t.isLoading=!0,e.log("onTimeUpdate, ".concat(i," download segment, has buffer"),t.startTime,t.endTime),!0):void(t.startTime-n.currentTime<s.maxBufferLength&&(e._curLoadSegmentIdx=i,e.log("[onTimeUpdate],load index==>>>, ",i,",IdxTimeRange, ",t.startTime,"-",t.endTime,",buffEnd, ",r[1],",playCurTime,",n.currentTime,", bufferLen,",r[1]-n.currentTime,",bufferRangeList,",e.player.buffered2?e.player.buffered2.bufferedList:null),e._loadData())))})),this._isEnded()}this.checkRemoveOldBitrateBuffer()}}},{key:"checkRemoveOldBitrateBuffer",value:function(){var e=this.mse,t=this.player;e&&this._removeBuffeEndTime>0&&t.currentTime>this._removeBuffeEndTime+1&&(this.log("remove old bitrate buffer",this._removeBuffeEndTime),e.remove(Ji.VIDEO,0,this._removeBuffeEndTime-1),this._removeBuffeEndTime=0)}},{key:"_isInBuffer",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=!1,n=this.player.video.buffered,s=0;s<n.length;s++){var a=n.start(s)-t,r=n.end(s)+t;if(a<=e.startTime&&e.endTime<=r){i=!0;break}}return i}},{key:"_loadData",value:(t=f(y().mark((function e(){return y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.mp4&&this._isMseInit){e.next=3;break}return this.log("loadData, player.mp4 null",this._isMseInit),e.abrupt("return");case 3:return e.prev=3,e.next=6,this.mp4.load(this._curLoadSegmentIdx,this._loadDataSuccess);case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error("[Index] _loadData error",this.playerConfig.vid,e.t0);case 11:case"end":return e.stop()}}),e,this,[[3,8]])}))),function(){return t.apply(this,arguments)})},{key:"_appendInitSeg",value:function(e){var t=this;this.mp4&&this.mse&&this.mse.append(Ji.VIDEO,e,{vid:this.playerConfig.vid,range:null,dataLen:e.byteLength,isinit:!0}).then((function(e){t.log("appendInitSeg end ==>>>",null==e?void 0:e.context," costTime,",null==e?void 0:e.costtime)}))}},{key:"_appendBuffer",value:function(e,t){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=arguments.length>3?arguments[3]:void 0,a=this.mse,r=this.config;a.append(e,t,{vid:r.vid,fragIndex:n.fragIndex,range:n.range,dataLen:t.byteLength,state:s}).then((function(e){if(i.log("player appendBuffer end ==>>>",e.context?e.context:null,", costTime,",e.costtime,", opt,",e.name,",bufferRange,",i.player.getBufferedRange()),i.mse&&n.state&&n.fragIndex===i.mp4.timeRange.length-1){var t=i.player.buffered;t&&t.length>0&&(i.bufferEndTime=t.end(t.length-1)),i._isEnded(),i.log("loaded ended !!!==>>>",n.range,", fragIndex,",n.fragIndex,", bufferEndTime,",i.bufferEndTime,",meta_duration,",i.mp4.meta.duration)}})).catch((function(e){if(console.log("[MSE error]",e),e&&null!=a&&a.isFull()){var t=i.player.getBufferedRange(i.player.buffered2);i._checkRemoveSourceBuffer(t,i.player.currentTime,!0)}}))}},{key:"_checkRemoveSourceBuffer",value:function(e,t,i){var n=this,s=this.mse,a=this.mp4,r=this.player;if(s&&a&&r&&(i&&(clearTimeout(this._removeBufferTimer),this._removeBufferTimer=null),e||(e=r.getBufferedRange(r.buffered2)),t||(t=r.currentTime),!(!i&&Zn.nowTime()-this._checkRemoveBufferLastTime<=this.config.removeBufferLen||this.endofstream)&&(this._checkRemoveBufferLastTime=Zn.nowTime(),e&&e[0]>=0&&(t-e[0]>this.config.removeBufferLen||s.isFull())))){var l=e[1],o=a.getFragmentIdx(l);if(o>=0&&a.timeRange[o].startTime<t){var d=Math.floor(Math.min(a.timeRange[o].startTime,e[1]));e[0]<d?(this.log("[checkremoveSourceBuffer], remove range==>>>",e[0],d),s.remove(Ji.VIDEO,e[0],d)):s.isFull()&&!this._removeBufferTimer&&(this._removeBufferTimer=setTimeout((function(){n._checkRemoveSourceBuffer(null,null,!0)}),1e4))}}}},{key:"_isEnded",value:function(){var e=this.player,t=this.mp4,i=e.bufferedPoint,n=i?i.end:0;return!this.endofstream&&this.mse&&t.meta.duration-e.currentTime<.5&&(this.log("[check player isEnded],deal mse.endOfStream, currentTime,",e.currentTime,", bufferend,",n,", duration,",t.meta.duration),this.endofstream=!0,this.mse.endOfStream()),!!(t&&t.meta&&t.meta.duration-e.currentTime<.5)&&(this._stopProgress(),this.log("[check player isEnded],stopProgress and endOfStream,currentTime, ",e.currentTime,", bufferend,",n,", duration,",t.meta.duration),this.mse&&this.mse.endOfStream(),!0)}},{key:"switchURL",value:function(e){this.changeDefinition(e)}},{key:"oldChangeDefinition",value:function(e,t){var i=this,n=this.config,s=this.player;this.log("[oldChangeDefinition],currentTime,",s.currentTime,",from,",t,",to,",e);var a=s.currentTime,r=s.paused;this._changeDefState||(this._changeDefState={currentTime:a,paused:r},this.log("[oldChangeDefinition],currentTime,",s.currentTime,",pause,",r)),s.config.url=e.url,n.focusUserDefinition=!0,s.currentTime=0,s.pause(),this._reset(),this._isMseInit=!1,this._changeDefineCanPlay&&s.off("canplay",this._changeDefineCanPlay),this._changeDefineCanPlay=function(){i.changeDefineCanPlay(a,r,t,e),i._changeDefineCanPlay=null},s.once("canplay",this._changeDefineCanPlay),this.player.video.load(),this.initMp4()}},{key:"_loadStuckCheck",value:function(){var e=this,t=this.config,i=this.player;t.disableBufferBreakCheck||(i.currentTime-(this._lastCurrentTime||0)>.1||i.paused?1!==this._bufferBreakFlag&&2!==this._bufferBreakFlag||(this.log("视频没有卡死,重置卡死标记"),this._bufferBreakFlag=0,clearTimeout(this._bufferBreakTimer),this._bufferBreakFlag=null):this._bufferBreakFlag||(this._bufferBreakFlag=1,this.log("卡死计时开始! 持续".concat(t.waitingTimeOut,"毫秒则确认卡死")),this._bufferBreakTimer=setTimeout((function(){e.isDestroy||(1===e._bufferBreakFlag&&(e._bufferBreakFlag=2,e.log("确认卡死!!!"),e._errorHandler(new m.Errors(e.player,{errorType:"runtime",errorTypeCode:pn.runtime,errorCode:hn.waitTimeout,errorMessage:"wait_timeout",vid:t.vid}))),e._bufferBreakTimer=null)}),t.waitingTimeOut)),this._lastCurrentTime=i.currentTime)}},{key:"isDestroy",get:function(){return!this.player}},{key:"_stopProgress",value:function(){this._hasStartProgress=!1,this._requestTimer&&(this._requestTimer.stop(),this._requestTimer=null),this._bufferBreakTimer&&(clearTimeout(this._bufferBreakTimer),this._bufferBreakTimer=null,this._bufferBreakFlag=void 0)}},{key:"_startProgress",value:function(){var e=this;this._hasStartProgress||(this._stopProgress(),this._requestTimer=new Un((function(){e._requestTimer&&e._onTimeUpdate()})),this._requestTimer.tickEvery(this.config.tickInSeconds),this._hasStartProgress=!0)}},{key:"log",value:function(e){for(var t=this.playerConfig,i=t&&t.vid?"[Index]".concat(t.vid," ").concat(e):"[Index] ".concat(e),n=arguments.length,s=new Array(n>1?n-1:0),a=1;a<n;a++)s[a-1]=arguments[a];Rn.apply(void 0,[i].concat(s))}},{key:"_reset",value:function(){this._isMseInit=!1,this.endofstream=!1,this._curLoadSegmentIdx=0,this._removeBuffeEndTime=0,this._isChangeDefinition=!1,this._stopProgress(),this.mp4&&(this.mp4.off(Cn,this._onMp4MetaReady),this.mp4.off(In,this._onMp4Error),this.mp4.off(Hn,this._onMp4DataCallBack),this.mp4.destroy(),this.mp4=null),this.mse&&(this.mse.unbindMedia(),this.mse=null),this._unloadVideo()}},{key:"_unloadVideo",value:function(){var e=this.player;try{this.log("unloadVideo src ".concat(e.video.src)),e.video&&e.video.src&&(e.video.removeAttribute("src"),e.video.load())}catch(t){this.log("unloadVideo error",t)}}},{key:"destroy",value:function(){var e=this.player;e.removeHooks("replay",this._replayHook),e.removeHooks("retry",this._retryHook),this.detachEvents(),this._reset(),this.player.playNext=Jn,this.player._startInit=Pn,this.player.changeDefinition=Dn,this.player.switchURL=En,this._bufferBreakTimer&&clearInterval(this._bufferBreakTimer),this._removeBufferTimer&&(clearTimeout(this._removeBufferTimer),this._removeBufferTimer=null),this._waitInBufferTimer&&(clearTimeout(this._waitInBufferTimer),this._waitInBufferTimer=null)}}],[{key:"pluginName",get:function(){return"mp4"}},{key:"defaultConfig",get:function(){return{maxBufferLength:40,minBufferLength:5,disableBufferBreakCheck:!1,waitingTimeOut:15e3,waitingInBufferTimeOut:5e3,waitJampBufferMaxCnt:3,tickInSeconds:.1,reqOptions:null,closeDowngrade:!1,preferMMS:!1}}},{key:"version",get:function(){return"3.0.25-alpha.1"}}]),a}(m.BasePlugin);return L(Bn,"isStreamingPlugin",!0),Bn}));
|
|
2
2
|
//# sourceMappingURL=index.min.js.map
|