@opentok/client 2.30.2-alpha.3 → 2.30.2-alpha.4
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/js/opentok.d.ts +0 -2
- package/dist/js/opentok.js +12 -31
- package/dist/js/opentok.js.map +1 -1
- package/dist/js/opentok.min.js +4 -4
- package/dist/js/opentok.min.js.map +1 -1
- package/package.json +1 -1
package/dist/js/opentok.min.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license OpenTok.js 2.30.2
|
|
2
|
+
* @license OpenTok.js 2.30.2 5b8d84a71
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) 2010-2025 TokBox, Inc.
|
|
5
5
|
* Subject to the applicable Software Development Kit (SDK) License Agreement:
|
|
6
6
|
* https://www.vonage.com/legal/communications-apis/terms-of-use/
|
|
7
7
|
*
|
|
8
|
-
* Date: Mon, 02 Jun 2025 20:
|
|
8
|
+
* Date: Mon, 02 Jun 2025 20:25:52 GMT
|
|
9
9
|
*/
|
|
10
10
|
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.OT=t():e.OT=t()}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=366)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(421)),o=r(n(129)),a=r(n(130));const l=(0,o.default)(e=>{const t={};return Object.keys(a.default).forEach(n=>{const r=a.default[n].method,o=(0,i.default)(`OpenTok:${e}:${n.toLowerCase()}`);o.log=console[r].bind(console),t[n.toLowerCase()]=o}),t});l.setLogLevel=e=>{let t;try{t=(void 0!==typeof window?window:global).localStorage.debug}catch(e){t=""}const n=[...Object.keys(a.default).map(t=>`${e>=a.default[t].priority?"":"-"}(autogen)?OpenTok:*:${t.toLowerCase()}`),...(t||"").split(/[\s,]/).filter(e=>-1===e.indexOf("(autogen)?"))].filter(e=>e).join(",");i.default.enable(n)};var c=l;t.default=c},function(e,t,n){(function(t){
|
|
11
11
|
/*!
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* @license Licensed under MIT license
|
|
15
15
|
* See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
|
|
16
16
|
* @version v4.2.8+1e68dce6
|
|
17
|
-
*/var n;n=function(){"use strict";function e(e){return"function"==typeof e}var n=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},r=0,i=void 0,o=void 0,a=function(e,t){h[r]=e,h[r+1]=t,2===(r+=2)&&(o?o(g):m())},l="undefined"!=typeof window?window:void 0,c=l||{},s=c.MutationObserver||c.WebKitMutationObserver,d="undefined"==typeof self&&void 0!==t&&"[object process]"==={}.toString.call(t),u="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function A(){var e=setTimeout;return function(){return e(g,1)}}var h=new Array(1e3);function g(){for(var e=0;e<r;e+=2)(0,h[e])(h[e+1]),h[e]=void 0,h[e+1]=void 0;r=0}var Q,F,p,U,m=void 0;function b(e,t){var n=this,r=new this.constructor(f);void 0===r[Z]&&J(r);var i=n._state;if(i){var o=arguments[i-1];a((function(){return S(i,r,o,n._result)}))}else W(n,r,e,t);return r}function B(e){if(e&&"object"==typeof e&&e.constructor===this)return e;var t=new this(f);return I(t,e),t}d?m=function(){return t.nextTick(g)}:s?(F=0,p=new s(g),U=document.createTextNode(""),p.observe(U,{characterData:!0}),m=function(){U.data=F=++F%2}):u?((Q=new MessageChannel).port1.onmessage=g,m=function(){return Q.port2.postMessage(0)}):m=void 0===l?function(){try{var e=Function("return this")().require("vertx");return void 0!==(i=e.runOnLoop||e.runOnContext)?function(){i(g)}:A()}catch(e){return A()}}():A();var Z=Math.random().toString(36).substring(2);function f(){}function R(t,n,r){n.constructor===t.constructor&&r===b&&n.constructor.resolve===B?function(e,t){1===t._state?V(e,t._result):2===t._state?C(e,t._result):W(t,void 0,(function(t){return I(e,t)}),(function(t){return C(e,t)}))}(t,n):void 0===r?V(t,n):e(r)?function(e,t,n){a((function(e){var r=!1,i=function(e,t,n,r){try{e.call(t,n,r)}catch(e){return e}}(n,t,(function(n){r||(r=!0,t!==n?I(e,n):V(e,n))}),(function(t){r||(r=!0,C(e,t))}),e._label);!r&&i&&(r=!0,C(e,i))}),e)}(t,n,r):V(t,n)}function I(e,t){if(e===t)C(e,new TypeError("You cannot resolve a promise with itself"));else if(i=typeof(r=t),null===r||"object"!==i&&"function"!==i)V(e,t);else{var n=void 0;try{n=t.then}catch(t){return void C(e,t)}R(e,t,n)}var r,i}function y(e){e._onerror&&e._onerror(e._result),E(e)}function V(e,t){void 0===e._state&&(e._result=t,e._state=1,0!==e._subscribers.length&&a(E,e))}function C(e,t){void 0===e._state&&(e._state=2,e._result=t,a(y,e))}function W(e,t,n,r){var i=e._subscribers,o=i.length;e._onerror=null,i[o]=t,i[o+1]=n,i[o+2]=r,0===o&&e._state&&a(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r=void 0,i=void 0,o=e._result,a=0;a<t.length;a+=3)r=t[a],i=t[a+n],r?S(n,r,i,o):i(o);e._subscribers.length=0}}function S(t,n,r,i){var o=e(r),a=void 0,l=void 0,c=!0;if(o){try{a=r(i)}catch(e){c=!1,l=e}if(n===a)return void C(n,new TypeError("A promises callback cannot return that same promise."))}else a=i;void 0!==n._state||(o&&c?I(n,a):!1===c?C(n,l):1===t?V(n,a):2===t&&C(n,a))}var v=0;function J(e){e[Z]=v++,e._state=void 0,e._result=void 0,e._subscribers=[]}var N=function(){function e(e,t){this._instanceConstructor=e,this.promise=new e(f),this.promise[Z]||J(this.promise),n(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?V(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&V(this.promise,this._result))):C(this.promise,new Error("Array Methods must be provided an Array"))}return e.prototype._enumerate=function(e){for(var t=0;void 0===this._state&&t<e.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===B){var i=void 0,o=void 0,a=!1;try{i=e.then}catch(e){a=!0,o=e}if(i===b&&void 0!==e._state)this._settledAt(e._state,t,e._result);else if("function"!=typeof i)this._remaining--,this._result[t]=e;else if(n===G){var l=new n(f);a?C(l,o):R(l,e,i),this._willSettleAt(l,t)}else this._willSettleAt(new n((function(t){return t(e)})),t)}else this._willSettleAt(r(e),t)},e.prototype._settledAt=function(e,t,n){var r=this.promise;void 0===r._state&&(this._remaining--,2===e?C(r,n):this._result[t]=n),0===this._remaining&&V(r,this._result)},e.prototype._willSettleAt=function(e,t){var n=this;W(e,void 0,(function(e){return n._settledAt(1,t,e)}),(function(e){return n._settledAt(2,t,e)}))},e}(),G=function(){function t(e){this[Z]=v++,this._result=this._state=void 0,this._subscribers=[],f!==e&&("function"!=typeof e&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof t?function(e,t){try{t((function(t){I(e,t)}),(function(t){C(e,t)}))}catch(t){C(e,t)}}(this,e):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return t.prototype.catch=function(e){return this.then(null,e)},t.prototype.finally=function(t){var n=this.constructor;return e(t)?this.then((function(e){return n.resolve(t()).then((function(){return e}))}),(function(e){return n.resolve(t()).then((function(){throw e}))})):this.then(t,t)},t}();return G.prototype.then=b,G.all=function(e){return new N(this,e).promise},G.race=function(e){var t=this;return n(e)?new t((function(n,r){for(var i=e.length,o=0;o<i;o++)t.resolve(e[o]).then(n,r)})):new t((function(e,t){return t(new TypeError("You must pass an array to race."))}))},G.resolve=B,G.reject=function(e){var t=new this(f);return C(t,e),t},G._setScheduler=function(e){o=e},G._setAsap=function(e){a=e},G._asap=a,G.polyfill=function(){var e=void 0;if(void 0!==(void 0!==typeof window?window:global))e=void 0!==typeof window?window:global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var t=e.Promise;if(t){var n=null;try{n=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===n&&!t.cast)return}e.Promise=G},G.Promise=G,G},e.exports=n()}).call(this,n(24))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(477)).default.parse();t.default=i},function(e,t,n){e.exports=n(417)},function(e,t,n){(function(t){function n(e,n,r,i,o,a,l){try{var c=e[a](l),s=c.value}catch(e){return void r(e)}c.done?n(s):t.resolve(s).then(i,o)}e.exports=function(e){return function(){var r=this,i=arguments;return new t((function(t,o){var a=e.apply(r,i);function l(e){n(a,t,o,l,c,"next",e)}function c(e){n(a,t,o,l,c,"throw",e)}l(void 0)}))}}}).call(this,n(2))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){const t=new a.default;t.on("newListener",e=>{t.emit(e+":added")}),t.on("removeListener",e=>{t.emit(e+":removed")});const n={eventsDispatched:{},on(e,n,r){return"string"==typeof e&&n?e.split(" ").forEach(e=>{t.on(e,(0,c.default)(n,r))}):Object.keys(e).forEach(r=>{t.on(r,(0,c.default)(e[r],n))}),this},off(e,n,r){return"string"==typeof e?this.off(e.split(" "),n,r):Array.isArray(e)?e.forEach(e=>{n&&(0,o.default)(n)?t.removeListener(e,(0,c.default)(n,r)):t.removeAllListeners(e)}):e?Object.keys(e).forEach(r=>{t.removeListener(r,(0,c.default)(e[r],n))}):t.removeAllListeners(),this},once(e,n,r){return"string"==typeof e&&n?e.split(" ").forEach(e=>{t.once(e,(0,c.default)(n,r))}):Object.keys(e).forEach(r=>{t.once(r,(0,c.default)(e[r],n))}),this},dispatchEvent(e){if(!e.type)throw new Error("dispatchEvent: Event has no type");return e.target||(e.target=this),this.trigger(e.type,e),this},dispatchEventOnce(e,t){this.isEventDispatched(e.type,t)||(this.dispatchEvent(e),this.eventsDispatched[e.type]?this.eventsDispatched[e.type].push(t):this.eventsDispatched[e.type]=[t])},isEventDispatched(e,t){var n;return null==(n=this.eventsDispatched[e])?void 0:n.includes(t)},trigger(e){try{for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];t.emit(e,...r)}catch(e){s.error("An error occurred in an event handler",e)}return this},emit(){return e.trigger(...arguments)},addEventListener:(t,n,r)=>(s.warn("The addEventListener() method is deprecated. Use on() or once() instead."),e.on(t,n,r)),removeEventListener:(t,n,r)=>(s.warn("The removeEventListener() method is deprecated. Use off() instead."),e.off(t,n,r)),listenerCount:e=>t.listenerCount(e)};return(0,i.default)(e,n)};var i=r(n(9)),o=r(n(20)),a=r(n(12)),l=r(n(1)),c=r(n(424));const s=(0,l.default)("Events")},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(147)),o=r(n(262)),a=r(n(6)),l=r(n(1)),c=r(n(3)),s=r(n(264)),d=r(n(263)),u=r(n(265)),A=r(n(575)),h=r(n(267)),g=r(n(270)),Q=r(n(588)),F=r(n(272));o.default.logging=(0,l.default)("OT.$"),o.default.env=c.default,o.default.ElementCollection=d.default,o.default.ajax=u.default,o.default.statable=A.default,o.default.Analytics=h.default,o.default.Collection=g.default,o.default.domExtras=Q.default,o.default.Error=F.default,(0,s.default)(o.default,"useLogHelpers",{value(e){const t=(0,l.default)("useLogHelpersDeprecatedMixin");return Object.keys(t).forEach(n=>{e[n]=t[n]}),e},name:"OT.useLogHelpers",getWarning:"Please use an external library for your debugging needs"}),o.default.defaults=i.default,(0,s.default)(o.default,"eventing",{value:a.default,name:"OT.$.eventing",getWarning:"Please use an external library to create an event emitter."}),Object.keys(o.default).forEach(e=>{const t=o.default[e]._attachToOTHelpers||{};Object.keys(t).forEach(n=>{!Object.hasOwnProperty.call(o.default,n)||"util"===e&&"bind"===n||console.warn(`More than one module is trying to define ${n} on OTHelpers.`),o.default[n]=t[n]})});var p=o.default;t.default=p},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;t.default={AUTHENTICATION_ERROR:"OT_AUTHENTICATION_ERROR",BADLY_FORMED_RESPONSE:"OT_BADLY_FORMED_RESPONSE",CHROME_MICROPHONE_ACQUISITION_ERROR:"OT_CHROME_MICROPHONE_ACQUISITION_ERROR",CONNECT_FAILED:"OT_CONNECT_FAILED",CONNECTION_LIMIT_EXCEEDED:"OT_CONNECTION_LIMIT_EXCEEDED",CONSTRAINTS_NOT_SATISFIED:"OT_CONSTRAINTS_NOT_SATISFIED",CREATE_PEER_CONNECTION_FAILED:"OT_CREATE_PEER_CONNECTION_FAILED",DISCONNECTED:"OT_DISCONNECTED",EMPTY_RESPONSE_BODY:"OT_EMPTY_RESPONSE_BODY",GET_RTC_STATS_REPORT_NOT_SUPPORTED:"OT_GET_RTC_STATS_REPORT_NOT_SUPPORTED",HARDWARE_UNAVAILABLE:"OT_HARDWARE_UNAVAILABLE",ICE_WORKFLOW_FAILED:"OT_ICE_WORKFLOW_FAILED",INVALID_HTTP_STATUS:"OT_INVALID_HTTP_STATUS",INVALID_PARAMETER:"OT_INVALID_PARAMETER",INVALID_SESSION_ID:"OT_INVALID_SESSION_ID",MEDIA_ERR_ABORTED:"OT_MEDIA_ERR_ABORTED",MEDIA_ERR_DECODE:"OT_MEDIA_ERR_DECODE",MEDIA_ERR_NETWORK:"OT_MEDIA_ERR_NETWORK",MEDIA_ERR_SRC_NOT_SUPPORTED:"OT_MEDIA_ERR_SRC_NOT_SUPPORTED",MEDIA_ENDED:"OT_MEDIA_ENDED",NO_DEVICES_FOUND:"OT_NO_DEVICES_FOUND",NO_VALID_CONSTRAINTS:"OT_NO_VALID_CONSTRAINTS",NOT_CONNECTED:"OT_NOT_CONNECTED",NOT_FOUND:"OT_NOT_FOUND",NOT_SUPPORTED:"OT_NOT_SUPPORTED",PEER_CONNECTION_NOT_CONNECTED:"OT_PEER_CONNECTION_NOT_CONNECTED",PERMISSION_DENIED:"OT_PERMISSION_DENIED",RATE_LIMIT_EXCEEDED:"OT_RATE_LIMIT_EXCEEDED",REPORT_ISSUE_FAILED:"OT_REPORT_ISSUE_FAILED",SCREEN_SHARING_EXTENSION_NOT_INSTALLED:"OT_SCREEN_SHARING_EXTENSION_NOT_INSTALLED",SCREEN_SHARING_EXTENSION_NOT_REGISTERED:"OT_SCREEN_SHARING_EXTENSION_NOT_REGISTERED",SCREEN_SHARING_NOT_SUPPORTED:"OT_SCREEN_SHARING_NOT_SUPPORTED",SET_REMOTE_DESCRIPTION_FAILED:"OT_SET_REMOTE_DESCRIPTION_FAILED",FAILED_SET_CONFIGURATION:"OT_FAILED_SET_CONFIGURATION",SOCKET_ALREADY_CONNECTED_CONNECTING:"OT_SOCKET_ALREADY_CONNECTED_CONNECTING",SOCKET_CLOSE_ABNORMAL:"OT_SOCKET_CLOSE_ABNORMAL",SOCKET_CLOSE_CONNECT_EXCEPTION:"OT_SOCKET_CLOSE_CONNECT_EXCEPTION",SOCKET_CLOSE_CONNECTIVITY_LOSS:"OT_SOCKET_CLOSE_CONNECTIVITY_LOSS",SOCKET_CLOSE_FALLBACK_CODE:"OT_SOCKET_CLOSE_FALLBACK_CODE",SOCKET_CLOSE_INCONSISTENT_DATA:"OT_SOCKET_CLOSE_INCONSISTENT_DATA",SOCKET_CLOSE_NO_STATUS:"OT_SOCKET_CLOSE_NO_STATUS",SOCKET_CLOSE_POLICY_VIOLATION:"OT_SOCKET_CLOSE_POLICY_VIOLATION",SOCKET_CLOSE_GOING_AWAY:"OT_SOCKET_CLOSE_GOING_AWAY",SOCKET_CLOSE_PROTOCOL_ERROR:"OT_SOCKET_CLOSE_PROTOCOL_ERROR",SOCKET_CLOSE_TIMEOUT:"OT_SOCKET_CLOSE_TIMEOUT",SOCKET_CLOSE_TOO_LARGE:"OT_SOCKET_CLOSE_TOO_LARGE",SOCKET_CLOSE_UNEXPECTED_CONDITION:"OT_SOCKET_CLOSE_UNEXPECTED_CONDITION",SOCKET_CLOSE_UNSUPPORTED:"OT_SOCKET_CLOSE_UNSUPPORTED",STREAM_CREATE_FAILED:"OT_STREAM_CREATE_FAILED",STREAM_DESTROYED:"OT_STREAM_DESTROYED",STREAM_LIMIT_EXCEEDED:"OT_STREAM_LIMIT_EXCEEDED",STREAM_NOT_FOUND:"OT_STREAM_NOT_FOUND",UNABLE_TO_SUBSCRIBE:"OT_UNABLE_TO_SUBSCRIBE",TERMS_OF_SERVICE_FAILURE:"OT_TERMS_OF_SERVICE_FAILURE",TIMEOUT:"OT_TIMEOUT",CANCEL:"OT_CANCEL",UNABLE_TO_CAPTURE_MEDIA:"OT_UNABLE_TO_CAPTURE_MEDIA",UNABLE_TO_CAPTURE_SCREEN:"OT_UNABLE_TO_CAPTURE_SCREEN",UNEXPECTED_ERROR_CODE:"OT_UNEXPECTED_ERROR_CODE",UNEXPECTED_HTTP_STATUS:"OT_UNEXPECTED_HTTP_STATUS",UNEXPECTED_SERVER_RESPONSE:"OT_UNEXPECTED_SERVER_RESPONSE",UNKNOWN_HTTP_ERROR:"OT_UNKNOWN_HTTP_ERROR",UNSUPPORTED_BROWSER:"OT_UNSUPPORTED_BROWSER",USER_MEDIA_ACCESS_DENIED:"OT_USER_MEDIA_ACCESS_DENIED",XDOMAIN_OR_PARSING_ERROR:"OT_XDOMAIN_OR_PARSING_ERROR",API_KEY_DISABLED:"OT_API_KEY_DISABLED",UNABLE_TO_ACCESS_MEDIA_ENGINE:"OT_UNABLE_TO_ACCESS_MEDIA_ENGINE",SET_PROXY_URL_TIMING_ERROR:"OT_SET_PROXY_URL_TIMING_ERROR",PROXY_URL_ALREADY_SET_ERROR:"OT_PROXY_URL_ALREADY_SET_ERROR",SET_VIDEO_SOURCE_FAILURE:"OT_SET_VIDEO_SOURCE_FAILURE",INVALID_VIDEO_SOURCE:"OT_INVALID_VIDEO_SOURCE",REQUESTED_DEVICE_PERMISSION_DENIED:"OT_REQUESTED_DEVICE_PERMISSION_DENIED",INVALID_AUDIO_OUTPUT_SOURCE:"OT_INVALID_AUDIO_OUTPUT_SOURCE",INVALID_ENCRYPTION_SECRET:"OT_INVALID_ENCRYPTION_SECRET"}},function(e,t,n){var r=n(86),i=n(44),o=n(207),a=n(29),l=n(69),c=n(34),s=Object.prototype.hasOwnProperty,d=o((function(e,t){if(l(t)||a(t))i(t,c(t),e);else for(var n in t)s.call(t,n)&&r(e,n,t[n])}));e.exports=d},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r={JS_EXCEPTION:2e3,AUTHENTICATION_ERROR:1004,INVALID_SESSION_ID:1005,CONNECT_FAILED:1006,CONNECT_REJECTED:1007,CONNECTION_TIMEOUT:1008,NOT_CONNECTED:1010,INVALID_PARAMETER:1011,P2P_CONNECTION_FAILED:1013,API_RESPONSE_FAILURE:1014,PEER_CONNECTION_NOT_CONNECTED:1015,TERMS_OF_SERVICE_FAILURE:1026,CONNECTION_LIMIT_EXCEEDED:1027,UNABLE_TO_PUBLISH:1500,UNABLE_TO_SUBSCRIBE:1501,UNSUPPORTED_VIDEO_CODEC:1502,UNABLE_TO_FORCE_DISCONNECT:1520,UNABLE_TO_FORCE_UNPUBLISH:1530,UNABLE_TO_FORCE_MUTE:1540,PUBLISHER_ICE_WORKFLOW_FAILED:1553,SUBSCRIBER_ICE_WORKFLOW_FAILED:1554,STREAM_LIMIT_EXCEEDED:1605,UNEXPECTED_SERVER_RESPONSE:2001,REPORT_ISSUE_ERROR:2011,SET_PROXY_URL_TIMING_ERROR:2021,PROXY_URL_ALREADY_SET_ERROR:2022,GET_RTC_STATS_REPORT_NOT_SUPPORTED:2031,ANVIL_BADLY_FORMED_RESPONSE:3001,ANVIL_INVALID_HTTP_STATUS:3002,ANVIL_XDOMAIN_OR_PARSING_ERROR:3003,ANVIL_UNKNOWN_HTTP_ERROR:3004,ANVIL_UNEXPECTED_ERROR_CODE:3005,ANVIL_EMPTY_RESPONSE_BODY:3006,ANVIL_CONNECT_FAILED:3007,UNABLE_TO_ACCESS_MEDIA_ENGINE:5001};t.default=r},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){"use strict";(function(t){var n,r="object"==typeof Reflect?Reflect:null,i=r&&"function"==typeof r.apply?r.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};n=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function a(){a.init.call(this)}e.exports=a,e.exports.once=function(e,n){return new t((function(t,r){function i(t){e.removeListener(n,o),r(t)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",i),t([].slice.call(arguments))}F(e,n,o,{once:!0}),"error"!==n&&function(e,t,n){"function"==typeof e.on&&F(e,"error",t,n)}(e,i,{once:!0})}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var l=10;function c(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function s(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function d(e,t,n,r){var i,o,a,l;if(c(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),a=o[t]),void 0===a)a=o[t]=n,++e._eventsCount;else if("function"==typeof a?a=o[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(i=s(e))>0&&a.length>i&&!a.warned){a.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=a.length,l=d,console&&console.warn&&console.warn(l)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function A(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=u.bind(r);return i.listener=n,r.wrapFn=i,i}function h(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(i):Q(i,i.length)}function g(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function Q(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function F(e,t,n,r){if("function"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function i(o){r.once&&e.removeEventListener(t,i),n(o)}))}}Object.defineProperty(a,"defaultMaxListeners",{enumerable:!0,get:function(){return l},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");l=e}}),a.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},a.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},a.prototype.getMaxListeners=function(){return s(this)},a.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var r="error"===e,o=this._events;if(void 0!==o)r=r&&void 0===o.error;else if(!r)return!1;if(r){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var l=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw l.context=a,l}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var s=c.length,d=Q(c,s);for(n=0;n<s;++n)i(d[n],this,t)}return!0},a.prototype.addListener=function(e,t){return d(this,e,t,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(e,t){return d(this,e,t,!0)},a.prototype.once=function(e,t){return c(t),this.on(e,A(this,e,t)),this},a.prototype.prependOnceListener=function(e,t){return c(t),this.prependListener(e,A(this,e,t)),this},a.prototype.removeListener=function(e,t){var n,r,i,o,a;if(c(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(i=-1,o=n.length-1;o>=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,i),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,a||t)}return this},a.prototype.off=a.prototype.removeListener,a.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var i,o=Object.keys(n);for(r=0;r<o.length;++r)"removeListener"!==(i=o[r])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},a.prototype.listeners=function(e){return h(this,e,!0)},a.prototype.rawListeners=function(e){return h(this,e,!1)},a.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},a.prototype.listenerCount=g,a.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}}).call(this,n(2))},function(e,t,n){"use strict";var r,i=n(222),o=Object.prototype.toString,a=(r=Object.create(null),function(e){var t=o.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function l(e){return e=e.toLowerCase(),function(t){return a(t)===e}}function c(e){return Array.isArray(e)}function s(e){return void 0===e}var d=l("ArrayBuffer");function u(e){return"number"==typeof e}function A(e){return null!==e&&"object"==typeof e}function h(e){if("object"!==a(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var g=l("Date"),Q=l("File"),F=l("Blob"),p=l("FileList");function U(e){return"[object Function]"===o.call(e)}var m=l("URLSearchParams");function b(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),c(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.call(null,e[i],i,e)}var B,Z=(B="undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array),function(e){return B&&e instanceof B});var f,R=l("HTMLFormElement"),I=(f=Object.prototype.hasOwnProperty,function(e,t){return f.call(e,t)});e.exports={isArray:c,isArrayBuffer:d,isBuffer:function(e){return null!==e&&!s(e)&&null!==e.constructor&&!s(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return e&&("function"==typeof FormData&&e instanceof FormData||"[object FormData]"===o.call(e)||U(e.toString)&&"[object FormData]"===e.toString())},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&d(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:u,isObject:A,isPlainObject:h,isEmptyObject:function(e){return e&&0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype},isUndefined:s,isDate:g,isFile:Q,isBlob:F,isFunction:U,isStream:function(e){return A(e)&&U(e.pipe)},isURLSearchParams:m,isStandardBrowserEnv:function(){var e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:b,merge:function e(){var t={};function n(n,r){h(t[r])&&h(n)?t[r]=e(t[r],n):h(n)?t[r]=e({},n):c(n)?t[r]=n.slice():t[r]=n}for(var r=0,i=arguments.length;r<i;r++)b(arguments[r],n);return t},extend:function(e,t,n){return b(t,(function(t,r){e[r]=n&&"function"==typeof t?i(t,n):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n,r){var i,o,a,l={};if(t=t||{},null==e)return t;do{for(o=(i=Object.getOwnPropertyNames(e)).length;o-- >0;)a=i[o],r&&!r(a,e,t)||l[a]||(t[a]=e[a],l[a]=!0);e=!1!==n&&Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:a,kindOfTest:l,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;if(c(e))return e;var t=e.length;if(!u(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:Z,isFileList:p,forEachEntry:function(e,t){for(var n,r=(e&&e[Symbol.iterator]).call(e);(n=r.next())&&!n.done;){var i=n.value;t.call(e,i[0],i[1])}},matchAll:function(e,t){for(var n,r=[];null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:R,hasOwnProperty:I}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){void 0===e&&(e={});const t=e.Errors||o.default,n=e.OTErrorClass||i.default,r=Object.keys(t).map(e=>t[e]);return function(e,t,i){if(-1===r.indexOf(e))return new Error(`Attempt to use invalid error name (${e}). Original message: ${t.message}`);if(!(t instanceof Error||/^\[object .*Error\]$/.test(Object.prototype.toString.call(t))))return new Error("Did not pass Error as second argument: "+t);const o=new n(void 0,t.message);if(o.name=e,!t.stack)try{throw t}catch(e){}return o.stack=t.stack,i&&(o.code=i),o}};var i=r(n(26)),o=r(n(8))},function(e,t,n){var r=n(189),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();e.exports=o},function(e,t,n){var r=n(576),i=n(577),o=i;o.v1=r,o.v4=i,e.exports=o},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){void 0===e&&(e={});const t=e.logging||(0,a.default)("Events"),n={ExceptionEvent:function(e,t,n,r,i,o,a){return new l.default(e,!1,{error:a,message:t,title:n,code:r,component:i,target:o})},IssueReportedEvent:function(e,t){return new l.default(e,!1,{issueId:t})},EnvLoadedEvent:function(e){return new l.default(e,!1)}};let r=!1;n.ConnectionEvent=function(e){function n(t,n,r){return e.call(this,t,!1,{connection:n,reason:r})||this}return(0,o.default)(n,e),(0,i.default)(n,[{key:"connections",get:function(){return r||(t.warn("OT.ConnectionEvent connections property is deprecated, use connection instead."),r=!0),[this.connection]}}]),n}(l.default);let s=!1;n.StreamEvent=function(e){function n(t,n,r,i){return e.call(this,t,i,{stream:n,reason:r})||this}return(0,o.default)(n,e),(0,i.default)(n,[{key:"streams",get:function(){return s||(t.warn("OT.StreamEvent streams property is deprecated, use stream instead."),s=!0),[this.stream]}}]),n}(l.default);let d=!1,u=!1,A=!1;return n.SessionConnectEvent=function(e){function n(t){return e.call(this,t,!1)||this}return(0,o.default)(n,e),(0,i.default)(n,[{key:"connections",get:function(){return d||(t.warn("OT.SessionConnectedEvent no longer includes connections. Listen for connectionCreated events instead."),d=!0),[]}},{key:"streams",get:function(){return u||(t.warn("OT.SessionConnectedEvent no longer includes streams. Listen for streamCreated events instead."),u=!0),[]}},{key:"archives",get:function(){return A||(t.warn("OT.SessionConnectedEvent no longer includes archives. Listen for archiveStarted events instead."),A=!0),[]}}]),n}(l.default),n.SessionReconnectingEvent=function(){return new l.default(c.default.SESSION_RECONNECTING,!1)},n.SessionReconnectedEvent=function(){return new l.default(c.default.SESSION_RECONNECTED)},n.SessionDisconnectEvent=function(e,t,n){return new l.default(e,n,{reason:t})},n.StreamPropertyChangedEvent=function(e,t,n,r,i){return new l.default(e,!1,{stream:t,changedProperty:n,oldValue:r,newValue:i})},n.VideoDimensionsChangedEvent=function(e,t,n){return new l.default("videoDimensionsChanged",!1,{target:e,oldValue:t,newValue:n})},n.ArchiveEvent=function(e,t){return new l.default(e,!1,{id:t.id,name:t.name,status:t.status,archive:t})},n.ArchiveUpdatedEvent=function(e,t,n,r){return new l.default("updated",!1,{target:e,changedProperty:t,oldValue:n,newValue:r})},n.SignalEvent=function(e,t,n){return new l.default(e?"signal:"+e:c.default.SIGNAL,!1,{data:t,from:n})},n.CpuPerformanceChangedEvent=function(e){return new l.default("cpuPerformanceChanged",!1,{cpuPerformanceState:e})},n.QualityScoreChangedEvent=function(e){return new l.default("qualityScoreChanged",!1,{qualityScore:e})},n.CaptionReceivedEvent=function(e,t,n){return new l.default("caption",!1,{caption:e,streamId:t,isFinal:n})},n.PublisherCaptionsEnabled=function(e){return new l.default("publisherCaptionsEnabled",!1,{captionsEnabled:e})},n.MediaStreamAvailableEvent=function(e){return new l.default("mediaStreamAvailable",!1,{mediaStream:e})},n.StreamUpdatedEvent=function(e,t,n,r){return new l.default("updated",!1,{target:e,changedProperty:t,oldValue:n,newValue:r})},n.DestroyedEvent=function(e,t,n){return new l.default(e,!1,{target:t,reason:n})},n.ConnectionStateChangedEvent=function(e,t,n){return new l.default(e,!1,{target:t,mediaMode:n})},n.VideoEnabledChangedEvent=function(e,t){return new l.default(e,!1,{reason:t.reason})},n.VideoDisableWarningEvent=function(e){return new l.default(e,!1)},n.AudioLevelUpdatedEvent=function(e){return new l.default(c.default.AUDIO_LEVEL_UPDATED,!1,{audioLevel:e})},n.AudioInputDeviceChangedEvent=function(e){return new l.default(c.default.AUDIO_INPUT_DEVICE_CHANGED,!1,{device:e})},n.MediaStoppedEvent=function(e,t){return new l.default(c.default.MEDIA_STOPPED,!0,{target:e,track:t})},n.MuteForcedEvent=function(e){return new l.default(c.default.MUTE_FORCED,!1,e)},n.VideoElementCreatedEvent=function(e){return new l.default(c.default.VIDEO_ELEMENT_CREATED,!1,{element:e})},n};var i=r(n(25)),o=r(n(23)),a=r(n(1)),l=r(n(148)),c=r(n(30))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(9)),o=r(n(63)),a=r(n(298)),l=r(n(149)),c=r(n(299)),s=r(n(1)),d=r(n(300));function u(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return A(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return A(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}const h=(0,s.default)("SDPHelpers"),g={getSections:e=>e.split(/\r\n|\r|\n/).reduce((e,t)=>{const n=t.match(/^m=(\w+) \d+/);return n&&(e.sections[e.section=n[1]]=[]),e.sections[e.section].push(t),e},{sections:{header:[]},section:"header"}).sections,getCodecsFromSection:e=>({codecs:e[0].match(/m=\w+ \d+ [A-Z/]+ ([\d ]+)$/)[1].split(" "),codecMap:(0,i.default)(...e.filter(e=>e.match(/^a=rtpmap:\d+/)).map(e=>e.match(/^a=rtpmap:(\d+) ([\w-]+)/).splice(1)).map(e=>({[e[0]]:e[1]})))}),getCodecsAndCodecMap(e,t){const n=g.getSections(e)[t];if(!n)throw new Error("no mediaType "+t);return g.getCodecsFromSection(n)},getCodecs(e,t){const n=g.getCodecsAndCodecMap(e,t);return n.codecs.map(e=>n.codecMap[e]||"Unknown codec")},MediaDirection:d.default,iceCredentials:{ufrag:"a=ice-ufrag:",pwd:"a=ice-pwd:"},getMLineIndex:function(e,t){const n="m="+t;return(0,a.default)(e,e=>-1!==e.indexOf(n))},getMLine:function(e,t){const n=g.getMLineIndex(e,t);return n>-1?e[n]:void 0},hasMediaType:(e,t)=>{const n=new RegExp("^m="+t),r=e.split("\r\n");return(0,a.default)(r,e=>n.test(e))>=0},hasMLinePayloadType:function(e,t,n){const r=g.getMLine(e,t);return g.getMLinePayloadTypes(r,t).indexOf(n)>-1},getMLinePayloadTypes:function(e,t){const n=new RegExp(`^m=${t} \\d+(/\\d+)? [a-zA-Z0-9/]+(( [a-zA-Z0-9/]+)+)$`,"i"),r=e.match(n);return!r||r.length<2?[]:r[2].trim().split(" ")},splitSections:function(e){return e.split("\nm=").map((e,t)=>(t>0?"m="+e:e).trim()+"\r\n")},getLinesPerSection:e=>g.splitSections(e).map(e=>g.getSDPLines(e)),replaceDirectionInSdpLines:(e,t,n)=>{const r=e.join("\r\n");return g.replaceDirection(r,t,n).split("\r\n")},replaceDirection:(e,t,n)=>{const r=new RegExp("a="+t,"g");return e.replace(r,"a="+n)},setSubscriberMediaSectionToInactive:e=>{const t=d.default.SENDONLY,n=d.default.INACTIVE;return g.replaceDirectionInSdpLines(e,t,n)},changeMediaDirection:function(e,t){const n=g.splitSections(e);let r=n.shift();const i=d.default.RECVONLY,o=d.default.INACTIVE,a=t===i?o:i;return n.forEach(e=>{const n=e.includes("m=video")?g.replaceDirection(e,a,t):e;r+=n}),r},removeTypesFromMLine:function(e,t){const n=/[0-9 ]*$/.exec(e)[0],r=n.split(" ").filter(e=>""!==e&&-1===t.indexOf(e));return e.replace(n," "+r.join(" "))},removeMediaEncoding:function(e,t,n){let r,i,o,a,l=e.split("\r\n");const c=g.getMLineIndex(l,t),s=c>-1?l[c]:void 0,d=[];if(-1===c)return l.join("\r\n");if(r=g.getMLinePayloadTypes(s,t),0===r.length)return l.join("\r\n");for(i=c;i<l.length;i++){const e=new RegExp(n,"i");0===l[i].indexOf("a=rtpmap:")&&(a=l[i].split(" "),2===a.length&&e.test(a[1])&&d.push(a[0].substr(9)))}if(!d.length)return l.join("\r\n");for(i=c;i<l.length;i++)if(0===l[i].indexOf("a=fmtp:"))for(a=l[i].split(" "),o=0;o<d.length;o++)2===a.length&&a[1]==="apt="+d[o]&&d.push(a[0].substr(7));return l=l.filter(e=>{for(let t=0;t<d.length;t++)if(0===e.indexOf(`a=rtpmap:${d[t]} `)||0===e.indexOf(`a=fmtp:${d[t]} `)||0===e.indexOf(`a=rtcp-fb:${d[t]} `))return!1;return!0}),d.length>0&&c>-1&&(l[c]=g.removeTypesFromMLine(s,d)),l.join("\r\n")},disableMediaType:function(e,t){const n=e.split("\r\n"),r=[];let i;n.forEach(e=>{let t=e;/^m=/.test(t)&&(i=void 0),i||(i=[],r.push(i)),i.push(t)});const o=new RegExp(`^m=${t} \\d+ ([^ ]+) [0-9 ]+$`),a=r.map(e=>{const n=e[0].match(o);return n?[`m=${t} 0 ${n[1]} 0`,"a=inactive",...e.filter(e=>/^c=/.test(e)||/^a=mid:/.test(e)||""===e)]:e});return[].concat(...a).join("\r\n")},removeVideoCodec:function(e,t){return g.removeMediaEncoding(e,"video",t)}},Q=function(e,t){let n=t.filterByName("ssrc-group:FID");switch(n=0===n.length?[]:n[0].value.split(" "),n.length){case 0:case 1:var r=t.find(e=>0===e.name.indexOf("rtpmap:")&&e.value.indexOf("rtx/90000")>-1);if(!r)return!1;var i=r.name.split(":")[1];return i.indexOf("/")>-1&&(i=i.split("/")[0]),g.hasMLinePayloadType(e,"video",i);default:return h.debug("SDP Helpers: There are more than two FIDs, RTX is definitely enabled"),!0}};g.getAttributesForMediaType=function(e,t){let n,r,i,a,l,c,s,d,u,A;const h=g.getMLineIndex(e,t),F=new RegExp(`m=(?!${t}).+ `,"i"),p=new RegExp("a=ssrc:\\d+ .*","i"),U=new RegExp("a=ssrc-group:(SIM|FID) (\\d+).*?","i"),m=new RegExp("a=([a-z0-9:/-]+) (.*)","i"),b=[];for(let t=h+1;t<e.length;t++){if(F.test(e[t])){void 0!==n&&(r=t-1);break}l=e[t].match(U),c=e[t].match(p),void 0===n&&(l||c)&&(n=t,l&&(a=/^(FID|SIM)$/.test(l[1])?l[2]:l[1])),s=e[t].match(`a=ssrc:${a} msid:(.+)`),s&&(d=s[1]);const o=p.test(e[t]),h=U.test(e[t]);void 0!==n&&(void 0!==r||o||h?t===e.length-1&&(r=t):r=t-1);const g=e[t].match(/a=mid:(.+)/);g&&(u=g[1],A=t),i=m.exec(e[t]),i&&3===i.length&&b.push({lineIndex:t,name:i[1],value:i[2]})}return b.ssrcStartIndex=n,b.ssrcEndIndex=r,b.msid=d,b.mid=u,b.midIndex=A,b.isUsingRTX=Q.bind(null,e,b),b.filterByName=function(e){return this.filter(t=>t.name===e)},b.getRtpNumber=e=>{const t=new RegExp("rtpmap:(.+)");return(0,o.default)(b.map(n=>{const r=n.name.match(t);return r&&n.value.indexOf(e)>=0?r[1]:null}),e=>null!==e)},b},g.modifyDtx=(e,t)=>{const n=e.split("\r\n");if(!g.getMLine(n,"audio"))return h.debug("No audio m-line, not enabling dtx."),e;const r=g.getAttributesForMediaType(n,"audio"),i=r.getRtpNumber("opus");if(!i)return h.debug("Could not find rtp number for opus, not enabling dtx."),e;const o=r.find(e=>e.name==="fmtp:"+i);if(!o)return h.debug("Could not find a=fmtp line for opus, not enabling dtx."),e;let a=n[o.lineIndex];const l=/usedtx=\d+([\s;]*)/;return l.test(o.value)?a=a.replace(l,t?"usedtx=1$1":""):t&&(a+="; usedtx=1"),a=a.replace(/[;\s]*$/,""),n[o.lineIndex]=a,n.join("\r\n")};const F=(e,t,n)=>{const r=t.split("\r\n");if(!g.getMLine(r,"audio"))return h.debug("No audio m-line, not enabling stereo."),t;const i=g.getAttributesForMediaType(r,"audio"),o=i.getRtpNumber("opus");if(!o)return h.debug("Could not find rtp number for opus, not enabling stereo."),t;const a=i.find(e=>e.name==="fmtp:"+o);if(!a)return h.debug("Could not find a=fmtp line for opus, not enabling stereo."),t;let l,c=r[a.lineIndex];switch(e){case"send":l=/sprop-stereo=\d+([\s;]*)/,l.test(a.value)?c=c.replace(l,n?"sprop-stereo=1$1":""):n&&(c+="; sprop-stereo=1");break;case"receive":l=/([^-])stereo=\d+([\s;]*)/,l.test(a.value)?c=c.replace(l,n?"$1stereo=1$2":"$1"):n&&(c+="; stereo=1");break;default:throw new Error(`Invalid type ${e} passed into enableStereo`)}return c=c.replace(/[;\s]*$/,""),r[a.lineIndex]=c,r.join("\r\n")};g.modifySendStereo=F.bind(null,"send"),g.modifyReceiveStereo=F.bind(null,"receive"),g.setAudioBitrate=(e,t)=>{const n=g.getAudioBitrate(e);if(void 0!==n)return h.debug(`Audio bitrate already set to ${n}, not setting audio bitrate`),e;const r=e.split("\r\n");if(!g.getMLine(r,"audio"))return h.debug("No audio m-line, not setting audio bitrate"),e;const i=g.getAttributesForMediaType(r,"audio"),o=i.getRtpNumber("opus");if(!o)return h.debug("Could not find rtp number for opus, not setting audio bitrate."),e;const a=i.find(e=>e.name==="fmtp:"+o);if(!a)return h.debug("Could not find a=fmtp line for opus, not setting audio bitrate."),e;let l=r[a.lineIndex];return l+="; maxaveragebitrate="+t,l=l.replace(/[;\s]*$/,""),r[a.lineIndex]=l,r.join("\r\n")},g.removeVideoOrientation=e=>{let t=e.split("\r\n");return t=t.filter(e=>!e.includes("urn:3gpp:video-orientation")),t.join("\r\n")},g.hasSendStereo=e=>/[\s;]sprop-stereo=1/.test(e),g.hasSendDtx=e=>/[\s;]usedtx=1/.test(e),g.hasOpusFec=e=>/[\s;]useinbandfec=1/.test(e),g.getAudioBitrate=e=>{const t=e.match(/[\s;]maxaveragebitrate=(\d+)/);if(t)return Number(t[1])},g.MAX_SSRCS=10,g.getSSRCGroupType=e=>["SIM","FID"].find(t=>e.filterByName("ssrc-group:"+t)[0]),g.getSSRCGroup=e=>{const t=g.getSSRCGroupType(e);return e.filterByName("ssrc-group:"+t)[0]},g.getSSRCGroupSSRCs=e=>{const t=g.getSSRCGroup(e);return t?t.value.split(" ").slice(0,g.MAX_SSRCS):[]},g.getAllowedSSRCs=(e,t)=>{const n=t.slice();return e.filterByName("ssrc-group:FID").forEach(e=>{const t=e.value.split(" ");(0,l.default)(n,t).length&&Array.prototype.push.apply(n,t)}),(0,c.default)(n)},g.filterExcessSSRCs=e=>{const t=e.split("\r\n"),n=g.getAttributesForMediaType(t,"video"),r=g.getSSRCGroupType(n),i=n.ssrcStartIndex;if(void 0===i)return e;let o;const a=e=>{let t=null;return e.match(/^a=ssrc:(\d+)/)&&(t=RegExp.$1),t};if(r){const e=g.getSSRCGroupSSRCs(n),i=["a=ssrc-group:"+r,...e].join(" ");t[n.find(e=>e.name.startsWith("ssrc-group:")).lineIndex]=i,o=g.getAllowedSSRCs(n,e)}else{o=[];n.ssrcStartIndex&&o.push(a(t[n.ssrcStartIndex]))}return t.filter((e,t)=>{if(t<i||t>n.ssrcEndIndex)return!0;if(t===i){if(!r){const t=a(e);return t?o.includes(t):!/^a=ssrc:(\d+)/.test(e)}return!0}const l=a(e);if(l)return o.includes(l);if(e.match(/^a=ssrc-group:FID (\d+)/)){const e=RegExp.$1;return o.includes(e)}return!e.match(/^a=ssrc-group:SIM /)}).join("\r\n")},g.enableSimulcast=function(e,t){let n,r;const i=e.split("\r\n");if(!g.getMLine(i,"video"))return h.debug("No video m-line, not enabling simulcast."),e;const o=g.getAttributesForMediaType(i,"video");if(o.filterByName("ssrc-group:SIM").length>0)return h.debug("Simulcast is already enabled in this SDP, not attempting to enable again."),g.filterExcessSSRCs(e);if(!o.msid)return h.debug("No local stream attached, not enabling simulcast."),e;const a=o.isUsingRTX(),l=[],c=[];for(r=0;r<t;++r)l.push(1e4+r),a&&c.push(2e4+r);if(n=["a=ssrc-group:SIM "+l.join(" ")],a)for(r=0;r<t;++r)n.push(`a=ssrc-group:FID ${l[r]} ${c[r]}`);for(r=0;r<t;++r)n.push(`a=ssrc:${l[r]} cname:localCname`,`a=ssrc:${l[r]} msid:${o.msid}`);if(a)for(r=0;r<t;++r)n.push(`a=ssrc:${c[r]} cname:localCname`,`a=ssrc:${c[r]} msid:${o.msid}`);return n.unshift(o.ssrcStartIndex,o.ssrcEndIndex-o.ssrcStartIndex+1),i.splice(...n),i.join("\r\n")},g.reprioritizeVideoCodec=function(e,t,n){const r=e.split("\r\n"),i=g.getMLineIndex(r,"video");if(-1===i)return e;const o=g.getMLinePayloadTypes(r[i],"video"),a=new RegExp("^a=rtpmap:(\\d+).* "+t,"i"),l=r.map(e=>e.match(a)).filter(e=>null!==e);if(0===l.length)return e;const c=l.map(e=>e[1]);let s=o.filter(e=>-1===c.indexOf(e));"top"===n?s.unshift(...c):"bottom"===n?s.push(...c):(h.error(`Unexpected location param: ${n}; not changing ${t} priority`),s=o);const d=r[i].replace(o.join(" "),s.join(" "));return r[i]=d,r.join("\r\n")},g.getSetupRole=e=>{for(var t,n=u(e.split(/\r\n|\r|\n/));!(t=n()).done;){const e=t.value.match(/^a=setup:(\w+)/);if(e)return e[1]}return""},g.setSetupRole=(e,t)=>e.split(/\r\n|\r|\n/).map(e=>e.match(/^a=setup:(\w+)/)?"a=setup:"+t:e).join("\r\n"),g.changeSetupRole=(e,t,n)=>e.split(/\r\n|\r|\n/).map(e=>e.includes("a=setup:"+t)?"a=setup:"+n:e).join("\r\n"),g.patterns={bundle:"a=group:BUNDLE",address:"c=IN IP4",rtcp:"a=rtcp:",direction:["a=inactive","a=sendonly","a=recvonly","a=sendrecv"],rsize:"a=rtcp-rsize",ssrc:"a=ssrc:",msid:"a=msid:"},g.getIndexStartingWith=(e,t,n)=>{const r=e.slice(n),i=t.map(e=>r.findIndex(t=>t.includes(e))).filter(e=>e>-1);return i.length?n+Math.min(...i):e.length},g.getLastIndexPriorTo=(e,t,n)=>e.slice(0,n).map(e=>e.includes(t)).lastIndexOf(!0),g.includesAny=(e,t)=>{for(let n=0;n<t.length;n++)if(e.includes(t[n]))return!0;return!1},g.isVersionLine=e=>/^o=/.test(e),g.getVersionLine=e=>e.find(g.isVersionLine),g.getVersion=e=>{const t=g.getVersionLine(e);if(void 0===t)return;const n=Number(t.match(/ (\d+) IN /)[1]);return Number.isInteger(n)?n:void 0},g.updateVersion=(e,t,n)=>{const r=[...e],i=r.findIndex(e=>g.isVersionLine(e));return i>=0&&(r[i]=r[i].replace(` ${t} `,` ${n} `)),r},g.isBundleLine=e=>e.includes(g.patterns.bundle),g.getBundleLine=e=>e.find(g.isBundleLine),g.createBundleLine=e=>`${g.patterns.bundle} ${e.join(" ")}`,g.updateBundleLine=(e,t)=>{const n=[...e],r=g.createBundleLine(t),i=n.findIndex(e=>g.isBundleLine(e));return i>=0&&(n[i]=r),n},g.parseMLine=e=>{const t=e.match(/^(m=(?:audio|video)) (\d+) (.+)/),n=t[1];return{port:t[2],transport:t[3],mediaType:n}},g.disableTrack=e=>{const t=g.parseMLine(e);return`${t.mediaType} 0 ${t.transport}`},g.setMediaDirection=(e,t)=>{if(!Object.values(d.default).includes(t))return e;const n=e.slice(),r=n.findIndex(e=>g.includesAny(e,g.patterns.direction));return-1===r||(n[r]="a="+t),n},g.disableTrackSection=e=>{const t=e.mid,n=e.sdp;let r=n.filter(e=>{const t=g.patterns,n=t.address,r=t.rtcp,i=t.rsize,o=t.ssrc,a=t.msid;return!g.includesAny(e,[n,r,i,o,a])});return r[0]=g.disableTrack(n[0]),r=g.setMediaDirection(r,d.default.INACTIVE),{mid:t,sdp:r}},g.isDisabledMediaSection=e=>{let t=e[0];return/^m=(?:video|audio) 0 RTP\/SAVPF 0/.test(t)},g.getDisabledSectionForMid=e=>[`m=${e.includes("a")?"audio":"video"} 0 RTP/SAVPF 0`],g.disableTrackSections=(e,t)=>t.map(t=>{const n=g.getTrackMids(t)[0];return!n||e.includes(n)?t:g.getDisabledSectionForMid(n)}),g.getEnabledTracks=e=>g.getBundleLine(e).match(new RegExp(`^${g.patterns.bundle} (.+)$`))[1].split(" "),g.getDisabledTracks=(e,t)=>e.filter(e=>!t.includes(e)),g.getTrackSection=(e,t)=>{const n=e.findIndex(e=>e.includes("a=mid:"+t)),r=t.includes("a")?"audio":"video",i=g.getLastIndexPriorTo(e,"m="+r,n),o=g.getIndexStartingWith(e,["m=audio","m=video"],n),a=e.slice(i,o);return{mid:t,sdp:a}},g.getHeaders=e=>{const t=e.findIndex(e=>e.includes("m=audio")||e.includes("m=video"));return e.slice(0,t)},g.getSDPLines=e=>e.split("\r\n").filter(e=>e),g.getTrackMids=e=>e.filter(e=>e.match(new RegExp("^a=mid:\\d+"))).map(e=>e.substring("a=mid:".length)),g.getTrackSections=e=>g.getTrackMids(e).map(t=>g.getTrackSection(e,t)),g.parseMantisSDP=e=>{const t=g.changeSetupRole(e,"actpass","passive");return g.parseSDP(t)},g.isMediaSectionDisabled=e=>{const t=g.parseMLine(e[0]).port;return 0===parseInt(t,10)},g.getSectionMid=e=>g.isMediaSectionDisabled(e)?null:g.getTrackMids(e)[0],g.parseSDP=e=>{const t=g.getLinesPerSection(e),n=t[0],r=t.slice(1);return{bundle:g.getBundleLine(n),version:g.getVersion(n),iceCredentials:g.getIceCredentials(n),tracks:g.getEnabledTracks(n),mediaSections:r,mids:r.map(g.getSectionMid),headers:n}},g.createSDP=(e,t)=>{const n=[...e];return t.forEach(e=>n.push(...e)),n.push(""),n.join("\r\n")},g.removePayloadTypeFromSection=(e,t)=>e.filter(e=>!e.includes(`a=rtpmap:${t} `)&&!e.includes(`a=fmtp:${t} `)&&!e.includes(`a=rtcp-fb:${t} `)),g.getRtxPayloadType=(e,t)=>{const n=e.filter(e=>e.includes("apt="+t))[0];return null==n?void 0:n.match(/^a=fmtp:(\d+) /)[1]},g.removeRtxPayloadTypeFromSection=(e,t)=>{let n=[...e];const r=g.getRtxPayloadType(n,t);return r&&(n=g.removePayloadTypeFromSection(n,r)),n},g.trimUnusedCodecs=(e,t)=>{const n=e[0].split(" "),r=n.slice(3),i=n.slice(0,3),o=g.getCodecsFromSection(e);let a=[...e],l=[];r.forEach(e=>{const n=o.codecMap[e];if(t.includes(n)){l.push(e);const t=g.getRtxPayloadType(a,e);t&&l.push(t)}else a=g.removePayloadTypeFromSection(a,e),a=g.removeRtxPayloadTypeFromSection(a,e)});const c=l.length?l:[0];return a[0]=[...i,...c].join(" "),a},g.removeUnusedCodecs=(e,t)=>{if(!t)return e;const n=g.parseSDP(e),r=n.headers,i=n.mediaSections,o=g.parseSDP(t),a=o.mids,l=o.mediaSections,c=i.map(e=>{const t=a.findIndex(t=>t===g.getTrackMids(e)[0]);if(t<0)return e;const n=Object.values(g.getCodecsFromSection(l[t]).codecMap);return g.trimUnusedCodecs(e,n)}),s=[...r];return c.forEach(e=>s.push(...e)),s.push(""),s.join("\r\n")},g.updateSDPWithNewOffer=(e,t)=>{const n=e.headers,r=e.version,i=e.mediaSections,o=g.getSDPLines(t),a=g.getVersion(o),l=g.getEnabledTracks(o),c={version:a,tracks:l,headers:g.updateBundleLine(g.updateVersion(n,r,a),l),mediaSections:g.disableTrackSections(l,i)};return c.mids=c.mediaSections.map(g.getSectionMid),c},g.isUfragLine=e=>e.includes(g.iceCredentials.ufrag),g.isPwdLine=e=>e.includes(g.iceCredentials.pwd),g.getIceCredentials=e=>{const t={};return e.forEach(e=>{g.isUfragLine(e)?t.ufrag=e:g.isPwdLine(e)&&(t.pwd=e)}),t},g.updateIceCredentials=(e,t)=>e.map(e=>g.isUfragLine(e)?t.ufrag:g.isPwdLine(e)?t.pwd:e),g.addIceCredentialsToSection=(e,t)=>{let n=t.ufrag,r=t.pwd;const i=[...e],o=i.findIndex(e=>e.startsWith("a=mid:"));return o>=0&&i.splice(o,0,n,r),i},g.addIceCandidatesToSection=(e,t)=>{const n=[...e],r=t.filter(e=>e.startsWith("a=candidate:")||"a=end-of-candidates"===e),i=n.findIndex(e=>e.startsWith("a=mid:"));return i>=0&&r.length&&n.splice(i,0,...r),n},g.addIceConfig=(e,t,n)=>{const r=[...e],i=e[0];if(!g.getIceCredentials(i).ufrag){const e=g.addIceCredentialsToSection(i,n);r[0]=g.addIceCandidatesToSection(e,t)}return r},g.updateHeadersInPartialSdp=(e,t,n)=>{if(!e.headers.length)return g.updateBundleLine(t.headers,n);let r=g.updateBundleLine(e.headers,n);return r=g.updateVersion(r,e.version,t.version),e.iceCredentials.ufrag!==t.iceCredentials.ufrag&&(r=g.updateIceCredentials(r,t.iceCredentials)),r},g.updateFirstEnabledMediaSection=(e,t)=>{const n=[...e.mediaSections],r=e.mids.findIndex(e=>null!==e);return r>=0&&(n[r]=g.updateIceCredentials(n[r],t)),n};var p=g;t.default=p},function(e,t,n){var r=n(33),i=n(11);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){"use strict";(function(e){var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(4)),o=r(n(5)),a=r(n(3)),l=r(n(107)),c=r(n(260)),s=r(n(567)),d=r(n(261));var u=function(t){void 0===t&&(t={});const n=t.getNativeEnumerateDevices||(0,c.default)(),r=t.getNativeMediaDevices||(0,s.default)(),u=(t.currentAudioOutputDevice||l.default).getCurrentAudioOutputDeviceId,A=(t.currentAudioInputDevice||d.default).getCurrentAudioInputDevice,h=t.env||a.default,g=t.global||(void 0!==typeof window?window:global),Q={},F={audio:"audioInput",video:"videoInput",audioinput:"audioInput",videoinput:"videoInput",audiooutput:"audioOutput",audioInput:"audioInput",videoInput:"videoInput",audioOutput:"audioOutput"};return Q.getNativeMediaDevices=()=>r(),Q.hasEnumerateDevicesCapability=()=>"function"==typeof n(),Q.hasDeviceChangeCapability=()=>{const e=r();return!(!e||!("ondevicechange"in e))},Q.hasSetSinkIdCapability=()=>"setSinkId"in(null==g?void 0:g.HTMLMediaElement.prototype),Q.hasAudioOutputApiSupport=()=>{const e=t.hasSetSinkIdCapability,n=void 0===e?Q.hasSetSinkIdCapability:e,r=t.hasDeviceChangeCapability,i=void 0===r?Q.hasDeviceChangeCapability:r;return!(null!=h&&h.isFirefox)&&n()&&i()},Q.hasEnumerateDevicesBug=()=>h.isSafari&&13.1===h.version,Q.getMediaDevices=()=>Q.hasEnumerateDevicesCapability()?n()().then(e=>e.map(e=>({deviceId:e.deviceId||e.id,label:e.label,kind:F[e.kind]}))):e.reject(new Error("This browser does not support enumerateDevices APIs")),Q.getInputMediaDevices=()=>Q.getMediaDevices().then(e=>e.filter(e=>/^(audio|video)Input$/.test(e.kind))),Q.getAudioOutputMediaDevices=()=>Q.getMediaDevices().then(e=>e.filter(e=>"audioOutput"===e.kind).map(e=>({deviceId:e.deviceId,label:e.label}))),Q.getAudioInputMediaDevices=()=>Q.getMediaDevices().then(e=>e.filter(e=>"audioInput"===e.kind).map(e=>({deviceId:e.deviceId,label:e.label}))),Q.shouldAskForDevices=()=>Q.hasEnumerateDevicesCapability()?Q.getInputMediaDevices().then(e=>{if(0===e.length)return{video:!0,audio:!0};const t=e.filter(e=>"audioInput"===e.kind),n=e.filter(e=>"videoInput"===e.kind);return Q.hasEnumerateDevicesBug()&&0===n.length?{audio:!0,video:!0}:{video:n.length>0,audio:t.length>0,videoDevices:n,audioDevices:t}}).catch(()=>({video:!0,audio:!0})):e.resolve({video:!0,audio:!0}),Q.getDefaultAudioOutputDeviceId=e=>{if(!Array.isArray(e)||0===e.length)return"";return(e.find(e=>"default"===e.deviceId)||e[0]).deviceId},Q.getDefaultAudioInputDevice=e=>Array.isArray(e)&&0!==e.length?e.find(e=>"default"===e.deviceId)||e[0]:"",Q.hasDevice=(e,t)=>{let n=e;return Array.isArray(n)||(n=[]),n.some(e=>e.deviceId===t)},Q.getActiveAudioInputDevice=(0,o.default)(i.default.mark((function e(){var t,n,r;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Q.getAudioInputMediaDevices();case 2:if(0!==(t=e.sent).length){e.next=5;break}return e.abrupt("return",{deviceId:null,label:null});case 5:return(n=A())||(r=Q.getDefaultAudioInputDevice(t),n=t.find(e=>e===r)),e.abrupt("return",n);case 8:case"end":return e.stop()}}),e)}))),Q.getActiveAudioOutputDevice=(0,o.default)(i.default.mark((function e(){var t,n,r;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Q.getAudioOutputMediaDevices();case 3:t=e.sent,e.next=9;break;case 6:throw e.prev=6,e.t0=e.catch(0),e.t0;case 9:if(0!==t.length){e.next=11;break}return e.abrupt("return",{deviceId:null,label:null});case 11:return(n=t.find(e=>e.deviceId===u()))||(r=Q.getDefaultAudioOutputDeviceId(t),n=t.find(e=>e.deviceId===r)),e.abrupt("return",n);case 14:case"end":return e.stop()}}),e,null,[[0,6]])}))),Q};t.default=u}).call(this,n(2))},function(e,t){e.exports=function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}},function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function l(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,s=[],d=!1,u=-1;function A(){d&&c&&(d=!1,c.length?s=c.concat(s):u=-1,s.length&&h())}function h(){if(!d){var e=l(A);d=!0;for(var t=s.length;t;){for(c=s,s=[];++u<t;)c&&c[u].run();u=-1,t=s.length}c=null,d=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function g(e,t){this.fun=e,this.array=t}function Q(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];s.push(new g(e,t)),1!==s.length||d||l(h)},g.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=Q,i.addListener=Q,i.once=Q,i.off=Q,i.removeListener=Q,i.removeAllListeners=Q,i.emit=Q,i.prependListener=Q,i.prependOnceListener=Q,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(e,t){function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(6)),o=r(n(1)),a=r(n(18)),l=r(n(30)),c=r(n(581));const s=(0,o.default)("GlobalExceptionHandler"),d=(0,a.default)(),u=function(e,t){Error.call(this),this.code=e,this.message=t};(u.prototype=Object.create(Error.prototype)).constructor=u,(0,i.default)(u),u.getTitleByCode=function(e){return c.default[+e]},u.handleJsException=e=>{let t=e.error,n=e.errorMsg,r=e.code,i=e.target,o=e.analytics;if(!i)throw new Error("handleJsException requires target");const a=()=>void 0!==r?r:t&&t.code,c=()=>void 0!==n?n:t&&t.message,A=u.getTitleByCode(a());s.error(`OT.exception :: title: ${A} (${a()}) msg: ${c()}`);try{const e={partnerId:i.session?i.session.apiKey:i.apiKey,sessionId:i.session?i.session.sessionId:i.sessionId};o.logError(a(),"tb.exception",A,{details:c()},e);const n=new d.ExceptionEvent(l.default.EXCEPTION,c(),A,a(),i,i,t);if(t)n.stack=t.stack;else try{throw new Error}catch(e){n.stack=e.stack}u.dispatchEvent(n)}catch(e){s.error("OT.exception :: Failed to dispatch exception - "+e.toString())}};var A=u;t.default=A},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(270));var o={publishers:new i.default("guid"),subscribers:new i.default("widgetId"),sessions:new i.default};t.default=o},function(e,t,n){"use strict";t.__esModule=!0,t.MEDIUM=t.LOW=t.CongestionLevels=t.CRITICAL=void 0;t.CRITICAL=2;t.MEDIUM=1;t.LOW=0;const r={CRITICAL:2,MEDIUM:1,LOW:0};t.CongestionLevels=r},function(e,t,n){var r=n(20),i=n(119);e.exports=function(e){return null!=e&&i(e.length)&&!r(e)}},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;t.default={ACTIVE:"active",INACTIVE:"inactive",UNKNOWN:"unknown",PER_SESSION:"perSession",PER_STREAM:"perStream",EXCEPTION:"exception",ISSUE_REPORTED:"issueReported",SESSION_CONNECTED:"sessionConnected",SESSION_RECONNECTING:"sessionReconnecting",SESSION_RECONNECTED:"sessionReconnected",SESSION_DISCONNECTED:"sessionDisconnected",STREAM_CREATED:"streamCreated",STREAM_DESTROYED:"streamDestroyed",CONNECTION_CREATED:"connectionCreated",CONNECTION_DESTROYED:"connectionDestroyed",SIGNAL:"signal",STREAM_PROPERTY_CHANGED:"streamPropertyChanged",MICROPHONE_LEVEL_CHANGED:"microphoneLevelChanged",RESIZE:"resize",SETTINGS_BUTTON_CLICK:"settingsButtonClick",DEVICE_INACTIVE:"deviceInactive",INVALID_DEVICE_NAME:"invalidDeviceName",ACCESS_ALLOWED:"accessAllowed",ACCESS_DENIED:"accessDenied",ACCESS_DIALOG_OPENED:"accessDialogOpened",ACCESS_DIALOG_CLOSED:"accessDialogClosed",AUDIO_INPUT_DEVICE_CHANGED:"audioInputDeviceChanged",ECHO_CANCELLATION_MODE_CHANGED:"echoCancellationModeChanged",MEDIA_STOPPED:"mediaStopped",PUBLISHER_DESTROYED:"destroyed",MUTE_FORCED:"muteForced",SUBSCRIBER_DESTROYED:"destroyed",SUBSCRIBER_CONNECTED:"connected",SUBSCRIBER_DISCONNECTED:"disconnected",SUBSCRIBER_CAPTION_RECEIVED:"captionReceived",DEVICES_DETECTED:"devicesDetected",DEVICES_SELECTED:"devicesSelected",CLOSE_BUTTON_CLICK:"closeButtonClick",MICLEVEL:"microphoneActivityLevel",MICGAINCHANGED:"microphoneGainChanged",ENV_LOADED:"envLoaded",ENV_UNLOADED:"envUnloaded",AUDIO_LEVEL_UPDATED:"audioLevelUpdated",VIDEO_ELEMENT_CREATED:"videoElementCreated"}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(4)),o=r(n(5)),a=r(n(25)),l=r(n(6)),c=r(n(271)),s=r(n(267)),d=r(n(152)),u=r(n(48)),A=r(n(582)),h=r(n(584)),g=r(n(587));const Q=(0,u.default)();let F=function(){function e(e){let t=void 0===e?{}:e,n=t.staticConfig,r=void 0===n?Q.onlyLocal():n,i=t.sessionInfo,o=void 0===i?new d.default:i,a=t.ajax,l=t.queue,c=t.getUserAgentClientHintData,s=void 0===c?g.default:c,u=t.userAgentData,A=void 0===u?"undefined"!=typeof navigator&&navigator.userAgentData:u;this.getTurnServerName=e=>{let t,n;if(!e||"object"!=typeof e)return t;return(Array.isArray(e)?e:[e]).forEach(e=>{const r=e.urls||e.url;(Array.isArray(r)?r:[r]).forEach(e=>{const r=e.indexOf(":")+1,i=e.lastIndexOf(":");e.includes("turns")?n=e.substring(r,i):t=e.substring(r,i)})}),n||t},this.ajax=a,this.queue=l,this.sessionInfo=o,this.getUserAgentClientHintData=s,this.userAgentData=A,this.staticConfig=r}var t=e.prototype;return t._getCachedUserAgentData=function(){var e=(0,o.default)(i.default.mark((function e(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.cachedUserAgentData){e.next=4;break}return e.next=3,this.getUserAgentClientHintData(this.userAgentData);case 3:this.cachedUserAgentData=e.sent;case 4:return e.abrupt("return",this.cachedUserAgentData);case 5:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.commonQoSFields=function(){const e=this._analytics.proxyUrl,t=this.sessionInfo.messagingURL;return{clientVersion:this.staticConfig.clientVersion,buildHash:this.staticConfig.buildHash,source:(void 0!==typeof window?window:global).location&&(void 0!==typeof window?window:global).location.href,logVersion:"2",apiServer:this.staticConfig.apiUrl,clientSystemTime:(new Date).getTime(),sessionId:this.sessionInfo.sessionId,mediaServerName:this.sessionInfo.mediaServerName,relayServer:this.getTurnServerName(this.sessionInfo.iceServers),p2p:this.sessionInfo.p2pEnabled,messagingServer:this.sessionInfo.messagingServer,messagingUrl:(0,A.default)(e,t),version:this.staticConfig.version,partnerId:this.sessionInfo.partnerId}},t._getCommonDataFields=function(){var e=(0,o.default)(i.default.mark((function e(){var t,n;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.default.getAsync();case 2:return t=e.sent,e.next=5,this._getCachedUserAgentData();case 5:return n=e.sent,e.abrupt("return",Object.assign({guid:t},this.commonQoSFields(),n));case 7:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.logError=function(t,n,r,i,o){void 0===o&&(o={}),this._getCommonDataFields().then(a=>{const l=[t,n,r,i,Object.assign({},a,o)];e.emit("logError",...l),this._analytics.logError(...l)})},t.logEvent=function(t,n,r){void 0===t&&(t={}),this._getCommonDataFields().then(i=>{const o=Object.assign({},i,t);e.emit("logEvent",o),this._analytics.logEvent(o,!1,n,r)})},t.logQOS=function(t){void 0===t&&(t={}),this._getCommonDataFields().then(n=>{const r=Object.assign({duration:0},n,t);(0,h.default)(r),e.emit("logQOS",r),this._analytics.logQOS(r)})},(0,a.default)(e,[{key:"staticConfig",get:function(){return this._staticConfig},set:function(e){this._staticConfig=e,this._analytics=new s.default({loggingUrl:this.staticConfig.loggingUrl,ajax:this.ajax,queue:this.queue})}}]),e}();t.default=F,(0,l.default)(F),e.exports=F},function(e,t,n){"use strict";var r=!0,i=!0;function o(e,t,n){var r=e.match(t);return r&&r.length>=n&&parseInt(r[n],10)}e.exports={extractVersion:o,wrapPeerConnectionEvent:function(e,t,n){if(e.RTCPeerConnection){var r=e.RTCPeerConnection.prototype,i=r.addEventListener;r.addEventListener=function(e,r){if(e!==t)return i.apply(this,arguments);var o=function(e){var t=n(e);t&&r(t)};return this._eventMap=this._eventMap||{},this._eventMap[r]=o,i.apply(this,[e,o])};var o=r.removeEventListener;r.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[n])return o.apply(this,arguments);var r=this._eventMap[n];return delete this._eventMap[n],o.apply(this,[e,r])},Object.defineProperty(r,"on"+t,{get:function(){return this["_on"+t]},set:function(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}},disableLog:function(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(r=e,e?"adapter.js logging disabled":"adapter.js logging enabled")},disableWarnings:function(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(i=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))},log:function(){if("object"==typeof window){if(r)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}},deprecated:function(e,t){i&&console.warn(e+" is deprecated, please use "+t+" instead.")},detectBrowser:function(e){var t=e&&e.navigator,n={browser:null,version:null};if(void 0===e||!e.navigator)return n.browser="Not a browser.",n;if(t.mozGetUserMedia)n.browser="firefox",n.version=o(t.userAgent,/Firefox\/(\d+)\./,1);else if(t.webkitGetUserMedia)n.browser="chrome",n.version=o(t.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(t.mediaDevices&&t.userAgent.match(/Edge\/(\d+).(\d+)$/))n.browser="edge",n.version=o(t.userAgent,/Edge\/(\d+).(\d+)$/,2);else{if(!e.RTCPeerConnection||!t.userAgent.match(/AppleWebKit\/(\d+)\./))return n.browser="Not a supported browser.",n;n.browser="safari",n.version=o(t.userAgent,/AppleWebKit\/(\d+)\./,1)}return n}}},function(e,t,n){var r=n(43),i=n(378),o=n(379),a=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?i(e):o(e)}},function(e,t,n){var r=n(193),i=n(121),o=n(29);e.exports=function(e){return o(e)?r(e):i(e)}},function(e,t,n){"use strict";var r=n(46);e.exports=function(e){if(!r(e))throw new TypeError("Cannot use null or undefined");return e}},function(e,t,n){"use strict";var r=n(57),i=n(214),o=n(133),a=n(215),l=n(216);(e.exports=function(e,t){var n,i,c,s,d;return arguments.length<2||"string"!=typeof e?(s=t,t=e,e=null):s=arguments[2],r(e)?(n=l.call(e,"c"),i=l.call(e,"e"),c=l.call(e,"w")):(n=c=!0,i=!1),d={value:t,configurable:n,enumerable:i,writable:c},s?o(a(s),d):d}).gs=function(e,t,n){var c,s,d,u;return"string"!=typeof e?(d=n,n=t,t=e,e=null):d=arguments[3],r(t)?i(t)?r(n)?i(n)||(d=n,n=void 0):n=void 0:(d=t,t=n=void 0):t=void 0,r(e)?(c=l.call(e,"c"),s=l.call(e,"e")):(c=!0,s=!1),u={get:t,set:n,configurable:c,enumerable:s},d?o(a(d),u):u}},function(e,t,n){var r=n(534),i=n(542),o=n(91),a=n(14),l=n(547);e.exports=function(e){return"function"==typeof e?e:null==e?o:"object"==typeof e?a(e)?i(e[0],e[1]):r(e):l(e)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},function(e,t,n){var r=n(557),i=n(144)((function(e,t){return null==e?{}:r(e,t)}));e.exports=i},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e,t){let n;const r=t||{};e.setDisplayMode=function(e){const t=e||"auto";n!==t&&(i.default.removeClass(this.domElement,"OT_mode-"+n),i.default.addClass(this.domElement,"OT_mode-"+t),n=t)},e.getDisplayMode=function(){return n},e.showAfterLoading=function(){i.default.removeClass(this.domElement,"OT_hide-forced")},e.hideWhileLoading=function(){i.default.addClass(this.domElement,"OT_hide-forced")},e.destroy=function(){return r.onDestroy&&r.onDestroy(this.domElement),this.domElement&&i.default.removeElement(this.domElement),e},e.appendTo=function(t){return this.domElement=i.default.createElement(r.nodeName||"div",r.htmlAttributes,r.htmlContent),r.onCreate&&r.onCreate(this.domElement),e.setDisplayMode(r.mode),"auto"===r.mode&&(i.default.addClass(e.domElement,"OT_mode-on-hold"),setTimeout(()=>{i.default.removeClass(e.domElement,"OT_mode-on-hold")},2e3)),t.appendChild(this.domElement),e}};var i=r(n(7))},function(e,t,n){var r=n(80);e.exports=function(e){return r(e,4)}},function(e,t,n){var r=n(377),i=n(382);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},function(e,t,n){var r=n(16).Symbol;e.exports=r},function(e,t,n){var r=n(86),i=n(64);e.exports=function(e,t,n,o){var a=!n;n||(n={});for(var l=-1,c=t.length;++l<c;){var s=t[l],d=o?o(n[s],e[s],s,n,e):void 0;void 0===d&&(d=e[s]),a?i(n,s,d):r(n,s,d)}return n}},function(e,t,n){var r=n(406),i=n(116),o=n(407),a=n(201),l=n(202),c=n(33),s=n(190),d=s(r),u=s(i),A=s(o),h=s(a),g=s(l),Q=c;(r&&"[object DataView]"!=Q(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=Q(new i)||o&&"[object Promise]"!=Q(o.resolve())||a&&"[object Set]"!=Q(new a)||l&&"[object WeakMap]"!=Q(new l))&&(Q=function(e){var t=c(e),n="[object Object]"==t?e.constructor:void 0,r=n?s(n):"";if(r)switch(r){case d:return"[object DataView]";case u:return"[object Map]";case A:return"[object Promise]";case h:return"[object Set]";case g:return"[object WeakMap]"}return t}),e.exports=Q},function(e,t,n){"use strict";var r=n(427)();e.exports=function(e){return e!==r&&null!==e}},function(e,t,n){"use strict";e.exports=n(441)()?n(94).Symbol:n(444)},function(e,t,n){"use strict";(function(e){var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(25)),o=r(n(221)),a=r(n(505)),l=r(n(556)),c=r(n(62)),s=r(n(1)),d=r(n(106));const u=(0,s.default)("StaticConfig"),A=(0,c.default)({version:"v2.30.2",buildHash:"7758b9d91",minimumVersion:{firefox:52,chrome:49},debug:!1,websiteURL:"http://www.tokbox.com",configURL:"https://config.opentok.com",ipWhitelistConfigURL:"",cdnURL:"",loggingURL:"https://hlg.tokbox.com/prod",apiURL:"https://anvil.opentok.com"}),h=(0,l.default)(["apiURL","assetURL","cdnURL","sessionInfoOverrides","loggingURL"]),g={apiUrl:"apiURL",loggingUrl:"loggingURL"},Q=(0,a.default)(e=>g[e]);var F=function(t){let n=(void 0===t?{}:t).axios,r=void 0===n?o.default:n;return function(){function t(e){Object.defineProperty(this,"config",{value:Object.freeze((0,c.default)(e))})}return t.onlyLocal=function(){const e=(0,c.default)((void 0!==typeof window?window:global).OTProperties);return new t(Object.assign({},A,h(e)))},t.get=function(n){let i=n.partnerId,o=n.token,a=n.useIpWhitelistConfigUrl,l=n.proxyUrl;return(()=>{const t=this.onlyLocal();if(!t.configUrl)return e.resolve({});if(!0===a&&!t.ipWhitelistConfigUrl)return e.resolve({});let n=!0===a?t.ipWhitelistConfigUrl:t.configUrl;return n=(0,d.default)(n,l),r.get(`${n}/project/${i}/config.json`,{headers:{"X-TB-TOKEN-AUTH":o}}).then(e=>e.data)})().then(e=>{const n=(0,c.default)((void 0!==typeof window?window:global).OTProperties);return new t(Object.assign({},A,h(n),Q(e)))}).catch(t=>(u.error("could not reach Config Service",t),e.reject(new Error("could not reach Config Service"))))},(0,i.default)(t,[{key:"configUrl",get:function(){return this.config.configURL}},{key:"ipWhitelistConfigUrl",get:function(){return this.config.ipWhitelistConfigURL}},{key:"apiUrl",get:function(){return this.config.apiURL}},{key:"loggingUrl",get:function(){return this.config.loggingURL}},{key:"apiEnabled",get:function(){return void 0===this.config.apiEnabled||this.config.apiEnabled}},{key:"version",get:function(){return this.config.version}},{key:"clientVersion",get:function(){return"js-"+(this.version||"unknown").replace("v","")}},{key:"buildHash",get:function(){return this.config.buildHash}},{key:"minimumVersion",get:function(){return this.config.minimumVersion}},{key:"websiteUrl",get:function(){return this.config.websiteURL}},{key:"debug",get:function(){return"true"===this.config.debug||!0===this.config.debug}},{key:"sessionInfoOverrides",get:function(){return this.config.sessionInfoOverrides}},{key:"cdnUrl",get:function(){return this.config.cdnURL||`${(void 0!==typeof window?window:global).location.protocol}//${(void 0!==typeof window?window:global).location.host}`}},{key:"assetUrl",get:function(){return this.config.assetURL||`${this.cdnUrl}/webrtc/${this.version}`}}]),t}()};t.default=F}).call(this,n(2))},function(e,t,n){"use strict";var r=n(13);function i(e,t,n,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i)}r.inherits(i,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var o=i.prototype,a={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){a[e]={value:e}})),Object.defineProperties(i,a),Object.defineProperty(o,"isAxiosError",{value:!0}),i.from=function(e,t,n,a,l,c){var s=Object.create(o);return r.toFlatObject(e,s,(function(e){return e!==Error.prototype})),i.call(s,e.message,t,n,a,l),s.cause=e,s.name=e.name,c&&Object.assign(s,c),s},e.exports=i},function(e,t,n){var r=n(71);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){if(r.now)return r.timing.navigationStart+r.now();return Date.now()};const r=(void 0!==typeof window?window:global).performance||{}},function(e,t,n){var r=n(624);e.exports=function(e){return r(2,e)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(52)),o=r(n(632)),a=r(n(3)),l=r(n(633));const c=function(e){void 0===e&&(e={});const t=e.env||a.default,n=e.hasGetUserMediaCapability||o.default,r=e.hasPeerConnectionCapability||l.default;return"Node"===t.name||n()&&r()},s=(0,i.default)(()=>c());var d={check:c,once:s};t.default=d},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){var r=n(193),i=n(401),o=n(29);e.exports=function(e){return o(e)?r(e,!0):i(e)}},function(e,t){e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},function(e,t,n){"use strict";e.exports=function(e){return null!=e}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){const t=[];return{on(n,r){for(var i=arguments.length,o=new Array(i>2?i-2:0),a=2;a<i;a++)o[a-2]=arguments[a];if(t.push({eventName:n,handler:r,args:o}),e.on)e.on(n,r);else{if(!e.addEventListener)throw new Error("Object does not support events",e);e.addEventListener(n,r,...o)}},off(t,n){if(e.off)e.off(t,n);else{if(!e.removeEventListener)throw new Error("Object does not support events",e);for(var r=arguments.length,i=new Array(r>2?r-2:0),o=2;o<r;o++)i[o-2]=arguments[o];e.removeEventListener(t,n,...i)}},once(n,r){for(var i=arguments.length,o=new Array(i>2?i-2:0),a=2;a<i;a++)o[a-2]=arguments[a];t.push({eventName:n,handler:r,args:o}),e.once(n,r)},removeAll(){t.forEach(e=>{let t=e.eventName,n=e.handler,r=e.args;this.off(t,n,...r)}),t.splice(0,t.length)}}}},function(e,t,n){var r=n(104);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},function(e,t,n){var r=n(14),i=n(143),o=n(254),a=n(61);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:o(a(e))}},function(e,t,n){var r=n(544);e.exports=function(e){return null==e?"":r(e)}},function(e,t,n){var r=n(80);e.exports=function(e){return r(e,5)}},function(e,t,n){var r=n(648)(n(298));e.exports=r},function(e,t,n){var r=n(191);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(396),i=n(21),o=Object.prototype,a=o.hasOwnProperty,l=o.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(e){return i(e)&&a.call(e,"callee")&&!l.call(e,"callee")};e.exports=c},function(e,t,n){(function(e){var r=n(16),i=n(397),o=t&&!t.nodeType&&t,a=o&&"object"==typeof e&&e&&!e.nodeType&&e,l=a&&a.exports===o?r.Buffer:void 0,c=(l?l.isBuffer:void 0)||i;e.exports=c}).call(this,n(87)(e))},function(e,t){var n=/^(?:0|[1-9]\d*)$/;e.exports=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&n.test(e))&&e>-1&&e%1==0&&e<t}},function(e,t){e.exports=function(e){return function(t){return e(t)}}},function(e,t){var n=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}},function(e,t,n){"use strict";e.exports=function(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e}},function(e,t,n){var r=n(33),i=n(21);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.getProxyUrl=t.errorMessages=t.clearProxyUrl=void 0,t.setProxyUrl=function(e){const t=n(31),r=s.default,A=new t,h=a.default.sessions.length()>0,g=a.default.publishers.length()>0;let Q;if(h){const e=a.default.sessions.find(e=>"connected"===e.currentState);Q=e?e.sessionId:a.default.sessions.find().sessionId}else Q="";const F={sessionId:Q,apiKey:r.value};if(g||h){const e=(0,l.default)()(c.default.SET_PROXY_URL_TIMING_ERROR,new Error(u.SET_PROXY_URL_TIMING_ERROR),i.default.SET_PROXY_URL_TIMING_ERROR);o.default.handleJsException({error:e,target:F,analytics:A})}else if(d){const e=(0,l.default)()(c.default.PROXY_URL_ALREADY_SET_ERROR,new Error(u.PROXY_URL_ALREADY_SET_ERROR),i.default.PROXY_URL_ALREADY_SET_ERROR);o.default.handleJsException({error:e,target:F,analytics:A})}else d=e};var i=r(n(10)),o=r(n(26)),a=r(n(27)),l=r(n(15)),c=r(n(8)),s=r(n(73));let d;const u={SET_PROXY_URL_TIMING_ERROR:"The proxyUrl was set after a session or publisher was created.",PROXY_URL_ALREADY_SET_ERROR:"The proxyUrl has already been set. Setting it again will not have any effect."};t.errorMessages=u;t.getProxyUrl=()=>d;t.clearProxyUrl=()=>{d=null}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i,o=r(n(7));let a;if("Node"===(null==o.default||null==(i=o.default.env)?void 0:i.name))a="";else{var l,c;const e=null==(l=Array.prototype.slice.call(document.getElementsByTagName("script")))||null==(c=l.pop())?void 0:c.getAttribute("src");a=(e&&e.match(/[?&]apikey=([^&]+)/i)||[])[1]||""}var s={value:a};t.default=s},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t,n){void 0===n&&(n=1/0);let r=null,i=!1,o=1;const a=1e3/t,l=()=>{!i||o>n||(o+=1,e(),r=setTimeout(l,a))};this.start=()=>{i||(i=!0,setTimeout(l,a))},this.stop=()=>{(void 0!==typeof window?window:global).clearTimeout(r),i=!1}}},function(e,t,n){"use strict";(function(e){var r=n(0);t.__esModule=!0,t.default=function(t){void 0===t&&(t={});const n=t.hasValidPeerConnection||f.default,r=t.applySdpTransform||R.default,x=t.createPeerConnection||I.default,M=t.env||Q.default,H=t.sdpTransformDefaults||y.default,K=t.getStatsAdapter||V.default,L=t.getRtcStatsReportAdapter||C.default,z=t.getSynchronizationSources||W.default,O=t.IceCandidateProcessor||E.default,j=t.logging||g.default,P=t.offerProcessor||S.default,_=t.PeerConnectionChannels||v.default,q=t.subscribeProcessor||J.default,$=N.default,ee=t.changeMediaDirection||G.default,te=ee.changeMediaDirectionToInactive,ne=ee.changeMediaDirectionToRecvOnly,re=t.Qos||X.default,ie=t.global||(void 0!==typeof window?window:global),oe=t.debounce||d.default,ae=t.needsToSwapH264Profiles||k.default.once,le=(0,Z.default)(),ce=t.NativeRTCIceCandidate||ie.RTCIceCandidate,se=t.NativeRTCSessionDescription||ie.RTCSessionDescription,de=t.Errors||T.default,ue=t.OTErrorClass||p.default,Ae=t.ExceptionCodes||F.default,he=t.hasPictureInPictureBug||Y.default,ge=()=>{};return function(t){void 0===t&&(t={});let d=!1;const g=t,Q=g.iceConfig,F=void 0===Q?{servers:[]}:Q,p=g.isPublisher,Z=g.offerOverrides,f=g.answerOverrides,R=g.p2p,I=g.codecFlags,y=g.sourceStreamId,V=g.keyStore,C=g.sFrameClientStore,W=g.isE2ee,E=g.removeUnusedCodecs,S=g.sessionId;let v,J=t,N=J.logAnalyticsEvent,G=void 0===N?ge:N,X=J.sendMessage,k=!1;const T=ae();let Y,ee,Qe=0,Fe=!1,pe={};const Ue=new $(G),me=(0,m.default)();function be(e,t){if(!d){if(["candidate","offer","answer","pranswer"].indexOf(e)>-1){const n="candidate"===e?t.candidate:t.sdp;d=-1!==n.indexOf("typ relay")}}X(e,t)}const Be=(0,w.default)();G("createPeerConnection","Attempt");const Ze={};Ze.id=(0,A.default)();const fe=j("PeerConnection:"+Ze.id);fe.debug("construct",{id:Ze.id,options:t});const Re=H,Ie=(0,u.default)(t,["isPublisher","logAnalyticsEvent","offerOverrides","answerOverrides","sendMessage"]);let ye,Ve,Ce,We,Ee,Se=[];const ve=(()=>{let e=Ie.overrideSimulcastEnabled||!1;return{get:()=>e,set(t){const n=Boolean(t)&&Ie.capableSimulcastStreams>1;n!==e&&void 0===Ie.overrideSimulcastEnabled&&(e=n,Ze.generateOfferAndSend())}}})(),Je=(()=>{let e=!1;return{get:()=>e,set(t){const n=Boolean(t);n!==e&&(e=n,e&&(Ze.iceConnectionStateIsConnected()?fe.debug("iceRestart is going to wait until we disconnect or negotiationNeeded and then restart ice"):Ze.generateOfferAndSend()))}}})(),Ne={clean(){delete this.promise,delete this.resolve,delete this.reject}};Ne.promise=new e((e,t)=>{Ne.resolve=e,Ne.reject=t});let Ge=new O,Xe="new";Object.defineProperty(Ze,"signalingState",{get:()=>ye.signalingState,set:e=>(ye.signalingState=e,e)}),(0,h.default)(Ze),Ze.addOptions=e=>{G=e.logAnalyticsEvent},Ze.startEncryption=function(){var e=(0,o.default)(i.default.mark((function e(t){var n,r;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(W){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,le({sessionId:S,connectionId:t});case 4:return n=e.sent,e.next=7,C.createSender(n);case 7:return Y=e.sent,e.next=10,V.get();case 10:return r=e.sent,e.next=13,Y.setSenderEncryptionKey(r);case 13:ee=e=>{Y.setSenderEncryptionKey(e)},V.on("keyChanged",ee),ye.getTransceivers().forEach(function(){var e=(0,o.default)(i.default.mark((function e(t){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Y.encrypt(n,t.sender);case 2:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 16:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),Ze.once("iceConnected",(0,o.default)(i.default.mark((function e(){var t;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:"",t={pcc:parseInt((0,w.default)()-Be,10),hasRelayCandidates:d,proxyInfo:""},ye&&ye.proxyInfo&&(t.proxyInfo=ye.proxyInfo),G("createPeerConnection","Success",t);case 4:case"end":return e.stop()}}),e)})))),Ze.startDecryption=function(){var e=(0,o.default)(i.default.mark((function e(t,n){var r,o,a;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(Ze.iceConnectionStateIsConnected()){e.next=3;break}return Ze.once("iceConnected",()=>Ze.startDecryption(t,n)),e.abrupt("return");case 3:return e.next=5,le({sessionId:S,connectionId:t});case 5:return r=e.sent,o=n.receiver,e.next=9,ke(r);case 9:return a=e.sent,e.prev=10,e.next=13,null==a?void 0:a.decrypt(r,o);case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(10),fe.error(e.t0);case 18:case"end":return e.stop()}}),e,null,[[10,15]])})));return function(t,n){return e.apply(this,arguments)}}(),Ne.resolve();const ke=function(){var t=(0,o.default)(i.default.mark((function t(n){return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!pe[n]){t.next=2;break}return t.abrupt("return",pe[n]);case 2:return pe[n]=new e(function(){var e=(0,o.default)(i.default.mark((function e(t){var r,o;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,V.get();case 2:if(r=e.sent,o=C.getReceiver(n)){e.next=9;break}return e.next=7,C.createReceiver(n);case 7:(o=e.sent).addReceiver(n);case 9:o.setReceiverEncryptionKey(n,r),V.on("keyChanged",e=>{o.setReceiverEncryptionKey(n,e)}),o.addEventListener("decryptFailed",()=>{Ze.trigger("decryptFailed")}),o.addEventListener("decryptionRestored",()=>{Ze.trigger("decryptRestored")}),t(o);case 14:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),t.abrupt("return",pe[n]);case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),Te=e=>{if(fe.debug("internalCreatePeerConnection: called"),ye)return fe.debug("internalCreatePeerConnection: resolving synchronously"),void e.call(null,null,ye);if(Se.push(e),!(Se.length>1)){if(fe.debug(`Creating peer connection config "${JSON.stringify(Ie)}".`),0===F.servers.length&&(fe.error("No ice servers present"),G("Error","noIceServers")),"relay"===F.transportPolicy){const e=e=>e&&0===e.indexOf("turn");F.servers=F.servers.map(t=>{const n=(0,c.default)(t);return Array.isArray(n.urls)||(n.urls=[n.urls]),n.urls=n.urls.filter(e),0===n.urls.length?void 0:n}).filter(e=>void 0!==e)}Ie.iceTransportPolicy=F.transportPolicy,Ie.iceServers=F.servers,W&&(Ie.forceEncodedVideoInsertableStreams=!0,Ie.forceEncodedAudioInsertableStreams=!0,Ie.encodedInsertableStreams=!0),n(ie.RTCPeerConnection).then(e=>{if(!e)throw fe.error("createPeerConnection: Invalid RTCPeerConnection object"),new Error("Failed to create valid RTCPeerConnection object");return x({window:ie,config:Ie})}).then(function(){var e=(0,o.default)(i.default.mark((function e(t){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:Ye(null,t);case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),e=>Ye(e))}},Ye=(e,t)=>{if(e)return ze({reason:"Failed to create PeerConnection, exception: "+e,prefix:"NewPeerConnection"}),void(Se=[]);fe.debug("OT attachEventsToPeerConnection"),ye=t,Ge&&Ge.setPeerConnection(t),Ve=new _(ye),Ie.channels&&Ve.addMany(Ie.channels);const n=(e=>{let t=e.sendMessage,n=e.logging;const r={};return e=>{e.candidate?(r[e.candidate.sdpMid]=e.candidate.sdpMLineIndex,t("candidate",{candidate:e.candidate.candidate,sdpMid:e.candidate.sdpMid||"",sdpMLineIndex:e.candidate.sdpMLineIndex||0})):n.debug("IceCandidateForwarder: No more ICE candidates.")}})({sendMessage:be,logging:fe}),r=e=>{var t;(Ne.resolve(),t=e.candidate,"relay"!==F.transportPolicy||null==t||-1!==t.candidate.indexOf("typ relay"))?n(e):fe.debug("Ignore candidate",e.candidate.candidate)},a=function(){var e=(0,o.default)(i.default.mark((function e(t){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:He(t);case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();let l=ye.iceConnectionState;const c=e=>{ye?(fe.debug("iceconnectionstatechange",ye.iceConnectionState),"connected"===ye.iceConnectionState?("disconnected"===l&&Ze.clearFailedTimeout(),Ze.emit("iceConnected"),Je.set(!1)):"completed"===ye.iceConnectionState&&M.isLegacyEdge&&setTimeout(()=>_e.startCollecting(ye),1e3)):fe.debug("iceconnectionstatechange on peerConnection that no longer exists",Ze);const t=e.target.iceConnectionState;Ze.trigger("iceConnectionStateChange",t),G("attachEventsToPeerConnection","iceconnectionstatechange",t),"disconnected"===t&&(Je.get()?(fe.debug("Restarting ice!"),Ze.generateOfferAndSend()):(0,B.default)()||(Ee=setTimeout(()=>{G("attachEventsToPeerConnection","iceconnectionstatechange","failed"),l="failed",Ze.trigger("iceConnectionStateChange","failed")},1e4))),"disconnected"!==l&&"failed"===t&&ze({reason:"The stream was unable to connect due to a network error. Make sure your connection isn't blocked by a firewall.",prefix:"ICEWorkflow"}),l=t},s=()=>{G("peerConnection:negotiationNeeded","Event"),p&&Ze.generateOfferAndSend(),Ze.trigger("negotiationNeeded")};ye.addEventListener("track",a),ye.addEventListener("icecandidate",r),ye.addEventListener("signalingstatechange",xe),ye.addEventListener("negotiationneeded",s),ye.addEventListener("iceconnectionstatechange",c),me.add(()=>{ye&&(ye.removeEventListener("track",a),ye.removeEventListener("icecandidate",r),ye.removeEventListener("signalingstatechange",xe),ye.removeEventListener("negotiationneeded",s),ye.removeEventListener("iceconnectionstatechange",c))}),we(null)},we=()=>{for(;Se.length;)Se.shift().call(null)},De=()=>{Ge&&(Ge.destroy(),Ge=null),Se=[],_e.stopCollecting(),me.releaseAll(),Ne.clean(),null!==ye&&(ye.destroy&&ye.destroy(),ye=null,Ze.trigger("close")),Ze.off()},xe=e=>{const t=e.target.signalingState;if(Ze.emit("signalingStateChange",t),"stable"===t&&Ze.emit("signalingStateStable"),t&&t!==Xe)switch(Xe=t,fe.debug("stateChange: "+Xe),Xe){case"closed":De()}},Me=()=>{let e;if(ye.getRemoteStreams)e=ye.getRemoteStreams();else{if(!ye.remoteStreams)throw new Error("Invalid Peer Connection object implements no method for retrieving remote streams");e=ye.remoteStreams}return Array.prototype.slice.call(e)},He=e=>{var t;const n=e.track,r=e.transceiver,i=e.stream||(null==(t=e.streams)?void 0:t[0]);G("createPeerConnection","TrackAdded"),Ze.trigger("trackAdded",{stream:i,track:n,transceiver:r})},Ke=(e,t,n)=>{k=!1,ze({reason:`PeerConnection.offerProcessor ${e}: ${t}`,prefix:n})},Le=e=>{if(k)return void(v=e);k=!0,G("peerConnection:processOffer","Event");const t=new se({type:"offer",sdp:e.content.sdp}),n=e=>{k=!1,Ge&&Ge.process(),be("answer",e),M.isLegacyEdge||_e.startCollecting(ye,p),v&&(Le(v),v=null)},r=e=>Ze.trigger("remoteVideoSupported",e);Te(()=>{P(ye,ie.RTCPeerConnection,ie.RTCSessionDescription,se,Re,t,I,R,n,Ke,r,T,y)})};Ze.setSendMessage=e=>{X=e},Ze.generateOfferAndSend=()=>{Ze.generateOffer(e=>{fe.debug("processSubscribe: sending offer"),be("offer",e)})},Ze.generateOffer=oe((function(e){void 0===e&&(e=()=>{}),Ue.enqueueOfferAnswer(()=>(e=>{var t,n;if("closed"===(null==(t=ye)||null==(n=t.signalingState)?void 0:n.toLowerCase()))return;G("peerConnection:processSubscribe","Event"),fe.debug("processSubscribe: Sending offer to subscriber.");let r=ve.get()?Ie.capableSimulcastStreams:1;"P2P"===y&&!R&&(r=1),Te(()=>{q({peerConnection:ye,NativeRTCSessionDescription:se,sdpTransforms:Re,numSimulcastStreams:r,removeVideoOrientation:he(),offerOverrides:Z,offerConstraints:{iceRestart:Je.get()},replaceBaselineProfile:T,removeUnusedCodecs:E}).then(t=>{fe.debug("processSubscribe: got offer, waiting for _readyToCompleteOffer"),Ce=t,Ne.promise.then(()=>e(Ce))},e=>{ze({reason:`subscribeProcessor ${e.message}: ${e.reason}`,prefix:e.prefix})}),Je.set(!1)})})(e))}),100);const ze=e=>{let t=e.reason,n=e.prefix;fe.error(t,"in state",ye?{connectionState:ye.connectionState,iceConnectionState:ye.iceConnectionState,iceGatheringState:ye.iceGatheringState,signalingState:ye.signalingState}:"(none)"),Ze.trigger("error",{reason:t,prefix:n})};function Oe(e){this.track=e}Ze.addTrack=(t,n)=>{const r=new e((e,t)=>{Te(n=>{if(n)return t(n);e()})}).then(()=>{if(ye.addTrack)return ye.addTrack(t,n);const e=ye.getLocalStreams()[0];if(void 0===e)throw new Error("PeerConnection has no existing streams, cannot addTrack");e.addTrack(t),Ze.generateOfferAndSend()}).then(()=>new e(e=>{Ze.once("signalingStateStable",()=>{e()})}));return(0,a.default)(r,15e3,"Renegotiation timed out")},Ze.setIceConfig=e=>{try{M.isFirefox&&(e.certificates=ye.getConfiguration().certificates),ye.setConfiguration(e)}catch(e){throw new U.default("A peer connection failed to set configuration with "+e.message,de.FAILED_SET_CONFIGURATION)}return Je.set(!0),ye},Ze.removeTrack=t=>{const n=e.resolve().then(()=>t instanceof Oe?(ye.getLocalStreams()[0].removeTrack(t.track),void Ze.generateOfferAndSend()):ye.removeTrack(t)).then(()=>new e(e=>{Ze.once("signalingStateStable",()=>{e()})}));return(0,a.default)(n,15e3,"Renegotiation timed out")},Ze.addLocalStream=t=>new e((e,n)=>{Te(r=>{if(r)n(r);else{try{t.getTracks&&t.getTracks().forEach(e=>ye.addTrack(e,t))}catch(e){return void n(e)}e()}})}),Ze.getLocalStreams=()=>ye.getLocalStreams(),Ze.getSenders=()=>ye.getSenders?ye.getSenders():ye.getLocalStreams()[0].getTracks().map(e=>new Oe(e)),Ze.disconnect=()=>{var e;Ge&&(Ge.destroy(),Ge=null),null!=(e=ye)&&e.signalingState&&"closed"!==ye.signalingState.toLowerCase()&&(ye.close(),"function"==typeof ee&&V.off("keyChanged",ee),Y=null,pe=null,setTimeout(De))},Ze.iceRestart=()=>Je.set(!0),Ze.clearFailedTimeout=()=>clearTimeout(Ee);const je=t=>{const n=t?te:ne;return new e(e=>{Ue.enqueueOfferAnswer((0,o.default)(i.default.mark((function t(){return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n(ye);case 2:Ue.setResolved(),e();case 4:case"end":return t.stop()}}),t)}))))})};Ze.changeMediaDirectionToRecvOnly=()=>je(!1),Ze.changeMediaDirectionToInactive=()=>je(!0),Ze.processMessage=(e,t)=>{switch(fe.debug(`processMessage: Received ${e} from ${t.fromAddress}`,t),fe.debug(t),e){case"generateoffer":t.content&&void 0!==t.content.simulcastEnabled&&ve.set(t.content.simulcastEnabled),Ze.generateOfferAndSend(),i();break;case"offer":Le(t),i();break;case"answer":case"pranswer":(e=>{G("peerConnection:processAnswer","Event");const t=e=>{"function"==typeof e.includes&&e.includes("Failed to parse SessionDescription. a=extmap-allow-mixed Expects at least 2 fields.")&&(e="SessionDescription issue has been fixed in Chrome 71 and above. Please update your browser."),ze({reason:"Error while setting RemoteDescription "+e,prefix:"SetRemoteDescription"})};e.content.sdp?(We=new se({type:"answer",sdp:r(Re,"remote","answer",(0,l.default)({replaceBaselineProfile:T},f),e.content.sdp).local}),ye.setRemoteDescription(We).then(()=>{fe.debug("processAnswer: setRemoteDescription Success"),Ge&&Ge.process()}).catch(t),Ue.setResolved(),M.isLegacyEdge||_e.startCollecting(ye,p)):t("Weird answer message, no SDP.")})(t);break;case"candidate":var n=new ce(t.content);Ge&&Ge.addIceCandidate(n).catch(e=>{fe.warn(`Error while adding ICE candidate: ${JSON.stringify(n)}: ${e.toString()}`)});break;default:fe.debug(`processMessage: Received an unexpected message of type ${e} from ${t.fromAddress}: ${JSON.stringify(t)}`)}function i(){Qe+=1,_e.handleOfferMessageReceived(),Qe>1&&(G("Renegotiation","Attempt"),Fe=!0)}return Ze};const Pe=e=>ye.getTransceivers().filter(t=>e.includes(t.mid));Ze.stopTransceivers=e=>{const t=Pe(e);var n;(n=t,n.sort((e,t)=>e.mid<t.mid?1:e.mid>t.mid?-1:0)).forEach(e=>e.stop())},Ze.setTransceiversToInactive=e=>{Pe(e).forEach(e=>{e.direction=D.default.INACTIVE})},Ze.remoteStreams=()=>ye?Me():[],Ze.remoteTracks=()=>ye?ye.getReceivers?Array.prototype.slice.apply(ye.getReceivers()).map(e=>e.track):Array.prototype.concat.apply([],Me().map(e=>e.getTracks())):[],Ze.remoteDescription=()=>ye.remoteDescription,Ze.getStats=(e,t)=>{if(ye)K(ye,e,t);else{const e=Ae.PEER_CONNECTION_NOT_CONNECTED;t(new U.default(ue.getTitleByCode(e),de.PEER_CONNECTION_NOT_CONNECTED,{code:e}))}},Ze.getRtcStatsReport=(e,t)=>{if(ye)L(ye,e,t);else{const e=Ae.PEER_CONNECTION_NOT_CONNECTED;t(new U.default(ue.getTitleByCode(e),de.PEER_CONNECTION_NOT_CONNECTED,{code:e}))}},Ze.getSynchronizationSources=e=>{if(!p){if(!ye){const t=Ae.PEER_CONNECTION_NOT_CONNECTED;return void e(new U.default(ue.getTitleByCode(t),de.PEER_CONNECTION_NOT_CONNECTED,{code:t}))}z(ye,e)}};Ze.getDataChannel=(e,t,n)=>{ye?function e(t,n,r,i){let o;const a=Ve.get(n,r);if(!a){if(t>0)return void setTimeout(e.bind(null,t-1,n,r,i),200);o=new U.default(`A channel with that label and options could not be found. Label:${n}. Options: ${JSON.stringify(r)}`)}i(o,a)}(100,e,t,n):n(new U.default("Cannot create a DataChannel before there is a connection."))},Ze.getSourceStreamId=()=>y,Ze.iceConnectionStateIsConnected=()=>ye&&["connected","completed"].indexOf(ye.iceConnectionState)>-1,Ze.hasTrack=e=>ye.getSenders().some(t=>t.track===e),Ze.findAndReplaceTrack=(t,n)=>e.resolve().then(()=>{const r=ye.getSenders().filter(e=>e.track===t)[0];if(!r)return e.resolve();if("function"!=typeof r.replaceTrack)throw new Error("Sender does not support replaceTrack");return r.replaceTrack(n)}),Ze.hasRelayCandidates=()=>d,Ze.getNegotiatedCodecs=()=>{if(!ye.localDescription||!ye.remoteDescription)return null;const e=e=>(0,s.default)(b.default.getCodecs(ye.localDescription.sdp,e),b.default.getCodecs(ye.remoteDescription.sdp,e));return{audio:e("audio"),video:e("video")}},Ze.on("signalingStateStable",()=>{Fe&&(Fe=!1,G("Renegotiation","Success",Ze.getNegotiatedCodecs()))}),Ze.on("error",e=>{let t=e.prefix;Fe&&-1!==["CreateOffer","SetRemoteDescription"].indexOf(t)&&(Fe=!1,G("Renegotiation","Failure"))}),Ze.on("close",()=>{Fe&&(Fe=!1,G("Renegotiation","Cancel"))});const _e=new re;return _e.on("stats",e=>{e.dataChannels=Ve.sampleQos(),Ze.trigger("qos",{parsedStats:e,simulcastEnabled:ve.get()})}),Ze}};var i=r(n(4)),o=r(n(5)),a=r(n(164)),l=r(n(9)),c=r(n(62)),s=r(n(149)),d=r(n(296)),u=r(n(297)),A=r(n(17)),h=r(n(6)),g=r(n(1)),Q=r(n(3)),F=r(n(10)),p=r(n(26)),U=r(n(272)),m=r(n(166)),b=r(n(19)),B=r(n(76)),Z=r(n(651)),f=r(n(653)),R=r(n(167)),I=r(n(654)),y=r(n(656)),V=r(n(302)),C=r(n(305)),W=r(n(660)),E=r(n(661)),S=r(n(663)),v=r(n(665)),J=r(n(667)),N=r(n(668)),G=r(n(670)),X=r(n(306)),k=r(n(674)),T=r(n(8)),Y=r(n(675)),w=r(n(51)),D=r(n(300))}).call(this,n(2))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(3));t.default=()=>!((i.default.isChrome||i.default.isElectron)&&i.default.version>=90||i.default.isOpera&&i.default.version>=76)&&(i.default.isChrome&&i.default.version>71||i.default.isChromiumEdge&&i.default.version<90||i.default.isOpera&&i.default.version>58)},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r={ACTIVE_VIDEO:0,ACTIVE_VIDEO_WITH_WARNING:1,SUSPENDED_VIDEO:2};t.default=r},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(39)),o=r(n(700)),a=r(n(11)),l=r(n(168));const c={};function s(e){return Number(e.framerateMean||e.googFrameRateSent||e.googFrameRateReceived||e.googFrameRateInput||e.googFrameRateOutput||0)}function d(e){return Number(e.framesEncoded||e.framesDecoded)}function u(e,t){if(s(e))return s(e);if(!d(e))return;let n=0;const r=c[e.id]?c[e.id].frames:0,i=c[e.id]?c[e.id].timestamp:t;return n=(0,l.default)({currentStatFrames:d(e),currentTimestamp:e.timestamp,prevStatFrames:r,prevTimestamp:i}),c[e.id]={frames:d(e),timestamp:e.timestamp},n}function A(e,t){if(!t)return{};const n=t.filter(t=>t.id===e.mediaTrackId);return n.length?n[0]:{}}function h(e,t){return"packetsLost"in t?e+t.packetsLost:e}const g={isVideoStat(e,t){const n=A(e,t);return"video"===e.kind&&["outbound-rtp","inbound-rtp"].includes(e.type)||"video"===e.mediaType||"googFrameWidthReceived"in e||"googFrameWidthInput"in e||"inbound-rtp"===e.type&&-1!==e.id.indexOf("Video")||"inboundrtp"===e.type&&0!==n.frameWidth},isAudioStat(e,t){const n=A(e,t);return"audio"===e.kind&&["outbound-rtp","inbound-rtp"].includes(e.type)||"audio"===e.mediaType||"audioInputLevel"in e||"audioOutputLevel"in e||"inbound-rtp"===e.type&&-1!==e.id.indexOf("Audio")||"inboundrtp"===e.type&&0===n.frameWidth},isInboundStat:e=>"bytesReceived"in e||"packetsReceived"in e,isOutboundStat:e=>"bytesSent"in e||"packetsSent"in e,isVideoTrackStat:e=>"track"===e.type&&(e.frameHeight>0||e.frameWidth>0||e.framesCorrupted>0||e.framesDecoded>0||e.framesPerSecond>0||e.framesSent>0||e.framesReceived>0),isVideoRemoteInboundRtpStat:e=>"remote-inbound-rtp"===e.type&&"video"===e.kind,isAudioRemoteInboundRtpStat:e=>"remote-inbound-rtp"===e.type&&"audio"===e.kind,isVideoInboundRtpStat:e=>"inbound-rtp"===e.type&&"video"===e.kind,parseStatCategory(e){const t={packetsLost:0,packetsReceived:0,bytesReceived:0};return"packetsReceived"in e&&(t.packetsReceived=parseInt(e.packetsReceived,10)),"packetsLost"in e&&(t.packetsLost=parseInt(e.packetsLost,10)),"bytesReceived"in e&&(t.bytesReceived=parseInt(e.bytesReceived,10)),this.isVideoStat(e)&&("framerateMean"in e?t.frameRate=Number(e.framerateMean):"googFrameRateOutput"in e?t.frameRate=Number(e.googFrameRateOutput):"googFrameRateInput"in e&&(t.frameRate=Number(e.googFrameRateInput))),t},getVideoPacketsLost(e){return e.filter(t=>this.isVideoRemoteInboundRtpStat(t,e)).reduce(h,0)},getAudioPacketsLost(e){return e.filter(t=>this.isAudioRemoteInboundRtpStat(t,e)).reduce(h,0)},normalizeTimestamp:(e,t)=>(void 0===t&&(t=Date.now()),(0,a.default)(e)&&"getTime"in e?e.getTime():Math.abs(e/(1e3*t)-1)<.05?e/1e3:e),normalizeStats(e,t,n){void 0===t&&(t=!0);const r=e.filter(t=>g.isVideoStat(t,e)).filter(e=>g.isInboundStat(e)===t),a=e.filter(t=>this.isAudioStat(t,e)).filter(e=>this.isInboundStat(e)===t)[0],l=r[0];if(!a&&!l)throw new Error("could not find stats for either audio or video");const c=g.normalizeTimestamp(l?l.timestamp:a.timestamp),s={timestamp:c};l&&!t&&void 0===l.packetsLost&&(l.packetsLost=this.getVideoPacketsLost(e)),a&&!t&&void 0===a.packetsLost&&(a.packetsLost=this.getAudioPacketsLost(e));const d=["packetsSent","packetsLost","bytesSent"],A=t?e=>(0,i.default)(e,["packetsReceived","packetsLost","bytesReceived"]):e=>(0,i.default)(e,d);if(r&&r.length>0){const e=(e=>{const t=d.concat(["framerateMean","googFrameRateSent","googFrameRateReceived","googFrameRateInput","googFrameRateOutput","framesEncoded","framesDecoded"]),n={timestamp:c,id:l.id};return t.forEach(t=>{n[t]=e.map(e=>Number(e[t]||0)).reduce((e,t)=>e+t,0)}),n})(r);s.video=Object.assign({frameRate:u(e,n)},(0,o.default)(A(e),Number))}return a&&(s.audio=(0,o.default)(A(a),Number)),s}};var Q=g;t.default=Q},function(e,t,n){"use strict";t.__esModule=!0,t.messages=t.default=t.codes=void 0;const r={1e3:"The connection successfully completed the purpose for which it was created.",1001:"The endpoint is going away, either because of a server failure or because the browser is navigating away from the page that opened the connection.",1002:"The endpoint is terminating the connection due to a protocol error. (CLOSE_PROTOCOL_ERROR)",1003:"The connection is being terminated because the endpoint has indicated that reconnections are not available. (CLOSE_UNSUPPORTED)",1005:"Indicates that no status code was provided even though one was expected. (CLOSE_NO_STATUS)",1006:"Used to indicate that a connection was closed abnormally (that is, with no close frame being sent) when a status code is expected. (CLOSE_ABNORMAL)",1007:"Indicates that an endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC3629] data within a text message)",1008:"Indicates that an endpoint is terminating the connection because it has received a message that violates its policy. This is a generic status code that can be returned when there is no other more suitable status code (e.g., 1003 or 1009) or if there is a need to hide specific details about the policy",1009:"Indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process (CLOSE_TOO_LARGE)",1011:"Indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request",4001:"Connectivity loss was detected as it was too long since the socket received the last PONG message",4010:"Timed out while waiting for the Rumor socket to connect.",4020:"Error code unavailable.",4030:"Exception was thrown during Rumor connection, possibly because of a blocked port."};t.messages=r;const i={CLOSE_NORMAL:1e3,CLOSE_GOING_AWAY:1001,CLOSE_PROTOCOL_ERROR:1002,CLOSE_UNSUPPORTED:1003,CLOSE_NO_STATUS:1005,CLOSE_ABNORMAL:1006,CLOSE_INCONSISTENT_DATA:1007,CLOSE_POLICY_VIOLATION:1008,CLOSE_TOO_LARGE:1009,CLOSE_UNEXPECTED_CONDITION:1011,CLOSE_CONNECTIVITY_LOSS:4001,CLOSE_TIMEOUT:4010,CLOSE_FALLBACK_CODE:4020,CLOSE_CONNECT_EXCEPTION:4030,ALREADY_CONNECTED_CONNECTING:null};t.codes=i;var o={messages:r,codes:i};t.default=o},function(e,t,n){var r=n(81),i=n(118),o=n(86),a=n(192),l=n(400),c=n(195),s=n(56),d=n(403),u=n(405),A=n(198),h=n(200),g=n(45),Q=n(408),F=n(409),p=n(205),U=n(14),m=n(66),b=n(413),B=n(11),Z=n(415),f=n(34),R=n(55),I={};I["[object Arguments]"]=I["[object Array]"]=I["[object ArrayBuffer]"]=I["[object DataView]"]=I["[object Boolean]"]=I["[object Date]"]=I["[object Float32Array]"]=I["[object Float64Array]"]=I["[object Int8Array]"]=I["[object Int16Array]"]=I["[object Int32Array]"]=I["[object Map]"]=I["[object Number]"]=I["[object Object]"]=I["[object RegExp]"]=I["[object Set]"]=I["[object String]"]=I["[object Symbol]"]=I["[object Uint8Array]"]=I["[object Uint8ClampedArray]"]=I["[object Uint16Array]"]=I["[object Uint32Array]"]=!0,I["[object Error]"]=I["[object Function]"]=I["[object WeakMap]"]=!1,e.exports=function e(t,n,y,V,C,W){var E,S=1&n,v=2&n,J=4&n;if(y&&(E=C?y(t,V,C,W):y(t)),void 0!==E)return E;if(!B(t))return t;var N=U(t);if(N){if(E=Q(t),!S)return s(t,E)}else{var G=g(t),X="[object Function]"==G||"[object GeneratorFunction]"==G;if(m(t))return c(t,S);if("[object Object]"==G||"[object Arguments]"==G||X&&!C){if(E=v||X?{}:p(t),!S)return v?u(t,l(E,t)):d(t,a(E,t))}else{if(!I[G])return C?t:{};E=F(t,G,S)}}W||(W=new r);var k=W.get(t);if(k)return k;W.set(t,E),Z(t)?t.forEach((function(r){E.add(e(r,n,y,r,t,W))})):b(t)&&t.forEach((function(r,i){E.set(i,e(r,n,y,i,t,W))}));var T=N?void 0:(J?v?h:A:v?R:f)(t);return i(T||t,(function(r,i){T&&(r=t[i=r]),o(E,i,e(r,n,y,i,t,W))})),E}},function(e,t,n){var r=n(82),i=n(372),o=n(373),a=n(374),l=n(375),c=n(376);function s(e){var t=this.__data__=new r(e);this.size=t.size}s.prototype.clear=i,s.prototype.delete=o,s.prototype.get=a,s.prototype.has=l,s.prototype.set=c,e.exports=s},function(e,t,n){var r=n(367),i=n(368),o=n(369),a=n(370),l=n(371);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=l,e.exports=c},function(e,t,n){var r=n(54);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},function(e,t,n){var r=n(42)(Object,"create");e.exports=r},function(e,t,n){var r=n(391);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},function(e,t,n){var r=n(64),i=n(54),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var a=e[t];o.call(e,t)&&i(a,n)&&(void 0!==n||t in e)||r(e,t,n)}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){var r=n(398),i=n(68),o=n(120),a=o&&o.isTypedArray,l=a?i(a):r;e.exports=l},function(e,t,n){var r=n(11),i=Object.create,o=function(){function e(){}return function(t){if(!r(t))return{};if(i)return i(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=o},function(e,t,n){var r=n(91),i=n(208),o=n(127);e.exports=function(e,t){return o(i(e,t,r),e+"")}},function(e,t){e.exports=function(e){return e}},function(e,t,n){"use strict";var r=Object.prototype.toString,i=r.call(function(){return arguments}());e.exports=function(e){return r.call(e)===i}},function(e,t,n){"use strict";var r=Object.prototype.toString,i=r.call("");e.exports=function(e){return"string"==typeof e||e&&"object"==typeof e&&(e instanceof String||r.call(e)===i)||!1}},function(e,t,n){"use strict";e.exports=n(442)()?globalThis:n(443)},function(e,t,n){"use strict";(function(e){t.__esModule=!0,t.default=function(t){return new e(e=>setTimeout(e,t))}}).call(this,n(2))},function(e,t,n){"use strict";(function(t){var r=n(13),i=n(49),o=n(485);function a(e){return r.isPlainObject(e)||r.isArray(e)}function l(e){return r.endsWith(e,"[]")?e.slice(0,-2):e}function c(e,t,n){return e?e.concat(t).map((function(e,t){return e=l(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}var s=r.toFlatObject(r,{},null,(function(e){return/^is[A-Z]/.test(e)}));e.exports=function(e,n,d){if(!r.isObject(e))throw new TypeError("target must be an object");n=n||new(o||FormData);var u,A=(d=r.toFlatObject(d,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!r.isUndefined(t[e])}))).metaTokens,h=d.visitor||U,g=d.dots,Q=d.indexes,F=(d.Blob||"undefined"!=typeof Blob&&Blob)&&((u=n)&&r.isFunction(u.append)&&"FormData"===u[Symbol.toStringTag]&&u[Symbol.iterator]);if(!r.isFunction(h))throw new TypeError("visitor must be a function");function p(e){if(null===e)return"";if(r.isDate(e))return e.toISOString();if(!F&&r.isBlob(e))throw new i("Blob is not supported. Use a Buffer instead.");return r.isArrayBuffer(e)||r.isTypedArray(e)?F&&"function"==typeof Blob?new Blob([e]):t.from(e):e}function U(e,t,i){var o=e;if(e&&!i&&"object"==typeof e)if(r.endsWith(t,"{}"))t=A?t:t.slice(0,-2),e=JSON.stringify(e);else if(r.isArray(e)&&function(e){return r.isArray(e)&&!e.some(a)}(e)||r.isFileList(e)||r.endsWith(t,"[]")&&(o=r.toArray(e)))return t=l(t),o.forEach((function(e,i){!r.isUndefined(e)&&null!==e&&n.append(!0===Q?c([t],i,g):null===Q?t:t+"[]",p(e))})),!1;return!!a(e)||(n.append(c(i,t,g),p(e)),!1)}var m=[],b=Object.assign(s,{defaultVisitor:U,convertValue:p,isVisitable:a});if(!r.isObject(e))throw new TypeError("data must be an object");return function e(t,i){if(!r.isUndefined(t)){if(-1!==m.indexOf(t))throw Error("Circular reference detected in "+i.join("."));m.push(t),r.forEach(t,(function(t,o){!0===(!(r.isUndefined(t)||null===t)&&h.call(n,t,r.isString(o)?o.trim():o,i,b))&&e(t,i?i.concat(o):[o])})),m.pop()}}(e),n}}).call(this,n(225).Buffer)},function(e,t,n){"use strict";var r=n(49);function i(e,t,n){r.call(this,null==e?"canceled":e,r.ERR_CANCELED,t,n),this.name="CanceledError"}n(13).inherits(i,r,{__CANCEL__:!0}),e.exports=i},function(e,t,n){var r=n(89),i=n(11);e.exports=function(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=r(e.prototype),o=e.apply(n,t);return i(o)?o:n}}},function(e,t,n){var r=n(521);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},function(e,t,n){var r=n(527);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},function(e,t,n){var r=n(117),i=n(537),o=n(538);function a(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}a.prototype.add=a.prototype.push=i,a.prototype.has=o,e.exports=a},function(e,t){e.exports=function(e,t){return e.has(t)}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},function(e,t,n){var r=n(60),i=n(50);e.exports=function(e,t){for(var n=0,o=(t=r(t,e)).length;null!=e&&n<o;)e=e[i(t[n++])];return n&&n==o?e:void 0}},function(e,t,n){var r=n(257),i=n(34);e.exports=function(e,t){return e&&r(e,t,i)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(258));const o=e=>e.replace(/\/$/,"");var a=(e,t)=>{if(!t)return e;const n=i.default.parse(t),r=i.default.parse(e);if(!n.protocol||!r.protocol)return e;const a=n.protocol.match(/^https/),l=r.protocol.match(/^ws/i);return`${o(`${(l?"ws":"http")+(a?"s":"")}://${n.host}${n.pathname}`)}/${o(`${r.host}${r.pathname}${r.search||""}`)}`};t.default=a},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;let r="";var i={getCurrentAudioOutputDeviceId:()=>r,setCurrentAudioOutputDeviceId:e=>{r=e}};t.default=i},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e,t){const n={};Object.keys(t).forEach(r=>{n[r]=((e,t,n)=>{if(t&&!n)return()=>t.call(e);if(t&&n)return r=>(void 0!==r&&n.call(e,r),t.call(e));return t=>{void 0!==t&&n.call(e,t)}})(e,t[r].get,t[r].set)}),(0,i.default)(e,n)};var i=r(n(9))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(206));var o=function(e){let t=(void 0===e?{}:e).NativeVideoElementWrapper;const n=void 0===t?(0,i.default)():t;return function(e){let t=void 0===e?{}:e,r=t.fallbackText,i=void 0===r?"Sorry, Web RTC is not available in your browser":r,o=t.fitMode,a=t.muted,l=t._inject,c=t.widgetType;return new n({fallbackText:i,fitMode:o,muted:a,defaultAudioVolume:50,_inject:l,widgetType:c})}};t.default=o},function(e,t,n){"use strict";function r(e){return e.map(e=>({url:e.url,urls:e.urls||[e.url],username:e.username,credential:e.credential}))}t.__esModule=!0,t.adaptIceServers=r,t.parseIceServers=function(e){let t;try{t=JSON.parse(e.data).content.iceServers}catch(e){return[]}return r(t)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(3));t.default=()=>"Chrome"===i.default.name&&i.default.version>=58||-1!==["Firefox","Edge","Safari","Opera"].indexOf(i.default.name)},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){let t=null,n=!1;const r=()=>{n&&(e(),t=window.requestAnimationFrame(r))};this.start=()=>{n||(n=!0,t=window.requestAnimationFrame(r))},this.stop=()=>{window.cancelAnimationFrame(t),n=!1}}},function(e,t,n){"use strict";t.__esModule=!0,t.ONE_SECOND_IN_MS=t.ONE_MINUTE_IN_MS=void 0;t.ONE_SECOND_IN_MS=1e3;t.ONE_MINUTE_IN_MS=6e4},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CancellationError=t.default=void 0;var r=o(n(707)),i=o(n(328));function o(e){return e&&e.__esModule?e:{default:e}}t.default=r.default,t.CancellationError=i.default},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i,o,a=r(n(53)),l=r(n(3));const c=!!window.crypto,s=!!window.RTCRtpScriptTransform&&!l.default.isFirefox,d=!(null==(i=window.RTCRtpSender)||!i.prototype.createEncodedStreams)||!(null==(o=window.RTCRtpSender)||!o.prototype.createdEncodedVideoStreams)||s,u=!!window.Worker,A=()=>c&&d&&u;t.default=function(e){void 0===e&&(e={});const t=e.hasOpenTokSupport||a.default.once,n=e.isE2eeSupported||A;return t()&&n()}},function(e,t,n){var r=n(42)(n(16),"Map");e.exports=r},function(e,t,n){var r=n(383),i=n(390),o=n(392),a=n(393),l=n(394);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=l,e.exports=c},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},function(e,t){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){(function(e){var r=n(189),i=t&&!t.nodeType&&t,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===i&&r.process,l=function(){try{var e=o&&o.require&&o.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(e){}}();e.exports=l}).call(this,n(87)(e))},function(e,t,n){var r=n(69),i=n(399),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return i(e);var t=[];for(var n in Object(e))o.call(e,n)&&"constructor"!=n&&t.push(n);return t}},function(e,t,n){var r=n(404),i=n(196),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,l=a?function(e){return null==e?[]:(e=Object(e),r(a(e),(function(t){return o.call(e,t)})))}:i;e.exports=l},function(e,t){e.exports=function(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}},function(e,t,n){var r=n(194)(Object.getPrototypeOf,Object);e.exports=r},function(e,t,n){var r=n(203);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},function(e,t){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var r=n(419),i=n(209)(r);e.exports=i},function(e,t,n){var r=n(54),i=n(29),o=n(67),a=n(11);e.exports=function(e,t,n){if(!a(n))return!1;var l=typeof t;return!!("number"==l?i(n)&&o(t,n.length):"string"==l&&t in n)&&r(n[t],e)}},function(e,t,n){var r=n(117);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r={error:{priority:1,method:"error"},warn:{priority:2,method:"warn"},info:{priority:3,method:"info"},log:{priority:4,method:"log"},debug:{priority:5,method:"debug"},spam:{priority:6,method:"log"}};t.default=r},function(e,t,n){"use strict";e.exports=n(211)()?Object.setPrototypeOf:n(212)},function(e,t,n){"use strict";var r=n(57),i={object:!0,function:!0,undefined:!0};e.exports=function(e){return!!r(e)&&hasOwnProperty.call(i,typeof e)}},function(e,t,n){"use strict";e.exports=n(433)()?Object.assign:n(434)},function(e,t,n){"use strict";(function(t){var r=n(13),i=n(226),o=n(49),a=n(227),l=n(96),c=n(490),s=n(135),d=n(228),u={"Content-Type":"application/x-www-form-urlencoded"};function A(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var h,g={transitional:a,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==t&&"[object process]"===Object.prototype.toString.call(t))&&(h=n(229)),h),transformRequest:[function(e,t){i(t,"Accept"),i(t,"Content-Type");var n,o=t&&t["Content-Type"]||"",a=o.indexOf("application/json")>-1,s=r.isObject(e);if(s&&r.isHTMLForm(e)&&(e=new FormData(e)),r.isFormData(e))return a?JSON.stringify(d(e)):e;if(r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e))return e;if(r.isArrayBufferView(e))return e.buffer;if(r.isURLSearchParams(e))return A(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();if(s){if(-1!==o.indexOf("application/x-www-form-urlencoded"))return c(e,this.formSerializer).toString();if((n=r.isFileList(e))||o.indexOf("multipart/form-data")>-1){var u=this.env&&this.env.FormData;return l(n?{"files[]":e}:e,u&&new u,this.formSerializer)}}return s||a?(A(t,"application/json"),function(e,t,n){if(r.isString(e))try{return(t||JSON.parse)(e),r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||g.transitional,n=t&&t.forcedJSONParsing,i="json"===this.responseType;if(e&&r.isString(e)&&(n&&!this.responseType||i)){var a=!(t&&t.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(e){if(a){if("SyntaxError"===e.name)throw o.from(e,o.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:s.classes.FormData,Blob:s.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){g.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){g.headers[e]=r.merge(u)})),e.exports=g}).call(this,n(24))},function(e,t,n){"use strict";e.exports=n(491)},function(e,t){e.exports={}},function(e,t,n){var r=n(235),i=n(510),o=n(511),a=n(237),l=n(525),c=n(241),s=n(526),d=n(244),u=n(245),A=n(100),h=Math.max;e.exports=function(e,t,n,g,Q,F,p,U){var m=2&t;if(!m&&"function"!=typeof e)throw new TypeError("Expected a function");var b=g?g.length:0;if(b||(t&=-97,g=Q=void 0),p=void 0===p?p:h(A(p),0),U=void 0===U?U:A(U),b-=Q?Q.length:0,64&t){var B=g,Z=Q;g=Q=void 0}var f=m?void 0:c(e),R=[e,t,n,g,Q,B,Z,F,p,U];if(f&&s(R,f),e=R[0],t=R[1],n=R[2],g=R[3],Q=R[4],!(U=R[9]=void 0===R[9]?m?0:e.length:h(R[9]-b,0))&&24&t&&(t&=-25),t&&1!=t)I=8==t||16==t?o(e,t,U):32!=t&&33!=t||Q.length?a.apply(void 0,R):l(e,t,n,g);else var I=i(e,t,n);return u((f?r:d)(I,R),e,t)}},function(e,t,n){var r=n(89),i=n(139);function o(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}o.prototype=r(i.prototype),o.prototype.constructor=o,e.exports=o},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n];a!==t&&"__lodash_placeholder__"!==a||(e[n]="__lodash_placeholder__",o[i++]=n)}return o}},function(e,t,n){var r=n(33),i=n(124),o=n(21),a=Function.prototype,l=Object.prototype,c=a.toString,s=l.hasOwnProperty,d=c.call(Object);e.exports=function(e){if(!o(e)||"[object Object]"!=r(e))return!1;var t=i(e);if(null===t)return!0;var n=s.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==d}},function(e,t,n){var r=n(536),i=n(21);e.exports=function e(t,n,o,a,l){return t===n||(null==t||null==n||!i(t)&&!i(n)?t!=t&&n!=n:r(t,n,o,a,e,l))}},function(e,t,n){var r=n(14),i=n(71),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(a.test(e)||!o.test(e)||null!=t&&e in Object(t))}},function(e,t,n){var r=n(551),i=n(208),o=n(127);e.exports=function(e){return o(i(e,void 0,r),e+"")}},function(e,t,n){"use strict";let r;t.__esModule=!0,t.default=function(e){void 0===e&&(e={});const t=e.AudioContext||(void 0!==typeof window?window:global).AudioContext||(void 0!==typeof window?window:global).webkitAudioContext;return function(){if(r=r||t&&new t,null==r)throw new Error("AudioContext could not be created, hardware limit reached.");return r}}},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;let r=function(){function e(e){this._analyser=null,this._timeDomainData=null,this._sourceNode=null,this._audioContext=e}var t=e.prototype;return t._initAudioAnalyser=function(e){this._analyser=this._audioContext.createAnalyser(),this._sourceNode=this._audioContext.createMediaStreamSource(e),this._sourceNode.connect(this._analyser),this._timeDomainData=new Uint8Array(this._analyser.frequencyBinCount)},t.webRTCStream=function(e){this._sourceNode&&this._sourceNode.disconnect(this._analyser),"suspended"===this._audioContext.state&&this._audioContext.resume(),this._initAudioAnalyser(e)},t.destroy=function(){this._sourceNode&&this._sourceNode.disconnect(this._analyser),this._timeDomainData=null},t.sample=function(e){if("function"==typeof e)throw new Error("sample no longer takes a callback");if(this._analyser&&this._timeDomainData){this._analyser.getByteTimeDomainData(this._timeDomainData);let e=0;for(let t=this._timeDomainData.length-1;t>=0;t-=1)e=Math.max(e,Math.abs(this._timeDomainData[t]-128));return e/128}return null},e}();t.default=r},function(e,t,n){var r=n(90),i=n(54),o=n(128),a=n(55),l=Object.prototype,c=l.hasOwnProperty,s=r((function(e,t){e=Object(e);var n=-1,r=t.length,s=r>2?t[2]:void 0;for(s&&o(t[0],t[1],s)&&(r=1);++n<r;)for(var d=t[n],u=a(d),A=-1,h=u.length;++A<h;){var g=u[A],Q=e[g];(void 0===Q||i(Q,l[g])&&!c.call(e,g))&&(e[g]=d[g])}return e}));e.exports=s},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(9)),o=r(n(149));const a=(0,r(n(1)).default)("Event");let l=function(){function e(e,t,n){void 0===t&&(t=!0),void 0===n&&(n={}),this.type=e,this.cancelable=t,this._defaultPrevented=!1;const r=(0,o.default)(Object.keys(this),Object.keys(n));if(r.length>0)throw new Error("Cannot used reserved property names: "+r.join(","));(0,i.default)(this,n)}var t=e.prototype;return t.preventDefault=function(){this.cancelable?this._defaultPrevented=!0:a.warn("Event.preventDefault :: Trying to preventDefault on an event that isn't cancelable")},t.isDefaultPrevented=function(){return this._defaultPrevented},e}();t.default=l},function(e,t,n){var r=n(38),i=n(579),o=n(90),a=n(580),l=o((function(e){var t=r(e,a);return t.length&&t[0]===e[0]?i(t):[]}));e.exports=l},function(e,t){e.exports=function(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}},function(e,t,n){var r=n(29),i=n(21);e.exports=function(e){return i(e)&&r(e)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(25)),o=r(n(62)),a=r(n(59));var l=function(){function e(e){void 0===e&&(e={}),Object.defineProperty(this,"_rawSessionInfo",{value:(0,o.default)(e)})}return(0,i.default)(e,[{key:"sessionId",get:function(){return this._rawSessionInfo.session_id}},{key:"partnerId",get:function(){return this._rawSessionInfo.partner_id}},{key:"messagingServer",get:function(){return this._rawSessionInfo.messaging_server_url}},{key:"mediaServerName",get:function(){return this._rawSessionInfo.media_server_hostname}},{key:"messagingURL",get:function(){return this._rawSessionInfo.messaging_url}},{key:"symphonyAddress",get:function(){return this._rawSessionInfo.symphony_address}},{key:"iceServers",get:function(){return this._rawSessionInfo.ice_servers}},{key:"simulcast",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.simulcast")}},{key:"e2ee",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.e2ee",!1)}},{key:"reconnection",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.reconnection",!1)}},{key:"renegotiation",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.renegotiation",!1)}},{key:"p2pEnabled",get:function(){return"enabled"===(0,a.default)(this._rawSessionInfo,"properties.p2p.preference.value")}},{key:"hybridSession",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.hybridSession",!1)}},{key:"isAdaptiveEnabled",get:function(){return"adaptive"===(0,a.default)(this._rawSessionInfo,"properties.p2p.preference.value")}},{key:"priorityVideoCodec",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.priorityVideoCodec","")}},{key:"h264",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.h264",!0)}},{key:"vp8",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.vp8",!0)}},{key:"vp9",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.vp9",!0)}},{key:"singlePeerConnection",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.singlePeerConnection",!1)}},{key:"clientCandidates",get:function(){const e=(0,a.default)(this._rawSessionInfo,"properties.clientCandidates");return"relayed"===e?"relay":e}}]),e}();t.default=l},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;t.default=()=>document.createElement("video")},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){return{ROTATED_NORMAL:0,ROTATED_LEFT:270,ROTATED_RIGHT:90,ROTATED_UPSIDE_DOWN:180}}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){if(void 0!==e.adapter||l.default.isLegacyEdge)return e;const t=(e=>{const t={},n=(e,t,n)=>{n.forEach(n=>{let r=n.key,i=n.type,o=t[r];if(void 0!==o){switch(i){case"function":o=((e,t)=>{if("function"!=typeof t)return c.warn("Non-function passed into bindWithStaticProperties()"),t;const n=t.bind(e);return Object.keys(t).forEach(e=>{n[e]=t[e]}),n})(t,o);break;case"class":o="function"!=typeof(l=o)?(c.warn("Non-function passed into extendClass()"),l):(0,a.default)(l);break;case"string":case"object":break;default:throw new Error("Invalid type of window key: "+i)}e[r]=o}var l})};n(t,e,s),void 0!==e.navigator&&(t.navigator={},n(t.navigator,e.navigator,d),void 0!==e.navigator.mediaDevices&&(t.navigator.mediaDevices={},n(t.navigator.mediaDevices,e.navigator.mediaDevices,u)));return t})(e);return(0,i.default)({window:t}),t};var i=r(n(596)),o=r(n(1)),a=r(n(607)),l=r(n(3));const c=(0,o.default)("createWindowMock"),s=[{key:"location",type:"object"},{key:"setTimeout",type:"function"},{key:"requestAnimationFrame",type:"function"},{key:"URL",type:"function"},{key:"MediaStream",type:"class"},{key:"webkitMediaStream",type:"class"},{key:"RTCIceCandidate",type:"class"},{key:"mozRTCIceCandidate",type:"class"},{key:"RTCSessionDescription",type:"class"},{key:"mozRTCSessionDescription",type:"class"},{key:"RTCIceGatherer",type:"class"},{key:"RTCIceTransport",type:"class"},{key:"RTCDtlsTransport",type:"class"},{key:"RTCSctpTransport",type:"class"},{key:"RTCRtpReceiver",type:"class"},{key:"HTMLMediaElement",type:"class"},{key:"RTCPeerConnection",type:"class"},{key:"webkitRTCPeerConnection",type:"class"},{key:"mozRTCPeerConnection",type:"class"},{key:"MediaStreamTrack",type:"class"},{key:"RTCRtpSender",type:"class"},{key:"RTCTrackEvent",type:"class"},{key:"RTCTransceiver",type:"class"},{key:"RTCDtmfSender",type:"class"},{key:"RTCDTMFSender",type:"class"},{key:"MediaStreamTrackEvent",type:"class"}],d=[{key:"userAgent",type:"string"},{key:"getUserMedia",type:"function"},{key:"getDisplayMedia",type:"function"},{key:"webkitGetUserMedia",type:"function"},{key:"mozGetUserMedia",type:"function"}],u=[{key:"getUserMedia",type:"function"},{key:"getDisplayMedia",type:"function"},{key:"enumerateDevices",type:"function"},{key:"getSupportedConstraints",type:"function"},{key:"addEventListener",type:"function"},{key:"removeEventListener",type:"function"}]},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){let e=null;this.transform=t=>{e=null===e||t>=e?t:.3*t+.7*e;const n=Math.log(e)/Math.LN10/1.5+1;return Math.min(Math.max(n,0),1)}}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){const t={},n=(n,r)=>{(0,i.default)(r,{parent:this}),r.appendTo(e.parent),t[n]=r,this[n]=r};if(!e.parent)return;(0,o.default)(this),this.destroy=()=>{this.off(),this.hideWhileLoading(),a(t).forEach(e=>e.destroy())},this.showAfterLoading=()=>{a(t).forEach(e=>e.showAfterLoading())},this.hideWhileLoading=()=>{a(t).forEach(e=>e.hideWhileLoading())},this.set=(e,t)=>("string"==typeof e&&t?n(e,t):Object.keys(e).forEach(t=>{n(t,e[t])}),this)};var i=r(n(9)),o=r(n(6));const a=e=>Object.keys(e).map(t=>e[t])},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(6)),o=r(n(30)),a=r(n(608));const l=(0,r(n(18)).default)(),c=(0,a.default)();var s=new function(){const e=this;function t(){return c.isDomLoaded()&&!c.isDomUnloaded()}function n(){e.dispatchEvent(new l.EnvLoadedEvent(o.default.ENV_UNLOADED))}(0,i.default)(e),c.whenLoaded.then((function(){c.whenUnloaded.then(n),t()&&e.dispatchEvent(new l.EnvLoadedEvent(o.default.ENV_LOADED))})),this.onLoad=function(n,r){t()?n.call(r):e.on(o.default.ENV_LOADED,n,r)},this.onUnload=function(t,n){this.isUnloaded()?t.call(n):e.on(o.default.ENV_UNLOADED,t,n)},this.isUnloaded=function(){return c.isDomUnloaded()}};t.default=s},function(e,t,n){"use strict";var r=n(614);
|
|
17
|
+
*/var n;n=function(){"use strict";function e(e){return"function"==typeof e}var n=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},r=0,i=void 0,o=void 0,a=function(e,t){h[r]=e,h[r+1]=t,2===(r+=2)&&(o?o(g):m())},l="undefined"!=typeof window?window:void 0,c=l||{},s=c.MutationObserver||c.WebKitMutationObserver,d="undefined"==typeof self&&void 0!==t&&"[object process]"==={}.toString.call(t),u="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function A(){var e=setTimeout;return function(){return e(g,1)}}var h=new Array(1e3);function g(){for(var e=0;e<r;e+=2)(0,h[e])(h[e+1]),h[e]=void 0,h[e+1]=void 0;r=0}var Q,F,p,U,m=void 0;function b(e,t){var n=this,r=new this.constructor(f);void 0===r[Z]&&J(r);var i=n._state;if(i){var o=arguments[i-1];a((function(){return S(i,r,o,n._result)}))}else W(n,r,e,t);return r}function B(e){if(e&&"object"==typeof e&&e.constructor===this)return e;var t=new this(f);return I(t,e),t}d?m=function(){return t.nextTick(g)}:s?(F=0,p=new s(g),U=document.createTextNode(""),p.observe(U,{characterData:!0}),m=function(){U.data=F=++F%2}):u?((Q=new MessageChannel).port1.onmessage=g,m=function(){return Q.port2.postMessage(0)}):m=void 0===l?function(){try{var e=Function("return this")().require("vertx");return void 0!==(i=e.runOnLoop||e.runOnContext)?function(){i(g)}:A()}catch(e){return A()}}():A();var Z=Math.random().toString(36).substring(2);function f(){}function R(t,n,r){n.constructor===t.constructor&&r===b&&n.constructor.resolve===B?function(e,t){1===t._state?V(e,t._result):2===t._state?C(e,t._result):W(t,void 0,(function(t){return I(e,t)}),(function(t){return C(e,t)}))}(t,n):void 0===r?V(t,n):e(r)?function(e,t,n){a((function(e){var r=!1,i=function(e,t,n,r){try{e.call(t,n,r)}catch(e){return e}}(n,t,(function(n){r||(r=!0,t!==n?I(e,n):V(e,n))}),(function(t){r||(r=!0,C(e,t))}),e._label);!r&&i&&(r=!0,C(e,i))}),e)}(t,n,r):V(t,n)}function I(e,t){if(e===t)C(e,new TypeError("You cannot resolve a promise with itself"));else if(i=typeof(r=t),null===r||"object"!==i&&"function"!==i)V(e,t);else{var n=void 0;try{n=t.then}catch(t){return void C(e,t)}R(e,t,n)}var r,i}function y(e){e._onerror&&e._onerror(e._result),E(e)}function V(e,t){void 0===e._state&&(e._result=t,e._state=1,0!==e._subscribers.length&&a(E,e))}function C(e,t){void 0===e._state&&(e._state=2,e._result=t,a(y,e))}function W(e,t,n,r){var i=e._subscribers,o=i.length;e._onerror=null,i[o]=t,i[o+1]=n,i[o+2]=r,0===o&&e._state&&a(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r=void 0,i=void 0,o=e._result,a=0;a<t.length;a+=3)r=t[a],i=t[a+n],r?S(n,r,i,o):i(o);e._subscribers.length=0}}function S(t,n,r,i){var o=e(r),a=void 0,l=void 0,c=!0;if(o){try{a=r(i)}catch(e){c=!1,l=e}if(n===a)return void C(n,new TypeError("A promises callback cannot return that same promise."))}else a=i;void 0!==n._state||(o&&c?I(n,a):!1===c?C(n,l):1===t?V(n,a):2===t&&C(n,a))}var v=0;function J(e){e[Z]=v++,e._state=void 0,e._result=void 0,e._subscribers=[]}var N=function(){function e(e,t){this._instanceConstructor=e,this.promise=new e(f),this.promise[Z]||J(this.promise),n(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?V(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&V(this.promise,this._result))):C(this.promise,new Error("Array Methods must be provided an Array"))}return e.prototype._enumerate=function(e){for(var t=0;void 0===this._state&&t<e.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===B){var i=void 0,o=void 0,a=!1;try{i=e.then}catch(e){a=!0,o=e}if(i===b&&void 0!==e._state)this._settledAt(e._state,t,e._result);else if("function"!=typeof i)this._remaining--,this._result[t]=e;else if(n===G){var l=new n(f);a?C(l,o):R(l,e,i),this._willSettleAt(l,t)}else this._willSettleAt(new n((function(t){return t(e)})),t)}else this._willSettleAt(r(e),t)},e.prototype._settledAt=function(e,t,n){var r=this.promise;void 0===r._state&&(this._remaining--,2===e?C(r,n):this._result[t]=n),0===this._remaining&&V(r,this._result)},e.prototype._willSettleAt=function(e,t){var n=this;W(e,void 0,(function(e){return n._settledAt(1,t,e)}),(function(e){return n._settledAt(2,t,e)}))},e}(),G=function(){function t(e){this[Z]=v++,this._result=this._state=void 0,this._subscribers=[],f!==e&&("function"!=typeof e&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof t?function(e,t){try{t((function(t){I(e,t)}),(function(t){C(e,t)}))}catch(t){C(e,t)}}(this,e):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return t.prototype.catch=function(e){return this.then(null,e)},t.prototype.finally=function(t){var n=this.constructor;return e(t)?this.then((function(e){return n.resolve(t()).then((function(){return e}))}),(function(e){return n.resolve(t()).then((function(){throw e}))})):this.then(t,t)},t}();return G.prototype.then=b,G.all=function(e){return new N(this,e).promise},G.race=function(e){var t=this;return n(e)?new t((function(n,r){for(var i=e.length,o=0;o<i;o++)t.resolve(e[o]).then(n,r)})):new t((function(e,t){return t(new TypeError("You must pass an array to race."))}))},G.resolve=B,G.reject=function(e){var t=new this(f);return C(t,e),t},G._setScheduler=function(e){o=e},G._setAsap=function(e){a=e},G._asap=a,G.polyfill=function(){var e=void 0;if(void 0!==(void 0!==typeof window?window:global))e=void 0!==typeof window?window:global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var t=e.Promise;if(t){var n=null;try{n=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===n&&!t.cast)return}e.Promise=G},G.Promise=G,G},e.exports=n()}).call(this,n(24))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(477)).default.parse();t.default=i},function(e,t,n){e.exports=n(417)},function(e,t,n){(function(t){function n(e,n,r,i,o,a,l){try{var c=e[a](l),s=c.value}catch(e){return void r(e)}c.done?n(s):t.resolve(s).then(i,o)}e.exports=function(e){return function(){var r=this,i=arguments;return new t((function(t,o){var a=e.apply(r,i);function l(e){n(a,t,o,l,c,"next",e)}function c(e){n(a,t,o,l,c,"throw",e)}l(void 0)}))}}}).call(this,n(2))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){const t=new a.default;t.on("newListener",e=>{t.emit(e+":added")}),t.on("removeListener",e=>{t.emit(e+":removed")});const n={eventsDispatched:{},on(e,n,r){return"string"==typeof e&&n?e.split(" ").forEach(e=>{t.on(e,(0,c.default)(n,r))}):Object.keys(e).forEach(r=>{t.on(r,(0,c.default)(e[r],n))}),this},off(e,n,r){return"string"==typeof e?this.off(e.split(" "),n,r):Array.isArray(e)?e.forEach(e=>{n&&(0,o.default)(n)?t.removeListener(e,(0,c.default)(n,r)):t.removeAllListeners(e)}):e?Object.keys(e).forEach(r=>{t.removeListener(r,(0,c.default)(e[r],n))}):t.removeAllListeners(),this},once(e,n,r){return"string"==typeof e&&n?e.split(" ").forEach(e=>{t.once(e,(0,c.default)(n,r))}):Object.keys(e).forEach(r=>{t.once(r,(0,c.default)(e[r],n))}),this},dispatchEvent(e){if(!e.type)throw new Error("dispatchEvent: Event has no type");return e.target||(e.target=this),this.trigger(e.type,e),this},dispatchEventOnce(e,t){this.isEventDispatched(e.type,t)||(this.dispatchEvent(e),this.eventsDispatched[e.type]?this.eventsDispatched[e.type].push(t):this.eventsDispatched[e.type]=[t])},isEventDispatched(e,t){var n;return null==(n=this.eventsDispatched[e])?void 0:n.includes(t)},trigger(e){try{for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];t.emit(e,...r)}catch(e){s.error("An error occurred in an event handler",e)}return this},emit(){return e.trigger(...arguments)},addEventListener:(t,n,r)=>(s.warn("The addEventListener() method is deprecated. Use on() or once() instead."),e.on(t,n,r)),removeEventListener:(t,n,r)=>(s.warn("The removeEventListener() method is deprecated. Use off() instead."),e.off(t,n,r)),listenerCount:e=>t.listenerCount(e)};return(0,i.default)(e,n)};var i=r(n(9)),o=r(n(20)),a=r(n(12)),l=r(n(1)),c=r(n(424));const s=(0,l.default)("Events")},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(147)),o=r(n(262)),a=r(n(6)),l=r(n(1)),c=r(n(3)),s=r(n(264)),d=r(n(263)),u=r(n(265)),A=r(n(575)),h=r(n(267)),g=r(n(270)),Q=r(n(588)),F=r(n(272));o.default.logging=(0,l.default)("OT.$"),o.default.env=c.default,o.default.ElementCollection=d.default,o.default.ajax=u.default,o.default.statable=A.default,o.default.Analytics=h.default,o.default.Collection=g.default,o.default.domExtras=Q.default,o.default.Error=F.default,(0,s.default)(o.default,"useLogHelpers",{value(e){const t=(0,l.default)("useLogHelpersDeprecatedMixin");return Object.keys(t).forEach(n=>{e[n]=t[n]}),e},name:"OT.useLogHelpers",getWarning:"Please use an external library for your debugging needs"}),o.default.defaults=i.default,(0,s.default)(o.default,"eventing",{value:a.default,name:"OT.$.eventing",getWarning:"Please use an external library to create an event emitter."}),Object.keys(o.default).forEach(e=>{const t=o.default[e]._attachToOTHelpers||{};Object.keys(t).forEach(n=>{!Object.hasOwnProperty.call(o.default,n)||"util"===e&&"bind"===n||console.warn(`More than one module is trying to define ${n} on OTHelpers.`),o.default[n]=t[n]})});var p=o.default;t.default=p},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;t.default={AUTHENTICATION_ERROR:"OT_AUTHENTICATION_ERROR",BADLY_FORMED_RESPONSE:"OT_BADLY_FORMED_RESPONSE",CHROME_MICROPHONE_ACQUISITION_ERROR:"OT_CHROME_MICROPHONE_ACQUISITION_ERROR",CONNECT_FAILED:"OT_CONNECT_FAILED",CONNECTION_LIMIT_EXCEEDED:"OT_CONNECTION_LIMIT_EXCEEDED",CONSTRAINTS_NOT_SATISFIED:"OT_CONSTRAINTS_NOT_SATISFIED",CREATE_PEER_CONNECTION_FAILED:"OT_CREATE_PEER_CONNECTION_FAILED",DISCONNECTED:"OT_DISCONNECTED",EMPTY_RESPONSE_BODY:"OT_EMPTY_RESPONSE_BODY",GET_RTC_STATS_REPORT_NOT_SUPPORTED:"OT_GET_RTC_STATS_REPORT_NOT_SUPPORTED",HARDWARE_UNAVAILABLE:"OT_HARDWARE_UNAVAILABLE",ICE_WORKFLOW_FAILED:"OT_ICE_WORKFLOW_FAILED",INVALID_HTTP_STATUS:"OT_INVALID_HTTP_STATUS",INVALID_PARAMETER:"OT_INVALID_PARAMETER",INVALID_SESSION_ID:"OT_INVALID_SESSION_ID",MEDIA_ERR_ABORTED:"OT_MEDIA_ERR_ABORTED",MEDIA_ERR_DECODE:"OT_MEDIA_ERR_DECODE",MEDIA_ERR_NETWORK:"OT_MEDIA_ERR_NETWORK",MEDIA_ERR_SRC_NOT_SUPPORTED:"OT_MEDIA_ERR_SRC_NOT_SUPPORTED",MEDIA_ENDED:"OT_MEDIA_ENDED",NO_DEVICES_FOUND:"OT_NO_DEVICES_FOUND",NO_VALID_CONSTRAINTS:"OT_NO_VALID_CONSTRAINTS",NOT_CONNECTED:"OT_NOT_CONNECTED",NOT_FOUND:"OT_NOT_FOUND",NOT_SUPPORTED:"OT_NOT_SUPPORTED",PEER_CONNECTION_NOT_CONNECTED:"OT_PEER_CONNECTION_NOT_CONNECTED",PERMISSION_DENIED:"OT_PERMISSION_DENIED",RATE_LIMIT_EXCEEDED:"OT_RATE_LIMIT_EXCEEDED",REPORT_ISSUE_FAILED:"OT_REPORT_ISSUE_FAILED",SCREEN_SHARING_EXTENSION_NOT_INSTALLED:"OT_SCREEN_SHARING_EXTENSION_NOT_INSTALLED",SCREEN_SHARING_EXTENSION_NOT_REGISTERED:"OT_SCREEN_SHARING_EXTENSION_NOT_REGISTERED",SCREEN_SHARING_NOT_SUPPORTED:"OT_SCREEN_SHARING_NOT_SUPPORTED",SET_REMOTE_DESCRIPTION_FAILED:"OT_SET_REMOTE_DESCRIPTION_FAILED",FAILED_SET_CONFIGURATION:"OT_FAILED_SET_CONFIGURATION",SOCKET_ALREADY_CONNECTED_CONNECTING:"OT_SOCKET_ALREADY_CONNECTED_CONNECTING",SOCKET_CLOSE_ABNORMAL:"OT_SOCKET_CLOSE_ABNORMAL",SOCKET_CLOSE_CONNECT_EXCEPTION:"OT_SOCKET_CLOSE_CONNECT_EXCEPTION",SOCKET_CLOSE_CONNECTIVITY_LOSS:"OT_SOCKET_CLOSE_CONNECTIVITY_LOSS",SOCKET_CLOSE_FALLBACK_CODE:"OT_SOCKET_CLOSE_FALLBACK_CODE",SOCKET_CLOSE_INCONSISTENT_DATA:"OT_SOCKET_CLOSE_INCONSISTENT_DATA",SOCKET_CLOSE_NO_STATUS:"OT_SOCKET_CLOSE_NO_STATUS",SOCKET_CLOSE_POLICY_VIOLATION:"OT_SOCKET_CLOSE_POLICY_VIOLATION",SOCKET_CLOSE_GOING_AWAY:"OT_SOCKET_CLOSE_GOING_AWAY",SOCKET_CLOSE_PROTOCOL_ERROR:"OT_SOCKET_CLOSE_PROTOCOL_ERROR",SOCKET_CLOSE_TIMEOUT:"OT_SOCKET_CLOSE_TIMEOUT",SOCKET_CLOSE_TOO_LARGE:"OT_SOCKET_CLOSE_TOO_LARGE",SOCKET_CLOSE_UNEXPECTED_CONDITION:"OT_SOCKET_CLOSE_UNEXPECTED_CONDITION",SOCKET_CLOSE_UNSUPPORTED:"OT_SOCKET_CLOSE_UNSUPPORTED",STREAM_CREATE_FAILED:"OT_STREAM_CREATE_FAILED",STREAM_DESTROYED:"OT_STREAM_DESTROYED",STREAM_LIMIT_EXCEEDED:"OT_STREAM_LIMIT_EXCEEDED",STREAM_NOT_FOUND:"OT_STREAM_NOT_FOUND",UNABLE_TO_SUBSCRIBE:"OT_UNABLE_TO_SUBSCRIBE",TERMS_OF_SERVICE_FAILURE:"OT_TERMS_OF_SERVICE_FAILURE",TIMEOUT:"OT_TIMEOUT",CANCEL:"OT_CANCEL",UNABLE_TO_CAPTURE_MEDIA:"OT_UNABLE_TO_CAPTURE_MEDIA",UNABLE_TO_CAPTURE_SCREEN:"OT_UNABLE_TO_CAPTURE_SCREEN",UNEXPECTED_ERROR_CODE:"OT_UNEXPECTED_ERROR_CODE",UNEXPECTED_HTTP_STATUS:"OT_UNEXPECTED_HTTP_STATUS",UNEXPECTED_SERVER_RESPONSE:"OT_UNEXPECTED_SERVER_RESPONSE",UNKNOWN_HTTP_ERROR:"OT_UNKNOWN_HTTP_ERROR",UNSUPPORTED_BROWSER:"OT_UNSUPPORTED_BROWSER",USER_MEDIA_ACCESS_DENIED:"OT_USER_MEDIA_ACCESS_DENIED",XDOMAIN_OR_PARSING_ERROR:"OT_XDOMAIN_OR_PARSING_ERROR",API_KEY_DISABLED:"OT_API_KEY_DISABLED",UNABLE_TO_ACCESS_MEDIA_ENGINE:"OT_UNABLE_TO_ACCESS_MEDIA_ENGINE",SET_PROXY_URL_TIMING_ERROR:"OT_SET_PROXY_URL_TIMING_ERROR",PROXY_URL_ALREADY_SET_ERROR:"OT_PROXY_URL_ALREADY_SET_ERROR",SET_VIDEO_SOURCE_FAILURE:"OT_SET_VIDEO_SOURCE_FAILURE",INVALID_VIDEO_SOURCE:"OT_INVALID_VIDEO_SOURCE",REQUESTED_DEVICE_PERMISSION_DENIED:"OT_REQUESTED_DEVICE_PERMISSION_DENIED",INVALID_AUDIO_OUTPUT_SOURCE:"OT_INVALID_AUDIO_OUTPUT_SOURCE",INVALID_ENCRYPTION_SECRET:"OT_INVALID_ENCRYPTION_SECRET"}},function(e,t,n){var r=n(86),i=n(44),o=n(207),a=n(29),l=n(69),c=n(34),s=Object.prototype.hasOwnProperty,d=o((function(e,t){if(l(t)||a(t))i(t,c(t),e);else for(var n in t)s.call(t,n)&&r(e,n,t[n])}));e.exports=d},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r={JS_EXCEPTION:2e3,AUTHENTICATION_ERROR:1004,INVALID_SESSION_ID:1005,CONNECT_FAILED:1006,CONNECT_REJECTED:1007,CONNECTION_TIMEOUT:1008,NOT_CONNECTED:1010,INVALID_PARAMETER:1011,P2P_CONNECTION_FAILED:1013,API_RESPONSE_FAILURE:1014,PEER_CONNECTION_NOT_CONNECTED:1015,TERMS_OF_SERVICE_FAILURE:1026,CONNECTION_LIMIT_EXCEEDED:1027,UNABLE_TO_PUBLISH:1500,UNABLE_TO_SUBSCRIBE:1501,UNSUPPORTED_VIDEO_CODEC:1502,UNABLE_TO_FORCE_DISCONNECT:1520,UNABLE_TO_FORCE_UNPUBLISH:1530,UNABLE_TO_FORCE_MUTE:1540,PUBLISHER_ICE_WORKFLOW_FAILED:1553,SUBSCRIBER_ICE_WORKFLOW_FAILED:1554,STREAM_LIMIT_EXCEEDED:1605,UNEXPECTED_SERVER_RESPONSE:2001,REPORT_ISSUE_ERROR:2011,SET_PROXY_URL_TIMING_ERROR:2021,PROXY_URL_ALREADY_SET_ERROR:2022,GET_RTC_STATS_REPORT_NOT_SUPPORTED:2031,ANVIL_BADLY_FORMED_RESPONSE:3001,ANVIL_INVALID_HTTP_STATUS:3002,ANVIL_XDOMAIN_OR_PARSING_ERROR:3003,ANVIL_UNKNOWN_HTTP_ERROR:3004,ANVIL_UNEXPECTED_ERROR_CODE:3005,ANVIL_EMPTY_RESPONSE_BODY:3006,ANVIL_CONNECT_FAILED:3007,UNABLE_TO_ACCESS_MEDIA_ENGINE:5001};t.default=r},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){"use strict";(function(t){var n,r="object"==typeof Reflect?Reflect:null,i=r&&"function"==typeof r.apply?r.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};n=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function a(){a.init.call(this)}e.exports=a,e.exports.once=function(e,n){return new t((function(t,r){function i(t){e.removeListener(n,o),r(t)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",i),t([].slice.call(arguments))}F(e,n,o,{once:!0}),"error"!==n&&function(e,t,n){"function"==typeof e.on&&F(e,"error",t,n)}(e,i,{once:!0})}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var l=10;function c(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function s(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function d(e,t,n,r){var i,o,a,l;if(c(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),a=o[t]),void 0===a)a=o[t]=n,++e._eventsCount;else if("function"==typeof a?a=o[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(i=s(e))>0&&a.length>i&&!a.warned){a.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=a.length,l=d,console&&console.warn&&console.warn(l)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function A(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=u.bind(r);return i.listener=n,r.wrapFn=i,i}function h(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(i):Q(i,i.length)}function g(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function Q(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function F(e,t,n,r){if("function"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function i(o){r.once&&e.removeEventListener(t,i),n(o)}))}}Object.defineProperty(a,"defaultMaxListeners",{enumerable:!0,get:function(){return l},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");l=e}}),a.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},a.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},a.prototype.getMaxListeners=function(){return s(this)},a.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var r="error"===e,o=this._events;if(void 0!==o)r=r&&void 0===o.error;else if(!r)return!1;if(r){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var l=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw l.context=a,l}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var s=c.length,d=Q(c,s);for(n=0;n<s;++n)i(d[n],this,t)}return!0},a.prototype.addListener=function(e,t){return d(this,e,t,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(e,t){return d(this,e,t,!0)},a.prototype.once=function(e,t){return c(t),this.on(e,A(this,e,t)),this},a.prototype.prependOnceListener=function(e,t){return c(t),this.prependListener(e,A(this,e,t)),this},a.prototype.removeListener=function(e,t){var n,r,i,o,a;if(c(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(i=-1,o=n.length-1;o>=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,i),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,a||t)}return this},a.prototype.off=a.prototype.removeListener,a.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var i,o=Object.keys(n);for(r=0;r<o.length;++r)"removeListener"!==(i=o[r])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},a.prototype.listeners=function(e){return h(this,e,!0)},a.prototype.rawListeners=function(e){return h(this,e,!1)},a.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},a.prototype.listenerCount=g,a.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}}).call(this,n(2))},function(e,t,n){"use strict";var r,i=n(222),o=Object.prototype.toString,a=(r=Object.create(null),function(e){var t=o.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function l(e){return e=e.toLowerCase(),function(t){return a(t)===e}}function c(e){return Array.isArray(e)}function s(e){return void 0===e}var d=l("ArrayBuffer");function u(e){return"number"==typeof e}function A(e){return null!==e&&"object"==typeof e}function h(e){if("object"!==a(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var g=l("Date"),Q=l("File"),F=l("Blob"),p=l("FileList");function U(e){return"[object Function]"===o.call(e)}var m=l("URLSearchParams");function b(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),c(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.call(null,e[i],i,e)}var B,Z=(B="undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array),function(e){return B&&e instanceof B});var f,R=l("HTMLFormElement"),I=(f=Object.prototype.hasOwnProperty,function(e,t){return f.call(e,t)});e.exports={isArray:c,isArrayBuffer:d,isBuffer:function(e){return null!==e&&!s(e)&&null!==e.constructor&&!s(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return e&&("function"==typeof FormData&&e instanceof FormData||"[object FormData]"===o.call(e)||U(e.toString)&&"[object FormData]"===e.toString())},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&d(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:u,isObject:A,isPlainObject:h,isEmptyObject:function(e){return e&&0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype},isUndefined:s,isDate:g,isFile:Q,isBlob:F,isFunction:U,isStream:function(e){return A(e)&&U(e.pipe)},isURLSearchParams:m,isStandardBrowserEnv:function(){var e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:b,merge:function e(){var t={};function n(n,r){h(t[r])&&h(n)?t[r]=e(t[r],n):h(n)?t[r]=e({},n):c(n)?t[r]=n.slice():t[r]=n}for(var r=0,i=arguments.length;r<i;r++)b(arguments[r],n);return t},extend:function(e,t,n){return b(t,(function(t,r){e[r]=n&&"function"==typeof t?i(t,n):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n,r){var i,o,a,l={};if(t=t||{},null==e)return t;do{for(o=(i=Object.getOwnPropertyNames(e)).length;o-- >0;)a=i[o],r&&!r(a,e,t)||l[a]||(t[a]=e[a],l[a]=!0);e=!1!==n&&Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:a,kindOfTest:l,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;if(c(e))return e;var t=e.length;if(!u(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:Z,isFileList:p,forEachEntry:function(e,t){for(var n,r=(e&&e[Symbol.iterator]).call(e);(n=r.next())&&!n.done;){var i=n.value;t.call(e,i[0],i[1])}},matchAll:function(e,t){for(var n,r=[];null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:R,hasOwnProperty:I}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){void 0===e&&(e={});const t=e.Errors||o.default,n=e.OTErrorClass||i.default,r=Object.keys(t).map(e=>t[e]);return function(e,t,i){if(-1===r.indexOf(e))return new Error(`Attempt to use invalid error name (${e}). Original message: ${t.message}`);if(!(t instanceof Error||/^\[object .*Error\]$/.test(Object.prototype.toString.call(t))))return new Error("Did not pass Error as second argument: "+t);const o=new n(void 0,t.message);if(o.name=e,!t.stack)try{throw t}catch(e){}return o.stack=t.stack,i&&(o.code=i),o}};var i=r(n(26)),o=r(n(8))},function(e,t,n){var r=n(189),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();e.exports=o},function(e,t,n){var r=n(576),i=n(577),o=i;o.v1=r,o.v4=i,e.exports=o},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){void 0===e&&(e={});const t=e.logging||(0,a.default)("Events"),n={ExceptionEvent:function(e,t,n,r,i,o,a){return new l.default(e,!1,{error:a,message:t,title:n,code:r,component:i,target:o})},IssueReportedEvent:function(e,t){return new l.default(e,!1,{issueId:t})},EnvLoadedEvent:function(e){return new l.default(e,!1)}};let r=!1;n.ConnectionEvent=function(e){function n(t,n,r){return e.call(this,t,!1,{connection:n,reason:r})||this}return(0,o.default)(n,e),(0,i.default)(n,[{key:"connections",get:function(){return r||(t.warn("OT.ConnectionEvent connections property is deprecated, use connection instead."),r=!0),[this.connection]}}]),n}(l.default);let s=!1;n.StreamEvent=function(e){function n(t,n,r,i){return e.call(this,t,i,{stream:n,reason:r})||this}return(0,o.default)(n,e),(0,i.default)(n,[{key:"streams",get:function(){return s||(t.warn("OT.StreamEvent streams property is deprecated, use stream instead."),s=!0),[this.stream]}}]),n}(l.default);let d=!1,u=!1,A=!1;return n.SessionConnectEvent=function(e){function n(t){return e.call(this,t,!1)||this}return(0,o.default)(n,e),(0,i.default)(n,[{key:"connections",get:function(){return d||(t.warn("OT.SessionConnectedEvent no longer includes connections. Listen for connectionCreated events instead."),d=!0),[]}},{key:"streams",get:function(){return u||(t.warn("OT.SessionConnectedEvent no longer includes streams. Listen for streamCreated events instead."),u=!0),[]}},{key:"archives",get:function(){return A||(t.warn("OT.SessionConnectedEvent no longer includes archives. Listen for archiveStarted events instead."),A=!0),[]}}]),n}(l.default),n.SessionReconnectingEvent=function(){return new l.default(c.default.SESSION_RECONNECTING,!1)},n.SessionReconnectedEvent=function(){return new l.default(c.default.SESSION_RECONNECTED)},n.SessionDisconnectEvent=function(e,t,n){return new l.default(e,n,{reason:t})},n.StreamPropertyChangedEvent=function(e,t,n,r,i){return new l.default(e,!1,{stream:t,changedProperty:n,oldValue:r,newValue:i})},n.VideoDimensionsChangedEvent=function(e,t,n){return new l.default("videoDimensionsChanged",!1,{target:e,oldValue:t,newValue:n})},n.ArchiveEvent=function(e,t){return new l.default(e,!1,{id:t.id,name:t.name,status:t.status,archive:t})},n.ArchiveUpdatedEvent=function(e,t,n,r){return new l.default("updated",!1,{target:e,changedProperty:t,oldValue:n,newValue:r})},n.SignalEvent=function(e,t,n){return new l.default(e?"signal:"+e:c.default.SIGNAL,!1,{data:t,from:n})},n.CpuPerformanceChangedEvent=function(e){return new l.default("cpuPerformanceChanged",!1,{cpuPerformanceState:e})},n.QualityScoreChangedEvent=function(e){return new l.default("qualityScoreChanged",!1,{qualityScore:e})},n.CaptionReceivedEvent=function(e,t,n){return new l.default("caption",!1,{caption:e,streamId:t,isFinal:n})},n.PublisherCaptionsEnabled=function(e){return new l.default("publisherCaptionsEnabled",!1,{captionsEnabled:e})},n.MediaStreamAvailableEvent=function(e){return new l.default("mediaStreamAvailable",!1,{mediaStream:e})},n.StreamUpdatedEvent=function(e,t,n,r){return new l.default("updated",!1,{target:e,changedProperty:t,oldValue:n,newValue:r})},n.DestroyedEvent=function(e,t,n){return new l.default(e,!1,{target:t,reason:n})},n.ConnectionStateChangedEvent=function(e,t,n){return new l.default(e,!1,{target:t,mediaMode:n})},n.VideoEnabledChangedEvent=function(e,t){return new l.default(e,!1,{reason:t.reason})},n.VideoDisableWarningEvent=function(e){return new l.default(e,!1)},n.AudioLevelUpdatedEvent=function(e){return new l.default(c.default.AUDIO_LEVEL_UPDATED,!1,{audioLevel:e})},n.AudioInputDeviceChangedEvent=function(e){return new l.default(c.default.AUDIO_INPUT_DEVICE_CHANGED,!1,{device:e})},n.MediaStoppedEvent=function(e,t){return new l.default(c.default.MEDIA_STOPPED,!0,{target:e,track:t})},n.MuteForcedEvent=function(e){return new l.default(c.default.MUTE_FORCED,!1,e)},n.VideoElementCreatedEvent=function(e){return new l.default(c.default.VIDEO_ELEMENT_CREATED,!1,{element:e})},n};var i=r(n(25)),o=r(n(23)),a=r(n(1)),l=r(n(148)),c=r(n(30))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(9)),o=r(n(63)),a=r(n(298)),l=r(n(149)),c=r(n(299)),s=r(n(1)),d=r(n(300));function u(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return A(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return A(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}const h=(0,s.default)("SDPHelpers"),g={getSections:e=>e.split(/\r\n|\r|\n/).reduce((e,t)=>{const n=t.match(/^m=(\w+) \d+/);return n&&(e.sections[e.section=n[1]]=[]),e.sections[e.section].push(t),e},{sections:{header:[]},section:"header"}).sections,getCodecsFromSection:e=>({codecs:e[0].match(/m=\w+ \d+ [A-Z/]+ ([\d ]+)$/)[1].split(" "),codecMap:(0,i.default)(...e.filter(e=>e.match(/^a=rtpmap:\d+/)).map(e=>e.match(/^a=rtpmap:(\d+) ([\w-]+)/).splice(1)).map(e=>({[e[0]]:e[1]})))}),getCodecsAndCodecMap(e,t){const n=g.getSections(e)[t];if(!n)throw new Error("no mediaType "+t);return g.getCodecsFromSection(n)},getCodecs(e,t){const n=g.getCodecsAndCodecMap(e,t);return n.codecs.map(e=>n.codecMap[e]||"Unknown codec")},MediaDirection:d.default,iceCredentials:{ufrag:"a=ice-ufrag:",pwd:"a=ice-pwd:"},getMLineIndex:function(e,t){const n="m="+t;return(0,a.default)(e,e=>-1!==e.indexOf(n))},getMLine:function(e,t){const n=g.getMLineIndex(e,t);return n>-1?e[n]:void 0},hasMediaType:(e,t)=>{const n=new RegExp("^m="+t),r=e.split("\r\n");return(0,a.default)(r,e=>n.test(e))>=0},hasMLinePayloadType:function(e,t,n){const r=g.getMLine(e,t);return g.getMLinePayloadTypes(r,t).indexOf(n)>-1},getMLinePayloadTypes:function(e,t){const n=new RegExp(`^m=${t} \\d+(/\\d+)? [a-zA-Z0-9/]+(( [a-zA-Z0-9/]+)+)$`,"i"),r=e.match(n);return!r||r.length<2?[]:r[2].trim().split(" ")},splitSections:function(e){return e.split("\nm=").map((e,t)=>(t>0?"m="+e:e).trim()+"\r\n")},getLinesPerSection:e=>g.splitSections(e).map(e=>g.getSDPLines(e)),replaceDirectionInSdpLines:(e,t,n)=>{const r=e.join("\r\n");return g.replaceDirection(r,t,n).split("\r\n")},replaceDirection:(e,t,n)=>{const r=new RegExp("a="+t,"g");return e.replace(r,"a="+n)},setSubscriberMediaSectionToInactive:e=>{const t=d.default.SENDONLY,n=d.default.INACTIVE;return g.replaceDirectionInSdpLines(e,t,n)},changeMediaDirection:function(e,t){const n=g.splitSections(e);let r=n.shift();const i=d.default.RECVONLY,o=d.default.INACTIVE,a=t===i?o:i;return n.forEach(e=>{const n=e.includes("m=video")?g.replaceDirection(e,a,t):e;r+=n}),r},removeTypesFromMLine:function(e,t){const n=/[0-9 ]*$/.exec(e)[0],r=n.split(" ").filter(e=>""!==e&&-1===t.indexOf(e));return e.replace(n," "+r.join(" "))},removeMediaEncoding:function(e,t,n){let r,i,o,a,l=e.split("\r\n");const c=g.getMLineIndex(l,t),s=c>-1?l[c]:void 0,d=[];if(-1===c)return l.join("\r\n");if(r=g.getMLinePayloadTypes(s,t),0===r.length)return l.join("\r\n");for(i=c;i<l.length;i++){const e=new RegExp(n,"i");0===l[i].indexOf("a=rtpmap:")&&(a=l[i].split(" "),2===a.length&&e.test(a[1])&&d.push(a[0].substr(9)))}if(!d.length)return l.join("\r\n");for(i=c;i<l.length;i++)if(0===l[i].indexOf("a=fmtp:"))for(a=l[i].split(" "),o=0;o<d.length;o++)2===a.length&&a[1]==="apt="+d[o]&&d.push(a[0].substr(7));return l=l.filter(e=>{for(let t=0;t<d.length;t++)if(0===e.indexOf(`a=rtpmap:${d[t]} `)||0===e.indexOf(`a=fmtp:${d[t]} `)||0===e.indexOf(`a=rtcp-fb:${d[t]} `))return!1;return!0}),d.length>0&&c>-1&&(l[c]=g.removeTypesFromMLine(s,d)),l.join("\r\n")},disableMediaType:function(e,t){const n=e.split("\r\n"),r=[];let i;n.forEach(e=>{let t=e;/^m=/.test(t)&&(i=void 0),i||(i=[],r.push(i)),i.push(t)});const o=new RegExp(`^m=${t} \\d+ ([^ ]+) [0-9 ]+$`),a=r.map(e=>{const n=e[0].match(o);return n?[`m=${t} 0 ${n[1]} 0`,"a=inactive",...e.filter(e=>/^c=/.test(e)||/^a=mid:/.test(e)||""===e)]:e});return[].concat(...a).join("\r\n")},removeVideoCodec:function(e,t){return g.removeMediaEncoding(e,"video",t)}},Q=function(e,t){let n=t.filterByName("ssrc-group:FID");switch(n=0===n.length?[]:n[0].value.split(" "),n.length){case 0:case 1:var r=t.find(e=>0===e.name.indexOf("rtpmap:")&&e.value.indexOf("rtx/90000")>-1);if(!r)return!1;var i=r.name.split(":")[1];return i.indexOf("/")>-1&&(i=i.split("/")[0]),g.hasMLinePayloadType(e,"video",i);default:return h.debug("SDP Helpers: There are more than two FIDs, RTX is definitely enabled"),!0}};g.getAttributesForMediaType=function(e,t){let n,r,i,a,l,c,s,d,u,A;const h=g.getMLineIndex(e,t),F=new RegExp(`m=(?!${t}).+ `,"i"),p=new RegExp("a=ssrc:\\d+ .*","i"),U=new RegExp("a=ssrc-group:(SIM|FID) (\\d+).*?","i"),m=new RegExp("a=([a-z0-9:/-]+) (.*)","i"),b=[];for(let t=h+1;t<e.length;t++){if(F.test(e[t])){void 0!==n&&(r=t-1);break}l=e[t].match(U),c=e[t].match(p),void 0===n&&(l||c)&&(n=t,l&&(a=/^(FID|SIM)$/.test(l[1])?l[2]:l[1])),s=e[t].match(`a=ssrc:${a} msid:(.+)`),s&&(d=s[1]);const o=p.test(e[t]),h=U.test(e[t]);void 0!==n&&(void 0!==r||o||h?t===e.length-1&&(r=t):r=t-1);const g=e[t].match(/a=mid:(.+)/);g&&(u=g[1],A=t),i=m.exec(e[t]),i&&3===i.length&&b.push({lineIndex:t,name:i[1],value:i[2]})}return b.ssrcStartIndex=n,b.ssrcEndIndex=r,b.msid=d,b.mid=u,b.midIndex=A,b.isUsingRTX=Q.bind(null,e,b),b.filterByName=function(e){return this.filter(t=>t.name===e)},b.getRtpNumber=e=>{const t=new RegExp("rtpmap:(.+)");return(0,o.default)(b.map(n=>{const r=n.name.match(t);return r&&n.value.indexOf(e)>=0?r[1]:null}),e=>null!==e)},b},g.modifyDtx=(e,t)=>{const n=e.split("\r\n");if(!g.getMLine(n,"audio"))return h.debug("No audio m-line, not enabling dtx."),e;const r=g.getAttributesForMediaType(n,"audio"),i=r.getRtpNumber("opus");if(!i)return h.debug("Could not find rtp number for opus, not enabling dtx."),e;const o=r.find(e=>e.name==="fmtp:"+i);if(!o)return h.debug("Could not find a=fmtp line for opus, not enabling dtx."),e;let a=n[o.lineIndex];const l=/usedtx=\d+([\s;]*)/;return l.test(o.value)?a=a.replace(l,t?"usedtx=1$1":""):t&&(a+="; usedtx=1"),a=a.replace(/[;\s]*$/,""),n[o.lineIndex]=a,n.join("\r\n")};const F=(e,t,n)=>{const r=t.split("\r\n");if(!g.getMLine(r,"audio"))return h.debug("No audio m-line, not enabling stereo."),t;const i=g.getAttributesForMediaType(r,"audio"),o=i.getRtpNumber("opus");if(!o)return h.debug("Could not find rtp number for opus, not enabling stereo."),t;const a=i.find(e=>e.name==="fmtp:"+o);if(!a)return h.debug("Could not find a=fmtp line for opus, not enabling stereo."),t;let l,c=r[a.lineIndex];switch(e){case"send":l=/sprop-stereo=\d+([\s;]*)/,l.test(a.value)?c=c.replace(l,n?"sprop-stereo=1$1":""):n&&(c+="; sprop-stereo=1");break;case"receive":l=/([^-])stereo=\d+([\s;]*)/,l.test(a.value)?c=c.replace(l,n?"$1stereo=1$2":"$1"):n&&(c+="; stereo=1");break;default:throw new Error(`Invalid type ${e} passed into enableStereo`)}return c=c.replace(/[;\s]*$/,""),r[a.lineIndex]=c,r.join("\r\n")};g.modifySendStereo=F.bind(null,"send"),g.modifyReceiveStereo=F.bind(null,"receive"),g.setAudioBitrate=(e,t)=>{const n=g.getAudioBitrate(e);if(void 0!==n)return h.debug(`Audio bitrate already set to ${n}, not setting audio bitrate`),e;const r=e.split("\r\n");if(!g.getMLine(r,"audio"))return h.debug("No audio m-line, not setting audio bitrate"),e;const i=g.getAttributesForMediaType(r,"audio"),o=i.getRtpNumber("opus");if(!o)return h.debug("Could not find rtp number for opus, not setting audio bitrate."),e;const a=i.find(e=>e.name==="fmtp:"+o);if(!a)return h.debug("Could not find a=fmtp line for opus, not setting audio bitrate."),e;let l=r[a.lineIndex];return l+="; maxaveragebitrate="+t,l=l.replace(/[;\s]*$/,""),r[a.lineIndex]=l,r.join("\r\n")},g.removeVideoOrientation=e=>{let t=e.split("\r\n");return t=t.filter(e=>!e.includes("urn:3gpp:video-orientation")),t.join("\r\n")},g.hasSendStereo=e=>/[\s;]sprop-stereo=1/.test(e),g.hasSendDtx=e=>/[\s;]usedtx=1/.test(e),g.hasOpusFec=e=>/[\s;]useinbandfec=1/.test(e),g.getAudioBitrate=e=>{const t=e.match(/[\s;]maxaveragebitrate=(\d+)/);if(t)return Number(t[1])},g.MAX_SSRCS=10,g.getSSRCGroupType=e=>["SIM","FID"].find(t=>e.filterByName("ssrc-group:"+t)[0]),g.getSSRCGroup=e=>{const t=g.getSSRCGroupType(e);return e.filterByName("ssrc-group:"+t)[0]},g.getSSRCGroupSSRCs=e=>{const t=g.getSSRCGroup(e);return t?t.value.split(" ").slice(0,g.MAX_SSRCS):[]},g.getAllowedSSRCs=(e,t)=>{const n=t.slice();return e.filterByName("ssrc-group:FID").forEach(e=>{const t=e.value.split(" ");(0,l.default)(n,t).length&&Array.prototype.push.apply(n,t)}),(0,c.default)(n)},g.filterExcessSSRCs=e=>{const t=e.split("\r\n"),n=g.getAttributesForMediaType(t,"video"),r=g.getSSRCGroupType(n),i=n.ssrcStartIndex;if(void 0===i)return e;let o;const a=e=>{let t=null;return e.match(/^a=ssrc:(\d+)/)&&(t=RegExp.$1),t};if(r){const e=g.getSSRCGroupSSRCs(n),i=["a=ssrc-group:"+r,...e].join(" ");t[n.find(e=>e.name.startsWith("ssrc-group:")).lineIndex]=i,o=g.getAllowedSSRCs(n,e)}else{o=[];n.ssrcStartIndex&&o.push(a(t[n.ssrcStartIndex]))}return t.filter((e,t)=>{if(t<i||t>n.ssrcEndIndex)return!0;if(t===i){if(!r){const t=a(e);return t?o.includes(t):!/^a=ssrc:(\d+)/.test(e)}return!0}const l=a(e);if(l)return o.includes(l);if(e.match(/^a=ssrc-group:FID (\d+)/)){const e=RegExp.$1;return o.includes(e)}return!e.match(/^a=ssrc-group:SIM /)}).join("\r\n")},g.enableSimulcast=function(e,t){let n,r;const i=e.split("\r\n");if(!g.getMLine(i,"video"))return h.debug("No video m-line, not enabling simulcast."),e;const o=g.getAttributesForMediaType(i,"video");if(o.filterByName("ssrc-group:SIM").length>0)return h.debug("Simulcast is already enabled in this SDP, not attempting to enable again."),g.filterExcessSSRCs(e);if(!o.msid)return h.debug("No local stream attached, not enabling simulcast."),e;const a=o.isUsingRTX(),l=[],c=[];for(r=0;r<t;++r)l.push(1e4+r),a&&c.push(2e4+r);if(n=["a=ssrc-group:SIM "+l.join(" ")],a)for(r=0;r<t;++r)n.push(`a=ssrc-group:FID ${l[r]} ${c[r]}`);for(r=0;r<t;++r)n.push(`a=ssrc:${l[r]} cname:localCname`,`a=ssrc:${l[r]} msid:${o.msid}`);if(a)for(r=0;r<t;++r)n.push(`a=ssrc:${c[r]} cname:localCname`,`a=ssrc:${c[r]} msid:${o.msid}`);return n.unshift(o.ssrcStartIndex,o.ssrcEndIndex-o.ssrcStartIndex+1),i.splice(...n),i.join("\r\n")},g.reprioritizeVideoCodec=function(e,t,n){const r=e.split("\r\n"),i=g.getMLineIndex(r,"video");if(-1===i)return e;const o=g.getMLinePayloadTypes(r[i],"video"),a=new RegExp("^a=rtpmap:(\\d+).* "+t,"i"),l=r.map(e=>e.match(a)).filter(e=>null!==e);if(0===l.length)return e;const c=l.map(e=>e[1]);let s=o.filter(e=>-1===c.indexOf(e));"top"===n?s.unshift(...c):"bottom"===n?s.push(...c):(h.error(`Unexpected location param: ${n}; not changing ${t} priority`),s=o);const d=r[i].replace(o.join(" "),s.join(" "));return r[i]=d,r.join("\r\n")},g.getSetupRole=e=>{for(var t,n=u(e.split(/\r\n|\r|\n/));!(t=n()).done;){const e=t.value.match(/^a=setup:(\w+)/);if(e)return e[1]}return""},g.setSetupRole=(e,t)=>e.split(/\r\n|\r|\n/).map(e=>e.match(/^a=setup:(\w+)/)?"a=setup:"+t:e).join("\r\n"),g.changeSetupRole=(e,t,n)=>e.split(/\r\n|\r|\n/).map(e=>e.includes("a=setup:"+t)?"a=setup:"+n:e).join("\r\n"),g.patterns={bundle:"a=group:BUNDLE",address:"c=IN IP4",rtcp:"a=rtcp:",direction:["a=inactive","a=sendonly","a=recvonly","a=sendrecv"],rsize:"a=rtcp-rsize",ssrc:"a=ssrc:",msid:"a=msid:"},g.getIndexStartingWith=(e,t,n)=>{const r=e.slice(n),i=t.map(e=>r.findIndex(t=>t.includes(e))).filter(e=>e>-1);return i.length?n+Math.min(...i):e.length},g.getLastIndexPriorTo=(e,t,n)=>e.slice(0,n).map(e=>e.includes(t)).lastIndexOf(!0),g.includesAny=(e,t)=>{for(let n=0;n<t.length;n++)if(e.includes(t[n]))return!0;return!1},g.isVersionLine=e=>/^o=/.test(e),g.getVersionLine=e=>e.find(g.isVersionLine),g.getVersion=e=>{const t=g.getVersionLine(e);if(void 0===t)return;const n=Number(t.match(/ (\d+) IN /)[1]);return Number.isInteger(n)?n:void 0},g.updateVersion=(e,t,n)=>{const r=[...e],i=r.findIndex(e=>g.isVersionLine(e));return i>=0&&(r[i]=r[i].replace(` ${t} `,` ${n} `)),r},g.isBundleLine=e=>e.includes(g.patterns.bundle),g.getBundleLine=e=>e.find(g.isBundleLine),g.createBundleLine=e=>`${g.patterns.bundle} ${e.join(" ")}`,g.updateBundleLine=(e,t)=>{const n=[...e],r=g.createBundleLine(t),i=n.findIndex(e=>g.isBundleLine(e));return i>=0&&(n[i]=r),n},g.parseMLine=e=>{const t=e.match(/^(m=(?:audio|video)) (\d+) (.+)/),n=t[1];return{port:t[2],transport:t[3],mediaType:n}},g.disableTrack=e=>{const t=g.parseMLine(e);return`${t.mediaType} 0 ${t.transport}`},g.setMediaDirection=(e,t)=>{if(!Object.values(d.default).includes(t))return e;const n=e.slice(),r=n.findIndex(e=>g.includesAny(e,g.patterns.direction));return-1===r||(n[r]="a="+t),n},g.disableTrackSection=e=>{const t=e.mid,n=e.sdp;let r=n.filter(e=>{const t=g.patterns,n=t.address,r=t.rtcp,i=t.rsize,o=t.ssrc,a=t.msid;return!g.includesAny(e,[n,r,i,o,a])});return r[0]=g.disableTrack(n[0]),r=g.setMediaDirection(r,d.default.INACTIVE),{mid:t,sdp:r}},g.isDisabledMediaSection=e=>{let t=e[0];return/^m=(?:video|audio) 0 RTP\/SAVPF 0/.test(t)},g.getDisabledSectionForMid=e=>[`m=${e.includes("a")?"audio":"video"} 0 RTP/SAVPF 0`],g.disableTrackSections=(e,t)=>t.map(t=>{const n=g.getTrackMids(t)[0];return!n||e.includes(n)?t:g.getDisabledSectionForMid(n)}),g.getEnabledTracks=e=>g.getBundleLine(e).match(new RegExp(`^${g.patterns.bundle} (.+)$`))[1].split(" "),g.getDisabledTracks=(e,t)=>e.filter(e=>!t.includes(e)),g.getTrackSection=(e,t)=>{const n=e.findIndex(e=>e.includes("a=mid:"+t)),r=t.includes("a")?"audio":"video",i=g.getLastIndexPriorTo(e,"m="+r,n),o=g.getIndexStartingWith(e,["m=audio","m=video"],n),a=e.slice(i,o);return{mid:t,sdp:a}},g.getHeaders=e=>{const t=e.findIndex(e=>e.includes("m=audio")||e.includes("m=video"));return e.slice(0,t)},g.getSDPLines=e=>e.split("\r\n").filter(e=>e),g.getTrackMids=e=>e.filter(e=>e.match(new RegExp("^a=mid:\\d+"))).map(e=>e.substring("a=mid:".length)),g.getTrackSections=e=>g.getTrackMids(e).map(t=>g.getTrackSection(e,t)),g.parseMantisSDP=e=>{const t=g.changeSetupRole(e,"actpass","passive");return g.parseSDP(t)},g.isMediaSectionDisabled=e=>{const t=g.parseMLine(e[0]).port;return 0===parseInt(t,10)},g.getSectionMid=e=>g.isMediaSectionDisabled(e)?null:g.getTrackMids(e)[0],g.parseSDP=e=>{const t=g.getLinesPerSection(e),n=t[0],r=t.slice(1);return{bundle:g.getBundleLine(n),version:g.getVersion(n),iceCredentials:g.getIceCredentials(n),tracks:g.getEnabledTracks(n),mediaSections:r,mids:r.map(g.getSectionMid),headers:n}},g.createSDP=(e,t)=>{const n=[...e];return t.forEach(e=>n.push(...e)),n.push(""),n.join("\r\n")},g.removePayloadTypeFromSection=(e,t)=>e.filter(e=>!e.includes(`a=rtpmap:${t} `)&&!e.includes(`a=fmtp:${t} `)&&!e.includes(`a=rtcp-fb:${t} `)),g.getRtxPayloadType=(e,t)=>{const n=e.filter(e=>e.includes("apt="+t))[0];return null==n?void 0:n.match(/^a=fmtp:(\d+) /)[1]},g.removeRtxPayloadTypeFromSection=(e,t)=>{let n=[...e];const r=g.getRtxPayloadType(n,t);return r&&(n=g.removePayloadTypeFromSection(n,r)),n},g.trimUnusedCodecs=(e,t)=>{const n=e[0].split(" "),r=n.slice(3),i=n.slice(0,3),o=g.getCodecsFromSection(e);let a=[...e],l=[];r.forEach(e=>{const n=o.codecMap[e];if(t.includes(n)){l.push(e);const t=g.getRtxPayloadType(a,e);t&&l.push(t)}else a=g.removePayloadTypeFromSection(a,e),a=g.removeRtxPayloadTypeFromSection(a,e)});const c=l.length?l:[0];return a[0]=[...i,...c].join(" "),a},g.removeUnusedCodecs=(e,t)=>{if(!t)return e;const n=g.parseSDP(e),r=n.headers,i=n.mediaSections,o=g.parseSDP(t),a=o.mids,l=o.mediaSections,c=i.map(e=>{const t=a.findIndex(t=>t===g.getTrackMids(e)[0]);if(t<0)return e;const n=Object.values(g.getCodecsFromSection(l[t]).codecMap);return g.trimUnusedCodecs(e,n)}),s=[...r];return c.forEach(e=>s.push(...e)),s.push(""),s.join("\r\n")},g.updateSDPWithNewOffer=(e,t)=>{const n=e.headers,r=e.version,i=e.mediaSections,o=g.getSDPLines(t),a=g.getVersion(o),l=g.getEnabledTracks(o),c={version:a,tracks:l,headers:g.updateBundleLine(g.updateVersion(n,r,a),l),mediaSections:g.disableTrackSections(l,i)};return c.mids=c.mediaSections.map(g.getSectionMid),c},g.isUfragLine=e=>e.includes(g.iceCredentials.ufrag),g.isPwdLine=e=>e.includes(g.iceCredentials.pwd),g.getIceCredentials=e=>{const t={};return e.forEach(e=>{g.isUfragLine(e)?t.ufrag=e:g.isPwdLine(e)&&(t.pwd=e)}),t},g.updateIceCredentials=(e,t)=>e.map(e=>g.isUfragLine(e)?t.ufrag:g.isPwdLine(e)?t.pwd:e),g.addIceCredentialsToSection=(e,t)=>{let n=t.ufrag,r=t.pwd;const i=[...e],o=i.findIndex(e=>e.startsWith("a=mid:"));return o>=0&&i.splice(o,0,n,r),i},g.addIceCandidatesToSection=(e,t)=>{const n=[...e],r=t.filter(e=>e.startsWith("a=candidate:")||"a=end-of-candidates"===e),i=n.findIndex(e=>e.startsWith("a=mid:"));return i>=0&&r.length&&n.splice(i,0,...r),n},g.addIceConfig=(e,t,n)=>{const r=[...e],i=e[0];if(!g.getIceCredentials(i).ufrag){const e=g.addIceCredentialsToSection(i,n);r[0]=g.addIceCandidatesToSection(e,t)}return r},g.updateHeadersInPartialSdp=(e,t,n)=>{if(!e.headers.length)return g.updateBundleLine(t.headers,n);let r=g.updateBundleLine(e.headers,n);return r=g.updateVersion(r,e.version,t.version),e.iceCredentials.ufrag!==t.iceCredentials.ufrag&&(r=g.updateIceCredentials(r,t.iceCredentials)),r},g.updateFirstEnabledMediaSection=(e,t)=>{const n=[...e.mediaSections],r=e.mids.findIndex(e=>null!==e);return r>=0&&(n[r]=g.updateIceCredentials(n[r],t)),n};var p=g;t.default=p},function(e,t,n){var r=n(33),i=n(11);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){"use strict";(function(e){var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(4)),o=r(n(5)),a=r(n(3)),l=r(n(107)),c=r(n(260)),s=r(n(567)),d=r(n(261));var u=function(t){void 0===t&&(t={});const n=t.getNativeEnumerateDevices||(0,c.default)(),r=t.getNativeMediaDevices||(0,s.default)(),u=(t.currentAudioOutputDevice||l.default).getCurrentAudioOutputDeviceId,A=(t.currentAudioInputDevice||d.default).getCurrentAudioInputDevice,h=t.env||a.default,g=t.global||(void 0!==typeof window?window:global),Q={},F={audio:"audioInput",video:"videoInput",audioinput:"audioInput",videoinput:"videoInput",audiooutput:"audioOutput",audioInput:"audioInput",videoInput:"videoInput",audioOutput:"audioOutput"};return Q.getNativeMediaDevices=()=>r(),Q.hasEnumerateDevicesCapability=()=>"function"==typeof n(),Q.hasDeviceChangeCapability=()=>{const e=r();return!(!e||!("ondevicechange"in e))},Q.hasSetSinkIdCapability=()=>"setSinkId"in(null==g?void 0:g.HTMLMediaElement.prototype),Q.hasAudioOutputApiSupport=()=>{const e=t.hasSetSinkIdCapability,n=void 0===e?Q.hasSetSinkIdCapability:e,r=t.hasDeviceChangeCapability,i=void 0===r?Q.hasDeviceChangeCapability:r;return!(null!=h&&h.isFirefox)&&n()&&i()},Q.hasEnumerateDevicesBug=()=>h.isSafari&&13.1===h.version,Q.getMediaDevices=()=>Q.hasEnumerateDevicesCapability()?n()().then(e=>e.map(e=>({deviceId:e.deviceId||e.id,label:e.label,kind:F[e.kind]}))):e.reject(new Error("This browser does not support enumerateDevices APIs")),Q.getInputMediaDevices=()=>Q.getMediaDevices().then(e=>e.filter(e=>/^(audio|video)Input$/.test(e.kind))),Q.getAudioOutputMediaDevices=()=>Q.getMediaDevices().then(e=>e.filter(e=>"audioOutput"===e.kind).map(e=>({deviceId:e.deviceId,label:e.label}))),Q.getAudioInputMediaDevices=()=>Q.getMediaDevices().then(e=>e.filter(e=>"audioInput"===e.kind).map(e=>({deviceId:e.deviceId,label:e.label}))),Q.shouldAskForDevices=()=>Q.hasEnumerateDevicesCapability()?Q.getInputMediaDevices().then(e=>{if(0===e.length)return{video:!0,audio:!0};const t=e.filter(e=>"audioInput"===e.kind),n=e.filter(e=>"videoInput"===e.kind);return Q.hasEnumerateDevicesBug()&&0===n.length?{audio:!0,video:!0}:{video:n.length>0,audio:t.length>0,videoDevices:n,audioDevices:t}}).catch(()=>({video:!0,audio:!0})):e.resolve({video:!0,audio:!0}),Q.getDefaultAudioOutputDeviceId=e=>{if(!Array.isArray(e)||0===e.length)return"";return(e.find(e=>"default"===e.deviceId)||e[0]).deviceId},Q.getDefaultAudioInputDevice=e=>Array.isArray(e)&&0!==e.length?e.find(e=>"default"===e.deviceId)||e[0]:"",Q.hasDevice=(e,t)=>{let n=e;return Array.isArray(n)||(n=[]),n.some(e=>e.deviceId===t)},Q.getActiveAudioInputDevice=(0,o.default)(i.default.mark((function e(){var t,n,r;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Q.getAudioInputMediaDevices();case 2:if(0!==(t=e.sent).length){e.next=5;break}return e.abrupt("return",{deviceId:null,label:null});case 5:return(n=A())||(r=Q.getDefaultAudioInputDevice(t),n=t.find(e=>e===r)),e.abrupt("return",n);case 8:case"end":return e.stop()}}),e)}))),Q.getActiveAudioOutputDevice=(0,o.default)(i.default.mark((function e(){var t,n,r;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Q.getAudioOutputMediaDevices();case 3:t=e.sent,e.next=9;break;case 6:throw e.prev=6,e.t0=e.catch(0),e.t0;case 9:if(0!==t.length){e.next=11;break}return e.abrupt("return",{deviceId:null,label:null});case 11:return(n=t.find(e=>e.deviceId===u()))||(r=Q.getDefaultAudioOutputDeviceId(t),n=t.find(e=>e.deviceId===r)),e.abrupt("return",n);case 14:case"end":return e.stop()}}),e,null,[[0,6]])}))),Q};t.default=u}).call(this,n(2))},function(e,t){e.exports=function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}},function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function l(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,s=[],d=!1,u=-1;function A(){d&&c&&(d=!1,c.length?s=c.concat(s):u=-1,s.length&&h())}function h(){if(!d){var e=l(A);d=!0;for(var t=s.length;t;){for(c=s,s=[];++u<t;)c&&c[u].run();u=-1,t=s.length}c=null,d=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function g(e,t){this.fun=e,this.array=t}function Q(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];s.push(new g(e,t)),1!==s.length||d||l(h)},g.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=Q,i.addListener=Q,i.once=Q,i.off=Q,i.removeListener=Q,i.removeAllListeners=Q,i.emit=Q,i.prependListener=Q,i.prependOnceListener=Q,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(e,t){function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(6)),o=r(n(1)),a=r(n(18)),l=r(n(30)),c=r(n(581));const s=(0,o.default)("GlobalExceptionHandler"),d=(0,a.default)(),u=function(e,t){Error.call(this),this.code=e,this.message=t};(u.prototype=Object.create(Error.prototype)).constructor=u,(0,i.default)(u),u.getTitleByCode=function(e){return c.default[+e]},u.handleJsException=e=>{let t=e.error,n=e.errorMsg,r=e.code,i=e.target,o=e.analytics;if(!i)throw new Error("handleJsException requires target");const a=()=>void 0!==r?r:t&&t.code,c=()=>void 0!==n?n:t&&t.message,A=u.getTitleByCode(a());s.error(`OT.exception :: title: ${A} (${a()}) msg: ${c()}`);try{const e={partnerId:i.session?i.session.apiKey:i.apiKey,sessionId:i.session?i.session.sessionId:i.sessionId};o.logError(a(),"tb.exception",A,{details:c()},e);const n=new d.ExceptionEvent(l.default.EXCEPTION,c(),A,a(),i,i,t);if(t)n.stack=t.stack;else try{throw new Error}catch(e){n.stack=e.stack}u.dispatchEvent(n)}catch(e){s.error("OT.exception :: Failed to dispatch exception - "+e.toString())}};var A=u;t.default=A},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(270));var o={publishers:new i.default("guid"),subscribers:new i.default("widgetId"),sessions:new i.default};t.default=o},function(e,t,n){"use strict";t.__esModule=!0,t.MEDIUM=t.LOW=t.CongestionLevels=t.CRITICAL=void 0;t.CRITICAL=2;t.MEDIUM=1;t.LOW=0;const r={CRITICAL:2,MEDIUM:1,LOW:0};t.CongestionLevels=r},function(e,t,n){var r=n(20),i=n(119);e.exports=function(e){return null!=e&&i(e.length)&&!r(e)}},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;t.default={ACTIVE:"active",INACTIVE:"inactive",UNKNOWN:"unknown",PER_SESSION:"perSession",PER_STREAM:"perStream",EXCEPTION:"exception",ISSUE_REPORTED:"issueReported",SESSION_CONNECTED:"sessionConnected",SESSION_RECONNECTING:"sessionReconnecting",SESSION_RECONNECTED:"sessionReconnected",SESSION_DISCONNECTED:"sessionDisconnected",STREAM_CREATED:"streamCreated",STREAM_DESTROYED:"streamDestroyed",CONNECTION_CREATED:"connectionCreated",CONNECTION_DESTROYED:"connectionDestroyed",SIGNAL:"signal",STREAM_PROPERTY_CHANGED:"streamPropertyChanged",MICROPHONE_LEVEL_CHANGED:"microphoneLevelChanged",RESIZE:"resize",SETTINGS_BUTTON_CLICK:"settingsButtonClick",DEVICE_INACTIVE:"deviceInactive",INVALID_DEVICE_NAME:"invalidDeviceName",ACCESS_ALLOWED:"accessAllowed",ACCESS_DENIED:"accessDenied",ACCESS_DIALOG_OPENED:"accessDialogOpened",ACCESS_DIALOG_CLOSED:"accessDialogClosed",AUDIO_INPUT_DEVICE_CHANGED:"audioInputDeviceChanged",ECHO_CANCELLATION_MODE_CHANGED:"echoCancellationModeChanged",MEDIA_STOPPED:"mediaStopped",PUBLISHER_DESTROYED:"destroyed",MUTE_FORCED:"muteForced",SUBSCRIBER_DESTROYED:"destroyed",SUBSCRIBER_CONNECTED:"connected",SUBSCRIBER_DISCONNECTED:"disconnected",SUBSCRIBER_CAPTION_RECEIVED:"captionReceived",DEVICES_DETECTED:"devicesDetected",DEVICES_SELECTED:"devicesSelected",CLOSE_BUTTON_CLICK:"closeButtonClick",MICLEVEL:"microphoneActivityLevel",MICGAINCHANGED:"microphoneGainChanged",ENV_LOADED:"envLoaded",ENV_UNLOADED:"envUnloaded",AUDIO_LEVEL_UPDATED:"audioLevelUpdated",VIDEO_ELEMENT_CREATED:"videoElementCreated"}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(4)),o=r(n(5)),a=r(n(25)),l=r(n(6)),c=r(n(271)),s=r(n(267)),d=r(n(152)),u=r(n(48)),A=r(n(582)),h=r(n(584)),g=r(n(587));const Q=(0,u.default)();let F=function(){function e(e){let t=void 0===e?{}:e,n=t.staticConfig,r=void 0===n?Q.onlyLocal():n,i=t.sessionInfo,o=void 0===i?new d.default:i,a=t.ajax,l=t.queue,c=t.getUserAgentClientHintData,s=void 0===c?g.default:c,u=t.userAgentData,A=void 0===u?"undefined"!=typeof navigator&&navigator.userAgentData:u;this.getTurnServerName=e=>{let t,n;if(!e||"object"!=typeof e)return t;return(Array.isArray(e)?e:[e]).forEach(e=>{const r=e.urls||e.url;(Array.isArray(r)?r:[r]).forEach(e=>{const r=e.indexOf(":")+1,i=e.lastIndexOf(":");e.includes("turns")?n=e.substring(r,i):t=e.substring(r,i)})}),n||t},this.ajax=a,this.queue=l,this.sessionInfo=o,this.getUserAgentClientHintData=s,this.userAgentData=A,this.staticConfig=r}var t=e.prototype;return t._getCachedUserAgentData=function(){var e=(0,o.default)(i.default.mark((function e(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.cachedUserAgentData){e.next=4;break}return e.next=3,this.getUserAgentClientHintData(this.userAgentData);case 3:this.cachedUserAgentData=e.sent;case 4:return e.abrupt("return",this.cachedUserAgentData);case 5:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.commonQoSFields=function(){const e=this._analytics.proxyUrl,t=this.sessionInfo.messagingURL;return{clientVersion:this.staticConfig.clientVersion,buildHash:this.staticConfig.buildHash,source:(void 0!==typeof window?window:global).location&&(void 0!==typeof window?window:global).location.href,logVersion:"2",apiServer:this.staticConfig.apiUrl,clientSystemTime:(new Date).getTime(),sessionId:this.sessionInfo.sessionId,mediaServerName:this.sessionInfo.mediaServerName,relayServer:this.getTurnServerName(this.sessionInfo.iceServers),p2p:this.sessionInfo.p2pEnabled,messagingServer:this.sessionInfo.messagingServer,messagingUrl:(0,A.default)(e,t),version:this.staticConfig.version,partnerId:this.sessionInfo.partnerId}},t._getCommonDataFields=function(){var e=(0,o.default)(i.default.mark((function e(){var t,n;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.default.getAsync();case 2:return t=e.sent,e.next=5,this._getCachedUserAgentData();case 5:return n=e.sent,e.abrupt("return",Object.assign({guid:t},this.commonQoSFields(),n));case 7:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.logError=function(t,n,r,i,o){void 0===o&&(o={}),this._getCommonDataFields().then(a=>{const l=[t,n,r,i,Object.assign({},a,o)];e.emit("logError",...l),this._analytics.logError(...l)})},t.logEvent=function(t,n,r){void 0===t&&(t={}),this._getCommonDataFields().then(i=>{const o=Object.assign({},i,t);e.emit("logEvent",o),this._analytics.logEvent(o,!1,n,r)})},t.logQOS=function(t){void 0===t&&(t={}),this._getCommonDataFields().then(n=>{const r=Object.assign({duration:0},n,t);(0,h.default)(r),e.emit("logQOS",r),this._analytics.logQOS(r)})},(0,a.default)(e,[{key:"staticConfig",get:function(){return this._staticConfig},set:function(e){this._staticConfig=e,this._analytics=new s.default({loggingUrl:this.staticConfig.loggingUrl,ajax:this.ajax,queue:this.queue})}}]),e}();t.default=F,(0,l.default)(F),e.exports=F},function(e,t,n){"use strict";var r=!0,i=!0;function o(e,t,n){var r=e.match(t);return r&&r.length>=n&&parseInt(r[n],10)}e.exports={extractVersion:o,wrapPeerConnectionEvent:function(e,t,n){if(e.RTCPeerConnection){var r=e.RTCPeerConnection.prototype,i=r.addEventListener;r.addEventListener=function(e,r){if(e!==t)return i.apply(this,arguments);var o=function(e){var t=n(e);t&&r(t)};return this._eventMap=this._eventMap||{},this._eventMap[r]=o,i.apply(this,[e,o])};var o=r.removeEventListener;r.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[n])return o.apply(this,arguments);var r=this._eventMap[n];return delete this._eventMap[n],o.apply(this,[e,r])},Object.defineProperty(r,"on"+t,{get:function(){return this["_on"+t]},set:function(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}},disableLog:function(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(r=e,e?"adapter.js logging disabled":"adapter.js logging enabled")},disableWarnings:function(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(i=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))},log:function(){if("object"==typeof window){if(r)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}},deprecated:function(e,t){i&&console.warn(e+" is deprecated, please use "+t+" instead.")},detectBrowser:function(e){var t=e&&e.navigator,n={browser:null,version:null};if(void 0===e||!e.navigator)return n.browser="Not a browser.",n;if(t.mozGetUserMedia)n.browser="firefox",n.version=o(t.userAgent,/Firefox\/(\d+)\./,1);else if(t.webkitGetUserMedia)n.browser="chrome",n.version=o(t.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(t.mediaDevices&&t.userAgent.match(/Edge\/(\d+).(\d+)$/))n.browser="edge",n.version=o(t.userAgent,/Edge\/(\d+).(\d+)$/,2);else{if(!e.RTCPeerConnection||!t.userAgent.match(/AppleWebKit\/(\d+)\./))return n.browser="Not a supported browser.",n;n.browser="safari",n.version=o(t.userAgent,/AppleWebKit\/(\d+)\./,1)}return n}}},function(e,t,n){var r=n(43),i=n(378),o=n(379),a=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?i(e):o(e)}},function(e,t,n){var r=n(193),i=n(121),o=n(29);e.exports=function(e){return o(e)?r(e):i(e)}},function(e,t,n){"use strict";var r=n(46);e.exports=function(e){if(!r(e))throw new TypeError("Cannot use null or undefined");return e}},function(e,t,n){"use strict";var r=n(57),i=n(214),o=n(133),a=n(215),l=n(216);(e.exports=function(e,t){var n,i,c,s,d;return arguments.length<2||"string"!=typeof e?(s=t,t=e,e=null):s=arguments[2],r(e)?(n=l.call(e,"c"),i=l.call(e,"e"),c=l.call(e,"w")):(n=c=!0,i=!1),d={value:t,configurable:n,enumerable:i,writable:c},s?o(a(s),d):d}).gs=function(e,t,n){var c,s,d,u;return"string"!=typeof e?(d=n,n=t,t=e,e=null):d=arguments[3],r(t)?i(t)?r(n)?i(n)||(d=n,n=void 0):n=void 0:(d=t,t=n=void 0):t=void 0,r(e)?(c=l.call(e,"c"),s=l.call(e,"e")):(c=!0,s=!1),u={get:t,set:n,configurable:c,enumerable:s},d?o(a(d),u):u}},function(e,t,n){var r=n(534),i=n(542),o=n(91),a=n(14),l=n(547);e.exports=function(e){return"function"==typeof e?e:null==e?o:"object"==typeof e?a(e)?i(e[0],e[1]):r(e):l(e)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},function(e,t,n){var r=n(557),i=n(144)((function(e,t){return null==e?{}:r(e,t)}));e.exports=i},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e,t){let n;const r=t||{};e.setDisplayMode=function(e){const t=e||"auto";n!==t&&(i.default.removeClass(this.domElement,"OT_mode-"+n),i.default.addClass(this.domElement,"OT_mode-"+t),n=t)},e.getDisplayMode=function(){return n},e.showAfterLoading=function(){i.default.removeClass(this.domElement,"OT_hide-forced")},e.hideWhileLoading=function(){i.default.addClass(this.domElement,"OT_hide-forced")},e.destroy=function(){return r.onDestroy&&r.onDestroy(this.domElement),this.domElement&&i.default.removeElement(this.domElement),e},e.appendTo=function(t){return this.domElement=i.default.createElement(r.nodeName||"div",r.htmlAttributes,r.htmlContent),r.onCreate&&r.onCreate(this.domElement),e.setDisplayMode(r.mode),"auto"===r.mode&&(i.default.addClass(e.domElement,"OT_mode-on-hold"),setTimeout(()=>{i.default.removeClass(e.domElement,"OT_mode-on-hold")},2e3)),t.appendChild(this.domElement),e}};var i=r(n(7))},function(e,t,n){var r=n(80);e.exports=function(e){return r(e,4)}},function(e,t,n){var r=n(377),i=n(382);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},function(e,t,n){var r=n(16).Symbol;e.exports=r},function(e,t,n){var r=n(86),i=n(64);e.exports=function(e,t,n,o){var a=!n;n||(n={});for(var l=-1,c=t.length;++l<c;){var s=t[l],d=o?o(n[s],e[s],s,n,e):void 0;void 0===d&&(d=e[s]),a?i(n,s,d):r(n,s,d)}return n}},function(e,t,n){var r=n(406),i=n(116),o=n(407),a=n(201),l=n(202),c=n(33),s=n(190),d=s(r),u=s(i),A=s(o),h=s(a),g=s(l),Q=c;(r&&"[object DataView]"!=Q(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=Q(new i)||o&&"[object Promise]"!=Q(o.resolve())||a&&"[object Set]"!=Q(new a)||l&&"[object WeakMap]"!=Q(new l))&&(Q=function(e){var t=c(e),n="[object Object]"==t?e.constructor:void 0,r=n?s(n):"";if(r)switch(r){case d:return"[object DataView]";case u:return"[object Map]";case A:return"[object Promise]";case h:return"[object Set]";case g:return"[object WeakMap]"}return t}),e.exports=Q},function(e,t,n){"use strict";var r=n(427)();e.exports=function(e){return e!==r&&null!==e}},function(e,t,n){"use strict";e.exports=n(441)()?n(94).Symbol:n(444)},function(e,t,n){"use strict";(function(e){var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(25)),o=r(n(221)),a=r(n(505)),l=r(n(556)),c=r(n(62)),s=r(n(1)),d=r(n(106));const u=(0,s.default)("StaticConfig"),A=(0,c.default)({version:"v2.30.2",buildHash:"5b8d84a71",minimumVersion:{firefox:52,chrome:49},debug:!1,websiteURL:"http://www.tokbox.com",configURL:"https://config.opentok.com",ipWhitelistConfigURL:"",cdnURL:"",loggingURL:"https://hlg.tokbox.com/prod",apiURL:"https://anvil.opentok.com"}),h=(0,l.default)(["apiURL","assetURL","cdnURL","sessionInfoOverrides","loggingURL"]),g={apiUrl:"apiURL",loggingUrl:"loggingURL"},Q=(0,a.default)(e=>g[e]);var F=function(t){let n=(void 0===t?{}:t).axios,r=void 0===n?o.default:n;return function(){function t(e){Object.defineProperty(this,"config",{value:Object.freeze((0,c.default)(e))})}return t.onlyLocal=function(){const e=(0,c.default)((void 0!==typeof window?window:global).OTProperties);return new t(Object.assign({},A,h(e)))},t.get=function(n){let i=n.partnerId,o=n.token,a=n.useIpWhitelistConfigUrl,l=n.proxyUrl;return(()=>{const t=this.onlyLocal();if(!t.configUrl)return e.resolve({});if(!0===a&&!t.ipWhitelistConfigUrl)return e.resolve({});let n=!0===a?t.ipWhitelistConfigUrl:t.configUrl;return n=(0,d.default)(n,l),r.get(`${n}/project/${i}/config.json`,{headers:{"X-TB-TOKEN-AUTH":o}}).then(e=>e.data)})().then(e=>{const n=(0,c.default)((void 0!==typeof window?window:global).OTProperties);return new t(Object.assign({},A,h(n),Q(e)))}).catch(t=>(u.error("could not reach Config Service",t),e.reject(new Error("could not reach Config Service"))))},(0,i.default)(t,[{key:"configUrl",get:function(){return this.config.configURL}},{key:"ipWhitelistConfigUrl",get:function(){return this.config.ipWhitelistConfigURL}},{key:"apiUrl",get:function(){return this.config.apiURL}},{key:"loggingUrl",get:function(){return this.config.loggingURL}},{key:"apiEnabled",get:function(){return void 0===this.config.apiEnabled||this.config.apiEnabled}},{key:"version",get:function(){return this.config.version}},{key:"clientVersion",get:function(){return"js-"+(this.version||"unknown").replace("v","")}},{key:"buildHash",get:function(){return this.config.buildHash}},{key:"minimumVersion",get:function(){return this.config.minimumVersion}},{key:"websiteUrl",get:function(){return this.config.websiteURL}},{key:"debug",get:function(){return"true"===this.config.debug||!0===this.config.debug}},{key:"sessionInfoOverrides",get:function(){return this.config.sessionInfoOverrides}},{key:"cdnUrl",get:function(){return this.config.cdnURL||`${(void 0!==typeof window?window:global).location.protocol}//${(void 0!==typeof window?window:global).location.host}`}},{key:"assetUrl",get:function(){return this.config.assetURL||`${this.cdnUrl}/webrtc/${this.version}`}}]),t}()};t.default=F}).call(this,n(2))},function(e,t,n){"use strict";var r=n(13);function i(e,t,n,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i)}r.inherits(i,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var o=i.prototype,a={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){a[e]={value:e}})),Object.defineProperties(i,a),Object.defineProperty(o,"isAxiosError",{value:!0}),i.from=function(e,t,n,a,l,c){var s=Object.create(o);return r.toFlatObject(e,s,(function(e){return e!==Error.prototype})),i.call(s,e.message,t,n,a,l),s.cause=e,s.name=e.name,c&&Object.assign(s,c),s},e.exports=i},function(e,t,n){var r=n(71);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){if(r.now)return r.timing.navigationStart+r.now();return Date.now()};const r=(void 0!==typeof window?window:global).performance||{}},function(e,t,n){var r=n(624);e.exports=function(e){return r(2,e)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(52)),o=r(n(632)),a=r(n(3)),l=r(n(633));const c=function(e){void 0===e&&(e={});const t=e.env||a.default,n=e.hasGetUserMediaCapability||o.default,r=e.hasPeerConnectionCapability||l.default;return"Node"===t.name||n()&&r()},s=(0,i.default)(()=>c());var d={check:c,once:s};t.default=d},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){var r=n(193),i=n(401),o=n(29);e.exports=function(e){return o(e)?r(e,!0):i(e)}},function(e,t){e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},function(e,t,n){"use strict";e.exports=function(e){return null!=e}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){const t=[];return{on(n,r){for(var i=arguments.length,o=new Array(i>2?i-2:0),a=2;a<i;a++)o[a-2]=arguments[a];if(t.push({eventName:n,handler:r,args:o}),e.on)e.on(n,r);else{if(!e.addEventListener)throw new Error("Object does not support events",e);e.addEventListener(n,r,...o)}},off(t,n){if(e.off)e.off(t,n);else{if(!e.removeEventListener)throw new Error("Object does not support events",e);for(var r=arguments.length,i=new Array(r>2?r-2:0),o=2;o<r;o++)i[o-2]=arguments[o];e.removeEventListener(t,n,...i)}},once(n,r){for(var i=arguments.length,o=new Array(i>2?i-2:0),a=2;a<i;a++)o[a-2]=arguments[a];t.push({eventName:n,handler:r,args:o}),e.once(n,r)},removeAll(){t.forEach(e=>{let t=e.eventName,n=e.handler,r=e.args;this.off(t,n,...r)}),t.splice(0,t.length)}}}},function(e,t,n){var r=n(104);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},function(e,t,n){var r=n(14),i=n(143),o=n(254),a=n(61);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:o(a(e))}},function(e,t,n){var r=n(544);e.exports=function(e){return null==e?"":r(e)}},function(e,t,n){var r=n(80);e.exports=function(e){return r(e,5)}},function(e,t,n){var r=n(648)(n(298));e.exports=r},function(e,t,n){var r=n(191);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(396),i=n(21),o=Object.prototype,a=o.hasOwnProperty,l=o.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(e){return i(e)&&a.call(e,"callee")&&!l.call(e,"callee")};e.exports=c},function(e,t,n){(function(e){var r=n(16),i=n(397),o=t&&!t.nodeType&&t,a=o&&"object"==typeof e&&e&&!e.nodeType&&e,l=a&&a.exports===o?r.Buffer:void 0,c=(l?l.isBuffer:void 0)||i;e.exports=c}).call(this,n(87)(e))},function(e,t){var n=/^(?:0|[1-9]\d*)$/;e.exports=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&n.test(e))&&e>-1&&e%1==0&&e<t}},function(e,t){e.exports=function(e){return function(t){return e(t)}}},function(e,t){var n=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}},function(e,t,n){"use strict";e.exports=function(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e}},function(e,t,n){var r=n(33),i=n(21);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.getProxyUrl=t.errorMessages=t.clearProxyUrl=void 0,t.setProxyUrl=function(e){const t=n(31),r=s.default,A=new t,h=a.default.sessions.length()>0,g=a.default.publishers.length()>0;let Q;if(h){const e=a.default.sessions.find(e=>"connected"===e.currentState);Q=e?e.sessionId:a.default.sessions.find().sessionId}else Q="";const F={sessionId:Q,apiKey:r.value};if(g||h){const e=(0,l.default)()(c.default.SET_PROXY_URL_TIMING_ERROR,new Error(u.SET_PROXY_URL_TIMING_ERROR),i.default.SET_PROXY_URL_TIMING_ERROR);o.default.handleJsException({error:e,target:F,analytics:A})}else if(d){const e=(0,l.default)()(c.default.PROXY_URL_ALREADY_SET_ERROR,new Error(u.PROXY_URL_ALREADY_SET_ERROR),i.default.PROXY_URL_ALREADY_SET_ERROR);o.default.handleJsException({error:e,target:F,analytics:A})}else d=e};var i=r(n(10)),o=r(n(26)),a=r(n(27)),l=r(n(15)),c=r(n(8)),s=r(n(73));let d;const u={SET_PROXY_URL_TIMING_ERROR:"The proxyUrl was set after a session or publisher was created.",PROXY_URL_ALREADY_SET_ERROR:"The proxyUrl has already been set. Setting it again will not have any effect."};t.errorMessages=u;t.getProxyUrl=()=>d;t.clearProxyUrl=()=>{d=null}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i,o=r(n(7));let a;if("Node"===(null==o.default||null==(i=o.default.env)?void 0:i.name))a="";else{var l,c;const e=null==(l=Array.prototype.slice.call(document.getElementsByTagName("script")))||null==(c=l.pop())?void 0:c.getAttribute("src");a=(e&&e.match(/[?&]apikey=([^&]+)/i)||[])[1]||""}var s={value:a};t.default=s},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t,n){void 0===n&&(n=1/0);let r=null,i=!1,o=1;const a=1e3/t,l=()=>{!i||o>n||(o+=1,e(),r=setTimeout(l,a))};this.start=()=>{i||(i=!0,setTimeout(l,a))},this.stop=()=>{(void 0!==typeof window?window:global).clearTimeout(r),i=!1}}},function(e,t,n){"use strict";(function(e){var r=n(0);t.__esModule=!0,t.default=function(t){void 0===t&&(t={});const n=t.hasValidPeerConnection||f.default,r=t.applySdpTransform||R.default,x=t.createPeerConnection||I.default,M=t.env||Q.default,H=t.sdpTransformDefaults||y.default,K=t.getStatsAdapter||V.default,L=t.getRtcStatsReportAdapter||C.default,z=t.getSynchronizationSources||W.default,O=t.IceCandidateProcessor||E.default,j=t.logging||g.default,P=t.offerProcessor||S.default,_=t.PeerConnectionChannels||v.default,q=t.subscribeProcessor||J.default,$=N.default,ee=t.changeMediaDirection||G.default,te=ee.changeMediaDirectionToInactive,ne=ee.changeMediaDirectionToRecvOnly,re=t.Qos||X.default,ie=t.global||(void 0!==typeof window?window:global),oe=t.debounce||d.default,ae=t.needsToSwapH264Profiles||k.default.once,le=(0,Z.default)(),ce=t.NativeRTCIceCandidate||ie.RTCIceCandidate,se=t.NativeRTCSessionDescription||ie.RTCSessionDescription,de=t.Errors||T.default,ue=t.OTErrorClass||p.default,Ae=t.ExceptionCodes||F.default,he=t.hasPictureInPictureBug||Y.default,ge=()=>{};return function(t){void 0===t&&(t={});let d=!1;const g=t,Q=g.iceConfig,F=void 0===Q?{servers:[]}:Q,p=g.isPublisher,Z=g.offerOverrides,f=g.answerOverrides,R=g.p2p,I=g.codecFlags,y=g.sourceStreamId,V=g.keyStore,C=g.sFrameClientStore,W=g.isE2ee,E=g.removeUnusedCodecs,S=g.sessionId;let v,J=t,N=J.logAnalyticsEvent,G=void 0===N?ge:N,X=J.sendMessage,k=!1;const T=ae();let Y,ee,Qe=0,Fe=!1,pe={};const Ue=new $(G),me=(0,m.default)();function be(e,t){if(!d){if(["candidate","offer","answer","pranswer"].indexOf(e)>-1){const n="candidate"===e?t.candidate:t.sdp;d=-1!==n.indexOf("typ relay")}}X(e,t)}const Be=(0,w.default)();G("createPeerConnection","Attempt");const Ze={};Ze.id=(0,A.default)();const fe=j("PeerConnection:"+Ze.id);fe.debug("construct",{id:Ze.id,options:t});const Re=H,Ie=(0,u.default)(t,["isPublisher","logAnalyticsEvent","offerOverrides","answerOverrides","sendMessage"]);let ye,Ve,Ce,We,Ee,Se=[];const ve=(()=>{let e=Ie.overrideSimulcastEnabled||!1;return{get:()=>e,set(t){const n=Boolean(t)&&Ie.capableSimulcastStreams>1;n!==e&&void 0===Ie.overrideSimulcastEnabled&&(e=n,Ze.generateOfferAndSend())}}})(),Je=(()=>{let e=!1;return{get:()=>e,set(t){const n=Boolean(t);n!==e&&(e=n,e&&(Ze.iceConnectionStateIsConnected()?fe.debug("iceRestart is going to wait until we disconnect or negotiationNeeded and then restart ice"):Ze.generateOfferAndSend()))}}})(),Ne={clean(){delete this.promise,delete this.resolve,delete this.reject}};Ne.promise=new e((e,t)=>{Ne.resolve=e,Ne.reject=t});let Ge=new O,Xe="new";Object.defineProperty(Ze,"signalingState",{get:()=>ye.signalingState,set:e=>(ye.signalingState=e,e)}),(0,h.default)(Ze),Ze.addOptions=e=>{G=e.logAnalyticsEvent},Ze.startEncryption=function(){var e=(0,o.default)(i.default.mark((function e(t){var n,r;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(W){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,le({sessionId:S,connectionId:t});case 4:return n=e.sent,e.next=7,C.createSender(n);case 7:return Y=e.sent,e.next=10,V.get();case 10:return r=e.sent,e.next=13,Y.setSenderEncryptionKey(r);case 13:ee=e=>{Y.setSenderEncryptionKey(e)},V.on("keyChanged",ee),ye.getTransceivers().forEach(function(){var e=(0,o.default)(i.default.mark((function e(t){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Y.encrypt(n,t.sender);case 2:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 16:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),Ze.once("iceConnected",(0,o.default)(i.default.mark((function e(){var t;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:"",t={pcc:parseInt((0,w.default)()-Be,10),hasRelayCandidates:d,proxyInfo:""},ye&&ye.proxyInfo&&(t.proxyInfo=ye.proxyInfo),G("createPeerConnection","Success",t);case 4:case"end":return e.stop()}}),e)})))),Ze.startDecryption=function(){var e=(0,o.default)(i.default.mark((function e(t,n){var r,o,a;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(Ze.iceConnectionStateIsConnected()){e.next=3;break}return Ze.once("iceConnected",()=>Ze.startDecryption(t,n)),e.abrupt("return");case 3:return e.next=5,le({sessionId:S,connectionId:t});case 5:return r=e.sent,o=n.receiver,e.next=9,ke(r);case 9:return a=e.sent,e.prev=10,e.next=13,null==a?void 0:a.decrypt(r,o);case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(10),fe.error(e.t0);case 18:case"end":return e.stop()}}),e,null,[[10,15]])})));return function(t,n){return e.apply(this,arguments)}}(),Ne.resolve();const ke=function(){var t=(0,o.default)(i.default.mark((function t(n){return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!pe[n]){t.next=2;break}return t.abrupt("return",pe[n]);case 2:return pe[n]=new e(function(){var e=(0,o.default)(i.default.mark((function e(t){var r,o;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,V.get();case 2:if(r=e.sent,o=C.getReceiver(n)){e.next=9;break}return e.next=7,C.createReceiver(n);case 7:(o=e.sent).addReceiver(n);case 9:o.setReceiverEncryptionKey(n,r),V.on("keyChanged",e=>{o.setReceiverEncryptionKey(n,e)}),o.addEventListener("decryptFailed",()=>{Ze.trigger("decryptFailed")}),o.addEventListener("decryptionRestored",()=>{Ze.trigger("decryptRestored")}),t(o);case 14:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),t.abrupt("return",pe[n]);case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),Te=e=>{if(fe.debug("internalCreatePeerConnection: called"),ye)return fe.debug("internalCreatePeerConnection: resolving synchronously"),void e.call(null,null,ye);if(Se.push(e),!(Se.length>1)){if(fe.debug(`Creating peer connection config "${JSON.stringify(Ie)}".`),0===F.servers.length&&(fe.error("No ice servers present"),G("Error","noIceServers")),"relay"===F.transportPolicy){const e=e=>e&&0===e.indexOf("turn");F.servers=F.servers.map(t=>{const n=(0,c.default)(t);return Array.isArray(n.urls)||(n.urls=[n.urls]),n.urls=n.urls.filter(e),0===n.urls.length?void 0:n}).filter(e=>void 0!==e)}Ie.iceTransportPolicy=F.transportPolicy,Ie.iceServers=F.servers,W&&(Ie.forceEncodedVideoInsertableStreams=!0,Ie.forceEncodedAudioInsertableStreams=!0,Ie.encodedInsertableStreams=!0),n(ie.RTCPeerConnection).then(e=>{if(!e)throw fe.error("createPeerConnection: Invalid RTCPeerConnection object"),new Error("Failed to create valid RTCPeerConnection object");return x({window:ie,config:Ie})}).then(function(){var e=(0,o.default)(i.default.mark((function e(t){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:Ye(null,t);case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),e=>Ye(e))}},Ye=(e,t)=>{if(e)return ze({reason:"Failed to create PeerConnection, exception: "+e,prefix:"NewPeerConnection"}),void(Se=[]);fe.debug("OT attachEventsToPeerConnection"),ye=t,Ge&&Ge.setPeerConnection(t),Ve=new _(ye),Ie.channels&&Ve.addMany(Ie.channels);const n=(e=>{let t=e.sendMessage,n=e.logging;const r={};return e=>{e.candidate?(r[e.candidate.sdpMid]=e.candidate.sdpMLineIndex,t("candidate",{candidate:e.candidate.candidate,sdpMid:e.candidate.sdpMid||"",sdpMLineIndex:e.candidate.sdpMLineIndex||0})):n.debug("IceCandidateForwarder: No more ICE candidates.")}})({sendMessage:be,logging:fe}),r=e=>{var t;(Ne.resolve(),t=e.candidate,"relay"!==F.transportPolicy||null==t||-1!==t.candidate.indexOf("typ relay"))?n(e):fe.debug("Ignore candidate",e.candidate.candidate)},a=function(){var e=(0,o.default)(i.default.mark((function e(t){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:He(t);case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();let l=ye.iceConnectionState;const c=e=>{ye?(fe.debug("iceconnectionstatechange",ye.iceConnectionState),"connected"===ye.iceConnectionState?("disconnected"===l&&Ze.clearFailedTimeout(),Ze.emit("iceConnected"),Je.set(!1)):"completed"===ye.iceConnectionState&&M.isLegacyEdge&&setTimeout(()=>_e.startCollecting(ye),1e3)):fe.debug("iceconnectionstatechange on peerConnection that no longer exists",Ze);const t=e.target.iceConnectionState;Ze.trigger("iceConnectionStateChange",t),G("attachEventsToPeerConnection","iceconnectionstatechange",t),"disconnected"===t&&(Je.get()?(fe.debug("Restarting ice!"),Ze.generateOfferAndSend()):(0,B.default)()||(Ee=setTimeout(()=>{G("attachEventsToPeerConnection","iceconnectionstatechange","failed"),l="failed",Ze.trigger("iceConnectionStateChange","failed")},1e4))),"disconnected"!==l&&"failed"===t&&ze({reason:"The stream was unable to connect due to a network error. Make sure your connection isn't blocked by a firewall.",prefix:"ICEWorkflow"}),l=t},s=()=>{G("peerConnection:negotiationNeeded","Event"),p&&Ze.generateOfferAndSend(),Ze.trigger("negotiationNeeded")};ye.addEventListener("track",a),ye.addEventListener("icecandidate",r),ye.addEventListener("signalingstatechange",xe),ye.addEventListener("negotiationneeded",s),ye.addEventListener("iceconnectionstatechange",c),me.add(()=>{ye&&(ye.removeEventListener("track",a),ye.removeEventListener("icecandidate",r),ye.removeEventListener("signalingstatechange",xe),ye.removeEventListener("negotiationneeded",s),ye.removeEventListener("iceconnectionstatechange",c))}),we(null)},we=()=>{for(;Se.length;)Se.shift().call(null)},De=()=>{Ge&&(Ge.destroy(),Ge=null),Se=[],_e.stopCollecting(),me.releaseAll(),Ne.clean(),null!==ye&&(ye.destroy&&ye.destroy(),ye=null,Ze.trigger("close")),Ze.off()},xe=e=>{const t=e.target.signalingState;if(Ze.emit("signalingStateChange",t),"stable"===t&&Ze.emit("signalingStateStable"),t&&t!==Xe)switch(Xe=t,fe.debug("stateChange: "+Xe),Xe){case"closed":De()}},Me=()=>{let e;if(ye.getRemoteStreams)e=ye.getRemoteStreams();else{if(!ye.remoteStreams)throw new Error("Invalid Peer Connection object implements no method for retrieving remote streams");e=ye.remoteStreams}return Array.prototype.slice.call(e)},He=e=>{var t;const n=e.track,r=e.transceiver,i=e.stream||(null==(t=e.streams)?void 0:t[0]);G("createPeerConnection","TrackAdded"),Ze.trigger("trackAdded",{stream:i,track:n,transceiver:r})},Ke=(e,t,n)=>{k=!1,ze({reason:`PeerConnection.offerProcessor ${e}: ${t}`,prefix:n})},Le=e=>{if(k)return void(v=e);k=!0,G("peerConnection:processOffer","Event");const t=new se({type:"offer",sdp:e.content.sdp}),n=e=>{k=!1,Ge&&Ge.process(),be("answer",e),M.isLegacyEdge||_e.startCollecting(ye,p),v&&(Le(v),v=null)},r=e=>Ze.trigger("remoteVideoSupported",e);Te(()=>{P(ye,ie.RTCPeerConnection,ie.RTCSessionDescription,se,Re,t,I,R,n,Ke,r,T,y)})};Ze.setSendMessage=e=>{X=e},Ze.generateOfferAndSend=()=>{Ze.generateOffer(e=>{fe.debug("processSubscribe: sending offer"),be("offer",e)})},Ze.generateOffer=oe((function(e){void 0===e&&(e=()=>{}),Ue.enqueueOfferAnswer(()=>(e=>{var t,n;if("closed"===(null==(t=ye)||null==(n=t.signalingState)?void 0:n.toLowerCase()))return;G("peerConnection:processSubscribe","Event"),fe.debug("processSubscribe: Sending offer to subscriber.");let r=ve.get()?Ie.capableSimulcastStreams:1;"P2P"===y&&!R&&(r=1),Te(()=>{q({peerConnection:ye,NativeRTCSessionDescription:se,sdpTransforms:Re,numSimulcastStreams:r,removeVideoOrientation:he(),offerOverrides:Z,offerConstraints:{iceRestart:Je.get()},replaceBaselineProfile:T,removeUnusedCodecs:E}).then(t=>{fe.debug("processSubscribe: got offer, waiting for _readyToCompleteOffer"),Ce=t,Ne.promise.then(()=>e(Ce))},e=>{ze({reason:`subscribeProcessor ${e.message}: ${e.reason}`,prefix:e.prefix})}),Je.set(!1)})})(e))}),100);const ze=e=>{let t=e.reason,n=e.prefix;fe.error(t,"in state",ye?{connectionState:ye.connectionState,iceConnectionState:ye.iceConnectionState,iceGatheringState:ye.iceGatheringState,signalingState:ye.signalingState}:"(none)"),Ze.trigger("error",{reason:t,prefix:n})};function Oe(e){this.track=e}Ze.addTrack=(t,n)=>{const r=new e((e,t)=>{Te(n=>{if(n)return t(n);e()})}).then(()=>{if(ye.addTrack)return ye.addTrack(t,n);const e=ye.getLocalStreams()[0];if(void 0===e)throw new Error("PeerConnection has no existing streams, cannot addTrack");e.addTrack(t),Ze.generateOfferAndSend()}).then(()=>new e(e=>{Ze.once("signalingStateStable",()=>{e()})}));return(0,a.default)(r,15e3,"Renegotiation timed out")},Ze.setIceConfig=e=>{try{M.isFirefox&&(e.certificates=ye.getConfiguration().certificates),ye.setConfiguration(e)}catch(e){throw new U.default("A peer connection failed to set configuration with "+e.message,de.FAILED_SET_CONFIGURATION)}return Je.set(!0),ye},Ze.removeTrack=t=>{const n=e.resolve().then(()=>t instanceof Oe?(ye.getLocalStreams()[0].removeTrack(t.track),void Ze.generateOfferAndSend()):ye.removeTrack(t)).then(()=>new e(e=>{Ze.once("signalingStateStable",()=>{e()})}));return(0,a.default)(n,15e3,"Renegotiation timed out")},Ze.addLocalStream=t=>new e((e,n)=>{Te(r=>{if(r)n(r);else{try{t.getTracks&&t.getTracks().forEach(e=>ye.addTrack(e,t))}catch(e){return void n(e)}e()}})}),Ze.getLocalStreams=()=>ye.getLocalStreams(),Ze.getSenders=()=>ye.getSenders?ye.getSenders():ye.getLocalStreams()[0].getTracks().map(e=>new Oe(e)),Ze.disconnect=()=>{var e;Ge&&(Ge.destroy(),Ge=null),null!=(e=ye)&&e.signalingState&&"closed"!==ye.signalingState.toLowerCase()&&(ye.close(),"function"==typeof ee&&V.off("keyChanged",ee),Y=null,pe=null,setTimeout(De))},Ze.iceRestart=()=>Je.set(!0),Ze.clearFailedTimeout=()=>clearTimeout(Ee);const je=t=>{const n=t?te:ne;return new e(e=>{Ue.enqueueOfferAnswer((0,o.default)(i.default.mark((function t(){return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n(ye);case 2:Ue.setResolved(),e();case 4:case"end":return t.stop()}}),t)}))))})};Ze.changeMediaDirectionToRecvOnly=()=>je(!1),Ze.changeMediaDirectionToInactive=()=>je(!0),Ze.processMessage=(e,t)=>{switch(fe.debug(`processMessage: Received ${e} from ${t.fromAddress}`,t),fe.debug(t),e){case"generateoffer":t.content&&void 0!==t.content.simulcastEnabled&&ve.set(t.content.simulcastEnabled),Ze.generateOfferAndSend(),i();break;case"offer":Le(t),i();break;case"answer":case"pranswer":(e=>{G("peerConnection:processAnswer","Event");const t=e=>{"function"==typeof e.includes&&e.includes("Failed to parse SessionDescription. a=extmap-allow-mixed Expects at least 2 fields.")&&(e="SessionDescription issue has been fixed in Chrome 71 and above. Please update your browser."),ze({reason:"Error while setting RemoteDescription "+e,prefix:"SetRemoteDescription"})};e.content.sdp?(We=new se({type:"answer",sdp:r(Re,"remote","answer",(0,l.default)({replaceBaselineProfile:T},f),e.content.sdp).local}),ye.setRemoteDescription(We).then(()=>{fe.debug("processAnswer: setRemoteDescription Success"),Ge&&Ge.process()}).catch(t),Ue.setResolved(),M.isLegacyEdge||_e.startCollecting(ye,p)):t("Weird answer message, no SDP.")})(t);break;case"candidate":var n=new ce(t.content);Ge&&Ge.addIceCandidate(n).catch(e=>{fe.warn(`Error while adding ICE candidate: ${JSON.stringify(n)}: ${e.toString()}`)});break;default:fe.debug(`processMessage: Received an unexpected message of type ${e} from ${t.fromAddress}: ${JSON.stringify(t)}`)}function i(){Qe+=1,_e.handleOfferMessageReceived(),Qe>1&&(G("Renegotiation","Attempt"),Fe=!0)}return Ze};const Pe=e=>ye.getTransceivers().filter(t=>e.includes(t.mid));Ze.stopTransceivers=e=>{const t=Pe(e);var n;(n=t,n.sort((e,t)=>e.mid<t.mid?1:e.mid>t.mid?-1:0)).forEach(e=>e.stop())},Ze.setTransceiversToInactive=e=>{Pe(e).forEach(e=>{e.direction=D.default.INACTIVE})},Ze.remoteStreams=()=>ye?Me():[],Ze.remoteTracks=()=>ye?ye.getReceivers?Array.prototype.slice.apply(ye.getReceivers()).map(e=>e.track):Array.prototype.concat.apply([],Me().map(e=>e.getTracks())):[],Ze.remoteDescription=()=>ye.remoteDescription,Ze.getStats=(e,t)=>{if(ye)K(ye,e,t);else{const e=Ae.PEER_CONNECTION_NOT_CONNECTED;t(new U.default(ue.getTitleByCode(e),de.PEER_CONNECTION_NOT_CONNECTED,{code:e}))}},Ze.getRtcStatsReport=(e,t)=>{if(ye)L(ye,e,t);else{const e=Ae.PEER_CONNECTION_NOT_CONNECTED;t(new U.default(ue.getTitleByCode(e),de.PEER_CONNECTION_NOT_CONNECTED,{code:e}))}},Ze.getSynchronizationSources=e=>{if(!p){if(!ye){const t=Ae.PEER_CONNECTION_NOT_CONNECTED;return void e(new U.default(ue.getTitleByCode(t),de.PEER_CONNECTION_NOT_CONNECTED,{code:t}))}z(ye,e)}};Ze.getDataChannel=(e,t,n)=>{ye?function e(t,n,r,i){let o;const a=Ve.get(n,r);if(!a){if(t>0)return void setTimeout(e.bind(null,t-1,n,r,i),200);o=new U.default(`A channel with that label and options could not be found. Label:${n}. Options: ${JSON.stringify(r)}`)}i(o,a)}(100,e,t,n):n(new U.default("Cannot create a DataChannel before there is a connection."))},Ze.getSourceStreamId=()=>y,Ze.iceConnectionStateIsConnected=()=>ye&&["connected","completed"].indexOf(ye.iceConnectionState)>-1,Ze.hasTrack=e=>ye.getSenders().some(t=>t.track===e),Ze.findAndReplaceTrack=(t,n)=>e.resolve().then(()=>{const r=ye.getSenders().filter(e=>e.track===t)[0];if(!r)return e.resolve();if("function"!=typeof r.replaceTrack)throw new Error("Sender does not support replaceTrack");return r.replaceTrack(n)}),Ze.hasRelayCandidates=()=>d,Ze.getNegotiatedCodecs=()=>{if(!ye.localDescription||!ye.remoteDescription)return null;const e=e=>(0,s.default)(b.default.getCodecs(ye.localDescription.sdp,e),b.default.getCodecs(ye.remoteDescription.sdp,e));return{audio:e("audio"),video:e("video")}},Ze.on("signalingStateStable",()=>{Fe&&(Fe=!1,G("Renegotiation","Success",Ze.getNegotiatedCodecs()))}),Ze.on("error",e=>{let t=e.prefix;Fe&&-1!==["CreateOffer","SetRemoteDescription"].indexOf(t)&&(Fe=!1,G("Renegotiation","Failure"))}),Ze.on("close",()=>{Fe&&(Fe=!1,G("Renegotiation","Cancel"))});const _e=new re;return _e.on("stats",e=>{e.dataChannels=Ve.sampleQos(),Ze.trigger("qos",{parsedStats:e,simulcastEnabled:ve.get()})}),Ze}};var i=r(n(4)),o=r(n(5)),a=r(n(164)),l=r(n(9)),c=r(n(62)),s=r(n(149)),d=r(n(296)),u=r(n(297)),A=r(n(17)),h=r(n(6)),g=r(n(1)),Q=r(n(3)),F=r(n(10)),p=r(n(26)),U=r(n(272)),m=r(n(166)),b=r(n(19)),B=r(n(76)),Z=r(n(651)),f=r(n(653)),R=r(n(167)),I=r(n(654)),y=r(n(656)),V=r(n(302)),C=r(n(305)),W=r(n(660)),E=r(n(661)),S=r(n(663)),v=r(n(665)),J=r(n(667)),N=r(n(668)),G=r(n(670)),X=r(n(306)),k=r(n(674)),T=r(n(8)),Y=r(n(675)),w=r(n(51)),D=r(n(300))}).call(this,n(2))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(3));t.default=()=>!((i.default.isChrome||i.default.isElectron)&&i.default.version>=90||i.default.isOpera&&i.default.version>=76)&&(i.default.isChrome&&i.default.version>71||i.default.isChromiumEdge&&i.default.version<90||i.default.isOpera&&i.default.version>58)},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r={ACTIVE_VIDEO:0,ACTIVE_VIDEO_WITH_WARNING:1,SUSPENDED_VIDEO:2};t.default=r},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(39)),o=r(n(700)),a=r(n(11)),l=r(n(168));const c={};function s(e){return Number(e.framerateMean||e.googFrameRateSent||e.googFrameRateReceived||e.googFrameRateInput||e.googFrameRateOutput||0)}function d(e){return Number(e.framesEncoded||e.framesDecoded)}function u(e,t){if(s(e))return s(e);if(!d(e))return;let n=0;const r=c[e.id]?c[e.id].frames:0,i=c[e.id]?c[e.id].timestamp:t;return n=(0,l.default)({currentStatFrames:d(e),currentTimestamp:e.timestamp,prevStatFrames:r,prevTimestamp:i}),c[e.id]={frames:d(e),timestamp:e.timestamp},n}function A(e,t){if(!t)return{};const n=t.filter(t=>t.id===e.mediaTrackId);return n.length?n[0]:{}}function h(e,t){return"packetsLost"in t?e+t.packetsLost:e}const g={isVideoStat(e,t){const n=A(e,t);return"video"===e.kind&&["outbound-rtp","inbound-rtp"].includes(e.type)||"video"===e.mediaType||"googFrameWidthReceived"in e||"googFrameWidthInput"in e||"inbound-rtp"===e.type&&-1!==e.id.indexOf("Video")||"inboundrtp"===e.type&&0!==n.frameWidth},isAudioStat(e,t){const n=A(e,t);return"audio"===e.kind&&["outbound-rtp","inbound-rtp"].includes(e.type)||"audio"===e.mediaType||"audioInputLevel"in e||"audioOutputLevel"in e||"inbound-rtp"===e.type&&-1!==e.id.indexOf("Audio")||"inboundrtp"===e.type&&0===n.frameWidth},isInboundStat:e=>"bytesReceived"in e||"packetsReceived"in e,isOutboundStat:e=>"bytesSent"in e||"packetsSent"in e,isVideoTrackStat:e=>"track"===e.type&&(e.frameHeight>0||e.frameWidth>0||e.framesCorrupted>0||e.framesDecoded>0||e.framesPerSecond>0||e.framesSent>0||e.framesReceived>0),isVideoRemoteInboundRtpStat:e=>"remote-inbound-rtp"===e.type&&"video"===e.kind,isAudioRemoteInboundRtpStat:e=>"remote-inbound-rtp"===e.type&&"audio"===e.kind,isVideoInboundRtpStat:e=>"inbound-rtp"===e.type&&"video"===e.kind,parseStatCategory(e){const t={packetsLost:0,packetsReceived:0,bytesReceived:0};return"packetsReceived"in e&&(t.packetsReceived=parseInt(e.packetsReceived,10)),"packetsLost"in e&&(t.packetsLost=parseInt(e.packetsLost,10)),"bytesReceived"in e&&(t.bytesReceived=parseInt(e.bytesReceived,10)),this.isVideoStat(e)&&("framerateMean"in e?t.frameRate=Number(e.framerateMean):"googFrameRateOutput"in e?t.frameRate=Number(e.googFrameRateOutput):"googFrameRateInput"in e&&(t.frameRate=Number(e.googFrameRateInput))),t},getVideoPacketsLost(e){return e.filter(t=>this.isVideoRemoteInboundRtpStat(t,e)).reduce(h,0)},getAudioPacketsLost(e){return e.filter(t=>this.isAudioRemoteInboundRtpStat(t,e)).reduce(h,0)},normalizeTimestamp:(e,t)=>(void 0===t&&(t=Date.now()),(0,a.default)(e)&&"getTime"in e?e.getTime():Math.abs(e/(1e3*t)-1)<.05?e/1e3:e),normalizeStats(e,t,n){void 0===t&&(t=!0);const r=e.filter(t=>g.isVideoStat(t,e)).filter(e=>g.isInboundStat(e)===t),a=e.filter(t=>this.isAudioStat(t,e)).filter(e=>this.isInboundStat(e)===t)[0],l=r[0];if(!a&&!l)throw new Error("could not find stats for either audio or video");const c=g.normalizeTimestamp(l?l.timestamp:a.timestamp),s={timestamp:c};l&&!t&&void 0===l.packetsLost&&(l.packetsLost=this.getVideoPacketsLost(e)),a&&!t&&void 0===a.packetsLost&&(a.packetsLost=this.getAudioPacketsLost(e));const d=["packetsSent","packetsLost","bytesSent"],A=t?e=>(0,i.default)(e,["packetsReceived","packetsLost","bytesReceived"]):e=>(0,i.default)(e,d);if(r&&r.length>0){const e=(e=>{const t=d.concat(["framerateMean","googFrameRateSent","googFrameRateReceived","googFrameRateInput","googFrameRateOutput","framesEncoded","framesDecoded"]),n={timestamp:c,id:l.id};return t.forEach(t=>{n[t]=e.map(e=>Number(e[t]||0)).reduce((e,t)=>e+t,0)}),n})(r);s.video=Object.assign({frameRate:u(e,n)},(0,o.default)(A(e),Number))}return a&&(s.audio=(0,o.default)(A(a),Number)),s}};var Q=g;t.default=Q},function(e,t,n){"use strict";t.__esModule=!0,t.messages=t.default=t.codes=void 0;const r={1e3:"The connection successfully completed the purpose for which it was created.",1001:"The endpoint is going away, either because of a server failure or because the browser is navigating away from the page that opened the connection.",1002:"The endpoint is terminating the connection due to a protocol error. (CLOSE_PROTOCOL_ERROR)",1003:"The connection is being terminated because the endpoint has indicated that reconnections are not available. (CLOSE_UNSUPPORTED)",1005:"Indicates that no status code was provided even though one was expected. (CLOSE_NO_STATUS)",1006:"Used to indicate that a connection was closed abnormally (that is, with no close frame being sent) when a status code is expected. (CLOSE_ABNORMAL)",1007:"Indicates that an endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC3629] data within a text message)",1008:"Indicates that an endpoint is terminating the connection because it has received a message that violates its policy. This is a generic status code that can be returned when there is no other more suitable status code (e.g., 1003 or 1009) or if there is a need to hide specific details about the policy",1009:"Indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process (CLOSE_TOO_LARGE)",1011:"Indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request",4001:"Connectivity loss was detected as it was too long since the socket received the last PONG message",4010:"Timed out while waiting for the Rumor socket to connect.",4020:"Error code unavailable.",4030:"Exception was thrown during Rumor connection, possibly because of a blocked port."};t.messages=r;const i={CLOSE_NORMAL:1e3,CLOSE_GOING_AWAY:1001,CLOSE_PROTOCOL_ERROR:1002,CLOSE_UNSUPPORTED:1003,CLOSE_NO_STATUS:1005,CLOSE_ABNORMAL:1006,CLOSE_INCONSISTENT_DATA:1007,CLOSE_POLICY_VIOLATION:1008,CLOSE_TOO_LARGE:1009,CLOSE_UNEXPECTED_CONDITION:1011,CLOSE_CONNECTIVITY_LOSS:4001,CLOSE_TIMEOUT:4010,CLOSE_FALLBACK_CODE:4020,CLOSE_CONNECT_EXCEPTION:4030,ALREADY_CONNECTED_CONNECTING:null};t.codes=i;var o={messages:r,codes:i};t.default=o},function(e,t,n){var r=n(81),i=n(118),o=n(86),a=n(192),l=n(400),c=n(195),s=n(56),d=n(403),u=n(405),A=n(198),h=n(200),g=n(45),Q=n(408),F=n(409),p=n(205),U=n(14),m=n(66),b=n(413),B=n(11),Z=n(415),f=n(34),R=n(55),I={};I["[object Arguments]"]=I["[object Array]"]=I["[object ArrayBuffer]"]=I["[object DataView]"]=I["[object Boolean]"]=I["[object Date]"]=I["[object Float32Array]"]=I["[object Float64Array]"]=I["[object Int8Array]"]=I["[object Int16Array]"]=I["[object Int32Array]"]=I["[object Map]"]=I["[object Number]"]=I["[object Object]"]=I["[object RegExp]"]=I["[object Set]"]=I["[object String]"]=I["[object Symbol]"]=I["[object Uint8Array]"]=I["[object Uint8ClampedArray]"]=I["[object Uint16Array]"]=I["[object Uint32Array]"]=!0,I["[object Error]"]=I["[object Function]"]=I["[object WeakMap]"]=!1,e.exports=function e(t,n,y,V,C,W){var E,S=1&n,v=2&n,J=4&n;if(y&&(E=C?y(t,V,C,W):y(t)),void 0!==E)return E;if(!B(t))return t;var N=U(t);if(N){if(E=Q(t),!S)return s(t,E)}else{var G=g(t),X="[object Function]"==G||"[object GeneratorFunction]"==G;if(m(t))return c(t,S);if("[object Object]"==G||"[object Arguments]"==G||X&&!C){if(E=v||X?{}:p(t),!S)return v?u(t,l(E,t)):d(t,a(E,t))}else{if(!I[G])return C?t:{};E=F(t,G,S)}}W||(W=new r);var k=W.get(t);if(k)return k;W.set(t,E),Z(t)?t.forEach((function(r){E.add(e(r,n,y,r,t,W))})):b(t)&&t.forEach((function(r,i){E.set(i,e(r,n,y,i,t,W))}));var T=N?void 0:(J?v?h:A:v?R:f)(t);return i(T||t,(function(r,i){T&&(r=t[i=r]),o(E,i,e(r,n,y,i,t,W))})),E}},function(e,t,n){var r=n(82),i=n(372),o=n(373),a=n(374),l=n(375),c=n(376);function s(e){var t=this.__data__=new r(e);this.size=t.size}s.prototype.clear=i,s.prototype.delete=o,s.prototype.get=a,s.prototype.has=l,s.prototype.set=c,e.exports=s},function(e,t,n){var r=n(367),i=n(368),o=n(369),a=n(370),l=n(371);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=l,e.exports=c},function(e,t,n){var r=n(54);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},function(e,t,n){var r=n(42)(Object,"create");e.exports=r},function(e,t,n){var r=n(391);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},function(e,t,n){var r=n(64),i=n(54),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var a=e[t];o.call(e,t)&&i(a,n)&&(void 0!==n||t in e)||r(e,t,n)}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){var r=n(398),i=n(68),o=n(120),a=o&&o.isTypedArray,l=a?i(a):r;e.exports=l},function(e,t,n){var r=n(11),i=Object.create,o=function(){function e(){}return function(t){if(!r(t))return{};if(i)return i(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=o},function(e,t,n){var r=n(91),i=n(208),o=n(127);e.exports=function(e,t){return o(i(e,t,r),e+"")}},function(e,t){e.exports=function(e){return e}},function(e,t,n){"use strict";var r=Object.prototype.toString,i=r.call(function(){return arguments}());e.exports=function(e){return r.call(e)===i}},function(e,t,n){"use strict";var r=Object.prototype.toString,i=r.call("");e.exports=function(e){return"string"==typeof e||e&&"object"==typeof e&&(e instanceof String||r.call(e)===i)||!1}},function(e,t,n){"use strict";e.exports=n(442)()?globalThis:n(443)},function(e,t,n){"use strict";(function(e){t.__esModule=!0,t.default=function(t){return new e(e=>setTimeout(e,t))}}).call(this,n(2))},function(e,t,n){"use strict";(function(t){var r=n(13),i=n(49),o=n(485);function a(e){return r.isPlainObject(e)||r.isArray(e)}function l(e){return r.endsWith(e,"[]")?e.slice(0,-2):e}function c(e,t,n){return e?e.concat(t).map((function(e,t){return e=l(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}var s=r.toFlatObject(r,{},null,(function(e){return/^is[A-Z]/.test(e)}));e.exports=function(e,n,d){if(!r.isObject(e))throw new TypeError("target must be an object");n=n||new(o||FormData);var u,A=(d=r.toFlatObject(d,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!r.isUndefined(t[e])}))).metaTokens,h=d.visitor||U,g=d.dots,Q=d.indexes,F=(d.Blob||"undefined"!=typeof Blob&&Blob)&&((u=n)&&r.isFunction(u.append)&&"FormData"===u[Symbol.toStringTag]&&u[Symbol.iterator]);if(!r.isFunction(h))throw new TypeError("visitor must be a function");function p(e){if(null===e)return"";if(r.isDate(e))return e.toISOString();if(!F&&r.isBlob(e))throw new i("Blob is not supported. Use a Buffer instead.");return r.isArrayBuffer(e)||r.isTypedArray(e)?F&&"function"==typeof Blob?new Blob([e]):t.from(e):e}function U(e,t,i){var o=e;if(e&&!i&&"object"==typeof e)if(r.endsWith(t,"{}"))t=A?t:t.slice(0,-2),e=JSON.stringify(e);else if(r.isArray(e)&&function(e){return r.isArray(e)&&!e.some(a)}(e)||r.isFileList(e)||r.endsWith(t,"[]")&&(o=r.toArray(e)))return t=l(t),o.forEach((function(e,i){!r.isUndefined(e)&&null!==e&&n.append(!0===Q?c([t],i,g):null===Q?t:t+"[]",p(e))})),!1;return!!a(e)||(n.append(c(i,t,g),p(e)),!1)}var m=[],b=Object.assign(s,{defaultVisitor:U,convertValue:p,isVisitable:a});if(!r.isObject(e))throw new TypeError("data must be an object");return function e(t,i){if(!r.isUndefined(t)){if(-1!==m.indexOf(t))throw Error("Circular reference detected in "+i.join("."));m.push(t),r.forEach(t,(function(t,o){!0===(!(r.isUndefined(t)||null===t)&&h.call(n,t,r.isString(o)?o.trim():o,i,b))&&e(t,i?i.concat(o):[o])})),m.pop()}}(e),n}}).call(this,n(225).Buffer)},function(e,t,n){"use strict";var r=n(49);function i(e,t,n){r.call(this,null==e?"canceled":e,r.ERR_CANCELED,t,n),this.name="CanceledError"}n(13).inherits(i,r,{__CANCEL__:!0}),e.exports=i},function(e,t,n){var r=n(89),i=n(11);e.exports=function(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=r(e.prototype),o=e.apply(n,t);return i(o)?o:n}}},function(e,t,n){var r=n(521);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},function(e,t,n){var r=n(527);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},function(e,t,n){var r=n(117),i=n(537),o=n(538);function a(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}a.prototype.add=a.prototype.push=i,a.prototype.has=o,e.exports=a},function(e,t){e.exports=function(e,t){return e.has(t)}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},function(e,t,n){var r=n(60),i=n(50);e.exports=function(e,t){for(var n=0,o=(t=r(t,e)).length;null!=e&&n<o;)e=e[i(t[n++])];return n&&n==o?e:void 0}},function(e,t,n){var r=n(257),i=n(34);e.exports=function(e,t){return e&&r(e,t,i)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(258));const o=e=>e.replace(/\/$/,"");var a=(e,t)=>{if(!t)return e;const n=i.default.parse(t),r=i.default.parse(e);if(!n.protocol||!r.protocol)return e;const a=n.protocol.match(/^https/),l=r.protocol.match(/^ws/i);return`${o(`${(l?"ws":"http")+(a?"s":"")}://${n.host}${n.pathname}`)}/${o(`${r.host}${r.pathname}${r.search||""}`)}`};t.default=a},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;let r="";var i={getCurrentAudioOutputDeviceId:()=>r,setCurrentAudioOutputDeviceId:e=>{r=e}};t.default=i},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e,t){const n={};Object.keys(t).forEach(r=>{n[r]=((e,t,n)=>{if(t&&!n)return()=>t.call(e);if(t&&n)return r=>(void 0!==r&&n.call(e,r),t.call(e));return t=>{void 0!==t&&n.call(e,t)}})(e,t[r].get,t[r].set)}),(0,i.default)(e,n)};var i=r(n(9))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(206));var o=function(e){let t=(void 0===e?{}:e).NativeVideoElementWrapper;const n=void 0===t?(0,i.default)():t;return function(e){let t=void 0===e?{}:e,r=t.fallbackText,i=void 0===r?"Sorry, Web RTC is not available in your browser":r,o=t.fitMode,a=t.muted,l=t._inject,c=t.widgetType;return new n({fallbackText:i,fitMode:o,muted:a,defaultAudioVolume:50,_inject:l,widgetType:c})}};t.default=o},function(e,t,n){"use strict";function r(e){return e.map(e=>({url:e.url,urls:e.urls||[e.url],username:e.username,credential:e.credential}))}t.__esModule=!0,t.adaptIceServers=r,t.parseIceServers=function(e){let t;try{t=JSON.parse(e.data).content.iceServers}catch(e){return[]}return r(t)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(3));t.default=()=>"Chrome"===i.default.name&&i.default.version>=58||-1!==["Firefox","Edge","Safari","Opera"].indexOf(i.default.name)},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){let t=null,n=!1;const r=()=>{n&&(e(),t=window.requestAnimationFrame(r))};this.start=()=>{n||(n=!0,t=window.requestAnimationFrame(r))},this.stop=()=>{window.cancelAnimationFrame(t),n=!1}}},function(e,t,n){"use strict";t.__esModule=!0,t.ONE_SECOND_IN_MS=t.ONE_MINUTE_IN_MS=void 0;t.ONE_SECOND_IN_MS=1e3;t.ONE_MINUTE_IN_MS=6e4},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CancellationError=t.default=void 0;var r=o(n(707)),i=o(n(328));function o(e){return e&&e.__esModule?e:{default:e}}t.default=r.default,t.CancellationError=i.default},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i,o,a=r(n(53)),l=r(n(3));const c=!!window.crypto,s=!!window.RTCRtpScriptTransform&&!l.default.isFirefox,d=!(null==(i=window.RTCRtpSender)||!i.prototype.createEncodedStreams)||!(null==(o=window.RTCRtpSender)||!o.prototype.createdEncodedVideoStreams)||s,u=!!window.Worker,A=()=>c&&d&&u;t.default=function(e){void 0===e&&(e={});const t=e.hasOpenTokSupport||a.default.once,n=e.isE2eeSupported||A;return t()&&n()}},function(e,t,n){var r=n(42)(n(16),"Map");e.exports=r},function(e,t,n){var r=n(383),i=n(390),o=n(392),a=n(393),l=n(394);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=l,e.exports=c},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},function(e,t){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){(function(e){var r=n(189),i=t&&!t.nodeType&&t,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===i&&r.process,l=function(){try{var e=o&&o.require&&o.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(e){}}();e.exports=l}).call(this,n(87)(e))},function(e,t,n){var r=n(69),i=n(399),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return i(e);var t=[];for(var n in Object(e))o.call(e,n)&&"constructor"!=n&&t.push(n);return t}},function(e,t,n){var r=n(404),i=n(196),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,l=a?function(e){return null==e?[]:(e=Object(e),r(a(e),(function(t){return o.call(e,t)})))}:i;e.exports=l},function(e,t){e.exports=function(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}},function(e,t,n){var r=n(194)(Object.getPrototypeOf,Object);e.exports=r},function(e,t,n){var r=n(203);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},function(e,t){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var r=n(419),i=n(209)(r);e.exports=i},function(e,t,n){var r=n(54),i=n(29),o=n(67),a=n(11);e.exports=function(e,t,n){if(!a(n))return!1;var l=typeof t;return!!("number"==l?i(n)&&o(t,n.length):"string"==l&&t in n)&&r(n[t],e)}},function(e,t,n){var r=n(117);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r={error:{priority:1,method:"error"},warn:{priority:2,method:"warn"},info:{priority:3,method:"info"},log:{priority:4,method:"log"},debug:{priority:5,method:"debug"},spam:{priority:6,method:"log"}};t.default=r},function(e,t,n){"use strict";e.exports=n(211)()?Object.setPrototypeOf:n(212)},function(e,t,n){"use strict";var r=n(57),i={object:!0,function:!0,undefined:!0};e.exports=function(e){return!!r(e)&&hasOwnProperty.call(i,typeof e)}},function(e,t,n){"use strict";e.exports=n(433)()?Object.assign:n(434)},function(e,t,n){"use strict";(function(t){var r=n(13),i=n(226),o=n(49),a=n(227),l=n(96),c=n(490),s=n(135),d=n(228),u={"Content-Type":"application/x-www-form-urlencoded"};function A(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var h,g={transitional:a,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==t&&"[object process]"===Object.prototype.toString.call(t))&&(h=n(229)),h),transformRequest:[function(e,t){i(t,"Accept"),i(t,"Content-Type");var n,o=t&&t["Content-Type"]||"",a=o.indexOf("application/json")>-1,s=r.isObject(e);if(s&&r.isHTMLForm(e)&&(e=new FormData(e)),r.isFormData(e))return a?JSON.stringify(d(e)):e;if(r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e))return e;if(r.isArrayBufferView(e))return e.buffer;if(r.isURLSearchParams(e))return A(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();if(s){if(-1!==o.indexOf("application/x-www-form-urlencoded"))return c(e,this.formSerializer).toString();if((n=r.isFileList(e))||o.indexOf("multipart/form-data")>-1){var u=this.env&&this.env.FormData;return l(n?{"files[]":e}:e,u&&new u,this.formSerializer)}}return s||a?(A(t,"application/json"),function(e,t,n){if(r.isString(e))try{return(t||JSON.parse)(e),r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||g.transitional,n=t&&t.forcedJSONParsing,i="json"===this.responseType;if(e&&r.isString(e)&&(n&&!this.responseType||i)){var a=!(t&&t.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(e){if(a){if("SyntaxError"===e.name)throw o.from(e,o.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:s.classes.FormData,Blob:s.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){g.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){g.headers[e]=r.merge(u)})),e.exports=g}).call(this,n(24))},function(e,t,n){"use strict";e.exports=n(491)},function(e,t){e.exports={}},function(e,t,n){var r=n(235),i=n(510),o=n(511),a=n(237),l=n(525),c=n(241),s=n(526),d=n(244),u=n(245),A=n(100),h=Math.max;e.exports=function(e,t,n,g,Q,F,p,U){var m=2&t;if(!m&&"function"!=typeof e)throw new TypeError("Expected a function");var b=g?g.length:0;if(b||(t&=-97,g=Q=void 0),p=void 0===p?p:h(A(p),0),U=void 0===U?U:A(U),b-=Q?Q.length:0,64&t){var B=g,Z=Q;g=Q=void 0}var f=m?void 0:c(e),R=[e,t,n,g,Q,B,Z,F,p,U];if(f&&s(R,f),e=R[0],t=R[1],n=R[2],g=R[3],Q=R[4],!(U=R[9]=void 0===R[9]?m?0:e.length:h(R[9]-b,0))&&24&t&&(t&=-25),t&&1!=t)I=8==t||16==t?o(e,t,U):32!=t&&33!=t||Q.length?a.apply(void 0,R):l(e,t,n,g);else var I=i(e,t,n);return u((f?r:d)(I,R),e,t)}},function(e,t,n){var r=n(89),i=n(139);function o(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}o.prototype=r(i.prototype),o.prototype.constructor=o,e.exports=o},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n];a!==t&&"__lodash_placeholder__"!==a||(e[n]="__lodash_placeholder__",o[i++]=n)}return o}},function(e,t,n){var r=n(33),i=n(124),o=n(21),a=Function.prototype,l=Object.prototype,c=a.toString,s=l.hasOwnProperty,d=c.call(Object);e.exports=function(e){if(!o(e)||"[object Object]"!=r(e))return!1;var t=i(e);if(null===t)return!0;var n=s.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==d}},function(e,t,n){var r=n(536),i=n(21);e.exports=function e(t,n,o,a,l){return t===n||(null==t||null==n||!i(t)&&!i(n)?t!=t&&n!=n:r(t,n,o,a,e,l))}},function(e,t,n){var r=n(14),i=n(71),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(a.test(e)||!o.test(e)||null!=t&&e in Object(t))}},function(e,t,n){var r=n(551),i=n(208),o=n(127);e.exports=function(e){return o(i(e,void 0,r),e+"")}},function(e,t,n){"use strict";let r;t.__esModule=!0,t.default=function(e){void 0===e&&(e={});const t=e.AudioContext||(void 0!==typeof window?window:global).AudioContext||(void 0!==typeof window?window:global).webkitAudioContext;return function(){if(r=r||t&&new t,null==r)throw new Error("AudioContext could not be created, hardware limit reached.");return r}}},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;let r=function(){function e(e){this._analyser=null,this._timeDomainData=null,this._sourceNode=null,this._audioContext=e}var t=e.prototype;return t._initAudioAnalyser=function(e){this._analyser=this._audioContext.createAnalyser(),this._sourceNode=this._audioContext.createMediaStreamSource(e),this._sourceNode.connect(this._analyser),this._timeDomainData=new Uint8Array(this._analyser.frequencyBinCount)},t.webRTCStream=function(e){this._sourceNode&&this._sourceNode.disconnect(this._analyser),"suspended"===this._audioContext.state&&this._audioContext.resume(),this._initAudioAnalyser(e)},t.destroy=function(){this._sourceNode&&this._sourceNode.disconnect(this._analyser),this._timeDomainData=null},t.sample=function(e){if("function"==typeof e)throw new Error("sample no longer takes a callback");if(this._analyser&&this._timeDomainData){this._analyser.getByteTimeDomainData(this._timeDomainData);let e=0;for(let t=this._timeDomainData.length-1;t>=0;t-=1)e=Math.max(e,Math.abs(this._timeDomainData[t]-128));return e/128}return null},e}();t.default=r},function(e,t,n){var r=n(90),i=n(54),o=n(128),a=n(55),l=Object.prototype,c=l.hasOwnProperty,s=r((function(e,t){e=Object(e);var n=-1,r=t.length,s=r>2?t[2]:void 0;for(s&&o(t[0],t[1],s)&&(r=1);++n<r;)for(var d=t[n],u=a(d),A=-1,h=u.length;++A<h;){var g=u[A],Q=e[g];(void 0===Q||i(Q,l[g])&&!c.call(e,g))&&(e[g]=d[g])}return e}));e.exports=s},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(9)),o=r(n(149));const a=(0,r(n(1)).default)("Event");let l=function(){function e(e,t,n){void 0===t&&(t=!0),void 0===n&&(n={}),this.type=e,this.cancelable=t,this._defaultPrevented=!1;const r=(0,o.default)(Object.keys(this),Object.keys(n));if(r.length>0)throw new Error("Cannot used reserved property names: "+r.join(","));(0,i.default)(this,n)}var t=e.prototype;return t.preventDefault=function(){this.cancelable?this._defaultPrevented=!0:a.warn("Event.preventDefault :: Trying to preventDefault on an event that isn't cancelable")},t.isDefaultPrevented=function(){return this._defaultPrevented},e}();t.default=l},function(e,t,n){var r=n(38),i=n(579),o=n(90),a=n(580),l=o((function(e){var t=r(e,a);return t.length&&t[0]===e[0]?i(t):[]}));e.exports=l},function(e,t){e.exports=function(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}},function(e,t,n){var r=n(29),i=n(21);e.exports=function(e){return i(e)&&r(e)}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(25)),o=r(n(62)),a=r(n(59));var l=function(){function e(e){void 0===e&&(e={}),Object.defineProperty(this,"_rawSessionInfo",{value:(0,o.default)(e)})}return(0,i.default)(e,[{key:"sessionId",get:function(){return this._rawSessionInfo.session_id}},{key:"partnerId",get:function(){return this._rawSessionInfo.partner_id}},{key:"messagingServer",get:function(){return this._rawSessionInfo.messaging_server_url}},{key:"mediaServerName",get:function(){return this._rawSessionInfo.media_server_hostname}},{key:"messagingURL",get:function(){return this._rawSessionInfo.messaging_url}},{key:"symphonyAddress",get:function(){return this._rawSessionInfo.symphony_address}},{key:"iceServers",get:function(){return this._rawSessionInfo.ice_servers}},{key:"simulcast",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.simulcast")}},{key:"e2ee",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.e2ee",!1)}},{key:"reconnection",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.reconnection",!1)}},{key:"renegotiation",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.renegotiation",!1)}},{key:"p2pEnabled",get:function(){return"enabled"===(0,a.default)(this._rawSessionInfo,"properties.p2p.preference.value")}},{key:"hybridSession",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.hybridSession",!1)}},{key:"isAdaptiveEnabled",get:function(){return"adaptive"===(0,a.default)(this._rawSessionInfo,"properties.p2p.preference.value")}},{key:"priorityVideoCodec",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.priorityVideoCodec","")}},{key:"h264",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.h264",!0)}},{key:"vp8",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.vp8",!0)}},{key:"vp9",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.vp9",!0)}},{key:"singlePeerConnection",get:function(){return(0,a.default)(this._rawSessionInfo,"properties.singlePeerConnection",!1)}},{key:"clientCandidates",get:function(){const e=(0,a.default)(this._rawSessionInfo,"properties.clientCandidates");return"relayed"===e?"relay":e}}]),e}();t.default=l},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;t.default=()=>document.createElement("video")},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){return{ROTATED_NORMAL:0,ROTATED_LEFT:270,ROTATED_RIGHT:90,ROTATED_UPSIDE_DOWN:180}}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){if(void 0!==e.adapter||l.default.isLegacyEdge)return e;const t=(e=>{const t={},n=(e,t,n)=>{n.forEach(n=>{let r=n.key,i=n.type,o=t[r];if(void 0!==o){switch(i){case"function":o=((e,t)=>{if("function"!=typeof t)return c.warn("Non-function passed into bindWithStaticProperties()"),t;const n=t.bind(e);return Object.keys(t).forEach(e=>{n[e]=t[e]}),n})(t,o);break;case"class":o="function"!=typeof(l=o)?(c.warn("Non-function passed into extendClass()"),l):(0,a.default)(l);break;case"string":case"object":break;default:throw new Error("Invalid type of window key: "+i)}e[r]=o}var l})};n(t,e,s),void 0!==e.navigator&&(t.navigator={},n(t.navigator,e.navigator,d),void 0!==e.navigator.mediaDevices&&(t.navigator.mediaDevices={},n(t.navigator.mediaDevices,e.navigator.mediaDevices,u)));return t})(e);return(0,i.default)({window:t}),t};var i=r(n(596)),o=r(n(1)),a=r(n(607)),l=r(n(3));const c=(0,o.default)("createWindowMock"),s=[{key:"location",type:"object"},{key:"setTimeout",type:"function"},{key:"requestAnimationFrame",type:"function"},{key:"URL",type:"function"},{key:"MediaStream",type:"class"},{key:"webkitMediaStream",type:"class"},{key:"RTCIceCandidate",type:"class"},{key:"mozRTCIceCandidate",type:"class"},{key:"RTCSessionDescription",type:"class"},{key:"mozRTCSessionDescription",type:"class"},{key:"RTCIceGatherer",type:"class"},{key:"RTCIceTransport",type:"class"},{key:"RTCDtlsTransport",type:"class"},{key:"RTCSctpTransport",type:"class"},{key:"RTCRtpReceiver",type:"class"},{key:"HTMLMediaElement",type:"class"},{key:"RTCPeerConnection",type:"class"},{key:"webkitRTCPeerConnection",type:"class"},{key:"mozRTCPeerConnection",type:"class"},{key:"MediaStreamTrack",type:"class"},{key:"RTCRtpSender",type:"class"},{key:"RTCTrackEvent",type:"class"},{key:"RTCTransceiver",type:"class"},{key:"RTCDtmfSender",type:"class"},{key:"RTCDTMFSender",type:"class"},{key:"MediaStreamTrackEvent",type:"class"}],d=[{key:"userAgent",type:"string"},{key:"getUserMedia",type:"function"},{key:"getDisplayMedia",type:"function"},{key:"webkitGetUserMedia",type:"function"},{key:"mozGetUserMedia",type:"function"}],u=[{key:"getUserMedia",type:"function"},{key:"getDisplayMedia",type:"function"},{key:"enumerateDevices",type:"function"},{key:"getSupportedConstraints",type:"function"},{key:"addEventListener",type:"function"},{key:"removeEventListener",type:"function"}]},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){let e=null;this.transform=t=>{e=null===e||t>=e?t:.3*t+.7*e;const n=Math.log(e)/Math.LN10/1.5+1;return Math.min(Math.max(n,0),1)}}},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e){const t={},n=(n,r)=>{(0,i.default)(r,{parent:this}),r.appendTo(e.parent),t[n]=r,this[n]=r};if(!e.parent)return;(0,o.default)(this),this.destroy=()=>{this.off(),this.hideWhileLoading(),a(t).forEach(e=>e.destroy())},this.showAfterLoading=()=>{a(t).forEach(e=>e.showAfterLoading())},this.hideWhileLoading=()=>{a(t).forEach(e=>e.hideWhileLoading())},this.set=(e,t)=>("string"==typeof e&&t?n(e,t):Object.keys(e).forEach(t=>{n(t,e[t])}),this)};var i=r(n(9)),o=r(n(6));const a=e=>Object.keys(e).map(t=>e[t])},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(6)),o=r(n(30)),a=r(n(608));const l=(0,r(n(18)).default)(),c=(0,a.default)();var s=new function(){const e=this;function t(){return c.isDomLoaded()&&!c.isDomUnloaded()}function n(){e.dispatchEvent(new l.EnvLoadedEvent(o.default.ENV_UNLOADED))}(0,i.default)(e),c.whenLoaded.then((function(){c.whenUnloaded.then(n),t()&&e.dispatchEvent(new l.EnvLoadedEvent(o.default.ENV_LOADED))})),this.onLoad=function(n,r){t()?n.call(r):e.on(o.default.ENV_LOADED,n,r)},this.onUnload=function(t,n){this.isUnloaded()?t.call(n):e.on(o.default.ENV_UNLOADED,t,n)},this.isUnloaded=function(){return c.isDomUnloaded()}};t.default=s},function(e,t,n){"use strict";var r=n(614);
|
|
18
18
|
/*!
|
|
19
19
|
* The buffer module from node.js, for the browser.
|
|
20
20
|
*
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
/* @license twgl.js 5.5.1 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
25
25
|
Available via the MIT license.
|
|
26
26
|
see: http://github.com/greggman/twgl.js for details */
|
|
27
|
-
const Dn={};{const e=Dn;e[5120]=Int8Array,e[5121]=Uint8Array,e[5122]=Int16Array,e[5123]=Uint16Array,e[5124]=Int32Array,e[5125]=Uint32Array,e[5126]=Float32Array,e[32819]=Uint16Array,e[32820]=Uint16Array,e[33635]=Uint16Array,e[5131]=Uint16Array,e[33640]=Uint32Array,e[35899]=Uint32Array,e[35902]=Uint32Array,e[36269]=Uint32Array,e[34042]=Uint32Array}function xn(e){if(e instanceof Int8Array)return 5120;if(e instanceof Uint8Array||e instanceof Uint8ClampedArray)return 5121;if(e instanceof Int16Array)return 5122;if(e instanceof Uint16Array)return 5123;if(e instanceof Int32Array)return 5124;if(e instanceof Uint32Array)return 5125;if(e instanceof Float32Array)return 5126;throw new Error("unsupported typed array type")}function Mn(e){if(e===Int8Array)return 5120;if(e===Uint8Array||e===Uint8ClampedArray)return 5121;if(e===Int16Array)return 5122;if(e===Uint16Array)return 5123;if(e===Int32Array)return 5124;if(e===Uint32Array)return 5125;if(e===Float32Array)return 5126;throw new Error("unsupported typed array type")}function Hn(e){const t=Dn[e];if(!t)throw new Error("unknown gl type");return t}const Kn=typeof SharedArrayBuffer<"u"?function(e){return e&&e.buffer&&(e.buffer instanceof ArrayBuffer||e.buffer instanceof SharedArrayBuffer)}:function(e){return e&&e.buffer&&e.buffer instanceof ArrayBuffer};function Ln(){console.error(...arguments)}const zn=new Map;function On(e,t){if(!e||"object"!=typeof e)return!1;let n=zn.get(t);n||(n=new WeakMap,zn.set(t,n));let r=n.get(e);if(void 0===r){const i=Object.prototype.toString.call(e);r=i.substring(8,i.length-1)===t,n.set(e,r)}return r}function jn(e,t){return typeof WebGLTexture<"u"&&On(t,"WebGLTexture")}const Pn=34962,_n="";function qn(e,t,n,r){if(function(e,t){return typeof WebGLBuffer<"u"&&On(t,"WebGLBuffer")}(0,t))return t;n=n||Pn;const i=e.createBuffer();return function(e,t,n,r,i){e.bindBuffer(t,n),e.bufferData(t,r,i||35044)}(e,n,i,t,r),i}function $n(e){return"indices"===e}const er=/coord|texture/i,tr=/color|colour/i;function nr(e,t,n){return e.numComponents||e.size||function(e,t){let n;if(n=er.test(e)?2:tr.test(e)?4:3,t%n>0)throw new Error(`Can not guess numComponents for attribute '${e}'. Tried ${n} but ${t} values is not evenly divisible by ${n}. You should specify it.`);return n}(t,n||function(e){return e.length?e:e.data}(e).length)}function rr(e,t){if(Kn(e))return e;if(Kn(e.data))return e.data;Array.isArray(e)&&(e={data:e});let n=e.type?or(e.type):void 0;return n||(n=$n(t)?Uint16Array:Float32Array),new n(e.data)}function ir(e){return"number"==typeof e?e:e?Mn(e):5126}function or(e){return"number"==typeof e?Hn(e):e||Float32Array}function ar(e,t){return{buffer:t.buffer,numValues:24,type:ir(t.type),arrayType:or(t.type)}}function lr(e,t){const n=t.data||t,r=or(t.type),i=n*r.BYTES_PER_ELEMENT,o=e.createBuffer();return e.bindBuffer(Pn,o),e.bufferData(Pn,i,t.drawType||35044),{buffer:o,numValues:n,type:Mn(r),arrayType:r}}function cr(e,t,n){const r=rr(t,n);return{arrayType:r.constructor,buffer:qn(e,r,void 0,t.drawType),type:xn(r),numValues:0}}function sr(e,t){const n={};return Object.keys(t).forEach((function(r){if(!$n(r)){const i=t[r],o=i.attrib||i.name||i.attribName||_n+r;if(i.value){if(!Array.isArray(i.value)&&!Kn(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let t;t=i.buffer&&i.buffer instanceof WebGLBuffer?ar:"number"==typeof i||"number"==typeof i.data?lr:cr;const a=t(e,i,r),l=a.buffer,c=a.type,s=a.numValues,d=a.arrayType,u=void 0!==i.normalize?i.normalize:function(e){return e===Int8Array||e===Uint8Array}(d),A=nr(i,r,s);n[o]={buffer:l,numComponents:A,type:c,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:void 0===i.divisor?void 0:i.divisor,drawType:i.drawType}}}})),e.bindBuffer(Pn,null),n}const dr=["position","positions","a_position"];function ur(e,t,n){const r=sr(e,t),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=t.indices;if(o){const t=rr(o,"indices");i.indices=qn(e,t,34963),i.numElements=t.length,i.elementType=xn(t)}else i.numElements||(i.numElements=function(e,t){let n,r;for(r=0;r<dr.length&&(n=dr[r],!(n in t)&&(n=_n+n,!(n in t)));++r);r===dr.length&&(n=Object.keys(t)[0]);const i=t[n];if(!i.buffer)return 1;e.bindBuffer(Pn,i.buffer);const o=e.getBufferParameter(Pn,34660);e.bindBuffer(Pn,null);const a=o/function(e,t){return 5120===t||5121===t?1:5122===t||5123===t?2:5124===t||5125===t||5126===t?4:0}(0,i.type),l=i.numComponents||i.size,c=a/l;if(c%1!=0)throw new Error(`numComponents ${l} not correct for length ${length}`);return c}(e,i.attribs));return i}function Ar(e){return!!e.texStorage2D}const hr=function(){const e={},t={};return function(n,r){return function(n){const r=n.constructor.name;if(!e[r]){for(const e in n)if("number"==typeof n[e]){const r=t[n[e]];t[n[e]]=r?`${r} | ${e}`:e}e[r]=!0}}(n),t[r]||("number"==typeof r?"0x"+r.toString(16):r)}}(),gr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Qr=Kn,Fr=function(){let e;return function(){return e=e||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),e}}(),pr=6407,Ur=6408,mr=6402,br=33071,Br=3553,Zr=34067,fr=32879,Rr=35866,Ir=10242,yr=10243,Vr=5120,Cr=5121,Wr=5123,Er=5125,Sr=5126,vr=5131,Jr=36193,Nr=33319,Gr=33320,Xr=6403,kr=36244,Tr=36248,Yr=36249;{const e={};e[6406]={numColorComponents:1},e[6409]={numColorComponents:1},e[6410]={numColorComponents:2},e[pr]={numColorComponents:3},e[Ur]={numColorComponents:4},e[Xr]={numColorComponents:1},e[kr]={numColorComponents:1},e[Nr]={numColorComponents:2},e[Gr]={numColorComponents:2},e[pr]={numColorComponents:3},e[Tr]={numColorComponents:3},e[Ur]={numColorComponents:4},e[Yr]={numColorComponents:4},e[mr]={numColorComponents:1},e[34041]={numColorComponents:2}}let wr;function Dr(e){if(!wr){const e={};e[6406]={textureFormat:6406,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Cr,vr,Jr,Sr]},e[6409]={textureFormat:6409,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Cr,vr,Jr,Sr]},e[6410]={textureFormat:6410,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[Cr,vr,Jr,Sr]},e[pr]={textureFormat:pr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[Cr,vr,Jr,Sr,33635]},e[Ur]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[Cr,vr,Jr,Sr,32819,32820]},e[mr]={textureFormat:mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Er,Wr]},e[33321]={textureFormat:Xr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[Cr]},e[36756]={textureFormat:Xr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[Vr]},e[33325]={textureFormat:Xr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Sr,vr]},e[33326]={textureFormat:Xr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Sr]},e[33330]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Cr]},e[33329]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Vr]},e[33332]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Wr]},e[33331]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[5122]},e[33334]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Er]},e[33333]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5124]},e[33323]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[Cr]},e[36757]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[Vr]},e[33327]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Sr,vr]},e[33328]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Sr]},e[33336]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Cr]},e[33335]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Vr]},e[33338]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},e[33337]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5122]},e[33340]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Er]},e[33339]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[5124]},e[32849]={textureFormat:pr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[Cr]},e[35905]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Cr]},e[36194]={textureFormat:pr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[Cr,33635]},e[36758]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Vr]},e[35898]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Sr,vr,35899]},e[35901]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Sr,vr,35902]},e[34843]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Sr,vr]},e[34837]={textureFormat:pr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Sr]},e[36221]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Cr]},e[36239]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Vr]},e[36215]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Wr]},e[36233]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[5122]},e[36209]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Er]},e[36227]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[5124]},e[32856]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Cr]},e[35907]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Cr]},e[36759]={textureFormat:Ur,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[Vr]},e[32855]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[Cr,32820,33640]},e[32854]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[Cr,32819]},e[32857]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[33640]},e[34842]={textureFormat:Ur,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Sr,vr]},e[34836]={textureFormat:Ur,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Sr]},e[36220]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Cr]},e[36238]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Vr]},e[36975]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[33640]},e[36214]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Wr]},e[36232]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[5122]},e[36226]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[5124]},e[36208]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Er]},e[33189]={textureFormat:mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Wr,Er]},e[33190]={textureFormat:mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Er]},e[36012]={textureFormat:mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Sr]},e[35056]={textureFormat:34041,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[34042]},e[36013]={textureFormat:34041,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[36269]},Object.keys(e).forEach((function(t){const n=e[t];n.bytesPerElementMap={},n.bytesPerElement.forEach((function(e,t){const r=n.type[t];n.bytesPerElementMap[r]=e}))})),wr=e}return wr[e]}function xr(e){const t=Dr(e);if(!t)throw"unknown internal format";return{format:t.textureFormat,type:t.type[0]}}function Mr(e){return 0==(e&e-1)}function Hr(e,t,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(n||r){if(r){if(!n&&(n=i/r)%1)throw"can't guess dimensions"}else if((r=i/n)%1)throw"can't guess dimensions"}else{const e=Math.sqrt(i/(t===Zr?6:1));e%1==0?(n=e,r=e):(n=i,r=1)}return{width:n,height:r}}function Kr(e,t){void 0!==t.colorspaceConversion&&e.pixelStorei(37443,t.colorspaceConversion),void 0!==t.premultiplyAlpha&&e.pixelStorei(37441,t.premultiplyAlpha),void 0!==t.flipY&&e.pixelStorei(37440,t.flipY)}function Lr(e){e.pixelStorei(3317,4),Ar(e)&&(e.pixelStorei(3314,0),e.pixelStorei(32878,0),e.pixelStorei(3316,0),e.pixelStorei(3315,0),e.pixelStorei(32877,0))}function zr(e,t,n,r){r.minMag&&(n.call(e,t,10241,r.minMag),n.call(e,t,10240,r.minMag)),r.min&&n.call(e,t,10241,r.min),r.mag&&n.call(e,t,10240,r.mag),r.wrap&&(n.call(e,t,Ir,r.wrap),n.call(e,t,yr,r.wrap),(t===fr||function(e,t){return typeof WebGLSampler<"u"&&On(t,"WebGLSampler")}(0,t))&&n.call(e,t,32882,r.wrap)),r.wrapR&&n.call(e,t,32882,r.wrapR),r.wrapS&&n.call(e,t,Ir,r.wrapS),r.wrapT&&n.call(e,t,yr,r.wrapT),void 0!==r.minLod&&n.call(e,t,33082,r.minLod),void 0!==r.maxLod&&n.call(e,t,33083,r.maxLod),void 0!==r.baseLevel&&n.call(e,t,33084,r.baseLevel),void 0!==r.maxLevel&&n.call(e,t,33085,r.maxLevel),void 0!==r.compareFunc&&n.call(e,t,34893,r.compareFunc),void 0!==r.compareMode&&n.call(e,t,34892,r.compareMode)}function Or(e,t,n){const r=n.target||Br;e.bindTexture(r,t),zr(e,r,e.texParameteri,n)}function jr(e,t,n,r,i,o){o=o||Ur;const a=(n=n||gr.textureOptions).target||Br;if(r=r||n.width,i=i||n.height,e.bindTexture(a,t),function(e,t,n,r){if(!Ar(e))return Mr(t)&&Mr(n);const i=Dr(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}(e,r,i,o))e.generateMipmap(a);else{const t=function(e){const t=Dr(e);if(!t)throw"unknown internal format";return t.textureFilterable}(o)?9729:9728;e.texParameteri(a,10241,t),e.texParameteri(a,10240,t),e.texParameteri(a,Ir,br),e.texParameteri(a,yr,br)}}function Pr(e){return!0===e.auto||void 0===e.auto&&void 0===e.level}function _r(e,t){return(t=t||{}).cubeFaceOrder||[34069,34070,34071,34072,34073,34074]}function qr(e,t){const n=_r(0,t).map((function(e,t){return{face:e,ndx:t}}));return n.sort((function(e,t){return e.face-t.face})),n}function $r(e,t,n,r){const i=(r=r||gr.textureOptions).target||Br,o=r.level||0;let a=n.width,l=n.height;const c=r.internalFormat||r.format||Ur,s=xr(c),d=r.format||s.format,u=r.type||s.type;if(Kr(e,r),e.bindTexture(i,t),i===Zr){const s=n.width,A=n.height;let h,g;if(s/6===A)h=A,g=[0,0,1,0,2,0,3,0,4,0,5,0];else if(A/6===s)h=s,g=[0,0,0,1,0,2,0,3,0,4,0,5];else if(s/3==A/2)h=s/3,g=[0,0,1,0,2,0,0,1,1,1,2,1];else{if(s/2!=A/3)throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);h=s/2,g=[0,0,1,0,0,1,1,1,0,2,1,2]}const Q=Fr();Q?(Q.canvas.width=h,Q.canvas.height=h,a=h,l=h,qr(0,r).forEach((function(t){const r=g[2*t.ndx+0]*h,i=g[2*t.ndx+1]*h;Q.drawImage(n,r,i,h,h,0,0,h,h),e.texImage2D(t.face,o,c,d,u,Q.canvas)})),Q.canvas.width=1,Q.canvas.height=1):typeof createImageBitmap<"u"&&(a=h,l=h,qr(0,r).forEach((function(s){const A=g[2*s.ndx+0]*h,Q=g[2*s.ndx+1]*h;e.texImage2D(s.face,o,c,h,h,0,d,u,null),createImageBitmap(n,A,Q,h,h,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then((function(n){Kr(e,r),e.bindTexture(i,t),e.texImage2D(s.face,o,c,d,u,n),Pr(r)&&jr(e,t,r,a,l,c)}))})))}else if(i===fr||i===Rr){const t=Math.min(n.width,n.height),r=Math.max(n.width,n.height),a=r/t;if(a%1!=0)throw"can not compute 3D dimensions of element";const l=n.width===r?1:0,s=n.height===r?1:0;e.pixelStorei(3317,1),e.pixelStorei(3314,n.width),e.pixelStorei(32878,0),e.pixelStorei(32877,0),e.texImage3D(i,o,c,t,t,t,0,d,u,null);for(let r=0;r<a;++r){const a=r*t*l,c=r*t*s;e.pixelStorei(3316,a),e.pixelStorei(3315,c),e.texSubImage3D(i,o,0,0,r,t,t,1,d,u,n)}Lr(e)}else e.texImage2D(i,o,c,d,u,n);Pr(r)&&jr(e,t,r,a,l,c),Or(e,t,r)}function ei(){}function ti(e,t){return void 0!==t||function(e){if(typeof document<"u"){const t=document.createElement("a");return t.href=e,t.hostname===location.hostname&&t.port===location.port&&t.protocol===location.protocol}{const t=new URL(location.href).origin;return new URL(e,location.href).origin===t}}(e)?t:"anonymous"}function ni(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap||typeof ImageData<"u"&&e instanceof ImageData||typeof HTMLElement<"u"&&e instanceof HTMLElement}function ri(e,t,n){return ni(e)?(setTimeout((function(){n(null,e)})),e):function(e,t,n){let r;if(n=n||ei,t=ti(e,t=void 0!==t?t:gr.crossOrigin),typeof Image<"u"){r=new Image,void 0!==t&&(r.crossOrigin=t);const i=function(){r.removeEventListener("error",o),r.removeEventListener("load",a),r=null},o=function(){const t="couldn't load image: "+e;Ln(t),n(t,r),i()},a=function(){n(null,r),i()};return r.addEventListener("error",o),r.addEventListener("load",a),r.src=e,r}if(typeof ImageBitmap<"u"){let i,o;const a=function(){n(i,o)},l={};t&&(l.mode="cors"),fetch(e,l).then((function(e){if(!e.ok)throw e;return e.blob()})).then((function(e){return createImageBitmap(e,{premultiplyAlpha:"none",colorSpaceConversion:"none"})})).then((function(e){o=e,setTimeout(a)})).catch((function(e){i=e,setTimeout(a)})),r=null}return r}(e,t,n)}function ii(e,t,n){const r=(n=n||gr.textureOptions).target||Br;if(e.bindTexture(r,t),!1===n.color)return;const i=function(e){return Qr(e=e||gr.textureColor)?e:new Uint8Array([255*e[0],255*e[1],255*e[2],255*e[3]])}(n.color);if(r===Zr)for(let t=0;t<6;++t)e.texImage2D(34069+t,0,Ur,1,1,0,Ur,Cr,i);else r===fr||r===Rr?e.texImage3D(r,0,Ur,1,1,1,0,Ur,Cr,i):e.texImage2D(r,0,Ur,1,1,0,Ur,Cr,i)}function oi(e,t,n,r){r=r||ei;const i=n.src;if(6!==i.length)throw"there must be 6 urls for a cubemap";const o=n.level||0,a=n.internalFormat||n.format||Ur,l=xr(a),c=n.format||l.format,s=n.type||Cr,d=n.target||Br;if(d!==Zr)throw"target must be TEXTURE_CUBE_MAP";ii(e,t,n),n=Object.assign({},n);let u=6;const A=[],h=_r(0,n);let g;g=i.map((function(i,l){return ri(i,n.crossOrigin,function(i){return function(l,h){--u,l?A.push(l):h.width!==h.height?A.push("cubemap face img is not a square: "+h.src):(Kr(e,n),e.bindTexture(d,t),5===u?_r().forEach((function(t){e.texImage2D(t,o,a,c,s,h)})):e.texImage2D(i,o,a,c,s,h),Pr(n)&&e.generateMipmap(d)),0===u&&r(A.length?A:void 0,t,g)}}(h[l]))}))}function ai(e,t,n,r){r=r||ei;const i=n.src,o=n.internalFormat||n.format||Ur,a=xr(o),l=n.format||a.format,c=n.type||Cr,s=n.target||Rr;if(s!==fr&&s!==Rr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";ii(e,t,n),n=Object.assign({},n);let d=i.length;const u=[];let A;const h=n.level||0;let g=n.width,Q=n.height;const F=i.length;let p=!0;A=i.map((function(i,a){return ri(i,n.crossOrigin,function(i){return function(a,U){if(--d,a)u.push(a);else{if(Kr(e,n),e.bindTexture(s,t),p){p=!1,g=n.width||U.width,Q=n.height||U.height,e.texImage3D(s,h,o,g,Q,F,0,l,c,null);for(let t=0;t<F;++t)e.texSubImage3D(s,h,0,0,t,g,Q,1,l,c,U)}else{let t,n=U;(U.width!==g||U.height!==Q)&&(t=Fr(),n=t.canvas,t.canvas.width=g,t.canvas.height=Q,t.drawImage(U,0,0,g,Q)),e.texSubImage3D(s,h,0,0,i,g,Q,1,l,c,n),t&&n===t.canvas&&(t.canvas.width=0,t.canvas.height=0)}Pr(n)&&e.generateMipmap(s)}0===d&&r(u.length?u:void 0,t,A)}}(a))}))}function li(e,t,n,r){const i=(r=r||gr.textureOptions).target||Br;e.bindTexture(i,t);let o=r.width,a=r.height,l=r.depth;const c=r.level||0,s=r.internalFormat||r.format||Ur,d=xr(s),u=r.format||d.format,A=r.type||function(e,t,n){return Qr(t)?xn(t):n||Cr}(0,n,d.type);if(Qr(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const e=Hn(A);n=new e(n)}const h=function(e,t){const n=Dr(e);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[t];if(void 0===r)throw"unknown internal format";return r}(s,A),g=n.byteLength/h;if(g%1)throw"length wrong size for format: "+hr(e,u);let Q;if(i===fr||i===Rr)if(o||a||l)!o||a&&l?!a||o&&l?(Q=Hr(0,i,o,a,g/l),o=Q.width,a=Q.height):(Q=Hr(0,i,o,l,g/a),o=Q.width,l=Q.height):(Q=Hr(0,i,a,l,g/o),a=Q.width,l=Q.height);else{const e=Math.cbrt(g);if(e%1!=0)throw"can't guess cube size of array of numElements: "+g;o=e,a=e,l=e}else Q=Hr(0,i,o,a,g),o=Q.width,a=Q.height;if(Lr(e),e.pixelStorei(3317,r.unpackAlignment||1),Kr(e,r),i===Zr){const t=g/6*(h/n.BYTES_PER_ELEMENT);qr(0,r).forEach(r=>{const i=t*r.ndx,l=n.subarray(i,i+t);e.texImage2D(r.face,c,s,o,a,0,u,A,l)})}else i===fr||i===Rr?e.texImage3D(i,c,s,o,a,l,0,u,A,n):e.texImage2D(i,c,s,o,a,0,u,A,n);return{width:o,height:a,depth:l,type:A}}function ci(e,t,n){n=n||ei,t=t||gr.textureOptions;const r=e.createTexture(),i=t.target||Br;let o=t.width||1,a=t.height||1;const l=t.internalFormat||Ur;e.bindTexture(i,r),i===Zr&&(e.texParameteri(i,Ir,br),e.texParameteri(i,yr,br));let c=t.src;if(c)if("function"==typeof c&&(c=c(e,t)),"string"==typeof c)!function(e,t,n,r){r=r||ei,ii(e,t,n=n||gr.textureOptions),ri((n=Object.assign({},n)).src,n.crossOrigin,(function(i,o){i?r(i,t,o):($r(e,t,o,n),r(null,t,o))}))}(e,r,t,n);else if(Qr(c)||Array.isArray(c)&&("number"==typeof c[0]||Array.isArray(c[0])||Qr(c[0]))){const n=li(e,r,c,t);o=n.width,a=n.height}else Array.isArray(c)&&("string"==typeof c[0]||ni(c[0]))?i===Zr?oi(e,r,t,n):ai(e,r,t,n):($r(e,r,c,t),o=c.width,a=c.height);else!function(e,t,n){const r=n.target||Br;e.bindTexture(r,t);const i=n.level||0,o=n.internalFormat||n.format||Ur,a=xr(o),l=n.format||a.format,c=n.type||a.type;if(Kr(e,n),r===Zr)for(let t=0;t<6;++t)e.texImage2D(34069+t,i,o,n.width,n.height,0,l,c,null);else r===fr||r===Rr?e.texImage3D(r,i,o,n.width,n.height,n.depth,0,l,c,null):e.texImage2D(r,i,o,n.width,n.height,0,l,c,null)}(e,r,t);return Pr(t)&&jr(e,r,t,o,a,l),Or(e,r,t),r}const si=Ln;function di(e){return typeof document<"u"&&document.getElementById?document.getElementById(e):null}const ui=33984,Ai=34962,hi=34067,gi=35866,Qi={};function Fi(e,t){return Qi[t].bindPoint}function pi(e,t){return function(n){e.uniform1i(t,n)}}function Ui(e,t){return function(n){e.uniform1iv(t,n)}}function mi(e,t){return function(n){e.uniform2iv(t,n)}}function bi(e,t){return function(n){e.uniform3iv(t,n)}}function Bi(e,t){return function(n){e.uniform4iv(t,n)}}function Zi(e,t,n,r){const i=Fi(0,t);return Ar(e)?function(t){let o,a;!t||jn(0,t)?(o=t,a=null):(o=t.texture,a=t.sampler),e.uniform1i(r,n),e.activeTexture(ui+n),e.bindTexture(i,o),e.bindSampler(n,a)}:function(t){e.uniform1i(r,n),e.activeTexture(ui+n),e.bindTexture(i,t)}}function fi(e,t,n,r,i){const o=Fi(0,t),a=new Int32Array(i);for(let e=0;e<i;++e)a[e]=n+e;return Ar(e)?function(t){e.uniform1iv(r,a),t.forEach((function(t,r){let i,l;e.activeTexture(ui+a[r]),!t||jn(0,t)?(i=t,l=null):(i=t.texture,l=t.sampler),e.bindSampler(n,l),e.bindTexture(o,i)}))}:function(t){e.uniform1iv(r,a),t.forEach((function(t,n){e.activeTexture(ui+a[n]),e.bindTexture(o,t)}))}}function Ri(e,t){return function(n){if(n.value)switch(e.disableVertexAttribArray(t),n.value.length){case 4:e.vertexAttrib4fv(t,n.value);break;case 3:e.vertexAttrib3fv(t,n.value);break;case 2:e.vertexAttrib2fv(t,n.value);break;case 1:e.vertexAttrib1fv(t,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else e.bindBuffer(Ai,n.buffer),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n.numComponents||n.size,n.type||5126,n.normalize||!1,n.stride||0,n.offset||0),e.vertexAttribDivisor&&e.vertexAttribDivisor(t,n.divisor||0)}}function Ii(e,t){return function(n){if(n.value){if(e.disableVertexAttribArray(t),4!==n.value.length)throw new Error("The length of an integer constant value must be 4!");e.vertexAttrib4iv(t,n.value)}else e.bindBuffer(Ai,n.buffer),e.enableVertexAttribArray(t),e.vertexAttribIPointer(t,n.numComponents||n.size,n.type||5124,n.stride||0,n.offset||0),e.vertexAttribDivisor&&e.vertexAttribDivisor(t,n.divisor||0)}}function yi(e,t){return function(n){if(n.value){if(e.disableVertexAttribArray(t),4!==n.value.length)throw new Error("The length of an unsigned integer constant value must be 4!");e.vertexAttrib4uiv(t,n.value)}else e.bindBuffer(Ai,n.buffer),e.enableVertexAttribArray(t),e.vertexAttribIPointer(t,n.numComponents||n.size,n.type||5125,n.stride||0,n.offset||0),e.vertexAttribDivisor&&e.vertexAttribDivisor(t,n.divisor||0)}}function Vi(e,t,n){const r=n.size,i=n.count;return function(n){e.bindBuffer(Ai,n.buffer);const o=n.size||n.numComponents||r,a=o/i,l=n.type||5126,c=Qi[l].size*o,s=n.normalize||!1,d=n.offset||0,u=c/i;for(let r=0;r<i;++r)e.enableVertexAttribArray(t+r),e.vertexAttribPointer(t+r,a,l,s,c,d+u*r),e.vertexAttribDivisor&&e.vertexAttribDivisor(t+r,n.divisor||0)}}Qi[5126]={Type:Float32Array,size:4,setter:function(e,t){return function(n){e.uniform1f(t,n)}},arraySetter:function(e,t){return function(n){e.uniform1fv(t,n)}}},Qi[35664]={Type:Float32Array,size:8,setter:function(e,t){return function(n){e.uniform2fv(t,n)}},cols:2},Qi[35665]={Type:Float32Array,size:12,setter:function(e,t){return function(n){e.uniform3fv(t,n)}},cols:3},Qi[35666]={Type:Float32Array,size:16,setter:function(e,t){return function(n){e.uniform4fv(t,n)}},cols:4},Qi[5124]={Type:Int32Array,size:4,setter:pi,arraySetter:Ui},Qi[35667]={Type:Int32Array,size:8,setter:mi,cols:2},Qi[35668]={Type:Int32Array,size:12,setter:bi,cols:3},Qi[35669]={Type:Int32Array,size:16,setter:Bi,cols:4},Qi[5125]={Type:Uint32Array,size:4,setter:function(e,t){return function(n){e.uniform1ui(t,n)}},arraySetter:function(e,t){return function(n){e.uniform1uiv(t,n)}}},Qi[36294]={Type:Uint32Array,size:8,setter:function(e,t){return function(n){e.uniform2uiv(t,n)}},cols:2},Qi[36295]={Type:Uint32Array,size:12,setter:function(e,t){return function(n){e.uniform3uiv(t,n)}},cols:3},Qi[36296]={Type:Uint32Array,size:16,setter:function(e,t){return function(n){e.uniform4uiv(t,n)}},cols:4},Qi[35670]={Type:Uint32Array,size:4,setter:pi,arraySetter:Ui},Qi[35671]={Type:Uint32Array,size:8,setter:mi,cols:2},Qi[35672]={Type:Uint32Array,size:12,setter:bi,cols:3},Qi[35673]={Type:Uint32Array,size:16,setter:Bi,cols:4},Qi[35674]={Type:Float32Array,size:32,setter:function(e,t){return function(n){e.uniformMatrix2fv(t,!1,n)}},rows:2,cols:2},Qi[35675]={Type:Float32Array,size:48,setter:function(e,t){return function(n){e.uniformMatrix3fv(t,!1,n)}},rows:3,cols:3},Qi[35676]={Type:Float32Array,size:64,setter:function(e,t){return function(n){e.uniformMatrix4fv(t,!1,n)}},rows:4,cols:4},Qi[35685]={Type:Float32Array,size:32,setter:function(e,t){return function(n){e.uniformMatrix2x3fv(t,!1,n)}},rows:2,cols:3},Qi[35686]={Type:Float32Array,size:32,setter:function(e,t){return function(n){e.uniformMatrix2x4fv(t,!1,n)}},rows:2,cols:4},Qi[35687]={Type:Float32Array,size:48,setter:function(e,t){return function(n){e.uniformMatrix3x2fv(t,!1,n)}},rows:3,cols:2},Qi[35688]={Type:Float32Array,size:48,setter:function(e,t){return function(n){e.uniformMatrix3x4fv(t,!1,n)}},rows:3,cols:4},Qi[35689]={Type:Float32Array,size:64,setter:function(e,t){return function(n){e.uniformMatrix4x2fv(t,!1,n)}},rows:4,cols:2},Qi[35690]={Type:Float32Array,size:64,setter:function(e,t){return function(n){e.uniformMatrix4x3fv(t,!1,n)}},rows:4,cols:3},Qi[35678]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:3553},Qi[35680]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:hi},Qi[35679]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:32879},Qi[35682]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:3553},Qi[36289]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:gi},Qi[36292]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:gi},Qi[36293]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:hi},Qi[36298]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:3553},Qi[36299]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:32879},Qi[36300]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:hi},Qi[36303]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:gi},Qi[36306]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:3553},Qi[36307]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:32879},Qi[36308]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:hi},Qi[36311]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:gi};const Ci={};Ci[5126]={size:4,setter:Ri},Ci[35664]={size:8,setter:Ri},Ci[35665]={size:12,setter:Ri},Ci[35666]={size:16,setter:Ri},Ci[5124]={size:4,setter:Ii},Ci[35667]={size:8,setter:Ii},Ci[35668]={size:12,setter:Ii},Ci[35669]={size:16,setter:Ii},Ci[5125]={size:4,setter:yi},Ci[36294]={size:8,setter:yi},Ci[36295]={size:12,setter:yi},Ci[36296]={size:16,setter:yi},Ci[35670]={size:4,setter:Ii},Ci[35671]={size:8,setter:Ii},Ci[35672]={size:12,setter:Ii},Ci[35673]={size:16,setter:Ii},Ci[35674]={size:4,setter:Vi,count:2},Ci[35675]={size:9,setter:Vi,count:3},Ci[35676]={size:16,setter:Vi,count:4};const Wi=/ERROR:\s*\d+:(\d+)/gi;const Ei=/^[ \t]*\n/;function Si(e){let t=0;return Ei.test(e)&&(t=1,e=e.replace(Ei,"")),{lineOffset:t,shaderSource:e}}function vi(e,t,n,r){if(r=r||si,!e.getShaderParameter(n,35713)){const i=e.getShaderInfoLog(n),o=Si(e.getShaderSource(n)),a=o.lineOffset,l=`${function(e,t,n){void 0===t&&(t=""),void 0===n&&(n=0);const r=[...t.matchAll(Wi)],i=new Map(r.map((e,n)=>{const i=parseInt(e[1]),o=r[n+1],a=o?o.index:t.length;return[i-1,t.substring(e.index,a)]}));return e.split("\n").map((e,t)=>{const r=i.get(t);return`${t+1+n}: ${e}${r?"\n\n^^^ "+r:""}`}).join("\n")}(o.shaderSource,i,a)}\nError compiling ${hr(e,t)}: ${i}`;return r(l),l}return""}function Ji(e,t,n){let r,i,o;if("function"==typeof t&&(n=t,t=void 0),"function"==typeof e)n=e,e=void 0;else if(e&&!Array.isArray(e)){const t=e;n=t.errorCallback,e=t.attribLocations,r=t.transformFeedbackVaryings,i=t.transformFeedbackMode,o=t.callback}const a=n||si,l=[],c={errorCallback(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];l.push(e),a(e,...n)},transformFeedbackVaryings:r,transformFeedbackMode:i,callback:o,errors:l};{let n={};Array.isArray(e)?e.forEach((function(e,r){n[e]=t?t[r]:r})):n=e||{},c.attribLocations=n}return c}const Ni=["VERTEX_SHADER","FRAGMENT_SHADER"];function Gi(e,t){return t.indexOf("frag")>=0?35632:t.indexOf("vert")>=0?35633:void 0}const Xi=function(t){return void 0===t&&(t=0),new e(e=>setTimeout(e,t))};function ki(e,t,n,r,i){const o=Ji(n,r,i),a=new Set(t),l=function(e,t,n){const r=e.createProgram(),i=Ji(n),o=i.attribLocations,a=i.transformFeedbackVaryings,l=i.transformFeedbackMode;for(let n=0;n<t.length;++n){let i=t[n];if("string"==typeof i){const t=di(i),o=t?t.text:i;let a=e[Ni[n]];t&&t.type&&(a=Gi(0,t.type)||a),i=e.createShader(a),e.shaderSource(i,Si(o).shaderSource),e.compileShader(i),e.attachShader(r,i)}}Object.entries(o).forEach(t=>{let n=t[0],i=t[1];return e.bindAttribLocation(r,i,n)});{let t=a;t&&(t.attribs&&(t=t.attribs),Array.isArray(t)||(t=Object.keys(t)),e.transformFeedbackVaryings(r,t,l||35981))}return e.linkProgram(r),r}(e,t,o);function c(e,t){const n=function(e,t,n){if(n=n||si,!e.getProgramParameter(t,35714)){const r=e.getProgramInfoLog(t);n("Error in program linking: "+r);const i=e.getAttachedShaders(t).map(t=>vi(e,e.getShaderParameter(t,e.SHADER_TYPE),t,n));return`${r}\n${i.filter(e=>e).join("\n")}`}}(e,t,o.errorCallback);return n&&function(e,t,n){for(var r,i=A(e.getAttachedShaders(t));!(r=i()).done;){const t=r.value;n.has(t)&&e.deleteShader(t)}e.deleteProgram(t)}(e,t,a),n}if(!o.callback)return c(e,l)?void 0:l;(function(e,t){return Ti.apply(this,arguments)})(e,l).then(()=>{const t=c(e,l);o.callback(t,t?void 0:l)})}function Ti(){return(Ti=(0,c.default)(o.default.mark((function e(t,n){var r,i,a;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=t.getExtension("KHR_parallel_shader_compile"),i=r?(e,t)=>e.getProgramParameter(t,r.COMPLETION_STATUS_KHR):()=>!0,a=0;case 2:return e.next=4,Xi(a);case 4:a=1e3/60;case 5:if(!i(t,n)){e.next=2;break}case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Yi(e){const t=e.name;return t.startsWith("gl_")||t.startsWith("webgl_")}const wi=/(\.|\[|]|\w+)/g,Di=e=>e>="0"&&e<="9";function xi(e,t,n,r){const i=e.split(wi).filter(e=>""!==e);let o=0,a="";for(;;){const e=i[o++];a+=e;const l=Di(e[0]),c=l?parseInt(e):e;if(l&&(a+=i[o++]),o===i.length){n[c]=t;break}{const e=i[o++],t="["===e,l=n[c]||(t?[]:{});n[c]=l,n=l,r[a]=r[a]||function(e){return function(t){Mi(e,t)}}(l),a+=e}}}function Mi(e,t){for(const n in t){const r=e[n];"function"==typeof r?r(t[n]):Mi(e[n],t[n])}}function Hi(e,t){const n=function(e,t){let n=0;function r(t,r,i){const o=r.name.endsWith("[0]"),a=r.type,l=Qi[a];if(!l)throw new Error("unknown type: 0x"+a.toString(16));let c;if(l.bindPoint){const t=n;n+=r.size,c=o?l.arraySetter(e,a,t,i,r.size):l.setter(e,a,t,i,r.size)}else c=l.arraySetter&&o?l.arraySetter(e,i):l.setter(e,i);return c.location=i,c}const i={},o={},a=e.getProgramParameter(t,35718);for(let n=0;n<a;++n){const a=e.getActiveUniform(t,n);if(Yi(a))continue;let l=a.name;l.endsWith("[0]")&&(l=l.substr(0,l.length-3));const c=e.getUniformLocation(t,a.name);if(c){const e=r(0,a,c);i[l]=e,xi(l,e,o,i)}}return i}(e,t),r=function(e,t){const n={},r=e.getProgramParameter(t,35721);for(let i=0;i<r;++i){const r=e.getActiveAttrib(t,i);if(Yi(r))continue;const o=e.getAttribLocation(t,r.name),a=Ci[r.type],l=a.setter(e,o,a);l.location=o,n[r.name]=l}return n}(e,t),i={program:t,uniformSetters:n,attribSetters:r};return Ar(e)&&(i.uniformBlockSpec=function(e,t){const n=e.getProgramParameter(t,35718),r=[],i=[];for(let o=0;o<n;++o){i.push(o),r.push({});const n=e.getActiveUniform(t,o);r[o].name=n.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach((function(n){const o=n[0],a=n[1];e.getActiveUniforms(t,i,e[o]).forEach((function(e,t){r[t][a]=e}))}));const o={},a=e.getProgramParameter(t,35382);for(let n=0;n<a;++n){const r=e.getActiveUniformBlockName(t,n),i={index:e.getUniformBlockIndex(t,r),usedByVertexShader:e.getActiveUniformBlockParameter(t,n,35396),usedByFragmentShader:e.getActiveUniformBlockParameter(t,n,35398),size:e.getActiveUniformBlockParameter(t,n,35392),uniformIndices:e.getActiveUniformBlockParameter(t,n,35395)};i.used=i.usedByVertexShader||i.usedByFragmentShader,o[r]=i}return{blockSpecs:o,uniformData:r}}(e,t),i.transformFeedbackInfo=function(e,t){const n={},r=e.getProgramParameter(t,35971);for(let i=0;i<r;++i){const r=e.getTransformFeedbackVarying(t,i);n[r.name]={index:i,type:r.type,size:r.size}}return n}(e,t)),i}const Ki=/\s|{|}|;/;function Li(e,t,n,r,i){const o=Ji(n,r,i),a=[];if(t=t.map((function(e){if(!Ki.test(e)){const t=di(e);if(t)e=t.text;else{const t="no element with id: "+e;o.errorCallback(t),a.push(t)}}return e})),a.length)return function(e,t){return e.errorCallback(t),e.callback&&setTimeout(()=>{e.callback(`${t}\n${e.errors.join("\n")}`)}),null}(o,"");const l=o.callback;l&&(o.callback=(t,n)=>{l(t,t?void 0:Hi(e,n))});const c=function(e,t,n,r,i){return ki(e,t,n,r,i)}(e,t,o);return c?Hi(e,c):null}const zi=36161,Oi=36096,ji=[{format:6408,type:5121,min:9729,wrap:33071},{format:34041}],Pi={};Pi[34041]=33306,Pi[6401]=36128,Pi[36168]=36128,Pi[6402]=Oi,Pi[33189]=Oi,Pi[33190]=Oi,Pi[36012]=Oi,Pi[35056]=33306,Pi[36013]=33306;const _i={};_i[32854]=!0,_i[32855]=!0,_i[36194]=!0,_i[34041]=!0,_i[33189]=!0,_i[6401]=!0,_i[36168]=!0;function qi(e,t,n,r){const i=36160,o=e.createFramebuffer();e.bindFramebuffer(i,o),n=n||e.drawingBufferWidth,r=r||e.drawingBufferHeight;const a=[],l={framebuffer:o,attachments:[],width:n,height:r};return(t=t||ji).forEach((function(t,o){let c=t.attachment;const s=t.samples,d=t.format;let u=t.attachmentPoint||function(e,t){return Pi[e]||Pi[t]}(d,t.internalFormat);if(u||(u=36064+o),function(e){return e>=36064&&e<36096}(u)&&a.push(u),!c)if(void 0!==s||function(e){return _i[e]}(d))c=e.createRenderbuffer(),e.bindRenderbuffer(zi,c),s>1?e.renderbufferStorageMultisample(zi,s,d,n,r):e.renderbufferStorage(zi,d,n,r);else{const i=Object.assign({},t);i.width=n,i.height=r,void 0===i.auto&&(i.auto=!1,i.min=i.min||i.minMag||9729,i.mag=i.mag||i.minMag||9729,i.wrapS=i.wrapS||i.wrap||33071,i.wrapT=i.wrapT||i.wrap||33071),c=ci(e,i)}if(function(e,t){return typeof WebGLRenderbuffer<"u"&&On(t,"WebGLRenderbuffer")}(0,c))e.framebufferRenderbuffer(i,u,zi,c);else{if(!jn(0,c))throw new Error("unknown attachment type");void 0!==t.layer?e.framebufferTextureLayer(i,u,c,t.level||0,t.layer):e.framebufferTexture2D(i,u,t.target||3553,c,t.level||0)}l.attachments.push(c)})),e.drawBuffers&&e.drawBuffers(a),l}function $i(e,t){return()=>t instanceof WebGLTexture?t:ci(e,{src:t,wrap:e.CLAMP_TO_EDGE})}let eo=function(){function e(e){this.id="_";const t=e.context,n=e.width,r=e.height;this.context=t,this.options=e;const i=this.buildDefines();this.programInfo=Li(this.context,[i+this.getVertexShader(),i+this.getFragmentShader()]),this.bufferInfo=ur(this.context,this.getBuffers()),this.fbi=qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.output=this.fbi.attachments[0]}var t=e.prototype;return t.resizeOutput=function(e,t){this.fbi=qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],e,t),this.options.width=e,this.options.height=t,this.output=this.fbi.attachments[0]},t.getDefines=function(){return{}},t.getBuffers=function(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}},t.buildDefines=function(){let e="";const t=this.getDefines();for(let n in t)e+=`#define ${n} ${t[n].toFixed(1)}\n`;return e},t.run=function(e){var t,n,r,i,o,a;null==(t=this.profiler)||t.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),null==(n=this.profiler)||n.pushContext(`[${this.id}] UNIFORMS`);for(const t in e)"function"==typeof e[t]&&(null==(r=this.profiler)||r.pushContext(`[${this.id}] UNI : ${t}`),e[t]=e[t](),null==(i=this.profiler)||i.popContext(`[${this.id}] UNI : ${t}`));null==(o=this.profiler)||o.popContext(`[${this.id}] UNIFORMS`);const l=Date.now();let c=0;this.lastRun&&(c=(l-this.lastRun)/1e3),this.lastRun=l,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),function(e,t,n){n.vertexArrayObject?e.bindVertexArray(n.vertexArrayObject):(function(e,t){for(const n in t){const r=e[n];r&&r(t[n])}}(t.attribSetters||t,n.attribs),n.indices&&e.bindBuffer(34963,n.indices))}(this.context,this.programInfo,this.bufferInfo),function e(t){const n=t.uniformSetters||t,r=arguments.length<=1?0:arguments.length-1;for(let t=0;t<r;++t){const r=t+1<1||arguments.length<=t+1?void 0:arguments[t+1];if(Array.isArray(r)){const t=r.length;for(let i=0;i<t;++i)e(n,r[i])}else for(const e in r){const t=n[e];t&&t(r[e])}}}(this.programInfo,Object.assign({delta:c,canvas:[this.context.canvas.width,this.context.canvas.height]},e)),function(e,t,n){n=n||36160,t?(e.bindFramebuffer(n,t.framebuffer),e.viewport(0,0,t.width,t.height)):(e.bindFramebuffer(n,null),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight))}(this.context,this.options.disableFramebuffer?null:this.fbi),function(e,t,n,r,i,o){n=void 0===n?4:n;const a=t.indices,l=t.elementType,c=void 0===r?t.numElements:r;i=void 0===i?0:i,l||a?void 0!==o?e.drawElementsInstanced(n,c,void 0===l?5123:t.elementType,i,o):e.drawElements(n,c,void 0===l?5123:t.elementType,i):void 0!==o?e.drawArraysInstanced(n,i,c,o):e.drawArrays(n,i,c)}(this.context,this.bufferInfo),null==(a=this.profiler)||a.popContext(`[${this.id}] PROG : ${this.constructor.name}`)},t.setProfiler=function(e){this.profiler=e},e}();let to=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getFragmentShader=function(){return"precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D background;\nuniform sampler2D foreground;\nuniform sampler2D threshold;\n\nvoid main() {\n vec4 backgroundColor = texture2D(background, _texture_coord);\n vec4 foregroundColor = texture2D(foreground, _texture_coord);\n vec4 tresholdColor = texture2D(threshold, _texture_coord);\n gl_FragColor = foregroundColor * tresholdColor.a +\n backgroundColor * (1. - tresholdColor.a);\n}\n"},n.getVertexShader=function(){return"varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n _texture_coord.y = 1. - texture_coord.y;\n}\n"},t}(eo),no=function(){function e(){this.steps=[]}var t=e.prototype;return t.addStep=function(e){this.steps.push(e)},t.run=function(){var e=(0,c.default)(o.default.mark((function e(){var t,n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(t=A(this.steps);!(n=t()).done;)(r=n.value).program.run(r.getUniforms());case 1:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.resizeOutput=function(e,t){var n,r;null==(n=this.profiler)||n.pushContext(`PIP [${this.constructor.name}]`);for(var i,o=A(this.steps);!(i=o()).done;){const n=i.value;n.preventResize||n.program.resizeOutput(e,t)}null==(r=this.profiler)||r.popContext(`PIP [${this.constructor.name}]`)},t.setProfiler=function(e){this.profiler=e;for(var t,n=A(this.steps);!(t=n()).done;){t.value.program.setProfiler(e)}},t.setId=function(e){for(var t,n=A(this.steps);!(t=n()).done;){t.value.program.id=e}},e}(),ro=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).preciseMaskEnabled=!1,t}return(0,a.default)(t,e),t}(no),io=function(e){function t(t){var n;(n=e.call(this)||this).context=t,n.preciseMaskEnabled=!0;const r={context:t,height:t.canvas.height,width:t.canvas.width},i=new to(Object.assign({},r,{disableFramebuffer:!0}));return n.addStep({program:i,getUniforms:()=>({background:$i(t,n.inputBackgroundImage),foreground:$i(t,n.inputImage),threshold:$i(t,n.inputMask)})}),n}return(0,a.default)(t,e),t.prototype.setData=function(e,t){this.inputImage=e,this.inputMask=t},t}(ro);let oo=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getFragmentShader=function(){return"precision mediump float;\n\nvarying vec2 _texture_coord;\nuniform sampler2D texture;\n\nvoid main() { gl_FragColor = texture2D(texture, _texture_coord); }\n"},n.getVertexShader=function(){return"varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\nuniform bool invert_y;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n if (invert_y) {\n _texture_coord.y = 1. - texture_coord.y;\n }\n}\n"},t}(eo),ao=function(e){function t(t,n,r){var i;(i=e.call(this)||this).context=t;const o={context:t,height:r,width:n};return i.addStep({program:new oo(Object.assign({},o,{disableFramebuffer:!0})),getUniforms:()=>({texture:$i(t,i.inputImage),invert_y:!0})}),i}return(0,a.default)(t,e),t.prototype.setData=function(e){this.inputImage=e},t}(no);function lo(e){return co.apply(this,arguments)}function co(){return(co=(0,c.default)(o.default.mark((function t(n){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",new e(e=>{setTimeout(()=>{e()},n)}));case 1:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var so=(e=>(e[e.LINEAR=0]="LINEAR",e[e.GAUSSIAN=1]="GAUSSIAN",e))(so||{});let uo=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getDefines=function(){var e;return{RADIUS:null!=(e=this.options.radius)?e:1}},n.getFragmentShader=function(){return"precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n"+this.createLoopFunction()},n.getVertexShader=function(){return"varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n"},n.createLoopFunction=function(){var e;let t=null!=(e=this.options.radius)?e:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${t}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n\n for(int y=-${t}; y<${t+1}; ++y) {\n for(int x=-${t}; x<${t+1}; ++x) {\n float factor = 1.;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`},n.getFactor=function(e,t){switch(this.options.type){case 1:return this.getLinearFactor(e,t);case 0:default:return this.getLinearFactor(e,t)}},n.getLinearFactor=function(e,t){return 1},n.getGaussianFactor=function(e,t){var n;const r=2*Math.PI,i=Math.max(null!=(n=this.options.radius)?n:1,1),o=1/(r*Math.pow(i,2)),a=o*-(Math.pow(e,2)+Math.pow(t,2));return o*Math.pow(Math.E,a)},t}(eo);let Ao=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getFragmentShader=function(){return"#version 300 es\n// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts\n\nprecision highp float;\nuniform sampler2D input_frame;\nuniform sampler2D segmentation_mask;\nuniform sampler2D threshold;\nuniform vec2 texel_size;\nuniform float step;\nuniform float radius;\nuniform float offset;\nuniform float sigma_texel;\nuniform float sigma_color;\n\nin vec2 _texture_coord;\nout vec4 outColor;\n\nfloat gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n}\n\nvoid main() {\n vec2 centerCoord = _texture_coord;\n vec3 centerColor = texture(input_frame, centerCoord).rgb;\n float newVal = 0.0;\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n // Subsample kernel space.\n for (float i = -radius + offset; i <= radius; i += step) {\n for (float j = -radius + offset; j <= radius; j += step) {\n vec2 shift = vec2(j, i) * texel_size;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(input_frame, coord).rgb;\n float threshold = texture(threshold, coord).a;\n float outVal = texture(segmentation_mask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), sigma_texel);\n colorWeight = gaussian(distance(centerColor, frameColor), sigma_color);\n totalWeight += spaceWeight * colorWeight;\n newVal += spaceWeight * colorWeight * outVal * threshold;\n }\n }\n newVal /= totalWeight;\n outColor = vec4(vec3(0.), newVal);\n}"},n.getVertexShader=function(){return"#version 300 es\nin vec2 position;\nin vec2 texture_coord;\nout vec2 _texture_coord;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n _texture_coord = texture_coord;\n}"},t}(eo),ho=function(e){function t(t,n,r){var i;(i=e.call(this)||this).context=t;const o={context:t,height:r,width:n},a=new uo(Object.assign({},o,{radius:1,type:so.GAUSSIAN}));return i.jointBilateral=new Ao(o),i.addStep({program:a,getUniforms:()=>({inputs:$i(t,i.inputMask)})}),i.addStep({program:i.jointBilateral,getUniforms:()=>{var e,n,r,o,a,l;const c=null!=(e=null==(r=i.inputImage)?void 0:r.width)?e:1,s=null!=(n=null==(o=i.inputImage)?void 0:o.height)?n:1;null==(a=i.inputMask)||a.width,null==(l=i.inputMask)||l.height;const d=Math.max(1,.66*Math.sqrt(3)),u=1/c,A=1/s;return{input_frame:$i(t,i.inputImage),segmentation_mask:$i(t,i.inputMask),texel_size:[u,A],step:d,radius:3,offset:d>1?.5*d:0,sigma_texel:3*Math.max(u,A),sigma_color:3}}}),i.output=i.jointBilateral.output,i}(0,a.default)(t,e);var n=t.prototype;return n.setData=function(e,t){this.previousInputImage=this.inputImage?this.inputImage:e,this.previousInputMask=this.inputMask?this.inputMask:t,this.inputImage=e,this.inputMask=t},n.resizeOutput=function(t,n){e.prototype.resizeOutput.call(this,t,n),this.output=this.jointBilateral.output},t}(no);var go=(e=>(e.PUSH="PUSH",e.POP="POP",e))(go||{});let Qo=function(){function t(e){this.queries=[],this.context=e,this.extension=e.getExtension("EXT_disjoint_timer_query_webgl2")}var n=t.prototype;return n.start=function(){},n.stop=function(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)},n.pushContext=function(e){this.createQuery("PUSH",e)},n.popContext=function(e){this.createQuery("POP",e)},n.createQuery=function(e,t){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:t,action:e,query:this.activeQuery})},n.getResolvedQueries=function(){var t=(0,c.default)(o.default.mark((function t(){var n,r;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.all([...this.queries].map(e=>this.resolveQuery(e)));case 2:for(n=t.sent.filter(e=>e),r=1;r<n.length;++r)n[r].timestamp+=n[r-1].duration+n[r-1].timestamp;return t.abrupt("return",n);case 5:case"end":return t.stop()}}),t,this)})));return function(){return t.apply(this,arguments)}}(),n.resolveQuery=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.awaitQueryAvailable(t);case 2:if(e.sent){e.next=5;break}return console.log("Unawaitable query",t),e.abrupt("return");case 5:if(!this.context.getParameter(this.extension.GPU_DISJOINT_EXT)){e.next=8;break}return console.log("Disjointed query",t),e.abrupt("return");case 8:return e.abrupt("return",Object.assign({},t,{duration:this.context.getQueryParameter(t.query,this.context.QUERY_RESULT),timestamp:0}));case 9:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.awaitQueryAvailable=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=0;case 1:if(!(n<10)){e.next=9;break}if(!this.context.getQueryParameter(t.query,this.context.QUERY_RESULT_AVAILABLE)){e.next=4;break}return e.abrupt("return",t);case 4:return e.next=6,lo(200);case 6:++n,e.next=1;break;case 9:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t}(),Fo=function(){function e(){this.previousImageWidth=0,this.previousImageHeight=0,this.previousMaskWidth=2,this.previousMaskHeight=2,this.postProcessingEnabled=!0;const e=new OffscreenCanvas(0,0),t=e.getContext("webgl2");if(!t)throw"Fail to retrieve webgl2 context";this.canvas=e,this.context=t,this.improveMask=new ho(this.context,2,2)}var t=e.prototype;return t.enablePostProcessing=function(){this.postProcessingEnabled=!0},t.disablePostProcessing=function(){this.postProcessingEnabled=!1},t.profileWebgl=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=new Qo(this.context),this.profiler=n,n.start(),e.next=5,lo(t);case 5:return this.profiler=void 0,n.stop(),e.abrupt("return",n.getResolvedQueries());case 8:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.render=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r,i,a,l,c;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.pipeline){e.next=2;break}throw"missing pipeline";case 2:return(this.previousImageHeight!==t.height||this.previousImageWidth!==t.width)&&this.resizeOutput(t.width,t.height),(this.previousMaskHeight!==n.height||this.previousMaskWidth!==n.width)&&(this.improveMask.resizeOutput(n.width,n.height),this.previousMaskWidth=n.width,this.previousMaskHeight=n.height),a="renderer",null==(r=this.profiler)||r.pushContext(a),this.improveMask.setProfiler(this.profiler),this.pipeline.setProfiler(this.profiler),e.next=7,createImageBitmap(n);case 7:return l=e.sent,c=l,this.postProcessingEnabled&&(this.improveMask.setData(t,l),this.improveMask.run(),c=this.improveMask.output),this.pipeline.setData(t,c),e.next=13,this.pipeline.run();case 13:return null==(i=this.profiler)||i.popContext(a),e.abrupt("return",this.canvas);case 15:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.resizeOutput=function(e,t){var n;this.canvas.width=e,this.canvas.height=t,null==(n=this.pipeline)||n.resizeOutput(e,t),this.previousImageWidth=e,this.previousImageHeight=t},t.destroy=function(){var e;const t=null==(e=this.context)?void 0:e.getExtension("WEBGL_lose_context");t&&t.loseContext()},e}(),po=function(e){function t(){var t;(t=e.call(this)||this).pipeline=new io(t.context);const n=new OffscreenCanvas(0,0),r=n.getContext("webgl2");if(!r)throw"Fail to retrieve webgl context";return t.backgroundImageResizerCanvas=n,t.backgroundImageResizerContext=r,t.backgroundImageResizer=new ao(t.backgroundImageResizerContext,0,0),t}(0,a.default)(t,e);var n=t.prototype;return n.setBackgroundImage=function(e){this.backgroundImage=e,this.updateBackgroundImage()},n.updateBackgroundImage=function(){const e=this.canvas,t=e.width,n=e.height;this.backgroundImageResizer.resizeOutput(t,n),this.backgroundImageResizer.setData(this.backgroundImage),this.backgroundImageResizer.run(),this.pipeline.inputBackgroundImage=this.backgroundImageResizerCanvas},n.resizeOutput=function(t,n){e.prototype.resizeOutput.call(this,t,n),this.backgroundImageResizerCanvas.width=t,this.backgroundImageResizerCanvas.height=n,this.backgroundImageResizer.resizeOutput(t,n),this.updateBackgroundImage()},n.destroy=function(){var t;const n=null==(t=this.backgroundImageResizerContext)?void 0:t.getExtension("WEBGL_lose_context");n&&n.loseContext(),e.prototype.destroy.call(this)},t}(Fo),Uo=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.setBackgroundVideo=function(e){this.frameReader=e},n.render=function(){var t=(0,c.default)(o.default.mark((function t(n,r){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.readNextVideoFrame();case 2:return t.abrupt("return",e.prototype.render.call(this,n,r));case 3:case"end":return t.stop()}}),t,this)})));return function(e,n){return t.apply(this,arguments)}}(),n.readNextVideoFrame=function(){var e=(0,c.default)(o.default.mark((function e(){var t,n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(t=this.frameReader)?void 0:t.read();case 2:if(null==(n=e.sent)||!n.value){e.next=8;break}return e.next=6,createImageBitmap(n.value);case 6:r=e.sent,this.setBackgroundImage(r),n.value.close();case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t}(po),mo=function(){function e(){}var t=e.prototype;return t.blurBackground=function(e){return new Tn(e)},t.blurSilhouette=function(e){return new Yn(e)},t.imageBackground=function(){return new wn},t.videoBackground=function(){return new Uo},e}();let bo=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getDefines=function(){var e;return{RADIUS:null!=(e=this.options.radius)?e:1}},n.getFragmentShader=function(){return"precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\nuniform sampler2D mask;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n"+this.createLoopFunction()},n.getVertexShader=function(){return"varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n"},n.createLoopFunction=function(){var e;let t=null!=(e=this.options.radius)?e:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${t}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n float maxLength = length(normalizedRadius);\n\n for(int y=-${t}; y<${t+1}; ++y) {\n for(int x=-${t}; x<${t+1}; ++x) {\n float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`},t}(eo);let Bo=function(e){function t(t,n){var r;(r=e.call(this)||this).context=t,r.radius=n;const i={context:t,height:t.canvas.height,width:t.canvas.width};r.blur=new bo(Object.assign({},i,{radius:n},r.getBlurTextureSize(t.canvas.width,t.canvas.height)));const o=new to(Object.assign({},i,{disableFramebuffer:!0}));return r.addStep({program:r.blur,preventResize:!0,getUniforms:()=>({texture:$i(t,r.inputImage),mask:$i(t,r.inputMask)})}),r.addStep({program:o,getUniforms:()=>({background:$i(t,r.blur.output),foreground:$i(t,r.inputImage),threshold:$i(t,r.inputMask)})}),r}(0,a.default)(t,e);var n=t.prototype;return n.getBlurTextureSize=function(e,t){const n=this.radius>10?8:2;return{width:Math.max(2,e/n),height:Math.max(2,t/n)}},n.setData=function(e,t){this.inputImage=e,this.inputMask=t},n.resizeOutput=function(t,n){e.prototype.resizeOutput.call(this,t,n);const r=this.getBlurTextureSize(t,n);this.blur.resizeOutput(r.width,r.height)},t}(ro),Zo=function(e){function t(t){var n;return(n=e.call(this)||this).pipeline=new Bo(n.context,t),n.disablePostProcessing(),n}return(0,a.default)(t,e),t}(Fo),fo=function(e){function t(t,n){var r;(r=e.call(this)||this).context=t;const i={context:t,height:t.canvas.height,width:t.canvas.width},o=new uo(Object.assign({},i,{radius:n,type:so.GAUSSIAN})),a=new to(Object.assign({},i,{disableFramebuffer:!0}));return r.addStep({program:o,getUniforms:()=>({texture:$i(t,r.inputImage)})}),r.addStep({program:a,getUniforms:()=>({background:$i(t,r.inputImage),foreground:$i(t,o.output),threshold:$i(t,r.inputMask)})}),r}return(0,a.default)(t,e),t.prototype.setData=function(e,t){this.inputImage=e,this.inputMask=t},t}(ro),Ro=function(e){function t(t){var n;return(n=e.call(this)||this).pipeline=new fo(n.context,t),n.disablePostProcessing(),n}return(0,a.default)(t,e),t}(Fo),Io=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).preciseMaskEnabled=!0,t}(0,a.default)(t,e);var n=t.prototype;return n.run=function(){var t=(0,c.default)(o.default.mark((function t(){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(t.t0=this.frameReader,!t.t0){t.next=6;break}return t.next=4,this.readNextVideoFrame();case 4:return t.next=6,e.prototype.run.call(this);case 6:case"end":return t.stop()}}),t,this)})));return function(){return t.apply(this,arguments)}}(),n.readNextVideoFrame=function(){var e=(0,c.default)(o.default.mark((function e(){var t,n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(t=this.frameReader)?void 0:t.read();case 2:if(n=e.sent,e.t0=null!=n&&n.value,!e.t0){e.next=9;break}return e.next=7,createImageBitmap(n.value);case 7:this.inputBackgroundImage=e.sent,n.value.close();case 9:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),(0,l.default)(t,[{key:"reader",set:function(e){this.frameReader=e}}]),t}(io),yo=function(e){function t(){var t;return(t=e.call(this)||this).pipeline=new Io(t.context),t}return(0,a.default)(t,e),t.prototype.setBackgroundVideo=function(e){this.pipeline.reader=e},t}(Fo),Vo=function(){function e(){}var t=e.prototype;return t.blurBackground=function(e){return new Zo(e)},t.blurSilhouette=function(e){return new Ro(e)},t.imageBackground=function(){return new po},t.videoBackground=function(){return new yo},e}(),Co=function(){function e(e){switch(e){case We.CANVAS:this.factory=new mo;break;case We.WEBGL:this.factory=new Vo;break;default:const e=Ge();this.factory=e.supported?new Vo:new mo}}var t=e.prototype;return t.blurBackground=function(e){return this.getFactory().blurBackground(e)},t.blurSilhouette=function(e){return this.getFactory().blurSilhouette(e)},t.imageBackground=function(){return this.getFactory().imageBackground()},t.videoBackground=function(){return this.getFactory().videoBackground()},t.getFactory=function(){if(!this.factory)throw"Factory is not initialized";return this.factory},e}(),Wo=function(){function e(){}var t=e.prototype;return t.setBackgroundOptions=function(e){var t,n;this.renderer&&this.renderer.destroy();const r=new Co(null==(t=e.renderingOptions)?void 0:t.type);switch(e.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(e.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(e.radius));break;case"VideoBackground":const t=r.videoBackground();this.backgroundVideo&&t.setBackgroundVideo(this.backgroundVideo),this.renderer=t;break;case"VirtualBackground":const n=r.imageBackground();this.backgroundImage&&n.setBackgroundImage(this.backgroundImage),this.renderer=n;break;default:throw`Unknown rendering type [${e.transformerType}]`}(null==(n=e.renderingOptions)?void 0:n.type)===We.WEBGL&&(e.renderingOptions.selfieSegmentationType===Ce.PRECISE?this.renderer.enablePostProcessing():e.renderingOptions.selfieSegmentationType===Ce.FAST&&this.renderer.disablePostProcessing())},t.setVideoBGReadable=function(e){this.backgroundVideo=e.getReader();const t=this.renderer;null!=t&&t.setBackgroundVideo&&t.setBackgroundVideo(this.backgroundVideo)},t.setVirtualBGImage=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:null!=(n=this.renderer)&&n.setBackgroundImage&&n.setBackgroundImage(t),this.backgroundImage=t;case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.process=function(){var e=(0,c.default)(o.default.mark((function e(t,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.renderer){e.next=2;break}return e.abrupt("return",this.renderer.render(t,n));case 2:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.resizeForeground=function(){var e=(0,c.default)(o.default.mark((function e(t,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),t.getBlurSize=function(e){switch(void 0===e&&(e=ye.Low),e){case ye.Low:return 5;case ye.High:return 12}return e},t.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",null!=(n=null==(r=this.renderer)?void 0:r.profileWebgl(t))?n:[]);case 1:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),e}();let Eo=function(){function t(){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("2d",{willReadFrequently:!0}),this.width=0,this.height=0}var r=t.prototype;return r.createImageSegmenter=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.ImageSegmenter&&this.wasmFileset){e.next=3;break}return console.warn("Mediapipe objects not loaded"),e.abrupt("return");case 3:return e.next=5,this.ImageSegmenter.createFromOptions(this.wasmFileset,{baseOptions:{modelAssetPath:this.modelAssetUriPath,delegate:"GPU"},runningMode:"VIDEO",outputCategoryMask:!0,outputConfidenceMasks:!0});case 5:this.imageSegmenter=e.sent;case 6:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),r.loadMediapipeAssets=function(){var t=(0,c.default)(o.default.mark((function t(r,i){var a,l,c,s,d;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return this.modelAssetUriPath=r||"https://d3opqjmqzxf057.cloudfront.net/ml/vonage_selfie_segmenter/float16/v1/vonage_selfie_segmenter.tflite",a=i?i+"/task-vision.js":"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.20/+esm",l=i?i+"/wasm":"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.20/wasm",t.next=5,(t=>new e(e=>e(""+t)).then(e=>u(n(761)(e))))(a);case 5:return c=t.sent,s=c.FilesetResolver,d=c.ImageSegmenter,this.ImageSegmenter=d,t.next=11,s.forVisionTasks(l);case 11:this.wasmFileset=t.sent;case 12:case"end":return t.stop()}}),t,this)})));return function(e,n){return t.apply(this,arguments)}}(),r.init=function(){var e=(0,c.default)(o.default.mark((function e(t,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.loadMediapipeAssets(t,n);case 2:return s.document={},e.next=5,this.createImageSegmenter();case 5:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),r.process=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r,i,a,l,c,s;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.imageSegmenter){e.next=3;break}return console.warn("ImageSegmenter instance not available"),e.abrupt("return");case 3:(this.width!==t.width||this.height!==t.height)&&(this.canvas.width=this.width=t.width,this.canvas.height=this.height=t.height,this.mask&&(this.mask=new ImageData(this.width,this.height))),this.mask||(this.mask=new ImageData(this.width,this.height)),this.context.drawImage(t,0,0,t.width,t.height),r=Date.now(),e.prev=5,null==(n=this.imageSegmenter)||n.segmentForVideo(this.context.getImageData(0,0,t.width,t.height),r,e=>{var t;const n=null==(t=e.confidenceMasks)?void 0:t[0];i=null==n?void 0:n.getAsFloat32Array()}),e.next=14;break;case 9:return e.prev=9,e.t0=e.catch(5),e.next=13,this.createImageSegmenter();case 13:return e.abrupt("return");case 14:if(i){e.next=16;break}return e.abrupt("return");case 16:if(this.previousConfidenceMask){e.next=19;break}return this.previousConfidenceMask=i.slice(),e.abrupt("return");case 19:for(a=i.map((e,t)=>{var n;const r=null==(n=this.previousConfidenceMask)?void 0:n[t];return void 0!==r?this.blend(r,e):e}),l=[255,0,0],c=0;c<(null==a?void 0:a.length);c++)(s=1-a[c])>.1?(s<.7?(this.mask.data[4*c]=l[0]*s,this.mask.data[4*c+3]=255*s):(this.mask.data[4*c]=l[0],this.mask.data[4*c+3]=255),this.mask.data[4*c+1]=l[1],this.mask.data[4*c+2]=l[2]):this.mask.data[4*c]=this.mask.data[4*c+1]=this.mask.data[4*c+2]=this.mask.data[4*c+3]=0;return e.abrupt("return",(this.previousConfidenceMask=a.slice(),this.mask));case 22:case"end":return e.stop()}}),e,this,[[5,9]])})));return function(t){return e.apply(this,arguments)}}(),r.isGpuSupported=function(){return!0},r.blend=function(e,t){const n=t-.5,r=n*n;return t+.9*(1-Math.min(1,r*(5.68842+r*(r*(r*(291.309+-624.717*r)-57.8051)-.748699))))*(e-t)},t}(),So=function(){function e(){this.reporter=new Xn,this.isEnabled=!0}var t=e.prototype;return t.init=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.selfieSegmentation=new Eo,e.next=3,null==(r=this.selfieSegmentation)?void 0:r.init(n.modelAssetUriPath,n.mediapipeBaseAssetsUri);case 3:this.backgroundFilter=new Wo,this.report({variation:"Create"});case 5:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.transform=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r,i,a,l,c,s,d;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isEnabled){e.next=2;break}return e.abrupt("return",n.enqueue(t));case 2:return c=null!=(r=t.timestamp)?r:0,e.next=5,createImageBitmap(t);case 5:return s=e.sent,e.next=8,null==(i=this.selfieSegmentation)?void 0:i.process(s);case 8:if(d=e.sent,e.t0=d,!e.t0){e.next=14;break}return e.next=13,null==(a=this.backgroundFilter)?void 0:a.process(s,d);case 13:l=e.sent;case 14:l?(t.close(),n.enqueue(new VideoFrame(l,{timestamp:c,alpha:"discard"}))):n.enqueue(t);case 15:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.setBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.backgroundOptions=t,e.next=3,null==(n=this.backgroundFilter)?void 0:n.setBackgroundOptions(t);case 3:this.report({variation:"Update"});case 4:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.setVideoBGReadable=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(n=this.backgroundFilter)?void 0:n.setVideoBGReadable(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.setVirtualBGImage=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(n=this.backgroundFilter)?void 0:n.setVirtualBGImage(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",null!=(n=null==(r=this.backgroundFilter)?void 0:r.profile(t))?n:[]);case 1:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.getTransformerType=function(){var e,t;return null!=(e=null==(t=this.backgroundOptions)?void 0:t.transformerType)?e:"Undefined"},t.enable=function(){this.isEnabled=!0},t.disable=function(){this.isEnabled=!1},t.report=function(e){var t;this.reporter.send(Object.assign({version:"6.0.0-alpha.2",action:"MlTransformers",transformerType:null==(t=this.backgroundOptions)?void 0:t.transformerType,config:JSON.stringify(this.backgroundOptions)},e))},e}();t.BackgroundTransformer=So;const vo=function(){function t(){this.backgroundTransformer=new So,this.mediaProcessor=new fe,this.rate=30,this.eventsQueue=[],this.frameTransformLatencyMs=[]}var n=t.prototype;return n.init=function(){var e=(0,c.default)(o.default.mark((function e(t,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.frameTransformLatencyMs=[],e.next=3,this.backgroundTransformer.init(t,n);case 3:return e.next=5,this.mediaProcessor.setTransformers([this.backgroundTransformer]);case 5:this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((e,t)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:e,data:t}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:e,data:t})});case 7:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),n.enable=function(){this.backgroundTransformer.enable()},n.disable=function(){this.backgroundTransformer.disable()},n.onMediaProcessorEvent=function(){var t=(0,c.default)(o.default.mark((function t(){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,new e(e=>{this.eventsQueue.length>0?e(this.eventsQueue.shift()):this.resolveOnMediaProcessor=e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})));return function(){return t.apply(this,arguments)}}(),n.setTrackExpectedRate=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this.rate=t,this.mediaProcessor.setTrackExpectedRate(t);case 1:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.transform=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=performance.now(),this.mediaProcessor.transform(t,n),this.frameTransformLatencyMs.push(performance.now()-r);case 2:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),n.setBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(n=this.backgroundTransformer)?void 0:n.setBackgroundOptions(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.setVideoBGReadable=function(e){this.backgroundTransformer.setVideoBGReadable(e)},n.setVirtualBGImage=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.backgroundTransformer.setVirtualBGImage(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.terminate=function(){var e=(0,c.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.mediaProcessor.destroy();case 2:t=this.frameTransformLatencyMs.reduce((e,t)=>e+t,0)/this.frameTransformLatencyMs.length||0,console.log(`Transform latency average is: ${t} ms`);case 4:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.setVonageMetadata=function(e){!function(e){Ae(e)}(e)},n.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=JSON,e.next=3,this.backgroundTransformer.profile(t);case 3:return e.t1=e.sent,e.abrupt("return",e.t0.stringify.call(e.t0,e.t1));case 5:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t}();!function(e,t){t.workerId=e,mt()&&($t[t.workerId]=t)}("ProcessorWorker",vo);let Jo=vo;const No="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGd0KHQsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCByPWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHJbdF18fChyW3RdPWUpLHJbdF19Y29uc3QgX3I9Z3QoImdsb2JhbHMiLHt9KTt2YXIgb2U9KHQ9Pih0LklOSVQ9IklOSVQiLHQuRk9SV0FSRD0iRk9SV0FSRCIsdC5URVJNSU5BVEU9IlRFUk1JTkFURSIsdC5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIsdC5FVkVOVD0iRVZFTlQiLHQpKShvZXx8e30pO2Z1bmN0aW9uIGlzKHQpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShyPT50IGluc3RhbmNlb2Ygcil9ZnVuY3Rpb24gYmUodCxlKXtjb25zdHtpZDpyLHR5cGU6bn09dCxzPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnIsdHlwZTpuLHJlc3VsdDplfSxzLmZpbHRlcihpPT5pcyhpKSkpfWd0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gVHIoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWZ1bmN0aW9uIEJlKHQsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgciBpbiBlKWRlbGV0ZSBlW3JdO2Zvcihjb25zdCByIGluIHQpQXJyYXkuaXNBcnJheSh0W3JdKT8oZVtyXT1bXSxCZSh0W3JdLGVbcl0pKTp0eXBlb2YgdFtyXT09Im9iamVjdCI/KGVbcl09e30sQmUodFtyXSxlW3JdKSk6ZVtyXT10W3JdfWNvbnN0IFU9bmV3IFdlYWtNYXAsWT1uZXcgV2Vha01hcCxCPW5ldyBXZWFrTWFwLERlPVN5bWJvbCgiYW55UHJvZHVjZXIiKSx3cj1Qcm9taXNlLnJlc29sdmUoKSxNZT1TeW1ib2woImxpc3RlbmVyQWRkZWQiKSxVZT1TeW1ib2woImxpc3RlbmVyUmVtb3ZlZCIpO2xldCBOZT0hMSx4dD0hMTtmdW5jdGlvbiBhZSh0KXtpZih0eXBlb2YgdCE9InN0cmluZyImJnR5cGVvZiB0IT0ic3ltYm9sIiYmdHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIG11c3QgYmUgYSBzdHJpbmcsIHN5bWJvbCwgb3IgbnVtYmVyIil9ZnVuY3Rpb24gT2UodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gY2UodCxlKXtjb25zdCByPVkuZ2V0KHQpO2lmKHIuaGFzKGUpKXJldHVybiByLmdldChlKX1mdW5jdGlvbiBnZSh0LGUpe2NvbnN0IHI9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCJ8fHR5cGVvZiBlPT0ibnVtYmVyIj9lOkRlLG49Qi5nZXQodCk7aWYobi5oYXMocikpcmV0dXJuIG4uZ2V0KHIpfWZ1bmN0aW9uIG9zKHQsZSxyKXtjb25zdCBuPUIuZ2V0KHQpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBzIG9mIG4uZ2V0KGUpKXMuZW5xdWV1ZShyKTtpZihuLmhhcyhEZSkpe2NvbnN0IHM9UHJvbWlzZS5hbGwoW2Uscl0pO2Zvcihjb25zdCBpIG9mIG4uZ2V0KERlKSlpLmVucXVldWUocyl9fWZ1bmN0aW9uIEFyKHQsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCByPSExLG49KCk9Pnt9LHM9W107Y29uc3QgaT17ZW5xdWV1ZShhKXtzLnB1c2goYSksbigpfSxmaW5pc2goKXtyPSEwLG4oKX19O2Zvcihjb25zdCBhIG9mIGUpe2xldCBvPWdlKHQsYSk7b3x8KG89bmV3IFNldCxCLmdldCh0KS5zZXQoYSxvKSksby5hZGQoaSl9cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gcz9zLmxlbmd0aD09PTA/cj8ocz12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShhPT57bj1hfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IHMuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4oYSl7cz12b2lkIDA7Zm9yKGNvbnN0IG8gb2YgZSl7Y29uc3QgYz1nZSh0LG8pO2MmJihjLmRlbGV0ZShpKSxjLnNpemU9PT0wJiZCLmdldCh0KS5kZWxldGUobykpfXJldHVybiBuKCksYXJndW1lbnRzLmxlbmd0aD4wP3tkb25lOiEwLHZhbHVlOmF3YWl0IGF9Ontkb25lOiEwfX0sW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzfX19ZnVuY3Rpb24gdnIodCl7aWYodD09PXZvaWQgMClyZXR1cm4gU3I7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYG1ldGhvZE5hbWVzYCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MiKTtmb3IoY29uc3QgZSBvZiB0KWlmKCFTci5pbmNsdWRlcyhlKSl0aHJvdyB0eXBlb2YgZSE9InN0cmluZyI/bmV3IFR5cGVFcnJvcigiYG1ldGhvZE5hbWVzYCBlbGVtZW50IG11c3QgYmUgYSBzdHJpbmciKTpuZXcgRXJyb3IoYCR7ZX0gaXMgbm90IEVtaXR0ZXJ5IG1ldGhvZGApO3JldHVybiB0fWNvbnN0IHVlPXQ9PnQ9PT1NZXx8dD09PVVlO2Z1bmN0aW9uIExlKHQsZSxyKXtpZih1ZShlKSl0cnl7TmU9ITAsdC5lbWl0KGUscil9ZmluYWxseXtOZT0hMX19Y2xhc3MgZmV7c3RhdGljIG1peGluKGUscil7cmV0dXJuIHI9dnIociksbj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgZnVuY3Rpb24iKTtmb3IoY29uc3QgYSBvZiByKWlmKG4ucHJvdG90eXBlW2FdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHthfVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtmdW5jdGlvbiBzKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2VudW1lcmFibGU6ITEsdmFsdWU6bmV3IGZlfSksdGhpc1tlXX1PYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx7ZW51bWVyYWJsZTohMSxnZXQ6c30pO2NvbnN0IGk9YT0+ZnVuY3Rpb24oLi4ubyl7cmV0dXJuIHRoaXNbZV1bYV0oLi4ubyl9O2Zvcihjb25zdCBhIG9mIHIpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGEse2VudW1lcmFibGU6ITEsdmFsdWU6aShhKX0pO3JldHVybiBufX1zdGF0aWMgZ2V0IGlzRGVidWdFbmFibGVkKCl7dmFyIGUscjtpZih0eXBlb2YoKGU9Z2xvYmFsVGhpcy5wcm9jZXNzKT09bnVsbD92b2lkIDA6ZS5lbnYpIT0ib2JqZWN0IilyZXR1cm4geHQ7Y29uc3R7ZW52Om59PShyPWdsb2JhbFRoaXMucHJvY2VzcykhPW51bGw/cjp7ZW52Ont9fTtyZXR1cm4gbi5ERUJVRz09PSJlbWl0dGVyeSJ8fG4uREVCVUc9PT0iKiJ8fHh0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7eHQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXt2YXIgcjtVLnNldCh0aGlzLG5ldyBTZXQpLFkuc2V0KHRoaXMsbmV3IE1hcCksQi5zZXQodGhpcyxuZXcgTWFwKSxCLmdldCh0aGlzKS5zZXQoRGUsbmV3IFNldCksdGhpcy5kZWJ1Zz0ocj1lLmRlYnVnKSE9bnVsbD9yOnt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0obixzLGksYSk9Pnt0cnl7YT1KU09OLnN0cmluZ2lmeShhKX1jYXRjaHthPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhhKS5qb2luKCIsIil9YH0odHlwZW9mIGk9PSJzeW1ib2wifHx0eXBlb2YgaT09Im51bWJlciIpJiYoaT1pLnRvU3RyaW5nKCkpO2NvbnN0IG89bmV3IERhdGUsYz1gJHtvLmdldEhvdXJzKCl9OiR7by5nZXRNaW51dGVzKCl9OiR7by5nZXRTZWNvbmRzKCl9LiR7by5nZXRNaWxsaXNlY29uZHMoKX1gO2NvbnNvbGUubG9nKGBbJHtjfV1bZW1pdHRlcnk6JHtufV1bJHtzfV0gRXZlbnQgTmFtZTogJHtpfQoJZGF0YTogJHthfWApfSl9bG9nSWZEZWJ1Z0VuYWJsZWQoZSxyLG4peyhmZS5pc0RlYnVnRW5hYmxlZHx8dGhpcy5kZWJ1Zy5lbmFibGVkKSYmdGhpcy5kZWJ1Zy5sb2dnZXIoZSx0aGlzLmRlYnVnLm5hbWUscixuKX1vbihlLHIpe09lKHIpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKXthZShuKTtsZXQgcz1jZSh0aGlzLG4pO3N8fChzPW5ldyBTZXQsWS5nZXQodGhpcykuc2V0KG4scykpLHMuYWRkKHIpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZSIsbix2b2lkIDApLHVlKG4pfHxMZSh0aGlzLE1lLHtldmVudE5hbWU6bixsaXN0ZW5lcjpyfSl9cmV0dXJuIHRoaXMub2ZmLmJpbmQodGhpcyxlLHIpfW9mZihlLHIpe09lKHIpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKXthZShuKTtjb25zdCBzPWNlKHRoaXMsbik7cyYmKHMuZGVsZXRlKHIpLHMuc2l6ZT09PTAmJlkuZ2V0KHRoaXMpLmRlbGV0ZShuKSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSx1ZShuKXx8TGUodGhpcyxVZSx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6cn0pfX1vbmNlKGUpe2xldCByO2NvbnN0IG49bmV3IFByb21pc2Uocz0+e3I9dGhpcy5vbihlLGk9PntyKCkscyhpKX0pfSk7cmV0dXJuIG4ub2ZmPXIsbn1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCByIG9mIGUpYWUocik7cmV0dXJuIEFyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHIpe3ZhciBuO2lmKGFlKGUpLHVlKGUpJiYhTmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGV2ZW50TmFtZWAgY2Fubm90IGJlIG1ldGEgZXZlbnQgYGxpc3RlbmVyQWRkZWRgIG9yIGBsaXN0ZW5lclJlbW92ZWRgIik7dGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSxyKSxvcyh0aGlzLGUscik7Y29uc3Qgcz0obj1jZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsaT1VLmdldCh0aGlzKSxhPVsuLi5zXSxvPXVlKGUpP1tdOlsuLi5pXTthd2FpdCB3cixhd2FpdCBQcm9taXNlLmFsbChbLi4uYS5tYXAoYXN5bmMgYz0+e2lmKHMuaGFzKGMpKXJldHVybiBjKHIpfSksLi4uby5tYXAoYXN5bmMgYz0+e2lmKGkuaGFzKGMpKXJldHVybiBjKGUscil9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSxyKXt2YXIgbjtpZihhZShlKSx1ZShlKSYmIU5lKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIGNhbm5vdCBiZSBtZXRhIGV2ZW50IGBsaXN0ZW5lckFkZGVkYCBvciBgbGlzdGVuZXJSZW1vdmVkYCIpO3RoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXRTZXJpYWwiLGUscik7Y29uc3Qgcz0obj1jZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsaT1VLmdldCh0aGlzKSxhPVsuLi5zXSxvPVsuLi5pXTthd2FpdCB3cjtmb3IoY29uc3QgYyBvZiBhKXMuaGFzKGMpJiZhd2FpdCBjKHIpO2Zvcihjb25zdCBjIG9mIG8paS5oYXMoYykmJmF3YWl0IGMoZSxyKX1vbkFueShlKXtyZXR1cm4gT2UoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxVLmdldCh0aGlzKS5hZGQoZSksTGUodGhpcyxNZSx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBBcih0aGlzKX1vZmZBbnkoZSl7T2UoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLExlKHRoaXMsVWUse2xpc3RlbmVyOmV9KSxVLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCByIG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHIsdm9pZCAwKSx0eXBlb2Ygcj09InN0cmluZyJ8fHR5cGVvZiByPT0ic3ltYm9sInx8dHlwZW9mIHI9PSJudW1iZXIiKXtjb25zdCBuPWNlKHRoaXMscik7biYmbi5jbGVhcigpO2NvbnN0IHM9Z2UodGhpcyxyKTtpZihzKXtmb3IoY29uc3QgaSBvZiBzKWkuZmluaXNoKCk7cy5jbGVhcigpfX1lbHNle1UuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0W24sc11vZiBZLmdldCh0aGlzKS5lbnRyaWVzKCkpcy5jbGVhcigpLFkuZ2V0KHRoaXMpLmRlbGV0ZShuKTtmb3IoY29uc3RbbixzXW9mIEIuZ2V0KHRoaXMpLmVudHJpZXMoKSl7Zm9yKGNvbnN0IGkgb2YgcylpLmZpbmlzaCgpO3MuY2xlYXIoKSxCLmdldCh0aGlzKS5kZWxldGUobil9fX1saXN0ZW5lckNvdW50KGUpe3ZhciByLG4scyxpLGEsbztlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IGM9MDtmb3IoY29uc3QgdSBvZiBlKXtpZih0eXBlb2YgdT09InN0cmluZyIpe2MrPVUuZ2V0KHRoaXMpLnNpemUrKChuPShyPWNlKHRoaXMsdSkpPT1udWxsP3ZvaWQgMDpyLnNpemUpIT1udWxsP246MCkrKChpPShzPWdlKHRoaXMsdSkpPT1udWxsP3ZvaWQgMDpzLnNpemUpIT1udWxsP2k6MCkrKChvPShhPWdlKHRoaXMpKT09bnVsbD92b2lkIDA6YS5zaXplKSE9bnVsbD9vOjApO2NvbnRpbnVlfXR5cGVvZiB1PCJ1IiYmYWUodSksYys9VS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgZiBvZiBZLmdldCh0aGlzKS52YWx1ZXMoKSljKz1mLnNpemU7Zm9yKGNvbnN0IGYgb2YgQi5nZXQodGhpcykudmFsdWVzKCkpYys9Zi5zaXplfXJldHVybiBjfWJpbmRNZXRob2RzKGUscil7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3I9dnIocik7Zm9yKGNvbnN0IG4gb2Ygcil7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IFNyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGZlLnByb3RvdHlwZSkuZmlsdGVyKHQ9PnQhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZmUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpNZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6VWUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTtmdW5jdGlvbiBhcyh0KXtyZXR1cm4gdC5vbkFueSYmdC5lbWl0fWFzeW5jIGZ1bmN0aW9uIGNzKHQsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnIsYXJnczpufT10O2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXIpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3JdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHtyfV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7YmUodCxhd2FpdCBlLmluc3RhbmNlW3JdKC4uLm4/P1tdKSl9Y29uc3QgSXI9Z3QoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gdXModCxlKXtlLndvcmtlcklkPXQsVHIoKSYmKElyW2Uud29ya2VySWRdPWUpfWZ1bmN0aW9uIGZzKHQsZSl7aWYoIXQuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFtyLG5dPXQuYXJncyxzPUlyW3JdO2lmKHMpZS5pbnN0YW5jZT1uZXcgcyh0LmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHtyfWA7QmUobixfciksYXMoZS5pbnN0YW5jZSkmJmUuaW5zdGFuY2Uub25BbnkoKGksYSk9PntiZSh7dHlwZTpvZS5FVkVOVH0se25hbWU6aSxkYXRhOmF9KX0pLGJlKHQsdHlwZW9mIGUuaW5zdGFuY2UhPT12b2lkIDApfWFzeW5jIGZ1bmN0aW9uIGxzKHQsZSl7Y29uc3R7YXJnczpyfT10O2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7bGV0IG47ZS5pbnN0YW5jZS50ZXJtaW5hdGUmJihuPWF3YWl0IGUuaW5zdGFuY2UudGVybWluYXRlKC4uLnI/P1tdKSksYmUodCxuKX1mdW5jdGlvbiBkcyh0KXtpZighdC5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtCZSh0LmFyZ3NbMF0sX3IpLGJlKHQse30pfWZ1bmN0aW9uIGhzKCl7Y29uc3QgdD17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHI9ZS5kYXRhO3N3aXRjaChyLnR5cGUpe2Nhc2Ugb2UuSU5JVDpmcyhyLHQpO2JyZWFrO2Nhc2Ugb2UuRk9SV0FSRDpjcyhyLHQpO2JyZWFrO2Nhc2Ugb2UuVEVSTUlOQVRFOmxzKHIsdCk7YnJlYWs7Y2FzZSBvZS5HTE9CQUxTX1NZTkM6ZHMocik7YnJlYWt9fX1UcigpJiZocygpO2NsYXNzIER7fUQudXBkYXRlcz17dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSxELmVycm9ycz17dHJhbnNmb3JtZXJfbm9uZToiTm8gdHJhbnNmb3JtZXJzIHByb3ZpZGVkIix0cmFuc2Zvcm1lcl9zdGFydDoiQ2Fubm90IHN0YXJ0IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl90cmFuc2Zvcm06IkNhbm5vdCB0cmFuc2Zvcm0gZnJhbWUiLHRyYW5zZm9ybWVyX2ZsdXNoOiJDYW5ub3QgZmx1c2ggdHJhbnNmb3JtZXIiLHJlYWRhYmxlX251bGw6IlJlYWRhYmxlIGlzIG51bGwiLHdyaXRhYmxlX251bGw6IldyaXRhYmxlIGlzIG51bGwifTtmdW5jdGlvbiBtcyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpP3QuZGVmYXVsdDp0fWNvbnN0IE49bmV3IFdlYWtNYXAsemU9bmV3IFdlYWtNYXAseGU9bmV3IFdlYWtNYXAsRXQ9U3ltYm9sKCJhbnlQcm9kdWNlciIpLFJyPVByb21pc2UucmVzb2x2ZSgpLEdlPVN5bWJvbCgibGlzdGVuZXJBZGRlZCIpLCRlPVN5bWJvbCgibGlzdGVuZXJSZW1vdmVkIik7bGV0IF90PSExO2Z1bmN0aW9uIGxlKHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIiYmdHlwZW9mIHQhPSJzeW1ib2wiKXRocm93IG5ldyBUeXBlRXJyb3IoImV2ZW50TmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sIil9ZnVuY3Rpb24gVmUodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZGUodCxlKXtjb25zdCByPXplLmdldCh0KTtyZXR1cm4gci5oYXMoZSl8fHIuc2V0KGUsbmV3IFNldCksci5nZXQoZSl9ZnVuY3Rpb24gRWUodCxlKXtjb25zdCByPXR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGU9PSJzeW1ib2wiP2U6RXQsbj14ZS5nZXQodCk7cmV0dXJuIG4uaGFzKHIpfHxuLnNldChyLG5ldyBTZXQpLG4uZ2V0KHIpfWZ1bmN0aW9uIHBzKHQsZSxyKXtjb25zdCBuPXhlLmdldCh0KTtpZihuLmhhcyhlKSlmb3IoY29uc3QgcyBvZiBuLmdldChlKSlzLmVucXVldWUocik7aWYobi5oYXMoRXQpKXtjb25zdCBzPVByb21pc2UuYWxsKFtlLHJdKTtmb3IoY29uc3QgaSBvZiBuLmdldChFdCkpaS5lbnF1ZXVlKHMpfX1mdW5jdGlvbiBGcih0LGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgcj0hMSxuPSgpPT57fSxzPVtdO2NvbnN0IGk9e2VucXVldWUoYSl7cy5wdXNoKGEpLG4oKX0sZmluaXNoKCl7cj0hMCxuKCl9fTtmb3IoY29uc3QgYSBvZiBlKUVlKHQsYSkuYWRkKGkpO3JldHVybnthc3luYyBuZXh0KCl7cmV0dXJuIHM/cy5sZW5ndGg9PT0wP3I/KHM9dm9pZCAwLHRoaXMubmV4dCgpKTooYXdhaXQgbmV3IFByb21pc2UoYT0+e249YX0pLHRoaXMubmV4dCgpKTp7ZG9uZTohMSx2YWx1ZTphd2FpdCBzLnNoaWZ0KCl9Ontkb25lOiEwfX0sYXN5bmMgcmV0dXJuKGEpe3M9dm9pZCAwO2Zvcihjb25zdCBvIG9mIGUpRWUodCxvKS5kZWxldGUoaSk7cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgYX06e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBQcih0KXtpZih0PT09dm9pZCAwKXJldHVybiBrcjtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHQpaWYoIWtyLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHR9Y29uc3QgVHQ9dD0+dD09PUdlfHx0PT09JGU7bGV0IFdlPWNsYXNzIEVye3N0YXRpYyBtaXhpbihlLHIpe3JldHVybiByPVByKHIpLG49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGZ1bmN0aW9uIik7Zm9yKGNvbnN0IGEgb2YgcilpZihuLnByb3RvdHlwZVthXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7YX1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7ZnVuY3Rpb24gcygpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxlLHtlbnVtZXJhYmxlOiExLHZhbHVlOm5ldyBFcn0pLHRoaXNbZV19T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGUse2VudW1lcmFibGU6ITEsZ2V0OnN9KTtjb25zdCBpPWE9PmZ1bmN0aW9uKC4uLm8pe3JldHVybiB0aGlzW2VdW2FdKC4uLm8pfTtmb3IoY29uc3QgYSBvZiByKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxhLHtlbnVtZXJhYmxlOiExLHZhbHVlOmkoYSl9KTtyZXR1cm4gbn19c3RhdGljIGdldCBpc0RlYnVnRW5hYmxlZCgpe2lmKHR5cGVvZiBwcm9jZXNzIT0ib2JqZWN0IilyZXR1cm4gX3Q7Y29uc3R7ZW52OmV9PXByb2Nlc3N8fHtlbnY6e319O3JldHVybiBlLkRFQlVHPT09ImVtaXR0ZXJ5Inx8ZS5ERUJVRz09PSIqInx8X3R9c3RhdGljIHNldCBpc0RlYnVnRW5hYmxlZChlKXtfdD1lfWNvbnN0cnVjdG9yKGU9e30pe04uc2V0KHRoaXMsbmV3IFNldCksemUuc2V0KHRoaXMsbmV3IE1hcCkseGUuc2V0KHRoaXMsbmV3IE1hcCksdGhpcy5kZWJ1Zz1lLmRlYnVnfHx7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KHIsbixzLGkpPT57dHJ5e2k9SlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2h7aT1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMoaSkuam9pbigiLCIpfWB9dHlwZW9mIHM9PSJzeW1ib2wiJiYocz1zLnRvU3RyaW5nKCkpO2NvbnN0IGE9bmV3IERhdGUsbz1gJHthLmdldEhvdXJzKCl9OiR7YS5nZXRNaW51dGVzKCl9OiR7YS5nZXRTZWNvbmRzKCl9LiR7YS5nZXRNaWxsaXNlY29uZHMoKX1gO2NvbnNvbGUubG9nKGBbJHtvfV1bZW1pdHRlcnk6JHtyfV1bJHtufV0gRXZlbnQgTmFtZTogJHtzfQoJZGF0YTogJHtpfWApfSl9bG9nSWZEZWJ1Z0VuYWJsZWQoZSxyLG4peyhFci5pc0RlYnVnRW5hYmxlZHx8dGhpcy5kZWJ1Zy5lbmFibGVkKSYmdGhpcy5kZWJ1Zy5sb2dnZXIoZSx0aGlzLmRlYnVnLm5hbWUscixuKX1vbihlLHIpe1ZlKHIpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKWxlKG4pLGRlKHRoaXMsbikuYWRkKHIpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZSIsbix2b2lkIDApLFR0KG4pfHx0aGlzLmVtaXQoR2Use2V2ZW50TmFtZTpuLGxpc3RlbmVyOnJ9KTtyZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUscil9b2ZmKGUscil7VmUociksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpbGUobiksZGUodGhpcyxuKS5kZWxldGUociksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxUdChuKXx8dGhpcy5lbWl0KCRlLHtldmVudE5hbWU6bixsaXN0ZW5lcjpyfSl9b25jZShlKXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2NvbnN0IG49dGhpcy5vbihlLHM9PntuKCkscihzKX0pfSl9ZXZlbnRzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgciBvZiBlKWxlKHIpO3JldHVybiBGcih0aGlzLGUpfWFzeW5jIGVtaXQoZSxyKXtsZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0IixlLHIpLHBzKHRoaXMsZSxyKTtjb25zdCBuPWRlKHRoaXMsZSkscz1OLmdldCh0aGlzKSxpPVsuLi5uXSxhPVR0KGUpP1tdOlsuLi5zXTthd2FpdCBScixhd2FpdCBQcm9taXNlLmFsbChbLi4uaS5tYXAoYXN5bmMgbz0+e2lmKG4uaGFzKG8pKXJldHVybiBvKHIpfSksLi4uYS5tYXAoYXN5bmMgbz0+e2lmKHMuaGFzKG8pKXJldHVybiBvKGUscil9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSxyKXtsZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHIpO2NvbnN0IG49ZGUodGhpcyxlKSxzPU4uZ2V0KHRoaXMpLGk9Wy4uLm5dLGE9Wy4uLnNdO2F3YWl0IFJyO2Zvcihjb25zdCBvIG9mIGkpbi5oYXMobykmJmF3YWl0IG8ocik7Zm9yKGNvbnN0IG8gb2YgYSlzLmhhcyhvKSYmYXdhaXQgbyhlLHIpfW9uQW55KGUpe3JldHVybiBWZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLE4uZ2V0KHRoaXMpLmFkZChlKSx0aGlzLmVtaXQoR2Use2xpc3RlbmVyOmV9KSx0aGlzLm9mZkFueS5iaW5kKHRoaXMsZSl9YW55RXZlbnQoKXtyZXR1cm4gRnIodGhpcyl9b2ZmQW55KGUpe1ZlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInVuc3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSx0aGlzLmVtaXQoJGUse2xpc3RlbmVyOmV9KSxOLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCByIG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHIsdm9pZCAwKSx0eXBlb2Ygcj09InN0cmluZyJ8fHR5cGVvZiByPT0ic3ltYm9sIil7ZGUodGhpcyxyKS5jbGVhcigpO2NvbnN0IG49RWUodGhpcyxyKTtmb3IoY29uc3QgcyBvZiBuKXMuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7Ti5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3QgbiBvZiB6ZS5nZXQodGhpcykudmFsdWVzKCkpbi5jbGVhcigpO2Zvcihjb25zdCBuIG9mIHhlLmdldCh0aGlzKS52YWx1ZXMoKSl7Zm9yKGNvbnN0IHMgb2YgbilzLmZpbmlzaCgpO24uY2xlYXIoKX19fWxpc3RlbmVyQ291bnQoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCByPTA7Zm9yKGNvbnN0IG4gb2YgZSl7aWYodHlwZW9mIG49PSJzdHJpbmciKXtyKz1OLmdldCh0aGlzKS5zaXplK2RlKHRoaXMsbikuc2l6ZStFZSh0aGlzLG4pLnNpemUrRWUodGhpcykuc2l6ZTtjb250aW51ZX10eXBlb2YgbjwidSImJmxlKG4pLHIrPU4uZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IHMgb2YgemUuZ2V0KHRoaXMpLnZhbHVlcygpKXIrPXMuc2l6ZTtmb3IoY29uc3QgcyBvZiB4ZS5nZXQodGhpcykudmFsdWVzKCkpcis9cy5zaXplfXJldHVybiByfWJpbmRNZXRob2RzKGUscil7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3I9UHIocik7Zm9yKGNvbnN0IG4gb2Ygcil7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fTtjb25zdCBrcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhXZS5wcm90b3R5cGUpLmZpbHRlcih0PT50IT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFdlLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6R2Usd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV2UsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOiRlLHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7dmFyIHlzPVdlO2NvbnN0IHd0PW1zKHlzKTtmdW5jdGlvbiBicyh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmIm1lc3NhZ2UiaW4gdCYmdHlwZW9mIHQubWVzc2FnZT09InN0cmluZyJ9ZnVuY3Rpb24gZ3ModCl7aWYoYnModCkpcmV0dXJuIHQ7dHJ5e3JldHVybiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodCkpfWNhdGNoe3JldHVybiBuZXcgRXJyb3IoU3RyaW5nKHQpKX19ZnVuY3Rpb24gQXQodCl7cmV0dXJuIGdzKHQpLm1lc3NhZ2V9dmFyIHhzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxFcz0odCxlLHIpPT5lIGluIHQ/eHModCxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSk6dFtlXT1yLF9zPSh0LGUscik9PihFcyh0LGUrIiIscikscik7Y29uc3QgVHM9ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIix3cz0iaHR0cHM6Ly8iLEFzPTFlNDtsZXQgSGU7Y29uc3QgdnM9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIFNzKCl7aWYoIUhlJiYoSGU9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFIZSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBIZSh2cyl9Y29uc3QgVD1bXTtmb3IobGV0IHQ9MDt0PDI1NjsrK3QpVC5wdXNoKCh0KzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiBJcyh0LGU9MCl7cmV0dXJuKFRbdFtlKzBdXStUW3RbZSsxXV0rVFt0W2UrMl1dK1RbdFtlKzNdXSsiLSIrVFt0W2UrNF1dK1RbdFtlKzVdXSsiLSIrVFt0W2UrNl1dK1RbdFtlKzddXSsiLSIrVFt0W2UrOF1dK1RbdFtlKzldXSsiLSIrVFt0W2UrMTBdXStUW3RbZSsxMV1dK1RbdFtlKzEyXV0rVFt0W2UrMTNdXStUW3RbZSsxNF1dK1RbdFtlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3QgUnM9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksQ3I9e3JhbmRvbVVVSUQ6UnN9O2Z1bmN0aW9uIEZzKHQsZSxyKXtpZihDci5yYW5kb21VVUlEJiYhZSYmIXQpcmV0dXJuIENyLnJhbmRvbVVVSUQoKTt0PXR8fHt9O2NvbnN0IG49dC5yYW5kb218fCh0LnJuZ3x8U3MpKCk7cmV0dXJuIG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LElzKG4pfWZ1bmN0aW9uIHZ0KHQsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCByPWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHJbdF18fChyW3RdPWUpLHJbdF19Y29uc3QgTz12dCgiZ2xvYmFscyIse30pO3ZhciBRPSh0PT4odC5JTklUPSJJTklUIix0LkZPUldBUkQ9IkZPUldBUkQiLHQuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHQuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHQpKShRfHx7fSk7ZnVuY3Rpb24gQnIodCl7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnQgaW5zdGFuY2VvZiBlKX1sZXQgUHM9MDtmdW5jdGlvbiBrcyh0LGUscixuLHMpe2NvbnN0IGk9UHMrKztyZXR1cm4gdC5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOmUsZnVuY3Rpb25OYW1lOnIsYXJnczpufSxuLmZpbHRlcihhPT5CcihhKSkpLG5ldyBQcm9taXNlKGE9PntzPT1udWxsfHxzLnNldChpLGEpfSl9ZnVuY3Rpb24gX2UodCxlKXtjb25zdHtpZDpyLHR5cGU6bn09dCxzPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnIsdHlwZTpuLHJlc3VsdDplfSxzLmZpbHRlcihpPT5CcihpKSkpfWNvbnN0IERyPXZ0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gTXIoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIENzKCl7aWYoTXIoKSlfZSh7dHlwZTpRLkdMT0JBTFNfU1lOQ30sTyk7ZWxzZXtjb25zdCB0PVtdO2Zvcihjb25zdCBlIGluIERyKXtjb25zdHt3b3JrZXI6cixyZXNvbHZlcnM6bn09RHJbZV0ud29ya2VyQ29udGV4dDtyJiZ0LnB1c2goa3MocixRLkdMT0JBTFNfU1lOQywiIixbT10sbikpfWF3YWl0IFByb21pc2UuYWxsKHQpfX1mdW5jdGlvbiBqZSh0LGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHIgaW4gZSlkZWxldGUgZVtyXTtmb3IoY29uc3QgciBpbiB0KUFycmF5LmlzQXJyYXkodFtyXSk/KGVbcl09W10samUodFtyXSxlW3JdKSk6dHlwZW9mIHRbcl09PSJvYmplY3QiPyhlW3JdPXt9LGplKHRbcl0sZVtyXSkpOmVbcl09dFtyXX1hc3luYyBmdW5jdGlvbiBCcyh0LGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTpyLGFyZ3M6bn09dDtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCFyKXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVtyXSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7cn1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO19lKHQsYXdhaXQgZS5pbnN0YW5jZVtyXSguLi5uPz9bXSkpfWNvbnN0IERzPXZ0KCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIE1zKHQsZSl7aWYoIXQuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFtyLG5dPXQuYXJncyxzPURzW3JdO2lmKHMpZS5pbnN0YW5jZT1uZXcgcyh0LmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHtyfWA7amUobixPKSxfZSh0LHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBVcyh0LGUpe2NvbnN0e2FyZ3M6cn09dDtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi5yPz9bXSkpLF9lKHQsbil9ZnVuY3Rpb24gTnModCl7aWYoIXQuYXJncyl0aHJvdyJNaXNzaW5nIGdsb2JhbHMgd2hpbGUgc3luY2luZyI7amUodC5hcmdzWzBdLE8pLF9lKHQse30pfWZ1bmN0aW9uIE9zKCl7Y29uc3QgdD17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHI9ZS5kYXRhO3N3aXRjaChyLnR5cGUpe2Nhc2UgUS5JTklUOk1zKHIsdCk7YnJlYWs7Y2FzZSBRLkZPUldBUkQ6QnMocix0KTticmVhaztjYXNlIFEuVEVSTUlOQVRFOlVzKHIsdCk7YnJlYWs7Y2FzZSBRLkdMT0JBTFNfU1lOQzpOcyhyKTticmVha319fU1yKCkmJk9zKCk7ZnVuY3Rpb24gTHModCxlKXtyZXR1cm4gT1t0XXx8KE9bdF09ZSksWygpPT5PW3RdLGFzeW5jIHI9PntPW3RdPXIsYXdhaXQgQ3MoKX1dfWZ1bmN0aW9uIHpzKHQsZSl7cmV0dXJuIExzKHQsZSl9Y29uc3RbR3MsJHNdPXpzKCJtZXRhZGF0YSIpO2Z1bmN0aW9uIFZzKHQpeyRzKHQpfWZ1bmN0aW9uIFN0KCl7cmV0dXJuIEdzKCl9bGV0IEl0PWNsYXNze2NvbnN0cnVjdG9yKGUscil7X3ModGhpcywidXVpZCIpLHRoaXMuY29uZmlnPWUsdGhpcy51dWlkPXI/P0ZzKCl9YXN5bmMgc2VuZChlKXt2YXIgcixuLHM7Y29uc3R7YXBwSWQ6aSxzb3VyY2VUeXBlOmF9PShyPVN0KCkpIT1udWxsP3I6e307aWYoIWl8fCFhKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBvPW5ldyBBYm9ydENvbnRyb2xsZXIsYz1zZXRUaW1lb3V0KCgpPT5vLmFib3J0KCksQXMpO3JldHVybiBhd2FpdCgocz0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP3M6ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDpvLnNpZ25hbH0pLGNsZWFyVGltZW91dChjKSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHI9KGU9U3QoKS5wcm94eVVybCkhPW51bGw/ZTp3cztyZXR1cm4gcis9KHIuYXQoLTEpPT09Ii8iPyIiOiIvIikrVHMscn1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3Qgcj1TdCgpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6ci5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDpyLnByb3h5VXJsLHNvdXJjZTpyLnNvdXJjZVR5cGV9fX07Y29uc3QgWGU9IjIuMC40IjtjbGFzcyBXc3tjb25zdHJ1Y3RvcihlLHIpe3RoaXMuY29uZmlnPWUsdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ9MCx0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50PTAsdGhpcy5zdGFydEF0PTAsdGhpcy5yZXBvcnRlcj1uZXcgSXQoZSxyKX1hc3luYyBvbkZyYW1lRnJvbVNvdXJjZSgpe3RoaXMuZnJhbWVGcm9tU291cmNlQ291bnQrK31nZXQgZnBzKCl7Y29uc3R7c3RhcnRBdDplLGZyYW1lRnJvbVNvdXJjZUNvdW50OnJ9PXRoaXMsbj0oRGF0ZS5ub3coKS1lKS8xZTM7cmV0dXJuIHIvbn1hc3luYyBvbkZyYW1lVHJhbnNmb3JtZWQoZT17fSxyPSExKXt0aGlzLnN0YXJ0QXQ9PT0wJiYodGhpcy5zdGFydEF0PURhdGUubm93KCkpLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50Kys7Y29uc3R7c3RhcnRBdDpuLGZyYW1lVHJhbnNmb3JtZWRDb3VudDpzLGZyYW1lRnJvbVNvdXJjZUNvdW50Oml9PXRoaXMsYT1EYXRlLm5vdygpLG89KGEtbikvMWUzLGM9cy9vLHU9aS9vO3JldHVybiByfHx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD49dGhpcy5jb25maWcubG9nZ2luZ0ludGVydmFsRnJhbWVDb3VudD8odGhpcy5mcmFtZUZyb21Tb3VyY2VDb3VudD0wLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50PTAsdGhpcy5zdGFydEF0PWEsdGhpcy5yZXBvcnRlci5jb25maWc9dGhpcy5jb25maWcsdGhpcy5yZXBvcnRlci5zZW5kKHsuLi50aGlzLmNvbmZpZy5yZXBvcnQsdmFyaWF0aW9uOiJRb1MiLGZwczp1LHRyYW5zZm9ybWVkRnBzOmMsZnJhbWVzVHJhbnNmb3JtZWQ6cywuLi5lfSkpOiJzdWNjZXNzIn19dmFyIFJ0PSh0PT4odC5waXBlbGluZV9lbmRlZD0icGlwZWxpbmVfZW5kZWQiLHQucGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIsdC5waXBlbGluZV9zdGFydGVkPSJwaXBlbGluZV9zdGFydGVkIix0LnBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIix0LnBpcGVsaW5lX3Jlc3RhcnRlZD0icGlwZWxpbmVfcmVzdGFydGVkIix0LnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvciIsdCkpKFJ0fHx7fSk7Y29uc3QgSHM9NTAwLGpzPS44O2NsYXNzIFhzIGV4dGVuZHMgd3R7Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMucmVwb3J0ZXJfPW5ldyBJdCx0aGlzLnJlcG9ydGVyUW9zXz1uZXcgV3Moe2xvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ6SHMscmVwb3J0Ont2ZXJzaW9uOlhlfX0pLHRoaXMuaW5kZXhfPXIsdGhpcy50cmFuc2Zvcm1lcl89ZSx0aGlzLnNob3VsZFN0b3BfPSExLHRoaXMuaXNGbGFzaGVkXz0hMSx0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89MCx0aGlzLnZpZGVvSGVpZ2h0Xz0wLHRoaXMudmlkZW9XaWR0aF89MCx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMSx0aGlzLnRyYW5zZm9ybWVyVHlwZV89IkN1c3RvbSIsImdldFRyYW5zZm9ybWVyVHlwZSJpbiBlJiYodGhpcy50cmFuc2Zvcm1lclR5cGVfPWUuZ2V0VHJhbnNmb3JtZXJUeXBlKCkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lfWFzeW5jIHN0YXJ0KGUpe2lmKHRoaXMuY29udHJvbGxlcl89ZSx0aGlzLnRyYW5zZm9ybWVyXyYmdHlwZW9mIHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0PT0iZnVuY3Rpb24iKXRyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydChlKX1jYXRjaChyKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpELmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCx2YXJpYXRpb246IkVycm9yIixlcnJvcjpBdChyKX0pO2NvbnN0IG49e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnIsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsbil9fWFzeW5jIHRyYW5zZm9ybShlLHIpe3ZhciBuLHM7aWYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPT09MCYmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz1EYXRlLm5vdygpKSxlIGluc3RhbmNlb2YgVmlkZW9GcmFtZSYmKHRoaXMudmlkZW9IZWlnaHRfPShlPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlIZWlnaHQpPz8wLHRoaXMudmlkZW9XaWR0aF89KGU9PW51bGw/dm9pZCAwOmUuZGlzcGxheVdpZHRoKT8/MCksdGhpcy5yZXBvcnRlclFvc18ub25GcmFtZUZyb21Tb3VyY2UoKSx0aGlzLnRyYW5zZm9ybWVyXylpZih0aGlzLnNob3VsZFN0b3BfKWNvbnNvbGUud2FybigiW1BpcGVsaW5lXSBmbHVzaCBmcm9tIHRyYW5zZm9ybSIpLGUuY2xvc2UoKSx0aGlzLmZsdXNoKHIpLHIudGVybWluYXRlKCk7ZWxzZXt0cnl7YXdhaXQoKHM9KG49dGhpcy50cmFuc2Zvcm1lcl8pLnRyYW5zZm9ybSk9PW51bGw/dm9pZCAwOnMuY2FsbChuLGUscikpLHRoaXMucmVwb3J0UW9zKCl9Y2F0Y2goaSl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6RC5lcnJvcnMudHJhbnNmb3JtZXJfdHJhbnNmb3JtLHZhcmlhdGlvbjoiRXJyb3IiLGVycm9yOkF0KGkpfSk7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6aSxmdW5jdGlvbjoidHJhbnNmb3JtIn07dGhpcy5lbWl0KCJlcnJvciIsYSl9aWYodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8hPS0xJiZ0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXypqcz50aGlzLnJlcG9ydGVyUW9zXy5mcHMpe2NvbnN0IGk9e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LHdhcm5pbmdUeXBlOiJmcHNfZHJvcCIsZHJvcEluZm86e3JlcXVlc3RlZDp0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyxjdXJyZW50OnRoaXMucmVwb3J0ZXJRb3NfLmZwc319O3RoaXMuZW1pdCgid2FybiIsaSl9fX1hc3luYyBmbHVzaChlKXtpZih0aGlzLnRyYW5zZm9ybWVyXyYmdHlwZW9mIHRoaXMudHJhbnNmb3JtZXJfLmZsdXNoPT0iZnVuY3Rpb24iJiYhdGhpcy5pc0ZsYXNoZWRfKXt0aGlzLmlzRmxhc2hlZF89ITA7dHJ5e2F3YWl0IHRoaXMudHJhbnNmb3JtZXJfLmZsdXNoKGUpfWNhdGNoKHIpe3RoaXMucmVwb3J0KHttZXNzYWdlOkQuZXJyb3JzLnRyYW5zZm9ybWVyX2ZsdXNoLHZhcmlhdGlvbjoiRXJyb3IiLGVycm9yOkF0KHIpfSk7Y29uc3Qgbj17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6cixmdW5jdGlvbjoiZmx1c2gifTt0aGlzLmVtaXQoImVycm9yIixuKX19dGhpcy5yZXBvcnRRb3MoITApLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkRlbGV0ZSJ9KX1zdG9wKCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gU3RvcCBzdHJlYW0uIiksdGhpcy5jb250cm9sbGVyXyYmKHRoaXMuZmx1c2godGhpcy5jb250cm9sbGVyXyksdGhpcy5jb250cm9sbGVyXy50ZXJtaW5hdGUoKSksdGhpcy5zaG91bGRTdG9wXz0hMH1yZXBvcnQoZSl7dGhpcy5yZXBvcnRlcl8uc2VuZCh7dmVyc2lvbjpYZSxhY3Rpb246Ik1lZGlhVHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyVHlwZTp0aGlzLnRyYW5zZm9ybWVyVHlwZV8sLi4uZX0pfXJlcG9ydFFvcyhlPSExKXt0aGlzLnJlcG9ydGVyUW9zXy5jb25maWc9ey4uLnRoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZ30sdGhpcy5yZXBvcnRlclFvc18ub25GcmFtZVRyYW5zZm9ybWVkKHt2ZXJzaW9uOlhlLGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXyx2aWRlb1dpZHRoOnRoaXMudmlkZW9XaWR0aF8sdmlkZW9IZWlnaHQ6dGhpcy52aWRlb0hlaWdodF99LGUpfX1jbGFzcyBZcyBleHRlbmRzIHd0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy50cmFuc2Zvcm1lcnNfPVtdLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtsZXQgbj1uZXcgWHMoZVtyXSxyKTtuLm9uKCJlcnJvciIscz0+e3RoaXMuZW1pdCgiZXJyb3IiLHMpfSksbi5vbigid2FybiIscz0+e3RoaXMuZW1pdCgid2FybiIscyl9KSx0aGlzLnRyYW5zZm9ybWVyc18ucHVzaChuKX19c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZTtmb3IobGV0IHIgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKXIuc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pfWFzeW5jIHN0YXJ0KGUscil7aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIE5vIHRyYW5zZm9ybWVycy4iKTtyZXR1cm59dHJ5e2xldCBuPWU7Zm9yKGxldCBzIG9mIHRoaXMudHJhbnNmb3JtZXJzXyllPWUucGlwZVRocm91Z2gobmV3IFRyYW5zZm9ybVN0cmVhbShzKSk7ZS5waXBlVG8ocikudGhlbihhc3luYygpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2V0dXAuIiksYXdhaXQgci5hYm9ydCgpLGF3YWl0IG4uY2FuY2VsKCksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZCIpfSkuY2F0Y2goYXN5bmMgcz0+e2UuY2FuY2VsKCkudGhlbigoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNodXR0aW5nIGRvd24gc3RyZWFtcyBhZnRlciBhYm9ydC4iKX0pLmNhdGNoKGk9Pntjb25zb2xlLmVycm9yKCJbUGlwZWxpbmVdIEVycm9yIGZyb20gc3RyZWFtIHRyYW5zZm9ybToiLGkpfSksYXdhaXQgci5hYm9ydChzKSxhd2FpdCBuLmNhbmNlbChzKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiKX0pfWNhdGNoe3RoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiksdGhpcy5kZXN0cm95KCk7cmV0dXJufXRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfc3RhcnRlZCIpLGNvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFBpcGVsaW5lIHN0YXJ0ZWQuIil9YXN5bmMgZGVzdHJveSgpe2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIERlc3Ryb3lpbmcgUGlwZWxpbmUuIik7Zm9yKGxldCBlIG9mIHRoaXMudHJhbnNmb3JtZXJzXyllLnN0b3AoKX19Y2xhc3MgUXMgZXh0ZW5kcyB3dHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5yZXBvcnRlcl89bmV3IEl0LHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lLHRoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9dHJhbnNmb3JtKGUscil7cmV0dXJuIHRoaXMucmVhZGFibGVfPWUsdGhpcy53cml0YWJsZV89cix0aGlzLnRyYW5zZm9ybUludGVybmFsKCl9dHJhbnNmb3JtSW50ZXJuYWwoKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZSxyKT0+e2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpELmVycm9ycy50cmFuc2Zvcm1lcl9ub25lLHZhcmlhdGlvbjoiRXJyb3IifSkscigiW01lZGlhUHJvY2Vzc29yXSBOZWVkIHRvIHNldCB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufWlmKCF0aGlzLnJlYWRhYmxlXyl7dGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRXJyb3IiLG1lc3NhZ2U6RC5lcnJvcnMucmVhZGFibGVfbnVsbH0pLHIoIltNZWRpYVByb2Nlc3Nvcl0gUmVhZGFibGUgaXMgbnVsbC4iKTtyZXR1cm59aWYoIXRoaXMud3JpdGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpELmVycm9ycy53cml0YWJsZV9udWxsfSkscigiW01lZGlhUHJvY2Vzc29yXSBXcml0YWJsZSBpcyBudWxsLiIpO3JldHVybn1sZXQgbj0hMTt0aGlzLnBpcGVsaW5lXyYmKG49ITAsdGhpcy5waXBlbGluZV8uY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCkpLHRoaXMucGlwZWxpbmVfPW5ldyBZcyh0aGlzLnRyYW5zZm9ybWVyc18pLHRoaXMucGlwZWxpbmVfLm9uKCJ3YXJuIixzPT57dGhpcy5lbWl0KCJ3YXJuIixzKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJlcnJvciIscz0+e3RoaXMuZW1pdCgiZXJyb3IiLHMpfSksdGhpcy5waXBlbGluZV8ub24oInBpcGVsaW5lSW5mbyIscz0+e24mJihzPT09InBpcGVsaW5lX3N0YXJ0ZWQiP3M9UnQucGlwZWxpbmVfcmVzdGFydGVkOnM9PT0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiYmKHM9UnQucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IpKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIscyl9KSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKSx0aGlzLnBpcGVsaW5lXy5zdGFydCh0aGlzLnJlYWRhYmxlXyx0aGlzLndyaXRhYmxlXykudGhlbigoKT0+e2UoKX0pLmNhdGNoKHM9PntyKHMpfSl9KX1zZXRUcmFuc2Zvcm1lcnMoZSl7cmV0dXJuIHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSIsbWVzc2FnZTpELnVwZGF0ZXMudHJhbnNmb3JtZXJfbmV3fSksdGhpcy50cmFuc2Zvcm1lcnNfPWUsdGhpcy5yZWFkYWJsZV8mJnRoaXMud3JpdGFibGVfP3RoaXMudHJhbnNmb3JtSW50ZXJuYWwoKTpQcm9taXNlLnJlc29sdmUoKX1kZXN0cm95KCl7cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGU9Pnt0aGlzLnBpcGVsaW5lXyYmdGhpcy5waXBlbGluZV8uZGVzdHJveSgpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkRlbGV0ZSJ9KSxlKCl9KX1yZXBvcnQoZSl7dGhpcy5yZXBvcnRlcl8uc2VuZCh7dmVyc2lvbjpYZSxhY3Rpb246Ik1lZGlhUHJvY2Vzc29yIiwuLi5lfSl9fXZhciBxcz1PYmplY3QuZGVmaW5lUHJvcGVydHksS3M9KHQsZSxyKT0+ZSBpbiB0P3FzKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cn0pOnRbZV09cixKcz0odCxlLHIpPT4oS3ModCxlKyIiLHIpLHIpO2NvbnN0IFpzPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyIsZWk9Imh0dHBzOi8vIix0aT0xZTQ7bGV0IFllO2NvbnN0IHJpPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBuaSgpe2lmKCFZZSYmKFllPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSwhWWUpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gWWUocmkpfWNvbnN0IHc9W107Zm9yKGxldCB0PTA7dDwyNTY7Kyt0KXcucHVzaCgodCsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24gc2kodCxlPTApe3JldHVybih3W3RbZSswXV0rd1t0W2UrMV1dK3dbdFtlKzJdXSt3W3RbZSszXV0rIi0iK3dbdFtlKzRdXSt3W3RbZSs1XV0rIi0iK3dbdFtlKzZdXSt3W3RbZSs3XV0rIi0iK3dbdFtlKzhdXSt3W3RbZSs5XV0rIi0iK3dbdFtlKzEwXV0rd1t0W2UrMTFdXSt3W3RbZSsxMl1dK3dbdFtlKzEzXV0rd1t0W2UrMTRdXSt3W3RbZSsxNV1dKS50b0xvd2VyQ2FzZSgpfWNvbnN0IGlpPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8ucmFuZG9tVVVJRCYmY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pLFVyPXtyYW5kb21VVUlEOmlpfTtmdW5jdGlvbiBvaSh0LGUscil7aWYoVXIucmFuZG9tVVVJRCYmIWUmJiF0KXJldHVybiBVci5yYW5kb21VVUlEKCk7dD10fHx7fTtjb25zdCBuPXQucmFuZG9tfHwodC5ybmd8fG5pKSgpO3JldHVybiBuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxzaShuKX1mdW5jdGlvbiBGdCh0LGUpe2dsb2JhbFRoaXMudm9uYWdlfHwoZ2xvYmFsVGhpcy52b25hZ2U9e30pLGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXJ8fChnbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyPXt9KTtsZXQgcj1nbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyO3JldHVybiByW3RdfHwoclt0XT1lKSxyW3RdfWNvbnN0IEw9RnQoImdsb2JhbHMiLHt9KTt2YXIgcT0odD0+KHQuSU5JVD0iSU5JVCIsdC5GT1JXQVJEPSJGT1JXQVJEIix0LlRFUk1JTkFURT0iVEVSTUlOQVRFIix0LkdMT0JBTFNfU1lOQz0iR0xPQkFMU19TWU5DIix0KSkocXx8e30pO2Z1bmN0aW9uIE5yKHQpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT50IGluc3RhbmNlb2YgZSl9bGV0IGFpPTA7ZnVuY3Rpb24gY2kodCxlLHIsbixzKXtjb25zdCBpPWFpKys7cmV0dXJuIHQucG9zdE1lc3NhZ2Uoe2lkOmksdHlwZTplLGZ1bmN0aW9uTmFtZTpyLGFyZ3M6bn0sbi5maWx0ZXIoYT0+TnIoYSkpKSxuZXcgUHJvbWlzZShhPT57cz09bnVsbHx8cy5zZXQoaSxhKX0pfWZ1bmN0aW9uIFRlKHQsZSl7Y29uc3R7aWQ6cix0eXBlOm59PXQscz1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDpyLHR5cGU6bixyZXN1bHQ6ZX0scy5maWx0ZXIoaT0+TnIoaSkpKX1jb25zdCBPcj1GdCgid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIExyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiB1aSgpe2lmKExyKCkpVGUoe3R5cGU6cS5HTE9CQUxTX1NZTkN9LEwpO2Vsc2V7Y29uc3QgdD1bXTtmb3IoY29uc3QgZSBpbiBPcil7Y29uc3R7d29ya2VyOnIscmVzb2x2ZXJzOm59PU9yW2VdLndvcmtlckNvbnRleHQ7ciYmdC5wdXNoKGNpKHIscS5HTE9CQUxTX1NZTkMsIiIsW0xdLG4pKX1hd2FpdCBQcm9taXNlLmFsbCh0KX19ZnVuY3Rpb24gUWUodCxlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCByIGluIGUpZGVsZXRlIGVbcl07Zm9yKGNvbnN0IHIgaW4gdClBcnJheS5pc0FycmF5KHRbcl0pPyhlW3JdPVtdLFFlKHRbcl0sZVtyXSkpOnR5cGVvZiB0W3JdPT0ib2JqZWN0Ij8oZVtyXT17fSxRZSh0W3JdLGVbcl0pKTplW3JdPXRbcl19YXN5bmMgZnVuY3Rpb24gZmkodCxlKXtjb25zdHtmdW5jdGlvbk5hbWU6cixhcmdzOm59PXQ7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighcil0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2Vbcl0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3J9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDtUZSh0LGF3YWl0IGUuaW5zdGFuY2Vbcl0oLi4ubj8/W10pKX1jb25zdCBsaT1GdCgicmVnaXN0ZXJlZFdvcmtlcnMiLHt9KTtmdW5jdGlvbiBkaSh0LGUpe2lmKCF0LmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbcixuXT10LmFyZ3Mscz1saVtyXTtpZihzKWUuaW5zdGFuY2U9bmV3IHModC5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7cn1gO1FlKG4sTCksVGUodCx0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gaGkodCxlKXtjb25zdHthcmdzOnJ9PXQ7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4ucj8/W10pKSxUZSh0LG4pfWZ1bmN0aW9uIG1pKHQpe2lmKCF0LmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO1FlKHQuYXJnc1swXSxMKSxUZSh0LHt9KX1mdW5jdGlvbiBwaSgpe2NvbnN0IHQ9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCByPWUuZGF0YTtzd2l0Y2goci50eXBlKXtjYXNlIHEuSU5JVDpkaShyLHQpO2JyZWFrO2Nhc2UgcS5GT1JXQVJEOmZpKHIsdCk7YnJlYWs7Y2FzZSBxLlRFUk1JTkFURTpoaShyLHQpO2JyZWFrO2Nhc2UgcS5HTE9CQUxTX1NZTkM6bWkocik7YnJlYWt9fX1McigpJiZwaSgpO2Z1bmN0aW9uIHlpKHQsZSl7cmV0dXJuIExbdF18fChMW3RdPWUpLFsoKT0+TFt0XSxhc3luYyByPT57TFt0XT1yLGF3YWl0IHVpKCl9XX1mdW5jdGlvbiBiaSh0LGUpe3JldHVybiB5aSh0LGUpfWNvbnN0W2dpLGZmXT1iaSgibWV0YWRhdGEiKTtmdW5jdGlvbiBQdCgpe3JldHVybiBnaSgpfWNsYXNzIHhpe2NvbnN0cnVjdG9yKGUpe0pzKHRoaXMsInV1aWQiLG9pKCkpLHRoaXMuY29uZmlnPWV9YXN5bmMgc2VuZChlKXt2YXIgcixuLHM7Y29uc3R7YXBwSWQ6aSxzb3VyY2VUeXBlOmF9PShyPVB0KCkpIT1udWxsP3I6e307aWYoIWl8fCFhKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBvPW5ldyBBYm9ydENvbnRyb2xsZXIsYz1zZXRUaW1lb3V0KCgpPT5vLmFib3J0KCksdGkpO3JldHVybiBhd2FpdCgocz0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP3M6ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDpvLnNpZ25hbH0pLGNsZWFyVGltZW91dChjKSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHI9KGU9UHQoKS5wcm94eVVybCkhPW51bGw/ZTplaTtyZXR1cm4gcis9KHIuYXQoLTEpPT09Ii8iPyIiOiIvIikrWnMscn1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3Qgcj1QdCgpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6ci5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDpyLnByb3h5VXJsLHNvdXJjZTpyLnNvdXJjZVR5cGV9fX1jb25zdCBFaT0iNi4wLjAtYWxwaGEuMiI7dmFyIHFlPSh0PT4odC5Mb3c9IkxvdyIsdC5IaWdoPSJIaWdoIix0KSkocWV8fHt9KSxrdD0odD0+KHQuRkFTVD0iRkFTVCIsdC5QUkVDSVNFPSJQUkVDSVNFIix0KSkoa3R8fHt9KSxLZT0odD0+KHQuQ0FOVkFTPSJDQU5WQVMiLHQuV0VCR0w9IldFQkdMIix0KSkoS2V8fHt9KTtmdW5jdGlvbiBfaSgpe2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIse2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITB9KTtpZihlKXtjb25zdCByPWU9PW51bGw/dm9pZCAwOmUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTtyJiZyLmxvc2VDb250ZXh0KCl9ZWxzZSByZXR1cm57c3VwcG9ydGVkOiExLG1lc3NhZ2U6IllvdXIgaGFyZHdhcmUgZG9lcyBub3QgcGVyZm9ybSBnb29kIGVub3VnaCB0byBydW4gdGhlIGxpYnJhcnkgZWZmaWNpZW50bHkifTtyZXR1cm57c3VwcG9ydGVkOiEwfX1jbGFzcyBDdHtjb25zdHJ1Y3Rvcigpe2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHI9ZS5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pO2lmKCFyKXRocm93IkZhaWwgdG8gcmV0cmlldmUgMmQgY29udGV4dCI7dGhpcy5jYW52YXM9ZSx0aGlzLmNvbnRleHQ9cn1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt9ZW5hYmxlUG9zdFByb2Nlc3NpbmcoKXt9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7fWFzeW5jIHByb2ZpbGVXZWJnbChlKXtyZXR1cm5bXX1hc3luYyByZW5kZXIoZSxyKXtyZXR1cm4gdGhpcy5jYW52YXN9cmVzaXplQ2FudmFzKGUpe2NvbnN0e3dpZHRoOnIsaGVpZ2h0Om59PWU7dGhpcy5jYW52YXMud2lkdGg9cix0aGlzLmNhbnZhcy5oZWlnaHQ9bn1yZW5kZXJTaWxob3VldHRlKGUscixuPSJub25lIil7Y29uc3R7d2lkdGg6cyxoZWlnaHQ6aX09ZTt0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UociwwLDAsci53aWR0aCxyLmhlaWdodCwwLDAscyxpKSx0aGlzLmNvbnRleHQuZmlsdGVyPSJibHVyKDVweCkiLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShyLDAsMCxyLndpZHRoLHIuaGVpZ2h0LDAsMCxzLGkpLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsdGhpcy5jb250ZXh0LmZpbHRlcj1uLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAscyxpLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCl9ZGVzdHJveSgpe319Y2xhc3MgVGkgZXh0ZW5kcyBDdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMucmFkaXVzPWV9YXN5bmMgcmVuZGVyKGUscil7c3VwZXIucmVzaXplQ2FudmFzKGUpO2NvbnN0IG49YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAocik7cmV0dXJuIHRoaXMucmVuZGVyU2lsaG91ZXR0ZShlLG4pLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj1gYmx1cigke3RoaXMucmFkaXVzfXB4KWAsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHIpfX1jbGFzcyB3aSBleHRlbmRzIEN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5yYWRpdXM9ZX1hc3luYyByZW5kZXIoZSxyKXtzdXBlci5yZXNpemVDYW52YXMoZSk7Y29uc3Qgbj1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChyKTtyZXR1cm4gdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsbixgYmx1cigke3RoaXMucmFkaXVzfXB4KWApLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj0ibm9uZSIsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHIpfX1jbGFzcyBBaSBleHRlbmRzIEN0e3NldEJhY2tncm91bmRJbWFnZShlKXt0aGlzLmJhY2tncm91bmRJbWFnZT1lfWFzeW5jIHJlbmRlcihlLHIpe3N1cGVyLnJlc2l6ZUNhbnZhcyhlKTtjb25zdCBuPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHIpO3JldHVybiB0aGlzLnJlbmRlclNpbGhvdWV0dGUoZSxuKSx0aGlzLmJhY2tncm91bmRJbWFnZSYmKHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj0ibm9uZSIsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLmJhY2tncm91bmRJbWFnZSwwLDAsdGhpcy5iYWNrZ3JvdW5kSW1hZ2Uud2lkdGgsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaGVpZ2h0LDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpKSxzdXBlci5yZW5kZXIoZSxyKX19LyogQGxpY2Vuc2UgdHdnbC5qcyA1LjUuMSBDb3B5cmlnaHQgKGMpIDIwMTUsIEdyZWdnIFRhdmFyZXMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KQXZhaWxhYmxlIHZpYSB0aGUgTUlUIGxpY2Vuc2UuCnNlZTogaHR0cDovL2dpdGh1Yi5jb20vZ3JlZ2dtYW4vdHdnbC5qcyBmb3IgZGV0YWlscyAqL2NvbnN0IEJ0PTUxMjAsd2U9NTEyMSxEdD01MTIyLE10PTUxMjMsVXQ9NTEyNCxOdD01MTI1LE90PTUxMjYsdmk9MzI4MTksU2k9MzI4MjAsSWk9MzM2MzUsUmk9NTEzMSxGaT0zMzY0MCxQaT0zNTg5OSxraT0zNTkwMixDaT0zNjI2OSxCaT0zNDA0Mix6cj17fTt7Y29uc3QgdD16cjt0W0J0XT1JbnQ4QXJyYXksdFt3ZV09VWludDhBcnJheSx0W0R0XT1JbnQxNkFycmF5LHRbTXRdPVVpbnQxNkFycmF5LHRbVXRdPUludDMyQXJyYXksdFtOdF09VWludDMyQXJyYXksdFtPdF09RmxvYXQzMkFycmF5LHRbdmldPVVpbnQxNkFycmF5LHRbU2ldPVVpbnQxNkFycmF5LHRbSWldPVVpbnQxNkFycmF5LHRbUmldPVVpbnQxNkFycmF5LHRbRmldPVVpbnQzMkFycmF5LHRbUGldPVVpbnQzMkFycmF5LHRba2ldPVVpbnQzMkFycmF5LHRbQ2ldPVVpbnQzMkFycmF5LHRbQmldPVVpbnQzMkFycmF5fWZ1bmN0aW9uIEx0KHQpe2lmKHQgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpcmV0dXJuIEJ0O2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpcmV0dXJuIHdlO2lmKHQgaW5zdGFuY2VvZiBJbnQxNkFycmF5KXJldHVybiBEdDtpZih0IGluc3RhbmNlb2YgVWludDE2QXJyYXkpcmV0dXJuIE10O2lmKHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5KXJldHVybiBVdDtpZih0IGluc3RhbmNlb2YgVWludDMyQXJyYXkpcmV0dXJuIE50O2lmKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpcmV0dXJuIE90O3Rocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdHlwZWQgYXJyYXkgdHlwZSIpfWZ1bmN0aW9uIEdyKHQpe2lmKHQ9PT1JbnQ4QXJyYXkpcmV0dXJuIEJ0O2lmKHQ9PT1VaW50OEFycmF5fHx0PT09VWludDhDbGFtcGVkQXJyYXkpcmV0dXJuIHdlO2lmKHQ9PT1JbnQxNkFycmF5KXJldHVybiBEdDtpZih0PT09VWludDE2QXJyYXkpcmV0dXJuIE10O2lmKHQ9PT1JbnQzMkFycmF5KXJldHVybiBVdDtpZih0PT09VWludDMyQXJyYXkpcmV0dXJuIE50O2lmKHQ9PT1GbG9hdDMyQXJyYXkpcmV0dXJuIE90O3Rocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdHlwZWQgYXJyYXkgdHlwZSIpfWZ1bmN0aW9uICRyKHQpe2NvbnN0IGU9enJbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGdsIHR5cGUiKTtyZXR1cm4gZX1jb25zdCBKZT10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiP2Z1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmKGUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fGUuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9O2Z1bmN0aW9uIFZyKC4uLnQpe2NvbnNvbGUuZXJyb3IoLi4udCl9Y29uc3QgV3I9bmV3IE1hcDtmdW5jdGlvbiBaZSh0LGUpe2lmKCF0fHx0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuITE7bGV0IHI9V3IuZ2V0KGUpO3J8fChyPW5ldyBXZWFrTWFwLFdyLnNldChlLHIpKTtsZXQgbj1yLmdldCh0KTtpZihuPT09dm9pZCAwKXtjb25zdCBzPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KTtuPXMuc3Vic3RyaW5nKDgscy5sZW5ndGgtMSk9PT1lLHIuc2V0KHQsbil9cmV0dXJuIG59ZnVuY3Rpb24gRGkodCxlKXtyZXR1cm4gdHlwZW9mIFdlYkdMQnVmZmVyPCJ1IiYmWmUoZSwiV2ViR0xCdWZmZXIiKX1mdW5jdGlvbiBNaSh0LGUpe3JldHVybiB0eXBlb2YgV2ViR0xSZW5kZXJidWZmZXI8InUiJiZaZShlLCJXZWJHTFJlbmRlcmJ1ZmZlciIpfWZ1bmN0aW9uIHp0KHQsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFRleHR1cmU8InUiJiZaZShlLCJXZWJHTFRleHR1cmUiKX1mdW5jdGlvbiBVaSh0LGUpe3JldHVybiB0eXBlb2YgV2ViR0xTYW1wbGVyPCJ1IiYmWmUoZSwiV2ViR0xTYW1wbGVyIil9Y29uc3QgSHI9MzUwNDQsSz0zNDk2MixOaT0zNDk2MyxPaT0zNDY2MCxMaT01MTIwLHppPTUxMjEsR2k9NTEyMiwkaT01MTIzLFZpPTUxMjQsV2k9NTEyNSxqcj01MTI2LFhyPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIEhpKHQsZSxyLG4scyl7dC5iaW5kQnVmZmVyKGUsciksdC5idWZmZXJEYXRhKGUsbixzfHxIcil9ZnVuY3Rpb24gWXIodCxlLHIsbil7aWYoRGkodCxlKSlyZXR1cm4gZTtyPXJ8fEs7Y29uc3Qgcz10LmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBIaSh0LHIscyxlLG4pLHN9ZnVuY3Rpb24gUXIodCl7cmV0dXJuIHQ9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gamkodCl7cmV0dXJuIHQ9PT1JbnQ4QXJyYXl8fHQ9PT1VaW50OEFycmF5fWZ1bmN0aW9uIFhpKHQpe3JldHVybiB0Lmxlbmd0aD90OnQuZGF0YX1jb25zdCBZaT0vY29vcmR8dGV4dHVyZS9pLFFpPS9jb2xvcnxjb2xvdXIvaTtmdW5jdGlvbiBxaSh0LGUpe2xldCByO2lmKFlpLnRlc3QodCk/cj0yOlFpLnRlc3QodCk/cj00OnI9MyxlJXI+MCl0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZ3Vlc3MgbnVtQ29tcG9uZW50cyBmb3IgYXR0cmlidXRlICcke3R9Jy4gVHJpZWQgJHtyfSBidXQgJHtlfSB2YWx1ZXMgaXMgbm90IGV2ZW5seSBkaXZpc2libGUgYnkgJHtyfS4gWW91IHNob3VsZCBzcGVjaWZ5IGl0LmApO3JldHVybiByfWZ1bmN0aW9uIEtpKHQsZSxyKXtyZXR1cm4gdC5udW1Db21wb25lbnRzfHx0LnNpemV8fHFpKGUscnx8WGkodCkubGVuZ3RoKX1mdW5jdGlvbiBxcih0LGUpe2lmKEplKHQpKXJldHVybiB0O2lmKEplKHQuZGF0YSkpcmV0dXJuIHQuZGF0YTtBcnJheS5pc0FycmF5KHQpJiYodD17ZGF0YTp0fSk7bGV0IHI9dC50eXBlP0d0KHQudHlwZSk6dm9pZCAwO3JldHVybiByfHwoUXIoZSk/cj1VaW50MTZBcnJheTpyPUZsb2F0MzJBcnJheSksbmV3IHIodC5kYXRhKX1mdW5jdGlvbiBKaSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIiP3Q6dD9Hcih0KTpqcn1mdW5jdGlvbiBHdCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIiPyRyKHQpOnR8fEZsb2F0MzJBcnJheX1mdW5jdGlvbiBaaSh0LGUpe3JldHVybntidWZmZXI6ZS5idWZmZXIsbnVtVmFsdWVzOjIqMyo0LHR5cGU6SmkoZS50eXBlKSxhcnJheVR5cGU6R3QoZS50eXBlKX19ZnVuY3Rpb24gZW8odCxlKXtjb25zdCByPWUuZGF0YXx8ZSxuPUd0KGUudHlwZSkscz1yKm4uQllURVNfUEVSX0VMRU1FTlQsaT10LmNyZWF0ZUJ1ZmZlcigpO3JldHVybiB0LmJpbmRCdWZmZXIoSyxpKSx0LmJ1ZmZlckRhdGEoSyxzLGUuZHJhd1R5cGV8fEhyKSx7YnVmZmVyOmksbnVtVmFsdWVzOnIsdHlwZTpHcihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gdG8odCxlLHIpe2NvbnN0IG49cXIoZSxyKTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOllyKHQsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTpMdChuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gcm8odCxlKXtjb25zdCByPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFRcihuKSl7Y29uc3Qgcz1lW25dLGk9cy5hdHRyaWJ8fHMubmFtZXx8cy5hdHRyaWJOYW1lfHxYci5hdHRyaWJQcmVmaXgrbjtpZihzLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShzLnZhbHVlKSYmIUplKHMudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTtyW2ldPXt2YWx1ZTpzLnZhbHVlfX1lbHNle2xldCBhO3MuYnVmZmVyJiZzLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP2E9Wmk6dHlwZW9mIHM9PSJudW1iZXIifHx0eXBlb2Ygcy5kYXRhPT0ibnVtYmVyIj9hPWVvOmE9dG87Y29uc3R7YnVmZmVyOm8sdHlwZTpjLG51bVZhbHVlczp1LGFycmF5VHlwZTpmfT1hKHQscyxuKSxkPXMubm9ybWFsaXplIT09dm9pZCAwP3Mubm9ybWFsaXplOmppKGYpLGg9S2kocyxuLHUpO3JbaV09e2J1ZmZlcjpvLG51bUNvbXBvbmVudHM6aCx0eXBlOmMsbm9ybWFsaXplOmQsc3RyaWRlOnMuc3RyaWRlfHwwLG9mZnNldDpzLm9mZnNldHx8MCxkaXZpc29yOnMuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6cy5kaXZpc29yLGRyYXdUeXBlOnMuZHJhd1R5cGV9fX19KSx0LmJpbmRCdWZmZXIoSyxudWxsKSxyfWZ1bmN0aW9uIG5vKHQsZSl7cmV0dXJuIGU9PT1MaXx8ZT09PXppPzE6ZT09PUdpfHxlPT09JGk/MjplPT09Vml8fGU9PT1XaXx8ZT09PWpyPzQ6MH1jb25zdCAkdD1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIHNvKHQsZSl7bGV0IHIsbjtmb3Iobj0wO248JHQubGVuZ3RoJiYocj0kdFtuXSwhKHIgaW4gZXx8KHI9WHIuYXR0cmliUHJlZml4K3IsciBpbiBlKSkpOysrbik7bj09PSR0Lmxlbmd0aCYmKHI9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IHM9ZVtyXTtpZighcy5idWZmZXIpcmV0dXJuIDE7dC5iaW5kQnVmZmVyKEsscy5idWZmZXIpO2NvbnN0IGk9dC5nZXRCdWZmZXJQYXJhbWV0ZXIoSyxPaSk7dC5iaW5kQnVmZmVyKEssbnVsbCk7Y29uc3QgYT1ubyh0LHMudHlwZSksbz1pL2EsYz1zLm51bUNvbXBvbmVudHN8fHMuc2l6ZSx1PW8vYztpZih1JTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke2N9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIHV9ZnVuY3Rpb24gaW8odCxlLHIpe2NvbnN0IG49cm8odCxlKSxzPU9iamVjdC5hc3NpZ24oe30scnx8e30pO3MuYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHI/ci5hdHRyaWJzOnt9LG4pO2NvbnN0IGk9ZS5pbmRpY2VzO2lmKGkpe2NvbnN0IGE9cXIoaSwiaW5kaWNlcyIpO3MuaW5kaWNlcz1Zcih0LGEsTmkpLHMubnVtRWxlbWVudHM9YS5sZW5ndGgscy5lbGVtZW50VHlwZT1MdChhKX1lbHNlIHMubnVtRWxlbWVudHN8fChzLm51bUVsZW1lbnRzPXNvKHQscy5hdHRyaWJzKSk7cmV0dXJuIHN9ZnVuY3Rpb24gQWUodCl7cmV0dXJuISF0LnRleFN0b3JhZ2UyRH1jb25zdCBLcj1mdW5jdGlvbigpe2NvbnN0IHQ9e30sZT17fTtmdW5jdGlvbiByKG4pe2NvbnN0IHM9bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCF0W3NdKXtmb3IoY29uc3QgaSBpbiBuKWlmKHR5cGVvZiBuW2ldPT0ibnVtYmVyIil7Y29uc3QgYT1lW25baV1dO2VbbltpXV09YT9gJHthfSB8ICR7aX1gOml9dFtzXT0hMH19cmV0dXJuIGZ1bmN0aW9uKHMsaSl7cmV0dXJuIHIocyksZVtpXXx8KHR5cGVvZiBpPT0ibnVtYmVyIj9gMHgke2kudG9TdHJpbmcoMTYpfWA6aSl9fSgpLHo9e3RleHR1cmVDb2xvcjpuZXcgVWludDhBcnJheShbMTI4LDE5MiwyNTUsMjU1XSksdGV4dHVyZU9wdGlvbnM6e30sY3Jvc3NPcmlnaW46dm9pZCAwfSx2ZT1KZSxKcj1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0PXR8fCh0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50P2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik6bnVsbCksdH19KCksVnQ9NjQwNixQPTY0MDcsZz02NDA4LFd0PTY0MDksSHQ9NjQxMCxoZT02NDAyLGp0PTM0MDQxLGV0PTMzMDcxLG9vPTk3MjgsYW89OTcyOSxHPTM1NTMsJD0zNDA2NyxKPTMyODc5LFo9MzU4NjYsWHQ9MzQwNjksY289MzQwNzAsdW89MzQwNzEsZm89MzQwNzIsbG89MzQwNzMsaG89MzQwNzQsWXQ9MTAyNDEsUXQ9MTAyNDAsdHQ9MTAyNDIscnQ9MTAyNDMsWnI9MzI4ODIsbW89MzMwODIscG89MzMwODMseW89MzMwODQsYm89MzMwODUsZ289MzQ4OTIseG89MzQ4OTMscXQ9MzMxNyxlbj0zMzE0LHRuPTMyODc4LHJuPTMzMTYsbm49MzMxNSxzbj0zMjg3NyxFbz0zNzQ0Myxfbz0zNzQ0MSxUbz0zNzQ0MCx3bz0zMzMyMSxBbz0zNjc1Nix2bz0zMzMyNSxTbz0zMzMyNixJbz0zMzMzMCxSbz0zMzMyOSxGbz0zMzMzOCxQbz0zMzMzNyxrbz0zMzM0MCxDbz0zMzMzOSxCbz0zMzMyMyxEbz0zNjc1NyxNbz0zMzMyNyxVbz0zMzMyOCxObz0zMzMzNixPbz0zMzMzNSxMbz0zMzMzMix6bz0zMzMzMSxHbz0zMzMzNCwkbz0zMzMzMyxWbz0zMjg0OSxXbz0zNTkwNSxIbz0zNjE5NCxqbz0zNjc1OCxYbz0zNTg5OCxZbz0zNTkwMSxRbz0zNDg0Myxxbz0zNDgzNyxLbz0zNjIyMSxKbz0zNjIzOSxabz0zNjIxNSxlYT0zNjIzMyx0YT0zNjIwOSxyYT0zNjIyNyxuYT0zMjg1NixzYT0zNTkwNyxpYT0zNjc1OSxvYT0zMjg1NSxhYT0zMjg1NCxjYT0zMjg1Nyx1YT0zNDg0MixmYT0zNDgzNixsYT0zNjIyMCxkYT0zNjIzOCxoYT0zNjk3NSxtYT0zNjIxNCxwYT0zNjIzMix5YT0zNjIyNixiYT0zNjIwOCxnYT0zMzE4OSx4YT0zMzE5MCxFYT0zNjAxMixfYT0zNjAxMyxUYT0zNTA1NixWPTUxMjAsRT01MTIxLG50PTUxMjIsbWU9NTEyMyxzdD01MTI0LGVlPTUxMjUsQT01MTI2LG9uPTMyODE5LGFuPTMyODIwLGNuPTMzNjM1LGs9NTEzMSxTZT0zNjE5MyxLdD0zMzY0MCx3YT0zNTg5OSxBYT0zNTkwMix2YT0zNjI2OSxTYT0zNDA0MixJZT0zMzMxOSx0ZT0zMzMyMCxSZT02NDAzLHJlPTM2MjQ0LG5lPTM2MjQ4LFc9MzYyNDksSWE9e307e2NvbnN0IHQ9SWE7dFtWdF09e251bUNvbG9yQ29tcG9uZW50czoxfSx0W1d0XT17bnVtQ29sb3JDb21wb25lbnRzOjF9LHRbSHRdPXtudW1Db2xvckNvbXBvbmVudHM6Mn0sdFtQXT17bnVtQ29sb3JDb21wb25lbnRzOjN9LHRbZ109e251bUNvbG9yQ29tcG9uZW50czo0fSx0W1JlXT17bnVtQ29sb3JDb21wb25lbnRzOjF9LHRbcmVdPXtudW1Db2xvckNvbXBvbmVudHM6MX0sdFtJZV09e251bUNvbG9yQ29tcG9uZW50czoyfSx0W3RlXT17bnVtQ29sb3JDb21wb25lbnRzOjJ9LHRbUF09e251bUNvbG9yQ29tcG9uZW50czozfSx0W25lXT17bnVtQ29sb3JDb21wb25lbnRzOjN9LHRbZ109e251bUNvbG9yQ29tcG9uZW50czo0fSx0W1ddPXtudW1Db2xvckNvbXBvbmVudHM6NH0sdFtoZV09e251bUNvbG9yQ29tcG9uZW50czoxfSx0W2p0XT17bnVtQ29sb3JDb21wb25lbnRzOjJ9fWxldCBKdDtmdW5jdGlvbiBpdCh0KXtpZighSnQpe2NvbnN0IGU9e307ZVtWdF09e3RleHR1cmVGb3JtYXQ6VnQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbRSxrLFNlLEFdfSxlW1d0XT17dGV4dHVyZUZvcm1hdDpXdCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltFLGssU2UsQV19LGVbSHRdPXt0ZXh0dXJlRm9ybWF0Okh0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W0UsayxTZSxBXX0sZVtQXT17dGV4dHVyZUZvcm1hdDpQLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W0UsayxTZSxBLGNuXX0sZVtnXT17dGV4dHVyZUZvcm1hdDpnLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbRSxrLFNlLEEsb24sYW5dfSxlW2hlXT17dGV4dHVyZUZvcm1hdDpoZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W2VlLG1lXX0sZVt3b109e3RleHR1cmVGb3JtYXQ6UmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbRV19LGVbQW9dPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1ZdfSxlW3ZvXT17dGV4dHVyZUZvcm1hdDpSZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W0Esa119LGVbU29dPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0FdfSxlW0lvXT17dGV4dHVyZUZvcm1hdDpyZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltFXX0sZVtSb109e3RleHR1cmVGb3JtYXQ6cmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbVl19LGVbTG9dPXt0ZXh0dXJlRm9ybWF0OnJlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W21lXX0sZVt6b109e3RleHR1cmVGb3JtYXQ6cmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbbnRdfSxlW0dvXT17dGV4dHVyZUZvcm1hdDpyZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltlZV19LGVbJG9dPXt0ZXh0dXJlRm9ybWF0OnJlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3N0XX0sZVtCb109e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbRV19LGVbRG9dPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W1ZdfSxlW01vXT17dGV4dHVyZUZvcm1hdDpJZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W0Esa119LGVbVW9dPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W0FdfSxlW05vXT17dGV4dHVyZUZvcm1hdDp0ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltFXX0sZVtPb109e3RleHR1cmVGb3JtYXQ6dGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbVl19LGVbRm9dPXt0ZXh0dXJlRm9ybWF0OnRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W21lXX0sZVtQb109e3RleHR1cmVGb3JtYXQ6dGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbbnRdfSxlW2tvXT17dGV4dHVyZUZvcm1hdDp0ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltlZV19LGVbQ29dPXt0ZXh0dXJlRm9ybWF0OnRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3N0XX0sZVtWb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltFXX0sZVtXb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltFXX0sZVtIb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDJdLHR5cGU6W0UsY25dfSxlW2pvXT17dGV4dHVyZUZvcm1hdDpQLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1ZdfSxlW1hvXT17dGV4dHVyZUZvcm1hdDpQLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbQSxrLHdhXX0sZVtZb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W0EsayxBYV19LGVbUW9dPXt0ZXh0dXJlRm9ybWF0OlAsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbQSxrXX0sZVtxb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbQV19LGVbS29dPXt0ZXh0dXJlRm9ybWF0Om5lLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0VdfSxlW0pvXT17dGV4dHVyZUZvcm1hdDpuZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltWXX0sZVtab109e3RleHR1cmVGb3JtYXQ6bmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbbWVdfSxlW2VhXT17dGV4dHVyZUZvcm1hdDpuZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltudF19LGVbdGFdPXt0ZXh0dXJlRm9ybWF0Om5lLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltlZV19LGVbcmFdPXt0ZXh0dXJlRm9ybWF0Om5lLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltzdF19LGVbbmFdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbRV19LGVbc2FdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbRV19LGVbaWFdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbVl19LGVbb2FdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyLDRdLHR5cGU6W0UsYW4sS3RdfSxlW2FhXT17dGV4dHVyZUZvcm1hdDpnLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbRSxvbl19LGVbY2FdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbS3RdfSxlW3VhXT17dGV4dHVyZUZvcm1hdDpnLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzE2LDhdLHR5cGU6W0Esa119LGVbZmFdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W0FdfSxlW2xhXT17dGV4dHVyZUZvcm1hdDpXLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0VdfSxlW2RhXT17dGV4dHVyZUZvcm1hdDpXLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1ZdfSxlW2hhXT17dGV4dHVyZUZvcm1hdDpXLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0t0XX0sZVttYV09e3RleHR1cmVGb3JtYXQ6Vyxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOlttZV19LGVbcGFdPXt0ZXh0dXJlRm9ybWF0OlcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbbnRdfSxlW3lhXT17dGV4dHVyZUZvcm1hdDpXLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltzdF19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0OlcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W2VlXX0sZVtnYV09e3RleHR1cmVGb3JtYXQ6aGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlttZSxlZV19LGVbeGFdPXt0ZXh0dXJlRm9ybWF0OmhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2VlXX0sZVtFYV09e3RleHR1cmVGb3JtYXQ6aGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQV19LGVbVGFdPXt0ZXh0dXJlRm9ybWF0Omp0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1NhXX0sZVtfYV09e3RleHR1cmVGb3JtYXQ6anQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbdmFdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2NvbnN0IG49ZVtyXTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKHMsaSl7Y29uc3QgYT1uLnR5cGVbaV07bi5ieXRlc1BlckVsZW1lbnRNYXBbYV09c30pfSksSnQ9ZX1yZXR1cm4gSnRbdF19ZnVuY3Rpb24gUmEodCxlKXtjb25zdCByPWl0KHQpO2lmKCFyKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXIuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIEZlKHQpe2NvbnN0IGU9aXQodCk7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiB1bih0KXtyZXR1cm4odCZ0LTEpPT09MH1mdW5jdGlvbiBGYSh0LGUscixuKXtpZighQWUodCkpcmV0dXJuIHVuKGUpJiZ1bihyKTtjb25zdCBzPWl0KG4pO2lmKCFzKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gcy5jb2xvclJlbmRlcmFibGUmJnMudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gUGEodCl7Y29uc3QgZT1pdCh0KTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24ga2EodCxlLHIpe3JldHVybiB2ZShlKT9MdChlKTpyfHxFfWZ1bmN0aW9uIG90KHQsZSxyLG4scyl7aWYocyUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighciYmIW4pe2NvbnN0IGk9TWF0aC5zcXJ0KHMvKGU9PT0kPzY6MSkpO2klMT09PTA/KHI9aSxuPWkpOihyPXMsbj0xKX1lbHNlIGlmKG4pe2lmKCFyJiYocj1zL24sciUxKSl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIn1lbHNlIGlmKG49cy9yLG4lMSl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19ZnVuY3Rpb24gcGUodCxlKXtlLmNvbG9yc3BhY2VDb252ZXJzaW9uIT09dm9pZCAwJiZ0LnBpeGVsU3RvcmVpKEVvLGUuY29sb3JzcGFjZUNvbnZlcnNpb24pLGUucHJlbXVsdGlwbHlBbHBoYSE9PXZvaWQgMCYmdC5waXhlbFN0b3JlaShfbyxlLnByZW11bHRpcGx5QWxwaGEpLGUuZmxpcFkhPT12b2lkIDAmJnQucGl4ZWxTdG9yZWkoVG8sZS5mbGlwWSl9ZnVuY3Rpb24gZm4odCl7dC5waXhlbFN0b3JlaShxdCw0KSxBZSh0KSYmKHQucGl4ZWxTdG9yZWkoZW4sMCksdC5waXhlbFN0b3JlaSh0biwwKSx0LnBpeGVsU3RvcmVpKHJuLDApLHQucGl4ZWxTdG9yZWkobm4sMCksdC5waXhlbFN0b3JlaShzbiwwKSl9ZnVuY3Rpb24gQ2EodCxlLHIsbil7bi5taW5NYWcmJihyLmNhbGwodCxlLFl0LG4ubWluTWFnKSxyLmNhbGwodCxlLFF0LG4ubWluTWFnKSksbi5taW4mJnIuY2FsbCh0LGUsWXQsbi5taW4pLG4ubWFnJiZyLmNhbGwodCxlLFF0LG4ubWFnKSxuLndyYXAmJihyLmNhbGwodCxlLHR0LG4ud3JhcCksci5jYWxsKHQsZSxydCxuLndyYXApLChlPT09Snx8VWkodCxlKSkmJnIuY2FsbCh0LGUsWnIsbi53cmFwKSksbi53cmFwUiYmci5jYWxsKHQsZSxacixuLndyYXBSKSxuLndyYXBTJiZyLmNhbGwodCxlLHR0LG4ud3JhcFMpLG4ud3JhcFQmJnIuY2FsbCh0LGUscnQsbi53cmFwVCksbi5taW5Mb2QhPT12b2lkIDAmJnIuY2FsbCh0LGUsbW8sbi5taW5Mb2QpLG4ubWF4TG9kIT09dm9pZCAwJiZyLmNhbGwodCxlLHBvLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCE9PXZvaWQgMCYmci5jYWxsKHQsZSx5byxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCE9PXZvaWQgMCYmci5jYWxsKHQsZSxibyxuLm1heExldmVsKSxuLmNvbXBhcmVGdW5jIT09dm9pZCAwJiZyLmNhbGwodCxlLHhvLG4uY29tcGFyZUZ1bmMpLG4uY29tcGFyZU1vZGUhPT12b2lkIDAmJnIuY2FsbCh0LGUsZ28sbi5jb21wYXJlTW9kZSl9ZnVuY3Rpb24gbG4odCxlLHIpe2NvbnN0IG49ci50YXJnZXR8fEc7dC5iaW5kVGV4dHVyZShuLGUpLENhKHQsbix0LnRleFBhcmFtZXRlcmkscil9ZnVuY3Rpb24gQmEodCl7cmV0dXJuIHQ9dHx8ei50ZXh0dXJlQ29sb3IsdmUodCk/dDpuZXcgVWludDhBcnJheShbdFswXSoyNTUsdFsxXSoyNTUsdFsyXSoyNTUsdFszXSoyNTVdKX1mdW5jdGlvbiBadCh0LGUscixuLHMsaSl7cj1yfHx6LnRleHR1cmVPcHRpb25zLGk9aXx8Zztjb25zdCBhPXIudGFyZ2V0fHxHO2lmKG49bnx8ci53aWR0aCxzPXN8fHIuaGVpZ2h0LHQuYmluZFRleHR1cmUoYSxlKSxGYSh0LG4scyxpKSl0LmdlbmVyYXRlTWlwbWFwKGEpO2Vsc2V7Y29uc3Qgbz1QYShpKT9hbzpvbzt0LnRleFBhcmFtZXRlcmkoYSxZdCxvKSx0LnRleFBhcmFtZXRlcmkoYSxRdCxvKSx0LnRleFBhcmFtZXRlcmkoYSx0dCxldCksdC50ZXhQYXJhbWV0ZXJpKGEscnQsZXQpfX1mdW5jdGlvbiBQZSh0KXtyZXR1cm4gdC5hdXRvPT09ITB8fHQuYXV0bz09PXZvaWQgMCYmdC5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiBlcih0LGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W1h0LGNvLHVvLGZvLGxvLGhvXX1mdW5jdGlvbiB0cih0LGUpe2NvbnN0IG49ZXIodCxlKS5tYXAoZnVuY3Rpb24ocyxpKXtyZXR1cm57ZmFjZTpzLG5keDppfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24ocyxpKXtyZXR1cm4gcy5mYWNlLWkuZmFjZX0pLG59ZnVuY3Rpb24gZG4odCxlLHIsbil7bj1ufHx6LnRleHR1cmVPcHRpb25zO2NvbnN0IHM9bi50YXJnZXR8fEcsaT1uLmxldmVsfHwwO2xldCBhPXIud2lkdGgsbz1yLmhlaWdodDtjb25zdCBjPW4uaW50ZXJuYWxGb3JtYXR8fG4uZm9ybWF0fHxnLHU9RmUoYyksZj1uLmZvcm1hdHx8dS5mb3JtYXQsZD1uLnR5cGV8fHUudHlwZTtpZihwZSh0LG4pLHQuYmluZFRleHR1cmUocyxlKSxzPT09JCl7Y29uc3QgaD1yLndpZHRoLHA9ci5oZWlnaHQ7bGV0IGwseTtpZihoLzY9PT1wKWw9cCx5PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihwLzY9PT1oKWw9aCx5PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZihoLzM9PT1wLzIpbD1oLzMseT1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoaC8yPT09cC8zKWw9aC8yLHk9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyhyLnNyYz9yLnNyYzpyLm5vZGVOYW1lKTtjb25zdCBiPUpyKCk7Yj8oYi5jYW52YXMud2lkdGg9bCxiLmNhbnZhcy5oZWlnaHQ9bCxhPWwsbz1sLHRyKHQsbikuZm9yRWFjaChmdW5jdGlvbih4KXtjb25zdCBTPXlbeC5uZHgqMiswXSpsLEY9eVt4Lm5keCoyKzFdKmw7Yi5kcmF3SW1hZ2UocixTLEYsbCxsLDAsMCxsLGwpLHQudGV4SW1hZ2UyRCh4LmZhY2UsaSxjLGYsZCxiLmNhbnZhcyl9KSxiLmNhbnZhcy53aWR0aD0xLGIuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYoYT1sLG89bCx0cih0LG4pLmZvckVhY2goZnVuY3Rpb24oeCl7Y29uc3QgUz15W3gubmR4KjIrMF0qbCxGPXlbeC5uZHgqMisxXSpsO3QudGV4SW1hZ2UyRCh4LmZhY2UsaSxjLGwsbCwwLGYsZCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcChyLFMsRixsLGwse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oWCl7cGUodCxuKSx0LmJpbmRUZXh0dXJlKHMsZSksdC50ZXhJbWFnZTJEKHguZmFjZSxpLGMsZixkLFgpLFBlKG4pJiZadCh0LGUsbixhLG8sYyl9KX0pKX1lbHNlIGlmKHM9PT1KfHxzPT09Wil7Y29uc3QgaD1NYXRoLm1pbihyLndpZHRoLHIuaGVpZ2h0KSxwPU1hdGgubWF4KHIud2lkdGgsci5oZWlnaHQpLGw9cC9oO2lmKGwlMSE9PTApdGhyb3ciY2FuIG5vdCBjb21wdXRlIDNEIGRpbWVuc2lvbnMgb2YgZWxlbWVudCI7Y29uc3QgeT1yLndpZHRoPT09cD8xOjAsYj1yLmhlaWdodD09PXA/MTowO3QucGl4ZWxTdG9yZWkocXQsMSksdC5waXhlbFN0b3JlaShlbixyLndpZHRoKSx0LnBpeGVsU3RvcmVpKHRuLDApLHQucGl4ZWxTdG9yZWkoc24sMCksdC50ZXhJbWFnZTNEKHMsaSxjLGgsaCxoLDAsZixkLG51bGwpO2ZvcihsZXQgeD0wO3g8bDsrK3gpe2NvbnN0IFM9eCpoKnksRj14KmgqYjt0LnBpeGVsU3RvcmVpKHJuLFMpLHQucGl4ZWxTdG9yZWkobm4sRiksdC50ZXhTdWJJbWFnZTNEKHMsaSwwLDAseCxoLGgsMSxmLGQscil9Zm4odCl9ZWxzZSB0LnRleEltYWdlMkQocyxpLGMsZixkLHIpO1BlKG4pJiZadCh0LGUsbixhLG8sYyksbG4odCxlLG4pfWZ1bmN0aW9uIGtlKCl7fWZ1bmN0aW9uIERhKHQpe2lmKHR5cGVvZiBkb2N1bWVudDwidSIpe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiBlLmhyZWY9dCxlLmhvc3RuYW1lPT09bG9jYXRpb24uaG9zdG5hbWUmJmUucG9ydD09PWxvY2F0aW9uLnBvcnQmJmUucHJvdG9jb2w9PT1sb2NhdGlvbi5wcm90b2NvbH1lbHNle2NvbnN0IGU9bmV3IFVSTChsb2NhdGlvbi5ocmVmKS5vcmlnaW47cmV0dXJuIG5ldyBVUkwodCxsb2NhdGlvbi5ocmVmKS5vcmlnaW49PT1lfX1mdW5jdGlvbiBNYSh0LGUpe3JldHVybiBlPT09dm9pZCAwJiYhRGEodCk/ImFub255bW91cyI6ZX1mdW5jdGlvbiBVYSh0LGUscil7cj1yfHxrZTtsZXQgbjtpZihlPWUhPT12b2lkIDA/ZTp6LmNyb3NzT3JpZ2luLGU9TWEodCxlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBzPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsaSksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixhKSxuPW51bGx9LGk9ZnVuY3Rpb24oKXtjb25zdCBjPSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3Q7VnIoYykscihjLG4pLHMoKX0sYT1mdW5jdGlvbigpe3IobnVsbCxuKSxzKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixpKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGEpLG4uc3JjPXQsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBzLGk7Y29uc3QgYT1mdW5jdGlvbigpe3IocyxpKX0sbz17fTtlJiYoby5tb2RlPSJjb3JzIiksZmV0Y2godCxvKS50aGVuKGZ1bmN0aW9uKGMpe2lmKCFjLm9rKXRocm93IGM7cmV0dXJuIGMuYmxvYigpfSkudGhlbihmdW5jdGlvbihjKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAoYyx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKGMpe2k9YyxzZXRUaW1lb3V0KGEpfSkuY2F0Y2goZnVuY3Rpb24oYyl7cz1jLHNldFRpbWVvdXQoYSl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gaG4odCl7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnQgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBycih0LGUscil7cmV0dXJuIGhuKHQpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cihudWxsLHQpfSksdCk6VWEodCxlLHIpfWZ1bmN0aW9uIG5yKHQsZSxyKXtyPXJ8fHoudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj1yLnRhcmdldHx8RztpZih0LmJpbmRUZXh0dXJlKG4sZSksci5jb2xvcj09PSExKXJldHVybjtjb25zdCBzPUJhKHIuY29sb3IpO2lmKG49PT0kKWZvcihsZXQgaT0wO2k8NjsrK2kpdC50ZXhJbWFnZTJEKFh0K2ksMCxnLDEsMSwwLGcsRSxzKTtlbHNlIG49PT1KfHxuPT09Wj90LnRleEltYWdlM0QobiwwLGcsMSwxLDEsMCxnLEUscyk6dC50ZXhJbWFnZTJEKG4sMCxnLDEsMSwwLGcsRSxzKX1mdW5jdGlvbiBOYSh0LGUscixuKXtyZXR1cm4gbj1ufHxrZSxyPXJ8fHoudGV4dHVyZU9wdGlvbnMsbnIodCxlLHIpLHI9T2JqZWN0LmFzc2lnbih7fSxyKSxycihyLnNyYyxyLmNyb3NzT3JpZ2luLGZ1bmN0aW9uKGksYSl7aT9uKGksZSxhKTooZG4odCxlLGEsciksbihudWxsLGUsYSkpfSl9ZnVuY3Rpb24gT2EodCxlLHIsbil7bj1ufHxrZTtjb25zdCBzPXIuc3JjO2lmKHMubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBpPXIubGV2ZWx8fDAsYT1yLmludGVybmFsRm9ybWF0fHxyLmZvcm1hdHx8ZyxvPUZlKGEpLGM9ci5mb3JtYXR8fG8uZm9ybWF0LHU9ci50eXBlfHxFLGY9ci50YXJnZXR8fEc7aWYoZiE9PSQpdGhyb3cidGFyZ2V0IG11c3QgYmUgVEVYVFVSRV9DVUJFX01BUCI7bnIodCxlLHIpLHI9T2JqZWN0LmFzc2lnbih7fSxyKTtsZXQgZD02O2NvbnN0IGg9W10scD1lcih0LHIpO2xldCBsO2Z1bmN0aW9uIHkoYil7cmV0dXJuIGZ1bmN0aW9uKHgsUyl7LS1kLHg/aC5wdXNoKHgpOlMud2lkdGghPT1TLmhlaWdodD9oLnB1c2goImN1YmVtYXAgZmFjZSBpbWcgaXMgbm90IGEgc3F1YXJlOiAiK1Muc3JjKToocGUodCxyKSx0LmJpbmRUZXh0dXJlKGYsZSksZD09PTU/ZXIoKS5mb3JFYWNoKGZ1bmN0aW9uKEYpe3QudGV4SW1hZ2UyRChGLGksYSxjLHUsUyl9KTp0LnRleEltYWdlMkQoYixpLGEsYyx1LFMpLFBlKHIpJiZ0LmdlbmVyYXRlTWlwbWFwKGYpKSxkPT09MCYmbihoLmxlbmd0aD9oOnZvaWQgMCxlLGwpfX1sPXMubWFwKGZ1bmN0aW9uKGIseCl7cmV0dXJuIHJyKGIsci5jcm9zc09yaWdpbix5KHBbeF0pKX0pfWZ1bmN0aW9uIExhKHQsZSxyLG4pe249bnx8a2U7Y29uc3Qgcz1yLnNyYyxpPXIuaW50ZXJuYWxGb3JtYXR8fHIuZm9ybWF0fHxnLGE9RmUoaSksbz1yLmZvcm1hdHx8YS5mb3JtYXQsYz1yLnR5cGV8fEUsdT1yLnRhcmdldHx8WjtpZih1IT09SiYmdSE9PVopdGhyb3cidGFyZ2V0IG11c3QgYmUgVEVYVFVSRV8zRCBvciBURVhUVVJFXzJEX0FSUkFZIjtucih0LGUscikscj1PYmplY3QuYXNzaWduKHt9LHIpO2xldCBmPXMubGVuZ3RoO2NvbnN0IGQ9W107bGV0IGg7Y29uc3QgcD1yLmxldmVsfHwwO2xldCBsPXIud2lkdGgseT1yLmhlaWdodDtjb25zdCBiPXMubGVuZ3RoO2xldCB4PSEwO2Z1bmN0aW9uIFMoRil7cmV0dXJuIGZ1bmN0aW9uKFgsc2Upe2lmKC0tZixYKWQucHVzaChYKTtlbHNle2lmKHBlKHQsciksdC5iaW5kVGV4dHVyZSh1LGUpLHgpe3g9ITEsbD1yLndpZHRofHxzZS53aWR0aCx5PXIuaGVpZ2h0fHxzZS5oZWlnaHQsdC50ZXhJbWFnZTNEKHUscCxpLGwseSxiLDAsbyxjLG51bGwpO2ZvcihsZXQgaWU9MDtpZTxiOysraWUpdC50ZXhTdWJJbWFnZTNEKHUscCwwLDAsaWUsbCx5LDEsbyxjLHNlKX1lbHNle2xldCBpZT1zZSxNOyhzZS53aWR0aCE9PWx8fHNlLmhlaWdodCE9PXkpJiYoTT1KcigpLGllPU0uY2FudmFzLE0uY2FudmFzLndpZHRoPWwsTS5jYW52YXMuaGVpZ2h0PXksTS5kcmF3SW1hZ2Uoc2UsMCwwLGwseSkpLHQudGV4U3ViSW1hZ2UzRCh1LHAsMCwwLEYsbCx5LDEsbyxjLGllKSxNJiZpZT09PU0uY2FudmFzJiYoTS5jYW52YXMud2lkdGg9MCxNLmNhbnZhcy5oZWlnaHQ9MCl9UGUocikmJnQuZ2VuZXJhdGVNaXBtYXAodSl9Zj09PTAmJm4oZC5sZW5ndGg/ZDp2b2lkIDAsZSxoKX19aD1zLm1hcChmdW5jdGlvbihGLFgpe3JldHVybiBycihGLHIuY3Jvc3NPcmlnaW4sUyhYKSl9KX1mdW5jdGlvbiB6YSh0LGUscixuKXtuPW58fHoudGV4dHVyZU9wdGlvbnM7Y29uc3Qgcz1uLnRhcmdldHx8Rzt0LmJpbmRUZXh0dXJlKHMsZSk7bGV0IGk9bi53aWR0aCxhPW4uaGVpZ2h0LG89bi5kZXB0aDtjb25zdCBjPW4ubGV2ZWx8fDAsdT1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8ZyxmPUZlKHUpLGQ9bi5mb3JtYXR8fGYuZm9ybWF0LGg9bi50eXBlfHxrYSh0LHIsZi50eXBlKTtpZih2ZShyKSlyIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJihyPW5ldyBVaW50OEFycmF5KHIuYnVmZmVyKSk7ZWxzZXtjb25zdCBiPSRyKGgpO3I9bmV3IGIocil9Y29uc3QgcD1SYSh1LGgpLGw9ci5ieXRlTGVuZ3RoL3A7aWYobCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrS3IodCxkKTtsZXQgeTtpZihzPT09Snx8cz09PVopaWYoIWkmJiFhJiYhbyl7Y29uc3QgYj1NYXRoLmNicnQobCk7aWYoYiUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBjdWJlIHNpemUgb2YgYXJyYXkgb2YgbnVtRWxlbWVudHM6ICIrbDtpPWIsYT1iLG89Yn1lbHNlIGkmJighYXx8IW8pPyh5PW90KHQscyxhLG8sbC9pKSxhPXkud2lkdGgsbz15LmhlaWdodCk6YSYmKCFpfHwhbyk/KHk9b3QodCxzLGksbyxsL2EpLGk9eS53aWR0aCxvPXkuaGVpZ2h0KTooeT1vdCh0LHMsaSxhLGwvbyksaT15LndpZHRoLGE9eS5oZWlnaHQpO2Vsc2UgeT1vdCh0LHMsaSxhLGwpLGk9eS53aWR0aCxhPXkuaGVpZ2h0O2lmKGZuKHQpLHQucGl4ZWxTdG9yZWkocXQsbi51bnBhY2tBbGlnbm1lbnR8fDEpLHBlKHQsbikscz09PSQpe2NvbnN0IGI9cC9yLkJZVEVTX1BFUl9FTEVNRU5ULHg9bC82KmI7dHIodCxuKS5mb3JFYWNoKFM9Pntjb25zdCBGPXgqUy5uZHgsWD1yLnN1YmFycmF5KEYsRit4KTt0LnRleEltYWdlMkQoUy5mYWNlLGMsdSxpLGEsMCxkLGgsWCl9KX1lbHNlIHM9PT1KfHxzPT09Wj90LnRleEltYWdlM0QocyxjLHUsaSxhLG8sMCxkLGgscik6dC50ZXhJbWFnZTJEKHMsYyx1LGksYSwwLGQsaCxyKTtyZXR1cm57d2lkdGg6aSxoZWlnaHQ6YSxkZXB0aDpvLHR5cGU6aH19ZnVuY3Rpb24gR2EodCxlLHIpe2NvbnN0IG49ci50YXJnZXR8fEc7dC5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IHM9ci5sZXZlbHx8MCxpPXIuaW50ZXJuYWxGb3JtYXR8fHIuZm9ybWF0fHxnLGE9RmUoaSksbz1yLmZvcm1hdHx8YS5mb3JtYXQsYz1yLnR5cGV8fGEudHlwZTtpZihwZSh0LHIpLG49PT0kKWZvcihsZXQgdT0wO3U8NjsrK3UpdC50ZXhJbWFnZTJEKFh0K3UscyxpLHIud2lkdGgsci5oZWlnaHQsMCxvLGMsbnVsbCk7ZWxzZSBuPT09Snx8bj09PVo/dC50ZXhJbWFnZTNEKG4scyxpLHIud2lkdGgsci5oZWlnaHQsci5kZXB0aCwwLG8sYyxudWxsKTp0LnRleEltYWdlMkQobixzLGksci53aWR0aCxyLmhlaWdodCwwLG8sYyxudWxsKX1mdW5jdGlvbiBtbih0LGUscil7cj1yfHxrZSxlPWV8fHoudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj10LmNyZWF0ZVRleHR1cmUoKSxzPWUudGFyZ2V0fHxHO2xldCBpPWUud2lkdGh8fDEsYT1lLmhlaWdodHx8MTtjb25zdCBvPWUuaW50ZXJuYWxGb3JtYXR8fGc7dC5iaW5kVGV4dHVyZShzLG4pLHM9PT0kJiYodC50ZXhQYXJhbWV0ZXJpKHMsdHQsZXQpLHQudGV4UGFyYW1ldGVyaShzLHJ0LGV0KSk7bGV0IGM9ZS5zcmM7aWYoYylpZih0eXBlb2YgYz09ImZ1bmN0aW9uIiYmKGM9Yyh0LGUpKSx0eXBlb2YgYz09InN0cmluZyIpTmEodCxuLGUscik7ZWxzZSBpZih2ZShjKXx8QXJyYXkuaXNBcnJheShjKSYmKHR5cGVvZiBjWzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheShjWzBdKXx8dmUoY1swXSkpKXtjb25zdCB1PXphKHQsbixjLGUpO2k9dS53aWR0aCxhPXUuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheShjKSYmKHR5cGVvZiBjWzBdPT0ic3RyaW5nInx8aG4oY1swXSkpP3M9PT0kP09hKHQsbixlLHIpOkxhKHQsbixlLHIpOihkbih0LG4sYyxlKSxpPWMud2lkdGgsYT1jLmhlaWdodCk7ZWxzZSBHYSh0LG4sZSk7cmV0dXJuIFBlKGUpJiZadCh0LG4sZSxpLGEsbyksbG4odCxuLGUpLG59Y29uc3Qgc3I9VnI7ZnVuY3Rpb24gcG4odCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpOm51bGx9Y29uc3QgYXQ9MzM5ODQsY3Q9MzQ5NjIsJGE9MzQ5NjMsVmE9MzU3MTMsV2E9MzU3MTQsSGE9MzU2MzIsamE9MzU2MzMsWGE9MzU5ODEseW49MzU3MTgsWWE9MzU3MjEsUWE9MzU5NzEscWE9MzUzODIsS2E9MzUzOTYsSmE9MzUzOTgsWmE9MzUzOTIsZWM9MzUzOTUsdXQ9NTEyNixibj0zNTY2NCxnbj0zNTY2NSx4bj0zNTY2Nixpcj01MTI0LEVuPTM1NjY3LF9uPTM1NjY4LFRuPTM1NjY5LHduPTM1NjcwLEFuPTM1NjcxLHZuPTM1NjcyLFNuPTM1NjczLEluPTM1Njc0LFJuPTM1Njc1LEZuPTM1Njc2LHRjPTM1Njc4LHJjPTM1NjgwLG5jPTM1Njc5LHNjPTM1NjgyLGljPTM1Njg1LG9jPTM1Njg2LGFjPTM1Njg3LGNjPTM1Njg4LHVjPTM1Njg5LGZjPTM1NjkwLGxjPTM2Mjg5LGRjPTM2MjkyLGhjPTM2MjkzLG9yPTUxMjUsUG49MzYyOTQsa249MzYyOTUsQ249MzYyOTYsbWM9MzYyOTgscGM9MzYyOTkseWM9MzYzMDAsYmM9MzYzMDMsZ2M9MzYzMDYseGM9MzYzMDcsRWM9MzYzMDgsX2M9MzYzMTEsZnQ9MzU1MyxsdD0zNDA2Nyxhcj0zMjg3OSxkdD0zNTg2NixtPXt9O2Z1bmN0aW9uIEJuKHQsZSl7cmV0dXJuIG1bZV0uYmluZFBvaW50fWZ1bmN0aW9uIFRjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTFmKGUscil9fWZ1bmN0aW9uIHdjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTFmdihlLHIpfX1mdW5jdGlvbiBBYyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm0yZnYoZSxyKX19ZnVuY3Rpb24gdmModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtM2Z2KGUscil9fWZ1bmN0aW9uIFNjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTRmdihlLHIpfX1mdW5jdGlvbiBEbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm0xaShlLHIpfX1mdW5jdGlvbiBNbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm0xaXYoZSxyKX19ZnVuY3Rpb24gVW4odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtMml2KGUscil9fWZ1bmN0aW9uIE5uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTNpdihlLHIpfX1mdW5jdGlvbiBPbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm00aXYoZSxyKX19ZnVuY3Rpb24gSWModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtMXVpKGUscil9fWZ1bmN0aW9uIFJjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTF1aXYoZSxyKX19ZnVuY3Rpb24gRmModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtMnVpdihlLHIpfX1mdW5jdGlvbiBQYyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm0zdWl2KGUscil9fWZ1bmN0aW9uIGtjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTR1aXYoZSxyKX19ZnVuY3Rpb24gQ2ModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4MmZ2KGUsITEscil9fWZ1bmN0aW9uIEJjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybU1hdHJpeDNmdihlLCExLHIpfX1mdW5jdGlvbiBEYyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm1NYXRyaXg0ZnYoZSwhMSxyKX19ZnVuY3Rpb24gTWModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4MngzZnYoZSwhMSxyKX19ZnVuY3Rpb24gVWModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4M3gyZnYoZSwhMSxyKX19ZnVuY3Rpb24gTmModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4Mng0ZnYoZSwhMSxyKX19ZnVuY3Rpb24gT2ModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4NHgyZnYoZSwhMSxyKX19ZnVuY3Rpb24gTGModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4M3g0ZnYoZSwhMSxyKX19ZnVuY3Rpb24gemModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4NHgzZnYoZSwhMSxyKX19ZnVuY3Rpb24gSSh0LGUscixuKXtjb25zdCBzPUJuKHQsZSk7cmV0dXJuIEFlKHQpP2Z1bmN0aW9uKGkpe2xldCBhLG87IWl8fHp0KHQsaSk/KGE9aSxvPW51bGwpOihhPWkudGV4dHVyZSxvPWkuc2FtcGxlciksdC51bmlmb3JtMWkobixyKSx0LmFjdGl2ZVRleHR1cmUoYXQrciksdC5iaW5kVGV4dHVyZShzLGEpLHQuYmluZFNhbXBsZXIocixvKX06ZnVuY3Rpb24oaSl7dC51bmlmb3JtMWkobixyKSx0LmFjdGl2ZVRleHR1cmUoYXQrciksdC5iaW5kVGV4dHVyZShzLGkpfX1mdW5jdGlvbiBSKHQsZSxyLG4scyl7Y29uc3QgaT1Cbih0LGUpLGE9bmV3IEludDMyQXJyYXkocyk7Zm9yKGxldCBvPTA7bzxzOysrbylhW29dPXIrbztyZXR1cm4gQWUodCk/ZnVuY3Rpb24obyl7dC51bmlmb3JtMWl2KG4sYSksby5mb3JFYWNoKGZ1bmN0aW9uKGMsdSl7dC5hY3RpdmVUZXh0dXJlKGF0K2FbdV0pO2xldCBmLGQ7IWN8fHp0KHQsYyk/KGY9YyxkPW51bGwpOihmPWMudGV4dHVyZSxkPWMuc2FtcGxlciksdC5iaW5kU2FtcGxlcihyLGQpLHQuYmluZFRleHR1cmUoaSxmKX0pfTpmdW5jdGlvbihvKXt0LnVuaWZvcm0xaXYobixhKSxvLmZvckVhY2goZnVuY3Rpb24oYyx1KXt0LmFjdGl2ZVRleHR1cmUoYXQrYVt1XSksdC5iaW5kVGV4dHVyZShpLGMpfSl9fW1bdXRdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQsc2V0dGVyOlRjLGFycmF5U2V0dGVyOndjfSxtW2JuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo4LHNldHRlcjpBYyxjb2xzOjJ9LG1bZ25dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjEyLHNldHRlcjp2Yyxjb2xzOjN9LG1beG5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjE2LHNldHRlcjpTYyxjb2xzOjR9LG1baXJdPXtUeXBlOkludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpEbixhcnJheVNldHRlcjpNbn0sbVtFbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjgsc2V0dGVyOlVuLGNvbHM6Mn0sbVtfbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpObixjb2xzOjN9LG1bVG5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6T24sY29sczo0fSxtW29yXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOkljLGFycmF5U2V0dGVyOlJjfSxtW1BuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOkZjLGNvbHM6Mn0sbVtrbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6UGMsY29sczozfSxtW0NuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjprYyxjb2xzOjR9LG1bd25dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6RG4sYXJyYXlTZXR0ZXI6TW59LG1bQW5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6VW4sY29sczoyfSxtW3ZuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpObixjb2xzOjN9LG1bU25dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOk9uLGNvbHM6NH0sbVtJbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOkNjLHJvd3M6Mixjb2xzOjJ9LG1bUm5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpCYyxyb3dzOjMsY29sczozfSxtW0ZuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6RGMscm93czo0LGNvbHM6NH0sbVtpY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOk1jLHJvd3M6Mixjb2xzOjN9LG1bb2NdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpOYyxyb3dzOjIsY29sczo0fSxtW2FjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6VWMscm93czozLGNvbHM6Mn0sbVtjY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOkxjLHJvd3M6Myxjb2xzOjR9LG1bdWNdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpPYyxyb3dzOjQsY29sczoyfSxtW2ZjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6emMscm93czo0LGNvbHM6M30sbVt0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6ZnR9LG1bcmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50Omx0fSxtW25jXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDphcn0sbVtzY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6ZnR9LG1bbGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50OmR0fSxtW2RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDpkdH0sbVtoY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6bHR9LG1bbWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50OmZ0fSxtW3BjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDphcn0sbVt5Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6bHR9LG1bYmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50OmR0fSxtW2djXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDpmdH0sbVt4Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6YXJ9LG1bRWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50Omx0fSxtW19jXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDpkdH07ZnVuY3Rpb24gaHQodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7aWYoci52YWx1ZSlzd2l0Y2godC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52YWx1ZS5sZW5ndGgpe2Nhc2UgNDp0LnZlcnRleEF0dHJpYjRmdihlLHIudmFsdWUpO2JyZWFrO2Nhc2UgMzp0LnZlcnRleEF0dHJpYjNmdihlLHIudmFsdWUpO2JyZWFrO2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmdihlLHIudmFsdWUpO2JyZWFrO2Nhc2UgMTp0LnZlcnRleEF0dHJpYjFmdihlLHIudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ0aGUgbGVuZ3RoIG9mIGEgZmxvYXQgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQhIil9ZWxzZSB0LmJpbmRCdWZmZXIoY3Qsci5idWZmZXIpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsci5udW1Db21wb25lbnRzfHxyLnNpemUsci50eXBlfHx1dCxyLm5vcm1hbGl6ZXx8ITEsci5zdHJpZGV8fDAsci5vZmZzZXR8fDApLHQudmVydGV4QXR0cmliRGl2aXNvciYmdC52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsci5kaXZpc29yfHwwKX19ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtpZihyLnZhbHVlKWlmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmFsdWUubGVuZ3RoPT09NCl0LnZlcnRleEF0dHJpYjRpdihlLHIudmFsdWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgbGVuZ3RoIG9mIGFuIGludGVnZXIgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSA0ISIpO2Vsc2UgdC5iaW5kQnVmZmVyKGN0LHIuYnVmZmVyKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmVydGV4QXR0cmliSVBvaW50ZXIoZSxyLm51bUNvbXBvbmVudHN8fHIuc2l6ZSxyLnR5cGV8fGlyLHIuc3RyaWRlfHwwLHIub2Zmc2V0fHwwKSx0LnZlcnRleEF0dHJpYkRpdmlzb3ImJnQudmVydGV4QXR0cmliRGl2aXNvcihlLHIuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIG10KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKHIudmFsdWUpaWYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52YWx1ZS5sZW5ndGg9PT00KXQudmVydGV4QXR0cmliNHVpdihlLHIudmFsdWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgbGVuZ3RoIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSA0ISIpO2Vsc2UgdC5iaW5kQnVmZmVyKGN0LHIuYnVmZmVyKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmVydGV4QXR0cmliSVBvaW50ZXIoZSxyLm51bUNvbXBvbmVudHN8fHIuc2l6ZSxyLnR5cGV8fG9yLHIuc3RyaWRlfHwwLHIub2Zmc2V0fHwwKSx0LnZlcnRleEF0dHJpYkRpdmlzb3ImJnQudmVydGV4QXR0cmliRGl2aXNvcihlLHIuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIGNyKHQsZSxyKXtjb25zdCBuPXIuc2l6ZSxzPXIuY291bnQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3QuYmluZEJ1ZmZlcihjdCxpLmJ1ZmZlcik7Y29uc3QgYT1pLnNpemV8fGkubnVtQ29tcG9uZW50c3x8bixvPWEvcyxjPWkudHlwZXx8dXQsZj1tW2NdLnNpemUqYSxkPWkubm9ybWFsaXplfHwhMSxoPWkub2Zmc2V0fHwwLHA9Zi9zO2ZvcihsZXQgbD0wO2w8czsrK2wpdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlK2wpLHQudmVydGV4QXR0cmliUG9pbnRlcihlK2wsbyxjLGQsZixoK3AqbCksdC52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZ0LnZlcnRleEF0dHJpYkRpdmlzb3IoZStsLGkuZGl2aXNvcnx8MCl9fWNvbnN0IF89e307X1t1dF09e3NpemU6NCxzZXR0ZXI6aHR9LF9bYm5dPXtzaXplOjgsc2V0dGVyOmh0fSxfW2duXT17c2l6ZToxMixzZXR0ZXI6aHR9LF9beG5dPXtzaXplOjE2LHNldHRlcjpodH0sX1tpcl09e3NpemU6NCxzZXR0ZXI6SH0sX1tFbl09e3NpemU6OCxzZXR0ZXI6SH0sX1tfbl09e3NpemU6MTIsc2V0dGVyOkh9LF9bVG5dPXtzaXplOjE2LHNldHRlcjpIfSxfW29yXT17c2l6ZTo0LHNldHRlcjptdH0sX1tQbl09e3NpemU6OCxzZXR0ZXI6bXR9LF9ba25dPXtzaXplOjEyLHNldHRlcjptdH0sX1tDbl09e3NpemU6MTYsc2V0dGVyOm10fSxfW3duXT17c2l6ZTo0LHNldHRlcjpIfSxfW0FuXT17c2l6ZTo4LHNldHRlcjpIfSxfW3ZuXT17c2l6ZToxMixzZXR0ZXI6SH0sX1tTbl09e3NpemU6MTYsc2V0dGVyOkh9LF9bSW5dPXtzaXplOjQsc2V0dGVyOmNyLGNvdW50OjJ9LF9bUm5dPXtzaXplOjksc2V0dGVyOmNyLGNvdW50OjN9LF9bRm5dPXtzaXplOjE2LHNldHRlcjpjcixjb3VudDo0fTtjb25zdCBHYz0vRVJST1I6XHMqXGQrOihcZCspL2dpO2Z1bmN0aW9uICRjKHQsZT0iIixyPTApe2NvbnN0IG49Wy4uLmUubWF0Y2hBbGwoR2MpXSxzPW5ldyBNYXAobi5tYXAoKGksYSk9Pntjb25zdCBvPXBhcnNlSW50KGlbMV0pLGM9blthKzFdLHU9Yz9jLmluZGV4OmUubGVuZ3RoLGY9ZS5zdWJzdHJpbmcoaS5pbmRleCx1KTtyZXR1cm5bby0xLGZdfSkpO3JldHVybiB0LnNwbGl0KGAKYCkubWFwKChpLGEpPT57Y29uc3Qgbz1zLmdldChhKTtyZXR1cm5gJHthKzErcn06ICR7aX0ke28/YAoKXl5eICR7b31gOiIifWB9KS5qb2luKGAKYCl9Y29uc3QgTG49L15bIFx0XSpcbi87ZnVuY3Rpb24gem4odCl7bGV0IGU9MDtyZXR1cm4gTG4udGVzdCh0KSYmKGU9MSx0PXQucmVwbGFjZShMbiwiIikpLHtsaW5lT2Zmc2V0OmUsc2hhZGVyU291cmNlOnR9fWZ1bmN0aW9uIFZjKHQsZSl7cmV0dXJuIHQuZXJyb3JDYWxsYmFjayhlKSx0LmNhbGxiYWNrJiZzZXRUaW1lb3V0KCgpPT57dC5jYWxsYmFjayhgJHtlfQoke3QuZXJyb3JzLmpvaW4oYApgKX1gKX0pLG51bGx9ZnVuY3Rpb24gV2ModCxlLHIsbil7aWYobj1ufHxzciwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIocixWYSkpe2NvbnN0IGk9dC5nZXRTaGFkZXJJbmZvTG9nKHIpLHtsaW5lT2Zmc2V0OmEsc2hhZGVyU291cmNlOm99PXpuKHQuZ2V0U2hhZGVyU291cmNlKHIpKSxjPWAkeyRjKG8saSxhKX0KRXJyb3IgY29tcGlsaW5nICR7S3IodCxlKX06ICR7aX1gO3JldHVybiBuKGMpLGN9cmV0dXJuIiJ9ZnVuY3Rpb24gdXIodCxlLHIpe2xldCBuLHMsaTtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHI9ZSxlPXZvaWQgMCksdHlwZW9mIHQ9PSJmdW5jdGlvbiIpcj10LHQ9dm9pZCAwO2Vsc2UgaWYodCYmIUFycmF5LmlzQXJyYXkodCkpe2NvbnN0IHU9dDtyPXUuZXJyb3JDYWxsYmFjayx0PXUuYXR0cmliTG9jYXRpb25zLG49dS50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLHM9dS50cmFuc2Zvcm1GZWVkYmFja01vZGUsaT11LmNhbGxiYWNrfWNvbnN0IGE9cnx8c3Isbz1bXSxjPXtlcnJvckNhbGxiYWNrKHUsLi4uZil7by5wdXNoKHUpLGEodSwuLi5mKX0sdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpuLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTpzLGNhbGxiYWNrOmksZXJyb3JzOm99O3tsZXQgdT17fTtBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaChmdW5jdGlvbihmLGQpe3VbZl09ZT9lW2RdOmR9KTp1PXR8fHt9LGMuYXR0cmliTG9jYXRpb25zPXV9cmV0dXJuIGN9Y29uc3QgSGM9WyJWRVJURVhfU0hBREVSIiwiRlJBR01FTlRfU0hBREVSIl07ZnVuY3Rpb24gamModCxlKXtpZihlLmluZGV4T2YoImZyYWciKT49MClyZXR1cm4gSGE7aWYoZS5pbmRleE9mKCJ2ZXJ0Iik+PTApcmV0dXJuIGphfWZ1bmN0aW9uIFhjKHQsZSxyKXtjb25zdCBuPXQuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpO2Zvcihjb25zdCBzIG9mIG4pci5oYXMocykmJnQuZGVsZXRlU2hhZGVyKHMpO3QuZGVsZXRlUHJvZ3JhbShlKX1jb25zdCBZYz0odD0wKT0+bmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLHQpKTtmdW5jdGlvbiBRYyh0LGUscil7Y29uc3Qgbj10LmNyZWF0ZVByb2dyYW0oKSx7YXR0cmliTG9jYXRpb25zOnMsdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczppLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTphfT11cihyKTtmb3IobGV0IG89MDtvPGUubGVuZ3RoOysrbyl7bGV0IGM9ZVtvXTtpZih0eXBlb2YgYz09InN0cmluZyIpe2NvbnN0IHU9cG4oYyksZj11P3UudGV4dDpjO2xldCBkPXRbSGNbb11dO3UmJnUudHlwZSYmKGQ9amModCx1LnR5cGUpfHxkKSxjPXQuY3JlYXRlU2hhZGVyKGQpLHQuc2hhZGVyU291cmNlKGMsem4oZikuc2hhZGVyU291cmNlKSx0LmNvbXBpbGVTaGFkZXIoYyksdC5hdHRhY2hTaGFkZXIobixjKX19T2JqZWN0LmVudHJpZXMocykuZm9yRWFjaCgoW28sY10pPT50LmJpbmRBdHRyaWJMb2NhdGlvbihuLGMsbykpO3tsZXQgbz1pO28mJihvLmF0dHJpYnMmJihvPW8uYXR0cmlicyksQXJyYXkuaXNBcnJheShvKXx8KG89T2JqZWN0LmtleXMobykpLHQudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhuLG8sYXx8WGEpKX1yZXR1cm4gdC5saW5rUHJvZ3JhbShuKSxufWZ1bmN0aW9uIHFjKHQsZSxyLG4scyl7Y29uc3QgaT11cihyLG4scyksYT1uZXcgU2V0KGUpLG89UWModCxlLGkpO2Z1bmN0aW9uIGModSxmKXtjb25zdCBkPUpjKHUsZixpLmVycm9yQ2FsbGJhY2spO3JldHVybiBkJiZYYyh1LGYsYSksZH1pZihpLmNhbGxiYWNrKXtLYyh0LG8pLnRoZW4oKCk9Pntjb25zdCB1PWModCxvKTtpLmNhbGxiYWNrKHUsdT92b2lkIDA6byl9KTtyZXR1cm59cmV0dXJuIGModCxvKT92b2lkIDA6b31hc3luYyBmdW5jdGlvbiBLYyh0LGUpe2NvbnN0IHI9dC5nZXRFeHRlbnNpb24oIktIUl9wYXJhbGxlbF9zaGFkZXJfY29tcGlsZSIpLG49cj8oaSxhKT0+aS5nZXRQcm9ncmFtUGFyYW1ldGVyKGEsci5DT01QTEVUSU9OX1NUQVRVU19LSFIpOigpPT4hMDtsZXQgcz0wO2RvIGF3YWl0IFljKHMpLHM9MWUzLzYwO3doaWxlKCFuKHQsZSkpfWZ1bmN0aW9uIEpjKHQsZSxyKXtpZihyPXJ8fHNyLCF0LmdldFByb2dyYW1QYXJhbWV0ZXIoZSxXYSkpe2NvbnN0IHM9dC5nZXRQcm9ncmFtSW5mb0xvZyhlKTtyKGBFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6ICR7c31gKTtjb25zdCBhPXQuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpLm1hcChvPT5XYyh0LHQuZ2V0U2hhZGVyUGFyYW1ldGVyKG8sdC5TSEFERVJfVFlQRSksbyxyKSk7cmV0dXJuYCR7c30KJHthLmZpbHRlcihvPT5vKS5qb2luKGAKYCl9YH19ZnVuY3Rpb24gWmModCxlLHIsbixzKXtyZXR1cm4gcWModCxlLHIsbixzKX1mdW5jdGlvbiBHbih0KXtjb25zdCBlPXQubmFtZTtyZXR1cm4gZS5zdGFydHNXaXRoKCJnbF8iKXx8ZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKX1jb25zdCBldT0vKFwufFxbfF18XHcrKS9nLHR1PXQ9PnQ+PSIwIiYmdDw9IjkiO2Z1bmN0aW9uIHJ1KHQsZSxyLG4pe2NvbnN0IHM9dC5zcGxpdChldSkuZmlsdGVyKG89Pm8hPT0iIik7bGV0IGk9MCxhPSIiO2Zvcig7Oyl7Y29uc3Qgbz1zW2krK107YSs9bztjb25zdCBjPXR1KG9bMF0pLHU9Yz9wYXJzZUludChvKTpvO2lmKGMmJihhKz1zW2krK10pLGk9PT1zLmxlbmd0aCl7clt1XT1lO2JyZWFrfWVsc2V7Y29uc3QgZD1zW2krK10saD1kPT09IlsiLHA9clt1XXx8KGg/W106e30pO3JbdV09cCxyPXAsblthXT1uW2FdfHxmdW5jdGlvbihsKXtyZXR1cm4gZnVuY3Rpb24oeSl7JG4obCx5KX19KHApLGErPWR9fX1mdW5jdGlvbiBudSh0LGUpe2xldCByPTA7ZnVuY3Rpb24gbihvLGMsdSl7Y29uc3QgZj1jLm5hbWUuZW5kc1dpdGgoIlswXSIpLGQ9Yy50eXBlLGg9bVtkXTtpZighaCl0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHlwZTogMHgke2QudG9TdHJpbmcoMTYpfWApO2xldCBwO2lmKGguYmluZFBvaW50KXtjb25zdCBsPXI7cis9Yy5zaXplLGY/cD1oLmFycmF5U2V0dGVyKHQsZCxsLHUsYy5zaXplKTpwPWguc2V0dGVyKHQsZCxsLHUsYy5zaXplKX1lbHNlIGguYXJyYXlTZXR0ZXImJmY/cD1oLmFycmF5U2V0dGVyKHQsdSk6cD1oLnNldHRlcih0LHUpO3JldHVybiBwLmxvY2F0aW9uPXUscH1jb25zdCBzPXt9LGk9e30sYT10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx5bik7Zm9yKGxldCBvPTA7bzxhOysrbyl7Y29uc3QgYz10LmdldEFjdGl2ZVVuaWZvcm0oZSxvKTtpZihHbihjKSljb250aW51ZTtsZXQgdT1jLm5hbWU7dS5lbmRzV2l0aCgiWzBdIikmJih1PXUuc3Vic3RyKDAsdS5sZW5ndGgtMykpO2NvbnN0IGY9dC5nZXRVbmlmb3JtTG9jYXRpb24oZSxjLm5hbWUpO2lmKGYpe2NvbnN0IGQ9bihlLGMsZik7c1t1XT1kLHJ1KHUsZCxpLHMpfX1yZXR1cm4gc31mdW5jdGlvbiBzdSh0LGUpe2NvbnN0IHI9e30sbj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSxRYSk7Zm9yKGxldCBzPTA7czxuOysrcyl7Y29uc3QgaT10LmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhlLHMpO3JbaS5uYW1lXT17aW5kZXg6cyx0eXBlOmkudHlwZSxzaXplOmkuc2l6ZX19cmV0dXJuIHJ9ZnVuY3Rpb24gaXUodCxlKXtjb25zdCByPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHluKSxuPVtdLHM9W107Zm9yKGxldCBvPTA7bzxyOysrbyl7cy5wdXNoKG8pLG4ucHVzaCh7fSk7Y29uc3QgYz10LmdldEFjdGl2ZVVuaWZvcm0oZSxvKTtuW29dLm5hbWU9Yy5uYW1lfVtbIlVOSUZPUk1fVFlQRSIsInR5cGUiXSxbIlVOSUZPUk1fU0laRSIsInNpemUiXSxbIlVOSUZPUk1fQkxPQ0tfSU5ERVgiLCJibG9ja05keCJdLFsiVU5JRk9STV9PRkZTRVQiLCJvZmZzZXQiXV0uZm9yRWFjaChmdW5jdGlvbihvKXtjb25zdCBjPW9bMF0sdT1vWzFdO3QuZ2V0QWN0aXZlVW5pZm9ybXMoZSxzLHRbY10pLmZvckVhY2goZnVuY3Rpb24oZixkKXtuW2RdW3VdPWZ9KX0pO2NvbnN0IGk9e30sYT10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSxxYSk7Zm9yKGxldCBvPTA7bzxhOysrbyl7Y29uc3QgYz10LmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoZSxvKSx1PXtpbmRleDp0LmdldFVuaWZvcm1CbG9ja0luZGV4KGUsYyksdXNlZEJ5VmVydGV4U2hhZGVyOnQuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsbyxLYSksdXNlZEJ5RnJhZ21lbnRTaGFkZXI6dC5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxvLEphKSxzaXplOnQuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsbyxaYSksdW5pZm9ybUluZGljZXM6dC5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxvLGVjKX07dS51c2VkPXUudXNlZEJ5VmVydGV4U2hhZGVyfHx1LnVzZWRCeUZyYWdtZW50U2hhZGVyLGlbY109dX1yZXR1cm57YmxvY2tTcGVjczppLHVuaWZvcm1EYXRhOm59fWZ1bmN0aW9uICRuKHQsZSl7Zm9yKGNvbnN0IHIgaW4gZSl7Y29uc3Qgbj10W3JdO3R5cGVvZiBuPT0iZnVuY3Rpb24iP24oZVtyXSk6JG4odFtyXSxlW3JdKX19ZnVuY3Rpb24gVm4odCwuLi5lKXtjb25zdCByPXQudW5pZm9ybVNldHRlcnN8fHQsbj1lLmxlbmd0aDtmb3IobGV0IHM9MDtzPG47KytzKXtjb25zdCBpPWVbc107aWYoQXJyYXkuaXNBcnJheShpKSl7Y29uc3QgYT1pLmxlbmd0aDtmb3IobGV0IG89MDtvPGE7KytvKVZuKHIsaVtvXSl9ZWxzZSBmb3IoY29uc3QgYSBpbiBpKXtjb25zdCBvPXJbYV07byYmbyhpW2FdKX19fWZ1bmN0aW9uIG91KHQsZSl7Y29uc3Qgcj17fSxuPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLFlhKTtmb3IobGV0IHM9MDtzPG47KytzKXtjb25zdCBpPXQuZ2V0QWN0aXZlQXR0cmliKGUscyk7aWYoR24oaSkpY29udGludWU7Y29uc3QgYT10LmdldEF0dHJpYkxvY2F0aW9uKGUsaS5uYW1lKSxvPV9baS50eXBlXSxjPW8uc2V0dGVyKHQsYSxvKTtjLmxvY2F0aW9uPWEscltpLm5hbWVdPWN9cmV0dXJuIHJ9ZnVuY3Rpb24gYXUodCxlKXtmb3IoY29uc3QgciBpbiBlKXtjb25zdCBuPXRbcl07biYmbihlW3JdKX19ZnVuY3Rpb24gY3UodCxlLHIpe3IudmVydGV4QXJyYXlPYmplY3Q/dC5iaW5kVmVydGV4QXJyYXkoci52ZXJ0ZXhBcnJheU9iamVjdCk6KGF1KGUuYXR0cmliU2V0dGVyc3x8ZSxyLmF0dHJpYnMpLHIuaW5kaWNlcyYmdC5iaW5kQnVmZmVyKCRhLHIuaW5kaWNlcykpfWZ1bmN0aW9uIFduKHQsZSl7Y29uc3Qgcj1udSh0LGUpLG49b3UodCxlKSxzPXtwcm9ncmFtOmUsdW5pZm9ybVNldHRlcnM6cixhdHRyaWJTZXR0ZXJzOm59O3JldHVybiBBZSh0KSYmKHMudW5pZm9ybUJsb2NrU3BlYz1pdSh0LGUpLHMudHJhbnNmb3JtRmVlZGJhY2tJbmZvPXN1KHQsZSkpLHN9Y29uc3QgdXU9L1xzfHt8fXw7LztmdW5jdGlvbiBmdSh0LGUscixuLHMpe2NvbnN0IGk9dXIocixuLHMpLGE9W107aWYoZT1lLm1hcChmdW5jdGlvbih1KXtpZighdXUudGVzdCh1KSl7Y29uc3QgZj1wbih1KTtpZihmKXU9Zi50ZXh0O2Vsc2V7Y29uc3QgZD1gbm8gZWxlbWVudCB3aXRoIGlkOiAke3V9YDtpLmVycm9yQ2FsbGJhY2soZCksYS5wdXNoKGQpfX1yZXR1cm4gdX0pLGEubGVuZ3RoKXJldHVybiBWYyhpLCIiKTtjb25zdCBvPWkuY2FsbGJhY2s7byYmKGkuY2FsbGJhY2s9KHUsZik9PntvKHUsdT92b2lkIDA6V24odCxmKSl9KTtjb25zdCBjPVpjKHQsZSxpKTtyZXR1cm4gYz9Xbih0LGMpOm51bGx9Y29uc3QgbHU9NCxIbj01MTIzO2Z1bmN0aW9uIGR1KHQsZSxyLG4scyxpKXtyPXI9PT12b2lkIDA/bHU6cjtjb25zdCBhPWUuaW5kaWNlcyxvPWUuZWxlbWVudFR5cGUsYz1uPT09dm9pZCAwP2UubnVtRWxlbWVudHM6bjtzPXM9PT12b2lkIDA/MDpzLG98fGE/aSE9PXZvaWQgMD90LmRyYXdFbGVtZW50c0luc3RhbmNlZChyLGMsbz09PXZvaWQgMD9IbjplLmVsZW1lbnRUeXBlLHMsaSk6dC5kcmF3RWxlbWVudHMocixjLG89PT12b2lkIDA/SG46ZS5lbGVtZW50VHlwZSxzKTppIT09dm9pZCAwP3QuZHJhd0FycmF5c0luc3RhbmNlZChyLHMsYyxpKTp0LmRyYXdBcnJheXMocixzLGMpfWNvbnN0IGpuPTM2MTYwLHB0PTM2MTYxLGh1PTM1NTMsbXU9NTEyMSxwdT02NDAyLHl1PTY0MDgsYnU9MzMxOTAsZ3U9MzYwMTIseHU9MzUwNTYsRXU9MzYwMTMsX3U9MzI4NTQsVHU9MzI4NTUsd3U9MzYxOTQsWG49MzMxODksWW49NjQwMSxRbj0zNjE2OCxmcj0zNDA0MSxscj0zNjA2NCx5dD0zNjA5Nixxbj0zNjEyOCxkcj0zMzMwNixocj0zMzA3MSxtcj05NzI5LEF1PVt7Zm9ybWF0Onl1LHR5cGU6bXUsbWluOm1yLHdyYXA6aHJ9LHtmb3JtYXQ6ZnJ9XSxDPXt9O0NbZnJdPWRyLENbWW5dPXFuLENbUW5dPXFuLENbcHVdPXl0LENbWG5dPXl0LENbYnVdPXl0LENbZ3VdPXl0LENbeHVdPWRyLENbRXVdPWRyO2Z1bmN0aW9uIHZ1KHQsZSl7cmV0dXJuIENbdF18fENbZV19Y29uc3Qgaj17fTtqW191XT0hMCxqW1R1XT0hMCxqW3d1XT0hMCxqW2ZyXT0hMCxqW1huXT0hMCxqW1luXT0hMCxqW1FuXT0hMDtmdW5jdGlvbiBTdSh0KXtyZXR1cm4galt0XX1jb25zdCBJdT0zMjtmdW5jdGlvbiBSdSh0KXtyZXR1cm4gdD49bHImJnQ8bHIrSXV9ZnVuY3Rpb24gS24odCxlLHIsbil7Y29uc3Qgcz1qbixpPXQuY3JlYXRlRnJhbWVidWZmZXIoKTt0LmJpbmRGcmFtZWJ1ZmZlcihzLGkpLHI9cnx8dC5kcmF3aW5nQnVmZmVyV2lkdGgsbj1ufHx0LmRyYXdpbmdCdWZmZXJIZWlnaHQsZT1lfHxBdTtjb25zdCBhPVtdLG89e2ZyYW1lYnVmZmVyOmksYXR0YWNobWVudHM6W10sd2lkdGg6cixoZWlnaHQ6bn07cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihjLHUpe2xldCBmPWMuYXR0YWNobWVudDtjb25zdCBkPWMuc2FtcGxlcyxoPWMuZm9ybWF0O2xldCBwPWMuYXR0YWNobWVudFBvaW50fHx2dShoLGMuaW50ZXJuYWxGb3JtYXQpO2lmKHB8fChwPWxyK3UpLFJ1KHApJiZhLnB1c2gocCksIWYpaWYoZCE9PXZvaWQgMHx8U3UoaCkpZj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHQuYmluZFJlbmRlcmJ1ZmZlcihwdCxmKSxkPjE/dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUocHQsZCxoLHIsbik6dC5yZW5kZXJidWZmZXJTdG9yYWdlKHB0LGgscixuKTtlbHNle2NvbnN0IGw9T2JqZWN0LmFzc2lnbih7fSxjKTtsLndpZHRoPXIsbC5oZWlnaHQ9bixsLmF1dG89PT12b2lkIDAmJihsLmF1dG89ITEsbC5taW49bC5taW58fGwubWluTWFnfHxtcixsLm1hZz1sLm1hZ3x8bC5taW5NYWd8fG1yLGwud3JhcFM9bC53cmFwU3x8bC53cmFwfHxocixsLndyYXBUPWwud3JhcFR8fGwud3JhcHx8aHIpLGY9bW4odCxsKX1pZihNaSh0LGYpKXQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIocyxwLHB0LGYpO2Vsc2UgaWYoenQodCxmKSljLmxheWVyIT09dm9pZCAwP3QuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIocyxwLGYsYy5sZXZlbHx8MCxjLmxheWVyKTp0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKHMscCxjLnRhcmdldHx8aHUsZixjLmxldmVsfHwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigidW5rbm93biBhdHRhY2htZW50IHR5cGUiKTtvLmF0dGFjaG1lbnRzLnB1c2goZil9KSx0LmRyYXdCdWZmZXJzJiZ0LmRyYXdCdWZmZXJzKGEpLG99ZnVuY3Rpb24gRnUodCxlLHIpe3I9cnx8am4sZT8odC5iaW5kRnJhbWVidWZmZXIocixlLmZyYW1lYnVmZmVyKSx0LnZpZXdwb3J0KDAsMCxlLndpZHRoLGUuaGVpZ2h0KSk6KHQuYmluZEZyYW1lYnVmZmVyKHIsbnVsbCksdC52aWV3cG9ydCgwLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0KSl9ZnVuY3Rpb24gdih0LGUpe3JldHVybigpPT5lIGluc3RhbmNlb2YgV2ViR0xUZXh0dXJlP2U6bW4odCx7c3JjOmUsd3JhcDp0LkNMQU1QX1RPX0VER0V9KX1jb25zdCB5ZT0yO2NsYXNzIENle2NvbnN0cnVjdG9yKGUpe3RoaXMuaWQ9Il8iO2NvbnN0e2NvbnRleHQ6cix3aWR0aDpuLGhlaWdodDpzfT1lO3RoaXMuY29udGV4dD1yLHRoaXMub3B0aW9ucz1lO2NvbnN0IGk9dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPWZ1KHRoaXMuY29udGV4dCxbaSt0aGlzLmdldFZlcnRleFNoYWRlcigpLGkrdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPWlvKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9S24odGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4scyksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUscil7dGhpcy5mYmk9S24odGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsciksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD1yLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3Qgcj10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gcillKz1gI2RlZmluZSAke259ICR7cltuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgcyxpLGEsbyxjLHU7KHM9dGhpcy5wcm9maWxlcik9PW51bGx8fHMucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBmIGluIGUpdHlwZW9mIGVbZl09PSJmdW5jdGlvbiImJigoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7Zn1gKSxlW2ZdPWVbZl0oKSwobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtmfWApKTsoYz10aGlzLnByb2ZpbGVyKT09bnVsbHx8Yy5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCByPURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPShyLXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49cix0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksY3UodGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSxWbih0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLEZ1KHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLGR1KHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLCh1PXRoaXMucHJvZmlsZXIpPT1udWxsfHx1LnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgUHU9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLGt1PWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIHByIGV4dGVuZHMgQ2V7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gUHV9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIGt1fX1jbGFzcyB5cntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RlcHM9W119YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUscil7dmFyIG4sczsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IGkgb2YgdGhpcy5zdGVwcylpLnByZXZlbnRSZXNpemV8fGkucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSxyKTsocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHIgb2YgdGhpcy5zdGVwcylyLnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHIgb2YgdGhpcy5zdGVwcylyLnByb2dyYW0uaWQ9ZX19Y2xhc3MgYnIgZXh0ZW5kcyB5cntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5wcmVjaXNlTWFza0VuYWJsZWQ9ITF9fWNsYXNzIEpuIGV4dGVuZHMgYnJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZSx0aGlzLnByZWNpc2VNYXNrRW5hYmxlZD0hMDtjb25zdCByPXtjb250ZXh0OmUsaGVpZ2h0OmUuY2FudmFzLmhlaWdodCx3aWR0aDplLmNhbnZhcy53aWR0aH0sbj1uZXcgcHIoey4uLnIsZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm4sZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDp2KGUsdGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZSksZm9yZWdyb3VuZDp2KGUsdGhpcy5pbnB1dEltYWdlKSx0aHJlc2hvbGQ6dihlLHRoaXMuaW5wdXRNYXNrKX0pfSl9c2V0RGF0YShlLHIpe3RoaXMuaW5wdXRJbWFnZT1lLHRoaXMuaW5wdXRNYXNrPXJ9fXZhciBDdT1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7IH0KYCxCdT1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7CnVuaWZvcm0gYm9vbCBpbnZlcnRfeTsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIGlmIChpbnZlcnRfeSkgewogICAgX3RleHR1cmVfY29vcmQueSA9IDEuIC0gdGV4dHVyZV9jb29yZC55OwogIH0KfQpgO2NsYXNzIER1IGV4dGVuZHMgQ2V7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gQ3V9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEJ1fX1jbGFzcyBNdSBleHRlbmRzIHlye2NvbnN0cnVjdG9yKGUscixuKXtzdXBlcigpLHRoaXMuY29udGV4dD1lO2NvbnN0IHM9e2NvbnRleHQ6ZSxoZWlnaHQ6bix3aWR0aDpyfTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06bmV3IER1KHsuLi5zLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6dihlLHRoaXMuaW5wdXRJbWFnZSksaW52ZXJ0X3k6ITB9KX0pfXNldERhdGEoZSl7dGhpcy5pbnB1dEltYWdlPWV9fWFzeW5jIGZ1bmN0aW9uIFpuKHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dCgoKT0+e2UoKX0sdCl9KX12YXIgVXU9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxOdT1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgLGdyPSh0PT4odFt0LkxJTkVBUj0wXT0iTElORUFSIix0W3QuR0FVU1NJQU49MV09IkdBVVNTSUFOIix0KSkoZ3J8fHt9KTtjbGFzcyBlcyBleHRlbmRzIENle2dldERlZmluZXMoKXtyZXR1cm57UkFESVVTOnRoaXMub3B0aW9ucy5yYWRpdXM/PzF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFV1K3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE51fWNyZWF0ZUxvb3BGdW5jdGlvbigpe2xldCBlPXRoaXMub3B0aW9ucy5yYWRpdXM/PzE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSxyKXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSxyKTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSxyKX19Z2V0TGluZWFyRmFjdG9yKGUscil7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSxyKXtjb25zdCBuPU1hdGguUEkqMixzPU1hdGgubWF4KHRoaXMub3B0aW9ucy5yYWRpdXM/PzEsMSksaT0xLyhuKnMqKjIpLGE9LShlKioyK3IqKjIpLG89aSphO3JldHVybiBpKk1hdGguRSoqb319dmFyIE91PWAjdmVyc2lvbiAzMDAgZXMKLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZvbGNvbWl4L3ZpcnR1YWwtYmFja2dyb3VuZC9ibG9iL21haW4vc3JjL3BpcGVsaW5lcy93ZWJnbDIvam9pbnRCaWxhdGVyYWxGaWx0ZXJTdGFnZS50cwoKcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Owp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dF9mcmFtZTsKdW5pZm9ybSBzYW1wbGVyMkQgc2VnbWVudGF0aW9uX21hc2s7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSB2ZWMyIHRleGVsX3NpemU7CnVuaWZvcm0gZmxvYXQgc3RlcDsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CnVuaWZvcm0gZmxvYXQgb2Zmc2V0Owp1bmlmb3JtIGZsb2F0IHNpZ21hX3RleGVsOwp1bmlmb3JtIGZsb2F0IHNpZ21hX2NvbG9yOwoKaW4gdmVjMiBfdGV4dHVyZV9jb29yZDsKb3V0IHZlYzQgb3V0Q29sb3I7CgpmbG9hdCBnYXVzc2lhbihmbG9hdCB4LCBmbG9hdCBzaWdtYSkgewogIGZsb2F0IGNvZWZmID0gLTAuNSAvIChzaWdtYSAqIHNpZ21hICogNC4wICsgMS4wZS02KTsKICByZXR1cm4gZXhwKCh4ICogeCkgKiBjb2VmZik7Cn0KCnZvaWQgbWFpbigpIHsKICB2ZWMyIGNlbnRlckNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgdmVjMyBjZW50ZXJDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNlbnRlckNvb3JkKS5yZ2I7CiAgZmxvYXQgbmV3VmFsID0gMC4wOwogIGZsb2F0IHNwYWNlV2VpZ2h0ID0gMC4wOwogIGZsb2F0IGNvbG9yV2VpZ2h0ID0gMC4wOwogIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wOwogIC8vIFN1YnNhbXBsZSBrZXJuZWwgc3BhY2UuCiAgZm9yIChmbG9hdCBpID0gLXJhZGl1cyArIG9mZnNldDsgaSA8PSByYWRpdXM7IGkgKz0gc3RlcCkgewogICAgZm9yIChmbG9hdCBqID0gLXJhZGl1cyArIG9mZnNldDsgaiA8PSByYWRpdXM7IGogKz0gc3RlcCkgewogICAgICB2ZWMyIHNoaWZ0ID0gdmVjMihqLCBpKSAqIHRleGVsX3NpemU7CiAgICAgIHZlYzIgY29vcmQgPSB2ZWMyKGNlbnRlckNvb3JkICsgc2hpZnQpOwogICAgICB2ZWMzIGZyYW1lQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjb29yZCkucmdiOwogICAgICBmbG9hdCB0aHJlc2hvbGQgPSB0ZXh0dXJlKHRocmVzaG9sZCwgY29vcmQpLmE7CiAgICAgIGZsb2F0IG91dFZhbCA9IHRleHR1cmUoc2VnbWVudGF0aW9uX21hc2ssIGNvb3JkKS5hOwoKICAgICAgc3BhY2VXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb29yZCwgY29vcmQpLCBzaWdtYV90ZXhlbCk7CiAgICAgIGNvbG9yV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29sb3IsIGZyYW1lQ29sb3IpLCBzaWdtYV9jb2xvcik7CiAgICAgIHRvdGFsV2VpZ2h0ICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQ7CiAgICAgIG5ld1ZhbCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0ICogb3V0VmFsICogdGhyZXNob2xkOwogICAgfQogIH0KICBuZXdWYWwgLz0gdG90YWxXZWlnaHQ7CiAgb3V0Q29sb3IgPSB2ZWM0KHZlYzMoMC4pLCBuZXdWYWwpOwp9YCxMdT1gI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgcG9zaXRpb247CmluIHZlYzIgdGV4dHVyZV9jb29yZDsKb3V0IHZlYzIgX3RleHR1cmVfY29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn1gO2NsYXNzIHp1IGV4dGVuZHMgQ2V7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gT3V9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEx1fX1jbGFzcyBHdSBleHRlbmRzIHlye2NvbnN0cnVjdG9yKGUscixuKXtzdXBlcigpLHRoaXMuY29udGV4dD1lO2NvbnN0IHM9e2NvbnRleHQ6ZSxoZWlnaHQ6bix3aWR0aDpyfSxpPW5ldyBlcyh7Li4ucyxyYWRpdXM6MSx0eXBlOmdyLkdBVVNTSUFOfSk7dGhpcy5qb2ludEJpbGF0ZXJhbD1uZXcgenUocyksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmksZ2V0VW5pZm9ybXM6KCk9Pih7aW5wdXRzOnYoZSx0aGlzLmlucHV0TWFzayl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp0aGlzLmpvaW50QmlsYXRlcmFsLGdldFVuaWZvcm1zOigpPT57dmFyIHAsbCx5LGI7Y29uc3Qgbz0oKHA9dGhpcy5pbnB1dEltYWdlKT09bnVsbD92b2lkIDA6cC53aWR0aCk/PzEsYz0oKGw9dGhpcy5pbnB1dEltYWdlKT09bnVsbD92b2lkIDA6bC5oZWlnaHQpPz8xOyh5PXRoaXMuaW5wdXRNYXNrKT09bnVsbHx8eS53aWR0aCwoYj10aGlzLmlucHV0TWFzayk9PW51bGx8fGIuaGVpZ2h0O2NvbnN0IHU9MyxmPU1hdGgubWF4KDEsTWF0aC5zcXJ0KHUpKi42NiksZD0xL28saD0xL2M7cmV0dXJue2lucHV0X2ZyYW1lOnYoZSx0aGlzLmlucHV0SW1hZ2UpLHNlZ21lbnRhdGlvbl9tYXNrOnYoZSx0aGlzLmlucHV0TWFzayksdGV4ZWxfc2l6ZTpbZCxoXSxzdGVwOmYscmFkaXVzOnUsb2Zmc2V0OmY+MT9mKi41OjAsc2lnbWFfdGV4ZWw6TWF0aC5tYXgoZCxoKSp1LHNpZ21hX2NvbG9yOnV9fX0pLHRoaXMub3V0cHV0PXRoaXMuam9pbnRCaWxhdGVyYWwub3V0cHV0fXNldERhdGEoZSxyKXt0aGlzLnByZXZpb3VzSW5wdXRJbWFnZT10aGlzLmlucHV0SW1hZ2U/dGhpcy5pbnB1dEltYWdlOmUsdGhpcy5wcmV2aW91c0lucHV0TWFzaz10aGlzLmlucHV0TWFzaz90aGlzLmlucHV0TWFzazpyLHRoaXMuaW5wdXRJbWFnZT1lLHRoaXMuaW5wdXRNYXNrPXJ9cmVzaXplT3V0cHV0KGUscil7c3VwZXIucmVzaXplT3V0cHV0KGUsciksdGhpcy5vdXRwdXQ9dGhpcy5qb2ludEJpbGF0ZXJhbC5vdXRwdXR9fWNsYXNzICR1e2NvbnN0cnVjdG9yKGUpe3RoaXMucXVlcmllcz1bXSx0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUscil7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTpyLGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAocj0+dGhpcy5yZXNvbHZlUXVlcnkocikpKSkuZmlsdGVyKHI9PnIpO2ZvcihsZXQgcj0xO3I8ZS5sZW5ndGg7KytyKWVbcl0udGltZXN0YW1wKz1lW3ItMV0uZHVyYXRpb24rZVtyLTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHI9MDtyPDEwOysrcil7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IFpuKDIwMCl9fX1jbGFzcyBidHtjb25zdHJ1Y3Rvcigpe3RoaXMucHJldmlvdXNJbWFnZVdpZHRoPTAsdGhpcy5wcmV2aW91c0ltYWdlSGVpZ2h0PTAsdGhpcy5wcmV2aW91c01hc2tXaWR0aD15ZSx0aGlzLnByZXZpb3VzTWFza0hlaWdodD15ZSx0aGlzLnBvc3RQcm9jZXNzaW5nRW5hYmxlZD0hMDtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSxyPWUuZ2V0Q29udGV4dCgid2ViZ2wyIik7aWYoIXIpdGhyb3ciRmFpbCB0byByZXRyaWV2ZSB3ZWJnbDIgY29udGV4dCI7dGhpcy5jYW52YXM9ZSx0aGlzLmNvbnRleHQ9cix0aGlzLmltcHJvdmVNYXNrPW5ldyBHdSh0aGlzLmNvbnRleHQseWUseWUpfWVuYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITB9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITF9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe2NvbnN0IHI9bmV3ICR1KHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9cixyLnN0YXJ0KCksYXdhaXQgWm4oZSksdGhpcy5wcm9maWxlcj12b2lkIDAsci5zdG9wKCksci5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1hc3luYyByZW5kZXIoZSxyKXt2YXIgYSxvO2lmKCF0aGlzLnBpcGVsaW5lKXRocm93Im1pc3NpbmcgcGlwZWxpbmUiOyh0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQhPT1lLmhlaWdodHx8dGhpcy5wcmV2aW91c0ltYWdlV2lkdGghPT1lLndpZHRoKSYmdGhpcy5yZXNpemVPdXRwdXQoZS53aWR0aCxlLmhlaWdodCksKHRoaXMucHJldmlvdXNNYXNrSGVpZ2h0IT09ci5oZWlnaHR8fHRoaXMucHJldmlvdXNNYXNrV2lkdGghPT1yLndpZHRoKSYmKHRoaXMuaW1wcm92ZU1hc2sucmVzaXplT3V0cHV0KHIud2lkdGgsci5oZWlnaHQpLHRoaXMucHJldmlvdXNNYXNrV2lkdGg9ci53aWR0aCx0aGlzLnByZXZpb3VzTWFza0hlaWdodD1yLmhlaWdodCk7Y29uc3Qgbj0icmVuZGVyZXIiOyhhPXRoaXMucHJvZmlsZXIpPT1udWxsfHxhLnB1c2hDb250ZXh0KG4pLHRoaXMuaW1wcm92ZU1hc2suc2V0UHJvZmlsZXIodGhpcy5wcm9maWxlciksdGhpcy5waXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKTtjb25zdCBzPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHIpO2xldCBpPXM7cmV0dXJuIHRoaXMucG9zdFByb2Nlc3NpbmdFbmFibGVkJiYodGhpcy5pbXByb3ZlTWFzay5zZXREYXRhKGUscyksdGhpcy5pbXByb3ZlTWFzay5ydW4oKSxpPXRoaXMuaW1wcm92ZU1hc2sub3V0cHV0KSx0aGlzLnBpcGVsaW5lLnNldERhdGEoZSxpKSxhd2FpdCB0aGlzLnBpcGVsaW5lLnJ1bigpLChvPXRoaXMucHJvZmlsZXIpPT1udWxsfHxvLnBvcENvbnRleHQobiksdGhpcy5jYW52YXN9cmVzaXplT3V0cHV0KGUscil7dmFyIG47dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9ciwobj10aGlzLnBpcGVsaW5lKT09bnVsbHx8bi5yZXNpemVPdXRwdXQoZSxyKSx0aGlzLnByZXZpb3VzSW1hZ2VXaWR0aD1lLHRoaXMucHJldmlvdXNJbWFnZUhlaWdodD1yfWRlc3Ryb3koKXt2YXIgcjtjb25zdCBlPShyPXRoaXMuY29udGV4dCk9PW51bGw/dm9pZCAwOnIuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTtlJiZlLmxvc2VDb250ZXh0KCl9fWNsYXNzIHRzIGV4dGVuZHMgYnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucGlwZWxpbmU9bmV3IEpuKHRoaXMuY29udGV4dCk7Y29uc3QgZT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkscj1lLmdldENvbnRleHQoIndlYmdsMiIpO2lmKCFyKXRocm93IkZhaWwgdG8gcmV0cmlldmUgd2ViZ2wgY29udGV4dCI7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dD1yLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplcj1uZXcgTXUodGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCwwLDApfXNldEJhY2tncm91bmRJbWFnZShlKXt0aGlzLmJhY2tncm91bmRJbWFnZT1lLHRoaXMudXBkYXRlQmFja2dyb3VuZEltYWdlKCl9dXBkYXRlQmFja2dyb3VuZEltYWdlKCl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6cn09dGhpcy5jYW52YXM7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyLnJlc2l6ZU91dHB1dChlLHIpLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5zZXREYXRhKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIucnVuKCksdGhpcy5waXBlbGluZS5pbnB1dEJhY2tncm91bmRJbWFnZT10aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXJDYW52YXN9cmVzaXplT3V0cHV0KGUscil7c3VwZXIucmVzaXplT3V0cHV0KGUsciksdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLndpZHRoPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLmhlaWdodD1yLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5yZXNpemVPdXRwdXQoZSxyKSx0aGlzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSgpfWRlc3Ryb3koKXt2YXIgcjtjb25zdCBlPShyPXRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNvbnRleHQpPT1udWxsP3ZvaWQgMDpyLmdldEV4dGVuc2lvbigiV0VCR0xfbG9zZV9jb250ZXh0Iik7ZSYmZS5sb3NlQ29udGV4dCgpLHN1cGVyLmRlc3Ryb3koKX19Y2xhc3MgVnUgZXh0ZW5kcyB0c3tzZXRCYWNrZ3JvdW5kVmlkZW8oZSl7dGhpcy5mcmFtZVJlYWRlcj1lfWFzeW5jIHJlbmRlcihlLHIpe3JldHVybiBhd2FpdCB0aGlzLnJlYWROZXh0VmlkZW9GcmFtZSgpLHN1cGVyLnJlbmRlcihlLHIpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciByO2NvbnN0IGU9YXdhaXQoKHI9dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOnIucmVhZCgpKTtpZihlIT1udWxsJiZlLnZhbHVlKXtjb25zdCBuPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUudmFsdWUpO3RoaXMuc2V0QmFja2dyb3VuZEltYWdlKG4pLGUudmFsdWUuY2xvc2UoKX19fWNsYXNzIHJze2JsdXJCYWNrZ3JvdW5kKGUpe3JldHVybiBuZXcgVGkoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIG5ldyB3aShlKX1pbWFnZUJhY2tncm91bmQoKXtyZXR1cm4gbmV3IEFpfXZpZGVvQmFja2dyb3VuZCgpe3JldHVybiBuZXcgVnV9fXZhciBXdT1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLEh1PWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MganUgZXh0ZW5kcyBDZXtnZXREZWZpbmVzKCl7cmV0dXJue1JBRElVUzp0aGlzLm9wdGlvbnMucmFkaXVzPz8xfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBXdSt0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBIdX1jcmVhdGVMb29wRnVuY3Rpb24oKXtsZXQgZT10aGlzLm9wdGlvbnMucmFkaXVzPz8xO3JldHVybmAKCiAgICAgICAgdmVjNCBsb29wKCkgeyAKICAgICAgICAgICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAsMCwwLDApOwogICAgICAgICAgICBmbG9hdCBmYWN0b3JTdW0gPSAwLjsKCiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZFJhZGl1cyA9IHZlYzIoLSR7ZX0uKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkSW5jcmVtZW50ID0gdmVjMigxLikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgZGlmZiA9IG5vcm1hbGl6ZWRSYWRpdXM7CiAgICAgICAgICAgIGZsb2F0IG1heExlbmd0aCA9IGxlbmd0aChub3JtYWxpemVkUmFkaXVzKTsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gKDEuLSB0ZXh0dXJlMkQobWFzaywgX3RleHR1cmVfY29vcmQgKyBkaWZmKS5hKSAqIChtYXhMZW5ndGggLSBsZW5ndGgoZGlmZikpIC8gbWF4TGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmYWN0b3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQgKyBkaWZmKTsKICAgICAgICAgICAgICAgICAgICBmYWN0b3JTdW0gKz0gZmFjdG9yOwogICAgICAgICAgICAgICAgICAgIGRpZmYueCArPSBub3JtYWxpemVkSW5jcmVtZW50Lng7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkaWZmLnkgKz0gbm9ybWFsaXplZEluY3JlbWVudC55OwogICAgICAgICAgICAgICAgZGlmZi54ID0gbm9ybWFsaXplZFJhZGl1cy54OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQgLyBmYWN0b3JTdW07CiAgICAgICAgfWB9fWNvbnN0IFh1PTEwLFl1PTIsUXU9ODtjbGFzcyBxdSBleHRlbmRzIGJye2NvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZSx0aGlzLnJhZGl1cz1yO2NvbnN0IG49e2NvbnRleHQ6ZSxoZWlnaHQ6ZS5jYW52YXMuaGVpZ2h0LHdpZHRoOmUuY2FudmFzLndpZHRofTt0aGlzLmJsdXI9bmV3IGp1KHsuLi5uLHJhZGl1czpyLC4uLnRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCl9KTtjb25zdCBzPW5ldyBwcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dGhpcy5ibHVyLHByZXZlbnRSZXNpemU6ITAsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTp2KGUsdGhpcy5pbnB1dEltYWdlKSxtYXNrOnYoZSx0aGlzLmlucHV0TWFzayl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6dihlLHRoaXMuYmx1ci5vdXRwdXQpLGZvcmVncm91bmQ6dihlLHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOnYoZSx0aGlzLmlucHV0TWFzayl9KX0pfWdldEJsdXJUZXh0dXJlU2l6ZShlLHIpe2NvbnN0IG49dGhpcy5yYWRpdXM+WHU/UXU6WXU7cmV0dXJue3dpZHRoOk1hdGgubWF4KHllLGUvbiksaGVpZ2h0Ok1hdGgubWF4KHllLHIvbil9fXNldERhdGEoZSxyKXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz1yfXJlc2l6ZU91dHB1dChlLHIpe3N1cGVyLnJlc2l6ZU91dHB1dChlLHIpO2NvbnN0IG49dGhpcy5nZXRCbHVyVGV4dHVyZVNpemUoZSxyKTt0aGlzLmJsdXIucmVzaXplT3V0cHV0KG4ud2lkdGgsbi5oZWlnaHQpfX1jbGFzcyBLdSBleHRlbmRzIGJ0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5waXBlbGluZT1uZXcgcXUodGhpcy5jb250ZXh0LGUpLHRoaXMuZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl9fWNsYXNzIEp1IGV4dGVuZHMgYnJ7Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMuY29udGV4dD1lO2NvbnN0IG49e2NvbnRleHQ6ZSxoZWlnaHQ6ZS5jYW52YXMuaGVpZ2h0LHdpZHRoOmUuY2FudmFzLndpZHRofSxzPW5ldyBlcyh7Li4ubixyYWRpdXM6cix0eXBlOmdyLkdBVVNTSUFOfSksaT1uZXcgcHIoey4uLm4sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTp2KGUsdGhpcy5pbnB1dEltYWdlKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmksZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDp2KGUsdGhpcy5pbnB1dEltYWdlKSxmb3JlZ3JvdW5kOnYoZSxzLm91dHB1dCksdGhyZXNob2xkOnYoZSx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEoZSxyKXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz1yfX1jbGFzcyBadSBleHRlbmRzIGJ0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5waXBlbGluZT1uZXcgSnUodGhpcy5jb250ZXh0LGUpLHRoaXMuZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl9fWNsYXNzIGVmIGV4dGVuZHMgSm57Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucHJlY2lzZU1hc2tFbmFibGVkPSEwfXNldCByZWFkZXIoZSl7dGhpcy5mcmFtZVJlYWRlcj1lfWFzeW5jIHJ1bigpe3RoaXMuZnJhbWVSZWFkZXImJihhd2FpdCB0aGlzLnJlYWROZXh0VmlkZW9GcmFtZSgpLGF3YWl0IHN1cGVyLnJ1bigpKX1hc3luYyByZWFkTmV4dFZpZGVvRnJhbWUoKXt2YXIgcjtjb25zdCBlPWF3YWl0KChyPXRoaXMuZnJhbWVSZWFkZXIpPT1udWxsP3ZvaWQgMDpyLnJlYWQoKSk7ZSE9bnVsbCYmZS52YWx1ZSYmKHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoZS52YWx1ZSksZS52YWx1ZS5jbG9zZSgpKX19Y2xhc3MgdGYgZXh0ZW5kcyBidHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5waXBlbGluZT1uZXcgZWYodGhpcy5jb250ZXh0KX1zZXRCYWNrZ3JvdW5kVmlkZW8oZSl7dGhpcy5waXBlbGluZS5yZWFkZXI9ZX19Y2xhc3MgbnN7Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIG5ldyBLdShlKX1ibHVyU2lsaG91ZXR0ZShlKXtyZXR1cm4gbmV3IFp1KGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiBuZXcgdHN9dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyB0Zn19Y2xhc3MgcmZ7Y29uc3RydWN0b3IoZSl7c3dpdGNoKGUpe2Nhc2UgS2UuQ0FOVkFTOnRoaXMuZmFjdG9yeT1uZXcgcnM7YnJlYWs7Y2FzZSBLZS5XRUJHTDp0aGlzLmZhY3Rvcnk9bmV3IG5zO2JyZWFrO2RlZmF1bHQ6Y29uc3Qgcj1faSgpO3RoaXMuZmFjdG9yeT1yLnN1cHBvcnRlZD9uZXcgbnM6bmV3IHJzfX1ibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkuYmx1ckJhY2tncm91bmQoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLmJsdXJTaWxob3VldHRlKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiB0aGlzLmdldEZhY3RvcnkoKS5pbWFnZUJhY2tncm91bmQoKX12aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkudmlkZW9CYWNrZ3JvdW5kKCl9Z2V0RmFjdG9yeSgpe2lmKCF0aGlzLmZhY3RvcnkpdGhyb3ciRmFjdG9yeSBpcyBub3QgaW5pdGlhbGl6ZWQiO3JldHVybiB0aGlzLmZhY3Rvcnl9fWNsYXNzIG5me3NldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciBuLHM7dGhpcy5yZW5kZXJlciYmdGhpcy5yZW5kZXJlci5kZXN0cm95KCk7Y29uc3Qgcj1uZXcgcmYoKG49ZS5yZW5kZXJpbmdPcHRpb25zKT09bnVsbD92b2lkIDA6bi50eXBlKTtzd2l0Y2goZS50cmFuc2Zvcm1lclR5cGUpe2Nhc2UiQmFja2dyb3VuZEJsdXIiOnRoaXMucmVuZGVyZXI9ci5ibHVyQmFja2dyb3VuZCh0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJTaWxob3VldHRlQmx1ciI6dGhpcy5yZW5kZXJlcj1yLmJsdXJTaWxob3VldHRlKHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlZpZGVvQmFja2dyb3VuZCI6Y29uc3QgaT1yLnZpZGVvQmFja2dyb3VuZCgpO3RoaXMuYmFja2dyb3VuZFZpZGVvJiZpLnNldEJhY2tncm91bmRWaWRlbyh0aGlzLmJhY2tncm91bmRWaWRlbyksdGhpcy5yZW5kZXJlcj1pO2JyZWFrO2Nhc2UiVmlydHVhbEJhY2tncm91bmQiOmNvbnN0IGE9ci5pbWFnZUJhY2tncm91bmQoKTt0aGlzLmJhY2tncm91bmRJbWFnZSYmYS5zZXRCYWNrZ3JvdW5kSW1hZ2UodGhpcy5iYWNrZ3JvdW5kSW1hZ2UpLHRoaXMucmVuZGVyZXI9YTticmVhaztkZWZhdWx0OnRocm93YFVua25vd24gcmVuZGVyaW5nIHR5cGUgWyR7ZS50cmFuc2Zvcm1lclR5cGV9XWB9KChzPWUucmVuZGVyaW5nT3B0aW9ucyk9PW51bGw/dm9pZCAwOnMudHlwZSk9PT1LZS5XRUJHTCYmKGUucmVuZGVyaW5nT3B0aW9ucy5zZWxmaWVTZWdtZW50YXRpb25UeXBlPT09a3QuUFJFQ0lTRT90aGlzLnJlbmRlcmVyLmVuYWJsZVBvc3RQcm9jZXNzaW5nKCk6ZS5yZW5kZXJpbmdPcHRpb25zLnNlbGZpZVNlZ21lbnRhdGlvblR5cGU9PT1rdC5GQVNUJiZ0aGlzLnJlbmRlcmVyLmRpc2FibGVQb3N0UHJvY2Vzc2luZygpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVmlkZW89ZS5nZXRSZWFkZXIoKTtjb25zdCByPXRoaXMucmVuZGVyZXI7ciE9bnVsbCYmci5zZXRCYWNrZ3JvdW5kVmlkZW8mJnIuc2V0QmFja2dyb3VuZFZpZGVvKHRoaXMuYmFja2dyb3VuZFZpZGVvKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXtjb25zdCByPXRoaXMucmVuZGVyZXI7ciE9bnVsbCYmci5zZXRCYWNrZ3JvdW5kSW1hZ2UmJnIuc2V0QmFja2dyb3VuZEltYWdlKGUpLHRoaXMuYmFja2dyb3VuZEltYWdlPWV9YXN5bmMgcHJvY2VzcyhlLHIpe2lmKHRoaXMucmVuZGVyZXIpcmV0dXJuIHRoaXMucmVuZGVyZXIucmVuZGVyKGUscil9YXN5bmMgcmVzaXplRm9yZWdyb3VuZChlLHIpe31nZXRCbHVyU2l6ZShlPXFlLkxvdyl7c3dpdGNoKGUpe2Nhc2UgcWUuTG93OnJldHVybiA1O2Nhc2UgcWUuSGlnaDpyZXR1cm4gMTJ9cmV0dXJuIGV9YXN5bmMgcHJvZmlsZShlKXt2YXIgcjtyZXR1cm4oKHI9dGhpcy5yZW5kZXJlcik9PW51bGw/dm9pZCAwOnIucHJvZmlsZVdlYmdsKGUpKT8/W119fWNvbnN0IHNmPS4xLG9mPS43LGFmPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L21sL3ZvbmFnZV9zZWxmaWVfc2VnbWVudGVyL2Zsb2F0MTYvdjEvdm9uYWdlX3NlbGZpZV9zZWdtZW50ZXIudGZsaXRlIjtjbGFzcyBjZntjb25zdHJ1Y3Rvcigpe3RoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MH1hc3luYyBjcmVhdGVJbWFnZVNlZ21lbnRlcigpe2lmKCF0aGlzLkltYWdlU2VnbWVudGVyfHwhdGhpcy53YXNtRmlsZXNldCl7Y29uc29sZS53YXJuKCJNZWRpYXBpcGUgb2JqZWN0cyBub3QgbG9hZGVkIik7cmV0dXJufXRoaXMuaW1hZ2VTZWdtZW50ZXI9YXdhaXQgdGhpcy5JbWFnZVNlZ21lbnRlci5jcmVhdGVGcm9tT3B0aW9ucyh0aGlzLndhc21GaWxlc2V0LHtiYXNlT3B0aW9uczp7bW9kZWxBc3NldFBhdGg6dGhpcy5tb2RlbEFzc2V0VXJpUGF0aCxkZWxlZ2F0ZToiR1BVIn0scnVubmluZ01vZGU6IlZJREVPIixvdXRwdXRDYXRlZ29yeU1hc2s6ITAsb3V0cHV0Q29uZmlkZW5jZU1hc2tzOiEwfSl9YXN5bmMgbG9hZE1lZGlhcGlwZUFzc2V0cyhlLHIpe3RoaXMubW9kZWxBc3NldFVyaVBhdGg9ZXx8YWY7Y29uc3Qgbj1yP2Ake3J9L3Rhc2stdmlzaW9uLmpzYDoiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AbWVkaWFwaXBlL3Rhc2tzLXZpc2lvbkAwLjEwLjIwLytlc20iLHM9cj9gJHtyfS93YXNtYDoiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AbWVkaWFwaXBlL3Rhc2tzLXZpc2lvbkAwLjEwLjIwL3dhc20iLHtGaWxlc2V0UmVzb2x2ZXI6aSxJbWFnZVNlZ21lbnRlcjphfT1hd2FpdCBpbXBvcnQobik7dGhpcy5JbWFnZVNlZ21lbnRlcj1hLHRoaXMud2FzbUZpbGVzZXQ9YXdhaXQgaS5mb3JWaXNpb25UYXNrcyhzKX1hc3luYyBpbml0KGUscil7YXdhaXQgdGhpcy5sb2FkTWVkaWFwaXBlQXNzZXRzKGUsciksZ2xvYmFsVGhpcy5kb2N1bWVudD17fSxhd2FpdCB0aGlzLmNyZWF0ZUltYWdlU2VnbWVudGVyKCl9YXN5bmMgcHJvY2VzcyhlKXt2YXIgYTtpZighdGhpcy5pbWFnZVNlZ21lbnRlcil7Y29uc29sZS53YXJuKCJJbWFnZVNlZ21lbnRlciBpbnN0YW5jZSBub3QgYXZhaWxhYmxlIik7cmV0dXJufSh0aGlzLndpZHRoIT09ZS53aWR0aHx8dGhpcy5oZWlnaHQhPT1lLmhlaWdodCkmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoPWUud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0PWUuaGVpZ2h0LHRoaXMubWFzayYmKHRoaXMubWFzaz1uZXcgSW1hZ2VEYXRhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSksdGhpcy5tYXNrfHwodGhpcy5tYXNrPW5ldyBJbWFnZURhdGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCkpLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCk7Y29uc3Qgcj1EYXRlLm5vdygpO2xldCBuO3RyeXsoYT10aGlzLmltYWdlU2VnbWVudGVyKT09bnVsbHx8YS5zZWdtZW50Rm9yVmlkZW8odGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLDAsZS53aWR0aCxlLmhlaWdodCkscixvPT57dmFyIHU7Y29uc3QgYz0odT1vLmNvbmZpZGVuY2VNYXNrcyk9PW51bGw/dm9pZCAwOnVbMF07bj1jPT1udWxsP3ZvaWQgMDpjLmdldEFzRmxvYXQzMkFycmF5KCl9KX1jYXRjaHthd2FpdCB0aGlzLmNyZWF0ZUltYWdlU2VnbWVudGVyKCk7cmV0dXJufWlmKCFuKXJldHVybjtpZighdGhpcy5wcmV2aW91c0NvbmZpZGVuY2VNYXNrKXt0aGlzLnByZXZpb3VzQ29uZmlkZW5jZU1hc2s9bi5zbGljZSgpO3JldHVybn1jb25zdCBzPW4ubWFwKChvLGMpPT57dmFyIGY7Y29uc3QgdT0oZj10aGlzLnByZXZpb3VzQ29uZmlkZW5jZU1hc2spPT1udWxsP3ZvaWQgMDpmW2NdO3JldHVybiB1IT09dm9pZCAwP3RoaXMuYmxlbmQodSxvKTpvfSksaT1bMjU1LDAsMF07Zm9yKGxldCBvPTA7bzwocz09bnVsbD92b2lkIDA6cy5sZW5ndGgpO28rKyl7Y29uc3QgYz0xLXNbb107Yz5zZj8oYzxvZj8odGhpcy5tYXNrLmRhdGFbbyo0XT1pWzBdKmMsdGhpcy5tYXNrLmRhdGFbbyo0KzNdPTI1NSpjKToodGhpcy5tYXNrLmRhdGFbbyo0XT1pWzBdLHRoaXMubWFzay5kYXRhW28qNCszXT0yNTUpLHRoaXMubWFzay5kYXRhW28qNCsxXT1pWzFdLHRoaXMubWFzay5kYXRhW28qNCsyXT1pWzJdKTp0aGlzLm1hc2suZGF0YVtvKjRdPXRoaXMubWFzay5kYXRhW28qNCsxXT10aGlzLm1hc2suZGF0YVtvKjQrMl09dGhpcy5tYXNrLmRhdGFbbyo0KzNdPTB9cmV0dXJuIHRoaXMucHJldmlvdXNDb25maWRlbmNlTWFzaz1zLnNsaWNlKCksdGhpcy5tYXNrfWlzR3B1U3VwcG9ydGVkKCl7cmV0dXJuITB9YmxlbmQoZSxyKXtjb25zdCBzPS0uNzQ4Njk5LGk9LTU3LjgwNTEsYT0yOTEuMzA5LG89LTYyNC43MTcsYz1yLS41LHU9YypjLGY9MS1NYXRoLm1pbigxLHUqKDUuNjg4NDIrdSoocyt1KihpK3UqKGErdSpvKSkpKSk7cmV0dXJuIHIrKGUtcikqKGYqLjkpfX1jbGFzcyB1Zntjb25zdHJ1Y3Rvcigpe3RoaXMucmVwb3J0ZXI9bmV3IHhpLHRoaXMuaXNFbmFibGVkPSEwfWFzeW5jIGluaXQoZSxyKXt2YXIgbjt0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbj1uZXcgY2YsYXdhaXQoKG49dGhpcy5zZWxmaWVTZWdtZW50YXRpb24pPT1udWxsP3ZvaWQgMDpuLmluaXQoci5tb2RlbEFzc2V0VXJpUGF0aCxyLm1lZGlhcGlwZUJhc2VBc3NldHNVcmkpKSx0aGlzLmJhY2tncm91bmRGaWx0ZXI9bmV3IG5mLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1hc3luYyB0cmFuc2Zvcm0oZSxyKXt2YXIgbyxjO2lmKCF0aGlzLmlzRW5hYmxlZClyZXR1cm4gci5lbnF1ZXVlKGUpO2xldCBuO2NvbnN0IHM9ZS50aW1lc3RhbXA/PzAsaT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChlKSxhPWF3YWl0KChvPXRoaXMuc2VsZmllU2VnbWVudGF0aW9uKT09bnVsbD92b2lkIDA6by5wcm9jZXNzKGkpKTthJiYobj1hd2FpdCgoYz10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpjLnByb2Nlc3MoaSxhKSkpLG4/KGUuY2xvc2UoKSxyLmVucXVldWUobmV3IFZpZGVvRnJhbWUobix7dGltZXN0YW1wOnMsYWxwaGE6ImRpc2NhcmQifSkpKTpyLmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHI7dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucz1lLGF3YWl0KChyPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnIuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSJ9KX1hc3luYyBzZXRWaWRlb0JHUmVhZGFibGUoZSl7dmFyIHI7YXdhaXQoKHI9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6ci5zZXRWaWRlb0JHUmVhZGFibGUoZSkpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3ZhciByO2F3YWl0KChyPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnIuc2V0VmlydHVhbEJHSW1hZ2UoZSkpfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHI7cmV0dXJuKChyPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnIucHJvZmlsZShlKSk/P1tdfWdldFRyYW5zZm9ybWVyVHlwZSgpe3ZhciBlO3JldHVybigoZT10aGlzLmJhY2tncm91bmRPcHRpb25zKT09bnVsbD92b2lkIDA6ZS50cmFuc2Zvcm1lclR5cGUpPz8iVW5kZWZpbmVkIn1lbmFibGUoKXt0aGlzLmlzRW5hYmxlZD0hMH1kaXNhYmxlKCl7dGhpcy5pc0VuYWJsZWQ9ITF9cmVwb3J0KGUpe3ZhciByO3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpFaSxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHI9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnIudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0IHhyPWNsYXNzIHhye2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXI9bmV3IHVmLHRoaXMubWVkaWFQcm9jZXNzb3I9bmV3IFFzLHRoaXMucmF0ZT0zMCx0aGlzLmV2ZW50c1F1ZXVlPVtdLHRoaXMuZnJhbWVUcmFuc2Zvcm1MYXRlbmN5TXM9W119YXN5bmMgaW5pdChlLHIpe3RoaXMuZnJhbWVUcmFuc2Zvcm1MYXRlbmN5TXM9W10sYXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuaW5pdChlLHIpLGF3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhbnNmb3JtZXJzKFt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcl0pLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy5yYXRlKSx0aGlzLm1lZGlhUHJvY2Vzc29yLm9uQW55KChuLHMpPT57dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj8odGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcih7bmFtZTpuLGRhdGE6c30pLHRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9dm9pZCAwKTp0aGlzLmV2ZW50c1F1ZXVlLnB1c2goe25hbWU6bixkYXRhOnN9KX0pfWVuYWJsZSgpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmVuYWJsZSgpfWRpc2FibGUoKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5kaXNhYmxlKCl9YXN5bmMgb25NZWRpYVByb2Nlc3NvckV2ZW50KCl7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLmV2ZW50c1F1ZXVlLmxlbmd0aD4wP2UodGhpcy5ldmVudHNRdWV1ZS5zaGlmdCgpKTp0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWV9KX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHIpe2xldCBuPXBlcmZvcm1hbmNlLm5vdygpO3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsciksdGhpcy5mcmFtZVRyYW5zZm9ybUxhdGVuY3lNcy5wdXNoKHBlcmZvcm1hbmNlLm5vdygpLW4pfWFzeW5jIHNldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciByO2F3YWl0KChyPXRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyKT09bnVsbD92b2lkIDA6ci5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpZGVvQkdSZWFkYWJsZShlKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaXJ0dWFsQkdJbWFnZShlKX1hc3luYyB0ZXJtaW5hdGUoKXthd2FpdCB0aGlzLm1lZGlhUHJvY2Vzc29yLmRlc3Ryb3koKTtjb25zdCByPXRoaXMuZnJhbWVUcmFuc2Zvcm1MYXRlbmN5TXMucmVkdWNlKChuLHMpPT5uK3MsMCkvdGhpcy5mcmFtZVRyYW5zZm9ybUxhdGVuY3lNcy5sZW5ndGh8fDA7Y29uc29sZS5sb2coYFRyYW5zZm9ybSBsYXRlbmN5IGF2ZXJhZ2UgaXM6ICR7cn0gbXNgKX1zZXRWb25hZ2VNZXRhZGF0YShlKXtWcyhlKX1hc3luYyBwcm9maWxlKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5wcm9maWxlKGUpKX19O3VzKCJQcm9jZXNzb3JXb3JrZXIiLHhyKTtsZXQgc3M9eHJ9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1wcm9jZXNzb3Itd29ya2VyLThkWk1Ia0NiLmpzLm1hcAo=",Go=typeof self<"u"&&self.Blob&&new Blob([(e=>Uint8Array.from(atob(e),e=>e.charCodeAt(0)))(No)],{type:"text/javascript;charset=utf-8"});function Xo(e){let t;try{if(t=Go&&(self.URL||self.webkitURL).createObjectURL(Go),!t)throw"";const n=new Worker(t,{name:null==e?void 0:e.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker("data:text/javascript;base64,"+No,{name:null==e?void 0:e.name})}finally{t&&(self.URL||self.webkitURL).revokeObjectURL(t)}}const ko=function(e){function t(t){var n;return(n=e.call(this)||this).rate=30,n.isEnabled=!0,n.config=t,n}(0,a.default)(t,e);var n=t.prototype;return n.setTrackExpectedRate=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.startWorker();case 2:return e.next=4,null==(n=this.worker)?void 0:n.setTrackExpectedRate(t);case 4:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.setBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.backgroundOptions=t,e.next=3,this.updateBackgroundOptions(t);case 3:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.transform=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.startWorker();case 2:return e.next=4,null==(r=this.worker)?void 0:r.transform(t,n);case 4:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),n.destroy=function(){var e=(0,c.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(t=this.worker)?void 0:t.terminate();case 2:this.worker=void 0;case 3:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(n=this.worker)?void 0:n.profile(t);case 2:return r=e.sent,e.abrupt("return",JSON.parse(null!=r?r:"[]"));case 4:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.enable=function(){var e=(0,c.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.isEnabled=!0,e.next=3,null==(t=this.worker)?void 0:t.enable();case 3:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.disable=function(){var e=(0,c.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.isEnabled=!1,e.next=3,null==(t=this.worker)?void 0:t.disable();case 3:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.listenWorker=function(){var e=(0,c.default)(o.default.mark((function e(){var t,n,r,i,a;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null==(t=this.worker)||!t.workerContext.worker){e.next=20;break}return e.next=3,null==(n=this.worker)?void 0:n.onMediaProcessorEvent();case 3:r=e.sent,i=r.name,a=r.data,e.t0=i,e.next="error"===e.t0||"warn"===e.t0?9:"pipelineInfo"===e.t0?11:18;break;case 9:return this.emit(i,a),e.abrupt("break",18);case 11:e.t1=(this.emit(i,a),a),e.next="pipeline_ended"===e.t1||"pipeline_ended_with_error"===e.t1?14:17;break;case 14:return e.next=16,this.destroy();case 16:return e.abrupt("return");case 17:return e.abrupt("break",18);case 18:e.next=0;break;case 20:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.startWorker=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.t0=!this.config||this.worker,e.t0){e.next=20;break}return e.next=4,jt(Jo,Xo);case 4:if(this.worker=e.sent,e.t1=this.isEnabled,e.t1){e.next=9;break}return e.next=9,this.worker.disable();case 9:return e.next=11,this.worker.init("worker_"+t.initCount++,this.config);case 11:if(e.t2=this.backgroundOptions,!e.t2){e.next=15;break}return e.next=15,this.updateBackgroundOptions(this.backgroundOptions);case 15:return e.next=17,this.worker.setVonageMetadata(ge());case 17:return e.next=19,this.setBackgroundOptions(this.config);case 19:this.listenWorker();case 20:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.updateBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r,i,a;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.startWorker();case 2:a=t.transformerType,e.t0=a,e.next="VideoBackground"===e.t0?6:"VirtualBackground"===e.t0?18:30;break;case 6:if(null!=(n=this.worker)){e.next=10;break}e.t1=void 0,e.next=15;break;case 10:return e.t2=n,e.next=13,on.createVideoReadable(t.backgroundAssetUri);case 13:e.t3=e.sent,e.t1=e.t2.setVideoBGReadable.call(e.t2,e.t3);case 15:return e.next=17,e.t1;case 17:return e.abrupt("break",30);case 18:if(null!=(r=this.worker)){e.next=22;break}e.t4=void 0,e.next=27;break;case 22:return e.t5=r,e.next=25,on.createImageCanvas(t.backgroundAssetUri);case 25:e.t6=e.sent,e.t4=e.t5.setVirtualBGImage.call(e.t5,e.t6);case 27:return e.next=29,e.t4;case 29:return e.abrupt("break",30);case 30:return e.next=32,null==(i=this.worker)?void 0:i.setBackgroundOptions(t);case 32:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t}(st);ko.initCount=0;let To=ko,Yo=function(){function e(e){this.queries=e}var t=e.prototype;return t.downloadSpeedscope=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=this,e.next=3,this.convertToSpeedscope();case 3:e.t1=e.sent,e.t0.download.call(e.t0,e.t1);case 5:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.download=function(e){const t=document.createElement("a");t.href=URL.createObjectURL(new Blob([e],{type:"application/json"})),t.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(t),t.click(),document.body.removeChild(t)},t.convertToSpeedscope=function(){const e=[],t={},n=[];let r=0;for(var i,o=A(this.queries);!(i=o()).done;){const o=[];for(var a,l=A(i.value);!(a=l()).done;){const n=a.value;void 0===t[n.name]&&(t[n.name]=e.length,e.push({name:n.name})),o.push({type:n.action==go.PUSH?"O":"C",frame:t[n.name],at:n.timestamp}),r=Math.max(r,n.timestamp+n.duration)}n.push({events:o,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:r})}return JSON.stringify({$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:e},profiles:n},null,2)},e}();const wo=function(t){function n(e){var n;return(n=t.call(this)||this).worker=new To(e),n.connector=new Ie(n.worker),n.worker.onAny((e,t)=>n.emit(e,t)),n}(0,a.default)(n,t);var r=n.prototype;return r.setBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.worker.setBackgroundOptions(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),r.enable=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.worker.enable();case 2:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),r.disable=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.worker.disable();case 2:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),r.setTrackExpectedRate=function(e){this.worker.setTrackExpectedRate(e)},r.getConnector=function(){return this.connector},r.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.worker.profile(t));case 1:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.profile=function(){var t=(0,c.default)(o.default.mark((function t(n){var r;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.all(this.instances.map(e=>e.profile(n)));case 2:return r=t.sent,t.abrupt("return",new Yo(r));case 4:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),n.create=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=new this(t),e.abrupt("return",(this.instances.push(n),n));case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n}(st);wo.instances=[];let Do=wo;function xo(){return(xo=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Do.create(t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}t.VonageMediaProcessor=Do}).call(this,n(2),n(24))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e,t){void 0===t&&(t={});const n=t.hasE2eeCapability||i.default,r=t.hasOpenTokSupport||o;this.publish=-1!==e.indexOf("publish")?1:0,this.subscribe=-1!==e.indexOf("subscribe")?1:0,this.forceUnpublish=-1!==e.indexOf("forceunpublish")?1:0,this.forceDisconnect=-1!==e.indexOf("forcedisconnect")?1:0,this.forceMute=-1!==e.indexOf("forcemute")?1:0,this.supportsE2ee=n()?1:0,this.supportsWebRTC=r()?1:0,this.permittedTo=e=>Object.prototype.hasOwnProperty.call(this,e)&&1===this[e]};var i=r(n(115));const o=r(n(53)).default.once},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e,t,n,r,o,c,A){const h=this;let g;this.id=e,this.streamId=e,this.name=t,this.creationTime=Number(n),this.initials=A||"",this.connection=r,this.channel=c,this.publisher=a.default.publishers.find({streamId:this.id}),(0,i.default)(this);const Q=function(e,t,n,r){let i=t;switch(i){case"active":"audio"===e.type?i="hasAudio":"video"===e.type?i="hasVideo":"data"===e.type&&"caption1"===e.id&&(i="hasCaptions"),h[i]=r;break;case"disableWarning":if(i="audio"===e.type?"audioDisableWarning":"videoDisableWarning",h[i]=r,!h["audio"===e.type?"hasAudio":"hasVideo"])return;break;case"fitMode":i="defaultFitMode",h[i]=r;break;case"source":i="audio"===e.type?"audioType":"videoType",h[i]=r;break;case"videoDimensions":h.videoDimensions=r;break;case"orientation":case"width":case"height":return}h.dispatchEvent(new d.StreamUpdatedEvent(h,i,n,r))},F=function(){return h.publisher?h.publisher:a.default.subscribers.find(e=>e.stream&&e.stream.id===h.id&&e.session.id===o.id)},p=function(){return!h.publisher};this.getChannelsOfType=function(e){return h.channel.filter(t=>t.type===e)},this.getChannel=function(e){for(let t=0;t<h.channel.length;++t)if(h.channel[t].id===e)return h.channel[t];return null};const U=this.getChannelsOfType("audio")[0],m=this.getChannelsOfType("video")[0],b=this.getChannelsOfType("data").find(e=>"caption1"===e.id);this.hasAudio=!(null==U||!U.active),this.hasVideo=!(null==m||!m.active),this.hasCaptions=!(null==b||!b.active),this.videoType=m&&m.source,this.defaultFitMode=m&&m.fitMode,this.videoDimensions={},m&&(this.videoDimensions.width=m.width,this.videoDimensions.height=m.height,this.videoDimensions.orientation=m.orientation,m.on("update",Q),this.frameRate=m.frameRate);null==U||U.on("update",Q),null==b||b.on("update",Q),this.setChannelActiveState=function(e){let t=e.channelType,n=e.activeState,r=e.activeReason,i=e.congestionLevel,o=e.subscriberId,a=e.isSubscriber;const l={active:n};r&&(l.activeReason=r),void 0!==i&&(l.congestionLevel=i),o&&(l.subscriberId=o),B(t,l,a)},this.setVideoDimensions=function(e,t){B("video",{width:e,height:t,orientation:0})},this.setRestrictFrameRate=function(e){B("video",{restrictFrameRate:e},!0)},this.setPreferredResolution=function(e){if(!p())return void s.warn("setPreferredResolution has no affect when called by a publisher");if(o.sessionInfo.p2pEnabled)return void s.warn("Stream.setPreferredResolution will not work in a P2P Session");if(e&&void 0===e.width&&void 0===e.height)return;const t=h.getChannelsOfType("video")[0];if(t){if(e&&e.width){if(isNaN(parseInt(e.width,10)))throw new l.default.Error("stream preferred width must be an integer","Subscriber");t.preferredWidth=parseInt(e.width,10)}else t.preferredWidth=void 0;if(e&&e.height){if(isNaN(parseInt(e.height,10)))throw new l.default.Error("stream preferred height must be an integer","Subscriber");t.preferredHeight=parseInt(e.height,10)}else t.preferredHeight=void 0;o._.subscriberChannelUpdate(h,F(),t,{preferredWidth:t.preferredWidth||0,preferredHeight:t.preferredHeight||0})}},this.getPreferredResolution=function(){const e=h.getChannelsOfType("video")[0];if(e&&(e.preferredWidth||e.preferredHeight))return{width:e.preferredWidth,height:e.preferredHeight}},this.setPreferredFrameRate=function(e){if(!p())return void s.warn("setPreferredFrameRate has no affect when called by a publisher");if(o.sessionInfo.p2pEnabled)return void s.warn("Stream.setPreferredFrameRate will not work in a P2P Session");if(e&&isNaN(parseFloat(e)))throw new l.default.Error("stream preferred frameRate must be a number","Subscriber");const t=h.getChannelsOfType("video")[0];t&&(t.preferredFrameRate=e?parseFloat(e):null,o._.subscriberChannelUpdate(h,F(),t,{preferredFrameRate:t.preferredFrameRate||0}))},this.getPreferredFrameRate=function(){const e=h.getChannelsOfType("video")[0];return e?e.preferredFrameRate:null};const B=function(e,t,n){let r;if(void 0===n&&(n=!1),n){const e=F();r=n=>o._.subscriberChannelUpdate(h,e,n,t)}else r=e=>o._.streamChannelUpdate(h,e,t);h.getChannelsOfType(e).forEach(r)};this.destroyed=!1,this.destroyedReason=void 0,this.destroy=function(e,t){void 0===e&&(e="clientDisconnected"),g=e,h.destroyed=!0,h.destroyedReason=g,!0!==t&&h.dispatchEvent(new d.DestroyedEvent("destroyed",h,g))},this._={},this._.updateProperty=function(e,t){if(-1===u.indexOf(e))return void s.warn(`Unknown stream property "${e}" was modified to "${t}".`);const n=h[e],r=t;switch(e){case"name":h[e]=r;break;case"archiving":var i=F();h.publisher&&i&&i._.archivingStatus(r),h[e]=r}const o=new d.StreamUpdatedEvent(h,e,n,r);h.dispatchEvent(o)},this._.update=function(e){for(const t in e)e.hasOwnProperty(t)&&h._.updateProperty(t,e[t])},this._.forceMute=function(e){e.hasOwnProperty("channels")&&e.channels.includes("audio")&&h.publisher&&h.publisher._.forceMuteAudio()},this._.updateChannel=function(e,t){const n=h.getChannel(e);n&&n.update(t)}};var i=r(n(6)),o=r(n(1)),a=r(n(27)),l=r(n(7)),c=r(n(18));const s=(0,o.default)("Stream"),d=(0,c.default)(),u=["name","archiving"]},function(e,t,n){"use strict";t.__esModule=!0,t.default=t.UNSUBSCRIBE=t.SUBSCRIBE=t.STATUS=t.PONG=t.PING=t.MESSAGE=t.DISCONNECT=t.CONNECT=void 0;t.SUBSCRIBE=0;t.UNSUBSCRIBE=1;t.MESSAGE=2;t.CONNECT=3;t.DISCONNECT=4;t.PING=7;t.PONG=8;t.STATUS=9;var r={SUBSCRIBE:0,UNSUBSCRIBE:1,MESSAGE:2,CONNECT:3,DISCONNECT:4,PING:7,PONG:8,STATUS:9};t.default=r},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(9)),o=r(n(6)),a=r(n(185)),l=r(n(18)),c=r(n(812));const s=(0,l.default)();function d(e,t,n,r,i){let l;this.id=e,this.connectionId=e,this.creationTime=t?Number(t):null,this.data=n,this.capabilities=(0,c.default)(r),this.permissions=new a.default(i),this.quality=null,(0,o.default)(this),this.destroy=(e,t)=>{l=e||"clientDisconnected",!0!==t&&this.dispatchEvent(new s.DestroyedEvent("destroyed",this,l))},this.destroyed=()=>void 0!==l,this.destroyedReason=()=>l}d.fromHash=e=>{let t=e.id,n=e.creationTime,r=e.data,o=e.capablities,a=e.permissions;return new d(t,n,r,(0,i.default)(o||{},{supportsWebRTC:!0}),a||[])};var u=d;t.default=u},function(e,t){var n="object"==typeof(void 0!==typeof window?window:global)&&(void 0!==typeof window?window:global)&&(void 0!==typeof window?window:global).Object===Object&&(void 0!==typeof window?window:global);e.exports=n},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},function(e,t,n){var r=n(42),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=i},function(e,t,n){var r=n(44),i=n(34);e.exports=function(e,t){return e&&r(t,i(t),e)}},function(e,t,n){var r=n(395),i=n(65),o=n(14),a=n(66),l=n(67),c=n(88),s=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=o(e),d=!n&&i(e),u=!n&&!d&&a(e),A=!n&&!d&&!u&&c(e),h=n||d||u||A,g=h?r(e.length,String):[],Q=g.length;for(var F in e)!t&&!s.call(e,F)||h&&("length"==F||u&&("offset"==F||"parent"==F)||A&&("buffer"==F||"byteLength"==F||"byteOffset"==F)||l(F,Q))||g.push(F);return g}},function(e,t){e.exports=function(e,t){return function(n){return e(t(n))}}},function(e,t,n){(function(e){var r=n(16),i=t&&!t.nodeType&&t,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===i?r.Buffer:void 0,l=a?a.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=l?l(n):new e.constructor(n);return e.copy(r),r}}).call(this,n(87)(e))},function(e,t){e.exports=function(){return[]}},function(e,t,n){var r=n(123),i=n(124),o=n(122),a=n(196),l=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,o(e)),e=i(e);return t}:a;e.exports=l},function(e,t,n){var r=n(199),i=n(122),o=n(34);e.exports=function(e){return r(e,o,i)}},function(e,t,n){var r=n(123),i=n(14);e.exports=function(e,t,n){var o=t(e);return i(e)?o:r(o,n(e))}},function(e,t,n){var r=n(199),i=n(197),o=n(55);e.exports=function(e){return r(e,o,i)}},function(e,t,n){var r=n(42)(n(16),"Set");e.exports=r},function(e,t,n){var r=n(42)(n(16),"WeakMap");e.exports=r},function(e,t,n){var r=n(16).Uint8Array;e.exports=r},function(e,t,n){var r=n(125);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},function(e,t,n){var r=n(89),i=n(124),o=n(69);e.exports=function(e){return"function"!=typeof e.constructor||o(e)?{}:r(i(e))}},function(e,t,n){"use strict";(function(e){var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(4)),o=r(n(5)),a=r(n(6)),l=r(n(1)),c=r(n(58)),s=r(n(474)),d=r(n(475)),u=r(n(476)),A=r(n(95)),h=r(n(3)),g=r(n(259)),Q=r(n(22)),F=r(n(107)),p=r(n(145)),U=r(n(146)),m=r(n(568)),b=r(n(589)),B=r(n(7)),Z=r(n(273)),f=r(n(274)),R=n(592);const I=(0,Q.default)().hasAudioOutputApiSupport,y=F.default.getCurrentAudioOutputDeviceId;function V(e,t){const n=(0,f.default)();return(0,d.default)(n),n.innerHTML=e,!0===t&&(n.muted="true"),n}function C(){const e=V("");return e.setAttribute("style","display:none"),e}var W=function(t){void 0===t&&(t={});const n=t.audioContext||(0,p.default)(),r=t.canBeOrientatedMixin||m.default,d=t.document||(void 0!==typeof window?window:global).document,Q=t.listenForTracksEnded||(0,b.default)(),F=t.logging||l.default,f=t.OTHelpers||B.default,W=t.videoElementErrorMap||(0,Z.default)(),E=t.WebaudioAudioLevelSampler||U.default,S=t.global||(void 0!==typeof window?window:global);let v=1;return function(){function t(e,t){var n=this;let l=e._inject,s=void 0===l?{}:l,d=s.createVideoElement,u=void 0===d?V:d,A=s.createAudioOnlyVideoElement,Q=void 0===A?C:A,p=e.muted,U=e.fallbackText,m=e.widgetType;this._domElement=void 0,this._domAudioOnlyVideoElement=void 0,this._blockedVolume=void 0,this._mediaStoppedListener=void 0,this._audioLevelSampler=void 0,this._playInterrupts=0,this._isVideoLoadedMetaData=!1,this._audioOnlyVideoElementWatcher=void 0,this._blinkStartTime=null,this.logging=F("NativeVideoElementWrapper:"+v),v+=1,(0,a.default)(this),this._defaultAudioVolume=t,this._widgetType=m,this._emitVideoPlayAttempt=()=>{this._blinkStartTime=(new Date).getTime(),this.trigger("bindEvent","transitionVideo","Attempt")},this._emitVideoPlaySuccess=()=>{const e=(new Date).getTime()-this._blinkStartTime;this.trigger("bindEvent","transitionVideo","Success",{attemptDuration:e}),this._blinkStartTime=null},this._emitVideoPlayFailure=()=>{this.trigger("bindEvent","transitionVideo","Failure")};let b=!1;this._domElement=u(U,p),this.trigger("videoElementCreated",this._domElement),this._domElementEvents=(0,c.default)(this._domElement),this._domElementEvents.on("loadstart",()=>this._onDomElementLoadStart()),this._domElementEvents.on("timeupdate",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.trigger("timeupdate",...t)})),this._domElementEvents.on("loadedmetadata",(0,o.default)(i.default.mark((function e(){var t,r,o,a,l=arguments;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(n._isVideoLoadedMetaData=!0,t=l.length,r=new Array(t),o=0;o<t;o++)r[o]=l[o];if(n.trigger("loadedmetadata",...r),!n._domAudioOnlyVideoElement){e.next=10;break}if(a=n._domAudioOnlyVideoElement.srcObject,n._removeAudioOnlyVideoElement(),!a){e.next=10;break}return e.next=9,(0,g.default)();case 9:n.play();case 10:case"end":return e.stop()}}),e)}))));this._domElementEvents.on("error",e=>{this.trigger("error",W(e.target.error))},!1),this._domElementEvents.on("pause",()=>{b||(this.logging.warn("Video element paused, auto-resuming. If you intended to do this, use publishVideo(false) or subscribeToVideo(false) instead."),b=!0),this.play()}),this.on("destroyed",()=>{this._domElementEvents.removeAll(),this._domAudioOnlyVideoElementEvents&&this._domAudioOnlyVideoElementEvents.removeAll()}),r(this,()=>this._domElement),h.default.isSafari&&"subscriber"===this._widgetType&&(this._domAudioOnlyVideoElement=Q(),this._bindAudioOnlyVideoElementEvents()),null!=h.default&&h.default.isDev&&(0,R.addMediaElementListeners)(this._domAudioOnlyVideoElement||this._domElement,e=>{this.trigger("mediaElementEvent",e)})}var l=t.prototype;return l._onDomElementLoadStart=function(){var e=(0,o.default)(i.default.mark((function e(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("subscriber"!==this._widgetType||!I()){e.next=3;break}return e.next=3,this._setActiveAudioOutputDevice();case 3:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._setActiveAudioOutputDevice=function(){var e=(0,o.default)(i.default.mark((function e(){var t;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(""!==(t=y())&&"default"!==t){e.next=3;break}return e.abrupt("return");case 3:return e.next=5,this.setSinkId(t);case 5:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._rebindSrcObject=function(){this._domElement&&(this._domElement.srcObject=this._domElement.srcObject)},l._pauseAndPlay=function(){this._domElement&&(this._domElement.pause(),this._domElement.play())},l._startAudioOnlyVideoElementWatcher=function(){var e=(0,o.default)(i.default.mark((function e(){var t;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return 1e3,t=h.default.isiOS,this._audioOnlyVideoElementWatcher&&clearInterval(this._audioOnlyVideoElementWatcher),this._audioOnlyVideoElementWatcher=setInterval(()=>{this._domAudioOnlyVideoElement&&this._domAudioOnlyVideoElement.paused&&(this._domAudioOnlyVideoElement.srcObject=this._domAudioOnlyVideoElement.srcObject,t&&this._domAudioOnlyVideoElement.play())},100),e.next=6,(0,A.default)(1e3);case 6:clearInterval(this._audioOnlyVideoElementWatcher),this._audioOnlyVideoElementWatcher=null;case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._removeAudioOnlyVideoElement=function(){var e=(0,o.default)(i.default.mark((function e(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this._domAudioOnlyVideoElement.srcObject=null,this._domAudioOnlyVideoElement.parentNode.removeChild(this._domAudioOnlyVideoElement),this._domAudioOnlyVideoElementEvents&&this._domAudioOnlyVideoElementEvents.removeAll(),this._domAudioOnlyVideoElement=null;case 4:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l.requestVideoFrameCallback=function(e){this._domElement.requestVideoFrameCallback(e)},l.bindAudioTrackOnly=function(){var e=(0,o.default)(i.default.mark((function e(){var t,n,r,o,a,l,c;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this._stream.getVideoTracks(),n=this._stream.getAudioTracks(),r=t[0],o=void 0===r?{}:r,a=n[0],l=void 0===a?{}:a,e.next=6,(0,g.default)();case 6:c=!o.enabled&&l.enabled,!this._isVideoLoadedMetaData&&c&&this._domAudioOnlyVideoElement&&(this._domAudioOnlyVideoElement.srcObject=new S.MediaStream(n),this._startAudioOnlyVideoElementWatcher());case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._bindAudioOnlyVideoElementEvents=function(){var e=this;this._domAudioOnlyVideoElementEvents=(0,c.default)(this._domAudioOnlyVideoElement),this._domAudioOnlyVideoElementEvents.on("pause",()=>this.play()),this._domAudioOnlyVideoElementEvents.on("timeupdate",(function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.trigger("timeupdate",...n)})),this._domAudioOnlyVideoElementEvents.on("loadedmetadata",(function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.trigger("loadedmetadata",...n)}))},l.whenTimeIncrements=function(e,t){this.once("timeupdate",()=>{e.call(t,this)})},l.domElement=function(){return this._domElement},l.videoWidth=function(){return this._domElement?Number(this._domElement["video"+(this.isRotated()?"Height":"Width")]):0},l.videoHeight=function(){return this._domElement?Number(this._domElement["video"+(this.isRotated()?"Width":"Height")]):0},l.aspectRatio=function(){return this.videoWidth()/this.videoHeight()},l.prepareForStreamTransition=function(){const e=this._getStreamImage();this._domElement.poster=e},l._getStreamImage=function(){const e=f.createElement("canvas",{width:this.videoWidth(),height:this.videoHeight(),style:{display:"none"}});d.body.appendChild(e);let t=null;try{e.getContext("2d").drawImage(this._domElement,0,0,e.width,e.height),t=e.toDataURL("image/png")}catch(e){}return f.removeElement(e),null===t||"data:,"===t?(this.logging.warn("Cannot get image data yet"),null):t},l.imgData=function(){return this._getStreamImage().replace("data:image/png;base64,","").trim()},l.appendTo=function(e){return e.appendChild(this._domElement),this._domAudioOnlyVideoElement&&e.appendChild(this._domAudioOnlyVideoElement),this},l.isAudioBlocked=function(){return void 0!==this._blockedVolume},l.unblockAudio=function(){var e=(0,o.default)(i.default.mark((function e(){var t;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isAudioBlocked()){e.next=3;break}return this.logging.warn("Unexpected call to unblockAudio() without blocked audio"),e.abrupt("return");case 3:return t=this._blockedVolume,this._blockedVolume=void 0,this.setAudioVolume(t),e.prev=6,e.next=9,this.play();case 9:e.next=16;break;case 11:throw e.prev=11,e.t0=e.catch(6),this._blockedVolume=t,this._domElement.muted=!0,e.t0;case 16:this.trigger("audioUnblocked");case 17:case"end":return e.stop()}}),e,this,[[6,11]])})));return function(){return e.apply(this,arguments)}}(),l.rebind=function(){var e=(0,o.default)(i.default.mark((function e(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._domElement){e.next=2;break}throw new Error("Can't rebind because _domElement no longer exists");case 2:this._playInterrupts++,this._domElement.srcObject=this._domElement.srcObject,this._hasAudioOnlyVideoElement()&&(this._domAudioOnlyVideoElement.srcObject=this._domAudioOnlyVideoElement.srcObject);case 5:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._createAudioLevelSampler=function(){if(this._removeAudioLevelSampler(),this._stream.getAudioTracks().length>0){try{this._audioContext=n()}catch(e){this.logging.warn("Failed to get AudioContext(), audio level visualisation will not work",e)}this._audioContext&&(this._audioLevelSampler=new E(this._audioContext),this._audioLevelSampler.webRTCStream(this._stream))}},l._removeAudioLevelSampler=function(){this._audioContext&&(delete this._audioContext,delete this._audioLevelSampler)},l._toggleVideoTracks=function(){var e=(0,o.default)(i.default.mark((function e(){var t,n;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=this._domElement.srcObject.getTracks().filter(e=>e.enabled),!(t.length>1)){e.next=8;break}return(n=t.filter(e=>"video"===e.kind)).forEach(e=>{e.enabled=!1}),e.next=7,(0,g.default)();case 7:n.forEach(e=>{e.enabled=!0});case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._hasAudioOnlyVideoElement=function(){return this._domAudioOnlyVideoElement&&this._domAudioOnlyVideoElement.srcObject},l.play=function(){var e=(0,o.default)(i.default.mark((function e(){var t,n,r,o,a,l,c,s,d,A,Q;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=this._playInterrupts,n=this._hasAudioOnlyVideoElement()?this._domAudioOnlyVideoElement:this._domElement,!h.default.isSafari){e.next=5;break}return e.next=5,(0,g.default)();case 5:if(!h.default.isiOS||!h.default.isSafari){e.next=15;break}if("publisher"!==this._widgetType){e.next=14;break}if(r=h.default.iOSVersion>=14&&h.default.iOSVersion<=14.2,o=this._stream.getVideoTracks(),a=o[0],l=void 0===a?{}:a,c=this._stream.getAudioTracks(),s=c[0],d=void 0===s?{}:s,!r||(0,u.default)(n)||!l.enabled){e.next=12;break}return e.abrupt("return");case 12:if(!d.muted){e.next=14;break}return e.abrupt("return");case 14:this._toggleVideoTracks();case 15:return e.prev=15,this._emitVideoPlayAttempt(),e.next=19,n.play();case 19:return this._emitVideoPlaySuccess(),e.abrupt("return");case 23:if(e.prev=23,e.t0=e.catch(15),this._emitVideoPlayFailure(),A=e.t0||{},Q=A.name,"AbortError"===Q&&this._playInterrupts++,!(this._playInterrupts>t)){e.next=33;break}return e.next=32,this.play();case 32:return e.abrupt("return");case 33:throw e.t0;case 34:case"end":return e.stop()}}),e,this,[[15,23]])})));return function(){return e.apply(this,arguments)}}(),l._bindToStream=function(e){this._stream=e,this._domElement.srcObject=e,this._domAudioOnlyVideoElement&&this.bindAudioTrackOnly()},l.bindToStream=function(){var e=(0,o.default)(i.default.mark((function e(t){var n,r,a,l=this;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._domElement){e.next=2;break}throw new Error("Can't bind because _domElement no longer exists");case 2:return this._bindToStream(t),(0,o.default)(i.default.mark((function e(){var n;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,l.play();case 3:e.next=26;break;case 5:if(e.prev=5,e.t0=e.catch(0),n=!!t.getAudioTracks().length,!l._hasAudioOnlyVideoElement()||"NotAllowedError"!==e.t0.name){e.next=15;break}return l._domAudioOnlyVideoElement.muted=!0,e.next=12,l.play();case 12:l._domAudioOnlyVideoElement.muted=!1,e.next=26;break;case 15:if(!n){e.next=23;break}return l._blockedVolume=l.getAudioVolume(),l._domElement.muted=!0,e.next=20,l.play();case 20:l.trigger("audioBlocked"),e.next=26;break;case 23:return l._domElement.muted=!0,e.next=26,l.play();case 26:case"end":return e.stop()}}),e,null,[[0,5]])})))().catch(e=>{this.logging.debug(".play() failed: ",e)}),n={width:this._domElement.videoWidth,height:this._domElement.videoHeight},this.trigger("videoDimensionsChanged",Object.assign({},n),Object.assign({},n)),this._domElementEvents.on("resize",()=>{const e=this._domElement,t=e.videoWidth,r=e.videoHeight,i=t!==n.width,o=r!==n.height;(i||o)&&(this.trigger("videoDimensionsChanged",Object.assign({},n),{width:t,height:r}),n.width=t,n.height=r)}),r=()=>{try{this._mediaStoppedListener.stop()}catch(e){return}this._domElement&&(this._domElement.onended=null),this.trigger("mediaStopped")},a=e=>{this.trigger("mediaStopped",e)},this._domElement.onended=()=>r(),this._mediaStoppedListener=Q(t,r,a),this._createAudioLevelSampler(),e.abrupt("return",void 0);case 13:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),l.unbindStream=function(){return this._domElement&&(this._domElement.srcObject=null),this._domAudioOnlyVideoElement&&(this._domAudioOnlyVideoElement.srcObject=null),this._removeAudioLevelSampler(),this},l.setAudioVolume=function(e){if(this.isAudioBlocked())return void(this._blockedVolume=e);const t=parseFloat(e)/100,n=[this.domElement()];this._domAudioOnlyVideoElement&&n.push(this._domAudioOnlyVideoElement),n.forEach(e=>{e&&(e.volume=t,e.muted=0===t)})},l.getAudioVolume=function(){if(this.isAudioBlocked())return this._blockedVolume;const e=this.domElement();return e?e.muted?0:100*e.volume:this._defaultAudioVolume},l.audioChannelType=function(e){const t=this.domElement();return void 0!==e&&(t.mozAudioChannelType=e),"mozAudioChannelType"in this._domElement?t.mozAudioChannelType:"unknown"},l.getAudioInputLevel=function(){return this._audioLevelSampler.sample()},l.refreshTracks=function(){this._mediaStoppedListener&&this._mediaStoppedListener.refresh(),this._createAudioLevelSampler()},l.destroy=function(){this._mediaStoppedListener&&this._mediaStoppedListener.stop(),this.logging.debug("removing domElementEvents"),this._domElementEvents.removeAll(),this._domAudioOnlyVideoElementEvents&&this._domAudioOnlyVideoElementEvents.removeAll(),null!=h.default&&h.default.isDev&&(0,R.removeMediaElementListeners)(this._domAudioOnlyVideoElement||this._domElement),this._audioOnlyVideoElementWatcher&&clearInterval(this._audioOnlyVideoElementWatcher),this.unbindStream(),this._domElement&&(f.removeElement(this._domElement),this._domElement=null),this._domAudioOnlyVideoElement&&(f.removeElement(this._domAudioOnlyVideoElement),this._domAudioOnlyVideoElement=null),this.trigger("destroyed"),(0,s.default)("NativeVideoElementWrapper",this)},l.setSinkId=function(t){const n=[this._domElement,this._domAudioOnlyVideoElement].map(e=>{if(e)return e.setSinkId(t)});return e.all(n)},t}()};t.default=W}).call(this,n(2))},function(e,t,n){var r=n(90),i=n(128);e.exports=function(e){return r((function(t,n){var r=-1,o=n.length,a=o>1?n[o-1]:void 0,l=o>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,l&&i(n[0],n[1],l)&&(a=o<3?void 0:a,o=1),t=Object(t);++r<o;){var c=n[r];c&&e(t,c,r,a)}return t}))}},function(e,t,n){var r=n(126),i=Math.max;e.exports=function(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){for(var o=arguments,a=-1,l=i(o.length-t,0),c=Array(l);++a<l;)c[a]=o[t+a];a=-1;for(var s=Array(t+1);++a<t;)s[a]=o[a];return s[t]=n(c),r(e,this,s)}}},function(e,t){var n=Date.now;e.exports=function(e){var t=0,r=0;return function(){var i=n(),o=16-(i-r);if(r=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){"use strict";e.exports=n(425)()?WeakMap:n(426)},function(e,t,n){"use strict";var r=Object.create,i=Object.getPrototypeOf,o={};e.exports=function(){var e=Object.setPrototypeOf,t=arguments[0]||r;return"function"==typeof e&&i(e(t(null),o))===o}},function(e,t,n){"use strict";var r,i=n(213),o=n(35),a=Object.prototype.isPrototypeOf,l=Object.defineProperty,c={configurable:!0,enumerable:!1,writable:!0,value:void 0};r=function(e,t){if(o(e),null===t||i(t))return e;throw new TypeError("Prototype must be null or an object")},e.exports=function(e){var t,n;return e?(2===e.level?e.set?(n=e.set,t=function(e,t){return n.call(r(e,t),t),e}):t=function(e,t){return r(e,t).__proto__=t,e}:t=function e(t,n){var i;return r(t,n),(i=a.call(e.nullPolyfill,t))&&delete e.nullPolyfill.__proto__,null===n&&(n=e.nullPolyfill),t.__proto__=n,i&&l(e.nullPolyfill,"__proto__",c),t},Object.defineProperty(t,"level",{configurable:!1,enumerable:!1,writable:!1,value:e.level})):null}(function(){var e,t=Object.create(null),n={},r=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__");if(r){try{(e=r.set).call(t,n)}catch(e){}if(Object.getPrototypeOf(t)===n)return{set:e,level:2}}return t.__proto__=n,Object.getPrototypeOf(t)===n?{level:2}:((t={}).__proto__=n,Object.getPrototypeOf(t)===n&&{level:1})}()),n(428)},function(e,t,n){"use strict";var r=n(46),i={function:!0,object:!0};e.exports=function(e){return r(e)&&i[typeof e]||!1}},function(e,t,n){"use strict";var r=n(431),i=/^\s*class[\s{/}]/,o=Function.prototype.toString;e.exports=function(e){return!!r(e)&&!i.test(o.call(e))}},function(e,t,n){"use strict";var r=n(46),i=Array.prototype.forEach,o=Object.create,a=function(e,t){var n;for(n in e)t[n]=e[n]};e.exports=function(e){var t=o(null);return i.call(arguments,(function(e){r(e)&&a(Object(e),t)})),t}},function(e,t,n){"use strict";e.exports=n(438)()?String.prototype.contains:n(439)},function(e,t,n){"use strict";var r=n(92),i=n(93),o=n(440),a=n(469),l=n(470),c=n(47).iterator;e.exports=function(e){return"function"==typeof l(e)[c]?e[c]():r(e)?new o(e):i(e)?new a(e):new o(e)}},function(e,t,n){"use strict";var r=n(445);e.exports=function(e){if(!r(e))throw new TypeError(e+" is not a symbol");return e}},function(e,t,n){"use strict";var r,i=n(449),o=n(133),a=n(70),l=n(35),c=n(36),s=n(450),d=n(47),u=Object.defineProperty,A=Object.defineProperties;e.exports=r=function(e,t){if(!(this instanceof r))throw new TypeError("Constructor requires 'new'");A(this,{__list__:c("w",l(e)),__context__:c("w",t),__nextIndex__:c("w",0)}),t&&(a(t.on),t.on("_add",this._onAdd),t.on("_delete",this._onDelete),t.on("_clear",this._onClear))},delete r.prototype.constructor,A(r.prototype,o({_next:c((function(){var e;if(this.__list__)return this.__redo__&&void 0!==(e=this.__redo__.shift())?e:this.__nextIndex__<this.__list__.length?this.__nextIndex__++:void this._unBind()})),next:c((function(){return this._createResult(this._next())})),_createResult:c((function(e){return void 0===e?{done:!0,value:void 0}:{done:!1,value:this._resolve(e)}})),_resolve:c((function(e){return this.__list__[e]})),_unBind:c((function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off("_add",this._onAdd),this.__context__.off("_delete",this._onDelete),this.__context__.off("_clear",this._onClear),this.__context__=null)})),toString:c((function(){return"[object "+(this[d.toStringTag]||"Object")+"]"}))},s({_onAdd:c((function(e){e>=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach((function(t,n){t>=e&&(this.__redo__[n]=++t)}),this),this.__redo__.push(e)):u(this,"__redo__",c("c",[e])))})),_onDelete:c((function(e){var t;e>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(t=this.__redo__.indexOf(e))&&this.__redo__.splice(t,1),this.__redo__.forEach((function(t,n){t>e&&(this.__redo__[n]=--t)}),this)))})),_onClear:c((function(){this.__redo__&&i.call(this.__redo__),this.__nextIndex__=0}))}))),u(r.prototype,d.iterator,c((function(){return this})))},function(e,t,n){"use strict";var r=n(57),i=n(132),o=n(452),a=n(453),l=function(e,t){return e.replace("%v",a(t))};e.exports=function(e,t,n){if(!i(n))throw new TypeError(l(t,e));if(!r(e)){if("default"in n)return n.default;if(n.isOptional)return null}var a=o(n.errorMessage);throw r(a)||(a=t),new TypeError(l(a,e))}},function(e,t,n){e.exports=n(480)},function(e,t,n){"use strict";e.exports=function(e,t){return function(){return e.apply(t,arguments)}}},function(e,t,n){"use strict";var r=n(13),i=n(224);function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a));var l,c=n&&n.encode||o,s=n&&n.serialize;return(l=s?s(t,n):r.isURLSearchParams(t)?t.toString():new i(t,n).toString(c))&&(e+=(-1===e.indexOf("?")?"?":"&")+l),e}},function(e,t,n){"use strict";var r=n(96);function i(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,(function(e){return t[e]}))}function o(e,t){this._pairs=[],e&&r(e,this,t)}var a=o.prototype;a.append=function(e,t){this._pairs.push([e,t])},a.toString=function(e){var t=e?function(t){return e.call(this,t,i)}:i;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")},e.exports=o},function(e,t,n){"use strict";
|
|
27
|
+
const Dn={};{const e=Dn;e[5120]=Int8Array,e[5121]=Uint8Array,e[5122]=Int16Array,e[5123]=Uint16Array,e[5124]=Int32Array,e[5125]=Uint32Array,e[5126]=Float32Array,e[32819]=Uint16Array,e[32820]=Uint16Array,e[33635]=Uint16Array,e[5131]=Uint16Array,e[33640]=Uint32Array,e[35899]=Uint32Array,e[35902]=Uint32Array,e[36269]=Uint32Array,e[34042]=Uint32Array}function xn(e){if(e instanceof Int8Array)return 5120;if(e instanceof Uint8Array||e instanceof Uint8ClampedArray)return 5121;if(e instanceof Int16Array)return 5122;if(e instanceof Uint16Array)return 5123;if(e instanceof Int32Array)return 5124;if(e instanceof Uint32Array)return 5125;if(e instanceof Float32Array)return 5126;throw new Error("unsupported typed array type")}function Mn(e){if(e===Int8Array)return 5120;if(e===Uint8Array||e===Uint8ClampedArray)return 5121;if(e===Int16Array)return 5122;if(e===Uint16Array)return 5123;if(e===Int32Array)return 5124;if(e===Uint32Array)return 5125;if(e===Float32Array)return 5126;throw new Error("unsupported typed array type")}function Hn(e){const t=Dn[e];if(!t)throw new Error("unknown gl type");return t}const Kn=typeof SharedArrayBuffer<"u"?function(e){return e&&e.buffer&&(e.buffer instanceof ArrayBuffer||e.buffer instanceof SharedArrayBuffer)}:function(e){return e&&e.buffer&&e.buffer instanceof ArrayBuffer};function Ln(){console.error(...arguments)}const zn=new Map;function On(e,t){if(!e||"object"!=typeof e)return!1;let n=zn.get(t);n||(n=new WeakMap,zn.set(t,n));let r=n.get(e);if(void 0===r){const i=Object.prototype.toString.call(e);r=i.substring(8,i.length-1)===t,n.set(e,r)}return r}function jn(e,t){return typeof WebGLTexture<"u"&&On(t,"WebGLTexture")}const Pn=34962,_n="";function qn(e,t,n,r){if(function(e,t){return typeof WebGLBuffer<"u"&&On(t,"WebGLBuffer")}(0,t))return t;n=n||Pn;const i=e.createBuffer();return function(e,t,n,r,i){e.bindBuffer(t,n),e.bufferData(t,r,i||35044)}(e,n,i,t,r),i}function $n(e){return"indices"===e}const er=/coord|texture/i,tr=/color|colour/i;function nr(e,t,n){return e.numComponents||e.size||function(e,t){let n;if(n=er.test(e)?2:tr.test(e)?4:3,t%n>0)throw new Error(`Can not guess numComponents for attribute '${e}'. Tried ${n} but ${t} values is not evenly divisible by ${n}. You should specify it.`);return n}(t,n||function(e){return e.length?e:e.data}(e).length)}function rr(e,t){if(Kn(e))return e;if(Kn(e.data))return e.data;Array.isArray(e)&&(e={data:e});let n=e.type?or(e.type):void 0;return n||(n=$n(t)?Uint16Array:Float32Array),new n(e.data)}function ir(e){return"number"==typeof e?e:e?Mn(e):5126}function or(e){return"number"==typeof e?Hn(e):e||Float32Array}function ar(e,t){return{buffer:t.buffer,numValues:24,type:ir(t.type),arrayType:or(t.type)}}function lr(e,t){const n=t.data||t,r=or(t.type),i=n*r.BYTES_PER_ELEMENT,o=e.createBuffer();return e.bindBuffer(Pn,o),e.bufferData(Pn,i,t.drawType||35044),{buffer:o,numValues:n,type:Mn(r),arrayType:r}}function cr(e,t,n){const r=rr(t,n);return{arrayType:r.constructor,buffer:qn(e,r,void 0,t.drawType),type:xn(r),numValues:0}}function sr(e,t){const n={};return Object.keys(t).forEach((function(r){if(!$n(r)){const i=t[r],o=i.attrib||i.name||i.attribName||_n+r;if(i.value){if(!Array.isArray(i.value)&&!Kn(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let t;t=i.buffer&&i.buffer instanceof WebGLBuffer?ar:"number"==typeof i||"number"==typeof i.data?lr:cr;const a=t(e,i,r),l=a.buffer,c=a.type,s=a.numValues,d=a.arrayType,u=void 0!==i.normalize?i.normalize:function(e){return e===Int8Array||e===Uint8Array}(d),A=nr(i,r,s);n[o]={buffer:l,numComponents:A,type:c,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:void 0===i.divisor?void 0:i.divisor,drawType:i.drawType}}}})),e.bindBuffer(Pn,null),n}const dr=["position","positions","a_position"];function ur(e,t,n){const r=sr(e,t),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=t.indices;if(o){const t=rr(o,"indices");i.indices=qn(e,t,34963),i.numElements=t.length,i.elementType=xn(t)}else i.numElements||(i.numElements=function(e,t){let n,r;for(r=0;r<dr.length&&(n=dr[r],!(n in t)&&(n=_n+n,!(n in t)));++r);r===dr.length&&(n=Object.keys(t)[0]);const i=t[n];if(!i.buffer)return 1;e.bindBuffer(Pn,i.buffer);const o=e.getBufferParameter(Pn,34660);e.bindBuffer(Pn,null);const a=o/function(e,t){return 5120===t||5121===t?1:5122===t||5123===t?2:5124===t||5125===t||5126===t?4:0}(0,i.type),l=i.numComponents||i.size,c=a/l;if(c%1!=0)throw new Error(`numComponents ${l} not correct for length ${length}`);return c}(e,i.attribs));return i}function Ar(e){return!!e.texStorage2D}const hr=function(){const e={},t={};return function(n,r){return function(n){const r=n.constructor.name;if(!e[r]){for(const e in n)if("number"==typeof n[e]){const r=t[n[e]];t[n[e]]=r?`${r} | ${e}`:e}e[r]=!0}}(n),t[r]||("number"==typeof r?"0x"+r.toString(16):r)}}(),gr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Qr=Kn,Fr=function(){let e;return function(){return e=e||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),e}}(),pr=6407,Ur=6408,mr=6402,br=33071,Br=3553,Zr=34067,fr=32879,Rr=35866,Ir=10242,yr=10243,Vr=5120,Cr=5121,Wr=5123,Er=5125,Sr=5126,vr=5131,Jr=36193,Nr=33319,Gr=33320,Xr=6403,kr=36244,Tr=36248,Yr=36249;{const e={};e[6406]={numColorComponents:1},e[6409]={numColorComponents:1},e[6410]={numColorComponents:2},e[pr]={numColorComponents:3},e[Ur]={numColorComponents:4},e[Xr]={numColorComponents:1},e[kr]={numColorComponents:1},e[Nr]={numColorComponents:2},e[Gr]={numColorComponents:2},e[pr]={numColorComponents:3},e[Tr]={numColorComponents:3},e[Ur]={numColorComponents:4},e[Yr]={numColorComponents:4},e[mr]={numColorComponents:1},e[34041]={numColorComponents:2}}let wr;function Dr(e){if(!wr){const e={};e[6406]={textureFormat:6406,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Cr,vr,Jr,Sr]},e[6409]={textureFormat:6409,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Cr,vr,Jr,Sr]},e[6410]={textureFormat:6410,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[Cr,vr,Jr,Sr]},e[pr]={textureFormat:pr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[Cr,vr,Jr,Sr,33635]},e[Ur]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[Cr,vr,Jr,Sr,32819,32820]},e[mr]={textureFormat:mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Er,Wr]},e[33321]={textureFormat:Xr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[Cr]},e[36756]={textureFormat:Xr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[Vr]},e[33325]={textureFormat:Xr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Sr,vr]},e[33326]={textureFormat:Xr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Sr]},e[33330]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Cr]},e[33329]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Vr]},e[33332]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Wr]},e[33331]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[5122]},e[33334]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Er]},e[33333]={textureFormat:kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5124]},e[33323]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[Cr]},e[36757]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[Vr]},e[33327]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Sr,vr]},e[33328]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Sr]},e[33336]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Cr]},e[33335]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Vr]},e[33338]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},e[33337]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5122]},e[33340]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Er]},e[33339]={textureFormat:Gr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[5124]},e[32849]={textureFormat:pr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[Cr]},e[35905]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Cr]},e[36194]={textureFormat:pr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[Cr,33635]},e[36758]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Vr]},e[35898]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Sr,vr,35899]},e[35901]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Sr,vr,35902]},e[34843]={textureFormat:pr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Sr,vr]},e[34837]={textureFormat:pr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Sr]},e[36221]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Cr]},e[36239]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Vr]},e[36215]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Wr]},e[36233]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[5122]},e[36209]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Er]},e[36227]={textureFormat:Tr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[5124]},e[32856]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Cr]},e[35907]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Cr]},e[36759]={textureFormat:Ur,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[Vr]},e[32855]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[Cr,32820,33640]},e[32854]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[Cr,32819]},e[32857]={textureFormat:Ur,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[33640]},e[34842]={textureFormat:Ur,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Sr,vr]},e[34836]={textureFormat:Ur,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Sr]},e[36220]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Cr]},e[36238]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Vr]},e[36975]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[33640]},e[36214]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Wr]},e[36232]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[5122]},e[36226]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[5124]},e[36208]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Er]},e[33189]={textureFormat:mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Wr,Er]},e[33190]={textureFormat:mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Er]},e[36012]={textureFormat:mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Sr]},e[35056]={textureFormat:34041,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[34042]},e[36013]={textureFormat:34041,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[36269]},Object.keys(e).forEach((function(t){const n=e[t];n.bytesPerElementMap={},n.bytesPerElement.forEach((function(e,t){const r=n.type[t];n.bytesPerElementMap[r]=e}))})),wr=e}return wr[e]}function xr(e){const t=Dr(e);if(!t)throw"unknown internal format";return{format:t.textureFormat,type:t.type[0]}}function Mr(e){return 0==(e&e-1)}function Hr(e,t,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(n||r){if(r){if(!n&&(n=i/r)%1)throw"can't guess dimensions"}else if((r=i/n)%1)throw"can't guess dimensions"}else{const e=Math.sqrt(i/(t===Zr?6:1));e%1==0?(n=e,r=e):(n=i,r=1)}return{width:n,height:r}}function Kr(e,t){void 0!==t.colorspaceConversion&&e.pixelStorei(37443,t.colorspaceConversion),void 0!==t.premultiplyAlpha&&e.pixelStorei(37441,t.premultiplyAlpha),void 0!==t.flipY&&e.pixelStorei(37440,t.flipY)}function Lr(e){e.pixelStorei(3317,4),Ar(e)&&(e.pixelStorei(3314,0),e.pixelStorei(32878,0),e.pixelStorei(3316,0),e.pixelStorei(3315,0),e.pixelStorei(32877,0))}function zr(e,t,n,r){r.minMag&&(n.call(e,t,10241,r.minMag),n.call(e,t,10240,r.minMag)),r.min&&n.call(e,t,10241,r.min),r.mag&&n.call(e,t,10240,r.mag),r.wrap&&(n.call(e,t,Ir,r.wrap),n.call(e,t,yr,r.wrap),(t===fr||function(e,t){return typeof WebGLSampler<"u"&&On(t,"WebGLSampler")}(0,t))&&n.call(e,t,32882,r.wrap)),r.wrapR&&n.call(e,t,32882,r.wrapR),r.wrapS&&n.call(e,t,Ir,r.wrapS),r.wrapT&&n.call(e,t,yr,r.wrapT),void 0!==r.minLod&&n.call(e,t,33082,r.minLod),void 0!==r.maxLod&&n.call(e,t,33083,r.maxLod),void 0!==r.baseLevel&&n.call(e,t,33084,r.baseLevel),void 0!==r.maxLevel&&n.call(e,t,33085,r.maxLevel),void 0!==r.compareFunc&&n.call(e,t,34893,r.compareFunc),void 0!==r.compareMode&&n.call(e,t,34892,r.compareMode)}function Or(e,t,n){const r=n.target||Br;e.bindTexture(r,t),zr(e,r,e.texParameteri,n)}function jr(e,t,n,r,i,o){o=o||Ur;const a=(n=n||gr.textureOptions).target||Br;if(r=r||n.width,i=i||n.height,e.bindTexture(a,t),function(e,t,n,r){if(!Ar(e))return Mr(t)&&Mr(n);const i=Dr(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}(e,r,i,o))e.generateMipmap(a);else{const t=function(e){const t=Dr(e);if(!t)throw"unknown internal format";return t.textureFilterable}(o)?9729:9728;e.texParameteri(a,10241,t),e.texParameteri(a,10240,t),e.texParameteri(a,Ir,br),e.texParameteri(a,yr,br)}}function Pr(e){return!0===e.auto||void 0===e.auto&&void 0===e.level}function _r(e,t){return(t=t||{}).cubeFaceOrder||[34069,34070,34071,34072,34073,34074]}function qr(e,t){const n=_r(0,t).map((function(e,t){return{face:e,ndx:t}}));return n.sort((function(e,t){return e.face-t.face})),n}function $r(e,t,n,r){const i=(r=r||gr.textureOptions).target||Br,o=r.level||0;let a=n.width,l=n.height;const c=r.internalFormat||r.format||Ur,s=xr(c),d=r.format||s.format,u=r.type||s.type;if(Kr(e,r),e.bindTexture(i,t),i===Zr){const s=n.width,A=n.height;let h,g;if(s/6===A)h=A,g=[0,0,1,0,2,0,3,0,4,0,5,0];else if(A/6===s)h=s,g=[0,0,0,1,0,2,0,3,0,4,0,5];else if(s/3==A/2)h=s/3,g=[0,0,1,0,2,0,0,1,1,1,2,1];else{if(s/2!=A/3)throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);h=s/2,g=[0,0,1,0,0,1,1,1,0,2,1,2]}const Q=Fr();Q?(Q.canvas.width=h,Q.canvas.height=h,a=h,l=h,qr(0,r).forEach((function(t){const r=g[2*t.ndx+0]*h,i=g[2*t.ndx+1]*h;Q.drawImage(n,r,i,h,h,0,0,h,h),e.texImage2D(t.face,o,c,d,u,Q.canvas)})),Q.canvas.width=1,Q.canvas.height=1):typeof createImageBitmap<"u"&&(a=h,l=h,qr(0,r).forEach((function(s){const A=g[2*s.ndx+0]*h,Q=g[2*s.ndx+1]*h;e.texImage2D(s.face,o,c,h,h,0,d,u,null),createImageBitmap(n,A,Q,h,h,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then((function(n){Kr(e,r),e.bindTexture(i,t),e.texImage2D(s.face,o,c,d,u,n),Pr(r)&&jr(e,t,r,a,l,c)}))})))}else if(i===fr||i===Rr){const t=Math.min(n.width,n.height),r=Math.max(n.width,n.height),a=r/t;if(a%1!=0)throw"can not compute 3D dimensions of element";const l=n.width===r?1:0,s=n.height===r?1:0;e.pixelStorei(3317,1),e.pixelStorei(3314,n.width),e.pixelStorei(32878,0),e.pixelStorei(32877,0),e.texImage3D(i,o,c,t,t,t,0,d,u,null);for(let r=0;r<a;++r){const a=r*t*l,c=r*t*s;e.pixelStorei(3316,a),e.pixelStorei(3315,c),e.texSubImage3D(i,o,0,0,r,t,t,1,d,u,n)}Lr(e)}else e.texImage2D(i,o,c,d,u,n);Pr(r)&&jr(e,t,r,a,l,c),Or(e,t,r)}function ei(){}function ti(e,t){return void 0!==t||function(e){if(typeof document<"u"){const t=document.createElement("a");return t.href=e,t.hostname===location.hostname&&t.port===location.port&&t.protocol===location.protocol}{const t=new URL(location.href).origin;return new URL(e,location.href).origin===t}}(e)?t:"anonymous"}function ni(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap||typeof ImageData<"u"&&e instanceof ImageData||typeof HTMLElement<"u"&&e instanceof HTMLElement}function ri(e,t,n){return ni(e)?(setTimeout((function(){n(null,e)})),e):function(e,t,n){let r;if(n=n||ei,t=ti(e,t=void 0!==t?t:gr.crossOrigin),typeof Image<"u"){r=new Image,void 0!==t&&(r.crossOrigin=t);const i=function(){r.removeEventListener("error",o),r.removeEventListener("load",a),r=null},o=function(){const t="couldn't load image: "+e;Ln(t),n(t,r),i()},a=function(){n(null,r),i()};return r.addEventListener("error",o),r.addEventListener("load",a),r.src=e,r}if(typeof ImageBitmap<"u"){let i,o;const a=function(){n(i,o)},l={};t&&(l.mode="cors"),fetch(e,l).then((function(e){if(!e.ok)throw e;return e.blob()})).then((function(e){return createImageBitmap(e,{premultiplyAlpha:"none",colorSpaceConversion:"none"})})).then((function(e){o=e,setTimeout(a)})).catch((function(e){i=e,setTimeout(a)})),r=null}return r}(e,t,n)}function ii(e,t,n){const r=(n=n||gr.textureOptions).target||Br;if(e.bindTexture(r,t),!1===n.color)return;const i=function(e){return Qr(e=e||gr.textureColor)?e:new Uint8Array([255*e[0],255*e[1],255*e[2],255*e[3]])}(n.color);if(r===Zr)for(let t=0;t<6;++t)e.texImage2D(34069+t,0,Ur,1,1,0,Ur,Cr,i);else r===fr||r===Rr?e.texImage3D(r,0,Ur,1,1,1,0,Ur,Cr,i):e.texImage2D(r,0,Ur,1,1,0,Ur,Cr,i)}function oi(e,t,n,r){r=r||ei;const i=n.src;if(6!==i.length)throw"there must be 6 urls for a cubemap";const o=n.level||0,a=n.internalFormat||n.format||Ur,l=xr(a),c=n.format||l.format,s=n.type||Cr,d=n.target||Br;if(d!==Zr)throw"target must be TEXTURE_CUBE_MAP";ii(e,t,n),n=Object.assign({},n);let u=6;const A=[],h=_r(0,n);let g;g=i.map((function(i,l){return ri(i,n.crossOrigin,function(i){return function(l,h){--u,l?A.push(l):h.width!==h.height?A.push("cubemap face img is not a square: "+h.src):(Kr(e,n),e.bindTexture(d,t),5===u?_r().forEach((function(t){e.texImage2D(t,o,a,c,s,h)})):e.texImage2D(i,o,a,c,s,h),Pr(n)&&e.generateMipmap(d)),0===u&&r(A.length?A:void 0,t,g)}}(h[l]))}))}function ai(e,t,n,r){r=r||ei;const i=n.src,o=n.internalFormat||n.format||Ur,a=xr(o),l=n.format||a.format,c=n.type||Cr,s=n.target||Rr;if(s!==fr&&s!==Rr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";ii(e,t,n),n=Object.assign({},n);let d=i.length;const u=[];let A;const h=n.level||0;let g=n.width,Q=n.height;const F=i.length;let p=!0;A=i.map((function(i,a){return ri(i,n.crossOrigin,function(i){return function(a,U){if(--d,a)u.push(a);else{if(Kr(e,n),e.bindTexture(s,t),p){p=!1,g=n.width||U.width,Q=n.height||U.height,e.texImage3D(s,h,o,g,Q,F,0,l,c,null);for(let t=0;t<F;++t)e.texSubImage3D(s,h,0,0,t,g,Q,1,l,c,U)}else{let t,n=U;(U.width!==g||U.height!==Q)&&(t=Fr(),n=t.canvas,t.canvas.width=g,t.canvas.height=Q,t.drawImage(U,0,0,g,Q)),e.texSubImage3D(s,h,0,0,i,g,Q,1,l,c,n),t&&n===t.canvas&&(t.canvas.width=0,t.canvas.height=0)}Pr(n)&&e.generateMipmap(s)}0===d&&r(u.length?u:void 0,t,A)}}(a))}))}function li(e,t,n,r){const i=(r=r||gr.textureOptions).target||Br;e.bindTexture(i,t);let o=r.width,a=r.height,l=r.depth;const c=r.level||0,s=r.internalFormat||r.format||Ur,d=xr(s),u=r.format||d.format,A=r.type||function(e,t,n){return Qr(t)?xn(t):n||Cr}(0,n,d.type);if(Qr(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const e=Hn(A);n=new e(n)}const h=function(e,t){const n=Dr(e);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[t];if(void 0===r)throw"unknown internal format";return r}(s,A),g=n.byteLength/h;if(g%1)throw"length wrong size for format: "+hr(e,u);let Q;if(i===fr||i===Rr)if(o||a||l)!o||a&&l?!a||o&&l?(Q=Hr(0,i,o,a,g/l),o=Q.width,a=Q.height):(Q=Hr(0,i,o,l,g/a),o=Q.width,l=Q.height):(Q=Hr(0,i,a,l,g/o),a=Q.width,l=Q.height);else{const e=Math.cbrt(g);if(e%1!=0)throw"can't guess cube size of array of numElements: "+g;o=e,a=e,l=e}else Q=Hr(0,i,o,a,g),o=Q.width,a=Q.height;if(Lr(e),e.pixelStorei(3317,r.unpackAlignment||1),Kr(e,r),i===Zr){const t=g/6*(h/n.BYTES_PER_ELEMENT);qr(0,r).forEach(r=>{const i=t*r.ndx,l=n.subarray(i,i+t);e.texImage2D(r.face,c,s,o,a,0,u,A,l)})}else i===fr||i===Rr?e.texImage3D(i,c,s,o,a,l,0,u,A,n):e.texImage2D(i,c,s,o,a,0,u,A,n);return{width:o,height:a,depth:l,type:A}}function ci(e,t,n){n=n||ei,t=t||gr.textureOptions;const r=e.createTexture(),i=t.target||Br;let o=t.width||1,a=t.height||1;const l=t.internalFormat||Ur;e.bindTexture(i,r),i===Zr&&(e.texParameteri(i,Ir,br),e.texParameteri(i,yr,br));let c=t.src;if(c)if("function"==typeof c&&(c=c(e,t)),"string"==typeof c)!function(e,t,n,r){r=r||ei,ii(e,t,n=n||gr.textureOptions),ri((n=Object.assign({},n)).src,n.crossOrigin,(function(i,o){i?r(i,t,o):($r(e,t,o,n),r(null,t,o))}))}(e,r,t,n);else if(Qr(c)||Array.isArray(c)&&("number"==typeof c[0]||Array.isArray(c[0])||Qr(c[0]))){const n=li(e,r,c,t);o=n.width,a=n.height}else Array.isArray(c)&&("string"==typeof c[0]||ni(c[0]))?i===Zr?oi(e,r,t,n):ai(e,r,t,n):($r(e,r,c,t),o=c.width,a=c.height);else!function(e,t,n){const r=n.target||Br;e.bindTexture(r,t);const i=n.level||0,o=n.internalFormat||n.format||Ur,a=xr(o),l=n.format||a.format,c=n.type||a.type;if(Kr(e,n),r===Zr)for(let t=0;t<6;++t)e.texImage2D(34069+t,i,o,n.width,n.height,0,l,c,null);else r===fr||r===Rr?e.texImage3D(r,i,o,n.width,n.height,n.depth,0,l,c,null):e.texImage2D(r,i,o,n.width,n.height,0,l,c,null)}(e,r,t);return Pr(t)&&jr(e,r,t,o,a,l),Or(e,r,t),r}const si=Ln;function di(e){return typeof document<"u"&&document.getElementById?document.getElementById(e):null}const ui=33984,Ai=34962,hi=34067,gi=35866,Qi={};function Fi(e,t){return Qi[t].bindPoint}function pi(e,t){return function(n){e.uniform1i(t,n)}}function Ui(e,t){return function(n){e.uniform1iv(t,n)}}function mi(e,t){return function(n){e.uniform2iv(t,n)}}function bi(e,t){return function(n){e.uniform3iv(t,n)}}function Bi(e,t){return function(n){e.uniform4iv(t,n)}}function Zi(e,t,n,r){const i=Fi(0,t);return Ar(e)?function(t){let o,a;!t||jn(0,t)?(o=t,a=null):(o=t.texture,a=t.sampler),e.uniform1i(r,n),e.activeTexture(ui+n),e.bindTexture(i,o),e.bindSampler(n,a)}:function(t){e.uniform1i(r,n),e.activeTexture(ui+n),e.bindTexture(i,t)}}function fi(e,t,n,r,i){const o=Fi(0,t),a=new Int32Array(i);for(let e=0;e<i;++e)a[e]=n+e;return Ar(e)?function(t){e.uniform1iv(r,a),t.forEach((function(t,r){let i,l;e.activeTexture(ui+a[r]),!t||jn(0,t)?(i=t,l=null):(i=t.texture,l=t.sampler),e.bindSampler(n,l),e.bindTexture(o,i)}))}:function(t){e.uniform1iv(r,a),t.forEach((function(t,n){e.activeTexture(ui+a[n]),e.bindTexture(o,t)}))}}function Ri(e,t){return function(n){if(n.value)switch(e.disableVertexAttribArray(t),n.value.length){case 4:e.vertexAttrib4fv(t,n.value);break;case 3:e.vertexAttrib3fv(t,n.value);break;case 2:e.vertexAttrib2fv(t,n.value);break;case 1:e.vertexAttrib1fv(t,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else e.bindBuffer(Ai,n.buffer),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n.numComponents||n.size,n.type||5126,n.normalize||!1,n.stride||0,n.offset||0),e.vertexAttribDivisor&&e.vertexAttribDivisor(t,n.divisor||0)}}function Ii(e,t){return function(n){if(n.value){if(e.disableVertexAttribArray(t),4!==n.value.length)throw new Error("The length of an integer constant value must be 4!");e.vertexAttrib4iv(t,n.value)}else e.bindBuffer(Ai,n.buffer),e.enableVertexAttribArray(t),e.vertexAttribIPointer(t,n.numComponents||n.size,n.type||5124,n.stride||0,n.offset||0),e.vertexAttribDivisor&&e.vertexAttribDivisor(t,n.divisor||0)}}function yi(e,t){return function(n){if(n.value){if(e.disableVertexAttribArray(t),4!==n.value.length)throw new Error("The length of an unsigned integer constant value must be 4!");e.vertexAttrib4uiv(t,n.value)}else e.bindBuffer(Ai,n.buffer),e.enableVertexAttribArray(t),e.vertexAttribIPointer(t,n.numComponents||n.size,n.type||5125,n.stride||0,n.offset||0),e.vertexAttribDivisor&&e.vertexAttribDivisor(t,n.divisor||0)}}function Vi(e,t,n){const r=n.size,i=n.count;return function(n){e.bindBuffer(Ai,n.buffer);const o=n.size||n.numComponents||r,a=o/i,l=n.type||5126,c=Qi[l].size*o,s=n.normalize||!1,d=n.offset||0,u=c/i;for(let r=0;r<i;++r)e.enableVertexAttribArray(t+r),e.vertexAttribPointer(t+r,a,l,s,c,d+u*r),e.vertexAttribDivisor&&e.vertexAttribDivisor(t+r,n.divisor||0)}}Qi[5126]={Type:Float32Array,size:4,setter:function(e,t){return function(n){e.uniform1f(t,n)}},arraySetter:function(e,t){return function(n){e.uniform1fv(t,n)}}},Qi[35664]={Type:Float32Array,size:8,setter:function(e,t){return function(n){e.uniform2fv(t,n)}},cols:2},Qi[35665]={Type:Float32Array,size:12,setter:function(e,t){return function(n){e.uniform3fv(t,n)}},cols:3},Qi[35666]={Type:Float32Array,size:16,setter:function(e,t){return function(n){e.uniform4fv(t,n)}},cols:4},Qi[5124]={Type:Int32Array,size:4,setter:pi,arraySetter:Ui},Qi[35667]={Type:Int32Array,size:8,setter:mi,cols:2},Qi[35668]={Type:Int32Array,size:12,setter:bi,cols:3},Qi[35669]={Type:Int32Array,size:16,setter:Bi,cols:4},Qi[5125]={Type:Uint32Array,size:4,setter:function(e,t){return function(n){e.uniform1ui(t,n)}},arraySetter:function(e,t){return function(n){e.uniform1uiv(t,n)}}},Qi[36294]={Type:Uint32Array,size:8,setter:function(e,t){return function(n){e.uniform2uiv(t,n)}},cols:2},Qi[36295]={Type:Uint32Array,size:12,setter:function(e,t){return function(n){e.uniform3uiv(t,n)}},cols:3},Qi[36296]={Type:Uint32Array,size:16,setter:function(e,t){return function(n){e.uniform4uiv(t,n)}},cols:4},Qi[35670]={Type:Uint32Array,size:4,setter:pi,arraySetter:Ui},Qi[35671]={Type:Uint32Array,size:8,setter:mi,cols:2},Qi[35672]={Type:Uint32Array,size:12,setter:bi,cols:3},Qi[35673]={Type:Uint32Array,size:16,setter:Bi,cols:4},Qi[35674]={Type:Float32Array,size:32,setter:function(e,t){return function(n){e.uniformMatrix2fv(t,!1,n)}},rows:2,cols:2},Qi[35675]={Type:Float32Array,size:48,setter:function(e,t){return function(n){e.uniformMatrix3fv(t,!1,n)}},rows:3,cols:3},Qi[35676]={Type:Float32Array,size:64,setter:function(e,t){return function(n){e.uniformMatrix4fv(t,!1,n)}},rows:4,cols:4},Qi[35685]={Type:Float32Array,size:32,setter:function(e,t){return function(n){e.uniformMatrix2x3fv(t,!1,n)}},rows:2,cols:3},Qi[35686]={Type:Float32Array,size:32,setter:function(e,t){return function(n){e.uniformMatrix2x4fv(t,!1,n)}},rows:2,cols:4},Qi[35687]={Type:Float32Array,size:48,setter:function(e,t){return function(n){e.uniformMatrix3x2fv(t,!1,n)}},rows:3,cols:2},Qi[35688]={Type:Float32Array,size:48,setter:function(e,t){return function(n){e.uniformMatrix3x4fv(t,!1,n)}},rows:3,cols:4},Qi[35689]={Type:Float32Array,size:64,setter:function(e,t){return function(n){e.uniformMatrix4x2fv(t,!1,n)}},rows:4,cols:2},Qi[35690]={Type:Float32Array,size:64,setter:function(e,t){return function(n){e.uniformMatrix4x3fv(t,!1,n)}},rows:4,cols:3},Qi[35678]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:3553},Qi[35680]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:hi},Qi[35679]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:32879},Qi[35682]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:3553},Qi[36289]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:gi},Qi[36292]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:gi},Qi[36293]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:hi},Qi[36298]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:3553},Qi[36299]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:32879},Qi[36300]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:hi},Qi[36303]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:gi},Qi[36306]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:3553},Qi[36307]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:32879},Qi[36308]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:hi},Qi[36311]={Type:null,size:0,setter:Zi,arraySetter:fi,bindPoint:gi};const Ci={};Ci[5126]={size:4,setter:Ri},Ci[35664]={size:8,setter:Ri},Ci[35665]={size:12,setter:Ri},Ci[35666]={size:16,setter:Ri},Ci[5124]={size:4,setter:Ii},Ci[35667]={size:8,setter:Ii},Ci[35668]={size:12,setter:Ii},Ci[35669]={size:16,setter:Ii},Ci[5125]={size:4,setter:yi},Ci[36294]={size:8,setter:yi},Ci[36295]={size:12,setter:yi},Ci[36296]={size:16,setter:yi},Ci[35670]={size:4,setter:Ii},Ci[35671]={size:8,setter:Ii},Ci[35672]={size:12,setter:Ii},Ci[35673]={size:16,setter:Ii},Ci[35674]={size:4,setter:Vi,count:2},Ci[35675]={size:9,setter:Vi,count:3},Ci[35676]={size:16,setter:Vi,count:4};const Wi=/ERROR:\s*\d+:(\d+)/gi;const Ei=/^[ \t]*\n/;function Si(e){let t=0;return Ei.test(e)&&(t=1,e=e.replace(Ei,"")),{lineOffset:t,shaderSource:e}}function vi(e,t,n,r){if(r=r||si,!e.getShaderParameter(n,35713)){const i=e.getShaderInfoLog(n),o=Si(e.getShaderSource(n)),a=o.lineOffset,l=`${function(e,t,n){void 0===t&&(t=""),void 0===n&&(n=0);const r=[...t.matchAll(Wi)],i=new Map(r.map((e,n)=>{const i=parseInt(e[1]),o=r[n+1],a=o?o.index:t.length;return[i-1,t.substring(e.index,a)]}));return e.split("\n").map((e,t)=>{const r=i.get(t);return`${t+1+n}: ${e}${r?"\n\n^^^ "+r:""}`}).join("\n")}(o.shaderSource,i,a)}\nError compiling ${hr(e,t)}: ${i}`;return r(l),l}return""}function Ji(e,t,n){let r,i,o;if("function"==typeof t&&(n=t,t=void 0),"function"==typeof e)n=e,e=void 0;else if(e&&!Array.isArray(e)){const t=e;n=t.errorCallback,e=t.attribLocations,r=t.transformFeedbackVaryings,i=t.transformFeedbackMode,o=t.callback}const a=n||si,l=[],c={errorCallback(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];l.push(e),a(e,...n)},transformFeedbackVaryings:r,transformFeedbackMode:i,callback:o,errors:l};{let n={};Array.isArray(e)?e.forEach((function(e,r){n[e]=t?t[r]:r})):n=e||{},c.attribLocations=n}return c}const Ni=["VERTEX_SHADER","FRAGMENT_SHADER"];function Gi(e,t){return t.indexOf("frag")>=0?35632:t.indexOf("vert")>=0?35633:void 0}const Xi=function(t){return void 0===t&&(t=0),new e(e=>setTimeout(e,t))};function ki(e,t,n,r,i){const o=Ji(n,r,i),a=new Set(t),l=function(e,t,n){const r=e.createProgram(),i=Ji(n),o=i.attribLocations,a=i.transformFeedbackVaryings,l=i.transformFeedbackMode;for(let n=0;n<t.length;++n){let i=t[n];if("string"==typeof i){const t=di(i),o=t?t.text:i;let a=e[Ni[n]];t&&t.type&&(a=Gi(0,t.type)||a),i=e.createShader(a),e.shaderSource(i,Si(o).shaderSource),e.compileShader(i),e.attachShader(r,i)}}Object.entries(o).forEach(t=>{let n=t[0],i=t[1];return e.bindAttribLocation(r,i,n)});{let t=a;t&&(t.attribs&&(t=t.attribs),Array.isArray(t)||(t=Object.keys(t)),e.transformFeedbackVaryings(r,t,l||35981))}return e.linkProgram(r),r}(e,t,o);function c(e,t){const n=function(e,t,n){if(n=n||si,!e.getProgramParameter(t,35714)){const r=e.getProgramInfoLog(t);n("Error in program linking: "+r);const i=e.getAttachedShaders(t).map(t=>vi(e,e.getShaderParameter(t,e.SHADER_TYPE),t,n));return`${r}\n${i.filter(e=>e).join("\n")}`}}(e,t,o.errorCallback);return n&&function(e,t,n){for(var r,i=A(e.getAttachedShaders(t));!(r=i()).done;){const t=r.value;n.has(t)&&e.deleteShader(t)}e.deleteProgram(t)}(e,t,a),n}if(!o.callback)return c(e,l)?void 0:l;(function(e,t){return Ti.apply(this,arguments)})(e,l).then(()=>{const t=c(e,l);o.callback(t,t?void 0:l)})}function Ti(){return(Ti=(0,c.default)(o.default.mark((function e(t,n){var r,i,a;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=t.getExtension("KHR_parallel_shader_compile"),i=r?(e,t)=>e.getProgramParameter(t,r.COMPLETION_STATUS_KHR):()=>!0,a=0;case 2:return e.next=4,Xi(a);case 4:a=1e3/60;case 5:if(!i(t,n)){e.next=2;break}case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Yi(e){const t=e.name;return t.startsWith("gl_")||t.startsWith("webgl_")}const wi=/(\.|\[|]|\w+)/g,Di=e=>e>="0"&&e<="9";function xi(e,t,n,r){const i=e.split(wi).filter(e=>""!==e);let o=0,a="";for(;;){const e=i[o++];a+=e;const l=Di(e[0]),c=l?parseInt(e):e;if(l&&(a+=i[o++]),o===i.length){n[c]=t;break}{const e=i[o++],t="["===e,l=n[c]||(t?[]:{});n[c]=l,n=l,r[a]=r[a]||function(e){return function(t){Mi(e,t)}}(l),a+=e}}}function Mi(e,t){for(const n in t){const r=e[n];"function"==typeof r?r(t[n]):Mi(e[n],t[n])}}function Hi(e,t){const n=function(e,t){let n=0;function r(t,r,i){const o=r.name.endsWith("[0]"),a=r.type,l=Qi[a];if(!l)throw new Error("unknown type: 0x"+a.toString(16));let c;if(l.bindPoint){const t=n;n+=r.size,c=o?l.arraySetter(e,a,t,i,r.size):l.setter(e,a,t,i,r.size)}else c=l.arraySetter&&o?l.arraySetter(e,i):l.setter(e,i);return c.location=i,c}const i={},o={},a=e.getProgramParameter(t,35718);for(let n=0;n<a;++n){const a=e.getActiveUniform(t,n);if(Yi(a))continue;let l=a.name;l.endsWith("[0]")&&(l=l.substr(0,l.length-3));const c=e.getUniformLocation(t,a.name);if(c){const e=r(0,a,c);i[l]=e,xi(l,e,o,i)}}return i}(e,t),r=function(e,t){const n={},r=e.getProgramParameter(t,35721);for(let i=0;i<r;++i){const r=e.getActiveAttrib(t,i);if(Yi(r))continue;const o=e.getAttribLocation(t,r.name),a=Ci[r.type],l=a.setter(e,o,a);l.location=o,n[r.name]=l}return n}(e,t),i={program:t,uniformSetters:n,attribSetters:r};return Ar(e)&&(i.uniformBlockSpec=function(e,t){const n=e.getProgramParameter(t,35718),r=[],i=[];for(let o=0;o<n;++o){i.push(o),r.push({});const n=e.getActiveUniform(t,o);r[o].name=n.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach((function(n){const o=n[0],a=n[1];e.getActiveUniforms(t,i,e[o]).forEach((function(e,t){r[t][a]=e}))}));const o={},a=e.getProgramParameter(t,35382);for(let n=0;n<a;++n){const r=e.getActiveUniformBlockName(t,n),i={index:e.getUniformBlockIndex(t,r),usedByVertexShader:e.getActiveUniformBlockParameter(t,n,35396),usedByFragmentShader:e.getActiveUniformBlockParameter(t,n,35398),size:e.getActiveUniformBlockParameter(t,n,35392),uniformIndices:e.getActiveUniformBlockParameter(t,n,35395)};i.used=i.usedByVertexShader||i.usedByFragmentShader,o[r]=i}return{blockSpecs:o,uniformData:r}}(e,t),i.transformFeedbackInfo=function(e,t){const n={},r=e.getProgramParameter(t,35971);for(let i=0;i<r;++i){const r=e.getTransformFeedbackVarying(t,i);n[r.name]={index:i,type:r.type,size:r.size}}return n}(e,t)),i}const Ki=/\s|{|}|;/;function Li(e,t,n,r,i){const o=Ji(n,r,i),a=[];if(t=t.map((function(e){if(!Ki.test(e)){const t=di(e);if(t)e=t.text;else{const t="no element with id: "+e;o.errorCallback(t),a.push(t)}}return e})),a.length)return function(e,t){return e.errorCallback(t),e.callback&&setTimeout(()=>{e.callback(`${t}\n${e.errors.join("\n")}`)}),null}(o,"");const l=o.callback;l&&(o.callback=(t,n)=>{l(t,t?void 0:Hi(e,n))});const c=function(e,t,n,r,i){return ki(e,t,n,r,i)}(e,t,o);return c?Hi(e,c):null}const zi=36161,Oi=36096,ji=[{format:6408,type:5121,min:9729,wrap:33071},{format:34041}],Pi={};Pi[34041]=33306,Pi[6401]=36128,Pi[36168]=36128,Pi[6402]=Oi,Pi[33189]=Oi,Pi[33190]=Oi,Pi[36012]=Oi,Pi[35056]=33306,Pi[36013]=33306;const _i={};_i[32854]=!0,_i[32855]=!0,_i[36194]=!0,_i[34041]=!0,_i[33189]=!0,_i[6401]=!0,_i[36168]=!0;function qi(e,t,n,r){const i=36160,o=e.createFramebuffer();e.bindFramebuffer(i,o),n=n||e.drawingBufferWidth,r=r||e.drawingBufferHeight;const a=[],l={framebuffer:o,attachments:[],width:n,height:r};return(t=t||ji).forEach((function(t,o){let c=t.attachment;const s=t.samples,d=t.format;let u=t.attachmentPoint||function(e,t){return Pi[e]||Pi[t]}(d,t.internalFormat);if(u||(u=36064+o),function(e){return e>=36064&&e<36096}(u)&&a.push(u),!c)if(void 0!==s||function(e){return _i[e]}(d))c=e.createRenderbuffer(),e.bindRenderbuffer(zi,c),s>1?e.renderbufferStorageMultisample(zi,s,d,n,r):e.renderbufferStorage(zi,d,n,r);else{const i=Object.assign({},t);i.width=n,i.height=r,void 0===i.auto&&(i.auto=!1,i.min=i.min||i.minMag||9729,i.mag=i.mag||i.minMag||9729,i.wrapS=i.wrapS||i.wrap||33071,i.wrapT=i.wrapT||i.wrap||33071),c=ci(e,i)}if(function(e,t){return typeof WebGLRenderbuffer<"u"&&On(t,"WebGLRenderbuffer")}(0,c))e.framebufferRenderbuffer(i,u,zi,c);else{if(!jn(0,c))throw new Error("unknown attachment type");void 0!==t.layer?e.framebufferTextureLayer(i,u,c,t.level||0,t.layer):e.framebufferTexture2D(i,u,t.target||3553,c,t.level||0)}l.attachments.push(c)})),e.drawBuffers&&e.drawBuffers(a),l}function $i(e,t){return()=>t instanceof WebGLTexture?t:ci(e,{src:t,wrap:e.CLAMP_TO_EDGE})}let eo=function(){function e(e){this.id="_";const t=e.context,n=e.width,r=e.height;this.context=t,this.options=e;const i=this.buildDefines();this.programInfo=Li(this.context,[i+this.getVertexShader(),i+this.getFragmentShader()]),this.bufferInfo=ur(this.context,this.getBuffers()),this.fbi=qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.output=this.fbi.attachments[0]}var t=e.prototype;return t.resizeOutput=function(e,t){this.fbi=qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],e,t),this.options.width=e,this.options.height=t,this.output=this.fbi.attachments[0]},t.getDefines=function(){return{}},t.getBuffers=function(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}},t.buildDefines=function(){let e="";const t=this.getDefines();for(let n in t)e+=`#define ${n} ${t[n].toFixed(1)}\n`;return e},t.run=function(e){var t,n,r,i,o,a;null==(t=this.profiler)||t.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),null==(n=this.profiler)||n.pushContext(`[${this.id}] UNIFORMS`);for(const t in e)"function"==typeof e[t]&&(null==(r=this.profiler)||r.pushContext(`[${this.id}] UNI : ${t}`),e[t]=e[t](),null==(i=this.profiler)||i.popContext(`[${this.id}] UNI : ${t}`));null==(o=this.profiler)||o.popContext(`[${this.id}] UNIFORMS`);const l=Date.now();let c=0;this.lastRun&&(c=(l-this.lastRun)/1e3),this.lastRun=l,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),function(e,t,n){n.vertexArrayObject?e.bindVertexArray(n.vertexArrayObject):(function(e,t){for(const n in t){const r=e[n];r&&r(t[n])}}(t.attribSetters||t,n.attribs),n.indices&&e.bindBuffer(34963,n.indices))}(this.context,this.programInfo,this.bufferInfo),function e(t){const n=t.uniformSetters||t,r=arguments.length<=1?0:arguments.length-1;for(let t=0;t<r;++t){const r=t+1<1||arguments.length<=t+1?void 0:arguments[t+1];if(Array.isArray(r)){const t=r.length;for(let i=0;i<t;++i)e(n,r[i])}else for(const e in r){const t=n[e];t&&t(r[e])}}}(this.programInfo,Object.assign({delta:c,canvas:[this.context.canvas.width,this.context.canvas.height]},e)),function(e,t,n){n=n||36160,t?(e.bindFramebuffer(n,t.framebuffer),e.viewport(0,0,t.width,t.height)):(e.bindFramebuffer(n,null),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight))}(this.context,this.options.disableFramebuffer?null:this.fbi),function(e,t,n,r,i,o){n=void 0===n?4:n;const a=t.indices,l=t.elementType,c=void 0===r?t.numElements:r;i=void 0===i?0:i,l||a?void 0!==o?e.drawElementsInstanced(n,c,void 0===l?5123:t.elementType,i,o):e.drawElements(n,c,void 0===l?5123:t.elementType,i):void 0!==o?e.drawArraysInstanced(n,i,c,o):e.drawArrays(n,i,c)}(this.context,this.bufferInfo),null==(a=this.profiler)||a.popContext(`[${this.id}] PROG : ${this.constructor.name}`)},t.setProfiler=function(e){this.profiler=e},e}();let to=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getFragmentShader=function(){return"precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D background;\nuniform sampler2D foreground;\nuniform sampler2D threshold;\n\nvoid main() {\n vec4 backgroundColor = texture2D(background, _texture_coord);\n vec4 foregroundColor = texture2D(foreground, _texture_coord);\n vec4 tresholdColor = texture2D(threshold, _texture_coord);\n gl_FragColor = foregroundColor * tresholdColor.a +\n backgroundColor * (1. - tresholdColor.a);\n}\n"},n.getVertexShader=function(){return"varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n _texture_coord.y = 1. - texture_coord.y;\n}\n"},t}(eo),no=function(){function e(){this.steps=[]}var t=e.prototype;return t.addStep=function(e){this.steps.push(e)},t.run=function(){var e=(0,c.default)(o.default.mark((function e(){var t,n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(t=A(this.steps);!(n=t()).done;)(r=n.value).program.run(r.getUniforms());case 1:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.resizeOutput=function(e,t){var n,r;null==(n=this.profiler)||n.pushContext(`PIP [${this.constructor.name}]`);for(var i,o=A(this.steps);!(i=o()).done;){const n=i.value;n.preventResize||n.program.resizeOutput(e,t)}null==(r=this.profiler)||r.popContext(`PIP [${this.constructor.name}]`)},t.setProfiler=function(e){this.profiler=e;for(var t,n=A(this.steps);!(t=n()).done;){t.value.program.setProfiler(e)}},t.setId=function(e){for(var t,n=A(this.steps);!(t=n()).done;){t.value.program.id=e}},e}(),ro=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).preciseMaskEnabled=!1,t}return(0,a.default)(t,e),t}(no),io=function(e){function t(t){var n;(n=e.call(this)||this).context=t,n.preciseMaskEnabled=!0;const r={context:t,height:t.canvas.height,width:t.canvas.width},i=new to(Object.assign({},r,{disableFramebuffer:!0}));return n.addStep({program:i,getUniforms:()=>({background:$i(t,n.inputBackgroundImage),foreground:$i(t,n.inputImage),threshold:$i(t,n.inputMask)})}),n}return(0,a.default)(t,e),t.prototype.setData=function(e,t){this.inputImage=e,this.inputMask=t},t}(ro);let oo=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getFragmentShader=function(){return"precision mediump float;\n\nvarying vec2 _texture_coord;\nuniform sampler2D texture;\n\nvoid main() { gl_FragColor = texture2D(texture, _texture_coord); }\n"},n.getVertexShader=function(){return"varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\nuniform bool invert_y;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n if (invert_y) {\n _texture_coord.y = 1. - texture_coord.y;\n }\n}\n"},t}(eo),ao=function(e){function t(t,n,r){var i;(i=e.call(this)||this).context=t;const o={context:t,height:r,width:n};return i.addStep({program:new oo(Object.assign({},o,{disableFramebuffer:!0})),getUniforms:()=>({texture:$i(t,i.inputImage),invert_y:!0})}),i}return(0,a.default)(t,e),t.prototype.setData=function(e){this.inputImage=e},t}(no);function lo(e){return co.apply(this,arguments)}function co(){return(co=(0,c.default)(o.default.mark((function t(n){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",new e(e=>{setTimeout(()=>{e()},n)}));case 1:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var so=(e=>(e[e.LINEAR=0]="LINEAR",e[e.GAUSSIAN=1]="GAUSSIAN",e))(so||{});let uo=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getDefines=function(){var e;return{RADIUS:null!=(e=this.options.radius)?e:1}},n.getFragmentShader=function(){return"precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n"+this.createLoopFunction()},n.getVertexShader=function(){return"varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n"},n.createLoopFunction=function(){var e;let t=null!=(e=this.options.radius)?e:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${t}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n\n for(int y=-${t}; y<${t+1}; ++y) {\n for(int x=-${t}; x<${t+1}; ++x) {\n float factor = 1.;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`},n.getFactor=function(e,t){switch(this.options.type){case 1:return this.getLinearFactor(e,t);case 0:default:return this.getLinearFactor(e,t)}},n.getLinearFactor=function(e,t){return 1},n.getGaussianFactor=function(e,t){var n;const r=2*Math.PI,i=Math.max(null!=(n=this.options.radius)?n:1,1),o=1/(r*Math.pow(i,2)),a=o*-(Math.pow(e,2)+Math.pow(t,2));return o*Math.pow(Math.E,a)},t}(eo);let Ao=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getFragmentShader=function(){return"#version 300 es\n// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts\n\nprecision highp float;\nuniform sampler2D input_frame;\nuniform sampler2D segmentation_mask;\nuniform sampler2D threshold;\nuniform vec2 texel_size;\nuniform float step;\nuniform float radius;\nuniform float offset;\nuniform float sigma_texel;\nuniform float sigma_color;\n\nin vec2 _texture_coord;\nout vec4 outColor;\n\nfloat gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n}\n\nvoid main() {\n vec2 centerCoord = _texture_coord;\n vec3 centerColor = texture(input_frame, centerCoord).rgb;\n float newVal = 0.0;\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n // Subsample kernel space.\n for (float i = -radius + offset; i <= radius; i += step) {\n for (float j = -radius + offset; j <= radius; j += step) {\n vec2 shift = vec2(j, i) * texel_size;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(input_frame, coord).rgb;\n float threshold = texture(threshold, coord).a;\n float outVal = texture(segmentation_mask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), sigma_texel);\n colorWeight = gaussian(distance(centerColor, frameColor), sigma_color);\n totalWeight += spaceWeight * colorWeight;\n newVal += spaceWeight * colorWeight * outVal * threshold;\n }\n }\n newVal /= totalWeight;\n outColor = vec4(vec3(0.), newVal);\n}"},n.getVertexShader=function(){return"#version 300 es\nin vec2 position;\nin vec2 texture_coord;\nout vec2 _texture_coord;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n _texture_coord = texture_coord;\n}"},t}(eo),ho=function(e){function t(t,n,r){var i;(i=e.call(this)||this).context=t;const o={context:t,height:r,width:n},a=new uo(Object.assign({},o,{radius:1,type:so.GAUSSIAN}));return i.jointBilateral=new Ao(o),i.addStep({program:a,getUniforms:()=>({inputs:$i(t,i.inputMask)})}),i.addStep({program:i.jointBilateral,getUniforms:()=>{var e,n,r,o,a,l;const c=null!=(e=null==(r=i.inputImage)?void 0:r.width)?e:1,s=null!=(n=null==(o=i.inputImage)?void 0:o.height)?n:1;null==(a=i.inputMask)||a.width,null==(l=i.inputMask)||l.height;const d=Math.max(1,.66*Math.sqrt(3)),u=1/c,A=1/s;return{input_frame:$i(t,i.inputImage),segmentation_mask:$i(t,i.inputMask),texel_size:[u,A],step:d,radius:3,offset:d>1?.5*d:0,sigma_texel:3*Math.max(u,A),sigma_color:3}}}),i.output=i.jointBilateral.output,i}(0,a.default)(t,e);var n=t.prototype;return n.setData=function(e,t){this.previousInputImage=this.inputImage?this.inputImage:e,this.previousInputMask=this.inputMask?this.inputMask:t,this.inputImage=e,this.inputMask=t},n.resizeOutput=function(t,n){e.prototype.resizeOutput.call(this,t,n),this.output=this.jointBilateral.output},t}(no);var go=(e=>(e.PUSH="PUSH",e.POP="POP",e))(go||{});let Qo=function(){function t(e){this.queries=[],this.context=e,this.extension=e.getExtension("EXT_disjoint_timer_query_webgl2")}var n=t.prototype;return n.start=function(){},n.stop=function(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)},n.pushContext=function(e){this.createQuery("PUSH",e)},n.popContext=function(e){this.createQuery("POP",e)},n.createQuery=function(e,t){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:t,action:e,query:this.activeQuery})},n.getResolvedQueries=function(){var t=(0,c.default)(o.default.mark((function t(){var n,r;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.all([...this.queries].map(e=>this.resolveQuery(e)));case 2:for(n=t.sent.filter(e=>e),r=1;r<n.length;++r)n[r].timestamp+=n[r-1].duration+n[r-1].timestamp;return t.abrupt("return",n);case 5:case"end":return t.stop()}}),t,this)})));return function(){return t.apply(this,arguments)}}(),n.resolveQuery=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.awaitQueryAvailable(t);case 2:if(e.sent){e.next=5;break}return console.log("Unawaitable query",t),e.abrupt("return");case 5:if(!this.context.getParameter(this.extension.GPU_DISJOINT_EXT)){e.next=8;break}return console.log("Disjointed query",t),e.abrupt("return");case 8:return e.abrupt("return",Object.assign({},t,{duration:this.context.getQueryParameter(t.query,this.context.QUERY_RESULT),timestamp:0}));case 9:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.awaitQueryAvailable=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=0;case 1:if(!(n<10)){e.next=9;break}if(!this.context.getQueryParameter(t.query,this.context.QUERY_RESULT_AVAILABLE)){e.next=4;break}return e.abrupt("return",t);case 4:return e.next=6,lo(200);case 6:++n,e.next=1;break;case 9:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t}(),Fo=function(){function e(){this.previousImageWidth=0,this.previousImageHeight=0,this.previousMaskWidth=2,this.previousMaskHeight=2,this.postProcessingEnabled=!0;const e=new OffscreenCanvas(0,0),t=e.getContext("webgl2");if(!t)throw"Fail to retrieve webgl2 context";this.canvas=e,this.context=t,this.improveMask=new ho(this.context,2,2)}var t=e.prototype;return t.enablePostProcessing=function(){this.postProcessingEnabled=!0},t.disablePostProcessing=function(){this.postProcessingEnabled=!1},t.profileWebgl=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=new Qo(this.context),this.profiler=n,n.start(),e.next=5,lo(t);case 5:return this.profiler=void 0,n.stop(),e.abrupt("return",n.getResolvedQueries());case 8:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.render=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r,i,a,l,c;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.pipeline){e.next=2;break}throw"missing pipeline";case 2:return(this.previousImageHeight!==t.height||this.previousImageWidth!==t.width)&&this.resizeOutput(t.width,t.height),(this.previousMaskHeight!==n.height||this.previousMaskWidth!==n.width)&&(this.improveMask.resizeOutput(n.width,n.height),this.previousMaskWidth=n.width,this.previousMaskHeight=n.height),a="renderer",null==(r=this.profiler)||r.pushContext(a),this.improveMask.setProfiler(this.profiler),this.pipeline.setProfiler(this.profiler),e.next=7,createImageBitmap(n);case 7:return l=e.sent,c=l,this.postProcessingEnabled&&(this.improveMask.setData(t,l),this.improveMask.run(),c=this.improveMask.output),this.pipeline.setData(t,c),e.next=13,this.pipeline.run();case 13:return null==(i=this.profiler)||i.popContext(a),e.abrupt("return",this.canvas);case 15:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.resizeOutput=function(e,t){var n;this.canvas.width=e,this.canvas.height=t,null==(n=this.pipeline)||n.resizeOutput(e,t),this.previousImageWidth=e,this.previousImageHeight=t},t.destroy=function(){var e;const t=null==(e=this.context)?void 0:e.getExtension("WEBGL_lose_context");t&&t.loseContext()},e}(),po=function(e){function t(){var t;(t=e.call(this)||this).pipeline=new io(t.context);const n=new OffscreenCanvas(0,0),r=n.getContext("webgl2");if(!r)throw"Fail to retrieve webgl context";return t.backgroundImageResizerCanvas=n,t.backgroundImageResizerContext=r,t.backgroundImageResizer=new ao(t.backgroundImageResizerContext,0,0),t}(0,a.default)(t,e);var n=t.prototype;return n.setBackgroundImage=function(e){this.backgroundImage=e,this.updateBackgroundImage()},n.updateBackgroundImage=function(){const e=this.canvas,t=e.width,n=e.height;this.backgroundImageResizer.resizeOutput(t,n),this.backgroundImageResizer.setData(this.backgroundImage),this.backgroundImageResizer.run(),this.pipeline.inputBackgroundImage=this.backgroundImageResizerCanvas},n.resizeOutput=function(t,n){e.prototype.resizeOutput.call(this,t,n),this.backgroundImageResizerCanvas.width=t,this.backgroundImageResizerCanvas.height=n,this.backgroundImageResizer.resizeOutput(t,n),this.updateBackgroundImage()},n.destroy=function(){var t;const n=null==(t=this.backgroundImageResizerContext)?void 0:t.getExtension("WEBGL_lose_context");n&&n.loseContext(),e.prototype.destroy.call(this)},t}(Fo),Uo=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.setBackgroundVideo=function(e){this.frameReader=e},n.render=function(){var t=(0,c.default)(o.default.mark((function t(n,r){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.readNextVideoFrame();case 2:return t.abrupt("return",e.prototype.render.call(this,n,r));case 3:case"end":return t.stop()}}),t,this)})));return function(e,n){return t.apply(this,arguments)}}(),n.readNextVideoFrame=function(){var e=(0,c.default)(o.default.mark((function e(){var t,n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(t=this.frameReader)?void 0:t.read();case 2:if(null==(n=e.sent)||!n.value){e.next=8;break}return e.next=6,createImageBitmap(n.value);case 6:r=e.sent,this.setBackgroundImage(r),n.value.close();case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t}(po),mo=function(){function e(){}var t=e.prototype;return t.blurBackground=function(e){return new Tn(e)},t.blurSilhouette=function(e){return new Yn(e)},t.imageBackground=function(){return new wn},t.videoBackground=function(){return new Uo},e}();let bo=function(e){function t(){return e.apply(this,arguments)||this}(0,a.default)(t,e);var n=t.prototype;return n.getDefines=function(){var e;return{RADIUS:null!=(e=this.options.radius)?e:1}},n.getFragmentShader=function(){return"precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\nuniform sampler2D mask;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n"+this.createLoopFunction()},n.getVertexShader=function(){return"varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n"},n.createLoopFunction=function(){var e;let t=null!=(e=this.options.radius)?e:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${t}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n float maxLength = length(normalizedRadius);\n\n for(int y=-${t}; y<${t+1}; ++y) {\n for(int x=-${t}; x<${t+1}; ++x) {\n float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`},t}(eo);let Bo=function(e){function t(t,n){var r;(r=e.call(this)||this).context=t,r.radius=n;const i={context:t,height:t.canvas.height,width:t.canvas.width};r.blur=new bo(Object.assign({},i,{radius:n},r.getBlurTextureSize(t.canvas.width,t.canvas.height)));const o=new to(Object.assign({},i,{disableFramebuffer:!0}));return r.addStep({program:r.blur,preventResize:!0,getUniforms:()=>({texture:$i(t,r.inputImage),mask:$i(t,r.inputMask)})}),r.addStep({program:o,getUniforms:()=>({background:$i(t,r.blur.output),foreground:$i(t,r.inputImage),threshold:$i(t,r.inputMask)})}),r}(0,a.default)(t,e);var n=t.prototype;return n.getBlurTextureSize=function(e,t){const n=this.radius>10?8:2;return{width:Math.max(2,e/n),height:Math.max(2,t/n)}},n.setData=function(e,t){this.inputImage=e,this.inputMask=t},n.resizeOutput=function(t,n){e.prototype.resizeOutput.call(this,t,n);const r=this.getBlurTextureSize(t,n);this.blur.resizeOutput(r.width,r.height)},t}(ro),Zo=function(e){function t(t){var n;return(n=e.call(this)||this).pipeline=new Bo(n.context,t),n.disablePostProcessing(),n}return(0,a.default)(t,e),t}(Fo),fo=function(e){function t(t,n){var r;(r=e.call(this)||this).context=t;const i={context:t,height:t.canvas.height,width:t.canvas.width},o=new uo(Object.assign({},i,{radius:n,type:so.GAUSSIAN})),a=new to(Object.assign({},i,{disableFramebuffer:!0}));return r.addStep({program:o,getUniforms:()=>({texture:$i(t,r.inputImage)})}),r.addStep({program:a,getUniforms:()=>({background:$i(t,r.inputImage),foreground:$i(t,o.output),threshold:$i(t,r.inputMask)})}),r}return(0,a.default)(t,e),t.prototype.setData=function(e,t){this.inputImage=e,this.inputMask=t},t}(ro),Ro=function(e){function t(t){var n;return(n=e.call(this)||this).pipeline=new fo(n.context,t),n.disablePostProcessing(),n}return(0,a.default)(t,e),t}(Fo),Io=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).preciseMaskEnabled=!0,t}(0,a.default)(t,e);var n=t.prototype;return n.run=function(){var t=(0,c.default)(o.default.mark((function t(){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(t.t0=this.frameReader,!t.t0){t.next=6;break}return t.next=4,this.readNextVideoFrame();case 4:return t.next=6,e.prototype.run.call(this);case 6:case"end":return t.stop()}}),t,this)})));return function(){return t.apply(this,arguments)}}(),n.readNextVideoFrame=function(){var e=(0,c.default)(o.default.mark((function e(){var t,n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(t=this.frameReader)?void 0:t.read();case 2:if(n=e.sent,e.t0=null!=n&&n.value,!e.t0){e.next=9;break}return e.next=7,createImageBitmap(n.value);case 7:this.inputBackgroundImage=e.sent,n.value.close();case 9:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),(0,l.default)(t,[{key:"reader",set:function(e){this.frameReader=e}}]),t}(io),yo=function(e){function t(){var t;return(t=e.call(this)||this).pipeline=new Io(t.context),t}return(0,a.default)(t,e),t.prototype.setBackgroundVideo=function(e){this.pipeline.reader=e},t}(Fo),Vo=function(){function e(){}var t=e.prototype;return t.blurBackground=function(e){return new Zo(e)},t.blurSilhouette=function(e){return new Ro(e)},t.imageBackground=function(){return new po},t.videoBackground=function(){return new yo},e}(),Co=function(){function e(e){switch(e){case We.CANVAS:this.factory=new mo;break;case We.WEBGL:this.factory=new Vo;break;default:const e=Ge();this.factory=e.supported?new Vo:new mo}}var t=e.prototype;return t.blurBackground=function(e){return this.getFactory().blurBackground(e)},t.blurSilhouette=function(e){return this.getFactory().blurSilhouette(e)},t.imageBackground=function(){return this.getFactory().imageBackground()},t.videoBackground=function(){return this.getFactory().videoBackground()},t.getFactory=function(){if(!this.factory)throw"Factory is not initialized";return this.factory},e}(),Wo=function(){function e(){}var t=e.prototype;return t.setBackgroundOptions=function(e){var t,n;this.renderer&&this.renderer.destroy();const r=new Co(null==(t=e.renderingOptions)?void 0:t.type);switch(e.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(e.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(e.radius));break;case"VideoBackground":const t=r.videoBackground();this.backgroundVideo&&t.setBackgroundVideo(this.backgroundVideo),this.renderer=t;break;case"VirtualBackground":const n=r.imageBackground();this.backgroundImage&&n.setBackgroundImage(this.backgroundImage),this.renderer=n;break;default:throw`Unknown rendering type [${e.transformerType}]`}(null==(n=e.renderingOptions)?void 0:n.type)===We.WEBGL&&(e.renderingOptions.selfieSegmentationType===Ce.PRECISE?this.renderer.enablePostProcessing():e.renderingOptions.selfieSegmentationType===Ce.FAST&&this.renderer.disablePostProcessing())},t.setVideoBGReadable=function(e){this.backgroundVideo=e.getReader();const t=this.renderer;null!=t&&t.setBackgroundVideo&&t.setBackgroundVideo(this.backgroundVideo)},t.setVirtualBGImage=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:null!=(n=this.renderer)&&n.setBackgroundImage&&n.setBackgroundImage(t),this.backgroundImage=t;case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.process=function(){var e=(0,c.default)(o.default.mark((function e(t,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.renderer){e.next=2;break}return e.abrupt("return",this.renderer.render(t,n));case 2:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.resizeForeground=function(){var e=(0,c.default)(o.default.mark((function e(t,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),t.getBlurSize=function(e){switch(void 0===e&&(e=ye.Low),e){case ye.Low:return 5;case ye.High:return 12}return e},t.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",null!=(n=null==(r=this.renderer)?void 0:r.profileWebgl(t))?n:[]);case 1:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),e}();let Eo=function(){function t(){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("2d",{willReadFrequently:!0}),this.width=0,this.height=0}var r=t.prototype;return r.createImageSegmenter=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.ImageSegmenter&&this.wasmFileset){e.next=3;break}return console.warn("Mediapipe objects not loaded"),e.abrupt("return");case 3:return e.next=5,this.ImageSegmenter.createFromOptions(this.wasmFileset,{baseOptions:{modelAssetPath:this.modelAssetUriPath,delegate:"GPU"},runningMode:"VIDEO",outputCategoryMask:!0,outputConfidenceMasks:!0});case 5:this.imageSegmenter=e.sent;case 6:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),r.loadMediapipeAssets=function(){var t=(0,c.default)(o.default.mark((function t(r,i){var a,l,c,s,d;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return this.modelAssetUriPath=r||"https://d3opqjmqzxf057.cloudfront.net/ml/vonage_selfie_segmenter/float16/v1/vonage_selfie_segmenter.tflite",a=i?i+"/task-vision.js":"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.20/+esm",l=i?i+"/wasm":"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.20/wasm",t.next=5,(t=>new e(e=>e(""+t)).then(e=>u(n(761)(e))))(a);case 5:return c=t.sent,s=c.FilesetResolver,d=c.ImageSegmenter,this.ImageSegmenter=d,t.next=11,s.forVisionTasks(l);case 11:this.wasmFileset=t.sent;case 12:case"end":return t.stop()}}),t,this)})));return function(e,n){return t.apply(this,arguments)}}(),r.init=function(){var e=(0,c.default)(o.default.mark((function e(t,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.loadMediapipeAssets(t,n);case 2:return s.document={},e.next=5,this.createImageSegmenter();case 5:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),r.process=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r,i,a,l,c,s;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.imageSegmenter){e.next=3;break}return console.warn("ImageSegmenter instance not available"),e.abrupt("return");case 3:(this.width!==t.width||this.height!==t.height)&&(this.canvas.width=this.width=t.width,this.canvas.height=this.height=t.height,this.mask&&(this.mask=new ImageData(this.width,this.height))),this.mask||(this.mask=new ImageData(this.width,this.height)),this.context.drawImage(t,0,0,t.width,t.height),r=Date.now(),e.prev=5,null==(n=this.imageSegmenter)||n.segmentForVideo(this.context.getImageData(0,0,t.width,t.height),r,e=>{var t;const n=null==(t=e.confidenceMasks)?void 0:t[0];i=null==n?void 0:n.getAsFloat32Array()}),e.next=14;break;case 9:return e.prev=9,e.t0=e.catch(5),e.next=13,this.createImageSegmenter();case 13:return e.abrupt("return");case 14:if(i){e.next=16;break}return e.abrupt("return");case 16:if(this.previousConfidenceMask){e.next=19;break}return this.previousConfidenceMask=i.slice(),e.abrupt("return");case 19:for(a=i.map((e,t)=>{var n;const r=null==(n=this.previousConfidenceMask)?void 0:n[t];return void 0!==r?this.blend(r,e):e}),l=[255,0,0],c=0;c<(null==a?void 0:a.length);c++)(s=1-a[c])>.1?(s<.7?(this.mask.data[4*c]=l[0]*s,this.mask.data[4*c+3]=255*s):(this.mask.data[4*c]=l[0],this.mask.data[4*c+3]=255),this.mask.data[4*c+1]=l[1],this.mask.data[4*c+2]=l[2]):this.mask.data[4*c]=this.mask.data[4*c+1]=this.mask.data[4*c+2]=this.mask.data[4*c+3]=0;return e.abrupt("return",(this.previousConfidenceMask=a.slice(),this.mask));case 22:case"end":return e.stop()}}),e,this,[[5,9]])})));return function(t){return e.apply(this,arguments)}}(),r.isGpuSupported=function(){return!0},r.blend=function(e,t){const n=t-.5,r=n*n;return t+.9*(1-Math.min(1,r*(5.68842+r*(r*(r*(291.309+-624.717*r)-57.8051)-.748699))))*(e-t)},t}(),So=function(){function e(){this.reporter=new Xn,this.isEnabled=!0}var t=e.prototype;return t.init=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.selfieSegmentation=new Eo,e.next=3,null==(r=this.selfieSegmentation)?void 0:r.init(n.modelAssetUriPath,n.mediapipeBaseAssetsUri);case 3:this.backgroundFilter=new Wo,this.report({variation:"Create"});case 5:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.transform=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r,i,a,l,c,s,d;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isEnabled){e.next=2;break}return e.abrupt("return",n.enqueue(t));case 2:return c=null!=(r=t.timestamp)?r:0,e.next=5,createImageBitmap(t);case 5:return s=e.sent,e.next=8,null==(i=this.selfieSegmentation)?void 0:i.process(s);case 8:if(d=e.sent,e.t0=d,!e.t0){e.next=14;break}return e.next=13,null==(a=this.backgroundFilter)?void 0:a.process(s,d);case 13:l=e.sent;case 14:l?(t.close(),n.enqueue(new VideoFrame(l,{timestamp:c,alpha:"discard"}))):n.enqueue(t);case 15:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.setBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.backgroundOptions=t,e.next=3,null==(n=this.backgroundFilter)?void 0:n.setBackgroundOptions(t);case 3:this.report({variation:"Update"});case 4:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.setVideoBGReadable=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(n=this.backgroundFilter)?void 0:n.setVideoBGReadable(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.setVirtualBGImage=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(n=this.backgroundFilter)?void 0:n.setVirtualBGImage(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",null!=(n=null==(r=this.backgroundFilter)?void 0:r.profile(t))?n:[]);case 1:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.getTransformerType=function(){var e,t;return null!=(e=null==(t=this.backgroundOptions)?void 0:t.transformerType)?e:"Undefined"},t.enable=function(){this.isEnabled=!0},t.disable=function(){this.isEnabled=!1},t.report=function(e){var t;this.reporter.send(Object.assign({version:"6.0.0-alpha.2",action:"MlTransformers",transformerType:null==(t=this.backgroundOptions)?void 0:t.transformerType,config:JSON.stringify(this.backgroundOptions)},e))},e}();t.BackgroundTransformer=So;const vo=function(){function t(){this.backgroundTransformer=new So,this.mediaProcessor=new fe,this.rate=30,this.eventsQueue=[],this.frameTransformLatencyMs=[]}var n=t.prototype;return n.init=function(){var e=(0,c.default)(o.default.mark((function e(t,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.frameTransformLatencyMs=[],e.next=3,this.backgroundTransformer.init(t,n);case 3:return e.next=5,this.mediaProcessor.setTransformers([this.backgroundTransformer]);case 5:this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((e,t)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:e,data:t}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:e,data:t})});case 7:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),n.enable=function(){this.backgroundTransformer.enable()},n.disable=function(){this.backgroundTransformer.disable()},n.onMediaProcessorEvent=function(){var t=(0,c.default)(o.default.mark((function t(){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,new e(e=>{this.eventsQueue.length>0?e(this.eventsQueue.shift()):this.resolveOnMediaProcessor=e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})));return function(){return t.apply(this,arguments)}}(),n.setTrackExpectedRate=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this.rate=t,this.mediaProcessor.setTrackExpectedRate(t);case 1:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.transform=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=performance.now(),this.mediaProcessor.transform(t,n),this.frameTransformLatencyMs.push(performance.now()-r);case 2:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),n.setBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(n=this.backgroundTransformer)?void 0:n.setBackgroundOptions(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.setVideoBGReadable=function(e){this.backgroundTransformer.setVideoBGReadable(e)},n.setVirtualBGImage=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.backgroundTransformer.setVirtualBGImage(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.terminate=function(){var e=(0,c.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.mediaProcessor.destroy();case 2:t=this.frameTransformLatencyMs.reduce((e,t)=>e+t,0)/this.frameTransformLatencyMs.length||0,console.log(`Transform latency average is: ${t} ms`);case 4:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.setVonageMetadata=function(e){!function(e){Ae(e)}(e)},n.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=JSON,e.next=3,this.backgroundTransformer.profile(t);case 3:return e.t1=e.sent,e.abrupt("return",e.t0.stringify.call(e.t0,e.t1));case 5:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t}();!function(e,t){t.workerId=e,mt()&&($t[t.workerId]=t)}("ProcessorWorker",vo);let Jo=vo;const No="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGd0KHQsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCByPWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHJbdF18fChyW3RdPWUpLHJbdF19Y29uc3QgX3I9Z3QoImdsb2JhbHMiLHt9KTt2YXIgb2U9KHQ9Pih0LklOSVQ9IklOSVQiLHQuRk9SV0FSRD0iRk9SV0FSRCIsdC5URVJNSU5BVEU9IlRFUk1JTkFURSIsdC5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIsdC5FVkVOVD0iRVZFTlQiLHQpKShvZXx8e30pO2Z1bmN0aW9uIGlzKHQpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShyPT50IGluc3RhbmNlb2Ygcil9ZnVuY3Rpb24gYmUodCxlKXtjb25zdHtpZDpyLHR5cGU6bn09dCxzPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnIsdHlwZTpuLHJlc3VsdDplfSxzLmZpbHRlcihpPT5pcyhpKSkpfWd0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gVHIoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWZ1bmN0aW9uIEJlKHQsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgciBpbiBlKWRlbGV0ZSBlW3JdO2Zvcihjb25zdCByIGluIHQpQXJyYXkuaXNBcnJheSh0W3JdKT8oZVtyXT1bXSxCZSh0W3JdLGVbcl0pKTp0eXBlb2YgdFtyXT09Im9iamVjdCI/KGVbcl09e30sQmUodFtyXSxlW3JdKSk6ZVtyXT10W3JdfWNvbnN0IFU9bmV3IFdlYWtNYXAsWT1uZXcgV2Vha01hcCxCPW5ldyBXZWFrTWFwLERlPVN5bWJvbCgiYW55UHJvZHVjZXIiKSx3cj1Qcm9taXNlLnJlc29sdmUoKSxNZT1TeW1ib2woImxpc3RlbmVyQWRkZWQiKSxVZT1TeW1ib2woImxpc3RlbmVyUmVtb3ZlZCIpO2xldCBOZT0hMSx4dD0hMTtmdW5jdGlvbiBhZSh0KXtpZih0eXBlb2YgdCE9InN0cmluZyImJnR5cGVvZiB0IT0ic3ltYm9sIiYmdHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIG11c3QgYmUgYSBzdHJpbmcsIHN5bWJvbCwgb3IgbnVtYmVyIil9ZnVuY3Rpb24gT2UodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gY2UodCxlKXtjb25zdCByPVkuZ2V0KHQpO2lmKHIuaGFzKGUpKXJldHVybiByLmdldChlKX1mdW5jdGlvbiBnZSh0LGUpe2NvbnN0IHI9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCJ8fHR5cGVvZiBlPT0ibnVtYmVyIj9lOkRlLG49Qi5nZXQodCk7aWYobi5oYXMocikpcmV0dXJuIG4uZ2V0KHIpfWZ1bmN0aW9uIG9zKHQsZSxyKXtjb25zdCBuPUIuZ2V0KHQpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBzIG9mIG4uZ2V0KGUpKXMuZW5xdWV1ZShyKTtpZihuLmhhcyhEZSkpe2NvbnN0IHM9UHJvbWlzZS5hbGwoW2Uscl0pO2Zvcihjb25zdCBpIG9mIG4uZ2V0KERlKSlpLmVucXVldWUocyl9fWZ1bmN0aW9uIEFyKHQsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCByPSExLG49KCk9Pnt9LHM9W107Y29uc3QgaT17ZW5xdWV1ZShhKXtzLnB1c2goYSksbigpfSxmaW5pc2goKXtyPSEwLG4oKX19O2Zvcihjb25zdCBhIG9mIGUpe2xldCBvPWdlKHQsYSk7b3x8KG89bmV3IFNldCxCLmdldCh0KS5zZXQoYSxvKSksby5hZGQoaSl9cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gcz9zLmxlbmd0aD09PTA/cj8ocz12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShhPT57bj1hfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IHMuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4oYSl7cz12b2lkIDA7Zm9yKGNvbnN0IG8gb2YgZSl7Y29uc3QgYz1nZSh0LG8pO2MmJihjLmRlbGV0ZShpKSxjLnNpemU9PT0wJiZCLmdldCh0KS5kZWxldGUobykpfXJldHVybiBuKCksYXJndW1lbnRzLmxlbmd0aD4wP3tkb25lOiEwLHZhbHVlOmF3YWl0IGF9Ontkb25lOiEwfX0sW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzfX19ZnVuY3Rpb24gdnIodCl7aWYodD09PXZvaWQgMClyZXR1cm4gU3I7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYG1ldGhvZE5hbWVzYCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MiKTtmb3IoY29uc3QgZSBvZiB0KWlmKCFTci5pbmNsdWRlcyhlKSl0aHJvdyB0eXBlb2YgZSE9InN0cmluZyI/bmV3IFR5cGVFcnJvcigiYG1ldGhvZE5hbWVzYCBlbGVtZW50IG11c3QgYmUgYSBzdHJpbmciKTpuZXcgRXJyb3IoYCR7ZX0gaXMgbm90IEVtaXR0ZXJ5IG1ldGhvZGApO3JldHVybiB0fWNvbnN0IHVlPXQ9PnQ9PT1NZXx8dD09PVVlO2Z1bmN0aW9uIExlKHQsZSxyKXtpZih1ZShlKSl0cnl7TmU9ITAsdC5lbWl0KGUscil9ZmluYWxseXtOZT0hMX19Y2xhc3MgZmV7c3RhdGljIG1peGluKGUscil7cmV0dXJuIHI9dnIociksbj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgZnVuY3Rpb24iKTtmb3IoY29uc3QgYSBvZiByKWlmKG4ucHJvdG90eXBlW2FdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHthfVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtmdW5jdGlvbiBzKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2VudW1lcmFibGU6ITEsdmFsdWU6bmV3IGZlfSksdGhpc1tlXX1PYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx7ZW51bWVyYWJsZTohMSxnZXQ6c30pO2NvbnN0IGk9YT0+ZnVuY3Rpb24oLi4ubyl7cmV0dXJuIHRoaXNbZV1bYV0oLi4ubyl9O2Zvcihjb25zdCBhIG9mIHIpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGEse2VudW1lcmFibGU6ITEsdmFsdWU6aShhKX0pO3JldHVybiBufX1zdGF0aWMgZ2V0IGlzRGVidWdFbmFibGVkKCl7dmFyIGUscjtpZih0eXBlb2YoKGU9Z2xvYmFsVGhpcy5wcm9jZXNzKT09bnVsbD92b2lkIDA6ZS5lbnYpIT0ib2JqZWN0IilyZXR1cm4geHQ7Y29uc3R7ZW52Om59PShyPWdsb2JhbFRoaXMucHJvY2VzcykhPW51bGw/cjp7ZW52Ont9fTtyZXR1cm4gbi5ERUJVRz09PSJlbWl0dGVyeSJ8fG4uREVCVUc9PT0iKiJ8fHh0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7eHQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXt2YXIgcjtVLnNldCh0aGlzLG5ldyBTZXQpLFkuc2V0KHRoaXMsbmV3IE1hcCksQi5zZXQodGhpcyxuZXcgTWFwKSxCLmdldCh0aGlzKS5zZXQoRGUsbmV3IFNldCksdGhpcy5kZWJ1Zz0ocj1lLmRlYnVnKSE9bnVsbD9yOnt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0obixzLGksYSk9Pnt0cnl7YT1KU09OLnN0cmluZ2lmeShhKX1jYXRjaHthPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhhKS5qb2luKCIsIil9YH0odHlwZW9mIGk9PSJzeW1ib2wifHx0eXBlb2YgaT09Im51bWJlciIpJiYoaT1pLnRvU3RyaW5nKCkpO2NvbnN0IG89bmV3IERhdGUsYz1gJHtvLmdldEhvdXJzKCl9OiR7by5nZXRNaW51dGVzKCl9OiR7by5nZXRTZWNvbmRzKCl9LiR7by5nZXRNaWxsaXNlY29uZHMoKX1gO2NvbnNvbGUubG9nKGBbJHtjfV1bZW1pdHRlcnk6JHtufV1bJHtzfV0gRXZlbnQgTmFtZTogJHtpfQoJZGF0YTogJHthfWApfSl9bG9nSWZEZWJ1Z0VuYWJsZWQoZSxyLG4peyhmZS5pc0RlYnVnRW5hYmxlZHx8dGhpcy5kZWJ1Zy5lbmFibGVkKSYmdGhpcy5kZWJ1Zy5sb2dnZXIoZSx0aGlzLmRlYnVnLm5hbWUscixuKX1vbihlLHIpe09lKHIpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKXthZShuKTtsZXQgcz1jZSh0aGlzLG4pO3N8fChzPW5ldyBTZXQsWS5nZXQodGhpcykuc2V0KG4scykpLHMuYWRkKHIpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZSIsbix2b2lkIDApLHVlKG4pfHxMZSh0aGlzLE1lLHtldmVudE5hbWU6bixsaXN0ZW5lcjpyfSl9cmV0dXJuIHRoaXMub2ZmLmJpbmQodGhpcyxlLHIpfW9mZihlLHIpe09lKHIpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKXthZShuKTtjb25zdCBzPWNlKHRoaXMsbik7cyYmKHMuZGVsZXRlKHIpLHMuc2l6ZT09PTAmJlkuZ2V0KHRoaXMpLmRlbGV0ZShuKSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSx1ZShuKXx8TGUodGhpcyxVZSx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6cn0pfX1vbmNlKGUpe2xldCByO2NvbnN0IG49bmV3IFByb21pc2Uocz0+e3I9dGhpcy5vbihlLGk9PntyKCkscyhpKX0pfSk7cmV0dXJuIG4ub2ZmPXIsbn1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCByIG9mIGUpYWUocik7cmV0dXJuIEFyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHIpe3ZhciBuO2lmKGFlKGUpLHVlKGUpJiYhTmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGV2ZW50TmFtZWAgY2Fubm90IGJlIG1ldGEgZXZlbnQgYGxpc3RlbmVyQWRkZWRgIG9yIGBsaXN0ZW5lclJlbW92ZWRgIik7dGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSxyKSxvcyh0aGlzLGUscik7Y29uc3Qgcz0obj1jZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsaT1VLmdldCh0aGlzKSxhPVsuLi5zXSxvPXVlKGUpP1tdOlsuLi5pXTthd2FpdCB3cixhd2FpdCBQcm9taXNlLmFsbChbLi4uYS5tYXAoYXN5bmMgYz0+e2lmKHMuaGFzKGMpKXJldHVybiBjKHIpfSksLi4uby5tYXAoYXN5bmMgYz0+e2lmKGkuaGFzKGMpKXJldHVybiBjKGUscil9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSxyKXt2YXIgbjtpZihhZShlKSx1ZShlKSYmIU5lKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIGNhbm5vdCBiZSBtZXRhIGV2ZW50IGBsaXN0ZW5lckFkZGVkYCBvciBgbGlzdGVuZXJSZW1vdmVkYCIpO3RoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXRTZXJpYWwiLGUscik7Y29uc3Qgcz0obj1jZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsaT1VLmdldCh0aGlzKSxhPVsuLi5zXSxvPVsuLi5pXTthd2FpdCB3cjtmb3IoY29uc3QgYyBvZiBhKXMuaGFzKGMpJiZhd2FpdCBjKHIpO2Zvcihjb25zdCBjIG9mIG8paS5oYXMoYykmJmF3YWl0IGMoZSxyKX1vbkFueShlKXtyZXR1cm4gT2UoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxVLmdldCh0aGlzKS5hZGQoZSksTGUodGhpcyxNZSx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBBcih0aGlzKX1vZmZBbnkoZSl7T2UoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLExlKHRoaXMsVWUse2xpc3RlbmVyOmV9KSxVLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCByIG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHIsdm9pZCAwKSx0eXBlb2Ygcj09InN0cmluZyJ8fHR5cGVvZiByPT0ic3ltYm9sInx8dHlwZW9mIHI9PSJudW1iZXIiKXtjb25zdCBuPWNlKHRoaXMscik7biYmbi5jbGVhcigpO2NvbnN0IHM9Z2UodGhpcyxyKTtpZihzKXtmb3IoY29uc3QgaSBvZiBzKWkuZmluaXNoKCk7cy5jbGVhcigpfX1lbHNle1UuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0W24sc11vZiBZLmdldCh0aGlzKS5lbnRyaWVzKCkpcy5jbGVhcigpLFkuZ2V0KHRoaXMpLmRlbGV0ZShuKTtmb3IoY29uc3RbbixzXW9mIEIuZ2V0KHRoaXMpLmVudHJpZXMoKSl7Zm9yKGNvbnN0IGkgb2YgcylpLmZpbmlzaCgpO3MuY2xlYXIoKSxCLmdldCh0aGlzKS5kZWxldGUobil9fX1saXN0ZW5lckNvdW50KGUpe3ZhciByLG4scyxpLGEsbztlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IGM9MDtmb3IoY29uc3QgdSBvZiBlKXtpZih0eXBlb2YgdT09InN0cmluZyIpe2MrPVUuZ2V0KHRoaXMpLnNpemUrKChuPShyPWNlKHRoaXMsdSkpPT1udWxsP3ZvaWQgMDpyLnNpemUpIT1udWxsP246MCkrKChpPShzPWdlKHRoaXMsdSkpPT1udWxsP3ZvaWQgMDpzLnNpemUpIT1udWxsP2k6MCkrKChvPShhPWdlKHRoaXMpKT09bnVsbD92b2lkIDA6YS5zaXplKSE9bnVsbD9vOjApO2NvbnRpbnVlfXR5cGVvZiB1PCJ1IiYmYWUodSksYys9VS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgZiBvZiBZLmdldCh0aGlzKS52YWx1ZXMoKSljKz1mLnNpemU7Zm9yKGNvbnN0IGYgb2YgQi5nZXQodGhpcykudmFsdWVzKCkpYys9Zi5zaXplfXJldHVybiBjfWJpbmRNZXRob2RzKGUscil7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3I9dnIocik7Zm9yKGNvbnN0IG4gb2Ygcil7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IFNyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGZlLnByb3RvdHlwZSkuZmlsdGVyKHQ9PnQhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZmUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpNZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6VWUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTtmdW5jdGlvbiBhcyh0KXtyZXR1cm4gdC5vbkFueSYmdC5lbWl0fWFzeW5jIGZ1bmN0aW9uIGNzKHQsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnIsYXJnczpufT10O2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXIpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3JdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHtyfV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7YmUodCxhd2FpdCBlLmluc3RhbmNlW3JdKC4uLm4/P1tdKSl9Y29uc3QgSXI9Z3QoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gdXModCxlKXtlLndvcmtlcklkPXQsVHIoKSYmKElyW2Uud29ya2VySWRdPWUpfWZ1bmN0aW9uIGZzKHQsZSl7aWYoIXQuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFtyLG5dPXQuYXJncyxzPUlyW3JdO2lmKHMpZS5pbnN0YW5jZT1uZXcgcyh0LmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHtyfWA7QmUobixfciksYXMoZS5pbnN0YW5jZSkmJmUuaW5zdGFuY2Uub25BbnkoKGksYSk9PntiZSh7dHlwZTpvZS5FVkVOVH0se25hbWU6aSxkYXRhOmF9KX0pLGJlKHQsdHlwZW9mIGUuaW5zdGFuY2UhPT12b2lkIDApfWFzeW5jIGZ1bmN0aW9uIGxzKHQsZSl7Y29uc3R7YXJnczpyfT10O2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7bGV0IG47ZS5pbnN0YW5jZS50ZXJtaW5hdGUmJihuPWF3YWl0IGUuaW5zdGFuY2UudGVybWluYXRlKC4uLnI/P1tdKSksYmUodCxuKX1mdW5jdGlvbiBkcyh0KXtpZighdC5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtCZSh0LmFyZ3NbMF0sX3IpLGJlKHQse30pfWZ1bmN0aW9uIGhzKCl7Y29uc3QgdD17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHI9ZS5kYXRhO3N3aXRjaChyLnR5cGUpe2Nhc2Ugb2UuSU5JVDpmcyhyLHQpO2JyZWFrO2Nhc2Ugb2UuRk9SV0FSRDpjcyhyLHQpO2JyZWFrO2Nhc2Ugb2UuVEVSTUlOQVRFOmxzKHIsdCk7YnJlYWs7Y2FzZSBvZS5HTE9CQUxTX1NZTkM6ZHMocik7YnJlYWt9fX1UcigpJiZocygpO2NsYXNzIER7fUQudXBkYXRlcz17dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSxELmVycm9ycz17dHJhbnNmb3JtZXJfbm9uZToiTm8gdHJhbnNmb3JtZXJzIHByb3ZpZGVkIix0cmFuc2Zvcm1lcl9zdGFydDoiQ2Fubm90IHN0YXJ0IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl90cmFuc2Zvcm06IkNhbm5vdCB0cmFuc2Zvcm0gZnJhbWUiLHRyYW5zZm9ybWVyX2ZsdXNoOiJDYW5ub3QgZmx1c2ggdHJhbnNmb3JtZXIiLHJlYWRhYmxlX251bGw6IlJlYWRhYmxlIGlzIG51bGwiLHdyaXRhYmxlX251bGw6IldyaXRhYmxlIGlzIG51bGwifTtmdW5jdGlvbiBtcyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpP3QuZGVmYXVsdDp0fWNvbnN0IE49bmV3IFdlYWtNYXAsemU9bmV3IFdlYWtNYXAseGU9bmV3IFdlYWtNYXAsRXQ9U3ltYm9sKCJhbnlQcm9kdWNlciIpLFJyPVByb21pc2UucmVzb2x2ZSgpLEdlPVN5bWJvbCgibGlzdGVuZXJBZGRlZCIpLCRlPVN5bWJvbCgibGlzdGVuZXJSZW1vdmVkIik7bGV0IF90PSExO2Z1bmN0aW9uIGxlKHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIiYmdHlwZW9mIHQhPSJzeW1ib2wiKXRocm93IG5ldyBUeXBlRXJyb3IoImV2ZW50TmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sIil9ZnVuY3Rpb24gVmUodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZGUodCxlKXtjb25zdCByPXplLmdldCh0KTtyZXR1cm4gci5oYXMoZSl8fHIuc2V0KGUsbmV3IFNldCksci5nZXQoZSl9ZnVuY3Rpb24gRWUodCxlKXtjb25zdCByPXR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGU9PSJzeW1ib2wiP2U6RXQsbj14ZS5nZXQodCk7cmV0dXJuIG4uaGFzKHIpfHxuLnNldChyLG5ldyBTZXQpLG4uZ2V0KHIpfWZ1bmN0aW9uIHBzKHQsZSxyKXtjb25zdCBuPXhlLmdldCh0KTtpZihuLmhhcyhlKSlmb3IoY29uc3QgcyBvZiBuLmdldChlKSlzLmVucXVldWUocik7aWYobi5oYXMoRXQpKXtjb25zdCBzPVByb21pc2UuYWxsKFtlLHJdKTtmb3IoY29uc3QgaSBvZiBuLmdldChFdCkpaS5lbnF1ZXVlKHMpfX1mdW5jdGlvbiBGcih0LGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgcj0hMSxuPSgpPT57fSxzPVtdO2NvbnN0IGk9e2VucXVldWUoYSl7cy5wdXNoKGEpLG4oKX0sZmluaXNoKCl7cj0hMCxuKCl9fTtmb3IoY29uc3QgYSBvZiBlKUVlKHQsYSkuYWRkKGkpO3JldHVybnthc3luYyBuZXh0KCl7cmV0dXJuIHM/cy5sZW5ndGg9PT0wP3I/KHM9dm9pZCAwLHRoaXMubmV4dCgpKTooYXdhaXQgbmV3IFByb21pc2UoYT0+e249YX0pLHRoaXMubmV4dCgpKTp7ZG9uZTohMSx2YWx1ZTphd2FpdCBzLnNoaWZ0KCl9Ontkb25lOiEwfX0sYXN5bmMgcmV0dXJuKGEpe3M9dm9pZCAwO2Zvcihjb25zdCBvIG9mIGUpRWUodCxvKS5kZWxldGUoaSk7cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgYX06e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBQcih0KXtpZih0PT09dm9pZCAwKXJldHVybiBrcjtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHQpaWYoIWtyLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHR9Y29uc3QgVHQ9dD0+dD09PUdlfHx0PT09JGU7bGV0IFdlPWNsYXNzIEVye3N0YXRpYyBtaXhpbihlLHIpe3JldHVybiByPVByKHIpLG49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGZ1bmN0aW9uIik7Zm9yKGNvbnN0IGEgb2YgcilpZihuLnByb3RvdHlwZVthXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7YX1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7ZnVuY3Rpb24gcygpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxlLHtlbnVtZXJhYmxlOiExLHZhbHVlOm5ldyBFcn0pLHRoaXNbZV19T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGUse2VudW1lcmFibGU6ITEsZ2V0OnN9KTtjb25zdCBpPWE9PmZ1bmN0aW9uKC4uLm8pe3JldHVybiB0aGlzW2VdW2FdKC4uLm8pfTtmb3IoY29uc3QgYSBvZiByKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxhLHtlbnVtZXJhYmxlOiExLHZhbHVlOmkoYSl9KTtyZXR1cm4gbn19c3RhdGljIGdldCBpc0RlYnVnRW5hYmxlZCgpe2lmKHR5cGVvZiBwcm9jZXNzIT0ib2JqZWN0IilyZXR1cm4gX3Q7Y29uc3R7ZW52OmV9PXByb2Nlc3N8fHtlbnY6e319O3JldHVybiBlLkRFQlVHPT09ImVtaXR0ZXJ5Inx8ZS5ERUJVRz09PSIqInx8X3R9c3RhdGljIHNldCBpc0RlYnVnRW5hYmxlZChlKXtfdD1lfWNvbnN0cnVjdG9yKGU9e30pe04uc2V0KHRoaXMsbmV3IFNldCksemUuc2V0KHRoaXMsbmV3IE1hcCkseGUuc2V0KHRoaXMsbmV3IE1hcCksdGhpcy5kZWJ1Zz1lLmRlYnVnfHx7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KHIsbixzLGkpPT57dHJ5e2k9SlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2h7aT1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMoaSkuam9pbigiLCIpfWB9dHlwZW9mIHM9PSJzeW1ib2wiJiYocz1zLnRvU3RyaW5nKCkpO2NvbnN0IGE9bmV3IERhdGUsbz1gJHthLmdldEhvdXJzKCl9OiR7YS5nZXRNaW51dGVzKCl9OiR7YS5nZXRTZWNvbmRzKCl9LiR7YS5nZXRNaWxsaXNlY29uZHMoKX1gO2NvbnNvbGUubG9nKGBbJHtvfV1bZW1pdHRlcnk6JHtyfV1bJHtufV0gRXZlbnQgTmFtZTogJHtzfQoJZGF0YTogJHtpfWApfSl9bG9nSWZEZWJ1Z0VuYWJsZWQoZSxyLG4peyhFci5pc0RlYnVnRW5hYmxlZHx8dGhpcy5kZWJ1Zy5lbmFibGVkKSYmdGhpcy5kZWJ1Zy5sb2dnZXIoZSx0aGlzLmRlYnVnLm5hbWUscixuKX1vbihlLHIpe1ZlKHIpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKWxlKG4pLGRlKHRoaXMsbikuYWRkKHIpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZSIsbix2b2lkIDApLFR0KG4pfHx0aGlzLmVtaXQoR2Use2V2ZW50TmFtZTpuLGxpc3RlbmVyOnJ9KTtyZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUscil9b2ZmKGUscil7VmUociksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpbGUobiksZGUodGhpcyxuKS5kZWxldGUociksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxUdChuKXx8dGhpcy5lbWl0KCRlLHtldmVudE5hbWU6bixsaXN0ZW5lcjpyfSl9b25jZShlKXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2NvbnN0IG49dGhpcy5vbihlLHM9PntuKCkscihzKX0pfSl9ZXZlbnRzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgciBvZiBlKWxlKHIpO3JldHVybiBGcih0aGlzLGUpfWFzeW5jIGVtaXQoZSxyKXtsZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0IixlLHIpLHBzKHRoaXMsZSxyKTtjb25zdCBuPWRlKHRoaXMsZSkscz1OLmdldCh0aGlzKSxpPVsuLi5uXSxhPVR0KGUpP1tdOlsuLi5zXTthd2FpdCBScixhd2FpdCBQcm9taXNlLmFsbChbLi4uaS5tYXAoYXN5bmMgbz0+e2lmKG4uaGFzKG8pKXJldHVybiBvKHIpfSksLi4uYS5tYXAoYXN5bmMgbz0+e2lmKHMuaGFzKG8pKXJldHVybiBvKGUscil9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSxyKXtsZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHIpO2NvbnN0IG49ZGUodGhpcyxlKSxzPU4uZ2V0KHRoaXMpLGk9Wy4uLm5dLGE9Wy4uLnNdO2F3YWl0IFJyO2Zvcihjb25zdCBvIG9mIGkpbi5oYXMobykmJmF3YWl0IG8ocik7Zm9yKGNvbnN0IG8gb2YgYSlzLmhhcyhvKSYmYXdhaXQgbyhlLHIpfW9uQW55KGUpe3JldHVybiBWZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLE4uZ2V0KHRoaXMpLmFkZChlKSx0aGlzLmVtaXQoR2Use2xpc3RlbmVyOmV9KSx0aGlzLm9mZkFueS5iaW5kKHRoaXMsZSl9YW55RXZlbnQoKXtyZXR1cm4gRnIodGhpcyl9b2ZmQW55KGUpe1ZlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInVuc3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSx0aGlzLmVtaXQoJGUse2xpc3RlbmVyOmV9KSxOLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCByIG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHIsdm9pZCAwKSx0eXBlb2Ygcj09InN0cmluZyJ8fHR5cGVvZiByPT0ic3ltYm9sIil7ZGUodGhpcyxyKS5jbGVhcigpO2NvbnN0IG49RWUodGhpcyxyKTtmb3IoY29uc3QgcyBvZiBuKXMuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7Ti5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3QgbiBvZiB6ZS5nZXQodGhpcykudmFsdWVzKCkpbi5jbGVhcigpO2Zvcihjb25zdCBuIG9mIHhlLmdldCh0aGlzKS52YWx1ZXMoKSl7Zm9yKGNvbnN0IHMgb2YgbilzLmZpbmlzaCgpO24uY2xlYXIoKX19fWxpc3RlbmVyQ291bnQoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCByPTA7Zm9yKGNvbnN0IG4gb2YgZSl7aWYodHlwZW9mIG49PSJzdHJpbmciKXtyKz1OLmdldCh0aGlzKS5zaXplK2RlKHRoaXMsbikuc2l6ZStFZSh0aGlzLG4pLnNpemUrRWUodGhpcykuc2l6ZTtjb250aW51ZX10eXBlb2YgbjwidSImJmxlKG4pLHIrPU4uZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IHMgb2YgemUuZ2V0KHRoaXMpLnZhbHVlcygpKXIrPXMuc2l6ZTtmb3IoY29uc3QgcyBvZiB4ZS5nZXQodGhpcykudmFsdWVzKCkpcis9cy5zaXplfXJldHVybiByfWJpbmRNZXRob2RzKGUscil7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3I9UHIocik7Zm9yKGNvbnN0IG4gb2Ygcil7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fTtjb25zdCBrcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhXZS5wcm90b3R5cGUpLmZpbHRlcih0PT50IT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFdlLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6R2Usd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV2UsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOiRlLHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7dmFyIHlzPVdlO2NvbnN0IHd0PW1zKHlzKTtmdW5jdGlvbiBicyh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmIm1lc3NhZ2UiaW4gdCYmdHlwZW9mIHQubWVzc2FnZT09InN0cmluZyJ9ZnVuY3Rpb24gZ3ModCl7aWYoYnModCkpcmV0dXJuIHQ7dHJ5e3JldHVybiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodCkpfWNhdGNoe3JldHVybiBuZXcgRXJyb3IoU3RyaW5nKHQpKX19ZnVuY3Rpb24gQXQodCl7cmV0dXJuIGdzKHQpLm1lc3NhZ2V9dmFyIHhzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxFcz0odCxlLHIpPT5lIGluIHQ/eHModCxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSk6dFtlXT1yLF9zPSh0LGUscik9PihFcyh0LGUrIiIscikscik7Y29uc3QgVHM9ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIix3cz0iaHR0cHM6Ly8iLEFzPTFlNDtsZXQgSGU7Y29uc3QgdnM9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIFNzKCl7aWYoIUhlJiYoSGU9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFIZSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBIZSh2cyl9Y29uc3QgVD1bXTtmb3IobGV0IHQ9MDt0PDI1NjsrK3QpVC5wdXNoKCh0KzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiBJcyh0LGU9MCl7cmV0dXJuKFRbdFtlKzBdXStUW3RbZSsxXV0rVFt0W2UrMl1dK1RbdFtlKzNdXSsiLSIrVFt0W2UrNF1dK1RbdFtlKzVdXSsiLSIrVFt0W2UrNl1dK1RbdFtlKzddXSsiLSIrVFt0W2UrOF1dK1RbdFtlKzldXSsiLSIrVFt0W2UrMTBdXStUW3RbZSsxMV1dK1RbdFtlKzEyXV0rVFt0W2UrMTNdXStUW3RbZSsxNF1dK1RbdFtlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3QgUnM9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksQ3I9e3JhbmRvbVVVSUQ6UnN9O2Z1bmN0aW9uIEZzKHQsZSxyKXtpZihDci5yYW5kb21VVUlEJiYhZSYmIXQpcmV0dXJuIENyLnJhbmRvbVVVSUQoKTt0PXR8fHt9O2NvbnN0IG49dC5yYW5kb218fCh0LnJuZ3x8U3MpKCk7cmV0dXJuIG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LElzKG4pfWZ1bmN0aW9uIHZ0KHQsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCByPWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHJbdF18fChyW3RdPWUpLHJbdF19Y29uc3QgTz12dCgiZ2xvYmFscyIse30pO3ZhciBRPSh0PT4odC5JTklUPSJJTklUIix0LkZPUldBUkQ9IkZPUldBUkQiLHQuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHQuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHQpKShRfHx7fSk7ZnVuY3Rpb24gQnIodCl7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnQgaW5zdGFuY2VvZiBlKX1sZXQgUHM9MDtmdW5jdGlvbiBrcyh0LGUscixuLHMpe2NvbnN0IGk9UHMrKztyZXR1cm4gdC5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOmUsZnVuY3Rpb25OYW1lOnIsYXJnczpufSxuLmZpbHRlcihhPT5CcihhKSkpLG5ldyBQcm9taXNlKGE9PntzPT1udWxsfHxzLnNldChpLGEpfSl9ZnVuY3Rpb24gX2UodCxlKXtjb25zdHtpZDpyLHR5cGU6bn09dCxzPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnIsdHlwZTpuLHJlc3VsdDplfSxzLmZpbHRlcihpPT5CcihpKSkpfWNvbnN0IERyPXZ0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gTXIoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIENzKCl7aWYoTXIoKSlfZSh7dHlwZTpRLkdMT0JBTFNfU1lOQ30sTyk7ZWxzZXtjb25zdCB0PVtdO2Zvcihjb25zdCBlIGluIERyKXtjb25zdHt3b3JrZXI6cixyZXNvbHZlcnM6bn09RHJbZV0ud29ya2VyQ29udGV4dDtyJiZ0LnB1c2goa3MocixRLkdMT0JBTFNfU1lOQywiIixbT10sbikpfWF3YWl0IFByb21pc2UuYWxsKHQpfX1mdW5jdGlvbiBqZSh0LGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHIgaW4gZSlkZWxldGUgZVtyXTtmb3IoY29uc3QgciBpbiB0KUFycmF5LmlzQXJyYXkodFtyXSk/KGVbcl09W10samUodFtyXSxlW3JdKSk6dHlwZW9mIHRbcl09PSJvYmplY3QiPyhlW3JdPXt9LGplKHRbcl0sZVtyXSkpOmVbcl09dFtyXX1hc3luYyBmdW5jdGlvbiBCcyh0LGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTpyLGFyZ3M6bn09dDtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCFyKXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVtyXSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7cn1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO19lKHQsYXdhaXQgZS5pbnN0YW5jZVtyXSguLi5uPz9bXSkpfWNvbnN0IERzPXZ0KCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIE1zKHQsZSl7aWYoIXQuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFtyLG5dPXQuYXJncyxzPURzW3JdO2lmKHMpZS5pbnN0YW5jZT1uZXcgcyh0LmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHtyfWA7amUobixPKSxfZSh0LHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBVcyh0LGUpe2NvbnN0e2FyZ3M6cn09dDtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi5yPz9bXSkpLF9lKHQsbil9ZnVuY3Rpb24gTnModCl7aWYoIXQuYXJncyl0aHJvdyJNaXNzaW5nIGdsb2JhbHMgd2hpbGUgc3luY2luZyI7amUodC5hcmdzWzBdLE8pLF9lKHQse30pfWZ1bmN0aW9uIE9zKCl7Y29uc3QgdD17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHI9ZS5kYXRhO3N3aXRjaChyLnR5cGUpe2Nhc2UgUS5JTklUOk1zKHIsdCk7YnJlYWs7Y2FzZSBRLkZPUldBUkQ6QnMocix0KTticmVhaztjYXNlIFEuVEVSTUlOQVRFOlVzKHIsdCk7YnJlYWs7Y2FzZSBRLkdMT0JBTFNfU1lOQzpOcyhyKTticmVha319fU1yKCkmJk9zKCk7ZnVuY3Rpb24gTHModCxlKXtyZXR1cm4gT1t0XXx8KE9bdF09ZSksWygpPT5PW3RdLGFzeW5jIHI9PntPW3RdPXIsYXdhaXQgQ3MoKX1dfWZ1bmN0aW9uIHpzKHQsZSl7cmV0dXJuIExzKHQsZSl9Y29uc3RbR3MsJHNdPXpzKCJtZXRhZGF0YSIpO2Z1bmN0aW9uIFZzKHQpeyRzKHQpfWZ1bmN0aW9uIFN0KCl7cmV0dXJuIEdzKCl9bGV0IEl0PWNsYXNze2NvbnN0cnVjdG9yKGUscil7X3ModGhpcywidXVpZCIpLHRoaXMuY29uZmlnPWUsdGhpcy51dWlkPXI/P0ZzKCl9YXN5bmMgc2VuZChlKXt2YXIgcixuLHM7Y29uc3R7YXBwSWQ6aSxzb3VyY2VUeXBlOmF9PShyPVN0KCkpIT1udWxsP3I6e307aWYoIWl8fCFhKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBvPW5ldyBBYm9ydENvbnRyb2xsZXIsYz1zZXRUaW1lb3V0KCgpPT5vLmFib3J0KCksQXMpO3JldHVybiBhd2FpdCgocz0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP3M6ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDpvLnNpZ25hbH0pLGNsZWFyVGltZW91dChjKSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHI9KGU9U3QoKS5wcm94eVVybCkhPW51bGw/ZTp3cztyZXR1cm4gcis9KHIuYXQoLTEpPT09Ii8iPyIiOiIvIikrVHMscn1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3Qgcj1TdCgpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6ci5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDpyLnByb3h5VXJsLHNvdXJjZTpyLnNvdXJjZVR5cGV9fX07Y29uc3QgWGU9IjIuMC40IjtjbGFzcyBXc3tjb25zdHJ1Y3RvcihlLHIpe3RoaXMuY29uZmlnPWUsdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ9MCx0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50PTAsdGhpcy5zdGFydEF0PTAsdGhpcy5yZXBvcnRlcj1uZXcgSXQoZSxyKX1hc3luYyBvbkZyYW1lRnJvbVNvdXJjZSgpe3RoaXMuZnJhbWVGcm9tU291cmNlQ291bnQrK31nZXQgZnBzKCl7Y29uc3R7c3RhcnRBdDplLGZyYW1lRnJvbVNvdXJjZUNvdW50OnJ9PXRoaXMsbj0oRGF0ZS5ub3coKS1lKS8xZTM7cmV0dXJuIHIvbn1hc3luYyBvbkZyYW1lVHJhbnNmb3JtZWQoZT17fSxyPSExKXt0aGlzLnN0YXJ0QXQ9PT0wJiYodGhpcy5zdGFydEF0PURhdGUubm93KCkpLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50Kys7Y29uc3R7c3RhcnRBdDpuLGZyYW1lVHJhbnNmb3JtZWRDb3VudDpzLGZyYW1lRnJvbVNvdXJjZUNvdW50Oml9PXRoaXMsYT1EYXRlLm5vdygpLG89KGEtbikvMWUzLGM9cy9vLHU9aS9vO3JldHVybiByfHx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD49dGhpcy5jb25maWcubG9nZ2luZ0ludGVydmFsRnJhbWVDb3VudD8odGhpcy5mcmFtZUZyb21Tb3VyY2VDb3VudD0wLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50PTAsdGhpcy5zdGFydEF0PWEsdGhpcy5yZXBvcnRlci5jb25maWc9dGhpcy5jb25maWcsdGhpcy5yZXBvcnRlci5zZW5kKHsuLi50aGlzLmNvbmZpZy5yZXBvcnQsdmFyaWF0aW9uOiJRb1MiLGZwczp1LHRyYW5zZm9ybWVkRnBzOmMsZnJhbWVzVHJhbnNmb3JtZWQ6cywuLi5lfSkpOiJzdWNjZXNzIn19dmFyIFJ0PSh0PT4odC5waXBlbGluZV9lbmRlZD0icGlwZWxpbmVfZW5kZWQiLHQucGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIsdC5waXBlbGluZV9zdGFydGVkPSJwaXBlbGluZV9zdGFydGVkIix0LnBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIix0LnBpcGVsaW5lX3Jlc3RhcnRlZD0icGlwZWxpbmVfcmVzdGFydGVkIix0LnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvciIsdCkpKFJ0fHx7fSk7Y29uc3QgSHM9NTAwLGpzPS44O2NsYXNzIFhzIGV4dGVuZHMgd3R7Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMucmVwb3J0ZXJfPW5ldyBJdCx0aGlzLnJlcG9ydGVyUW9zXz1uZXcgV3Moe2xvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ6SHMscmVwb3J0Ont2ZXJzaW9uOlhlfX0pLHRoaXMuaW5kZXhfPXIsdGhpcy50cmFuc2Zvcm1lcl89ZSx0aGlzLnNob3VsZFN0b3BfPSExLHRoaXMuaXNGbGFzaGVkXz0hMSx0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89MCx0aGlzLnZpZGVvSGVpZ2h0Xz0wLHRoaXMudmlkZW9XaWR0aF89MCx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMSx0aGlzLnRyYW5zZm9ybWVyVHlwZV89IkN1c3RvbSIsImdldFRyYW5zZm9ybWVyVHlwZSJpbiBlJiYodGhpcy50cmFuc2Zvcm1lclR5cGVfPWUuZ2V0VHJhbnNmb3JtZXJUeXBlKCkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lfWFzeW5jIHN0YXJ0KGUpe2lmKHRoaXMuY29udHJvbGxlcl89ZSx0aGlzLnRyYW5zZm9ybWVyXyYmdHlwZW9mIHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0PT0iZnVuY3Rpb24iKXRyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydChlKX1jYXRjaChyKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpELmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCx2YXJpYXRpb246IkVycm9yIixlcnJvcjpBdChyKX0pO2NvbnN0IG49e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnIsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsbil9fWFzeW5jIHRyYW5zZm9ybShlLHIpe3ZhciBuLHM7aWYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPT09MCYmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz1EYXRlLm5vdygpKSxlIGluc3RhbmNlb2YgVmlkZW9GcmFtZSYmKHRoaXMudmlkZW9IZWlnaHRfPShlPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlIZWlnaHQpPz8wLHRoaXMudmlkZW9XaWR0aF89KGU9PW51bGw/dm9pZCAwOmUuZGlzcGxheVdpZHRoKT8/MCksdGhpcy5yZXBvcnRlclFvc18ub25GcmFtZUZyb21Tb3VyY2UoKSx0aGlzLnRyYW5zZm9ybWVyXylpZih0aGlzLnNob3VsZFN0b3BfKWNvbnNvbGUud2FybigiW1BpcGVsaW5lXSBmbHVzaCBmcm9tIHRyYW5zZm9ybSIpLGUuY2xvc2UoKSx0aGlzLmZsdXNoKHIpLHIudGVybWluYXRlKCk7ZWxzZXt0cnl7YXdhaXQoKHM9KG49dGhpcy50cmFuc2Zvcm1lcl8pLnRyYW5zZm9ybSk9PW51bGw/dm9pZCAwOnMuY2FsbChuLGUscikpLHRoaXMucmVwb3J0UW9zKCl9Y2F0Y2goaSl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6RC5lcnJvcnMudHJhbnNmb3JtZXJfdHJhbnNmb3JtLHZhcmlhdGlvbjoiRXJyb3IiLGVycm9yOkF0KGkpfSk7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6aSxmdW5jdGlvbjoidHJhbnNmb3JtIn07dGhpcy5lbWl0KCJlcnJvciIsYSl9aWYodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8hPS0xJiZ0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXypqcz50aGlzLnJlcG9ydGVyUW9zXy5mcHMpe2NvbnN0IGk9e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LHdhcm5pbmdUeXBlOiJmcHNfZHJvcCIsZHJvcEluZm86e3JlcXVlc3RlZDp0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyxjdXJyZW50OnRoaXMucmVwb3J0ZXJRb3NfLmZwc319O3RoaXMuZW1pdCgid2FybiIsaSl9fX1hc3luYyBmbHVzaChlKXtpZih0aGlzLnRyYW5zZm9ybWVyXyYmdHlwZW9mIHRoaXMudHJhbnNmb3JtZXJfLmZsdXNoPT0iZnVuY3Rpb24iJiYhdGhpcy5pc0ZsYXNoZWRfKXt0aGlzLmlzRmxhc2hlZF89ITA7dHJ5e2F3YWl0IHRoaXMudHJhbnNmb3JtZXJfLmZsdXNoKGUpfWNhdGNoKHIpe3RoaXMucmVwb3J0KHttZXNzYWdlOkQuZXJyb3JzLnRyYW5zZm9ybWVyX2ZsdXNoLHZhcmlhdGlvbjoiRXJyb3IiLGVycm9yOkF0KHIpfSk7Y29uc3Qgbj17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6cixmdW5jdGlvbjoiZmx1c2gifTt0aGlzLmVtaXQoImVycm9yIixuKX19dGhpcy5yZXBvcnRRb3MoITApLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkRlbGV0ZSJ9KX1zdG9wKCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gU3RvcCBzdHJlYW0uIiksdGhpcy5jb250cm9sbGVyXyYmKHRoaXMuZmx1c2godGhpcy5jb250cm9sbGVyXyksdGhpcy5jb250cm9sbGVyXy50ZXJtaW5hdGUoKSksdGhpcy5zaG91bGRTdG9wXz0hMH1yZXBvcnQoZSl7dGhpcy5yZXBvcnRlcl8uc2VuZCh7dmVyc2lvbjpYZSxhY3Rpb246Ik1lZGlhVHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyVHlwZTp0aGlzLnRyYW5zZm9ybWVyVHlwZV8sLi4uZX0pfXJlcG9ydFFvcyhlPSExKXt0aGlzLnJlcG9ydGVyUW9zXy5jb25maWc9ey4uLnRoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZ30sdGhpcy5yZXBvcnRlclFvc18ub25GcmFtZVRyYW5zZm9ybWVkKHt2ZXJzaW9uOlhlLGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXyx2aWRlb1dpZHRoOnRoaXMudmlkZW9XaWR0aF8sdmlkZW9IZWlnaHQ6dGhpcy52aWRlb0hlaWdodF99LGUpfX1jbGFzcyBZcyBleHRlbmRzIHd0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy50cmFuc2Zvcm1lcnNfPVtdLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtsZXQgbj1uZXcgWHMoZVtyXSxyKTtuLm9uKCJlcnJvciIscz0+e3RoaXMuZW1pdCgiZXJyb3IiLHMpfSksbi5vbigid2FybiIscz0+e3RoaXMuZW1pdCgid2FybiIscyl9KSx0aGlzLnRyYW5zZm9ybWVyc18ucHVzaChuKX19c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZTtmb3IobGV0IHIgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKXIuc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pfWFzeW5jIHN0YXJ0KGUscil7aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIE5vIHRyYW5zZm9ybWVycy4iKTtyZXR1cm59dHJ5e2xldCBuPWU7Zm9yKGxldCBzIG9mIHRoaXMudHJhbnNmb3JtZXJzXyllPWUucGlwZVRocm91Z2gobmV3IFRyYW5zZm9ybVN0cmVhbShzKSk7ZS5waXBlVG8ocikudGhlbihhc3luYygpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2V0dXAuIiksYXdhaXQgci5hYm9ydCgpLGF3YWl0IG4uY2FuY2VsKCksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZCIpfSkuY2F0Y2goYXN5bmMgcz0+e2UuY2FuY2VsKCkudGhlbigoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNodXR0aW5nIGRvd24gc3RyZWFtcyBhZnRlciBhYm9ydC4iKX0pLmNhdGNoKGk9Pntjb25zb2xlLmVycm9yKCJbUGlwZWxpbmVdIEVycm9yIGZyb20gc3RyZWFtIHRyYW5zZm9ybToiLGkpfSksYXdhaXQgci5hYm9ydChzKSxhd2FpdCBuLmNhbmNlbChzKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiKX0pfWNhdGNoe3RoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiksdGhpcy5kZXN0cm95KCk7cmV0dXJufXRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfc3RhcnRlZCIpLGNvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFBpcGVsaW5lIHN0YXJ0ZWQuIil9YXN5bmMgZGVzdHJveSgpe2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIERlc3Ryb3lpbmcgUGlwZWxpbmUuIik7Zm9yKGxldCBlIG9mIHRoaXMudHJhbnNmb3JtZXJzXyllLnN0b3AoKX19Y2xhc3MgUXMgZXh0ZW5kcyB3dHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5yZXBvcnRlcl89bmV3IEl0LHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lLHRoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9dHJhbnNmb3JtKGUscil7cmV0dXJuIHRoaXMucmVhZGFibGVfPWUsdGhpcy53cml0YWJsZV89cix0aGlzLnRyYW5zZm9ybUludGVybmFsKCl9dHJhbnNmb3JtSW50ZXJuYWwoKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZSxyKT0+e2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpELmVycm9ycy50cmFuc2Zvcm1lcl9ub25lLHZhcmlhdGlvbjoiRXJyb3IifSkscigiW01lZGlhUHJvY2Vzc29yXSBOZWVkIHRvIHNldCB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufWlmKCF0aGlzLnJlYWRhYmxlXyl7dGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRXJyb3IiLG1lc3NhZ2U6RC5lcnJvcnMucmVhZGFibGVfbnVsbH0pLHIoIltNZWRpYVByb2Nlc3Nvcl0gUmVhZGFibGUgaXMgbnVsbC4iKTtyZXR1cm59aWYoIXRoaXMud3JpdGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpELmVycm9ycy53cml0YWJsZV9udWxsfSkscigiW01lZGlhUHJvY2Vzc29yXSBXcml0YWJsZSBpcyBudWxsLiIpO3JldHVybn1sZXQgbj0hMTt0aGlzLnBpcGVsaW5lXyYmKG49ITAsdGhpcy5waXBlbGluZV8uY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCkpLHRoaXMucGlwZWxpbmVfPW5ldyBZcyh0aGlzLnRyYW5zZm9ybWVyc18pLHRoaXMucGlwZWxpbmVfLm9uKCJ3YXJuIixzPT57dGhpcy5lbWl0KCJ3YXJuIixzKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJlcnJvciIscz0+e3RoaXMuZW1pdCgiZXJyb3IiLHMpfSksdGhpcy5waXBlbGluZV8ub24oInBpcGVsaW5lSW5mbyIscz0+e24mJihzPT09InBpcGVsaW5lX3N0YXJ0ZWQiP3M9UnQucGlwZWxpbmVfcmVzdGFydGVkOnM9PT0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiYmKHM9UnQucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IpKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIscyl9KSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKSx0aGlzLnBpcGVsaW5lXy5zdGFydCh0aGlzLnJlYWRhYmxlXyx0aGlzLndyaXRhYmxlXykudGhlbigoKT0+e2UoKX0pLmNhdGNoKHM9PntyKHMpfSl9KX1zZXRUcmFuc2Zvcm1lcnMoZSl7cmV0dXJuIHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSIsbWVzc2FnZTpELnVwZGF0ZXMudHJhbnNmb3JtZXJfbmV3fSksdGhpcy50cmFuc2Zvcm1lcnNfPWUsdGhpcy5yZWFkYWJsZV8mJnRoaXMud3JpdGFibGVfP3RoaXMudHJhbnNmb3JtSW50ZXJuYWwoKTpQcm9taXNlLnJlc29sdmUoKX1kZXN0cm95KCl7cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGU9Pnt0aGlzLnBpcGVsaW5lXyYmdGhpcy5waXBlbGluZV8uZGVzdHJveSgpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkRlbGV0ZSJ9KSxlKCl9KX1yZXBvcnQoZSl7dGhpcy5yZXBvcnRlcl8uc2VuZCh7dmVyc2lvbjpYZSxhY3Rpb246Ik1lZGlhUHJvY2Vzc29yIiwuLi5lfSl9fXZhciBxcz1PYmplY3QuZGVmaW5lUHJvcGVydHksS3M9KHQsZSxyKT0+ZSBpbiB0P3FzKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cn0pOnRbZV09cixKcz0odCxlLHIpPT4oS3ModCxlKyIiLHIpLHIpO2NvbnN0IFpzPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyIsZWk9Imh0dHBzOi8vIix0aT0xZTQ7bGV0IFllO2NvbnN0IHJpPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBuaSgpe2lmKCFZZSYmKFllPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSwhWWUpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gWWUocmkpfWNvbnN0IHc9W107Zm9yKGxldCB0PTA7dDwyNTY7Kyt0KXcucHVzaCgodCsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24gc2kodCxlPTApe3JldHVybih3W3RbZSswXV0rd1t0W2UrMV1dK3dbdFtlKzJdXSt3W3RbZSszXV0rIi0iK3dbdFtlKzRdXSt3W3RbZSs1XV0rIi0iK3dbdFtlKzZdXSt3W3RbZSs3XV0rIi0iK3dbdFtlKzhdXSt3W3RbZSs5XV0rIi0iK3dbdFtlKzEwXV0rd1t0W2UrMTFdXSt3W3RbZSsxMl1dK3dbdFtlKzEzXV0rd1t0W2UrMTRdXSt3W3RbZSsxNV1dKS50b0xvd2VyQ2FzZSgpfWNvbnN0IGlpPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8ucmFuZG9tVVVJRCYmY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pLFVyPXtyYW5kb21VVUlEOmlpfTtmdW5jdGlvbiBvaSh0LGUscil7aWYoVXIucmFuZG9tVVVJRCYmIWUmJiF0KXJldHVybiBVci5yYW5kb21VVUlEKCk7dD10fHx7fTtjb25zdCBuPXQucmFuZG9tfHwodC5ybmd8fG5pKSgpO3JldHVybiBuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxzaShuKX1mdW5jdGlvbiBGdCh0LGUpe2dsb2JhbFRoaXMudm9uYWdlfHwoZ2xvYmFsVGhpcy52b25hZ2U9e30pLGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXJ8fChnbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyPXt9KTtsZXQgcj1nbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyO3JldHVybiByW3RdfHwoclt0XT1lKSxyW3RdfWNvbnN0IEw9RnQoImdsb2JhbHMiLHt9KTt2YXIgcT0odD0+KHQuSU5JVD0iSU5JVCIsdC5GT1JXQVJEPSJGT1JXQVJEIix0LlRFUk1JTkFURT0iVEVSTUlOQVRFIix0LkdMT0JBTFNfU1lOQz0iR0xPQkFMU19TWU5DIix0KSkocXx8e30pO2Z1bmN0aW9uIE5yKHQpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT50IGluc3RhbmNlb2YgZSl9bGV0IGFpPTA7ZnVuY3Rpb24gY2kodCxlLHIsbixzKXtjb25zdCBpPWFpKys7cmV0dXJuIHQucG9zdE1lc3NhZ2Uoe2lkOmksdHlwZTplLGZ1bmN0aW9uTmFtZTpyLGFyZ3M6bn0sbi5maWx0ZXIoYT0+TnIoYSkpKSxuZXcgUHJvbWlzZShhPT57cz09bnVsbHx8cy5zZXQoaSxhKX0pfWZ1bmN0aW9uIFRlKHQsZSl7Y29uc3R7aWQ6cix0eXBlOm59PXQscz1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDpyLHR5cGU6bixyZXN1bHQ6ZX0scy5maWx0ZXIoaT0+TnIoaSkpKX1jb25zdCBPcj1GdCgid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIExyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiB1aSgpe2lmKExyKCkpVGUoe3R5cGU6cS5HTE9CQUxTX1NZTkN9LEwpO2Vsc2V7Y29uc3QgdD1bXTtmb3IoY29uc3QgZSBpbiBPcil7Y29uc3R7d29ya2VyOnIscmVzb2x2ZXJzOm59PU9yW2VdLndvcmtlckNvbnRleHQ7ciYmdC5wdXNoKGNpKHIscS5HTE9CQUxTX1NZTkMsIiIsW0xdLG4pKX1hd2FpdCBQcm9taXNlLmFsbCh0KX19ZnVuY3Rpb24gUWUodCxlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCByIGluIGUpZGVsZXRlIGVbcl07Zm9yKGNvbnN0IHIgaW4gdClBcnJheS5pc0FycmF5KHRbcl0pPyhlW3JdPVtdLFFlKHRbcl0sZVtyXSkpOnR5cGVvZiB0W3JdPT0ib2JqZWN0Ij8oZVtyXT17fSxRZSh0W3JdLGVbcl0pKTplW3JdPXRbcl19YXN5bmMgZnVuY3Rpb24gZmkodCxlKXtjb25zdHtmdW5jdGlvbk5hbWU6cixhcmdzOm59PXQ7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighcil0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2Vbcl0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3J9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDtUZSh0LGF3YWl0IGUuaW5zdGFuY2Vbcl0oLi4ubj8/W10pKX1jb25zdCBsaT1GdCgicmVnaXN0ZXJlZFdvcmtlcnMiLHt9KTtmdW5jdGlvbiBkaSh0LGUpe2lmKCF0LmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbcixuXT10LmFyZ3Mscz1saVtyXTtpZihzKWUuaW5zdGFuY2U9bmV3IHModC5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7cn1gO1FlKG4sTCksVGUodCx0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gaGkodCxlKXtjb25zdHthcmdzOnJ9PXQ7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4ucj8/W10pKSxUZSh0LG4pfWZ1bmN0aW9uIG1pKHQpe2lmKCF0LmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO1FlKHQuYXJnc1swXSxMKSxUZSh0LHt9KX1mdW5jdGlvbiBwaSgpe2NvbnN0IHQ9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCByPWUuZGF0YTtzd2l0Y2goci50eXBlKXtjYXNlIHEuSU5JVDpkaShyLHQpO2JyZWFrO2Nhc2UgcS5GT1JXQVJEOmZpKHIsdCk7YnJlYWs7Y2FzZSBxLlRFUk1JTkFURTpoaShyLHQpO2JyZWFrO2Nhc2UgcS5HTE9CQUxTX1NZTkM6bWkocik7YnJlYWt9fX1McigpJiZwaSgpO2Z1bmN0aW9uIHlpKHQsZSl7cmV0dXJuIExbdF18fChMW3RdPWUpLFsoKT0+TFt0XSxhc3luYyByPT57TFt0XT1yLGF3YWl0IHVpKCl9XX1mdW5jdGlvbiBiaSh0LGUpe3JldHVybiB5aSh0LGUpfWNvbnN0W2dpLGZmXT1iaSgibWV0YWRhdGEiKTtmdW5jdGlvbiBQdCgpe3JldHVybiBnaSgpfWNsYXNzIHhpe2NvbnN0cnVjdG9yKGUpe0pzKHRoaXMsInV1aWQiLG9pKCkpLHRoaXMuY29uZmlnPWV9YXN5bmMgc2VuZChlKXt2YXIgcixuLHM7Y29uc3R7YXBwSWQ6aSxzb3VyY2VUeXBlOmF9PShyPVB0KCkpIT1udWxsP3I6e307aWYoIWl8fCFhKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBvPW5ldyBBYm9ydENvbnRyb2xsZXIsYz1zZXRUaW1lb3V0KCgpPT5vLmFib3J0KCksdGkpO3JldHVybiBhd2FpdCgocz0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP3M6ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDpvLnNpZ25hbH0pLGNsZWFyVGltZW91dChjKSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHI9KGU9UHQoKS5wcm94eVVybCkhPW51bGw/ZTplaTtyZXR1cm4gcis9KHIuYXQoLTEpPT09Ii8iPyIiOiIvIikrWnMscn1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3Qgcj1QdCgpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6ci5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDpyLnByb3h5VXJsLHNvdXJjZTpyLnNvdXJjZVR5cGV9fX1jb25zdCBFaT0iNi4wLjAtYWxwaGEuMiI7dmFyIHFlPSh0PT4odC5Mb3c9IkxvdyIsdC5IaWdoPSJIaWdoIix0KSkocWV8fHt9KSxrdD0odD0+KHQuRkFTVD0iRkFTVCIsdC5QUkVDSVNFPSJQUkVDSVNFIix0KSkoa3R8fHt9KSxLZT0odD0+KHQuQ0FOVkFTPSJDQU5WQVMiLHQuV0VCR0w9IldFQkdMIix0KSkoS2V8fHt9KTtmdW5jdGlvbiBfaSgpe2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIse2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITB9KTtpZihlKXtjb25zdCByPWU9PW51bGw/dm9pZCAwOmUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTtyJiZyLmxvc2VDb250ZXh0KCl9ZWxzZSByZXR1cm57c3VwcG9ydGVkOiExLG1lc3NhZ2U6IllvdXIgaGFyZHdhcmUgZG9lcyBub3QgcGVyZm9ybSBnb29kIGVub3VnaCB0byBydW4gdGhlIGxpYnJhcnkgZWZmaWNpZW50bHkifTtyZXR1cm57c3VwcG9ydGVkOiEwfX1jbGFzcyBDdHtjb25zdHJ1Y3Rvcigpe2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHI9ZS5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pO2lmKCFyKXRocm93IkZhaWwgdG8gcmV0cmlldmUgMmQgY29udGV4dCI7dGhpcy5jYW52YXM9ZSx0aGlzLmNvbnRleHQ9cn1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt9ZW5hYmxlUG9zdFByb2Nlc3NpbmcoKXt9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7fWFzeW5jIHByb2ZpbGVXZWJnbChlKXtyZXR1cm5bXX1hc3luYyByZW5kZXIoZSxyKXtyZXR1cm4gdGhpcy5jYW52YXN9cmVzaXplQ2FudmFzKGUpe2NvbnN0e3dpZHRoOnIsaGVpZ2h0Om59PWU7dGhpcy5jYW52YXMud2lkdGg9cix0aGlzLmNhbnZhcy5oZWlnaHQ9bn1yZW5kZXJTaWxob3VldHRlKGUscixuPSJub25lIil7Y29uc3R7d2lkdGg6cyxoZWlnaHQ6aX09ZTt0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UociwwLDAsci53aWR0aCxyLmhlaWdodCwwLDAscyxpKSx0aGlzLmNvbnRleHQuZmlsdGVyPSJibHVyKDVweCkiLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShyLDAsMCxyLndpZHRoLHIuaGVpZ2h0LDAsMCxzLGkpLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsdGhpcy5jb250ZXh0LmZpbHRlcj1uLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAscyxpLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCl9ZGVzdHJveSgpe319Y2xhc3MgVGkgZXh0ZW5kcyBDdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMucmFkaXVzPWV9YXN5bmMgcmVuZGVyKGUscil7c3VwZXIucmVzaXplQ2FudmFzKGUpO2NvbnN0IG49YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAocik7cmV0dXJuIHRoaXMucmVuZGVyU2lsaG91ZXR0ZShlLG4pLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj1gYmx1cigke3RoaXMucmFkaXVzfXB4KWAsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHIpfX1jbGFzcyB3aSBleHRlbmRzIEN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5yYWRpdXM9ZX1hc3luYyByZW5kZXIoZSxyKXtzdXBlci5yZXNpemVDYW52YXMoZSk7Y29uc3Qgbj1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChyKTtyZXR1cm4gdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsbixgYmx1cigke3RoaXMucmFkaXVzfXB4KWApLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj0ibm9uZSIsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHIpfX1jbGFzcyBBaSBleHRlbmRzIEN0e3NldEJhY2tncm91bmRJbWFnZShlKXt0aGlzLmJhY2tncm91bmRJbWFnZT1lfWFzeW5jIHJlbmRlcihlLHIpe3N1cGVyLnJlc2l6ZUNhbnZhcyhlKTtjb25zdCBuPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHIpO3JldHVybiB0aGlzLnJlbmRlclNpbGhvdWV0dGUoZSxuKSx0aGlzLmJhY2tncm91bmRJbWFnZSYmKHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj0ibm9uZSIsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLmJhY2tncm91bmRJbWFnZSwwLDAsdGhpcy5iYWNrZ3JvdW5kSW1hZ2Uud2lkdGgsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaGVpZ2h0LDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpKSxzdXBlci5yZW5kZXIoZSxyKX19LyogQGxpY2Vuc2UgdHdnbC5qcyA1LjUuMSBDb3B5cmlnaHQgKGMpIDIwMTUsIEdyZWdnIFRhdmFyZXMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KQXZhaWxhYmxlIHZpYSB0aGUgTUlUIGxpY2Vuc2UuCnNlZTogaHR0cDovL2dpdGh1Yi5jb20vZ3JlZ2dtYW4vdHdnbC5qcyBmb3IgZGV0YWlscyAqL2NvbnN0IEJ0PTUxMjAsd2U9NTEyMSxEdD01MTIyLE10PTUxMjMsVXQ9NTEyNCxOdD01MTI1LE90PTUxMjYsdmk9MzI4MTksU2k9MzI4MjAsSWk9MzM2MzUsUmk9NTEzMSxGaT0zMzY0MCxQaT0zNTg5OSxraT0zNTkwMixDaT0zNjI2OSxCaT0zNDA0Mix6cj17fTt7Y29uc3QgdD16cjt0W0J0XT1JbnQ4QXJyYXksdFt3ZV09VWludDhBcnJheSx0W0R0XT1JbnQxNkFycmF5LHRbTXRdPVVpbnQxNkFycmF5LHRbVXRdPUludDMyQXJyYXksdFtOdF09VWludDMyQXJyYXksdFtPdF09RmxvYXQzMkFycmF5LHRbdmldPVVpbnQxNkFycmF5LHRbU2ldPVVpbnQxNkFycmF5LHRbSWldPVVpbnQxNkFycmF5LHRbUmldPVVpbnQxNkFycmF5LHRbRmldPVVpbnQzMkFycmF5LHRbUGldPVVpbnQzMkFycmF5LHRba2ldPVVpbnQzMkFycmF5LHRbQ2ldPVVpbnQzMkFycmF5LHRbQmldPVVpbnQzMkFycmF5fWZ1bmN0aW9uIEx0KHQpe2lmKHQgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpcmV0dXJuIEJ0O2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpcmV0dXJuIHdlO2lmKHQgaW5zdGFuY2VvZiBJbnQxNkFycmF5KXJldHVybiBEdDtpZih0IGluc3RhbmNlb2YgVWludDE2QXJyYXkpcmV0dXJuIE10O2lmKHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5KXJldHVybiBVdDtpZih0IGluc3RhbmNlb2YgVWludDMyQXJyYXkpcmV0dXJuIE50O2lmKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpcmV0dXJuIE90O3Rocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdHlwZWQgYXJyYXkgdHlwZSIpfWZ1bmN0aW9uIEdyKHQpe2lmKHQ9PT1JbnQ4QXJyYXkpcmV0dXJuIEJ0O2lmKHQ9PT1VaW50OEFycmF5fHx0PT09VWludDhDbGFtcGVkQXJyYXkpcmV0dXJuIHdlO2lmKHQ9PT1JbnQxNkFycmF5KXJldHVybiBEdDtpZih0PT09VWludDE2QXJyYXkpcmV0dXJuIE10O2lmKHQ9PT1JbnQzMkFycmF5KXJldHVybiBVdDtpZih0PT09VWludDMyQXJyYXkpcmV0dXJuIE50O2lmKHQ9PT1GbG9hdDMyQXJyYXkpcmV0dXJuIE90O3Rocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdHlwZWQgYXJyYXkgdHlwZSIpfWZ1bmN0aW9uICRyKHQpe2NvbnN0IGU9enJbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGdsIHR5cGUiKTtyZXR1cm4gZX1jb25zdCBKZT10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiP2Z1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmKGUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fGUuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9O2Z1bmN0aW9uIFZyKC4uLnQpe2NvbnNvbGUuZXJyb3IoLi4udCl9Y29uc3QgV3I9bmV3IE1hcDtmdW5jdGlvbiBaZSh0LGUpe2lmKCF0fHx0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuITE7bGV0IHI9V3IuZ2V0KGUpO3J8fChyPW5ldyBXZWFrTWFwLFdyLnNldChlLHIpKTtsZXQgbj1yLmdldCh0KTtpZihuPT09dm9pZCAwKXtjb25zdCBzPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KTtuPXMuc3Vic3RyaW5nKDgscy5sZW5ndGgtMSk9PT1lLHIuc2V0KHQsbil9cmV0dXJuIG59ZnVuY3Rpb24gRGkodCxlKXtyZXR1cm4gdHlwZW9mIFdlYkdMQnVmZmVyPCJ1IiYmWmUoZSwiV2ViR0xCdWZmZXIiKX1mdW5jdGlvbiBNaSh0LGUpe3JldHVybiB0eXBlb2YgV2ViR0xSZW5kZXJidWZmZXI8InUiJiZaZShlLCJXZWJHTFJlbmRlcmJ1ZmZlciIpfWZ1bmN0aW9uIHp0KHQsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFRleHR1cmU8InUiJiZaZShlLCJXZWJHTFRleHR1cmUiKX1mdW5jdGlvbiBVaSh0LGUpe3JldHVybiB0eXBlb2YgV2ViR0xTYW1wbGVyPCJ1IiYmWmUoZSwiV2ViR0xTYW1wbGVyIil9Y29uc3QgSHI9MzUwNDQsSz0zNDk2MixOaT0zNDk2MyxPaT0zNDY2MCxMaT01MTIwLHppPTUxMjEsR2k9NTEyMiwkaT01MTIzLFZpPTUxMjQsV2k9NTEyNSxqcj01MTI2LFhyPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIEhpKHQsZSxyLG4scyl7dC5iaW5kQnVmZmVyKGUsciksdC5idWZmZXJEYXRhKGUsbixzfHxIcil9ZnVuY3Rpb24gWXIodCxlLHIsbil7aWYoRGkodCxlKSlyZXR1cm4gZTtyPXJ8fEs7Y29uc3Qgcz10LmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBIaSh0LHIscyxlLG4pLHN9ZnVuY3Rpb24gUXIodCl7cmV0dXJuIHQ9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gamkodCl7cmV0dXJuIHQ9PT1JbnQ4QXJyYXl8fHQ9PT1VaW50OEFycmF5fWZ1bmN0aW9uIFhpKHQpe3JldHVybiB0Lmxlbmd0aD90OnQuZGF0YX1jb25zdCBZaT0vY29vcmR8dGV4dHVyZS9pLFFpPS9jb2xvcnxjb2xvdXIvaTtmdW5jdGlvbiBxaSh0LGUpe2xldCByO2lmKFlpLnRlc3QodCk/cj0yOlFpLnRlc3QodCk/cj00OnI9MyxlJXI+MCl0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZ3Vlc3MgbnVtQ29tcG9uZW50cyBmb3IgYXR0cmlidXRlICcke3R9Jy4gVHJpZWQgJHtyfSBidXQgJHtlfSB2YWx1ZXMgaXMgbm90IGV2ZW5seSBkaXZpc2libGUgYnkgJHtyfS4gWW91IHNob3VsZCBzcGVjaWZ5IGl0LmApO3JldHVybiByfWZ1bmN0aW9uIEtpKHQsZSxyKXtyZXR1cm4gdC5udW1Db21wb25lbnRzfHx0LnNpemV8fHFpKGUscnx8WGkodCkubGVuZ3RoKX1mdW5jdGlvbiBxcih0LGUpe2lmKEplKHQpKXJldHVybiB0O2lmKEplKHQuZGF0YSkpcmV0dXJuIHQuZGF0YTtBcnJheS5pc0FycmF5KHQpJiYodD17ZGF0YTp0fSk7bGV0IHI9dC50eXBlP0d0KHQudHlwZSk6dm9pZCAwO3JldHVybiByfHwoUXIoZSk/cj1VaW50MTZBcnJheTpyPUZsb2F0MzJBcnJheSksbmV3IHIodC5kYXRhKX1mdW5jdGlvbiBKaSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIiP3Q6dD9Hcih0KTpqcn1mdW5jdGlvbiBHdCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIiPyRyKHQpOnR8fEZsb2F0MzJBcnJheX1mdW5jdGlvbiBaaSh0LGUpe3JldHVybntidWZmZXI6ZS5idWZmZXIsbnVtVmFsdWVzOjIqMyo0LHR5cGU6SmkoZS50eXBlKSxhcnJheVR5cGU6R3QoZS50eXBlKX19ZnVuY3Rpb24gZW8odCxlKXtjb25zdCByPWUuZGF0YXx8ZSxuPUd0KGUudHlwZSkscz1yKm4uQllURVNfUEVSX0VMRU1FTlQsaT10LmNyZWF0ZUJ1ZmZlcigpO3JldHVybiB0LmJpbmRCdWZmZXIoSyxpKSx0LmJ1ZmZlckRhdGEoSyxzLGUuZHJhd1R5cGV8fEhyKSx7YnVmZmVyOmksbnVtVmFsdWVzOnIsdHlwZTpHcihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gdG8odCxlLHIpe2NvbnN0IG49cXIoZSxyKTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOllyKHQsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTpMdChuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gcm8odCxlKXtjb25zdCByPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFRcihuKSl7Y29uc3Qgcz1lW25dLGk9cy5hdHRyaWJ8fHMubmFtZXx8cy5hdHRyaWJOYW1lfHxYci5hdHRyaWJQcmVmaXgrbjtpZihzLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShzLnZhbHVlKSYmIUplKHMudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTtyW2ldPXt2YWx1ZTpzLnZhbHVlfX1lbHNle2xldCBhO3MuYnVmZmVyJiZzLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP2E9Wmk6dHlwZW9mIHM9PSJudW1iZXIifHx0eXBlb2Ygcy5kYXRhPT0ibnVtYmVyIj9hPWVvOmE9dG87Y29uc3R7YnVmZmVyOm8sdHlwZTpjLG51bVZhbHVlczp1LGFycmF5VHlwZTpmfT1hKHQscyxuKSxkPXMubm9ybWFsaXplIT09dm9pZCAwP3Mubm9ybWFsaXplOmppKGYpLGg9S2kocyxuLHUpO3JbaV09e2J1ZmZlcjpvLG51bUNvbXBvbmVudHM6aCx0eXBlOmMsbm9ybWFsaXplOmQsc3RyaWRlOnMuc3RyaWRlfHwwLG9mZnNldDpzLm9mZnNldHx8MCxkaXZpc29yOnMuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6cy5kaXZpc29yLGRyYXdUeXBlOnMuZHJhd1R5cGV9fX19KSx0LmJpbmRCdWZmZXIoSyxudWxsKSxyfWZ1bmN0aW9uIG5vKHQsZSl7cmV0dXJuIGU9PT1MaXx8ZT09PXppPzE6ZT09PUdpfHxlPT09JGk/MjplPT09Vml8fGU9PT1XaXx8ZT09PWpyPzQ6MH1jb25zdCAkdD1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIHNvKHQsZSl7bGV0IHIsbjtmb3Iobj0wO248JHQubGVuZ3RoJiYocj0kdFtuXSwhKHIgaW4gZXx8KHI9WHIuYXR0cmliUHJlZml4K3IsciBpbiBlKSkpOysrbik7bj09PSR0Lmxlbmd0aCYmKHI9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IHM9ZVtyXTtpZighcy5idWZmZXIpcmV0dXJuIDE7dC5iaW5kQnVmZmVyKEsscy5idWZmZXIpO2NvbnN0IGk9dC5nZXRCdWZmZXJQYXJhbWV0ZXIoSyxPaSk7dC5iaW5kQnVmZmVyKEssbnVsbCk7Y29uc3QgYT1ubyh0LHMudHlwZSksbz1pL2EsYz1zLm51bUNvbXBvbmVudHN8fHMuc2l6ZSx1PW8vYztpZih1JTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke2N9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIHV9ZnVuY3Rpb24gaW8odCxlLHIpe2NvbnN0IG49cm8odCxlKSxzPU9iamVjdC5hc3NpZ24oe30scnx8e30pO3MuYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHI/ci5hdHRyaWJzOnt9LG4pO2NvbnN0IGk9ZS5pbmRpY2VzO2lmKGkpe2NvbnN0IGE9cXIoaSwiaW5kaWNlcyIpO3MuaW5kaWNlcz1Zcih0LGEsTmkpLHMubnVtRWxlbWVudHM9YS5sZW5ndGgscy5lbGVtZW50VHlwZT1MdChhKX1lbHNlIHMubnVtRWxlbWVudHN8fChzLm51bUVsZW1lbnRzPXNvKHQscy5hdHRyaWJzKSk7cmV0dXJuIHN9ZnVuY3Rpb24gQWUodCl7cmV0dXJuISF0LnRleFN0b3JhZ2UyRH1jb25zdCBLcj1mdW5jdGlvbigpe2NvbnN0IHQ9e30sZT17fTtmdW5jdGlvbiByKG4pe2NvbnN0IHM9bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCF0W3NdKXtmb3IoY29uc3QgaSBpbiBuKWlmKHR5cGVvZiBuW2ldPT0ibnVtYmVyIil7Y29uc3QgYT1lW25baV1dO2VbbltpXV09YT9gJHthfSB8ICR7aX1gOml9dFtzXT0hMH19cmV0dXJuIGZ1bmN0aW9uKHMsaSl7cmV0dXJuIHIocyksZVtpXXx8KHR5cGVvZiBpPT0ibnVtYmVyIj9gMHgke2kudG9TdHJpbmcoMTYpfWA6aSl9fSgpLHo9e3RleHR1cmVDb2xvcjpuZXcgVWludDhBcnJheShbMTI4LDE5MiwyNTUsMjU1XSksdGV4dHVyZU9wdGlvbnM6e30sY3Jvc3NPcmlnaW46dm9pZCAwfSx2ZT1KZSxKcj1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0PXR8fCh0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50P2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik6bnVsbCksdH19KCksVnQ9NjQwNixQPTY0MDcsZz02NDA4LFd0PTY0MDksSHQ9NjQxMCxoZT02NDAyLGp0PTM0MDQxLGV0PTMzMDcxLG9vPTk3MjgsYW89OTcyOSxHPTM1NTMsJD0zNDA2NyxKPTMyODc5LFo9MzU4NjYsWHQ9MzQwNjksY289MzQwNzAsdW89MzQwNzEsZm89MzQwNzIsbG89MzQwNzMsaG89MzQwNzQsWXQ9MTAyNDEsUXQ9MTAyNDAsdHQ9MTAyNDIscnQ9MTAyNDMsWnI9MzI4ODIsbW89MzMwODIscG89MzMwODMseW89MzMwODQsYm89MzMwODUsZ289MzQ4OTIseG89MzQ4OTMscXQ9MzMxNyxlbj0zMzE0LHRuPTMyODc4LHJuPTMzMTYsbm49MzMxNSxzbj0zMjg3NyxFbz0zNzQ0Myxfbz0zNzQ0MSxUbz0zNzQ0MCx3bz0zMzMyMSxBbz0zNjc1Nix2bz0zMzMyNSxTbz0zMzMyNixJbz0zMzMzMCxSbz0zMzMyOSxGbz0zMzMzOCxQbz0zMzMzNyxrbz0zMzM0MCxDbz0zMzMzOSxCbz0zMzMyMyxEbz0zNjc1NyxNbz0zMzMyNyxVbz0zMzMyOCxObz0zMzMzNixPbz0zMzMzNSxMbz0zMzMzMix6bz0zMzMzMSxHbz0zMzMzNCwkbz0zMzMzMyxWbz0zMjg0OSxXbz0zNTkwNSxIbz0zNjE5NCxqbz0zNjc1OCxYbz0zNTg5OCxZbz0zNTkwMSxRbz0zNDg0Myxxbz0zNDgzNyxLbz0zNjIyMSxKbz0zNjIzOSxabz0zNjIxNSxlYT0zNjIzMyx0YT0zNjIwOSxyYT0zNjIyNyxuYT0zMjg1NixzYT0zNTkwNyxpYT0zNjc1OSxvYT0zMjg1NSxhYT0zMjg1NCxjYT0zMjg1Nyx1YT0zNDg0MixmYT0zNDgzNixsYT0zNjIyMCxkYT0zNjIzOCxoYT0zNjk3NSxtYT0zNjIxNCxwYT0zNjIzMix5YT0zNjIyNixiYT0zNjIwOCxnYT0zMzE4OSx4YT0zMzE5MCxFYT0zNjAxMixfYT0zNjAxMyxUYT0zNTA1NixWPTUxMjAsRT01MTIxLG50PTUxMjIsbWU9NTEyMyxzdD01MTI0LGVlPTUxMjUsQT01MTI2LG9uPTMyODE5LGFuPTMyODIwLGNuPTMzNjM1LGs9NTEzMSxTZT0zNjE5MyxLdD0zMzY0MCx3YT0zNTg5OSxBYT0zNTkwMix2YT0zNjI2OSxTYT0zNDA0MixJZT0zMzMxOSx0ZT0zMzMyMCxSZT02NDAzLHJlPTM2MjQ0LG5lPTM2MjQ4LFc9MzYyNDksSWE9e307e2NvbnN0IHQ9SWE7dFtWdF09e251bUNvbG9yQ29tcG9uZW50czoxfSx0W1d0XT17bnVtQ29sb3JDb21wb25lbnRzOjF9LHRbSHRdPXtudW1Db2xvckNvbXBvbmVudHM6Mn0sdFtQXT17bnVtQ29sb3JDb21wb25lbnRzOjN9LHRbZ109e251bUNvbG9yQ29tcG9uZW50czo0fSx0W1JlXT17bnVtQ29sb3JDb21wb25lbnRzOjF9LHRbcmVdPXtudW1Db2xvckNvbXBvbmVudHM6MX0sdFtJZV09e251bUNvbG9yQ29tcG9uZW50czoyfSx0W3RlXT17bnVtQ29sb3JDb21wb25lbnRzOjJ9LHRbUF09e251bUNvbG9yQ29tcG9uZW50czozfSx0W25lXT17bnVtQ29sb3JDb21wb25lbnRzOjN9LHRbZ109e251bUNvbG9yQ29tcG9uZW50czo0fSx0W1ddPXtudW1Db2xvckNvbXBvbmVudHM6NH0sdFtoZV09e251bUNvbG9yQ29tcG9uZW50czoxfSx0W2p0XT17bnVtQ29sb3JDb21wb25lbnRzOjJ9fWxldCBKdDtmdW5jdGlvbiBpdCh0KXtpZighSnQpe2NvbnN0IGU9e307ZVtWdF09e3RleHR1cmVGb3JtYXQ6VnQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbRSxrLFNlLEFdfSxlW1d0XT17dGV4dHVyZUZvcm1hdDpXdCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltFLGssU2UsQV19LGVbSHRdPXt0ZXh0dXJlRm9ybWF0Okh0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W0UsayxTZSxBXX0sZVtQXT17dGV4dHVyZUZvcm1hdDpQLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W0UsayxTZSxBLGNuXX0sZVtnXT17dGV4dHVyZUZvcm1hdDpnLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbRSxrLFNlLEEsb24sYW5dfSxlW2hlXT17dGV4dHVyZUZvcm1hdDpoZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W2VlLG1lXX0sZVt3b109e3RleHR1cmVGb3JtYXQ6UmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbRV19LGVbQW9dPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1ZdfSxlW3ZvXT17dGV4dHVyZUZvcm1hdDpSZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W0Esa119LGVbU29dPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0FdfSxlW0lvXT17dGV4dHVyZUZvcm1hdDpyZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltFXX0sZVtSb109e3RleHR1cmVGb3JtYXQ6cmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbVl19LGVbTG9dPXt0ZXh0dXJlRm9ybWF0OnJlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W21lXX0sZVt6b109e3RleHR1cmVGb3JtYXQ6cmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbbnRdfSxlW0dvXT17dGV4dHVyZUZvcm1hdDpyZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltlZV19LGVbJG9dPXt0ZXh0dXJlRm9ybWF0OnJlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3N0XX0sZVtCb109e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbRV19LGVbRG9dPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W1ZdfSxlW01vXT17dGV4dHVyZUZvcm1hdDpJZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W0Esa119LGVbVW9dPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W0FdfSxlW05vXT17dGV4dHVyZUZvcm1hdDp0ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltFXX0sZVtPb109e3RleHR1cmVGb3JtYXQ6dGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbVl19LGVbRm9dPXt0ZXh0dXJlRm9ybWF0OnRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W21lXX0sZVtQb109e3RleHR1cmVGb3JtYXQ6dGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbbnRdfSxlW2tvXT17dGV4dHVyZUZvcm1hdDp0ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltlZV19LGVbQ29dPXt0ZXh0dXJlRm9ybWF0OnRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3N0XX0sZVtWb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltFXX0sZVtXb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltFXX0sZVtIb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDJdLHR5cGU6W0UsY25dfSxlW2pvXT17dGV4dHVyZUZvcm1hdDpQLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1ZdfSxlW1hvXT17dGV4dHVyZUZvcm1hdDpQLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbQSxrLHdhXX0sZVtZb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W0EsayxBYV19LGVbUW9dPXt0ZXh0dXJlRm9ybWF0OlAsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbQSxrXX0sZVtxb109e3RleHR1cmVGb3JtYXQ6UCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbQV19LGVbS29dPXt0ZXh0dXJlRm9ybWF0Om5lLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0VdfSxlW0pvXT17dGV4dHVyZUZvcm1hdDpuZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltWXX0sZVtab109e3RleHR1cmVGb3JtYXQ6bmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbbWVdfSxlW2VhXT17dGV4dHVyZUZvcm1hdDpuZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltudF19LGVbdGFdPXt0ZXh0dXJlRm9ybWF0Om5lLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltlZV19LGVbcmFdPXt0ZXh0dXJlRm9ybWF0Om5lLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltzdF19LGVbbmFdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbRV19LGVbc2FdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbRV19LGVbaWFdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbVl19LGVbb2FdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyLDRdLHR5cGU6W0UsYW4sS3RdfSxlW2FhXT17dGV4dHVyZUZvcm1hdDpnLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbRSxvbl19LGVbY2FdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbS3RdfSxlW3VhXT17dGV4dHVyZUZvcm1hdDpnLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzE2LDhdLHR5cGU6W0Esa119LGVbZmFdPXt0ZXh0dXJlRm9ybWF0OmcsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W0FdfSxlW2xhXT17dGV4dHVyZUZvcm1hdDpXLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0VdfSxlW2RhXT17dGV4dHVyZUZvcm1hdDpXLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1ZdfSxlW2hhXT17dGV4dHVyZUZvcm1hdDpXLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0t0XX0sZVttYV09e3RleHR1cmVGb3JtYXQ6Vyxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOlttZV19LGVbcGFdPXt0ZXh0dXJlRm9ybWF0OlcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbbnRdfSxlW3lhXT17dGV4dHVyZUZvcm1hdDpXLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltzdF19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0OlcsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W2VlXX0sZVtnYV09e3RleHR1cmVGb3JtYXQ6aGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlttZSxlZV19LGVbeGFdPXt0ZXh0dXJlRm9ybWF0OmhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2VlXX0sZVtFYV09e3RleHR1cmVGb3JtYXQ6aGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQV19LGVbVGFdPXt0ZXh0dXJlRm9ybWF0Omp0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1NhXX0sZVtfYV09e3RleHR1cmVGb3JtYXQ6anQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbdmFdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2NvbnN0IG49ZVtyXTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKHMsaSl7Y29uc3QgYT1uLnR5cGVbaV07bi5ieXRlc1BlckVsZW1lbnRNYXBbYV09c30pfSksSnQ9ZX1yZXR1cm4gSnRbdF19ZnVuY3Rpb24gUmEodCxlKXtjb25zdCByPWl0KHQpO2lmKCFyKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXIuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIEZlKHQpe2NvbnN0IGU9aXQodCk7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiB1bih0KXtyZXR1cm4odCZ0LTEpPT09MH1mdW5jdGlvbiBGYSh0LGUscixuKXtpZighQWUodCkpcmV0dXJuIHVuKGUpJiZ1bihyKTtjb25zdCBzPWl0KG4pO2lmKCFzKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gcy5jb2xvclJlbmRlcmFibGUmJnMudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gUGEodCl7Y29uc3QgZT1pdCh0KTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24ga2EodCxlLHIpe3JldHVybiB2ZShlKT9MdChlKTpyfHxFfWZ1bmN0aW9uIG90KHQsZSxyLG4scyl7aWYocyUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighciYmIW4pe2NvbnN0IGk9TWF0aC5zcXJ0KHMvKGU9PT0kPzY6MSkpO2klMT09PTA/KHI9aSxuPWkpOihyPXMsbj0xKX1lbHNlIGlmKG4pe2lmKCFyJiYocj1zL24sciUxKSl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIn1lbHNlIGlmKG49cy9yLG4lMSl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19ZnVuY3Rpb24gcGUodCxlKXtlLmNvbG9yc3BhY2VDb252ZXJzaW9uIT09dm9pZCAwJiZ0LnBpeGVsU3RvcmVpKEVvLGUuY29sb3JzcGFjZUNvbnZlcnNpb24pLGUucHJlbXVsdGlwbHlBbHBoYSE9PXZvaWQgMCYmdC5waXhlbFN0b3JlaShfbyxlLnByZW11bHRpcGx5QWxwaGEpLGUuZmxpcFkhPT12b2lkIDAmJnQucGl4ZWxTdG9yZWkoVG8sZS5mbGlwWSl9ZnVuY3Rpb24gZm4odCl7dC5waXhlbFN0b3JlaShxdCw0KSxBZSh0KSYmKHQucGl4ZWxTdG9yZWkoZW4sMCksdC5waXhlbFN0b3JlaSh0biwwKSx0LnBpeGVsU3RvcmVpKHJuLDApLHQucGl4ZWxTdG9yZWkobm4sMCksdC5waXhlbFN0b3JlaShzbiwwKSl9ZnVuY3Rpb24gQ2EodCxlLHIsbil7bi5taW5NYWcmJihyLmNhbGwodCxlLFl0LG4ubWluTWFnKSxyLmNhbGwodCxlLFF0LG4ubWluTWFnKSksbi5taW4mJnIuY2FsbCh0LGUsWXQsbi5taW4pLG4ubWFnJiZyLmNhbGwodCxlLFF0LG4ubWFnKSxuLndyYXAmJihyLmNhbGwodCxlLHR0LG4ud3JhcCksci5jYWxsKHQsZSxydCxuLndyYXApLChlPT09Snx8VWkodCxlKSkmJnIuY2FsbCh0LGUsWnIsbi53cmFwKSksbi53cmFwUiYmci5jYWxsKHQsZSxacixuLndyYXBSKSxuLndyYXBTJiZyLmNhbGwodCxlLHR0LG4ud3JhcFMpLG4ud3JhcFQmJnIuY2FsbCh0LGUscnQsbi53cmFwVCksbi5taW5Mb2QhPT12b2lkIDAmJnIuY2FsbCh0LGUsbW8sbi5taW5Mb2QpLG4ubWF4TG9kIT09dm9pZCAwJiZyLmNhbGwodCxlLHBvLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCE9PXZvaWQgMCYmci5jYWxsKHQsZSx5byxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCE9PXZvaWQgMCYmci5jYWxsKHQsZSxibyxuLm1heExldmVsKSxuLmNvbXBhcmVGdW5jIT09dm9pZCAwJiZyLmNhbGwodCxlLHhvLG4uY29tcGFyZUZ1bmMpLG4uY29tcGFyZU1vZGUhPT12b2lkIDAmJnIuY2FsbCh0LGUsZ28sbi5jb21wYXJlTW9kZSl9ZnVuY3Rpb24gbG4odCxlLHIpe2NvbnN0IG49ci50YXJnZXR8fEc7dC5iaW5kVGV4dHVyZShuLGUpLENhKHQsbix0LnRleFBhcmFtZXRlcmkscil9ZnVuY3Rpb24gQmEodCl7cmV0dXJuIHQ9dHx8ei50ZXh0dXJlQ29sb3IsdmUodCk/dDpuZXcgVWludDhBcnJheShbdFswXSoyNTUsdFsxXSoyNTUsdFsyXSoyNTUsdFszXSoyNTVdKX1mdW5jdGlvbiBadCh0LGUscixuLHMsaSl7cj1yfHx6LnRleHR1cmVPcHRpb25zLGk9aXx8Zztjb25zdCBhPXIudGFyZ2V0fHxHO2lmKG49bnx8ci53aWR0aCxzPXN8fHIuaGVpZ2h0LHQuYmluZFRleHR1cmUoYSxlKSxGYSh0LG4scyxpKSl0LmdlbmVyYXRlTWlwbWFwKGEpO2Vsc2V7Y29uc3Qgbz1QYShpKT9hbzpvbzt0LnRleFBhcmFtZXRlcmkoYSxZdCxvKSx0LnRleFBhcmFtZXRlcmkoYSxRdCxvKSx0LnRleFBhcmFtZXRlcmkoYSx0dCxldCksdC50ZXhQYXJhbWV0ZXJpKGEscnQsZXQpfX1mdW5jdGlvbiBQZSh0KXtyZXR1cm4gdC5hdXRvPT09ITB8fHQuYXV0bz09PXZvaWQgMCYmdC5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiBlcih0LGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W1h0LGNvLHVvLGZvLGxvLGhvXX1mdW5jdGlvbiB0cih0LGUpe2NvbnN0IG49ZXIodCxlKS5tYXAoZnVuY3Rpb24ocyxpKXtyZXR1cm57ZmFjZTpzLG5keDppfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24ocyxpKXtyZXR1cm4gcy5mYWNlLWkuZmFjZX0pLG59ZnVuY3Rpb24gZG4odCxlLHIsbil7bj1ufHx6LnRleHR1cmVPcHRpb25zO2NvbnN0IHM9bi50YXJnZXR8fEcsaT1uLmxldmVsfHwwO2xldCBhPXIud2lkdGgsbz1yLmhlaWdodDtjb25zdCBjPW4uaW50ZXJuYWxGb3JtYXR8fG4uZm9ybWF0fHxnLHU9RmUoYyksZj1uLmZvcm1hdHx8dS5mb3JtYXQsZD1uLnR5cGV8fHUudHlwZTtpZihwZSh0LG4pLHQuYmluZFRleHR1cmUocyxlKSxzPT09JCl7Y29uc3QgaD1yLndpZHRoLHA9ci5oZWlnaHQ7bGV0IGwseTtpZihoLzY9PT1wKWw9cCx5PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihwLzY9PT1oKWw9aCx5PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZihoLzM9PT1wLzIpbD1oLzMseT1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoaC8yPT09cC8zKWw9aC8yLHk9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyhyLnNyYz9yLnNyYzpyLm5vZGVOYW1lKTtjb25zdCBiPUpyKCk7Yj8oYi5jYW52YXMud2lkdGg9bCxiLmNhbnZhcy5oZWlnaHQ9bCxhPWwsbz1sLHRyKHQsbikuZm9yRWFjaChmdW5jdGlvbih4KXtjb25zdCBTPXlbeC5uZHgqMiswXSpsLEY9eVt4Lm5keCoyKzFdKmw7Yi5kcmF3SW1hZ2UocixTLEYsbCxsLDAsMCxsLGwpLHQudGV4SW1hZ2UyRCh4LmZhY2UsaSxjLGYsZCxiLmNhbnZhcyl9KSxiLmNhbnZhcy53aWR0aD0xLGIuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYoYT1sLG89bCx0cih0LG4pLmZvckVhY2goZnVuY3Rpb24oeCl7Y29uc3QgUz15W3gubmR4KjIrMF0qbCxGPXlbeC5uZHgqMisxXSpsO3QudGV4SW1hZ2UyRCh4LmZhY2UsaSxjLGwsbCwwLGYsZCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcChyLFMsRixsLGwse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oWCl7cGUodCxuKSx0LmJpbmRUZXh0dXJlKHMsZSksdC50ZXhJbWFnZTJEKHguZmFjZSxpLGMsZixkLFgpLFBlKG4pJiZadCh0LGUsbixhLG8sYyl9KX0pKX1lbHNlIGlmKHM9PT1KfHxzPT09Wil7Y29uc3QgaD1NYXRoLm1pbihyLndpZHRoLHIuaGVpZ2h0KSxwPU1hdGgubWF4KHIud2lkdGgsci5oZWlnaHQpLGw9cC9oO2lmKGwlMSE9PTApdGhyb3ciY2FuIG5vdCBjb21wdXRlIDNEIGRpbWVuc2lvbnMgb2YgZWxlbWVudCI7Y29uc3QgeT1yLndpZHRoPT09cD8xOjAsYj1yLmhlaWdodD09PXA/MTowO3QucGl4ZWxTdG9yZWkocXQsMSksdC5waXhlbFN0b3JlaShlbixyLndpZHRoKSx0LnBpeGVsU3RvcmVpKHRuLDApLHQucGl4ZWxTdG9yZWkoc24sMCksdC50ZXhJbWFnZTNEKHMsaSxjLGgsaCxoLDAsZixkLG51bGwpO2ZvcihsZXQgeD0wO3g8bDsrK3gpe2NvbnN0IFM9eCpoKnksRj14KmgqYjt0LnBpeGVsU3RvcmVpKHJuLFMpLHQucGl4ZWxTdG9yZWkobm4sRiksdC50ZXhTdWJJbWFnZTNEKHMsaSwwLDAseCxoLGgsMSxmLGQscil9Zm4odCl9ZWxzZSB0LnRleEltYWdlMkQocyxpLGMsZixkLHIpO1BlKG4pJiZadCh0LGUsbixhLG8sYyksbG4odCxlLG4pfWZ1bmN0aW9uIGtlKCl7fWZ1bmN0aW9uIERhKHQpe2lmKHR5cGVvZiBkb2N1bWVudDwidSIpe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiBlLmhyZWY9dCxlLmhvc3RuYW1lPT09bG9jYXRpb24uaG9zdG5hbWUmJmUucG9ydD09PWxvY2F0aW9uLnBvcnQmJmUucHJvdG9jb2w9PT1sb2NhdGlvbi5wcm90b2NvbH1lbHNle2NvbnN0IGU9bmV3IFVSTChsb2NhdGlvbi5ocmVmKS5vcmlnaW47cmV0dXJuIG5ldyBVUkwodCxsb2NhdGlvbi5ocmVmKS5vcmlnaW49PT1lfX1mdW5jdGlvbiBNYSh0LGUpe3JldHVybiBlPT09dm9pZCAwJiYhRGEodCk/ImFub255bW91cyI6ZX1mdW5jdGlvbiBVYSh0LGUscil7cj1yfHxrZTtsZXQgbjtpZihlPWUhPT12b2lkIDA/ZTp6LmNyb3NzT3JpZ2luLGU9TWEodCxlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBzPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsaSksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixhKSxuPW51bGx9LGk9ZnVuY3Rpb24oKXtjb25zdCBjPSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3Q7VnIoYykscihjLG4pLHMoKX0sYT1mdW5jdGlvbigpe3IobnVsbCxuKSxzKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixpKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGEpLG4uc3JjPXQsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBzLGk7Y29uc3QgYT1mdW5jdGlvbigpe3IocyxpKX0sbz17fTtlJiYoby5tb2RlPSJjb3JzIiksZmV0Y2godCxvKS50aGVuKGZ1bmN0aW9uKGMpe2lmKCFjLm9rKXRocm93IGM7cmV0dXJuIGMuYmxvYigpfSkudGhlbihmdW5jdGlvbihjKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAoYyx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKGMpe2k9YyxzZXRUaW1lb3V0KGEpfSkuY2F0Y2goZnVuY3Rpb24oYyl7cz1jLHNldFRpbWVvdXQoYSl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gaG4odCl7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnQgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBycih0LGUscil7cmV0dXJuIGhuKHQpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cihudWxsLHQpfSksdCk6VWEodCxlLHIpfWZ1bmN0aW9uIG5yKHQsZSxyKXtyPXJ8fHoudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj1yLnRhcmdldHx8RztpZih0LmJpbmRUZXh0dXJlKG4sZSksci5jb2xvcj09PSExKXJldHVybjtjb25zdCBzPUJhKHIuY29sb3IpO2lmKG49PT0kKWZvcihsZXQgaT0wO2k8NjsrK2kpdC50ZXhJbWFnZTJEKFh0K2ksMCxnLDEsMSwwLGcsRSxzKTtlbHNlIG49PT1KfHxuPT09Wj90LnRleEltYWdlM0QobiwwLGcsMSwxLDEsMCxnLEUscyk6dC50ZXhJbWFnZTJEKG4sMCxnLDEsMSwwLGcsRSxzKX1mdW5jdGlvbiBOYSh0LGUscixuKXtyZXR1cm4gbj1ufHxrZSxyPXJ8fHoudGV4dHVyZU9wdGlvbnMsbnIodCxlLHIpLHI9T2JqZWN0LmFzc2lnbih7fSxyKSxycihyLnNyYyxyLmNyb3NzT3JpZ2luLGZ1bmN0aW9uKGksYSl7aT9uKGksZSxhKTooZG4odCxlLGEsciksbihudWxsLGUsYSkpfSl9ZnVuY3Rpb24gT2EodCxlLHIsbil7bj1ufHxrZTtjb25zdCBzPXIuc3JjO2lmKHMubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBpPXIubGV2ZWx8fDAsYT1yLmludGVybmFsRm9ybWF0fHxyLmZvcm1hdHx8ZyxvPUZlKGEpLGM9ci5mb3JtYXR8fG8uZm9ybWF0LHU9ci50eXBlfHxFLGY9ci50YXJnZXR8fEc7aWYoZiE9PSQpdGhyb3cidGFyZ2V0IG11c3QgYmUgVEVYVFVSRV9DVUJFX01BUCI7bnIodCxlLHIpLHI9T2JqZWN0LmFzc2lnbih7fSxyKTtsZXQgZD02O2NvbnN0IGg9W10scD1lcih0LHIpO2xldCBsO2Z1bmN0aW9uIHkoYil7cmV0dXJuIGZ1bmN0aW9uKHgsUyl7LS1kLHg/aC5wdXNoKHgpOlMud2lkdGghPT1TLmhlaWdodD9oLnB1c2goImN1YmVtYXAgZmFjZSBpbWcgaXMgbm90IGEgc3F1YXJlOiAiK1Muc3JjKToocGUodCxyKSx0LmJpbmRUZXh0dXJlKGYsZSksZD09PTU/ZXIoKS5mb3JFYWNoKGZ1bmN0aW9uKEYpe3QudGV4SW1hZ2UyRChGLGksYSxjLHUsUyl9KTp0LnRleEltYWdlMkQoYixpLGEsYyx1LFMpLFBlKHIpJiZ0LmdlbmVyYXRlTWlwbWFwKGYpKSxkPT09MCYmbihoLmxlbmd0aD9oOnZvaWQgMCxlLGwpfX1sPXMubWFwKGZ1bmN0aW9uKGIseCl7cmV0dXJuIHJyKGIsci5jcm9zc09yaWdpbix5KHBbeF0pKX0pfWZ1bmN0aW9uIExhKHQsZSxyLG4pe249bnx8a2U7Y29uc3Qgcz1yLnNyYyxpPXIuaW50ZXJuYWxGb3JtYXR8fHIuZm9ybWF0fHxnLGE9RmUoaSksbz1yLmZvcm1hdHx8YS5mb3JtYXQsYz1yLnR5cGV8fEUsdT1yLnRhcmdldHx8WjtpZih1IT09SiYmdSE9PVopdGhyb3cidGFyZ2V0IG11c3QgYmUgVEVYVFVSRV8zRCBvciBURVhUVVJFXzJEX0FSUkFZIjtucih0LGUscikscj1PYmplY3QuYXNzaWduKHt9LHIpO2xldCBmPXMubGVuZ3RoO2NvbnN0IGQ9W107bGV0IGg7Y29uc3QgcD1yLmxldmVsfHwwO2xldCBsPXIud2lkdGgseT1yLmhlaWdodDtjb25zdCBiPXMubGVuZ3RoO2xldCB4PSEwO2Z1bmN0aW9uIFMoRil7cmV0dXJuIGZ1bmN0aW9uKFgsc2Upe2lmKC0tZixYKWQucHVzaChYKTtlbHNle2lmKHBlKHQsciksdC5iaW5kVGV4dHVyZSh1LGUpLHgpe3g9ITEsbD1yLndpZHRofHxzZS53aWR0aCx5PXIuaGVpZ2h0fHxzZS5oZWlnaHQsdC50ZXhJbWFnZTNEKHUscCxpLGwseSxiLDAsbyxjLG51bGwpO2ZvcihsZXQgaWU9MDtpZTxiOysraWUpdC50ZXhTdWJJbWFnZTNEKHUscCwwLDAsaWUsbCx5LDEsbyxjLHNlKX1lbHNle2xldCBpZT1zZSxNOyhzZS53aWR0aCE9PWx8fHNlLmhlaWdodCE9PXkpJiYoTT1KcigpLGllPU0uY2FudmFzLE0uY2FudmFzLndpZHRoPWwsTS5jYW52YXMuaGVpZ2h0PXksTS5kcmF3SW1hZ2Uoc2UsMCwwLGwseSkpLHQudGV4U3ViSW1hZ2UzRCh1LHAsMCwwLEYsbCx5LDEsbyxjLGllKSxNJiZpZT09PU0uY2FudmFzJiYoTS5jYW52YXMud2lkdGg9MCxNLmNhbnZhcy5oZWlnaHQ9MCl9UGUocikmJnQuZ2VuZXJhdGVNaXBtYXAodSl9Zj09PTAmJm4oZC5sZW5ndGg/ZDp2b2lkIDAsZSxoKX19aD1zLm1hcChmdW5jdGlvbihGLFgpe3JldHVybiBycihGLHIuY3Jvc3NPcmlnaW4sUyhYKSl9KX1mdW5jdGlvbiB6YSh0LGUscixuKXtuPW58fHoudGV4dHVyZU9wdGlvbnM7Y29uc3Qgcz1uLnRhcmdldHx8Rzt0LmJpbmRUZXh0dXJlKHMsZSk7bGV0IGk9bi53aWR0aCxhPW4uaGVpZ2h0LG89bi5kZXB0aDtjb25zdCBjPW4ubGV2ZWx8fDAsdT1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8ZyxmPUZlKHUpLGQ9bi5mb3JtYXR8fGYuZm9ybWF0LGg9bi50eXBlfHxrYSh0LHIsZi50eXBlKTtpZih2ZShyKSlyIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJihyPW5ldyBVaW50OEFycmF5KHIuYnVmZmVyKSk7ZWxzZXtjb25zdCBiPSRyKGgpO3I9bmV3IGIocil9Y29uc3QgcD1SYSh1LGgpLGw9ci5ieXRlTGVuZ3RoL3A7aWYobCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrS3IodCxkKTtsZXQgeTtpZihzPT09Snx8cz09PVopaWYoIWkmJiFhJiYhbyl7Y29uc3QgYj1NYXRoLmNicnQobCk7aWYoYiUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBjdWJlIHNpemUgb2YgYXJyYXkgb2YgbnVtRWxlbWVudHM6ICIrbDtpPWIsYT1iLG89Yn1lbHNlIGkmJighYXx8IW8pPyh5PW90KHQscyxhLG8sbC9pKSxhPXkud2lkdGgsbz15LmhlaWdodCk6YSYmKCFpfHwhbyk/KHk9b3QodCxzLGksbyxsL2EpLGk9eS53aWR0aCxvPXkuaGVpZ2h0KTooeT1vdCh0LHMsaSxhLGwvbyksaT15LndpZHRoLGE9eS5oZWlnaHQpO2Vsc2UgeT1vdCh0LHMsaSxhLGwpLGk9eS53aWR0aCxhPXkuaGVpZ2h0O2lmKGZuKHQpLHQucGl4ZWxTdG9yZWkocXQsbi51bnBhY2tBbGlnbm1lbnR8fDEpLHBlKHQsbikscz09PSQpe2NvbnN0IGI9cC9yLkJZVEVTX1BFUl9FTEVNRU5ULHg9bC82KmI7dHIodCxuKS5mb3JFYWNoKFM9Pntjb25zdCBGPXgqUy5uZHgsWD1yLnN1YmFycmF5KEYsRit4KTt0LnRleEltYWdlMkQoUy5mYWNlLGMsdSxpLGEsMCxkLGgsWCl9KX1lbHNlIHM9PT1KfHxzPT09Wj90LnRleEltYWdlM0QocyxjLHUsaSxhLG8sMCxkLGgscik6dC50ZXhJbWFnZTJEKHMsYyx1LGksYSwwLGQsaCxyKTtyZXR1cm57d2lkdGg6aSxoZWlnaHQ6YSxkZXB0aDpvLHR5cGU6aH19ZnVuY3Rpb24gR2EodCxlLHIpe2NvbnN0IG49ci50YXJnZXR8fEc7dC5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IHM9ci5sZXZlbHx8MCxpPXIuaW50ZXJuYWxGb3JtYXR8fHIuZm9ybWF0fHxnLGE9RmUoaSksbz1yLmZvcm1hdHx8YS5mb3JtYXQsYz1yLnR5cGV8fGEudHlwZTtpZihwZSh0LHIpLG49PT0kKWZvcihsZXQgdT0wO3U8NjsrK3UpdC50ZXhJbWFnZTJEKFh0K3UscyxpLHIud2lkdGgsci5oZWlnaHQsMCxvLGMsbnVsbCk7ZWxzZSBuPT09Snx8bj09PVo/dC50ZXhJbWFnZTNEKG4scyxpLHIud2lkdGgsci5oZWlnaHQsci5kZXB0aCwwLG8sYyxudWxsKTp0LnRleEltYWdlMkQobixzLGksci53aWR0aCxyLmhlaWdodCwwLG8sYyxudWxsKX1mdW5jdGlvbiBtbih0LGUscil7cj1yfHxrZSxlPWV8fHoudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj10LmNyZWF0ZVRleHR1cmUoKSxzPWUudGFyZ2V0fHxHO2xldCBpPWUud2lkdGh8fDEsYT1lLmhlaWdodHx8MTtjb25zdCBvPWUuaW50ZXJuYWxGb3JtYXR8fGc7dC5iaW5kVGV4dHVyZShzLG4pLHM9PT0kJiYodC50ZXhQYXJhbWV0ZXJpKHMsdHQsZXQpLHQudGV4UGFyYW1ldGVyaShzLHJ0LGV0KSk7bGV0IGM9ZS5zcmM7aWYoYylpZih0eXBlb2YgYz09ImZ1bmN0aW9uIiYmKGM9Yyh0LGUpKSx0eXBlb2YgYz09InN0cmluZyIpTmEodCxuLGUscik7ZWxzZSBpZih2ZShjKXx8QXJyYXkuaXNBcnJheShjKSYmKHR5cGVvZiBjWzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheShjWzBdKXx8dmUoY1swXSkpKXtjb25zdCB1PXphKHQsbixjLGUpO2k9dS53aWR0aCxhPXUuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheShjKSYmKHR5cGVvZiBjWzBdPT0ic3RyaW5nInx8aG4oY1swXSkpP3M9PT0kP09hKHQsbixlLHIpOkxhKHQsbixlLHIpOihkbih0LG4sYyxlKSxpPWMud2lkdGgsYT1jLmhlaWdodCk7ZWxzZSBHYSh0LG4sZSk7cmV0dXJuIFBlKGUpJiZadCh0LG4sZSxpLGEsbyksbG4odCxuLGUpLG59Y29uc3Qgc3I9VnI7ZnVuY3Rpb24gcG4odCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpOm51bGx9Y29uc3QgYXQ9MzM5ODQsY3Q9MzQ5NjIsJGE9MzQ5NjMsVmE9MzU3MTMsV2E9MzU3MTQsSGE9MzU2MzIsamE9MzU2MzMsWGE9MzU5ODEseW49MzU3MTgsWWE9MzU3MjEsUWE9MzU5NzEscWE9MzUzODIsS2E9MzUzOTYsSmE9MzUzOTgsWmE9MzUzOTIsZWM9MzUzOTUsdXQ9NTEyNixibj0zNTY2NCxnbj0zNTY2NSx4bj0zNTY2Nixpcj01MTI0LEVuPTM1NjY3LF9uPTM1NjY4LFRuPTM1NjY5LHduPTM1NjcwLEFuPTM1NjcxLHZuPTM1NjcyLFNuPTM1NjczLEluPTM1Njc0LFJuPTM1Njc1LEZuPTM1Njc2LHRjPTM1Njc4LHJjPTM1NjgwLG5jPTM1Njc5LHNjPTM1NjgyLGljPTM1Njg1LG9jPTM1Njg2LGFjPTM1Njg3LGNjPTM1Njg4LHVjPTM1Njg5LGZjPTM1NjkwLGxjPTM2Mjg5LGRjPTM2MjkyLGhjPTM2MjkzLG9yPTUxMjUsUG49MzYyOTQsa249MzYyOTUsQ249MzYyOTYsbWM9MzYyOTgscGM9MzYyOTkseWM9MzYzMDAsYmM9MzYzMDMsZ2M9MzYzMDYseGM9MzYzMDcsRWM9MzYzMDgsX2M9MzYzMTEsZnQ9MzU1MyxsdD0zNDA2Nyxhcj0zMjg3OSxkdD0zNTg2NixtPXt9O2Z1bmN0aW9uIEJuKHQsZSl7cmV0dXJuIG1bZV0uYmluZFBvaW50fWZ1bmN0aW9uIFRjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTFmKGUscil9fWZ1bmN0aW9uIHdjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTFmdihlLHIpfX1mdW5jdGlvbiBBYyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm0yZnYoZSxyKX19ZnVuY3Rpb24gdmModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtM2Z2KGUscil9fWZ1bmN0aW9uIFNjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTRmdihlLHIpfX1mdW5jdGlvbiBEbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm0xaShlLHIpfX1mdW5jdGlvbiBNbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm0xaXYoZSxyKX19ZnVuY3Rpb24gVW4odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtMml2KGUscil9fWZ1bmN0aW9uIE5uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTNpdihlLHIpfX1mdW5jdGlvbiBPbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm00aXYoZSxyKX19ZnVuY3Rpb24gSWModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtMXVpKGUscil9fWZ1bmN0aW9uIFJjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTF1aXYoZSxyKX19ZnVuY3Rpb24gRmModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtMnVpdihlLHIpfX1mdW5jdGlvbiBQYyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm0zdWl2KGUscil9fWZ1bmN0aW9uIGtjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybTR1aXYoZSxyKX19ZnVuY3Rpb24gQ2ModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4MmZ2KGUsITEscil9fWZ1bmN0aW9uIEJjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudW5pZm9ybU1hdHJpeDNmdihlLCExLHIpfX1mdW5jdGlvbiBEYyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0LnVuaWZvcm1NYXRyaXg0ZnYoZSwhMSxyKX19ZnVuY3Rpb24gTWModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4MngzZnYoZSwhMSxyKX19ZnVuY3Rpb24gVWModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4M3gyZnYoZSwhMSxyKX19ZnVuY3Rpb24gTmModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4Mng0ZnYoZSwhMSxyKX19ZnVuY3Rpb24gT2ModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4NHgyZnYoZSwhMSxyKX19ZnVuY3Rpb24gTGModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4M3g0ZnYoZSwhMSxyKX19ZnVuY3Rpb24gemModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dC51bmlmb3JtTWF0cml4NHgzZnYoZSwhMSxyKX19ZnVuY3Rpb24gSSh0LGUscixuKXtjb25zdCBzPUJuKHQsZSk7cmV0dXJuIEFlKHQpP2Z1bmN0aW9uKGkpe2xldCBhLG87IWl8fHp0KHQsaSk/KGE9aSxvPW51bGwpOihhPWkudGV4dHVyZSxvPWkuc2FtcGxlciksdC51bmlmb3JtMWkobixyKSx0LmFjdGl2ZVRleHR1cmUoYXQrciksdC5iaW5kVGV4dHVyZShzLGEpLHQuYmluZFNhbXBsZXIocixvKX06ZnVuY3Rpb24oaSl7dC51bmlmb3JtMWkobixyKSx0LmFjdGl2ZVRleHR1cmUoYXQrciksdC5iaW5kVGV4dHVyZShzLGkpfX1mdW5jdGlvbiBSKHQsZSxyLG4scyl7Y29uc3QgaT1Cbih0LGUpLGE9bmV3IEludDMyQXJyYXkocyk7Zm9yKGxldCBvPTA7bzxzOysrbylhW29dPXIrbztyZXR1cm4gQWUodCk/ZnVuY3Rpb24obyl7dC51bmlmb3JtMWl2KG4sYSksby5mb3JFYWNoKGZ1bmN0aW9uKGMsdSl7dC5hY3RpdmVUZXh0dXJlKGF0K2FbdV0pO2xldCBmLGQ7IWN8fHp0KHQsYyk/KGY9YyxkPW51bGwpOihmPWMudGV4dHVyZSxkPWMuc2FtcGxlciksdC5iaW5kU2FtcGxlcihyLGQpLHQuYmluZFRleHR1cmUoaSxmKX0pfTpmdW5jdGlvbihvKXt0LnVuaWZvcm0xaXYobixhKSxvLmZvckVhY2goZnVuY3Rpb24oYyx1KXt0LmFjdGl2ZVRleHR1cmUoYXQrYVt1XSksdC5iaW5kVGV4dHVyZShpLGMpfSl9fW1bdXRdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQsc2V0dGVyOlRjLGFycmF5U2V0dGVyOndjfSxtW2JuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo4LHNldHRlcjpBYyxjb2xzOjJ9LG1bZ25dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjEyLHNldHRlcjp2Yyxjb2xzOjN9LG1beG5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjE2LHNldHRlcjpTYyxjb2xzOjR9LG1baXJdPXtUeXBlOkludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpEbixhcnJheVNldHRlcjpNbn0sbVtFbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjgsc2V0dGVyOlVuLGNvbHM6Mn0sbVtfbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpObixjb2xzOjN9LG1bVG5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6T24sY29sczo0fSxtW29yXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOkljLGFycmF5U2V0dGVyOlJjfSxtW1BuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOkZjLGNvbHM6Mn0sbVtrbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6UGMsY29sczozfSxtW0NuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjprYyxjb2xzOjR9LG1bd25dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6RG4sYXJyYXlTZXR0ZXI6TW59LG1bQW5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6VW4sY29sczoyfSxtW3ZuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpObixjb2xzOjN9LG1bU25dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOk9uLGNvbHM6NH0sbVtJbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOkNjLHJvd3M6Mixjb2xzOjJ9LG1bUm5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpCYyxyb3dzOjMsY29sczozfSxtW0ZuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6RGMscm93czo0LGNvbHM6NH0sbVtpY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOk1jLHJvd3M6Mixjb2xzOjN9LG1bb2NdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpOYyxyb3dzOjIsY29sczo0fSxtW2FjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6VWMscm93czozLGNvbHM6Mn0sbVtjY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOkxjLHJvd3M6Myxjb2xzOjR9LG1bdWNdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpPYyxyb3dzOjQsY29sczoyfSxtW2ZjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6emMscm93czo0LGNvbHM6M30sbVt0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6ZnR9LG1bcmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50Omx0fSxtW25jXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDphcn0sbVtzY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6ZnR9LG1bbGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50OmR0fSxtW2RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDpkdH0sbVtoY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6bHR9LG1bbWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50OmZ0fSxtW3BjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDphcn0sbVt5Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6bHR9LG1bYmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50OmR0fSxtW2djXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDpmdH0sbVt4Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkksYXJyYXlTZXR0ZXI6UixiaW5kUG9pbnQ6YXJ9LG1bRWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpJLGFycmF5U2V0dGVyOlIsYmluZFBvaW50Omx0fSxtW19jXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6SSxhcnJheVNldHRlcjpSLGJpbmRQb2ludDpkdH07ZnVuY3Rpb24gaHQodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7aWYoci52YWx1ZSlzd2l0Y2godC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52YWx1ZS5sZW5ndGgpe2Nhc2UgNDp0LnZlcnRleEF0dHJpYjRmdihlLHIudmFsdWUpO2JyZWFrO2Nhc2UgMzp0LnZlcnRleEF0dHJpYjNmdihlLHIudmFsdWUpO2JyZWFrO2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmdihlLHIudmFsdWUpO2JyZWFrO2Nhc2UgMTp0LnZlcnRleEF0dHJpYjFmdihlLHIudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ0aGUgbGVuZ3RoIG9mIGEgZmxvYXQgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQhIil9ZWxzZSB0LmJpbmRCdWZmZXIoY3Qsci5idWZmZXIpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsci5udW1Db21wb25lbnRzfHxyLnNpemUsci50eXBlfHx1dCxyLm5vcm1hbGl6ZXx8ITEsci5zdHJpZGV8fDAsci5vZmZzZXR8fDApLHQudmVydGV4QXR0cmliRGl2aXNvciYmdC52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsci5kaXZpc29yfHwwKX19ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtpZihyLnZhbHVlKWlmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmFsdWUubGVuZ3RoPT09NCl0LnZlcnRleEF0dHJpYjRpdihlLHIudmFsdWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgbGVuZ3RoIG9mIGFuIGludGVnZXIgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSA0ISIpO2Vsc2UgdC5iaW5kQnVmZmVyKGN0LHIuYnVmZmVyKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmVydGV4QXR0cmliSVBvaW50ZXIoZSxyLm51bUNvbXBvbmVudHN8fHIuc2l6ZSxyLnR5cGV8fGlyLHIuc3RyaWRlfHwwLHIub2Zmc2V0fHwwKSx0LnZlcnRleEF0dHJpYkRpdmlzb3ImJnQudmVydGV4QXR0cmliRGl2aXNvcihlLHIuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIG10KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKHIudmFsdWUpaWYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52YWx1ZS5sZW5ndGg9PT00KXQudmVydGV4QXR0cmliNHVpdihlLHIudmFsdWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgbGVuZ3RoIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSA0ISIpO2Vsc2UgdC5iaW5kQnVmZmVyKGN0LHIuYnVmZmVyKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmVydGV4QXR0cmliSVBvaW50ZXIoZSxyLm51bUNvbXBvbmVudHN8fHIuc2l6ZSxyLnR5cGV8fG9yLHIuc3RyaWRlfHwwLHIub2Zmc2V0fHwwKSx0LnZlcnRleEF0dHJpYkRpdmlzb3ImJnQudmVydGV4QXR0cmliRGl2aXNvcihlLHIuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIGNyKHQsZSxyKXtjb25zdCBuPXIuc2l6ZSxzPXIuY291bnQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3QuYmluZEJ1ZmZlcihjdCxpLmJ1ZmZlcik7Y29uc3QgYT1pLnNpemV8fGkubnVtQ29tcG9uZW50c3x8bixvPWEvcyxjPWkudHlwZXx8dXQsZj1tW2NdLnNpemUqYSxkPWkubm9ybWFsaXplfHwhMSxoPWkub2Zmc2V0fHwwLHA9Zi9zO2ZvcihsZXQgbD0wO2w8czsrK2wpdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlK2wpLHQudmVydGV4QXR0cmliUG9pbnRlcihlK2wsbyxjLGQsZixoK3AqbCksdC52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZ0LnZlcnRleEF0dHJpYkRpdmlzb3IoZStsLGkuZGl2aXNvcnx8MCl9fWNvbnN0IF89e307X1t1dF09e3NpemU6NCxzZXR0ZXI6aHR9LF9bYm5dPXtzaXplOjgsc2V0dGVyOmh0fSxfW2duXT17c2l6ZToxMixzZXR0ZXI6aHR9LF9beG5dPXtzaXplOjE2LHNldHRlcjpodH0sX1tpcl09e3NpemU6NCxzZXR0ZXI6SH0sX1tFbl09e3NpemU6OCxzZXR0ZXI6SH0sX1tfbl09e3NpemU6MTIsc2V0dGVyOkh9LF9bVG5dPXtzaXplOjE2LHNldHRlcjpIfSxfW29yXT17c2l6ZTo0LHNldHRlcjptdH0sX1tQbl09e3NpemU6OCxzZXR0ZXI6bXR9LF9ba25dPXtzaXplOjEyLHNldHRlcjptdH0sX1tDbl09e3NpemU6MTYsc2V0dGVyOm10fSxfW3duXT17c2l6ZTo0LHNldHRlcjpIfSxfW0FuXT17c2l6ZTo4LHNldHRlcjpIfSxfW3ZuXT17c2l6ZToxMixzZXR0ZXI6SH0sX1tTbl09e3NpemU6MTYsc2V0dGVyOkh9LF9bSW5dPXtzaXplOjQsc2V0dGVyOmNyLGNvdW50OjJ9LF9bUm5dPXtzaXplOjksc2V0dGVyOmNyLGNvdW50OjN9LF9bRm5dPXtzaXplOjE2LHNldHRlcjpjcixjb3VudDo0fTtjb25zdCBHYz0vRVJST1I6XHMqXGQrOihcZCspL2dpO2Z1bmN0aW9uICRjKHQsZT0iIixyPTApe2NvbnN0IG49Wy4uLmUubWF0Y2hBbGwoR2MpXSxzPW5ldyBNYXAobi5tYXAoKGksYSk9Pntjb25zdCBvPXBhcnNlSW50KGlbMV0pLGM9blthKzFdLHU9Yz9jLmluZGV4OmUubGVuZ3RoLGY9ZS5zdWJzdHJpbmcoaS5pbmRleCx1KTtyZXR1cm5bby0xLGZdfSkpO3JldHVybiB0LnNwbGl0KGAKYCkubWFwKChpLGEpPT57Y29uc3Qgbz1zLmdldChhKTtyZXR1cm5gJHthKzErcn06ICR7aX0ke28/YAoKXl5eICR7b31gOiIifWB9KS5qb2luKGAKYCl9Y29uc3QgTG49L15bIFx0XSpcbi87ZnVuY3Rpb24gem4odCl7bGV0IGU9MDtyZXR1cm4gTG4udGVzdCh0KSYmKGU9MSx0PXQucmVwbGFjZShMbiwiIikpLHtsaW5lT2Zmc2V0OmUsc2hhZGVyU291cmNlOnR9fWZ1bmN0aW9uIFZjKHQsZSl7cmV0dXJuIHQuZXJyb3JDYWxsYmFjayhlKSx0LmNhbGxiYWNrJiZzZXRUaW1lb3V0KCgpPT57dC5jYWxsYmFjayhgJHtlfQoke3QuZXJyb3JzLmpvaW4oYApgKX1gKX0pLG51bGx9ZnVuY3Rpb24gV2ModCxlLHIsbil7aWYobj1ufHxzciwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIocixWYSkpe2NvbnN0IGk9dC5nZXRTaGFkZXJJbmZvTG9nKHIpLHtsaW5lT2Zmc2V0OmEsc2hhZGVyU291cmNlOm99PXpuKHQuZ2V0U2hhZGVyU291cmNlKHIpKSxjPWAkeyRjKG8saSxhKX0KRXJyb3IgY29tcGlsaW5nICR7S3IodCxlKX06ICR7aX1gO3JldHVybiBuKGMpLGN9cmV0dXJuIiJ9ZnVuY3Rpb24gdXIodCxlLHIpe2xldCBuLHMsaTtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHI9ZSxlPXZvaWQgMCksdHlwZW9mIHQ9PSJmdW5jdGlvbiIpcj10LHQ9dm9pZCAwO2Vsc2UgaWYodCYmIUFycmF5LmlzQXJyYXkodCkpe2NvbnN0IHU9dDtyPXUuZXJyb3JDYWxsYmFjayx0PXUuYXR0cmliTG9jYXRpb25zLG49dS50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLHM9dS50cmFuc2Zvcm1GZWVkYmFja01vZGUsaT11LmNhbGxiYWNrfWNvbnN0IGE9cnx8c3Isbz1bXSxjPXtlcnJvckNhbGxiYWNrKHUsLi4uZil7by5wdXNoKHUpLGEodSwuLi5mKX0sdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpuLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTpzLGNhbGxiYWNrOmksZXJyb3JzOm99O3tsZXQgdT17fTtBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaChmdW5jdGlvbihmLGQpe3VbZl09ZT9lW2RdOmR9KTp1PXR8fHt9LGMuYXR0cmliTG9jYXRpb25zPXV9cmV0dXJuIGN9Y29uc3QgSGM9WyJWRVJURVhfU0hBREVSIiwiRlJBR01FTlRfU0hBREVSIl07ZnVuY3Rpb24gamModCxlKXtpZihlLmluZGV4T2YoImZyYWciKT49MClyZXR1cm4gSGE7aWYoZS5pbmRleE9mKCJ2ZXJ0Iik+PTApcmV0dXJuIGphfWZ1bmN0aW9uIFhjKHQsZSxyKXtjb25zdCBuPXQuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpO2Zvcihjb25zdCBzIG9mIG4pci5oYXMocykmJnQuZGVsZXRlU2hhZGVyKHMpO3QuZGVsZXRlUHJvZ3JhbShlKX1jb25zdCBZYz0odD0wKT0+bmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLHQpKTtmdW5jdGlvbiBRYyh0LGUscil7Y29uc3Qgbj10LmNyZWF0ZVByb2dyYW0oKSx7YXR0cmliTG9jYXRpb25zOnMsdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczppLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTphfT11cihyKTtmb3IobGV0IG89MDtvPGUubGVuZ3RoOysrbyl7bGV0IGM9ZVtvXTtpZih0eXBlb2YgYz09InN0cmluZyIpe2NvbnN0IHU9cG4oYyksZj11P3UudGV4dDpjO2xldCBkPXRbSGNbb11dO3UmJnUudHlwZSYmKGQ9amModCx1LnR5cGUpfHxkKSxjPXQuY3JlYXRlU2hhZGVyKGQpLHQuc2hhZGVyU291cmNlKGMsem4oZikuc2hhZGVyU291cmNlKSx0LmNvbXBpbGVTaGFkZXIoYyksdC5hdHRhY2hTaGFkZXIobixjKX19T2JqZWN0LmVudHJpZXMocykuZm9yRWFjaCgoW28sY10pPT50LmJpbmRBdHRyaWJMb2NhdGlvbihuLGMsbykpO3tsZXQgbz1pO28mJihvLmF0dHJpYnMmJihvPW8uYXR0cmlicyksQXJyYXkuaXNBcnJheShvKXx8KG89T2JqZWN0LmtleXMobykpLHQudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhuLG8sYXx8WGEpKX1yZXR1cm4gdC5saW5rUHJvZ3JhbShuKSxufWZ1bmN0aW9uIHFjKHQsZSxyLG4scyl7Y29uc3QgaT11cihyLG4scyksYT1uZXcgU2V0KGUpLG89UWModCxlLGkpO2Z1bmN0aW9uIGModSxmKXtjb25zdCBkPUpjKHUsZixpLmVycm9yQ2FsbGJhY2spO3JldHVybiBkJiZYYyh1LGYsYSksZH1pZihpLmNhbGxiYWNrKXtLYyh0LG8pLnRoZW4oKCk9Pntjb25zdCB1PWModCxvKTtpLmNhbGxiYWNrKHUsdT92b2lkIDA6byl9KTtyZXR1cm59cmV0dXJuIGModCxvKT92b2lkIDA6b31hc3luYyBmdW5jdGlvbiBLYyh0LGUpe2NvbnN0IHI9dC5nZXRFeHRlbnNpb24oIktIUl9wYXJhbGxlbF9zaGFkZXJfY29tcGlsZSIpLG49cj8oaSxhKT0+aS5nZXRQcm9ncmFtUGFyYW1ldGVyKGEsci5DT01QTEVUSU9OX1NUQVRVU19LSFIpOigpPT4hMDtsZXQgcz0wO2RvIGF3YWl0IFljKHMpLHM9MWUzLzYwO3doaWxlKCFuKHQsZSkpfWZ1bmN0aW9uIEpjKHQsZSxyKXtpZihyPXJ8fHNyLCF0LmdldFByb2dyYW1QYXJhbWV0ZXIoZSxXYSkpe2NvbnN0IHM9dC5nZXRQcm9ncmFtSW5mb0xvZyhlKTtyKGBFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6ICR7c31gKTtjb25zdCBhPXQuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpLm1hcChvPT5XYyh0LHQuZ2V0U2hhZGVyUGFyYW1ldGVyKG8sdC5TSEFERVJfVFlQRSksbyxyKSk7cmV0dXJuYCR7c30KJHthLmZpbHRlcihvPT5vKS5qb2luKGAKYCl9YH19ZnVuY3Rpb24gWmModCxlLHIsbixzKXtyZXR1cm4gcWModCxlLHIsbixzKX1mdW5jdGlvbiBHbih0KXtjb25zdCBlPXQubmFtZTtyZXR1cm4gZS5zdGFydHNXaXRoKCJnbF8iKXx8ZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKX1jb25zdCBldT0vKFwufFxbfF18XHcrKS9nLHR1PXQ9PnQ+PSIwIiYmdDw9IjkiO2Z1bmN0aW9uIHJ1KHQsZSxyLG4pe2NvbnN0IHM9dC5zcGxpdChldSkuZmlsdGVyKG89Pm8hPT0iIik7bGV0IGk9MCxhPSIiO2Zvcig7Oyl7Y29uc3Qgbz1zW2krK107YSs9bztjb25zdCBjPXR1KG9bMF0pLHU9Yz9wYXJzZUludChvKTpvO2lmKGMmJihhKz1zW2krK10pLGk9PT1zLmxlbmd0aCl7clt1XT1lO2JyZWFrfWVsc2V7Y29uc3QgZD1zW2krK10saD1kPT09IlsiLHA9clt1XXx8KGg/W106e30pO3JbdV09cCxyPXAsblthXT1uW2FdfHxmdW5jdGlvbihsKXtyZXR1cm4gZnVuY3Rpb24oeSl7JG4obCx5KX19KHApLGErPWR9fX1mdW5jdGlvbiBudSh0LGUpe2xldCByPTA7ZnVuY3Rpb24gbihvLGMsdSl7Y29uc3QgZj1jLm5hbWUuZW5kc1dpdGgoIlswXSIpLGQ9Yy50eXBlLGg9bVtkXTtpZighaCl0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHlwZTogMHgke2QudG9TdHJpbmcoMTYpfWApO2xldCBwO2lmKGguYmluZFBvaW50KXtjb25zdCBsPXI7cis9Yy5zaXplLGY/cD1oLmFycmF5U2V0dGVyKHQsZCxsLHUsYy5zaXplKTpwPWguc2V0dGVyKHQsZCxsLHUsYy5zaXplKX1lbHNlIGguYXJyYXlTZXR0ZXImJmY/cD1oLmFycmF5U2V0dGVyKHQsdSk6cD1oLnNldHRlcih0LHUpO3JldHVybiBwLmxvY2F0aW9uPXUscH1jb25zdCBzPXt9LGk9e30sYT10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx5bik7Zm9yKGxldCBvPTA7bzxhOysrbyl7Y29uc3QgYz10LmdldEFjdGl2ZVVuaWZvcm0oZSxvKTtpZihHbihjKSljb250aW51ZTtsZXQgdT1jLm5hbWU7dS5lbmRzV2l0aCgiWzBdIikmJih1PXUuc3Vic3RyKDAsdS5sZW5ndGgtMykpO2NvbnN0IGY9dC5nZXRVbmlmb3JtTG9jYXRpb24oZSxjLm5hbWUpO2lmKGYpe2NvbnN0IGQ9bihlLGMsZik7c1t1XT1kLHJ1KHUsZCxpLHMpfX1yZXR1cm4gc31mdW5jdGlvbiBzdSh0LGUpe2NvbnN0IHI9e30sbj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSxRYSk7Zm9yKGxldCBzPTA7czxuOysrcyl7Y29uc3QgaT10LmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhlLHMpO3JbaS5uYW1lXT17aW5kZXg6cyx0eXBlOmkudHlwZSxzaXplOmkuc2l6ZX19cmV0dXJuIHJ9ZnVuY3Rpb24gaXUodCxlKXtjb25zdCByPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHluKSxuPVtdLHM9W107Zm9yKGxldCBvPTA7bzxyOysrbyl7cy5wdXNoKG8pLG4ucHVzaCh7fSk7Y29uc3QgYz10LmdldEFjdGl2ZVVuaWZvcm0oZSxvKTtuW29dLm5hbWU9Yy5uYW1lfVtbIlVOSUZPUk1fVFlQRSIsInR5cGUiXSxbIlVOSUZPUk1fU0laRSIsInNpemUiXSxbIlVOSUZPUk1fQkxPQ0tfSU5ERVgiLCJibG9ja05keCJdLFsiVU5JRk9STV9PRkZTRVQiLCJvZmZzZXQiXV0uZm9yRWFjaChmdW5jdGlvbihvKXtjb25zdCBjPW9bMF0sdT1vWzFdO3QuZ2V0QWN0aXZlVW5pZm9ybXMoZSxzLHRbY10pLmZvckVhY2goZnVuY3Rpb24oZixkKXtuW2RdW3VdPWZ9KX0pO2NvbnN0IGk9e30sYT10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSxxYSk7Zm9yKGxldCBvPTA7bzxhOysrbyl7Y29uc3QgYz10LmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoZSxvKSx1PXtpbmRleDp0LmdldFVuaWZvcm1CbG9ja0luZGV4KGUsYyksdXNlZEJ5VmVydGV4U2hhZGVyOnQuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsbyxLYSksdXNlZEJ5RnJhZ21lbnRTaGFkZXI6dC5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxvLEphKSxzaXplOnQuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsbyxaYSksdW5pZm9ybUluZGljZXM6dC5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxvLGVjKX07dS51c2VkPXUudXNlZEJ5VmVydGV4U2hhZGVyfHx1LnVzZWRCeUZyYWdtZW50U2hhZGVyLGlbY109dX1yZXR1cm57YmxvY2tTcGVjczppLHVuaWZvcm1EYXRhOm59fWZ1bmN0aW9uICRuKHQsZSl7Zm9yKGNvbnN0IHIgaW4gZSl7Y29uc3Qgbj10W3JdO3R5cGVvZiBuPT0iZnVuY3Rpb24iP24oZVtyXSk6JG4odFtyXSxlW3JdKX19ZnVuY3Rpb24gVm4odCwuLi5lKXtjb25zdCByPXQudW5pZm9ybVNldHRlcnN8fHQsbj1lLmxlbmd0aDtmb3IobGV0IHM9MDtzPG47KytzKXtjb25zdCBpPWVbc107aWYoQXJyYXkuaXNBcnJheShpKSl7Y29uc3QgYT1pLmxlbmd0aDtmb3IobGV0IG89MDtvPGE7KytvKVZuKHIsaVtvXSl9ZWxzZSBmb3IoY29uc3QgYSBpbiBpKXtjb25zdCBvPXJbYV07byYmbyhpW2FdKX19fWZ1bmN0aW9uIG91KHQsZSl7Y29uc3Qgcj17fSxuPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLFlhKTtmb3IobGV0IHM9MDtzPG47KytzKXtjb25zdCBpPXQuZ2V0QWN0aXZlQXR0cmliKGUscyk7aWYoR24oaSkpY29udGludWU7Y29uc3QgYT10LmdldEF0dHJpYkxvY2F0aW9uKGUsaS5uYW1lKSxvPV9baS50eXBlXSxjPW8uc2V0dGVyKHQsYSxvKTtjLmxvY2F0aW9uPWEscltpLm5hbWVdPWN9cmV0dXJuIHJ9ZnVuY3Rpb24gYXUodCxlKXtmb3IoY29uc3QgciBpbiBlKXtjb25zdCBuPXRbcl07biYmbihlW3JdKX19ZnVuY3Rpb24gY3UodCxlLHIpe3IudmVydGV4QXJyYXlPYmplY3Q/dC5iaW5kVmVydGV4QXJyYXkoci52ZXJ0ZXhBcnJheU9iamVjdCk6KGF1KGUuYXR0cmliU2V0dGVyc3x8ZSxyLmF0dHJpYnMpLHIuaW5kaWNlcyYmdC5iaW5kQnVmZmVyKCRhLHIuaW5kaWNlcykpfWZ1bmN0aW9uIFduKHQsZSl7Y29uc3Qgcj1udSh0LGUpLG49b3UodCxlKSxzPXtwcm9ncmFtOmUsdW5pZm9ybVNldHRlcnM6cixhdHRyaWJTZXR0ZXJzOm59O3JldHVybiBBZSh0KSYmKHMudW5pZm9ybUJsb2NrU3BlYz1pdSh0LGUpLHMudHJhbnNmb3JtRmVlZGJhY2tJbmZvPXN1KHQsZSkpLHN9Y29uc3QgdXU9L1xzfHt8fXw7LztmdW5jdGlvbiBmdSh0LGUscixuLHMpe2NvbnN0IGk9dXIocixuLHMpLGE9W107aWYoZT1lLm1hcChmdW5jdGlvbih1KXtpZighdXUudGVzdCh1KSl7Y29uc3QgZj1wbih1KTtpZihmKXU9Zi50ZXh0O2Vsc2V7Y29uc3QgZD1gbm8gZWxlbWVudCB3aXRoIGlkOiAke3V9YDtpLmVycm9yQ2FsbGJhY2soZCksYS5wdXNoKGQpfX1yZXR1cm4gdX0pLGEubGVuZ3RoKXJldHVybiBWYyhpLCIiKTtjb25zdCBvPWkuY2FsbGJhY2s7byYmKGkuY2FsbGJhY2s9KHUsZik9PntvKHUsdT92b2lkIDA6V24odCxmKSl9KTtjb25zdCBjPVpjKHQsZSxpKTtyZXR1cm4gYz9Xbih0LGMpOm51bGx9Y29uc3QgbHU9NCxIbj01MTIzO2Z1bmN0aW9uIGR1KHQsZSxyLG4scyxpKXtyPXI9PT12b2lkIDA/bHU6cjtjb25zdCBhPWUuaW5kaWNlcyxvPWUuZWxlbWVudFR5cGUsYz1uPT09dm9pZCAwP2UubnVtRWxlbWVudHM6bjtzPXM9PT12b2lkIDA/MDpzLG98fGE/aSE9PXZvaWQgMD90LmRyYXdFbGVtZW50c0luc3RhbmNlZChyLGMsbz09PXZvaWQgMD9IbjplLmVsZW1lbnRUeXBlLHMsaSk6dC5kcmF3RWxlbWVudHMocixjLG89PT12b2lkIDA/SG46ZS5lbGVtZW50VHlwZSxzKTppIT09dm9pZCAwP3QuZHJhd0FycmF5c0luc3RhbmNlZChyLHMsYyxpKTp0LmRyYXdBcnJheXMocixzLGMpfWNvbnN0IGpuPTM2MTYwLHB0PTM2MTYxLGh1PTM1NTMsbXU9NTEyMSxwdT02NDAyLHl1PTY0MDgsYnU9MzMxOTAsZ3U9MzYwMTIseHU9MzUwNTYsRXU9MzYwMTMsX3U9MzI4NTQsVHU9MzI4NTUsd3U9MzYxOTQsWG49MzMxODksWW49NjQwMSxRbj0zNjE2OCxmcj0zNDA0MSxscj0zNjA2NCx5dD0zNjA5Nixxbj0zNjEyOCxkcj0zMzMwNixocj0zMzA3MSxtcj05NzI5LEF1PVt7Zm9ybWF0Onl1LHR5cGU6bXUsbWluOm1yLHdyYXA6aHJ9LHtmb3JtYXQ6ZnJ9XSxDPXt9O0NbZnJdPWRyLENbWW5dPXFuLENbUW5dPXFuLENbcHVdPXl0LENbWG5dPXl0LENbYnVdPXl0LENbZ3VdPXl0LENbeHVdPWRyLENbRXVdPWRyO2Z1bmN0aW9uIHZ1KHQsZSl7cmV0dXJuIENbdF18fENbZV19Y29uc3Qgaj17fTtqW191XT0hMCxqW1R1XT0hMCxqW3d1XT0hMCxqW2ZyXT0hMCxqW1huXT0hMCxqW1luXT0hMCxqW1FuXT0hMDtmdW5jdGlvbiBTdSh0KXtyZXR1cm4galt0XX1jb25zdCBJdT0zMjtmdW5jdGlvbiBSdSh0KXtyZXR1cm4gdD49bHImJnQ8bHIrSXV9ZnVuY3Rpb24gS24odCxlLHIsbil7Y29uc3Qgcz1qbixpPXQuY3JlYXRlRnJhbWVidWZmZXIoKTt0LmJpbmRGcmFtZWJ1ZmZlcihzLGkpLHI9cnx8dC5kcmF3aW5nQnVmZmVyV2lkdGgsbj1ufHx0LmRyYXdpbmdCdWZmZXJIZWlnaHQsZT1lfHxBdTtjb25zdCBhPVtdLG89e2ZyYW1lYnVmZmVyOmksYXR0YWNobWVudHM6W10sd2lkdGg6cixoZWlnaHQ6bn07cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihjLHUpe2xldCBmPWMuYXR0YWNobWVudDtjb25zdCBkPWMuc2FtcGxlcyxoPWMuZm9ybWF0O2xldCBwPWMuYXR0YWNobWVudFBvaW50fHx2dShoLGMuaW50ZXJuYWxGb3JtYXQpO2lmKHB8fChwPWxyK3UpLFJ1KHApJiZhLnB1c2gocCksIWYpaWYoZCE9PXZvaWQgMHx8U3UoaCkpZj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHQuYmluZFJlbmRlcmJ1ZmZlcihwdCxmKSxkPjE/dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUocHQsZCxoLHIsbik6dC5yZW5kZXJidWZmZXJTdG9yYWdlKHB0LGgscixuKTtlbHNle2NvbnN0IGw9T2JqZWN0LmFzc2lnbih7fSxjKTtsLndpZHRoPXIsbC5oZWlnaHQ9bixsLmF1dG89PT12b2lkIDAmJihsLmF1dG89ITEsbC5taW49bC5taW58fGwubWluTWFnfHxtcixsLm1hZz1sLm1hZ3x8bC5taW5NYWd8fG1yLGwud3JhcFM9bC53cmFwU3x8bC53cmFwfHxocixsLndyYXBUPWwud3JhcFR8fGwud3JhcHx8aHIpLGY9bW4odCxsKX1pZihNaSh0LGYpKXQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIocyxwLHB0LGYpO2Vsc2UgaWYoenQodCxmKSljLmxheWVyIT09dm9pZCAwP3QuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIocyxwLGYsYy5sZXZlbHx8MCxjLmxheWVyKTp0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKHMscCxjLnRhcmdldHx8aHUsZixjLmxldmVsfHwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigidW5rbm93biBhdHRhY2htZW50IHR5cGUiKTtvLmF0dGFjaG1lbnRzLnB1c2goZil9KSx0LmRyYXdCdWZmZXJzJiZ0LmRyYXdCdWZmZXJzKGEpLG99ZnVuY3Rpb24gRnUodCxlLHIpe3I9cnx8am4sZT8odC5iaW5kRnJhbWVidWZmZXIocixlLmZyYW1lYnVmZmVyKSx0LnZpZXdwb3J0KDAsMCxlLndpZHRoLGUuaGVpZ2h0KSk6KHQuYmluZEZyYW1lYnVmZmVyKHIsbnVsbCksdC52aWV3cG9ydCgwLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0KSl9ZnVuY3Rpb24gdih0LGUpe3JldHVybigpPT5lIGluc3RhbmNlb2YgV2ViR0xUZXh0dXJlP2U6bW4odCx7c3JjOmUsd3JhcDp0LkNMQU1QX1RPX0VER0V9KX1jb25zdCB5ZT0yO2NsYXNzIENle2NvbnN0cnVjdG9yKGUpe3RoaXMuaWQ9Il8iO2NvbnN0e2NvbnRleHQ6cix3aWR0aDpuLGhlaWdodDpzfT1lO3RoaXMuY29udGV4dD1yLHRoaXMub3B0aW9ucz1lO2NvbnN0IGk9dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPWZ1KHRoaXMuY29udGV4dCxbaSt0aGlzLmdldFZlcnRleFNoYWRlcigpLGkrdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPWlvKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9S24odGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4scyksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUscil7dGhpcy5mYmk9S24odGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsciksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD1yLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3Qgcj10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gcillKz1gI2RlZmluZSAke259ICR7cltuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgcyxpLGEsbyxjLHU7KHM9dGhpcy5wcm9maWxlcik9PW51bGx8fHMucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBmIGluIGUpdHlwZW9mIGVbZl09PSJmdW5jdGlvbiImJigoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7Zn1gKSxlW2ZdPWVbZl0oKSwobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtmfWApKTsoYz10aGlzLnByb2ZpbGVyKT09bnVsbHx8Yy5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCByPURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPShyLXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49cix0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksY3UodGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSxWbih0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLEZ1KHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLGR1KHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLCh1PXRoaXMucHJvZmlsZXIpPT1udWxsfHx1LnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgUHU9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLGt1PWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIHByIGV4dGVuZHMgQ2V7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gUHV9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIGt1fX1jbGFzcyB5cntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RlcHM9W119YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUscil7dmFyIG4sczsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IGkgb2YgdGhpcy5zdGVwcylpLnByZXZlbnRSZXNpemV8fGkucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSxyKTsocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHIgb2YgdGhpcy5zdGVwcylyLnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHIgb2YgdGhpcy5zdGVwcylyLnByb2dyYW0uaWQ9ZX19Y2xhc3MgYnIgZXh0ZW5kcyB5cntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5wcmVjaXNlTWFza0VuYWJsZWQ9ITF9fWNsYXNzIEpuIGV4dGVuZHMgYnJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZSx0aGlzLnByZWNpc2VNYXNrRW5hYmxlZD0hMDtjb25zdCByPXtjb250ZXh0OmUsaGVpZ2h0OmUuY2FudmFzLmhlaWdodCx3aWR0aDplLmNhbnZhcy53aWR0aH0sbj1uZXcgcHIoey4uLnIsZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm4sZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDp2KGUsdGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZSksZm9yZWdyb3VuZDp2KGUsdGhpcy5pbnB1dEltYWdlKSx0aHJlc2hvbGQ6dihlLHRoaXMuaW5wdXRNYXNrKX0pfSl9c2V0RGF0YShlLHIpe3RoaXMuaW5wdXRJbWFnZT1lLHRoaXMuaW5wdXRNYXNrPXJ9fXZhciBDdT1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7IH0KYCxCdT1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7CnVuaWZvcm0gYm9vbCBpbnZlcnRfeTsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIGlmIChpbnZlcnRfeSkgewogICAgX3RleHR1cmVfY29vcmQueSA9IDEuIC0gdGV4dHVyZV9jb29yZC55OwogIH0KfQpgO2NsYXNzIER1IGV4dGVuZHMgQ2V7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gQ3V9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEJ1fX1jbGFzcyBNdSBleHRlbmRzIHlye2NvbnN0cnVjdG9yKGUscixuKXtzdXBlcigpLHRoaXMuY29udGV4dD1lO2NvbnN0IHM9e2NvbnRleHQ6ZSxoZWlnaHQ6bix3aWR0aDpyfTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06bmV3IER1KHsuLi5zLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6dihlLHRoaXMuaW5wdXRJbWFnZSksaW52ZXJ0X3k6ITB9KX0pfXNldERhdGEoZSl7dGhpcy5pbnB1dEltYWdlPWV9fWFzeW5jIGZ1bmN0aW9uIFpuKHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dCgoKT0+e2UoKX0sdCl9KX12YXIgVXU9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxOdT1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgLGdyPSh0PT4odFt0LkxJTkVBUj0wXT0iTElORUFSIix0W3QuR0FVU1NJQU49MV09IkdBVVNTSUFOIix0KSkoZ3J8fHt9KTtjbGFzcyBlcyBleHRlbmRzIENle2dldERlZmluZXMoKXtyZXR1cm57UkFESVVTOnRoaXMub3B0aW9ucy5yYWRpdXM/PzF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFV1K3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE51fWNyZWF0ZUxvb3BGdW5jdGlvbigpe2xldCBlPXRoaXMub3B0aW9ucy5yYWRpdXM/PzE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSxyKXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSxyKTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSxyKX19Z2V0TGluZWFyRmFjdG9yKGUscil7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSxyKXtjb25zdCBuPU1hdGguUEkqMixzPU1hdGgubWF4KHRoaXMub3B0aW9ucy5yYWRpdXM/PzEsMSksaT0xLyhuKnMqKjIpLGE9LShlKioyK3IqKjIpLG89aSphO3JldHVybiBpKk1hdGguRSoqb319dmFyIE91PWAjdmVyc2lvbiAzMDAgZXMKLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZvbGNvbWl4L3ZpcnR1YWwtYmFja2dyb3VuZC9ibG9iL21haW4vc3JjL3BpcGVsaW5lcy93ZWJnbDIvam9pbnRCaWxhdGVyYWxGaWx0ZXJTdGFnZS50cwoKcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Owp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dF9mcmFtZTsKdW5pZm9ybSBzYW1wbGVyMkQgc2VnbWVudGF0aW9uX21hc2s7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSB2ZWMyIHRleGVsX3NpemU7CnVuaWZvcm0gZmxvYXQgc3RlcDsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CnVuaWZvcm0gZmxvYXQgb2Zmc2V0Owp1bmlmb3JtIGZsb2F0IHNpZ21hX3RleGVsOwp1bmlmb3JtIGZsb2F0IHNpZ21hX2NvbG9yOwoKaW4gdmVjMiBfdGV4dHVyZV9jb29yZDsKb3V0IHZlYzQgb3V0Q29sb3I7CgpmbG9hdCBnYXVzc2lhbihmbG9hdCB4LCBmbG9hdCBzaWdtYSkgewogIGZsb2F0IGNvZWZmID0gLTAuNSAvIChzaWdtYSAqIHNpZ21hICogNC4wICsgMS4wZS02KTsKICByZXR1cm4gZXhwKCh4ICogeCkgKiBjb2VmZik7Cn0KCnZvaWQgbWFpbigpIHsKICB2ZWMyIGNlbnRlckNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgdmVjMyBjZW50ZXJDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNlbnRlckNvb3JkKS5yZ2I7CiAgZmxvYXQgbmV3VmFsID0gMC4wOwogIGZsb2F0IHNwYWNlV2VpZ2h0ID0gMC4wOwogIGZsb2F0IGNvbG9yV2VpZ2h0ID0gMC4wOwogIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wOwogIC8vIFN1YnNhbXBsZSBrZXJuZWwgc3BhY2UuCiAgZm9yIChmbG9hdCBpID0gLXJhZGl1cyArIG9mZnNldDsgaSA8PSByYWRpdXM7IGkgKz0gc3RlcCkgewogICAgZm9yIChmbG9hdCBqID0gLXJhZGl1cyArIG9mZnNldDsgaiA8PSByYWRpdXM7IGogKz0gc3RlcCkgewogICAgICB2ZWMyIHNoaWZ0ID0gdmVjMihqLCBpKSAqIHRleGVsX3NpemU7CiAgICAgIHZlYzIgY29vcmQgPSB2ZWMyKGNlbnRlckNvb3JkICsgc2hpZnQpOwogICAgICB2ZWMzIGZyYW1lQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjb29yZCkucmdiOwogICAgICBmbG9hdCB0aHJlc2hvbGQgPSB0ZXh0dXJlKHRocmVzaG9sZCwgY29vcmQpLmE7CiAgICAgIGZsb2F0IG91dFZhbCA9IHRleHR1cmUoc2VnbWVudGF0aW9uX21hc2ssIGNvb3JkKS5hOwoKICAgICAgc3BhY2VXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb29yZCwgY29vcmQpLCBzaWdtYV90ZXhlbCk7CiAgICAgIGNvbG9yV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29sb3IsIGZyYW1lQ29sb3IpLCBzaWdtYV9jb2xvcik7CiAgICAgIHRvdGFsV2VpZ2h0ICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQ7CiAgICAgIG5ld1ZhbCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0ICogb3V0VmFsICogdGhyZXNob2xkOwogICAgfQogIH0KICBuZXdWYWwgLz0gdG90YWxXZWlnaHQ7CiAgb3V0Q29sb3IgPSB2ZWM0KHZlYzMoMC4pLCBuZXdWYWwpOwp9YCxMdT1gI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgcG9zaXRpb247CmluIHZlYzIgdGV4dHVyZV9jb29yZDsKb3V0IHZlYzIgX3RleHR1cmVfY29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn1gO2NsYXNzIHp1IGV4dGVuZHMgQ2V7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gT3V9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEx1fX1jbGFzcyBHdSBleHRlbmRzIHlye2NvbnN0cnVjdG9yKGUscixuKXtzdXBlcigpLHRoaXMuY29udGV4dD1lO2NvbnN0IHM9e2NvbnRleHQ6ZSxoZWlnaHQ6bix3aWR0aDpyfSxpPW5ldyBlcyh7Li4ucyxyYWRpdXM6MSx0eXBlOmdyLkdBVVNTSUFOfSk7dGhpcy5qb2ludEJpbGF0ZXJhbD1uZXcgenUocyksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmksZ2V0VW5pZm9ybXM6KCk9Pih7aW5wdXRzOnYoZSx0aGlzLmlucHV0TWFzayl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp0aGlzLmpvaW50QmlsYXRlcmFsLGdldFVuaWZvcm1zOigpPT57dmFyIHAsbCx5LGI7Y29uc3Qgbz0oKHA9dGhpcy5pbnB1dEltYWdlKT09bnVsbD92b2lkIDA6cC53aWR0aCk/PzEsYz0oKGw9dGhpcy5pbnB1dEltYWdlKT09bnVsbD92b2lkIDA6bC5oZWlnaHQpPz8xOyh5PXRoaXMuaW5wdXRNYXNrKT09bnVsbHx8eS53aWR0aCwoYj10aGlzLmlucHV0TWFzayk9PW51bGx8fGIuaGVpZ2h0O2NvbnN0IHU9MyxmPU1hdGgubWF4KDEsTWF0aC5zcXJ0KHUpKi42NiksZD0xL28saD0xL2M7cmV0dXJue2lucHV0X2ZyYW1lOnYoZSx0aGlzLmlucHV0SW1hZ2UpLHNlZ21lbnRhdGlvbl9tYXNrOnYoZSx0aGlzLmlucHV0TWFzayksdGV4ZWxfc2l6ZTpbZCxoXSxzdGVwOmYscmFkaXVzOnUsb2Zmc2V0OmY+MT9mKi41OjAsc2lnbWFfdGV4ZWw6TWF0aC5tYXgoZCxoKSp1LHNpZ21hX2NvbG9yOnV9fX0pLHRoaXMub3V0cHV0PXRoaXMuam9pbnRCaWxhdGVyYWwub3V0cHV0fXNldERhdGEoZSxyKXt0aGlzLnByZXZpb3VzSW5wdXRJbWFnZT10aGlzLmlucHV0SW1hZ2U/dGhpcy5pbnB1dEltYWdlOmUsdGhpcy5wcmV2aW91c0lucHV0TWFzaz10aGlzLmlucHV0TWFzaz90aGlzLmlucHV0TWFzazpyLHRoaXMuaW5wdXRJbWFnZT1lLHRoaXMuaW5wdXRNYXNrPXJ9cmVzaXplT3V0cHV0KGUscil7c3VwZXIucmVzaXplT3V0cHV0KGUsciksdGhpcy5vdXRwdXQ9dGhpcy5qb2ludEJpbGF0ZXJhbC5vdXRwdXR9fWNsYXNzICR1e2NvbnN0cnVjdG9yKGUpe3RoaXMucXVlcmllcz1bXSx0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUscil7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTpyLGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAocj0+dGhpcy5yZXNvbHZlUXVlcnkocikpKSkuZmlsdGVyKHI9PnIpO2ZvcihsZXQgcj0xO3I8ZS5sZW5ndGg7KytyKWVbcl0udGltZXN0YW1wKz1lW3ItMV0uZHVyYXRpb24rZVtyLTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHI9MDtyPDEwOysrcil7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IFpuKDIwMCl9fX1jbGFzcyBidHtjb25zdHJ1Y3Rvcigpe3RoaXMucHJldmlvdXNJbWFnZVdpZHRoPTAsdGhpcy5wcmV2aW91c0ltYWdlSGVpZ2h0PTAsdGhpcy5wcmV2aW91c01hc2tXaWR0aD15ZSx0aGlzLnByZXZpb3VzTWFza0hlaWdodD15ZSx0aGlzLnBvc3RQcm9jZXNzaW5nRW5hYmxlZD0hMDtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSxyPWUuZ2V0Q29udGV4dCgid2ViZ2wyIik7aWYoIXIpdGhyb3ciRmFpbCB0byByZXRyaWV2ZSB3ZWJnbDIgY29udGV4dCI7dGhpcy5jYW52YXM9ZSx0aGlzLmNvbnRleHQ9cix0aGlzLmltcHJvdmVNYXNrPW5ldyBHdSh0aGlzLmNvbnRleHQseWUseWUpfWVuYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITB9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITF9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe2NvbnN0IHI9bmV3ICR1KHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9cixyLnN0YXJ0KCksYXdhaXQgWm4oZSksdGhpcy5wcm9maWxlcj12b2lkIDAsci5zdG9wKCksci5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1hc3luYyByZW5kZXIoZSxyKXt2YXIgYSxvO2lmKCF0aGlzLnBpcGVsaW5lKXRocm93Im1pc3NpbmcgcGlwZWxpbmUiOyh0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQhPT1lLmhlaWdodHx8dGhpcy5wcmV2aW91c0ltYWdlV2lkdGghPT1lLndpZHRoKSYmdGhpcy5yZXNpemVPdXRwdXQoZS53aWR0aCxlLmhlaWdodCksKHRoaXMucHJldmlvdXNNYXNrSGVpZ2h0IT09ci5oZWlnaHR8fHRoaXMucHJldmlvdXNNYXNrV2lkdGghPT1yLndpZHRoKSYmKHRoaXMuaW1wcm92ZU1hc2sucmVzaXplT3V0cHV0KHIud2lkdGgsci5oZWlnaHQpLHRoaXMucHJldmlvdXNNYXNrV2lkdGg9ci53aWR0aCx0aGlzLnByZXZpb3VzTWFza0hlaWdodD1yLmhlaWdodCk7Y29uc3Qgbj0icmVuZGVyZXIiOyhhPXRoaXMucHJvZmlsZXIpPT1udWxsfHxhLnB1c2hDb250ZXh0KG4pLHRoaXMuaW1wcm92ZU1hc2suc2V0UHJvZmlsZXIodGhpcy5wcm9maWxlciksdGhpcy5waXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKTtjb25zdCBzPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHIpO2xldCBpPXM7cmV0dXJuIHRoaXMucG9zdFByb2Nlc3NpbmdFbmFibGVkJiYodGhpcy5pbXByb3ZlTWFzay5zZXREYXRhKGUscyksdGhpcy5pbXByb3ZlTWFzay5ydW4oKSxpPXRoaXMuaW1wcm92ZU1hc2sub3V0cHV0KSx0aGlzLnBpcGVsaW5lLnNldERhdGEoZSxpKSxhd2FpdCB0aGlzLnBpcGVsaW5lLnJ1bigpLChvPXRoaXMucHJvZmlsZXIpPT1udWxsfHxvLnBvcENvbnRleHQobiksdGhpcy5jYW52YXN9cmVzaXplT3V0cHV0KGUscil7dmFyIG47dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9ciwobj10aGlzLnBpcGVsaW5lKT09bnVsbHx8bi5yZXNpemVPdXRwdXQoZSxyKSx0aGlzLnByZXZpb3VzSW1hZ2VXaWR0aD1lLHRoaXMucHJldmlvdXNJbWFnZUhlaWdodD1yfWRlc3Ryb3koKXt2YXIgcjtjb25zdCBlPShyPXRoaXMuY29udGV4dCk9PW51bGw/dm9pZCAwOnIuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTtlJiZlLmxvc2VDb250ZXh0KCl9fWNsYXNzIHRzIGV4dGVuZHMgYnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucGlwZWxpbmU9bmV3IEpuKHRoaXMuY29udGV4dCk7Y29uc3QgZT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkscj1lLmdldENvbnRleHQoIndlYmdsMiIpO2lmKCFyKXRocm93IkZhaWwgdG8gcmV0cmlldmUgd2ViZ2wgY29udGV4dCI7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dD1yLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplcj1uZXcgTXUodGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCwwLDApfXNldEJhY2tncm91bmRJbWFnZShlKXt0aGlzLmJhY2tncm91bmRJbWFnZT1lLHRoaXMudXBkYXRlQmFja2dyb3VuZEltYWdlKCl9dXBkYXRlQmFja2dyb3VuZEltYWdlKCl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6cn09dGhpcy5jYW52YXM7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyLnJlc2l6ZU91dHB1dChlLHIpLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5zZXREYXRhKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIucnVuKCksdGhpcy5waXBlbGluZS5pbnB1dEJhY2tncm91bmRJbWFnZT10aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXJDYW52YXN9cmVzaXplT3V0cHV0KGUscil7c3VwZXIucmVzaXplT3V0cHV0KGUsciksdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLndpZHRoPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLmhlaWdodD1yLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5yZXNpemVPdXRwdXQoZSxyKSx0aGlzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSgpfWRlc3Ryb3koKXt2YXIgcjtjb25zdCBlPShyPXRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNvbnRleHQpPT1udWxsP3ZvaWQgMDpyLmdldEV4dGVuc2lvbigiV0VCR0xfbG9zZV9jb250ZXh0Iik7ZSYmZS5sb3NlQ29udGV4dCgpLHN1cGVyLmRlc3Ryb3koKX19Y2xhc3MgVnUgZXh0ZW5kcyB0c3tzZXRCYWNrZ3JvdW5kVmlkZW8oZSl7dGhpcy5mcmFtZVJlYWRlcj1lfWFzeW5jIHJlbmRlcihlLHIpe3JldHVybiBhd2FpdCB0aGlzLnJlYWROZXh0VmlkZW9GcmFtZSgpLHN1cGVyLnJlbmRlcihlLHIpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciByO2NvbnN0IGU9YXdhaXQoKHI9dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOnIucmVhZCgpKTtpZihlIT1udWxsJiZlLnZhbHVlKXtjb25zdCBuPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUudmFsdWUpO3RoaXMuc2V0QmFja2dyb3VuZEltYWdlKG4pLGUudmFsdWUuY2xvc2UoKX19fWNsYXNzIHJze2JsdXJCYWNrZ3JvdW5kKGUpe3JldHVybiBuZXcgVGkoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIG5ldyB3aShlKX1pbWFnZUJhY2tncm91bmQoKXtyZXR1cm4gbmV3IEFpfXZpZGVvQmFja2dyb3VuZCgpe3JldHVybiBuZXcgVnV9fXZhciBXdT1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLEh1PWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MganUgZXh0ZW5kcyBDZXtnZXREZWZpbmVzKCl7cmV0dXJue1JBRElVUzp0aGlzLm9wdGlvbnMucmFkaXVzPz8xfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBXdSt0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBIdX1jcmVhdGVMb29wRnVuY3Rpb24oKXtsZXQgZT10aGlzLm9wdGlvbnMucmFkaXVzPz8xO3JldHVybmAKCiAgICAgICAgdmVjNCBsb29wKCkgeyAKICAgICAgICAgICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAsMCwwLDApOwogICAgICAgICAgICBmbG9hdCBmYWN0b3JTdW0gPSAwLjsKCiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZFJhZGl1cyA9IHZlYzIoLSR7ZX0uKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkSW5jcmVtZW50ID0gdmVjMigxLikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgZGlmZiA9IG5vcm1hbGl6ZWRSYWRpdXM7CiAgICAgICAgICAgIGZsb2F0IG1heExlbmd0aCA9IGxlbmd0aChub3JtYWxpemVkUmFkaXVzKTsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gKDEuLSB0ZXh0dXJlMkQobWFzaywgX3RleHR1cmVfY29vcmQgKyBkaWZmKS5hKSAqIChtYXhMZW5ndGggLSBsZW5ndGgoZGlmZikpIC8gbWF4TGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmYWN0b3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQgKyBkaWZmKTsKICAgICAgICAgICAgICAgICAgICBmYWN0b3JTdW0gKz0gZmFjdG9yOwogICAgICAgICAgICAgICAgICAgIGRpZmYueCArPSBub3JtYWxpemVkSW5jcmVtZW50Lng7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkaWZmLnkgKz0gbm9ybWFsaXplZEluY3JlbWVudC55OwogICAgICAgICAgICAgICAgZGlmZi54ID0gbm9ybWFsaXplZFJhZGl1cy54OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQgLyBmYWN0b3JTdW07CiAgICAgICAgfWB9fWNvbnN0IFh1PTEwLFl1PTIsUXU9ODtjbGFzcyBxdSBleHRlbmRzIGJye2NvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZSx0aGlzLnJhZGl1cz1yO2NvbnN0IG49e2NvbnRleHQ6ZSxoZWlnaHQ6ZS5jYW52YXMuaGVpZ2h0LHdpZHRoOmUuY2FudmFzLndpZHRofTt0aGlzLmJsdXI9bmV3IGp1KHsuLi5uLHJhZGl1czpyLC4uLnRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCl9KTtjb25zdCBzPW5ldyBwcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dGhpcy5ibHVyLHByZXZlbnRSZXNpemU6ITAsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTp2KGUsdGhpcy5pbnB1dEltYWdlKSxtYXNrOnYoZSx0aGlzLmlucHV0TWFzayl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6dihlLHRoaXMuYmx1ci5vdXRwdXQpLGZvcmVncm91bmQ6dihlLHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOnYoZSx0aGlzLmlucHV0TWFzayl9KX0pfWdldEJsdXJUZXh0dXJlU2l6ZShlLHIpe2NvbnN0IG49dGhpcy5yYWRpdXM+WHU/UXU6WXU7cmV0dXJue3dpZHRoOk1hdGgubWF4KHllLGUvbiksaGVpZ2h0Ok1hdGgubWF4KHllLHIvbil9fXNldERhdGEoZSxyKXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz1yfXJlc2l6ZU91dHB1dChlLHIpe3N1cGVyLnJlc2l6ZU91dHB1dChlLHIpO2NvbnN0IG49dGhpcy5nZXRCbHVyVGV4dHVyZVNpemUoZSxyKTt0aGlzLmJsdXIucmVzaXplT3V0cHV0KG4ud2lkdGgsbi5oZWlnaHQpfX1jbGFzcyBLdSBleHRlbmRzIGJ0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5waXBlbGluZT1uZXcgcXUodGhpcy5jb250ZXh0LGUpLHRoaXMuZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl9fWNsYXNzIEp1IGV4dGVuZHMgYnJ7Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMuY29udGV4dD1lO2NvbnN0IG49e2NvbnRleHQ6ZSxoZWlnaHQ6ZS5jYW52YXMuaGVpZ2h0LHdpZHRoOmUuY2FudmFzLndpZHRofSxzPW5ldyBlcyh7Li4ubixyYWRpdXM6cix0eXBlOmdyLkdBVVNTSUFOfSksaT1uZXcgcHIoey4uLm4sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTp2KGUsdGhpcy5pbnB1dEltYWdlKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmksZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDp2KGUsdGhpcy5pbnB1dEltYWdlKSxmb3JlZ3JvdW5kOnYoZSxzLm91dHB1dCksdGhyZXNob2xkOnYoZSx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEoZSxyKXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz1yfX1jbGFzcyBadSBleHRlbmRzIGJ0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5waXBlbGluZT1uZXcgSnUodGhpcy5jb250ZXh0LGUpLHRoaXMuZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl9fWNsYXNzIGVmIGV4dGVuZHMgSm57Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucHJlY2lzZU1hc2tFbmFibGVkPSEwfXNldCByZWFkZXIoZSl7dGhpcy5mcmFtZVJlYWRlcj1lfWFzeW5jIHJ1bigpe3RoaXMuZnJhbWVSZWFkZXImJihhd2FpdCB0aGlzLnJlYWROZXh0VmlkZW9GcmFtZSgpLGF3YWl0IHN1cGVyLnJ1bigpKX1hc3luYyByZWFkTmV4dFZpZGVvRnJhbWUoKXt2YXIgcjtjb25zdCBlPWF3YWl0KChyPXRoaXMuZnJhbWVSZWFkZXIpPT1udWxsP3ZvaWQgMDpyLnJlYWQoKSk7ZSE9bnVsbCYmZS52YWx1ZSYmKHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoZS52YWx1ZSksZS52YWx1ZS5jbG9zZSgpKX19Y2xhc3MgdGYgZXh0ZW5kcyBidHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5waXBlbGluZT1uZXcgZWYodGhpcy5jb250ZXh0KX1zZXRCYWNrZ3JvdW5kVmlkZW8oZSl7dGhpcy5waXBlbGluZS5yZWFkZXI9ZX19Y2xhc3MgbnN7Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIG5ldyBLdShlKX1ibHVyU2lsaG91ZXR0ZShlKXtyZXR1cm4gbmV3IFp1KGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiBuZXcgdHN9dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyB0Zn19Y2xhc3MgcmZ7Y29uc3RydWN0b3IoZSl7c3dpdGNoKGUpe2Nhc2UgS2UuQ0FOVkFTOnRoaXMuZmFjdG9yeT1uZXcgcnM7YnJlYWs7Y2FzZSBLZS5XRUJHTDp0aGlzLmZhY3Rvcnk9bmV3IG5zO2JyZWFrO2RlZmF1bHQ6Y29uc3Qgcj1faSgpO3RoaXMuZmFjdG9yeT1yLnN1cHBvcnRlZD9uZXcgbnM6bmV3IHJzfX1ibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkuYmx1ckJhY2tncm91bmQoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLmJsdXJTaWxob3VldHRlKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiB0aGlzLmdldEZhY3RvcnkoKS5pbWFnZUJhY2tncm91bmQoKX12aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkudmlkZW9CYWNrZ3JvdW5kKCl9Z2V0RmFjdG9yeSgpe2lmKCF0aGlzLmZhY3RvcnkpdGhyb3ciRmFjdG9yeSBpcyBub3QgaW5pdGlhbGl6ZWQiO3JldHVybiB0aGlzLmZhY3Rvcnl9fWNsYXNzIG5me3NldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciBuLHM7dGhpcy5yZW5kZXJlciYmdGhpcy5yZW5kZXJlci5kZXN0cm95KCk7Y29uc3Qgcj1uZXcgcmYoKG49ZS5yZW5kZXJpbmdPcHRpb25zKT09bnVsbD92b2lkIDA6bi50eXBlKTtzd2l0Y2goZS50cmFuc2Zvcm1lclR5cGUpe2Nhc2UiQmFja2dyb3VuZEJsdXIiOnRoaXMucmVuZGVyZXI9ci5ibHVyQmFja2dyb3VuZCh0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJTaWxob3VldHRlQmx1ciI6dGhpcy5yZW5kZXJlcj1yLmJsdXJTaWxob3VldHRlKHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlZpZGVvQmFja2dyb3VuZCI6Y29uc3QgaT1yLnZpZGVvQmFja2dyb3VuZCgpO3RoaXMuYmFja2dyb3VuZFZpZGVvJiZpLnNldEJhY2tncm91bmRWaWRlbyh0aGlzLmJhY2tncm91bmRWaWRlbyksdGhpcy5yZW5kZXJlcj1pO2JyZWFrO2Nhc2UiVmlydHVhbEJhY2tncm91bmQiOmNvbnN0IGE9ci5pbWFnZUJhY2tncm91bmQoKTt0aGlzLmJhY2tncm91bmRJbWFnZSYmYS5zZXRCYWNrZ3JvdW5kSW1hZ2UodGhpcy5iYWNrZ3JvdW5kSW1hZ2UpLHRoaXMucmVuZGVyZXI9YTticmVhaztkZWZhdWx0OnRocm93YFVua25vd24gcmVuZGVyaW5nIHR5cGUgWyR7ZS50cmFuc2Zvcm1lclR5cGV9XWB9KChzPWUucmVuZGVyaW5nT3B0aW9ucyk9PW51bGw/dm9pZCAwOnMudHlwZSk9PT1LZS5XRUJHTCYmKGUucmVuZGVyaW5nT3B0aW9ucy5zZWxmaWVTZWdtZW50YXRpb25UeXBlPT09a3QuUFJFQ0lTRT90aGlzLnJlbmRlcmVyLmVuYWJsZVBvc3RQcm9jZXNzaW5nKCk6ZS5yZW5kZXJpbmdPcHRpb25zLnNlbGZpZVNlZ21lbnRhdGlvblR5cGU9PT1rdC5GQVNUJiZ0aGlzLnJlbmRlcmVyLmRpc2FibGVQb3N0UHJvY2Vzc2luZygpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVmlkZW89ZS5nZXRSZWFkZXIoKTtjb25zdCByPXRoaXMucmVuZGVyZXI7ciE9bnVsbCYmci5zZXRCYWNrZ3JvdW5kVmlkZW8mJnIuc2V0QmFja2dyb3VuZFZpZGVvKHRoaXMuYmFja2dyb3VuZFZpZGVvKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXtjb25zdCByPXRoaXMucmVuZGVyZXI7ciE9bnVsbCYmci5zZXRCYWNrZ3JvdW5kSW1hZ2UmJnIuc2V0QmFja2dyb3VuZEltYWdlKGUpLHRoaXMuYmFja2dyb3VuZEltYWdlPWV9YXN5bmMgcHJvY2VzcyhlLHIpe2lmKHRoaXMucmVuZGVyZXIpcmV0dXJuIHRoaXMucmVuZGVyZXIucmVuZGVyKGUscil9YXN5bmMgcmVzaXplRm9yZWdyb3VuZChlLHIpe31nZXRCbHVyU2l6ZShlPXFlLkxvdyl7c3dpdGNoKGUpe2Nhc2UgcWUuTG93OnJldHVybiA1O2Nhc2UgcWUuSGlnaDpyZXR1cm4gMTJ9cmV0dXJuIGV9YXN5bmMgcHJvZmlsZShlKXt2YXIgcjtyZXR1cm4oKHI9dGhpcy5yZW5kZXJlcik9PW51bGw/dm9pZCAwOnIucHJvZmlsZVdlYmdsKGUpKT8/W119fWNvbnN0IHNmPS4xLG9mPS43LGFmPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L21sL3ZvbmFnZV9zZWxmaWVfc2VnbWVudGVyL2Zsb2F0MTYvdjEvdm9uYWdlX3NlbGZpZV9zZWdtZW50ZXIudGZsaXRlIjtjbGFzcyBjZntjb25zdHJ1Y3Rvcigpe3RoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MH1hc3luYyBjcmVhdGVJbWFnZVNlZ21lbnRlcigpe2lmKCF0aGlzLkltYWdlU2VnbWVudGVyfHwhdGhpcy53YXNtRmlsZXNldCl7Y29uc29sZS53YXJuKCJNZWRpYXBpcGUgb2JqZWN0cyBub3QgbG9hZGVkIik7cmV0dXJufXRoaXMuaW1hZ2VTZWdtZW50ZXI9YXdhaXQgdGhpcy5JbWFnZVNlZ21lbnRlci5jcmVhdGVGcm9tT3B0aW9ucyh0aGlzLndhc21GaWxlc2V0LHtiYXNlT3B0aW9uczp7bW9kZWxBc3NldFBhdGg6dGhpcy5tb2RlbEFzc2V0VXJpUGF0aCxkZWxlZ2F0ZToiR1BVIn0scnVubmluZ01vZGU6IlZJREVPIixvdXRwdXRDYXRlZ29yeU1hc2s6ITAsb3V0cHV0Q29uZmlkZW5jZU1hc2tzOiEwfSl9YXN5bmMgbG9hZE1lZGlhcGlwZUFzc2V0cyhlLHIpe3RoaXMubW9kZWxBc3NldFVyaVBhdGg9ZXx8YWY7Y29uc3Qgbj1yP2Ake3J9L3Rhc2stdmlzaW9uLmpzYDoiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AbWVkaWFwaXBlL3Rhc2tzLXZpc2lvbkAwLjEwLjIwLytlc20iLHM9cj9gJHtyfS93YXNtYDoiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AbWVkaWFwaXBlL3Rhc2tzLXZpc2lvbkAwLjEwLjIwL3dhc20iLHtGaWxlc2V0UmVzb2x2ZXI6aSxJbWFnZVNlZ21lbnRlcjphfT1hd2FpdCBpbXBvcnQobik7dGhpcy5JbWFnZVNlZ21lbnRlcj1hLHRoaXMud2FzbUZpbGVzZXQ9YXdhaXQgaS5mb3JWaXNpb25UYXNrcyhzKX1hc3luYyBpbml0KGUscil7YXdhaXQgdGhpcy5sb2FkTWVkaWFwaXBlQXNzZXRzKGUsciksZ2xvYmFsVGhpcy5kb2N1bWVudD17fSxhd2FpdCB0aGlzLmNyZWF0ZUltYWdlU2VnbWVudGVyKCl9YXN5bmMgcHJvY2VzcyhlKXt2YXIgYTtpZighdGhpcy5pbWFnZVNlZ21lbnRlcil7Y29uc29sZS53YXJuKCJJbWFnZVNlZ21lbnRlciBpbnN0YW5jZSBub3QgYXZhaWxhYmxlIik7cmV0dXJufSh0aGlzLndpZHRoIT09ZS53aWR0aHx8dGhpcy5oZWlnaHQhPT1lLmhlaWdodCkmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoPWUud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0PWUuaGVpZ2h0LHRoaXMubWFzayYmKHRoaXMubWFzaz1uZXcgSW1hZ2VEYXRhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSksdGhpcy5tYXNrfHwodGhpcy5tYXNrPW5ldyBJbWFnZURhdGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCkpLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCk7Y29uc3Qgcj1EYXRlLm5vdygpO2xldCBuO3RyeXsoYT10aGlzLmltYWdlU2VnbWVudGVyKT09bnVsbHx8YS5zZWdtZW50Rm9yVmlkZW8odGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLDAsZS53aWR0aCxlLmhlaWdodCkscixvPT57dmFyIHU7Y29uc3QgYz0odT1vLmNvbmZpZGVuY2VNYXNrcyk9PW51bGw/dm9pZCAwOnVbMF07bj1jPT1udWxsP3ZvaWQgMDpjLmdldEFzRmxvYXQzMkFycmF5KCl9KX1jYXRjaHthd2FpdCB0aGlzLmNyZWF0ZUltYWdlU2VnbWVudGVyKCk7cmV0dXJufWlmKCFuKXJldHVybjtpZighdGhpcy5wcmV2aW91c0NvbmZpZGVuY2VNYXNrKXt0aGlzLnByZXZpb3VzQ29uZmlkZW5jZU1hc2s9bi5zbGljZSgpO3JldHVybn1jb25zdCBzPW4ubWFwKChvLGMpPT57dmFyIGY7Y29uc3QgdT0oZj10aGlzLnByZXZpb3VzQ29uZmlkZW5jZU1hc2spPT1udWxsP3ZvaWQgMDpmW2NdO3JldHVybiB1IT09dm9pZCAwP3RoaXMuYmxlbmQodSxvKTpvfSksaT1bMjU1LDAsMF07Zm9yKGxldCBvPTA7bzwocz09bnVsbD92b2lkIDA6cy5sZW5ndGgpO28rKyl7Y29uc3QgYz0xLXNbb107Yz5zZj8oYzxvZj8odGhpcy5tYXNrLmRhdGFbbyo0XT1pWzBdKmMsdGhpcy5tYXNrLmRhdGFbbyo0KzNdPTI1NSpjKToodGhpcy5tYXNrLmRhdGFbbyo0XT1pWzBdLHRoaXMubWFzay5kYXRhW28qNCszXT0yNTUpLHRoaXMubWFzay5kYXRhW28qNCsxXT1pWzFdLHRoaXMubWFzay5kYXRhW28qNCsyXT1pWzJdKTp0aGlzLm1hc2suZGF0YVtvKjRdPXRoaXMubWFzay5kYXRhW28qNCsxXT10aGlzLm1hc2suZGF0YVtvKjQrMl09dGhpcy5tYXNrLmRhdGFbbyo0KzNdPTB9cmV0dXJuIHRoaXMucHJldmlvdXNDb25maWRlbmNlTWFzaz1zLnNsaWNlKCksdGhpcy5tYXNrfWlzR3B1U3VwcG9ydGVkKCl7cmV0dXJuITB9YmxlbmQoZSxyKXtjb25zdCBzPS0uNzQ4Njk5LGk9LTU3LjgwNTEsYT0yOTEuMzA5LG89LTYyNC43MTcsYz1yLS41LHU9YypjLGY9MS1NYXRoLm1pbigxLHUqKDUuNjg4NDIrdSoocyt1KihpK3UqKGErdSpvKSkpKSk7cmV0dXJuIHIrKGUtcikqKGYqLjkpfX1jbGFzcyB1Zntjb25zdHJ1Y3Rvcigpe3RoaXMucmVwb3J0ZXI9bmV3IHhpLHRoaXMuaXNFbmFibGVkPSEwfWFzeW5jIGluaXQoZSxyKXt2YXIgbjt0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbj1uZXcgY2YsYXdhaXQoKG49dGhpcy5zZWxmaWVTZWdtZW50YXRpb24pPT1udWxsP3ZvaWQgMDpuLmluaXQoci5tb2RlbEFzc2V0VXJpUGF0aCxyLm1lZGlhcGlwZUJhc2VBc3NldHNVcmkpKSx0aGlzLmJhY2tncm91bmRGaWx0ZXI9bmV3IG5mLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1hc3luYyB0cmFuc2Zvcm0oZSxyKXt2YXIgbyxjO2lmKCF0aGlzLmlzRW5hYmxlZClyZXR1cm4gci5lbnF1ZXVlKGUpO2xldCBuO2NvbnN0IHM9ZS50aW1lc3RhbXA/PzAsaT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChlKSxhPWF3YWl0KChvPXRoaXMuc2VsZmllU2VnbWVudGF0aW9uKT09bnVsbD92b2lkIDA6by5wcm9jZXNzKGkpKTthJiYobj1hd2FpdCgoYz10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpjLnByb2Nlc3MoaSxhKSkpLG4/KGUuY2xvc2UoKSxyLmVucXVldWUobmV3IFZpZGVvRnJhbWUobix7dGltZXN0YW1wOnMsYWxwaGE6ImRpc2NhcmQifSkpKTpyLmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHI7dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucz1lLGF3YWl0KChyPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnIuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSJ9KX1hc3luYyBzZXRWaWRlb0JHUmVhZGFibGUoZSl7dmFyIHI7YXdhaXQoKHI9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6ci5zZXRWaWRlb0JHUmVhZGFibGUoZSkpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3ZhciByO2F3YWl0KChyPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnIuc2V0VmlydHVhbEJHSW1hZ2UoZSkpfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHI7cmV0dXJuKChyPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnIucHJvZmlsZShlKSk/P1tdfWdldFRyYW5zZm9ybWVyVHlwZSgpe3ZhciBlO3JldHVybigoZT10aGlzLmJhY2tncm91bmRPcHRpb25zKT09bnVsbD92b2lkIDA6ZS50cmFuc2Zvcm1lclR5cGUpPz8iVW5kZWZpbmVkIn1lbmFibGUoKXt0aGlzLmlzRW5hYmxlZD0hMH1kaXNhYmxlKCl7dGhpcy5pc0VuYWJsZWQ9ITF9cmVwb3J0KGUpe3ZhciByO3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpFaSxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHI9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnIudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0IHhyPWNsYXNzIHhye2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXI9bmV3IHVmLHRoaXMubWVkaWFQcm9jZXNzb3I9bmV3IFFzLHRoaXMucmF0ZT0zMCx0aGlzLmV2ZW50c1F1ZXVlPVtdLHRoaXMuZnJhbWVUcmFuc2Zvcm1MYXRlbmN5TXM9W119YXN5bmMgaW5pdChlLHIpe3RoaXMuZnJhbWVUcmFuc2Zvcm1MYXRlbmN5TXM9W10sYXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuaW5pdChlLHIpLGF3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhbnNmb3JtZXJzKFt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcl0pLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy5yYXRlKSx0aGlzLm1lZGlhUHJvY2Vzc29yLm9uQW55KChuLHMpPT57dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj8odGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcih7bmFtZTpuLGRhdGE6c30pLHRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9dm9pZCAwKTp0aGlzLmV2ZW50c1F1ZXVlLnB1c2goe25hbWU6bixkYXRhOnN9KX0pfWVuYWJsZSgpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmVuYWJsZSgpfWRpc2FibGUoKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5kaXNhYmxlKCl9YXN5bmMgb25NZWRpYVByb2Nlc3NvckV2ZW50KCl7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLmV2ZW50c1F1ZXVlLmxlbmd0aD4wP2UodGhpcy5ldmVudHNRdWV1ZS5zaGlmdCgpKTp0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWV9KX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHIpe2xldCBuPXBlcmZvcm1hbmNlLm5vdygpO3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsciksdGhpcy5mcmFtZVRyYW5zZm9ybUxhdGVuY3lNcy5wdXNoKHBlcmZvcm1hbmNlLm5vdygpLW4pfWFzeW5jIHNldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciByO2F3YWl0KChyPXRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyKT09bnVsbD92b2lkIDA6ci5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpZGVvQkdSZWFkYWJsZShlKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaXJ0dWFsQkdJbWFnZShlKX1hc3luYyB0ZXJtaW5hdGUoKXthd2FpdCB0aGlzLm1lZGlhUHJvY2Vzc29yLmRlc3Ryb3koKTtjb25zdCByPXRoaXMuZnJhbWVUcmFuc2Zvcm1MYXRlbmN5TXMucmVkdWNlKChuLHMpPT5uK3MsMCkvdGhpcy5mcmFtZVRyYW5zZm9ybUxhdGVuY3lNcy5sZW5ndGh8fDA7Y29uc29sZS5sb2coYFRyYW5zZm9ybSBsYXRlbmN5IGF2ZXJhZ2UgaXM6ICR7cn0gbXNgKX1zZXRWb25hZ2VNZXRhZGF0YShlKXtWcyhlKX1hc3luYyBwcm9maWxlKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5wcm9maWxlKGUpKX19O3VzKCJQcm9jZXNzb3JXb3JrZXIiLHhyKTtsZXQgc3M9eHJ9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1wcm9jZXNzb3Itd29ya2VyLThkWk1Ia0NiLmpzLm1hcAo=",Go=typeof self<"u"&&self.Blob&&new Blob([(e=>Uint8Array.from(atob(e),e=>e.charCodeAt(0)))(No)],{type:"text/javascript;charset=utf-8"});function Xo(e){let t;try{if(t=Go&&(self.URL||self.webkitURL).createObjectURL(Go),!t)throw"";const n=new Worker(t,{name:null==e?void 0:e.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker("data:text/javascript;base64,"+No,{name:null==e?void 0:e.name})}finally{t&&(self.URL||self.webkitURL).revokeObjectURL(t)}}const ko=function(e){function t(t){var n;return(n=e.call(this)||this).rate=30,n.isEnabled=!0,n.config=t,n}(0,a.default)(t,e);var n=t.prototype;return n.setTrackExpectedRate=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.startWorker();case 2:return e.next=4,null==(n=this.worker)?void 0:n.setTrackExpectedRate(t);case 4:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.setBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.backgroundOptions=t,e.next=3,this.updateBackgroundOptions(t);case 3:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.transform=function(){var e=(0,c.default)(o.default.mark((function e(t,n){var r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.startWorker();case 2:return e.next=4,null==(r=this.worker)?void 0:r.transform(t,n);case 4:case"end":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),n.destroy=function(){var e=(0,c.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(t=this.worker)?void 0:t.terminate();case 2:this.worker=void 0;case 3:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null==(n=this.worker)?void 0:n.profile(t);case 2:return r=e.sent,e.abrupt("return",JSON.parse(null!=r?r:"[]"));case 4:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.enable=function(){var e=(0,c.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.isEnabled=!0,e.next=3,null==(t=this.worker)?void 0:t.enable();case 3:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.disable=function(){var e=(0,c.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.isEnabled=!1,e.next=3,null==(t=this.worker)?void 0:t.disable();case 3:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.listenWorker=function(){var e=(0,c.default)(o.default.mark((function e(){var t,n,r,i,a;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null==(t=this.worker)||!t.workerContext.worker){e.next=20;break}return e.next=3,null==(n=this.worker)?void 0:n.onMediaProcessorEvent();case 3:r=e.sent,i=r.name,a=r.data,e.t0=i,e.next="error"===e.t0||"warn"===e.t0?9:"pipelineInfo"===e.t0?11:18;break;case 9:return this.emit(i,a),e.abrupt("break",18);case 11:e.t1=(this.emit(i,a),a),e.next="pipeline_ended"===e.t1||"pipeline_ended_with_error"===e.t1?14:17;break;case 14:return e.next=16,this.destroy();case 16:return e.abrupt("return");case 17:return e.abrupt("break",18);case 18:e.next=0;break;case 20:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.startWorker=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.t0=!this.config||this.worker,e.t0){e.next=20;break}return e.next=4,jt(Jo,Xo);case 4:if(this.worker=e.sent,e.t1=this.isEnabled,e.t1){e.next=9;break}return e.next=9,this.worker.disable();case 9:return e.next=11,this.worker.init("worker_"+t.initCount++,this.config);case 11:if(e.t2=this.backgroundOptions,!e.t2){e.next=15;break}return e.next=15,this.updateBackgroundOptions(this.backgroundOptions);case 15:return e.next=17,this.worker.setVonageMetadata(ge());case 17:return e.next=19,this.setBackgroundOptions(this.config);case 19:this.listenWorker();case 20:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.updateBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){var n,r,i,a;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.startWorker();case 2:a=t.transformerType,e.t0=a,e.next="VideoBackground"===e.t0?6:"VirtualBackground"===e.t0?18:30;break;case 6:if(null!=(n=this.worker)){e.next=10;break}e.t1=void 0,e.next=15;break;case 10:return e.t2=n,e.next=13,on.createVideoReadable(t.backgroundAssetUri);case 13:e.t3=e.sent,e.t1=e.t2.setVideoBGReadable.call(e.t2,e.t3);case 15:return e.next=17,e.t1;case 17:return e.abrupt("break",30);case 18:if(null!=(r=this.worker)){e.next=22;break}e.t4=void 0,e.next=27;break;case 22:return e.t5=r,e.next=25,on.createImageCanvas(t.backgroundAssetUri);case 25:e.t6=e.sent,e.t4=e.t5.setVirtualBGImage.call(e.t5,e.t6);case 27:return e.next=29,e.t4;case 29:return e.abrupt("break",30);case 30:return e.next=32,null==(i=this.worker)?void 0:i.setBackgroundOptions(t);case 32:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t}(st);ko.initCount=0;let To=ko,Yo=function(){function e(e){this.queries=e}var t=e.prototype;return t.downloadSpeedscope=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=this,e.next=3,this.convertToSpeedscope();case 3:e.t1=e.sent,e.t0.download.call(e.t0,e.t1);case 5:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.download=function(e){const t=document.createElement("a");t.href=URL.createObjectURL(new Blob([e],{type:"application/json"})),t.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(t),t.click(),document.body.removeChild(t)},t.convertToSpeedscope=function(){const e=[],t={},n=[];let r=0;for(var i,o=A(this.queries);!(i=o()).done;){const o=[];for(var a,l=A(i.value);!(a=l()).done;){const n=a.value;void 0===t[n.name]&&(t[n.name]=e.length,e.push({name:n.name})),o.push({type:n.action==go.PUSH?"O":"C",frame:t[n.name],at:n.timestamp}),r=Math.max(r,n.timestamp+n.duration)}n.push({events:o,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:r})}return JSON.stringify({$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:e},profiles:n},null,2)},e}();const wo=function(t){function n(e){var n;return(n=t.call(this)||this).worker=new To(e),n.connector=new Ie(n.worker),n.worker.onAny((e,t)=>n.emit(e,t)),n}(0,a.default)(n,t);var r=n.prototype;return r.setBackgroundOptions=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.worker.setBackgroundOptions(t);case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),r.enable=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.worker.enable();case 2:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),r.disable=function(){var e=(0,c.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.worker.disable();case 2:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),r.setTrackExpectedRate=function(e){this.worker.setTrackExpectedRate(e)},r.getConnector=function(){return this.connector},r.profile=function(){var e=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.worker.profile(t));case 1:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n.profile=function(){var t=(0,c.default)(o.default.mark((function t(n){var r;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.all(this.instances.map(e=>e.profile(n)));case 2:return r=t.sent,t.abrupt("return",new Yo(r));case 4:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),n.create=function(){var e=(0,c.default)(o.default.mark((function e(t){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=new this(t),e.abrupt("return",(this.instances.push(n),n));case 2:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),n}(st);wo.instances=[];let Do=wo;function xo(){return(xo=(0,c.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Do.create(t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}t.VonageMediaProcessor=Do}).call(this,n(2),n(24))},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e,t){void 0===t&&(t={});const n=t.hasE2eeCapability||i.default,r=t.hasOpenTokSupport||o;this.publish=-1!==e.indexOf("publish")?1:0,this.subscribe=-1!==e.indexOf("subscribe")?1:0,this.forceUnpublish=-1!==e.indexOf("forceunpublish")?1:0,this.forceDisconnect=-1!==e.indexOf("forcedisconnect")?1:0,this.forceMute=-1!==e.indexOf("forcemute")?1:0,this.supportsE2ee=n()?1:0,this.supportsWebRTC=r()?1:0,this.permittedTo=e=>Object.prototype.hasOwnProperty.call(this,e)&&1===this[e]};var i=r(n(115));const o=r(n(53)).default.once},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=function(e,t,n,r,o,c,A){const h=this;let g;this.id=e,this.streamId=e,this.name=t,this.creationTime=Number(n),this.initials=A||"",this.connection=r,this.channel=c,this.publisher=a.default.publishers.find({streamId:this.id}),(0,i.default)(this);const Q=function(e,t,n,r){let i=t;switch(i){case"active":i="audio"===e.type?"hasAudio":"hasVideo",h[i]=r;break;case"disableWarning":if(i="audio"===e.type?"audioDisableWarning":"videoDisableWarning",h[i]=r,!h["audio"===e.type?"hasAudio":"hasVideo"])return;break;case"fitMode":i="defaultFitMode",h[i]=r;break;case"source":i="audio"===e.type?"audioType":"videoType",h[i]=r;break;case"videoDimensions":h.videoDimensions=r;break;case"orientation":case"width":case"height":return}h.dispatchEvent(new d.StreamUpdatedEvent(h,i,n,r))},F=function(){return h.publisher?h.publisher:a.default.subscribers.find(e=>e.stream&&e.stream.id===h.id&&e.session.id===o.id)},p=function(){return!h.publisher};this.getChannelsOfType=function(e){return h.channel.filter(t=>t.type===e)},this.getChannel=function(e){for(let t=0;t<h.channel.length;++t)if(h.channel[t].id===e)return h.channel[t];return null};const U=this.getChannelsOfType("audio")[0],m=this.getChannelsOfType("video")[0];this.hasAudio=null!=U&&U.active,this.hasVideo=null!=m&&m.active,this.videoType=m&&m.source,this.defaultFitMode=m&&m.fitMode,this.videoDimensions={},m&&(this.videoDimensions.width=m.width,this.videoDimensions.height=m.height,this.videoDimensions.orientation=m.orientation,m.on("update",Q),this.frameRate=m.frameRate);U&&U.on("update",Q);this.setChannelActiveState=function(e){let t=e.channelType,n=e.activeState,r=e.activeReason,i=e.congestionLevel,o=e.subscriberId,a=e.isSubscriber;const l={active:n};r&&(l.activeReason=r),void 0!==i&&(l.congestionLevel=i),o&&(l.subscriberId=o),b(t,l,a)},this.setVideoDimensions=function(e,t){b("video",{width:e,height:t,orientation:0})},this.setRestrictFrameRate=function(e){b("video",{restrictFrameRate:e},!0)},this.setPreferredResolution=function(e){if(!p())return void s.warn("setPreferredResolution has no affect when called by a publisher");if(o.sessionInfo.p2pEnabled)return void s.warn("Stream.setPreferredResolution will not work in a P2P Session");if(e&&void 0===e.width&&void 0===e.height)return;const t=h.getChannelsOfType("video")[0];if(t){if(e&&e.width){if(isNaN(parseInt(e.width,10)))throw new l.default.Error("stream preferred width must be an integer","Subscriber");t.preferredWidth=parseInt(e.width,10)}else t.preferredWidth=void 0;if(e&&e.height){if(isNaN(parseInt(e.height,10)))throw new l.default.Error("stream preferred height must be an integer","Subscriber");t.preferredHeight=parseInt(e.height,10)}else t.preferredHeight=void 0;o._.subscriberChannelUpdate(h,F(),t,{preferredWidth:t.preferredWidth||0,preferredHeight:t.preferredHeight||0})}},this.getPreferredResolution=function(){const e=h.getChannelsOfType("video")[0];if(e&&(e.preferredWidth||e.preferredHeight))return{width:e.preferredWidth,height:e.preferredHeight}},this.setPreferredFrameRate=function(e){if(!p())return void s.warn("setPreferredFrameRate has no affect when called by a publisher");if(o.sessionInfo.p2pEnabled)return void s.warn("Stream.setPreferredFrameRate will not work in a P2P Session");if(e&&isNaN(parseFloat(e)))throw new l.default.Error("stream preferred frameRate must be a number","Subscriber");const t=h.getChannelsOfType("video")[0];t&&(t.preferredFrameRate=e?parseFloat(e):null,o._.subscriberChannelUpdate(h,F(),t,{preferredFrameRate:t.preferredFrameRate||0}))},this.getPreferredFrameRate=function(){const e=h.getChannelsOfType("video")[0];return e?e.preferredFrameRate:null};const b=function(e,t,n){let r;if(void 0===n&&(n=!1),n){const e=F();r=n=>o._.subscriberChannelUpdate(h,e,n,t)}else r=e=>o._.streamChannelUpdate(h,e,t);h.getChannelsOfType(e).forEach(r)};this.destroyed=!1,this.destroyedReason=void 0,this.destroy=function(e,t){void 0===e&&(e="clientDisconnected"),g=e,h.destroyed=!0,h.destroyedReason=g,!0!==t&&h.dispatchEvent(new d.DestroyedEvent("destroyed",h,g))},this._={},this._.updateProperty=function(e,t){if(-1===u.indexOf(e))return void s.warn(`Unknown stream property "${e}" was modified to "${t}".`);const n=h[e],r=t;switch(e){case"name":h[e]=r;break;case"archiving":var i=F();h.publisher&&i&&i._.archivingStatus(r),h[e]=r}const o=new d.StreamUpdatedEvent(h,e,n,r);h.dispatchEvent(o)},this._.update=function(e){for(const t in e)e.hasOwnProperty(t)&&h._.updateProperty(t,e[t])},this._.forceMute=function(e){e.hasOwnProperty("channels")&&e.channels.includes("audio")&&h.publisher&&h.publisher._.forceMuteAudio()},this._.updateChannel=function(e,t){const n=h.getChannel(e);n&&n.update(t)}};var i=r(n(6)),o=r(n(1)),a=r(n(27)),l=r(n(7)),c=r(n(18));const s=(0,o.default)("Stream"),d=(0,c.default)(),u=["name","archiving"]},function(e,t,n){"use strict";t.__esModule=!0,t.default=t.UNSUBSCRIBE=t.SUBSCRIBE=t.STATUS=t.PONG=t.PING=t.MESSAGE=t.DISCONNECT=t.CONNECT=void 0;t.SUBSCRIBE=0;t.UNSUBSCRIBE=1;t.MESSAGE=2;t.CONNECT=3;t.DISCONNECT=4;t.PING=7;t.PONG=8;t.STATUS=9;var r={SUBSCRIBE:0,UNSUBSCRIBE:1,MESSAGE:2,CONNECT:3,DISCONNECT:4,PING:7,PONG:8,STATUS:9};t.default=r},function(e,t,n){"use strict";var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(9)),o=r(n(6)),a=r(n(185)),l=r(n(18)),c=r(n(812));const s=(0,l.default)();function d(e,t,n,r,i){let l;this.id=e,this.connectionId=e,this.creationTime=t?Number(t):null,this.data=n,this.capabilities=(0,c.default)(r),this.permissions=new a.default(i),this.quality=null,(0,o.default)(this),this.destroy=(e,t)=>{l=e||"clientDisconnected",!0!==t&&this.dispatchEvent(new s.DestroyedEvent("destroyed",this,l))},this.destroyed=()=>void 0!==l,this.destroyedReason=()=>l}d.fromHash=e=>{let t=e.id,n=e.creationTime,r=e.data,o=e.capablities,a=e.permissions;return new d(t,n,r,(0,i.default)(o||{},{supportsWebRTC:!0}),a||[])};var u=d;t.default=u},function(e,t){var n="object"==typeof(void 0!==typeof window?window:global)&&(void 0!==typeof window?window:global)&&(void 0!==typeof window?window:global).Object===Object&&(void 0!==typeof window?window:global);e.exports=n},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},function(e,t,n){var r=n(42),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=i},function(e,t,n){var r=n(44),i=n(34);e.exports=function(e,t){return e&&r(t,i(t),e)}},function(e,t,n){var r=n(395),i=n(65),o=n(14),a=n(66),l=n(67),c=n(88),s=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=o(e),d=!n&&i(e),u=!n&&!d&&a(e),A=!n&&!d&&!u&&c(e),h=n||d||u||A,g=h?r(e.length,String):[],Q=g.length;for(var F in e)!t&&!s.call(e,F)||h&&("length"==F||u&&("offset"==F||"parent"==F)||A&&("buffer"==F||"byteLength"==F||"byteOffset"==F)||l(F,Q))||g.push(F);return g}},function(e,t){e.exports=function(e,t){return function(n){return e(t(n))}}},function(e,t,n){(function(e){var r=n(16),i=t&&!t.nodeType&&t,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===i?r.Buffer:void 0,l=a?a.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=l?l(n):new e.constructor(n);return e.copy(r),r}}).call(this,n(87)(e))},function(e,t){e.exports=function(){return[]}},function(e,t,n){var r=n(123),i=n(124),o=n(122),a=n(196),l=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,o(e)),e=i(e);return t}:a;e.exports=l},function(e,t,n){var r=n(199),i=n(122),o=n(34);e.exports=function(e){return r(e,o,i)}},function(e,t,n){var r=n(123),i=n(14);e.exports=function(e,t,n){var o=t(e);return i(e)?o:r(o,n(e))}},function(e,t,n){var r=n(199),i=n(197),o=n(55);e.exports=function(e){return r(e,o,i)}},function(e,t,n){var r=n(42)(n(16),"Set");e.exports=r},function(e,t,n){var r=n(42)(n(16),"WeakMap");e.exports=r},function(e,t,n){var r=n(16).Uint8Array;e.exports=r},function(e,t,n){var r=n(125);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},function(e,t,n){var r=n(89),i=n(124),o=n(69);e.exports=function(e){return"function"!=typeof e.constructor||o(e)?{}:r(i(e))}},function(e,t,n){"use strict";(function(e){var r=n(0);t.__esModule=!0,t.default=void 0;var i=r(n(4)),o=r(n(5)),a=r(n(6)),l=r(n(1)),c=r(n(58)),s=r(n(474)),d=r(n(475)),u=r(n(476)),A=r(n(95)),h=r(n(3)),g=r(n(259)),Q=r(n(22)),F=r(n(107)),p=r(n(145)),U=r(n(146)),m=r(n(568)),b=r(n(589)),B=r(n(7)),Z=r(n(273)),f=r(n(274)),R=n(592);const I=(0,Q.default)().hasAudioOutputApiSupport,y=F.default.getCurrentAudioOutputDeviceId;function V(e,t){const n=(0,f.default)();return(0,d.default)(n),n.innerHTML=e,!0===t&&(n.muted="true"),n}function C(){const e=V("");return e.setAttribute("style","display:none"),e}var W=function(t){void 0===t&&(t={});const n=t.audioContext||(0,p.default)(),r=t.canBeOrientatedMixin||m.default,d=t.document||(void 0!==typeof window?window:global).document,Q=t.listenForTracksEnded||(0,b.default)(),F=t.logging||l.default,f=t.OTHelpers||B.default,W=t.videoElementErrorMap||(0,Z.default)(),E=t.WebaudioAudioLevelSampler||U.default,S=t.global||(void 0!==typeof window?window:global);let v=1;return function(){function t(e,t){var n=this;let l=e._inject,s=void 0===l?{}:l,d=s.createVideoElement,u=void 0===d?V:d,A=s.createAudioOnlyVideoElement,Q=void 0===A?C:A,p=e.muted,U=e.fallbackText,m=e.widgetType;this._domElement=void 0,this._domAudioOnlyVideoElement=void 0,this._blockedVolume=void 0,this._mediaStoppedListener=void 0,this._audioLevelSampler=void 0,this._playInterrupts=0,this._isVideoLoadedMetaData=!1,this._audioOnlyVideoElementWatcher=void 0,this._blinkStartTime=null,this.logging=F("NativeVideoElementWrapper:"+v),v+=1,(0,a.default)(this),this._defaultAudioVolume=t,this._widgetType=m,this._emitVideoPlayAttempt=()=>{this._blinkStartTime=(new Date).getTime(),this.trigger("bindEvent","transitionVideo","Attempt")},this._emitVideoPlaySuccess=()=>{const e=(new Date).getTime()-this._blinkStartTime;this.trigger("bindEvent","transitionVideo","Success",{attemptDuration:e}),this._blinkStartTime=null},this._emitVideoPlayFailure=()=>{this.trigger("bindEvent","transitionVideo","Failure")};let b=!1;this._domElement=u(U,p),this.trigger("videoElementCreated",this._domElement),this._domElementEvents=(0,c.default)(this._domElement),this._domElementEvents.on("loadstart",()=>this._onDomElementLoadStart()),this._domElementEvents.on("timeupdate",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.trigger("timeupdate",...t)})),this._domElementEvents.on("loadedmetadata",(0,o.default)(i.default.mark((function e(){var t,r,o,a,l=arguments;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(n._isVideoLoadedMetaData=!0,t=l.length,r=new Array(t),o=0;o<t;o++)r[o]=l[o];if(n.trigger("loadedmetadata",...r),!n._domAudioOnlyVideoElement){e.next=10;break}if(a=n._domAudioOnlyVideoElement.srcObject,n._removeAudioOnlyVideoElement(),!a){e.next=10;break}return e.next=9,(0,g.default)();case 9:n.play();case 10:case"end":return e.stop()}}),e)}))));this._domElementEvents.on("error",e=>{this.trigger("error",W(e.target.error))},!1),this._domElementEvents.on("pause",()=>{b||(this.logging.warn("Video element paused, auto-resuming. If you intended to do this, use publishVideo(false) or subscribeToVideo(false) instead."),b=!0),this.play()}),this.on("destroyed",()=>{this._domElementEvents.removeAll(),this._domAudioOnlyVideoElementEvents&&this._domAudioOnlyVideoElementEvents.removeAll()}),r(this,()=>this._domElement),h.default.isSafari&&"subscriber"===this._widgetType&&(this._domAudioOnlyVideoElement=Q(),this._bindAudioOnlyVideoElementEvents()),null!=h.default&&h.default.isDev&&(0,R.addMediaElementListeners)(this._domAudioOnlyVideoElement||this._domElement,e=>{this.trigger("mediaElementEvent",e)})}var l=t.prototype;return l._onDomElementLoadStart=function(){var e=(0,o.default)(i.default.mark((function e(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("subscriber"!==this._widgetType||!I()){e.next=3;break}return e.next=3,this._setActiveAudioOutputDevice();case 3:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._setActiveAudioOutputDevice=function(){var e=(0,o.default)(i.default.mark((function e(){var t;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(""!==(t=y())&&"default"!==t){e.next=3;break}return e.abrupt("return");case 3:return e.next=5,this.setSinkId(t);case 5:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._rebindSrcObject=function(){this._domElement&&(this._domElement.srcObject=this._domElement.srcObject)},l._pauseAndPlay=function(){this._domElement&&(this._domElement.pause(),this._domElement.play())},l._startAudioOnlyVideoElementWatcher=function(){var e=(0,o.default)(i.default.mark((function e(){var t;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return 1e3,t=h.default.isiOS,this._audioOnlyVideoElementWatcher&&clearInterval(this._audioOnlyVideoElementWatcher),this._audioOnlyVideoElementWatcher=setInterval(()=>{this._domAudioOnlyVideoElement&&this._domAudioOnlyVideoElement.paused&&(this._domAudioOnlyVideoElement.srcObject=this._domAudioOnlyVideoElement.srcObject,t&&this._domAudioOnlyVideoElement.play())},100),e.next=6,(0,A.default)(1e3);case 6:clearInterval(this._audioOnlyVideoElementWatcher),this._audioOnlyVideoElementWatcher=null;case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._removeAudioOnlyVideoElement=function(){var e=(0,o.default)(i.default.mark((function e(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this._domAudioOnlyVideoElement.srcObject=null,this._domAudioOnlyVideoElement.parentNode.removeChild(this._domAudioOnlyVideoElement),this._domAudioOnlyVideoElementEvents&&this._domAudioOnlyVideoElementEvents.removeAll(),this._domAudioOnlyVideoElement=null;case 4:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l.requestVideoFrameCallback=function(e){this._domElement.requestVideoFrameCallback(e)},l.bindAudioTrackOnly=function(){var e=(0,o.default)(i.default.mark((function e(){var t,n,r,o,a,l,c;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this._stream.getVideoTracks(),n=this._stream.getAudioTracks(),r=t[0],o=void 0===r?{}:r,a=n[0],l=void 0===a?{}:a,e.next=6,(0,g.default)();case 6:c=!o.enabled&&l.enabled,!this._isVideoLoadedMetaData&&c&&this._domAudioOnlyVideoElement&&(this._domAudioOnlyVideoElement.srcObject=new S.MediaStream(n),this._startAudioOnlyVideoElementWatcher());case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._bindAudioOnlyVideoElementEvents=function(){var e=this;this._domAudioOnlyVideoElementEvents=(0,c.default)(this._domAudioOnlyVideoElement),this._domAudioOnlyVideoElementEvents.on("pause",()=>this.play()),this._domAudioOnlyVideoElementEvents.on("timeupdate",(function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.trigger("timeupdate",...n)})),this._domAudioOnlyVideoElementEvents.on("loadedmetadata",(function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.trigger("loadedmetadata",...n)}))},l.whenTimeIncrements=function(e,t){this.once("timeupdate",()=>{e.call(t,this)})},l.domElement=function(){return this._domElement},l.videoWidth=function(){return this._domElement?Number(this._domElement["video"+(this.isRotated()?"Height":"Width")]):0},l.videoHeight=function(){return this._domElement?Number(this._domElement["video"+(this.isRotated()?"Width":"Height")]):0},l.aspectRatio=function(){return this.videoWidth()/this.videoHeight()},l.prepareForStreamTransition=function(){const e=this._getStreamImage();this._domElement.poster=e},l._getStreamImage=function(){const e=f.createElement("canvas",{width:this.videoWidth(),height:this.videoHeight(),style:{display:"none"}});d.body.appendChild(e);let t=null;try{e.getContext("2d").drawImage(this._domElement,0,0,e.width,e.height),t=e.toDataURL("image/png")}catch(e){}return f.removeElement(e),null===t||"data:,"===t?(this.logging.warn("Cannot get image data yet"),null):t},l.imgData=function(){return this._getStreamImage().replace("data:image/png;base64,","").trim()},l.appendTo=function(e){return e.appendChild(this._domElement),this._domAudioOnlyVideoElement&&e.appendChild(this._domAudioOnlyVideoElement),this},l.isAudioBlocked=function(){return void 0!==this._blockedVolume},l.unblockAudio=function(){var e=(0,o.default)(i.default.mark((function e(){var t;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isAudioBlocked()){e.next=3;break}return this.logging.warn("Unexpected call to unblockAudio() without blocked audio"),e.abrupt("return");case 3:return t=this._blockedVolume,this._blockedVolume=void 0,this.setAudioVolume(t),e.prev=6,e.next=9,this.play();case 9:e.next=16;break;case 11:throw e.prev=11,e.t0=e.catch(6),this._blockedVolume=t,this._domElement.muted=!0,e.t0;case 16:this.trigger("audioUnblocked");case 17:case"end":return e.stop()}}),e,this,[[6,11]])})));return function(){return e.apply(this,arguments)}}(),l.rebind=function(){var e=(0,o.default)(i.default.mark((function e(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._domElement){e.next=2;break}throw new Error("Can't rebind because _domElement no longer exists");case 2:this._playInterrupts++,this._domElement.srcObject=this._domElement.srcObject,this._hasAudioOnlyVideoElement()&&(this._domAudioOnlyVideoElement.srcObject=this._domAudioOnlyVideoElement.srcObject);case 5:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._createAudioLevelSampler=function(){if(this._removeAudioLevelSampler(),this._stream.getAudioTracks().length>0){try{this._audioContext=n()}catch(e){this.logging.warn("Failed to get AudioContext(), audio level visualisation will not work",e)}this._audioContext&&(this._audioLevelSampler=new E(this._audioContext),this._audioLevelSampler.webRTCStream(this._stream))}},l._removeAudioLevelSampler=function(){this._audioContext&&(delete this._audioContext,delete this._audioLevelSampler)},l._toggleVideoTracks=function(){var e=(0,o.default)(i.default.mark((function e(){var t,n;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=this._domElement.srcObject.getTracks().filter(e=>e.enabled),!(t.length>1)){e.next=8;break}return(n=t.filter(e=>"video"===e.kind)).forEach(e=>{e.enabled=!1}),e.next=7,(0,g.default)();case 7:n.forEach(e=>{e.enabled=!0});case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),l._hasAudioOnlyVideoElement=function(){return this._domAudioOnlyVideoElement&&this._domAudioOnlyVideoElement.srcObject},l.play=function(){var e=(0,o.default)(i.default.mark((function e(){var t,n,r,o,a,l,c,s,d,A,Q;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=this._playInterrupts,n=this._hasAudioOnlyVideoElement()?this._domAudioOnlyVideoElement:this._domElement,!h.default.isSafari){e.next=5;break}return e.next=5,(0,g.default)();case 5:if(!h.default.isiOS||!h.default.isSafari){e.next=15;break}if("publisher"!==this._widgetType){e.next=14;break}if(r=h.default.iOSVersion>=14&&h.default.iOSVersion<=14.2,o=this._stream.getVideoTracks(),a=o[0],l=void 0===a?{}:a,c=this._stream.getAudioTracks(),s=c[0],d=void 0===s?{}:s,!r||(0,u.default)(n)||!l.enabled){e.next=12;break}return e.abrupt("return");case 12:if(!d.muted){e.next=14;break}return e.abrupt("return");case 14:this._toggleVideoTracks();case 15:return e.prev=15,this._emitVideoPlayAttempt(),e.next=19,n.play();case 19:return this._emitVideoPlaySuccess(),e.abrupt("return");case 23:if(e.prev=23,e.t0=e.catch(15),this._emitVideoPlayFailure(),A=e.t0||{},Q=A.name,"AbortError"===Q&&this._playInterrupts++,!(this._playInterrupts>t)){e.next=33;break}return e.next=32,this.play();case 32:return e.abrupt("return");case 33:throw e.t0;case 34:case"end":return e.stop()}}),e,this,[[15,23]])})));return function(){return e.apply(this,arguments)}}(),l._bindToStream=function(e){this._stream=e,this._domElement.srcObject=e,this._domAudioOnlyVideoElement&&this.bindAudioTrackOnly()},l.bindToStream=function(){var e=(0,o.default)(i.default.mark((function e(t){var n,r,a,l=this;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._domElement){e.next=2;break}throw new Error("Can't bind because _domElement no longer exists");case 2:return this._bindToStream(t),(0,o.default)(i.default.mark((function e(){var n;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,l.play();case 3:e.next=26;break;case 5:if(e.prev=5,e.t0=e.catch(0),n=!!t.getAudioTracks().length,!l._hasAudioOnlyVideoElement()||"NotAllowedError"!==e.t0.name){e.next=15;break}return l._domAudioOnlyVideoElement.muted=!0,e.next=12,l.play();case 12:l._domAudioOnlyVideoElement.muted=!1,e.next=26;break;case 15:if(!n){e.next=23;break}return l._blockedVolume=l.getAudioVolume(),l._domElement.muted=!0,e.next=20,l.play();case 20:l.trigger("audioBlocked"),e.next=26;break;case 23:return l._domElement.muted=!0,e.next=26,l.play();case 26:case"end":return e.stop()}}),e,null,[[0,5]])})))().catch(e=>{this.logging.debug(".play() failed: ",e)}),n={width:this._domElement.videoWidth,height:this._domElement.videoHeight},this.trigger("videoDimensionsChanged",Object.assign({},n),Object.assign({},n)),this._domElementEvents.on("resize",()=>{const e=this._domElement,t=e.videoWidth,r=e.videoHeight,i=t!==n.width,o=r!==n.height;(i||o)&&(this.trigger("videoDimensionsChanged",Object.assign({},n),{width:t,height:r}),n.width=t,n.height=r)}),r=()=>{try{this._mediaStoppedListener.stop()}catch(e){return}this._domElement&&(this._domElement.onended=null),this.trigger("mediaStopped")},a=e=>{this.trigger("mediaStopped",e)},this._domElement.onended=()=>r(),this._mediaStoppedListener=Q(t,r,a),this._createAudioLevelSampler(),e.abrupt("return",void 0);case 13:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),l.unbindStream=function(){return this._domElement&&(this._domElement.srcObject=null),this._domAudioOnlyVideoElement&&(this._domAudioOnlyVideoElement.srcObject=null),this._removeAudioLevelSampler(),this},l.setAudioVolume=function(e){if(this.isAudioBlocked())return void(this._blockedVolume=e);const t=parseFloat(e)/100,n=[this.domElement()];this._domAudioOnlyVideoElement&&n.push(this._domAudioOnlyVideoElement),n.forEach(e=>{e&&(e.volume=t,e.muted=0===t)})},l.getAudioVolume=function(){if(this.isAudioBlocked())return this._blockedVolume;const e=this.domElement();return e?e.muted?0:100*e.volume:this._defaultAudioVolume},l.audioChannelType=function(e){const t=this.domElement();return void 0!==e&&(t.mozAudioChannelType=e),"mozAudioChannelType"in this._domElement?t.mozAudioChannelType:"unknown"},l.getAudioInputLevel=function(){return this._audioLevelSampler.sample()},l.refreshTracks=function(){this._mediaStoppedListener&&this._mediaStoppedListener.refresh(),this._createAudioLevelSampler()},l.destroy=function(){this._mediaStoppedListener&&this._mediaStoppedListener.stop(),this.logging.debug("removing domElementEvents"),this._domElementEvents.removeAll(),this._domAudioOnlyVideoElementEvents&&this._domAudioOnlyVideoElementEvents.removeAll(),null!=h.default&&h.default.isDev&&(0,R.removeMediaElementListeners)(this._domAudioOnlyVideoElement||this._domElement),this._audioOnlyVideoElementWatcher&&clearInterval(this._audioOnlyVideoElementWatcher),this.unbindStream(),this._domElement&&(f.removeElement(this._domElement),this._domElement=null),this._domAudioOnlyVideoElement&&(f.removeElement(this._domAudioOnlyVideoElement),this._domAudioOnlyVideoElement=null),this.trigger("destroyed"),(0,s.default)("NativeVideoElementWrapper",this)},l.setSinkId=function(t){const n=[this._domElement,this._domAudioOnlyVideoElement].map(e=>{if(e)return e.setSinkId(t)});return e.all(n)},t}()};t.default=W}).call(this,n(2))},function(e,t,n){var r=n(90),i=n(128);e.exports=function(e){return r((function(t,n){var r=-1,o=n.length,a=o>1?n[o-1]:void 0,l=o>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,l&&i(n[0],n[1],l)&&(a=o<3?void 0:a,o=1),t=Object(t);++r<o;){var c=n[r];c&&e(t,c,r,a)}return t}))}},function(e,t,n){var r=n(126),i=Math.max;e.exports=function(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){for(var o=arguments,a=-1,l=i(o.length-t,0),c=Array(l);++a<l;)c[a]=o[t+a];a=-1;for(var s=Array(t+1);++a<t;)s[a]=o[a];return s[t]=n(c),r(e,this,s)}}},function(e,t){var n=Date.now;e.exports=function(e){var t=0,r=0;return function(){var i=n(),o=16-(i-r);if(r=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){"use strict";e.exports=n(425)()?WeakMap:n(426)},function(e,t,n){"use strict";var r=Object.create,i=Object.getPrototypeOf,o={};e.exports=function(){var e=Object.setPrototypeOf,t=arguments[0]||r;return"function"==typeof e&&i(e(t(null),o))===o}},function(e,t,n){"use strict";var r,i=n(213),o=n(35),a=Object.prototype.isPrototypeOf,l=Object.defineProperty,c={configurable:!0,enumerable:!1,writable:!0,value:void 0};r=function(e,t){if(o(e),null===t||i(t))return e;throw new TypeError("Prototype must be null or an object")},e.exports=function(e){var t,n;return e?(2===e.level?e.set?(n=e.set,t=function(e,t){return n.call(r(e,t),t),e}):t=function(e,t){return r(e,t).__proto__=t,e}:t=function e(t,n){var i;return r(t,n),(i=a.call(e.nullPolyfill,t))&&delete e.nullPolyfill.__proto__,null===n&&(n=e.nullPolyfill),t.__proto__=n,i&&l(e.nullPolyfill,"__proto__",c),t},Object.defineProperty(t,"level",{configurable:!1,enumerable:!1,writable:!1,value:e.level})):null}(function(){var e,t=Object.create(null),n={},r=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__");if(r){try{(e=r.set).call(t,n)}catch(e){}if(Object.getPrototypeOf(t)===n)return{set:e,level:2}}return t.__proto__=n,Object.getPrototypeOf(t)===n?{level:2}:((t={}).__proto__=n,Object.getPrototypeOf(t)===n&&{level:1})}()),n(428)},function(e,t,n){"use strict";var r=n(46),i={function:!0,object:!0};e.exports=function(e){return r(e)&&i[typeof e]||!1}},function(e,t,n){"use strict";var r=n(431),i=/^\s*class[\s{/}]/,o=Function.prototype.toString;e.exports=function(e){return!!r(e)&&!i.test(o.call(e))}},function(e,t,n){"use strict";var r=n(46),i=Array.prototype.forEach,o=Object.create,a=function(e,t){var n;for(n in e)t[n]=e[n]};e.exports=function(e){var t=o(null);return i.call(arguments,(function(e){r(e)&&a(Object(e),t)})),t}},function(e,t,n){"use strict";e.exports=n(438)()?String.prototype.contains:n(439)},function(e,t,n){"use strict";var r=n(92),i=n(93),o=n(440),a=n(469),l=n(470),c=n(47).iterator;e.exports=function(e){return"function"==typeof l(e)[c]?e[c]():r(e)?new o(e):i(e)?new a(e):new o(e)}},function(e,t,n){"use strict";var r=n(445);e.exports=function(e){if(!r(e))throw new TypeError(e+" is not a symbol");return e}},function(e,t,n){"use strict";var r,i=n(449),o=n(133),a=n(70),l=n(35),c=n(36),s=n(450),d=n(47),u=Object.defineProperty,A=Object.defineProperties;e.exports=r=function(e,t){if(!(this instanceof r))throw new TypeError("Constructor requires 'new'");A(this,{__list__:c("w",l(e)),__context__:c("w",t),__nextIndex__:c("w",0)}),t&&(a(t.on),t.on("_add",this._onAdd),t.on("_delete",this._onDelete),t.on("_clear",this._onClear))},delete r.prototype.constructor,A(r.prototype,o({_next:c((function(){var e;if(this.__list__)return this.__redo__&&void 0!==(e=this.__redo__.shift())?e:this.__nextIndex__<this.__list__.length?this.__nextIndex__++:void this._unBind()})),next:c((function(){return this._createResult(this._next())})),_createResult:c((function(e){return void 0===e?{done:!0,value:void 0}:{done:!1,value:this._resolve(e)}})),_resolve:c((function(e){return this.__list__[e]})),_unBind:c((function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off("_add",this._onAdd),this.__context__.off("_delete",this._onDelete),this.__context__.off("_clear",this._onClear),this.__context__=null)})),toString:c((function(){return"[object "+(this[d.toStringTag]||"Object")+"]"}))},s({_onAdd:c((function(e){e>=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach((function(t,n){t>=e&&(this.__redo__[n]=++t)}),this),this.__redo__.push(e)):u(this,"__redo__",c("c",[e])))})),_onDelete:c((function(e){var t;e>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(t=this.__redo__.indexOf(e))&&this.__redo__.splice(t,1),this.__redo__.forEach((function(t,n){t>e&&(this.__redo__[n]=--t)}),this)))})),_onClear:c((function(){this.__redo__&&i.call(this.__redo__),this.__nextIndex__=0}))}))),u(r.prototype,d.iterator,c((function(){return this})))},function(e,t,n){"use strict";var r=n(57),i=n(132),o=n(452),a=n(453),l=function(e,t){return e.replace("%v",a(t))};e.exports=function(e,t,n){if(!i(n))throw new TypeError(l(t,e));if(!r(e)){if("default"in n)return n.default;if(n.isOptional)return null}var a=o(n.errorMessage);throw r(a)||(a=t),new TypeError(l(a,e))}},function(e,t,n){e.exports=n(480)},function(e,t,n){"use strict";e.exports=function(e,t){return function(){return e.apply(t,arguments)}}},function(e,t,n){"use strict";var r=n(13),i=n(224);function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a));var l,c=n&&n.encode||o,s=n&&n.serialize;return(l=s?s(t,n):r.isURLSearchParams(t)?t.toString():new i(t,n).toString(c))&&(e+=(-1===e.indexOf("?")?"?":"&")+l),e}},function(e,t,n){"use strict";var r=n(96);function i(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,(function(e){return t[e]}))}function o(e,t){this._pairs=[],e&&r(e,this,t)}var a=o.prototype;a.append=function(e,t){this._pairs.push([e,t])},a.toString=function(e){var t=e?function(t){return e.call(this,t,i)}:i;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")},e.exports=o},function(e,t,n){"use strict";
|
|
28
28
|
/*!
|
|
29
29
|
* The buffer module from node.js, for the browser.
|
|
30
30
|
*
|