xgplayer-mp4 3.0.14 → 3.0.15-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.array.join.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.array.join.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,r,a,l,o,d,c,u,h){"use strict";function m(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?m(Object(i),!0).forEach((function(t){W(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):m(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function Z(){Z=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:{},r=s.iterator||"@@iterator",a=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 r=t&&t.prototype instanceof h?t:h,a=Object.create(r.prototype),l=new g(s||[]);return n(a,"_invoke",{value:W(e,i,l)}),a}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 h(){}function m(){}function p(){}var b={};o(b,r,(function(){return this}));var y=Object.getPrototypeOf,f=y&&y(y(V([])));f&&f!==t&&i.call(f,r)&&(b=f);var X=p.prototype=h.prototype=Object.create(b);function L(e){["next","throw","return"].forEach((function(t){o(e,t,(function(e){return this._invoke(t,e)}))}))}function G(e,t){function s(n,r,a,l){var o=c(e[n],e,r);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,a,l)}),(function(e){s("throw",e,a,l)})):t.resolve(u).then((function(e){d.value=e,a(d)}),(function(e){return s("throw",e,a,l)}))}l(o.arg)}var r;n(this,"_invoke",{value:function(e,i){function n(){return new t((function(t,n){s(e,i,t,n)}))}return r=r?r.then(n,n):n()}})}function W(e,t,i){var n="suspendedStart";return function(s,r){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===s)throw r;return{value:void 0,done:!0}}for(i.method=s,i.arg=r;;){var a=i.delegate;if(a){var l=v(a,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 r=s.arg;return r?r.done?(t[e.resultName]=r.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function S(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 x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function g(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function V(e){if(e){var t=e[r];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 m.prototype=p,n(X,"constructor",{value:p,configurable:!0}),n(p,"constructor",{value:m,configurable:!0}),m.displayName=o(p,l,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===m||"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(G.prototype),o(G.prototype,a,(function(){return this})),e.AsyncIterator=G,e.async=function(t,i,n,s,r){void 0===r&&(r=Promise);var a=new G(d(t,i,n,s),r);return e.isGeneratorFunction(i)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},L(X),o(X,l,"Generator"),o(X,r,(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(x),!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 a.type="throw",a.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 r=this.tryEntries[s],a=r.completion;if("root"===r.tryLoc)return n("end");if(r.tryLoc<=this.prev){var l=i.call(r,"catchLoc"),o=i.call(r,"finallyLoc");if(l&&o){if(this.prev<r.catchLoc)return n(r.catchLoc,!0);if(this.prev<r.finallyLoc)return n(r.finallyLoc)}else if(l){if(this.prev<r.catchLoc)return n(r.catchLoc,!0)}else{if(!o)throw new Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return n(r.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 r=s;break}}r&&("break"===e||"continue"===e)&&r.tryLoc<=t&&t<=r.finallyLoc&&(r=null);var a=r?r.completion:{};return a.type=e,a.arg=t,r?(this.method="next",this.next=r.finallyLoc,u):this.complete(a)},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),x(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;x(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 y(e,t,i,n,s,r,a){try{var l=e[r](a),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 r=e.apply(t,i);function a(e){y(r,n,s,a,l,"next",e)}function l(e){y(r,n,s,a,l,"throw",e)}a(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,z(n.key),n)}}function G(e,t,i){return t&&L(e.prototype,t),i&&L(e,i),Object.defineProperty(e,"prototype",{writable:!1}),e}function W(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 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&&x(e,t)}function S(e){return(S=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function x(e,t){return(x=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&&x(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,S(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),x(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={},r=Object.keys(e);for(n=0;n<r.length;n++)i=r[n],t.indexOf(i)>=0||(s[i]=e[i]);return s}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)i=r[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s}function T(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function R(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 T(e)}function w(e){var t=g();return function(){var i,n=S(e);if(t){var s=S(this).constructor;i=Reflect.construct(n,arguments,s)}else i=n.apply(this,arguments);return R(this,i)}}function M(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=S(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,r,a,l=[],o=!0,d=!1;try{if(r=(i=i.call(e)).next,0===t){if(Object(i)!==i)return;o=!1}else for(;!(o=(n=r.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&&(a=i.return(),Object(a)!==a))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){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 r(e,t,n,r,a){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new s(n,r||e,a),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 a(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,r=n.length,a=new Array(r);s<r;s++)a[s]=n[s].fn;return a},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,r,a){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,r),!0;case 6:return c.fn.call(c.context,t,n,s,r,a),!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 h,m=c.length;for(d=0;d<m;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(h=1,o=new Array(u-1);h<u;h++)o[h-1]=arguments[h];c[d].fn.apply(c[d].context,o)}}return!0},l.prototype.on=function(e,t,i){return r(this,e,t,i,!1)},l.prototype.once=function(e,t,i){return r(this,e,t,i,!0)},l.prototype.removeListener=function(e,t,n,s){var r=i?i+e:e;if(!this._events[r])return this;if(!t)return a(this,r),this;var l=this._events[r];if(l.fn)l.fn!==t||s&&!l.once||n&&l.context!==n||a(this,r);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[r]=1===d.length?d[0]:d:a(this,r)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=i?i+e:e,this._events[t]&&a(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 F,J=U.exports,j={};Object.defineProperty(j,"__esModule",{value:!0}),j.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 r=!0,a=!1,l=void 0;try{for(var o,d=n[Symbol.iterator]();!(r=(o=d.next()).done);r=!0){var c=o.value;t+=c.length}}catch(X){a=!0,l=X}finally{try{!r&&d.return&&d.return()}finally{if(a)throw l}}var u=new e(t),h=0,m=!0,p=!1,Z=void 0;try{for(var b,y=n[Symbol.iterator]();!(m=(b=y.next()).done);m=!0){var f=b.value;u.set(f,h),h+=f.length}}catch(X){p=!0,Z=X}finally{try{!m&&y.return&&y.return()}finally{if(p)throw Z}}return u};var P=((F=j)&&F.__esModule?F:{default:F}).default,E="video",D="audio",B="metadata",_="avc",Q="hevc",O="aac",A="g7110a",q="g7110m",$="LARGE_AV_SHIFT",ee="LARGE_VIDEO_GAP",te="LARGE_VIDEO_GAP_BETWEEN_CHUNK",ie="LARGE_AUDIO_GAP",ne="AUDIO_FILLED",se="AUDIO_DROPPED",re=function(){function e(){X(this,e),W(this,"id",1),W(this,"type",E),W(this,"codecType",_),W(this,"pid",-1),W(this,"hvcC",void 0),W(this,"codec",""),W(this,"timescale",0),W(this,"formatTimescale",0),W(this,"sequenceNumber",0),W(this,"baseMediaDecodeTime",0),W(this,"baseDts",0),W(this,"duration",0),W(this,"warnings",[]),W(this,"samples",[]),W(this,"pps",[]),W(this,"sps",[]),W(this,"vps",[]),W(this,"fpsNum",0),W(this,"fpsDen",0),W(this,"sarRatio",[]),W(this,"width",0),W(this,"height",0),W(this,"nalUnitSize",4),W(this,"present",!1),W(this,"isVideoEncryption",!1),W(this,"isAudioEncryption",!1),W(this,"isVideo",!0),W(this,"kid",null),W(this,"pssh",null),W(this,"ext",void 0)}return G(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:"exist",value:function(){return!!(this.pps.length&&this.sps.length&&this.codec)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isVideoEncryption}}]),e}(),ae=function(){function e(){X(this,e),W(this,"id",2),W(this,"type",D),W(this,"codecType",O),W(this,"pid",-1),W(this,"codec",""),W(this,"sequenceNumber",0),W(this,"sampleDuration",0),W(this,"timescale",0),W(this,"formatTimescale",0),W(this,"baseMediaDecodeTime",0),W(this,"duration",0),W(this,"warnings",[]),W(this,"samples",[]),W(this,"baseDts",0),W(this,"sampleSize",16),W(this,"sampleRate",0),W(this,"channelCount",0),W(this,"objectType",0),W(this,"sampleRateIndex",0),W(this,"config",[]),W(this,"present",!1),W(this,"isVideoEncryption",!1),W(this,"isAudioEncryption",!1),W(this,"kid",null),W(this,"ext",void 0)}return G(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.codecType===O)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isAudioEncryption}}]),e}(),le=function(){function e(t,i,n){X(this,e),W(this,"flag",{}),W(this,"keyframe",!1),W(this,"gopId",0),W(this,"duration",0),W(this,"size",0),W(this,"units",[]),W(this,"chromaFormat",420),this.originPts=this.pts=t,this.originDts=this.dts=i,n&&(this.units=n)}return G(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}(),oe=G((function e(t,i,n,s){X(this,e),W(this,"duration",1024),W(this,"flag",{dependsOn:2,isNonSyncSample:0}),W(this,"keyframe",!0),this.originPts=this.pts=this.dts=t,this.data=i,this.size=i.byteLength,this.sampleOffset=s,n&&(this.duration=n)})),de=G((function e(t,i){X(this,e),W(this,"time",0),this.data=t,this.originPts=this.pts=i})),ce=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i)}(de),ue=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i)}(de),he=function(){function e(){X(this,e),W(this,"id",3),W(this,"type",B),W(this,"timescale",0),W(this,"flvScriptSamples",[]),W(this,"seiSamples",[])}return G(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}(),me=function(){function e(t){if(X(this,e),W(this,"_bytesAvailable",void 0),W(this,"_bitsAvailable",0),W(this,"_word",0),!t)throw new Error("ExpGolomb data params is required");this._data=t,this._bytesAvailable=t.byteLength,this._bytesAvailable&&this._loadWord()}return G(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}(),pe=function(){function e(t){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]")}return G(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}();W(pe,"disabled",!0);var Ze=function(){function e(){X(this,e)}return G(e,null,[{key:"decode",value:function(t){for(var i=[],n=t,s=0,r=t.length;s<r;)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 a=(31&n[s])<<6|63&n[s+1];if(a>=128){i.push(String.fromCharCode(65535&a)),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}(),be="undefined"!=typeof window,ye=be&&navigator.userAgent.toLocaleLowerCase(),fe=be&&/^((?!chrome|android).)*safari/.test(ye),Xe=be&&ye.includes("firefox"),Le=be&&ye.includes("android");function Ge(){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 We=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 Se(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 xe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Se(e,t)*We+Se(e,t+4)}function ge(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 Ve(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 Ye(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)}))}var ke=function(){function e(){X(this,e)}return G(e,null,[{key:"parseAnnexB",value:function(e){for(var t=e.length,i=2,n=0;null!==e[i]&&void 0!==e[i]&&1!==e[i];)i++;if((n=++i+2)>=t)return[];for(var s=[];n<t;)switch(e[n]){case 0:if(0!==e[n-1]){n+=2;break}if(0!==e[n-2]){n++;break}i!==n-2&&s.push(e.subarray(i,n-2));do{n++}while(1!==e[n]&&n<t);n=(i=n+1)+2;break;case 1:if(0!==e[n-1]||0!==e[n-2]){n+=3;break}i!==n-2&&s.push(e.subarray(i,n-2)),n=(i=n+1)+2;break;default:n+=3}return i<t&&s.push(e.subarray(i)),s}},{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=[],r=0;r+t<n;)if(i=Se(e,r),3===t&&(i>>>=8),r+=t,i){if(r+i>n)break;s.push(e.subarray(r,r+i)),r+=i}return s}}},{key:"parseSEI",value:function(e,t){for(var i=e.length,n=t?2:1,s=0,r=0,a="";255===e[n];)s+=255,n++;for(s+=e[n++];255===e[n];)r+=255,n++;if(r+=e[n++],5===s&&i>n+16)for(var l=0;l<16;l++)a+=e[n].toString(16),n++;return{payload:e.subarray(n,n+r),type:s,size:r,uuid:a}}},{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,r=new Uint8Array(s),a=0;for(n=0;n<s;a++,n++)a===i[0]&&(a++,i.shift()),r[n]=e[a];return r}}]),e}(),Te=function(){function e(){X(this,e)}return G(e,null,[{key:"parseAVCDecoderConfigurationRecord",value:function(t){if(!(t.length<7)){for(var i,n,s=1+(3&t[4]),r=[],a=[],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,r.push(c),i||(i=e.parseSPS(ke.removeEPB(c)))}var u,h=t[l];l++;for(var m=0;m<h;m++)u=t[l]<<8|t[l+1],l+=2,u&&(a.push(t.subarray(l,l+u)),l+=u);return{sps:i,spsArr:r,ppsArr:a,nalUnitSize:s}}}},{key:"parseSPS",value:function(e){var t=new me(e);t.readUByte();var i=t.readUByte(),n=t.readUByte(),s=t.readUByte();t.skipUEG();var r=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 a=t.readUEG();if(a<=3&&(r=[0,420,422,444][a]),3===a&&t.skipBits(1),t.skipUEG(),t.skipUEG(),t.skipBits(1),t.readBool())for(var l=3!==a?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 h=t.readUEG(),m=t.readUEG(),p=t.readBits(1);0===p&&t.skipBits(1),t.skipBits(1);var Z,b,y,f,X,L=0,G=0,W=0,v=0;if(t.readBool()&&(L=t.readUEG(),G=t.readUEG(),W=t.readUEG(),v=t.readUEG()),t.readBool()){if(t.readBool())switch(t.readUByte()){case 1:Z=[1,1];break;case 2:Z=[12,11];break;case 3:Z=[10,11];break;case 4:Z=[16,11];break;case 5:Z=[40,33];break;case 6:Z=[24,11];break;case 7:Z=[20,11];break;case 8:Z=[32,11];break;case 9:Z=[80,33];break;case 10:Z=[18,11];break;case 11:Z=[15,11];break;case 12:Z=[64,33];break;case 13:Z=[160,99];break;case 14:Z=[4,3];break;case 15:Z=[3,2];break;case 16:Z=[2,1];break;case 255:Z=[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 S=t.readBits(32),x=t.readBits(32);b=t.readBool(),X=(y=x)/(f=2*S)}}return{codec:ge(e.subarray(1,4)),profileIdc:i,profileCompatibility:n,levelIdc:s,chromaFormat:r,width:Math.ceil(16*(h+1)-2*(L+G)),height:(2-p)*(m+1)*16-(p?2:4)*(W+v),sarRatio:Z,fpsNum:y,fpsDen:f,fps:X,fixedFrame:b}}}]),e}(),Re=function(){function e(){X(this,e)}return G(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 r=s,a=[],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),h=(1&t[s+2])<<2|(192&t[s+3])>>>6,m=e._getConfig(l,h,u),p=m.config,Z=m.codec,b=0,y=e.getFrameDuration(o);s+7<n;)if(255===t[s]&&240==(246&t[s+1])){if(n-s<(c=(3&t[s+3])<<11|t[s+4]<<3|(224&t[s+5])>>5))break;d=2*(1&~t[s+1]),a.push({pts:i+b*y,data:t.subarray(s+7+d,s+c)}),b++,s+=c}else s++;return{skip:r,remaining:s>=n?void 0:t.subarray(s),frames:a,samplingFrequencyIndex:l,sampleRate:o,objectType:u,channelCount:h,codec:Z,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,r=e.FREQ[n];if(r){var a=e._getConfig(n,s,i);return{samplingFrequencyIndex:n,sampleRate:r,objectType:i,channelCount:s,config:a.config,codec:a.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,r=[];return Xe?e>=6?(n=5,s=e-3):(n=2,s=e):Le?(n=2,s=e):(n=2===i||5===i?i:5,s=e,e>=6?s=e-3:1===t&&(n=2,s=e)),r[0]=n<<3,r[0]|=(14&e)>>1,r[1]=(1&e)<<7,r[1]|=t<<3,5===n&&(r[1]|=(14&s)>>1,r[2]=(1&s)<<7,r[2]|=8,r[3]=0),{config:r,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}();W(Re,"FREQ",[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350]);var we=function(){function e(){X(this,e)}return G(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,r,a,l,o=1+(3&t[21]),d=[],c=[],u=[],h=23,m=t[22],p=0;p<m;p++){r=63&t[h],a=t[h+1]<<8|t[h+2],h+=3;for(var Z=0;Z<a;Z++)if(l=t[h]<<8|t[h+1],h+=2,l){switch(r){case 32:var b=t.subarray(h,h+l);n||(n=e.parseVPS(ke.removeEPB(b),i)),u.push(b);break;case 33:var y=t.subarray(h,h+l);s||(s=e.parseSPS(ke.removeEPB(y),i)),d.push(y);break;case 34:c.push(t.subarray(h,h+l))}h+=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 me(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 me(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 r=i.chromaFormatIdc=n.readUEG(),a=420;r<=3&&(a=[0,420,422,444][r]);var l=0;3===r&&(l=n.readBits(1));var o,d,c,u,h=n.readUEG(),m=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 Z=1!==r&&2!==r||0!==l?1:2,b=1===r&&0===l?2:1;h-=Z*(d+o),m-=b*(u+c)}return{codec:"hev1.1.6.L93.B0",width:h,height:m,chromaFormat:a,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 r=[],a=[];if(t>e.bitsAvailable)throw new Error("maxSubLayersMinus inavlid size ".concat(t));for(var l=0;l<t;l++)r[l]=e.readBits(1),a[l]=e.readBits(1);t>0&&e.readBits(2*(8-t));for(var o=0;o<t;o++)0!==r[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!==a[o]&&e.readBits(8)}}]),e}(),Me=1e3,Ke=5e3,Ie=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 G(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,r=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(r,s),!n&&t&&(this._audioNextPts=this._videoNextDts=t);var a=this._baseDtsInited&&(this._videoTimestampBreak||!this.videoTrack.exist())&&(this._audioTimestampBreak||!this.audioTrack.exist());if(a&&this._resetBaseDtsWhenStreamBreaked(),this._fixAudio(r),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),r.samples.length&&(r.baseMediaDecodeTime=r.samples[0].pts*r.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],r=e.samples[i.length-1];n=Math.floor((r.dts-s.dts)/(i.length-1))}else n=this._lastVideoDuration||40;var a=i.pop();if(this._videoLastSample&&i.unshift(this._videoLastSample),this._videoLastSample=a,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 h;if(Math.abs(c.dts-this._lastVideoExceptionChunkFirstDtsDot)>5e3)this._lastVideoExceptionChunkFirstDtsDot=c.dts,e.warnings.push({type:te,nextDts:this._videoNextDts,firstSampleDts:c.dts,nextSampleDts:null===(h=i[1])||void 0===h?void 0:h.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 m=0;m<o;m++){var p=i[m].dts,Z=i[m+1];((d=m<o-1?Z.dts-p:a?a.dts-p:n)>1e3||d<0)&&(this._videoTimestampBreak++,Math.abs(p-this._lastVideoExceptionLargeGapDot)>5e3&&(this._lastVideoExceptionLargeGapDot=p,e.warnings.push({type:ee,time:p/e.timescale,dts:p,originDts:i[m].originDts,nextDts:this._videoNextDts,sampleDuration:d,refSampleDuration:n})),d=n),i[m].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,r=1/0;i.length&&(e.baseDts=s=i[0].pts),n.length&&(t.baseDts=r=n[0].dts),this._baseDts=Math.min(s,r);var a=r-s;return Number.isFinite(a)&&Math.abs(a)>500&&t.warnings.push({type:$,videoBaseDts:r,audioBasePts:s,baseDts:this._baseDts,delta:a}),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){e.sampleDuration||(e.sampleDuration=e.codecType===O?Re.getFrameDuration(e.timescale,i):this._getG711Duration(e));var n=e.sampleDuration,s=e.codecType===O?1024:n*e.timescale/1e3;if(void 0===this._audioNextPts){var r=t[0];this._audioNextPts=r.pts}for(var a=0;a<t.length;a++){var l=this._audioNextPts,o=t[a],d=o.pts-l;if(0===a&&this._audioTimestampBreak>=5&&this._keyFrameInNextChunk&&(l=this._audioNextPts=o.dts,d=0,this._audioTimestampBreak=0),!this._audioTimestampBreak&&d>=3*n&&d<=Me&&!fe){var c=this._getSilentFrame(e)||t[0].data.subarray(),u=Math.floor(d/n);Math.abs(o.pts-this._lastAudioExceptionGapDot)>Ke&&(this._lastAudioExceptionGapDot=o.pts,e.warnings.push({type:ne,pts:o.pts,originPts:o.originPts,count:u,nextPts:l,refSampleDuration:n}));for(var h=0;h<u;h++){var m=new oe(Math.floor(this._audioNextPts+n)-Math.floor(this._audioNextPts),c,s);m.originPts=Math.floor(this._baseDts+l),t.splice(a,0,m),this._audioNextPts+=n,a++}a--}else d<=-3*n&&d>=-1e3?(Math.abs(o.pts-this._lastAudioExceptionOverlapDot)>Ke&&(this._lastAudioExceptionOverlapDot=o.pts,e.warnings.push({type:se,pts:o.pts,originPts:o.originPts,nextPts:l,refSampleDuration:n})),t.splice(a,1),a--):(Math.abs(d)>Me&&(this._audioTimestampBreak++,Math.abs(o.pts-this._lastAudioExceptionLargeGapDot)>Ke&&(this._lastAudioExceptionLargeGapDot=o.pts,e.warnings.push({type:ie,time:o.pts/1e3,pts:o.pts,originPts:o.originPts,nextPts:l,sampleDuration:d,refSampleDuration:n}))),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===O?Re.getSilentFrame(e.codec,e.channelCount):new Uint8Array(8*e.sampleDuration*e.channelCount)}}]),e}(),Ce=function(){function e(){X(this,e)}return G(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,r=!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 a=e._parseString(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s));i=a.data,s+=a.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 h=e._parseObject(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s-u)),m=h.size,p=h.data;if(h.isEnd)break;i[p.name]=p.value,s+=m}if(s<=n-3)9===(16777215&t.getUint32(s-1))&&(s+=3);break;case 9:i=void 0,s=1,r=!0;break;case 10:i=[];var Z=t.getUint32(1);s+=4;for(var b=0;b<Z;b++){var y=e._parseValue(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s)),f=y.data,X=y.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 G=t.getUint32(1);s+=4,i="",G>0&&(i=Ze.decode(new Uint8Array(t.buffer,t.byteOffset+s,G))),s+=G;break;default:s=n}return{data:i,size:s,isEnd:r}}},{key:"_parseString",value:function(e){var t=e.getUint16(0),i="";return t>0&&(i=Ze.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}(),He=new pe("FlvDemuxer"),Ne=function(){function e(t,i,n){X(this,e),W(this,"_headerParsed",!1),W(this,"_remainingData",null),W(this,"_gopId",0),W(this,"_needAddMetaBeforeKeyFrameNal",!0),this.videoTrack=t||new re,this.audioTrack=i||new ae,this.metadataTrack=n||new he,this._fixer=new Ie(this.videoTrack,this.audioTrack,this.metadataTrack)}return G(e,[{key:"demux",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=this.audioTrack,r=this.videoTrack,a=this.metadataTrack;if(!i&&n||(this._remainingData=null),i&&(this._headerParsed=!1),i?(r.reset(),s.reset(),a.reset()):(r.samples=[],s.samples=[],a.seiSamples=[],a.flvScriptSamples=[],r.warnings=[],s.warnings=[],this._remainingData&&(t=Ge(this._remainingData,t),this._remainingData=null)),!t.length)return{videoTrack:r,audioTrack:s,metadataTrack:a};var l=0;if(!this._headerParsed){if(!e.probe(t))throw new Error("Invalid flv file");s.present=(4&t[4])>>>2!=0,r.present=0!=(1&t[4]),this._headerParsed=!0,l=Se(t,5)+4}for(var o,d,c,u,h,m=t.length;l+15<m&&(o=t[l],!(l+15+(d=t[l+1]<<16|t[l+2]<<8|t[l+3])>m));)c=(t[l+7]<<24>>>0)+(t[l+4]<<16)+(t[l+5]<<8)+t[l+6],l+=11,u=t.subarray(l,l+d),8===o?this._parseAudio(u,c):9===o?this._parseVideo(u,c):18===o?this._parseScript(u,c):He.warn("Invalid tag type: ".concat(o)),(h=Se(t,l+=d))!==11+d&&He.warn("Invalid PrevTagSize ".concat(h," (").concat(11+d,")")),l+=4;return l<m&&(this._remainingData=t.subarray(l)),s.formatTimescale=r.formatTimescale=r.timescale=a.timescale=1e3,s.timescale=s.sampleRate||0,!s.exist()&&s.hasSample()&&s.reset(),!r.exist()&&r.hasSample()&&r.reset(),{videoTrack:r,audioTrack:s,metadataTrack:a}}},{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){return this.demux(e,t,i),this.fix(n,t,i)}},{key:"_parseAudio",value:function(t,i){if(t.length){var n=(240&t[0])>>>4,s=this.audioTrack;if(10!==n&&7!==n&&8!==n)return He.warn("Unsupported sound format: ".concat(n)),void s.reset();if(10!==n){var r=(12&t[0])>>2,a=(2&t[0])>>1,l=1&t[0];s.sampleRate=e.AUDIO_RATE[r],s.sampleSize=a?16:8,s.channelCount=l+1}10===n?this._parseAac(t,i):this._parseG711(t,i,n)}}},{key:"_parseG711",value:function(e,t,i){var n=this.audioTrack;n.codecType=7===i?A:q,n.sampleRate=8e3,n.codec=n.codecType,n.samples.push(new oe(t,e.subarray(1)))}},{key:"_parseAac",value:function(e,t){var i=this.audioTrack;if(i.codecType=O,0===e[1]){var n=Re.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(),He.warn("Cannot parse AudioSpecificConfig",e))}else if(1===e[1]){if(null==t)return;i.samples.push(new oe(t,e.subarray(2)))}else He.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],r=this.videoTrack;if(7!==s&&12!==s)return r.reset(),void He.warn("Unsupported codecId: ".concat(s));var a=12===s;r.codecType=a?Q:_;var l=e[1],o=(e[2]<<16|e[3]<<8|e[4])<<8>>8;if(0===l){var d=e.subarray(5),c=a?we.parseHEVCDecoderConfigurationRecord(d):Te.parseAVCDecoderConfigurationRecord(d);if(c){var u=c.hvcC,h=c.sps,m=c.ppsArr,p=c.spsArr,Z=c.vpsArr,b=c.nalUnitSize;u&&(r.hvcC=r.hvcC||u),h&&(r.codec=h.codec,r.width=h.width,r.height=h.height,r.sarRatio=h.sarRatio,r.fpsNum=h.fpsNum,r.fpsDen=h.fpsDen),p.length&&(r.sps=p),m.length&&(r.pps=m),Z&&Z.length&&(r.vps=Z),b&&(r.nalUnitSize=b)}else He.warn("Cannot parse ".concat(a?"HEVC":"AVC","DecoderConfigurationRecord"),e)}else if(1===l){var y=ke.parseAvcC(e.subarray(5),r.nalUnitSize);if((y=this._checkAddMetaNalToUnits(a,y,r))&&y.length){var f=new le(t+o,t,y);1===n&&f.setToKeyframe(),r.samples.push(f),y.forEach((function(e){var n=a?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(!a&&5!==n||a&&5===n)break;f.setToKeyframe();break;case 6:case 39:case 40:if(!a&&6!==n||a&&6===n)break;i.metadataTrack.seiSamples.push(new ue(ke.parseSEI(ke.removeEPB(e),a),t+o))}})),f.keyframe&&this._gopId++,f.gopId=this._gopId}else He.warn("Cannot parse NALUs",e)}else 2===l||He.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 ce(Ce.parse(e),t))}}],[{key:"probe",value:function(e){return 70===e[0]&&76===e[1]&&86===e[2]&&1===e[3]&&Se(e,5)>=9}}]),e}();W(Ne,"AUDIO_RATE",[5500,11e3,22e3,44e3]),new pe("TsDemuxer");var ze=function(){function e(){X(this,e)}return G(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 r=0,a="",l=0;t.length>7;){if(r=Se(t),a=String.fromCharCode.apply(null,t.subarray(4,8)),l=8,1===r?(r=xe(t,8),l+=8):r||(r=t.length),!i[0]||a===i[0]){var o=t.subarray(0,r);if(!(i.length<2))return e.findBox(o.subarray(l),i.slice(1),n+l);s.push({start:n,size:r,headerSize:l,type:a,data:o})}n+=r,t=t.subarray(r)}return s}},{key:"tfhd",value:function(e){return je(e,!0,(function(e,t){e.trackId=Se(t);var i=4,n=1&e.flags,s=2&e.flags,r=8&e.flags,a=16&e.flags,l=32&e.flags;n&&(i+=4,e.baseDataOffset=Se(t,i),i+=4),s&&(e.sampleDescriptionIndex=Se(t,i),i+=4),r&&(e.defaultSampleDuration=Se(t,i),i+=4),a&&(e.defaultSampleSize=Se(t,i),i+=4),l&&(e.defaultSampleFlags=Se(t,i))}))}},{key:"sidx",value:function(e){return je(e,!0,(function(e,t){var i=0;e.reference_ID=Se(t,i),i+=4,e.timescale=Se(t,i),i+=4,0===e.version?(e.earliest_presentation_time=Se(t,i),i+=4,e.first_offset=Se(t,i),i+=4):(e.earliest_presentation_time=xe(t,i),i+=8,e.first_offset=xe(t,i),i+=8),i+=2,e.references=[];var n=ve(t,i);i+=2;for(var s=0;s<n;s++){var r={};e.references.push(r);var a=Se(t,i);i+=4,r.reference_type=a>>31&1,r.referenced_size=2147483647&a,r.subsegment_duration=Se(t,i),a=Se(t,i+=4),i+=4,r.starts_with_SAP=a>>31&1,r.SAP_type=a>>28&7,r.SAP_delta_time=268435455&a}}))}},{key:"moov",value:function(t){return je(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 je(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Se(t,16),e.duration=xe(t,20),i+=28):(e.timescale=Se(t,8),e.duration=Se(t,12),i+=16),e.nextTrackId=Se(t,i+76)}))}},{key:"trak",value:function(t){return je(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 je(e,!0,(function(e,t){var i=0;1===e.version?(e.trackId=Se(t,16),e.duration=xe(t,24),i+=32):(e.trackId=Se(t,8),e.duration=Se(t,16),i+=20),e.width=Se(t,i+52),e.height=Se(t,i+56)}))}},{key:"mdia",value:function(t){return je(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 je(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Se(t,16),e.duration=xe(t,20),i+=28):(e.timescale=Se(t,8),e.duration=Se(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 je(e,!0,(function(e,t){0===e.version&&(e.handlerType=String.fromCharCode.apply(null,t.subarray(4,8)))}))}},{key:"minf",value:function(t){return je(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 je(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 je(e,!0,(function(e,t){e.balance=ve(t)}))}},{key:"stbl",value:function(t){return je(t,!1,(function(t,i,n){var s,r,a;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===(r=s.sinf)||void 0===r||null===(a=r.schi)||void 0===a?void 0:a.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 je(e,!0,(function(e,i){var n=0,s=Se(i,n);n+=4,e.samples=[];for(var r=0;r<s;r++){for(var a={InitializationVector:[]},l=0;l<t;l++)a.InitializationVector[l]=i[n+l];if(n+=t,2&e.flags){a.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=Se(i,n),n+=4,a.subsamples.push(c)}}e.samples.push(a)}}))}},{key:"pssh",value:function(e){return je(e,!0,(function(e,t){for(var i=[],n=[],s=0,r=0;r<16;r++)n.push(Ee(t[s+r]));if(s+=16,e.version>0){var a=Se(t,s);s+=4;for(var l=0;l<(""+a).length;l++)for(var o=0;o<16;o++){var d=t[s];s+=1,i.push(Ee(d))}}var c=Se(t,s);e.data_size=c,s+=4,e.kid=i,e.system_id=n,e.buffer=t}))}},{key:"stsd",value:function(t){return je(t,!0,(function(t,i,n){t.entryCount=Se(i),t.entries=e.findBox(i.subarray(4),[],n+4).map((function(t){switch(t.type){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 je(t,!1,(function(t,i,n){t.channelCount=ve(i,16),t.samplesize=ve(i,18),t.sampleRate=Se(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 je(t,!1,(function(t,i,n){t.width=ve(i,24),t.height=ve(i,26),t.horizresolution=Se(i,28),t.vertresolution=Se(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 je(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(Ee(t[i])),i+=1}))}},{key:"schi",value:function(t){return je(t,!1,(function(t,i,n){t.tenc=e.tenc(e.findBox(i,["tenc"],n)[0])}))}},{key:"sinf",value:function(t){return je(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 je(e,!1,(function(e,t){e.data_format="";for(var i=0;i<4;i++)e.data_format+=String.fromCharCode(t[i])}))}},{key:"avc1",value:function(t){return je(t,!1,(function(t,i,n){var s=Fe(t,i),r=i.subarray(s);n+=s,t.avcC=e.avcC(e.findBox(r,["avcC"],n)[0]),t.pasp=e.pasp(e.findBox(r,["pasp"],n)[0])}))}},{key:"avcC",value:function(e){return je(e,!1,(function(e,t){e.configurationVersion=t[0],e.AVCProfileIndication=t[1],e.profileCompatibility=t[2],e.AVCLevelIndication=t[3],e.codec=ge([t[1],t[2],t[3]]),e.lengthSizeMinusOne=3&t[4],e.spsLength=31&t[5],e.sps=[];for(var i=6,n=0;n<e.spsLength;n++){var s=ve(t,i);i+=2,e.sps.push(t.subarray(i,i+s)),i+=s}e.ppsLength=t[i],i+=1,e.pps=[];for(var r=0;r<e.ppsLength;r++){var a=ve(t,i);i+=2,e.pps.push(t.subarray(i,i+=a)),i+=a}}))}},{key:"hvc1",value:function(t){return je(t,!1,(function(t,i,n){var s=Fe(t,i),r=i.subarray(s);n+=s,t.hvcC=e.hvcC(e.findBox(r,["hvcC"],n)[0]),t.pasp=e.pasp(e.findBox(r,["pasp"],n)[0])}))}},{key:"hvcC",value:function(e){return je(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=Se(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,r=0,a=0,l=0,o=0;o<t.numOfArrays;o++){r=63&i[s],a=ve(i,s+1),s+=3;for(var d,c=[],u=0;u<a;u++)l=ve(i,s),s+=2,c.push(i.subarray(s,s+l)),s+=l;if(32===r)(d=t.vps).push.apply(d,c);else if(33===r){var h;(h=t.sps).push.apply(h,c)}else if(34===r){var m;(m=t.pps).push.apply(m,c)}}}))}},{key:"pasp",value:function(e){return je(e,!1,(function(e,t){e.hSpacing=Se(t),e.vSpacing=Se(t,4)}))}},{key:"mp4a",value:function(t){return je(t,!1,(function(t,i,n){var s=Je(t,i);t.esds=e.esds(e.findBox(i.subarray(s),["esds"],n+s)[0])}))}},{key:"esds",value:function(e){return je(e,!0,(function(e,t){e.codec="mp4a.";for(var i=0,n=0,s=0,r=0;t.length;){for(r=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===r)t=t.subarray(i+3);else{if(4!==r){if(5===r){var a=e.config=t.subarray(i,i+s),l=(248&a[0])>>3;return 31===l&&a.length>=2&&(l=32+((7&a[0])<<3)+((224&a[1])>>5)),e.objectType=l,e.codec+=l.toString(16),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 je(e,!1,(function(e,t){Je(e,t)}))}},{key:"stts",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push({count:Se(t,s),delta:Se(t,s+4)}),s+=8;e.entryCount=i,e.entries=n}))}},{key:"ctts",value:function(e){return je(e,!0,(function(e,t){var i=Se(t),n=[],s=4;if(1===e.version)for(var r=0;r<i;r++)n.push({count:Se(t,s),offset:Se(t,s+4)}),s+=8;else for(var a=0;a<i;a++)n.push({count:Se(t,s),offset:-(1+~Se(t,s+4))}),s+=8;e.entryCount=i,e.entries=n}))}},{key:"stsc",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push({firstChunk:Se(t,s),samplesPerChunk:Se(t,s+4),sampleDescriptionIndex:Se(t,s+8)}),s+=12;e.entryCount=i,e.entries=n}))}},{key:"stsz",value:function(e){return je(e,!0,(function(e,t){var i=Se(t),n=Se(t,4),s=[];if(!i)for(var r=8,a=0;a<n;a++)s.push(Se(t,r)),r+=4;e.sampleSize=i,e.sampleCount=n,e.entrySizes=s}))}},{key:"stco",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push(Se(t,s)),s+=4;e.entryCount=i,e.entries=n}))}},{key:"co64",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push(xe(t,s)),s+=8;e.entryCount=i,e.entries=n}))}},{key:"stss",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push(Se(t,s)),s+=4;e.entryCount=i,e.entries=n}))}},{key:"moof",value:function(t){return je(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 je(e,!0,(function(e,t){e.sequenceNumber=Se(t)}))}},{key:"traf",value:function(t){return je(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 je(e,!0,(function(e,t){var i=e.version,n=e.flags,s=t.length,r=e.sampleCount=Se(t),a=4;if(s>a&&1&n&&(e.dataOffset=-(1+~Se(t,a)),a+=4),s>a&&4&n&&(e.firstSampleFlags=Se(t,a),a+=4),e.samples=[],s>a)for(var l,o=0;o<r;o++)l={},256&n&&(l.duration=Se(t,a),a+=4),512&n&&(l.size=Se(t,a),a+=4),1024&n&&(l.flags=Se(t,a),a+=4),2048&n&&(l.cts=i?-(1+~Se(t,a+4)):Se(t,a),a+=4),e.samples.push(l)}))}},{key:"tfdt",value:function(e){return je(e,!0,(function(e,t){1===e.version?e.baseMediaDecodeTime=xe(t):e.baseMediaDecodeTime=Se(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,r=e.trak;if(r&&r.length){var a=r.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=r.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(a&&t){var o,d,c,u,h,m,p,Z=t,b=null===(o=a.tkhd)||void 0===o?void 0:o.trackId;null!=b&&(Z.id=a.tkhd.trackId),Z.tkhdDuration=a.tkhd.duration,Z.mvhdDurtion=e.mvhd.duration,Z.mvhdTimecale=e.mvhd.timescale,Z.timescale=Z.formatTimescale=a.mdia.mdhd.timescale,Z.duration=a.mdia.mdhd.duration||Z.mvhdDurtion/Z.mvhdTimecale*Z.timescale;var y,f,X,L,G,W,v,S,x=a.mdia.minf.stbl.stsd.entries[0];if(Z.width=x.width,Z.height=x.height,x.pasp&&(Z.sarRatio=[x.pasp.hSpacing,x.pasp.vSpacing]),x.hvcC)Z.codecType=Q,Z.codec=x.hvcC.codec,Z.vps=x.hvcC.vps,Z.sps=x.hvcC.sps,Z.pps=x.hvcC.pps,Z.hvcC=x.hvcC.data;else{if(!x.avcC)throw new Error("unknown video stsd entry");Z.codec=x.avcC.codec,Z.sps=x.avcC.sps,Z.pps=x.avcC.pps}if(Z.present=!0,Z.ext={},Z.ext.stss=null===(d=a.mdia)||void 0===d||null===(c=d.minf)||void 0===c||null===(u=c.stbl)||void 0===u?void 0:u.stss,Z.ext.ctts=null===(h=a.mdia)||void 0===h||null===(m=h.minf)||void 0===m||null===(p=m.stbl)||void 0===p?void 0:p.ctts,x&&"encv"===x.type)Z.isVideoEncryption=!0,x.default_KID=null===(y=x.sinf)||void 0===y||null===(f=y.schi)||void 0===f?void 0:f.tenc.default_KID,x.default_IsEncrypted=null===(X=x.sinf)||void 0===X||null===(L=X.schi)||void 0===L?void 0:L.tenc.default_IsEncrypted,x.default_IV_size=null===(G=x.sinf)||void 0===G||null===(W=G.schi)||void 0===W?void 0:W.tenc.default_IV_size,Z.videoSenc=a.mdia.minf.stbl.senc&&a.mdia.minf.stbl.senc.samples,x.data_format=null===(v=x.sinf)||void 0===v||null===(S=v.frma)||void 0===S?void 0:S.data_format,Z.useEME=e.useEME,Z.kidValue=e.kidValue,Z.pssh=e.pssh,Z.encv=x}if(l&&i){var g,V,Y,k,T,R,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,U,F,J,j,P,E=l.mdia.minf.stbl.stsd.entries[0];switch(I.sampleSize=E.sampleSize,I.sampleRate=E.sampleRate,I.channelCount=E.channelCount,I.present=!0,E.type){case"alaw":I.codecType=I.codec=A,I.sampleRate=8e3;break;case"ulaw":I.codecType=I.codec=q,I.sampleRate=8e3;break;default:I.sampleDuration=Re.getFrameDuration(I.sampleRate,I.timescale),I.sampleRateIndex=Re.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=Re.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=Re.getRateIndexByRate(I.sampleRate),I.ext={},I.ext.stss=null===(k=l.mdia)||void 0===k||null===(T=k.minf)||void 0===T||null===(R=T.stbl)||void 0===R?void 0:R.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===(U=z.schi)||void 0===U?void 0:U.tenc.default_KID,E.default_IsEncrypted=null===(F=E.sinf)||void 0===F||null===(J=F.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,$=_||O?(_||O).join(""):null;t&&(t.kid=$),i&&(i.kid=$)}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 r=t.tfhd,a=t.tfdt,l=t.trun;if(r&&l){a&&(i&&i.id===r.trackId&&(i.baseMediaDecodeTime=a.baseMediaDecodeTime),n&&n.id===r.trackId&&(n.baseMediaDecodeTime=a.baseMediaDecodeTime));var o=r.defaultSampleSize||0,d=r.defaultSampleDuration||e.evaluateDefaultDuration(i,n,l.samples.length||l.sampleCount),c=l.dataOffset||0,u=0,h=-1;if(!l.samples.length&&l.sampleCount){s[r.trackId]=[];for(var m=0;m<l.sampleCount;m++)s[r.trackId].push({offset:c,dts:u,duration:d,size:o}),u+=d,c+=o}else s[r.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:h,keyframe:0===t||null!==e.flags&&void 0!==e.flags&&(65536&e.flags)>>>0!=65536}).keyframe&&(h++,e.gopId=h),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,r;if(i){var a,l,o=null===(a=i.mdia)||void 0===a||null===(l=a.minf)||void 0===l?void 0:l.stbl;if(!o)return;var d=o.stts,c=o.stsc,u=o.stsz,h=o.stco,m=o.stss,p=o.ctts;if(!(d&&c&&u&&h&&m))return;s=Ue(d,c,u,h,p,m)}if(n){var Z,b,y,f=null===(Z=n.mdia)||void 0===Z||null===(b=Z.minf)||void 0===b?void 0:b.stbl;if(!f)return;var X=null===(y=n.mdia.mdhd)||void 0===y?void 0:y.timescale,L=f.stts,G=f.stsc,W=f.stsz,v=f.stco;if(!(X&&L&&G&&W&&v))return;r=Ue(L,G,W,v)}return{videoSamples:s,audioSamples:r}}}}}]),e}();function Ue(e,t,i,n,s,r){var a,l,o,d=[],c=null==s?void 0:s.entries,u=t.entries,h=n.entries,m=i.entrySizes,p=null==r?void 0:r.entries;p&&(a={},p.forEach((function(e){a[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 Z=-1,b=0,y=0,f=0,X=0,L=0,G=u[0].samplesPerChunk,W=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:m[y]||i.sampleSize,offset:h[f]+L,index:y},p&&(o.keyframe=a[y],o.keyframe&&Z++,o.gopId=Z),l&&y<l.length&&(o.pts=o.dts+l[y]),d.push(o),b+=n,++y<G?L+=o.size:(f++,L=0,f>=W&&(X++,W=u[X+1]?u[X+1].firstChunk-1:1/0),G+=u[X].samplesPerChunk)})),d}function Fe(e,t){return e.dataReferenceIndex=ve(t,6),e.width=ve(t,24),e.height=ve(t,26),e.horizresolution=Se(t,28),e.vertresolution=Se(t,32),e.frameCount=ve(t,40),e.depth=ve(t,74),78}function Je(e,t){return e.dataReferenceIndex=ve(t,6),e.channelCount=ve(t,16),e.sampleSize=ve(t,18),e.sampleRate=Se(t,24)/65536,28}function je(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 Pe=function(e,t,i){for(var n=String(i),s=t>>0,r=Math.ceil(s/n.length),a=[],l=String(e);r--;)a.push(n);return a.join("").substring(0,s-l.length)+l},Ee=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(Pe(Number(t).toString(16),2,0))})),e[0]};function De(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 r=new e(t),a=0;return n.forEach((function(e){r.set(e,a),a+=e.length})),r}var Be=function(){function e(){X(this,e),this.buffer=new Uint8Array(0)}return G(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=De(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}(),_e=Math.pow(2,32)-1,Qe=function(){function e(){X(this,e)}return G(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),r=new Uint8Array(s);r[0]=s>>24&255,r[1]=s>>16&255,r[2]=s>>8&255,r[3]=255&s,r.set(e,4);var a=8;return i.forEach((function(e){r.set(e,a),a+=e.byteLength})),r}},{key:"ftyp",value:function(t){return t.find((function(e){return e.type===E&&e.codecType===Q}))?e.FTYPHEV1:e.FTYPAVC1}},{key:"initSegment",value:function(t){return Ge(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],Ye(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,r=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 r}},{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):e.mp4a(t):t.useEME&&t.encv?e.encv(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]),r=e.esds(t.config),a=e.sinf(t.enca);return e.box(e.types.enca,s,r,a)}},{key:"encv",value:function(t){var i,n,s=t.sps.length>0?t.sps[0]:[],r=t.pps.length>0?t.pps[0]:[],a=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,a>>8&255,255&a,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,r.length>>>8&255,255&r.length])).concat.apply(i,C(r))),h=new Uint8Array([0,0,88,57,0,15,200,192,0,4,86,72]),m=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,h),m,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(Ye(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]),r=e.schi(t);return e.box(e.types.sinf,i,e.box(e.types.frma,n),e.box(e.types.schm,s),r)}},{key:"avc1hev1",value:function(t){var i=t.codecType===Q,n=i?e.types.hvc1:e.types.avc1,s=i?e.hvcC(t):e.avcC(t),r=[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?r.push(e.box(e.types.fiel,new Uint8Array([1,0]))):t.sarRatio&&t.sarRatio.length>1&&r.push(e.pasp(t.sarRatio)),e.box.apply(e,[n].concat(r))}},{key:"avcC",value:function(t){var i,n,s,r=[],a=[];return t.sps.forEach((function(e){s=e.byteLength,r.push(s>>>8&255),r.push(255&s),r.push.apply(r,C(e))})),t.pps.forEach((function(e){s=e.byteLength,a.push(s>>>8&255),a.push(255&s),a.push.apply(a,C(e))})),e.box(e.types.avcC,new Uint8Array((i=(n=[1,r[3],r[4],r[5],255,224|t.sps.length]).concat.apply(n,r).concat([t.pps.length])).concat.apply(i,a)))}},{key:"hvcC",value:function(t){var i=t.hvcC;if(i instanceof ArrayBuffer||i instanceof Uint8Array)return i;var n,s=t.vps,r=t.sps,a=t.pps;if(i){var l=i.generalProfileCompatibilityFlags,o=i.generalConstraintIndicatorFlags,d=(s.length&&1)+(r.length&&1)+(a.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)),r.length&&(n.push(161,0,r.length),r.forEach(c)),a.length&&(n.push(162,0,a.length),a.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:"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 r=e.saiz(t),a=e.saio(t),l=e.trun1(t),o=e.senc(t);return e.box(e.types.traf,i,n,r,a,l,o)}if(t.isAudioEncryption){var d=e.sbgp(),c=e.saiz(t),u=e.saio(t),h=e.senc(t),m=e.trun1(t);return e.box(e.types.traf,i,n,d,c,u,h,m)}var p=e.sbgp(),Z=e.trun1(t);return e.box(e.types.traf,i,n,p,Z)}if(t.isVideo){var b=e.trun1(t);return e.box(e.types.traf,i,n,b)}var y=e.sbgp(),f=e.saiz(t),X=e.saio(t),L=e.senc(t),G=e.trun1(t);return e.box(e.types.traf,i,n,y,f,X,L,G)}var W=e.sdtp(t);return e.box(e.types.traf,i,n,W,e.trun(t.samples,W.byteLength+76))}},{key:"sdtp",value:function(t){var i=new Be;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 Be,n=Be.writeUint32(t.samples.length),s=null;if(t.isVideo){var r=t.videoSencLength;s=Be.writeUint32(16*t.samples.length+r+149),!t.isVideoEncryption&&t.isAudioEncryption&&(s=Be.writeUint32(16*t.samples.length+92))}else{var a=12*t.samples.length+124;t.isAudioEncryption&&(a=12*t.samples.length+8*t.audioSenc.length+177),s=Be.writeUint32(a)}return t.samples.forEach((function(e){i.write(Be.writeUint32(e.duration)),i.write(Be.writeUint32(e.size)),i.write(Be.writeUint32(e.keyframe?33554432:65536)),t.isVideo&&i.write(Be.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 Be,n=t.samples.length,s=t.isVideo?16:8,r=t.isVideo?2:0,a=[],l=0;return t.isVideo?(a=t.videoSenc,l=t.videoSencLength):a=t.audioSenc,l=l||s*n,i.write(Be.writeUint32(16+l),e.types.senc,this.extension(0,r)),i.write(Be.writeUint32(n)),a.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(Be.writeUint16(e.subsamples.length)),e.subsamples.forEach((function(e){i.write(Be.writeUint16(e.BytesOfClearData)),i.write(Be.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/(_e+1)),s=Math.floor(i%(_e+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 r=new Uint8Array(s);r.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 a=0;a<n;a++){var l=t[a],o=l.duration,d=l.size,c=l.flag,u=void 0===c?{}:c,h=l.cts,m=void 0===h?0:h;r.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,m>>>24&255,m>>>16&255,m>>>8&255,255&m],12+16*a)}return e.box(e.types.trun,r)}},{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,Ge(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,r=e.sampleDescIndex;n.set([t>>24,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,r>>24,r>>16&255,r>>8&255,255&r],s),s+=12})),e.box(e.types.stsc,Ge(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,Ge(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,Ge(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,Ge(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,Ge(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,r=t.samples[0].sampleOffset*n,a=8;t.samples.forEach((function(e){a+=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=a+141+16*t.samples.length+d,t.useEME&&t.isAudioEncryption&&!t.isVideoEncryption&&(l=a+16*t.samples.length+84)}else l=a+116+12*t.samples.length,t.useEME&&t.isAudioEncryption&&(l=a+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,r>>24&255,r>>16&255,r>>8&255,255&r,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}();W(Qe,"types",["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))),W(Qe,"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])}),W(Qe,"FTYPAVC1",Qe.box(Qe.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]))),W(Qe,"FTYPHEV1",Qe.box(Qe.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,104,101,118,49]))),W(Qe,"DINF",Qe.box(Qe.types.dinf,Qe.box(Qe.types.dref,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1])))),W(Qe,"VMHD",Qe.box(Qe.types.vmhd,new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0]))),W(Qe,"SMHD",Qe.box(Qe.types.smhd,new Uint8Array([0,0,0,0,0,0,0,0]))),W(Qe,"StblTable",new Uint8Array([0,0,0,0,0,0,0,0])),W(Qe,"STTS",Qe.box(Qe.types.stts,Qe.StblTable)),W(Qe,"STSC",Qe.box(Qe.types.stsc,Qe.StblTable)),W(Qe,"STSZ",Qe.box(Qe.types.stsz,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]))),W(Qe,"STCO",Qe.box(Qe.types.stco,Qe.StblTable));var Oe=function(){function e(t,i){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]"),e.disabled=i}return G(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}();W(Oe,"disabled",!0);for(var Ae=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 Oe("FMP4Remuxer",!n||!n.openLog||!n.openLog)}return G(e,[{key:"remux",value:function(){var e,t,i,n,s,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=this.videoTrack,o=this.audioTrack,d=l.exist(),c=o.exist(),u=[];return r&&(a&&a.initMerge?(d&&u.push(this.videoTrack),c&&u.push(this.audioTrack),i=Qe.initSegment(u)):(d&&(e=Qe.initSegment([this.videoTrack])),c&&(t=Qe.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=0;t.forEach((function(e){i+=e.units.reduce((function(e,t){return e+t.byteLength}),0),i+=4*e.units.length}));for(var n,s=new Uint8Array(i),r=new DataView(s.buffer),a=function(e,i){i=t[l];var a=0;i.units.forEach((function(t){r.setUint32(e,t.byteLength),e+=4,s.set(t,e),e+=t.byteLength,a+=4+t.byteLength})),i.size=a,d=e,n=i},l=0,o=t.length,d=0;l<o;l++)a(d,n);var c=Qe.mdat(s);return Ge(Qe.moof([e]),c)}},{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=Qe.mdat(t);return Ge(Qe.moof([e]),i)}},{key:"reset",value:function(){this.videoTrack.reset(),this.audioTrack.reset()}}]),e}(),qe=function(){function e(){X(this,e)}return G(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}(),$e=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 r=n;if(r instanceof ArrayBuffer&&(r=new Uint8Array(r)),(r instanceof Int8Array||r instanceof Uint8ClampedArray||r instanceof Int16Array||r instanceof Uint16Array||r instanceof Int32Array||r instanceof Uint32Array||r instanceof Float32Array||r instanceof Float64Array)&&(r=new Uint8Array(r.buffer,r.byteOffset,r.byteLength)),r instanceof Uint8Array){for(var a=r.byteLength,l=[],o=0;o<a;o+=1)l[o>>>2]|=r[o]<<24-o%4*8;e.words=l,e.sigBytes=a}else e.words=n,e.sigBytes=s;return e}return G(i,[{key:"toString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:et;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 r=0;r<s;r+=1){var a=i[r>>>2]>>>24-r%4*8&255;t[n+r>>>2]|=a<<24-(n+r)%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(S(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)}},r=0;r<e;r+=4){var a=s(4294967296*(t||Math.random()));t=987654071*a(),n.push(4294967296*a()|0)}return new i(n,e)}}]),i}(qe),et={stringify:function(e){for(var t=e.words,i=e.sigBytes,n=[],s=0;s<i;s+=1){var r=t[s>>>2]>>>24-s%4*8&255;n.push((r>>>4).toString(16)),n.push((15&r).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 $e(i,t/2)}},tt=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 $e(i,t)},it=function(e){return tt(unescape(encodeURIComponent(e)))},nt=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 G(i,[{key:"reset",value:function(){this._data=new $e,this._nDataBytes=0}},{key:"_append",value:function(e){var t=e;"string"==typeof t&&(t=it(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,r=i.sigBytes,a=r/(4*n),l=(a=e?Math.ceil(a):Math.max((0|a)-this._minBufferSize,0))*n,o=Math.min(4*l,r);if(l){for(var d=0;d<l;d+=n)this._doProcessBlock(s,d);t=s.splice(0,l),i.sigBytes-=o}return new $e(t,o)}},{key:"clone",value:function(){var e=K(S(i.prototype),"clone",this).call(this);return e._data=this._data.clone(),e}}]),i}(qe),st=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 qe,e),n.reset(),n}return G(i,[{key:"reset",value:function(){K(S(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 rt(e,i).finalize(t)}}}]),i}(nt),rt=function(e){v(i,e);var t=w(i);function i(e,n){var s;X(this,i),s=t.call(this);var r=new e;s._hasher=r;var a=n;"string"==typeof a&&(a=it(a));var l=r.blockSize,o=4*l;a.sigBytes>o&&(a=r.finalize(n)),a.clamp();var d=a.clone();s._oKey=d;var c=a.clone();s._iKey=c;for(var u=d.words,h=c.words,m=0;m<l;m+=1)u[m]^=1549556828,h[m]^=909522486;return d.sigBytes=o,c.sigBytes=o,s.reset(),s}return G(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}(qe),at={stringify:function(e){var t=e.words,i=e.sigBytes,n=this._map;e.clamp();for(var s=[],r=0;r<i;r+=3)for(var a=(t[r>>>2]>>>24-r%4*8&255)<<16|(t[r+1>>>2]>>>24-(r+1)%4*8&255)<<8|t[r+2>>>2]>>>24-(r+2)%4*8&255,l=0;l<4&&r+.75*l<i;l+=1)s.push(n.charAt(a>>>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 r=i.charAt(64);if(r){var a=e.indexOf(r);-1!==a&&(t=a)}return function(e,t,i){for(var n=[],s=0,r=0;r<t;r+=1)if(r%4){var a=i[e.charCodeAt(r-1)]<<r%4*2|i[e.charCodeAt(r)]>>>6-r%4*2;n[s>>>2]|=a<<24-s%4*8,s+=1}return $e.create(n,s)}(e,t,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},lt=[],ot=0;ot<64;ot+=1)lt[ot]=4294967296*Math.abs(Math.sin(ot+1))|0;var dt=function(e,t,i,n,s,r,a){var l=e+(t&i|~t&n)+s+a;return(l<<r|l>>>32-r)+t},ct=function(e,t,i,n,s,r,a){var l=e+(t&n|i&~n)+s+a;return(l<<r|l>>>32-r)+t},ut=function(e,t,i,n,s,r,a){var l=e+(t^i^n)+s+a;return(l<<r|l>>>32-r)+t},ht=function(e,t,i,n,s,r,a){var l=e+(i^(t|~n))+s+a;return(l<<r|l>>>32-r)+t},mt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,[{key:"_doReset",value:function(){this._hash=new $e([1732584193,4023233417,2562383102,271733878])}},{key:"_doProcessBlock",value:function(e,t){for(var i=e,n=0;n<16;n+=1){var s=t+n,r=e[s];i[s]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,l=i[t+0],o=i[t+1],d=i[t+2],c=i[t+3],u=i[t+4],h=i[t+5],m=i[t+6],p=i[t+7],Z=i[t+8],b=i[t+9],y=i[t+10],f=i[t+11],X=i[t+12],L=i[t+13],G=i[t+14],W=i[t+15],v=a[0],S=a[1],x=a[2],g=a[3];v=dt(v,S,x,g,l,7,lt[0]),g=dt(g,v,S,x,o,12,lt[1]),x=dt(x,g,v,S,d,17,lt[2]),S=dt(S,x,g,v,c,22,lt[3]),v=dt(v,S,x,g,u,7,lt[4]),g=dt(g,v,S,x,h,12,lt[5]),x=dt(x,g,v,S,m,17,lt[6]),S=dt(S,x,g,v,p,22,lt[7]),v=dt(v,S,x,g,Z,7,lt[8]),g=dt(g,v,S,x,b,12,lt[9]),x=dt(x,g,v,S,y,17,lt[10]),S=dt(S,x,g,v,f,22,lt[11]),v=dt(v,S,x,g,X,7,lt[12]),g=dt(g,v,S,x,L,12,lt[13]),x=dt(x,g,v,S,G,17,lt[14]),S=dt(S,x,g,v,W,22,lt[15]),v=ct(v,S,x,g,o,5,lt[16]),g=ct(g,v,S,x,m,9,lt[17]),x=ct(x,g,v,S,f,14,lt[18]),S=ct(S,x,g,v,l,20,lt[19]),v=ct(v,S,x,g,h,5,lt[20]),g=ct(g,v,S,x,y,9,lt[21]),x=ct(x,g,v,S,W,14,lt[22]),S=ct(S,x,g,v,u,20,lt[23]),v=ct(v,S,x,g,b,5,lt[24]),g=ct(g,v,S,x,G,9,lt[25]),x=ct(x,g,v,S,c,14,lt[26]),S=ct(S,x,g,v,Z,20,lt[27]),v=ct(v,S,x,g,L,5,lt[28]),g=ct(g,v,S,x,d,9,lt[29]),x=ct(x,g,v,S,p,14,lt[30]),S=ct(S,x,g,v,X,20,lt[31]),v=ut(v,S,x,g,h,4,lt[32]),g=ut(g,v,S,x,Z,11,lt[33]),x=ut(x,g,v,S,f,16,lt[34]),S=ut(S,x,g,v,G,23,lt[35]),v=ut(v,S,x,g,o,4,lt[36]),g=ut(g,v,S,x,u,11,lt[37]),x=ut(x,g,v,S,p,16,lt[38]),S=ut(S,x,g,v,y,23,lt[39]),v=ut(v,S,x,g,L,4,lt[40]),g=ut(g,v,S,x,l,11,lt[41]),x=ut(x,g,v,S,c,16,lt[42]),S=ut(S,x,g,v,m,23,lt[43]),v=ut(v,S,x,g,b,4,lt[44]),g=ut(g,v,S,x,X,11,lt[45]),x=ut(x,g,v,S,W,16,lt[46]),S=ut(S,x,g,v,d,23,lt[47]),v=ht(v,S,x,g,l,6,lt[48]),g=ht(g,v,S,x,p,10,lt[49]),x=ht(x,g,v,S,G,15,lt[50]),S=ht(S,x,g,v,h,21,lt[51]),v=ht(v,S,x,g,X,6,lt[52]),g=ht(g,v,S,x,c,10,lt[53]),x=ht(x,g,v,S,y,15,lt[54]),S=ht(S,x,g,v,o,21,lt[55]),v=ht(v,S,x,g,Z,6,lt[56]),g=ht(g,v,S,x,W,10,lt[57]),x=ht(x,g,v,S,m,15,lt[58]),S=ht(S,x,g,v,L,21,lt[59]),v=ht(v,S,x,g,u,6,lt[60]),g=ht(g,v,S,x,f,10,lt[61]),x=ht(x,g,v,S,d,15,lt[62]),S=ht(S,x,g,v,b,21,lt[63]),a[0]=a[0]+v|0,a[1]=a[1]+S|0,a[2]=a[2]+x|0,a[3]=a[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),r=i;t[15+(n+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),t[14+(n+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),e.sigBytes=4*(t.length+1),this._process();for(var a=this._hash,l=a.words,o=0;o<4;o+=1){var d=l[o];l[o]=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8)}return a}},{key:"clone",value:function(){var e=K(S(i.prototype),"clone",this).call(this);return e._hash=this._hash.clone(),e}}]),i}(st);st._createHelper(mt),st._createHmacHelper(mt);var pt=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 qe,{keySize:4,hasher:mt,iterations:1},e),n}return G(i,[{key:"compute",value:function(e,t){for(var i,n=this.cfg,s=n.hasher.create(),r=$e.create(),a=r.words,l=n.keySize,o=n.iterations;a.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();r.concat(i)}return r.sigBytes=4*l,r}}]),i}(qe),Zt=function(e){v(i,e);var t=w(i);function i(e,n,s){var r;return X(this,i),(r=t.call(this)).cfg=Object.assign(new qe,s),r._xformMode=e,r._key=n,r.reset(),r}return G(i,[{key:"reset",value:function(){K(S(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?xt:vt};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}(nt);Zt._ENC_XFORM_MODE=1,Zt._DEC_XFORM_MODE=2,Zt.keySize=4,Zt.ivSize=4;var bt=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 G(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}(qe);function yt(e,t,i){var n,s=e,r=this._iv;r?(n=r,this._iv=void 0):n=this._prevBlock;for(var a=0;a<i;a+=1)s[t+a]^=n[a]}var ft=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i)}(bt);ft.Encryptor=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize;yt.call(this,e,t,n),i.encryptBlock(e,t),this._prevBlock=e.slice(t,t+n)}}]),i}(ft),ft.Decryptor=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize,s=e.slice(t,t+n);i.decryptBlock(e,t),yt.call(this,e,t,n),this._prevBlock=s}}]),i}(ft);var Xt={pad:function(e,t){for(var i=4*t,n=i-e.sigBytes%i,s=n<<24|n<<16|n<<8|n,r=[],a=0;a<n;a+=4)r.push(s);var l=$e.create(r,n);e.concat(l)},unpad:function(e){var t=e,i=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=i}},Lt=function(e){v(i,e);var t=w(i);function i(e,n,s){var r;return X(this,i),(r=t.call(this,e,n,Object.assign({mode:ft,padding:Xt},s))).blockSize=4,r}return G(i,[{key:"reset",value:function(){var e;K(S(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}(Zt),Gt=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 G(i,[{key:"toString",value:function(e){return(e||this.formatter).stringify(this)}}]),i}(qe),Wt={stringify:function(e){var t=e.ciphertext,i=e.salt;return(i?$e.create([1398893684,1701076831]).concat(i).concat(t):t).toString(at)},parse:function(e){var t,i=at.parse(e),n=i.words;return 1398893684===n[0]&&1701076831===n[1]&&(t=$e.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),Gt.create({ciphertext:i,salt:t})}},vt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,null,[{key:"encrypt",value:function(e,t,i,n){var s=Object.assign(new qe,this.cfg,n),r=e.createEncryptor(i,s),a=r.finalize(t),l=r.cfg;return Gt.create({ciphertext:a,key:i,iv:l.iv,algorithm:e,mode:l.mode,padding:l.padding,blockSize:r.blockSize,formatter:s.format})}},{key:"decrypt",value:function(e,t,i,n){var s=t,r=Object.assign(new qe,this.cfg,n);return s=this._parse(s,r.format),e.createDecryptor(i,r).finalize(s.ciphertext)}},{key:"_parse",value:function(e,t){return"string"==typeof e?t.parse(e,this):e}}]),i}(qe);vt.cfg=Object.assign(new qe,{format:Wt});var St={execute:function(e,t,i,n){var s=n;s||(s=$e.random(8));var r=pt.create({keySize:t+i}).compute(e,s),a=$e.create(r.words.slice(t),4*i);return r.sigBytes=4*t,Gt.create({key:r,iv:a,salt:s})}},xt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,null,[{key:"encrypt",value:function(e,t,i,n){var s=Object.assign(new qe,this.cfg,n),r=s.kdf.execute(i,e.keySize,e.ivSize);s.iv=r.iv;var a=vt.encrypt.call(this,e,t,r.key,s);return a.mixIn(r),a}},{key:"decrypt",value:function(e,t,i,n){var s=t,r=Object.assign(new qe,this.cfg,n);s=this._parse(s,r.format);var a=r.kdf.execute(i,e.keySize,e.ivSize,s.salt);return r.iv=a.iv,vt.decrypt.call(this,e,s,a.key,r)}}]),i}(vt);xt.cfg=Object.assign(vt.cfg,{kdf:St});for(var gt=[],Vt=[],Yt=[],kt=[],Tt=[],Rt=[],wt=[],Mt=[],Kt=[],It=[],Ct=[],Ht=0;Ht<256;Ht+=1)Ct[Ht]=Ht<128?Ht<<1:Ht<<1^283;for(var Nt=0,zt=0,Ut=0;Ut<256;Ut+=1){var Ft=zt^zt<<1^zt<<2^zt<<3^zt<<4;Ft=Ft>>>8^255&Ft^99,gt[Nt]=Ft,Vt[Ft]=Nt;var Jt=Ct[Nt],jt=Ct[Jt],Pt=Ct[jt],Et=257*Ct[Ft]^16843008*Ft;Yt[Nt]=Et<<24|Et>>>8,kt[Nt]=Et<<16|Et>>>16,Tt[Nt]=Et<<8|Et>>>24,Rt[Nt]=Et,Et=16843009*Pt^65537*jt^257*Jt^16843008*Nt,wt[Ft]=Et<<24|Et>>>8,Mt[Ft]=Et<<16|Et>>>16,Kt[Ft]=Et<<8|Et>>>24,It[Ft]=Et,Nt?(Nt=Jt^Ct[Ct[Ct[Pt^Jt]]],zt^=Ct[Ct[zt]]):Nt=zt=1}var Dt=[0,1,2,4,8,16,32,64,128,27,54],Bt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(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 r=this._keySchedule,a=0;a<s;a+=1)a<n?r[a]=i[a]:(e=r[a-1],a%n?n>6&&a%n==4&&(e=gt[e>>>24]<<24|gt[e>>>16&255]<<16|gt[e>>>8&255]<<8|gt[255&e]):(e=gt[(e=e<<8|e>>>24)>>>24]<<24|gt[e>>>16&255]<<16|gt[e>>>8&255]<<8|gt[255&e],e^=Dt[a/n|0]<<24),r[a]=r[a-n]^e);this._invKeySchedule=[];for(var l=this._invKeySchedule,o=0;o<s;o+=1){var d=s-o;e=o%4?r[d]:r[d-4],l[o]=o<4||d<=4?e:wt[gt[e>>>24]]^Mt[gt[e>>>16&255]]^Kt[gt[e>>>8&255]]^It[gt[255&e]]}}}},{key:"encryptBlock",value:function(e,t){this._doCryptBlock(e,t,this._keySchedule,Yt,kt,Tt,Rt,gt)}},{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,wt,Mt,Kt,It,Vt),n=i[t+1],i[t+1]=i[t+3],i[t+3]=n}},{key:"_doCryptBlock",value:function(e,t,i,n,s,r,a,l){for(var o=e,d=this._nRounds,c=o[t]^i[0],u=o[t+1]^i[1],h=o[t+2]^i[2],m=o[t+3]^i[3],p=4,Z=1;Z<d;Z+=1){var b=n[c>>>24]^s[u>>>16&255]^r[h>>>8&255]^a[255&m]^i[p];p+=1;var y=n[u>>>24]^s[h>>>16&255]^r[m>>>8&255]^a[255&c]^i[p];p+=1;var f=n[h>>>24]^s[m>>>16&255]^r[c>>>8&255]^a[255&u]^i[p];p+=1;var X=n[m>>>24]^s[c>>>16&255]^r[u>>>8&255]^a[255&h]^i[p];p+=1,c=b,u=y,h=f,m=X}var L=(l[c>>>24]<<24|l[u>>>16&255]<<16|l[h>>>8&255]<<8|l[255&m])^i[p];p+=1;var G=(l[u>>>24]<<24|l[h>>>16&255]<<16|l[m>>>8&255]<<8|l[255&c])^i[p];p+=1;var W=(l[h>>>24]<<24|l[m>>>16&255]<<16|l[c>>>8&255]<<8|l[255&u])^i[p];p+=1;var v=(l[m>>>24]<<24|l[c>>>16&255]<<16|l[u>>>8&255]<<8|l[255&h])^i[p];p+=1,o[t]=L,o[t+1]=G,o[t+2]=W,o[t+3]=v}}]),i}(Lt);Bt.keySize=8;var _t=Lt._createHelper(Bt),Qt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i)}(bt);Qt.Encryptor=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,[{key:"processBlock",value:function(e,t){var i=e,n=this._cipher,s=n.blockSize,r=this._iv,a=this._counter;r&&(this._counter=r.slice(0),a=this._counter,this._iv=void 0);var l=a.slice(0);n.encryptBlock(l,0),a[s-1]=a[s-1]+1|0;for(var o=0;o<s;o+=1)i[t+o]^=l[o]}}]),i}(Qt),Qt.Decryptor=Qt.Encryptor;var Ot={pad:function(){},unpad:function(){}},At={decryptWordArray:function(e,t,i){var n=et.parse(t),s=et.parse(Ve(i)),r=$e.create(new Uint8Array(e)),a=_t.decrypt(Gt.create({ciphertext:r}),n,{iv:s,mode:Qt,padding:Ot});return At.wordArrayToUint8Array(a)},wordArrayToUint8Array:function(e){for(var t=e.sigBytes,i=e.words,n=new Uint8Array(t),s=0,r=0;s!==t;){var a=i[r++];if(n[s++]=(4278190080&a)>>>24,s===t)break;if(n[s++]=(16711680&a)>>>16,s===t)break;if(n[s++]=(65280&a)>>>8,s===t)break;n[s++]=255&a}return n},decoderAESCTRData:function(e,t,i){if(e.videoSenc){var n=e.kidValue,s=e.videoSenc;e.samples.forEach((function(t,r){var a=s[r],l=t.data,o=[],d=[],c=a.InitializationVector;if(a.subsamples&&a.subsamples.length)a.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 h=new Be;h.write.apply(h,d);var m=i?i(h.buffer,n,c):At.decryptWordArray(h.buffer,n,c),p=new Be;o.forEach((function(e,t){var i=d[t].length,n=m.slice(0,i);p.write(e),p.write(n),m=m.slice(i)})),e.samples[r].data=p.buffer}))}if(t.audioSenc){var r=t.kidValue,a=t.audioSenc;t.samples.forEach((function(e,n){var s=a[n],l=i?i(e.data,r,s.InitializationVector):At.decryptWordArray(e.data,r,s.InitializationVector);t.samples[n].data=l}))}}},qt=function(){function e(t,i,n,s){var r=this;X(this,e),W(this,"_videoSamples",[]),W(this,"_audioSamples",[]),W(this,"_lastRemainBuffer",[]),W(this,"_lastRemainBufferStartPos",0),this.videoTrack=new re,this.audioTrack=new ae,this.metadataTrack=n||new he,this.log=new Oe("MP4Demuxer",!s||!s.openLog||!s.openLog),t&&t.forEach((function(e){var t;(t=r._videoSamples).push.apply(t,C(e.frames))})),i&&i.forEach((function(e){var t;(t=r._audioSamples).push.apply(t,C(e.frames))}))}return G(e,[{key:"parseSamples",value:function(e){if(!e)throw new Error("moov is required");if(this.videoTrack.codec||this.audioTrack.codec||(ze.moovToTrack(e,this.videoTrack,this.audioTrack),this.videoSenc=this.videoTrack.videoSenc,this.audioSenc=this.audioTrack.audioSenc),!this._audioSamples.length&&!this._videoSamples.length){var t=ze.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 r,a,l,o=this.videoTrack,d=this.audioTrack;if(o.samples=[],d.samples=[],i){for(var c,u=0,h=i[0],m=i[1];h<=m;h++){if(!(r=this._videoSamples[h]))throw new Error("cannot found video frame #".concat(h));l=r.offset-t,a=e.subarray(l,l+r.size),(c=new le(r.pts||r.dts,r.dts)).duration=r.duration,c.gopId=r.gopId,r.keyframe&&c.setToKeyframe();for(var p=0,Z=a.length-1;p<Z;)u=Se(a,p),p+=4,c.units.push(a.subarray(p,p+u)),p+=u;o.samples.push(c)}o.baseMediaDecodeTime=o.samples[0].dts}if(n){for(var b=n[0],y=n[1];b<=y;b++){if(!(r=this._audioSamples[b]))throw new Error("cannot found video frame #".concat(b));l=r.offset-t,a=e.subarray(l,l+r.size),d.samples.push(new oe(r.dts,a,r.duration))}d.baseMediaDecodeTime=d.samples[0].dts}return{videoTrack:o,audioTrack:d,metadataTrack:this.metadataTrack}}},{key:"demuxPart",value:function(e,t,i,n,s,r,a,l){if(this.parseSamples(s),this.videoTrack.useEME=r,this.audioTrack.useEME=r,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,h,m,p=this.videoTrack,Z=this.audioTrack;p.samples=[],Z.samples=[],p.videoSenc=null,Z.audioSenc=null;var b=0,y=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&&(b=(m=u.offset-t)+u.size,h=e.subarray(m,b),(f=new le(u.pts||u.dts,u.dts)).duration=u.duration,f.gopId=u.gopId,f.sampleOffset=u.index,u.keyframe&&f.setToKeyframe(),f.data=h,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=a))}if(this._audioSamples.length>0&&n.length>0){for(var G=n[0];G<=n[1];G++){if(!(u=this._audioSamples[G]))throw new Error("cannot found video frame #".concat(G));u.offset>=t&&u.offset+u.size<=e.byteLength+t&&(y=(m=u.offset-t)+u.size,h=e.subarray(m,y),Z.samples.push(new oe(u.dts,h,u.duration,u.index)))}Z.samples.length>0&&(Z.gopId=Z.samples[0].gopId||p.gopId,Z.baseMediaDecodeTime=Z.samples[0].dts,Z.startPts=Z.samples[0].pts/Z.timescale,Z.endPts=Z.samples[Z.samples.length-1].pts/Z.timescale,this.audioSenc&&(Z.audioSenc=this.audioSenc.slice(Z.samples[0].sampleOffset,Z.samples[0].sampleOffset+Z.samples.length),Z.kidValue=a))}this.decoderData(p,Z,l);for(var W=0,v=0;v<p.samples.length;v++)for(var S=0,x=p.samples[v].data,g=x.length-1;S<g;)W=Se(x,S),S+=4,p.samples[v].units.push(x.subarray(S,S+W)),S+=W;return this._lastRemainBuffer=e.subarray(Math.max(b,y)),this._lastRemainBuffer.byteLength>0?this._lastRemainBufferStartPos=t+e.byteLength-this._lastRemainBuffer.byteLength:this._lastRemainBufferStartPos=0,{videoTrack:p,audioTrack:Z,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||At.decoderAESCTRData(e,t,i)}}],[{key:"probe",value:function(e){return ze.probe(e)}}]),e}(),$t="3.0.14";function ei(){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 ti(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}}var ii,ni=function(){function e(){X(this,e)}return G(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 r=i.length;if(r&&t){var a=i[r-1],l=a[1];if(e.start(n)-l<=t){var o=e.end(n);o>l&&(a[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,r=0,a=0,l=0,o=0,d=0,c=0,u=e.buffers(t,n),h=0,m=u.length;h<m;h++){var p=u[h];if(i+n>=p[0]&&i<=p[1])s=p[0],r=p[1],a=h;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:r,index:a,buffers:u,nextStart:l,nextEnd:o,prevStart:d,prevEnd:c,currentTime:i,behind:i-s,remaining:r?r-i:0,length:e.totalLength&&e.totalLength(u)}}}]),e}(),si={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",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"}},ri=(W(ii={},si.MANIFEST,{HLS:1100,DASH:1200}),W(ii,si.NETWORK,2100),W(ii,si.NETWORK_TIMEOUT,2101),W(ii,si.NETWORK_FORBIDDEN,2103),W(ii,si.NETWORK_NOTFOUND,2104),W(ii,si.NETWROK_RANGE_NOT_SATISFIABLE,2116),W(ii,si.DEMUX,{FLV:3100,HLS:3200,MP4:3300,FMP4:3400,SIDX:3410}),W(ii,si.REMUX,{FMP4:4100,MP4:4200}),W(ii,si.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,EME_HIJACK:5301}),W(ii,si.DRM,{LICENSE:7100,CUSTOM_LICENSE:7200}),W(ii,si.OTHER,8e3),W(ii,si.RUNTIME,{NO_CANPLAY_ERROR:9001,BUFFERBREAK_ERROR:9002,WAITING_TIMEOUT_ERROR:9003}),ii),ai=function(e){v(i,e);var t=w(i);function i(e,n,s,r,a){var l;return X(this,i),(l=t.call(this,a||(null==s?void 0:s.message))).errorType=e===si.NETWORK_TIMEOUT?si.NETWORK:e,l.originError=s,l.ext=r,l.errorCode=ri[e][n]||ri[e],l.errorMessage=l.message,l.errorCode||(l.errorType=si.OTHER,l.errorCode=ri[l.errorType]),l}return G(i,null,[{key:"create",value:function(e,t,n,s,r){return e instanceof i?e:(e instanceof Error&&(n=e,e=""),e||(e=si.OTHER),new i(e,t,n,s,r))}},{key:"network",value:function(e){var t;return new i(null!=e&&e.isTimeout?si.NETWORK_TIMEOUT:si.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)),li="undefined"!=typeof window,oi={DEBUG:1,LOG:2,WARN:3,ERROR:4},di=["Boolean","Number","String","Undefined","Null","Date","Object"],ci=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 G(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,[oi.DEBUG].concat(n)),e.disabled||(t=console).debug.apply(t,[this._prefix,ui()].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,[oi.LOG].concat(n)),e.disabled||(t=console).log.apply(t,[this._prefix,ui()].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,[oi.WARN].concat(n)),e.disabled||(t=console).warn.apply(t,[this._prefix,ui()].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,[oi.ERROR].concat(n)),e.disabled||(t=console).error.apply(t,[this._prefix,ui()].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 r=n.map((function(e){return mi(e)}));t=this._prefix+ui()+JSON.stringify(r)}catch(l){return}if(e>=this.logCacheLevel&&(this.logSize+=t.length,this.logTextArray.push(t)),this.logSize>this.logMaxSize){var a=this.logTextArray.shift();this.logSize-=a.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 ui(){return(new Date).toLocaleString()}function hi(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(!di.includes(s))return s;if(!(i>t)){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(i===t?n[r]=hi(e[r]):"object"===b(e[r])?n[r]=mi(e[r],t,i+1):n[r]=e[r]);return n}}function pi(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];try{return li?e&&"undefined"!=typeof ManagedMediaSource?ManagedMediaSource:window.MediaSource:null}catch(t){}}W(ci,"disabled",!0);var Zi="appendBuffer",bi="removeBuffer",yi="updateDuration",fi=function(){function e(t,i){var n=this;X(this,e),W(this,"media",null),W(this,"mediaSource",null),W(this,"_openPromise",ei()),W(this,"_queue",Object.create(null)),W(this,"_sourceBuffer",Object.create(null)),W(this,"_mseFullFlag",{}),W(this,"_st",0),W(this,"_opst",0),W(this,"_logger",null),W(this,"_config",null),W(this,"_url",null),W(this,"_onSBUpdateEnd",(function(e){var t=n._queue[e];if(t){var i=t[0];if((null==i?void 0:i.opName)!==yi&&t.shift(),i){var s=ti()-n._opst;n._logger.debug("UpdateEnd",i.opName,s,i.context),i.promise.resolve({name:i.opName,context:i.context,costtime:s}),n._startQueue(e)}}})),W(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 ai(si.MEDIA,si.SUB_TYPES.MSE_APPEND_BUFFER,t)))}})),this._config=Object.assign(e.getDefaultConfig(),i),t&&this.bindMedia(t),this._logger=new ci("MSE"),this._config.openLog&&ci.enable()}var t,i,n;return G(e,[{key:"isOpened",get:function(){var e;return"open"===(null===(e=this.mediaSource)||void 0===e?void 0:e.readyState)}},{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:"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("[debug mse] setDuration ended"):t.mediaSource&&(t.mediaSource.duration=e,t._logger.debug("[debug mse] setDuration"))}),yi,{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=ti()-e._st;e._logger.debug("MSE OPEN",n),t.removeEventListener("sourceopen",i),e._openPromise.resolve({costtime:n})})),this._openPromise=ei()}return this._openPromise}},{key:"bindMedia",value:(n=f(Z().mark((function e(t){var i,n,s,r=this;return Z().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=pi(this._config.perferMMS),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,this._st=ti(),s=function e(){var i=ti()-r._st;r._logger.debug("MSE OPEN"),n.removeEventListener("sourceopen",e),URL.revokeObjectURL(t.src),r._openPromise.resolve({costtime:i})},n.addEventListener("sourceopen",s),this._url=URL.createObjectURL(n),t.src=this._url,"ManagedMediaSource"===i.name?t.disableRemotePlayback=!0:t.disableRemotePlayback=!1,e.abrupt("return",this._openPromise);case 15:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"unbindMedia",value:(i=f(Z().mark((function e(){var t,i,n,s=this;return Z().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(r){}Object.keys(this._sourceBuffer).forEach((function(e){try{t.removeSourceBuffer(s._sourceBuffer[e])}catch(r){}}))}if(this.media){this.media.disableRemotePlayback=!1,this.media.removeAttribute("src");try{this.media.load()}catch(r){}this.media=null}this.mediaSource=null,this._openPromise=ei(),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 ai(si.MEDIA,si.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():this._enqueueOp(e,(function(){n.changeType(t),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=ti(),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,r=!1;return this._mseFullFlag[e]&&(r=!0),this._enqueueOp(e,(function(){if(s.mediaSource&&!s.media.error){var r=s._sourceBuffer[e];t>=i||!r?s._onSBUpdateEnd(e):(s._opst=ti(),s._logger.debug("MSE REMOVE START",e,t,i,n),r.remove(t,i))}}),bi,n,r)}},{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,ni.end(ni.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 ni.get(this._sourceBuffer[e])}},{key:"bufferStart",value:function(e){return ni.start(this.buffered(e))}},{key:"bufferEnd",value:function(e){return ni.end(this.buffered(e))}},{key:"_enqueueOp",value:function(e,t,i,n,s){var r=this;if(!this.mediaSource)return Promise.resolve();var a=this._queue[e]=this._queue[e]||[],l={exec:t,promise:ei(),opName:i,context:n};return s?(a.splice(0,0,l),this._mseFullFlag[e]=!1,this._startQueue(e)):a.push(l),this.isOpened||this.isEnded?1===a.length&&this._startQueue(e):this._openPromise.then((function(){1===a.length&&r._startQueue(e)})),l.promise}},{key:"_enqueueBlockingOp",value:(t=f(Z().mark((function e(t,i,n){var s,r,a=this;return Z().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 r=[],s.forEach((function(e){var t=a._queue[e],s=ei();r.push(s),t.push({exec:function(){s.resolve()},promise:s,opName:i,context:n}),1===t.length&&a._startQueue(e)})),e.abrupt("return",Promise.all(r).then((function(){try{return t()}finally{s.forEach((function(e){var t=a._queue[e],i=a._sourceBuffer[e];null==t||t.shift(),i&&i.updating||a._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(n){n&&n.message&&n.message.indexOf("SourceBuffer is full")>=0?(this._mseFullFlag[e]=!0,this._logger.error("[MSE error], context,",i.context," ,name,",i.opName,",err,SourceBuffer is full"),i.promise.reject(new ai(si.MEDIA,si.SUB_TYPES.MSE_FULL,n))):(this._logger.error(n),i.promise.reject(new ai(si.MEDIA,si.SUB_TYPES.MSE_OTHER,n)),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:"getDefaultConfig",value:function(){return{openLog:!1,perferMMS:!1}}},{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'video/mp4; codecs="avc1.42E01E,mp4a.40.2"',t=pi();if(!t)return!1;try{return t.isTypeSupported(e)}catch(i){return this._logger.error(e,i),!1}}}]),e}();W(fi,"VIDEO","video"),W(fi,"AUDIO","audio");var Xi="fetch",Li="xhr",Gi="arraybuffer",Wi="text",vi="json",Si=function(e){v(i,e);var t=w(i);function i(e,n,s,r){var a;return X(this,i),W(T(a=t.call(this,r)),"retryCount",0),W(T(a),"isTimeout",!1),W(T(a),"loaderType",Xi),W(T(a),"startTime",0),W(T(a),"endTime",0),W(T(a),"options",{}),a.url=e,a.request=n,a.response=s,a}return G(i)}(Y(Error)),xi=Object.prototype.toString;function gi(e){if("[object Object]"!==xi.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function Vi(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 Yi(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ki(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]"===xi.call(i)?t=t.toISOString():function(e){return null!==e&&"object"===b(e)}(t)&&(t=JSON.stringify(t)),"".concat(Yi(e),"=").concat(Yi(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 Ti(e,t,i,n,s,r,a,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:r,firstByteTime:a,endTime:Date.now(),priOptions:c},response:i}}function Ri(e,t){return Math.round(8*e*1e3/t/1024)}var wi="real_time_speed",Mi=2097152,Ki=function(e){v(n,e);var t,i=w(n);function n(){var e;return X(this,n),W(T(e=i.call(this)),"_abortController",null),W(T(e),"_timeoutTimer",null),W(T(e),"_reader",null),W(T(e),"_response",null),W(T(e),"_aborted",!1),W(T(e),"_index",-1),W(T(e),"_range",null),W(T(e),"_receivedLength",0),W(T(e),"_running",!1),W(T(e),"_logger",null),W(T(e),"_vid",""),W(T(e),"_onProcessMinLen",0),W(T(e),"_onCancel",null),W(T(e),"_priOptions",null),e}return G(n,[{key:"load",value:function(e){var t,i=this,n=e.url,s=e.vid,r=e.timeout,a=e.responseType,l=e.onProgress,o=e.index,d=e.onTimeout,c=e.onCancel,u=e.range,h=e.transformResponse,m=e.request,p=e.params,b=e.logger,y=e.method,X=e.headers,L=e.body,G=e.mode,W=e.credentials,v=e.cache,S=e.redirect,x=e.referrer,g=e.referrerPolicy,V=e.onProcessMinLen,Y=e.priOptions;this._logger=b,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||{};var k={method:y,headers:X,body:L,mode:G,credentials:W,cache:v,redirect:S,referrer:x,referrerPolicy:g,signal:null===(t=this._abortController)||void 0===t?void 0:t.signal},T=!1;clearTimeout(this._timeoutTimer),n=ki(n,p);var R=Vi(u);R&&(X=m?m.headers:k.headers=k.headers||(Headers?new Headers:{}),Headers&&X instanceof Headers?X.append("Range",R):X.Range=R),r&&(this._timeoutTimer=setTimeout((function(){if(T=!0,i.cancel(),d){var e=new Si(n,k,null,"timeout");e.isTimeout=!0,d(e,{index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions})}}),r));var w=Date.now();return this._logger.debug("[fetch load start], index,",o,",range,",u),new Promise((function(e,t){fetch(m||n,m?void 0:k).then(function(){var s=f(Z().mark((function s(r){var d,c,m,p;return Z().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:if(clearTimeout(i._timeoutTimer),i._response=r,!i._aborted&&i._running){s.next=4;break}return s.abrupt("return");case 4:if(h&&(r=h(r,n)||r),r.ok){s.next=7;break}throw new Si(n,k,r,"bad network response");case 7:if(d=Date.now(),a!==Wi){s.next=15;break}return s.next=11,r.text();case 11:c=s.sent,i._running=!1,s.next=37;break;case 15:if(a!==vi){s.next=22;break}return s.next=18,r.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(r,l,w,d),s.abrupt("return");case 29:return s.next=31,r.arrayBuffer();case 31:c=s.sent,c=new Uint8Array(c),i._running=!1,m=Date.now()-w,p=Ri(c.byteLength,m),i.emit(wi,{speed:p,len:c.byteLength,time:m,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(Ti(c,!0,r,r.headers.get("Content-Length"),r.headers.get("age"),w,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&&!T||((e=e instanceof Si?e:new Si(n,k,null,null===(s=e)||void 0===s?void 0:s.message)).startTime=w,e.endTime=Date.now(),e.isTimeout=T,e.options={index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions},t(e))}))}))}},{key:"cancel",value:(t=f(Z().mark((function e(){return Z().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 r=new Si(e.url,"",e,"onProgress of bad response.body.getReader");return r.options={index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions},void this.reject(r)}this._onProcessMinLen>0&&(this._cache=new Uint8Array(Mi),this._writeIdx=0);var a,l,o,d=this._reader=e.body.getReader(),c=function(){var r=f(Z().mark((function r(){var u,h,m,p,b,y,f,X;return Z().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return l=Date.now(),r.prev=1,r.next=4,d.read();case 4:a=r.sent,o=Date.now(),r.next=13;break;case 8:return r.prev=8,r.t0=r.catch(1),o=Date.now(),s._aborted||(s._running=!1,r.t0.options={index:s._index,range:s._range,vid:s._vid,priOptions:s._priOptions},s.reject(r.t0)),r.abrupt("return");case 13:if(h=(null===(u=s._range)||void 0===u?void 0:u.length)>0?s._range[0]:0,m=h+s._receivedLength,!s._aborted){r.next=19;break}return s._running=!1,t(void 0,!1,{range:[m,m],vid:s._vid,index:s._index,startTime:l,endTime:o,st:i,firstByteTime:n,priOptions:s._priOptions},e),r.abrupt("return");case 19:p=a.value?a.value.byteLength:0,s._receivedLength+=p,s._logger.debug("【fetchLoader,onProgress call】,task,",s._range,", start,",m,", end,",h+s._receivedLength,", done,",a.done),s._onProcessMinLen>0?s._writeIdx+p>=s._onProcessMinLen||a.done?((b=new Uint8Array(s._writeIdx+p)).set(s._cache.slice(0,s._writeIdx),0),p>0&&b.set(a.value,s._writeIdx),s._writeIdx=0,s._logger.debug("【fetchLoader,onProgress enough】,done,",a.done,",len,",b.byteLength,", writeIdx,",s._writeIdx)):p>0&&s._writeIdx+p<Mi?(s._cache.set(a.value,s._writeIdx),s._writeIdx+=p,s._logger.debug("【fetchLoader,onProgress cache】,len,",p,", writeIdx,",s._writeIdx)):p>0&&(y=new Uint8Array(s._writeIdx+p+2048),s._logger.debug("【fetchLoader,onProgress extra start】,size,",s._writeIdx+p+2048,", datalen,",p,", writeIdx,",s._writeIdx),y.set(s._cache.slice(0,s._writeIdx),0),p>0&&y.set(a.value,s._writeIdx),s._writeIdx+=p,delete s._cache,s._cache=y,s._logger.debug("【fetchLoader,onProgress extra end】,len,",p,", writeIdx,",s._writeIdx)):b=a.value,(b&&b.byteLength>0||a.done)&&t(b,a.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),a.done?(f=Date.now()-i,X=Ri(s._receivedLength,f),s.emit(wi,{speed:X,len:s._receivedLength,time:f,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,",a.done),s.resolve(Ti(a,!0,e,e.headers.get("Content-Length"),e.headers.get("age"),i,n,s._index,s._range,s._vid,s._priOptions))):c();case 25:case"end":return r.stop()}}),r,null,[[1,8]])})));return function(){return r.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 Ii=function(e){v(i,e);var t=w(i);function i(){var e;return X(this,i),W(T(e=t.call(this)),"_xhr",null),W(T(e),"_aborted",!1),W(T(e),"_timeoutTimer",null),W(T(e),"_range",null),W(T(e),"_receivedLength",0),W(T(e),"_url",null),W(T(e),"_onProgress",null),W(T(e),"_index",-1),W(T(e),"_headers",null),W(T(e),"_currentChunkSizeKB",384),W(T(e),"_timeout",null),W(T(e),"_xhr",null),W(T(e),"_withCredentials",null),W(T(e),"_startTime",-1),W(T(e),"_loadCompleteResolve",null),W(T(e),"_loadCompleteReject",null),W(T(e),"_runing",!1),W(T(e),"_logger",!1),W(T(e),"_vid",""),W(T(e),"_responseType",void 0),W(T(e),"_credentials",void 0),W(T(e),"_method",void 0),W(T(e),"_transformResponse",void 0),W(T(e),"_firstRtt",void 0),W(T(e),"_onCancel",null),W(T(e),"_priOptions",null),e}return G(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=ki(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 Si?e:new Si(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===Gi&&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 r=new Si(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));r.options={index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions},t._loadCompleteReject(r)},i.ontimeout=function(e){t.cancel();var i=new Si(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=Vi(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(r){r.options={index:this._index,range:e,vid:this._vid,priOptions:this._priOptions},this._loadCompleteReject(r)}}},{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 Si(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,r=null,a=!1,l=(null===(t=this._range)||void 0===t?void 0:t.length)>0?this._range[0]:0;if(this._responseType===Gi){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=Ri(this._receivedLength,c);this.emit(wi,{speed:u,len:this._receivedLength,time:c,vid:this._vid,index:this._index,range:[s,l+this._receivedLength],priOptions:this._priOptions})}r=d,a=!((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,",a)}else a=!0,r=e.target.response;var h={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&&(h=this._transformResponse(h,this._url)||h),this._onProgress&&this._onProgress(r,a,{index:this._index,vid:this._vid,range:[s,l+this._receivedLength],startTime:this._startTime,endTime:Date.now(),priOptions:this._priOptions},h),a?(this._runing=!1,this._loadCompleteResolve&&this._loadCompleteResolve(Ti(this._onProgress?null:r,a,h,h.headers["content-length"],h.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(S(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=function(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 r,a=!0,l=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return a=e.done,e},e:function(e){l=!0,r=e},f:function(){try{a||null==i.return||i.return()}finally{if(l)throw r}}}}(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(r){n.e(r)}finally{n.f()}return i}}],[{key:"isSupported",value:function(){return"undefined"!=typeof XMLHttpRequest}}]),i}(J),Ci=["retry","retryDelay","onRetryError","transformError"],Hi=function(){function e(t,i){X(this,e),this.promise=ei(),this.alive=!!i.onProgress,!i.logger&&(i.logger=new ci("Loader")),this._loaderType=t,this._loader=t===Xi&&"undefined"!=typeof fetch?new Ki:new Ii,this._config=i,this._retryCount=0,this._retryTimer=null,this._canceled=!1,this._retryCheckFunc=i.retryCheckFunc,this._logger=i.logger}var t;return G(e,[{key:"exec",value:function(){var e=this,t=this._config,i=t.retry,n=t.retryDelay,s=t.onRetryError,r=t.transformError,a=k(t,Ci),l=function(){var t=f(Z().mark((function t(){var o,d,c;return Z().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,e._loader.load(a);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,r&&(d=r(d)||d),s&&e._retryCount>0&&s(d,e._retryCount,{index:a.index,vid:a.vid,range:a.range,priOptions:a.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,",a.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(Z().mark((function e(){return Z().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 Ni(){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 zi(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Promise((function(t){return setTimeout(t,e)}))}var Ui=function(e){v(n,e);var t,i=w(n);function n(e){var t;return X(this,n),W(T(t=i.call(this,e)),"type",Xi),W(T(t),"_queue",[]),W(T(t),"_alive",[]),W(T(t),"_currentTask",null),W(T(t),"_finnalUrl",""),W(T(t),"_config",void 0),t._config=function(e){return p({loaderType:Xi,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:Wi,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!==Li&&Ki.isSupported()||(t.type=Li),t.log=e.logger,t}return G(n,[{key:"isFetch",value:function(){return this.type===Xi}},{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&&gi(i.headers)&&(i.headers=Object.assign({},i.headers)),i.body&&gi(i.body)&&(i.body=Object.assign({},i.body)),i.transformRequest&&(i=i.transformRequest(i)||i),i.logger=this.log;var n=new Hi(this.type,i);return n.loader.on(wi,(function(e){t.emit(wi,e)})),this._queue.push(n),1!==this._queue.length||this._currentTask&&this._currentTask.running||this._processTask(),n.promise}},{key:"cancel",value:(t=f(Z().mark((function e(){var t;return Z().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,zi();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 Ki.isSupported()}}]),n}(J),Fi={416:ri[si.NETWROK_RANGE_NOT_SATISFIABLE],403:ri[si.NETWORK_FORBIDDEN],404:ri[si.NETWORK_NOTFOUND],timeout:ri[si.NETWORK_TIMEOUT],"4xx":"".concat(ri[si.NETWORK],"4XX"),"5xx":"".concat(ri[si.NETWORK],"5XX"),networkError:ri[si.NETWORK],contentError:"".concat(ri[si.NETWORK],"contentError"),mse:ri[si.MEDIA][si.SUB_TYPES.MSE_OTHER],mseOpen:ri[si.MEDIA][si.SUB_TYPES.MSE_ADD_SB],mseAppend:ri[si.MEDIA][si.SUB_TYPES.MSE_APPEND_BUFFER],mse_hijack:ri[si.MEDIA][si.SUB_TYPES.MSE_HIJACK],eme_hijack:ri[si.MEDIA][si.SUB_TYPES.EME_HIJACK],metaError:ri[si.DEMUX][si.SUB_TYPES.MP4],muxError:ri[si.REMUX][si.SUB_TYPES.FMP4],other:ri[si.OTHER],waitTimeout:ri[si.RUNTIME][si.SUB_TYPES.BUFFERBREAK_ERROR],waitTimeoutWithHidden:ri[si.RUNTIME][si.SUB_TYPES.WAITING_TIMEOUT_ERROR],drm:ri[si.DRM][si.SUB_TYPES.LICENSE]},Ji=si;var ji=G((function e(t,i,n){X(this,e);var s=0,r=0;n&&n.range&&n.range.length>1&&(s=n.range[0],r=n.range[1]);var a=function(e){return Fi[e]||e}(i);return{errorCode:a,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:$t,rangeStart:s,rangeEnd:r,ext:n,mediaError:{code:a,message:(null==n?void 0:n.httpText)||(null==n?void 0:n.message)}}})),Pi=G((function e(t,i,n){return X(this,e),{errorCode:i,errorType:t,version:$t,errorMessage:n.msg,ext:n,mediaError:{code:i,message:n.msg}}})),Ei={};Ei.nowTime=function(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}},Ei.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),r=0;return i.every((function(e){return e&&(s.set(e,r),r+=e.byteLength),!0})),s};var Di=G((function e(t,i){X(this,e),this.type="file",this.message=t,this.data=i})),Bi=function(){function e(){X(this,e),W(this,"_data",Object.create(null))}return G(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 _i(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 r,a=[],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 h=null===(c=n.mdia.mdhd)||void 0===c?void 0:c.timescale,m=u.stts,p=u.stsc,Z=u.stsz,b=u.stco,y=u.stss,f=u.ctts;if(!(h&&m&&p&&Z&&b&&y))return;r=(a=Qi(t,h,m,p,Z,b,y,f)).map((function(e){return e.duration}))}if(s){var X,L,G,W=null===(X=s.mdia)||void 0===X||null===(L=X.minf)||void 0===L?void 0:L.stbl;if(!W)return;var v=null===(G=s.mdia.mdhd)||void 0===G?void 0:G.timescale,S=W.stts,x=W.stsc,g=W.stsz,V=W.stco;if(!(v&&S&&x&&g&&V))return;l=Qi(t,v,S,x,g,V,null,null,r)}return{videoSegments:a,audioSegments:l}}}}function Qi(e,t,i,n,s,r,a,l,o){var d,c,u,h,m=[],p=[],Z=[],b=n.entries,y=r.entries,f=s.entrySizes,X=null==a?void 0:a.entries,L=null==l?void 0:l.entries;L&&(d=[],L.forEach((function(e){for(var t=e.count,i=e.offset,n=0;n<t;n++)d.push(i)}))),X&&(c={},X.forEach((function(e){c[e-1]=!0})));var G=0,W=0,v=0,S=0,x=0,g=b[0].samplesPerChunk,V=b[1]?b[1].firstChunk-1:1/0,Y=0,k=-1;i.entries.forEach((function(e){var t=e.count,i=e.delta;h=i;for(var n=0;n<t;n++)u={dts:Y,startTime:G,duration:h,size:f[W]||s.sampleSize,offset:y[v]+x,index:W},X&&(u.keyframe=c[W],u.keyframe?(k++,p.push([u]),Z.push(u.duration)):(p[p.length-1].push(u),Z[p.length-1]+=u.duration),u.gopId=k),d&&W<d.length&&(u.pts=Y+d[W]),0===W&&(u.pts=0),m.push(u),G+=h,Y+=i,++W<g?x+=u.size:(v++,x=0,v>=V&&(S++,V=b[S+1]?b[S+1].firstChunk-1:1/0),g+=b[S].samplesPerChunk)}));var T=m.length;if(T&&(!a||m[0].keyframe)){var R,w=[],M=[],K=0,I=0,H=function(e){var i;R=M[M.length-1],w.push({index:w.length,startTime:(null===(i=w[w.length-1])||void 0===i?void 0:i.endTime)||M[0].startTime/t,endTime:(R.startTime+R.duration)/t,duration:e,range:[M[0].offset,R.offset+R.size],frames:M}),K=0,M=[]};if(a)for(var N=e*t,z=0,U=p.length;z<U;z++){var F;K+=Z[z],(F=M).push.apply(F,C(p[z])),z+1<U?(0===z||K>N)&&H(K/t):H(K/t)}else for(var J=(o=o||[])[0]||e,j=0;j<T;j++){M.push(m[j]);var P=(K+=m[j].duration)/t;(j+1>=T||P+I>=J)&&(I+=P-J,H(P),J=o[w.length]||e)}return w}}function Oi(e){var t="",i="",n=0,s=0,r=0,a=0,l=0,o=0,d=0;e.mvhd&&(l=e.mvhd.duration/e.mvhd.timescale);var c=e.trak;if(c){var u,h,m,p,Z,b,y,f,X,L,G,W,v,S,x,g,V,Y=c.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)})),k=c.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)})),T=null;if(Y)if(T=null===(h=Y.mdia)||void 0===h||null===(m=h.minf)||void 0===m||null===(p=m.stbl)||void 0===p?void 0:p.stsd.entries[0])if(n=T.width,s=T.height,o=null===(Z=Y.mdia)||void 0===Z||null===(b=Z.mdhd)||void 0===b?void 0:b.timescale,t=null===(y=T.avcC||T.hvcC)||void 0===y?void 0:y.codec,"encv"===T.type)u=null===(f=T.sinf)||void 0===f||null===(X=f.schi)||void 0===X?void 0:X.tenc.default_KID;if(k)if(T=null===(L=k.mdia)||void 0===L||null===(G=L.minf)||void 0===G||null===(W=G.stbl)||void 0===W?void 0:W.stsd.entries[0])if(r=T.channelCount,a=T.sampleRate,i=null===(v=T.esds)||void 0===v?void 0:v.codec,d=null===(S=k.mdia)||void 0===S||null===(x=S.mdhd)||void 0===x?void 0:x.timescale,"enca"===T.type)u=u||(null===(g=T.sinf)||void 0===g||null===(V=g.schi)||void 0===V?void 0:V.tenc.default_KID);return{kid:u?u.join(""):null,videoCodec:t,audioCodec:i,width:n,height:s,videoTimescale:o,audioChannelCount:r,audioSampleRate:a,duration:l,audioTimescale:d,moov:e}}}function Ai(e){return"number"==typeof e&&!Number.isNaN(e)}var qi=["vid","cache"],$i=function(e){v(m,e);var t,i,n,s,r,a,l,o,d,c,u,h=w(m);function m(e){var t;X(this,m),W(T(t=h.call(this)),"vid",""),W(T(t),"url",""),W(T(t),"meta",{}),W(T(t),"downloadInfo",[]),W(T(t),"videoSegments",[]),W(T(t),"audioSegments",[]),W(T(t),"cache",null),W(T(t),"_currentSegmentIndex",-1),W(T(t),"_currentLoadingSegmentIndex",-1),W(T(t),"buffer",void 0),W(T(t),"_error",void 0),W(T(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,r=k(i,qi);return t.cache=s||new Bi,t.vid=n||r.url,t.url=r.url,r.transformError=t._transformError,t.logger=new ci("MP4Loader_"+t.vid),e.openLog&&ci.enable(),r.logger=t.logger,t._loader=new Ui(r),t._loader.on(wi,(function(e){t.emit(wi,e)})),t}return G(m,[{key:"isMetaLoaded",get:function(){return this.videoSegments.length||this.audioSegments.length}},{key:"setCurrentSegment",value:function(e){Ai(e)&&(this._currentSegmentIndex=e)}},{key:"isLastSegment",value:function(e){var t,i;return!!Ai(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(Z().mark((function e(t){var i,n,s,r=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=r.length>1&&void 0!==r[1]?r[1]:t,n=r.length>2?r[2]:void 0,s=r.length>3?r[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(Z().mark((function e(t){return Z().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(Z().mark((function e(t,i,n,s){var r,a,l,o,d=this;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=I(i,2),a=r[0],l=r[1],this._error=!1,this.logger.debug("[loadMetaProcess start], range,",[a,l]),o=function(){var e=f(Z().mark((function e(i,r,o){var c,u,h,m,p,b,y,f;return Z().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&&(r=!0,d.logger.debug("[loadMetaProcess],data done,setstate true,[",a,l,"]")),r&&null!=o&&o.range&&o.range.length>0&&o.range[1]<l&&(r=!1,d.logger.debug("[loadMetaProcess],data not done,setstate false,[",a,l,"]")),d.logger.debug("[loadMetaProcess],task,[",a,l,"], range,",o.range,",dataLen,",i?i.byteLength:void 0,", state,",r,",err,",d._error),!d._error&&i&&i.byteLength>0&&n(i,r,o),!d.meta.moov&&!d._error){e.next=6;break}return e.abrupt("return");case 6:if(!(i&&i.byteLength>0)){e.next=44;break}if(d.buffer=Ni(d.buffer,i),c=ze.findBox(d.buffer,["moov"])[0]){e.next=23;break}if(u=ze.findBox(d.buffer,["mdat"])[0],!r){e.next=23;break}if(u){e.next=18;break}return d._error=!0,n(null,r,o,{err:"cannot find moov or mdat box"}),e.abrupt("return");case 18:return h=u.start+u.size,e.next=21,d.loadData([h,""],t,s);case 21:(m=e.sent)&&(c=ze.findBox(m.data,["moov"])[0]);case 23:if(!(c&&r&&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,",r),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=44;break}if(p=ze.moov(c)){e.next=33;break}return d._error=!0,n(null,r,o,{err:"cannot parse moov box"}),e.abrupt("return");case 33:if(b=_i(p,d._config.segmentDuration)){e.next=38;break}return d._error=!0,n(null,r,o,{err:"cannot parse segments"}),e.abrupt("return");case 38:d.meta=Oi(p),y=b.videoSegments,f=b.audioSegments,d.videoSegments=y,d.audioSegments=f,d.logger.debug("[loadMetaProcess] moov ok"),n(void 0,r,{meta:{meta:d.meta,videoSegments:y,audioSegments:f}});case 44:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}(),e.next=6,this.loadData([a,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(Z().mark((function e(t,i,n){var s,r,a,l,o,d,c,u,h;return Z().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(r=e.sent){e.next=7;break}return e.abrupt("return");case 7:if(s.push(r),a=ze.findBox(r.data,["moov"])[0]){e.next=23;break}if(l=ze.findBox(r.data,["mdat"])[0]){e.next=13;break}throw new Di("cannot find moov or mdat box",r.data);case 13:return o=l.start+l.size,e.next=16,this.loadData([o],t,n);case 16:if(r=e.sent){e.next=19;break}return e.abrupt("return");case 19:if(s.push(r),a=ze.findBox(r.data,["moov"],o)[0]){e.next=23;break}throw new Di("cannot find moov box",r.data);case 23:if(!(a.size>a.data.length)){e.next=31;break}return e.next=26,this.loadData([r.data.length,a.start+a.size-1],t,n);case 26:if(r=e.sent){e.next=29;break}return e.abrupt("return");case 29:s.push(r),a.data=Ni(a.data,r.data);case 31:if(d=ze.moov(a)){e.next=34;break}throw new Di("cannot parse moov box",a.data);case 34:if(c=_i(d,this._config.segmentDuration)){e.next=37;break}throw new Di("cannot parse segments",a.data);case 37:return this.meta=Oi(d),u=c.videoSegments,h=c.audioSegments,this.videoSegments=u,this.audioSegments=h,this.logger.debug("[load moov end!!!!!]"),e.abrupt("return",{meta:this.meta,videoSegments:u,audioSegments:h,responses:s});case 43:case"end":return e.stop()}}),e,this)}))),function(e,t,i){return o.apply(this,arguments)})},{key:"loadCacheMeta",value:function(e,t){var i=_i(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(Z().mark((function e(t,i){var n,s,r,a,l,o=arguments;return Z().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 r=this.getSegmentByTime(t),a=r.video,l=r.audio,e.abrupt("return",this._loadSegment(a,l,i,n,s));case 7:case"end":return e.stop()}}),e,this)}))),function(e,t){return l.apply(this,arguments)})},{key:"loadNextSegment",value:(a=f(Z().mark((function e(t){var i,n,s,r,a=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=!(a.length>1&&void 0!==a[1])||a[1],n=a.length>2&&void 0!==a[2]?a[2]:{},this.isMetaLoaded){e.next=5;break}return e.next=5,this.loadMeta();case 5:return s=this.videoSegments[this._currentSegmentIndex+1],r=this.audioSegments[this._currentSegmentIndex+1],e.abrupt("return",this._loadSegment(s,r,t,i,n));case 8:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"preload",value:(r=f(Z().mark((function e(t){var i,n,s,r,a,l,o,d=this;return Z().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,r=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 a=this.videoSegments.slice(0,r),l=this.audioSegments.slice(0,r),o=function(){var e=f(Z().mark((function e(t){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(t>r)){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,d._loadSegment(a[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 r.apply(this,arguments)})},{key:"cancel",value:function(){return this._loader.cancel()}},{key:"reset",value:(s=f(Z().mark((function e(){var t=arguments;return Z().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(Z().mark((function e(){return Z().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(Z().mark((function e(t,i,n,s,r){var a,l;return Z().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 a=(null==t?void 0:t.index)||(null==i?void 0:i.index)||0,this._currentLoadingSegmentIndex=a,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,r);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=a),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,r){return i.apply(this,arguments)})},{key:"loadData",value:(t=f(Z().mark((function e(t,i,n){var s,r,a,l;return Z().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(r=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:a=e.sent,e.next=12;break;case 11:a={data:r,state:!0,options:{fromCache:!0,range:t,vid:this.vid}};case 12:if(a){e.next=14;break}return e.abrupt("return");case 14:return r||(a.data&&this.downloadInfo.push({startTime:a.startTime,endTime:a.endTime,size:a.data.byteLength,range:t}),this.downloadInfo&&this.downloadInfo.length>this._config.maxDownloadInfoSize&&(this.downloadInfo=this.downloadInfo.slice(-this._config.maxDownloadInfoSize))),e.abrupt("return",a);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}}]),m}(J),en=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}}(),tn=nn();function nn(){if(en)try{return!!window.localStorage.getItem("playerlog")}catch(e){return!1}return!1}function sn(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];tn&&console.log&&(t=console).log.apply(t,["[logger]",Ei.nowTime(),e].concat(n))}!function(){if(en)try{return!!window.localStorage.getItem("playertestlog")}catch(e){return!1}}();var rn="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihhPWEuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLGEpfXJldHVybiByfWZ1bmN0aW9uIHQodCl7Zm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dmFyIGE9bnVsbCE9YXJndW1lbnRzW3JdP2FyZ3VtZW50c1tyXTp7fTtyJTI/ZShPYmplY3QoYSksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kodCxlLGFbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOmUoT2JqZWN0KGEpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGsoYS5rZXkpLGEpfX1mdW5jdGlvbiBuKGUsdCxyKXtyZXR1cm4gdCYmYShlLnByb3RvdHlwZSx0KSxyJiZhKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBpKGUsdCxyKXtyZXR1cm4odD1rKHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuKG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuKHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBjKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4obD1jKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1bbnVsbF07YS5wdXNoLmFwcGx5KGEsdCk7dmFyIG49bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZSxhKSk7cmV0dXJuIHImJnUobixyLnByb3RvdHlwZSksbn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCl7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX1mdW5jdGlvbiBkKGUpe3ZhciB0PWMoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPW8oZSk7aWYodCl7dmFyIG49byh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLG4pfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZih0aGlzLHIpfX1mdW5jdGlvbiBoKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1vKGUpKTspO3JldHVybiBlfWZ1bmN0aW9uIHAoKXtyZXR1cm4gcD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIGE9aChlLHQpO2lmKGEpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSx0KTtyZXR1cm4gbi5nZXQ/bi5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTpuLnZhbHVlfX0scC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBhLG4saSxzLG89W10sdT0hMCxjPSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47dT0hMX1lbHNlIGZvcig7ISh1PShhPWkuY2FsbChyKSkuZG9uZSkmJihvLnB1c2goYS52YWx1ZSksby5sZW5ndGghPT10KTt1PSEwKTt9Y2F0Y2gobCl7Yz0hMCxuPWx9ZmluYWxseXt0cnl7aWYoIXUmJm51bGwhPXIucmV0dXJuJiYocz1yLnJldHVybigpLE9iamVjdChzKSE9PXMpKXJldHVybn1maW5hbGx5e2lmKGMpdGhyb3cgbn19cmV0dXJuIG99fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB5KGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBnKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBtKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBnKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLGE9bmV3IEFycmF5KHQpO3I8dDtyKyspYVtyXT1lW3JdO3JldHVybiBhfWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX12YXIgYj0idmlkZW8iLF89ImF1ZGlvIix3PSJtZXRhZGF0YSIseD0iYXZjIixTPSJoZXZjIixBPSJhYWMiLEQ9Imc3MTEwYSIsRT0iZzcxMTBtIixCPSJMQVJHRV9BVl9TSElGVCIsVD0iTEFSR0VfVklERU9fR0FQIixDPSJMQVJHRV9WSURFT19HQVBfQkVUV0VFTl9DSFVOSyIsVT0iTEFSR0VfQVVESU9fR0FQIixQPSJBVURJT19GSUxMRUQiLEk9IkFVRElPX0RST1BQRUQiLHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLGkodGhpcywiaWQiLDEpLGkodGhpcywidHlwZSIsYiksaSh0aGlzLCJjb2RlY1R5cGUiLHgpLGkodGhpcywicGlkIiwtMSksaSh0aGlzLCJodmNDIix2b2lkIDApLGkodGhpcywiY29kZWMiLCIiKSxpKHRoaXMsInRpbWVzY2FsZSIsMCksaSh0aGlzLCJmb3JtYXRUaW1lc2NhbGUiLDApLGkodGhpcywic2VxdWVuY2VOdW1iZXIiLDApLGkodGhpcywiYmFzZU1lZGlhRGVjb2RlVGltZSIsMCksaSh0aGlzLCJiYXNlRHRzIiwwKSxpKHRoaXMsImR1cmF0aW9uIiwwKSxpKHRoaXMsIndhcm5pbmdzIixbXSksaSh0aGlzLCJzYW1wbGVzIixbXSksaSh0aGlzLCJwcHMiLFtdKSxpKHRoaXMsInNwcyIsW10pLGkodGhpcywidnBzIixbXSksaSh0aGlzLCJmcHNOdW0iLDApLGkodGhpcywiZnBzRGVuIiwwKSxpKHRoaXMsInNhclJhdGlvIixbXSksaSh0aGlzLCJ3aWR0aCIsMCksaSh0aGlzLCJoZWlnaHQiLDApLGkodGhpcywibmFsVW5pdFNpemUiLDQpLGkodGhpcywicHJlc2VudCIsITEpLGkodGhpcywiaXNWaWRlb0VuY3J5cHRpb24iLCExKSxpKHRoaXMsImlzQXVkaW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJpc1ZpZGVvIiwhMCksaSh0aGlzLCJraWQiLG51bGwpLGkodGhpcywicHNzaCIsbnVsbCksaSh0aGlzLCJleHQiLHZvaWQgMCl9cmV0dXJuIG4oZSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZU51bWJlcj10aGlzLndpZHRoPXRoaXMuaGVpZ2h0PXRoaXMuZnBzRGVuPXRoaXMuZnBzTnVtPXRoaXMuZHVyYXRpb249dGhpcy5iYXNlTWVkaWFEZWNvZGVUaW1lPXRoaXMudGltZXNjYWxlPTAsdGhpcy5jb2RlYz0iIix0aGlzLnByZXNlbnQ9ITEsdGhpcy5waWQ9LTEsdGhpcy5wcHM9W10sdGhpcy5zcHM9W10sdGhpcy52cHM9W10sdGhpcy5zYXJSYXRpbz1bXSx0aGlzLnNhbXBsZXM9W10sdGhpcy53YXJuaW5ncz1bXSx0aGlzLmh2Y0M9bnVsbH19LHtrZXk6ImV4aXN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEhKHRoaXMucHBzLmxlbmd0aCYmdGhpcy5zcHMubGVuZ3RoJiZ0aGlzLmNvZGVjKX19LHtrZXk6Imhhc1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc2FtcGxlcy5sZW5ndGh9fSx7a2V5OiJpc0VuY3J5cHRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmlkZW9FbmNyeXB0aW9ufX1dKSxlfSgpLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLGkodGhpcywiaWQiLDIpLGkodGhpcywidHlwZSIsXyksaSh0aGlzLCJjb2RlY1R5cGUiLEEpLGkodGhpcywicGlkIiwtMSksaSh0aGlzLCJjb2RlYyIsIiIpLGkodGhpcywic2VxdWVuY2VOdW1iZXIiLDApLGkodGhpcywic2FtcGxlRHVyYXRpb24iLDApLGkodGhpcywidGltZXNjYWxlIiwwKSxpKHRoaXMsImZvcm1hdFRpbWVzY2FsZSIsMCksaSh0aGlzLCJiYXNlTWVkaWFEZWNvZGVUaW1lIiwwKSxpKHRoaXMsImR1cmF0aW9uIiwwKSxpKHRoaXMsIndhcm5pbmdzIixbXSksaSh0aGlzLCJzYW1wbGVzIixbXSksaSh0aGlzLCJiYXNlRHRzIiwwKSxpKHRoaXMsInNhbXBsZVNpemUiLDE2KSxpKHRoaXMsInNhbXBsZVJhdGUiLDApLGkodGhpcywiY2hhbm5lbENvdW50IiwwKSxpKHRoaXMsIm9iamVjdFR5cGUiLDApLGkodGhpcywic2FtcGxlUmF0ZUluZGV4IiwwKSxpKHRoaXMsImNvbmZpZyIsW10pLGkodGhpcywicHJlc2VudCIsITEpLGkodGhpcywiaXNWaWRlb0VuY3J5cHRpb24iLCExKSxpKHRoaXMsImlzQXVkaW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJraWQiLG51bGwpLGkodGhpcywiZXh0Iix2b2lkIDApfXJldHVybiBuKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VOdW1iZXI9MCx0aGlzLnRpbWVzY2FsZT0wLHRoaXMuc2FtcGxlRHVyYXRpb249MCx0aGlzLnNhbXBsZVJhdGU9MCx0aGlzLmNoYW5uZWxDb3VudD0wLHRoaXMuYmFzZU1lZGlhRGVjb2RlVGltZT0wLHRoaXMucHJlc2VudD0hMSx0aGlzLnBpZD0tMSx0aGlzLmNvZGVjPSIiLHRoaXMuc2FtcGxlcz1bXSx0aGlzLmNvbmZpZz1bXSx0aGlzLndhcm5pbmdzPVtdfX0se2tleToiZXhpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISEodGhpcy5zYW1wbGVSYXRlJiZ0aGlzLmNoYW5uZWxDb3VudCYmdGhpcy5jb2RlYyYmdGhpcy5jb2RlY1R5cGU9PT1BKX19LHtrZXk6Imhhc1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc2FtcGxlcy5sZW5ndGh9fSx7a2V5OiJpc0VuY3J5cHRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQXVkaW9FbmNyeXB0aW9ufX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsYSxuKXtyKHRoaXMsZSksaSh0aGlzLCJmbGFnIix7fSksaSh0aGlzLCJrZXlmcmFtZSIsITEpLGkodGhpcywiZ29wSWQiLDApLGkodGhpcywiZHVyYXRpb24iLDApLGkodGhpcywic2l6ZSIsMCksaSh0aGlzLCJ1bml0cyIsW10pLGkodGhpcywiY2hyb21hRm9ybWF0Iiw0MjApLHRoaXMub3JpZ2luUHRzPXRoaXMucHRzPXQsdGhpcy5vcmlnaW5EdHM9dGhpcy5kdHM9YSxuJiYodGhpcy51bml0cz1uKX1yZXR1cm4gbihlLFt7a2V5OiJjdHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB0cy10aGlzLmR0c319LHtrZXk6InNldFRvS2V5ZnJhbWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5rZXlmcmFtZT0hMCx0aGlzLmZsYWcuZGVwZW5kc09uPTIsdGhpcy5mbGFnLmlzTm9uU3luY1NhbXBsZT0wfX1dKSxlfSgpLE89bigoZnVuY3Rpb24gZSh0LGEsbixzKXtyKHRoaXMsZSksaSh0aGlzLCJkdXJhdGlvbiIsMTAyNCksaSh0aGlzLCJmbGFnIix7ZGVwZW5kc09uOjIsaXNOb25TeW5jU2FtcGxlOjB9KSxpKHRoaXMsImtleWZyYW1lIiwhMCksdGhpcy5vcmlnaW5QdHM9dGhpcy5wdHM9dGhpcy5kdHM9dCx0aGlzLmRhdGE9YSx0aGlzLnNpemU9YS5ieXRlTGVuZ3RoLHRoaXMuc2FtcGxlT2Zmc2V0PXMsbiYmKHRoaXMuZHVyYXRpb249bil9KSksTD1uKChmdW5jdGlvbiBlKHQsYSl7cih0aGlzLGUpLGkodGhpcywidGltZSIsMCksdGhpcy5kYXRhPXQsdGhpcy5vcmlnaW5QdHM9dGhpcy5wdHM9YX0pKSxWPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEpfShMKSxGPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEpfShMKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSxpKHRoaXMsImlkIiwzKSxpKHRoaXMsInR5cGUiLHcpLGkodGhpcywidGltZXNjYWxlIiwwKSxpKHRoaXMsImZsdlNjcmlwdFNhbXBsZXMiLFtdKSxpKHRoaXMsInNlaVNhbXBsZXMiLFtdKX1yZXR1cm4gbihlLFt7a2V5OiJleGlzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLmZsdlNjcmlwdFNhbXBsZXMubGVuZ3RoJiYhdGhpcy5zZWlTYW1wbGVzLmxlbmd0aHx8IXRoaXMudGltZXNjYWxlKX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudGltZXNjYWxlPTAsdGhpcy5mbHZTY3JpcHRTYW1wbGVzPVtdLHRoaXMuc2VpU2FtcGxlcz1bXX19LHtrZXk6Imhhc1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLmZsdlNjcmlwdFNhbXBsZXMubGVuZ3RoJiYhdGhpcy5zZWlTYW1wbGVzLmxlbmd0aCl9fV0pLGV9KCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYocih0aGlzLGUpLGkodGhpcywiX2J5dGVzQXZhaWxhYmxlIix2b2lkIDApLGkodGhpcywiX2JpdHNBdmFpbGFibGUiLDApLGkodGhpcywiX3dvcmQiLDApLCF0KXRocm93IG5ldyBFcnJvcigiRXhwR29sb21iIGRhdGEgcGFyYW1zIGlzIHJlcXVpcmVkIik7dGhpcy5fZGF0YT10LHRoaXMuX2J5dGVzQXZhaWxhYmxlPXQuYnl0ZUxlbmd0aCx0aGlzLl9ieXRlc0F2YWlsYWJsZSYmdGhpcy5fbG9hZFdvcmQoKX1yZXR1cm4gbihlLFt7a2V5OiJiaXRzQXZhaWxhYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYml0c0F2YWlsYWJsZX19LHtrZXk6Il9sb2FkV29yZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9kYXRhLmJ5dGVMZW5ndGgtdGhpcy5fYnl0ZXNBdmFpbGFibGUsdD1NYXRoLm1pbig0LHRoaXMuX2J5dGVzQXZhaWxhYmxlKTtpZigwPT09dCl0aHJvdyBuZXcgRXJyb3IoIk5vIGJ5dGVzIGF2YWlsYWJsZSIpO3ZhciByPW5ldyBVaW50OEFycmF5KDQpO3Iuc2V0KHRoaXMuX2RhdGEuc3ViYXJyYXkoZSxlK3QpKSx0aGlzLl93b3JkPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcikuZ2V0VWludDMyKDApLHRoaXMuX2JpdHNBdmFpbGFibGU9OCp0LHRoaXMuX2J5dGVzQXZhaWxhYmxlLT10fX0se2tleToic2tpcEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2JpdHNBdmFpbGFibGU+ZSl0aGlzLl93b3JkPDw9ZSx0aGlzLl9iaXRzQXZhaWxhYmxlLT1lO2Vsc2V7ZS09dGhpcy5fYml0c0F2YWlsYWJsZTt2YXIgdD1NYXRoLmZsb29yKGUvOCk7ZS09OCp0LHRoaXMuX2J5dGVzQXZhaWxhYmxlLT10LHRoaXMuX2xvYWRXb3JkKCksdGhpcy5fd29yZDw8PWUsdGhpcy5fYml0c0F2YWlsYWJsZS09ZX19fSx7a2V5OiJyZWFkQml0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZT4zMil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWFkIG1vcmUgdGhhbiAzMiBiaXRzIik7dmFyIHQ9TWF0aC5taW4odGhpcy5fYml0c0F2YWlsYWJsZSxlKSxyPXRoaXMuX3dvcmQ+Pj4zMi10O3JldHVybiB0aGlzLl9iaXRzQXZhaWxhYmxlLT10LHRoaXMuX2JpdHNBdmFpbGFibGU+MD90aGlzLl93b3JkPDw9dDp0aGlzLl9ieXRlc0F2YWlsYWJsZT4wJiZ0aGlzLl9sb2FkV29yZCgpLCh0PWUtdCk+MCYmdGhpcy5fYml0c0F2YWlsYWJsZT9yPDx0fHRoaXMucmVhZEJpdHModCk6cn19LHtrZXk6InNraXBMWiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtmb3IoZT0wO2U8dGhpcy5fYml0c0F2YWlsYWJsZTsrK2UpaWYoMCE9KHRoaXMuX3dvcmQmMjE0NzQ4MzY0OD4+PmUpKXJldHVybiB0aGlzLl93b3JkPDw9ZSx0aGlzLl9iaXRzQXZhaWxhYmxlLT1lLGU7cmV0dXJuIHRoaXMuX2xvYWRXb3JkKCksZSt0aGlzLnNraXBMWigpfX0se2tleToic2tpcFVFRyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNraXBCaXRzKDErdGhpcy5za2lwTFooKSl9fSx7a2V5OiJyZWFkVUVHIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2tpcExaKCk7cmV0dXJuIHRoaXMucmVhZEJpdHMoZSsxKS0xfX0se2tleToicmVhZEVHIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVFRygpO3JldHVybiAxJmU/MStlPj4+MTotMSooZT4+PjEpfX0se2tleToicmVhZEJvb2wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLnJlYWRCaXRzKDEpfX0se2tleToicmVhZFVCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKDgpfX0se2tleToic2tpcFNjYWxpbmdMaXN0Iix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9OCxyPTgsYT0wO2E8ZTthKyspMCE9PXImJihyPSh0K3RoaXMucmVhZEVHKCkrMjU2KSUyNTYpLHQ9MD09PXI/dDpyfX1dKSxlfSgpLEc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKSx0aGlzLm5hbWU9dHx8IiIsdGhpcy5fcHJlZml4PSJbIi5jb25jYXQodGhpcy5uYW1lLCJdIil9cmV0dXJuIG4oZSxbe2tleToid2FybiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkud2Fybi5hcHBseSh0LFt0aGlzLl9wcmVmaXhdLmNvbmNhdChhKSl9fX1dLFt7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7ZS5kaXNhYmxlZD0hMX19LHtrZXk6ImRpc2FibGUiLHZhbHVlOmZ1bmN0aW9uKCl7ZS5kaXNhYmxlZD0hMH19XSksZX0oKTtpKEcsImRpc2FibGVkIiwhMCk7dmFyIEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToiZGVjb2RlIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIHI9W10sYT10LG49MCxpPXQubGVuZ3RoO248aTspaWYoYVtuXTwxMjgpci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYVtuXSkpLCsrbjtlbHNle2lmKGFbbl08MTkyKTtlbHNlIGlmKGFbbl08MjI0KXtpZihlLl9jaGVja0NvbnRpbnVhdGlvbihhLG4sMSkpe3ZhciBzPSgzMSZhW25dKTw8Nnw2MyZhW24rMV07aWYocz49MTI4KXtyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzNSZzKSksbis9Mjtjb250aW51ZX19fWVsc2UgaWYoYVtuXTwyNDApe2lmKGUuX2NoZWNrQ29udGludWF0aW9uKGEsbiwyKSl7dmFyIG89KDE1JmFbbl0pPDwxMnwoNjMmYVtuKzFdKTw8Nnw2MyZhW24rMl07aWYobz49MjA0OCYmNTUyOTYhPSg2MzQ4OCZvKSl7ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzUmbykpLG4rPTM7Y29udGludWV9fX1lbHNlIGlmKGFbbl08MjQ4JiZlLl9jaGVja0NvbnRpbnVhdGlvbihhLG4sMykpe3ZhciB1PSg3JmFbbl0pPDwxOHwoNjMmYVtuKzFdKTw8MTJ8KDYzJmFbbisyXSk8PDZ8NjMmYVtuKzNdO2lmKHU+NjU1MzYmJnU8MTExNDExMil7dS09NjU1MzYsci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodT4+PjEwfDU1Mjk2KSksci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTAyMyZ1fDU2MzIwKSksbis9NDtjb250aW51ZX19ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzMpKSwrK259cmV0dXJuIHIuam9pbigiIil9fSx7a2V5OiJfY2hlY2tDb250aW51YXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1lO2lmKHQrcjxhLmxlbmd0aCl7Zm9yKDtyLS07KWlmKDEyOCE9KDE5MiZhWysrdF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfX1dKSxlfSgpLEs9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cscT1LJiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG9jYWxlTG93ZXJDYXNlKCksVz1LJiYvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvLnRlc3QocSksWD1LJiZxLmluY2x1ZGVzKCJmaXJlZm94IiksWT1LJiZxLmluY2x1ZGVzKCJhbmRyb2lkIik7ZnVuY3Rpb24gWigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3Q9dC5maWx0ZXIoQm9vbGVhbik7dmFyIGE9bmV3IFVpbnQ4QXJyYXkodC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5ieXRlTGVuZ3RofSksMCkpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChlLG4pLG4rPWUuYnl0ZUxlbmd0aH0pKSxhfXZhciBRPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIEooZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuKGVbdF08PDgpKyhlW3QrMV18fDApfWZ1bmN0aW9uICQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuKGVbdF08PDI0Pj4+MCkrKGVbdCsxXTw8MTYpKyhlW3QrMl08PDgpKyhlW3QrM118fDApfWZ1bmN0aW9uIGVlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybiAkKGUsdCkqUSskKGUsdCs0KX1mdW5jdGlvbiB0ZShlKXtmb3IodmFyIHQscj0iYXZjMS4iLGE9MDthPDM7YSsrKSh0PWVbYV0udG9TdHJpbmcoMTYpKS5sZW5ndGg8MiYmKHQ9IjAiLmNvbmNhdCh0KSkscis9dDtyZXR1cm4gcn1mdW5jdGlvbiByZShlKXt2YXIgdD0iIjtpZihlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QrPWZ1bmN0aW9uKGUpe3JldHVybigiMCIrTnVtYmVyKGUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLnRvVXBwZXJDYXNlKCl9KGUpfSkpLHQubGVuZ3RoPD0zMilmb3IodmFyIHI9MzItdC5sZW5ndGgsYT0wO2E8cjthKyspdCs9IjAiO3JldHVybiB0fWZ1bmN0aW9uIGFlKGUpe2lmKCFBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9W10scj0iIixhPTA7YTxlLmxlbmd0aDthKyspYSUyJiYocj1lW2EtMV0rZVthXSx0LnB1c2gocGFyc2VJbnQociwxNikpLHI9IiIpO3JldHVybiB0fXJldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTYpfSkpfXZhciBuZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9MixhPTA7bnVsbCE9PWVbcl0mJnZvaWQgMCE9PWVbcl0mJjEhPT1lW3JdOylyKys7aWYoKGE9KytyKzIpPj10KXJldHVybltdO2Zvcih2YXIgbj1bXTthPHQ7KXN3aXRjaChlW2FdKXtjYXNlIDA6aWYoMCE9PWVbYS0xXSl7YSs9MjticmVha31pZigwIT09ZVthLTJdKXthKys7YnJlYWt9ciE9PWEtMiYmbi5wdXNoKGUuc3ViYXJyYXkocixhLTIpKTtkb3thKyt9d2hpbGUoMSE9PWVbYV0mJmE8dCk7YT0ocj1hKzEpKzI7YnJlYWs7Y2FzZSAxOmlmKDAhPT1lW2EtMV18fDAhPT1lW2EtMl0pe2ErPTM7YnJlYWt9ciE9PWEtMiYmbi5wdXNoKGUuc3ViYXJyYXkocixhLTIpKSxhPShyPWErMSkrMjticmVhaztkZWZhdWx0OmErPTN9cmV0dXJuIHI8dCYmbi5wdXNoKGUuc3ViYXJyYXkocikpLG59fSx7a2V5OiJwYXJzZUF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2lmKCEoZS5sZW5ndGg8NCkpe2Zvcih2YXIgcixhPWUubGVuZ3RoLG49W10saT0wO2krdDxhOylpZihyPSQoZSxpKSwzPT09dCYmKHI+Pj49OCksaSs9dCxyKXtpZihpK3I+YSlicmVhaztuLnB1c2goZS5zdWJhcnJheShpLGkrcikpLGkrPXJ9cmV0dXJuIG59fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLGE9dD8yOjEsbj0wLGk9MCxzPSIiOzI1NT09PWVbYV07KW4rPTI1NSxhKys7Zm9yKG4rPWVbYSsrXTsyNTU9PT1lW2FdOylpKz0yNTUsYSsrO2lmKGkrPWVbYSsrXSw1PT09biYmcj5hKzE2KWZvcih2YXIgbz0wO288MTY7bysrKXMrPWVbYV0udG9TdHJpbmcoMTYpLGErKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KGEsYStpKSx0eXBlOm4sc2l6ZTppLHV1aWQ6c319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgscj1bXSxhPTE7YTx0LTI7KTA9PT1lW2FdJiYwPT09ZVthKzFdJiYzPT09ZVthKzJdPyhyLnB1c2goYSsyKSxhKz0yKTphKys7aWYoIXIubGVuZ3RoKXJldHVybiBlO3ZhciBuPXQtci5sZW5ndGgsaT1uZXcgVWludDhBcnJheShuKSxzPTA7Zm9yKGE9MDthPG47cysrLGErKylzPT09clswXSYmKHMrKyxyLnNoaWZ0KCkpLGlbYV09ZVtzXTtyZXR1cm4gaX19XSksZX0oKSxpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDcpKXtmb3IodmFyIHIsYSxuPTErKDMmdFs0XSksaT1bXSxzPVtdLG89Nix1PTMxJnRbNV0sYz0wO2M8dTtjKyspaWYoYT10W29dPDw4fHRbbysxXSxvKz0yLGEpe3ZhciBsPXQuc3ViYXJyYXkobyxvK2EpO28rPWEsaS5wdXNoKGwpLHJ8fChyPWUucGFyc2VTUFMobmUucmVtb3ZlRVBCKGwpKSl9dmFyIGYsZD10W29dO28rKztmb3IodmFyIGg9MDtoPGQ7aCsrKWY9dFtvXTw8OHx0W28rMV0sbys9MixmJiYocy5wdXNoKHQuc3ViYXJyYXkobyxvK2YpKSxvKz1mKTtyZXR1cm57c3BzOnIsc3BzQXJyOmkscHBzQXJyOnMsbmFsVW5pdFNpemU6bn19fX0se2tleToicGFyc2VTUFMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBqKGUpO3QucmVhZFVCeXRlKCk7dmFyIHI9dC5yZWFkVUJ5dGUoKSxhPXQucmVhZFVCeXRlKCksbj10LnJlYWRVQnl0ZSgpO3Quc2tpcFVFRygpO3ZhciBpPTQyMDtpZigxMDA9PT1yfHwxMTA9PT1yfHwxMjI9PT1yfHwyNDQ9PT1yfHw0ND09PXJ8fDgzPT09cnx8ODY9PT1yfHwxMTg9PT1yfHwxMjg9PT1yfHwxMzg9PT1yfHwxNDQ9PT1yKXt2YXIgcz10LnJlYWRVRUcoKTtpZihzPD0zJiYoaT1bMCw0MjAsNDIyLDQ0NF1bc10pLDM9PT1zJiZ0LnNraXBCaXRzKDEpLHQuc2tpcFVFRygpLHQuc2tpcFVFRygpLHQuc2tpcEJpdHMoMSksdC5yZWFkQm9vbCgpKWZvcih2YXIgbz0zIT09cz84OjEyLHU9MDt1PG87dSsrKXQucmVhZEJvb2woKSYmKHU8Nj90LnNraXBTY2FsaW5nTGlzdCgxNik6dC5za2lwU2NhbGluZ0xpc3QoNjQpKX10LnNraXBVRUcoKTt2YXIgYz10LnJlYWRVRUcoKTtpZigwPT09Yyl0LnJlYWRVRUcoKTtlbHNlIGlmKDE9PT1jKXt0LnNraXBCaXRzKDEpLHQuc2tpcFVFRygpLHQuc2tpcFVFRygpO2Zvcih2YXIgbD10LnJlYWRVRUcoKSxmPTA7ZjxsO2YrKyl0LnNraXBVRUcoKX10LnNraXBVRUcoKSx0LnNraXBCaXRzKDEpO3ZhciBkPXQucmVhZFVFRygpLGg9dC5yZWFkVUVHKCkscD10LnJlYWRCaXRzKDEpOzA9PT1wJiZ0LnNraXBCaXRzKDEpLHQuc2tpcEJpdHMoMSk7dmFyIHYseSxtLGcsayxiPTAsXz0wLHc9MCx4PTA7aWYodC5yZWFkQm9vbCgpJiYoYj10LnJlYWRVRUcoKSxfPXQucmVhZFVFRygpLHc9dC5yZWFkVUVHKCkseD10LnJlYWRVRUcoKSksdC5yZWFkQm9vbCgpKXtpZih0LnJlYWRCb29sKCkpc3dpdGNoKHQucmVhZFVCeXRlKCkpe2Nhc2UgMTp2PVsxLDFdO2JyZWFrO2Nhc2UgMjp2PVsxMiwxMV07YnJlYWs7Y2FzZSAzOnY9WzEwLDExXTticmVhaztjYXNlIDQ6dj1bMTYsMTFdO2JyZWFrO2Nhc2UgNTp2PVs0MCwzM107YnJlYWs7Y2FzZSA2OnY9WzI0LDExXTticmVhaztjYXNlIDc6dj1bMjAsMTFdO2JyZWFrO2Nhc2UgODp2PVszMiwxMV07YnJlYWs7Y2FzZSA5OnY9WzgwLDMzXTticmVhaztjYXNlIDEwOnY9WzE4LDExXTticmVhaztjYXNlIDExOnY9WzE1LDExXTticmVhaztjYXNlIDEyOnY9WzY0LDMzXTticmVhaztjYXNlIDEzOnY9WzE2MCw5OV07YnJlYWs7Y2FzZSAxNDp2PVs0LDNdO2JyZWFrO2Nhc2UgMTU6dj1bMywyXTticmVhaztjYXNlIDE2OnY9WzIsMV07YnJlYWs7Y2FzZSAyNTU6dj1bdC5yZWFkVUJ5dGUoKTw8OHx0LnJlYWRVQnl0ZSgpLHQucmVhZFVCeXRlKCk8PDh8dC5yZWFkVUJ5dGUoKV19aWYodC5yZWFkQm9vbCgpJiZ0LnJlYWRCb29sKCksdC5yZWFkQm9vbCgpJiYodC5yZWFkQml0cyg0KSx0LnJlYWRCb29sKCkmJnQucmVhZEJpdHMoMjQpKSx0LnJlYWRCb29sKCkmJih0LnJlYWRVRUcoKSx0LnJlYWRVRUcoKSksdC5yZWFkQm9vbCgpKXt2YXIgUz10LnJlYWRCaXRzKDMyKSxBPXQucmVhZEJpdHMoMzIpO3k9dC5yZWFkQm9vbCgpLGs9KG09QSkvKGc9MipTKX19cmV0dXJue2NvZGVjOnRlKGUuc3ViYXJyYXkoMSw0KSkscHJvZmlsZUlkYzpyLHByb2ZpbGVDb21wYXRpYmlsaXR5OmEsbGV2ZWxJZGM6bixjaHJvbWFGb3JtYXQ6aSx3aWR0aDpNYXRoLmNlaWwoMTYqKGQrMSktMiooYitfKSksaGVpZ2h0OigyLXApKihoKzEpKjE2LShwPzI6NCkqKHcreCksc2FyUmF0aW86dixmcHNOdW06bSxmcHNEZW46ZyxmcHM6ayxmaXhlZEZyYW1lOnl9fX1dKSxlfSgpLHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6ImdldFJhdGVJbmRleEJ5UmF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuRlJFUS5pbmRleE9mKHQpfX0se2tleToicGFyc2VBRFRTIix2YWx1ZTpmdW5jdGlvbih0LHIpe2Zvcih2YXIgYT10Lmxlbmd0aCxuPTA7bisyPGEmJigyNTUhPT10W25dfHwyNDAhPSgyNDYmdFtuKzFdKSk7KW4rKztpZighKG4+PWEpKXt2YXIgaT1uLHM9W10sbz0oNjAmdFtuKzJdKT4+PjIsdT1lLkZSRVFbb107aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNhbXBsaW5nIGluZGV4OiAiLmNvbmNhdChvKSk7Zm9yKHZhciBjLGwsZj0xKygoMTkyJnRbbisyXSk+Pj42KSxkPSgxJnRbbisyXSk8PDJ8KDE5MiZ0W24rM10pPj4+NixoPWUuX2dldENvbmZpZyhvLGQsZikscD1oLmNvbmZpZyx2PWguY29kZWMseT0wLG09ZS5nZXRGcmFtZUR1cmF0aW9uKHUpO24rNzxhOylpZigyNTU9PT10W25dJiYyNDA9PSgyNDYmdFtuKzFdKSl7aWYoYS1uPChsPSgzJnRbbiszXSk8PDExfHRbbis0XTw8M3woMjI0JnRbbis1XSk+PjUpKWJyZWFrO2M9MiooMSZ+dFtuKzFdKSxzLnB1c2goe3B0czpyK3kqbSxkYXRhOnQuc3ViYXJyYXkobis3K2MsbitsKX0pLHkrKyxuKz1sfWVsc2UgbisrO3JldHVybntza2lwOmkscmVtYWluaW5nOm4+PWE/dm9pZCAwOnQuc3ViYXJyYXkobiksZnJhbWVzOnMsc2FtcGxpbmdGcmVxdWVuY3lJbmRleDpvLHNhbXBsZVJhdGU6dSxvYmplY3RUeXBlOmYsY2hhbm5lbENvdW50OmQsY29kZWM6dixjb25maWc6cCxvcmlnaW5Db2RlYzoibXA0YS40MC4iLmNvbmNhdChmKX19fX0se2tleToicGFyc2VBdWRpb1NwZWNpZmljQ29uZmlnIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0Lmxlbmd0aCl7dmFyIHI9dFswXT4+PjMsYT0oNyZ0WzBdKTw8MXx0WzFdPj4+NyxuPSgxMjAmdFsxXSk+Pj4zLGk9ZS5GUkVRW2FdO2lmKGkpe3ZhciBzPWUuX2dldENvbmZpZyhhLG4scik7cmV0dXJue3NhbXBsaW5nRnJlcXVlbmN5SW5kZXg6YSxzYW1wbGVSYXRlOmksb2JqZWN0VHlwZTpyLGNoYW5uZWxDb3VudDpuLGNvbmZpZzpzLmNvbmZpZyxjb2RlYzpzLmNvZGVjLG9yaWdpbkNvZGVjOiJtcDRhLjQwLiIuY29uY2F0KHIpfX19fX0se2tleToiZ2V0RnJhbWVEdXJhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjllNDtyZXR1cm4gMTAyNCp0L2V9fSx7a2V5OiJfZ2V0Q29uZmlnIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGEsbixpPVtdO3JldHVybiBYP2U+PTY/KGE9NSxuPWUtMyk6KGE9MixuPWUpOlk/KGE9MixuPWUpOihhPTI9PT1yfHw1PT09cj9yOjUsbj1lLGU+PTY/bj1lLTM6MT09PXQmJihhPTIsbj1lKSksaVswXT1hPDwzLGlbMF18PSgxNCZlKT4+MSxpWzFdPSgxJmUpPDw3LGlbMV18PXQ8PDMsNT09PWEmJihpWzFdfD0oMTQmbik+PjEsaVsyXT0oMSZuKTw8NyxpWzJdfD04LGlbM109MCkse2NvbmZpZzppLGNvZGVjOiJtcDRhLjQwLiIuY29uY2F0KGEpfX19LHtrZXk6ImdldFNpbGVudEZyYW1lIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCJtcDRhLjQwLjIiPT09ZSl7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzNSwxMjhdKTtpZigyPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzMzLDAsNzMsMTQ0LDIsMjUsMCwzNSwxMjhdKTtpZigzPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTQyXSk7aWYoND09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEyOCw0NCwxMjgsOCwyLDU2XSk7aWYoNT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEzMCw0OCw0LDE1MywwLDMzLDE0NCwyLDU2XSk7aWYoNj09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEzMCw0OCw0LDE1MywwLDMzLDE0NCwyLDAsMTc4LDAsMzIsOCwyMjRdKX1lbHNle2lmKDE9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMSw2NCwzNCwxMjgsMTYzLDc4LDIzMCwxMjgsMTg2LDgsMCwwLDAsMjgsNiwyNDEsMTkzLDEwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDk0XSk7aWYoMj09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFsxLDY0LDM0LDEyOCwxNjMsOTQsMjMwLDEyOCwxODYsOCwwLDAsMCwwLDE0OSwwLDYsMjQxLDE2MSwxMCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5NF0pO2lmKDM9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMSw2NCwzNCwxMjgsMTYzLDk0LDIzMCwxMjgsMTg2LDgsMCwwLDAsMCwxNDksMCw2LDI0MSwxNjEsMTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTRdKX19fV0pLGV9KCk7aShzZSwiRlJFUSIsWzk2ZTMsODgyMDAsNjRlMyw0OGUzLDQ0MTAwLDMyZTMsMjRlMywyMjA1MCwxNmUzLDEyZTMsMTEwMjUsOGUzLDczNTBdKTt2YXIgb2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToicGFyc2VIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighKHQubGVuZ3RoPDIzKSl7cj1yfHx7fTtmb3IodmFyIGEsbixpLHMsbyx1PTErKDMmdFsyMV0pLGM9W10sbD1bXSxmPVtdLGQ9MjMsaD10WzIyXSxwPTA7cDxoO3ArKyl7aT02MyZ0W2RdLHM9dFtkKzFdPDw4fHRbZCsyXSxkKz0zO2Zvcih2YXIgdj0wO3Y8czt2KyspaWYobz10W2RdPDw4fHRbZCsxXSxkKz0yLG8pe3N3aXRjaChpKXtjYXNlIDMyOnZhciB5PXQuc3ViYXJyYXkoZCxkK28pO2F8fChhPWUucGFyc2VWUFMobmUucmVtb3ZlRVBCKHkpLHIpKSxmLnB1c2goeSk7YnJlYWs7Y2FzZSAzMzp2YXIgbT10LnN1YmFycmF5KGQsZCtvKTtufHwobj1lLnBhcnNlU1BTKG5lLnJlbW92ZUVQQihtKSxyKSksYy5wdXNoKG0pO2JyZWFrO2Nhc2UgMzQ6bC5wdXNoKHQuc3ViYXJyYXkoZCxkK28pKX1kKz1vfX1yZXR1cm57aHZjQzpyLHNwczpuLHNwc0FycjpjLHBwc0FycjpsLHZwc0FycjpmLG5hbFVuaXRTaXplOnV9fX19LHtrZXk6InBhcnNlVlBTIix2YWx1ZTpmdW5jdGlvbih0LHIpe3I9cnx8e307dmFyIGE9bmV3IGoodCk7YS5yZWFkVUJ5dGUoKSxhLnJlYWRVQnl0ZSgpLGEucmVhZEJpdHMoMTIpO3ZhciBuPWEucmVhZEJpdHMoMyk7cmV0dXJuIHIubnVtVGVtcG9yYWxMYXllcnM9TWF0aC5tYXgoci5udW1UZW1wb3JhbExheWVyc3x8MCxuKzEpLGEucmVhZEJpdHMoMTcpLGUuX3BhcnNlUHJvZmlsZVRpZXJMZXZlbChhLG4scikscn19LHtrZXk6InBhcnNlU1BTIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cj1yfHx7fTt2YXIgYT1uZXcgaih0KTthLnJlYWRVQnl0ZSgpLGEucmVhZFVCeXRlKCksYS5yZWFkQml0cyg0KTt2YXIgbj1hLnJlYWRCaXRzKDMpO3IubnVtVGVtcG9yYWxMYXllcnM9TWF0aC5tYXgobisxLHIubnVtVGVtcG9yYWxMYXllcnN8fDApLHIudGVtcG9yYWxJZE5lc3RlZD1hLnJlYWRCaXRzKDEpLGUuX3BhcnNlUHJvZmlsZVRpZXJMZXZlbChhLG4sciksYS5yZWFkVUVHKCk7dmFyIGk9ci5jaHJvbWFGb3JtYXRJZGM9YS5yZWFkVUVHKCkscz00MjA7aTw9MyYmKHM9WzAsNDIwLDQyMiw0NDRdW2ldKTt2YXIgbz0wOzM9PT1pJiYobz1hLnJlYWRCaXRzKDEpKTt2YXIgdSxjLGwsZixkPWEucmVhZFVFRygpLGg9YS5yZWFkVUVHKCkscD1hLnJlYWRCaXRzKDEpO2lmKDE9PT1wJiYodT1hLnJlYWRVRUcoKSxjPWEucmVhZFVFRygpLGw9YS5yZWFkVUVHKCksZj1hLnJlYWRVRUcoKSksci5iaXREZXB0aEx1bWFNaW51czg9YS5yZWFkVUVHKCksci5iaXREZXB0aENocm9tYU1pbnVzOD1hLnJlYWRVRUcoKSwxPT09cCl7dmFyIHY9MSE9PWkmJjIhPT1pfHwwIT09bz8xOjIseT0xPT09aSYmMD09PW8/MjoxO2QtPXYqKGMrdSksaC09eSooZitsKX1yZXR1cm57Y29kZWM6ImhldjEuMS42Lkw5My5CMCIsd2lkdGg6ZCxoZWlnaHQ6aCxjaHJvbWFGb3JtYXQ6cyxodmNDOnJ9fX0se2tleToiX3BhcnNlUHJvZmlsZVRpZXJMZXZlbCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXIuZ2VuZXJhbFRpZXJGbGFnfHwwO3IuZ2VuZXJhbFByb2ZpbGVTcGFjZT1lLnJlYWRCaXRzKDIpLHIuZ2VuZXJhbFRpZXJGbGFnPU1hdGgubWF4KGUucmVhZEJpdHMoMSksYSksci5nZW5lcmFsUHJvZmlsZUlkYz1NYXRoLm1heChlLnJlYWRCaXRzKDUpLHIuZ2VuZXJhbFByb2ZpbGVJZGN8fDApLHIuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3M9ZS5yZWFkQml0cygzMiksci5nZW5lcmFsQ29uc3RyYWludEluZGljYXRvckZsYWdzPVtlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCksZS5yZWFkQml0cyg4KSxlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCksZS5yZWFkQml0cyg4KV07dmFyIG49ZS5yZWFkQml0cyg4KTthPHIuZ2VuZXJhbFRpZXJGbGFnP3IuZ2VuZXJhbExldmVsSWRjPW46ci5nZW5lcmFsTGV2ZWxJZGM9TWF0aC5tYXgobixyLmdlbmVyYWxMZXZlbElkY3x8MCk7dmFyIGk9W10scz1bXTtpZih0PmUuYml0c0F2YWlsYWJsZSl0aHJvdyBuZXcgRXJyb3IoIm1heFN1YkxheWVyc01pbnVzIGluYXZsaWQgc2l6ZSAiLmNvbmNhdCh0KSk7Zm9yKHZhciBvPTA7bzx0O28rKylpW29dPWUucmVhZEJpdHMoMSksc1tvXT1lLnJlYWRCaXRzKDEpO3Q+MCYmZS5yZWFkQml0cygyKig4LXQpKTtmb3IodmFyIHU9MDt1PHQ7dSsrKTAhPT1pW3VdJiYoZS5yZWFkQml0cygyKSxlLnJlYWRCaXRzKDEpLGUucmVhZEJpdHMoNSksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cyg0KSxlLnJlYWRCaXRzKDE2KSxlLnJlYWRCaXRzKDE2KSxlLnJlYWRCaXRzKDEyKSksMCE9PXNbdV0mJmUucmVhZEJpdHMoOCl9fV0pLGV9KCksdWU9MWUzLGNlPTVlMyxsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSx0aGlzLnZpZGVvVHJhY2s9dCx0aGlzLmF1ZGlvVHJhY2s9YSx0aGlzLm1ldGFkYXRhVHJhY2s9bix0aGlzLl9iYXNlRHRzPS0xLHRoaXMuX2Jhc2VEdHNJbml0ZWQ9ITEsdGhpcy5fYXVkaW9OZXh0UHRzPXZvaWQgMCx0aGlzLl92aWRlb05leHREdHM9dm9pZCAwLHRoaXMuX2F1ZGlvVGltZXN0YW1wQnJlYWs9MCx0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fbGFzdFZpZGVvRHVyYXRpb249MCx0aGlzLl9rZXlGcmFtZUluTmV4dENodW5rPSExLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkdhcERvdD0tMS8wLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkxhcmdlR2FwRG90PS0xLzAsdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdD0tMS8wfXJldHVybiBuKGUsW3trZXk6ImZpeCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTt0PU1hdGgucm91bmQoMWUzKnQpO3ZhciBuPXRoaXMudmlkZW9UcmFjayxpPXRoaXMuYXVkaW9UcmFjazshciYmYXx8KHRoaXMuX3ZpZGVvTGFzdFNhbXBsZT1udWxsLHRoaXMuX2F1ZGlvTmV4dFB0cz12b2lkIDAsdGhpcy5fdmlkZW9OZXh0RHRzPXZvaWQgMCx0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaz0wLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkdhcERvdD0tMS8wLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkxhcmdlR2FwRG90PS0xLzAsdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdD0tMS8wKSxyJiYhYSYmKHRoaXMuX2Jhc2VEdHNJbml0ZWQ9ITEpLHRoaXMuX2Jhc2VEdHNJbml0ZWR8fHRoaXMuX2NhbGN1bGF0ZUJhc2VEdHMoaSxuKSwhYSYmdCYmKHRoaXMuX2F1ZGlvTmV4dFB0cz10aGlzLl92aWRlb05leHREdHM9dCk7dmFyIHM9dGhpcy5fYmFzZUR0c0luaXRlZCYmKHRoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWt8fCF0aGlzLnZpZGVvVHJhY2suZXhpc3QoKSkmJih0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrfHwhdGhpcy5hdWRpb1RyYWNrLmV4aXN0KCkpO2lmKHMmJnRoaXMuX3Jlc2V0QmFzZUR0c1doZW5TdHJlYW1CcmVha2VkKCksdGhpcy5fZml4QXVkaW8oaSksdGhpcy5fa2V5RnJhbWVJbk5leHRDaHVuaz0hMSx0aGlzLl9maXhWaWRlbyhuKSx0aGlzLm1ldGFkYXRhVHJhY2suZXhpc3QoKSl7dmFyIG89dGhpcy5tZXRhZGF0YVRyYWNrLnRpbWVzY2FsZTt0aGlzLm1ldGFkYXRhVHJhY2suc2VpU2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnB0cz10Lm9yaWdpblB0cy1lLl9iYXNlRHRzLHQudGltZT1NYXRoLm1heCgwLHQucHRzKS9vfSkpLHRoaXMubWV0YWRhdGFUcmFjay5mbHZTY3JpcHRTYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucHRzPXQub3JpZ2luUHRzLWUuX2Jhc2VEdHMsdC50aW1lPU1hdGgubWF4KDAsdC5wdHMpL299KSl9bi5zYW1wbGVzLmxlbmd0aCYmKG4uYmFzZU1lZGlhRGVjb2RlVGltZT1uLnNhbXBsZXNbMF0uZHRzKSxpLnNhbXBsZXMubGVuZ3RoJiYoaS5iYXNlTWVkaWFEZWNvZGVUaW1lPWkuc2FtcGxlc1swXS5wdHMqaS50aW1lc2NhbGUvMWUzKX19LHtrZXk6Il9maXhWaWRlbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc2FtcGxlcztpZihyLmxlbmd0aCl7dmFyIGE7aWYoci5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmR0cy09dC5fYmFzZUR0cyxlLnB0cy09dC5fYmFzZUR0cyxlLmtleWZyYW1lJiYodC5fa2V5RnJhbWVJbk5leHRDaHVuaz0hMCl9KSksZS5mcHNOdW0mJmUuZnBzRGVuKWE9ZS50aW1lc2NhbGUqKGUuZnBzRGVuL2UuZnBzTnVtKTtlbHNlIGlmKGUubGVuZ3RoPjEpe3ZhciBuPWUuc2FtcGxlc1swXSxpPWUuc2FtcGxlc1tyLmxlbmd0aC0xXTthPU1hdGguZmxvb3IoKGkuZHRzLW4uZHRzKS8oci5sZW5ndGgtMSkpfWVsc2UgYT10aGlzLl9sYXN0VmlkZW9EdXJhdGlvbnx8NDA7dmFyIHM9ci5wb3AoKTtpZih0aGlzLl92aWRlb0xhc3RTYW1wbGUmJnIudW5zaGlmdCh0aGlzLl92aWRlb0xhc3RTYW1wbGUpLHRoaXMuX3ZpZGVvTGFzdFNhbXBsZT1zLHIubGVuZ3RoKXtpZih2b2lkIDA9PT10aGlzLl92aWRlb05leHREdHMpe3ZhciBvPXJbMF07dGhpcy5fdmlkZW9OZXh0RHRzPW8uZHRzfXZhciB1PXIubGVuZ3RoLGM9MCxsPXJbMF0sZj10aGlzLl92aWRlb05leHREdHMtbC5kdHM7aWYoTWF0aC5hYnMoZik+MjAwKXt2YXIgZDtpZihNYXRoLmFicyhsLmR0cy10aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25DaHVua0ZpcnN0RHRzRG90KT41ZTMpdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdD1sLmR0cyxlLndhcm5pbmdzLnB1c2goe3R5cGU6QyxuZXh0RHRzOnRoaXMuX3ZpZGVvTmV4dER0cyxmaXJzdFNhbXBsZUR0czpsLmR0cyxuZXh0U2FtcGxlRHRzOm51bGw9PT0oZD1yWzFdKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5kdHMsc2FtcGxlRHVyYXRpb246Zn0pO3RoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWs+PTU/KHRoaXMuX3ZpZGVvTmV4dER0cz1sLmR0cyx0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTApOihsLmR0cys9ZixsLnB0cys9Zix0aGlzLmF1ZGlvVHJhY2suZXhpc3QoKXx8KHRoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWs9MSkpfWZvcih2YXIgaD0wO2g8dTtoKyspe3ZhciBwPXJbaF0uZHRzLHY9cltoKzFdOygoYz1oPHUtMT92LmR0cy1wOnM/cy5kdHMtcDphKT4xZTN8fGM8MCkmJih0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrKyssTWF0aC5hYnMocC10aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25MYXJnZUdhcERvdCk+NWUzJiYodGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uTGFyZ2VHYXBEb3Q9cCxlLndhcm5pbmdzLnB1c2goe3R5cGU6VCx0aW1lOnAvZS50aW1lc2NhbGUsZHRzOnAsb3JpZ2luRHRzOnJbaF0ub3JpZ2luRHRzLG5leHREdHM6dGhpcy5fdmlkZW9OZXh0RHRzLHNhbXBsZUR1cmF0aW9uOmMscmVmU2FtcGxlRHVyYXRpb246YX0pKSxjPWEpLHJbaF0uZHVyYXRpb249Yyx0aGlzLl92aWRlb05leHREdHMrPWMsdGhpcy5fbGFzdFZpZGVvRHVyYXRpb249Y319fX19LHtrZXk6Il9maXhBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc2FtcGxlcztyLmxlbmd0aCYmKHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5kdHM9ZS5wdHMtPXQuX2Jhc2VEdHN9KSksdGhpcy5fZG9GaXhBdWRpb0ludGVybmFsKGUsciwxZTMpKX19LHtrZXk6Il9jYWxjdWxhdGVCYXNlRHRzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUuc2FtcGxlcyxhPXQuc2FtcGxlcztpZighci5sZW5ndGgmJiFhLmxlbmd0aClyZXR1cm4hMTt2YXIgbj0xLzAsaT0xLzA7ci5sZW5ndGgmJihlLmJhc2VEdHM9bj1yWzBdLnB0cyksYS5sZW5ndGgmJih0LmJhc2VEdHM9aT1hWzBdLmR0cyksdGhpcy5fYmFzZUR0cz1NYXRoLm1pbihuLGkpO3ZhciBzPWktbjtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHMpJiZNYXRoLmFicyhzKT41MDAmJnQud2FybmluZ3MucHVzaCh7dHlwZTpCLHZpZGVvQmFzZUR0czppLGF1ZGlvQmFzZVB0czpuLGJhc2VEdHM6dGhpcy5fYmFzZUR0cyxkZWx0YTpzfSksdGhpcy5fYmFzZUR0c0luaXRlZD0hMCwhMH19LHtrZXk6Il9yZXNldEJhc2VEdHNXaGVuU3RyZWFtQnJlYWtlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9jYWxjdWxhdGVCYXNlRHRzKHRoaXMuYXVkaW9UcmFjayx0aGlzLnZpZGVvVHJhY2spJiYodGhpcy5hdWRpb1RyYWNrLmV4aXN0KCk/dGhpcy52aWRlb1RyYWNrLmV4aXN0KCk/dGhpcy5fYmFzZUR0cy09TWF0aC5taW4odGhpcy5fYXVkaW9OZXh0UHRzLHRoaXMuX3ZpZGVvTmV4dER0cyk6dGhpcy5fYmFzZUR0cy09dGhpcy5fYXVkaW9OZXh0UHRzOnRoaXMuX2Jhc2VEdHMtPXRoaXMuX3ZpZGVvTmV4dER0cyx0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz0wKX19LHtrZXk6Il9kb0ZpeEF1ZGlvSW50ZXJuYWwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtlLnNhbXBsZUR1cmF0aW9ufHwoZS5zYW1wbGVEdXJhdGlvbj1lLmNvZGVjVHlwZT09PUE/c2UuZ2V0RnJhbWVEdXJhdGlvbihlLnRpbWVzY2FsZSxyKTp0aGlzLl9nZXRHNzExRHVyYXRpb24oZSkpO3ZhciBhPWUuc2FtcGxlRHVyYXRpb24sbj1lLmNvZGVjVHlwZT09PUE/MTAyNDphKmUudGltZXNjYWxlLzFlMztpZih2b2lkIDA9PT10aGlzLl9hdWRpb05leHRQdHMpe3ZhciBpPXRbMF07dGhpcy5fYXVkaW9OZXh0UHRzPWkucHRzfWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbz10aGlzLl9hdWRpb05leHRQdHMsdT10W3NdLGM9dS5wdHMtbztpZigwPT09cyYmdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz49NSYmdGhpcy5fa2V5RnJhbWVJbk5leHRDaHVuayYmKG89dGhpcy5fYXVkaW9OZXh0UHRzPXUuZHRzLGM9MCx0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrPTApLCF0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrJiZjPj0zKmEmJmM8PXVlJiYhVyl7dmFyIGw9dGhpcy5fZ2V0U2lsZW50RnJhbWUoZSl8fHRbMF0uZGF0YS5zdWJhcnJheSgpLGY9TWF0aC5mbG9vcihjL2EpO01hdGguYWJzKHUucHRzLXRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkdhcERvdCk+Y2UmJih0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25HYXBEb3Q9dS5wdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOlAscHRzOnUucHRzLG9yaWdpblB0czp1Lm9yaWdpblB0cyxjb3VudDpmLG5leHRQdHM6byxyZWZTYW1wbGVEdXJhdGlvbjphfSkpO2Zvcih2YXIgZD0wO2Q8ZjtkKyspe3ZhciBoPW5ldyBPKE1hdGguZmxvb3IodGhpcy5fYXVkaW9OZXh0UHRzK2EpLU1hdGguZmxvb3IodGhpcy5fYXVkaW9OZXh0UHRzKSxsLG4pO2gub3JpZ2luUHRzPU1hdGguZmxvb3IodGhpcy5fYmFzZUR0cytvKSx0LnNwbGljZShzLDAsaCksdGhpcy5fYXVkaW9OZXh0UHRzKz1hLHMrK31zLS19ZWxzZSBjPD0tMyphJiZjPj0tMWUzPyhNYXRoLmFicyh1LnB0cy10aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25PdmVybGFwRG90KT5jZSYmKHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9dS5wdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOkkscHRzOnUucHRzLG9yaWdpblB0czp1Lm9yaWdpblB0cyxuZXh0UHRzOm8scmVmU2FtcGxlRHVyYXRpb246YX0pKSx0LnNwbGljZShzLDEpLHMtLSk6KE1hdGguYWJzKGMpPnVlJiYodGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaysrLE1hdGguYWJzKHUucHRzLXRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkxhcmdlR2FwRG90KT5jZSYmKHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkxhcmdlR2FwRG90PXUucHRzLGUud2FybmluZ3MucHVzaCh7dHlwZTpVLHRpbWU6dS5wdHMvMWUzLHB0czp1LnB0cyxvcmlnaW5QdHM6dS5vcmlnaW5QdHMsbmV4dFB0czpvLHNhbXBsZUR1cmF0aW9uOmMscmVmU2FtcGxlRHVyYXRpb246YX0pKSksdS5kdHM9dS5wdHM9byx1LmR1cmF0aW9uPW4sdGhpcy5fYXVkaW9OZXh0UHRzKz1hKX19fSx7a2V5OiJfZ2V0RzcxMUR1cmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNhbXBsZVNpemUscj1lLmNoYW5uZWxDb3VudCxhPWUuc2FtcGxlUmF0ZSxuPWUuc2FtcGxlc1swXTtpZihuKXJldHVybiAyKm4uZGF0YS5ieXRlTGVuZ3RoL3IvKHQvOCkvYSoxZTN9fSx7a2V5OiJfZ2V0U2lsZW50RnJhbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvZGVjVHlwZT09PUE/c2UuZ2V0U2lsZW50RnJhbWUoZS5jb2RlYyxlLmNoYW5uZWxDb3VudCk6bmV3IFVpbnQ4QXJyYXkoOCplLnNhbXBsZUR1cmF0aW9uKmUuY2hhbm5lbENvdW50KX19XSksZX0oKSxmZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDwzKSl7dmFyIHI9e30sYT1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKSksbj1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrYS5zaXplLHQuYnl0ZUxlbmd0aC1hLnNpemUpKTtyZXR1cm4gclthLmRhdGFdPW4uZGF0YSxyfX19LHtrZXk6Il9wYXJzZVZhbHVlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcixhPXQuYnl0ZUxlbmd0aCxuPTEsaT0hMTtzd2l0Y2godC5nZXRVaW50OCgwKSl7Y2FzZSAwOnI9dC5nZXRGbG9hdDY0KDEpLG4rPTg7YnJlYWs7Y2FzZSAxOnI9ISF0LmdldFVpbnQ4KDEpLG4rPTE7YnJlYWs7Y2FzZSAyOnZhciBzPWUuX3BhcnNlU3RyaW5nKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbix0LmJ5dGVMZW5ndGgtbikpO3I9cy5kYXRhLG4rPXMuc2l6ZTticmVhaztjYXNlIDM6cj17fTt2YXIgbz0wO2Zvcig5PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIoYS00KSkmJihvPTMpO248YS00Oyl7dmFyIHU9ZS5fcGFyc2VPYmplY3QobmV3IERhdGFWaWV3KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLHQuYnl0ZUxlbmd0aC1uLW8pKSxjPXUuc2l6ZSxsPXUuZGF0YTtpZih1LmlzRW5kKWJyZWFrO3JbbC5uYW1lXT1sLnZhbHVlLG4rPWN9aWYobjw9YS0zKTk9PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIobi0xKSkmJihuKz0zKTticmVhaztjYXNlIDg6cj17fSxuKz00O3ZhciBmPTA7Zm9yKDk9PSgxNjc3NzIxNSZ0LmdldFVpbnQzMihhLTQpKSYmKGY9Myk7bjxhLTg7KXt2YXIgZD1lLl9wYXJzZU9iamVjdChuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K24sdC5ieXRlTGVuZ3RoLW4tZikpLGg9ZC5zaXplLHA9ZC5kYXRhO2lmKGQuaXNFbmQpYnJlYWs7cltwLm5hbWVdPXAudmFsdWUsbis9aH1pZihuPD1hLTMpOT09PSgxNjc3NzIxNSZ0LmdldFVpbnQzMihuLTEpKSYmKG4rPTMpO2JyZWFrO2Nhc2UgOTpyPXZvaWQgMCxuPTEsaT0hMDticmVhaztjYXNlIDEwOnI9W107dmFyIHY9dC5nZXRVaW50MzIoMSk7bis9NDtmb3IodmFyIHk9MDt5PHY7eSsrKXt2YXIgbT1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbix0LmJ5dGVMZW5ndGgtbikpLGc9bS5kYXRhLGs9bS5zaXplO3IucHVzaChnKSxuKz1rfWJyZWFrO2Nhc2UgMTE6dmFyIGI9dC5nZXRGbG9hdDY0KG4pKzZlNCp0LmdldEludDE2KG4rOCk7cj1uZXcgRGF0ZShiKSxuKz0xMDticmVhaztjYXNlIDEyOnZhciBfPXQuZ2V0VWludDMyKDEpO24rPTQscj0iIixfPjAmJihyPUguZGVjb2RlKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLF8pKSksbis9XzticmVhaztkZWZhdWx0Om49YX1yZXR1cm57ZGF0YTpyLHNpemU6bixpc0VuZDppfX19LHtrZXk6Il9wYXJzZVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRVaW50MTYoMCkscj0iIjtyZXR1cm4gdD4wJiYocj1ILmRlY29kZShuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrMix0KSkpLHtkYXRhOnIsc2l6ZToyK3R9fX0se2tleToiX3BhcnNlT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHQuYnl0ZUxlbmd0aDwzKSl7dmFyIHI9ZS5fcGFyc2VTdHJpbmcodCksYT1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrci5zaXplLHQuYnl0ZUxlbmd0aC1yLnNpemUpKTtyZXR1cm57ZGF0YTp7bmFtZTpyLmRhdGEsdmFsdWU6YS5kYXRhfSxzaXplOnIuc2l6ZSthLnNpemUsaXNFbmQ6YS5pc0VuZH19fX1dKSxlfSgpLGRlPW5ldyBHKCJGbHZEZW11eGVyIiksaGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsYSxuKXtyKHRoaXMsZSksaSh0aGlzLCJfaGVhZGVyUGFyc2VkIiwhMSksaSh0aGlzLCJfcmVtYWluaW5nRGF0YSIsbnVsbCksaSh0aGlzLCJfZ29wSWQiLDApLGkodGhpcywiX25lZWRBZGRNZXRhQmVmb3JlS2V5RnJhbWVOYWwiLCEwKSx0aGlzLnZpZGVvVHJhY2s9dHx8bmV3IHosdGhpcy5hdWRpb1RyYWNrPWF8fG5ldyBNLHRoaXMubWV0YWRhdGFUcmFjaz1ufHxuZXcgTix0aGlzLl9maXhlcj1uZXcgbGUodGhpcy52aWRlb1RyYWNrLHRoaXMuYXVkaW9UcmFjayx0aGlzLm1ldGFkYXRhVHJhY2spfXJldHVybiBuKGUsW3trZXk6ImRlbXV4Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxuPXRoaXMuYXVkaW9UcmFjayxpPXRoaXMudmlkZW9UcmFjayxzPXRoaXMubWV0YWRhdGFUcmFjaztpZighciYmYXx8KHRoaXMuX3JlbWFpbmluZ0RhdGE9bnVsbCksciYmKHRoaXMuX2hlYWRlclBhcnNlZD0hMSkscj8oaS5yZXNldCgpLG4ucmVzZXQoKSxzLnJlc2V0KCkpOihpLnNhbXBsZXM9W10sbi5zYW1wbGVzPVtdLHMuc2VpU2FtcGxlcz1bXSxzLmZsdlNjcmlwdFNhbXBsZXM9W10saS53YXJuaW5ncz1bXSxuLndhcm5pbmdzPVtdLHRoaXMuX3JlbWFpbmluZ0RhdGEmJih0PVoodGhpcy5fcmVtYWluaW5nRGF0YSx0KSx0aGlzLl9yZW1haW5pbmdEYXRhPW51bGwpKSwhdC5sZW5ndGgpcmV0dXJue3ZpZGVvVHJhY2s6aSxhdWRpb1RyYWNrOm4sbWV0YWRhdGFUcmFjazpzfTt2YXIgbz0wO2lmKCF0aGlzLl9oZWFkZXJQYXJzZWQpe2lmKCFlLnByb2JlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBmbHYgZmlsZSIpO24ucHJlc2VudD0oNCZ0WzRdKT4+PjIhPTAsaS5wcmVzZW50PTAhPSgxJnRbNF0pLHRoaXMuX2hlYWRlclBhcnNlZD0hMCxvPSQodCw1KSs0fWZvcih2YXIgdSxjLGwsZixkLGg9dC5sZW5ndGg7bysxNTxoJiYodT10W29dLCEobysxNSsoYz10W28rMV08PDE2fHRbbysyXTw8OHx0W28rM10pPmgpKTspbD0odFtvKzddPDwyND4+PjApKyh0W28rNF08PDE2KSsodFtvKzVdPDw4KSt0W28rNl0sbys9MTEsZj10LnN1YmFycmF5KG8sbytjKSw4PT09dT90aGlzLl9wYXJzZUF1ZGlvKGYsbCk6OT09PXU/dGhpcy5fcGFyc2VWaWRlbyhmLGwpOjE4PT09dT90aGlzLl9wYXJzZVNjcmlwdChmLGwpOmRlLndhcm4oIkludmFsaWQgdGFnIHR5cGU6ICIuY29uY2F0KHUpKSwoZD0kKHQsbys9YykpIT09MTErYyYmZGUud2FybigiSW52YWxpZCBQcmV2VGFnU2l6ZSAiLmNvbmNhdChkLCIgKCIpLmNvbmNhdCgxMStjLCIpIikpLG8rPTQ7cmV0dXJuIG88aCYmKHRoaXMuX3JlbWFpbmluZ0RhdGE9dC5zdWJhcnJheShvKSksbi5mb3JtYXRUaW1lc2NhbGU9aS5mb3JtYXRUaW1lc2NhbGU9aS50aW1lc2NhbGU9cy50aW1lc2NhbGU9MWUzLG4udGltZXNjYWxlPW4uc2FtcGxlUmF0ZXx8MCwhbi5leGlzdCgpJiZuLmhhc1NhbXBsZSgpJiZuLnJlc2V0KCksIWkuZXhpc3QoKSYmaS5oYXNTYW1wbGUoKSYmaS5yZXNldCgpLHt2aWRlb1RyYWNrOmksYXVkaW9UcmFjazpuLG1ldGFkYXRhVHJhY2s6c319fSx7a2V5OiJmaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5fZml4ZXIuZml4KGUsdCxyKSx7dmlkZW9UcmFjazp0aGlzLnZpZGVvVHJhY2ssYXVkaW9UcmFjazp0aGlzLmF1ZGlvVHJhY2ssbWV0YWRhdGFUcmFjazp0aGlzLm1ldGFkYXRhVHJhY2t9fX0se2tleToiZGVtdXhBbmRGaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe3JldHVybiB0aGlzLmRlbXV4KGUsdCxyKSx0aGlzLmZpeChhLHQscil9fSx7a2V5OiJfcGFyc2VBdWRpbyIsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZih0Lmxlbmd0aCl7dmFyIGE9KDI0MCZ0WzBdKT4+PjQsbj10aGlzLmF1ZGlvVHJhY2s7aWYoMTAhPT1hJiY3IT09YSYmOCE9PWEpcmV0dXJuIGRlLndhcm4oIlVuc3VwcG9ydGVkIHNvdW5kIGZvcm1hdDogIi5jb25jYXQoYSkpLHZvaWQgbi5yZXNldCgpO2lmKDEwIT09YSl7dmFyIGk9KDEyJnRbMF0pPj4yLHM9KDImdFswXSk+PjEsbz0xJnRbMF07bi5zYW1wbGVSYXRlPWUuQVVESU9fUkFURVtpXSxuLnNhbXBsZVNpemU9cz8xNjo4LG4uY2hhbm5lbENvdW50PW8rMX0xMD09PWE/dGhpcy5fcGFyc2VBYWModCxyKTp0aGlzLl9wYXJzZUc3MTEodCxyLGEpfX19LHtrZXk6Il9wYXJzZUc3MTEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10aGlzLmF1ZGlvVHJhY2s7YS5jb2RlY1R5cGU9Nz09PXI/RDpFLGEuc2FtcGxlUmF0ZT04ZTMsYS5jb2RlYz1hLmNvZGVjVHlwZSxhLnNhbXBsZXMucHVzaChuZXcgTyh0LGUuc3ViYXJyYXkoMSkpKX19LHtrZXk6Il9wYXJzZUFhYyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmF1ZGlvVHJhY2s7aWYoci5jb2RlY1R5cGU9QSwwPT09ZVsxXSl7dmFyIGE9c2UucGFyc2VBdWRpb1NwZWNpZmljQ29uZmlnKGUuc3ViYXJyYXkoMikpO2E/KHIuY29kZWM9YS5jb2RlYyxyLmNoYW5uZWxDb3VudD1hLmNoYW5uZWxDb3VudCxyLnNhbXBsZVJhdGU9YS5zYW1wbGVSYXRlLHIuY29uZmlnPWEuY29uZmlnLHIub2JqZWN0VHlwZT1hLm9iamVjdFR5cGUsci5zYW1wbGVSYXRlSW5kZXg9YS5zYW1wbGluZ0ZyZXF1ZW5jeUluZGV4KTooci5yZXNldCgpLGRlLndhcm4oIkNhbm5vdCBwYXJzZSBBdWRpb1NwZWNpZmljQ29uZmlnIixlKSl9ZWxzZSBpZigxPT09ZVsxXSl7aWYobnVsbD09dClyZXR1cm47ci5zYW1wbGVzLnB1c2gobmV3IE8odCxlLnN1YmFycmF5KDIpKSl9ZWxzZSBkZS53YXJuKCJVbmtub3duIEFBQ1BhY2tldFR5cGU6ICIuY29uY2F0KGVbMV0pKX19LHtrZXk6Il9wYXJzZVZpZGVvIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7aWYoIShlLmxlbmd0aDw2KSl7dmFyIGE9KDI0MCZlWzBdKT4+PjQsbj0xNSZlWzBdLGk9dGhpcy52aWRlb1RyYWNrO2lmKDchPT1uJiYxMiE9PW4pcmV0dXJuIGkucmVzZXQoKSx2b2lkIGRlLndhcm4oIlVuc3VwcG9ydGVkIGNvZGVjSWQ6ICIuY29uY2F0KG4pKTt2YXIgcz0xMj09PW47aS5jb2RlY1R5cGU9cz9TOng7dmFyIG89ZVsxXSx1PShlWzJdPDwxNnxlWzNdPDw4fGVbNF0pPDw4Pj44O2lmKDA9PT1vKXt2YXIgYz1lLnN1YmFycmF5KDUpLGw9cz9vZS5wYXJzZUhFVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZChjKTppZS5wYXJzZUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKGMpO2lmKGwpe3ZhciBmPWwuaHZjQyxkPWwuc3BzLGg9bC5wcHNBcnIscD1sLnNwc0Fycix2PWwudnBzQXJyLHk9bC5uYWxVbml0U2l6ZTtmJiYoaS5odmNDPWkuaHZjQ3x8ZiksZCYmKGkuY29kZWM9ZC5jb2RlYyxpLndpZHRoPWQud2lkdGgsaS5oZWlnaHQ9ZC5oZWlnaHQsaS5zYXJSYXRpbz1kLnNhclJhdGlvLGkuZnBzTnVtPWQuZnBzTnVtLGkuZnBzRGVuPWQuZnBzRGVuKSxwLmxlbmd0aCYmKGkuc3BzPXApLGgubGVuZ3RoJiYoaS5wcHM9aCksdiYmdi5sZW5ndGgmJihpLnZwcz12KSx5JiYoaS5uYWxVbml0U2l6ZT15KX1lbHNlIGRlLndhcm4oIkNhbm5vdCBwYXJzZSAiLmNvbmNhdChzPyJIRVZDIjoiQVZDIiwiRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQiKSxlKX1lbHNlIGlmKDE9PT1vKXt2YXIgbT1uZS5wYXJzZUF2Y0MoZS5zdWJhcnJheSg1KSxpLm5hbFVuaXRTaXplKTtpZigobT10aGlzLl9jaGVja0FkZE1ldGFOYWxUb1VuaXRzKHMsbSxpKSkmJm0ubGVuZ3RoKXt2YXIgZz1uZXcgUih0K3UsdCxtKTsxPT09YSYmZy5zZXRUb0tleWZyYW1lKCksaS5zYW1wbGVzLnB1c2goZyksbS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgYT1zP2VbMF0+Pj4xJjYzOjMxJmVbMF07c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDE5OmNhc2UgMjA6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6aWYoIXMmJjUhPT1hfHxzJiY1PT09YSlicmVhaztnLnNldFRvS2V5ZnJhbWUoKTticmVhaztjYXNlIDY6Y2FzZSAzOTpjYXNlIDQwOmlmKCFzJiY2IT09YXx8cyYmNj09PWEpYnJlYWs7ci5tZXRhZGF0YVRyYWNrLnNlaVNhbXBsZXMucHVzaChuZXcgRihuZS5wYXJzZVNFSShuZS5yZW1vdmVFUEIoZSkscyksdCt1KSl9fSkpLGcua2V5ZnJhbWUmJnRoaXMuX2dvcElkKyssZy5nb3BJZD10aGlzLl9nb3BJZH1lbHNlIGRlLndhcm4oIkNhbm5vdCBwYXJzZSBOQUxVcyIsZSl9ZWxzZSAyPT09b3x8ZGUud2FybigiVW5rbm93biBBVkNQYWNrZXRUeXBlOiAiLmNvbmNhdChvKSl9fX0se2tleToiX2NoZWNrQWRkTWV0YU5hbFRvVW5pdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSYmdGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD90Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0+Pj4xJjYzfSkpLmluY2x1ZGVzKDMyKT8odGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD0hMSx0KToodC51bnNoaWZ0KHIucHBzWzBdKSx0LnVuc2hpZnQoci5zcHNbMF0pLHQudW5zaGlmdChyLnZwc1swXSksdC5maWx0ZXIoQm9vbGVhbikpOih0aGlzLl9uZWVkQWRkTWV0YUJlZm9yZUtleUZyYW1lTmFsPSExLHQpfX0se2tleToiX3BhcnNlU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubWV0YWRhdGFUcmFjay5mbHZTY3JpcHRTYW1wbGVzLnB1c2gobmV3IFYoZmUucGFyc2UoZSksdCkpfX1dLFt7a2V5OiJwcm9iZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDcwPT09ZVswXSYmNzY9PT1lWzFdJiY4Nj09PWVbMl0mJjE9PT1lWzNdJiYkKGUsNSk+PTl9fV0pLGV9KCk7aShoZSwiQVVESU9fUkFURSIsWzU1MDAsMTFlMywyMmUzLDQ0ZTNdKSxuZXcgRygiVHNEZW11eGVyIik7dmFyIHBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6ImZpbmRCb3giLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjAsbj1bXTtpZighdClyZXR1cm4gbjtmb3IodmFyIGk9MCxzPSIiLG89MDt0Lmxlbmd0aD43Oyl7aWYoaT0kKHQpLHM9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc3ViYXJyYXkoNCw4KSksbz04LDE9PT1pPyhpPWVlKHQsOCksbys9OCk6aXx8KGk9dC5sZW5ndGgpLCFyWzBdfHxzPT09clswXSl7dmFyIHU9dC5zdWJhcnJheSgwLGkpO2lmKCEoci5sZW5ndGg8MikpcmV0dXJuIGUuZmluZEJveCh1LnN1YmFycmF5KG8pLHIuc2xpY2UoMSksYStvKTtuLnB1c2goe3N0YXJ0OmEsc2l6ZTppLGhlYWRlclNpemU6byx0eXBlOnMsZGF0YTp1fSl9YSs9aSx0PXQuc3ViYXJyYXkoaSl9cmV0dXJuIG59fSx7a2V5OiJ0ZmhkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtlLnRyYWNrSWQ9JCh0KTt2YXIgcj00LGE9MSZlLmZsYWdzLG49MiZlLmZsYWdzLGk9OCZlLmZsYWdzLHM9MTYmZS5mbGFncyxvPTMyJmUuZmxhZ3M7YSYmKHIrPTQsZS5iYXNlRGF0YU9mZnNldD0kKHQscikscis9NCksbiYmKGUuc2FtcGxlRGVzY3JpcHRpb25JbmRleD0kKHQscikscis9NCksaSYmKGUuZGVmYXVsdFNhbXBsZUR1cmF0aW9uPSQodCxyKSxyKz00KSxzJiYoZS5kZWZhdWx0U2FtcGxlU2l6ZT0kKHQscikscis9NCksbyYmKGUuZGVmYXVsdFNhbXBsZUZsYWdzPSQodCxyKSl9KSl9fSx7a2V5OiJzaWR4Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0wO2UucmVmZXJlbmNlX0lEPSQodCxyKSxyKz00LGUudGltZXNjYWxlPSQodCxyKSxyKz00LDA9PT1lLnZlcnNpb24/KGUuZWFybGllc3RfcHJlc2VudGF0aW9uX3RpbWU9JCh0LHIpLHIrPTQsZS5maXJzdF9vZmZzZXQ9JCh0LHIpLHIrPTQpOihlLmVhcmxpZXN0X3ByZXNlbnRhdGlvbl90aW1lPWVlKHQscikscis9OCxlLmZpcnN0X29mZnNldD1lZSh0LHIpLHIrPTgpLHIrPTIsZS5yZWZlcmVuY2VzPVtdO3ZhciBhPUoodCxyKTtyKz0yO2Zvcih2YXIgbj0wO248YTtuKyspe3ZhciBpPXt9O2UucmVmZXJlbmNlcy5wdXNoKGkpO3ZhciBzPSQodCxyKTtyKz00LGkucmVmZXJlbmNlX3R5cGU9cz4+MzEmMSxpLnJlZmVyZW5jZWRfc2l6ZT0yMTQ3NDgzNjQ3JnMsaS5zdWJzZWdtZW50X2R1cmF0aW9uPSQodCxyKSxzPSQodCxyKz00KSxyKz00LGkuc3RhcnRzX3dpdGhfU0FQPXM+PjMxJjEsaS5TQVBfdHlwZT1zPj4yOCY3LGkuU0FQX2RlbHRhX3RpbWU9MjY4NDM1NDU1JnN9fSkpfX0se2tleToibW9vdiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm12aGQ9ZS5tdmhkKGUuZmluZEJveChyLFsibXZoZCJdLGEpWzBdKSx0LnRyYWs9ZS5maW5kQm94KHIsWyJ0cmFrIl0sYSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFrKHQpfSkpLHQucHNzaD1lLnBzc2goZS5maW5kQm94KHIsWyJwc3NoIl0sYSlbMF0pfSkpfX0se2tleToibXZoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9MDsxPT09ZS52ZXJzaW9uPyhlLnRpbWVzY2FsZT0kKHQsMTYpLGUuZHVyYXRpb249ZWUodCwyMCkscis9MjgpOihlLnRpbWVzY2FsZT0kKHQsOCksZS5kdXJhdGlvbj0kKHQsMTIpLHIrPTE2KSxlLm5leHRUcmFja0lkPSQodCxyKzc2KX0pKX19LHtrZXk6InRyYWsiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC50a2hkPWUudGtoZChlLmZpbmRCb3gocixbInRraGQiXSxhKVswXSksdC5tZGlhPWUubWRpYShlLmZpbmRCb3gocixbIm1kaWEiXSxhKVswXSl9KSl9fSx7a2V5OiJ0a2hkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0wOzE9PT1lLnZlcnNpb24/KGUudHJhY2tJZD0kKHQsMTYpLGUuZHVyYXRpb249ZWUodCwyNCkscis9MzIpOihlLnRyYWNrSWQ9JCh0LDgpLGUuZHVyYXRpb249JCh0LDE2KSxyKz0yMCksZS53aWR0aD0kKHQscis1MiksZS5oZWlnaHQ9JCh0LHIrNTYpfSkpfX0se2tleToibWRpYSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm1kaGQ9ZS5tZGhkKGUuZmluZEJveChyLFsibWRoZCJdLGEpWzBdKSx0LmhkbHI9ZS5oZGxyKGUuZmluZEJveChyLFsiaGRsciJdLGEpWzBdKSx0Lm1pbmY9ZS5taW5mKGUuZmluZEJveChyLFsibWluZiJdLGEpWzBdKX0pKX19LHtrZXk6Im1kaGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPTA7MT09PWUudmVyc2lvbj8oZS50aW1lc2NhbGU9JCh0LDE2KSxlLmR1cmF0aW9uPWVlKHQsMjApLHIrPTI4KTooZS50aW1lc2NhbGU9JCh0LDgpLGUuZHVyYXRpb249JCh0LDEyKSxyKz0xNik7dmFyIGE9Sih0LHIpO2UubGFuZ3VhZ2U9U3RyaW5nLmZyb21DaGFyQ29kZSg5NisoYT4+MTAmMzEpLDk2KyhhPj41JjMxKSw5NisoMzEmYSkpfSkpfX0se2tleToiaGRsciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7MD09PWUudmVyc2lvbiYmKGUuaGFuZGxlclR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc3ViYXJyYXkoNCw4KSkpfSkpfX0se2tleToibWluZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnZtaGQ9ZS52bWhkKGUuZmluZEJveChyLFsidm1oZCJdLGEpWzBdKSx0LnNtaGQ9ZS5zbWhkKGUuZmluZEJveChyLFsic21oZCJdLGEpWzBdKSx0LnN0Ymw9ZS5zdGJsKGUuZmluZEJveChyLFsic3RibCJdLGEpWzBdKX0pKX19LHtrZXk6InZtaGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe2UuZ3JhcGhpY3Ntb2RlPUoodCksZS5vcGNvbG9yPVtKKHQsMiksSih0LDQpLEoodCw2KV19KSl9fSx7a2V5OiJzbWhkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtlLmJhbGFuY2U9Sih0KX0pKX19LHtrZXk6InN0YmwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG4saSxzO3Quc3RzZD1lLnN0c2QoZS5maW5kQm94KHIsWyJzdHNkIl0sYSlbMF0pLHQuc3R0cz1lLnN0dHMoZS5maW5kQm94KHIsWyJzdHRzIl0sYSlbMF0pLHQuY3R0cz1lLmN0dHMoZS5maW5kQm94KHIsWyJjdHRzIl0sYSlbMF0pLHQuc3RzYz1lLnN0c2MoZS5maW5kQm94KHIsWyJzdHNjIl0sYSlbMF0pLHQuc3Rzej1lLnN0c3ooZS5maW5kQm94KHIsWyJzdHN6Il0sYSlbMF0pLHQuc3Rjbz1lLnN0Y28oZS5maW5kQm94KHIsWyJzdGNvIl0sYSlbMF0pLHQuc3Rjb3x8KHQuY282ND1lLmNvNjQoZS5maW5kQm94KHIsWyJjbzY0Il0sYSlbMF0pLHQuc3Rjbz10LmNvNjQpO3ZhciBvPW51bGw9PT0obj10LnN0c2QuZW50cmllc1swXSl8fHZvaWQgMD09PW58fG51bGw9PT0oaT1uLnNpbmYpfHx2b2lkIDA9PT1pfHxudWxsPT09KHM9aS5zY2hpKXx8dm9pZCAwPT09cz92b2lkIDA6cy50ZW5jLmRlZmF1bHRfSVZfc2l6ZTt0LnN0c3M9ZS5zdHNzKGUuZmluZEJveChyLFsic3RzcyJdLGEpWzBdKSx0LnNlbmM9ZS5zZW5jKGUuZmluZEJveChyLFsic2VuYyJdLGEpWzBdLG8pfSkpfX0se2tleToic2VuYyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjg7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUscil7dmFyIGE9MCxuPSQocixhKTthKz00LGUuc2FtcGxlcz1bXTtmb3IodmFyIGk9MDtpPG47aSsrKXtmb3IodmFyIHM9e0luaXRpYWxpemF0aW9uVmVjdG9yOltdfSxvPTA7bzx0O28rKylzLkluaXRpYWxpemF0aW9uVmVjdG9yW29dPXJbYStvXTtpZihhKz10LDImZS5mbGFncyl7cy5zdWJzYW1wbGVzPVtdO3ZhciB1PUoocixhKTthKz0yO2Zvcih2YXIgYz0wO2M8dTtjKyspe3ZhciBsPXt9O2wuQnl0ZXNPZkNsZWFyRGF0YT1KKHIsYSksYSs9MixsLkJ5dGVzT2ZQcm90ZWN0ZWREYXRhPSQocixhKSxhKz00LHMuc3Vic2FtcGxlcy5wdXNoKGwpfX1lLnNhbXBsZXMucHVzaChzKX19KSl9fSx7a2V5OiJwc3NoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sYT1bXSxuPTAsaT0wO2k8MTY7aSsrKWEucHVzaChiZSh0W24raV0pKTtpZihuKz0xNixlLnZlcnNpb24+MCl7dmFyIHM9JCh0LG4pO24rPTQ7Zm9yKHZhciBvPTA7bzwoIiIrcykubGVuZ3RoO28rKylmb3IodmFyIHU9MDt1PDE2O3UrKyl7dmFyIGM9dFtuXTtuKz0xLHIucHVzaChiZShjKSl9fXZhciBsPSQodCxuKTtlLmRhdGFfc2l6ZT1sLG4rPTQsZS5raWQ9cixlLnN5c3RlbV9pZD1hLGUuYnVmZmVyPXR9KSl9fSx7a2V5OiJzdHNkIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZ2UodCwhMCwoZnVuY3Rpb24odCxyLGEpe3QuZW50cnlDb3VudD0kKHIpLHQuZW50cmllcz1lLmZpbmRCb3goci5zdWJhcnJheSg0KSxbXSxhKzQpLm1hcCgoZnVuY3Rpb24odCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhdmMxIjpjYXNlImF2YzIiOmNhc2UiYXZjMyI6Y2FzZSJhdmM0IjpyZXR1cm4gZS5hdmMxKHQpO2Nhc2UiaHZjMSI6Y2FzZSJoZXYxIjpyZXR1cm4gZS5odmMxKHQpO2Nhc2UibXA0YSI6cmV0dXJuIGUubXA0YSh0KTtjYXNlImFsYXciOmNhc2UidWxhdyI6cmV0dXJuIGUuYWxhdyh0KTtjYXNlImVuY2EiOnJldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC5jaGFubmVsQ291bnQ9SihyLDE2KSx0LnNhbXBsZXNpemU9SihyLDE4KSx0LnNhbXBsZVJhdGU9JChyLDI0KS82NTUzNixyPXIuc3ViYXJyYXkoMjgpLHQuc2luZj1lLnNpbmYoZS5maW5kQm94KHIsWyJzaW5mIl0sYSlbMF0pLHQuZXNkcz1lLmVzZHMoZS5maW5kQm94KHIsWyJlc2RzIl0sYSlbMF0pfSkpO2Nhc2UiZW5jdiI6cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LndpZHRoPUoociwyNCksdC5oZWlnaHQ9SihyLDI2KSx0Lmhvcml6cmVzb2x1dGlvbj0kKHIsMjgpLHQudmVydHJlc29sdXRpb249JChyLDMyKSxyPXIuc3ViYXJyYXkoNzgpLHQuc2luZj1lLnNpbmYoZS5maW5kQm94KHIsWyJzaW5mIl0sYSlbMF0pLHQuYXZjQz1lLmF2Y0MoZS5maW5kQm94KHIsWyJhdmNDIl0sYSlbMF0pLHQuaHZjQz1lLmh2Y0MoZS5maW5kQm94KHIsWyJodmNDIl0sYSlbMF0pLHQucGFzcD1lLnBhc3AoZS5maW5kQm94KHIsWyJwYXNwIl0sYSlbMF0pfSkpfX0pKS5maWx0ZXIoQm9vbGVhbil9KSl9fSx7a2V5OiJ0ZW5jIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMSwoZnVuY3Rpb24oZSx0KXt2YXIgcj02O2UuZGVmYXVsdF9Jc0VuY3J5cHRlZD10W3JdLHIrPTEsZS5kZWZhdWx0X0lWX3NpemU9dFtyXSxyKz0xLGUuZGVmYXVsdF9LSUQ9W107Zm9yKHZhciBhPTA7YTwxNjthKyspZS5kZWZhdWx0X0tJRC5wdXNoKGJlKHRbcl0pKSxyKz0xfSkpfX0se2tleToic2NoaSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnRlbmM9ZS50ZW5jKGUuZmluZEJveChyLFsidGVuYyJdLGEpWzBdKX0pKX19LHtrZXk6InNpbmYiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC5zY2hpPWUuc2NoaShlLmZpbmRCb3gocixbInNjaGkiXSxhKVswXSksdC5mcm1hPWUuZnJtYShlLmZpbmRCb3gocixbImZybWEiXSxhKVswXSl9KSl9fSx7a2V5OiJmcm1hIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMSwoZnVuY3Rpb24oZSx0KXtlLmRhdGFfZm9ybWF0PSIiO2Zvcih2YXIgcj0wO3I8NDtyKyspZS5kYXRhX2Zvcm1hdCs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W3JdKX0pKX19LHtrZXk6ImF2YzEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG49eWUodCxyKSxpPXIuc3ViYXJyYXkobik7YSs9bix0LmF2Y0M9ZS5hdmNDKGUuZmluZEJveChpLFsiYXZjQyJdLGEpWzBdKSx0LnBhc3A9ZS5wYXNwKGUuZmluZEJveChpLFsicGFzcCJdLGEpWzBdKX0pKX19LHtrZXk6ImF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCExLChmdW5jdGlvbihlLHQpe2UuY29uZmlndXJhdGlvblZlcnNpb249dFswXSxlLkFWQ1Byb2ZpbGVJbmRpY2F0aW9uPXRbMV0sZS5wcm9maWxlQ29tcGF0aWJpbGl0eT10WzJdLGUuQVZDTGV2ZWxJbmRpY2F0aW9uPXRbM10sZS5jb2RlYz10ZShbdFsxXSx0WzJdLHRbM11dKSxlLmxlbmd0aFNpemVNaW51c09uZT0zJnRbNF0sZS5zcHNMZW5ndGg9MzEmdFs1XSxlLnNwcz1bXTtmb3IodmFyIHI9NixhPTA7YTxlLnNwc0xlbmd0aDthKyspe3ZhciBuPUoodCxyKTtyKz0yLGUuc3BzLnB1c2godC5zdWJhcnJheShyLHIrbikpLHIrPW59ZS5wcHNMZW5ndGg9dFtyXSxyKz0xLGUucHBzPVtdO2Zvcih2YXIgaT0wO2k8ZS5wcHNMZW5ndGg7aSsrKXt2YXIgcz1KKHQscik7cis9MixlLnBwcy5wdXNoKHQuc3ViYXJyYXkocixyKz1zKSkscis9c319KSl9fSx7a2V5OiJodmMxIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZ2UodCwhMSwoZnVuY3Rpb24odCxyLGEpe3ZhciBuPXllKHQsciksaT1yLnN1YmFycmF5KG4pO2ErPW4sdC5odmNDPWUuaHZjQyhlLmZpbmRCb3goaSxbImh2Y0MiXSxhKVswXSksdC5wYXNwPWUucGFzcChlLmZpbmRCb3goaSxbInBhc3AiXSxhKVswXSl9KSl9fSx7a2V5OiJodmNDIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMSwoZnVuY3Rpb24odCxyKXt0LmRhdGE9ZS5kYXRhLHQuY29kZWM9ImhldjEuMS42Lkw5My5CMCIsdC5jb25maWd1cmF0aW9uVmVyc2lvbj1yWzBdO3ZhciBhPXJbMV07dC5nZW5lcmFsUHJvZmlsZVNwYWNlPWE+PjYsdC5nZW5lcmFsVGllckZsYWc9KDMyJmEpPj41LHQuZ2VuZXJhbFByb2ZpbGVJZGM9MzEmYSx0LmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eT0kKHIsMiksdC5nZW5lcmFsQ29uc3RyYWludEluZGljYXRvckZsYWdzPXIuc3ViYXJyYXkoNiwxMiksdC5nZW5lcmFsTGV2ZWxJZGM9clsxMl0sdC5hdmdGcmFtZVJhdGU9SihyLDE5KSx0Lm51bU9mQXJyYXlzPXJbMjJdLHQudnBzPVtdLHQuc3BzPVtdLHQucHBzPVtdO2Zvcih2YXIgbj0yMyxpPTAscz0wLG89MCx1PTA7dTx0Lm51bU9mQXJyYXlzO3UrKyl7aT02MyZyW25dLHM9SihyLG4rMSksbis9Mztmb3IodmFyIGMsbD1bXSxmPTA7ZjxzO2YrKylvPUoocixuKSxuKz0yLGwucHVzaChyLnN1YmFycmF5KG4sbitvKSksbis9bztpZigzMj09PWkpKGM9dC52cHMpLnB1c2guYXBwbHkoYyxsKTtlbHNlIGlmKDMzPT09aSl7dmFyIGQ7KGQ9dC5zcHMpLnB1c2guYXBwbHkoZCxsKX1lbHNlIGlmKDM0PT09aSl7dmFyIGg7KGg9dC5wcHMpLnB1c2guYXBwbHkoaCxsKX19fSkpfX0se2tleToicGFzcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITEsKGZ1bmN0aW9uKGUsdCl7ZS5oU3BhY2luZz0kKHQpLGUudlNwYWNpbmc9JCh0LDQpfSkpfX0se2tleToibXA0YSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt2YXIgbj1tZSh0LHIpO3QuZXNkcz1lLmVzZHMoZS5maW5kQm94KHIuc3ViYXJyYXkobiksWyJlc2RzIl0sYStuKVswXSl9KSl9fSx7a2V5OiJlc2RzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtlLmNvZGVjPSJtcDRhLiI7Zm9yKHZhciByPTAsYT0wLG49MCxpPTA7dC5sZW5ndGg7KXtmb3IoaT10W3I9MF0sYT10W3IrMV0scis9MjsxMjgmYTspbj0oMTI3JmEpPDw3LGE9dFtyXSxyKz0xO2lmKG4rPTEyNyZhLDM9PT1pKXQ9dC5zdWJhcnJheShyKzMpO2Vsc2V7aWYoNCE9PWkpe2lmKDU9PT1pKXt2YXIgcz1lLmNvbmZpZz10LnN1YmFycmF5KHIscituKSxvPSgyNDgmc1swXSk+PjM7cmV0dXJuIDMxPT09byYmcy5sZW5ndGg+PTImJihvPTMyKygoNyZzWzBdKTw8MykrKCgyMjQmc1sxXSk+PjUpKSxlLm9iamVjdFR5cGU9byxlLmNvZGVjKz1vLnRvU3RyaW5nKDE2KSx2b2lkKCIuIj09PWUuY29kZWNbZS5jb2RlYy5sZW5ndGgtMV0mJihlLmNvZGVjPWUuY29kZWMuc3Vic3RyaW5nKDAsZS5jb2RlYy5sZW5ndGgtMSkpKX1yZXR1cm4gdm9pZCgiLiI9PT1lLmNvZGVjW2UuY29kZWMubGVuZ3RoLTFdJiYoZS5jb2RlYz1lLmNvZGVjLnN1YnN0cmluZygwLGUuY29kZWMubGVuZ3RoLTEpKSl9ZS5jb2RlYys9KHRbcl0udG9TdHJpbmcoMTYpKyIuIikucGFkU3RhcnQoMywiMCIpLHQ9dC5zdWJhcnJheShyKzEzKX19fSkpfX0se2tleToiYWxhdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITEsKGZ1bmN0aW9uKGUsdCl7bWUoZSx0KX0pKX19LHtrZXk6InN0dHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0kKHQpLGE9W10sbj00LGk9MDtpPHI7aSsrKWEucHVzaCh7Y291bnQ6JCh0LG4pLGRlbHRhOiQodCxuKzQpfSksbis9ODtlLmVudHJ5Q291bnQ9cixlLmVudHJpZXM9YX0pKX19LHtrZXk6ImN0dHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPSQodCksYT1bXSxuPTQ7aWYoMT09PWUudmVyc2lvbilmb3IodmFyIGk9MDtpPHI7aSsrKWEucHVzaCh7Y291bnQ6JCh0LG4pLG9mZnNldDokKHQsbis0KX0pLG4rPTg7ZWxzZSBmb3IodmFyIHM9MDtzPHI7cysrKWEucHVzaCh7Y291bnQ6JCh0LG4pLG9mZnNldDotKDErfiQodCxuKzQpKX0pLG4rPTg7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHNjIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9JCh0KSxhPVtdLG49NCxpPTA7aTxyO2krKylhLnB1c2goe2ZpcnN0Q2h1bms6JCh0LG4pLHNhbXBsZXNQZXJDaHVuazokKHQsbis0KSxzYW1wbGVEZXNjcmlwdGlvbkluZGV4OiQodCxuKzgpfSksbis9MTI7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHN6Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0kKHQpLGE9JCh0LDQpLG49W107aWYoIXIpZm9yKHZhciBpPTgscz0wO3M8YTtzKyspbi5wdXNoKCQodCxpKSksaSs9NDtlLnNhbXBsZVNpemU9cixlLnNhbXBsZUNvdW50PWEsZS5lbnRyeVNpemVzPW59KSl9fSx7a2V5OiJzdGNvIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9JCh0KSxhPVtdLG49NCxpPTA7aTxyO2krKylhLnB1c2goJCh0LG4pKSxuKz00O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToiY282NCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPSQodCksYT1bXSxuPTQsaT0wO2k8cjtpKyspYS5wdXNoKGVlKHQsbikpLG4rPTg7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHNzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9JCh0KSxhPVtdLG49NCxpPTA7aTxyO2krKylhLnB1c2goJCh0LG4pKSxuKz00O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToibW9vZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm1maGQ9ZS5tZmhkKGUuZmluZEJveChyLFsibWZoZCJdLGEpWzBdKSx0LnRyYWY9ZS5maW5kQm94KHIsWyJ0cmFmIl0sYSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFmKHQpfSkpfSkpfX0se2tleToibWZoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7ZS5zZXF1ZW5jZU51bWJlcj0kKHQpfSkpfX0se2tleToidHJhZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnRmaGQ9ZS50ZmhkKGUuZmluZEJveChyLFsidGZoZCJdLGEpWzBdKSx0LnRmZHQ9ZS50ZmR0KGUuZmluZEJveChyLFsidGZkdCJdLGEpWzBdKSx0LnRydW49ZS50cnVuKGUuZmluZEJveChyLFsidHJ1biJdLGEpWzBdKX0pKX19LHtrZXk6InRydW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPWUudmVyc2lvbixhPWUuZmxhZ3Msbj10Lmxlbmd0aCxpPWUuc2FtcGxlQ291bnQ9JCh0KSxzPTQ7aWYobj5zJiYxJmEmJihlLmRhdGFPZmZzZXQ9LSgxK34kKHQscykpLHMrPTQpLG4+cyYmNCZhJiYoZS5maXJzdFNhbXBsZUZsYWdzPSQodCxzKSxzKz00KSxlLnNhbXBsZXM9W10sbj5zKWZvcih2YXIgbyx1PTA7dTxpO3UrKylvPXt9LDI1NiZhJiYoby5kdXJhdGlvbj0kKHQscykscys9NCksNTEyJmEmJihvLnNpemU9JCh0LHMpLHMrPTQpLDEwMjQmYSYmKG8uZmxhZ3M9JCh0LHMpLHMrPTQpLDIwNDgmYSYmKG8uY3RzPXI/LSgxK34kKHQscys0KSk6JCh0LHMpLHMrPTQpLGUuc2FtcGxlcy5wdXNoKG8pfSkpfX0se2tleToidGZkdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7MT09PWUudmVyc2lvbj9lLmJhc2VNZWRpYURlY29kZVRpbWU9ZWUodCk6ZS5iYXNlTWVkaWFEZWNvZGVUaW1lPSQodCl9KSl9fSx7a2V5OiJwcm9iZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuISFlLmZpbmRCb3godCxbImZ0eXAiXSl9fSx7a2V5OiJwYXJzZVNhbXBsZUZsYWdzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm57aXNMZWFkaW5nOigxMiZlWzBdKT4+PjIsZGVwZW5kc09uOjMmZVswXSxpc0RlcGVuZGVkT246KDE5MiZlWzFdKT4+PjYsaGFzUmVkdW5kYW5jeTooNDgmZVsxXSk+Pj40LHBhZGRpbmdWYWx1ZTooMTQmZVsxXSk+Pj4xLGlzTm9uU3luY1NhbXBsZToxJmVbMV0sZGVncmFkYXRpb25Qcmlvcml0eTplWzJdPDw4fGVbM119fX0se2tleToibW9vdlRvVHJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxuLGk9ZS50cmFrO2lmKGkmJmkubGVuZ3RoKXt2YXIgcz1pLmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInZpZGUiPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSksbz1pLmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInNvdW4iPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSk7aWYocyYmdCl7dmFyIHUsYyxsLGYsZCxoLHAsdj10LHk9bnVsbD09PSh1PXMudGtoZCl8fHZvaWQgMD09PXU/dm9pZCAwOnUudHJhY2tJZDtudWxsIT15JiYodi5pZD1zLnRraGQudHJhY2tJZCksdi50a2hkRHVyYXRpb249cy50a2hkLmR1cmF0aW9uLHYubXZoZER1cnRpb249ZS5tdmhkLmR1cmF0aW9uLHYubXZoZFRpbWVjYWxlPWUubXZoZC50aW1lc2NhbGUsdi50aW1lc2NhbGU9di5mb3JtYXRUaW1lc2NhbGU9cy5tZGlhLm1kaGQudGltZXNjYWxlLHYuZHVyYXRpb249cy5tZGlhLm1kaGQuZHVyYXRpb258fHYubXZoZER1cnRpb24vdi5tdmhkVGltZWNhbGUqdi50aW1lc2NhbGU7dmFyIG0sZyxrLGIsXyx3LHgsQSxCPXMubWRpYS5taW5mLnN0Ymwuc3RzZC5lbnRyaWVzWzBdO2lmKHYud2lkdGg9Qi53aWR0aCx2LmhlaWdodD1CLmhlaWdodCxCLnBhc3AmJih2LnNhclJhdGlvPVtCLnBhc3AuaFNwYWNpbmcsQi5wYXNwLnZTcGFjaW5nXSksQi5odmNDKXYuY29kZWNUeXBlPVMsdi5jb2RlYz1CLmh2Y0MuY29kZWMsdi52cHM9Qi5odmNDLnZwcyx2LnNwcz1CLmh2Y0Muc3BzLHYucHBzPUIuaHZjQy5wcHMsdi5odmNDPUIuaHZjQy5kYXRhO2Vsc2V7aWYoIUIuYXZjQyl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdmlkZW8gc3RzZCBlbnRyeSIpO3YuY29kZWM9Qi5hdmNDLmNvZGVjLHYuc3BzPUIuYXZjQy5zcHMsdi5wcHM9Qi5hdmNDLnBwc31pZih2LnByZXNlbnQ9ITAsdi5leHQ9e30sdi5leHQuc3Rzcz1udWxsPT09KGM9cy5tZGlhKXx8dm9pZCAwPT09Y3x8bnVsbD09PShsPWMubWluZil8fHZvaWQgMD09PWx8fG51bGw9PT0oZj1sLnN0YmwpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnN0c3Msdi5leHQuY3R0cz1udWxsPT09KGQ9cy5tZGlhKXx8dm9pZCAwPT09ZHx8bnVsbD09PShoPWQubWluZil8fHZvaWQgMD09PWh8fG51bGw9PT0ocD1oLnN0YmwpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmN0dHMsQiYmImVuY3YiPT09Qi50eXBlKXYuaXNWaWRlb0VuY3J5cHRpb249ITAsQi5kZWZhdWx0X0tJRD1udWxsPT09KG09Qi5zaW5mKXx8dm9pZCAwPT09bXx8bnVsbD09PShnPW0uc2NoaSl8fHZvaWQgMD09PWc/dm9pZCAwOmcudGVuYy5kZWZhdWx0X0tJRCxCLmRlZmF1bHRfSXNFbmNyeXB0ZWQ9bnVsbD09PShrPUIuc2luZil8fHZvaWQgMD09PWt8fG51bGw9PT0oYj1rLnNjaGkpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLnRlbmMuZGVmYXVsdF9Jc0VuY3J5cHRlZCxCLmRlZmF1bHRfSVZfc2l6ZT1udWxsPT09KF89Qi5zaW5mKXx8dm9pZCAwPT09X3x8bnVsbD09PSh3PV8uc2NoaSl8fHZvaWQgMD09PXc/dm9pZCAwOncudGVuYy5kZWZhdWx0X0lWX3NpemUsdi52aWRlb1NlbmM9cy5tZGlhLm1pbmYuc3RibC5zZW5jJiZzLm1kaWEubWluZi5zdGJsLnNlbmMuc2FtcGxlcyxCLmRhdGFfZm9ybWF0PW51bGw9PT0oeD1CLnNpbmYpfHx2b2lkIDA9PT14fHxudWxsPT09KEE9eC5mcm1hKXx8dm9pZCAwPT09QT92b2lkIDA6QS5kYXRhX2Zvcm1hdCx2LnVzZUVNRT1lLnVzZUVNRSx2LmtpZFZhbHVlPWUua2lkVmFsdWUsdi5wc3NoPWUucHNzaCx2LmVuY3Y9Qn1pZihvJiZyKXt2YXIgVCxDLFUsUCxJLHosTSxSLE8sTD1yLFY9bnVsbD09PShUPW8udGtoZCl8fHZvaWQgMD09PVQ/dm9pZCAwOlQudHJhY2tJZDtudWxsIT1WJiYoTC5pZD1vLnRraGQudHJhY2tJZCksTC50a2hkRHVyYXRpb249by50a2hkLmR1cmF0aW9uLEwubXZoZER1cnRpb249ZS5tdmhkLmR1cmF0aW9uLEwubXZoZFRpbWVjYWxlPWUubXZoZC50aW1lc2NhbGUsTC50aW1lc2NhbGU9TC5mb3JtYXRUaW1lc2NhbGU9by5tZGlhLm1kaGQudGltZXNjYWxlLEwuZHVyYXRpb249by5tZGlhLm1kaGQuZHVyYXRpb258fEwubXZoZER1cnRpb24vTC5tdmhkVGltZWNhbGUqTC50aW1lc2NhbGU7dmFyIEYsTixqLEcsSCxLLHEsVyxYPW8ubWRpYS5taW5mLnN0Ymwuc3RzZC5lbnRyaWVzWzBdO3N3aXRjaChMLnNhbXBsZVNpemU9WC5zYW1wbGVTaXplLEwuc2FtcGxlUmF0ZT1YLnNhbXBsZVJhdGUsTC5jaGFubmVsQ291bnQ9WC5jaGFubmVsQ291bnQsTC5wcmVzZW50PSEwLFgudHlwZSl7Y2FzZSJhbGF3IjpMLmNvZGVjVHlwZT1MLmNvZGVjPUQsTC5zYW1wbGVSYXRlPThlMzticmVhaztjYXNlInVsYXciOkwuY29kZWNUeXBlPUwuY29kZWM9RSxMLnNhbXBsZVJhdGU9OGUzO2JyZWFrO2RlZmF1bHQ6TC5zYW1wbGVEdXJhdGlvbj1zZS5nZXRGcmFtZUR1cmF0aW9uKEwuc2FtcGxlUmF0ZSxMLnRpbWVzY2FsZSksTC5zYW1wbGVSYXRlSW5kZXg9c2UuZ2V0UmF0ZUluZGV4QnlSYXRlKEwuc2FtcGxlUmF0ZSksTC5vYmplY3RUeXBlPShudWxsPT09KGE9WC5lc2RzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vYmplY3RUeXBlKXx8MixYLmVzZHMmJihMLmNvbmZpZz1BcnJheS5mcm9tKFguZXNkcy5jb25maWcpKSxMLmNvZGVjPShudWxsPT09KG49WC5lc2RzKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlYyl8fCJtcDRhLjQwLjIifWlmKEwuc2FtcGxlRHVyYXRpb249c2UuZ2V0RnJhbWVEdXJhdGlvbihMLnNhbXBsZVJhdGUsTC50aW1lc2NhbGUpLEwub2JqZWN0VHlwZT0obnVsbD09PShDPVguZXNkcyl8fHZvaWQgMD09PUM/dm9pZCAwOkMub2JqZWN0VHlwZSl8fDIsWC5lc2RzJiYoWC5lc2RzLmNvbmZpZz9MLmNvbmZpZz1BcnJheS5mcm9tKFguZXNkcy5jb25maWcpOmNvbnNvbGUud2FybigiZXNkcyBjb25maWcgaXMgbnVsbCIpKSxMLmNvZGVjPShudWxsPT09KFU9WC5lc2RzKXx8dm9pZCAwPT09VT92b2lkIDA6VS5jb2RlYyl8fCJtcDRhLjQwLjIiLEwuc2FtcGxlUmF0ZUluZGV4PXNlLmdldFJhdGVJbmRleEJ5UmF0ZShMLnNhbXBsZVJhdGUpLEwuZXh0PXt9LEwuZXh0LnN0c3M9bnVsbD09PShQPW8ubWRpYSl8fHZvaWQgMD09PVB8fG51bGw9PT0oST1QLm1pbmYpfHx2b2lkIDA9PT1JfHxudWxsPT09KHo9SS5zdGJsKXx8dm9pZCAwPT09ej92b2lkIDA6ei5zdHNzLEwuZXh0LmN0dHM9bnVsbD09PShNPW8ubWRpYSl8fHZvaWQgMD09PU18fG51bGw9PT0oUj1NLm1pbmYpfHx2b2lkIDA9PT1SfHxudWxsPT09KE89Ui5zdGJsKXx8dm9pZCAwPT09Tz92b2lkIDA6Ty5jdHRzLEwucHJlc2VudD0hMCxYJiYiZW5jYSI9PT1YLnR5cGUpTC5pc0F1ZGlvRW5jcnlwdGlvbj0hMCxYLmRhdGFfZm9ybWF0PW51bGw9PT0oRj1YLnNpbmYpfHx2b2lkIDA9PT1GfHxudWxsPT09KE49Ri5mcm1hKXx8dm9pZCAwPT09Tj92b2lkIDA6Ti5kYXRhX2Zvcm1hdCxYLmRlZmF1bHRfS0lEPW51bGw9PT0oaj1YLnNpbmYpfHx2b2lkIDA9PT1qfHxudWxsPT09KEc9ai5zY2hpKXx8dm9pZCAwPT09Rz92b2lkIDA6Ry50ZW5jLmRlZmF1bHRfS0lELFguZGVmYXVsdF9Jc0VuY3J5cHRlZD1udWxsPT09KEg9WC5zaW5mKXx8dm9pZCAwPT09SHx8bnVsbD09PShLPUguc2NoaSl8fHZvaWQgMD09PUs/dm9pZCAwOksudGVuYy5kZWZhdWx0X0lzRW5jcnlwdGVkLFguZGVmYXVsdF9JVl9zaXplPW51bGw9PT0ocT1YLnNpbmYpfHx2b2lkIDA9PT1xfHxudWxsPT09KFc9cS5zY2hpKXx8dm9pZCAwPT09Vz92b2lkIDA6Vy50ZW5jLmRlZmF1bHRfSVZfc2l6ZSxMLmF1ZGlvU2VuYz1vLm1kaWEubWluZi5zdGJsLnNlbmMmJm8ubWRpYS5taW5mLnN0Ymwuc2VuYy5zYW1wbGVzLEwudXNlRU1FPWUudXNlRU1FLEwua2lkVmFsdWU9ZS5raWRWYWx1ZSxMLmVuY2E9WH1pZihyJiYoci5pc1ZpZGVvRW5jcnlwdGlvbj0hIXQmJnQuaXNWaWRlb0VuY3J5cHRpb24pLHQmJih0LmlzQXVkaW9FbmNyeXB0aW9uPSEhciYmci5pc0F1ZGlvRW5jcnlwdGlvbiksbnVsbCE9dCYmdC5lbmN2fHxudWxsIT1yJiZyLmVuY2Epe3ZhciBZLFosUT1udWxsPT10fHxudWxsPT09KFk9dC5lbmN2KXx8dm9pZCAwPT09WT92b2lkIDA6WS5kZWZhdWx0X0tJRCxKPW51bGw9PXJ8fG51bGw9PT0oWj1yLmVuY2EpfHx2b2lkIDA9PT1aP3ZvaWQgMDpaLmRlZmF1bHRfS0lELCQ9UXx8Sj8oUXx8Sikuam9pbigiIik6bnVsbDt0JiYodC5raWQ9JCksciYmKHIua2lkPSQpfXJldHVybiB0JiYodC5mbGFncz0zODQxKSxyJiYoci5mbGFncz0xNzkzKSx7dmlkZW9UcmFjazp0LGF1ZGlvVHJhY2s6cn19fX0se2tleToiZXZhbHVhdGVEZWZhdWx0RHVyYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxuPW51bGw9PXR8fG51bGw9PT0oYT10LnNhbXBsZXMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aDtyZXR1cm4gbj8xMDI0Km4vdC50aW1lc2NhbGUqZS50aW1lc2NhbGUvcjoxMDI0fX0se2tleToibW9vZlRvU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24odCxyLGEpe3ZhciBuPXt9O3JldHVybiB0Lm1maGQmJihyJiYoci5zZXF1ZW5jZU51bWJlcj10Lm1maGQuc2VxdWVuY2VOdW1iZXIpLGEmJihhLnNlcXVlbmNlTnVtYmVyPXQubWZoZC5zZXF1ZW5jZU51bWJlcikpLHQudHJhZi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnRmaGQscz10LnRmZHQsbz10LnRydW47aWYoaSYmbyl7cyYmKHImJnIuaWQ9PT1pLnRyYWNrSWQmJihyLmJhc2VNZWRpYURlY29kZVRpbWU9cy5iYXNlTWVkaWFEZWNvZGVUaW1lKSxhJiZhLmlkPT09aS50cmFja0lkJiYoYS5iYXNlTWVkaWFEZWNvZGVUaW1lPXMuYmFzZU1lZGlhRGVjb2RlVGltZSkpO3ZhciB1PWkuZGVmYXVsdFNhbXBsZVNpemV8fDAsYz1pLmRlZmF1bHRTYW1wbGVEdXJhdGlvbnx8ZS5ldmFsdWF0ZURlZmF1bHREdXJhdGlvbihyLGEsby5zYW1wbGVzLmxlbmd0aHx8by5zYW1wbGVDb3VudCksbD1vLmRhdGFPZmZzZXR8fDAsZj0wLGQ9LTE7aWYoIW8uc2FtcGxlcy5sZW5ndGgmJm8uc2FtcGxlQ291bnQpe25baS50cmFja0lkXT1bXTtmb3IodmFyIGg9MDtoPG8uc2FtcGxlQ291bnQ7aCsrKW5baS50cmFja0lkXS5wdXNoKHtvZmZzZXQ6bCxkdHM6ZixkdXJhdGlvbjpjLHNpemU6dX0pLGYrPWMsbCs9dX1lbHNlIG5baS50cmFja0lkXT1vLnNhbXBsZXMubWFwKChmdW5jdGlvbihlLHQpe3JldHVybihlPXtvZmZzZXQ6bCxkdHM6ZixwdHM6ZisoZS5jdHN8fDApLGR1cmF0aW9uOmUuZHVyYXRpb258fGMsc2l6ZTplLnNpemV8fHUsZ29wSWQ6ZCxrZXlmcmFtZTowPT09dHx8bnVsbCE9PWUuZmxhZ3MmJnZvaWQgMCE9PWUuZmxhZ3MmJig2NTUzNiZlLmZsYWdzKT4+PjAhPTY1NTM2fSkua2V5ZnJhbWUmJihkKyssZS5nb3BJZD1kKSxmKz1lLmR1cmF0aW9uLGwrPWUuc2l6ZSxlfSkpfX0pKSxufX0se2tleToibW9vdlRvU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmFrO2lmKHQmJnQubGVuZ3RoKXt2YXIgcj10LmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInZpZGUiPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSksYT10LmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInNvdW4iPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSk7aWYocnx8YSl7dmFyIG4saTtpZihyKXt2YXIgcyxvLHU9bnVsbD09PShzPXIubWRpYSl8fHZvaWQgMD09PXN8fG51bGw9PT0obz1zLm1pbmYpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0Ymw7aWYoIXUpcmV0dXJuO3ZhciBjPXUuc3R0cyxsPXUuc3RzYyxmPXUuc3RzeixkPXUuc3RjbyxoPXUuc3RzcyxwPXUuY3R0cztpZighKGMmJmwmJmYmJmQmJmgpKXJldHVybjtuPXZlKGMsbCxmLGQscCxoKX1pZihhKXt2YXIgdix5LG0sZz1udWxsPT09KHY9YS5tZGlhKXx8dm9pZCAwPT09dnx8bnVsbD09PSh5PXYubWluZil8fHZvaWQgMD09PXk/dm9pZCAwOnkuc3RibDtpZighZylyZXR1cm47dmFyIGs9bnVsbD09PShtPWEubWRpYS5tZGhkKXx8dm9pZCAwPT09bT92b2lkIDA6bS50aW1lc2NhbGUsYj1nLnN0dHMsXz1nLnN0c2Msdz1nLnN0c3oseD1nLnN0Y287aWYoIShrJiZiJiZfJiZ3JiZ4KSlyZXR1cm47aT12ZShiLF8sdyx4KX1yZXR1cm57dmlkZW9TYW1wbGVzOm4sYXVkaW9TYW1wbGVzOml9fX19fV0pLGV9KCk7ZnVuY3Rpb24gdmUoZSx0LHIsYSxuLGkpe3ZhciBzLG8sdSxjPVtdLGw9bnVsbD09bj92b2lkIDA6bi5lbnRyaWVzLGY9dC5lbnRyaWVzLGQ9YS5lbnRyaWVzLGg9ci5lbnRyeVNpemVzLHA9bnVsbD09aT92b2lkIDA6aS5lbnRyaWVzO3AmJihzPXt9LHAuZm9yRWFjaCgoZnVuY3Rpb24oZSl7c1tlLTFdPSEwfSkpKSxsJiYobz1bXSxsLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNvdW50LHI9ZS5vZmZzZXQsYT0wO2E8dDthKyspby5wdXNoKHIpfSkpKTt2YXIgdj0tMSx5PTAsbT0wLGc9MCxrPTAsYj0wLF89ZlswXS5zYW1wbGVzUGVyQ2h1bmssdz1mWzFdP2ZbMV0uZmlyc3RDaHVuay0xOjEvMDtyZXR1cm4gZS5lbnRyaWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNvdW50LGE9ZS5kZWx0YSxuPTA7bjx0O24rKyl1PXtkdHM6eSxkdXJhdGlvbjphLHNpemU6aFttXXx8ci5zYW1wbGVTaXplLG9mZnNldDpkW2ddK2IsaW5kZXg6bX0scCYmKHUua2V5ZnJhbWU9c1ttXSx1LmtleWZyYW1lJiZ2KyssdS5nb3BJZD12KSxvJiZtPG8ubGVuZ3RoJiYodS5wdHM9dS5kdHMrb1ttXSksYy5wdXNoKHUpLHkrPWEsKyttPF8/Yis9dS5zaXplOihnKyssYj0wLGc+PXcmJihrKyssdz1mW2srMV0/ZltrKzFdLmZpcnN0Q2h1bmstMToxLzApLF8rPWZba10uc2FtcGxlc1BlckNodW5rKX0pKSxjfWZ1bmN0aW9uIHllKGUsdCl7cmV0dXJuIGUuZGF0YVJlZmVyZW5jZUluZGV4PUoodCw2KSxlLndpZHRoPUoodCwyNCksZS5oZWlnaHQ9Sih0LDI2KSxlLmhvcml6cmVzb2x1dGlvbj0kKHQsMjgpLGUudmVydHJlc29sdXRpb249JCh0LDMyKSxlLmZyYW1lQ291bnQ9Sih0LDQwKSxlLmRlcHRoPUoodCw3NCksNzh9ZnVuY3Rpb24gbWUoZSx0KXtyZXR1cm4gZS5kYXRhUmVmZXJlbmNlSW5kZXg9Sih0LDYpLGUuY2hhbm5lbENvdW50PUoodCwxNiksZS5zYW1wbGVTaXplPUoodCwxOCksZS5zYW1wbGVSYXRlPSQodCwyNCkvNjU1MzYsMjh9ZnVuY3Rpb24gZ2UoZSx0LHIpe2lmKGUpe2lmKGUuc2l6ZSE9PWUuZGF0YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJib3ggIi5jb25jYXQoZS50eXBlLCIgc2l6ZSAhPT0gZGF0YS5sZW5ndGgiKSk7dmFyIGE9e3N0YXJ0OmUuc3RhcnQsc2l6ZTplLnNpemUsaGVhZGVyU2l6ZTplLmhlYWRlclNpemUsdHlwZTplLnR5cGV9O3JldHVybiB0JiYoYS52ZXJzaW9uPWUuZGF0YVtlLmhlYWRlclNpemVdLGEuZmxhZ3M9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuKGVbdF08PDE2KSsoZVt0KzFdPDw4KSsoZVt0KzJdfHwwKX0oZS5kYXRhLGUuaGVhZGVyU2l6ZSsxKSxhLmhlYWRlclNpemUrPTQpLHIoYSxlLmRhdGEuc3ViYXJyYXkoYS5oZWFkZXJTaXplKSxhLnN0YXJ0K2EuaGVhZGVyU2l6ZSksYX19dmFyIGtlPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9U3RyaW5nKHIpLG49dD4+MCxpPU1hdGguY2VpbChuL2EubGVuZ3RoKSxzPVtdLG89U3RyaW5nKGUpO2ktLTspcy5wdXNoKGEpO3JldHVybiBzLmpvaW4oIiIpLnN1YnN0cmluZygwLG4tby5sZW5ndGgpK299LGJlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheSh0KSxhPTA7YTx0O2ErKylyW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbih0KXtlLnB1c2goa2UoTnVtYmVyKHQpLnRvU3RyaW5nKDE2KSwyLDApKX0pKSxlWzBdfTtmdW5jdGlvbiBfZShlKXtmb3IodmFyIHQ9MCxyPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkocj4xP3ItMTowKSxuPTE7bjxyO24rKylhW24tMV09YXJndW1lbnRzW25dO2EuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9ZS5sZW5ndGh9KSk7dmFyIGk9bmV3IGUodCkscz0wO3JldHVybiBhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kuc2V0KGUscykscys9ZS5sZW5ndGh9KSksaX12YXIgd2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDApfXJldHVybiBuKGUsW3trZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheSh0KSxhPTA7YTx0O2ErKylyW2FdPWFyZ3VtZW50c1thXTtyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Q/ZS5idWZmZXI9X2UoVWludDhBcnJheSxlLmJ1ZmZlcix0KTp3aW5kb3cuY29uc29sZS53YXJuKHQpfSkpfX1dLFt7a2V5OiJ3cml0ZVVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj44JjI1NSwyNTUmZV0pfX0se2tleToid3JpdGVVaW50MzIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShbZT4+MjQsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXSl9fV0pLGV9KCkseGU9TWF0aC5wb3coMiwzMiktMSxTZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJib3giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KHQ+MT90LTE6MCksYT0xO2E8dDthKyspclthLTFdPWFyZ3VtZW50c1thXTt2YXIgbj04KyhyPXIuZmlsdGVyKEJvb2xlYW4pKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5ieXRlTGVuZ3RofSksMCksaT1uZXcgVWludDhBcnJheShuKTtpWzBdPW4+PjI0JjI1NSxpWzFdPW4+PjE2JjI1NSxpWzJdPW4+PjgmMjU1LGlbM109MjU1Jm4saS5zZXQoZSw0KTt2YXIgcz04O3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kuc2V0KGUscykscys9ZS5ieXRlTGVuZ3RofSkpLGl9fSx7a2V5OiJmdHlwIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09YiYmZS5jb2RlY1R5cGU9PT1TfSkpP2UuRlRZUEhFVjE6ZS5GVFlQQVZDMX19LHtrZXk6ImluaXRTZWdtZW50Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gWihlLmZ0eXAodCksZS5tb292KHQpKX19LHtrZXk6InBzc2giLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFsxLDAsMCwwXS5jb25jYXQoWzE2LDExOSwyMzksMjM2LDE5MiwxNzgsNzcsMiwxNzIsMjI3LDYwLDMwLDgyLDIyNiwyNTEsNzVdLFswLDAsMCwxXSxhZSh0LmtpZCksWzAsMCwwLDBdKSk7cmV0dXJuIGUuYm94KGUudHlwZXMucHNzaCxyKX19LHtrZXk6Im1vb3YiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRbMF0udXNlRU1FJiYodFswXS5lbmN2fHx0WzBdLmVuY2EpKXt0WzBdLnBzc2h8fCh0WzBdLnBzc2g9e2tpZDp0WzBdLmtpZH0pO3ZhciByPXRoaXMucHNzaCh0WzBdLnBzc2gpO3JldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb3YsZS5tdmhkKHRbMF0ubXZoZER1cnRpb258fHRbMF0uZHVyYXRpb24sdFswXS5tdmhkVGltZWNhbGV8fHRbMF0udGltZXNjYWxlKSxlLm12ZXgodCldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFrKHQpfSkpKSxbcl0pKX1yZXR1cm4gZS5ib3guYXBwbHkoZSxbZS50eXBlcy5tb292LGUubXZoZCh0WzBdLm12aGREdXJ0aW9ufHx0WzBdLmR1cmF0aW9uLHRbMF0ubXZoZFRpbWVjYWxlfHx0WzBdLnRpbWVzY2FsZSldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFrKHQpfSkpKSxbZS5tdmV4KHQpXSkpfX0se2tleToibXZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjllNCxhPWUuYm94KGUudHlwZXMubXZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcix0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMSwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDY0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI1NSwyNTUsMjU1LDI1NV0pKTtyZXR1cm4gYX19LHtrZXk6InRyYWsiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRyYWssZS50a2hkKHQuaWQsdC50a2hkRHVyYXRpb258fDAsdC53aWR0aCx0LmhlaWdodCksZS5tZGlhKHQpKX19LHtrZXk6InRraGQiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxpPWUuYm94KGUudHlwZXMudGtoZCxuZXcgVWludDhBcnJheShbMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwwLDAsMCwwLHI+PjI0JjI1NSxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjQsMCwwLDAsYT4+OCYyNTUsMjU1JmEsMCwwLG4+PjgmMjU1LDI1NSZuLDAsMF0pKTtyZXR1cm4gaX19LHtrZXk6Im1kaWEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1kaWEsZS5tZGhkKHQuZHVyYXRpb24sdC50aW1lc2NhbGUpLGUuaGRscih0LnR5cGUpLGUubWluZih0KSl9fSx7a2V5OiJtZGhkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06OWU0LGE9ZS5ib3goZS50eXBlcy5tZGhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCxyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsODUsMTk2LDAsMF0pKTtyZXR1cm4gYX19LHtrZXk6ImhkbHIiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLmhkbHIsZS5IRExSX1RZUEVTW3RdKX19LHtrZXk6Im1pbmYiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1pbmYsdC50eXBlPT09Yj9lLlZNSEQ6ZS5TTUhELGUuRElORixlLnN0YmwodCkpfX0se2tleToic3RibCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9W107cmV0dXJuIHQmJnQuZXh0JiZ0LmV4dC5zdHNzJiZyLnB1c2goZS5zdHNzKHQuZXh0LnN0c3MuZW50cmllcykpLGUuYm94KGUudHlwZXMuc3RibCxlLnN0c2QodCksZS5TVFRTLHJbMF0sZS5TVFNDLGUuU1RTWixlLlNUQ08pfX0se2tleToic3RzZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuIHI9ImF1ZGlvIj09PXQudHlwZT90LnVzZUVNRSYmdC5lbmNhP2UuZW5jYSh0KTplLm1wNGEodCk6dC51c2VFTUUmJnQuZW5jdj9lLmVuY3YodCk6ZS5hdmMxaGV2MSh0KSxlLmJveChlLnR5cGVzLnN0c2QsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMV0pLHIpfX0se2tleToiZW5jYSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5lbmNhLmNoYW5uZWxDb3VudCxhPXQuZW5jYS5zYW1wbGVSYXRlLG49bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCxyLDAsMTYsMCwwLDAsMCxhPj44JjI1NSwyNTUmYSwwLDBdKSxpPWUuZXNkcyh0LmNvbmZpZykscz1lLnNpbmYodC5lbmNhKTtyZXR1cm4gZS5ib3goZS50eXBlcy5lbmNhLG4saSxzKX19LHtrZXk6ImVuY3YiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLGEsbj10LnNwcy5sZW5ndGg+MD90LnNwc1swXTpbXSxpPXQucHBzLmxlbmd0aD4wP3QucHBzWzBdOltdLHM9dC53aWR0aCxvPXQuaGVpZ2h0LHU9dC5zYXJSYXRpb1swXSxjPXQuc2FyUmF0aW9bMV0sbD1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAscz4+OCYyNTUsMjU1JnMsbz4+OCYyNTUsMjU1Jm8sMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMTgsMTAwLDk3LDEwNSwxMDgsMTIxLDEwOSwxMTEsMTE2LDEwNSwxMTEsMTEwLDQ3LDEwNCwxMDgsMTE1LDQ2LDEwNiwxMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI0LDE3LDE3XSksZj1uZXcgVWludDhBcnJheSgocj0oYT1bMSxuWzFdLG5bMl0sblszXSwyNTUsMjI1LG4ubGVuZ3RoPj4+OCYyNTUsMjU1Jm4ubGVuZ3RoXSkuY29uY2F0LmFwcGx5KGEseShuKSkuY29uY2F0KFsxLGkubGVuZ3RoPj4+OCYyNTUsMjU1JmkubGVuZ3RoXSkpLmNvbmNhdC5hcHBseShyLHkoaSkpKSxkPW5ldyBVaW50OEFycmF5KFswLDAsODgsNTcsMCwxNSwyMDAsMTkyLDAsNCw4Niw3Ml0pLGg9ZS5zaW5mKHQuZW5jdikscD1uZXcgVWludDhBcnJheShbdT4+MjQsdT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1LGM+PjI0LGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmY10pO3JldHVybiBlLmJveChlLnR5cGVzLmVuY3YsbCxlLmJveChlLnR5cGVzLmF2Y0MsZiksZS5ib3goZS50eXBlcy5idHJ0LGQpLGgsZS5ib3goZS50eXBlcy5wYXNwLHApKX19LHtrZXk6InNjaGkiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFtdKSxhPWUudGVuYyh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy5zY2hpLHIsYSl9fSx7a2V5OiJ0ZW5jIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMjU1JnQuZGVmYXVsdF9Jc0VuY3J5cHRlZCwyNTUmdC5kZWZhdWx0X0lWX3NpemVdLmNvbmNhdChhZSh0LmRlZmF1bHRfS0lEKSkpO3JldHVybiBlLmJveChlLnR5cGVzLnRlbmMscil9fSx7a2V5OiJzaW5mIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgVWludDhBcnJheShbXSksYT1uZXcgVWludDhBcnJheShbdC5kYXRhX2Zvcm1hdC5jaGFyQ29kZUF0KDApLHQuZGF0YV9mb3JtYXQuY2hhckNvZGVBdCgxKSx0LmRhdGFfZm9ybWF0LmNoYXJDb2RlQXQoMiksdC5kYXRhX2Zvcm1hdC5jaGFyQ29kZUF0KDMpXSksbj1uZXcgVWludDhBcnJheShbMCwwLDAsMCw5OSwxMDEsMTEwLDk5LDAsMSwwLDBdKSxpPWUuc2NoaSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy5zaW5mLHIsZS5ib3goZS50eXBlcy5mcm1hLGEpLGUuYm94KGUudHlwZXMuc2NobSxuKSxpKX19LHtrZXk6ImF2YzFoZXYxIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LmNvZGVjVHlwZT09PVMsYT1yP2UudHlwZXMuaHZjMTplLnR5cGVzLmF2YzEsbj1yP2UuaHZjQyh0KTplLmF2Y0ModCksaT1bbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLHQud2lkdGg+PjgmMjU1LDI1NSZ0LndpZHRoLHQuaGVpZ2h0Pj44JjI1NSwyNTUmdC5oZWlnaHQsMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMTcsMTddKSxuXTtyZXR1cm4gcj9pLnB1c2goZS5ib3goZS50eXBlcy5maWVsLG5ldyBVaW50OEFycmF5KFsxLDBdKSkpOnQuc2FyUmF0aW8mJnQuc2FyUmF0aW8ubGVuZ3RoPjEmJmkucHVzaChlLnBhc3AodC5zYXJSYXRpbykpLGUuYm94LmFwcGx5KGUsW2FdLmNvbmNhdChpKSl9fSx7a2V5OiJhdmNDIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcixhLG4saT1bXSxzPVtdO3JldHVybiB0LnNwcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuPWUuYnl0ZUxlbmd0aCxpLnB1c2gobj4+PjgmMjU1KSxpLnB1c2goMjU1Jm4pLGkucHVzaC5hcHBseShpLHkoZSkpfSkpLHQucHBzLmZvckVhY2goKGZ1bmN0aW9uKGUpe249ZS5ieXRlTGVuZ3RoLHMucHVzaChuPj4+OCYyNTUpLHMucHVzaCgyNTUmbikscy5wdXNoLmFwcGx5KHMseShlKSl9KSksZS5ib3goZS50eXBlcy5hdmNDLG5ldyBVaW50OEFycmF5KChyPShhPVsxLGlbM10saVs0XSxpWzVdLDI1NSwyMjR8dC5zcHMubGVuZ3RoXSkuY29uY2F0LmFwcGx5KGEsaSkuY29uY2F0KFt0LnBwcy5sZW5ndGhdKSkuY29uY2F0LmFwcGx5KHIscykpKX19LHtrZXk6Imh2Y0MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuaHZjQztpZihyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiByO3ZhciBhLG49dC52cHMsaT10LnNwcyxzPXQucHBzO2lmKHIpe3ZhciBvPXIuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3MsdT1yLmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3MsYz0obi5sZW5ndGgmJjEpKyhpLmxlbmd0aCYmMSkrKHMubGVuZ3RoJiYxKTthPVsxLHIuZ2VuZXJhbFByb2ZpbGVTcGFjZTw8NnxyLmdlbmVyYWxUaWVyRmxhZzw8NXxyLmdlbmVyYWxQcm9maWxlSWRjLG8+Pj4yNCxvPj4+MTYsbz4+Pjgsbyx1WzBdLHVbMV0sdVsyXSx1WzNdLHVbNF0sdVs1XSxyLmdlbmVyYWxMZXZlbElkYywyNDAsMCwyNTIsMjUyfHIuY2hyb21hRm9ybWF0SWRjLDI0OHxyLmJpdERlcHRoTHVtYU1pbnVzOCwyNDh8ci5iaXREZXB0aENocm9tYU1pbnVzOCwwLDAsci5udW1UZW1wb3JhbExheWVyczw8M3xyLnRlbXBvcmFsSWROZXN0ZWQ8PDJ8MyxjXTt2YXIgbD1mdW5jdGlvbihlKXt2YXIgdDthLnB1c2goZS5sZW5ndGg+PjgsZS5sZW5ndGgpLCh0PWEpLnB1c2guYXBwbHkodCx5KGUpKX07bi5sZW5ndGgmJihhLnB1c2goMTYwLDAsbi5sZW5ndGgpLG4uZm9yRWFjaChsKSksaS5sZW5ndGgmJihhLnB1c2goMTYxLDAsaS5sZW5ndGgpLGkuZm9yRWFjaChsKSkscy5sZW5ndGgmJihhLnB1c2goMTYyLDAscy5sZW5ndGgpLHMuZm9yRWFjaChsKSl9ZWxzZSBhPVsxLDEsOTYsMCwwLDAsMTQ0LDAsMCwwLDAsMCw5MywyNDAsMCwyNTIsMjUzLDI0OCwyNDgsMCwwLDE1LDMsMTYwLDAsMSwwLDI0LDY0LDEsMTIsMSwyNTUsMjU1LDEsOTYsMCwwLDMsMCwxNDQsMCwwLDMsMCwwLDMsMCw5MywxNTMsMTUyLDksMTYxLDAsMSwwLDQ1LDY2LDEsMSwxLDk2LDAsMCwzLDAsMTQ0LDAsMCwzLDAsMCwzLDAsOTMsMTYwLDIsMTI4LDEyOCw0NSwyMiw4OSwxNTMsMTY0LDE0Nyw0MywxNTQsMTI4LDEyOCwxMjgsMTMwLDAsMCwzLDAsMiwwLDAsMywwLDUwLDE2LDE2MiwwLDEsMCw3LDY4LDEsMTkzLDExNCwxODAsOTgsNjRdO3JldHVybiBlLmJveChlLnR5cGVzLmh2Y0MsbmV3IFVpbnQ4QXJyYXkoYSkpfX0se2tleToicGFzcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dih0LDIpLGE9clswXSxuPXJbMV07cmV0dXJuIGUuYm94KGUudHlwZXMucGFzcCxuZXcgVWludDhBcnJheShbYT4+MjQsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhLG4+PjI0LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbl0pKX19LHtrZXk6Im1wNGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1wNGEsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCx0LmNoYW5uZWxDb3VudCwwLDE2LDAsMCwwLDAsdC5zYW1wbGVSYXRlPj44JjI1NSwyNTUmdC5zYW1wbGVSYXRlLDAsMF0pLHQuY29uZmlnLmxlbmd0aD9lLmVzZHModC5jb25maWcpOnZvaWQgMCl9fSx7a2V5OiJlc2RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aDtyZXR1cm4gZS5ib3goZS50eXBlcy5lc2RzLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDMsMjMrciwwLDAsMCw0LDE1K3IsNjQsMjEsMCw2LDAsMCwwLDIxOCwxOTIsMCwwLDIxOCwxOTIsNV0uY29uY2F0KFtyXSkuY29uY2F0KHQpLmNvbmNhdChbNiwxLDJdKSkpfX0se2tleToibXZleCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubXZleF0uY29uY2F0KHkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyZXgodC5pZCl9KSkpKSl9fSx7a2V5OiJ0cmV4Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy50cmV4LG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwxXSkpfX0se2tleToidHJleDEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRyZXgsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMCwwLDEsMCwwLDIsMCwwLDAsMCwwLDAsMSwwLDBdKSl9fSx7a2V5OiJ0cmV4MiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudHJleCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMCwwLDAsMSwwLDAsNCwwLDAsMCwwLDAsMiwwLDAsMF0pKX19LHtrZXk6Im1vb2YiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb2YsZS5tZmhkKHRbMF0uc2FtcGxlcz90WzBdLnNhbXBsZXNbMF0uZ29wSWQ6MCldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFmKHQpfSkpKSkpfX0se2tleToibWZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdKSl9fSx7a2V5OiJ0cmFmIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1lLnRmaGQodC5pZCksYT1lLnRmZHQodCx0LmJhc2VNZWRpYURlY29kZVRpbWUpLG49MDtpZih0LmlzVmlkZW8mJnQudmlkZW9TZW5jJiZ0LnZpZGVvU2VuYy5mb3JFYWNoKChmdW5jdGlvbihlKXtuKz04LGUuc3Vic2FtcGxlcyYmZS5zdWJzYW1wbGVzLmxlbmd0aCYmKG4rPTIsbis9NiplLnN1YnNhbXBsZXMubGVuZ3RoKX0pKSx0LnZpZGVvU2VuY0xlbmd0aD1uLHQudXNlRU1FJiYodC5pc1ZpZGVvRW5jcnlwdGlvbnx8dC5pc0F1ZGlvRW5jcnlwdGlvbikpe2lmKHQuaXNWaWRlb0VuY3J5cHRpb24pe2lmKHQuaXNWaWRlbyl7dmFyIGk9ZS5zYWl6KHQpLHM9ZS5zYWlvKHQpLG89ZS50cnVuMSh0KSx1PWUuc2VuYyh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSxpLHMsbyx1KX1pZih0LmlzQXVkaW9FbmNyeXB0aW9uKXt2YXIgYz1lLnNiZ3AoKSxsPWUuc2Fpeih0KSxmPWUuc2Fpbyh0KSxkPWUuc2VuYyh0KSxoPWUudHJ1bjEodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEsYyxsLGYsZCxoKX12YXIgcD1lLnNiZ3AoKSx2PWUudHJ1bjEodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEscCx2KX1pZih0LmlzVmlkZW8pe3ZhciB5PWUudHJ1bjEodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEseSl9dmFyIG09ZS5zYmdwKCksZz1lLnNhaXoodCksaz1lLnNhaW8odCksYj1lLnNlbmModCksXz1lLnRydW4xKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnRyYWYscixhLG0sZyxrLGIsXyl9dmFyIHc9ZS5zZHRwKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnRyYWYscixhLHcsZS50cnVuKHQuc2FtcGxlcyx3LmJ5dGVMZW5ndGgrNzYpKX19LHtrZXk6InNkdHAiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyB3ZTtyZXR1cm4gdC5zYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Iud3JpdGUobmV3IFVpbnQ4QXJyYXkodC5pc1ZpZGVvP1tlLmtleWZyYW1lPzMyOjE2XTpbMTZdKSl9KSksZS5ib3goZS50eXBlcy5zZHRwLHRoaXMuZXh0ZW5zaW9uKDAsMCksci5idWZmZXIpfX0se2tleToidHJ1bjEiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyB3ZSxhPXdlLndyaXRlVWludDMyKHQuc2FtcGxlcy5sZW5ndGgpLG49bnVsbDtpZih0LmlzVmlkZW8pe3ZhciBpPXQudmlkZW9TZW5jTGVuZ3RoO249d2Uud3JpdGVVaW50MzIoMTYqdC5zYW1wbGVzLmxlbmd0aCtpKzE0OSksIXQuaXNWaWRlb0VuY3J5cHRpb24mJnQuaXNBdWRpb0VuY3J5cHRpb24mJihuPXdlLndyaXRlVWludDMyKDE2KnQuc2FtcGxlcy5sZW5ndGgrOTIpKX1lbHNle3ZhciBzPTEyKnQuc2FtcGxlcy5sZW5ndGgrMTI0O3QuaXNBdWRpb0VuY3J5cHRpb24mJihzPTEyKnQuc2FtcGxlcy5sZW5ndGgrOCp0LmF1ZGlvU2VuYy5sZW5ndGgrMTc3KSxuPXdlLndyaXRlVWludDMyKHMpfXJldHVybiB0LnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ci53cml0ZSh3ZS53cml0ZVVpbnQzMihlLmR1cmF0aW9uKSksci53cml0ZSh3ZS53cml0ZVVpbnQzMihlLnNpemUpKSxyLndyaXRlKHdlLndyaXRlVWludDMyKGUua2V5ZnJhbWU/MzM1NTQ0MzI6NjU1MzYpKSx0LmlzVmlkZW8mJnIud3JpdGUod2Uud3JpdGVVaW50MzIoZS5jdHM/ZS5jdHM6MCkpfSkpLGUuYm94KGUudHlwZXMudHJ1bix0aGlzLmV4dGVuc2lvbigwLHQuZmxhZ3MpLGEsbixyLmJ1ZmZlcil9fSx7a2V5OiJzZW5jIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgd2UsYT10LnNhbXBsZXMubGVuZ3RoLG49dC5pc1ZpZGVvPzE2OjgsaT10LmlzVmlkZW8/MjowLHM9W10sbz0wO3JldHVybiB0LmlzVmlkZW8/KHM9dC52aWRlb1NlbmMsbz10LnZpZGVvU2VuY0xlbmd0aCk6cz10LmF1ZGlvU2VuYyxvPW98fG4qYSxyLndyaXRlKHdlLndyaXRlVWludDMyKDE2K28pLGUudHlwZXMuc2VuYyx0aGlzLmV4dGVuc2lvbigwLGkpKSxyLndyaXRlKHdlLndyaXRlVWludDMyKGEpKSxzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5Jbml0aWFsaXphdGlvblZlY3Rvci5sZW5ndGg7dCsrKXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoW2UuSW5pdGlhbGl6YXRpb25WZWN0b3JbdF1dKSk7ZS5zdWJzYW1wbGVzJiZlLnN1YnNhbXBsZXMubGVuZ3RoJiYoci53cml0ZSh3ZS53cml0ZVVpbnQxNihlLnN1YnNhbXBsZXMubGVuZ3RoKSksZS5zdWJzYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Iud3JpdGUod2Uud3JpdGVVaW50MTYoZS5CeXRlc09mQ2xlYXJEYXRhKSksci53cml0ZSh3ZS53cml0ZVVpbnQzMihlLkJ5dGVzT2ZQcm90ZWN0ZWREYXRhKSl9KSkpfSkpLHIuYnVmZmVyfX0se2tleToic2FpbyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9MTIqdC5zYW1wbGVzLmxlbmd0aCsxNDE7IXQuaXNWaWRlbyYmdC5pc0F1ZGlvRW5jcnlwdGlvbiYmKHI9MTQ5KTt2YXIgYT1uZXcgVWludDhBcnJheShbMSwwLDAsMCwwLDAsMCwxLDAsMCwwLDAscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pO3JldHVybiBlLmJveChlLnR5cGVzLnNhaW8sYSl9fSx7a2V5OiJzYWl6Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LnNhbXBsZXMubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMTYscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pO3JldHVybiBlLmJveChlLnR5cGVzLnNhaXosYSl9fSx7a2V5OiJzYmdwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5KFsxMTQsMTExLDEwOCwxMDgsMCwwLDAsMSwwLDAsMSwyNSwwLDAsMCwxXSk7cmV0dXJuIGUuYm94KGUudHlwZXMuc2JncCx0aGlzLmV4dGVuc2lvbigwLDApLHQpfX0se2tleToiZXh0ZW5zaW9uIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgVWludDhBcnJheShbZSx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdKX19LHtrZXk6InRmaGQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRmaGQsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0XSkpfX0se2tleToidGZkdCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgYT1NYXRoLmZsb29yKHIvKHhlKzEpKSxuPU1hdGguZmxvb3IociUoeGUrMSkpO3JldHVybiB0LnVzZUVNRSYmKHQuaXNWaWRlb0VuY3J5cHRpb258fHQuaXNBdWRpb0VuY3J5cHRpb24pP2UuYm94KGUudHlwZXMudGZkdCxuZXcgVWludDhBcnJheShbMCwwLDAsMCxuPj4yNCxuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm5dKSk6ZS5ib3goZS50eXBlcy50ZmR0LG5ldyBVaW50OEFycmF5KFsxLDAsMCwwLGE+PjI0LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYSxuPj4yNCxuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm5dKSl9fSx7a2V5OiJ0cnVuIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPXQubGVuZ3RoLG49MTIrMTYqYTtyKz04K247dmFyIGk9bmV3IFVpbnQ4QXJyYXkobik7aS5zZXQoWzAsMCwxNSwxLGE+Pj4yNCYyNTUsYT4+PjE2JjI1NSxhPj4+OCYyNTUsMjU1JmEscj4+PjI0JjI1NSxyPj4+MTYmMjU1LHI+Pj44JjI1NSwyNTUmcl0sMCk7Zm9yKHZhciBzPTA7czxhO3MrKyl7dmFyIG89dFtzXSx1PW8uZHVyYXRpb24sYz1vLnNpemUsbD1vLmZsYWcsZj12b2lkIDA9PT1sP3t9OmwsZD1vLmN0cyxoPXZvaWQgMD09PWQ/MDpkO2kuc2V0KFt1Pj4+MjQmMjU1LHU+Pj4xNiYyNTUsdT4+PjgmMjU1LDI1NSZ1LGM+Pj4yNCYyNTUsYz4+PjE2JjI1NSxjPj4+OCYyNTUsMjU1JmMsZi5pc0xlYWRpbmc8PDJ8KG51bGw9PT1mLmRlcGVuZHNPbnx8dm9pZCAwPT09Zi5kZXBlbmRzT24/MTpmLmRlcGVuZHNPbiksZi5pc0RlcGVuZGVkT248PDZ8Zi5oYXNSZWR1bmRhbmN5PDw0fGYucGFkZGluZ1ZhbHVlPDwxfChudWxsPT09Zi5pc05vblN5bmNTYW1wbGV8fHZvaWQgMD09PWYuaXNOb25TeW5jU2FtcGxlPzE6Zi5pc05vblN5bmNTYW1wbGUpLDYxNDQwJmYuZGVncmFkYXRpb25Qcmlvcml0eSwxNSZmLmRlZ3JhZGF0aW9uUHJpb3JpdHksaD4+PjI0JjI1NSxoPj4+MTYmMjU1LGg+Pj44JjI1NSwyNTUmaF0sMTIrMTYqcyl9cmV0dXJuIGUuYm94KGUudHlwZXMudHJ1bixpKX19LHtrZXk6Im1vb3ZNUDQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb3YsZS5tdmhkKHRbMF0uZHVyYXRpb24sdFswXS50aW1lc2NhbGUpXS5jb25jYXQoeSh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUudHJhY2tNUDQodCl9KSkpKSl9fSx7a2V5OiJ0cmFja01QNCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhayxlLnRraGQodC5pZCx0LmR1cmF0aW9uLHQud2lkdGgsdC5oZWlnaHQpLGUubWRpYU1QNCh0KSl9fSx7a2V5OiJtZGlhTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5tZGlhLGUubWRoZCh0LmR1cmF0aW9uLHQudGltZXNjYWxlKSxlLmhkbHIodC50eXBlKSxlLm1pbmZNUDQodCkpfX0se2tleToibWluZk1QNCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWluZix0LnR5cGU9PT1iP2UuVk1IRDplLlNNSEQsZS5ESU5GLGUuc3RibE1QNCh0KSl9fSx7a2V5OiJzdGJsTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LmV4dCxhPVtlLnN0c2QodCksZS5zdHRzKHIuc3R0cyksZS5zdHNjKHIuc3RzYyksZS5zdHN6KHIuc3RzeiksZS5zdGNvKHIuc3RjbyldO3JldHVybiByLnN0c3MubGVuZ3RoJiZhLnB1c2goZS5zdHNzKHIuc3RzcykpLHIuY3R0cy5sZW5ndGgmJmEucHVzaChlLmN0dHMoci5jdHRzKSksZS5ib3guYXBwbHkoZSxbZS50eXBlcy5zdGJsXS5jb25jYXQoYSkpfX0se2tleToic3R0cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsYT1uZXcgVWludDhBcnJheSg4KnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLHI9ZS5jb3VudDthLnNldChbcj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF0sbiksbis9OH0pKSxlLmJveChlLnR5cGVzLnN0dHMsWihuZXcgVWludDhBcnJheShbMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJzdHNjIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDEyKnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmZpcnN0Q2h1bmsscj1lLnNhbXBsZXNQZXJDaHVuayxpPWUuc2FtcGxlRGVzY0luZGV4O2Euc2V0KFt0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLGk+PjI0LGk+PjE2JjI1NSxpPj44JjI1NSwyNTUmaV0sbiksbis9MTJ9KSksZS5ib3goZS50eXBlcy5zdHNjLFoobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToic3RzeiIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsYT1uZXcgVWludDhBcnJheSg0KnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChbZT4+MjQsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXSxuKSxuKz00fSkpLGUuYm94KGUudHlwZXMuc3RzeixaKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToic3RjbyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsYT1uZXcgVWludDhBcnJheSg0KnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChbZT4+MjQsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXSxuKSxuKz00fSkpLGUuYm94KGUudHlwZXMuc3RjbyxaKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6InN0c3MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCpyKSxuPTA7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YS5zZXQoW2U+PjI0LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZV0sbiksbis9NH0pKSxlLmJveChlLnR5cGVzLnN0c3MsWihuZXcgVWludDhBcnJheShbMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJjdHRzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDgqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUscj1lLmNvdW50O2Euc2V0KFtyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0XSxuKSxuKz04fSkpLGUuYm94KGUudHlwZXMuY3R0cyxaKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6InN0eXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYm94KGUudHlwZXMuc3R5cCxuZXcgVWludDhBcnJheShbMTA5LDExNSwxMDAsMTA0LDAsMCwwLDAsMTA5LDExNSwxMDAsMTA0LDEwOSwxMTUsMTA1LDEyMF0pKX19LHtrZXk6InNpZHgiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQudGltZXNjYWxlLGE9dC5zYW1wbGVzWzBdLmR1cmF0aW9uLG49YSp0LnNhbXBsZXMubGVuZ3RoLGk9dC5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCphLHM9ODt0LnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cys9ZS5zaXplfSkpO3ZhciBvPTA7aWYodC5pc1ZpZGVvKXt2YXIgdSxjPTA7dC52aWRlb1NlbmMmJih1PXQudmlkZW9TZW5jKSx0LmlzVmlkZW8mJnUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Yys9OCxlLnN1YnNhbXBsZXMmJmUuc3Vic2FtcGxlcy5sZW5ndGgmJihjKz0yLGMrPTYqZS5zdWJzYW1wbGVzLmxlbmd0aCl9KSksdC52aWRlb1NlbmNMZW5ndGg9YyxvPXMrMTQxKzE2KnQuc2FtcGxlcy5sZW5ndGgrYyx0LnVzZUVNRSYmdC5pc0F1ZGlvRW5jcnlwdGlvbiYmIXQuaXNWaWRlb0VuY3J5cHRpb24mJihvPXMrMTYqdC5zYW1wbGVzLmxlbmd0aCs4NCl9ZWxzZSBvPXMrMTE2KzEyKnQuc2FtcGxlcy5sZW5ndGgsdC51c2VFTUUmJnQuaXNBdWRpb0VuY3J5cHRpb24mJihvPXMrMTY5KzEyKnQuc2FtcGxlcy5sZW5ndGgrOCp0LmF1ZGlvU2VuYy5sZW5ndGgpO3ZhciBsPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDI1NSZ0LmlkLHI+PjI0JjI1NSxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsaT4+MjQmMjU1LGk+PjE2JjI1NSxpPj44JjI1NSwyNTUmaSwwLDAsMCwwLDAsMCwwLDEsMCxvPj4xNiYyNTUsbz4+OCYyNTUsMjU1Jm8sbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbiwxNDQsMCwwLDBdKTtyZXR1cm4gZS5ib3goZS50eXBlcy5zaWR4LGwpfX0se2tleToibWRhdCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWRhdCx0KX19XSksZX0oKTtpKFNlLCJ0eXBlcyIsWyJhdmMxIiwiYXZjQyIsImh2YzEiLCJodmNDIiwiZGluZiIsImRyZWYiLCJlc2RzIiwiZnR5cCIsImhkbHIiLCJtZGF0IiwibWRoZCIsIm1kaWEiLCJtZmhkIiwibWluZiIsIm1vb2YiLCJtb292IiwibXA0YSIsIm12ZXgiLCJtdmhkIiwicGFzcCIsInN0YmwiLCJzdGNvIiwic3RzYyIsInN0c2QiLCJzdHN6Iiwic3R0cyIsInRmZHQiLCJ0ZmhkIiwidHJhZiIsInRyYWsiLCJ0cmV4IiwidGtoZCIsInZtaGQiLCJzbWhkIiwiY3R0cyIsInN0c3MiLCJzdHlwIiwicHNzaCIsInNpZHgiLCJzYmdwIiwic2FpeiIsInNhaW8iLCJzZW5jIiwidHJ1biIsImVuY3YiLCJlbmNhIiwic2luZiIsImJ0cnQiLCJmcm1hIiwidGVuYyIsInNjaG0iLCJzY2hpIiwibWVoZCIsImZpZWwiLCJzZHRwIl0ucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPVt0LmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDEpLHQuY2hhckNvZGVBdCgyKSx0LmNoYXJDb2RlQXQoMyldLGV9KSxPYmplY3QuY3JlYXRlKG51bGwpKSksaShTZSwiSERMUl9UWVBFUyIse3ZpZGVvOm5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMTE4LDEwNSwxMDAsMTAxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDg2LDEwNSwxMDAsMTAxLDExMSw3Miw5NywxMTAsMTAwLDEwOCwxMDEsMTE0LDBdKSxhdWRpbzpuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDExNSwxMTEsMTE3LDExMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MywxMTEsMTE3LDExMCwxMDAsNzIsOTcsMTEwLDEwMCwxMDgsMTAxLDExNCwwXSl9KSxpKFNlLCJGVFlQQVZDMSIsU2UuYm94KFNlLnR5cGVzLmZ0eXAsbmV3IFVpbnQ4QXJyYXkoWzEwNSwxMTUsMTExLDEwOSwwLDAsMCwxLDEwNSwxMTUsMTExLDEwOSw5NywxMTgsOTksNDldKSkpLGkoU2UsIkZUWVBIRVYxIixTZS5ib3goU2UudHlwZXMuZnR5cCxuZXcgVWludDhBcnJheShbMTA1LDExNSwxMTEsMTA5LDAsMCwwLDEsMTA1LDExNSwxMTEsMTA5LDEwNCwxMDEsMTE4LDQ5XSkpKSxpKFNlLCJESU5GIixTZS5ib3goU2UudHlwZXMuZGluZixTZS5ib3goU2UudHlwZXMuZHJlZixuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEyLDExNywxMTQsMTA4LDMyLDAsMCwwLDFdKSkpKSxpKFNlLCJWTUhEIixTZS5ib3goU2UudHlwZXMudm1oZCxuZXcgVWludDhBcnJheShbMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDBdKSkpLGkoU2UsIlNNSEQiLFNlLmJveChTZS50eXBlcy5zbWhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDBdKSkpLGkoU2UsIlN0YmxUYWJsZSIsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMF0pKSxpKFNlLCJTVFRTIixTZS5ib3goU2UudHlwZXMuc3R0cyxTZS5TdGJsVGFibGUpKSxpKFNlLCJTVFNDIixTZS5ib3goU2UudHlwZXMuc3RzYyxTZS5TdGJsVGFibGUpKSxpKFNlLCJTVFNaIixTZS5ib3goU2UudHlwZXMuc3RzeixuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpLGkoU2UsIlNUQ08iLFNlLmJveChTZS50eXBlcy5zdGNvLFNlLlN0YmxUYWJsZSkpO3ZhciBBZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhKXtyKHRoaXMsZSksdGhpcy5uYW1lPXR8fCIiLHRoaXMuX3ByZWZpeD0iWyIuY29uY2F0KHRoaXMubmFtZSwiXSIpLGUuZGlzYWJsZWQ9YX1yZXR1cm4gbihlLFt7a2V5OiJkZWJ1ZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkuZGVidWcuYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6ImxvZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkubG9nLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fSx7a2V5OiJ3YXJuIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2lmKCFlLmRpc2FibGVkKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyKSxuPTA7bjxyO24rKylhW25dPWFyZ3VtZW50c1tuXTsodD1jb25zb2xlKS53YXJuLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkuZXJyb3IuYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6InRhYmxlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2UuZGlzYWJsZWR8fChjb25zb2xlLmdyb3VwKHRoaXMuX3ByZWZpeCksKHQ9Y29uc29sZSkudGFibGUuYXBwbHkodCxhcmd1bWVudHMpLGNvbnNvbGUuZ3JvdXBFbmQoKSl9fV0sW3trZXk6ImVuYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSExfX0se2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSEwfX1dKSxlfSgpO2koQWUsImRpc2FibGVkIiwhMCk7Zm9yKHZhciBEZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSx0aGlzLnZpZGVvVHJhY2s9dCx0aGlzLmF1ZGlvVHJhY2s9YTt2YXIgaT0vQ2hyb21lXC8oW14uXSspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpO3RoaXMuZm9yY2VGaXJzdElEUj1pJiZOdW1iZXIoaVsxXSk8NTAsdGhpcy5sb2c9bmV3IEFlKCJGTVA0UmVtdXhlciIsIW58fCFuLm9wZW5Mb2d8fCFuLm9wZW5Mb2cpfXJldHVybiBuKGUsW3trZXk6InJlbXV4Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLG4saT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG89dGhpcy52aWRlb1RyYWNrLHU9dGhpcy5hdWRpb1RyYWNrLGM9by5leGlzdCgpLGw9dS5leGlzdCgpLGY9W107cmV0dXJuIGkmJihzJiZzLmluaXRNZXJnZT8oYyYmZi5wdXNoKHRoaXMudmlkZW9UcmFjayksbCYmZi5wdXNoKHRoaXMuYXVkaW9UcmFjaykscj1TZS5pbml0U2VnbWVudChmKSk6KGMmJihlPVNlLmluaXRTZWdtZW50KFt0aGlzLnZpZGVvVHJhY2tdKSksbCYmKHQ9U2UuaW5pdFNlZ21lbnQoW3RoaXMuYXVkaW9UcmFja10pKSkpLGMmJm8uaGFzU2FtcGxlKCkmJihhPXRoaXMuX3JlbXV4VmlkZW8oKSksbCYmdS5oYXNTYW1wbGUoKSYmKG49dGhpcy5fcmVtdXhBdWRpbygpKSxvLnNhbXBsZXM9W10sdS5zYW1wbGVzPVtdLHtpbml0U2VnbWVudDpyLHZpZGVvSW5pdFNlZ21lbnQ6ZSxhdWRpb0luaXRTZWdtZW50OnQsdmlkZW9TZWdtZW50OmEsYXVkaW9TZWdtZW50Om59fX0se2tleToiX3JlbXV4VmlkZW8iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWRlb1RyYWNrO3RoaXMuZm9yY2VGaXJzdElEUiYmKGUuc2FtcGxlc1swXS5mbGFnPXtkZXBlbmRzT246Mixpc05vblN5bmNTYW1wbGU6MH0pO3ZhciB0PWUuc2FtcGxlcyxyPTA7dC5mb3JFYWNoKChmdW5jdGlvbihlKXtyKz1lLnVuaXRzLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LmJ5dGVMZW5ndGh9KSwwKSxyKz00KmUudW5pdHMubGVuZ3RofSkpO2Zvcih2YXIgYSxuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IERhdGFWaWV3KG4uYnVmZmVyKSxzPWZ1bmN0aW9uKGUscil7cj10W29dO3ZhciBzPTA7ci51bml0cy5mb3JFYWNoKChmdW5jdGlvbih0KXtpLnNldFVpbnQzMihlLHQuYnl0ZUxlbmd0aCksZSs9NCxuLnNldCh0LGUpLGUrPXQuYnl0ZUxlbmd0aCxzKz00K3QuYnl0ZUxlbmd0aH0pKSxyLnNpemU9cyxjPWUsYT1yfSxvPTAsdT10Lmxlbmd0aCxjPTA7bzx1O28rKylzKGMsYSk7dmFyIGw9U2UubWRhdChuKTtyZXR1cm4gWihTZS5tb29mKFtlXSksbCl9fSx7a2V5OiJfcmVtdXhBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF1ZGlvVHJhY2ssdD1uZXcgVWludDhBcnJheShlLnNhbXBsZXMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3Quc2l6ZX0pLDApKTtlLnNhbXBsZXMucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiB0LnNldChyLmRhdGEsZSksZStyLnNpemV9KSwwKTt2YXIgcj1TZS5tZGF0KHQpO3JldHVybiBaKFNlLm1vb2YoW2VdKSxyKX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudmlkZW9UcmFjay5yZXNldCgpLHRoaXMuYXVkaW9UcmFjay5yZXNldCgpfX1dKSxlfSgpLEVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLFt7a2V5OiJtaXhJbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcyxlKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPW5ldyB0aGlzLmNvbnN0cnVjdG9yO3JldHVybiBPYmplY3QuYXNzaWduKGUsdGhpcyksZX19XSxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiBsKHRoaXMsdCl9fV0pLGV9KCksQmU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3ZhciBlLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQqbi5sZW5ndGg7cih0aGlzLGEpLGU9dC5jYWxsKHRoaXMpO3ZhciBzPW47aWYocyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYocz1uZXcgVWludDhBcnJheShzKSksKHMgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHMgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8cyBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHMgaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8cyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fHMgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8cyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8cyBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkmJihzPW5ldyBVaW50OEFycmF5KHMuYnVmZmVyLHMuYnl0ZU9mZnNldCxzLmJ5dGVMZW5ndGgpKSxzIGluc3RhbmNlb2YgVWludDhBcnJheSl7Zm9yKHZhciBvPXMuYnl0ZUxlbmd0aCx1PVtdLGM9MDtjPG87Yys9MSl1W2M+Pj4yXXw9c1tjXTw8MjQtYyU0Kjg7ZS53b3Jkcz11LGUuc2lnQnl0ZXM9b31lbHNlIGUud29yZHM9bixlLnNpZ0J5dGVzPWk7cmV0dXJuIGV9cmV0dXJuIG4oYSxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlRlO3JldHVybiBlLnN0cmluZ2lmeSh0aGlzKX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy53b3JkcyxyPWUud29yZHMsYT10aGlzLnNpZ0J5dGVzLG49ZS5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksYSU0KWZvcih2YXIgaT0wO2k8bjtpKz0xKXt2YXIgcz1yW2k+Pj4yXT4+PjI0LWklNCo4JjI1NTt0W2EraT4+PjJdfD1zPDwyNC0oYStpKSU0Kjh9ZWxzZSBmb3IodmFyIG89MDtvPG47bys9NCl0W2Erbz4+PjJdPXJbbz4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1uLHRoaXN9fSx7a2V5OiJjbGFtcCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndvcmRzLHQ9dGhpcy5zaWdCeXRlcztlW3Q+Pj4yXSY9NDI5NDk2NzI5NTw8MzItdCU0KjgsZS5sZW5ndGg9TWF0aC5jZWlsKHQvNCl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1wKG8oYS5wcm90b3R5cGUpLCJjbG9uZSIsdGhpcykuY2FsbCh0aGlzKTtyZXR1cm4gZS53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLGV9fV0sW3trZXk6InJhbmRvbSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9W10sbj1mdW5jdGlvbihlKXt2YXIgdD1lLHI9OTg3NjU0MzIxLGE9NDI5NDk2NzI5NTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0oKHI9MzY5NjkqKDY1NTM1JnIpKyhyPj4xNikmYSk8PDE2KSsodD0xOGUzKig2NTUzNSZ0KSsodD4+MTYpJmEpJmE7cmV0dXJuIGUvPTQyOTQ5NjcyOTYsKGUrPS41KSooTWF0aC5yYW5kb20oKT4uNT8xOi0xKX19LGk9MDtpPGU7aSs9NCl7dmFyIHM9big0Mjk0OTY3Mjk2Kih0fHxNYXRoLnJhbmRvbSgpKSk7dD05ODc2NTQwNzEqcygpLHIucHVzaCg0Mjk0OTY3Mjk2KnMoKXwwKX1yZXR1cm4gbmV3IGEocixlKX19XSksYX0oRWUpLFRlPXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUud29yZHMscj1lLnNpZ0J5dGVzLGE9W10sbj0wO248cjtuKz0xKXt2YXIgaT10W24+Pj4yXT4+PjI0LW4lNCo4JjI1NTthLnB1c2goKGk+Pj40KS50b1N0cmluZygxNikpLGEucHVzaCgoMTUmaSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gYS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9W10sYT0wO2E8dDthKz0yKXJbYT4+PjNdfD1wYXJzZUludChlLnN1YnN0cihhLDIpLDE2KTw8MjQtYSU4KjQ7cmV0dXJuIG5ldyBCZShyLHQvMil9fSxDZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bXSxhPTA7YTx0O2ErPTEpclthPj4+Ml18PSgyNTUmZS5jaGFyQ29kZUF0KGEpKTw8MjQtYSU0Kjg7cmV0dXJuIG5ldyBCZShyLHQpfSxVZT1mdW5jdGlvbihlKXtyZXR1cm4gQ2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKSl9LFBlPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXt2YXIgZTtyZXR1cm4gcih0aGlzLGEpLChlPXQuY2FsbCh0aGlzKSkuX21pbkJ1ZmZlclNpemU9MCxlfXJldHVybiBuKGEsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RhdGE9bmV3IEJlLHRoaXMuX25EYXRhQnl0ZXM9MH19LHtrZXk6Il9hcHBlbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU7InN0cmluZyI9PXR5cGVvZiB0JiYodD1VZSh0KSksdGhpcy5fZGF0YS5jb25jYXQodCksdGhpcy5fbkRhdGFCeXRlcys9dC5zaWdCeXRlc319LHtrZXk6Il9wcm9jZXNzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX2RhdGEsYT10aGlzLmJsb2NrU2l6ZSxuPXIud29yZHMsaT1yLnNpZ0J5dGVzLHM9aS8oNCphKSxvPShzPWU/TWF0aC5jZWlsKHMpOk1hdGgubWF4KCgwfHMpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKmEsdT1NYXRoLm1pbig0Km8saSk7aWYobyl7Zm9yKHZhciBjPTA7YzxvO2MrPWEpdGhpcy5fZG9Qcm9jZXNzQmxvY2sobixjKTt0PW4uc3BsaWNlKDAsbyksci5zaWdCeXRlcy09dX1yZXR1cm4gbmV3IEJlKHQsdSl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1wKG8oYS5wcm90b3R5cGUpLCJjbG9uZSIsdGhpcykuY2FsbCh0aGlzKTtyZXR1cm4gZS5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCksZX19XSksYX0oRWUpLEllPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSl7dmFyIG47cmV0dXJuIHIodGhpcyxhKSwobj10LmNhbGwodGhpcykpLmJsb2NrU2l6ZT0xNixuLmNmZz1PYmplY3QuYXNzaWduKG5ldyBFZSxlKSxuLnJlc2V0KCksbn1yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXtwKG8oYS5wcm90b3R5cGUpLCJyZXNldCIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hcHBlbmQoZSksdGhpcy5fcHJvY2VzcygpLHRoaXN9fSx7a2V5OiJmaW5hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnRoaXMuX2FwcGVuZChlKSx0aGlzLl9kb0ZpbmFsaXplKCl9fV0sW3trZXk6Il9jcmVhdGVIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShyKS5maW5hbGl6ZSh0KX19fSx7a2V5OiJfY3JlYXRlSG1hY0hlbHBlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyB6ZShlLHIpLmZpbmFsaXplKHQpfX19XSksYX0oUGUpLHplPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSxuKXt2YXIgaTtyKHRoaXMsYSksaT10LmNhbGwodGhpcyk7dmFyIHM9bmV3IGU7aS5faGFzaGVyPXM7dmFyIG89bjsic3RyaW5nIj09dHlwZW9mIG8mJihvPVVlKG8pKTt2YXIgdT1zLmJsb2NrU2l6ZSxjPTQqdTtvLnNpZ0J5dGVzPmMmJihvPXMuZmluYWxpemUobikpLG8uY2xhbXAoKTt2YXIgbD1vLmNsb25lKCk7aS5fb0tleT1sO3ZhciBmPW8uY2xvbmUoKTtpLl9pS2V5PWY7Zm9yKHZhciBkPWwud29yZHMsaD1mLndvcmRzLHA9MDtwPHU7cCs9MSlkW3BdXj0xNTQ5NTU2ODI4LGhbcF1ePTkwOTUyMjQ4NjtyZXR1cm4gbC5zaWdCeXRlcz1jLGYuc2lnQnl0ZXM9YyxpLnJlc2V0KCksaX1yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9oYXNoZXI7ZS5yZXNldCgpLGUudXBkYXRlKHRoaXMuX2lLZXkpfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faGFzaGVyLnVwZGF0ZShlKSx0aGlzfX0se2tleToiZmluYWxpemUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2hhc2hlcixyPXQuZmluYWxpemUoZSk7cmV0dXJuIHQucmVzZXQoKSx0LmZpbmFsaXplKHRoaXMuX29LZXkuY2xvbmUoKS5jb25jYXQocikpfX1dKSxhfShFZSksTWU9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXt2YXIgdD1lLndvcmRzLHI9ZS5zaWdCeXRlcyxhPXRoaXMuX21hcDtlLmNsYW1wKCk7Zm9yKHZhciBuPVtdLGk9MDtpPHI7aSs9Mylmb3IodmFyIHM9KHRbaT4+PjJdPj4+MjQtaSU0KjgmMjU1KTw8MTZ8KHRbaSsxPj4+Ml0+Pj4yNC0oaSsxKSU0KjgmMjU1KTw8OHx0W2krMj4+PjJdPj4+MjQtKGkrMiklNCo4JjI1NSxvPTA7bzw0JiZpKy43NSpvPHI7bys9MSluLnB1c2goYS5jaGFyQXQocz4+PjYqKDMtbykmNjMpKTt2YXIgdT1hLmNoYXJBdCg2NCk7aWYodSlmb3IoO24ubGVuZ3RoJTQ7KW4ucHVzaCh1KTtyZXR1cm4gbi5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10aGlzLl9tYXAsYT10aGlzLl9yZXZlcnNlTWFwO2lmKCFhKXt0aGlzLl9yZXZlcnNlTWFwPVtdLGE9dGhpcy5fcmV2ZXJzZU1hcDtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rPTEpYVtyLmNoYXJDb2RlQXQobildPW59dmFyIGk9ci5jaGFyQXQoNjQpO2lmKGkpe3ZhciBzPWUuaW5kZXhPZihpKTstMSE9PXMmJih0PXMpfXJldHVybiBmdW5jdGlvbihlLHQscil7Zm9yKHZhciBhPVtdLG49MCxpPTA7aTx0O2krPTEpaWYoaSU0KXt2YXIgcz1yW2UuY2hhckNvZGVBdChpLTEpXTw8aSU0KjJ8cltlLmNoYXJDb2RlQXQoaSldPj4+Ni1pJTQqMjthW24+Pj4yXXw9czw8MjQtbiU0Kjgsbis9MX1yZXR1cm4gQmUuY3JlYXRlKGEsbil9KGUsdCxhKX0sX21hcDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0ifSxSZT1bXSxPZT0wO09lPDY0O09lKz0xKVJlW09lXT00Mjk0OTY3Mjk2Kk1hdGguYWJzKE1hdGguc2luKE9lKzEpKXwwO3ZhciBMZT1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyh0JnJ8fnQmYSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxWZT1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyh0JmF8ciZ+YSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxGZT1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyh0XnJeYSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxOZT1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyhyXih0fH5hKSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxqZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLFt7a2V5OiJfZG9SZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBCZShbMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4XSl9fSx7a2V5OiJfZG9Qcm9jZXNzQmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUsYT0wO2E8MTY7YSs9MSl7dmFyIG49dCthLGk9ZVtuXTtyW25dPTE2NzExOTM1JihpPDw4fGk+Pj4yNCl8NDI3ODI1NTM2MCYoaTw8MjR8aT4+PjgpfXZhciBzPXRoaXMuX2hhc2gud29yZHMsbz1yW3QrMF0sdT1yW3QrMV0sYz1yW3QrMl0sbD1yW3QrM10sZj1yW3QrNF0sZD1yW3QrNV0saD1yW3QrNl0scD1yW3QrN10sdj1yW3QrOF0seT1yW3QrOV0sbT1yW3QrMTBdLGc9clt0KzExXSxrPXJbdCsxMl0sYj1yW3QrMTNdLF89clt0KzE0XSx3PXJbdCsxNV0seD1zWzBdLFM9c1sxXSxBPXNbMl0sRD1zWzNdO3g9TGUoeCxTLEEsRCxvLDcsUmVbMF0pLEQ9TGUoRCx4LFMsQSx1LDEyLFJlWzFdKSxBPUxlKEEsRCx4LFMsYywxNyxSZVsyXSksUz1MZShTLEEsRCx4LGwsMjIsUmVbM10pLHg9TGUoeCxTLEEsRCxmLDcsUmVbNF0pLEQ9TGUoRCx4LFMsQSxkLDEyLFJlWzVdKSxBPUxlKEEsRCx4LFMsaCwxNyxSZVs2XSksUz1MZShTLEEsRCx4LHAsMjIsUmVbN10pLHg9TGUoeCxTLEEsRCx2LDcsUmVbOF0pLEQ9TGUoRCx4LFMsQSx5LDEyLFJlWzldKSxBPUxlKEEsRCx4LFMsbSwxNyxSZVsxMF0pLFM9TGUoUyxBLEQseCxnLDIyLFJlWzExXSkseD1MZSh4LFMsQSxELGssNyxSZVsxMl0pLEQ9TGUoRCx4LFMsQSxiLDEyLFJlWzEzXSksQT1MZShBLEQseCxTLF8sMTcsUmVbMTRdKSxTPUxlKFMsQSxELHgsdywyMixSZVsxNV0pLHg9VmUoeCxTLEEsRCx1LDUsUmVbMTZdKSxEPVZlKEQseCxTLEEsaCw5LFJlWzE3XSksQT1WZShBLEQseCxTLGcsMTQsUmVbMThdKSxTPVZlKFMsQSxELHgsbywyMCxSZVsxOV0pLHg9VmUoeCxTLEEsRCxkLDUsUmVbMjBdKSxEPVZlKEQseCxTLEEsbSw5LFJlWzIxXSksQT1WZShBLEQseCxTLHcsMTQsUmVbMjJdKSxTPVZlKFMsQSxELHgsZiwyMCxSZVsyM10pLHg9VmUoeCxTLEEsRCx5LDUsUmVbMjRdKSxEPVZlKEQseCxTLEEsXyw5LFJlWzI1XSksQT1WZShBLEQseCxTLGwsMTQsUmVbMjZdKSxTPVZlKFMsQSxELHgsdiwyMCxSZVsyN10pLHg9VmUoeCxTLEEsRCxiLDUsUmVbMjhdKSxEPVZlKEQseCxTLEEsYyw5LFJlWzI5XSksQT1WZShBLEQseCxTLHAsMTQsUmVbMzBdKSxTPVZlKFMsQSxELHgsaywyMCxSZVszMV0pLHg9RmUoeCxTLEEsRCxkLDQsUmVbMzJdKSxEPUZlKEQseCxTLEEsdiwxMSxSZVszM10pLEE9RmUoQSxELHgsUyxnLDE2LFJlWzM0XSksUz1GZShTLEEsRCx4LF8sMjMsUmVbMzVdKSx4PUZlKHgsUyxBLEQsdSw0LFJlWzM2XSksRD1GZShELHgsUyxBLGYsMTEsUmVbMzddKSxBPUZlKEEsRCx4LFMscCwxNixSZVszOF0pLFM9RmUoUyxBLEQseCxtLDIzLFJlWzM5XSkseD1GZSh4LFMsQSxELGIsNCxSZVs0MF0pLEQ9RmUoRCx4LFMsQSxvLDExLFJlWzQxXSksQT1GZShBLEQseCxTLGwsMTYsUmVbNDJdKSxTPUZlKFMsQSxELHgsaCwyMyxSZVs0M10pLHg9RmUoeCxTLEEsRCx5LDQsUmVbNDRdKSxEPUZlKEQseCxTLEEsaywxMSxSZVs0NV0pLEE9RmUoQSxELHgsUyx3LDE2LFJlWzQ2XSksUz1GZShTLEEsRCx4LGMsMjMsUmVbNDddKSx4PU5lKHgsUyxBLEQsbyw2LFJlWzQ4XSksRD1OZShELHgsUyxBLHAsMTAsUmVbNDldKSxBPU5lKEEsRCx4LFMsXywxNSxSZVs1MF0pLFM9TmUoUyxBLEQseCxkLDIxLFJlWzUxXSkseD1OZSh4LFMsQSxELGssNixSZVs1Ml0pLEQ9TmUoRCx4LFMsQSxsLDEwLFJlWzUzXSksQT1OZShBLEQseCxTLG0sMTUsUmVbNTRdKSxTPU5lKFMsQSxELHgsdSwyMSxSZVs1NV0pLHg9TmUoeCxTLEEsRCx2LDYsUmVbNTZdKSxEPU5lKEQseCxTLEEsdywxMCxSZVs1N10pLEE9TmUoQSxELHgsUyxoLDE1LFJlWzU4XSksUz1OZShTLEEsRCx4LGIsMjEsUmVbNTldKSx4PU5lKHgsUyxBLEQsZiw2LFJlWzYwXSksRD1OZShELHgsUyxBLGcsMTAsUmVbNjFdKSxBPU5lKEEsRCx4LFMsYywxNSxSZVs2Ml0pLFM9TmUoUyxBLEQseCx5LDIxLFJlWzYzXSksc1swXT1zWzBdK3h8MCxzWzFdPXNbMV0rU3wwLHNbMl09c1syXStBfDAsc1szXT1zWzNdK0R8MH19LHtrZXk6Il9kb0ZpbmFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2RhdGEsdD1lLndvcmRzLHI9OCp0aGlzLl9uRGF0YUJ5dGVzLGE9OCplLnNpZ0J5dGVzO3RbYT4+PjVdfD0xMjg8PDI0LWElMzI7dmFyIG49TWF0aC5mbG9vcihyLzQyOTQ5NjcyOTYpLGk9cjt0WzE1KyhhKzY0Pj4+OTw8NCldPTE2NzExOTM1JihuPDw4fG4+Pj4yNCl8NDI3ODI1NTM2MCYobjw8MjR8bj4+PjgpLHRbMTQrKGErNjQ+Pj45PDw0KV09MTY3MTE5MzUmKGk8PDh8aT4+PjI0KXw0Mjc4MjU1MzYwJihpPDwyNHxpPj4+OCksZS5zaWdCeXRlcz00Kih0Lmxlbmd0aCsxKSx0aGlzLl9wcm9jZXNzKCk7Zm9yKHZhciBzPXRoaXMuX2hhc2gsbz1zLndvcmRzLHU9MDt1PDQ7dSs9MSl7dmFyIGM9b1t1XTtvW3VdPTE2NzExOTM1JihjPDw4fGM+Pj4yNCl8NDI3ODI1NTM2MCYoYzw8MjR8Yz4+PjgpfXJldHVybiBzfX0se2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cChvKGEucHJvdG90eXBlKSwiY2xvbmUiLHRoaXMpLmNhbGwodGhpcyk7cmV0dXJuIGUuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpLGV9fV0pLGF9KEllKTtJZS5fY3JlYXRlSGVscGVyKGplKSxJZS5fY3JlYXRlSG1hY0hlbHBlcihqZSk7dmFyIEdlPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSl7dmFyIG47cmV0dXJuIHIodGhpcyxhKSwobj10LmNhbGwodGhpcykpLmNmZz1PYmplY3QuYXNzaWduKG5ldyBFZSx7a2V5U2l6ZTo0LGhhc2hlcjpqZSxpdGVyYXRpb25zOjF9LGUpLG59cmV0dXJuIG4oYSxbe2tleToiY29tcHV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsYT10aGlzLmNmZyxuPWEuaGFzaGVyLmNyZWF0ZSgpLGk9QmUuY3JlYXRlKCkscz1pLndvcmRzLG89YS5rZXlTaXplLHU9YS5pdGVyYXRpb25zO3MubGVuZ3RoPG87KXtyJiZuLnVwZGF0ZShyKSxyPW4udXBkYXRlKGUpLmZpbmFsaXplKHQpLG4ucmVzZXQoKTtmb3IodmFyIGM9MTtjPHU7Yys9MSlyPW4uZmluYWxpemUociksbi5yZXNldCgpO2kuY29uY2F0KHIpfXJldHVybiBpLnNpZ0J5dGVzPTQqbyxpfX1dKSxhfShFZSksSGU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYShlLG4saSl7dmFyIHM7cmV0dXJuIHIodGhpcyxhKSwocz10LmNhbGwodGhpcykpLmNmZz1PYmplY3QuYXNzaWduKG5ldyBFZSxpKSxzLl94Zm9ybU1vZGU9ZSxzLl9rZXk9bixzLnJlc2V0KCksc31yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXtwKG8oYS5wcm90b3R5cGUpLCJyZXNldCIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9fSx7a2V5OiJwcm9jZXNzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYXBwZW5kKGUpLHRoaXMuX3Byb2Nlc3MoKX19LHtrZXk6ImZpbmFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy5fYXBwZW5kKGUpLHRoaXMuX2RvRmluYWxpemUoKX19XSxbe2tleToiY3JlYXRlRW5jcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNyZWF0ZSh0aGlzLl9FTkNfWEZPUk1fTU9ERSxlLHQpfX0se2tleToiY3JlYXRlRGVjcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNyZWF0ZSh0aGlzLl9ERUNfWEZPUk1fTU9ERSxlLHQpfX0se2tleToiX2NyZWF0ZUhlbHBlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2V0OkplfTtyZXR1cm57ZW5jcnlwdDpmdW5jdGlvbihyLGEsbil7cmV0dXJuIHQoYSkuZW5jcnlwdChlLHIsYSxuKX0sZGVjcnlwdDpmdW5jdGlvbihyLGEsbil7cmV0dXJuIHQoYSkuZGVjcnlwdChlLHIsYSxuKX19fX1dKSxhfShQZSk7SGUuX0VOQ19YRk9STV9NT0RFPTEsSGUuX0RFQ19YRk9STV9NT0RFPTIsSGUua2V5U2l6ZT00LEhlLml2U2l6ZT00O3ZhciBLZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKGUsbil7dmFyIGk7cmV0dXJuIHIodGhpcyxhKSwoaT10LmNhbGwodGhpcykpLl9jaXBoZXI9ZSxpLl9pdj1uLGl9cmV0dXJuIG4oYSxudWxsLFt7a2V5OiJjcmVhdGVFbmNyeXB0b3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuRW5jcnlwdG9yLmNyZWF0ZShlLHQpfX0se2tleToiY3JlYXRlRGVjcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLkRlY3J5cHRvci5jcmVhdGUoZSx0KX19XSksYX0oRWUpO2Z1bmN0aW9uIHFlKGUsdCxyKXt2YXIgYSxuPWUsaT10aGlzLl9pdjtpPyhhPWksdGhpcy5faXY9dm9pZCAwKTphPXRoaXMuX3ByZXZCbG9jaztmb3IodmFyIHM9MDtzPHI7cys9MSluW3Qrc11ePWFbc119dmFyIFdlPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEpfShLZSk7V2UuRW5jcnlwdG9yPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsW3trZXk6InByb2Nlc3NCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9jaXBoZXIsYT1yLmJsb2NrU2l6ZTtxZS5jYWxsKHRoaXMsZSx0LGEpLHIuZW5jcnlwdEJsb2NrKGUsdCksdGhpcy5fcHJldkJsb2NrPWUuc2xpY2UodCx0K2EpfX1dKSxhfShXZSksV2UuRGVjcnlwdG9yPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsW3trZXk6InByb2Nlc3NCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9jaXBoZXIsYT1yLmJsb2NrU2l6ZSxuPWUuc2xpY2UodCx0K2EpO3IuZGVjcnlwdEJsb2NrKGUsdCkscWUuY2FsbCh0aGlzLGUsdCxhKSx0aGlzLl9wcmV2QmxvY2s9bn19XSksYX0oV2UpO3ZhciBYZT17cGFkOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTQqdCxhPXItZS5zaWdCeXRlcyVyLG49YTw8MjR8YTw8MTZ8YTw8OHxhLGk9W10scz0wO3M8YTtzKz00KWkucHVzaChuKTt2YXIgbz1CZS5jcmVhdGUoaSxhKTtlLmNvbmNhdChvKX0sdW5wYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPTI1NSZ0LndvcmRzW3Quc2lnQnl0ZXMtMT4+PjJdO3Quc2lnQnl0ZXMtPXJ9fSxZZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKGUsbixpKXt2YXIgcztyZXR1cm4gcih0aGlzLGEpLChzPXQuY2FsbCh0aGlzLGUsbixPYmplY3QuYXNzaWduKHttb2RlOldlLHBhZGRpbmc6WGV9LGkpKSkuYmxvY2tTaXplPTQsc31yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtwKG8oYS5wcm90b3R5cGUpLCJyZXNldCIsdGhpcykuY2FsbCh0aGlzKTt2YXIgdD10aGlzLmNmZyxyPXQuaXYsbj10Lm1vZGU7dGhpcy5feGZvcm1Nb2RlPT09dGhpcy5jb25zdHJ1Y3Rvci5fRU5DX1hGT1JNX01PREU/ZT1uLmNyZWF0ZUVuY3J5cHRvcjooZT1uLmNyZWF0ZURlY3J5cHRvcix0aGlzLl9taW5CdWZmZXJTaXplPTEpLHRoaXMuX21vZGU9ZS5jYWxsKG4sdGhpcyxyJiZyLndvcmRzKSx0aGlzLl9tb2RlLl9fY3JlYXRvcj1lfX0se2tleToiX2RvUHJvY2Vzc0Jsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX21vZGUucHJvY2Vzc0Jsb2NrKGUsdCl9fSx7a2V5OiJfZG9GaW5hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY2ZnLnBhZGRpbmc7cmV0dXJuIHRoaXMuX3hmb3JtTW9kZT09PXRoaXMuY29uc3RydWN0b3IuX0VOQ19YRk9STV9NT0RFPyh0LnBhZCh0aGlzLl9kYXRhLHRoaXMuYmxvY2tTaXplKSxlPXRoaXMuX3Byb2Nlc3MoITApKTooZT10aGlzLl9wcm9jZXNzKCEwKSx0LnVucGFkKGUpKSxlfX1dKSxhfShIZSksWmU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYShlKXt2YXIgbjtyZXR1cm4gcih0aGlzLGEpLChuPXQuY2FsbCh0aGlzKSkubWl4SW4oZSksbn1yZXR1cm4gbihhLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fHRoaXMuZm9ybWF0dGVyKS5zdHJpbmdpZnkodGhpcyl9fV0pLGF9KEVlKSxRZT17c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2lwaGVydGV4dCxyPWUuc2FsdDtyZXR1cm4ocj9CZS5jcmVhdGUoWzEzOTg4OTM2ODQsMTcwMTA3NjgzMV0pLmNvbmNhdChyKS5jb25jYXQodCk6dCkudG9TdHJpbmcoTWUpfSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdCxyPU1lLnBhcnNlKGUpLGE9ci53b3JkcztyZXR1cm4gMTM5ODg5MzY4ND09PWFbMF0mJjE3MDEwNzY4MzE9PT1hWzFdJiYodD1CZS5jcmVhdGUoYS5zbGljZSgyLDQpKSxhLnNwbGljZSgwLDQpLHIuc2lnQnl0ZXMtPTE2KSxaZS5jcmVhdGUoe2NpcGhlcnRleHQ6cixzYWx0OnR9KX19LEplPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsbnVsbCxbe2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49T2JqZWN0LmFzc2lnbihuZXcgRWUsdGhpcy5jZmcsYSksaT1lLmNyZWF0ZUVuY3J5cHRvcihyLG4pLHM9aS5maW5hbGl6ZSh0KSxvPWkuY2ZnO3JldHVybiBaZS5jcmVhdGUoe2NpcGhlcnRleHQ6cyxrZXk6cixpdjpvLml2LGFsZ29yaXRobTplLG1vZGU6by5tb2RlLHBhZGRpbmc6by5wYWRkaW5nLGJsb2NrU2l6ZTppLmJsb2NrU2l6ZSxmb3JtYXR0ZXI6bi5mb3JtYXR9KX19LHtrZXk6ImRlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBuPXQsaT1PYmplY3QuYXNzaWduKG5ldyBFZSx0aGlzLmNmZyxhKTtyZXR1cm4gbj10aGlzLl9wYXJzZShuLGkuZm9ybWF0KSxlLmNyZWF0ZURlY3J5cHRvcihyLGkpLmZpbmFsaXplKG4uY2lwaGVydGV4dCl9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3QucGFyc2UoZSx0aGlzKTplfX1dKSxhfShFZSk7SmUuY2ZnPU9iamVjdC5hc3NpZ24obmV3IEVlLHtmb3JtYXQ6UWV9KTt2YXIgJGU9e2V4ZWN1dGU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49YTtufHwobj1CZS5yYW5kb20oOCkpO3ZhciBpPUdlLmNyZWF0ZSh7a2V5U2l6ZTp0K3J9KS5jb21wdXRlKGUsbikscz1CZS5jcmVhdGUoaS53b3Jkcy5zbGljZSh0KSw0KnIpO3JldHVybiBpLnNpZ0J5dGVzPTQqdCxaZS5jcmVhdGUoe2tleTppLGl2OnMsc2FsdDpufSl9fSxldD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLG51bGwsW3trZXk6ImVuY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBuPU9iamVjdC5hc3NpZ24obmV3IEVlLHRoaXMuY2ZnLGEpLGk9bi5rZGYuZXhlY3V0ZShyLGUua2V5U2l6ZSxlLml2U2l6ZSk7bi5pdj1pLml2O3ZhciBzPUplLmVuY3J5cHQuY2FsbCh0aGlzLGUsdCxpLmtleSxuKTtyZXR1cm4gcy5taXhJbihpKSxzfX0se2tleToiZGVjcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49dCxpPU9iamVjdC5hc3NpZ24obmV3IEVlLHRoaXMuY2ZnLGEpO249dGhpcy5fcGFyc2UobixpLmZvcm1hdCk7dmFyIHM9aS5rZGYuZXhlY3V0ZShyLGUua2V5U2l6ZSxlLml2U2l6ZSxuLnNhbHQpO3JldHVybiBpLml2PXMuaXYsSmUuZGVjcnlwdC5jYWxsKHRoaXMsZSxuLHMua2V5LGkpfX1dKSxhfShKZSk7ZXQuY2ZnPU9iamVjdC5hc3NpZ24oSmUuY2ZnLHtrZGY6JGV9KTtmb3IodmFyIHR0PVtdLHJ0PVtdLGF0PVtdLG50PVtdLGl0PVtdLHN0PVtdLG90PVtdLHV0PVtdLGN0PVtdLGx0PVtdLGZ0PVtdLGR0PTA7ZHQ8MjU2O2R0Kz0xKWZ0W2R0XT1kdDwxMjg/ZHQ8PDE6ZHQ8PDFeMjgzO2Zvcih2YXIgaHQ9MCxwdD0wLHZ0PTA7dnQ8MjU2O3Z0Kz0xKXt2YXIgeXQ9cHRecHQ8PDFecHQ8PDJecHQ8PDNecHQ8PDQ7eXQ9eXQ+Pj44XjI1NSZ5dF45OSx0dFtodF09eXQscnRbeXRdPWh0O3ZhciBtdD1mdFtodF0sZ3Q9ZnRbbXRdLGt0PWZ0W2d0XSxidD0yNTcqZnRbeXRdXjE2ODQzMDA4Knl0O2F0W2h0XT1idDw8MjR8YnQ+Pj44LG50W2h0XT1idDw8MTZ8YnQ+Pj4xNixpdFtodF09YnQ8PDh8YnQ+Pj4yNCxzdFtodF09YnQsYnQ9MTY4NDMwMDkqa3ReNjU1MzcqZ3ReMjU3Km10XjE2ODQzMDA4Kmh0LG90W3l0XT1idDw8MjR8YnQ+Pj44LHV0W3l0XT1idDw8MTZ8YnQ+Pj4xNixjdFt5dF09YnQ8PDh8YnQ+Pj4yNCxsdFt5dF09YnQsaHQ/KGh0PW10XmZ0W2Z0W2Z0W2t0Xm10XV1dLHB0Xj1mdFtmdFtwdF1dKTpodD1wdD0xfXZhciBfdD1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sd3Q9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxbe2tleToiX2RvUmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7aWYoIXRoaXMuX25Sb3VuZHN8fHRoaXMuX2tleVByaW9yUmVzZXQhPT10aGlzLl9rZXkpe3RoaXMuX2tleVByaW9yUmVzZXQ9dGhpcy5fa2V5O3ZhciB0PXRoaXMuX2tleVByaW9yUmVzZXQscj10LndvcmRzLGE9dC5zaWdCeXRlcy80O3RoaXMuX25Sb3VuZHM9YSs2O3ZhciBuPTQqKHRoaXMuX25Sb3VuZHMrMSk7dGhpcy5fa2V5U2NoZWR1bGU9W107Zm9yKHZhciBpPXRoaXMuX2tleVNjaGVkdWxlLHM9MDtzPG47cys9MSlzPGE/aVtzXT1yW3NdOihlPWlbcy0xXSxzJWE/YT42JiZzJWE9PTQmJihlPXR0W2U+Pj4yNF08PDI0fHR0W2U+Pj4xNiYyNTVdPDwxNnx0dFtlPj4+OCYyNTVdPDw4fHR0WzI1NSZlXSk6KGU9dHRbKGU9ZTw8OHxlPj4+MjQpPj4+MjRdPDwyNHx0dFtlPj4+MTYmMjU1XTw8MTZ8dHRbZT4+PjgmMjU1XTw8OHx0dFsyNTUmZV0sZV49X3Rbcy9hfDBdPDwyNCksaVtzXT1pW3MtYV1eZSk7dGhpcy5faW52S2V5U2NoZWR1bGU9W107Zm9yKHZhciBvPXRoaXMuX2ludktleVNjaGVkdWxlLHU9MDt1PG47dSs9MSl7dmFyIGM9bi11O2U9dSU0P2lbY106aVtjLTRdLG9bdV09dTw0fHxjPD00P2U6b3RbdHRbZT4+PjI0XV1edXRbdHRbZT4+PjE2JjI1NV1dXmN0W3R0W2U+Pj44JjI1NV1dXmx0W3R0WzI1NSZlXV19fX19LHtrZXk6ImVuY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9kb0NyeXB0QmxvY2soZSx0LHRoaXMuX2tleVNjaGVkdWxlLGF0LG50LGl0LHN0LHR0KX19LHtrZXk6ImRlY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLGE9clt0KzFdO3JbdCsxXT1yW3QrM10sclt0KzNdPWEsdGhpcy5fZG9DcnlwdEJsb2NrKHIsdCx0aGlzLl9pbnZLZXlTY2hlZHVsZSxvdCx1dCxjdCxsdCxydCksYT1yW3QrMV0sclt0KzFdPXJbdCszXSxyW3QrM109YX19LHtrZXk6Il9kb0NyeXB0QmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEsbixpLHMsbyl7Zm9yKHZhciB1PWUsYz10aGlzLl9uUm91bmRzLGw9dVt0XV5yWzBdLGY9dVt0KzFdXnJbMV0sZD11W3QrMl1eclsyXSxoPXVbdCszXV5yWzNdLHA9NCx2PTE7djxjO3YrPTEpe3ZhciB5PWFbbD4+PjI0XV5uW2Y+Pj4xNiYyNTVdXmlbZD4+PjgmMjU1XV5zWzI1NSZoXV5yW3BdO3ArPTE7dmFyIG09YVtmPj4+MjRdXm5bZD4+PjE2JjI1NV1eaVtoPj4+OCYyNTVdXnNbMjU1JmxdXnJbcF07cCs9MTt2YXIgZz1hW2Q+Pj4yNF1ebltoPj4+MTYmMjU1XV5pW2w+Pj44JjI1NV1ec1syNTUmZl1ecltwXTtwKz0xO3ZhciBrPWFbaD4+PjI0XV5uW2w+Pj4xNiYyNTVdXmlbZj4+PjgmMjU1XV5zWzI1NSZkXV5yW3BdO3ArPTEsbD15LGY9bSxkPWcsaD1rfXZhciBiPShvW2w+Pj4yNF08PDI0fG9bZj4+PjE2JjI1NV08PDE2fG9bZD4+PjgmMjU1XTw8OHxvWzI1NSZoXSlecltwXTtwKz0xO3ZhciBfPShvW2Y+Pj4yNF08PDI0fG9bZD4+PjE2JjI1NV08PDE2fG9baD4+PjgmMjU1XTw8OHxvWzI1NSZsXSlecltwXTtwKz0xO3ZhciB3PShvW2Q+Pj4yNF08PDI0fG9baD4+PjE2JjI1NV08PDE2fG9bbD4+PjgmMjU1XTw8OHxvWzI1NSZmXSlecltwXTtwKz0xO3ZhciB4PShvW2g+Pj4yNF08PDI0fG9bbD4+PjE2JjI1NV08PDE2fG9bZj4+PjgmMjU1XTw8OHxvWzI1NSZkXSlecltwXTtwKz0xLHVbdF09Yix1W3QrMV09Xyx1W3QrMl09dyx1W3QrM109eH19XSksYX0oWWUpO3d0LmtleVNpemU9ODt2YXIgeHQ9WWUuX2NyZWF0ZUhlbHBlcih3dCksU3Q9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KEtlKTtTdC5FbmNyeXB0b3I9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxbe2tleToicHJvY2Vzc0Jsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUsYT10aGlzLl9jaXBoZXIsbj1hLmJsb2NrU2l6ZSxpPXRoaXMuX2l2LHM9dGhpcy5fY291bnRlcjtpJiYodGhpcy5fY291bnRlcj1pLnNsaWNlKDApLHM9dGhpcy5fY291bnRlcix0aGlzLl9pdj12b2lkIDApO3ZhciBvPXMuc2xpY2UoMCk7YS5lbmNyeXB0QmxvY2sobywwKSxzW24tMV09c1tuLTFdKzF8MDtmb3IodmFyIHU9MDt1PG47dSs9MSlyW3QrdV1ePW9bdV19fV0pLGF9KFN0KSxTdC5EZWNyeXB0b3I9U3QuRW5jcnlwdG9yO3ZhciBBdD17cGFkOmZ1bmN0aW9uKCl7fSx1bnBhZDpmdW5jdGlvbigpe319LER0PXtkZWNyeXB0V29yZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1UZS5wYXJzZSh0KSxuPVRlLnBhcnNlKHJlKHIpKSxpPUJlLmNyZWF0ZShuZXcgVWludDhBcnJheShlKSkscz14dC5kZWNyeXB0KFplLmNyZWF0ZSh7Y2lwaGVydGV4dDppfSksYSx7aXY6bixtb2RlOlN0LHBhZGRpbmc6QXR9KTtyZXR1cm4gRHQud29yZEFycmF5VG9VaW50OEFycmF5KHMpfSx3b3JkQXJyYXlUb1VpbnQ4QXJyYXk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuc2lnQnl0ZXMscj1lLndvcmRzLGE9bmV3IFVpbnQ4QXJyYXkodCksbj0wLGk9MDtuIT09dDspe3ZhciBzPXJbaSsrXTtpZihhW24rK109KDQyNzgxOTAwODAmcyk+Pj4yNCxuPT09dClicmVhaztpZihhW24rK109KDE2NzExNjgwJnMpPj4+MTYsbj09PXQpYnJlYWs7aWYoYVtuKytdPSg2NTI4MCZzKT4+Pjgsbj09PXQpYnJlYWs7YVtuKytdPTI1NSZzfXJldHVybiBhfSxkZWNvZGVyQUVTQ1RSRGF0YTpmdW5jdGlvbihlLHQscil7aWYoZS52aWRlb1NlbmMpe3ZhciBhPWUua2lkVmFsdWUsbj1lLnZpZGVvU2VuYztlLnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXt2YXIgcz1uW2ldLG89dC5kYXRhLHU9W10sYz1bXSxsPXMuSW5pdGlhbGl6YXRpb25WZWN0b3I7aWYocy5zdWJzYW1wbGVzJiZzLnN1YnNhbXBsZXMubGVuZ3RoKXMuc3Vic2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLkJ5dGVzT2ZDbGVhckRhdGErZS5CeXRlc09mUHJvdGVjdGVkRGF0YSxyPW8uc2xpY2UoMCx0KTt1LnB1c2goci5zbGljZSgwLGUuQnl0ZXNPZkNsZWFyRGF0YSkpLGMucHVzaChyLnNsaWNlKGUuQnl0ZXNPZkNsZWFyRGF0YSkpLG89by5zbGljZSh0KX0pKTtlbHNle3ZhciBmPXQuc2l6ZTt1LnB1c2goby5zbGljZSgwLDApKSxjLnB1c2goby5zbGljZSgwLGYpKSxvPW8uc2xpY2UoZil9dmFyIGQ9bmV3IHdlO2Qud3JpdGUuYXBwbHkoZCxjKTt2YXIgaD1yP3IoZC5idWZmZXIsYSxsKTpEdC5kZWNyeXB0V29yZEFycmF5KGQuYnVmZmVyLGEsbCkscD1uZXcgd2U7dS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3ZhciByPWNbdF0ubGVuZ3RoLGE9aC5zbGljZSgwLHIpO3Aud3JpdGUoZSkscC53cml0ZShhKSxoPWguc2xpY2Uocil9KSksZS5zYW1wbGVzW2ldLmRhdGE9cC5idWZmZXJ9KSl9aWYodC5hdWRpb1NlbmMpe3ZhciBpPXQua2lkVmFsdWUscz10LmF1ZGlvU2VuYzt0LnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxhKXt2YXIgbj1zW2FdLG89cj9yKGUuZGF0YSxpLG4uSW5pdGlhbGl6YXRpb25WZWN0b3IpOkR0LmRlY3J5cHRXb3JkQXJyYXkoZS5kYXRhLGksbi5Jbml0aWFsaXphdGlvblZlY3Rvcik7dC5zYW1wbGVzW2FdLmRhdGE9b30pKX19fSxFdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4scyl7dmFyIG89dGhpcztyKHRoaXMsZSksaSh0aGlzLCJfdmlkZW9TYW1wbGVzIixbXSksaSh0aGlzLCJfYXVkaW9TYW1wbGVzIixbXSksaSh0aGlzLCJfbGFzdFJlbWFpbkJ1ZmZlciIsW10pLGkodGhpcywiX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcyIsMCksdGhpcy52aWRlb1RyYWNrPW5ldyB6LHRoaXMuYXVkaW9UcmFjaz1uZXcgTSx0aGlzLm1ldGFkYXRhVHJhY2s9bnx8bmV3IE4sdGhpcy5sb2c9bmV3IEFlKCJNUDREZW11eGVyIiwhc3x8IXMub3BlbkxvZ3x8IXMub3BlbkxvZyksdCYmdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdDsodD1vLl92aWRlb1NhbXBsZXMpLnB1c2guYXBwbHkodCx5KGUuZnJhbWVzKSl9KSksYSYmYS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdDsodD1vLl9hdWRpb1NhbXBsZXMpLnB1c2guYXBwbHkodCx5KGUuZnJhbWVzKSl9KSl9cmV0dXJuIG4oZSxbe2tleToicGFyc2VTYW1wbGVzIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIm1vb3YgaXMgcmVxdWlyZWQiKTtpZih0aGlzLnZpZGVvVHJhY2suY29kZWN8fHRoaXMuYXVkaW9UcmFjay5jb2RlY3x8KHBlLm1vb3ZUb1RyYWNrKGUsdGhpcy52aWRlb1RyYWNrLHRoaXMuYXVkaW9UcmFjayksdGhpcy52aWRlb1NlbmM9dGhpcy52aWRlb1RyYWNrLnZpZGVvU2VuYyx0aGlzLmF1ZGlvU2VuYz10aGlzLmF1ZGlvVHJhY2suYXVkaW9TZW5jKSwhdGhpcy5fYXVkaW9TYW1wbGVzLmxlbmd0aCYmIXRoaXMuX3ZpZGVvU2FtcGxlcy5sZW5ndGgpe3ZhciB0PXBlLm1vb3ZUb1NhbXBsZXMoZSk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgcGFyc2Ugc2FtcGxlcyBmcm9tIG1vb3YgYm94Iik7dGhpcy5fdmlkZW9TYW1wbGVzPXQudmlkZW9TYW1wbGVzfHxbXSx0aGlzLl9hdWRpb1NhbXBsZXM9dC5hdWRpb1NhbXBsZXN8fFtdfX19LHtrZXk6ImRlbXV4Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLG4pe3RoaXMucGFyc2VTYW1wbGVzKG4pO3ZhciBpLHMsbyx1PXRoaXMudmlkZW9UcmFjayxjPXRoaXMuYXVkaW9UcmFjaztpZih1LnNhbXBsZXM9W10sYy5zYW1wbGVzPVtdLHIpe2Zvcih2YXIgbCxmPTAsZD1yWzBdLGg9clsxXTtkPD1oO2QrKyl7aWYoIShpPXRoaXMuX3ZpZGVvU2FtcGxlc1tkXSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZm91bmQgdmlkZW8gZnJhbWUgIyIuY29uY2F0KGQpKTtvPWkub2Zmc2V0LXQscz1lLnN1YmFycmF5KG8sbytpLnNpemUpLChsPW5ldyBSKGkucHRzfHxpLmR0cyxpLmR0cykpLmR1cmF0aW9uPWkuZHVyYXRpb24sbC5nb3BJZD1pLmdvcElkLGkua2V5ZnJhbWUmJmwuc2V0VG9LZXlmcmFtZSgpO2Zvcih2YXIgcD0wLHY9cy5sZW5ndGgtMTtwPHY7KWY9JChzLHApLHArPTQsbC51bml0cy5wdXNoKHMuc3ViYXJyYXkocCxwK2YpKSxwKz1mO3Uuc2FtcGxlcy5wdXNoKGwpfXUuYmFzZU1lZGlhRGVjb2RlVGltZT11LnNhbXBsZXNbMF0uZHRzfWlmKGEpe2Zvcih2YXIgeT1hWzBdLG09YVsxXTt5PD1tO3krKyl7aWYoIShpPXRoaXMuX2F1ZGlvU2FtcGxlc1t5XSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZm91bmQgdmlkZW8gZnJhbWUgIyIuY29uY2F0KHkpKTtvPWkub2Zmc2V0LXQscz1lLnN1YmFycmF5KG8sbytpLnNpemUpLGMuc2FtcGxlcy5wdXNoKG5ldyBPKGkuZHRzLHMsaS5kdXJhdGlvbikpfWMuYmFzZU1lZGlhRGVjb2RlVGltZT1jLnNhbXBsZXNbMF0uZHRzfXJldHVybnt2aWRlb1RyYWNrOnUsYXVkaW9UcmFjazpjLG1ldGFkYXRhVHJhY2s6dGhpcy5tZXRhZGF0YVRyYWNrfX19LHtrZXk6ImRlbXV4UGFydCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxuLGkscyxvKXtpZih0aGlzLnBhcnNlU2FtcGxlcyhuKSx0aGlzLnZpZGVvVHJhY2sudXNlRU1FPWksdGhpcy5hdWRpb1RyYWNrLnVzZUVNRT1pLHRoaXMuX2xhc3RSZW1haW5CdWZmZXImJnRoaXMuX2xhc3RSZW1haW5CdWZmZXIuYnl0ZUxlbmd0aD4wJiZ0PnRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcyYmdDw9dGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zK3RoaXMuX2xhc3RSZW1haW5CdWZmZXIuYnl0ZUxlbmd0aClmb3IodmFyIHU9MDt1PDIwOyl0cnl7dmFyIGM9dGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5zdWJhcnJheSgwLHQtdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zKSxsPW5ldyBVaW50OEFycmF5KGUuYnl0ZUxlbmd0aCtjLmJ5dGVMZW5ndGgpO2wuc2V0KGMsMCksbC5zZXQobmV3IFVpbnQ4QXJyYXkoZSksYy5ieXRlTGVuZ3RoKSxlPWwsdC09Yy5ieXRlTGVuZ3RoLHRoaXMuX2xhc3RSZW1haW5CdWZmZXI9bnVsbCx0aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9MDticmVha31jYXRjaChFKXtpZighKHU8MjApKXRocm93IG5ldyBFcnJvcigibmV3IFVpbnQ4QXJyYXkgZXJyb3I6LCIrRS5lcnJvck1lc3NhZ2UpO3UrK312YXIgZixkLGgscD10aGlzLnZpZGVvVHJhY2ssdj10aGlzLmF1ZGlvVHJhY2s7cC5zYW1wbGVzPVtdLHYuc2FtcGxlcz1bXSxwLnZpZGVvU2VuYz1udWxsLHYuYXVkaW9TZW5jPW51bGw7dmFyIHk9MCxtPTA7aWYodGhpcy5fdmlkZW9TYW1wbGVzLmxlbmd0aD4wJiZyLmxlbmd0aD4wKXtmb3IodmFyIGcsaz1lLmJ5dGVMZW5ndGgrdCxiPXJbMF07Yjw9clsxXTtiKyspe2lmKCEoZj10aGlzLl92aWRlb1NhbXBsZXNbYl0pKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZvdW5kIHZpZGVvIGZyYW1lICMiLmNvbmNhdChiKSk7Zi5vZmZzZXQ+PXQmJmYub2Zmc2V0K2Yuc2l6ZTw9ayYmKHk9KGg9Zi5vZmZzZXQtdCkrZi5zaXplLGQ9ZS5zdWJhcnJheShoLHkpLChnPW5ldyBSKGYucHRzfHxmLmR0cyxmLmR0cykpLmR1cmF0aW9uPWYuZHVyYXRpb24sZy5nb3BJZD1mLmdvcElkLGcuc2FtcGxlT2Zmc2V0PWYuaW5kZXgsZi5rZXlmcmFtZSYmZy5zZXRUb0tleWZyYW1lKCksZy5kYXRhPWQsZy5zaXplPWYuc2l6ZSxwLnNhbXBsZXMucHVzaChnKSl9cC5zYW1wbGVzLmxlbmd0aD4wJiYocC5nb3BJZD1wLnNhbXBsZXNbMF0uZ29wSWQscC5iYXNlTWVkaWFEZWNvZGVUaW1lPXAuc2FtcGxlc1swXS5kdHMscC5zdGFydFB0cz1wLnNhbXBsZXNbMF0ucHRzL3AudGltZXNjYWxlLHAuZW5kUHRzPXAuc2FtcGxlc1twLnNhbXBsZXMubGVuZ3RoLTFdLnB0cy9wLnRpbWVzY2FsZSx0aGlzLnZpZGVvU2VuYyYmKHAudmlkZW9TZW5jPXRoaXMudmlkZW9TZW5jLnNsaWNlKHAuc2FtcGxlc1swXS5zYW1wbGVPZmZzZXQscC5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCtwLnNhbXBsZXMubGVuZ3RoKSxwLmtpZFZhbHVlPXMpKX1pZih0aGlzLl9hdWRpb1NhbXBsZXMubGVuZ3RoPjAmJmEubGVuZ3RoPjApe2Zvcih2YXIgXz1hWzBdO188PWFbMV07XysrKXtpZighKGY9dGhpcy5fYXVkaW9TYW1wbGVzW19dKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmb3VuZCB2aWRlbyBmcmFtZSAjIi5jb25jYXQoXykpO2Yub2Zmc2V0Pj10JiZmLm9mZnNldCtmLnNpemU8PWUuYnl0ZUxlbmd0aCt0JiYobT0oaD1mLm9mZnNldC10KStmLnNpemUsZD1lLnN1YmFycmF5KGgsbSksdi5zYW1wbGVzLnB1c2gobmV3IE8oZi5kdHMsZCxmLmR1cmF0aW9uLGYuaW5kZXgpKSl9di5zYW1wbGVzLmxlbmd0aD4wJiYodi5nb3BJZD12LnNhbXBsZXNbMF0uZ29wSWR8fHAuZ29wSWQsdi5iYXNlTWVkaWFEZWNvZGVUaW1lPXYuc2FtcGxlc1swXS5kdHMsdi5zdGFydFB0cz12LnNhbXBsZXNbMF0ucHRzL3YudGltZXNjYWxlLHYuZW5kUHRzPXYuc2FtcGxlc1t2LnNhbXBsZXMubGVuZ3RoLTFdLnB0cy92LnRpbWVzY2FsZSx0aGlzLmF1ZGlvU2VuYyYmKHYuYXVkaW9TZW5jPXRoaXMuYXVkaW9TZW5jLnNsaWNlKHYuc2FtcGxlc1swXS5zYW1wbGVPZmZzZXQsdi5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCt2LnNhbXBsZXMubGVuZ3RoKSx2LmtpZFZhbHVlPXMpKX10aGlzLmRlY29kZXJEYXRhKHAsdixvKTtmb3IodmFyIHc9MCx4PTA7eDxwLnNhbXBsZXMubGVuZ3RoO3grKylmb3IodmFyIFM9MCxBPXAuc2FtcGxlc1t4XS5kYXRhLEQ9QS5sZW5ndGgtMTtTPEQ7KXc9JChBLFMpLFMrPTQscC5zYW1wbGVzW3hdLnVuaXRzLnB1c2goQS5zdWJhcnJheShTLFMrdykpLFMrPXc7cmV0dXJuIHRoaXMuX2xhc3RSZW1haW5CdWZmZXI9ZS5zdWJhcnJheShNYXRoLm1heCh5LG0pKSx0aGlzLl9sYXN0UmVtYWluQnVmZmVyLmJ5dGVMZW5ndGg+MD90aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9dCtlLmJ5dGVMZW5ndGgtdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5ieXRlTGVuZ3RoOnRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcz0wLHt2aWRlb1RyYWNrOnAsYXVkaW9UcmFjazp2LG1ldGFkYXRhVHJhY2s6dGhpcy5tZXRhZGF0YVRyYWNrfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3ZpZGVvU2FtcGxlcz1bXSx0aGlzLl9hdWRpb1NhbXBsZXM9W10sdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlcj1udWxsLHRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcz0wLHRoaXMudmlkZW9UcmFjay5yZXNldCgpLHRoaXMuYXVkaW9UcmFjay5yZXNldCgpLHRoaXMubWV0YWRhdGFUcmFjay5yZXNldCgpfX0se2tleToiZGVjb2RlckRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtlLnVzZUVNRXx8dC51c2VFTUV8fER0LmRlY29kZXJBRVNDVFJEYXRhKGUsdCxyKX19XSxbe2tleToicHJvYmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBwZS5wcm9iZShlKX19XSksZX0oKSxCdD17bm93VGltZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gcGFyc2VJbnQocGVyZm9ybWFuY2Uubm93KCksMTApfWNhdGNoKGUpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0sY29uY2F0RGF0YTpmdW5jdGlvbihlLHQpe3ZhciByPVtdLGE9MDtlJiZyLnB1c2goZSksdCYmci5wdXNoKHQpLHIuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYoYSs9ZS5ieXRlTGVuZ3RoKSwhMH0pKTt2YXIgbj1uZXcgVWludDhBcnJheShhKSxpPTA7cmV0dXJuIHIuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYobi5zZXQoZSxpKSxpKz1lLmJ5dGVMZW5ndGgpLCEwfSkpLG59fTtvbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kYXRhO3N3aXRjaChyLm1ldGhvZCl7Y2FzZSJpbml0Ijp0aGlzLmNvZGVjVHlwZT1yLmFyZ3MuY29kZWNUeXBlLHRoaXMub3BlbmxvZz1yLmFyZ3Mub3BlbkxvZyx0aGlzLk1QNERlbXV4ZXI9bnVsbCx0aGlzLkZNUDRSZW11eGVyPW51bGwsdGhpcy5fbmVlZEluaXRTZWdtZW50PSEwLHRoaXMuc3VwcG9ydEhldmM9ci5hcmdzLnN1cHBvcnRIZXZjO2JyZWFrO2Nhc2UidHJhbnNtdXgiOnZhciBhPWUuZGF0YS5hcmdzLG49bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmJ1ZmZlcik7dGhpcy5NUDREZW11eGVyfHwodGhpcy5NUDREZW11eGVyPW5ldyBFdChudWxsLG51bGwsbnVsbCx7b3BlbmxvZzp0aGlzLm9wZW5sb2d9KSk7dmFyIGkscz10aGlzLk1QNERlbXV4ZXIuZGVtdXhQYXJ0KG4sYS5zdGFydCxhLnZpZGVvSWR4LGEuYXVkaW9JZHgsYS5tb292LGEudXNlRU1FLGEua2lkVmFsdWUpO2lmKHRoaXMuRk1QNFJlbXV4ZXJ8fCJoMjY1Ij09PXRoaXMuY29kZWNUeXBlJiYhdGhpcy5zdXBwb3J0SGV2Y3x8KHRoaXMuRk1QNFJlbXV4ZXI9bmV3IERlKHRoaXMuTVA0RGVtdXhlci52aWRlb1RyYWNrLHRoaXMuTVA0RGVtdXhlci5hdWRpb1RyYWNrLHtvcGVuTG9nOnRoaXMub3BlbmxvZ30pKSx0aGlzLkZNUDRSZW11eGVyKXt2YXIgbz10aGlzLkZNUDRSZW11eGVyLnJlbXV4KHRoaXMuX25lZWRJbml0U2VnbWVudCx7aW5pdE1lcmdlOiEwfSk7by5pbml0U2VnbWVudCYmKHRoaXMuX25lZWRJbml0U2VnbWVudD0hMSksaT17YnVmZmVyOkJ0LmNvbmNhdERhdGEoby5hdWRpb1NlZ21lbnQsby52aWRlb1NlZ21lbnQpLHJhbmdlOmEuY29udGV4dC5yYW5nZSxzdGF0ZTphLmNvbnRleHQuc3RhdGUsY29udGV4dDp7cmFuZ2U6YS5jb250ZXh0LnJhbmdlLGZyYWdJbmRleDphLmNvbnRleHQuZnJhZ0luZGV4LHN0YXJ0UHRzOk1hdGgubWluKHMudmlkZW9UcmFjay5zdGFydFB0cyxzLmF1ZGlvVHJhY2suc3RhcnRQdHMpLGVuZFB0czpNYXRoLm1heChzLnZpZGVvVHJhY2suZW5kUHRzLHMuYXVkaW9UcmFjay5lbmRQdHMpfSxpbml0U2VnOm8uaW5pdFNlZ21lbnR9fXRoaXMucG9zdE1lc3NhZ2Uoe21ldGhvZDoidHJhbnNtdXgiLGlkOmUuZGF0YS5pZCxhcmdzOnQoe30saSl9KTticmVhaztjYXNlInJlc2V0Ijp0aGlzLkZNUDRSZW11eGVyJiZ0aGlzLkZNUDRSZW11eGVyLnJlc2V0KCksdGhpcy5NUDREZW11eGVyJiZ0aGlzLk1QNERlbXV4ZXIucmVzZXQoKSx0aGlzLkZNUDRSZW11eGVyPW51bGwsdGhpcy5NUDREZW11eGVyPW51bGwsdGhpcy5fbmVlZEluaXRTZWdtZW50PSEwfX19KCk7Cg==",an="undefined"!=typeof window&&window.Blob&&new Blob([atob(rn)],{type:"text/javascript;charset=utf-8"});function ln(){var e=an&&(window.URL||window.webkitURL).createObjectURL(an);try{return e?new Worker(e,{}):new Worker("data:application/javascript;base64,"+rn,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}var on=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 ln,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 G(i,[{key:"transmux",value:function(e,t,i,n,s,r,a,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:r,useEME:a,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),dn="error",cn="metaReady",un="moov_request_Progress",hn="update_load_fragmentIdx",mn=function(e){v(u,e);var t,i,n,s,r,a,l,o,d,c=w(u);function u(e,t){var i;if(X(this,u),W(T(i=c.call(this)),"onprogressDataArrive",function(){var e=f(Z().mark((function e(t,n,s){var r;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t&&t.byteLength>0&&((r=i.timeRange[s.index].range)&&s.range[1]>=r[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 $i(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),{},{openLog:nn()})),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 on({id:i.workerSequence,codecType:t.codecType,supportHevc:i.options.supportHevc,openLog:nn()}),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 G(u,[{key:"changeBitRate",value:(d=f(Z().mark((function e(t){return Z().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),r=1;r<n;r++)s[r-1]=arguments[r];sn.apply(void 0,[i].concat(s))}},{key:"errorHandler",value:(o=f(Z().mark((function e(t,i){var n,s,r,a;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=t.response,s=t.message,r=this.options?this.options.vid:"",a=null,this._isPending=!0,n?(a=new ji("network",n.status,{httpText:n.httpText,message:s,url:n.url}),this.emit(dn,a)):(console.log("[MP4] [".concat(r,"] errorHandler,"),t),a=t,this.emit(dn,a));case 6:case"end":return e.stop()}}),e,this)}))),function(e,t){return o.apply(this,arguments)})},{key:"init",value:(l=f(Z().mark((function e(){return Z().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:(a=f(Z().mark((function e(){var t,i,n,s=this,r=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=!(r.length>0&&void 0!==r[0])||r[0],e.prev=1,this._metaLoading=!0,this.log("getMetaInfo start"),this.bufferLoaded=new Uint8Array(0),i=0,n=function(){var e=f(Z().mark((function e(n,r,a){var l;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s.log("getMetaInfo onProgressHandle, dataLen,",n?n.byteLength:-1,", state,",r,",range,",JSON.stringify(a.range)),n&&a.range[0]===i&&(s.bufferLoaded=P(Uint8Array,s.bufferLoaded,new Uint8Array(n)),i+=n.byteLength),a.meta&&!s.meta&&(l=a.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&&r&&(s.log("[getMetaInfo req end]"),s._metaLoading=!1),s.meta&&(n||r)&&(s.log("emit moov_req_progress"),s.emit(un));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 a.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:(r=f(Z().mark((function e(){var t;return Z().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 r.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,r=null;this.videoTrak&&(r=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1]);var a=null;this.audioTrak&&(a=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=r)||void 0===t?void 0:t.range[0])||1/0,(null===(i=a)||void 0===i?void 0:i.range[0])||1/0),Math.max((null===(n=r)||void 0===n?void 0:n.range[1])+l||0,(null===(s=a)||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(Z().mark((function e(t,i){var n,s,r;return Z().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(hn,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?(r=this.getSubRange(t,this.seekTime,s),this.loadFragment(t,r),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],r=1,a=!1;if(this.log(">>>>>getSubRange time,",t,JSON.stringify(i)),this.videoTrak){var l=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1],o=l.frames.filter(pn),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(;r<o.length;r++){var h=o[r].startTime/d;if(c<=t&&t<h&&i[0]<o[r-1].offset){n=o[r-1].offset,a=!0,this.log(">>>>>getSubRange video end, startTime,",c,",endTime,",h,",startRange,",n,", keyFrameIndex,",r-1);break}c=h}!a&&c<=t&&t<l.endTime+.8&&(n=o[r-1].offset,this.log(">>>>>getSubRange video last, startTime,",c,",endTime,",l.endTime,",startRange,",n))}if(r=1,this.audioTrak){var m=e<this.audioTrak.length?this.audioTrak[e]:this.audioTrak[this.audioTrak.length-1],p=m.frames,Z=this.meta.audioTimescale;r=Math.floor((t*Z-p[0].startTime)/m.frames[0].duration);for(var b=(r=Math.min(p.length-1,r))>0?p[r-1].startTime/Z:p[0].startTime/Z;r>=0&&r<p.length;)if(r>0&&b>t)b=p[r-=1].startTime/Z;else{var y=(p[r].startTime+p[r].duration)/Z;if(b<=t&&t<y&&i[0]<p[r].offset){s=p[r].offset,a=!0,this.log(">>>>>getSubRange audio end, startTime,",b,",endTime,",y,",startRange,",s,", index,",r);break}b=y,r++}}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"),r=this.getSamplesRange(i,"audio"),a=[t,t+e.byteLength];if(this.transmuxerWorkerControl){var l={range:a,state:n,fragIndex:i};this.log("[transmuxerworker start] ,range, ",JSON.stringify(a),",dataLen,",e.byteLength,l),this.transmuxerWorkerControl.transmux(this.workerSequence,e,t,s,r,this.meta.moov,this.useEME,this.kidValue,l)}else try{this.MP4Demuxer||(this.MP4Demuxer=new qt(this.videoTrak,this.audioTrak,null,{openLog:nn()}));var o,d=this.MP4Demuxer.demuxPart(e,t,s,r,this.meta.moov,this.useEME,this.kidValue);this.FMP4Remuxer||this.checkCodecH265()&&!this.options.supportHevc||(this.FMP4Remuxer=new Ae(this.MP4Demuxer.videoTrack,this.MP4Demuxer.audioTrack,{openLog:nn()})),this.log("[mux], videoTimeRange,",d.videoTrack?[d.videoTrack.startPts,d.videoTrack.endPts]:null,",audioTimeRange,",d.audioTrack?[d.audioTrack.startPts,d.audioTrack.endPts]:null);var c=[Math.min(d.videoTrack.startPts,d.audioTrack.startPts),Math.max(d.videoTrack.endPts,d.audioTrack.endPts)];if(this.FMP4Remuxer){var u=this.FMP4Remuxer.remux(this._needInitSegment,{initMerge:!0,range:a});u.initSegment&&(this._needInitSegment=!1),o={buffer:Ei.concatData(u.audioSegment,u.videoSegment),range:a,state:n,context:{range:a,fragIndex:i,timeRange:c},initSeg:u.initSegment}}else o={videoTrack:d.videoTrack,audioTrack:d.audioTrack,buffer:null,range:a,state:n,context:{range:a,fragIndex:i,timeRange:c}};this._loadSuccessCallBack&&this._loadSuccessCallBack(o)}catch(m){console.error("mux err:",m);var h=new Pi(Ji.remux,Fi.muxError,{msg:JSON.stringify(m)});this.errorHandler(h,"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;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;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(Z().mark((function e(t,i){var n,s,r,a;return Z().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(r=Math.max(i[0],this.bufferLoadedPos),!((a=new Uint8Array(this.bufferLoaded.slice(r,i[1]))).byteLength>0)){e.next=22;break}return this.bufferLoadedPos=r+a.byteLength,this.log("[mp4.loadFragment] has part data: ",r,r+a.byteLength),this._mux(a,r,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(Z().mark((function e(t,i){return Z().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(Z().mark((function e(){return Z().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:{}}}}]),u}(J);function pn(e){if(e.keyframe)return e}var Zn=function(){function e(t){X(this,e),this.onTick_=t,this.cancelPending_=null}return G(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 r=function(){n&&(t.onTick_(),i&&i())};return s=window.setTimeout(r,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}(),bn=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 G(e,[{key:"resolve",value:function(e){}},{key:"reject",value:function(e){}}]),e}(),yn=null,fn=null,Xn=null,Ln=null,Gn=function(e){v(r,e);var t,i,n,s=w(r);function r(e){var t;return X(this,r),W(T(t=s.call(this,e)),"_onMp4DataCallBack",(function(){t._isMseInit&&t._onTimeUpdate()})),W(T(t),"_onMp4MetaReady",(function(e){var i=T(t).config,n=t.mp4.checkCodecH265();try{if(n&&!t.config.supportHevc){var s="browser not support HEVC",r=new h.Errors(t.player,{errorType:"runtime",errorTypeCode:Ji.runtime,errorCode:Fi.h265Error,errorMessage:s,vid:i.vid,mediaError:{code:Fi.h265Error,message:s}});t._errorHandler(r)}else t._initMse(e),t._initPromise.resolve()}catch(l){var a=new h.Errors(t.player,{errorType:"runtime",errorTypeCode:Ji.runtime,errorCode:Fi.mse,errorMessage:null==l?void 0:l.message,vid:i.vid,mediaError:{code:Fi.other1,message:null==l?void 0:l.message}});return void t._errorHandler(a)}t._loadData()})),W(T(t),"_onMp4Error",(function(e){var i=t.playerConfig.vid;console.error("[Index] _onMp4Error",i,e),t._errorHandler(e)})),W(T(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 r=t.player.buffered;r&&r.length>0&&(t.bufferEndTime=r.end(r.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 a=t.player.buffered;a&&a.length>0&&(t.bufferEndTime=a.end(a.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(fi.VIDEO,i,s,n)}catch(o){t.log("appendBuffer error",o);var l=new h.Errors(t.player,{errorType:"runtime",errorTypeCode:Ji.runtime,errorCode:Fi.mse,vid:t.player.config.vid,errorMessage:o.message,mediaError:{code:Fi.mse,message:o.message}});t._errorHandler(l)}null!=e&&e.state&&t._onTimeUpdate()}})),W(T(t),"_onWaiting",(function(){var e=T(t),i=e.player,n=e.config;clearTimeout(t._waitInBufferTimer),t._waitInBufferTimer=null;var s=i.currentTime,r=i.bufferedPoint;r.end>0&&r.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,Ei.nowTime())}),n.waitingInBufferTimeOut))})),W(T(t),"_onSeeking",f(Z().mark((function e(){var i,n,s,r,a,l,o,d,c,u,h;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=T(t),n=i.player,s=i.mp4,r=n.currentTime,t.log("[seekTime], curTime,",r,",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,a=n.bufferedPoint,l=!1,o=0,!(a.end>0)){e.next=25;break}if(l=!0,!(s.meta.duration-a.end<.5)){e.next=17;break}return t._startProgress(),t.log("[seeking in buffered range], buffer end,",a.end,", duration,",s.meta.duration),e.abrupt("return");case 17:if(o=s.getFragmentIdx(a.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=a.end,o<0&&(o=t._curLoadSegmentIdx),t.log("[seeking in buffered range], seekTime ",r,",bufferRange,",a.start,"-",a.end,", fragIndex,",o);case 25:return l||(s.seekTime=r,(o=s.getFragmentIdx(r))<0&&(o=t._curLoadSegmentIdx),t.log("[seekTime out buffer range], curTime,",r,", Idx,",o),d=T(t),(c=d.mse)&&c.isFull()&&(u=n.buffered2.bufferedList,h=u[u.length-1],c.clearOpQueues(fi.VIDEO),t._checkRemoveSourceBuffer([h.start,h.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)})))),W(T(t),"changeDefineCanPlay",(function(e,i,n,s){var r=T(t).player;r.ended?r.currentTime=0:(t.log("[oldChangeDefinition],this._changeDefState,",t._changeDefState),r.currentTime=t._changeDefState?t._changeDefState.currentTime:e,(t._changeDefState?t._changeDefState.paused:i)?r.pause():r.play(),t._changeDefState=null,r.emit(h.Events.AFTER_DEFINITION_CHANGE,{from:n,to:s}))})),W(T(t),"changeDefinition",function(){var e=f(Z().mark((function e(i,n){var s,r,a,l,o,d,c;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=T(t),r=s.player,a=s.config,l=s.mp4,n||(n=r.curDefinition),t._MSEError=!1,!a.witchBitRateWay){e.next=6;break}return t.oldChangeDefinition(i,n),e.abrupt("return");case 6:if(r.emit(h.Events.DEFINITION_CHANGE,{from:n,to:i}),o=r.currentTime,(d=l.getFragmentIdx(o))<0&&(d=t._curLoadSegmentIdx),t.log("switchBitrate:point,fragIndex,",d,",startTime,",l.timeRange[d].startTime,",currentTime,",r.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=r.getBufferedRange(r.buffered))[1]>0&&c[1]-r.currentTime>5&&(t.mse.clearOpQueues(fi.VIDEO),t.mse.remove(fi.VIDEO,r.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(),r.emit("RESOLUTION_UPDATE",i);case 27:case"end":return e.stop()}}),e)})));return function(t,i){return e.apply(this,arguments)}}()),W(T(t),"_replayHook",(function(){var e;return null===(e=t.player)||void 0===e||e.play(),!1})),W(T(t),"_retryHook",(function(){return t.beforePlayerInit(),!1})),t.mp4=null,t.mse=null,t._waitAdjustTimeCnt=0,t._lastCheckTime=Ei.nowTime(),t._removeBuffeEndTime=0,t._pendingPromises=[],t}return G(r,[{key:"afterCreate",value:function(){var e=this;window.__mp4player=this;try{h.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(h.Events.SEEKING,this._onSeeking),this.on(h.Events.SEEKING,this._onSeeking),this.on(h.Events.WAITING,this._onWaiting),this.off(h.Events.URL_CHANGE,this.switchURL),this.on(h.Events.URL_CHANGE,this.switchURL)}},{key:"detachEvents",value:function(){this.off(h.Events.SEEKING,this._onSeeking),this.off(h.Events.WAITING,this._onWaiting),this.off(h.Events.URL_CHANGE,this.switchURL)}},{key:"_proxyPlayer",value:function(){var e=this;"function"==typeof this.player.playNext&&(yn=this.player.playNext),this.player.playNext=function(){e.playNext.apply(e,arguments)},fn=this.player._startInit,Ln=this.player.switchURL,Xn=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!==h.Sniffer&&void 0!==h.Sniffer&&h.Sniffer.isHevcSupported&&h.Sniffer.isHevcSupported()&&(i.supportHevc=!0);var s=this.initMp4();this._initPromise=s,this._addPendingPromise(this._initPromise),this.mse&&"String"===h.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 h.Errors(t.player,{errorType:Ji.RUNTIME,errorCode:(null==i?void 0:i.errorCode)||Fi.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)||Fi.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&&fn.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 bn;return this.mp4&&(this.mp4.off(cn,this._onMp4MetaReady),this.mp4.off(dn,this._onMp4Error),this.mp4.off(un,this._onMp4DataCallBack),this.mp4.destroy(),this.mp4=null),this.mp4=new mn(t.config.url,p(p({},this.config),{},{vid:t.config.vid})),this.mp4.on(cn,this._onMp4MetaReady),this.mp4.on(dn,this._onMp4Error),this.mp4.on(un,this._onMp4DataCallBack),this.mp4.on(hn,(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 r=i.currentTime;this.destroyMSE(),i.currentTime=r,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 r=s.url;n.media.src=r}},{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(Z().mark((function e(t){var i,n,s,r,a,l=this;return Z().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=this.mp4&&this.mp4.checkCodecH265(),n=!!t.videoCodec,s=!!t.audioCodec,r=n&&s?i?'video/mp4; codecs="hev1.1.6.L93.B0, mp4a.40.5"':'video/mp4; codecs="avc1.64001E, mp4a.40.5"':n?i?'video/mp4; codecs="hev1.1.6.L93.B0"':'video/mp4; codecs="avc1.64001E"':'video/mp4; codecs="mp4a.40.5"',a=W({},fi.VIDEO,{mimeType:"video/mp4",codec:r}),this.mse=new fi,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];l.mse.createSource(i,a[i].codec)}}catch(n){console.error("MSE error: ",n),l._errorHandler(n)}l._isMseInit=!0,l._onTimeUpdate()}));case 12:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"destroyMSE",value:(i=f(Z().mark((function e(){var t;return Z().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 r=i.timeRange,a=n.getBufferedRange(n.buffered2);if(t&&i&&i.canDownload){Ei.nowTime()-this._lastCheckTime>1e3&&(this._lastCheckTime=Ei.nowTime(),this._loadStuckCheck(),this._checkRemoveSourceBuffer(a,n.currentTime));var l=n.paused?n.currentTime+s.minBufferLength:n.currentTime+s.maxBufferLength;a[1]-l<0&&r.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, ",a[1],",playCurTime,",n.currentTime,", bufferLen,",a[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(fi.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 r=n.start(s)-t,a=n.end(s)+t;if(r<=e.startTime&&e.endTime<=a){i=!0;break}}return i}},{key:"_loadData",value:(t=f(Z().mark((function e(){return Z().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(fi.VIDEO,e,{vid:this.playerConfig.vid,range:null,dataLen:e.byteLength,isinit:!0}).then((function(e){t.log("appendInitSeg end ==>>>",e.context?e.context:null,", costTime,",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,r=this.mse,a=this.config;r.append(e,t,{vid:a.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!=r&&r.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,r=this.mp4,a=this.player;if(s&&r&&a&&(i&&(clearTimeout(this._removeBufferTimer),this._removeBufferTimer=null),e||(e=a.getBufferedRange(a.buffered2)),t||(t=a.currentTime),!(!i&&Ei.nowTime()-this._checkRemoveBufferLastTime<=this.config.removeBufferLen||this.endofstream)&&(this._checkRemoveBufferLastTime=Ei.nowTime(),e&&e[0]>=0&&(t-e[0]>this.config.removeBufferLen||s.isFull())))){var l=e[1],o=r.getFragmentIdx(l);if(o>=0&&r.timeRange[o].startTime<t){var d=Math.floor(Math.min(r.timeRange[o].startTime,e[1]));e[0]<d?(this.log("[checkremoveSourceBuffer], remove range==>>>",e[0],d),s.remove(fi.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 r=s.currentTime,a=s.paused;this._changeDefState||(this._changeDefState={currentTime:r,paused:a},this.log("[oldChangeDefinition],currentTime,",s.currentTime,",pause,",a)),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(r,a,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 h.Errors(e.player,{errorType:"runtime",errorTypeCode:Ji.runtime,errorCode:Fi.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 Zn((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),r=1;r<n;r++)s[r-1]=arguments[r];sn.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(dn,this._onMp4Error),this.mp4.off(un,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=yn,this.player._startInit=fn,this.player.changeDefinition=Xn,this.player.switchURL=Ln,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}}},{key:"version",get:function(){return"3.0.14"}}]),r}(h.BasePlugin);return Gn}));
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.array.join.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.array.join.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,r,a,l,o,d,c,u,h){"use strict";function m(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?m(Object(i),!0).forEach((function(t){W(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):m(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function Z(){Z=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:{},r=s.iterator||"@@iterator",a=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 r=t&&t.prototype instanceof h?t:h,a=Object.create(r.prototype),l=new g(s||[]);return n(a,"_invoke",{value:W(e,i,l)}),a}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 h(){}function m(){}function p(){}var b={};o(b,r,(function(){return this}));var y=Object.getPrototypeOf,f=y&&y(y(V([])));f&&f!==t&&i.call(f,r)&&(b=f);var X=p.prototype=h.prototype=Object.create(b);function L(e){["next","throw","return"].forEach((function(t){o(e,t,(function(e){return this._invoke(t,e)}))}))}function G(e,t){function s(n,r,a,l){var o=c(e[n],e,r);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,a,l)}),(function(e){s("throw",e,a,l)})):t.resolve(u).then((function(e){d.value=e,a(d)}),(function(e){return s("throw",e,a,l)}))}l(o.arg)}var r;n(this,"_invoke",{value:function(e,i){function n(){return new t((function(t,n){s(e,i,t,n)}))}return r=r?r.then(n,n):n()}})}function W(e,t,i){var n="suspendedStart";return function(s,r){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===s)throw r;return{value:void 0,done:!0}}for(i.method=s,i.arg=r;;){var a=i.delegate;if(a){var l=v(a,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 r=s.arg;return r?r.done?(t[e.resultName]=r.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function S(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 x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function g(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function V(e){if(e){var t=e[r];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 m.prototype=p,n(X,"constructor",{value:p,configurable:!0}),n(p,"constructor",{value:m,configurable:!0}),m.displayName=o(p,l,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===m||"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(G.prototype),o(G.prototype,a,(function(){return this})),e.AsyncIterator=G,e.async=function(t,i,n,s,r){void 0===r&&(r=Promise);var a=new G(d(t,i,n,s),r);return e.isGeneratorFunction(i)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},L(X),o(X,l,"Generator"),o(X,r,(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(x),!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 a.type="throw",a.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 r=this.tryEntries[s],a=r.completion;if("root"===r.tryLoc)return n("end");if(r.tryLoc<=this.prev){var l=i.call(r,"catchLoc"),o=i.call(r,"finallyLoc");if(l&&o){if(this.prev<r.catchLoc)return n(r.catchLoc,!0);if(this.prev<r.finallyLoc)return n(r.finallyLoc)}else if(l){if(this.prev<r.catchLoc)return n(r.catchLoc,!0)}else{if(!o)throw new Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return n(r.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 r=s;break}}r&&("break"===e||"continue"===e)&&r.tryLoc<=t&&t<=r.finallyLoc&&(r=null);var a=r?r.completion:{};return a.type=e,a.arg=t,r?(this.method="next",this.next=r.finallyLoc,u):this.complete(a)},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),x(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;x(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 y(e,t,i,n,s,r,a){try{var l=e[r](a),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 r=e.apply(t,i);function a(e){y(r,n,s,a,l,"next",e)}function l(e){y(r,n,s,a,l,"throw",e)}a(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,z(n.key),n)}}function G(e,t,i){return t&&L(e.prototype,t),i&&L(e,i),Object.defineProperty(e,"prototype",{writable:!1}),e}function W(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 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&&x(e,t)}function S(e){return(S=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function x(e,t){return(x=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&&x(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,S(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),x(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={},r=Object.keys(e);for(n=0;n<r.length;n++)i=r[n],t.indexOf(i)>=0||(s[i]=e[i]);return s}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)i=r[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s}function T(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function R(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 T(e)}function w(e){var t=g();return function(){var i,n=S(e);if(t){var s=S(this).constructor;i=Reflect.construct(n,arguments,s)}else i=n.apply(this,arguments);return R(this,i)}}function M(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=S(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,r,a,l=[],o=!0,d=!1;try{if(r=(i=i.call(e)).next,0===t){if(Object(i)!==i)return;o=!1}else for(;!(o=(n=r.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&&(a=i.return(),Object(a)!==a))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){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 r(e,t,n,r,a){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new s(n,r||e,a),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 a(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,r=n.length,a=new Array(r);s<r;s++)a[s]=n[s].fn;return a},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,r,a){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,r),!0;case 6:return c.fn.call(c.context,t,n,s,r,a),!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 h,m=c.length;for(d=0;d<m;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(h=1,o=new Array(u-1);h<u;h++)o[h-1]=arguments[h];c[d].fn.apply(c[d].context,o)}}return!0},l.prototype.on=function(e,t,i){return r(this,e,t,i,!1)},l.prototype.once=function(e,t,i){return r(this,e,t,i,!0)},l.prototype.removeListener=function(e,t,n,s){var r=i?i+e:e;if(!this._events[r])return this;if(!t)return a(this,r),this;var l=this._events[r];if(l.fn)l.fn!==t||s&&!l.once||n&&l.context!==n||a(this,r);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[r]=1===d.length?d[0]:d:a(this,r)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=i?i+e:e,this._events[t]&&a(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 F,J=U.exports,j={};Object.defineProperty(j,"__esModule",{value:!0}),j.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 r=!0,a=!1,l=void 0;try{for(var o,d=n[Symbol.iterator]();!(r=(o=d.next()).done);r=!0){var c=o.value;t+=c.length}}catch(X){a=!0,l=X}finally{try{!r&&d.return&&d.return()}finally{if(a)throw l}}var u=new e(t),h=0,m=!0,p=!1,Z=void 0;try{for(var b,y=n[Symbol.iterator]();!(m=(b=y.next()).done);m=!0){var f=b.value;u.set(f,h),h+=f.length}}catch(X){p=!0,Z=X}finally{try{!m&&y.return&&y.return()}finally{if(p)throw Z}}return u};var P=((F=j)&&F.__esModule?F:{default:F}).default,E="video",D="audio",B="metadata",_="avc",Q="hevc",O="aac",A="g7110a",q="g7110m",$="LARGE_AV_SHIFT",ee="LARGE_VIDEO_GAP",te="LARGE_VIDEO_GAP_BETWEEN_CHUNK",ie="LARGE_AUDIO_GAP",ne="AUDIO_FILLED",se="AUDIO_DROPPED",re=function(){function e(){X(this,e),W(this,"id",1),W(this,"type",E),W(this,"codecType",_),W(this,"pid",-1),W(this,"hvcC",void 0),W(this,"codec",""),W(this,"timescale",0),W(this,"formatTimescale",0),W(this,"sequenceNumber",0),W(this,"baseMediaDecodeTime",0),W(this,"baseDts",0),W(this,"duration",0),W(this,"warnings",[]),W(this,"samples",[]),W(this,"pps",[]),W(this,"sps",[]),W(this,"vps",[]),W(this,"fpsNum",0),W(this,"fpsDen",0),W(this,"sarRatio",[]),W(this,"width",0),W(this,"height",0),W(this,"nalUnitSize",4),W(this,"present",!1),W(this,"isVideoEncryption",!1),W(this,"isAudioEncryption",!1),W(this,"isVideo",!0),W(this,"kid",null),W(this,"pssh",null),W(this,"ext",void 0)}return G(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:"exist",value:function(){return!!(this.pps.length&&this.sps.length&&this.codec)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isVideoEncryption}}]),e}(),ae=function(){function e(){X(this,e),W(this,"id",2),W(this,"type",D),W(this,"codecType",O),W(this,"pid",-1),W(this,"codec",""),W(this,"sequenceNumber",0),W(this,"sampleDuration",0),W(this,"timescale",0),W(this,"formatTimescale",0),W(this,"baseMediaDecodeTime",0),W(this,"duration",0),W(this,"warnings",[]),W(this,"samples",[]),W(this,"baseDts",0),W(this,"sampleSize",16),W(this,"sampleRate",0),W(this,"channelCount",0),W(this,"objectType",0),W(this,"sampleRateIndex",0),W(this,"config",[]),W(this,"present",!1),W(this,"isVideoEncryption",!1),W(this,"isAudioEncryption",!1),W(this,"kid",null),W(this,"ext",void 0)}return G(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.codecType===O)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isAudioEncryption}}]),e}(),le=function(){function e(t,i,n){X(this,e),W(this,"flag",{}),W(this,"keyframe",!1),W(this,"gopId",0),W(this,"duration",0),W(this,"size",0),W(this,"units",[]),W(this,"chromaFormat",420),this.originPts=this.pts=t,this.originDts=this.dts=i,n&&(this.units=n)}return G(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}(),oe=G((function e(t,i,n,s){X(this,e),W(this,"duration",1024),W(this,"flag",{dependsOn:2,isNonSyncSample:0}),W(this,"keyframe",!0),this.originPts=this.pts=this.dts=t,this.data=i,this.size=i.byteLength,this.sampleOffset=s,n&&(this.duration=n)})),de=G((function e(t,i){X(this,e),W(this,"time",0),this.data=t,this.originPts=this.pts=i})),ce=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i)}(de),ue=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i)}(de),he=function(){function e(){X(this,e),W(this,"id",3),W(this,"type",B),W(this,"timescale",0),W(this,"flvScriptSamples",[]),W(this,"seiSamples",[])}return G(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}(),me=function(){function e(t){if(X(this,e),W(this,"_bytesAvailable",void 0),W(this,"_bitsAvailable",0),W(this,"_word",0),!t)throw new Error("ExpGolomb data params is required");this._data=t,this._bytesAvailable=t.byteLength,this._bytesAvailable&&this._loadWord()}return G(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}(),pe=function(){function e(t){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]")}return G(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}();W(pe,"disabled",!0);var Ze=function(){function e(){X(this,e)}return G(e,null,[{key:"decode",value:function(t){for(var i=[],n=t,s=0,r=t.length;s<r;)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 a=(31&n[s])<<6|63&n[s+1];if(a>=128){i.push(String.fromCharCode(65535&a)),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}(),be="undefined"!=typeof window,ye=be&&navigator.userAgent.toLocaleLowerCase(),fe=be&&/^((?!chrome|android).)*safari/.test(ye),Xe=be&&ye.includes("firefox"),Le=be&&ye.includes("android");function Ge(){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 We=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 Se(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 xe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Se(e,t)*We+Se(e,t+4)}function ge(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 Ve(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 Ye(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)}))}var ke=function(){function e(){X(this,e)}return G(e,null,[{key:"parseAnnexB",value:function(e){for(var t=e.length,i=2,n=0;null!==e[i]&&void 0!==e[i]&&1!==e[i];)i++;if((n=++i+2)>=t)return[];for(var s=[];n<t;)switch(e[n]){case 0:if(0!==e[n-1]){n+=2;break}if(0!==e[n-2]){n++;break}i!==n-2&&s.push(e.subarray(i,n-2));do{n++}while(1!==e[n]&&n<t);n=(i=n+1)+2;break;case 1:if(0!==e[n-1]||0!==e[n-2]){n+=3;break}i!==n-2&&s.push(e.subarray(i,n-2)),n=(i=n+1)+2;break;default:n+=3}return i<t&&s.push(e.subarray(i)),s}},{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=[],r=0;r+t<n;)if(i=Se(e,r),3===t&&(i>>>=8),r+=t,i){if(r+i>n)break;s.push(e.subarray(r,r+i)),r+=i}return s}}},{key:"parseSEI",value:function(e,t){for(var i=e.length,n=t?2:1,s=0,r=0,a="";255===e[n];)s+=255,n++;for(s+=e[n++];255===e[n];)r+=255,n++;if(r+=e[n++],5===s&&i>n+16)for(var l=0;l<16;l++)a+=e[n].toString(16),n++;return{payload:e.subarray(n,n+r),type:s,size:r,uuid:a}}},{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,r=new Uint8Array(s),a=0;for(n=0;n<s;a++,n++)a===i[0]&&(a++,i.shift()),r[n]=e[a];return r}}]),e}(),Te=function(){function e(){X(this,e)}return G(e,null,[{key:"parseAVCDecoderConfigurationRecord",value:function(t){if(!(t.length<7)){for(var i,n,s=1+(3&t[4]),r=[],a=[],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,r.push(c),i||(i=e.parseSPS(ke.removeEPB(c)))}var u,h=t[l];l++;for(var m=0;m<h;m++)u=t[l]<<8|t[l+1],l+=2,u&&(a.push(t.subarray(l,l+u)),l+=u);return{sps:i,spsArr:r,ppsArr:a,nalUnitSize:s}}}},{key:"parseSPS",value:function(e){var t=new me(e);t.readUByte();var i=t.readUByte(),n=t.readUByte(),s=t.readUByte();t.skipUEG();var r=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 a=t.readUEG();if(a<=3&&(r=[0,420,422,444][a]),3===a&&t.skipBits(1),t.skipUEG(),t.skipUEG(),t.skipBits(1),t.readBool())for(var l=3!==a?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 h=t.readUEG(),m=t.readUEG(),p=t.readBits(1);0===p&&t.skipBits(1),t.skipBits(1);var Z,b,y,f,X,L=0,G=0,W=0,v=0;if(t.readBool()&&(L=t.readUEG(),G=t.readUEG(),W=t.readUEG(),v=t.readUEG()),t.readBool()){if(t.readBool())switch(t.readUByte()){case 1:Z=[1,1];break;case 2:Z=[12,11];break;case 3:Z=[10,11];break;case 4:Z=[16,11];break;case 5:Z=[40,33];break;case 6:Z=[24,11];break;case 7:Z=[20,11];break;case 8:Z=[32,11];break;case 9:Z=[80,33];break;case 10:Z=[18,11];break;case 11:Z=[15,11];break;case 12:Z=[64,33];break;case 13:Z=[160,99];break;case 14:Z=[4,3];break;case 15:Z=[3,2];break;case 16:Z=[2,1];break;case 255:Z=[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 S=t.readBits(32),x=t.readBits(32);b=t.readBool(),X=(y=x)/(f=2*S)}}return{codec:ge(e.subarray(1,4)),profileIdc:i,profileCompatibility:n,levelIdc:s,chromaFormat:r,width:Math.ceil(16*(h+1)-2*(L+G)),height:(2-p)*(m+1)*16-(p?2:4)*(W+v),sarRatio:Z,fpsNum:y,fpsDen:f,fps:X,fixedFrame:b}}}]),e}(),Re=function(){function e(){X(this,e)}return G(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 r=s,a=[],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),h=(1&t[s+2])<<2|(192&t[s+3])>>>6,m=e._getConfig(l,h,u),p=m.config,Z=m.codec,b=0,y=e.getFrameDuration(o);s+7<n;)if(255===t[s]&&240==(246&t[s+1])){if(n-s<(c=(3&t[s+3])<<11|t[s+4]<<3|(224&t[s+5])>>5))break;d=2*(1&~t[s+1]),a.push({pts:i+b*y,data:t.subarray(s+7+d,s+c)}),b++,s+=c}else s++;return{skip:r,remaining:s>=n?void 0:t.subarray(s),frames:a,samplingFrequencyIndex:l,sampleRate:o,objectType:u,channelCount:h,codec:Z,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,r=e.FREQ[n];if(r){var a=e._getConfig(n,s,i);return{samplingFrequencyIndex:n,sampleRate:r,objectType:i,channelCount:s,config:a.config,codec:a.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,r=[];return Xe?e>=6?(n=5,s=e-3):(n=2,s=e):Le?(n=2,s=e):(n=2===i||5===i?i:5,s=e,e>=6?s=e-3:1===t&&(n=2,s=e)),r[0]=n<<3,r[0]|=(14&e)>>1,r[1]=(1&e)<<7,r[1]|=t<<3,5===n&&(r[1]|=(14&s)>>1,r[2]=(1&s)<<7,r[2]|=8,r[3]=0),{config:r,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}();W(Re,"FREQ",[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350]);var we=function(){function e(){X(this,e)}return G(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,r,a,l,o=1+(3&t[21]),d=[],c=[],u=[],h=23,m=t[22],p=0;p<m;p++){r=63&t[h],a=t[h+1]<<8|t[h+2],h+=3;for(var Z=0;Z<a;Z++)if(l=t[h]<<8|t[h+1],h+=2,l){switch(r){case 32:var b=t.subarray(h,h+l);n||(n=e.parseVPS(ke.removeEPB(b),i)),u.push(b);break;case 33:var y=t.subarray(h,h+l);s||(s=e.parseSPS(ke.removeEPB(y),i)),d.push(y);break;case 34:c.push(t.subarray(h,h+l))}h+=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 me(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 me(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 r=i.chromaFormatIdc=n.readUEG(),a=420;r<=3&&(a=[0,420,422,444][r]);var l=0;3===r&&(l=n.readBits(1));var o,d,c,u,h=n.readUEG(),m=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 Z=1!==r&&2!==r||0!==l?1:2,b=1===r&&0===l?2:1;h-=Z*(d+o),m-=b*(u+c)}return{codec:"hev1.1.6.L93.B0",width:h,height:m,chromaFormat:a,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 r=[],a=[];if(t>e.bitsAvailable)throw new Error("maxSubLayersMinus inavlid size ".concat(t));for(var l=0;l<t;l++)r[l]=e.readBits(1),a[l]=e.readBits(1);t>0&&e.readBits(2*(8-t));for(var o=0;o<t;o++)0!==r[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!==a[o]&&e.readBits(8)}}]),e}(),Me=1e3,Ke=5e3,Ie=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 G(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,r=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(r,s),!n&&t&&(this._audioNextPts=this._videoNextDts=t);var a=this._baseDtsInited&&(this._videoTimestampBreak||!this.videoTrack.exist())&&(this._audioTimestampBreak||!this.audioTrack.exist());if(a&&this._resetBaseDtsWhenStreamBreaked(),this._fixAudio(r),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),r.samples.length&&(r.baseMediaDecodeTime=r.samples[0].pts*r.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],r=e.samples[i.length-1];n=Math.floor((r.dts-s.dts)/(i.length-1))}else n=this._lastVideoDuration||40;var a=i.pop();if(this._videoLastSample&&i.unshift(this._videoLastSample),this._videoLastSample=a,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 h;if(Math.abs(c.dts-this._lastVideoExceptionChunkFirstDtsDot)>5e3)this._lastVideoExceptionChunkFirstDtsDot=c.dts,e.warnings.push({type:te,nextDts:this._videoNextDts,firstSampleDts:c.dts,nextSampleDts:null===(h=i[1])||void 0===h?void 0:h.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 m=0;m<o;m++){var p=i[m].dts,Z=i[m+1];((d=m<o-1?Z.dts-p:a?a.dts-p:n)>1e3||d<0)&&(this._videoTimestampBreak++,Math.abs(p-this._lastVideoExceptionLargeGapDot)>5e3&&(this._lastVideoExceptionLargeGapDot=p,e.warnings.push({type:ee,time:p/e.timescale,dts:p,originDts:i[m].originDts,nextDts:this._videoNextDts,sampleDuration:d,refSampleDuration:n})),d=n),i[m].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,r=1/0;i.length&&(e.baseDts=s=i[0].pts),n.length&&(t.baseDts=r=n[0].dts),this._baseDts=Math.min(s,r);var a=r-s;return Number.isFinite(a)&&Math.abs(a)>500&&t.warnings.push({type:$,videoBaseDts:r,audioBasePts:s,baseDts:this._baseDts,delta:a}),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){e.sampleDuration||(e.sampleDuration=e.codecType===O?Re.getFrameDuration(e.timescale,i):this._getG711Duration(e));var n=e.sampleDuration,s=e.codecType===O?1024:n*e.timescale/1e3;if(void 0===this._audioNextPts){var r=t[0];this._audioNextPts=r.pts}for(var a=0;a<t.length;a++){var l=this._audioNextPts,o=t[a],d=o.pts-l;if(0===a&&this._audioTimestampBreak>=5&&this._keyFrameInNextChunk&&(l=this._audioNextPts=o.dts,d=0,this._audioTimestampBreak=0),!this._audioTimestampBreak&&d>=3*n&&d<=Me&&!fe){var c=this._getSilentFrame(e)||t[0].data.subarray(),u=Math.floor(d/n);Math.abs(o.pts-this._lastAudioExceptionGapDot)>Ke&&(this._lastAudioExceptionGapDot=o.pts,e.warnings.push({type:ne,pts:o.pts,originPts:o.originPts,count:u,nextPts:l,refSampleDuration:n}));for(var h=0;h<u;h++){var m=new oe(Math.floor(this._audioNextPts+n)-Math.floor(this._audioNextPts),c,s);m.originPts=Math.floor(this._baseDts+l),t.splice(a,0,m),this._audioNextPts+=n,a++}a--}else d<=-3*n&&d>=-1e3?(Math.abs(o.pts-this._lastAudioExceptionOverlapDot)>Ke&&(this._lastAudioExceptionOverlapDot=o.pts,e.warnings.push({type:se,pts:o.pts,originPts:o.originPts,nextPts:l,refSampleDuration:n})),t.splice(a,1),a--):(Math.abs(d)>Me&&(this._audioTimestampBreak++,Math.abs(o.pts-this._lastAudioExceptionLargeGapDot)>Ke&&(this._lastAudioExceptionLargeGapDot=o.pts,e.warnings.push({type:ie,time:o.pts/1e3,pts:o.pts,originPts:o.originPts,nextPts:l,sampleDuration:d,refSampleDuration:n}))),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===O?Re.getSilentFrame(e.codec,e.channelCount):new Uint8Array(8*e.sampleDuration*e.channelCount)}}]),e}(),Ce=function(){function e(){X(this,e)}return G(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,r=!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 a=e._parseString(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s));i=a.data,s+=a.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 h=e._parseObject(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s-u)),m=h.size,p=h.data;if(h.isEnd)break;i[p.name]=p.value,s+=m}if(s<=n-3)9===(16777215&t.getUint32(s-1))&&(s+=3);break;case 9:i=void 0,s=1,r=!0;break;case 10:i=[];var Z=t.getUint32(1);s+=4;for(var b=0;b<Z;b++){var y=e._parseValue(new DataView(t.buffer,t.byteOffset+s,t.byteLength-s)),f=y.data,X=y.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 G=t.getUint32(1);s+=4,i="",G>0&&(i=Ze.decode(new Uint8Array(t.buffer,t.byteOffset+s,G))),s+=G;break;default:s=n}return{data:i,size:s,isEnd:r}}},{key:"_parseString",value:function(e){var t=e.getUint16(0),i="";return t>0&&(i=Ze.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}(),He=new pe("FlvDemuxer"),Ne=function(){function e(t,i,n){X(this,e),W(this,"_headerParsed",!1),W(this,"_remainingData",null),W(this,"_gopId",0),W(this,"_needAddMetaBeforeKeyFrameNal",!0),this.videoTrack=t||new re,this.audioTrack=i||new ae,this.metadataTrack=n||new he,this._fixer=new Ie(this.videoTrack,this.audioTrack,this.metadataTrack)}return G(e,[{key:"demux",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=this.audioTrack,r=this.videoTrack,a=this.metadataTrack;if(!i&&n||(this._remainingData=null),i&&(this._headerParsed=!1),i?(r.reset(),s.reset(),a.reset()):(r.samples=[],s.samples=[],a.seiSamples=[],a.flvScriptSamples=[],r.warnings=[],s.warnings=[],this._remainingData&&(t=Ge(this._remainingData,t),this._remainingData=null)),!t.length)return{videoTrack:r,audioTrack:s,metadataTrack:a};var l=0;if(!this._headerParsed){if(!e.probe(t))throw new Error("Invalid flv file");s.present=(4&t[4])>>>2!=0,r.present=0!=(1&t[4]),this._headerParsed=!0,l=Se(t,5)+4}for(var o,d,c,u,h,m=t.length;l+15<m&&(o=t[l],!(l+15+(d=t[l+1]<<16|t[l+2]<<8|t[l+3])>m));)c=(t[l+7]<<24>>>0)+(t[l+4]<<16)+(t[l+5]<<8)+t[l+6],l+=11,u=t.subarray(l,l+d),8===o?this._parseAudio(u,c):9===o?this._parseVideo(u,c):18===o?this._parseScript(u,c):He.warn("Invalid tag type: ".concat(o)),(h=Se(t,l+=d))!==11+d&&He.warn("Invalid PrevTagSize ".concat(h," (").concat(11+d,")")),l+=4;return l<m&&(this._remainingData=t.subarray(l)),s.formatTimescale=r.formatTimescale=r.timescale=a.timescale=1e3,s.timescale=s.sampleRate||0,!s.exist()&&s.hasSample()&&s.reset(),!r.exist()&&r.hasSample()&&r.reset(),{videoTrack:r,audioTrack:s,metadataTrack:a}}},{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){return this.demux(e,t,i),this.fix(n,t,i)}},{key:"_parseAudio",value:function(t,i){if(t.length){var n=(240&t[0])>>>4,s=this.audioTrack;if(10!==n&&7!==n&&8!==n)return He.warn("Unsupported sound format: ".concat(n)),void s.reset();if(10!==n){var r=(12&t[0])>>2,a=(2&t[0])>>1,l=1&t[0];s.sampleRate=e.AUDIO_RATE[r],s.sampleSize=a?16:8,s.channelCount=l+1}10===n?this._parseAac(t,i):this._parseG711(t,i,n)}}},{key:"_parseG711",value:function(e,t,i){var n=this.audioTrack;n.codecType=7===i?A:q,n.sampleRate=8e3,n.codec=n.codecType,n.samples.push(new oe(t,e.subarray(1)))}},{key:"_parseAac",value:function(e,t){var i=this.audioTrack;if(i.codecType=O,0===e[1]){var n=Re.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(),He.warn("Cannot parse AudioSpecificConfig",e))}else if(1===e[1]){if(null==t)return;i.samples.push(new oe(t,e.subarray(2)))}else He.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],r=this.videoTrack;if(7!==s&&12!==s)return r.reset(),void He.warn("Unsupported codecId: ".concat(s));var a=12===s;r.codecType=a?Q:_;var l=e[1],o=(e[2]<<16|e[3]<<8|e[4])<<8>>8;if(0===l){var d=e.subarray(5),c=a?we.parseHEVCDecoderConfigurationRecord(d):Te.parseAVCDecoderConfigurationRecord(d);if(c){var u=c.hvcC,h=c.sps,m=c.ppsArr,p=c.spsArr,Z=c.vpsArr,b=c.nalUnitSize;u&&(r.hvcC=r.hvcC||u),h&&(r.codec=h.codec,r.width=h.width,r.height=h.height,r.sarRatio=h.sarRatio,r.fpsNum=h.fpsNum,r.fpsDen=h.fpsDen),p.length&&(r.sps=p),m.length&&(r.pps=m),Z&&Z.length&&(r.vps=Z),b&&(r.nalUnitSize=b)}else He.warn("Cannot parse ".concat(a?"HEVC":"AVC","DecoderConfigurationRecord"),e)}else if(1===l){var y=ke.parseAvcC(e.subarray(5),r.nalUnitSize);if((y=this._checkAddMetaNalToUnits(a,y,r))&&y.length){var f=new le(t+o,t,y);1===n&&f.setToKeyframe(),r.samples.push(f),y.forEach((function(e){var n=a?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(!a&&5!==n||a&&5===n)break;f.setToKeyframe();break;case 6:case 39:case 40:if(!a&&6!==n||a&&6===n)break;i.metadataTrack.seiSamples.push(new ue(ke.parseSEI(ke.removeEPB(e),a),t+o))}})),f.keyframe&&this._gopId++,f.gopId=this._gopId}else He.warn("Cannot parse NALUs",e)}else 2===l||He.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 ce(Ce.parse(e),t))}}],[{key:"probe",value:function(e){return 70===e[0]&&76===e[1]&&86===e[2]&&1===e[3]&&Se(e,5)>=9}}]),e}();W(Ne,"AUDIO_RATE",[5500,11e3,22e3,44e3]),new pe("TsDemuxer");var ze=function(){function e(){X(this,e)}return G(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 r=0,a="",l=0;t.length>7;){if(r=Se(t),a=String.fromCharCode.apply(null,t.subarray(4,8)),l=8,1===r?(r=xe(t,8),l+=8):r||(r=t.length),!i[0]||a===i[0]){var o=t.subarray(0,r);if(!(i.length<2))return e.findBox(o.subarray(l),i.slice(1),n+l);s.push({start:n,size:r,headerSize:l,type:a,data:o})}n+=r,t=t.subarray(r)}return s}},{key:"tfhd",value:function(e){return je(e,!0,(function(e,t){e.trackId=Se(t);var i=4,n=1&e.flags,s=2&e.flags,r=8&e.flags,a=16&e.flags,l=32&e.flags;n&&(i+=4,e.baseDataOffset=Se(t,i),i+=4),s&&(e.sampleDescriptionIndex=Se(t,i),i+=4),r&&(e.defaultSampleDuration=Se(t,i),i+=4),a&&(e.defaultSampleSize=Se(t,i),i+=4),l&&(e.defaultSampleFlags=Se(t,i))}))}},{key:"sidx",value:function(e){return je(e,!0,(function(e,t){var i=0;e.reference_ID=Se(t,i),i+=4,e.timescale=Se(t,i),i+=4,0===e.version?(e.earliest_presentation_time=Se(t,i),i+=4,e.first_offset=Se(t,i),i+=4):(e.earliest_presentation_time=xe(t,i),i+=8,e.first_offset=xe(t,i),i+=8),i+=2,e.references=[];var n=ve(t,i);i+=2;for(var s=0;s<n;s++){var r={};e.references.push(r);var a=Se(t,i);i+=4,r.reference_type=a>>31&1,r.referenced_size=2147483647&a,r.subsegment_duration=Se(t,i),a=Se(t,i+=4),i+=4,r.starts_with_SAP=a>>31&1,r.SAP_type=a>>28&7,r.SAP_delta_time=268435455&a}}))}},{key:"moov",value:function(t){return je(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 je(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Se(t,16),e.duration=xe(t,20),i+=28):(e.timescale=Se(t,8),e.duration=Se(t,12),i+=16),e.nextTrackId=Se(t,i+76)}))}},{key:"trak",value:function(t){return je(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 je(e,!0,(function(e,t){var i=0;1===e.version?(e.trackId=Se(t,16),e.duration=xe(t,24),i+=32):(e.trackId=Se(t,8),e.duration=Se(t,16),i+=20),e.width=Se(t,i+52),e.height=Se(t,i+56)}))}},{key:"mdia",value:function(t){return je(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 je(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Se(t,16),e.duration=xe(t,20),i+=28):(e.timescale=Se(t,8),e.duration=Se(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 je(e,!0,(function(e,t){0===e.version&&(e.handlerType=String.fromCharCode.apply(null,t.subarray(4,8)))}))}},{key:"minf",value:function(t){return je(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 je(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 je(e,!0,(function(e,t){e.balance=ve(t)}))}},{key:"stbl",value:function(t){return je(t,!1,(function(t,i,n){var s,r,a;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===(r=s.sinf)||void 0===r||null===(a=r.schi)||void 0===a?void 0:a.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 je(e,!0,(function(e,i){var n=0,s=Se(i,n);n+=4,e.samples=[];for(var r=0;r<s;r++){for(var a={InitializationVector:[]},l=0;l<t;l++)a.InitializationVector[l]=i[n+l];if(n+=t,2&e.flags){a.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=Se(i,n),n+=4,a.subsamples.push(c)}}e.samples.push(a)}}))}},{key:"pssh",value:function(e){return je(e,!0,(function(e,t){for(var i=[],n=[],s=0,r=0;r<16;r++)n.push(Ee(t[s+r]));if(s+=16,e.version>0){var a=Se(t,s);s+=4;for(var l=0;l<(""+a).length;l++)for(var o=0;o<16;o++){var d=t[s];s+=1,i.push(Ee(d))}}var c=Se(t,s);e.data_size=c,s+=4,e.kid=i,e.system_id=n,e.buffer=t}))}},{key:"stsd",value:function(t){return je(t,!0,(function(t,i,n){t.entryCount=Se(i),t.entries=e.findBox(i.subarray(4),[],n+4).map((function(t){switch(t.type){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 je(t,!1,(function(t,i,n){t.channelCount=ve(i,16),t.samplesize=ve(i,18),t.sampleRate=Se(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 je(t,!1,(function(t,i,n){t.width=ve(i,24),t.height=ve(i,26),t.horizresolution=Se(i,28),t.vertresolution=Se(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 je(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(Ee(t[i])),i+=1}))}},{key:"schi",value:function(t){return je(t,!1,(function(t,i,n){t.tenc=e.tenc(e.findBox(i,["tenc"],n)[0])}))}},{key:"sinf",value:function(t){return je(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 je(e,!1,(function(e,t){e.data_format="";for(var i=0;i<4;i++)e.data_format+=String.fromCharCode(t[i])}))}},{key:"avc1",value:function(t){return je(t,!1,(function(t,i,n){var s=Fe(t,i),r=i.subarray(s);n+=s,t.avcC=e.avcC(e.findBox(r,["avcC"],n)[0]),t.pasp=e.pasp(e.findBox(r,["pasp"],n)[0])}))}},{key:"avcC",value:function(e){return je(e,!1,(function(e,t){e.configurationVersion=t[0],e.AVCProfileIndication=t[1],e.profileCompatibility=t[2],e.AVCLevelIndication=t[3],e.codec=ge([t[1],t[2],t[3]]),e.lengthSizeMinusOne=3&t[4],e.spsLength=31&t[5],e.sps=[];for(var i=6,n=0;n<e.spsLength;n++){var s=ve(t,i);i+=2,e.sps.push(t.subarray(i,i+s)),i+=s}e.ppsLength=t[i],i+=1,e.pps=[];for(var r=0;r<e.ppsLength;r++){var a=ve(t,i);i+=2,e.pps.push(t.subarray(i,i+=a)),i+=a}}))}},{key:"hvc1",value:function(t){return je(t,!1,(function(t,i,n){var s=Fe(t,i),r=i.subarray(s);n+=s,t.hvcC=e.hvcC(e.findBox(r,["hvcC"],n)[0]),t.pasp=e.pasp(e.findBox(r,["pasp"],n)[0])}))}},{key:"hvcC",value:function(e){return je(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=Se(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,r=0,a=0,l=0,o=0;o<t.numOfArrays;o++){r=63&i[s],a=ve(i,s+1),s+=3;for(var d,c=[],u=0;u<a;u++)l=ve(i,s),s+=2,c.push(i.subarray(s,s+l)),s+=l;if(32===r)(d=t.vps).push.apply(d,c);else if(33===r){var h;(h=t.sps).push.apply(h,c)}else if(34===r){var m;(m=t.pps).push.apply(m,c)}}}))}},{key:"pasp",value:function(e){return je(e,!1,(function(e,t){e.hSpacing=Se(t),e.vSpacing=Se(t,4)}))}},{key:"mp4a",value:function(t){return je(t,!1,(function(t,i,n){var s=Je(t,i);t.esds=e.esds(e.findBox(i.subarray(s),["esds"],n+s)[0])}))}},{key:"esds",value:function(e){return je(e,!0,(function(e,t){e.codec="mp4a.";for(var i=0,n=0,s=0,r=0;t.length;){for(r=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===r)t=t.subarray(i+3);else{if(4!==r){if(5===r){var a=e.config=t.subarray(i,i+s),l=(248&a[0])>>3;return 31===l&&a.length>=2&&(l=32+((7&a[0])<<3)+((224&a[1])>>5)),e.objectType=l,e.codec+=l.toString(16),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 je(e,!1,(function(e,t){Je(e,t)}))}},{key:"stts",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push({count:Se(t,s),delta:Se(t,s+4)}),s+=8;e.entryCount=i,e.entries=n}))}},{key:"ctts",value:function(e){return je(e,!0,(function(e,t){var i=Se(t),n=[],s=4;if(1===e.version)for(var r=0;r<i;r++)n.push({count:Se(t,s),offset:Se(t,s+4)}),s+=8;else for(var a=0;a<i;a++)n.push({count:Se(t,s),offset:-(1+~Se(t,s+4))}),s+=8;e.entryCount=i,e.entries=n}))}},{key:"stsc",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push({firstChunk:Se(t,s),samplesPerChunk:Se(t,s+4),sampleDescriptionIndex:Se(t,s+8)}),s+=12;e.entryCount=i,e.entries=n}))}},{key:"stsz",value:function(e){return je(e,!0,(function(e,t){var i=Se(t),n=Se(t,4),s=[];if(!i)for(var r=8,a=0;a<n;a++)s.push(Se(t,r)),r+=4;e.sampleSize=i,e.sampleCount=n,e.entrySizes=s}))}},{key:"stco",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push(Se(t,s)),s+=4;e.entryCount=i,e.entries=n}))}},{key:"co64",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push(xe(t,s)),s+=8;e.entryCount=i,e.entries=n}))}},{key:"stss",value:function(e){return je(e,!0,(function(e,t){for(var i=Se(t),n=[],s=4,r=0;r<i;r++)n.push(Se(t,s)),s+=4;e.entryCount=i,e.entries=n}))}},{key:"moof",value:function(t){return je(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 je(e,!0,(function(e,t){e.sequenceNumber=Se(t)}))}},{key:"traf",value:function(t){return je(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 je(e,!0,(function(e,t){var i=e.version,n=e.flags,s=t.length,r=e.sampleCount=Se(t),a=4;if(s>a&&1&n&&(e.dataOffset=-(1+~Se(t,a)),a+=4),s>a&&4&n&&(e.firstSampleFlags=Se(t,a),a+=4),e.samples=[],s>a)for(var l,o=0;o<r;o++)l={},256&n&&(l.duration=Se(t,a),a+=4),512&n&&(l.size=Se(t,a),a+=4),1024&n&&(l.flags=Se(t,a),a+=4),2048&n&&(l.cts=i?-(1+~Se(t,a+4)):Se(t,a),a+=4),e.samples.push(l)}))}},{key:"tfdt",value:function(e){return je(e,!0,(function(e,t){1===e.version?e.baseMediaDecodeTime=xe(t):e.baseMediaDecodeTime=Se(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,r=e.trak;if(r&&r.length){var a=r.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=r.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(a&&t){var o,d,c,u,h,m,p,Z=t,b=null===(o=a.tkhd)||void 0===o?void 0:o.trackId;null!=b&&(Z.id=a.tkhd.trackId),Z.tkhdDuration=a.tkhd.duration,Z.mvhdDurtion=e.mvhd.duration,Z.mvhdTimecale=e.mvhd.timescale,Z.timescale=Z.formatTimescale=a.mdia.mdhd.timescale,Z.duration=a.mdia.mdhd.duration||Z.mvhdDurtion/Z.mvhdTimecale*Z.timescale;var y,f,X,L,G,W,v,S,x=a.mdia.minf.stbl.stsd.entries[0];if(Z.width=x.width,Z.height=x.height,x.pasp&&(Z.sarRatio=[x.pasp.hSpacing,x.pasp.vSpacing]),x.hvcC)Z.codecType=Q,Z.codec=x.hvcC.codec,Z.vps=x.hvcC.vps,Z.sps=x.hvcC.sps,Z.pps=x.hvcC.pps,Z.hvcC=x.hvcC.data;else{if(!x.avcC)throw new Error("unknown video stsd entry");Z.codec=x.avcC.codec,Z.sps=x.avcC.sps,Z.pps=x.avcC.pps}if(Z.present=!0,Z.ext={},Z.ext.stss=null===(d=a.mdia)||void 0===d||null===(c=d.minf)||void 0===c||null===(u=c.stbl)||void 0===u?void 0:u.stss,Z.ext.ctts=null===(h=a.mdia)||void 0===h||null===(m=h.minf)||void 0===m||null===(p=m.stbl)||void 0===p?void 0:p.ctts,x&&"encv"===x.type)Z.isVideoEncryption=!0,x.default_KID=null===(y=x.sinf)||void 0===y||null===(f=y.schi)||void 0===f?void 0:f.tenc.default_KID,x.default_IsEncrypted=null===(X=x.sinf)||void 0===X||null===(L=X.schi)||void 0===L?void 0:L.tenc.default_IsEncrypted,x.default_IV_size=null===(G=x.sinf)||void 0===G||null===(W=G.schi)||void 0===W?void 0:W.tenc.default_IV_size,Z.videoSenc=a.mdia.minf.stbl.senc&&a.mdia.minf.stbl.senc.samples,x.data_format=null===(v=x.sinf)||void 0===v||null===(S=v.frma)||void 0===S?void 0:S.data_format,Z.useEME=e.useEME,Z.kidValue=e.kidValue,Z.pssh=e.pssh,Z.encv=x}if(l&&i){var g,V,Y,k,T,R,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,U,F,J,j,P,E=l.mdia.minf.stbl.stsd.entries[0];switch(I.sampleSize=E.sampleSize,I.sampleRate=E.sampleRate,I.channelCount=E.channelCount,I.present=!0,E.type){case"alaw":I.codecType=I.codec=A,I.sampleRate=8e3;break;case"ulaw":I.codecType=I.codec=q,I.sampleRate=8e3;break;default:I.sampleDuration=Re.getFrameDuration(I.sampleRate,I.timescale),I.sampleRateIndex=Re.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=Re.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=Re.getRateIndexByRate(I.sampleRate),I.ext={},I.ext.stss=null===(k=l.mdia)||void 0===k||null===(T=k.minf)||void 0===T||null===(R=T.stbl)||void 0===R?void 0:R.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===(U=z.schi)||void 0===U?void 0:U.tenc.default_KID,E.default_IsEncrypted=null===(F=E.sinf)||void 0===F||null===(J=F.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,$=_||O?(_||O).join(""):null;t&&(t.kid=$),i&&(i.kid=$)}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 r=t.tfhd,a=t.tfdt,l=t.trun;if(r&&l){a&&(i&&i.id===r.trackId&&(i.baseMediaDecodeTime=a.baseMediaDecodeTime),n&&n.id===r.trackId&&(n.baseMediaDecodeTime=a.baseMediaDecodeTime));var o=r.defaultSampleSize||0,d=r.defaultSampleDuration||e.evaluateDefaultDuration(i,n,l.samples.length||l.sampleCount),c=l.dataOffset||0,u=0,h=-1;if(!l.samples.length&&l.sampleCount){s[r.trackId]=[];for(var m=0;m<l.sampleCount;m++)s[r.trackId].push({offset:c,dts:u,duration:d,size:o}),u+=d,c+=o}else s[r.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:h,keyframe:0===t||null!==e.flags&&void 0!==e.flags&&(65536&e.flags)>>>0!=65536}).keyframe&&(h++,e.gopId=h),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,r;if(i){var a,l,o=null===(a=i.mdia)||void 0===a||null===(l=a.minf)||void 0===l?void 0:l.stbl;if(!o)return;var d=o.stts,c=o.stsc,u=o.stsz,h=o.stco,m=o.stss,p=o.ctts;if(!(d&&c&&u&&h&&m))return;s=Ue(d,c,u,h,p,m)}if(n){var Z,b,y,f=null===(Z=n.mdia)||void 0===Z||null===(b=Z.minf)||void 0===b?void 0:b.stbl;if(!f)return;var X=null===(y=n.mdia.mdhd)||void 0===y?void 0:y.timescale,L=f.stts,G=f.stsc,W=f.stsz,v=f.stco;if(!(X&&L&&G&&W&&v))return;r=Ue(L,G,W,v)}return{videoSamples:s,audioSamples:r}}}}}]),e}();function Ue(e,t,i,n,s,r){var a,l,o,d=[],c=null==s?void 0:s.entries,u=t.entries,h=n.entries,m=i.entrySizes,p=null==r?void 0:r.entries;p&&(a={},p.forEach((function(e){a[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 Z=-1,b=0,y=0,f=0,X=0,L=0,G=u[0].samplesPerChunk,W=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:m[y]||i.sampleSize,offset:h[f]+L,index:y},p&&(o.keyframe=a[y],o.keyframe&&Z++,o.gopId=Z),l&&y<l.length&&(o.pts=o.dts+l[y]),d.push(o),b+=n,++y<G?L+=o.size:(f++,L=0,f>=W&&(X++,W=u[X+1]?u[X+1].firstChunk-1:1/0),G+=u[X].samplesPerChunk)})),d}function Fe(e,t){return e.dataReferenceIndex=ve(t,6),e.width=ve(t,24),e.height=ve(t,26),e.horizresolution=Se(t,28),e.vertresolution=Se(t,32),e.frameCount=ve(t,40),e.depth=ve(t,74),78}function Je(e,t){return e.dataReferenceIndex=ve(t,6),e.channelCount=ve(t,16),e.sampleSize=ve(t,18),e.sampleRate=Se(t,24)/65536,28}function je(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 Pe=function(e,t,i){for(var n=String(i),s=t>>0,r=Math.ceil(s/n.length),a=[],l=String(e);r--;)a.push(n);return a.join("").substring(0,s-l.length)+l},Ee=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(Pe(Number(t).toString(16),2,0))})),e[0]};function De(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 r=new e(t),a=0;return n.forEach((function(e){r.set(e,a),a+=e.length})),r}var Be=function(){function e(){X(this,e),this.buffer=new Uint8Array(0)}return G(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=De(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}(),_e=Math.pow(2,32)-1,Qe=function(){function e(){X(this,e)}return G(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),r=new Uint8Array(s);r[0]=s>>24&255,r[1]=s>>16&255,r[2]=s>>8&255,r[3]=255&s,r.set(e,4);var a=8;return i.forEach((function(e){r.set(e,a),a+=e.byteLength})),r}},{key:"ftyp",value:function(t){return t.find((function(e){return e.type===E&&e.codecType===Q}))?e.FTYPHEV1:e.FTYPAVC1}},{key:"initSegment",value:function(t){return Ge(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],Ye(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,r=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 r}},{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):e.mp4a(t):t.useEME&&t.encv?e.encv(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]),r=e.esds(t.config),a=e.sinf(t.enca);return e.box(e.types.enca,s,r,a)}},{key:"encv",value:function(t){var i,n,s=t.sps.length>0?t.sps[0]:[],r=t.pps.length>0?t.pps[0]:[],a=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,a>>8&255,255&a,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,r.length>>>8&255,255&r.length])).concat.apply(i,C(r))),h=new Uint8Array([0,0,88,57,0,15,200,192,0,4,86,72]),m=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,h),m,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(Ye(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]),r=e.schi(t);return e.box(e.types.sinf,i,e.box(e.types.frma,n),e.box(e.types.schm,s),r)}},{key:"avc1hev1",value:function(t){var i=t.codecType===Q,n=i?e.types.hvc1:e.types.avc1,s=i?e.hvcC(t):e.avcC(t),r=[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?r.push(e.box(e.types.fiel,new Uint8Array([1,0]))):t.sarRatio&&t.sarRatio.length>1&&r.push(e.pasp(t.sarRatio)),e.box.apply(e,[n].concat(r))}},{key:"avcC",value:function(t){var i,n,s,r=[],a=[];return t.sps.forEach((function(e){s=e.byteLength,r.push(s>>>8&255),r.push(255&s),r.push.apply(r,C(e))})),t.pps.forEach((function(e){s=e.byteLength,a.push(s>>>8&255),a.push(255&s),a.push.apply(a,C(e))})),e.box(e.types.avcC,new Uint8Array((i=(n=[1,r[3],r[4],r[5],255,224|t.sps.length]).concat.apply(n,r).concat([t.pps.length])).concat.apply(i,a)))}},{key:"hvcC",value:function(t){var i=t.hvcC;if(i instanceof ArrayBuffer||i instanceof Uint8Array)return i;var n,s=t.vps,r=t.sps,a=t.pps;if(i){var l=i.generalProfileCompatibilityFlags,o=i.generalConstraintIndicatorFlags,d=(s.length&&1)+(r.length&&1)+(a.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)),r.length&&(n.push(161,0,r.length),r.forEach(c)),a.length&&(n.push(162,0,a.length),a.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:"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 r=e.saiz(t),a=e.saio(t),l=e.trun1(t),o=e.senc(t);return e.box(e.types.traf,i,n,r,a,l,o)}if(t.isAudioEncryption){var d=e.sbgp(),c=e.saiz(t),u=e.saio(t),h=e.senc(t),m=e.trun1(t);return e.box(e.types.traf,i,n,d,c,u,h,m)}var p=e.sbgp(),Z=e.trun1(t);return e.box(e.types.traf,i,n,p,Z)}if(t.isVideo){var b=e.trun1(t);return e.box(e.types.traf,i,n,b)}var y=e.sbgp(),f=e.saiz(t),X=e.saio(t),L=e.senc(t),G=e.trun1(t);return e.box(e.types.traf,i,n,y,f,X,L,G)}var W=e.sdtp(t);return e.box(e.types.traf,i,n,W,e.trun(t.samples,W.byteLength+76))}},{key:"sdtp",value:function(t){var i=new Be;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 Be,n=Be.writeUint32(t.samples.length),s=null;if(t.isVideo){var r=t.videoSencLength;s=Be.writeUint32(16*t.samples.length+r+149),!t.isVideoEncryption&&t.isAudioEncryption&&(s=Be.writeUint32(16*t.samples.length+92))}else{var a=12*t.samples.length+124;t.isAudioEncryption&&(a=12*t.samples.length+8*t.audioSenc.length+177),s=Be.writeUint32(a)}return t.samples.forEach((function(e){i.write(Be.writeUint32(e.duration)),i.write(Be.writeUint32(e.size)),i.write(Be.writeUint32(e.keyframe?33554432:65536)),t.isVideo&&i.write(Be.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 Be,n=t.samples.length,s=t.isVideo?16:8,r=t.isVideo?2:0,a=[],l=0;return t.isVideo?(a=t.videoSenc,l=t.videoSencLength):a=t.audioSenc,l=l||s*n,i.write(Be.writeUint32(16+l),e.types.senc,this.extension(0,r)),i.write(Be.writeUint32(n)),a.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(Be.writeUint16(e.subsamples.length)),e.subsamples.forEach((function(e){i.write(Be.writeUint16(e.BytesOfClearData)),i.write(Be.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/(_e+1)),s=Math.floor(i%(_e+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 r=new Uint8Array(s);r.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 a=0;a<n;a++){var l=t[a],o=l.duration,d=l.size,c=l.flag,u=void 0===c?{}:c,h=l.cts,m=void 0===h?0:h;r.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,m>>>24&255,m>>>16&255,m>>>8&255,255&m],12+16*a)}return e.box(e.types.trun,r)}},{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,Ge(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,r=e.sampleDescIndex;n.set([t>>24,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,r>>24,r>>16&255,r>>8&255,255&r],s),s+=12})),e.box(e.types.stsc,Ge(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,Ge(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,Ge(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,Ge(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,Ge(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,r=t.samples[0].sampleOffset*n,a=8;t.samples.forEach((function(e){a+=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=a+141+16*t.samples.length+d,t.useEME&&t.isAudioEncryption&&!t.isVideoEncryption&&(l=a+16*t.samples.length+84)}else l=a+116+12*t.samples.length,t.useEME&&t.isAudioEncryption&&(l=a+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,r>>24&255,r>>16&255,r>>8&255,255&r,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}();W(Qe,"types",["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))),W(Qe,"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])}),W(Qe,"FTYPAVC1",Qe.box(Qe.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]))),W(Qe,"FTYPHEV1",Qe.box(Qe.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,104,101,118,49]))),W(Qe,"DINF",Qe.box(Qe.types.dinf,Qe.box(Qe.types.dref,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1])))),W(Qe,"VMHD",Qe.box(Qe.types.vmhd,new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0]))),W(Qe,"SMHD",Qe.box(Qe.types.smhd,new Uint8Array([0,0,0,0,0,0,0,0]))),W(Qe,"StblTable",new Uint8Array([0,0,0,0,0,0,0,0])),W(Qe,"STTS",Qe.box(Qe.types.stts,Qe.StblTable)),W(Qe,"STSC",Qe.box(Qe.types.stsc,Qe.StblTable)),W(Qe,"STSZ",Qe.box(Qe.types.stsz,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]))),W(Qe,"STCO",Qe.box(Qe.types.stco,Qe.StblTable));var Oe=function(){function e(t,i){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]"),e.disabled=i}return G(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}();W(Oe,"disabled",!0);for(var Ae=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 Oe("FMP4Remuxer",!n||!n.openLog||!n.openLog)}return G(e,[{key:"remux",value:function(){var e,t,i,n,s,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=this.videoTrack,o=this.audioTrack,d=l.exist(),c=o.exist(),u=[];return r&&(a&&a.initMerge?(d&&u.push(this.videoTrack),c&&u.push(this.audioTrack),i=Qe.initSegment(u)):(d&&(e=Qe.initSegment([this.videoTrack])),c&&(t=Qe.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=0;t.forEach((function(e){i+=e.units.reduce((function(e,t){return e+t.byteLength}),0),i+=4*e.units.length}));for(var n,s=new Uint8Array(i),r=new DataView(s.buffer),a=function(e,i){i=t[l];var a=0;i.units.forEach((function(t){r.setUint32(e,t.byteLength),e+=4,s.set(t,e),e+=t.byteLength,a+=4+t.byteLength})),i.size=a,d=e,n=i},l=0,o=t.length,d=0;l<o;l++)a(d,n);var c=Qe.mdat(s);return Ge(Qe.moof([e]),c)}},{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=Qe.mdat(t);return Ge(Qe.moof([e]),i)}},{key:"reset",value:function(){this.videoTrack.reset(),this.audioTrack.reset()}}]),e}(),qe=function(){function e(){X(this,e)}return G(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}(),$e=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 r=n;if(r instanceof ArrayBuffer&&(r=new Uint8Array(r)),(r instanceof Int8Array||r instanceof Uint8ClampedArray||r instanceof Int16Array||r instanceof Uint16Array||r instanceof Int32Array||r instanceof Uint32Array||r instanceof Float32Array||r instanceof Float64Array)&&(r=new Uint8Array(r.buffer,r.byteOffset,r.byteLength)),r instanceof Uint8Array){for(var a=r.byteLength,l=[],o=0;o<a;o+=1)l[o>>>2]|=r[o]<<24-o%4*8;e.words=l,e.sigBytes=a}else e.words=n,e.sigBytes=s;return e}return G(i,[{key:"toString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:et;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 r=0;r<s;r+=1){var a=i[r>>>2]>>>24-r%4*8&255;t[n+r>>>2]|=a<<24-(n+r)%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(S(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)}},r=0;r<e;r+=4){var a=s(4294967296*(t||Math.random()));t=987654071*a(),n.push(4294967296*a()|0)}return new i(n,e)}}]),i}(qe),et={stringify:function(e){for(var t=e.words,i=e.sigBytes,n=[],s=0;s<i;s+=1){var r=t[s>>>2]>>>24-s%4*8&255;n.push((r>>>4).toString(16)),n.push((15&r).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 $e(i,t/2)}},tt=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 $e(i,t)},it=function(e){return tt(unescape(encodeURIComponent(e)))},nt=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 G(i,[{key:"reset",value:function(){this._data=new $e,this._nDataBytes=0}},{key:"_append",value:function(e){var t=e;"string"==typeof t&&(t=it(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,r=i.sigBytes,a=r/(4*n),l=(a=e?Math.ceil(a):Math.max((0|a)-this._minBufferSize,0))*n,o=Math.min(4*l,r);if(l){for(var d=0;d<l;d+=n)this._doProcessBlock(s,d);t=s.splice(0,l),i.sigBytes-=o}return new $e(t,o)}},{key:"clone",value:function(){var e=K(S(i.prototype),"clone",this).call(this);return e._data=this._data.clone(),e}}]),i}(qe),st=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 qe,e),n.reset(),n}return G(i,[{key:"reset",value:function(){K(S(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 rt(e,i).finalize(t)}}}]),i}(nt),rt=function(e){v(i,e);var t=w(i);function i(e,n){var s;X(this,i),s=t.call(this);var r=new e;s._hasher=r;var a=n;"string"==typeof a&&(a=it(a));var l=r.blockSize,o=4*l;a.sigBytes>o&&(a=r.finalize(n)),a.clamp();var d=a.clone();s._oKey=d;var c=a.clone();s._iKey=c;for(var u=d.words,h=c.words,m=0;m<l;m+=1)u[m]^=1549556828,h[m]^=909522486;return d.sigBytes=o,c.sigBytes=o,s.reset(),s}return G(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}(qe),at={stringify:function(e){var t=e.words,i=e.sigBytes,n=this._map;e.clamp();for(var s=[],r=0;r<i;r+=3)for(var a=(t[r>>>2]>>>24-r%4*8&255)<<16|(t[r+1>>>2]>>>24-(r+1)%4*8&255)<<8|t[r+2>>>2]>>>24-(r+2)%4*8&255,l=0;l<4&&r+.75*l<i;l+=1)s.push(n.charAt(a>>>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 r=i.charAt(64);if(r){var a=e.indexOf(r);-1!==a&&(t=a)}return function(e,t,i){for(var n=[],s=0,r=0;r<t;r+=1)if(r%4){var a=i[e.charCodeAt(r-1)]<<r%4*2|i[e.charCodeAt(r)]>>>6-r%4*2;n[s>>>2]|=a<<24-s%4*8,s+=1}return $e.create(n,s)}(e,t,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},lt=[],ot=0;ot<64;ot+=1)lt[ot]=4294967296*Math.abs(Math.sin(ot+1))|0;var dt=function(e,t,i,n,s,r,a){var l=e+(t&i|~t&n)+s+a;return(l<<r|l>>>32-r)+t},ct=function(e,t,i,n,s,r,a){var l=e+(t&n|i&~n)+s+a;return(l<<r|l>>>32-r)+t},ut=function(e,t,i,n,s,r,a){var l=e+(t^i^n)+s+a;return(l<<r|l>>>32-r)+t},ht=function(e,t,i,n,s,r,a){var l=e+(i^(t|~n))+s+a;return(l<<r|l>>>32-r)+t},mt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,[{key:"_doReset",value:function(){this._hash=new $e([1732584193,4023233417,2562383102,271733878])}},{key:"_doProcessBlock",value:function(e,t){for(var i=e,n=0;n<16;n+=1){var s=t+n,r=e[s];i[s]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,l=i[t+0],o=i[t+1],d=i[t+2],c=i[t+3],u=i[t+4],h=i[t+5],m=i[t+6],p=i[t+7],Z=i[t+8],b=i[t+9],y=i[t+10],f=i[t+11],X=i[t+12],L=i[t+13],G=i[t+14],W=i[t+15],v=a[0],S=a[1],x=a[2],g=a[3];v=dt(v,S,x,g,l,7,lt[0]),g=dt(g,v,S,x,o,12,lt[1]),x=dt(x,g,v,S,d,17,lt[2]),S=dt(S,x,g,v,c,22,lt[3]),v=dt(v,S,x,g,u,7,lt[4]),g=dt(g,v,S,x,h,12,lt[5]),x=dt(x,g,v,S,m,17,lt[6]),S=dt(S,x,g,v,p,22,lt[7]),v=dt(v,S,x,g,Z,7,lt[8]),g=dt(g,v,S,x,b,12,lt[9]),x=dt(x,g,v,S,y,17,lt[10]),S=dt(S,x,g,v,f,22,lt[11]),v=dt(v,S,x,g,X,7,lt[12]),g=dt(g,v,S,x,L,12,lt[13]),x=dt(x,g,v,S,G,17,lt[14]),S=dt(S,x,g,v,W,22,lt[15]),v=ct(v,S,x,g,o,5,lt[16]),g=ct(g,v,S,x,m,9,lt[17]),x=ct(x,g,v,S,f,14,lt[18]),S=ct(S,x,g,v,l,20,lt[19]),v=ct(v,S,x,g,h,5,lt[20]),g=ct(g,v,S,x,y,9,lt[21]),x=ct(x,g,v,S,W,14,lt[22]),S=ct(S,x,g,v,u,20,lt[23]),v=ct(v,S,x,g,b,5,lt[24]),g=ct(g,v,S,x,G,9,lt[25]),x=ct(x,g,v,S,c,14,lt[26]),S=ct(S,x,g,v,Z,20,lt[27]),v=ct(v,S,x,g,L,5,lt[28]),g=ct(g,v,S,x,d,9,lt[29]),x=ct(x,g,v,S,p,14,lt[30]),S=ct(S,x,g,v,X,20,lt[31]),v=ut(v,S,x,g,h,4,lt[32]),g=ut(g,v,S,x,Z,11,lt[33]),x=ut(x,g,v,S,f,16,lt[34]),S=ut(S,x,g,v,G,23,lt[35]),v=ut(v,S,x,g,o,4,lt[36]),g=ut(g,v,S,x,u,11,lt[37]),x=ut(x,g,v,S,p,16,lt[38]),S=ut(S,x,g,v,y,23,lt[39]),v=ut(v,S,x,g,L,4,lt[40]),g=ut(g,v,S,x,l,11,lt[41]),x=ut(x,g,v,S,c,16,lt[42]),S=ut(S,x,g,v,m,23,lt[43]),v=ut(v,S,x,g,b,4,lt[44]),g=ut(g,v,S,x,X,11,lt[45]),x=ut(x,g,v,S,W,16,lt[46]),S=ut(S,x,g,v,d,23,lt[47]),v=ht(v,S,x,g,l,6,lt[48]),g=ht(g,v,S,x,p,10,lt[49]),x=ht(x,g,v,S,G,15,lt[50]),S=ht(S,x,g,v,h,21,lt[51]),v=ht(v,S,x,g,X,6,lt[52]),g=ht(g,v,S,x,c,10,lt[53]),x=ht(x,g,v,S,y,15,lt[54]),S=ht(S,x,g,v,o,21,lt[55]),v=ht(v,S,x,g,Z,6,lt[56]),g=ht(g,v,S,x,W,10,lt[57]),x=ht(x,g,v,S,m,15,lt[58]),S=ht(S,x,g,v,L,21,lt[59]),v=ht(v,S,x,g,u,6,lt[60]),g=ht(g,v,S,x,f,10,lt[61]),x=ht(x,g,v,S,d,15,lt[62]),S=ht(S,x,g,v,b,21,lt[63]),a[0]=a[0]+v|0,a[1]=a[1]+S|0,a[2]=a[2]+x|0,a[3]=a[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),r=i;t[15+(n+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),t[14+(n+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),e.sigBytes=4*(t.length+1),this._process();for(var a=this._hash,l=a.words,o=0;o<4;o+=1){var d=l[o];l[o]=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8)}return a}},{key:"clone",value:function(){var e=K(S(i.prototype),"clone",this).call(this);return e._hash=this._hash.clone(),e}}]),i}(st);st._createHelper(mt),st._createHmacHelper(mt);var pt=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 qe,{keySize:4,hasher:mt,iterations:1},e),n}return G(i,[{key:"compute",value:function(e,t){for(var i,n=this.cfg,s=n.hasher.create(),r=$e.create(),a=r.words,l=n.keySize,o=n.iterations;a.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();r.concat(i)}return r.sigBytes=4*l,r}}]),i}(qe),Zt=function(e){v(i,e);var t=w(i);function i(e,n,s){var r;return X(this,i),(r=t.call(this)).cfg=Object.assign(new qe,s),r._xformMode=e,r._key=n,r.reset(),r}return G(i,[{key:"reset",value:function(){K(S(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?xt:vt};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}(nt);Zt._ENC_XFORM_MODE=1,Zt._DEC_XFORM_MODE=2,Zt.keySize=4,Zt.ivSize=4;var bt=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 G(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}(qe);function yt(e,t,i){var n,s=e,r=this._iv;r?(n=r,this._iv=void 0):n=this._prevBlock;for(var a=0;a<i;a+=1)s[t+a]^=n[a]}var ft=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i)}(bt);ft.Encryptor=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize;yt.call(this,e,t,n),i.encryptBlock(e,t),this._prevBlock=e.slice(t,t+n)}}]),i}(ft),ft.Decryptor=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize,s=e.slice(t,t+n);i.decryptBlock(e,t),yt.call(this,e,t,n),this._prevBlock=s}}]),i}(ft);var Xt={pad:function(e,t){for(var i=4*t,n=i-e.sigBytes%i,s=n<<24|n<<16|n<<8|n,r=[],a=0;a<n;a+=4)r.push(s);var l=$e.create(r,n);e.concat(l)},unpad:function(e){var t=e,i=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=i}},Lt=function(e){v(i,e);var t=w(i);function i(e,n,s){var r;return X(this,i),(r=t.call(this,e,n,Object.assign({mode:ft,padding:Xt},s))).blockSize=4,r}return G(i,[{key:"reset",value:function(){var e;K(S(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}(Zt),Gt=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 G(i,[{key:"toString",value:function(e){return(e||this.formatter).stringify(this)}}]),i}(qe),Wt={stringify:function(e){var t=e.ciphertext,i=e.salt;return(i?$e.create([1398893684,1701076831]).concat(i).concat(t):t).toString(at)},parse:function(e){var t,i=at.parse(e),n=i.words;return 1398893684===n[0]&&1701076831===n[1]&&(t=$e.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),Gt.create({ciphertext:i,salt:t})}},vt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,null,[{key:"encrypt",value:function(e,t,i,n){var s=Object.assign(new qe,this.cfg,n),r=e.createEncryptor(i,s),a=r.finalize(t),l=r.cfg;return Gt.create({ciphertext:a,key:i,iv:l.iv,algorithm:e,mode:l.mode,padding:l.padding,blockSize:r.blockSize,formatter:s.format})}},{key:"decrypt",value:function(e,t,i,n){var s=t,r=Object.assign(new qe,this.cfg,n);return s=this._parse(s,r.format),e.createDecryptor(i,r).finalize(s.ciphertext)}},{key:"_parse",value:function(e,t){return"string"==typeof e?t.parse(e,this):e}}]),i}(qe);vt.cfg=Object.assign(new qe,{format:Wt});var St={execute:function(e,t,i,n){var s=n;s||(s=$e.random(8));var r=pt.create({keySize:t+i}).compute(e,s),a=$e.create(r.words.slice(t),4*i);return r.sigBytes=4*t,Gt.create({key:r,iv:a,salt:s})}},xt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,null,[{key:"encrypt",value:function(e,t,i,n){var s=Object.assign(new qe,this.cfg,n),r=s.kdf.execute(i,e.keySize,e.ivSize);s.iv=r.iv;var a=vt.encrypt.call(this,e,t,r.key,s);return a.mixIn(r),a}},{key:"decrypt",value:function(e,t,i,n){var s=t,r=Object.assign(new qe,this.cfg,n);s=this._parse(s,r.format);var a=r.kdf.execute(i,e.keySize,e.ivSize,s.salt);return r.iv=a.iv,vt.decrypt.call(this,e,s,a.key,r)}}]),i}(vt);xt.cfg=Object.assign(vt.cfg,{kdf:St});for(var gt=[],Vt=[],Yt=[],kt=[],Tt=[],Rt=[],wt=[],Mt=[],Kt=[],It=[],Ct=[],Ht=0;Ht<256;Ht+=1)Ct[Ht]=Ht<128?Ht<<1:Ht<<1^283;for(var Nt=0,zt=0,Ut=0;Ut<256;Ut+=1){var Ft=zt^zt<<1^zt<<2^zt<<3^zt<<4;Ft=Ft>>>8^255&Ft^99,gt[Nt]=Ft,Vt[Ft]=Nt;var Jt=Ct[Nt],jt=Ct[Jt],Pt=Ct[jt],Et=257*Ct[Ft]^16843008*Ft;Yt[Nt]=Et<<24|Et>>>8,kt[Nt]=Et<<16|Et>>>16,Tt[Nt]=Et<<8|Et>>>24,Rt[Nt]=Et,Et=16843009*Pt^65537*jt^257*Jt^16843008*Nt,wt[Ft]=Et<<24|Et>>>8,Mt[Ft]=Et<<16|Et>>>16,Kt[Ft]=Et<<8|Et>>>24,It[Ft]=Et,Nt?(Nt=Jt^Ct[Ct[Ct[Pt^Jt]]],zt^=Ct[Ct[zt]]):Nt=zt=1}var Dt=[0,1,2,4,8,16,32,64,128,27,54],Bt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(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 r=this._keySchedule,a=0;a<s;a+=1)a<n?r[a]=i[a]:(e=r[a-1],a%n?n>6&&a%n==4&&(e=gt[e>>>24]<<24|gt[e>>>16&255]<<16|gt[e>>>8&255]<<8|gt[255&e]):(e=gt[(e=e<<8|e>>>24)>>>24]<<24|gt[e>>>16&255]<<16|gt[e>>>8&255]<<8|gt[255&e],e^=Dt[a/n|0]<<24),r[a]=r[a-n]^e);this._invKeySchedule=[];for(var l=this._invKeySchedule,o=0;o<s;o+=1){var d=s-o;e=o%4?r[d]:r[d-4],l[o]=o<4||d<=4?e:wt[gt[e>>>24]]^Mt[gt[e>>>16&255]]^Kt[gt[e>>>8&255]]^It[gt[255&e]]}}}},{key:"encryptBlock",value:function(e,t){this._doCryptBlock(e,t,this._keySchedule,Yt,kt,Tt,Rt,gt)}},{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,wt,Mt,Kt,It,Vt),n=i[t+1],i[t+1]=i[t+3],i[t+3]=n}},{key:"_doCryptBlock",value:function(e,t,i,n,s,r,a,l){for(var o=e,d=this._nRounds,c=o[t]^i[0],u=o[t+1]^i[1],h=o[t+2]^i[2],m=o[t+3]^i[3],p=4,Z=1;Z<d;Z+=1){var b=n[c>>>24]^s[u>>>16&255]^r[h>>>8&255]^a[255&m]^i[p];p+=1;var y=n[u>>>24]^s[h>>>16&255]^r[m>>>8&255]^a[255&c]^i[p];p+=1;var f=n[h>>>24]^s[m>>>16&255]^r[c>>>8&255]^a[255&u]^i[p];p+=1;var X=n[m>>>24]^s[c>>>16&255]^r[u>>>8&255]^a[255&h]^i[p];p+=1,c=b,u=y,h=f,m=X}var L=(l[c>>>24]<<24|l[u>>>16&255]<<16|l[h>>>8&255]<<8|l[255&m])^i[p];p+=1;var G=(l[u>>>24]<<24|l[h>>>16&255]<<16|l[m>>>8&255]<<8|l[255&c])^i[p];p+=1;var W=(l[h>>>24]<<24|l[m>>>16&255]<<16|l[c>>>8&255]<<8|l[255&u])^i[p];p+=1;var v=(l[m>>>24]<<24|l[c>>>16&255]<<16|l[u>>>8&255]<<8|l[255&h])^i[p];p+=1,o[t]=L,o[t+1]=G,o[t+2]=W,o[t+3]=v}}]),i}(Lt);Bt.keySize=8;var _t=Lt._createHelper(Bt),Qt=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i)}(bt);Qt.Encryptor=function(e){v(i,e);var t=w(i);function i(){return X(this,i),t.apply(this,arguments)}return G(i,[{key:"processBlock",value:function(e,t){var i=e,n=this._cipher,s=n.blockSize,r=this._iv,a=this._counter;r&&(this._counter=r.slice(0),a=this._counter,this._iv=void 0);var l=a.slice(0);n.encryptBlock(l,0),a[s-1]=a[s-1]+1|0;for(var o=0;o<s;o+=1)i[t+o]^=l[o]}}]),i}(Qt),Qt.Decryptor=Qt.Encryptor;var Ot={pad:function(){},unpad:function(){}},At={decryptWordArray:function(e,t,i){var n=et.parse(t),s=et.parse(Ve(i)),r=$e.create(new Uint8Array(e)),a=_t.decrypt(Gt.create({ciphertext:r}),n,{iv:s,mode:Qt,padding:Ot});return At.wordArrayToUint8Array(a)},wordArrayToUint8Array:function(e){for(var t=e.sigBytes,i=e.words,n=new Uint8Array(t),s=0,r=0;s!==t;){var a=i[r++];if(n[s++]=(4278190080&a)>>>24,s===t)break;if(n[s++]=(16711680&a)>>>16,s===t)break;if(n[s++]=(65280&a)>>>8,s===t)break;n[s++]=255&a}return n},decoderAESCTRData:function(e,t,i){if(e.videoSenc){var n=e.kidValue,s=e.videoSenc;e.samples.forEach((function(t,r){var a=s[r],l=t.data,o=[],d=[],c=a.InitializationVector;if(a.subsamples&&a.subsamples.length)a.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 h=new Be;h.write.apply(h,d);var m=i?i(h.buffer,n,c):At.decryptWordArray(h.buffer,n,c),p=new Be;o.forEach((function(e,t){var i=d[t].length,n=m.slice(0,i);p.write(e),p.write(n),m=m.slice(i)})),e.samples[r].data=p.buffer}))}if(t.audioSenc){var r=t.kidValue,a=t.audioSenc;t.samples.forEach((function(e,n){var s=a[n],l=i?i(e.data,r,s.InitializationVector):At.decryptWordArray(e.data,r,s.InitializationVector);t.samples[n].data=l}))}}},qt=function(){function e(t,i,n,s){var r=this;X(this,e),W(this,"_videoSamples",[]),W(this,"_audioSamples",[]),W(this,"_lastRemainBuffer",[]),W(this,"_lastRemainBufferStartPos",0),this.videoTrack=new re,this.audioTrack=new ae,this.metadataTrack=n||new he,this.log=new Oe("MP4Demuxer",!s||!s.openLog||!s.openLog),t&&t.forEach((function(e){var t;(t=r._videoSamples).push.apply(t,C(e.frames))})),i&&i.forEach((function(e){var t;(t=r._audioSamples).push.apply(t,C(e.frames))}))}return G(e,[{key:"parseSamples",value:function(e){if(!e)throw new Error("moov is required");if(this.videoTrack.codec||this.audioTrack.codec||(ze.moovToTrack(e,this.videoTrack,this.audioTrack),this.videoSenc=this.videoTrack.videoSenc,this.audioSenc=this.audioTrack.audioSenc),!this._audioSamples.length&&!this._videoSamples.length){var t=ze.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 r,a,l,o=this.videoTrack,d=this.audioTrack;if(o.samples=[],d.samples=[],i){for(var c,u=0,h=i[0],m=i[1];h<=m;h++){if(!(r=this._videoSamples[h]))throw new Error("cannot found video frame #".concat(h));l=r.offset-t,a=e.subarray(l,l+r.size),(c=new le(r.pts||r.dts,r.dts)).duration=r.duration,c.gopId=r.gopId,r.keyframe&&c.setToKeyframe();for(var p=0,Z=a.length-1;p<Z;)u=Se(a,p),p+=4,c.units.push(a.subarray(p,p+u)),p+=u;o.samples.push(c)}o.baseMediaDecodeTime=o.samples[0].dts}if(n){for(var b=n[0],y=n[1];b<=y;b++){if(!(r=this._audioSamples[b]))throw new Error("cannot found video frame #".concat(b));l=r.offset-t,a=e.subarray(l,l+r.size),d.samples.push(new oe(r.dts,a,r.duration))}d.baseMediaDecodeTime=d.samples[0].dts}return{videoTrack:o,audioTrack:d,metadataTrack:this.metadataTrack}}},{key:"demuxPart",value:function(e,t,i,n,s,r,a,l){if(this.parseSamples(s),this.videoTrack.useEME=r,this.audioTrack.useEME=r,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,h,m,p=this.videoTrack,Z=this.audioTrack;p.samples=[],Z.samples=[],p.videoSenc=null,Z.audioSenc=null;var b=0,y=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&&(b=(m=u.offset-t)+u.size,h=e.subarray(m,b),(f=new le(u.pts||u.dts,u.dts)).duration=u.duration,f.gopId=u.gopId,f.sampleOffset=u.index,u.keyframe&&f.setToKeyframe(),f.data=h,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=a))}if(this._audioSamples.length>0&&n.length>0){for(var G=n[0];G<=n[1];G++){if(!(u=this._audioSamples[G]))throw new Error("cannot found video frame #".concat(G));u.offset>=t&&u.offset+u.size<=e.byteLength+t&&(y=(m=u.offset-t)+u.size,h=e.subarray(m,y),Z.samples.push(new oe(u.dts,h,u.duration,u.index)))}Z.samples.length>0&&(Z.gopId=Z.samples[0].gopId||p.gopId,Z.baseMediaDecodeTime=Z.samples[0].dts,Z.startPts=Z.samples[0].pts/Z.timescale,Z.endPts=Z.samples[Z.samples.length-1].pts/Z.timescale,this.audioSenc&&(Z.audioSenc=this.audioSenc.slice(Z.samples[0].sampleOffset,Z.samples[0].sampleOffset+Z.samples.length),Z.kidValue=a))}this.decoderData(p,Z,l);for(var W=0,v=0;v<p.samples.length;v++)for(var S=0,x=p.samples[v].data,g=x.length-1;S<g;)W=Se(x,S),S+=4,p.samples[v].units.push(x.subarray(S,S+W)),S+=W;return this._lastRemainBuffer=e.subarray(Math.max(b,y)),this._lastRemainBuffer.byteLength>0?this._lastRemainBufferStartPos=t+e.byteLength-this._lastRemainBuffer.byteLength:this._lastRemainBufferStartPos=0,{videoTrack:p,audioTrack:Z,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||At.decoderAESCTRData(e,t,i)}}],[{key:"probe",value:function(e){return ze.probe(e)}}]),e}(),$t="3.0.15-alpha.0";function ei(){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 ti(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}}var ii,ni=function(){function e(){X(this,e)}return G(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 r=i.length;if(r&&t){var a=i[r-1],l=a[1];if(e.start(n)-l<=t){var o=e.end(n);o>l&&(a[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,r=0,a=0,l=0,o=0,d=0,c=0,u=e.buffers(t,n),h=0,m=u.length;h<m;h++){var p=u[h];if(i+n>=p[0]&&i<=p[1])s=p[0],r=p[1],a=h;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:r,index:a,buffers:u,nextStart:l,nextEnd:o,prevStart:d,prevEnd:c,currentTime:i,behind:i-s,remaining:r?r-i:0,length:e.totalLength&&e.totalLength(u)}}}]),e}(),si={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",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"}},ri=(W(ii={},si.MANIFEST,{HLS:1100,DASH:1200}),W(ii,si.NETWORK,2100),W(ii,si.NETWORK_TIMEOUT,2101),W(ii,si.NETWORK_FORBIDDEN,2103),W(ii,si.NETWORK_NOTFOUND,2104),W(ii,si.NETWROK_RANGE_NOT_SATISFIABLE,2116),W(ii,si.DEMUX,{FLV:3100,HLS:3200,MP4:3300,FMP4:3400,SIDX:3410}),W(ii,si.REMUX,{FMP4:4100,MP4:4200}),W(ii,si.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,EME_HIJACK:5301}),W(ii,si.DRM,{LICENSE:7100,CUSTOM_LICENSE:7200}),W(ii,si.OTHER,8e3),W(ii,si.RUNTIME,{NO_CANPLAY_ERROR:9001,BUFFERBREAK_ERROR:9002,WAITING_TIMEOUT_ERROR:9003}),ii),ai=function(e){v(i,e);var t=w(i);function i(e,n,s,r,a){var l;return X(this,i),(l=t.call(this,a||(null==s?void 0:s.message))).errorType=e===si.NETWORK_TIMEOUT?si.NETWORK:e,l.originError=s,l.ext=r,l.errorCode=ri[e][n]||ri[e],l.errorMessage=l.message,l.errorCode||(l.errorType=si.OTHER,l.errorCode=ri[l.errorType]),l}return G(i,null,[{key:"create",value:function(e,t,n,s,r){return e instanceof i?e:(e instanceof Error&&(n=e,e=""),e||(e=si.OTHER),new i(e,t,n,s,r))}},{key:"network",value:function(e){var t;return new i(null!=e&&e.isTimeout?si.NETWORK_TIMEOUT:si.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)),li="undefined"!=typeof window,oi={DEBUG:1,LOG:2,WARN:3,ERROR:4},di=["Boolean","Number","String","Undefined","Null","Date","Object"],ci=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 G(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,[oi.DEBUG].concat(n)),e.disabled||(t=console).debug.apply(t,[this._prefix,ui()].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,[oi.LOG].concat(n)),e.disabled||(t=console).log.apply(t,[this._prefix,ui()].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,[oi.WARN].concat(n)),e.disabled||(t=console).warn.apply(t,[this._prefix,ui()].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,[oi.ERROR].concat(n)),e.disabled||(t=console).error.apply(t,[this._prefix,ui()].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 r=n.map((function(e){return mi(e)}));t=this._prefix+ui()+JSON.stringify(r)}catch(l){return}if(e>=this.logCacheLevel&&(this.logSize+=t.length,this.logTextArray.push(t)),this.logSize>this.logMaxSize){var a=this.logTextArray.shift();this.logSize-=a.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 ui(){return(new Date).toLocaleString()}function hi(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(!di.includes(s))return s;if(!(i>t)){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(i===t?n[r]=hi(e[r]):"object"===b(e[r])?n[r]=mi(e[r],t,i+1):n[r]=e[r]);return n}}function pi(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];try{return li?e&&"undefined"!=typeof ManagedMediaSource?ManagedMediaSource:window.MediaSource:null}catch(t){}}W(ci,"disabled",!0);var Zi="appendBuffer",bi="removeBuffer",yi="updateDuration",fi=function(){function e(t,i){var n=this;X(this,e),W(this,"media",null),W(this,"mediaSource",null),W(this,"_openPromise",ei()),W(this,"_queue",Object.create(null)),W(this,"_sourceBuffer",Object.create(null)),W(this,"_mseFullFlag",{}),W(this,"_st",0),W(this,"_opst",0),W(this,"_logger",null),W(this,"_config",null),W(this,"_url",null),W(this,"_onSBUpdateEnd",(function(e){var t=n._queue[e];if(t){var i=t[0];if((null==i?void 0:i.opName)!==yi&&t.shift(),i){var s=ti()-n._opst;n._logger.debug("UpdateEnd",i.opName,s,i.context),i.promise.resolve({name:i.opName,context:i.context,costtime:s}),n._startQueue(e)}}})),W(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 ai(si.MEDIA,si.SUB_TYPES.MSE_APPEND_BUFFER,t)))}})),this._config=Object.assign(e.getDefaultConfig(),i),t&&this.bindMedia(t),this._logger=new ci("MSE"),this._config.openLog&&ci.enable()}var t,i,n;return G(e,[{key:"isOpened",get:function(){var e;return"open"===(null===(e=this.mediaSource)||void 0===e?void 0:e.readyState)}},{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:"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("[debug mse] setDuration ended"):t.mediaSource&&(t.mediaSource.duration=e,t._logger.debug("[debug mse] setDuration"))}),yi,{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=ti()-e._st;e._logger.debug("MSE OPEN",n),t.removeEventListener("sourceopen",i),e._openPromise.resolve({costtime:n})})),this._openPromise=ei()}return this._openPromise}},{key:"bindMedia",value:(n=f(Z().mark((function e(t){var i,n,s,r=this;return Z().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=pi(this._config.perferMMS),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,this._st=ti(),s=function e(){var i=ti()-r._st;r._logger.debug("MSE OPEN"),n.removeEventListener("sourceopen",e),URL.revokeObjectURL(t.src),r._openPromise.resolve({costtime:i})},n.addEventListener("sourceopen",s),this._url=URL.createObjectURL(n),t.src=this._url,"ManagedMediaSource"===i.name?t.disableRemotePlayback=!0:t.disableRemotePlayback=!1,e.abrupt("return",this._openPromise);case 15:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"unbindMedia",value:(i=f(Z().mark((function e(){var t,i,n,s=this;return Z().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(r){}Object.keys(this._sourceBuffer).forEach((function(e){try{t.removeSourceBuffer(s._sourceBuffer[e])}catch(r){}}))}if(this.media){this.media.disableRemotePlayback=!1,this.media.removeAttribute("src");try{this.media.load()}catch(r){}this.media=null}this.mediaSource=null,this._openPromise=ei(),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 ai(si.MEDIA,si.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():this._enqueueOp(e,(function(){n.changeType(t),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=ti(),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,r=!1;return this._mseFullFlag[e]&&(r=!0),this._enqueueOp(e,(function(){if(s.mediaSource&&!s.media.error){var r=s._sourceBuffer[e];t>=i||!r?s._onSBUpdateEnd(e):(s._opst=ti(),s._logger.debug("MSE REMOVE START",e,t,i,n),r.remove(t,i))}}),bi,n,r)}},{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,ni.end(ni.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 ni.get(this._sourceBuffer[e])}},{key:"bufferStart",value:function(e){return ni.start(this.buffered(e))}},{key:"bufferEnd",value:function(e){return ni.end(this.buffered(e))}},{key:"_enqueueOp",value:function(e,t,i,n,s){var r=this;if(!this.mediaSource)return Promise.resolve();var a=this._queue[e]=this._queue[e]||[],l={exec:t,promise:ei(),opName:i,context:n};return s?(a.splice(0,0,l),this._mseFullFlag[e]=!1,this._startQueue(e)):a.push(l),this.isOpened||this.isEnded?1===a.length&&this._startQueue(e):this._openPromise.then((function(){1===a.length&&r._startQueue(e)})),l.promise}},{key:"_enqueueBlockingOp",value:(t=f(Z().mark((function e(t,i,n){var s,r,a=this;return Z().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 r=[],s.forEach((function(e){var t=a._queue[e],s=ei();r.push(s),t.push({exec:function(){s.resolve()},promise:s,opName:i,context:n}),1===t.length&&a._startQueue(e)})),e.abrupt("return",Promise.all(r).then((function(){try{return t()}finally{s.forEach((function(e){var t=a._queue[e],i=a._sourceBuffer[e];null==t||t.shift(),i&&i.updating||a._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(n){n&&n.message&&n.message.indexOf("SourceBuffer is full")>=0?(this._mseFullFlag[e]=!0,this._logger.error("[MSE error], context,",i.context," ,name,",i.opName,",err,SourceBuffer is full"),i.promise.reject(new ai(si.MEDIA,si.SUB_TYPES.MSE_FULL,n))):(this._logger.error(n),i.promise.reject(new ai(si.MEDIA,si.SUB_TYPES.MSE_OTHER,n)),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:"getDefaultConfig",value:function(){return{openLog:!1,perferMMS:!1}}},{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=pi(t);if(!i)return!1;try{return i.isTypeSupported(e)}catch(n){return this._logger.error(e,n),!1}}}]),e}();W(fi,"VIDEO","video"),W(fi,"AUDIO","audio");var Xi="fetch",Li="xhr",Gi="arraybuffer",Wi="text",vi="json",Si=function(e){v(i,e);var t=w(i);function i(e,n,s,r){var a;return X(this,i),W(T(a=t.call(this,r)),"retryCount",0),W(T(a),"isTimeout",!1),W(T(a),"loaderType",Xi),W(T(a),"startTime",0),W(T(a),"endTime",0),W(T(a),"options",{}),a.url=e,a.request=n,a.response=s,a}return G(i)}(Y(Error)),xi=Object.prototype.toString;function gi(e){if("[object Object]"!==xi.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function Vi(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 Yi(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ki(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]"===xi.call(i)?t=t.toISOString():function(e){return null!==e&&"object"===b(e)}(t)&&(t=JSON.stringify(t)),"".concat(Yi(e),"=").concat(Yi(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 Ti(e,t,i,n,s,r,a,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:r,firstByteTime:a,endTime:Date.now(),priOptions:c},response:i}}function Ri(e,t){return Math.round(8*e*1e3/t/1024)}var wi="real_time_speed",Mi=2097152,Ki=function(e){v(n,e);var t,i=w(n);function n(){var e;return X(this,n),W(T(e=i.call(this)),"_abortController",null),W(T(e),"_timeoutTimer",null),W(T(e),"_reader",null),W(T(e),"_response",null),W(T(e),"_aborted",!1),W(T(e),"_index",-1),W(T(e),"_range",null),W(T(e),"_receivedLength",0),W(T(e),"_running",!1),W(T(e),"_logger",null),W(T(e),"_vid",""),W(T(e),"_onProcessMinLen",0),W(T(e),"_onCancel",null),W(T(e),"_priOptions",null),e}return G(n,[{key:"load",value:function(e){var t,i=this,n=e.url,s=e.vid,r=e.timeout,a=e.responseType,l=e.onProgress,o=e.index,d=e.onTimeout,c=e.onCancel,u=e.range,h=e.transformResponse,m=e.request,p=e.params,b=e.logger,y=e.method,X=e.headers,L=e.body,G=e.mode,W=e.credentials,v=e.cache,S=e.redirect,x=e.referrer,g=e.referrerPolicy,V=e.onProcessMinLen,Y=e.priOptions;this._logger=b,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||{};var k={method:y,headers:X,body:L,mode:G,credentials:W,cache:v,redirect:S,referrer:x,referrerPolicy:g,signal:null===(t=this._abortController)||void 0===t?void 0:t.signal},T=!1;clearTimeout(this._timeoutTimer),n=ki(n,p);var R=Vi(u);R&&(X=m?m.headers:k.headers=k.headers||(Headers?new Headers:{}),Headers&&X instanceof Headers?X.append("Range",R):X.Range=R),r&&(this._timeoutTimer=setTimeout((function(){if(T=!0,i.cancel(),d){var e=new Si(n,k,null,"timeout");e.isTimeout=!0,d(e,{index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions})}}),r));var w=Date.now();return this._logger.debug("[fetch load start], index,",o,",range,",u),new Promise((function(e,t){fetch(m||n,m?void 0:k).then(function(){var s=f(Z().mark((function s(r){var d,c,m,p;return Z().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:if(clearTimeout(i._timeoutTimer),i._response=r,!i._aborted&&i._running){s.next=4;break}return s.abrupt("return");case 4:if(h&&(r=h(r,n)||r),r.ok){s.next=7;break}throw new Si(n,k,r,"bad network response");case 7:if(d=Date.now(),a!==Wi){s.next=15;break}return s.next=11,r.text();case 11:c=s.sent,i._running=!1,s.next=37;break;case 15:if(a!==vi){s.next=22;break}return s.next=18,r.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(r,l,w,d),s.abrupt("return");case 29:return s.next=31,r.arrayBuffer();case 31:c=s.sent,c=new Uint8Array(c),i._running=!1,m=Date.now()-w,p=Ri(c.byteLength,m),i.emit(wi,{speed:p,len:c.byteLength,time:m,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(Ti(c,!0,r,r.headers.get("Content-Length"),r.headers.get("age"),w,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&&!T||((e=e instanceof Si?e:new Si(n,k,null,null===(s=e)||void 0===s?void 0:s.message)).startTime=w,e.endTime=Date.now(),e.isTimeout=T,e.options={index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions},t(e))}))}))}},{key:"cancel",value:(t=f(Z().mark((function e(){return Z().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 r=new Si(e.url,"",e,"onProgress of bad response.body.getReader");return r.options={index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions},void this.reject(r)}this._onProcessMinLen>0&&(this._cache=new Uint8Array(Mi),this._writeIdx=0);var a,l,o,d=this._reader=e.body.getReader(),c=function(){var r=f(Z().mark((function r(){var u,h,m,p,b,y,f,X;return Z().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return l=Date.now(),r.prev=1,r.next=4,d.read();case 4:a=r.sent,o=Date.now(),r.next=13;break;case 8:return r.prev=8,r.t0=r.catch(1),o=Date.now(),s._aborted||(s._running=!1,r.t0.options={index:s._index,range:s._range,vid:s._vid,priOptions:s._priOptions},s.reject(r.t0)),r.abrupt("return");case 13:if(h=(null===(u=s._range)||void 0===u?void 0:u.length)>0?s._range[0]:0,m=h+s._receivedLength,!s._aborted){r.next=19;break}return s._running=!1,t(void 0,!1,{range:[m,m],vid:s._vid,index:s._index,startTime:l,endTime:o,st:i,firstByteTime:n,priOptions:s._priOptions},e),r.abrupt("return");case 19:p=a.value?a.value.byteLength:0,s._receivedLength+=p,s._logger.debug("【fetchLoader,onProgress call】,task,",s._range,", start,",m,", end,",h+s._receivedLength,", done,",a.done),s._onProcessMinLen>0?s._writeIdx+p>=s._onProcessMinLen||a.done?((b=new Uint8Array(s._writeIdx+p)).set(s._cache.slice(0,s._writeIdx),0),p>0&&b.set(a.value,s._writeIdx),s._writeIdx=0,s._logger.debug("【fetchLoader,onProgress enough】,done,",a.done,",len,",b.byteLength,", writeIdx,",s._writeIdx)):p>0&&s._writeIdx+p<Mi?(s._cache.set(a.value,s._writeIdx),s._writeIdx+=p,s._logger.debug("【fetchLoader,onProgress cache】,len,",p,", writeIdx,",s._writeIdx)):p>0&&(y=new Uint8Array(s._writeIdx+p+2048),s._logger.debug("【fetchLoader,onProgress extra start】,size,",s._writeIdx+p+2048,", datalen,",p,", writeIdx,",s._writeIdx),y.set(s._cache.slice(0,s._writeIdx),0),p>0&&y.set(a.value,s._writeIdx),s._writeIdx+=p,delete s._cache,s._cache=y,s._logger.debug("【fetchLoader,onProgress extra end】,len,",p,", writeIdx,",s._writeIdx)):b=a.value,(b&&b.byteLength>0||a.done)&&t(b,a.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),a.done?(f=Date.now()-i,X=Ri(s._receivedLength,f),s.emit(wi,{speed:X,len:s._receivedLength,time:f,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,",a.done),s.resolve(Ti(a,!0,e,e.headers.get("Content-Length"),e.headers.get("age"),i,n,s._index,s._range,s._vid,s._priOptions))):c();case 25:case"end":return r.stop()}}),r,null,[[1,8]])})));return function(){return r.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 Ii=function(e){v(i,e);var t=w(i);function i(){var e;return X(this,i),W(T(e=t.call(this)),"_xhr",null),W(T(e),"_aborted",!1),W(T(e),"_timeoutTimer",null),W(T(e),"_range",null),W(T(e),"_receivedLength",0),W(T(e),"_url",null),W(T(e),"_onProgress",null),W(T(e),"_index",-1),W(T(e),"_headers",null),W(T(e),"_currentChunkSizeKB",384),W(T(e),"_timeout",null),W(T(e),"_xhr",null),W(T(e),"_withCredentials",null),W(T(e),"_startTime",-1),W(T(e),"_loadCompleteResolve",null),W(T(e),"_loadCompleteReject",null),W(T(e),"_runing",!1),W(T(e),"_logger",!1),W(T(e),"_vid",""),W(T(e),"_responseType",void 0),W(T(e),"_credentials",void 0),W(T(e),"_method",void 0),W(T(e),"_transformResponse",void 0),W(T(e),"_firstRtt",void 0),W(T(e),"_onCancel",null),W(T(e),"_priOptions",null),e}return G(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=ki(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 Si?e:new Si(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===Gi&&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 r=new Si(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));r.options={index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions},t._loadCompleteReject(r)},i.ontimeout=function(e){t.cancel();var i=new Si(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=Vi(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(r){r.options={index:this._index,range:e,vid:this._vid,priOptions:this._priOptions},this._loadCompleteReject(r)}}},{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 Si(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,r=null,a=!1,l=(null===(t=this._range)||void 0===t?void 0:t.length)>0?this._range[0]:0;if(this._responseType===Gi){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=Ri(this._receivedLength,c);this.emit(wi,{speed:u,len:this._receivedLength,time:c,vid:this._vid,index:this._index,range:[s,l+this._receivedLength],priOptions:this._priOptions})}r=d,a=!((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,",a)}else a=!0,r=e.target.response;var h={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&&(h=this._transformResponse(h,this._url)||h),this._onProgress&&this._onProgress(r,a,{index:this._index,vid:this._vid,range:[s,l+this._receivedLength],startTime:this._startTime,endTime:Date.now(),priOptions:this._priOptions},h),a?(this._runing=!1,this._loadCompleteResolve&&this._loadCompleteResolve(Ti(this._onProgress?null:r,a,h,h.headers["content-length"],h.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(S(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=function(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 r,a=!0,l=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return a=e.done,e},e:function(e){l=!0,r=e},f:function(){try{a||null==i.return||i.return()}finally{if(l)throw r}}}}(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(r){n.e(r)}finally{n.f()}return i}}],[{key:"isSupported",value:function(){return"undefined"!=typeof XMLHttpRequest}}]),i}(J),Ci=["retry","retryDelay","onRetryError","transformError"],Hi=function(){function e(t,i){X(this,e),this.promise=ei(),this.alive=!!i.onProgress,!i.logger&&(i.logger=new ci("Loader")),this._loaderType=t,this._loader=t===Xi&&"undefined"!=typeof fetch?new Ki:new Ii,this._config=i,this._retryCount=0,this._retryTimer=null,this._canceled=!1,this._retryCheckFunc=i.retryCheckFunc,this._logger=i.logger}var t;return G(e,[{key:"exec",value:function(){var e=this,t=this._config,i=t.retry,n=t.retryDelay,s=t.onRetryError,r=t.transformError,a=k(t,Ci),l=function(){var t=f(Z().mark((function t(){var o,d,c;return Z().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,e._loader.load(a);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,r&&(d=r(d)||d),s&&e._retryCount>0&&s(d,e._retryCount,{index:a.index,vid:a.vid,range:a.range,priOptions:a.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,",a.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(Z().mark((function e(){return Z().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 Ni(){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 zi(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Promise((function(t){return setTimeout(t,e)}))}var Ui=function(e){v(n,e);var t,i=w(n);function n(e){var t;return X(this,n),W(T(t=i.call(this,e)),"type",Xi),W(T(t),"_queue",[]),W(T(t),"_alive",[]),W(T(t),"_currentTask",null),W(T(t),"_finnalUrl",""),W(T(t),"_config",void 0),t._config=function(e){return p({loaderType:Xi,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:Wi,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!==Li&&Ki.isSupported()||(t.type=Li),t.log=e.logger,t}return G(n,[{key:"isFetch",value:function(){return this.type===Xi}},{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&&gi(i.headers)&&(i.headers=Object.assign({},i.headers)),i.body&&gi(i.body)&&(i.body=Object.assign({},i.body)),i.transformRequest&&(i=i.transformRequest(i)||i),i.logger=this.log;var n=new Hi(this.type,i);return n.loader.on(wi,(function(e){t.emit(wi,e)})),this._queue.push(n),1!==this._queue.length||this._currentTask&&this._currentTask.running||this._processTask(),n.promise}},{key:"cancel",value:(t=f(Z().mark((function e(){var t;return Z().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,zi();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 Ki.isSupported()}}]),n}(J),Fi={416:ri[si.NETWROK_RANGE_NOT_SATISFIABLE],403:ri[si.NETWORK_FORBIDDEN],404:ri[si.NETWORK_NOTFOUND],timeout:ri[si.NETWORK_TIMEOUT],"4xx":"".concat(ri[si.NETWORK],"4XX"),"5xx":"".concat(ri[si.NETWORK],"5XX"),networkError:ri[si.NETWORK],contentError:"".concat(ri[si.NETWORK],"contentError"),mse:ri[si.MEDIA][si.SUB_TYPES.MSE_OTHER],mseOpen:ri[si.MEDIA][si.SUB_TYPES.MSE_ADD_SB],mseAppend:ri[si.MEDIA][si.SUB_TYPES.MSE_APPEND_BUFFER],mse_hijack:ri[si.MEDIA][si.SUB_TYPES.MSE_HIJACK],eme_hijack:ri[si.MEDIA][si.SUB_TYPES.EME_HIJACK],metaError:ri[si.DEMUX][si.SUB_TYPES.MP4],muxError:ri[si.REMUX][si.SUB_TYPES.FMP4],other:ri[si.OTHER],waitTimeout:ri[si.RUNTIME][si.SUB_TYPES.BUFFERBREAK_ERROR],waitTimeoutWithHidden:ri[si.RUNTIME][si.SUB_TYPES.WAITING_TIMEOUT_ERROR],drm:ri[si.DRM][si.SUB_TYPES.LICENSE]},Ji=si;var ji=G((function e(t,i,n){X(this,e);var s=0,r=0;n&&n.range&&n.range.length>1&&(s=n.range[0],r=n.range[1]);var a=function(e){return Fi[e]||e}(i);return{errorCode:a,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:$t,rangeStart:s,rangeEnd:r,ext:n,mediaError:{code:a,message:(null==n?void 0:n.httpText)||(null==n?void 0:n.message)}}})),Pi=G((function e(t,i,n){return X(this,e),{errorCode:i,errorType:t,version:$t,errorMessage:n.msg,ext:n,mediaError:{code:i,message:n.msg}}})),Ei={};Ei.nowTime=function(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}},Ei.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),r=0;return i.every((function(e){return e&&(s.set(e,r),r+=e.byteLength),!0})),s};var Di=G((function e(t,i){X(this,e),this.type="file",this.message=t,this.data=i})),Bi=function(){function e(){X(this,e),W(this,"_data",Object.create(null))}return G(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 _i(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 r,a=[],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 h=null===(c=n.mdia.mdhd)||void 0===c?void 0:c.timescale,m=u.stts,p=u.stsc,Z=u.stsz,b=u.stco,y=u.stss,f=u.ctts;if(!(h&&m&&p&&Z&&b&&y))return;r=(a=Qi(t,h,m,p,Z,b,y,f)).map((function(e){return e.duration}))}if(s){var X,L,G,W=null===(X=s.mdia)||void 0===X||null===(L=X.minf)||void 0===L?void 0:L.stbl;if(!W)return;var v=null===(G=s.mdia.mdhd)||void 0===G?void 0:G.timescale,S=W.stts,x=W.stsc,g=W.stsz,V=W.stco;if(!(v&&S&&x&&g&&V))return;l=Qi(t,v,S,x,g,V,null,null,r)}return{videoSegments:a,audioSegments:l}}}}function Qi(e,t,i,n,s,r,a,l,o){var d,c,u,h,m=[],p=[],Z=[],b=n.entries,y=r.entries,f=s.entrySizes,X=null==a?void 0:a.entries,L=null==l?void 0:l.entries;L&&(d=[],L.forEach((function(e){for(var t=e.count,i=e.offset,n=0;n<t;n++)d.push(i)}))),X&&(c={},X.forEach((function(e){c[e-1]=!0})));var G=0,W=0,v=0,S=0,x=0,g=b[0].samplesPerChunk,V=b[1]?b[1].firstChunk-1:1/0,Y=0,k=-1;i.entries.forEach((function(e){var t=e.count,i=e.delta;h=i;for(var n=0;n<t;n++)u={dts:Y,startTime:G,duration:h,size:f[W]||s.sampleSize,offset:y[v]+x,index:W},X&&(u.keyframe=c[W],u.keyframe?(k++,p.push([u]),Z.push(u.duration)):(p[p.length-1].push(u),Z[p.length-1]+=u.duration),u.gopId=k),d&&W<d.length&&(u.pts=Y+d[W]),0===W&&(u.pts=0),m.push(u),G+=h,Y+=i,++W<g?x+=u.size:(v++,x=0,v>=V&&(S++,V=b[S+1]?b[S+1].firstChunk-1:1/0),g+=b[S].samplesPerChunk)}));var T=m.length;if(T&&(!a||m[0].keyframe)){var R,w=[],M=[],K=0,I=0,H=function(e){var i;R=M[M.length-1],w.push({index:w.length,startTime:(null===(i=w[w.length-1])||void 0===i?void 0:i.endTime)||M[0].startTime/t,endTime:(R.startTime+R.duration)/t,duration:e,range:[M[0].offset,R.offset+R.size],frames:M}),K=0,M=[]};if(a)for(var N=e*t,z=0,U=p.length;z<U;z++){var F;K+=Z[z],(F=M).push.apply(F,C(p[z])),z+1<U?(0===z||K>N)&&H(K/t):H(K/t)}else for(var J=(o=o||[])[0]||e,j=0;j<T;j++){M.push(m[j]);var P=(K+=m[j].duration)/t;(j+1>=T||P+I>=J)&&(I+=P-J,H(P),J=o[w.length]||e)}return w}}function Oi(e){var t="",i="",n=0,s=0,r=0,a=0,l=0,o=0,d=0;e.mvhd&&(l=e.mvhd.duration/e.mvhd.timescale);var c=e.trak;if(c){var u,h,m,p,Z,b,y,f,X,L,G,W,v,S,x,g,V,Y=c.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)})),k=c.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)})),T=null;if(Y)if(T=null===(h=Y.mdia)||void 0===h||null===(m=h.minf)||void 0===m||null===(p=m.stbl)||void 0===p?void 0:p.stsd.entries[0])if(n=T.width,s=T.height,o=null===(Z=Y.mdia)||void 0===Z||null===(b=Z.mdhd)||void 0===b?void 0:b.timescale,t=null===(y=T.avcC||T.hvcC)||void 0===y?void 0:y.codec,"encv"===T.type)u=null===(f=T.sinf)||void 0===f||null===(X=f.schi)||void 0===X?void 0:X.tenc.default_KID;if(k)if(T=null===(L=k.mdia)||void 0===L||null===(G=L.minf)||void 0===G||null===(W=G.stbl)||void 0===W?void 0:W.stsd.entries[0])if(r=T.channelCount,a=T.sampleRate,i=null===(v=T.esds)||void 0===v?void 0:v.codec,d=null===(S=k.mdia)||void 0===S||null===(x=S.mdhd)||void 0===x?void 0:x.timescale,"enca"===T.type)u=u||(null===(g=T.sinf)||void 0===g||null===(V=g.schi)||void 0===V?void 0:V.tenc.default_KID);return{kid:u?u.join(""):null,videoCodec:t,audioCodec:i,width:n,height:s,videoTimescale:o,audioChannelCount:r,audioSampleRate:a,duration:l,audioTimescale:d,moov:e}}}function Ai(e){return"number"==typeof e&&!Number.isNaN(e)}var qi=["vid","cache"],$i=function(e){v(m,e);var t,i,n,s,r,a,l,o,d,c,u,h=w(m);function m(e){var t;X(this,m),W(T(t=h.call(this)),"vid",""),W(T(t),"url",""),W(T(t),"meta",{}),W(T(t),"downloadInfo",[]),W(T(t),"videoSegments",[]),W(T(t),"audioSegments",[]),W(T(t),"cache",null),W(T(t),"_currentSegmentIndex",-1),W(T(t),"_currentLoadingSegmentIndex",-1),W(T(t),"buffer",void 0),W(T(t),"_error",void 0),W(T(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,r=k(i,qi);return t.cache=s||new Bi,t.vid=n||r.url,t.url=r.url,r.transformError=t._transformError,t.logger=new ci("MP4Loader_"+t.vid),e.openLog&&ci.enable(),r.logger=t.logger,t._loader=new Ui(r),t._loader.on(wi,(function(e){t.emit(wi,e)})),t}return G(m,[{key:"isMetaLoaded",get:function(){return this.videoSegments.length||this.audioSegments.length}},{key:"setCurrentSegment",value:function(e){Ai(e)&&(this._currentSegmentIndex=e)}},{key:"isLastSegment",value:function(e){var t,i;return!!Ai(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(Z().mark((function e(t){var i,n,s,r=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=r.length>1&&void 0!==r[1]?r[1]:t,n=r.length>2?r[2]:void 0,s=r.length>3?r[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(Z().mark((function e(t){return Z().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(Z().mark((function e(t,i,n,s){var r,a,l,o,d=this;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=I(i,2),a=r[0],l=r[1],this._error=!1,this.logger.debug("[loadMetaProcess start], range,",[a,l]),o=function(){var e=f(Z().mark((function e(i,r,o){var c,u,h,m,p,b,y,f;return Z().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&&(r=!0,d.logger.debug("[loadMetaProcess],data done,setstate true,[",a,l,"]")),r&&null!=o&&o.range&&o.range.length>0&&o.range[1]<l&&(r=!1,d.logger.debug("[loadMetaProcess],data not done,setstate false,[",a,l,"]")),d.logger.debug("[loadMetaProcess],task,[",a,l,"], range,",o.range,",dataLen,",i?i.byteLength:void 0,", state,",r,",err,",d._error),!d._error&&i&&i.byteLength>0&&n(i,r,o),!d.meta.moov&&!d._error){e.next=6;break}return e.abrupt("return");case 6:if(!(i&&i.byteLength>0)){e.next=44;break}if(d.buffer=Ni(d.buffer,i),c=ze.findBox(d.buffer,["moov"])[0]){e.next=23;break}if(u=ze.findBox(d.buffer,["mdat"])[0],!r){e.next=23;break}if(u){e.next=18;break}return d._error=!0,n(null,r,o,{err:"cannot find moov or mdat box"}),e.abrupt("return");case 18:return h=u.start+u.size,e.next=21,d.loadData([h,""],t,s);case 21:(m=e.sent)&&(c=ze.findBox(m.data,["moov"])[0]);case 23:if(!(c&&r&&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,",r),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=44;break}if(p=ze.moov(c)){e.next=33;break}return d._error=!0,n(null,r,o,{err:"cannot parse moov box"}),e.abrupt("return");case 33:if(b=_i(p,d._config.segmentDuration)){e.next=38;break}return d._error=!0,n(null,r,o,{err:"cannot parse segments"}),e.abrupt("return");case 38:d.meta=Oi(p),y=b.videoSegments,f=b.audioSegments,d.videoSegments=y,d.audioSegments=f,d.logger.debug("[loadMetaProcess] moov ok"),n(void 0,r,{meta:{meta:d.meta,videoSegments:y,audioSegments:f}});case 44:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}(),e.next=6,this.loadData([a,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(Z().mark((function e(t,i,n){var s,r,a,l,o,d,c,u,h;return Z().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(r=e.sent){e.next=7;break}return e.abrupt("return");case 7:if(s.push(r),a=ze.findBox(r.data,["moov"])[0]){e.next=23;break}if(l=ze.findBox(r.data,["mdat"])[0]){e.next=13;break}throw new Di("cannot find moov or mdat box",r.data);case 13:return o=l.start+l.size,e.next=16,this.loadData([o],t,n);case 16:if(r=e.sent){e.next=19;break}return e.abrupt("return");case 19:if(s.push(r),a=ze.findBox(r.data,["moov"],o)[0]){e.next=23;break}throw new Di("cannot find moov box",r.data);case 23:if(!(a.size>a.data.length)){e.next=31;break}return e.next=26,this.loadData([r.data.length,a.start+a.size-1],t,n);case 26:if(r=e.sent){e.next=29;break}return e.abrupt("return");case 29:s.push(r),a.data=Ni(a.data,r.data);case 31:if(d=ze.moov(a)){e.next=34;break}throw new Di("cannot parse moov box",a.data);case 34:if(c=_i(d,this._config.segmentDuration)){e.next=37;break}throw new Di("cannot parse segments",a.data);case 37:return this.meta=Oi(d),u=c.videoSegments,h=c.audioSegments,this.videoSegments=u,this.audioSegments=h,this.logger.debug("[load moov end!!!!!]"),e.abrupt("return",{meta:this.meta,videoSegments:u,audioSegments:h,responses:s});case 43:case"end":return e.stop()}}),e,this)}))),function(e,t,i){return o.apply(this,arguments)})},{key:"loadCacheMeta",value:function(e,t){var i=_i(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(Z().mark((function e(t,i){var n,s,r,a,l,o=arguments;return Z().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 r=this.getSegmentByTime(t),a=r.video,l=r.audio,e.abrupt("return",this._loadSegment(a,l,i,n,s));case 7:case"end":return e.stop()}}),e,this)}))),function(e,t){return l.apply(this,arguments)})},{key:"loadNextSegment",value:(a=f(Z().mark((function e(t){var i,n,s,r,a=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=!(a.length>1&&void 0!==a[1])||a[1],n=a.length>2&&void 0!==a[2]?a[2]:{},this.isMetaLoaded){e.next=5;break}return e.next=5,this.loadMeta();case 5:return s=this.videoSegments[this._currentSegmentIndex+1],r=this.audioSegments[this._currentSegmentIndex+1],e.abrupt("return",this._loadSegment(s,r,t,i,n));case 8:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"preload",value:(r=f(Z().mark((function e(t){var i,n,s,r,a,l,o,d=this;return Z().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,r=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 a=this.videoSegments.slice(0,r),l=this.audioSegments.slice(0,r),o=function(){var e=f(Z().mark((function e(t){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(t>r)){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,d._loadSegment(a[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 r.apply(this,arguments)})},{key:"cancel",value:function(){return this._loader.cancel()}},{key:"reset",value:(s=f(Z().mark((function e(){var t=arguments;return Z().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(Z().mark((function e(){return Z().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(Z().mark((function e(t,i,n,s,r){var a,l;return Z().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 a=(null==t?void 0:t.index)||(null==i?void 0:i.index)||0,this._currentLoadingSegmentIndex=a,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,r);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=a),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,r){return i.apply(this,arguments)})},{key:"loadData",value:(t=f(Z().mark((function e(t,i,n){var s,r,a,l;return Z().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(r=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:a=e.sent,e.next=12;break;case 11:a={data:r,state:!0,options:{fromCache:!0,range:t,vid:this.vid}};case 12:if(a){e.next=14;break}return e.abrupt("return");case 14:return r||(a.data&&this.downloadInfo.push({startTime:a.startTime,endTime:a.endTime,size:a.data.byteLength,range:t}),this.downloadInfo&&this.downloadInfo.length>this._config.maxDownloadInfoSize&&(this.downloadInfo=this.downloadInfo.slice(-this._config.maxDownloadInfoSize))),e.abrupt("return",a);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}}]),m}(J),en=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}}(),tn=nn();function nn(){if(en)try{return!!window.localStorage.getItem("playerlog")}catch(e){return!1}return!1}function sn(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];tn&&console.log&&(t=console).log.apply(t,["[logger]",Ei.nowTime(),e].concat(n))}!function(){if(en)try{return!!window.localStorage.getItem("playertestlog")}catch(e){return!1}}();var rn="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihhPWEuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLGEpfXJldHVybiByfWZ1bmN0aW9uIHQodCl7Zm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dmFyIGE9bnVsbCE9YXJndW1lbnRzW3JdP2FyZ3VtZW50c1tyXTp7fTtyJTI/ZShPYmplY3QoYSksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kodCxlLGFbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOmUoT2JqZWN0KGEpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGsoYS5rZXkpLGEpfX1mdW5jdGlvbiBuKGUsdCxyKXtyZXR1cm4gdCYmYShlLnByb3RvdHlwZSx0KSxyJiZhKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBpKGUsdCxyKXtyZXR1cm4odD1rKHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuKG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuKHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBjKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4obD1jKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1bbnVsbF07YS5wdXNoLmFwcGx5KGEsdCk7dmFyIG49bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZSxhKSk7cmV0dXJuIHImJnUobixyLnByb3RvdHlwZSksbn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCl7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX1mdW5jdGlvbiBkKGUpe3ZhciB0PWMoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPW8oZSk7aWYodCl7dmFyIG49byh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLG4pfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZih0aGlzLHIpfX1mdW5jdGlvbiBoKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1vKGUpKTspO3JldHVybiBlfWZ1bmN0aW9uIHAoKXtyZXR1cm4gcD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIGE9aChlLHQpO2lmKGEpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSx0KTtyZXR1cm4gbi5nZXQ/bi5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTpuLnZhbHVlfX0scC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBhLG4saSxzLG89W10sdT0hMCxjPSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47dT0hMX1lbHNlIGZvcig7ISh1PShhPWkuY2FsbChyKSkuZG9uZSkmJihvLnB1c2goYS52YWx1ZSksby5sZW5ndGghPT10KTt1PSEwKTt9Y2F0Y2gobCl7Yz0hMCxuPWx9ZmluYWxseXt0cnl7aWYoIXUmJm51bGwhPXIucmV0dXJuJiYocz1yLnJldHVybigpLE9iamVjdChzKSE9PXMpKXJldHVybn1maW5hbGx5e2lmKGMpdGhyb3cgbn19cmV0dXJuIG99fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB5KGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBnKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBtKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBnKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLGE9bmV3IEFycmF5KHQpO3I8dDtyKyspYVtyXT1lW3JdO3JldHVybiBhfWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX12YXIgYj0idmlkZW8iLF89ImF1ZGlvIix3PSJtZXRhZGF0YSIseD0iYXZjIixTPSJoZXZjIixBPSJhYWMiLEQ9Imc3MTEwYSIsRT0iZzcxMTBtIixCPSJMQVJHRV9BVl9TSElGVCIsVD0iTEFSR0VfVklERU9fR0FQIixDPSJMQVJHRV9WSURFT19HQVBfQkVUV0VFTl9DSFVOSyIsVT0iTEFSR0VfQVVESU9fR0FQIixQPSJBVURJT19GSUxMRUQiLEk9IkFVRElPX0RST1BQRUQiLHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLGkodGhpcywiaWQiLDEpLGkodGhpcywidHlwZSIsYiksaSh0aGlzLCJjb2RlY1R5cGUiLHgpLGkodGhpcywicGlkIiwtMSksaSh0aGlzLCJodmNDIix2b2lkIDApLGkodGhpcywiY29kZWMiLCIiKSxpKHRoaXMsInRpbWVzY2FsZSIsMCksaSh0aGlzLCJmb3JtYXRUaW1lc2NhbGUiLDApLGkodGhpcywic2VxdWVuY2VOdW1iZXIiLDApLGkodGhpcywiYmFzZU1lZGlhRGVjb2RlVGltZSIsMCksaSh0aGlzLCJiYXNlRHRzIiwwKSxpKHRoaXMsImR1cmF0aW9uIiwwKSxpKHRoaXMsIndhcm5pbmdzIixbXSksaSh0aGlzLCJzYW1wbGVzIixbXSksaSh0aGlzLCJwcHMiLFtdKSxpKHRoaXMsInNwcyIsW10pLGkodGhpcywidnBzIixbXSksaSh0aGlzLCJmcHNOdW0iLDApLGkodGhpcywiZnBzRGVuIiwwKSxpKHRoaXMsInNhclJhdGlvIixbXSksaSh0aGlzLCJ3aWR0aCIsMCksaSh0aGlzLCJoZWlnaHQiLDApLGkodGhpcywibmFsVW5pdFNpemUiLDQpLGkodGhpcywicHJlc2VudCIsITEpLGkodGhpcywiaXNWaWRlb0VuY3J5cHRpb24iLCExKSxpKHRoaXMsImlzQXVkaW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJpc1ZpZGVvIiwhMCksaSh0aGlzLCJraWQiLG51bGwpLGkodGhpcywicHNzaCIsbnVsbCksaSh0aGlzLCJleHQiLHZvaWQgMCl9cmV0dXJuIG4oZSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZU51bWJlcj10aGlzLndpZHRoPXRoaXMuaGVpZ2h0PXRoaXMuZnBzRGVuPXRoaXMuZnBzTnVtPXRoaXMuZHVyYXRpb249dGhpcy5iYXNlTWVkaWFEZWNvZGVUaW1lPXRoaXMudGltZXNjYWxlPTAsdGhpcy5jb2RlYz0iIix0aGlzLnByZXNlbnQ9ITEsdGhpcy5waWQ9LTEsdGhpcy5wcHM9W10sdGhpcy5zcHM9W10sdGhpcy52cHM9W10sdGhpcy5zYXJSYXRpbz1bXSx0aGlzLnNhbXBsZXM9W10sdGhpcy53YXJuaW5ncz1bXSx0aGlzLmh2Y0M9bnVsbH19LHtrZXk6ImV4aXN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEhKHRoaXMucHBzLmxlbmd0aCYmdGhpcy5zcHMubGVuZ3RoJiZ0aGlzLmNvZGVjKX19LHtrZXk6Imhhc1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc2FtcGxlcy5sZW5ndGh9fSx7a2V5OiJpc0VuY3J5cHRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmlkZW9FbmNyeXB0aW9ufX1dKSxlfSgpLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLGkodGhpcywiaWQiLDIpLGkodGhpcywidHlwZSIsXyksaSh0aGlzLCJjb2RlY1R5cGUiLEEpLGkodGhpcywicGlkIiwtMSksaSh0aGlzLCJjb2RlYyIsIiIpLGkodGhpcywic2VxdWVuY2VOdW1iZXIiLDApLGkodGhpcywic2FtcGxlRHVyYXRpb24iLDApLGkodGhpcywidGltZXNjYWxlIiwwKSxpKHRoaXMsImZvcm1hdFRpbWVzY2FsZSIsMCksaSh0aGlzLCJiYXNlTWVkaWFEZWNvZGVUaW1lIiwwKSxpKHRoaXMsImR1cmF0aW9uIiwwKSxpKHRoaXMsIndhcm5pbmdzIixbXSksaSh0aGlzLCJzYW1wbGVzIixbXSksaSh0aGlzLCJiYXNlRHRzIiwwKSxpKHRoaXMsInNhbXBsZVNpemUiLDE2KSxpKHRoaXMsInNhbXBsZVJhdGUiLDApLGkodGhpcywiY2hhbm5lbENvdW50IiwwKSxpKHRoaXMsIm9iamVjdFR5cGUiLDApLGkodGhpcywic2FtcGxlUmF0ZUluZGV4IiwwKSxpKHRoaXMsImNvbmZpZyIsW10pLGkodGhpcywicHJlc2VudCIsITEpLGkodGhpcywiaXNWaWRlb0VuY3J5cHRpb24iLCExKSxpKHRoaXMsImlzQXVkaW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJraWQiLG51bGwpLGkodGhpcywiZXh0Iix2b2lkIDApfXJldHVybiBuKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VOdW1iZXI9MCx0aGlzLnRpbWVzY2FsZT0wLHRoaXMuc2FtcGxlRHVyYXRpb249MCx0aGlzLnNhbXBsZVJhdGU9MCx0aGlzLmNoYW5uZWxDb3VudD0wLHRoaXMuYmFzZU1lZGlhRGVjb2RlVGltZT0wLHRoaXMucHJlc2VudD0hMSx0aGlzLnBpZD0tMSx0aGlzLmNvZGVjPSIiLHRoaXMuc2FtcGxlcz1bXSx0aGlzLmNvbmZpZz1bXSx0aGlzLndhcm5pbmdzPVtdfX0se2tleToiZXhpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISEodGhpcy5zYW1wbGVSYXRlJiZ0aGlzLmNoYW5uZWxDb3VudCYmdGhpcy5jb2RlYyYmdGhpcy5jb2RlY1R5cGU9PT1BKX19LHtrZXk6Imhhc1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc2FtcGxlcy5sZW5ndGh9fSx7a2V5OiJpc0VuY3J5cHRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQXVkaW9FbmNyeXB0aW9ufX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsYSxuKXtyKHRoaXMsZSksaSh0aGlzLCJmbGFnIix7fSksaSh0aGlzLCJrZXlmcmFtZSIsITEpLGkodGhpcywiZ29wSWQiLDApLGkodGhpcywiZHVyYXRpb24iLDApLGkodGhpcywic2l6ZSIsMCksaSh0aGlzLCJ1bml0cyIsW10pLGkodGhpcywiY2hyb21hRm9ybWF0Iiw0MjApLHRoaXMub3JpZ2luUHRzPXRoaXMucHRzPXQsdGhpcy5vcmlnaW5EdHM9dGhpcy5kdHM9YSxuJiYodGhpcy51bml0cz1uKX1yZXR1cm4gbihlLFt7a2V5OiJjdHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB0cy10aGlzLmR0c319LHtrZXk6InNldFRvS2V5ZnJhbWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5rZXlmcmFtZT0hMCx0aGlzLmZsYWcuZGVwZW5kc09uPTIsdGhpcy5mbGFnLmlzTm9uU3luY1NhbXBsZT0wfX1dKSxlfSgpLE89bigoZnVuY3Rpb24gZSh0LGEsbixzKXtyKHRoaXMsZSksaSh0aGlzLCJkdXJhdGlvbiIsMTAyNCksaSh0aGlzLCJmbGFnIix7ZGVwZW5kc09uOjIsaXNOb25TeW5jU2FtcGxlOjB9KSxpKHRoaXMsImtleWZyYW1lIiwhMCksdGhpcy5vcmlnaW5QdHM9dGhpcy5wdHM9dGhpcy5kdHM9dCx0aGlzLmRhdGE9YSx0aGlzLnNpemU9YS5ieXRlTGVuZ3RoLHRoaXMuc2FtcGxlT2Zmc2V0PXMsbiYmKHRoaXMuZHVyYXRpb249bil9KSksTD1uKChmdW5jdGlvbiBlKHQsYSl7cih0aGlzLGUpLGkodGhpcywidGltZSIsMCksdGhpcy5kYXRhPXQsdGhpcy5vcmlnaW5QdHM9dGhpcy5wdHM9YX0pKSxWPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEpfShMKSxGPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEpfShMKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSxpKHRoaXMsImlkIiwzKSxpKHRoaXMsInR5cGUiLHcpLGkodGhpcywidGltZXNjYWxlIiwwKSxpKHRoaXMsImZsdlNjcmlwdFNhbXBsZXMiLFtdKSxpKHRoaXMsInNlaVNhbXBsZXMiLFtdKX1yZXR1cm4gbihlLFt7a2V5OiJleGlzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLmZsdlNjcmlwdFNhbXBsZXMubGVuZ3RoJiYhdGhpcy5zZWlTYW1wbGVzLmxlbmd0aHx8IXRoaXMudGltZXNjYWxlKX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudGltZXNjYWxlPTAsdGhpcy5mbHZTY3JpcHRTYW1wbGVzPVtdLHRoaXMuc2VpU2FtcGxlcz1bXX19LHtrZXk6Imhhc1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLmZsdlNjcmlwdFNhbXBsZXMubGVuZ3RoJiYhdGhpcy5zZWlTYW1wbGVzLmxlbmd0aCl9fV0pLGV9KCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYocih0aGlzLGUpLGkodGhpcywiX2J5dGVzQXZhaWxhYmxlIix2b2lkIDApLGkodGhpcywiX2JpdHNBdmFpbGFibGUiLDApLGkodGhpcywiX3dvcmQiLDApLCF0KXRocm93IG5ldyBFcnJvcigiRXhwR29sb21iIGRhdGEgcGFyYW1zIGlzIHJlcXVpcmVkIik7dGhpcy5fZGF0YT10LHRoaXMuX2J5dGVzQXZhaWxhYmxlPXQuYnl0ZUxlbmd0aCx0aGlzLl9ieXRlc0F2YWlsYWJsZSYmdGhpcy5fbG9hZFdvcmQoKX1yZXR1cm4gbihlLFt7a2V5OiJiaXRzQXZhaWxhYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYml0c0F2YWlsYWJsZX19LHtrZXk6Il9sb2FkV29yZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9kYXRhLmJ5dGVMZW5ndGgtdGhpcy5fYnl0ZXNBdmFpbGFibGUsdD1NYXRoLm1pbig0LHRoaXMuX2J5dGVzQXZhaWxhYmxlKTtpZigwPT09dCl0aHJvdyBuZXcgRXJyb3IoIk5vIGJ5dGVzIGF2YWlsYWJsZSIpO3ZhciByPW5ldyBVaW50OEFycmF5KDQpO3Iuc2V0KHRoaXMuX2RhdGEuc3ViYXJyYXkoZSxlK3QpKSx0aGlzLl93b3JkPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcikuZ2V0VWludDMyKDApLHRoaXMuX2JpdHNBdmFpbGFibGU9OCp0LHRoaXMuX2J5dGVzQXZhaWxhYmxlLT10fX0se2tleToic2tpcEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2JpdHNBdmFpbGFibGU+ZSl0aGlzLl93b3JkPDw9ZSx0aGlzLl9iaXRzQXZhaWxhYmxlLT1lO2Vsc2V7ZS09dGhpcy5fYml0c0F2YWlsYWJsZTt2YXIgdD1NYXRoLmZsb29yKGUvOCk7ZS09OCp0LHRoaXMuX2J5dGVzQXZhaWxhYmxlLT10LHRoaXMuX2xvYWRXb3JkKCksdGhpcy5fd29yZDw8PWUsdGhpcy5fYml0c0F2YWlsYWJsZS09ZX19fSx7a2V5OiJyZWFkQml0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZT4zMil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWFkIG1vcmUgdGhhbiAzMiBiaXRzIik7dmFyIHQ9TWF0aC5taW4odGhpcy5fYml0c0F2YWlsYWJsZSxlKSxyPXRoaXMuX3dvcmQ+Pj4zMi10O3JldHVybiB0aGlzLl9iaXRzQXZhaWxhYmxlLT10LHRoaXMuX2JpdHNBdmFpbGFibGU+MD90aGlzLl93b3JkPDw9dDp0aGlzLl9ieXRlc0F2YWlsYWJsZT4wJiZ0aGlzLl9sb2FkV29yZCgpLCh0PWUtdCk+MCYmdGhpcy5fYml0c0F2YWlsYWJsZT9yPDx0fHRoaXMucmVhZEJpdHModCk6cn19LHtrZXk6InNraXBMWiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtmb3IoZT0wO2U8dGhpcy5fYml0c0F2YWlsYWJsZTsrK2UpaWYoMCE9KHRoaXMuX3dvcmQmMjE0NzQ4MzY0OD4+PmUpKXJldHVybiB0aGlzLl93b3JkPDw9ZSx0aGlzLl9iaXRzQXZhaWxhYmxlLT1lLGU7cmV0dXJuIHRoaXMuX2xvYWRXb3JkKCksZSt0aGlzLnNraXBMWigpfX0se2tleToic2tpcFVFRyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNraXBCaXRzKDErdGhpcy5za2lwTFooKSl9fSx7a2V5OiJyZWFkVUVHIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2tpcExaKCk7cmV0dXJuIHRoaXMucmVhZEJpdHMoZSsxKS0xfX0se2tleToicmVhZEVHIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVFRygpO3JldHVybiAxJmU/MStlPj4+MTotMSooZT4+PjEpfX0se2tleToicmVhZEJvb2wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLnJlYWRCaXRzKDEpfX0se2tleToicmVhZFVCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKDgpfX0se2tleToic2tpcFNjYWxpbmdMaXN0Iix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9OCxyPTgsYT0wO2E8ZTthKyspMCE9PXImJihyPSh0K3RoaXMucmVhZEVHKCkrMjU2KSUyNTYpLHQ9MD09PXI/dDpyfX1dKSxlfSgpLEc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKSx0aGlzLm5hbWU9dHx8IiIsdGhpcy5fcHJlZml4PSJbIi5jb25jYXQodGhpcy5uYW1lLCJdIil9cmV0dXJuIG4oZSxbe2tleToid2FybiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkud2Fybi5hcHBseSh0LFt0aGlzLl9wcmVmaXhdLmNvbmNhdChhKSl9fX1dLFt7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7ZS5kaXNhYmxlZD0hMX19LHtrZXk6ImRpc2FibGUiLHZhbHVlOmZ1bmN0aW9uKCl7ZS5kaXNhYmxlZD0hMH19XSksZX0oKTtpKEcsImRpc2FibGVkIiwhMCk7dmFyIEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToiZGVjb2RlIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIHI9W10sYT10LG49MCxpPXQubGVuZ3RoO248aTspaWYoYVtuXTwxMjgpci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYVtuXSkpLCsrbjtlbHNle2lmKGFbbl08MTkyKTtlbHNlIGlmKGFbbl08MjI0KXtpZihlLl9jaGVja0NvbnRpbnVhdGlvbihhLG4sMSkpe3ZhciBzPSgzMSZhW25dKTw8Nnw2MyZhW24rMV07aWYocz49MTI4KXtyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzNSZzKSksbis9Mjtjb250aW51ZX19fWVsc2UgaWYoYVtuXTwyNDApe2lmKGUuX2NoZWNrQ29udGludWF0aW9uKGEsbiwyKSl7dmFyIG89KDE1JmFbbl0pPDwxMnwoNjMmYVtuKzFdKTw8Nnw2MyZhW24rMl07aWYobz49MjA0OCYmNTUyOTYhPSg2MzQ4OCZvKSl7ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzUmbykpLG4rPTM7Y29udGludWV9fX1lbHNlIGlmKGFbbl08MjQ4JiZlLl9jaGVja0NvbnRpbnVhdGlvbihhLG4sMykpe3ZhciB1PSg3JmFbbl0pPDwxOHwoNjMmYVtuKzFdKTw8MTJ8KDYzJmFbbisyXSk8PDZ8NjMmYVtuKzNdO2lmKHU+NjU1MzYmJnU8MTExNDExMil7dS09NjU1MzYsci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodT4+PjEwfDU1Mjk2KSksci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTAyMyZ1fDU2MzIwKSksbis9NDtjb250aW51ZX19ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzMpKSwrK259cmV0dXJuIHIuam9pbigiIil9fSx7a2V5OiJfY2hlY2tDb250aW51YXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1lO2lmKHQrcjxhLmxlbmd0aCl7Zm9yKDtyLS07KWlmKDEyOCE9KDE5MiZhWysrdF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfX1dKSxlfSgpLEs9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cscT1LJiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG9jYWxlTG93ZXJDYXNlKCksVz1LJiYvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvLnRlc3QocSksWD1LJiZxLmluY2x1ZGVzKCJmaXJlZm94IiksWT1LJiZxLmluY2x1ZGVzKCJhbmRyb2lkIik7ZnVuY3Rpb24gWigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3Q9dC5maWx0ZXIoQm9vbGVhbik7dmFyIGE9bmV3IFVpbnQ4QXJyYXkodC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5ieXRlTGVuZ3RofSksMCkpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChlLG4pLG4rPWUuYnl0ZUxlbmd0aH0pKSxhfXZhciBRPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIEooZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuKGVbdF08PDgpKyhlW3QrMV18fDApfWZ1bmN0aW9uICQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuKGVbdF08PDI0Pj4+MCkrKGVbdCsxXTw8MTYpKyhlW3QrMl08PDgpKyhlW3QrM118fDApfWZ1bmN0aW9uIGVlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybiAkKGUsdCkqUSskKGUsdCs0KX1mdW5jdGlvbiB0ZShlKXtmb3IodmFyIHQscj0iYXZjMS4iLGE9MDthPDM7YSsrKSh0PWVbYV0udG9TdHJpbmcoMTYpKS5sZW5ndGg8MiYmKHQ9IjAiLmNvbmNhdCh0KSkscis9dDtyZXR1cm4gcn1mdW5jdGlvbiByZShlKXt2YXIgdD0iIjtpZihlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QrPWZ1bmN0aW9uKGUpe3JldHVybigiMCIrTnVtYmVyKGUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLnRvVXBwZXJDYXNlKCl9KGUpfSkpLHQubGVuZ3RoPD0zMilmb3IodmFyIHI9MzItdC5sZW5ndGgsYT0wO2E8cjthKyspdCs9IjAiO3JldHVybiB0fWZ1bmN0aW9uIGFlKGUpe2lmKCFBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9W10scj0iIixhPTA7YTxlLmxlbmd0aDthKyspYSUyJiYocj1lW2EtMV0rZVthXSx0LnB1c2gocGFyc2VJbnQociwxNikpLHI9IiIpO3JldHVybiB0fXJldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTYpfSkpfXZhciBuZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9MixhPTA7bnVsbCE9PWVbcl0mJnZvaWQgMCE9PWVbcl0mJjEhPT1lW3JdOylyKys7aWYoKGE9KytyKzIpPj10KXJldHVybltdO2Zvcih2YXIgbj1bXTthPHQ7KXN3aXRjaChlW2FdKXtjYXNlIDA6aWYoMCE9PWVbYS0xXSl7YSs9MjticmVha31pZigwIT09ZVthLTJdKXthKys7YnJlYWt9ciE9PWEtMiYmbi5wdXNoKGUuc3ViYXJyYXkocixhLTIpKTtkb3thKyt9d2hpbGUoMSE9PWVbYV0mJmE8dCk7YT0ocj1hKzEpKzI7YnJlYWs7Y2FzZSAxOmlmKDAhPT1lW2EtMV18fDAhPT1lW2EtMl0pe2ErPTM7YnJlYWt9ciE9PWEtMiYmbi5wdXNoKGUuc3ViYXJyYXkocixhLTIpKSxhPShyPWErMSkrMjticmVhaztkZWZhdWx0OmErPTN9cmV0dXJuIHI8dCYmbi5wdXNoKGUuc3ViYXJyYXkocikpLG59fSx7a2V5OiJwYXJzZUF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2lmKCEoZS5sZW5ndGg8NCkpe2Zvcih2YXIgcixhPWUubGVuZ3RoLG49W10saT0wO2krdDxhOylpZihyPSQoZSxpKSwzPT09dCYmKHI+Pj49OCksaSs9dCxyKXtpZihpK3I+YSlicmVhaztuLnB1c2goZS5zdWJhcnJheShpLGkrcikpLGkrPXJ9cmV0dXJuIG59fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLGE9dD8yOjEsbj0wLGk9MCxzPSIiOzI1NT09PWVbYV07KW4rPTI1NSxhKys7Zm9yKG4rPWVbYSsrXTsyNTU9PT1lW2FdOylpKz0yNTUsYSsrO2lmKGkrPWVbYSsrXSw1PT09biYmcj5hKzE2KWZvcih2YXIgbz0wO288MTY7bysrKXMrPWVbYV0udG9TdHJpbmcoMTYpLGErKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KGEsYStpKSx0eXBlOm4sc2l6ZTppLHV1aWQ6c319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgscj1bXSxhPTE7YTx0LTI7KTA9PT1lW2FdJiYwPT09ZVthKzFdJiYzPT09ZVthKzJdPyhyLnB1c2goYSsyKSxhKz0yKTphKys7aWYoIXIubGVuZ3RoKXJldHVybiBlO3ZhciBuPXQtci5sZW5ndGgsaT1uZXcgVWludDhBcnJheShuKSxzPTA7Zm9yKGE9MDthPG47cysrLGErKylzPT09clswXSYmKHMrKyxyLnNoaWZ0KCkpLGlbYV09ZVtzXTtyZXR1cm4gaX19XSksZX0oKSxpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDcpKXtmb3IodmFyIHIsYSxuPTErKDMmdFs0XSksaT1bXSxzPVtdLG89Nix1PTMxJnRbNV0sYz0wO2M8dTtjKyspaWYoYT10W29dPDw4fHRbbysxXSxvKz0yLGEpe3ZhciBsPXQuc3ViYXJyYXkobyxvK2EpO28rPWEsaS5wdXNoKGwpLHJ8fChyPWUucGFyc2VTUFMobmUucmVtb3ZlRVBCKGwpKSl9dmFyIGYsZD10W29dO28rKztmb3IodmFyIGg9MDtoPGQ7aCsrKWY9dFtvXTw8OHx0W28rMV0sbys9MixmJiYocy5wdXNoKHQuc3ViYXJyYXkobyxvK2YpKSxvKz1mKTtyZXR1cm57c3BzOnIsc3BzQXJyOmkscHBzQXJyOnMsbmFsVW5pdFNpemU6bn19fX0se2tleToicGFyc2VTUFMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBqKGUpO3QucmVhZFVCeXRlKCk7dmFyIHI9dC5yZWFkVUJ5dGUoKSxhPXQucmVhZFVCeXRlKCksbj10LnJlYWRVQnl0ZSgpO3Quc2tpcFVFRygpO3ZhciBpPTQyMDtpZigxMDA9PT1yfHwxMTA9PT1yfHwxMjI9PT1yfHwyNDQ9PT1yfHw0ND09PXJ8fDgzPT09cnx8ODY9PT1yfHwxMTg9PT1yfHwxMjg9PT1yfHwxMzg9PT1yfHwxNDQ9PT1yKXt2YXIgcz10LnJlYWRVRUcoKTtpZihzPD0zJiYoaT1bMCw0MjAsNDIyLDQ0NF1bc10pLDM9PT1zJiZ0LnNraXBCaXRzKDEpLHQuc2tpcFVFRygpLHQuc2tpcFVFRygpLHQuc2tpcEJpdHMoMSksdC5yZWFkQm9vbCgpKWZvcih2YXIgbz0zIT09cz84OjEyLHU9MDt1PG87dSsrKXQucmVhZEJvb2woKSYmKHU8Nj90LnNraXBTY2FsaW5nTGlzdCgxNik6dC5za2lwU2NhbGluZ0xpc3QoNjQpKX10LnNraXBVRUcoKTt2YXIgYz10LnJlYWRVRUcoKTtpZigwPT09Yyl0LnJlYWRVRUcoKTtlbHNlIGlmKDE9PT1jKXt0LnNraXBCaXRzKDEpLHQuc2tpcFVFRygpLHQuc2tpcFVFRygpO2Zvcih2YXIgbD10LnJlYWRVRUcoKSxmPTA7ZjxsO2YrKyl0LnNraXBVRUcoKX10LnNraXBVRUcoKSx0LnNraXBCaXRzKDEpO3ZhciBkPXQucmVhZFVFRygpLGg9dC5yZWFkVUVHKCkscD10LnJlYWRCaXRzKDEpOzA9PT1wJiZ0LnNraXBCaXRzKDEpLHQuc2tpcEJpdHMoMSk7dmFyIHYseSxtLGcsayxiPTAsXz0wLHc9MCx4PTA7aWYodC5yZWFkQm9vbCgpJiYoYj10LnJlYWRVRUcoKSxfPXQucmVhZFVFRygpLHc9dC5yZWFkVUVHKCkseD10LnJlYWRVRUcoKSksdC5yZWFkQm9vbCgpKXtpZih0LnJlYWRCb29sKCkpc3dpdGNoKHQucmVhZFVCeXRlKCkpe2Nhc2UgMTp2PVsxLDFdO2JyZWFrO2Nhc2UgMjp2PVsxMiwxMV07YnJlYWs7Y2FzZSAzOnY9WzEwLDExXTticmVhaztjYXNlIDQ6dj1bMTYsMTFdO2JyZWFrO2Nhc2UgNTp2PVs0MCwzM107YnJlYWs7Y2FzZSA2OnY9WzI0LDExXTticmVhaztjYXNlIDc6dj1bMjAsMTFdO2JyZWFrO2Nhc2UgODp2PVszMiwxMV07YnJlYWs7Y2FzZSA5OnY9WzgwLDMzXTticmVhaztjYXNlIDEwOnY9WzE4LDExXTticmVhaztjYXNlIDExOnY9WzE1LDExXTticmVhaztjYXNlIDEyOnY9WzY0LDMzXTticmVhaztjYXNlIDEzOnY9WzE2MCw5OV07YnJlYWs7Y2FzZSAxNDp2PVs0LDNdO2JyZWFrO2Nhc2UgMTU6dj1bMywyXTticmVhaztjYXNlIDE2OnY9WzIsMV07YnJlYWs7Y2FzZSAyNTU6dj1bdC5yZWFkVUJ5dGUoKTw8OHx0LnJlYWRVQnl0ZSgpLHQucmVhZFVCeXRlKCk8PDh8dC5yZWFkVUJ5dGUoKV19aWYodC5yZWFkQm9vbCgpJiZ0LnJlYWRCb29sKCksdC5yZWFkQm9vbCgpJiYodC5yZWFkQml0cyg0KSx0LnJlYWRCb29sKCkmJnQucmVhZEJpdHMoMjQpKSx0LnJlYWRCb29sKCkmJih0LnJlYWRVRUcoKSx0LnJlYWRVRUcoKSksdC5yZWFkQm9vbCgpKXt2YXIgUz10LnJlYWRCaXRzKDMyKSxBPXQucmVhZEJpdHMoMzIpO3k9dC5yZWFkQm9vbCgpLGs9KG09QSkvKGc9MipTKX19cmV0dXJue2NvZGVjOnRlKGUuc3ViYXJyYXkoMSw0KSkscHJvZmlsZUlkYzpyLHByb2ZpbGVDb21wYXRpYmlsaXR5OmEsbGV2ZWxJZGM6bixjaHJvbWFGb3JtYXQ6aSx3aWR0aDpNYXRoLmNlaWwoMTYqKGQrMSktMiooYitfKSksaGVpZ2h0OigyLXApKihoKzEpKjE2LShwPzI6NCkqKHcreCksc2FyUmF0aW86dixmcHNOdW06bSxmcHNEZW46ZyxmcHM6ayxmaXhlZEZyYW1lOnl9fX1dKSxlfSgpLHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6ImdldFJhdGVJbmRleEJ5UmF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuRlJFUS5pbmRleE9mKHQpfX0se2tleToicGFyc2VBRFRTIix2YWx1ZTpmdW5jdGlvbih0LHIpe2Zvcih2YXIgYT10Lmxlbmd0aCxuPTA7bisyPGEmJigyNTUhPT10W25dfHwyNDAhPSgyNDYmdFtuKzFdKSk7KW4rKztpZighKG4+PWEpKXt2YXIgaT1uLHM9W10sbz0oNjAmdFtuKzJdKT4+PjIsdT1lLkZSRVFbb107aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNhbXBsaW5nIGluZGV4OiAiLmNvbmNhdChvKSk7Zm9yKHZhciBjLGwsZj0xKygoMTkyJnRbbisyXSk+Pj42KSxkPSgxJnRbbisyXSk8PDJ8KDE5MiZ0W24rM10pPj4+NixoPWUuX2dldENvbmZpZyhvLGQsZikscD1oLmNvbmZpZyx2PWguY29kZWMseT0wLG09ZS5nZXRGcmFtZUR1cmF0aW9uKHUpO24rNzxhOylpZigyNTU9PT10W25dJiYyNDA9PSgyNDYmdFtuKzFdKSl7aWYoYS1uPChsPSgzJnRbbiszXSk8PDExfHRbbis0XTw8M3woMjI0JnRbbis1XSk+PjUpKWJyZWFrO2M9MiooMSZ+dFtuKzFdKSxzLnB1c2goe3B0czpyK3kqbSxkYXRhOnQuc3ViYXJyYXkobis3K2MsbitsKX0pLHkrKyxuKz1sfWVsc2UgbisrO3JldHVybntza2lwOmkscmVtYWluaW5nOm4+PWE/dm9pZCAwOnQuc3ViYXJyYXkobiksZnJhbWVzOnMsc2FtcGxpbmdGcmVxdWVuY3lJbmRleDpvLHNhbXBsZVJhdGU6dSxvYmplY3RUeXBlOmYsY2hhbm5lbENvdW50OmQsY29kZWM6dixjb25maWc6cCxvcmlnaW5Db2RlYzoibXA0YS40MC4iLmNvbmNhdChmKX19fX0se2tleToicGFyc2VBdWRpb1NwZWNpZmljQ29uZmlnIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0Lmxlbmd0aCl7dmFyIHI9dFswXT4+PjMsYT0oNyZ0WzBdKTw8MXx0WzFdPj4+NyxuPSgxMjAmdFsxXSk+Pj4zLGk9ZS5GUkVRW2FdO2lmKGkpe3ZhciBzPWUuX2dldENvbmZpZyhhLG4scik7cmV0dXJue3NhbXBsaW5nRnJlcXVlbmN5SW5kZXg6YSxzYW1wbGVSYXRlOmksb2JqZWN0VHlwZTpyLGNoYW5uZWxDb3VudDpuLGNvbmZpZzpzLmNvbmZpZyxjb2RlYzpzLmNvZGVjLG9yaWdpbkNvZGVjOiJtcDRhLjQwLiIuY29uY2F0KHIpfX19fX0se2tleToiZ2V0RnJhbWVEdXJhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjllNDtyZXR1cm4gMTAyNCp0L2V9fSx7a2V5OiJfZ2V0Q29uZmlnIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGEsbixpPVtdO3JldHVybiBYP2U+PTY/KGE9NSxuPWUtMyk6KGE9MixuPWUpOlk/KGE9MixuPWUpOihhPTI9PT1yfHw1PT09cj9yOjUsbj1lLGU+PTY/bj1lLTM6MT09PXQmJihhPTIsbj1lKSksaVswXT1hPDwzLGlbMF18PSgxNCZlKT4+MSxpWzFdPSgxJmUpPDw3LGlbMV18PXQ8PDMsNT09PWEmJihpWzFdfD0oMTQmbik+PjEsaVsyXT0oMSZuKTw8NyxpWzJdfD04LGlbM109MCkse2NvbmZpZzppLGNvZGVjOiJtcDRhLjQwLiIuY29uY2F0KGEpfX19LHtrZXk6ImdldFNpbGVudEZyYW1lIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCJtcDRhLjQwLjIiPT09ZSl7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzNSwxMjhdKTtpZigyPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzMzLDAsNzMsMTQ0LDIsMjUsMCwzNSwxMjhdKTtpZigzPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTQyXSk7aWYoND09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEyOCw0NCwxMjgsOCwyLDU2XSk7aWYoNT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEzMCw0OCw0LDE1MywwLDMzLDE0NCwyLDU2XSk7aWYoNj09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEzMCw0OCw0LDE1MywwLDMzLDE0NCwyLDAsMTc4LDAsMzIsOCwyMjRdKX1lbHNle2lmKDE9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMSw2NCwzNCwxMjgsMTYzLDc4LDIzMCwxMjgsMTg2LDgsMCwwLDAsMjgsNiwyNDEsMTkzLDEwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDk0XSk7aWYoMj09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFsxLDY0LDM0LDEyOCwxNjMsOTQsMjMwLDEyOCwxODYsOCwwLDAsMCwwLDE0OSwwLDYsMjQxLDE2MSwxMCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5NF0pO2lmKDM9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMSw2NCwzNCwxMjgsMTYzLDk0LDIzMCwxMjgsMTg2LDgsMCwwLDAsMCwxNDksMCw2LDI0MSwxNjEsMTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTRdKX19fV0pLGV9KCk7aShzZSwiRlJFUSIsWzk2ZTMsODgyMDAsNjRlMyw0OGUzLDQ0MTAwLDMyZTMsMjRlMywyMjA1MCwxNmUzLDEyZTMsMTEwMjUsOGUzLDczNTBdKTt2YXIgb2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToicGFyc2VIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighKHQubGVuZ3RoPDIzKSl7cj1yfHx7fTtmb3IodmFyIGEsbixpLHMsbyx1PTErKDMmdFsyMV0pLGM9W10sbD1bXSxmPVtdLGQ9MjMsaD10WzIyXSxwPTA7cDxoO3ArKyl7aT02MyZ0W2RdLHM9dFtkKzFdPDw4fHRbZCsyXSxkKz0zO2Zvcih2YXIgdj0wO3Y8czt2KyspaWYobz10W2RdPDw4fHRbZCsxXSxkKz0yLG8pe3N3aXRjaChpKXtjYXNlIDMyOnZhciB5PXQuc3ViYXJyYXkoZCxkK28pO2F8fChhPWUucGFyc2VWUFMobmUucmVtb3ZlRVBCKHkpLHIpKSxmLnB1c2goeSk7YnJlYWs7Y2FzZSAzMzp2YXIgbT10LnN1YmFycmF5KGQsZCtvKTtufHwobj1lLnBhcnNlU1BTKG5lLnJlbW92ZUVQQihtKSxyKSksYy5wdXNoKG0pO2JyZWFrO2Nhc2UgMzQ6bC5wdXNoKHQuc3ViYXJyYXkoZCxkK28pKX1kKz1vfX1yZXR1cm57aHZjQzpyLHNwczpuLHNwc0FycjpjLHBwc0FycjpsLHZwc0FycjpmLG5hbFVuaXRTaXplOnV9fX19LHtrZXk6InBhcnNlVlBTIix2YWx1ZTpmdW5jdGlvbih0LHIpe3I9cnx8e307dmFyIGE9bmV3IGoodCk7YS5yZWFkVUJ5dGUoKSxhLnJlYWRVQnl0ZSgpLGEucmVhZEJpdHMoMTIpO3ZhciBuPWEucmVhZEJpdHMoMyk7cmV0dXJuIHIubnVtVGVtcG9yYWxMYXllcnM9TWF0aC5tYXgoci5udW1UZW1wb3JhbExheWVyc3x8MCxuKzEpLGEucmVhZEJpdHMoMTcpLGUuX3BhcnNlUHJvZmlsZVRpZXJMZXZlbChhLG4scikscn19LHtrZXk6InBhcnNlU1BTIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cj1yfHx7fTt2YXIgYT1uZXcgaih0KTthLnJlYWRVQnl0ZSgpLGEucmVhZFVCeXRlKCksYS5yZWFkQml0cyg0KTt2YXIgbj1hLnJlYWRCaXRzKDMpO3IubnVtVGVtcG9yYWxMYXllcnM9TWF0aC5tYXgobisxLHIubnVtVGVtcG9yYWxMYXllcnN8fDApLHIudGVtcG9yYWxJZE5lc3RlZD1hLnJlYWRCaXRzKDEpLGUuX3BhcnNlUHJvZmlsZVRpZXJMZXZlbChhLG4sciksYS5yZWFkVUVHKCk7dmFyIGk9ci5jaHJvbWFGb3JtYXRJZGM9YS5yZWFkVUVHKCkscz00MjA7aTw9MyYmKHM9WzAsNDIwLDQyMiw0NDRdW2ldKTt2YXIgbz0wOzM9PT1pJiYobz1hLnJlYWRCaXRzKDEpKTt2YXIgdSxjLGwsZixkPWEucmVhZFVFRygpLGg9YS5yZWFkVUVHKCkscD1hLnJlYWRCaXRzKDEpO2lmKDE9PT1wJiYodT1hLnJlYWRVRUcoKSxjPWEucmVhZFVFRygpLGw9YS5yZWFkVUVHKCksZj1hLnJlYWRVRUcoKSksci5iaXREZXB0aEx1bWFNaW51czg9YS5yZWFkVUVHKCksci5iaXREZXB0aENocm9tYU1pbnVzOD1hLnJlYWRVRUcoKSwxPT09cCl7dmFyIHY9MSE9PWkmJjIhPT1pfHwwIT09bz8xOjIseT0xPT09aSYmMD09PW8/MjoxO2QtPXYqKGMrdSksaC09eSooZitsKX1yZXR1cm57Y29kZWM6ImhldjEuMS42Lkw5My5CMCIsd2lkdGg6ZCxoZWlnaHQ6aCxjaHJvbWFGb3JtYXQ6cyxodmNDOnJ9fX0se2tleToiX3BhcnNlUHJvZmlsZVRpZXJMZXZlbCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXIuZ2VuZXJhbFRpZXJGbGFnfHwwO3IuZ2VuZXJhbFByb2ZpbGVTcGFjZT1lLnJlYWRCaXRzKDIpLHIuZ2VuZXJhbFRpZXJGbGFnPU1hdGgubWF4KGUucmVhZEJpdHMoMSksYSksci5nZW5lcmFsUHJvZmlsZUlkYz1NYXRoLm1heChlLnJlYWRCaXRzKDUpLHIuZ2VuZXJhbFByb2ZpbGVJZGN8fDApLHIuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3M9ZS5yZWFkQml0cygzMiksci5nZW5lcmFsQ29uc3RyYWludEluZGljYXRvckZsYWdzPVtlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCksZS5yZWFkQml0cyg4KSxlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCksZS5yZWFkQml0cyg4KV07dmFyIG49ZS5yZWFkQml0cyg4KTthPHIuZ2VuZXJhbFRpZXJGbGFnP3IuZ2VuZXJhbExldmVsSWRjPW46ci5nZW5lcmFsTGV2ZWxJZGM9TWF0aC5tYXgobixyLmdlbmVyYWxMZXZlbElkY3x8MCk7dmFyIGk9W10scz1bXTtpZih0PmUuYml0c0F2YWlsYWJsZSl0aHJvdyBuZXcgRXJyb3IoIm1heFN1YkxheWVyc01pbnVzIGluYXZsaWQgc2l6ZSAiLmNvbmNhdCh0KSk7Zm9yKHZhciBvPTA7bzx0O28rKylpW29dPWUucmVhZEJpdHMoMSksc1tvXT1lLnJlYWRCaXRzKDEpO3Q+MCYmZS5yZWFkQml0cygyKig4LXQpKTtmb3IodmFyIHU9MDt1PHQ7dSsrKTAhPT1pW3VdJiYoZS5yZWFkQml0cygyKSxlLnJlYWRCaXRzKDEpLGUucmVhZEJpdHMoNSksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cyg0KSxlLnJlYWRCaXRzKDE2KSxlLnJlYWRCaXRzKDE2KSxlLnJlYWRCaXRzKDEyKSksMCE9PXNbdV0mJmUucmVhZEJpdHMoOCl9fV0pLGV9KCksdWU9MWUzLGNlPTVlMyxsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSx0aGlzLnZpZGVvVHJhY2s9dCx0aGlzLmF1ZGlvVHJhY2s9YSx0aGlzLm1ldGFkYXRhVHJhY2s9bix0aGlzLl9iYXNlRHRzPS0xLHRoaXMuX2Jhc2VEdHNJbml0ZWQ9ITEsdGhpcy5fYXVkaW9OZXh0UHRzPXZvaWQgMCx0aGlzLl92aWRlb05leHREdHM9dm9pZCAwLHRoaXMuX2F1ZGlvVGltZXN0YW1wQnJlYWs9MCx0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fbGFzdFZpZGVvRHVyYXRpb249MCx0aGlzLl9rZXlGcmFtZUluTmV4dENodW5rPSExLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkdhcERvdD0tMS8wLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkxhcmdlR2FwRG90PS0xLzAsdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdD0tMS8wfXJldHVybiBuKGUsW3trZXk6ImZpeCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTt0PU1hdGgucm91bmQoMWUzKnQpO3ZhciBuPXRoaXMudmlkZW9UcmFjayxpPXRoaXMuYXVkaW9UcmFjazshciYmYXx8KHRoaXMuX3ZpZGVvTGFzdFNhbXBsZT1udWxsLHRoaXMuX2F1ZGlvTmV4dFB0cz12b2lkIDAsdGhpcy5fdmlkZW9OZXh0RHRzPXZvaWQgMCx0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaz0wLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkdhcERvdD0tMS8wLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkxhcmdlR2FwRG90PS0xLzAsdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdD0tMS8wKSxyJiYhYSYmKHRoaXMuX2Jhc2VEdHNJbml0ZWQ9ITEpLHRoaXMuX2Jhc2VEdHNJbml0ZWR8fHRoaXMuX2NhbGN1bGF0ZUJhc2VEdHMoaSxuKSwhYSYmdCYmKHRoaXMuX2F1ZGlvTmV4dFB0cz10aGlzLl92aWRlb05leHREdHM9dCk7dmFyIHM9dGhpcy5fYmFzZUR0c0luaXRlZCYmKHRoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWt8fCF0aGlzLnZpZGVvVHJhY2suZXhpc3QoKSkmJih0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrfHwhdGhpcy5hdWRpb1RyYWNrLmV4aXN0KCkpO2lmKHMmJnRoaXMuX3Jlc2V0QmFzZUR0c1doZW5TdHJlYW1CcmVha2VkKCksdGhpcy5fZml4QXVkaW8oaSksdGhpcy5fa2V5RnJhbWVJbk5leHRDaHVuaz0hMSx0aGlzLl9maXhWaWRlbyhuKSx0aGlzLm1ldGFkYXRhVHJhY2suZXhpc3QoKSl7dmFyIG89dGhpcy5tZXRhZGF0YVRyYWNrLnRpbWVzY2FsZTt0aGlzLm1ldGFkYXRhVHJhY2suc2VpU2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnB0cz10Lm9yaWdpblB0cy1lLl9iYXNlRHRzLHQudGltZT1NYXRoLm1heCgwLHQucHRzKS9vfSkpLHRoaXMubWV0YWRhdGFUcmFjay5mbHZTY3JpcHRTYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucHRzPXQub3JpZ2luUHRzLWUuX2Jhc2VEdHMsdC50aW1lPU1hdGgubWF4KDAsdC5wdHMpL299KSl9bi5zYW1wbGVzLmxlbmd0aCYmKG4uYmFzZU1lZGlhRGVjb2RlVGltZT1uLnNhbXBsZXNbMF0uZHRzKSxpLnNhbXBsZXMubGVuZ3RoJiYoaS5iYXNlTWVkaWFEZWNvZGVUaW1lPWkuc2FtcGxlc1swXS5wdHMqaS50aW1lc2NhbGUvMWUzKX19LHtrZXk6Il9maXhWaWRlbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc2FtcGxlcztpZihyLmxlbmd0aCl7dmFyIGE7aWYoci5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmR0cy09dC5fYmFzZUR0cyxlLnB0cy09dC5fYmFzZUR0cyxlLmtleWZyYW1lJiYodC5fa2V5RnJhbWVJbk5leHRDaHVuaz0hMCl9KSksZS5mcHNOdW0mJmUuZnBzRGVuKWE9ZS50aW1lc2NhbGUqKGUuZnBzRGVuL2UuZnBzTnVtKTtlbHNlIGlmKGUubGVuZ3RoPjEpe3ZhciBuPWUuc2FtcGxlc1swXSxpPWUuc2FtcGxlc1tyLmxlbmd0aC0xXTthPU1hdGguZmxvb3IoKGkuZHRzLW4uZHRzKS8oci5sZW5ndGgtMSkpfWVsc2UgYT10aGlzLl9sYXN0VmlkZW9EdXJhdGlvbnx8NDA7dmFyIHM9ci5wb3AoKTtpZih0aGlzLl92aWRlb0xhc3RTYW1wbGUmJnIudW5zaGlmdCh0aGlzLl92aWRlb0xhc3RTYW1wbGUpLHRoaXMuX3ZpZGVvTGFzdFNhbXBsZT1zLHIubGVuZ3RoKXtpZih2b2lkIDA9PT10aGlzLl92aWRlb05leHREdHMpe3ZhciBvPXJbMF07dGhpcy5fdmlkZW9OZXh0RHRzPW8uZHRzfXZhciB1PXIubGVuZ3RoLGM9MCxsPXJbMF0sZj10aGlzLl92aWRlb05leHREdHMtbC5kdHM7aWYoTWF0aC5hYnMoZik+MjAwKXt2YXIgZDtpZihNYXRoLmFicyhsLmR0cy10aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25DaHVua0ZpcnN0RHRzRG90KT41ZTMpdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdD1sLmR0cyxlLndhcm5pbmdzLnB1c2goe3R5cGU6QyxuZXh0RHRzOnRoaXMuX3ZpZGVvTmV4dER0cyxmaXJzdFNhbXBsZUR0czpsLmR0cyxuZXh0U2FtcGxlRHRzOm51bGw9PT0oZD1yWzFdKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5kdHMsc2FtcGxlRHVyYXRpb246Zn0pO3RoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWs+PTU/KHRoaXMuX3ZpZGVvTmV4dER0cz1sLmR0cyx0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTApOihsLmR0cys9ZixsLnB0cys9Zix0aGlzLmF1ZGlvVHJhY2suZXhpc3QoKXx8KHRoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWs9MSkpfWZvcih2YXIgaD0wO2g8dTtoKyspe3ZhciBwPXJbaF0uZHRzLHY9cltoKzFdOygoYz1oPHUtMT92LmR0cy1wOnM/cy5kdHMtcDphKT4xZTN8fGM8MCkmJih0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrKyssTWF0aC5hYnMocC10aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25MYXJnZUdhcERvdCk+NWUzJiYodGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uTGFyZ2VHYXBEb3Q9cCxlLndhcm5pbmdzLnB1c2goe3R5cGU6VCx0aW1lOnAvZS50aW1lc2NhbGUsZHRzOnAsb3JpZ2luRHRzOnJbaF0ub3JpZ2luRHRzLG5leHREdHM6dGhpcy5fdmlkZW9OZXh0RHRzLHNhbXBsZUR1cmF0aW9uOmMscmVmU2FtcGxlRHVyYXRpb246YX0pKSxjPWEpLHJbaF0uZHVyYXRpb249Yyx0aGlzLl92aWRlb05leHREdHMrPWMsdGhpcy5fbGFzdFZpZGVvRHVyYXRpb249Y319fX19LHtrZXk6Il9maXhBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc2FtcGxlcztyLmxlbmd0aCYmKHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5kdHM9ZS5wdHMtPXQuX2Jhc2VEdHN9KSksdGhpcy5fZG9GaXhBdWRpb0ludGVybmFsKGUsciwxZTMpKX19LHtrZXk6Il9jYWxjdWxhdGVCYXNlRHRzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUuc2FtcGxlcyxhPXQuc2FtcGxlcztpZighci5sZW5ndGgmJiFhLmxlbmd0aClyZXR1cm4hMTt2YXIgbj0xLzAsaT0xLzA7ci5sZW5ndGgmJihlLmJhc2VEdHM9bj1yWzBdLnB0cyksYS5sZW5ndGgmJih0LmJhc2VEdHM9aT1hWzBdLmR0cyksdGhpcy5fYmFzZUR0cz1NYXRoLm1pbihuLGkpO3ZhciBzPWktbjtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHMpJiZNYXRoLmFicyhzKT41MDAmJnQud2FybmluZ3MucHVzaCh7dHlwZTpCLHZpZGVvQmFzZUR0czppLGF1ZGlvQmFzZVB0czpuLGJhc2VEdHM6dGhpcy5fYmFzZUR0cyxkZWx0YTpzfSksdGhpcy5fYmFzZUR0c0luaXRlZD0hMCwhMH19LHtrZXk6Il9yZXNldEJhc2VEdHNXaGVuU3RyZWFtQnJlYWtlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9jYWxjdWxhdGVCYXNlRHRzKHRoaXMuYXVkaW9UcmFjayx0aGlzLnZpZGVvVHJhY2spJiYodGhpcy5hdWRpb1RyYWNrLmV4aXN0KCk/dGhpcy52aWRlb1RyYWNrLmV4aXN0KCk/dGhpcy5fYmFzZUR0cy09TWF0aC5taW4odGhpcy5fYXVkaW9OZXh0UHRzLHRoaXMuX3ZpZGVvTmV4dER0cyk6dGhpcy5fYmFzZUR0cy09dGhpcy5fYXVkaW9OZXh0UHRzOnRoaXMuX2Jhc2VEdHMtPXRoaXMuX3ZpZGVvTmV4dER0cyx0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz0wKX19LHtrZXk6Il9kb0ZpeEF1ZGlvSW50ZXJuYWwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtlLnNhbXBsZUR1cmF0aW9ufHwoZS5zYW1wbGVEdXJhdGlvbj1lLmNvZGVjVHlwZT09PUE/c2UuZ2V0RnJhbWVEdXJhdGlvbihlLnRpbWVzY2FsZSxyKTp0aGlzLl9nZXRHNzExRHVyYXRpb24oZSkpO3ZhciBhPWUuc2FtcGxlRHVyYXRpb24sbj1lLmNvZGVjVHlwZT09PUE/MTAyNDphKmUudGltZXNjYWxlLzFlMztpZih2b2lkIDA9PT10aGlzLl9hdWRpb05leHRQdHMpe3ZhciBpPXRbMF07dGhpcy5fYXVkaW9OZXh0UHRzPWkucHRzfWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbz10aGlzLl9hdWRpb05leHRQdHMsdT10W3NdLGM9dS5wdHMtbztpZigwPT09cyYmdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz49NSYmdGhpcy5fa2V5RnJhbWVJbk5leHRDaHVuayYmKG89dGhpcy5fYXVkaW9OZXh0UHRzPXUuZHRzLGM9MCx0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrPTApLCF0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrJiZjPj0zKmEmJmM8PXVlJiYhVyl7dmFyIGw9dGhpcy5fZ2V0U2lsZW50RnJhbWUoZSl8fHRbMF0uZGF0YS5zdWJhcnJheSgpLGY9TWF0aC5mbG9vcihjL2EpO01hdGguYWJzKHUucHRzLXRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkdhcERvdCk+Y2UmJih0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25HYXBEb3Q9dS5wdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOlAscHRzOnUucHRzLG9yaWdpblB0czp1Lm9yaWdpblB0cyxjb3VudDpmLG5leHRQdHM6byxyZWZTYW1wbGVEdXJhdGlvbjphfSkpO2Zvcih2YXIgZD0wO2Q8ZjtkKyspe3ZhciBoPW5ldyBPKE1hdGguZmxvb3IodGhpcy5fYXVkaW9OZXh0UHRzK2EpLU1hdGguZmxvb3IodGhpcy5fYXVkaW9OZXh0UHRzKSxsLG4pO2gub3JpZ2luUHRzPU1hdGguZmxvb3IodGhpcy5fYmFzZUR0cytvKSx0LnNwbGljZShzLDAsaCksdGhpcy5fYXVkaW9OZXh0UHRzKz1hLHMrK31zLS19ZWxzZSBjPD0tMyphJiZjPj0tMWUzPyhNYXRoLmFicyh1LnB0cy10aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25PdmVybGFwRG90KT5jZSYmKHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9dS5wdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOkkscHRzOnUucHRzLG9yaWdpblB0czp1Lm9yaWdpblB0cyxuZXh0UHRzOm8scmVmU2FtcGxlRHVyYXRpb246YX0pKSx0LnNwbGljZShzLDEpLHMtLSk6KE1hdGguYWJzKGMpPnVlJiYodGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaysrLE1hdGguYWJzKHUucHRzLXRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkxhcmdlR2FwRG90KT5jZSYmKHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkxhcmdlR2FwRG90PXUucHRzLGUud2FybmluZ3MucHVzaCh7dHlwZTpVLHRpbWU6dS5wdHMvMWUzLHB0czp1LnB0cyxvcmlnaW5QdHM6dS5vcmlnaW5QdHMsbmV4dFB0czpvLHNhbXBsZUR1cmF0aW9uOmMscmVmU2FtcGxlRHVyYXRpb246YX0pKSksdS5kdHM9dS5wdHM9byx1LmR1cmF0aW9uPW4sdGhpcy5fYXVkaW9OZXh0UHRzKz1hKX19fSx7a2V5OiJfZ2V0RzcxMUR1cmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNhbXBsZVNpemUscj1lLmNoYW5uZWxDb3VudCxhPWUuc2FtcGxlUmF0ZSxuPWUuc2FtcGxlc1swXTtpZihuKXJldHVybiAyKm4uZGF0YS5ieXRlTGVuZ3RoL3IvKHQvOCkvYSoxZTN9fSx7a2V5OiJfZ2V0U2lsZW50RnJhbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvZGVjVHlwZT09PUE/c2UuZ2V0U2lsZW50RnJhbWUoZS5jb2RlYyxlLmNoYW5uZWxDb3VudCk6bmV3IFVpbnQ4QXJyYXkoOCplLnNhbXBsZUR1cmF0aW9uKmUuY2hhbm5lbENvdW50KX19XSksZX0oKSxmZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDwzKSl7dmFyIHI9e30sYT1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKSksbj1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrYS5zaXplLHQuYnl0ZUxlbmd0aC1hLnNpemUpKTtyZXR1cm4gclthLmRhdGFdPW4uZGF0YSxyfX19LHtrZXk6Il9wYXJzZVZhbHVlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcixhPXQuYnl0ZUxlbmd0aCxuPTEsaT0hMTtzd2l0Y2godC5nZXRVaW50OCgwKSl7Y2FzZSAwOnI9dC5nZXRGbG9hdDY0KDEpLG4rPTg7YnJlYWs7Y2FzZSAxOnI9ISF0LmdldFVpbnQ4KDEpLG4rPTE7YnJlYWs7Y2FzZSAyOnZhciBzPWUuX3BhcnNlU3RyaW5nKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbix0LmJ5dGVMZW5ndGgtbikpO3I9cy5kYXRhLG4rPXMuc2l6ZTticmVhaztjYXNlIDM6cj17fTt2YXIgbz0wO2Zvcig5PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIoYS00KSkmJihvPTMpO248YS00Oyl7dmFyIHU9ZS5fcGFyc2VPYmplY3QobmV3IERhdGFWaWV3KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLHQuYnl0ZUxlbmd0aC1uLW8pKSxjPXUuc2l6ZSxsPXUuZGF0YTtpZih1LmlzRW5kKWJyZWFrO3JbbC5uYW1lXT1sLnZhbHVlLG4rPWN9aWYobjw9YS0zKTk9PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIobi0xKSkmJihuKz0zKTticmVhaztjYXNlIDg6cj17fSxuKz00O3ZhciBmPTA7Zm9yKDk9PSgxNjc3NzIxNSZ0LmdldFVpbnQzMihhLTQpKSYmKGY9Myk7bjxhLTg7KXt2YXIgZD1lLl9wYXJzZU9iamVjdChuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K24sdC5ieXRlTGVuZ3RoLW4tZikpLGg9ZC5zaXplLHA9ZC5kYXRhO2lmKGQuaXNFbmQpYnJlYWs7cltwLm5hbWVdPXAudmFsdWUsbis9aH1pZihuPD1hLTMpOT09PSgxNjc3NzIxNSZ0LmdldFVpbnQzMihuLTEpKSYmKG4rPTMpO2JyZWFrO2Nhc2UgOTpyPXZvaWQgMCxuPTEsaT0hMDticmVhaztjYXNlIDEwOnI9W107dmFyIHY9dC5nZXRVaW50MzIoMSk7bis9NDtmb3IodmFyIHk9MDt5PHY7eSsrKXt2YXIgbT1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbix0LmJ5dGVMZW5ndGgtbikpLGc9bS5kYXRhLGs9bS5zaXplO3IucHVzaChnKSxuKz1rfWJyZWFrO2Nhc2UgMTE6dmFyIGI9dC5nZXRGbG9hdDY0KG4pKzZlNCp0LmdldEludDE2KG4rOCk7cj1uZXcgRGF0ZShiKSxuKz0xMDticmVhaztjYXNlIDEyOnZhciBfPXQuZ2V0VWludDMyKDEpO24rPTQscj0iIixfPjAmJihyPUguZGVjb2RlKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLF8pKSksbis9XzticmVhaztkZWZhdWx0Om49YX1yZXR1cm57ZGF0YTpyLHNpemU6bixpc0VuZDppfX19LHtrZXk6Il9wYXJzZVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRVaW50MTYoMCkscj0iIjtyZXR1cm4gdD4wJiYocj1ILmRlY29kZShuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrMix0KSkpLHtkYXRhOnIsc2l6ZToyK3R9fX0se2tleToiX3BhcnNlT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHQuYnl0ZUxlbmd0aDwzKSl7dmFyIHI9ZS5fcGFyc2VTdHJpbmcodCksYT1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrci5zaXplLHQuYnl0ZUxlbmd0aC1yLnNpemUpKTtyZXR1cm57ZGF0YTp7bmFtZTpyLmRhdGEsdmFsdWU6YS5kYXRhfSxzaXplOnIuc2l6ZSthLnNpemUsaXNFbmQ6YS5pc0VuZH19fX1dKSxlfSgpLGRlPW5ldyBHKCJGbHZEZW11eGVyIiksaGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsYSxuKXtyKHRoaXMsZSksaSh0aGlzLCJfaGVhZGVyUGFyc2VkIiwhMSksaSh0aGlzLCJfcmVtYWluaW5nRGF0YSIsbnVsbCksaSh0aGlzLCJfZ29wSWQiLDApLGkodGhpcywiX25lZWRBZGRNZXRhQmVmb3JlS2V5RnJhbWVOYWwiLCEwKSx0aGlzLnZpZGVvVHJhY2s9dHx8bmV3IHosdGhpcy5hdWRpb1RyYWNrPWF8fG5ldyBNLHRoaXMubWV0YWRhdGFUcmFjaz1ufHxuZXcgTix0aGlzLl9maXhlcj1uZXcgbGUodGhpcy52aWRlb1RyYWNrLHRoaXMuYXVkaW9UcmFjayx0aGlzLm1ldGFkYXRhVHJhY2spfXJldHVybiBuKGUsW3trZXk6ImRlbXV4Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxuPXRoaXMuYXVkaW9UcmFjayxpPXRoaXMudmlkZW9UcmFjayxzPXRoaXMubWV0YWRhdGFUcmFjaztpZighciYmYXx8KHRoaXMuX3JlbWFpbmluZ0RhdGE9bnVsbCksciYmKHRoaXMuX2hlYWRlclBhcnNlZD0hMSkscj8oaS5yZXNldCgpLG4ucmVzZXQoKSxzLnJlc2V0KCkpOihpLnNhbXBsZXM9W10sbi5zYW1wbGVzPVtdLHMuc2VpU2FtcGxlcz1bXSxzLmZsdlNjcmlwdFNhbXBsZXM9W10saS53YXJuaW5ncz1bXSxuLndhcm5pbmdzPVtdLHRoaXMuX3JlbWFpbmluZ0RhdGEmJih0PVoodGhpcy5fcmVtYWluaW5nRGF0YSx0KSx0aGlzLl9yZW1haW5pbmdEYXRhPW51bGwpKSwhdC5sZW5ndGgpcmV0dXJue3ZpZGVvVHJhY2s6aSxhdWRpb1RyYWNrOm4sbWV0YWRhdGFUcmFjazpzfTt2YXIgbz0wO2lmKCF0aGlzLl9oZWFkZXJQYXJzZWQpe2lmKCFlLnByb2JlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBmbHYgZmlsZSIpO24ucHJlc2VudD0oNCZ0WzRdKT4+PjIhPTAsaS5wcmVzZW50PTAhPSgxJnRbNF0pLHRoaXMuX2hlYWRlclBhcnNlZD0hMCxvPSQodCw1KSs0fWZvcih2YXIgdSxjLGwsZixkLGg9dC5sZW5ndGg7bysxNTxoJiYodT10W29dLCEobysxNSsoYz10W28rMV08PDE2fHRbbysyXTw8OHx0W28rM10pPmgpKTspbD0odFtvKzddPDwyND4+PjApKyh0W28rNF08PDE2KSsodFtvKzVdPDw4KSt0W28rNl0sbys9MTEsZj10LnN1YmFycmF5KG8sbytjKSw4PT09dT90aGlzLl9wYXJzZUF1ZGlvKGYsbCk6OT09PXU/dGhpcy5fcGFyc2VWaWRlbyhmLGwpOjE4PT09dT90aGlzLl9wYXJzZVNjcmlwdChmLGwpOmRlLndhcm4oIkludmFsaWQgdGFnIHR5cGU6ICIuY29uY2F0KHUpKSwoZD0kKHQsbys9YykpIT09MTErYyYmZGUud2FybigiSW52YWxpZCBQcmV2VGFnU2l6ZSAiLmNvbmNhdChkLCIgKCIpLmNvbmNhdCgxMStjLCIpIikpLG8rPTQ7cmV0dXJuIG88aCYmKHRoaXMuX3JlbWFpbmluZ0RhdGE9dC5zdWJhcnJheShvKSksbi5mb3JtYXRUaW1lc2NhbGU9aS5mb3JtYXRUaW1lc2NhbGU9aS50aW1lc2NhbGU9cy50aW1lc2NhbGU9MWUzLG4udGltZXNjYWxlPW4uc2FtcGxlUmF0ZXx8MCwhbi5leGlzdCgpJiZuLmhhc1NhbXBsZSgpJiZuLnJlc2V0KCksIWkuZXhpc3QoKSYmaS5oYXNTYW1wbGUoKSYmaS5yZXNldCgpLHt2aWRlb1RyYWNrOmksYXVkaW9UcmFjazpuLG1ldGFkYXRhVHJhY2s6c319fSx7a2V5OiJmaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5fZml4ZXIuZml4KGUsdCxyKSx7dmlkZW9UcmFjazp0aGlzLnZpZGVvVHJhY2ssYXVkaW9UcmFjazp0aGlzLmF1ZGlvVHJhY2ssbWV0YWRhdGFUcmFjazp0aGlzLm1ldGFkYXRhVHJhY2t9fX0se2tleToiZGVtdXhBbmRGaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe3JldHVybiB0aGlzLmRlbXV4KGUsdCxyKSx0aGlzLmZpeChhLHQscil9fSx7a2V5OiJfcGFyc2VBdWRpbyIsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZih0Lmxlbmd0aCl7dmFyIGE9KDI0MCZ0WzBdKT4+PjQsbj10aGlzLmF1ZGlvVHJhY2s7aWYoMTAhPT1hJiY3IT09YSYmOCE9PWEpcmV0dXJuIGRlLndhcm4oIlVuc3VwcG9ydGVkIHNvdW5kIGZvcm1hdDogIi5jb25jYXQoYSkpLHZvaWQgbi5yZXNldCgpO2lmKDEwIT09YSl7dmFyIGk9KDEyJnRbMF0pPj4yLHM9KDImdFswXSk+PjEsbz0xJnRbMF07bi5zYW1wbGVSYXRlPWUuQVVESU9fUkFURVtpXSxuLnNhbXBsZVNpemU9cz8xNjo4LG4uY2hhbm5lbENvdW50PW8rMX0xMD09PWE/dGhpcy5fcGFyc2VBYWModCxyKTp0aGlzLl9wYXJzZUc3MTEodCxyLGEpfX19LHtrZXk6Il9wYXJzZUc3MTEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10aGlzLmF1ZGlvVHJhY2s7YS5jb2RlY1R5cGU9Nz09PXI/RDpFLGEuc2FtcGxlUmF0ZT04ZTMsYS5jb2RlYz1hLmNvZGVjVHlwZSxhLnNhbXBsZXMucHVzaChuZXcgTyh0LGUuc3ViYXJyYXkoMSkpKX19LHtrZXk6Il9wYXJzZUFhYyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmF1ZGlvVHJhY2s7aWYoci5jb2RlY1R5cGU9QSwwPT09ZVsxXSl7dmFyIGE9c2UucGFyc2VBdWRpb1NwZWNpZmljQ29uZmlnKGUuc3ViYXJyYXkoMikpO2E/KHIuY29kZWM9YS5jb2RlYyxyLmNoYW5uZWxDb3VudD1hLmNoYW5uZWxDb3VudCxyLnNhbXBsZVJhdGU9YS5zYW1wbGVSYXRlLHIuY29uZmlnPWEuY29uZmlnLHIub2JqZWN0VHlwZT1hLm9iamVjdFR5cGUsci5zYW1wbGVSYXRlSW5kZXg9YS5zYW1wbGluZ0ZyZXF1ZW5jeUluZGV4KTooci5yZXNldCgpLGRlLndhcm4oIkNhbm5vdCBwYXJzZSBBdWRpb1NwZWNpZmljQ29uZmlnIixlKSl9ZWxzZSBpZigxPT09ZVsxXSl7aWYobnVsbD09dClyZXR1cm47ci5zYW1wbGVzLnB1c2gobmV3IE8odCxlLnN1YmFycmF5KDIpKSl9ZWxzZSBkZS53YXJuKCJVbmtub3duIEFBQ1BhY2tldFR5cGU6ICIuY29uY2F0KGVbMV0pKX19LHtrZXk6Il9wYXJzZVZpZGVvIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7aWYoIShlLmxlbmd0aDw2KSl7dmFyIGE9KDI0MCZlWzBdKT4+PjQsbj0xNSZlWzBdLGk9dGhpcy52aWRlb1RyYWNrO2lmKDchPT1uJiYxMiE9PW4pcmV0dXJuIGkucmVzZXQoKSx2b2lkIGRlLndhcm4oIlVuc3VwcG9ydGVkIGNvZGVjSWQ6ICIuY29uY2F0KG4pKTt2YXIgcz0xMj09PW47aS5jb2RlY1R5cGU9cz9TOng7dmFyIG89ZVsxXSx1PShlWzJdPDwxNnxlWzNdPDw4fGVbNF0pPDw4Pj44O2lmKDA9PT1vKXt2YXIgYz1lLnN1YmFycmF5KDUpLGw9cz9vZS5wYXJzZUhFVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZChjKTppZS5wYXJzZUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKGMpO2lmKGwpe3ZhciBmPWwuaHZjQyxkPWwuc3BzLGg9bC5wcHNBcnIscD1sLnNwc0Fycix2PWwudnBzQXJyLHk9bC5uYWxVbml0U2l6ZTtmJiYoaS5odmNDPWkuaHZjQ3x8ZiksZCYmKGkuY29kZWM9ZC5jb2RlYyxpLndpZHRoPWQud2lkdGgsaS5oZWlnaHQ9ZC5oZWlnaHQsaS5zYXJSYXRpbz1kLnNhclJhdGlvLGkuZnBzTnVtPWQuZnBzTnVtLGkuZnBzRGVuPWQuZnBzRGVuKSxwLmxlbmd0aCYmKGkuc3BzPXApLGgubGVuZ3RoJiYoaS5wcHM9aCksdiYmdi5sZW5ndGgmJihpLnZwcz12KSx5JiYoaS5uYWxVbml0U2l6ZT15KX1lbHNlIGRlLndhcm4oIkNhbm5vdCBwYXJzZSAiLmNvbmNhdChzPyJIRVZDIjoiQVZDIiwiRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQiKSxlKX1lbHNlIGlmKDE9PT1vKXt2YXIgbT1uZS5wYXJzZUF2Y0MoZS5zdWJhcnJheSg1KSxpLm5hbFVuaXRTaXplKTtpZigobT10aGlzLl9jaGVja0FkZE1ldGFOYWxUb1VuaXRzKHMsbSxpKSkmJm0ubGVuZ3RoKXt2YXIgZz1uZXcgUih0K3UsdCxtKTsxPT09YSYmZy5zZXRUb0tleWZyYW1lKCksaS5zYW1wbGVzLnB1c2goZyksbS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgYT1zP2VbMF0+Pj4xJjYzOjMxJmVbMF07c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDE5OmNhc2UgMjA6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6aWYoIXMmJjUhPT1hfHxzJiY1PT09YSlicmVhaztnLnNldFRvS2V5ZnJhbWUoKTticmVhaztjYXNlIDY6Y2FzZSAzOTpjYXNlIDQwOmlmKCFzJiY2IT09YXx8cyYmNj09PWEpYnJlYWs7ci5tZXRhZGF0YVRyYWNrLnNlaVNhbXBsZXMucHVzaChuZXcgRihuZS5wYXJzZVNFSShuZS5yZW1vdmVFUEIoZSkscyksdCt1KSl9fSkpLGcua2V5ZnJhbWUmJnRoaXMuX2dvcElkKyssZy5nb3BJZD10aGlzLl9nb3BJZH1lbHNlIGRlLndhcm4oIkNhbm5vdCBwYXJzZSBOQUxVcyIsZSl9ZWxzZSAyPT09b3x8ZGUud2FybigiVW5rbm93biBBVkNQYWNrZXRUeXBlOiAiLmNvbmNhdChvKSl9fX0se2tleToiX2NoZWNrQWRkTWV0YU5hbFRvVW5pdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSYmdGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD90Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0+Pj4xJjYzfSkpLmluY2x1ZGVzKDMyKT8odGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD0hMSx0KToodC51bnNoaWZ0KHIucHBzWzBdKSx0LnVuc2hpZnQoci5zcHNbMF0pLHQudW5zaGlmdChyLnZwc1swXSksdC5maWx0ZXIoQm9vbGVhbikpOih0aGlzLl9uZWVkQWRkTWV0YUJlZm9yZUtleUZyYW1lTmFsPSExLHQpfX0se2tleToiX3BhcnNlU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubWV0YWRhdGFUcmFjay5mbHZTY3JpcHRTYW1wbGVzLnB1c2gobmV3IFYoZmUucGFyc2UoZSksdCkpfX1dLFt7a2V5OiJwcm9iZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDcwPT09ZVswXSYmNzY9PT1lWzFdJiY4Nj09PWVbMl0mJjE9PT1lWzNdJiYkKGUsNSk+PTl9fV0pLGV9KCk7aShoZSwiQVVESU9fUkFURSIsWzU1MDAsMTFlMywyMmUzLDQ0ZTNdKSxuZXcgRygiVHNEZW11eGVyIik7dmFyIHBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6ImZpbmRCb3giLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjAsbj1bXTtpZighdClyZXR1cm4gbjtmb3IodmFyIGk9MCxzPSIiLG89MDt0Lmxlbmd0aD43Oyl7aWYoaT0kKHQpLHM9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc3ViYXJyYXkoNCw4KSksbz04LDE9PT1pPyhpPWVlKHQsOCksbys9OCk6aXx8KGk9dC5sZW5ndGgpLCFyWzBdfHxzPT09clswXSl7dmFyIHU9dC5zdWJhcnJheSgwLGkpO2lmKCEoci5sZW5ndGg8MikpcmV0dXJuIGUuZmluZEJveCh1LnN1YmFycmF5KG8pLHIuc2xpY2UoMSksYStvKTtuLnB1c2goe3N0YXJ0OmEsc2l6ZTppLGhlYWRlclNpemU6byx0eXBlOnMsZGF0YTp1fSl9YSs9aSx0PXQuc3ViYXJyYXkoaSl9cmV0dXJuIG59fSx7a2V5OiJ0ZmhkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtlLnRyYWNrSWQ9JCh0KTt2YXIgcj00LGE9MSZlLmZsYWdzLG49MiZlLmZsYWdzLGk9OCZlLmZsYWdzLHM9MTYmZS5mbGFncyxvPTMyJmUuZmxhZ3M7YSYmKHIrPTQsZS5iYXNlRGF0YU9mZnNldD0kKHQscikscis9NCksbiYmKGUuc2FtcGxlRGVzY3JpcHRpb25JbmRleD0kKHQscikscis9NCksaSYmKGUuZGVmYXVsdFNhbXBsZUR1cmF0aW9uPSQodCxyKSxyKz00KSxzJiYoZS5kZWZhdWx0U2FtcGxlU2l6ZT0kKHQscikscis9NCksbyYmKGUuZGVmYXVsdFNhbXBsZUZsYWdzPSQodCxyKSl9KSl9fSx7a2V5OiJzaWR4Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0wO2UucmVmZXJlbmNlX0lEPSQodCxyKSxyKz00LGUudGltZXNjYWxlPSQodCxyKSxyKz00LDA9PT1lLnZlcnNpb24/KGUuZWFybGllc3RfcHJlc2VudGF0aW9uX3RpbWU9JCh0LHIpLHIrPTQsZS5maXJzdF9vZmZzZXQ9JCh0LHIpLHIrPTQpOihlLmVhcmxpZXN0X3ByZXNlbnRhdGlvbl90aW1lPWVlKHQscikscis9OCxlLmZpcnN0X29mZnNldD1lZSh0LHIpLHIrPTgpLHIrPTIsZS5yZWZlcmVuY2VzPVtdO3ZhciBhPUoodCxyKTtyKz0yO2Zvcih2YXIgbj0wO248YTtuKyspe3ZhciBpPXt9O2UucmVmZXJlbmNlcy5wdXNoKGkpO3ZhciBzPSQodCxyKTtyKz00LGkucmVmZXJlbmNlX3R5cGU9cz4+MzEmMSxpLnJlZmVyZW5jZWRfc2l6ZT0yMTQ3NDgzNjQ3JnMsaS5zdWJzZWdtZW50X2R1cmF0aW9uPSQodCxyKSxzPSQodCxyKz00KSxyKz00LGkuc3RhcnRzX3dpdGhfU0FQPXM+PjMxJjEsaS5TQVBfdHlwZT1zPj4yOCY3LGkuU0FQX2RlbHRhX3RpbWU9MjY4NDM1NDU1JnN9fSkpfX0se2tleToibW9vdiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm12aGQ9ZS5tdmhkKGUuZmluZEJveChyLFsibXZoZCJdLGEpWzBdKSx0LnRyYWs9ZS5maW5kQm94KHIsWyJ0cmFrIl0sYSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFrKHQpfSkpLHQucHNzaD1lLnBzc2goZS5maW5kQm94KHIsWyJwc3NoIl0sYSlbMF0pfSkpfX0se2tleToibXZoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9MDsxPT09ZS52ZXJzaW9uPyhlLnRpbWVzY2FsZT0kKHQsMTYpLGUuZHVyYXRpb249ZWUodCwyMCkscis9MjgpOihlLnRpbWVzY2FsZT0kKHQsOCksZS5kdXJhdGlvbj0kKHQsMTIpLHIrPTE2KSxlLm5leHRUcmFja0lkPSQodCxyKzc2KX0pKX19LHtrZXk6InRyYWsiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC50a2hkPWUudGtoZChlLmZpbmRCb3gocixbInRraGQiXSxhKVswXSksdC5tZGlhPWUubWRpYShlLmZpbmRCb3gocixbIm1kaWEiXSxhKVswXSl9KSl9fSx7a2V5OiJ0a2hkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0wOzE9PT1lLnZlcnNpb24/KGUudHJhY2tJZD0kKHQsMTYpLGUuZHVyYXRpb249ZWUodCwyNCkscis9MzIpOihlLnRyYWNrSWQ9JCh0LDgpLGUuZHVyYXRpb249JCh0LDE2KSxyKz0yMCksZS53aWR0aD0kKHQscis1MiksZS5oZWlnaHQ9JCh0LHIrNTYpfSkpfX0se2tleToibWRpYSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm1kaGQ9ZS5tZGhkKGUuZmluZEJveChyLFsibWRoZCJdLGEpWzBdKSx0LmhkbHI9ZS5oZGxyKGUuZmluZEJveChyLFsiaGRsciJdLGEpWzBdKSx0Lm1pbmY9ZS5taW5mKGUuZmluZEJveChyLFsibWluZiJdLGEpWzBdKX0pKX19LHtrZXk6Im1kaGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPTA7MT09PWUudmVyc2lvbj8oZS50aW1lc2NhbGU9JCh0LDE2KSxlLmR1cmF0aW9uPWVlKHQsMjApLHIrPTI4KTooZS50aW1lc2NhbGU9JCh0LDgpLGUuZHVyYXRpb249JCh0LDEyKSxyKz0xNik7dmFyIGE9Sih0LHIpO2UubGFuZ3VhZ2U9U3RyaW5nLmZyb21DaGFyQ29kZSg5NisoYT4+MTAmMzEpLDk2KyhhPj41JjMxKSw5NisoMzEmYSkpfSkpfX0se2tleToiaGRsciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7MD09PWUudmVyc2lvbiYmKGUuaGFuZGxlclR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc3ViYXJyYXkoNCw4KSkpfSkpfX0se2tleToibWluZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnZtaGQ9ZS52bWhkKGUuZmluZEJveChyLFsidm1oZCJdLGEpWzBdKSx0LnNtaGQ9ZS5zbWhkKGUuZmluZEJveChyLFsic21oZCJdLGEpWzBdKSx0LnN0Ymw9ZS5zdGJsKGUuZmluZEJveChyLFsic3RibCJdLGEpWzBdKX0pKX19LHtrZXk6InZtaGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe2UuZ3JhcGhpY3Ntb2RlPUoodCksZS5vcGNvbG9yPVtKKHQsMiksSih0LDQpLEoodCw2KV19KSl9fSx7a2V5OiJzbWhkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtlLmJhbGFuY2U9Sih0KX0pKX19LHtrZXk6InN0YmwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG4saSxzO3Quc3RzZD1lLnN0c2QoZS5maW5kQm94KHIsWyJzdHNkIl0sYSlbMF0pLHQuc3R0cz1lLnN0dHMoZS5maW5kQm94KHIsWyJzdHRzIl0sYSlbMF0pLHQuY3R0cz1lLmN0dHMoZS5maW5kQm94KHIsWyJjdHRzIl0sYSlbMF0pLHQuc3RzYz1lLnN0c2MoZS5maW5kQm94KHIsWyJzdHNjIl0sYSlbMF0pLHQuc3Rzej1lLnN0c3ooZS5maW5kQm94KHIsWyJzdHN6Il0sYSlbMF0pLHQuc3Rjbz1lLnN0Y28oZS5maW5kQm94KHIsWyJzdGNvIl0sYSlbMF0pLHQuc3Rjb3x8KHQuY282ND1lLmNvNjQoZS5maW5kQm94KHIsWyJjbzY0Il0sYSlbMF0pLHQuc3Rjbz10LmNvNjQpO3ZhciBvPW51bGw9PT0obj10LnN0c2QuZW50cmllc1swXSl8fHZvaWQgMD09PW58fG51bGw9PT0oaT1uLnNpbmYpfHx2b2lkIDA9PT1pfHxudWxsPT09KHM9aS5zY2hpKXx8dm9pZCAwPT09cz92b2lkIDA6cy50ZW5jLmRlZmF1bHRfSVZfc2l6ZTt0LnN0c3M9ZS5zdHNzKGUuZmluZEJveChyLFsic3RzcyJdLGEpWzBdKSx0LnNlbmM9ZS5zZW5jKGUuZmluZEJveChyLFsic2VuYyJdLGEpWzBdLG8pfSkpfX0se2tleToic2VuYyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjg7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUscil7dmFyIGE9MCxuPSQocixhKTthKz00LGUuc2FtcGxlcz1bXTtmb3IodmFyIGk9MDtpPG47aSsrKXtmb3IodmFyIHM9e0luaXRpYWxpemF0aW9uVmVjdG9yOltdfSxvPTA7bzx0O28rKylzLkluaXRpYWxpemF0aW9uVmVjdG9yW29dPXJbYStvXTtpZihhKz10LDImZS5mbGFncyl7cy5zdWJzYW1wbGVzPVtdO3ZhciB1PUoocixhKTthKz0yO2Zvcih2YXIgYz0wO2M8dTtjKyspe3ZhciBsPXt9O2wuQnl0ZXNPZkNsZWFyRGF0YT1KKHIsYSksYSs9MixsLkJ5dGVzT2ZQcm90ZWN0ZWREYXRhPSQocixhKSxhKz00LHMuc3Vic2FtcGxlcy5wdXNoKGwpfX1lLnNhbXBsZXMucHVzaChzKX19KSl9fSx7a2V5OiJwc3NoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sYT1bXSxuPTAsaT0wO2k8MTY7aSsrKWEucHVzaChiZSh0W24raV0pKTtpZihuKz0xNixlLnZlcnNpb24+MCl7dmFyIHM9JCh0LG4pO24rPTQ7Zm9yKHZhciBvPTA7bzwoIiIrcykubGVuZ3RoO28rKylmb3IodmFyIHU9MDt1PDE2O3UrKyl7dmFyIGM9dFtuXTtuKz0xLHIucHVzaChiZShjKSl9fXZhciBsPSQodCxuKTtlLmRhdGFfc2l6ZT1sLG4rPTQsZS5raWQ9cixlLnN5c3RlbV9pZD1hLGUuYnVmZmVyPXR9KSl9fSx7a2V5OiJzdHNkIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZ2UodCwhMCwoZnVuY3Rpb24odCxyLGEpe3QuZW50cnlDb3VudD0kKHIpLHQuZW50cmllcz1lLmZpbmRCb3goci5zdWJhcnJheSg0KSxbXSxhKzQpLm1hcCgoZnVuY3Rpb24odCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhdmMxIjpjYXNlImF2YzIiOmNhc2UiYXZjMyI6Y2FzZSJhdmM0IjpyZXR1cm4gZS5hdmMxKHQpO2Nhc2UiaHZjMSI6Y2FzZSJoZXYxIjpyZXR1cm4gZS5odmMxKHQpO2Nhc2UibXA0YSI6cmV0dXJuIGUubXA0YSh0KTtjYXNlImFsYXciOmNhc2UidWxhdyI6cmV0dXJuIGUuYWxhdyh0KTtjYXNlImVuY2EiOnJldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC5jaGFubmVsQ291bnQ9SihyLDE2KSx0LnNhbXBsZXNpemU9SihyLDE4KSx0LnNhbXBsZVJhdGU9JChyLDI0KS82NTUzNixyPXIuc3ViYXJyYXkoMjgpLHQuc2luZj1lLnNpbmYoZS5maW5kQm94KHIsWyJzaW5mIl0sYSlbMF0pLHQuZXNkcz1lLmVzZHMoZS5maW5kQm94KHIsWyJlc2RzIl0sYSlbMF0pfSkpO2Nhc2UiZW5jdiI6cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LndpZHRoPUoociwyNCksdC5oZWlnaHQ9SihyLDI2KSx0Lmhvcml6cmVzb2x1dGlvbj0kKHIsMjgpLHQudmVydHJlc29sdXRpb249JChyLDMyKSxyPXIuc3ViYXJyYXkoNzgpLHQuc2luZj1lLnNpbmYoZS5maW5kQm94KHIsWyJzaW5mIl0sYSlbMF0pLHQuYXZjQz1lLmF2Y0MoZS5maW5kQm94KHIsWyJhdmNDIl0sYSlbMF0pLHQuaHZjQz1lLmh2Y0MoZS5maW5kQm94KHIsWyJodmNDIl0sYSlbMF0pLHQucGFzcD1lLnBhc3AoZS5maW5kQm94KHIsWyJwYXNwIl0sYSlbMF0pfSkpfX0pKS5maWx0ZXIoQm9vbGVhbil9KSl9fSx7a2V5OiJ0ZW5jIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMSwoZnVuY3Rpb24oZSx0KXt2YXIgcj02O2UuZGVmYXVsdF9Jc0VuY3J5cHRlZD10W3JdLHIrPTEsZS5kZWZhdWx0X0lWX3NpemU9dFtyXSxyKz0xLGUuZGVmYXVsdF9LSUQ9W107Zm9yKHZhciBhPTA7YTwxNjthKyspZS5kZWZhdWx0X0tJRC5wdXNoKGJlKHRbcl0pKSxyKz0xfSkpfX0se2tleToic2NoaSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnRlbmM9ZS50ZW5jKGUuZmluZEJveChyLFsidGVuYyJdLGEpWzBdKX0pKX19LHtrZXk6InNpbmYiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC5zY2hpPWUuc2NoaShlLmZpbmRCb3gocixbInNjaGkiXSxhKVswXSksdC5mcm1hPWUuZnJtYShlLmZpbmRCb3gocixbImZybWEiXSxhKVswXSl9KSl9fSx7a2V5OiJmcm1hIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMSwoZnVuY3Rpb24oZSx0KXtlLmRhdGFfZm9ybWF0PSIiO2Zvcih2YXIgcj0wO3I8NDtyKyspZS5kYXRhX2Zvcm1hdCs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W3JdKX0pKX19LHtrZXk6ImF2YzEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG49eWUodCxyKSxpPXIuc3ViYXJyYXkobik7YSs9bix0LmF2Y0M9ZS5hdmNDKGUuZmluZEJveChpLFsiYXZjQyJdLGEpWzBdKSx0LnBhc3A9ZS5wYXNwKGUuZmluZEJveChpLFsicGFzcCJdLGEpWzBdKX0pKX19LHtrZXk6ImF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCExLChmdW5jdGlvbihlLHQpe2UuY29uZmlndXJhdGlvblZlcnNpb249dFswXSxlLkFWQ1Byb2ZpbGVJbmRpY2F0aW9uPXRbMV0sZS5wcm9maWxlQ29tcGF0aWJpbGl0eT10WzJdLGUuQVZDTGV2ZWxJbmRpY2F0aW9uPXRbM10sZS5jb2RlYz10ZShbdFsxXSx0WzJdLHRbM11dKSxlLmxlbmd0aFNpemVNaW51c09uZT0zJnRbNF0sZS5zcHNMZW5ndGg9MzEmdFs1XSxlLnNwcz1bXTtmb3IodmFyIHI9NixhPTA7YTxlLnNwc0xlbmd0aDthKyspe3ZhciBuPUoodCxyKTtyKz0yLGUuc3BzLnB1c2godC5zdWJhcnJheShyLHIrbikpLHIrPW59ZS5wcHNMZW5ndGg9dFtyXSxyKz0xLGUucHBzPVtdO2Zvcih2YXIgaT0wO2k8ZS5wcHNMZW5ndGg7aSsrKXt2YXIgcz1KKHQscik7cis9MixlLnBwcy5wdXNoKHQuc3ViYXJyYXkocixyKz1zKSkscis9c319KSl9fSx7a2V5OiJodmMxIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZ2UodCwhMSwoZnVuY3Rpb24odCxyLGEpe3ZhciBuPXllKHQsciksaT1yLnN1YmFycmF5KG4pO2ErPW4sdC5odmNDPWUuaHZjQyhlLmZpbmRCb3goaSxbImh2Y0MiXSxhKVswXSksdC5wYXNwPWUucGFzcChlLmZpbmRCb3goaSxbInBhc3AiXSxhKVswXSl9KSl9fSx7a2V5OiJodmNDIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMSwoZnVuY3Rpb24odCxyKXt0LmRhdGE9ZS5kYXRhLHQuY29kZWM9ImhldjEuMS42Lkw5My5CMCIsdC5jb25maWd1cmF0aW9uVmVyc2lvbj1yWzBdO3ZhciBhPXJbMV07dC5nZW5lcmFsUHJvZmlsZVNwYWNlPWE+PjYsdC5nZW5lcmFsVGllckZsYWc9KDMyJmEpPj41LHQuZ2VuZXJhbFByb2ZpbGVJZGM9MzEmYSx0LmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eT0kKHIsMiksdC5nZW5lcmFsQ29uc3RyYWludEluZGljYXRvckZsYWdzPXIuc3ViYXJyYXkoNiwxMiksdC5nZW5lcmFsTGV2ZWxJZGM9clsxMl0sdC5hdmdGcmFtZVJhdGU9SihyLDE5KSx0Lm51bU9mQXJyYXlzPXJbMjJdLHQudnBzPVtdLHQuc3BzPVtdLHQucHBzPVtdO2Zvcih2YXIgbj0yMyxpPTAscz0wLG89MCx1PTA7dTx0Lm51bU9mQXJyYXlzO3UrKyl7aT02MyZyW25dLHM9SihyLG4rMSksbis9Mztmb3IodmFyIGMsbD1bXSxmPTA7ZjxzO2YrKylvPUoocixuKSxuKz0yLGwucHVzaChyLnN1YmFycmF5KG4sbitvKSksbis9bztpZigzMj09PWkpKGM9dC52cHMpLnB1c2guYXBwbHkoYyxsKTtlbHNlIGlmKDMzPT09aSl7dmFyIGQ7KGQ9dC5zcHMpLnB1c2guYXBwbHkoZCxsKX1lbHNlIGlmKDM0PT09aSl7dmFyIGg7KGg9dC5wcHMpLnB1c2guYXBwbHkoaCxsKX19fSkpfX0se2tleToicGFzcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITEsKGZ1bmN0aW9uKGUsdCl7ZS5oU3BhY2luZz0kKHQpLGUudlNwYWNpbmc9JCh0LDQpfSkpfX0se2tleToibXA0YSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt2YXIgbj1tZSh0LHIpO3QuZXNkcz1lLmVzZHMoZS5maW5kQm94KHIuc3ViYXJyYXkobiksWyJlc2RzIl0sYStuKVswXSl9KSl9fSx7a2V5OiJlc2RzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtlLmNvZGVjPSJtcDRhLiI7Zm9yKHZhciByPTAsYT0wLG49MCxpPTA7dC5sZW5ndGg7KXtmb3IoaT10W3I9MF0sYT10W3IrMV0scis9MjsxMjgmYTspbj0oMTI3JmEpPDw3LGE9dFtyXSxyKz0xO2lmKG4rPTEyNyZhLDM9PT1pKXQ9dC5zdWJhcnJheShyKzMpO2Vsc2V7aWYoNCE9PWkpe2lmKDU9PT1pKXt2YXIgcz1lLmNvbmZpZz10LnN1YmFycmF5KHIscituKSxvPSgyNDgmc1swXSk+PjM7cmV0dXJuIDMxPT09byYmcy5sZW5ndGg+PTImJihvPTMyKygoNyZzWzBdKTw8MykrKCgyMjQmc1sxXSk+PjUpKSxlLm9iamVjdFR5cGU9byxlLmNvZGVjKz1vLnRvU3RyaW5nKDE2KSx2b2lkKCIuIj09PWUuY29kZWNbZS5jb2RlYy5sZW5ndGgtMV0mJihlLmNvZGVjPWUuY29kZWMuc3Vic3RyaW5nKDAsZS5jb2RlYy5sZW5ndGgtMSkpKX1yZXR1cm4gdm9pZCgiLiI9PT1lLmNvZGVjW2UuY29kZWMubGVuZ3RoLTFdJiYoZS5jb2RlYz1lLmNvZGVjLnN1YnN0cmluZygwLGUuY29kZWMubGVuZ3RoLTEpKSl9ZS5jb2RlYys9KHRbcl0udG9TdHJpbmcoMTYpKyIuIikucGFkU3RhcnQoMywiMCIpLHQ9dC5zdWJhcnJheShyKzEzKX19fSkpfX0se2tleToiYWxhdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITEsKGZ1bmN0aW9uKGUsdCl7bWUoZSx0KX0pKX19LHtrZXk6InN0dHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0kKHQpLGE9W10sbj00LGk9MDtpPHI7aSsrKWEucHVzaCh7Y291bnQ6JCh0LG4pLGRlbHRhOiQodCxuKzQpfSksbis9ODtlLmVudHJ5Q291bnQ9cixlLmVudHJpZXM9YX0pKX19LHtrZXk6ImN0dHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPSQodCksYT1bXSxuPTQ7aWYoMT09PWUudmVyc2lvbilmb3IodmFyIGk9MDtpPHI7aSsrKWEucHVzaCh7Y291bnQ6JCh0LG4pLG9mZnNldDokKHQsbis0KX0pLG4rPTg7ZWxzZSBmb3IodmFyIHM9MDtzPHI7cysrKWEucHVzaCh7Y291bnQ6JCh0LG4pLG9mZnNldDotKDErfiQodCxuKzQpKX0pLG4rPTg7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHNjIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9JCh0KSxhPVtdLG49NCxpPTA7aTxyO2krKylhLnB1c2goe2ZpcnN0Q2h1bms6JCh0LG4pLHNhbXBsZXNQZXJDaHVuazokKHQsbis0KSxzYW1wbGVEZXNjcmlwdGlvbkluZGV4OiQodCxuKzgpfSksbis9MTI7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHN6Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj0kKHQpLGE9JCh0LDQpLG49W107aWYoIXIpZm9yKHZhciBpPTgscz0wO3M8YTtzKyspbi5wdXNoKCQodCxpKSksaSs9NDtlLnNhbXBsZVNpemU9cixlLnNhbXBsZUNvdW50PWEsZS5lbnRyeVNpemVzPW59KSl9fSx7a2V5OiJzdGNvIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9JCh0KSxhPVtdLG49NCxpPTA7aTxyO2krKylhLnB1c2goJCh0LG4pKSxuKz00O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToiY282NCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPSQodCksYT1bXSxuPTQsaT0wO2k8cjtpKyspYS5wdXNoKGVlKHQsbikpLG4rPTg7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHNzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZ2UoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9JCh0KSxhPVtdLG49NCxpPTA7aTxyO2krKylhLnB1c2goJCh0LG4pKSxuKz00O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToibW9vZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm1maGQ9ZS5tZmhkKGUuZmluZEJveChyLFsibWZoZCJdLGEpWzBdKSx0LnRyYWY9ZS5maW5kQm94KHIsWyJ0cmFmIl0sYSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFmKHQpfSkpfSkpfX0se2tleToibWZoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7ZS5zZXF1ZW5jZU51bWJlcj0kKHQpfSkpfX0se2tleToidHJhZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnRmaGQ9ZS50ZmhkKGUuZmluZEJveChyLFsidGZoZCJdLGEpWzBdKSx0LnRmZHQ9ZS50ZmR0KGUuZmluZEJveChyLFsidGZkdCJdLGEpWzBdKSx0LnRydW49ZS50cnVuKGUuZmluZEJveChyLFsidHJ1biJdLGEpWzBdKX0pKX19LHtrZXk6InRydW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBnZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPWUudmVyc2lvbixhPWUuZmxhZ3Msbj10Lmxlbmd0aCxpPWUuc2FtcGxlQ291bnQ9JCh0KSxzPTQ7aWYobj5zJiYxJmEmJihlLmRhdGFPZmZzZXQ9LSgxK34kKHQscykpLHMrPTQpLG4+cyYmNCZhJiYoZS5maXJzdFNhbXBsZUZsYWdzPSQodCxzKSxzKz00KSxlLnNhbXBsZXM9W10sbj5zKWZvcih2YXIgbyx1PTA7dTxpO3UrKylvPXt9LDI1NiZhJiYoby5kdXJhdGlvbj0kKHQscykscys9NCksNTEyJmEmJihvLnNpemU9JCh0LHMpLHMrPTQpLDEwMjQmYSYmKG8uZmxhZ3M9JCh0LHMpLHMrPTQpLDIwNDgmYSYmKG8uY3RzPXI/LSgxK34kKHQscys0KSk6JCh0LHMpLHMrPTQpLGUuc2FtcGxlcy5wdXNoKG8pfSkpfX0se2tleToidGZkdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdlKGUsITAsKGZ1bmN0aW9uKGUsdCl7MT09PWUudmVyc2lvbj9lLmJhc2VNZWRpYURlY29kZVRpbWU9ZWUodCk6ZS5iYXNlTWVkaWFEZWNvZGVUaW1lPSQodCl9KSl9fSx7a2V5OiJwcm9iZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuISFlLmZpbmRCb3godCxbImZ0eXAiXSl9fSx7a2V5OiJwYXJzZVNhbXBsZUZsYWdzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm57aXNMZWFkaW5nOigxMiZlWzBdKT4+PjIsZGVwZW5kc09uOjMmZVswXSxpc0RlcGVuZGVkT246KDE5MiZlWzFdKT4+PjYsaGFzUmVkdW5kYW5jeTooNDgmZVsxXSk+Pj40LHBhZGRpbmdWYWx1ZTooMTQmZVsxXSk+Pj4xLGlzTm9uU3luY1NhbXBsZToxJmVbMV0sZGVncmFkYXRpb25Qcmlvcml0eTplWzJdPDw4fGVbM119fX0se2tleToibW9vdlRvVHJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxuLGk9ZS50cmFrO2lmKGkmJmkubGVuZ3RoKXt2YXIgcz1pLmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInZpZGUiPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSksbz1pLmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInNvdW4iPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSk7aWYocyYmdCl7dmFyIHUsYyxsLGYsZCxoLHAsdj10LHk9bnVsbD09PSh1PXMudGtoZCl8fHZvaWQgMD09PXU/dm9pZCAwOnUudHJhY2tJZDtudWxsIT15JiYodi5pZD1zLnRraGQudHJhY2tJZCksdi50a2hkRHVyYXRpb249cy50a2hkLmR1cmF0aW9uLHYubXZoZER1cnRpb249ZS5tdmhkLmR1cmF0aW9uLHYubXZoZFRpbWVjYWxlPWUubXZoZC50aW1lc2NhbGUsdi50aW1lc2NhbGU9di5mb3JtYXRUaW1lc2NhbGU9cy5tZGlhLm1kaGQudGltZXNjYWxlLHYuZHVyYXRpb249cy5tZGlhLm1kaGQuZHVyYXRpb258fHYubXZoZER1cnRpb24vdi5tdmhkVGltZWNhbGUqdi50aW1lc2NhbGU7dmFyIG0sZyxrLGIsXyx3LHgsQSxCPXMubWRpYS5taW5mLnN0Ymwuc3RzZC5lbnRyaWVzWzBdO2lmKHYud2lkdGg9Qi53aWR0aCx2LmhlaWdodD1CLmhlaWdodCxCLnBhc3AmJih2LnNhclJhdGlvPVtCLnBhc3AuaFNwYWNpbmcsQi5wYXNwLnZTcGFjaW5nXSksQi5odmNDKXYuY29kZWNUeXBlPVMsdi5jb2RlYz1CLmh2Y0MuY29kZWMsdi52cHM9Qi5odmNDLnZwcyx2LnNwcz1CLmh2Y0Muc3BzLHYucHBzPUIuaHZjQy5wcHMsdi5odmNDPUIuaHZjQy5kYXRhO2Vsc2V7aWYoIUIuYXZjQyl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdmlkZW8gc3RzZCBlbnRyeSIpO3YuY29kZWM9Qi5hdmNDLmNvZGVjLHYuc3BzPUIuYXZjQy5zcHMsdi5wcHM9Qi5hdmNDLnBwc31pZih2LnByZXNlbnQ9ITAsdi5leHQ9e30sdi5leHQuc3Rzcz1udWxsPT09KGM9cy5tZGlhKXx8dm9pZCAwPT09Y3x8bnVsbD09PShsPWMubWluZil8fHZvaWQgMD09PWx8fG51bGw9PT0oZj1sLnN0YmwpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnN0c3Msdi5leHQuY3R0cz1udWxsPT09KGQ9cy5tZGlhKXx8dm9pZCAwPT09ZHx8bnVsbD09PShoPWQubWluZil8fHZvaWQgMD09PWh8fG51bGw9PT0ocD1oLnN0YmwpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmN0dHMsQiYmImVuY3YiPT09Qi50eXBlKXYuaXNWaWRlb0VuY3J5cHRpb249ITAsQi5kZWZhdWx0X0tJRD1udWxsPT09KG09Qi5zaW5mKXx8dm9pZCAwPT09bXx8bnVsbD09PShnPW0uc2NoaSl8fHZvaWQgMD09PWc/dm9pZCAwOmcudGVuYy5kZWZhdWx0X0tJRCxCLmRlZmF1bHRfSXNFbmNyeXB0ZWQ9bnVsbD09PShrPUIuc2luZil8fHZvaWQgMD09PWt8fG51bGw9PT0oYj1rLnNjaGkpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLnRlbmMuZGVmYXVsdF9Jc0VuY3J5cHRlZCxCLmRlZmF1bHRfSVZfc2l6ZT1udWxsPT09KF89Qi5zaW5mKXx8dm9pZCAwPT09X3x8bnVsbD09PSh3PV8uc2NoaSl8fHZvaWQgMD09PXc/dm9pZCAwOncudGVuYy5kZWZhdWx0X0lWX3NpemUsdi52aWRlb1NlbmM9cy5tZGlhLm1pbmYuc3RibC5zZW5jJiZzLm1kaWEubWluZi5zdGJsLnNlbmMuc2FtcGxlcyxCLmRhdGFfZm9ybWF0PW51bGw9PT0oeD1CLnNpbmYpfHx2b2lkIDA9PT14fHxudWxsPT09KEE9eC5mcm1hKXx8dm9pZCAwPT09QT92b2lkIDA6QS5kYXRhX2Zvcm1hdCx2LnVzZUVNRT1lLnVzZUVNRSx2LmtpZFZhbHVlPWUua2lkVmFsdWUsdi5wc3NoPWUucHNzaCx2LmVuY3Y9Qn1pZihvJiZyKXt2YXIgVCxDLFUsUCxJLHosTSxSLE8sTD1yLFY9bnVsbD09PShUPW8udGtoZCl8fHZvaWQgMD09PVQ/dm9pZCAwOlQudHJhY2tJZDtudWxsIT1WJiYoTC5pZD1vLnRraGQudHJhY2tJZCksTC50a2hkRHVyYXRpb249by50a2hkLmR1cmF0aW9uLEwubXZoZER1cnRpb249ZS5tdmhkLmR1cmF0aW9uLEwubXZoZFRpbWVjYWxlPWUubXZoZC50aW1lc2NhbGUsTC50aW1lc2NhbGU9TC5mb3JtYXRUaW1lc2NhbGU9by5tZGlhLm1kaGQudGltZXNjYWxlLEwuZHVyYXRpb249by5tZGlhLm1kaGQuZHVyYXRpb258fEwubXZoZER1cnRpb24vTC5tdmhkVGltZWNhbGUqTC50aW1lc2NhbGU7dmFyIEYsTixqLEcsSCxLLHEsVyxYPW8ubWRpYS5taW5mLnN0Ymwuc3RzZC5lbnRyaWVzWzBdO3N3aXRjaChMLnNhbXBsZVNpemU9WC5zYW1wbGVTaXplLEwuc2FtcGxlUmF0ZT1YLnNhbXBsZVJhdGUsTC5jaGFubmVsQ291bnQ9WC5jaGFubmVsQ291bnQsTC5wcmVzZW50PSEwLFgudHlwZSl7Y2FzZSJhbGF3IjpMLmNvZGVjVHlwZT1MLmNvZGVjPUQsTC5zYW1wbGVSYXRlPThlMzticmVhaztjYXNlInVsYXciOkwuY29kZWNUeXBlPUwuY29kZWM9RSxMLnNhbXBsZVJhdGU9OGUzO2JyZWFrO2RlZmF1bHQ6TC5zYW1wbGVEdXJhdGlvbj1zZS5nZXRGcmFtZUR1cmF0aW9uKEwuc2FtcGxlUmF0ZSxMLnRpbWVzY2FsZSksTC5zYW1wbGVSYXRlSW5kZXg9c2UuZ2V0UmF0ZUluZGV4QnlSYXRlKEwuc2FtcGxlUmF0ZSksTC5vYmplY3RUeXBlPShudWxsPT09KGE9WC5lc2RzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vYmplY3RUeXBlKXx8MixYLmVzZHMmJihMLmNvbmZpZz1BcnJheS5mcm9tKFguZXNkcy5jb25maWcpKSxMLmNvZGVjPShudWxsPT09KG49WC5lc2RzKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlYyl8fCJtcDRhLjQwLjIifWlmKEwuc2FtcGxlRHVyYXRpb249c2UuZ2V0RnJhbWVEdXJhdGlvbihMLnNhbXBsZVJhdGUsTC50aW1lc2NhbGUpLEwub2JqZWN0VHlwZT0obnVsbD09PShDPVguZXNkcyl8fHZvaWQgMD09PUM/dm9pZCAwOkMub2JqZWN0VHlwZSl8fDIsWC5lc2RzJiYoWC5lc2RzLmNvbmZpZz9MLmNvbmZpZz1BcnJheS5mcm9tKFguZXNkcy5jb25maWcpOmNvbnNvbGUud2FybigiZXNkcyBjb25maWcgaXMgbnVsbCIpKSxMLmNvZGVjPShudWxsPT09KFU9WC5lc2RzKXx8dm9pZCAwPT09VT92b2lkIDA6VS5jb2RlYyl8fCJtcDRhLjQwLjIiLEwuc2FtcGxlUmF0ZUluZGV4PXNlLmdldFJhdGVJbmRleEJ5UmF0ZShMLnNhbXBsZVJhdGUpLEwuZXh0PXt9LEwuZXh0LnN0c3M9bnVsbD09PShQPW8ubWRpYSl8fHZvaWQgMD09PVB8fG51bGw9PT0oST1QLm1pbmYpfHx2b2lkIDA9PT1JfHxudWxsPT09KHo9SS5zdGJsKXx8dm9pZCAwPT09ej92b2lkIDA6ei5zdHNzLEwuZXh0LmN0dHM9bnVsbD09PShNPW8ubWRpYSl8fHZvaWQgMD09PU18fG51bGw9PT0oUj1NLm1pbmYpfHx2b2lkIDA9PT1SfHxudWxsPT09KE89Ui5zdGJsKXx8dm9pZCAwPT09Tz92b2lkIDA6Ty5jdHRzLEwucHJlc2VudD0hMCxYJiYiZW5jYSI9PT1YLnR5cGUpTC5pc0F1ZGlvRW5jcnlwdGlvbj0hMCxYLmRhdGFfZm9ybWF0PW51bGw9PT0oRj1YLnNpbmYpfHx2b2lkIDA9PT1GfHxudWxsPT09KE49Ri5mcm1hKXx8dm9pZCAwPT09Tj92b2lkIDA6Ti5kYXRhX2Zvcm1hdCxYLmRlZmF1bHRfS0lEPW51bGw9PT0oaj1YLnNpbmYpfHx2b2lkIDA9PT1qfHxudWxsPT09KEc9ai5zY2hpKXx8dm9pZCAwPT09Rz92b2lkIDA6Ry50ZW5jLmRlZmF1bHRfS0lELFguZGVmYXVsdF9Jc0VuY3J5cHRlZD1udWxsPT09KEg9WC5zaW5mKXx8dm9pZCAwPT09SHx8bnVsbD09PShLPUguc2NoaSl8fHZvaWQgMD09PUs/dm9pZCAwOksudGVuYy5kZWZhdWx0X0lzRW5jcnlwdGVkLFguZGVmYXVsdF9JVl9zaXplPW51bGw9PT0ocT1YLnNpbmYpfHx2b2lkIDA9PT1xfHxudWxsPT09KFc9cS5zY2hpKXx8dm9pZCAwPT09Vz92b2lkIDA6Vy50ZW5jLmRlZmF1bHRfSVZfc2l6ZSxMLmF1ZGlvU2VuYz1vLm1kaWEubWluZi5zdGJsLnNlbmMmJm8ubWRpYS5taW5mLnN0Ymwuc2VuYy5zYW1wbGVzLEwudXNlRU1FPWUudXNlRU1FLEwua2lkVmFsdWU9ZS5raWRWYWx1ZSxMLmVuY2E9WH1pZihyJiYoci5pc1ZpZGVvRW5jcnlwdGlvbj0hIXQmJnQuaXNWaWRlb0VuY3J5cHRpb24pLHQmJih0LmlzQXVkaW9FbmNyeXB0aW9uPSEhciYmci5pc0F1ZGlvRW5jcnlwdGlvbiksbnVsbCE9dCYmdC5lbmN2fHxudWxsIT1yJiZyLmVuY2Epe3ZhciBZLFosUT1udWxsPT10fHxudWxsPT09KFk9dC5lbmN2KXx8dm9pZCAwPT09WT92b2lkIDA6WS5kZWZhdWx0X0tJRCxKPW51bGw9PXJ8fG51bGw9PT0oWj1yLmVuY2EpfHx2b2lkIDA9PT1aP3ZvaWQgMDpaLmRlZmF1bHRfS0lELCQ9UXx8Sj8oUXx8Sikuam9pbigiIik6bnVsbDt0JiYodC5raWQ9JCksciYmKHIua2lkPSQpfXJldHVybiB0JiYodC5mbGFncz0zODQxKSxyJiYoci5mbGFncz0xNzkzKSx7dmlkZW9UcmFjazp0LGF1ZGlvVHJhY2s6cn19fX0se2tleToiZXZhbHVhdGVEZWZhdWx0RHVyYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxuPW51bGw9PXR8fG51bGw9PT0oYT10LnNhbXBsZXMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aDtyZXR1cm4gbj8xMDI0Km4vdC50aW1lc2NhbGUqZS50aW1lc2NhbGUvcjoxMDI0fX0se2tleToibW9vZlRvU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24odCxyLGEpe3ZhciBuPXt9O3JldHVybiB0Lm1maGQmJihyJiYoci5zZXF1ZW5jZU51bWJlcj10Lm1maGQuc2VxdWVuY2VOdW1iZXIpLGEmJihhLnNlcXVlbmNlTnVtYmVyPXQubWZoZC5zZXF1ZW5jZU51bWJlcikpLHQudHJhZi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnRmaGQscz10LnRmZHQsbz10LnRydW47aWYoaSYmbyl7cyYmKHImJnIuaWQ9PT1pLnRyYWNrSWQmJihyLmJhc2VNZWRpYURlY29kZVRpbWU9cy5iYXNlTWVkaWFEZWNvZGVUaW1lKSxhJiZhLmlkPT09aS50cmFja0lkJiYoYS5iYXNlTWVkaWFEZWNvZGVUaW1lPXMuYmFzZU1lZGlhRGVjb2RlVGltZSkpO3ZhciB1PWkuZGVmYXVsdFNhbXBsZVNpemV8fDAsYz1pLmRlZmF1bHRTYW1wbGVEdXJhdGlvbnx8ZS5ldmFsdWF0ZURlZmF1bHREdXJhdGlvbihyLGEsby5zYW1wbGVzLmxlbmd0aHx8by5zYW1wbGVDb3VudCksbD1vLmRhdGFPZmZzZXR8fDAsZj0wLGQ9LTE7aWYoIW8uc2FtcGxlcy5sZW5ndGgmJm8uc2FtcGxlQ291bnQpe25baS50cmFja0lkXT1bXTtmb3IodmFyIGg9MDtoPG8uc2FtcGxlQ291bnQ7aCsrKW5baS50cmFja0lkXS5wdXNoKHtvZmZzZXQ6bCxkdHM6ZixkdXJhdGlvbjpjLHNpemU6dX0pLGYrPWMsbCs9dX1lbHNlIG5baS50cmFja0lkXT1vLnNhbXBsZXMubWFwKChmdW5jdGlvbihlLHQpe3JldHVybihlPXtvZmZzZXQ6bCxkdHM6ZixwdHM6ZisoZS5jdHN8fDApLGR1cmF0aW9uOmUuZHVyYXRpb258fGMsc2l6ZTplLnNpemV8fHUsZ29wSWQ6ZCxrZXlmcmFtZTowPT09dHx8bnVsbCE9PWUuZmxhZ3MmJnZvaWQgMCE9PWUuZmxhZ3MmJig2NTUzNiZlLmZsYWdzKT4+PjAhPTY1NTM2fSkua2V5ZnJhbWUmJihkKyssZS5nb3BJZD1kKSxmKz1lLmR1cmF0aW9uLGwrPWUuc2l6ZSxlfSkpfX0pKSxufX0se2tleToibW9vdlRvU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmFrO2lmKHQmJnQubGVuZ3RoKXt2YXIgcj10LmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInZpZGUiPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSksYT10LmZpbmQoKGZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuInNvdW4iPT09KG51bGw9PT0odD1lLm1kaWEpfHx2b2lkIDA9PT10fHxudWxsPT09KHI9dC5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSk7aWYocnx8YSl7dmFyIG4saTtpZihyKXt2YXIgcyxvLHU9bnVsbD09PShzPXIubWRpYSl8fHZvaWQgMD09PXN8fG51bGw9PT0obz1zLm1pbmYpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0Ymw7aWYoIXUpcmV0dXJuO3ZhciBjPXUuc3R0cyxsPXUuc3RzYyxmPXUuc3RzeixkPXUuc3RjbyxoPXUuc3RzcyxwPXUuY3R0cztpZighKGMmJmwmJmYmJmQmJmgpKXJldHVybjtuPXZlKGMsbCxmLGQscCxoKX1pZihhKXt2YXIgdix5LG0sZz1udWxsPT09KHY9YS5tZGlhKXx8dm9pZCAwPT09dnx8bnVsbD09PSh5PXYubWluZil8fHZvaWQgMD09PXk/dm9pZCAwOnkuc3RibDtpZighZylyZXR1cm47dmFyIGs9bnVsbD09PShtPWEubWRpYS5tZGhkKXx8dm9pZCAwPT09bT92b2lkIDA6bS50aW1lc2NhbGUsYj1nLnN0dHMsXz1nLnN0c2Msdz1nLnN0c3oseD1nLnN0Y287aWYoIShrJiZiJiZfJiZ3JiZ4KSlyZXR1cm47aT12ZShiLF8sdyx4KX1yZXR1cm57dmlkZW9TYW1wbGVzOm4sYXVkaW9TYW1wbGVzOml9fX19fV0pLGV9KCk7ZnVuY3Rpb24gdmUoZSx0LHIsYSxuLGkpe3ZhciBzLG8sdSxjPVtdLGw9bnVsbD09bj92b2lkIDA6bi5lbnRyaWVzLGY9dC5lbnRyaWVzLGQ9YS5lbnRyaWVzLGg9ci5lbnRyeVNpemVzLHA9bnVsbD09aT92b2lkIDA6aS5lbnRyaWVzO3AmJihzPXt9LHAuZm9yRWFjaCgoZnVuY3Rpb24oZSl7c1tlLTFdPSEwfSkpKSxsJiYobz1bXSxsLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNvdW50LHI9ZS5vZmZzZXQsYT0wO2E8dDthKyspby5wdXNoKHIpfSkpKTt2YXIgdj0tMSx5PTAsbT0wLGc9MCxrPTAsYj0wLF89ZlswXS5zYW1wbGVzUGVyQ2h1bmssdz1mWzFdP2ZbMV0uZmlyc3RDaHVuay0xOjEvMDtyZXR1cm4gZS5lbnRyaWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNvdW50LGE9ZS5kZWx0YSxuPTA7bjx0O24rKyl1PXtkdHM6eSxkdXJhdGlvbjphLHNpemU6aFttXXx8ci5zYW1wbGVTaXplLG9mZnNldDpkW2ddK2IsaW5kZXg6bX0scCYmKHUua2V5ZnJhbWU9c1ttXSx1LmtleWZyYW1lJiZ2KyssdS5nb3BJZD12KSxvJiZtPG8ubGVuZ3RoJiYodS5wdHM9dS5kdHMrb1ttXSksYy5wdXNoKHUpLHkrPWEsKyttPF8/Yis9dS5zaXplOihnKyssYj0wLGc+PXcmJihrKyssdz1mW2srMV0/ZltrKzFdLmZpcnN0Q2h1bmstMToxLzApLF8rPWZba10uc2FtcGxlc1BlckNodW5rKX0pKSxjfWZ1bmN0aW9uIHllKGUsdCl7cmV0dXJuIGUuZGF0YVJlZmVyZW5jZUluZGV4PUoodCw2KSxlLndpZHRoPUoodCwyNCksZS5oZWlnaHQ9Sih0LDI2KSxlLmhvcml6cmVzb2x1dGlvbj0kKHQsMjgpLGUudmVydHJlc29sdXRpb249JCh0LDMyKSxlLmZyYW1lQ291bnQ9Sih0LDQwKSxlLmRlcHRoPUoodCw3NCksNzh9ZnVuY3Rpb24gbWUoZSx0KXtyZXR1cm4gZS5kYXRhUmVmZXJlbmNlSW5kZXg9Sih0LDYpLGUuY2hhbm5lbENvdW50PUoodCwxNiksZS5zYW1wbGVTaXplPUoodCwxOCksZS5zYW1wbGVSYXRlPSQodCwyNCkvNjU1MzYsMjh9ZnVuY3Rpb24gZ2UoZSx0LHIpe2lmKGUpe2lmKGUuc2l6ZSE9PWUuZGF0YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJib3ggIi5jb25jYXQoZS50eXBlLCIgc2l6ZSAhPT0gZGF0YS5sZW5ndGgiKSk7dmFyIGE9e3N0YXJ0OmUuc3RhcnQsc2l6ZTplLnNpemUsaGVhZGVyU2l6ZTplLmhlYWRlclNpemUsdHlwZTplLnR5cGV9O3JldHVybiB0JiYoYS52ZXJzaW9uPWUuZGF0YVtlLmhlYWRlclNpemVdLGEuZmxhZ3M9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuKGVbdF08PDE2KSsoZVt0KzFdPDw4KSsoZVt0KzJdfHwwKX0oZS5kYXRhLGUuaGVhZGVyU2l6ZSsxKSxhLmhlYWRlclNpemUrPTQpLHIoYSxlLmRhdGEuc3ViYXJyYXkoYS5oZWFkZXJTaXplKSxhLnN0YXJ0K2EuaGVhZGVyU2l6ZSksYX19dmFyIGtlPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9U3RyaW5nKHIpLG49dD4+MCxpPU1hdGguY2VpbChuL2EubGVuZ3RoKSxzPVtdLG89U3RyaW5nKGUpO2ktLTspcy5wdXNoKGEpO3JldHVybiBzLmpvaW4oIiIpLnN1YnN0cmluZygwLG4tby5sZW5ndGgpK299LGJlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheSh0KSxhPTA7YTx0O2ErKylyW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbih0KXtlLnB1c2goa2UoTnVtYmVyKHQpLnRvU3RyaW5nKDE2KSwyLDApKX0pKSxlWzBdfTtmdW5jdGlvbiBfZShlKXtmb3IodmFyIHQ9MCxyPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkocj4xP3ItMTowKSxuPTE7bjxyO24rKylhW24tMV09YXJndW1lbnRzW25dO2EuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9ZS5sZW5ndGh9KSk7dmFyIGk9bmV3IGUodCkscz0wO3JldHVybiBhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kuc2V0KGUscykscys9ZS5sZW5ndGh9KSksaX12YXIgd2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDApfXJldHVybiBuKGUsW3trZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheSh0KSxhPTA7YTx0O2ErKylyW2FdPWFyZ3VtZW50c1thXTtyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Q/ZS5idWZmZXI9X2UoVWludDhBcnJheSxlLmJ1ZmZlcix0KTp3aW5kb3cuY29uc29sZS53YXJuKHQpfSkpfX1dLFt7a2V5OiJ3cml0ZVVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj44JjI1NSwyNTUmZV0pfX0se2tleToid3JpdGVVaW50MzIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShbZT4+MjQsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXSl9fV0pLGV9KCkseGU9TWF0aC5wb3coMiwzMiktMSxTZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJib3giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KHQ+MT90LTE6MCksYT0xO2E8dDthKyspclthLTFdPWFyZ3VtZW50c1thXTt2YXIgbj04KyhyPXIuZmlsdGVyKEJvb2xlYW4pKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5ieXRlTGVuZ3RofSksMCksaT1uZXcgVWludDhBcnJheShuKTtpWzBdPW4+PjI0JjI1NSxpWzFdPW4+PjE2JjI1NSxpWzJdPW4+PjgmMjU1LGlbM109MjU1Jm4saS5zZXQoZSw0KTt2YXIgcz04O3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kuc2V0KGUscykscys9ZS5ieXRlTGVuZ3RofSkpLGl9fSx7a2V5OiJmdHlwIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09YiYmZS5jb2RlY1R5cGU9PT1TfSkpP2UuRlRZUEhFVjE6ZS5GVFlQQVZDMX19LHtrZXk6ImluaXRTZWdtZW50Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gWihlLmZ0eXAodCksZS5tb292KHQpKX19LHtrZXk6InBzc2giLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFsxLDAsMCwwXS5jb25jYXQoWzE2LDExOSwyMzksMjM2LDE5MiwxNzgsNzcsMiwxNzIsMjI3LDYwLDMwLDgyLDIyNiwyNTEsNzVdLFswLDAsMCwxXSxhZSh0LmtpZCksWzAsMCwwLDBdKSk7cmV0dXJuIGUuYm94KGUudHlwZXMucHNzaCxyKX19LHtrZXk6Im1vb3YiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRbMF0udXNlRU1FJiYodFswXS5lbmN2fHx0WzBdLmVuY2EpKXt0WzBdLnBzc2h8fCh0WzBdLnBzc2g9e2tpZDp0WzBdLmtpZH0pO3ZhciByPXRoaXMucHNzaCh0WzBdLnBzc2gpO3JldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb3YsZS5tdmhkKHRbMF0ubXZoZER1cnRpb258fHRbMF0uZHVyYXRpb24sdFswXS5tdmhkVGltZWNhbGV8fHRbMF0udGltZXNjYWxlKSxlLm12ZXgodCldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFrKHQpfSkpKSxbcl0pKX1yZXR1cm4gZS5ib3guYXBwbHkoZSxbZS50eXBlcy5tb292LGUubXZoZCh0WzBdLm12aGREdXJ0aW9ufHx0WzBdLmR1cmF0aW9uLHRbMF0ubXZoZFRpbWVjYWxlfHx0WzBdLnRpbWVzY2FsZSldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFrKHQpfSkpKSxbZS5tdmV4KHQpXSkpfX0se2tleToibXZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjllNCxhPWUuYm94KGUudHlwZXMubXZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcix0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMSwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDY0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI1NSwyNTUsMjU1LDI1NV0pKTtyZXR1cm4gYX19LHtrZXk6InRyYWsiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRyYWssZS50a2hkKHQuaWQsdC50a2hkRHVyYXRpb258fDAsdC53aWR0aCx0LmhlaWdodCksZS5tZGlhKHQpKX19LHtrZXk6InRraGQiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxpPWUuYm94KGUudHlwZXMudGtoZCxuZXcgVWludDhBcnJheShbMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwwLDAsMCwwLHI+PjI0JjI1NSxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjQsMCwwLDAsYT4+OCYyNTUsMjU1JmEsMCwwLG4+PjgmMjU1LDI1NSZuLDAsMF0pKTtyZXR1cm4gaX19LHtrZXk6Im1kaWEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1kaWEsZS5tZGhkKHQuZHVyYXRpb24sdC50aW1lc2NhbGUpLGUuaGRscih0LnR5cGUpLGUubWluZih0KSl9fSx7a2V5OiJtZGhkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06OWU0LGE9ZS5ib3goZS50eXBlcy5tZGhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCxyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsODUsMTk2LDAsMF0pKTtyZXR1cm4gYX19LHtrZXk6ImhkbHIiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLmhkbHIsZS5IRExSX1RZUEVTW3RdKX19LHtrZXk6Im1pbmYiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1pbmYsdC50eXBlPT09Yj9lLlZNSEQ6ZS5TTUhELGUuRElORixlLnN0YmwodCkpfX0se2tleToic3RibCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9W107cmV0dXJuIHQmJnQuZXh0JiZ0LmV4dC5zdHNzJiZyLnB1c2goZS5zdHNzKHQuZXh0LnN0c3MuZW50cmllcykpLGUuYm94KGUudHlwZXMuc3RibCxlLnN0c2QodCksZS5TVFRTLHJbMF0sZS5TVFNDLGUuU1RTWixlLlNUQ08pfX0se2tleToic3RzZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuIHI9ImF1ZGlvIj09PXQudHlwZT90LnVzZUVNRSYmdC5lbmNhP2UuZW5jYSh0KTplLm1wNGEodCk6dC51c2VFTUUmJnQuZW5jdj9lLmVuY3YodCk6ZS5hdmMxaGV2MSh0KSxlLmJveChlLnR5cGVzLnN0c2QsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMV0pLHIpfX0se2tleToiZW5jYSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5lbmNhLmNoYW5uZWxDb3VudCxhPXQuZW5jYS5zYW1wbGVSYXRlLG49bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCxyLDAsMTYsMCwwLDAsMCxhPj44JjI1NSwyNTUmYSwwLDBdKSxpPWUuZXNkcyh0LmNvbmZpZykscz1lLnNpbmYodC5lbmNhKTtyZXR1cm4gZS5ib3goZS50eXBlcy5lbmNhLG4saSxzKX19LHtrZXk6ImVuY3YiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLGEsbj10LnNwcy5sZW5ndGg+MD90LnNwc1swXTpbXSxpPXQucHBzLmxlbmd0aD4wP3QucHBzWzBdOltdLHM9dC53aWR0aCxvPXQuaGVpZ2h0LHU9dC5zYXJSYXRpb1swXSxjPXQuc2FyUmF0aW9bMV0sbD1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAscz4+OCYyNTUsMjU1JnMsbz4+OCYyNTUsMjU1Jm8sMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMTgsMTAwLDk3LDEwNSwxMDgsMTIxLDEwOSwxMTEsMTE2LDEwNSwxMTEsMTEwLDQ3LDEwNCwxMDgsMTE1LDQ2LDEwNiwxMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI0LDE3LDE3XSksZj1uZXcgVWludDhBcnJheSgocj0oYT1bMSxuWzFdLG5bMl0sblszXSwyNTUsMjI1LG4ubGVuZ3RoPj4+OCYyNTUsMjU1Jm4ubGVuZ3RoXSkuY29uY2F0LmFwcGx5KGEseShuKSkuY29uY2F0KFsxLGkubGVuZ3RoPj4+OCYyNTUsMjU1JmkubGVuZ3RoXSkpLmNvbmNhdC5hcHBseShyLHkoaSkpKSxkPW5ldyBVaW50OEFycmF5KFswLDAsODgsNTcsMCwxNSwyMDAsMTkyLDAsNCw4Niw3Ml0pLGg9ZS5zaW5mKHQuZW5jdikscD1uZXcgVWludDhBcnJheShbdT4+MjQsdT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1LGM+PjI0LGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmY10pO3JldHVybiBlLmJveChlLnR5cGVzLmVuY3YsbCxlLmJveChlLnR5cGVzLmF2Y0MsZiksZS5ib3goZS50eXBlcy5idHJ0LGQpLGgsZS5ib3goZS50eXBlcy5wYXNwLHApKX19LHtrZXk6InNjaGkiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFtdKSxhPWUudGVuYyh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy5zY2hpLHIsYSl9fSx7a2V5OiJ0ZW5jIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMjU1JnQuZGVmYXVsdF9Jc0VuY3J5cHRlZCwyNTUmdC5kZWZhdWx0X0lWX3NpemVdLmNvbmNhdChhZSh0LmRlZmF1bHRfS0lEKSkpO3JldHVybiBlLmJveChlLnR5cGVzLnRlbmMscil9fSx7a2V5OiJzaW5mIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgVWludDhBcnJheShbXSksYT1uZXcgVWludDhBcnJheShbdC5kYXRhX2Zvcm1hdC5jaGFyQ29kZUF0KDApLHQuZGF0YV9mb3JtYXQuY2hhckNvZGVBdCgxKSx0LmRhdGFfZm9ybWF0LmNoYXJDb2RlQXQoMiksdC5kYXRhX2Zvcm1hdC5jaGFyQ29kZUF0KDMpXSksbj1uZXcgVWludDhBcnJheShbMCwwLDAsMCw5OSwxMDEsMTEwLDk5LDAsMSwwLDBdKSxpPWUuc2NoaSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy5zaW5mLHIsZS5ib3goZS50eXBlcy5mcm1hLGEpLGUuYm94KGUudHlwZXMuc2NobSxuKSxpKX19LHtrZXk6ImF2YzFoZXYxIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LmNvZGVjVHlwZT09PVMsYT1yP2UudHlwZXMuaHZjMTplLnR5cGVzLmF2YzEsbj1yP2UuaHZjQyh0KTplLmF2Y0ModCksaT1bbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLHQud2lkdGg+PjgmMjU1LDI1NSZ0LndpZHRoLHQuaGVpZ2h0Pj44JjI1NSwyNTUmdC5oZWlnaHQsMCw3MiwwLDAsMCw3MiwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMTcsMTddKSxuXTtyZXR1cm4gcj9pLnB1c2goZS5ib3goZS50eXBlcy5maWVsLG5ldyBVaW50OEFycmF5KFsxLDBdKSkpOnQuc2FyUmF0aW8mJnQuc2FyUmF0aW8ubGVuZ3RoPjEmJmkucHVzaChlLnBhc3AodC5zYXJSYXRpbykpLGUuYm94LmFwcGx5KGUsW2FdLmNvbmNhdChpKSl9fSx7a2V5OiJhdmNDIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcixhLG4saT1bXSxzPVtdO3JldHVybiB0LnNwcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuPWUuYnl0ZUxlbmd0aCxpLnB1c2gobj4+PjgmMjU1KSxpLnB1c2goMjU1Jm4pLGkucHVzaC5hcHBseShpLHkoZSkpfSkpLHQucHBzLmZvckVhY2goKGZ1bmN0aW9uKGUpe249ZS5ieXRlTGVuZ3RoLHMucHVzaChuPj4+OCYyNTUpLHMucHVzaCgyNTUmbikscy5wdXNoLmFwcGx5KHMseShlKSl9KSksZS5ib3goZS50eXBlcy5hdmNDLG5ldyBVaW50OEFycmF5KChyPShhPVsxLGlbM10saVs0XSxpWzVdLDI1NSwyMjR8dC5zcHMubGVuZ3RoXSkuY29uY2F0LmFwcGx5KGEsaSkuY29uY2F0KFt0LnBwcy5sZW5ndGhdKSkuY29uY2F0LmFwcGx5KHIscykpKX19LHtrZXk6Imh2Y0MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuaHZjQztpZihyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiByO3ZhciBhLG49dC52cHMsaT10LnNwcyxzPXQucHBzO2lmKHIpe3ZhciBvPXIuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3MsdT1yLmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3MsYz0obi5sZW5ndGgmJjEpKyhpLmxlbmd0aCYmMSkrKHMubGVuZ3RoJiYxKTthPVsxLHIuZ2VuZXJhbFByb2ZpbGVTcGFjZTw8NnxyLmdlbmVyYWxUaWVyRmxhZzw8NXxyLmdlbmVyYWxQcm9maWxlSWRjLG8+Pj4yNCxvPj4+MTYsbz4+Pjgsbyx1WzBdLHVbMV0sdVsyXSx1WzNdLHVbNF0sdVs1XSxyLmdlbmVyYWxMZXZlbElkYywyNDAsMCwyNTIsMjUyfHIuY2hyb21hRm9ybWF0SWRjLDI0OHxyLmJpdERlcHRoTHVtYU1pbnVzOCwyNDh8ci5iaXREZXB0aENocm9tYU1pbnVzOCwwLDAsci5udW1UZW1wb3JhbExheWVyczw8M3xyLnRlbXBvcmFsSWROZXN0ZWQ8PDJ8MyxjXTt2YXIgbD1mdW5jdGlvbihlKXt2YXIgdDthLnB1c2goZS5sZW5ndGg+PjgsZS5sZW5ndGgpLCh0PWEpLnB1c2guYXBwbHkodCx5KGUpKX07bi5sZW5ndGgmJihhLnB1c2goMTYwLDAsbi5sZW5ndGgpLG4uZm9yRWFjaChsKSksaS5sZW5ndGgmJihhLnB1c2goMTYxLDAsaS5sZW5ndGgpLGkuZm9yRWFjaChsKSkscy5sZW5ndGgmJihhLnB1c2goMTYyLDAscy5sZW5ndGgpLHMuZm9yRWFjaChsKSl9ZWxzZSBhPVsxLDEsOTYsMCwwLDAsMTQ0LDAsMCwwLDAsMCw5MywyNDAsMCwyNTIsMjUzLDI0OCwyNDgsMCwwLDE1LDMsMTYwLDAsMSwwLDI0LDY0LDEsMTIsMSwyNTUsMjU1LDEsOTYsMCwwLDMsMCwxNDQsMCwwLDMsMCwwLDMsMCw5MywxNTMsMTUyLDksMTYxLDAsMSwwLDQ1LDY2LDEsMSwxLDk2LDAsMCwzLDAsMTQ0LDAsMCwzLDAsMCwzLDAsOTMsMTYwLDIsMTI4LDEyOCw0NSwyMiw4OSwxNTMsMTY0LDE0Nyw0MywxNTQsMTI4LDEyOCwxMjgsMTMwLDAsMCwzLDAsMiwwLDAsMywwLDUwLDE2LDE2MiwwLDEsMCw3LDY4LDEsMTkzLDExNCwxODAsOTgsNjRdO3JldHVybiBlLmJveChlLnR5cGVzLmh2Y0MsbmV3IFVpbnQ4QXJyYXkoYSkpfX0se2tleToicGFzcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dih0LDIpLGE9clswXSxuPXJbMV07cmV0dXJuIGUuYm94KGUudHlwZXMucGFzcCxuZXcgVWludDhBcnJheShbYT4+MjQsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhLG4+PjI0LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbl0pKX19LHtrZXk6Im1wNGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1wNGEsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCx0LmNoYW5uZWxDb3VudCwwLDE2LDAsMCwwLDAsdC5zYW1wbGVSYXRlPj44JjI1NSwyNTUmdC5zYW1wbGVSYXRlLDAsMF0pLHQuY29uZmlnLmxlbmd0aD9lLmVzZHModC5jb25maWcpOnZvaWQgMCl9fSx7a2V5OiJlc2RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aDtyZXR1cm4gZS5ib3goZS50eXBlcy5lc2RzLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDMsMjMrciwwLDAsMCw0LDE1K3IsNjQsMjEsMCw2LDAsMCwwLDIxOCwxOTIsMCwwLDIxOCwxOTIsNV0uY29uY2F0KFtyXSkuY29uY2F0KHQpLmNvbmNhdChbNiwxLDJdKSkpfX0se2tleToibXZleCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubXZleF0uY29uY2F0KHkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyZXgodC5pZCl9KSkpKSl9fSx7a2V5OiJ0cmV4Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy50cmV4LG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwxXSkpfX0se2tleToidHJleDEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRyZXgsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMCwwLDEsMCwwLDIsMCwwLDAsMCwwLDAsMSwwLDBdKSl9fSx7a2V5OiJ0cmV4MiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudHJleCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMCwwLDAsMSwwLDAsNCwwLDAsMCwwLDAsMiwwLDAsMF0pKX19LHtrZXk6Im1vb2YiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb2YsZS5tZmhkKHRbMF0uc2FtcGxlcz90WzBdLnNhbXBsZXNbMF0uZ29wSWQ6MCldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFmKHQpfSkpKSkpfX0se2tleToibWZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdKSl9fSx7a2V5OiJ0cmFmIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1lLnRmaGQodC5pZCksYT1lLnRmZHQodCx0LmJhc2VNZWRpYURlY29kZVRpbWUpLG49MDtpZih0LmlzVmlkZW8mJnQudmlkZW9TZW5jJiZ0LnZpZGVvU2VuYy5mb3JFYWNoKChmdW5jdGlvbihlKXtuKz04LGUuc3Vic2FtcGxlcyYmZS5zdWJzYW1wbGVzLmxlbmd0aCYmKG4rPTIsbis9NiplLnN1YnNhbXBsZXMubGVuZ3RoKX0pKSx0LnZpZGVvU2VuY0xlbmd0aD1uLHQudXNlRU1FJiYodC5pc1ZpZGVvRW5jcnlwdGlvbnx8dC5pc0F1ZGlvRW5jcnlwdGlvbikpe2lmKHQuaXNWaWRlb0VuY3J5cHRpb24pe2lmKHQuaXNWaWRlbyl7dmFyIGk9ZS5zYWl6KHQpLHM9ZS5zYWlvKHQpLG89ZS50cnVuMSh0KSx1PWUuc2VuYyh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSxpLHMsbyx1KX1pZih0LmlzQXVkaW9FbmNyeXB0aW9uKXt2YXIgYz1lLnNiZ3AoKSxsPWUuc2Fpeih0KSxmPWUuc2Fpbyh0KSxkPWUuc2VuYyh0KSxoPWUudHJ1bjEodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEsYyxsLGYsZCxoKX12YXIgcD1lLnNiZ3AoKSx2PWUudHJ1bjEodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEscCx2KX1pZih0LmlzVmlkZW8pe3ZhciB5PWUudHJ1bjEodCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEseSl9dmFyIG09ZS5zYmdwKCksZz1lLnNhaXoodCksaz1lLnNhaW8odCksYj1lLnNlbmModCksXz1lLnRydW4xKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnRyYWYscixhLG0sZyxrLGIsXyl9dmFyIHc9ZS5zZHRwKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnRyYWYscixhLHcsZS50cnVuKHQuc2FtcGxlcyx3LmJ5dGVMZW5ndGgrNzYpKX19LHtrZXk6InNkdHAiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyB3ZTtyZXR1cm4gdC5zYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Iud3JpdGUobmV3IFVpbnQ4QXJyYXkodC5pc1ZpZGVvP1tlLmtleWZyYW1lPzMyOjE2XTpbMTZdKSl9KSksZS5ib3goZS50eXBlcy5zZHRwLHRoaXMuZXh0ZW5zaW9uKDAsMCksci5idWZmZXIpfX0se2tleToidHJ1bjEiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyB3ZSxhPXdlLndyaXRlVWludDMyKHQuc2FtcGxlcy5sZW5ndGgpLG49bnVsbDtpZih0LmlzVmlkZW8pe3ZhciBpPXQudmlkZW9TZW5jTGVuZ3RoO249d2Uud3JpdGVVaW50MzIoMTYqdC5zYW1wbGVzLmxlbmd0aCtpKzE0OSksIXQuaXNWaWRlb0VuY3J5cHRpb24mJnQuaXNBdWRpb0VuY3J5cHRpb24mJihuPXdlLndyaXRlVWludDMyKDE2KnQuc2FtcGxlcy5sZW5ndGgrOTIpKX1lbHNle3ZhciBzPTEyKnQuc2FtcGxlcy5sZW5ndGgrMTI0O3QuaXNBdWRpb0VuY3J5cHRpb24mJihzPTEyKnQuc2FtcGxlcy5sZW5ndGgrOCp0LmF1ZGlvU2VuYy5sZW5ndGgrMTc3KSxuPXdlLndyaXRlVWludDMyKHMpfXJldHVybiB0LnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ci53cml0ZSh3ZS53cml0ZVVpbnQzMihlLmR1cmF0aW9uKSksci53cml0ZSh3ZS53cml0ZVVpbnQzMihlLnNpemUpKSxyLndyaXRlKHdlLndyaXRlVWludDMyKGUua2V5ZnJhbWU/MzM1NTQ0MzI6NjU1MzYpKSx0LmlzVmlkZW8mJnIud3JpdGUod2Uud3JpdGVVaW50MzIoZS5jdHM/ZS5jdHM6MCkpfSkpLGUuYm94KGUudHlwZXMudHJ1bix0aGlzLmV4dGVuc2lvbigwLHQuZmxhZ3MpLGEsbixyLmJ1ZmZlcil9fSx7a2V5OiJzZW5jIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgd2UsYT10LnNhbXBsZXMubGVuZ3RoLG49dC5pc1ZpZGVvPzE2OjgsaT10LmlzVmlkZW8/MjowLHM9W10sbz0wO3JldHVybiB0LmlzVmlkZW8/KHM9dC52aWRlb1NlbmMsbz10LnZpZGVvU2VuY0xlbmd0aCk6cz10LmF1ZGlvU2VuYyxvPW98fG4qYSxyLndyaXRlKHdlLndyaXRlVWludDMyKDE2K28pLGUudHlwZXMuc2VuYyx0aGlzLmV4dGVuc2lvbigwLGkpKSxyLndyaXRlKHdlLndyaXRlVWludDMyKGEpKSxzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5Jbml0aWFsaXphdGlvblZlY3Rvci5sZW5ndGg7dCsrKXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoW2UuSW5pdGlhbGl6YXRpb25WZWN0b3JbdF1dKSk7ZS5zdWJzYW1wbGVzJiZlLnN1YnNhbXBsZXMubGVuZ3RoJiYoci53cml0ZSh3ZS53cml0ZVVpbnQxNihlLnN1YnNhbXBsZXMubGVuZ3RoKSksZS5zdWJzYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Iud3JpdGUod2Uud3JpdGVVaW50MTYoZS5CeXRlc09mQ2xlYXJEYXRhKSksci53cml0ZSh3ZS53cml0ZVVpbnQzMihlLkJ5dGVzT2ZQcm90ZWN0ZWREYXRhKSl9KSkpfSkpLHIuYnVmZmVyfX0se2tleToic2FpbyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9MTIqdC5zYW1wbGVzLmxlbmd0aCsxNDE7IXQuaXNWaWRlbyYmdC5pc0F1ZGlvRW5jcnlwdGlvbiYmKHI9MTQ5KTt2YXIgYT1uZXcgVWludDhBcnJheShbMSwwLDAsMCwwLDAsMCwxLDAsMCwwLDAscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pO3JldHVybiBlLmJveChlLnR5cGVzLnNhaW8sYSl9fSx7a2V5OiJzYWl6Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LnNhbXBsZXMubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMTYscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pO3JldHVybiBlLmJveChlLnR5cGVzLnNhaXosYSl9fSx7a2V5OiJzYmdwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5KFsxMTQsMTExLDEwOCwxMDgsMCwwLDAsMSwwLDAsMSwyNSwwLDAsMCwxXSk7cmV0dXJuIGUuYm94KGUudHlwZXMuc2JncCx0aGlzLmV4dGVuc2lvbigwLDApLHQpfX0se2tleToiZXh0ZW5zaW9uIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgVWludDhBcnJheShbZSx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdKX19LHtrZXk6InRmaGQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRmaGQsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0XSkpfX0se2tleToidGZkdCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgYT1NYXRoLmZsb29yKHIvKHhlKzEpKSxuPU1hdGguZmxvb3IociUoeGUrMSkpO3JldHVybiB0LnVzZUVNRSYmKHQuaXNWaWRlb0VuY3J5cHRpb258fHQuaXNBdWRpb0VuY3J5cHRpb24pP2UuYm94KGUudHlwZXMudGZkdCxuZXcgVWludDhBcnJheShbMCwwLDAsMCxuPj4yNCxuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm5dKSk6ZS5ib3goZS50eXBlcy50ZmR0LG5ldyBVaW50OEFycmF5KFsxLDAsMCwwLGE+PjI0LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYSxuPj4yNCxuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm5dKSl9fSx7a2V5OiJ0cnVuIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPXQubGVuZ3RoLG49MTIrMTYqYTtyKz04K247dmFyIGk9bmV3IFVpbnQ4QXJyYXkobik7aS5zZXQoWzAsMCwxNSwxLGE+Pj4yNCYyNTUsYT4+PjE2JjI1NSxhPj4+OCYyNTUsMjU1JmEscj4+PjI0JjI1NSxyPj4+MTYmMjU1LHI+Pj44JjI1NSwyNTUmcl0sMCk7Zm9yKHZhciBzPTA7czxhO3MrKyl7dmFyIG89dFtzXSx1PW8uZHVyYXRpb24sYz1vLnNpemUsbD1vLmZsYWcsZj12b2lkIDA9PT1sP3t9OmwsZD1vLmN0cyxoPXZvaWQgMD09PWQ/MDpkO2kuc2V0KFt1Pj4+MjQmMjU1LHU+Pj4xNiYyNTUsdT4+PjgmMjU1LDI1NSZ1LGM+Pj4yNCYyNTUsYz4+PjE2JjI1NSxjPj4+OCYyNTUsMjU1JmMsZi5pc0xlYWRpbmc8PDJ8KG51bGw9PT1mLmRlcGVuZHNPbnx8dm9pZCAwPT09Zi5kZXBlbmRzT24/MTpmLmRlcGVuZHNPbiksZi5pc0RlcGVuZGVkT248PDZ8Zi5oYXNSZWR1bmRhbmN5PDw0fGYucGFkZGluZ1ZhbHVlPDwxfChudWxsPT09Zi5pc05vblN5bmNTYW1wbGV8fHZvaWQgMD09PWYuaXNOb25TeW5jU2FtcGxlPzE6Zi5pc05vblN5bmNTYW1wbGUpLDYxNDQwJmYuZGVncmFkYXRpb25Qcmlvcml0eSwxNSZmLmRlZ3JhZGF0aW9uUHJpb3JpdHksaD4+PjI0JjI1NSxoPj4+MTYmMjU1LGg+Pj44JjI1NSwyNTUmaF0sMTIrMTYqcyl9cmV0dXJuIGUuYm94KGUudHlwZXMudHJ1bixpKX19LHtrZXk6Im1vb3ZNUDQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb3YsZS5tdmhkKHRbMF0uZHVyYXRpb24sdFswXS50aW1lc2NhbGUpXS5jb25jYXQoeSh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUudHJhY2tNUDQodCl9KSkpKSl9fSx7a2V5OiJ0cmFja01QNCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhayxlLnRraGQodC5pZCx0LmR1cmF0aW9uLHQud2lkdGgsdC5oZWlnaHQpLGUubWRpYU1QNCh0KSl9fSx7a2V5OiJtZGlhTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5tZGlhLGUubWRoZCh0LmR1cmF0aW9uLHQudGltZXNjYWxlKSxlLmhkbHIodC50eXBlKSxlLm1pbmZNUDQodCkpfX0se2tleToibWluZk1QNCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWluZix0LnR5cGU9PT1iP2UuVk1IRDplLlNNSEQsZS5ESU5GLGUuc3RibE1QNCh0KSl9fSx7a2V5OiJzdGJsTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LmV4dCxhPVtlLnN0c2QodCksZS5zdHRzKHIuc3R0cyksZS5zdHNjKHIuc3RzYyksZS5zdHN6KHIuc3RzeiksZS5zdGNvKHIuc3RjbyldO3JldHVybiByLnN0c3MubGVuZ3RoJiZhLnB1c2goZS5zdHNzKHIuc3RzcykpLHIuY3R0cy5sZW5ndGgmJmEucHVzaChlLmN0dHMoci5jdHRzKSksZS5ib3guYXBwbHkoZSxbZS50eXBlcy5zdGJsXS5jb25jYXQoYSkpfX0se2tleToic3R0cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsYT1uZXcgVWludDhBcnJheSg4KnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLHI9ZS5jb3VudDthLnNldChbcj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF0sbiksbis9OH0pKSxlLmJveChlLnR5cGVzLnN0dHMsWihuZXcgVWludDhBcnJheShbMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJzdHNjIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDEyKnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmZpcnN0Q2h1bmsscj1lLnNhbXBsZXNQZXJDaHVuayxpPWUuc2FtcGxlRGVzY0luZGV4O2Euc2V0KFt0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLGk+PjI0LGk+PjE2JjI1NSxpPj44JjI1NSwyNTUmaV0sbiksbis9MTJ9KSksZS5ib3goZS50eXBlcy5zdHNjLFoobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToic3RzeiIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsYT1uZXcgVWludDhBcnJheSg0KnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChbZT4+MjQsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXSxuKSxuKz00fSkpLGUuYm94KGUudHlwZXMuc3RzeixaKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToic3RjbyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsYT1uZXcgVWludDhBcnJheSg0KnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChbZT4+MjQsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXSxuKSxuKz00fSkpLGUuYm94KGUudHlwZXMuc3RjbyxaKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6InN0c3MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCpyKSxuPTA7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YS5zZXQoW2U+PjI0LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZV0sbiksbis9NH0pKSxlLmJveChlLnR5cGVzLnN0c3MsWihuZXcgVWludDhBcnJheShbMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJjdHRzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDgqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUscj1lLmNvdW50O2Euc2V0KFtyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0XSxuKSxuKz04fSkpLGUuYm94KGUudHlwZXMuY3R0cyxaKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6InN0eXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYm94KGUudHlwZXMuc3R5cCxuZXcgVWludDhBcnJheShbMTA5LDExNSwxMDAsMTA0LDAsMCwwLDAsMTA5LDExNSwxMDAsMTA0LDEwOSwxMTUsMTA1LDEyMF0pKX19LHtrZXk6InNpZHgiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQudGltZXNjYWxlLGE9dC5zYW1wbGVzWzBdLmR1cmF0aW9uLG49YSp0LnNhbXBsZXMubGVuZ3RoLGk9dC5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCphLHM9ODt0LnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cys9ZS5zaXplfSkpO3ZhciBvPTA7aWYodC5pc1ZpZGVvKXt2YXIgdSxjPTA7dC52aWRlb1NlbmMmJih1PXQudmlkZW9TZW5jKSx0LmlzVmlkZW8mJnUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Yys9OCxlLnN1YnNhbXBsZXMmJmUuc3Vic2FtcGxlcy5sZW5ndGgmJihjKz0yLGMrPTYqZS5zdWJzYW1wbGVzLmxlbmd0aCl9KSksdC52aWRlb1NlbmNMZW5ndGg9YyxvPXMrMTQxKzE2KnQuc2FtcGxlcy5sZW5ndGgrYyx0LnVzZUVNRSYmdC5pc0F1ZGlvRW5jcnlwdGlvbiYmIXQuaXNWaWRlb0VuY3J5cHRpb24mJihvPXMrMTYqdC5zYW1wbGVzLmxlbmd0aCs4NCl9ZWxzZSBvPXMrMTE2KzEyKnQuc2FtcGxlcy5sZW5ndGgsdC51c2VFTUUmJnQuaXNBdWRpb0VuY3J5cHRpb24mJihvPXMrMTY5KzEyKnQuc2FtcGxlcy5sZW5ndGgrOCp0LmF1ZGlvU2VuYy5sZW5ndGgpO3ZhciBsPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDI1NSZ0LmlkLHI+PjI0JjI1NSxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsaT4+MjQmMjU1LGk+PjE2JjI1NSxpPj44JjI1NSwyNTUmaSwwLDAsMCwwLDAsMCwwLDEsMCxvPj4xNiYyNTUsbz4+OCYyNTUsMjU1Jm8sbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbiwxNDQsMCwwLDBdKTtyZXR1cm4gZS5ib3goZS50eXBlcy5zaWR4LGwpfX0se2tleToibWRhdCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWRhdCx0KX19XSksZX0oKTtpKFNlLCJ0eXBlcyIsWyJhdmMxIiwiYXZjQyIsImh2YzEiLCJodmNDIiwiZGluZiIsImRyZWYiLCJlc2RzIiwiZnR5cCIsImhkbHIiLCJtZGF0IiwibWRoZCIsIm1kaWEiLCJtZmhkIiwibWluZiIsIm1vb2YiLCJtb292IiwibXA0YSIsIm12ZXgiLCJtdmhkIiwicGFzcCIsInN0YmwiLCJzdGNvIiwic3RzYyIsInN0c2QiLCJzdHN6Iiwic3R0cyIsInRmZHQiLCJ0ZmhkIiwidHJhZiIsInRyYWsiLCJ0cmV4IiwidGtoZCIsInZtaGQiLCJzbWhkIiwiY3R0cyIsInN0c3MiLCJzdHlwIiwicHNzaCIsInNpZHgiLCJzYmdwIiwic2FpeiIsInNhaW8iLCJzZW5jIiwidHJ1biIsImVuY3YiLCJlbmNhIiwic2luZiIsImJ0cnQiLCJmcm1hIiwidGVuYyIsInNjaG0iLCJzY2hpIiwibWVoZCIsImZpZWwiLCJzZHRwIl0ucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPVt0LmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDEpLHQuY2hhckNvZGVBdCgyKSx0LmNoYXJDb2RlQXQoMyldLGV9KSxPYmplY3QuY3JlYXRlKG51bGwpKSksaShTZSwiSERMUl9UWVBFUyIse3ZpZGVvOm5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMTE4LDEwNSwxMDAsMTAxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDg2LDEwNSwxMDAsMTAxLDExMSw3Miw5NywxMTAsMTAwLDEwOCwxMDEsMTE0LDBdKSxhdWRpbzpuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDExNSwxMTEsMTE3LDExMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MywxMTEsMTE3LDExMCwxMDAsNzIsOTcsMTEwLDEwMCwxMDgsMTAxLDExNCwwXSl9KSxpKFNlLCJGVFlQQVZDMSIsU2UuYm94KFNlLnR5cGVzLmZ0eXAsbmV3IFVpbnQ4QXJyYXkoWzEwNSwxMTUsMTExLDEwOSwwLDAsMCwxLDEwNSwxMTUsMTExLDEwOSw5NywxMTgsOTksNDldKSkpLGkoU2UsIkZUWVBIRVYxIixTZS5ib3goU2UudHlwZXMuZnR5cCxuZXcgVWludDhBcnJheShbMTA1LDExNSwxMTEsMTA5LDAsMCwwLDEsMTA1LDExNSwxMTEsMTA5LDEwNCwxMDEsMTE4LDQ5XSkpKSxpKFNlLCJESU5GIixTZS5ib3goU2UudHlwZXMuZGluZixTZS5ib3goU2UudHlwZXMuZHJlZixuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEyLDExNywxMTQsMTA4LDMyLDAsMCwwLDFdKSkpKSxpKFNlLCJWTUhEIixTZS5ib3goU2UudHlwZXMudm1oZCxuZXcgVWludDhBcnJheShbMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDBdKSkpLGkoU2UsIlNNSEQiLFNlLmJveChTZS50eXBlcy5zbWhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDBdKSkpLGkoU2UsIlN0YmxUYWJsZSIsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMF0pKSxpKFNlLCJTVFRTIixTZS5ib3goU2UudHlwZXMuc3R0cyxTZS5TdGJsVGFibGUpKSxpKFNlLCJTVFNDIixTZS5ib3goU2UudHlwZXMuc3RzYyxTZS5TdGJsVGFibGUpKSxpKFNlLCJTVFNaIixTZS5ib3goU2UudHlwZXMuc3RzeixuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpLGkoU2UsIlNUQ08iLFNlLmJveChTZS50eXBlcy5zdGNvLFNlLlN0YmxUYWJsZSkpO3ZhciBBZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhKXtyKHRoaXMsZSksdGhpcy5uYW1lPXR8fCIiLHRoaXMuX3ByZWZpeD0iWyIuY29uY2F0KHRoaXMubmFtZSwiXSIpLGUuZGlzYWJsZWQ9YX1yZXR1cm4gbihlLFt7a2V5OiJkZWJ1ZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkuZGVidWcuYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6ImxvZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkubG9nLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fSx7a2V5OiJ3YXJuIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2lmKCFlLmRpc2FibGVkKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyKSxuPTA7bjxyO24rKylhW25dPWFyZ3VtZW50c1tuXTsodD1jb25zb2xlKS53YXJuLmFwcGx5KHQsW3RoaXMuX3ByZWZpeF0uY29uY2F0KGEpKX19fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkuZXJyb3IuYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6InRhYmxlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2UuZGlzYWJsZWR8fChjb25zb2xlLmdyb3VwKHRoaXMuX3ByZWZpeCksKHQ9Y29uc29sZSkudGFibGUuYXBwbHkodCxhcmd1bWVudHMpLGNvbnNvbGUuZ3JvdXBFbmQoKSl9fV0sW3trZXk6ImVuYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSExfX0se2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtlLmRpc2FibGVkPSEwfX1dKSxlfSgpO2koQWUsImRpc2FibGVkIiwhMCk7Zm9yKHZhciBEZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSx0aGlzLnZpZGVvVHJhY2s9dCx0aGlzLmF1ZGlvVHJhY2s9YTt2YXIgaT0vQ2hyb21lXC8oW14uXSspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpO3RoaXMuZm9yY2VGaXJzdElEUj1pJiZOdW1iZXIoaVsxXSk8NTAsdGhpcy5sb2c9bmV3IEFlKCJGTVA0UmVtdXhlciIsIW58fCFuLm9wZW5Mb2d8fCFuLm9wZW5Mb2cpfXJldHVybiBuKGUsW3trZXk6InJlbXV4Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLG4saT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG89dGhpcy52aWRlb1RyYWNrLHU9dGhpcy5hdWRpb1RyYWNrLGM9by5leGlzdCgpLGw9dS5leGlzdCgpLGY9W107cmV0dXJuIGkmJihzJiZzLmluaXRNZXJnZT8oYyYmZi5wdXNoKHRoaXMudmlkZW9UcmFjayksbCYmZi5wdXNoKHRoaXMuYXVkaW9UcmFjaykscj1TZS5pbml0U2VnbWVudChmKSk6KGMmJihlPVNlLmluaXRTZWdtZW50KFt0aGlzLnZpZGVvVHJhY2tdKSksbCYmKHQ9U2UuaW5pdFNlZ21lbnQoW3RoaXMuYXVkaW9UcmFja10pKSkpLGMmJm8uaGFzU2FtcGxlKCkmJihhPXRoaXMuX3JlbXV4VmlkZW8oKSksbCYmdS5oYXNTYW1wbGUoKSYmKG49dGhpcy5fcmVtdXhBdWRpbygpKSxvLnNhbXBsZXM9W10sdS5zYW1wbGVzPVtdLHtpbml0U2VnbWVudDpyLHZpZGVvSW5pdFNlZ21lbnQ6ZSxhdWRpb0luaXRTZWdtZW50OnQsdmlkZW9TZWdtZW50OmEsYXVkaW9TZWdtZW50Om59fX0se2tleToiX3JlbXV4VmlkZW8iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWRlb1RyYWNrO3RoaXMuZm9yY2VGaXJzdElEUiYmKGUuc2FtcGxlc1swXS5mbGFnPXtkZXBlbmRzT246Mixpc05vblN5bmNTYW1wbGU6MH0pO3ZhciB0PWUuc2FtcGxlcyxyPTA7dC5mb3JFYWNoKChmdW5jdGlvbihlKXtyKz1lLnVuaXRzLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LmJ5dGVMZW5ndGh9KSwwKSxyKz00KmUudW5pdHMubGVuZ3RofSkpO2Zvcih2YXIgYSxuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IERhdGFWaWV3KG4uYnVmZmVyKSxzPWZ1bmN0aW9uKGUscil7cj10W29dO3ZhciBzPTA7ci51bml0cy5mb3JFYWNoKChmdW5jdGlvbih0KXtpLnNldFVpbnQzMihlLHQuYnl0ZUxlbmd0aCksZSs9NCxuLnNldCh0LGUpLGUrPXQuYnl0ZUxlbmd0aCxzKz00K3QuYnl0ZUxlbmd0aH0pKSxyLnNpemU9cyxjPWUsYT1yfSxvPTAsdT10Lmxlbmd0aCxjPTA7bzx1O28rKylzKGMsYSk7dmFyIGw9U2UubWRhdChuKTtyZXR1cm4gWihTZS5tb29mKFtlXSksbCl9fSx7a2V5OiJfcmVtdXhBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF1ZGlvVHJhY2ssdD1uZXcgVWludDhBcnJheShlLnNhbXBsZXMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3Quc2l6ZX0pLDApKTtlLnNhbXBsZXMucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiB0LnNldChyLmRhdGEsZSksZStyLnNpemV9KSwwKTt2YXIgcj1TZS5tZGF0KHQpO3JldHVybiBaKFNlLm1vb2YoW2VdKSxyKX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudmlkZW9UcmFjay5yZXNldCgpLHRoaXMuYXVkaW9UcmFjay5yZXNldCgpfX1dKSxlfSgpLEVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLFt7a2V5OiJtaXhJbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcyxlKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPW5ldyB0aGlzLmNvbnN0cnVjdG9yO3JldHVybiBPYmplY3QuYXNzaWduKGUsdGhpcyksZX19XSxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiBsKHRoaXMsdCl9fV0pLGV9KCksQmU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3ZhciBlLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQqbi5sZW5ndGg7cih0aGlzLGEpLGU9dC5jYWxsKHRoaXMpO3ZhciBzPW47aWYocyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYocz1uZXcgVWludDhBcnJheShzKSksKHMgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHMgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8cyBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHMgaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8cyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fHMgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8cyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8cyBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkmJihzPW5ldyBVaW50OEFycmF5KHMuYnVmZmVyLHMuYnl0ZU9mZnNldCxzLmJ5dGVMZW5ndGgpKSxzIGluc3RhbmNlb2YgVWludDhBcnJheSl7Zm9yKHZhciBvPXMuYnl0ZUxlbmd0aCx1PVtdLGM9MDtjPG87Yys9MSl1W2M+Pj4yXXw9c1tjXTw8MjQtYyU0Kjg7ZS53b3Jkcz11LGUuc2lnQnl0ZXM9b31lbHNlIGUud29yZHM9bixlLnNpZ0J5dGVzPWk7cmV0dXJuIGV9cmV0dXJuIG4oYSxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlRlO3JldHVybiBlLnN0cmluZ2lmeSh0aGlzKX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy53b3JkcyxyPWUud29yZHMsYT10aGlzLnNpZ0J5dGVzLG49ZS5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksYSU0KWZvcih2YXIgaT0wO2k8bjtpKz0xKXt2YXIgcz1yW2k+Pj4yXT4+PjI0LWklNCo4JjI1NTt0W2EraT4+PjJdfD1zPDwyNC0oYStpKSU0Kjh9ZWxzZSBmb3IodmFyIG89MDtvPG47bys9NCl0W2Erbz4+PjJdPXJbbz4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1uLHRoaXN9fSx7a2V5OiJjbGFtcCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndvcmRzLHQ9dGhpcy5zaWdCeXRlcztlW3Q+Pj4yXSY9NDI5NDk2NzI5NTw8MzItdCU0KjgsZS5sZW5ndGg9TWF0aC5jZWlsKHQvNCl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1wKG8oYS5wcm90b3R5cGUpLCJjbG9uZSIsdGhpcykuY2FsbCh0aGlzKTtyZXR1cm4gZS53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLGV9fV0sW3trZXk6InJhbmRvbSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9W10sbj1mdW5jdGlvbihlKXt2YXIgdD1lLHI9OTg3NjU0MzIxLGE9NDI5NDk2NzI5NTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0oKHI9MzY5NjkqKDY1NTM1JnIpKyhyPj4xNikmYSk8PDE2KSsodD0xOGUzKig2NTUzNSZ0KSsodD4+MTYpJmEpJmE7cmV0dXJuIGUvPTQyOTQ5NjcyOTYsKGUrPS41KSooTWF0aC5yYW5kb20oKT4uNT8xOi0xKX19LGk9MDtpPGU7aSs9NCl7dmFyIHM9big0Mjk0OTY3Mjk2Kih0fHxNYXRoLnJhbmRvbSgpKSk7dD05ODc2NTQwNzEqcygpLHIucHVzaCg0Mjk0OTY3Mjk2KnMoKXwwKX1yZXR1cm4gbmV3IGEocixlKX19XSksYX0oRWUpLFRlPXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUud29yZHMscj1lLnNpZ0J5dGVzLGE9W10sbj0wO248cjtuKz0xKXt2YXIgaT10W24+Pj4yXT4+PjI0LW4lNCo4JjI1NTthLnB1c2goKGk+Pj40KS50b1N0cmluZygxNikpLGEucHVzaCgoMTUmaSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gYS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9W10sYT0wO2E8dDthKz0yKXJbYT4+PjNdfD1wYXJzZUludChlLnN1YnN0cihhLDIpLDE2KTw8MjQtYSU4KjQ7cmV0dXJuIG5ldyBCZShyLHQvMil9fSxDZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bXSxhPTA7YTx0O2ErPTEpclthPj4+Ml18PSgyNTUmZS5jaGFyQ29kZUF0KGEpKTw8MjQtYSU0Kjg7cmV0dXJuIG5ldyBCZShyLHQpfSxVZT1mdW5jdGlvbihlKXtyZXR1cm4gQ2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKSl9LFBlPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXt2YXIgZTtyZXR1cm4gcih0aGlzLGEpLChlPXQuY2FsbCh0aGlzKSkuX21pbkJ1ZmZlclNpemU9MCxlfXJldHVybiBuKGEsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RhdGE9bmV3IEJlLHRoaXMuX25EYXRhQnl0ZXM9MH19LHtrZXk6Il9hcHBlbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU7InN0cmluZyI9PXR5cGVvZiB0JiYodD1VZSh0KSksdGhpcy5fZGF0YS5jb25jYXQodCksdGhpcy5fbkRhdGFCeXRlcys9dC5zaWdCeXRlc319LHtrZXk6Il9wcm9jZXNzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX2RhdGEsYT10aGlzLmJsb2NrU2l6ZSxuPXIud29yZHMsaT1yLnNpZ0J5dGVzLHM9aS8oNCphKSxvPShzPWU/TWF0aC5jZWlsKHMpOk1hdGgubWF4KCgwfHMpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKmEsdT1NYXRoLm1pbig0Km8saSk7aWYobyl7Zm9yKHZhciBjPTA7YzxvO2MrPWEpdGhpcy5fZG9Qcm9jZXNzQmxvY2sobixjKTt0PW4uc3BsaWNlKDAsbyksci5zaWdCeXRlcy09dX1yZXR1cm4gbmV3IEJlKHQsdSl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1wKG8oYS5wcm90b3R5cGUpLCJjbG9uZSIsdGhpcykuY2FsbCh0aGlzKTtyZXR1cm4gZS5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCksZX19XSksYX0oRWUpLEllPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSl7dmFyIG47cmV0dXJuIHIodGhpcyxhKSwobj10LmNhbGwodGhpcykpLmJsb2NrU2l6ZT0xNixuLmNmZz1PYmplY3QuYXNzaWduKG5ldyBFZSxlKSxuLnJlc2V0KCksbn1yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXtwKG8oYS5wcm90b3R5cGUpLCJyZXNldCIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hcHBlbmQoZSksdGhpcy5fcHJvY2VzcygpLHRoaXN9fSx7a2V5OiJmaW5hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnRoaXMuX2FwcGVuZChlKSx0aGlzLl9kb0ZpbmFsaXplKCl9fV0sW3trZXk6Il9jcmVhdGVIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShyKS5maW5hbGl6ZSh0KX19fSx7a2V5OiJfY3JlYXRlSG1hY0hlbHBlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyB6ZShlLHIpLmZpbmFsaXplKHQpfX19XSksYX0oUGUpLHplPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSxuKXt2YXIgaTtyKHRoaXMsYSksaT10LmNhbGwodGhpcyk7dmFyIHM9bmV3IGU7aS5faGFzaGVyPXM7dmFyIG89bjsic3RyaW5nIj09dHlwZW9mIG8mJihvPVVlKG8pKTt2YXIgdT1zLmJsb2NrU2l6ZSxjPTQqdTtvLnNpZ0J5dGVzPmMmJihvPXMuZmluYWxpemUobikpLG8uY2xhbXAoKTt2YXIgbD1vLmNsb25lKCk7aS5fb0tleT1sO3ZhciBmPW8uY2xvbmUoKTtpLl9pS2V5PWY7Zm9yKHZhciBkPWwud29yZHMsaD1mLndvcmRzLHA9MDtwPHU7cCs9MSlkW3BdXj0xNTQ5NTU2ODI4LGhbcF1ePTkwOTUyMjQ4NjtyZXR1cm4gbC5zaWdCeXRlcz1jLGYuc2lnQnl0ZXM9YyxpLnJlc2V0KCksaX1yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9oYXNoZXI7ZS5yZXNldCgpLGUudXBkYXRlKHRoaXMuX2lLZXkpfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faGFzaGVyLnVwZGF0ZShlKSx0aGlzfX0se2tleToiZmluYWxpemUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2hhc2hlcixyPXQuZmluYWxpemUoZSk7cmV0dXJuIHQucmVzZXQoKSx0LmZpbmFsaXplKHRoaXMuX29LZXkuY2xvbmUoKS5jb25jYXQocikpfX1dKSxhfShFZSksTWU9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXt2YXIgdD1lLndvcmRzLHI9ZS5zaWdCeXRlcyxhPXRoaXMuX21hcDtlLmNsYW1wKCk7Zm9yKHZhciBuPVtdLGk9MDtpPHI7aSs9Mylmb3IodmFyIHM9KHRbaT4+PjJdPj4+MjQtaSU0KjgmMjU1KTw8MTZ8KHRbaSsxPj4+Ml0+Pj4yNC0oaSsxKSU0KjgmMjU1KTw8OHx0W2krMj4+PjJdPj4+MjQtKGkrMiklNCo4JjI1NSxvPTA7bzw0JiZpKy43NSpvPHI7bys9MSluLnB1c2goYS5jaGFyQXQocz4+PjYqKDMtbykmNjMpKTt2YXIgdT1hLmNoYXJBdCg2NCk7aWYodSlmb3IoO24ubGVuZ3RoJTQ7KW4ucHVzaCh1KTtyZXR1cm4gbi5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10aGlzLl9tYXAsYT10aGlzLl9yZXZlcnNlTWFwO2lmKCFhKXt0aGlzLl9yZXZlcnNlTWFwPVtdLGE9dGhpcy5fcmV2ZXJzZU1hcDtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rPTEpYVtyLmNoYXJDb2RlQXQobildPW59dmFyIGk9ci5jaGFyQXQoNjQpO2lmKGkpe3ZhciBzPWUuaW5kZXhPZihpKTstMSE9PXMmJih0PXMpfXJldHVybiBmdW5jdGlvbihlLHQscil7Zm9yKHZhciBhPVtdLG49MCxpPTA7aTx0O2krPTEpaWYoaSU0KXt2YXIgcz1yW2UuY2hhckNvZGVBdChpLTEpXTw8aSU0KjJ8cltlLmNoYXJDb2RlQXQoaSldPj4+Ni1pJTQqMjthW24+Pj4yXXw9czw8MjQtbiU0Kjgsbis9MX1yZXR1cm4gQmUuY3JlYXRlKGEsbil9KGUsdCxhKX0sX21hcDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0ifSxSZT1bXSxPZT0wO09lPDY0O09lKz0xKVJlW09lXT00Mjk0OTY3Mjk2Kk1hdGguYWJzKE1hdGguc2luKE9lKzEpKXwwO3ZhciBMZT1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyh0JnJ8fnQmYSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxWZT1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyh0JmF8ciZ+YSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxGZT1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyh0XnJeYSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxOZT1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyhyXih0fH5hKSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxqZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLFt7a2V5OiJfZG9SZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBCZShbMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4XSl9fSx7a2V5OiJfZG9Qcm9jZXNzQmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUsYT0wO2E8MTY7YSs9MSl7dmFyIG49dCthLGk9ZVtuXTtyW25dPTE2NzExOTM1JihpPDw4fGk+Pj4yNCl8NDI3ODI1NTM2MCYoaTw8MjR8aT4+PjgpfXZhciBzPXRoaXMuX2hhc2gud29yZHMsbz1yW3QrMF0sdT1yW3QrMV0sYz1yW3QrMl0sbD1yW3QrM10sZj1yW3QrNF0sZD1yW3QrNV0saD1yW3QrNl0scD1yW3QrN10sdj1yW3QrOF0seT1yW3QrOV0sbT1yW3QrMTBdLGc9clt0KzExXSxrPXJbdCsxMl0sYj1yW3QrMTNdLF89clt0KzE0XSx3PXJbdCsxNV0seD1zWzBdLFM9c1sxXSxBPXNbMl0sRD1zWzNdO3g9TGUoeCxTLEEsRCxvLDcsUmVbMF0pLEQ9TGUoRCx4LFMsQSx1LDEyLFJlWzFdKSxBPUxlKEEsRCx4LFMsYywxNyxSZVsyXSksUz1MZShTLEEsRCx4LGwsMjIsUmVbM10pLHg9TGUoeCxTLEEsRCxmLDcsUmVbNF0pLEQ9TGUoRCx4LFMsQSxkLDEyLFJlWzVdKSxBPUxlKEEsRCx4LFMsaCwxNyxSZVs2XSksUz1MZShTLEEsRCx4LHAsMjIsUmVbN10pLHg9TGUoeCxTLEEsRCx2LDcsUmVbOF0pLEQ9TGUoRCx4LFMsQSx5LDEyLFJlWzldKSxBPUxlKEEsRCx4LFMsbSwxNyxSZVsxMF0pLFM9TGUoUyxBLEQseCxnLDIyLFJlWzExXSkseD1MZSh4LFMsQSxELGssNyxSZVsxMl0pLEQ9TGUoRCx4LFMsQSxiLDEyLFJlWzEzXSksQT1MZShBLEQseCxTLF8sMTcsUmVbMTRdKSxTPUxlKFMsQSxELHgsdywyMixSZVsxNV0pLHg9VmUoeCxTLEEsRCx1LDUsUmVbMTZdKSxEPVZlKEQseCxTLEEsaCw5LFJlWzE3XSksQT1WZShBLEQseCxTLGcsMTQsUmVbMThdKSxTPVZlKFMsQSxELHgsbywyMCxSZVsxOV0pLHg9VmUoeCxTLEEsRCxkLDUsUmVbMjBdKSxEPVZlKEQseCxTLEEsbSw5LFJlWzIxXSksQT1WZShBLEQseCxTLHcsMTQsUmVbMjJdKSxTPVZlKFMsQSxELHgsZiwyMCxSZVsyM10pLHg9VmUoeCxTLEEsRCx5LDUsUmVbMjRdKSxEPVZlKEQseCxTLEEsXyw5LFJlWzI1XSksQT1WZShBLEQseCxTLGwsMTQsUmVbMjZdKSxTPVZlKFMsQSxELHgsdiwyMCxSZVsyN10pLHg9VmUoeCxTLEEsRCxiLDUsUmVbMjhdKSxEPVZlKEQseCxTLEEsYyw5LFJlWzI5XSksQT1WZShBLEQseCxTLHAsMTQsUmVbMzBdKSxTPVZlKFMsQSxELHgsaywyMCxSZVszMV0pLHg9RmUoeCxTLEEsRCxkLDQsUmVbMzJdKSxEPUZlKEQseCxTLEEsdiwxMSxSZVszM10pLEE9RmUoQSxELHgsUyxnLDE2LFJlWzM0XSksUz1GZShTLEEsRCx4LF8sMjMsUmVbMzVdKSx4PUZlKHgsUyxBLEQsdSw0LFJlWzM2XSksRD1GZShELHgsUyxBLGYsMTEsUmVbMzddKSxBPUZlKEEsRCx4LFMscCwxNixSZVszOF0pLFM9RmUoUyxBLEQseCxtLDIzLFJlWzM5XSkseD1GZSh4LFMsQSxELGIsNCxSZVs0MF0pLEQ9RmUoRCx4LFMsQSxvLDExLFJlWzQxXSksQT1GZShBLEQseCxTLGwsMTYsUmVbNDJdKSxTPUZlKFMsQSxELHgsaCwyMyxSZVs0M10pLHg9RmUoeCxTLEEsRCx5LDQsUmVbNDRdKSxEPUZlKEQseCxTLEEsaywxMSxSZVs0NV0pLEE9RmUoQSxELHgsUyx3LDE2LFJlWzQ2XSksUz1GZShTLEEsRCx4LGMsMjMsUmVbNDddKSx4PU5lKHgsUyxBLEQsbyw2LFJlWzQ4XSksRD1OZShELHgsUyxBLHAsMTAsUmVbNDldKSxBPU5lKEEsRCx4LFMsXywxNSxSZVs1MF0pLFM9TmUoUyxBLEQseCxkLDIxLFJlWzUxXSkseD1OZSh4LFMsQSxELGssNixSZVs1Ml0pLEQ9TmUoRCx4LFMsQSxsLDEwLFJlWzUzXSksQT1OZShBLEQseCxTLG0sMTUsUmVbNTRdKSxTPU5lKFMsQSxELHgsdSwyMSxSZVs1NV0pLHg9TmUoeCxTLEEsRCx2LDYsUmVbNTZdKSxEPU5lKEQseCxTLEEsdywxMCxSZVs1N10pLEE9TmUoQSxELHgsUyxoLDE1LFJlWzU4XSksUz1OZShTLEEsRCx4LGIsMjEsUmVbNTldKSx4PU5lKHgsUyxBLEQsZiw2LFJlWzYwXSksRD1OZShELHgsUyxBLGcsMTAsUmVbNjFdKSxBPU5lKEEsRCx4LFMsYywxNSxSZVs2Ml0pLFM9TmUoUyxBLEQseCx5LDIxLFJlWzYzXSksc1swXT1zWzBdK3h8MCxzWzFdPXNbMV0rU3wwLHNbMl09c1syXStBfDAsc1szXT1zWzNdK0R8MH19LHtrZXk6Il9kb0ZpbmFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2RhdGEsdD1lLndvcmRzLHI9OCp0aGlzLl9uRGF0YUJ5dGVzLGE9OCplLnNpZ0J5dGVzO3RbYT4+PjVdfD0xMjg8PDI0LWElMzI7dmFyIG49TWF0aC5mbG9vcihyLzQyOTQ5NjcyOTYpLGk9cjt0WzE1KyhhKzY0Pj4+OTw8NCldPTE2NzExOTM1JihuPDw4fG4+Pj4yNCl8NDI3ODI1NTM2MCYobjw8MjR8bj4+PjgpLHRbMTQrKGErNjQ+Pj45PDw0KV09MTY3MTE5MzUmKGk8PDh8aT4+PjI0KXw0Mjc4MjU1MzYwJihpPDwyNHxpPj4+OCksZS5zaWdCeXRlcz00Kih0Lmxlbmd0aCsxKSx0aGlzLl9wcm9jZXNzKCk7Zm9yKHZhciBzPXRoaXMuX2hhc2gsbz1zLndvcmRzLHU9MDt1PDQ7dSs9MSl7dmFyIGM9b1t1XTtvW3VdPTE2NzExOTM1JihjPDw4fGM+Pj4yNCl8NDI3ODI1NTM2MCYoYzw8MjR8Yz4+PjgpfXJldHVybiBzfX0se2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cChvKGEucHJvdG90eXBlKSwiY2xvbmUiLHRoaXMpLmNhbGwodGhpcyk7cmV0dXJuIGUuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpLGV9fV0pLGF9KEllKTtJZS5fY3JlYXRlSGVscGVyKGplKSxJZS5fY3JlYXRlSG1hY0hlbHBlcihqZSk7dmFyIEdlPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoZSl7dmFyIG47cmV0dXJuIHIodGhpcyxhKSwobj10LmNhbGwodGhpcykpLmNmZz1PYmplY3QuYXNzaWduKG5ldyBFZSx7a2V5U2l6ZTo0LGhhc2hlcjpqZSxpdGVyYXRpb25zOjF9LGUpLG59cmV0dXJuIG4oYSxbe2tleToiY29tcHV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsYT10aGlzLmNmZyxuPWEuaGFzaGVyLmNyZWF0ZSgpLGk9QmUuY3JlYXRlKCkscz1pLndvcmRzLG89YS5rZXlTaXplLHU9YS5pdGVyYXRpb25zO3MubGVuZ3RoPG87KXtyJiZuLnVwZGF0ZShyKSxyPW4udXBkYXRlKGUpLmZpbmFsaXplKHQpLG4ucmVzZXQoKTtmb3IodmFyIGM9MTtjPHU7Yys9MSlyPW4uZmluYWxpemUociksbi5yZXNldCgpO2kuY29uY2F0KHIpfXJldHVybiBpLnNpZ0J5dGVzPTQqbyxpfX1dKSxhfShFZSksSGU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYShlLG4saSl7dmFyIHM7cmV0dXJuIHIodGhpcyxhKSwocz10LmNhbGwodGhpcykpLmNmZz1PYmplY3QuYXNzaWduKG5ldyBFZSxpKSxzLl94Zm9ybU1vZGU9ZSxzLl9rZXk9bixzLnJlc2V0KCksc31yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXtwKG8oYS5wcm90b3R5cGUpLCJyZXNldCIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9fSx7a2V5OiJwcm9jZXNzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYXBwZW5kKGUpLHRoaXMuX3Byb2Nlc3MoKX19LHtrZXk6ImZpbmFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy5fYXBwZW5kKGUpLHRoaXMuX2RvRmluYWxpemUoKX19XSxbe2tleToiY3JlYXRlRW5jcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNyZWF0ZSh0aGlzLl9FTkNfWEZPUk1fTU9ERSxlLHQpfX0se2tleToiY3JlYXRlRGVjcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNyZWF0ZSh0aGlzLl9ERUNfWEZPUk1fTU9ERSxlLHQpfX0se2tleToiX2NyZWF0ZUhlbHBlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2V0OkplfTtyZXR1cm57ZW5jcnlwdDpmdW5jdGlvbihyLGEsbil7cmV0dXJuIHQoYSkuZW5jcnlwdChlLHIsYSxuKX0sZGVjcnlwdDpmdW5jdGlvbihyLGEsbil7cmV0dXJuIHQoYSkuZGVjcnlwdChlLHIsYSxuKX19fX1dKSxhfShQZSk7SGUuX0VOQ19YRk9STV9NT0RFPTEsSGUuX0RFQ19YRk9STV9NT0RFPTIsSGUua2V5U2l6ZT00LEhlLml2U2l6ZT00O3ZhciBLZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKGUsbil7dmFyIGk7cmV0dXJuIHIodGhpcyxhKSwoaT10LmNhbGwodGhpcykpLl9jaXBoZXI9ZSxpLl9pdj1uLGl9cmV0dXJuIG4oYSxudWxsLFt7a2V5OiJjcmVhdGVFbmNyeXB0b3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuRW5jcnlwdG9yLmNyZWF0ZShlLHQpfX0se2tleToiY3JlYXRlRGVjcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLkRlY3J5cHRvci5jcmVhdGUoZSx0KX19XSksYX0oRWUpO2Z1bmN0aW9uIHFlKGUsdCxyKXt2YXIgYSxuPWUsaT10aGlzLl9pdjtpPyhhPWksdGhpcy5faXY9dm9pZCAwKTphPXRoaXMuX3ByZXZCbG9jaztmb3IodmFyIHM9MDtzPHI7cys9MSluW3Qrc11ePWFbc119dmFyIFdlPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEpfShLZSk7V2UuRW5jcnlwdG9yPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsW3trZXk6InByb2Nlc3NCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9jaXBoZXIsYT1yLmJsb2NrU2l6ZTtxZS5jYWxsKHRoaXMsZSx0LGEpLHIuZW5jcnlwdEJsb2NrKGUsdCksdGhpcy5fcHJldkJsb2NrPWUuc2xpY2UodCx0K2EpfX1dKSxhfShXZSksV2UuRGVjcnlwdG9yPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsW3trZXk6InByb2Nlc3NCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9jaXBoZXIsYT1yLmJsb2NrU2l6ZSxuPWUuc2xpY2UodCx0K2EpO3IuZGVjcnlwdEJsb2NrKGUsdCkscWUuY2FsbCh0aGlzLGUsdCxhKSx0aGlzLl9wcmV2QmxvY2s9bn19XSksYX0oV2UpO3ZhciBYZT17cGFkOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTQqdCxhPXItZS5zaWdCeXRlcyVyLG49YTw8MjR8YTw8MTZ8YTw8OHxhLGk9W10scz0wO3M8YTtzKz00KWkucHVzaChuKTt2YXIgbz1CZS5jcmVhdGUoaSxhKTtlLmNvbmNhdChvKX0sdW5wYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPTI1NSZ0LndvcmRzW3Quc2lnQnl0ZXMtMT4+PjJdO3Quc2lnQnl0ZXMtPXJ9fSxZZT1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKGUsbixpKXt2YXIgcztyZXR1cm4gcih0aGlzLGEpLChzPXQuY2FsbCh0aGlzLGUsbixPYmplY3QuYXNzaWduKHttb2RlOldlLHBhZGRpbmc6WGV9LGkpKSkuYmxvY2tTaXplPTQsc31yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtwKG8oYS5wcm90b3R5cGUpLCJyZXNldCIsdGhpcykuY2FsbCh0aGlzKTt2YXIgdD10aGlzLmNmZyxyPXQuaXYsbj10Lm1vZGU7dGhpcy5feGZvcm1Nb2RlPT09dGhpcy5jb25zdHJ1Y3Rvci5fRU5DX1hGT1JNX01PREU/ZT1uLmNyZWF0ZUVuY3J5cHRvcjooZT1uLmNyZWF0ZURlY3J5cHRvcix0aGlzLl9taW5CdWZmZXJTaXplPTEpLHRoaXMuX21vZGU9ZS5jYWxsKG4sdGhpcyxyJiZyLndvcmRzKSx0aGlzLl9tb2RlLl9fY3JlYXRvcj1lfX0se2tleToiX2RvUHJvY2Vzc0Jsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX21vZGUucHJvY2Vzc0Jsb2NrKGUsdCl9fSx7a2V5OiJfZG9GaW5hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY2ZnLnBhZGRpbmc7cmV0dXJuIHRoaXMuX3hmb3JtTW9kZT09PXRoaXMuY29uc3RydWN0b3IuX0VOQ19YRk9STV9NT0RFPyh0LnBhZCh0aGlzLl9kYXRhLHRoaXMuYmxvY2tTaXplKSxlPXRoaXMuX3Byb2Nlc3MoITApKTooZT10aGlzLl9wcm9jZXNzKCEwKSx0LnVucGFkKGUpKSxlfX1dKSxhfShIZSksWmU9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYShlKXt2YXIgbjtyZXR1cm4gcih0aGlzLGEpLChuPXQuY2FsbCh0aGlzKSkubWl4SW4oZSksbn1yZXR1cm4gbihhLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fHRoaXMuZm9ybWF0dGVyKS5zdHJpbmdpZnkodGhpcyl9fV0pLGF9KEVlKSxRZT17c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2lwaGVydGV4dCxyPWUuc2FsdDtyZXR1cm4ocj9CZS5jcmVhdGUoWzEzOTg4OTM2ODQsMTcwMTA3NjgzMV0pLmNvbmNhdChyKS5jb25jYXQodCk6dCkudG9TdHJpbmcoTWUpfSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdCxyPU1lLnBhcnNlKGUpLGE9ci53b3JkcztyZXR1cm4gMTM5ODg5MzY4ND09PWFbMF0mJjE3MDEwNzY4MzE9PT1hWzFdJiYodD1CZS5jcmVhdGUoYS5zbGljZSgyLDQpKSxhLnNwbGljZSgwLDQpLHIuc2lnQnl0ZXMtPTE2KSxaZS5jcmVhdGUoe2NpcGhlcnRleHQ6cixzYWx0OnR9KX19LEplPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1kKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsbnVsbCxbe2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49T2JqZWN0LmFzc2lnbihuZXcgRWUsdGhpcy5jZmcsYSksaT1lLmNyZWF0ZUVuY3J5cHRvcihyLG4pLHM9aS5maW5hbGl6ZSh0KSxvPWkuY2ZnO3JldHVybiBaZS5jcmVhdGUoe2NpcGhlcnRleHQ6cyxrZXk6cixpdjpvLml2LGFsZ29yaXRobTplLG1vZGU6by5tb2RlLHBhZGRpbmc6by5wYWRkaW5nLGJsb2NrU2l6ZTppLmJsb2NrU2l6ZSxmb3JtYXR0ZXI6bi5mb3JtYXR9KX19LHtrZXk6ImRlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBuPXQsaT1PYmplY3QuYXNzaWduKG5ldyBFZSx0aGlzLmNmZyxhKTtyZXR1cm4gbj10aGlzLl9wYXJzZShuLGkuZm9ybWF0KSxlLmNyZWF0ZURlY3J5cHRvcihyLGkpLmZpbmFsaXplKG4uY2lwaGVydGV4dCl9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3QucGFyc2UoZSx0aGlzKTplfX1dKSxhfShFZSk7SmUuY2ZnPU9iamVjdC5hc3NpZ24obmV3IEVlLHtmb3JtYXQ6UWV9KTt2YXIgJGU9e2V4ZWN1dGU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49YTtufHwobj1CZS5yYW5kb20oOCkpO3ZhciBpPUdlLmNyZWF0ZSh7a2V5U2l6ZTp0K3J9KS5jb21wdXRlKGUsbikscz1CZS5jcmVhdGUoaS53b3Jkcy5zbGljZSh0KSw0KnIpO3JldHVybiBpLnNpZ0J5dGVzPTQqdCxaZS5jcmVhdGUoe2tleTppLGl2OnMsc2FsdDpufSl9fSxldD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZChhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLG51bGwsW3trZXk6ImVuY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBuPU9iamVjdC5hc3NpZ24obmV3IEVlLHRoaXMuY2ZnLGEpLGk9bi5rZGYuZXhlY3V0ZShyLGUua2V5U2l6ZSxlLml2U2l6ZSk7bi5pdj1pLml2O3ZhciBzPUplLmVuY3J5cHQuY2FsbCh0aGlzLGUsdCxpLmtleSxuKTtyZXR1cm4gcy5taXhJbihpKSxzfX0se2tleToiZGVjcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49dCxpPU9iamVjdC5hc3NpZ24obmV3IEVlLHRoaXMuY2ZnLGEpO249dGhpcy5fcGFyc2UobixpLmZvcm1hdCk7dmFyIHM9aS5rZGYuZXhlY3V0ZShyLGUua2V5U2l6ZSxlLml2U2l6ZSxuLnNhbHQpO3JldHVybiBpLml2PXMuaXYsSmUuZGVjcnlwdC5jYWxsKHRoaXMsZSxuLHMua2V5LGkpfX1dKSxhfShKZSk7ZXQuY2ZnPU9iamVjdC5hc3NpZ24oSmUuY2ZnLHtrZGY6JGV9KTtmb3IodmFyIHR0PVtdLHJ0PVtdLGF0PVtdLG50PVtdLGl0PVtdLHN0PVtdLG90PVtdLHV0PVtdLGN0PVtdLGx0PVtdLGZ0PVtdLGR0PTA7ZHQ8MjU2O2R0Kz0xKWZ0W2R0XT1kdDwxMjg/ZHQ8PDE6ZHQ8PDFeMjgzO2Zvcih2YXIgaHQ9MCxwdD0wLHZ0PTA7dnQ8MjU2O3Z0Kz0xKXt2YXIgeXQ9cHRecHQ8PDFecHQ8PDJecHQ8PDNecHQ8PDQ7eXQ9eXQ+Pj44XjI1NSZ5dF45OSx0dFtodF09eXQscnRbeXRdPWh0O3ZhciBtdD1mdFtodF0sZ3Q9ZnRbbXRdLGt0PWZ0W2d0XSxidD0yNTcqZnRbeXRdXjE2ODQzMDA4Knl0O2F0W2h0XT1idDw8MjR8YnQ+Pj44LG50W2h0XT1idDw8MTZ8YnQ+Pj4xNixpdFtodF09YnQ8PDh8YnQ+Pj4yNCxzdFtodF09YnQsYnQ9MTY4NDMwMDkqa3ReNjU1MzcqZ3ReMjU3Km10XjE2ODQzMDA4Kmh0LG90W3l0XT1idDw8MjR8YnQ+Pj44LHV0W3l0XT1idDw8MTZ8YnQ+Pj4xNixjdFt5dF09YnQ8PDh8YnQ+Pj4yNCxsdFt5dF09YnQsaHQ/KGh0PW10XmZ0W2Z0W2Z0W2t0Xm10XV1dLHB0Xj1mdFtmdFtwdF1dKTpodD1wdD0xfXZhciBfdD1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sd3Q9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxbe2tleToiX2RvUmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7aWYoIXRoaXMuX25Sb3VuZHN8fHRoaXMuX2tleVByaW9yUmVzZXQhPT10aGlzLl9rZXkpe3RoaXMuX2tleVByaW9yUmVzZXQ9dGhpcy5fa2V5O3ZhciB0PXRoaXMuX2tleVByaW9yUmVzZXQscj10LndvcmRzLGE9dC5zaWdCeXRlcy80O3RoaXMuX25Sb3VuZHM9YSs2O3ZhciBuPTQqKHRoaXMuX25Sb3VuZHMrMSk7dGhpcy5fa2V5U2NoZWR1bGU9W107Zm9yKHZhciBpPXRoaXMuX2tleVNjaGVkdWxlLHM9MDtzPG47cys9MSlzPGE/aVtzXT1yW3NdOihlPWlbcy0xXSxzJWE/YT42JiZzJWE9PTQmJihlPXR0W2U+Pj4yNF08PDI0fHR0W2U+Pj4xNiYyNTVdPDwxNnx0dFtlPj4+OCYyNTVdPDw4fHR0WzI1NSZlXSk6KGU9dHRbKGU9ZTw8OHxlPj4+MjQpPj4+MjRdPDwyNHx0dFtlPj4+MTYmMjU1XTw8MTZ8dHRbZT4+PjgmMjU1XTw8OHx0dFsyNTUmZV0sZV49X3Rbcy9hfDBdPDwyNCksaVtzXT1pW3MtYV1eZSk7dGhpcy5faW52S2V5U2NoZWR1bGU9W107Zm9yKHZhciBvPXRoaXMuX2ludktleVNjaGVkdWxlLHU9MDt1PG47dSs9MSl7dmFyIGM9bi11O2U9dSU0P2lbY106aVtjLTRdLG9bdV09dTw0fHxjPD00P2U6b3RbdHRbZT4+PjI0XV1edXRbdHRbZT4+PjE2JjI1NV1dXmN0W3R0W2U+Pj44JjI1NV1dXmx0W3R0WzI1NSZlXV19fX19LHtrZXk6ImVuY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9kb0NyeXB0QmxvY2soZSx0LHRoaXMuX2tleVNjaGVkdWxlLGF0LG50LGl0LHN0LHR0KX19LHtrZXk6ImRlY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLGE9clt0KzFdO3JbdCsxXT1yW3QrM10sclt0KzNdPWEsdGhpcy5fZG9DcnlwdEJsb2NrKHIsdCx0aGlzLl9pbnZLZXlTY2hlZHVsZSxvdCx1dCxjdCxsdCxydCksYT1yW3QrMV0sclt0KzFdPXJbdCszXSxyW3QrM109YX19LHtrZXk6Il9kb0NyeXB0QmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEsbixpLHMsbyl7Zm9yKHZhciB1PWUsYz10aGlzLl9uUm91bmRzLGw9dVt0XV5yWzBdLGY9dVt0KzFdXnJbMV0sZD11W3QrMl1eclsyXSxoPXVbdCszXV5yWzNdLHA9NCx2PTE7djxjO3YrPTEpe3ZhciB5PWFbbD4+PjI0XV5uW2Y+Pj4xNiYyNTVdXmlbZD4+PjgmMjU1XV5zWzI1NSZoXV5yW3BdO3ArPTE7dmFyIG09YVtmPj4+MjRdXm5bZD4+PjE2JjI1NV1eaVtoPj4+OCYyNTVdXnNbMjU1JmxdXnJbcF07cCs9MTt2YXIgZz1hW2Q+Pj4yNF1ebltoPj4+MTYmMjU1XV5pW2w+Pj44JjI1NV1ec1syNTUmZl1ecltwXTtwKz0xO3ZhciBrPWFbaD4+PjI0XV5uW2w+Pj4xNiYyNTVdXmlbZj4+PjgmMjU1XV5zWzI1NSZkXV5yW3BdO3ArPTEsbD15LGY9bSxkPWcsaD1rfXZhciBiPShvW2w+Pj4yNF08PDI0fG9bZj4+PjE2JjI1NV08PDE2fG9bZD4+PjgmMjU1XTw8OHxvWzI1NSZoXSlecltwXTtwKz0xO3ZhciBfPShvW2Y+Pj4yNF08PDI0fG9bZD4+PjE2JjI1NV08PDE2fG9baD4+PjgmMjU1XTw8OHxvWzI1NSZsXSlecltwXTtwKz0xO3ZhciB3PShvW2Q+Pj4yNF08PDI0fG9baD4+PjE2JjI1NV08PDE2fG9bbD4+PjgmMjU1XTw8OHxvWzI1NSZmXSlecltwXTtwKz0xO3ZhciB4PShvW2g+Pj4yNF08PDI0fG9bbD4+PjE2JjI1NV08PDE2fG9bZj4+PjgmMjU1XTw8OHxvWzI1NSZkXSlecltwXTtwKz0xLHVbdF09Yix1W3QrMV09Xyx1W3QrMl09dyx1W3QrM109eH19XSksYX0oWWUpO3d0LmtleVNpemU9ODt2YXIgeHQ9WWUuX2NyZWF0ZUhlbHBlcih3dCksU3Q9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KEtlKTtTdC5FbmNyeXB0b3I9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWQoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxbe2tleToicHJvY2Vzc0Jsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUsYT10aGlzLl9jaXBoZXIsbj1hLmJsb2NrU2l6ZSxpPXRoaXMuX2l2LHM9dGhpcy5fY291bnRlcjtpJiYodGhpcy5fY291bnRlcj1pLnNsaWNlKDApLHM9dGhpcy5fY291bnRlcix0aGlzLl9pdj12b2lkIDApO3ZhciBvPXMuc2xpY2UoMCk7YS5lbmNyeXB0QmxvY2sobywwKSxzW24tMV09c1tuLTFdKzF8MDtmb3IodmFyIHU9MDt1PG47dSs9MSlyW3QrdV1ePW9bdV19fV0pLGF9KFN0KSxTdC5EZWNyeXB0b3I9U3QuRW5jcnlwdG9yO3ZhciBBdD17cGFkOmZ1bmN0aW9uKCl7fSx1bnBhZDpmdW5jdGlvbigpe319LER0PXtkZWNyeXB0V29yZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1UZS5wYXJzZSh0KSxuPVRlLnBhcnNlKHJlKHIpKSxpPUJlLmNyZWF0ZShuZXcgVWludDhBcnJheShlKSkscz14dC5kZWNyeXB0KFplLmNyZWF0ZSh7Y2lwaGVydGV4dDppfSksYSx7aXY6bixtb2RlOlN0LHBhZGRpbmc6QXR9KTtyZXR1cm4gRHQud29yZEFycmF5VG9VaW50OEFycmF5KHMpfSx3b3JkQXJyYXlUb1VpbnQ4QXJyYXk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuc2lnQnl0ZXMscj1lLndvcmRzLGE9bmV3IFVpbnQ4QXJyYXkodCksbj0wLGk9MDtuIT09dDspe3ZhciBzPXJbaSsrXTtpZihhW24rK109KDQyNzgxOTAwODAmcyk+Pj4yNCxuPT09dClicmVhaztpZihhW24rK109KDE2NzExNjgwJnMpPj4+MTYsbj09PXQpYnJlYWs7aWYoYVtuKytdPSg2NTI4MCZzKT4+Pjgsbj09PXQpYnJlYWs7YVtuKytdPTI1NSZzfXJldHVybiBhfSxkZWNvZGVyQUVTQ1RSRGF0YTpmdW5jdGlvbihlLHQscil7aWYoZS52aWRlb1NlbmMpe3ZhciBhPWUua2lkVmFsdWUsbj1lLnZpZGVvU2VuYztlLnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXt2YXIgcz1uW2ldLG89dC5kYXRhLHU9W10sYz1bXSxsPXMuSW5pdGlhbGl6YXRpb25WZWN0b3I7aWYocy5zdWJzYW1wbGVzJiZzLnN1YnNhbXBsZXMubGVuZ3RoKXMuc3Vic2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLkJ5dGVzT2ZDbGVhckRhdGErZS5CeXRlc09mUHJvdGVjdGVkRGF0YSxyPW8uc2xpY2UoMCx0KTt1LnB1c2goci5zbGljZSgwLGUuQnl0ZXNPZkNsZWFyRGF0YSkpLGMucHVzaChyLnNsaWNlKGUuQnl0ZXNPZkNsZWFyRGF0YSkpLG89by5zbGljZSh0KX0pKTtlbHNle3ZhciBmPXQuc2l6ZTt1LnB1c2goby5zbGljZSgwLDApKSxjLnB1c2goby5zbGljZSgwLGYpKSxvPW8uc2xpY2UoZil9dmFyIGQ9bmV3IHdlO2Qud3JpdGUuYXBwbHkoZCxjKTt2YXIgaD1yP3IoZC5idWZmZXIsYSxsKTpEdC5kZWNyeXB0V29yZEFycmF5KGQuYnVmZmVyLGEsbCkscD1uZXcgd2U7dS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3ZhciByPWNbdF0ubGVuZ3RoLGE9aC5zbGljZSgwLHIpO3Aud3JpdGUoZSkscC53cml0ZShhKSxoPWguc2xpY2Uocil9KSksZS5zYW1wbGVzW2ldLmRhdGE9cC5idWZmZXJ9KSl9aWYodC5hdWRpb1NlbmMpe3ZhciBpPXQua2lkVmFsdWUscz10LmF1ZGlvU2VuYzt0LnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxhKXt2YXIgbj1zW2FdLG89cj9yKGUuZGF0YSxpLG4uSW5pdGlhbGl6YXRpb25WZWN0b3IpOkR0LmRlY3J5cHRXb3JkQXJyYXkoZS5kYXRhLGksbi5Jbml0aWFsaXphdGlvblZlY3Rvcik7dC5zYW1wbGVzW2FdLmRhdGE9b30pKX19fSxFdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4scyl7dmFyIG89dGhpcztyKHRoaXMsZSksaSh0aGlzLCJfdmlkZW9TYW1wbGVzIixbXSksaSh0aGlzLCJfYXVkaW9TYW1wbGVzIixbXSksaSh0aGlzLCJfbGFzdFJlbWFpbkJ1ZmZlciIsW10pLGkodGhpcywiX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcyIsMCksdGhpcy52aWRlb1RyYWNrPW5ldyB6LHRoaXMuYXVkaW9UcmFjaz1uZXcgTSx0aGlzLm1ldGFkYXRhVHJhY2s9bnx8bmV3IE4sdGhpcy5sb2c9bmV3IEFlKCJNUDREZW11eGVyIiwhc3x8IXMub3BlbkxvZ3x8IXMub3BlbkxvZyksdCYmdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdDsodD1vLl92aWRlb1NhbXBsZXMpLnB1c2guYXBwbHkodCx5KGUuZnJhbWVzKSl9KSksYSYmYS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdDsodD1vLl9hdWRpb1NhbXBsZXMpLnB1c2guYXBwbHkodCx5KGUuZnJhbWVzKSl9KSl9cmV0dXJuIG4oZSxbe2tleToicGFyc2VTYW1wbGVzIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIm1vb3YgaXMgcmVxdWlyZWQiKTtpZih0aGlzLnZpZGVvVHJhY2suY29kZWN8fHRoaXMuYXVkaW9UcmFjay5jb2RlY3x8KHBlLm1vb3ZUb1RyYWNrKGUsdGhpcy52aWRlb1RyYWNrLHRoaXMuYXVkaW9UcmFjayksdGhpcy52aWRlb1NlbmM9dGhpcy52aWRlb1RyYWNrLnZpZGVvU2VuYyx0aGlzLmF1ZGlvU2VuYz10aGlzLmF1ZGlvVHJhY2suYXVkaW9TZW5jKSwhdGhpcy5fYXVkaW9TYW1wbGVzLmxlbmd0aCYmIXRoaXMuX3ZpZGVvU2FtcGxlcy5sZW5ndGgpe3ZhciB0PXBlLm1vb3ZUb1NhbXBsZXMoZSk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgcGFyc2Ugc2FtcGxlcyBmcm9tIG1vb3YgYm94Iik7dGhpcy5fdmlkZW9TYW1wbGVzPXQudmlkZW9TYW1wbGVzfHxbXSx0aGlzLl9hdWRpb1NhbXBsZXM9dC5hdWRpb1NhbXBsZXN8fFtdfX19LHtrZXk6ImRlbXV4Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLG4pe3RoaXMucGFyc2VTYW1wbGVzKG4pO3ZhciBpLHMsbyx1PXRoaXMudmlkZW9UcmFjayxjPXRoaXMuYXVkaW9UcmFjaztpZih1LnNhbXBsZXM9W10sYy5zYW1wbGVzPVtdLHIpe2Zvcih2YXIgbCxmPTAsZD1yWzBdLGg9clsxXTtkPD1oO2QrKyl7aWYoIShpPXRoaXMuX3ZpZGVvU2FtcGxlc1tkXSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZm91bmQgdmlkZW8gZnJhbWUgIyIuY29uY2F0KGQpKTtvPWkub2Zmc2V0LXQscz1lLnN1YmFycmF5KG8sbytpLnNpemUpLChsPW5ldyBSKGkucHRzfHxpLmR0cyxpLmR0cykpLmR1cmF0aW9uPWkuZHVyYXRpb24sbC5nb3BJZD1pLmdvcElkLGkua2V5ZnJhbWUmJmwuc2V0VG9LZXlmcmFtZSgpO2Zvcih2YXIgcD0wLHY9cy5sZW5ndGgtMTtwPHY7KWY9JChzLHApLHArPTQsbC51bml0cy5wdXNoKHMuc3ViYXJyYXkocCxwK2YpKSxwKz1mO3Uuc2FtcGxlcy5wdXNoKGwpfXUuYmFzZU1lZGlhRGVjb2RlVGltZT11LnNhbXBsZXNbMF0uZHRzfWlmKGEpe2Zvcih2YXIgeT1hWzBdLG09YVsxXTt5PD1tO3krKyl7aWYoIShpPXRoaXMuX2F1ZGlvU2FtcGxlc1t5XSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZm91bmQgdmlkZW8gZnJhbWUgIyIuY29uY2F0KHkpKTtvPWkub2Zmc2V0LXQscz1lLnN1YmFycmF5KG8sbytpLnNpemUpLGMuc2FtcGxlcy5wdXNoKG5ldyBPKGkuZHRzLHMsaS5kdXJhdGlvbikpfWMuYmFzZU1lZGlhRGVjb2RlVGltZT1jLnNhbXBsZXNbMF0uZHRzfXJldHVybnt2aWRlb1RyYWNrOnUsYXVkaW9UcmFjazpjLG1ldGFkYXRhVHJhY2s6dGhpcy5tZXRhZGF0YVRyYWNrfX19LHtrZXk6ImRlbXV4UGFydCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxuLGkscyxvKXtpZih0aGlzLnBhcnNlU2FtcGxlcyhuKSx0aGlzLnZpZGVvVHJhY2sudXNlRU1FPWksdGhpcy5hdWRpb1RyYWNrLnVzZUVNRT1pLHRoaXMuX2xhc3RSZW1haW5CdWZmZXImJnRoaXMuX2xhc3RSZW1haW5CdWZmZXIuYnl0ZUxlbmd0aD4wJiZ0PnRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcyYmdDw9dGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zK3RoaXMuX2xhc3RSZW1haW5CdWZmZXIuYnl0ZUxlbmd0aClmb3IodmFyIHU9MDt1PDIwOyl0cnl7dmFyIGM9dGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5zdWJhcnJheSgwLHQtdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zKSxsPW5ldyBVaW50OEFycmF5KGUuYnl0ZUxlbmd0aCtjLmJ5dGVMZW5ndGgpO2wuc2V0KGMsMCksbC5zZXQobmV3IFVpbnQ4QXJyYXkoZSksYy5ieXRlTGVuZ3RoKSxlPWwsdC09Yy5ieXRlTGVuZ3RoLHRoaXMuX2xhc3RSZW1haW5CdWZmZXI9bnVsbCx0aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9MDticmVha31jYXRjaChFKXtpZighKHU8MjApKXRocm93IG5ldyBFcnJvcigibmV3IFVpbnQ4QXJyYXkgZXJyb3I6LCIrRS5lcnJvck1lc3NhZ2UpO3UrK312YXIgZixkLGgscD10aGlzLnZpZGVvVHJhY2ssdj10aGlzLmF1ZGlvVHJhY2s7cC5zYW1wbGVzPVtdLHYuc2FtcGxlcz1bXSxwLnZpZGVvU2VuYz1udWxsLHYuYXVkaW9TZW5jPW51bGw7dmFyIHk9MCxtPTA7aWYodGhpcy5fdmlkZW9TYW1wbGVzLmxlbmd0aD4wJiZyLmxlbmd0aD4wKXtmb3IodmFyIGcsaz1lLmJ5dGVMZW5ndGgrdCxiPXJbMF07Yjw9clsxXTtiKyspe2lmKCEoZj10aGlzLl92aWRlb1NhbXBsZXNbYl0pKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZvdW5kIHZpZGVvIGZyYW1lICMiLmNvbmNhdChiKSk7Zi5vZmZzZXQ+PXQmJmYub2Zmc2V0K2Yuc2l6ZTw9ayYmKHk9KGg9Zi5vZmZzZXQtdCkrZi5zaXplLGQ9ZS5zdWJhcnJheShoLHkpLChnPW5ldyBSKGYucHRzfHxmLmR0cyxmLmR0cykpLmR1cmF0aW9uPWYuZHVyYXRpb24sZy5nb3BJZD1mLmdvcElkLGcuc2FtcGxlT2Zmc2V0PWYuaW5kZXgsZi5rZXlmcmFtZSYmZy5zZXRUb0tleWZyYW1lKCksZy5kYXRhPWQsZy5zaXplPWYuc2l6ZSxwLnNhbXBsZXMucHVzaChnKSl9cC5zYW1wbGVzLmxlbmd0aD4wJiYocC5nb3BJZD1wLnNhbXBsZXNbMF0uZ29wSWQscC5iYXNlTWVkaWFEZWNvZGVUaW1lPXAuc2FtcGxlc1swXS5kdHMscC5zdGFydFB0cz1wLnNhbXBsZXNbMF0ucHRzL3AudGltZXNjYWxlLHAuZW5kUHRzPXAuc2FtcGxlc1twLnNhbXBsZXMubGVuZ3RoLTFdLnB0cy9wLnRpbWVzY2FsZSx0aGlzLnZpZGVvU2VuYyYmKHAudmlkZW9TZW5jPXRoaXMudmlkZW9TZW5jLnNsaWNlKHAuc2FtcGxlc1swXS5zYW1wbGVPZmZzZXQscC5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCtwLnNhbXBsZXMubGVuZ3RoKSxwLmtpZFZhbHVlPXMpKX1pZih0aGlzLl9hdWRpb1NhbXBsZXMubGVuZ3RoPjAmJmEubGVuZ3RoPjApe2Zvcih2YXIgXz1hWzBdO188PWFbMV07XysrKXtpZighKGY9dGhpcy5fYXVkaW9TYW1wbGVzW19dKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmb3VuZCB2aWRlbyBmcmFtZSAjIi5jb25jYXQoXykpO2Yub2Zmc2V0Pj10JiZmLm9mZnNldCtmLnNpemU8PWUuYnl0ZUxlbmd0aCt0JiYobT0oaD1mLm9mZnNldC10KStmLnNpemUsZD1lLnN1YmFycmF5KGgsbSksdi5zYW1wbGVzLnB1c2gobmV3IE8oZi5kdHMsZCxmLmR1cmF0aW9uLGYuaW5kZXgpKSl9di5zYW1wbGVzLmxlbmd0aD4wJiYodi5nb3BJZD12LnNhbXBsZXNbMF0uZ29wSWR8fHAuZ29wSWQsdi5iYXNlTWVkaWFEZWNvZGVUaW1lPXYuc2FtcGxlc1swXS5kdHMsdi5zdGFydFB0cz12LnNhbXBsZXNbMF0ucHRzL3YudGltZXNjYWxlLHYuZW5kUHRzPXYuc2FtcGxlc1t2LnNhbXBsZXMubGVuZ3RoLTFdLnB0cy92LnRpbWVzY2FsZSx0aGlzLmF1ZGlvU2VuYyYmKHYuYXVkaW9TZW5jPXRoaXMuYXVkaW9TZW5jLnNsaWNlKHYuc2FtcGxlc1swXS5zYW1wbGVPZmZzZXQsdi5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCt2LnNhbXBsZXMubGVuZ3RoKSx2LmtpZFZhbHVlPXMpKX10aGlzLmRlY29kZXJEYXRhKHAsdixvKTtmb3IodmFyIHc9MCx4PTA7eDxwLnNhbXBsZXMubGVuZ3RoO3grKylmb3IodmFyIFM9MCxBPXAuc2FtcGxlc1t4XS5kYXRhLEQ9QS5sZW5ndGgtMTtTPEQ7KXc9JChBLFMpLFMrPTQscC5zYW1wbGVzW3hdLnVuaXRzLnB1c2goQS5zdWJhcnJheShTLFMrdykpLFMrPXc7cmV0dXJuIHRoaXMuX2xhc3RSZW1haW5CdWZmZXI9ZS5zdWJhcnJheShNYXRoLm1heCh5LG0pKSx0aGlzLl9sYXN0UmVtYWluQnVmZmVyLmJ5dGVMZW5ndGg+MD90aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9dCtlLmJ5dGVMZW5ndGgtdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5ieXRlTGVuZ3RoOnRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcz0wLHt2aWRlb1RyYWNrOnAsYXVkaW9UcmFjazp2LG1ldGFkYXRhVHJhY2s6dGhpcy5tZXRhZGF0YVRyYWNrfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3ZpZGVvU2FtcGxlcz1bXSx0aGlzLl9hdWRpb1NhbXBsZXM9W10sdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlcj1udWxsLHRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcz0wLHRoaXMudmlkZW9UcmFjay5yZXNldCgpLHRoaXMuYXVkaW9UcmFjay5yZXNldCgpLHRoaXMubWV0YWRhdGFUcmFjay5yZXNldCgpfX0se2tleToiZGVjb2RlckRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtlLnVzZUVNRXx8dC51c2VFTUV8fER0LmRlY29kZXJBRVNDVFJEYXRhKGUsdCxyKX19XSxbe2tleToicHJvYmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBwZS5wcm9iZShlKX19XSksZX0oKSxCdD17bm93VGltZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gcGFyc2VJbnQocGVyZm9ybWFuY2Uubm93KCksMTApfWNhdGNoKGUpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0sY29uY2F0RGF0YTpmdW5jdGlvbihlLHQpe3ZhciByPVtdLGE9MDtlJiZyLnB1c2goZSksdCYmci5wdXNoKHQpLHIuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYoYSs9ZS5ieXRlTGVuZ3RoKSwhMH0pKTt2YXIgbj1uZXcgVWludDhBcnJheShhKSxpPTA7cmV0dXJuIHIuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYobi5zZXQoZSxpKSxpKz1lLmJ5dGVMZW5ndGgpLCEwfSkpLG59fTtvbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kYXRhO3N3aXRjaChyLm1ldGhvZCl7Y2FzZSJpbml0Ijp0aGlzLmNvZGVjVHlwZT1yLmFyZ3MuY29kZWNUeXBlLHRoaXMub3BlbmxvZz1yLmFyZ3Mub3BlbkxvZyx0aGlzLk1QNERlbXV4ZXI9bnVsbCx0aGlzLkZNUDRSZW11eGVyPW51bGwsdGhpcy5fbmVlZEluaXRTZWdtZW50PSEwLHRoaXMuc3VwcG9ydEhldmM9ci5hcmdzLnN1cHBvcnRIZXZjO2JyZWFrO2Nhc2UidHJhbnNtdXgiOnZhciBhPWUuZGF0YS5hcmdzLG49bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmJ1ZmZlcik7dGhpcy5NUDREZW11eGVyfHwodGhpcy5NUDREZW11eGVyPW5ldyBFdChudWxsLG51bGwsbnVsbCx7b3BlbmxvZzp0aGlzLm9wZW5sb2d9KSk7dmFyIGkscz10aGlzLk1QNERlbXV4ZXIuZGVtdXhQYXJ0KG4sYS5zdGFydCxhLnZpZGVvSWR4LGEuYXVkaW9JZHgsYS5tb292LGEudXNlRU1FLGEua2lkVmFsdWUpO2lmKHRoaXMuRk1QNFJlbXV4ZXJ8fCJoMjY1Ij09PXRoaXMuY29kZWNUeXBlJiYhdGhpcy5zdXBwb3J0SGV2Y3x8KHRoaXMuRk1QNFJlbXV4ZXI9bmV3IERlKHRoaXMuTVA0RGVtdXhlci52aWRlb1RyYWNrLHRoaXMuTVA0RGVtdXhlci5hdWRpb1RyYWNrLHtvcGVuTG9nOnRoaXMub3BlbmxvZ30pKSx0aGlzLkZNUDRSZW11eGVyKXt2YXIgbz10aGlzLkZNUDRSZW11eGVyLnJlbXV4KHRoaXMuX25lZWRJbml0U2VnbWVudCx7aW5pdE1lcmdlOiEwfSk7by5pbml0U2VnbWVudCYmKHRoaXMuX25lZWRJbml0U2VnbWVudD0hMSksaT17YnVmZmVyOkJ0LmNvbmNhdERhdGEoby5hdWRpb1NlZ21lbnQsby52aWRlb1NlZ21lbnQpLHJhbmdlOmEuY29udGV4dC5yYW5nZSxzdGF0ZTphLmNvbnRleHQuc3RhdGUsY29udGV4dDp7cmFuZ2U6YS5jb250ZXh0LnJhbmdlLGZyYWdJbmRleDphLmNvbnRleHQuZnJhZ0luZGV4LHN0YXJ0UHRzOk1hdGgubWluKHMudmlkZW9UcmFjay5zdGFydFB0cyxzLmF1ZGlvVHJhY2suc3RhcnRQdHMpLGVuZFB0czpNYXRoLm1heChzLnZpZGVvVHJhY2suZW5kUHRzLHMuYXVkaW9UcmFjay5lbmRQdHMpfSxpbml0U2VnOm8uaW5pdFNlZ21lbnR9fXRoaXMucG9zdE1lc3NhZ2Uoe21ldGhvZDoidHJhbnNtdXgiLGlkOmUuZGF0YS5pZCxhcmdzOnQoe30saSl9KTticmVhaztjYXNlInJlc2V0Ijp0aGlzLkZNUDRSZW11eGVyJiZ0aGlzLkZNUDRSZW11eGVyLnJlc2V0KCksdGhpcy5NUDREZW11eGVyJiZ0aGlzLk1QNERlbXV4ZXIucmVzZXQoKSx0aGlzLkZNUDRSZW11eGVyPW51bGwsdGhpcy5NUDREZW11eGVyPW51bGwsdGhpcy5fbmVlZEluaXRTZWdtZW50PSEwfX19KCk7Cg==",an="undefined"!=typeof window&&window.Blob&&new Blob([atob(rn)],{type:"text/javascript;charset=utf-8"});function ln(){var e=an&&(window.URL||window.webkitURL).createObjectURL(an);try{return e?new Worker(e,{}):new Worker("data:application/javascript;base64,"+rn,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}var on=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 ln,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 G(i,[{key:"transmux",value:function(e,t,i,n,s,r,a,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:r,useEME:a,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),dn="error",cn="metaReady",un="moov_request_Progress",hn="update_load_fragmentIdx",mn=function(e){v(u,e);var t,i,n,s,r,a,l,o,d,c=w(u);function u(e,t){var i;if(X(this,u),W(T(i=c.call(this)),"onprogressDataArrive",function(){var e=f(Z().mark((function e(t,n,s){var r;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t&&t.byteLength>0&&((r=i.timeRange[s.index].range)&&s.range[1]>=r[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 $i(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),{},{openLog:nn()})),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 on({id:i.workerSequence,codecType:t.codecType,supportHevc:i.options.supportHevc,openLog:nn()}),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 G(u,[{key:"changeBitRate",value:(d=f(Z().mark((function e(t){return Z().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),r=1;r<n;r++)s[r-1]=arguments[r];sn.apply(void 0,[i].concat(s))}},{key:"errorHandler",value:(o=f(Z().mark((function e(t,i){var n,s,r,a;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=t.response,s=t.message,r=this.options?this.options.vid:"",a=null,this._isPending=!0,n?(a=new ji("network",n.status,{httpText:n.httpText,message:s,url:n.url}),this.emit(dn,a)):(console.log("[MP4] [".concat(r,"] errorHandler,"),t),a=t,this.emit(dn,a));case 6:case"end":return e.stop()}}),e,this)}))),function(e,t){return o.apply(this,arguments)})},{key:"init",value:(l=f(Z().mark((function e(){return Z().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:(a=f(Z().mark((function e(){var t,i,n,s=this,r=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=!(r.length>0&&void 0!==r[0])||r[0],e.prev=1,this._metaLoading=!0,this.log("getMetaInfo start"),this.bufferLoaded=new Uint8Array(0),i=0,n=function(){var e=f(Z().mark((function e(n,r,a){var l;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s.log("getMetaInfo onProgressHandle, dataLen,",n?n.byteLength:-1,", state,",r,",range,",JSON.stringify(a.range)),n&&a.range[0]===i&&(s.bufferLoaded=P(Uint8Array,s.bufferLoaded,new Uint8Array(n)),i+=n.byteLength),a.meta&&!s.meta&&(l=a.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&&r&&(s.log("[getMetaInfo req end]"),s._metaLoading=!1),s.meta&&(n||r)&&(s.log("emit moov_req_progress"),s.emit(un));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 a.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:(r=f(Z().mark((function e(){var t;return Z().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 r.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,r=null;this.videoTrak&&(r=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1]);var a=null;this.audioTrak&&(a=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=r)||void 0===t?void 0:t.range[0])||1/0,(null===(i=a)||void 0===i?void 0:i.range[0])||1/0),Math.max((null===(n=r)||void 0===n?void 0:n.range[1])+l||0,(null===(s=a)||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(Z().mark((function e(t,i){var n,s,r;return Z().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(hn,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?(r=this.getSubRange(t,this.seekTime,s),this.loadFragment(t,r),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],r=1,a=!1;if(this.log(">>>>>getSubRange time,",t,JSON.stringify(i)),this.videoTrak){var l=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1],o=l.frames.filter(pn),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(;r<o.length;r++){var h=o[r].startTime/d;if(c<=t&&t<h&&i[0]<o[r-1].offset){n=o[r-1].offset,a=!0,this.log(">>>>>getSubRange video end, startTime,",c,",endTime,",h,",startRange,",n,", keyFrameIndex,",r-1);break}c=h}!a&&c<=t&&t<l.endTime+.8&&(n=o[r-1].offset,this.log(">>>>>getSubRange video last, startTime,",c,",endTime,",l.endTime,",startRange,",n))}if(r=1,this.audioTrak){var m=e<this.audioTrak.length?this.audioTrak[e]:this.audioTrak[this.audioTrak.length-1],p=m.frames,Z=this.meta.audioTimescale;r=Math.floor((t*Z-p[0].startTime)/m.frames[0].duration);for(var b=(r=Math.min(p.length-1,r))>0?p[r-1].startTime/Z:p[0].startTime/Z;r>=0&&r<p.length;)if(r>0&&b>t)b=p[r-=1].startTime/Z;else{var y=(p[r].startTime+p[r].duration)/Z;if(b<=t&&t<y&&i[0]<p[r].offset){s=p[r].offset,a=!0,this.log(">>>>>getSubRange audio end, startTime,",b,",endTime,",y,",startRange,",s,", index,",r);break}b=y,r++}}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"),r=this.getSamplesRange(i,"audio"),a=[t,t+e.byteLength];if(this.transmuxerWorkerControl){var l={range:a,state:n,fragIndex:i};this.log("[transmuxerworker start] ,range, ",JSON.stringify(a),",dataLen,",e.byteLength,l),this.transmuxerWorkerControl.transmux(this.workerSequence,e,t,s,r,this.meta.moov,this.useEME,this.kidValue,l)}else try{this.MP4Demuxer||(this.MP4Demuxer=new qt(this.videoTrak,this.audioTrak,null,{openLog:nn()}));var o,d=this.MP4Demuxer.demuxPart(e,t,s,r,this.meta.moov,this.useEME,this.kidValue);this.FMP4Remuxer||this.checkCodecH265()&&!this.options.supportHevc||(this.FMP4Remuxer=new Ae(this.MP4Demuxer.videoTrack,this.MP4Demuxer.audioTrack,{openLog:nn()})),this.log("[mux], videoTimeRange,",d.videoTrack?[d.videoTrack.startPts,d.videoTrack.endPts]:null,",audioTimeRange,",d.audioTrack?[d.audioTrack.startPts,d.audioTrack.endPts]:null);var c=[Math.min(d.videoTrack.startPts,d.audioTrack.startPts),Math.max(d.videoTrack.endPts,d.audioTrack.endPts)];if(this.FMP4Remuxer){var u=this.FMP4Remuxer.remux(this._needInitSegment,{initMerge:!0,range:a});u.initSegment&&(this._needInitSegment=!1),o={buffer:Ei.concatData(u.audioSegment,u.videoSegment),range:a,state:n,context:{range:a,fragIndex:i,timeRange:c},initSeg:u.initSegment}}else o={videoTrack:d.videoTrack,audioTrack:d.audioTrack,buffer:null,range:a,state:n,context:{range:a,fragIndex:i,timeRange:c}};this._loadSuccessCallBack&&this._loadSuccessCallBack(o)}catch(m){console.error("mux err:",m);var h=new Pi(Ji.remux,Fi.muxError,{msg:JSON.stringify(m)});this.errorHandler(h,"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;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;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(Z().mark((function e(t,i){var n,s,r,a;return Z().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(r=Math.max(i[0],this.bufferLoadedPos),!((a=new Uint8Array(this.bufferLoaded.slice(r,i[1]))).byteLength>0)){e.next=22;break}return this.bufferLoadedPos=r+a.byteLength,this.log("[mp4.loadFragment] has part data: ",r,r+a.byteLength),this._mux(a,r,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(Z().mark((function e(t,i){return Z().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(Z().mark((function e(){return Z().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:{}}}}]),u}(J);function pn(e){if(e.keyframe)return e}var Zn=function(){function e(t){X(this,e),this.onTick_=t,this.cancelPending_=null}return G(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 r=function(){n&&(t.onTick_(),i&&i())};return s=window.setTimeout(r,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}(),bn=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 G(e,[{key:"resolve",value:function(e){}},{key:"reject",value:function(e){}}]),e}(),yn=null,fn=null,Xn=null,Ln=null,Gn=function(e){v(r,e);var t,i,n,s=w(r);function r(e){var t;return X(this,r),W(T(t=s.call(this,e)),"_onMp4DataCallBack",(function(){t._isMseInit&&t._onTimeUpdate()})),W(T(t),"_onMp4MetaReady",(function(e){var i=T(t).config,n=t.mp4.checkCodecH265();try{if(n&&!t.config.supportHevc){var s="browser not support HEVC",r=new h.Errors(t.player,{errorType:"runtime",errorTypeCode:Ji.runtime,errorCode:Fi.h265Error,errorMessage:s,vid:i.vid,mediaError:{code:Fi.h265Error,message:s}});t._errorHandler(r)}else t._initMse(e),t._initPromise.resolve()}catch(l){var a=new h.Errors(t.player,{errorType:"runtime",errorTypeCode:Ji.runtime,errorCode:Fi.mse,errorMessage:null==l?void 0:l.message,vid:i.vid,mediaError:{code:Fi.other1,message:null==l?void 0:l.message}});return void t._errorHandler(a)}t._loadData()})),W(T(t),"_onMp4Error",(function(e){var i=t.playerConfig.vid;console.error("[Index] _onMp4Error",i,e),t._errorHandler(e)})),W(T(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 r=t.player.buffered;r&&r.length>0&&(t.bufferEndTime=r.end(r.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 a=t.player.buffered;a&&a.length>0&&(t.bufferEndTime=a.end(a.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(fi.VIDEO,i,s,n)}catch(o){t.log("appendBuffer error",o);var l=new h.Errors(t.player,{errorType:"runtime",errorTypeCode:Ji.runtime,errorCode:Fi.mse,vid:t.player.config.vid,errorMessage:o.message,mediaError:{code:Fi.mse,message:o.message}});t._errorHandler(l)}null!=e&&e.state&&t._onTimeUpdate()}})),W(T(t),"_onWaiting",(function(){var e=T(t),i=e.player,n=e.config;clearTimeout(t._waitInBufferTimer),t._waitInBufferTimer=null;var s=i.currentTime,r=i.bufferedPoint;r.end>0&&r.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,Ei.nowTime())}),n.waitingInBufferTimeOut))})),W(T(t),"_onSeeking",f(Z().mark((function e(){var i,n,s,r,a,l,o,d,c,u,h;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=T(t),n=i.player,s=i.mp4,r=n.currentTime,t.log("[seekTime], curTime,",r,",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,a=n.bufferedPoint,l=!1,o=0,!(a.end>0)){e.next=25;break}if(l=!0,!(s.meta.duration-a.end<.5)){e.next=17;break}return t._startProgress(),t.log("[seeking in buffered range], buffer end,",a.end,", duration,",s.meta.duration),e.abrupt("return");case 17:if(o=s.getFragmentIdx(a.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=a.end,o<0&&(o=t._curLoadSegmentIdx),t.log("[seeking in buffered range], seekTime ",r,",bufferRange,",a.start,"-",a.end,", fragIndex,",o);case 25:return l||(s.seekTime=r,(o=s.getFragmentIdx(r))<0&&(o=t._curLoadSegmentIdx),t.log("[seekTime out buffer range], curTime,",r,", Idx,",o),d=T(t),(c=d.mse)&&c.isFull()&&(u=n.buffered2.bufferedList,h=u[u.length-1],c.clearOpQueues(fi.VIDEO),t._checkRemoveSourceBuffer([h.start,h.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)})))),W(T(t),"changeDefineCanPlay",(function(e,i,n,s){var r=T(t).player;r.ended?r.currentTime=0:(t.log("[oldChangeDefinition],this._changeDefState,",t._changeDefState),r.currentTime=t._changeDefState?t._changeDefState.currentTime:e,(t._changeDefState?t._changeDefState.paused:i)?r.pause():r.play(),t._changeDefState=null,r.emit(h.Events.AFTER_DEFINITION_CHANGE,{from:n,to:s}))})),W(T(t),"changeDefinition",function(){var e=f(Z().mark((function e(i,n){var s,r,a,l,o,d,c;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=T(t),r=s.player,a=s.config,l=s.mp4,n||(n=r.curDefinition),t._MSEError=!1,!a.witchBitRateWay){e.next=6;break}return t.oldChangeDefinition(i,n),e.abrupt("return");case 6:if(r.emit(h.Events.DEFINITION_CHANGE,{from:n,to:i}),o=r.currentTime,(d=l.getFragmentIdx(o))<0&&(d=t._curLoadSegmentIdx),t.log("switchBitrate:point,fragIndex,",d,",startTime,",l.timeRange[d].startTime,",currentTime,",r.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=r.getBufferedRange(r.buffered))[1]>0&&c[1]-r.currentTime>5&&(t.mse.clearOpQueues(fi.VIDEO),t.mse.remove(fi.VIDEO,r.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(),r.emit("RESOLUTION_UPDATE",i);case 27:case"end":return e.stop()}}),e)})));return function(t,i){return e.apply(this,arguments)}}()),W(T(t),"_replayHook",(function(){var e;return null===(e=t.player)||void 0===e||e.play(),!1})),W(T(t),"_retryHook",(function(){return t.beforePlayerInit(),!1})),t.mp4=null,t.mse=null,t._waitAdjustTimeCnt=0,t._lastCheckTime=Ei.nowTime(),t._removeBuffeEndTime=0,t._pendingPromises=[],t}return G(r,[{key:"afterCreate",value:function(){var e=this;window.__mp4player=this;try{h.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(h.Events.SEEKING,this._onSeeking),this.on(h.Events.SEEKING,this._onSeeking),this.on(h.Events.WAITING,this._onWaiting),this.off(h.Events.URL_CHANGE,this.switchURL),this.on(h.Events.URL_CHANGE,this.switchURL)}},{key:"detachEvents",value:function(){this.off(h.Events.SEEKING,this._onSeeking),this.off(h.Events.WAITING,this._onWaiting),this.off(h.Events.URL_CHANGE,this.switchURL)}},{key:"_proxyPlayer",value:function(){var e=this;"function"==typeof this.player.playNext&&(yn=this.player.playNext),this.player.playNext=function(){e.playNext.apply(e,arguments)},fn=this.player._startInit,Ln=this.player.switchURL,Xn=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!==h.Sniffer&&void 0!==h.Sniffer&&h.Sniffer.isHevcSupported&&h.Sniffer.isHevcSupported()&&(i.supportHevc=!0);var s=this.initMp4();this._initPromise=s,this._addPendingPromise(this._initPromise),this.mse&&"String"===h.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 h.Errors(t.player,{errorType:Ji.RUNTIME,errorCode:(null==i?void 0:i.errorCode)||Fi.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)||Fi.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&&fn.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 bn;return this.mp4&&(this.mp4.off(cn,this._onMp4MetaReady),this.mp4.off(dn,this._onMp4Error),this.mp4.off(un,this._onMp4DataCallBack),this.mp4.destroy(),this.mp4=null),this.mp4=new mn(t.config.url,p(p({},this.config),{},{vid:t.config.vid})),this.mp4.on(cn,this._onMp4MetaReady),this.mp4.on(dn,this._onMp4Error),this.mp4.on(un,this._onMp4DataCallBack),this.mp4.on(hn,(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 r=i.currentTime;this.destroyMSE(),i.currentTime=r,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 r=s.url;n.media.src=r}},{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(Z().mark((function e(t){var i,n,s,r,a,l=this;return Z().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=this.mp4&&this.mp4.checkCodecH265(),n=!!t.videoCodec,s=!!t.audioCodec,r=n&&s?i?'video/mp4; codecs="hev1.1.6.L93.B0, mp4a.40.5"':'video/mp4; codecs="avc1.64001E, mp4a.40.5"':n?i?'video/mp4; codecs="hev1.1.6.L93.B0"':'video/mp4; codecs="avc1.64001E"':'video/mp4; codecs="mp4a.40.5"',a=W({},fi.VIDEO,{mimeType:"video/mp4",codec:r}),this.mse=new fi,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];l.mse.createSource(i,a[i].codec)}}catch(n){console.error("MSE error: ",n),l._errorHandler(n)}l._isMseInit=!0,l._onTimeUpdate()}));case 12:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"destroyMSE",value:(i=f(Z().mark((function e(){var t;return Z().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 r=i.timeRange,a=n.getBufferedRange(n.buffered2);if(t&&i&&i.canDownload){Ei.nowTime()-this._lastCheckTime>1e3&&(this._lastCheckTime=Ei.nowTime(),this._loadStuckCheck(),this._checkRemoveSourceBuffer(a,n.currentTime));var l=n.paused?n.currentTime+s.minBufferLength:n.currentTime+s.maxBufferLength;a[1]-l<0&&r.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, ",a[1],",playCurTime,",n.currentTime,", bufferLen,",a[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(fi.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 r=n.start(s)-t,a=n.end(s)+t;if(r<=e.startTime&&e.endTime<=a){i=!0;break}}return i}},{key:"_loadData",value:(t=f(Z().mark((function e(){return Z().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(fi.VIDEO,e,{vid:this.playerConfig.vid,range:null,dataLen:e.byteLength,isinit:!0}).then((function(e){t.log("appendInitSeg end ==>>>",e.context?e.context:null,", costTime,",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,r=this.mse,a=this.config;r.append(e,t,{vid:a.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!=r&&r.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,r=this.mp4,a=this.player;if(s&&r&&a&&(i&&(clearTimeout(this._removeBufferTimer),this._removeBufferTimer=null),e||(e=a.getBufferedRange(a.buffered2)),t||(t=a.currentTime),!(!i&&Ei.nowTime()-this._checkRemoveBufferLastTime<=this.config.removeBufferLen||this.endofstream)&&(this._checkRemoveBufferLastTime=Ei.nowTime(),e&&e[0]>=0&&(t-e[0]>this.config.removeBufferLen||s.isFull())))){var l=e[1],o=r.getFragmentIdx(l);if(o>=0&&r.timeRange[o].startTime<t){var d=Math.floor(Math.min(r.timeRange[o].startTime,e[1]));e[0]<d?(this.log("[checkremoveSourceBuffer], remove range==>>>",e[0],d),s.remove(fi.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 r=s.currentTime,a=s.paused;this._changeDefState||(this._changeDefState={currentTime:r,paused:a},this.log("[oldChangeDefinition],currentTime,",s.currentTime,",pause,",a)),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(r,a,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 h.Errors(e.player,{errorType:"runtime",errorTypeCode:Ji.runtime,errorCode:Fi.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 Zn((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),r=1;r<n;r++)s[r-1]=arguments[r];sn.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(dn,this._onMp4Error),this.mp4.off(un,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=yn,this.player._startInit=fn,this.player.changeDefinition=Xn,this.player.switchURL=Ln,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}}},{key:"version",get:function(){return"3.0.15-alpha.0"}}]),r}(h.BasePlugin);return Gn}));
2
2
  //# sourceMappingURL=index.min.js.map