@chatie/angular
Advanced tools
Comparing version 0.7.3 to 0.7.4
@@ -311,3 +311,3 @@ (function (global, factory) { | ||
*/ | ||
var VERSION = '0.7.3'; | ||
var VERSION = '0.7.4'; | ||
@@ -342,4 +342,4 @@ var ReadyState; | ||
var _this = this; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
@@ -357,14 +357,14 @@ this.log.verbose('IoService', 'init()'); | ||
this.state.setLog(this.log); | ||
_a.label = 1; | ||
_b.label = 1; | ||
case 1: | ||
_a.trys.push([1, 4, , 5]); | ||
_b.trys.push([1, 4, , 5]); | ||
return [4 /*yield*/, this.initStateDealer()]; | ||
case 2: | ||
_a.sent(); | ||
_b.sent(); | ||
return [4 /*yield*/, this.initRxSocket()]; | ||
case 3: | ||
_a.sent(); | ||
_b.sent(); | ||
return [3 /*break*/, 5]; | ||
case 4: | ||
e_1 = _a.sent(); | ||
e_1 = _b.sent(); | ||
this.log.silly('IoService', 'init() exception: %s', e_1.message); | ||
@@ -398,4 +398,4 @@ throw e_1; | ||
var e_2; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
@@ -414,12 +414,12 @@ this.log.verbose('IoService', 'start() with token:%s', this._token); | ||
this.autoReconnect = true; | ||
_a.label = 1; | ||
_b.label = 1; | ||
case 1: | ||
_a.trys.push([1, 3, , 4]); | ||
_b.trys.push([1, 3, , 4]); | ||
return [4 /*yield*/, this.connectRxSocket()]; | ||
case 2: | ||
_a.sent(); | ||
_b.sent(); | ||
this.state.on(true); | ||
return [3 /*break*/, 4]; | ||
case 3: | ||
e_2 = _a.sent(); | ||
e_2 = _b.sent(); | ||
this.log.warn('IoService', 'start() failed:%s', e_2.message); | ||
@@ -435,4 +435,4 @@ this.state.off(true); | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
@@ -454,3 +454,3 @@ this.log.verbose('IoService', 'stop()'); | ||
case 1: | ||
_a.sent(); | ||
_b.sent(); | ||
this.state.off(true); | ||
@@ -465,18 +465,18 @@ return [2 /*return*/]; | ||
var e_3; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
this.log.verbose('IoService', 'restart()'); | ||
_a.label = 1; | ||
_b.label = 1; | ||
case 1: | ||
_a.trys.push([1, 4, , 5]); | ||
_b.trys.push([1, 4, , 5]); | ||
return [4 /*yield*/, this.stop()]; | ||
case 2: | ||
_a.sent(); | ||
_b.sent(); | ||
return [4 /*yield*/, this.start()]; | ||
case 3: | ||
_a.sent(); | ||
_b.sent(); | ||
return [3 /*break*/, 5]; | ||
case 4: | ||
e_3 = _a.sent(); | ||
e_3 = _b.sent(); | ||
this.log.error('IoService', 'restart() error:%s', e_3.message); | ||
@@ -507,3 +507,3 @@ throw e_3; | ||
var _this = this; | ||
return __generator(this, function (_a) { | ||
return __generator(this, function (_b) { | ||
this.log.verbose('IoService', 'initRxSocket()'); | ||
@@ -534,3 +534,3 @@ if (this.event) { | ||
var _this = this; | ||
return __generator(this, function (_a) { | ||
return __generator(this, function (_b) { | ||
this.log.verbose('IoService', 'connectRxSocket()'); | ||
@@ -599,3 +599,3 @@ // FIXME: check & close the old one | ||
var e; | ||
return __generator(this, function (_a) { | ||
return __generator(this, function (_b) { | ||
this.log.verbose('IoService', 'ding(%s)', payload); | ||
@@ -613,3 +613,3 @@ e = { | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
return __generator(this, function (_b) { | ||
this.event.next({ | ||
@@ -632,4 +632,4 @@ name: 'update', | ||
var _this = this; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
@@ -648,3 +648,3 @@ this.log.verbose('IoService', 'socketClose()'); | ||
case 1: | ||
_a.sent(); | ||
_b.sent(); | ||
return [2 /*return*/]; | ||
@@ -681,3 +681,4 @@ } | ||
IoService.prototype.socketUpdateState = function () { | ||
this.log.verbose('IoService', 'socketUpdateState() is %s', ReadyState[this._websocket.readyState]); | ||
var _a; | ||
this.log.verbose('IoService', 'socketUpdateState() is %s', ReadyState[(_a = this._websocket) === null || _a === void 0 ? void 0 : _a.readyState]); | ||
if (!this._websocket) { | ||
@@ -732,13 +733,13 @@ this.log.error('IoService', 'socketUpdateState() no _websocket'); | ||
var e_4; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
_a.trys.push([0, 2, , 3]); | ||
_b.trys.push([0, 2, , 3]); | ||
return [4 /*yield*/, this.connectRxSocket()]; | ||
case 1: | ||
_a.sent(); | ||
_b.sent(); | ||
this.state.on(true); | ||
return [3 /*break*/, 3]; | ||
case 2: | ||
e_4 = _a.sent(); | ||
e_4 = _b.sent(); | ||
this.log.warn('IoService', 'socketOnClose() autoReconnect() exception: %s', e_4); | ||
@@ -745,0 +746,0 @@ this.state.off(true); |
@@ -15,3 +15,3 @@ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("rxjs/operators"),require("brolog"),require("state-switch")):"function"==typeof define&&define.amd?define("@chatie/angular",["exports","@angular/core","rxjs","rxjs/operators","brolog","state-switch"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).chatie=e.chatie||{},e.chatie.angular={}),e.ng.core,e.rxjs,e.rxjs.operators,e.brolog,e.stateSwitch)}(this,(function(e,t,o,n,s,i){"use strict"; | ||
PERFORMANCE OF THIS SOFTWARE. | ||
***************************************************************************** */function r(e,t,o,n){return new(o||(o=Promise))((function(s,i){function r(e){try{c(n.next(e))}catch(e){i(e)}}function a(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(r,a)}c((n=n.apply(e,t||[])).next())}))}function a(e,t){var o,n,s,i,r={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(o)throw new TypeError("Generator is already executing.");for(;r;)try{if(o=1,n&&(s=2&i[0]?n.return:i[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,i[1])).done)return s;switch(n=0,s&&(i=[2&i[0],s.value]),i[0]){case 0:case 1:s=i;break;case 4:return r.label++,{value:i[1],done:!1};case 5:r.label++,n=i[1],i=[0];continue;case 7:i=r.ops.pop(),r.trys.pop();continue;default:if(!(s=r.trys,(s=s.length>0&&s[s.length-1])||6!==i[0]&&2!==i[0])){r=0;continue}if(3===i[0]&&(!s||i[1]>s[0]&&i[1]<s[3])){r.label=i[1];break}if(6===i[0]&&r.label<s[1]){r.label=s[1],s=i;break}if(s&&r.label<s[2]){r.label=s[2],r.ops.push(i);break}s[2]&&r.ops.pop(),r.trys.pop();continue}i=t.call(e,r)}catch(e){i=[6,e],n=0}finally{o=s=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}Object.create;Object.create;var c,h="0.7.3";!function(e){e[e.CLOSED=WebSocket.CLOSED]="CLOSED",e[e.CLOSING=WebSocket.CLOSING]="CLOSING",e[e.CONNECTING=WebSocket.CONNECTING]="CONNECTING",e[e.OPEN=WebSocket.OPEN]="OPEN"}(c||(c={}));var u=function(){function e(){this.autoReconnect=!0,this.log=s.Brolog.instance(),this.CONNECT_TIMEOUT=1e4,this.ENDPOINT="wss://api.chatie.io/v0/websocket/token/",this.PROTOCOL="web|0.0.1",this.sendBuffer=[],this.log.verbose("IoService","constructor()")}return Object.defineProperty(e.prototype,"readyState",{get:function(){return this._readyState.asObservable()},enumerable:!1,configurable:!0}),e.prototype.init=function(){return r(this,void 0,void 0,(function(){var e,t=this;return a(this,(function(n){switch(n.label){case 0:if(this.log.verbose("IoService","init()"),this.state)throw new Error("re-init");this.snapshot={readyState:c.CLOSED,event:null},this._readyState=new o.BehaviorSubject(c.CLOSED),this.state=new i.StateSwitch("IoService",this.log),this.state.setLog(this.log),n.label=1;case 1:return n.trys.push([1,4,,5]),[4,this.initStateDealer()];case 2:return n.sent(),[4,this.initRxSocket()];case 3:return n.sent(),[3,5];case 4:throw e=n.sent(),this.log.silly("IoService","init() exception: %s",e.message),e;case 5:return this.readyState.subscribe((function(e){t.log.silly("IoService","init() readyState.subscribe(%s)",c[e]),t.snapshot.readyState=e})),this.event.subscribe((function(e){t.log.silly("IoService","init() event.subscribe({name:%s})",e.name),t.snapshot.event=e})),[2]}}))}))},e.prototype.token=function(e){if(this.log.silly("IoService","token(%s)",e),!e)return this._token;this._token=e},e.prototype.start=function(){return r(this,void 0,void 0,(function(){var e;return a(this,(function(t){switch(t.label){case 0:if(this.log.verbose("IoService","start() with token:%s",this._token),!this._token)throw new Error("start() without token");if(this.state.on())throw new Error("state is already ON");if(this.state.pending())throw new Error("state is pending");this.state.on("pending"),this.autoReconnect=!0,t.label=1;case 1:return t.trys.push([1,3,,4]),[4,this.connectRxSocket()];case 2:return t.sent(),this.state.on(!0),[3,4];case 3:return e=t.sent(),this.log.warn("IoService","start() failed:%s",e.message),this.state.off(!0),[3,4];case 4:return[2]}}))}))},e.prototype.stop=function(){return r(this,void 0,void 0,(function(){return a(this,(function(e){switch(e.label){case 0:if(this.log.verbose("IoService","stop()"),this.state.off()){if(this.log.warn("IoService","stop() state is already off"),this.state.pending())throw new Error("state pending() is true");return[2]}if(this.state.off("pending"),this.autoReconnect=!1,!this._websocket)throw new Error("no websocket");return[4,this.socketClose(1e3,"IoService.stop()")];case 1:return e.sent(),this.state.off(!0),[2]}}))}))},e.prototype.restart=function(){return r(this,void 0,void 0,(function(){var e;return a(this,(function(t){switch(t.label){case 0:this.log.verbose("IoService","restart()"),t.label=1;case 1:return t.trys.push([1,4,,5]),[4,this.stop()];case 2:return t.sent(),[4,this.start()];case 3:return t.sent(),[3,5];case 4:throw e=t.sent(),this.log.error("IoService","restart() error:%s",e.message),e;case 5:return[2]}}))}))},e.prototype.initStateDealer=function(){var e=this;this.log.verbose("IoService","initStateDealer()");this.readyState.pipe(n.filter((function(e){return e===c.OPEN}))).subscribe((function(t){return e.stateOnOpen()}))},e.prototype.initRxSocket=function(){return r(this,void 0,void 0,(function(){var e,t=this;return a(this,(function(s){if(this.log.verbose("IoService","initRxSocket()"),this.event)throw new Error("re-init is not permitted");return this.moObserver={next:this.socketSend.bind(this),error:this.socketClose.bind(this),complete:this.socketClose.bind(this)},e=new o.Observable((function(e){return t.log.verbose("IoService","initRxSocket() Observable.create()"),t.mtObserver=e,t.socketClose.bind(t)})),this.event=o.Subject.create(this.moObserver,e.pipe(n.share())),[2]}))}))},e.prototype.connectRxSocket=function(){return r(this,void 0,void 0,(function(){var e,t=this;return a(this,(function(o){if(this.log.verbose("IoService","connectRxSocket()"),this._websocket)throw new Error("already has a websocket");if(this.state.off())throw new Error("switch state is off");if(!this.state.pending())throw new Error("switch state is already ON");return this._websocket=new WebSocket(this.endPoint(),this.PROTOCOL),this.socketUpdateState(),e=new Promise((function(e,o){t.log.verbose("IoService","connectRxSocket() Promise()");var n=setTimeout((function(){t._websocket=null;var e=new Error("rxSocket connect timeout after "+Math.round(t.CONNECT_TIMEOUT/1e3));o(e)}),t.CONNECT_TIMEOUT);t._websocket.onopen=function(o){t.log.verbose("IoService","connectRxSocket() Promise() WebSocket.onOpen() resolve()"),t.socketUpdateState(),clearTimeout(n),e()}})),this._websocket.onmessage=this.socketOnMessage.bind(this),this._websocket.onerror=this.socketOnError.bind(this),this._websocket.onclose=this.socketOnClose.bind(this),[2,e]}))}))},e.prototype.endPoint=function(){var e=this.ENDPOINT+this._token;return this.log.verbose("IoService","endPoint() => %s",e),e},e.prototype.stateOnOpen=function(){this.log.verbose("IoService","stateOnOpen()"),this.socketSendBuffer(),this.rpcUpdate("from stateOnOpen()")},e.prototype.rpcDing=function(e){return r(this,void 0,void 0,(function(){var t;return a(this,(function(o){return this.log.verbose("IoService","ding(%s)",e),t={name:"ding",payload:e},this.event.next(t),[2]}))}))},e.prototype.rpcUpdate=function(e){return r(this,void 0,void 0,(function(){return a(this,(function(t){return this.event.next({name:"update",payload:e}),[2]}))}))},e.prototype.socketClose=function(e,t){return r(this,void 0,void 0,(function(){var o=this;return a(this,(function(s){switch(s.label){case 0:if(this.log.verbose("IoService","socketClose()"),!this._websocket)throw new Error("no websocket");return this._websocket.close(e,t),this.socketUpdateState(),[4,new Promise((function(e){o.readyState.pipe(n.filter((function(e){return e===c.CLOSED}))).subscribe(e)}))];case 1:return s.sent(),[2]}}))}))},e.prototype.socketSend=function(e){this.log.silly("IoService","socketSend({name:%s, payload:%s})",e.name,e.payload),this._websocket||this.log.silly("IoService","socketSend() no _websocket");var t=JSON.stringify(e);this.sendBuffer.push(t),this.socketSendBuffer()},e.prototype.socketSendBuffer=function(){if(this.log.silly("IoService","socketSendBuffer() length:%s",this.sendBuffer.length),!this._websocket)throw new Error("socketSendBuffer(): no _websocket");if(this._websocket.readyState===WebSocket.OPEN)for(;this.sendBuffer.length;){var e=this.sendBuffer.shift();this.log.silly("IoService","socketSendBuffer() sending(%s)",e),this._websocket.send(e)}else this.log.warn("IoService","socketSendBuffer() readyState is not OPEN, send job delayed.")},e.prototype.socketUpdateState=function(){this.log.verbose("IoService","socketUpdateState() is %s",c[this._websocket.readyState]),this._websocket?this._readyState.next(this._websocket.readyState):this.log.error("IoService","socketUpdateState() no _websocket")},e.prototype.socketOnMessage=function(e){this.log.verbose("IoService","onMessage({data: %s})",e.data);var t=e.data,o={name:"raw",payload:t};try{var n=JSON.parse(t);o.name=n.name,o.payload=n.payload}catch(e){this.log.warn("IoService","onMessage parse message fail. save as RAW")}this.mtObserver.next(o)},e.prototype.socketOnError=function(e){this.log.silly("IoService","socketOnError(%s)",e)},e.prototype.socketOnClose=function(e){var t=this;this.log.verbose("IoService","socketOnClose({code:%s, reason:%s, returnValue:%s})",e.code,e.reason,e.returnValue),this.socketUpdateState(),this.autoReconnect?(this.state.on("pending"),setTimeout((function(){return r(t,void 0,void 0,(function(){var e;return a(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this.connectRxSocket()];case 1:return t.sent(),this.state.on(!0),[3,3];case 2:return e=t.sent(),this.log.warn("IoService","socketOnClose() autoReconnect() exception: %s",e),this.state.off(!0),[3,3];case 3:return[2]}}))}))}),1e3)):this.state.off(!0),this._websocket=null,e.wasClean||this.log.warn("IoService","socketOnClose() event.wasClean FALSE")},e}(),l=function(){function e(e,o){this.log=e,this.ngZone=o,this.message=new t.EventEmitter,this.scan=new t.EventEmitter,this.login=new t.EventEmitter,this.logout=new t.EventEmitter,this.error=new t.EventEmitter,this.heartbeat=new t.EventEmitter,this.timerSub=null,this.counter=0,this.timestamp=new Date,this.log.verbose("WechatyComponent","constructor() v%s",h)}return Object.defineProperty(e.prototype,"token",{get:function(){return this._token},set:function(e){this.log.verbose("WechatyComponent","set token(%s)",e);var t=(e||"").trim();if(this._token!==t){if(this._token=t,!this.ioService)return this.log.silly("WechatyComponent","set token() skip token init value"),void this.log.silly("WechatyComponent","set token() because ioService will do it inside ngOnInit()");this.log.silly("WechatyComponent","set token(%s) reloading ioService now...",t),this.ioService.token(this.token),this.ioService.restart()}else this.log.silly("WechatyComponent","set token(%s) not new",t)},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){return r(this,void 0,void 0,(function(){return a(this,(function(e){switch(e.label){case 0:return this.log.verbose("WechatyComponent","ngOnInit() with token: "+this.token),this.ioService=new u,[4,this.ioService.init()];case 1:return e.sent(),this.ioService.event.subscribe(this.onIo.bind(this)),this.log.silly("WechatyComponent","ngOnInit() ioService.event.subscribe()-ed"),this.token?(this.ioService.token(this.token),[4,this.ioService.start()]):[3,3];case 2:e.sent(),e.label=3;case 3:return[2]}}))}))},e.prototype.ngOnDestroy=function(){this.log.verbose("WechatyComponent","ngOnDestroy()"),this.endTimer(),this.ioService&&this.ioService.stop()},e.prototype.onIo=function(e){switch(this.log.silly("WechatyComponent","onIo#%d(%s)",this.counter++,e.name),this.timestamp=new Date,e.name){case"scan":this.scan.emit(e.payload);break;case"login":this.login.emit(e.payload);break;case"logout":this.logout.emit(e.payload);break;case"message":this.message.emit(e.payload);break;case"error":this.error.emit(e.payload);break;case"ding":case"dong":case"raw":this.heartbeat.emit(e.name+"["+e.payload+"]");break;case"heartbeat":this.heartbeat.emit(e.payload);break;case"sys":this.log.silly("WechatyComponent","onIo(%s): %s",e.name,e.payload);break;default:this.log.warn("WechatyComponent","onIo() unknown event name: %s[%s]",e.name,e.payload)}},e.prototype.reset=function(e){this.log.verbose("WechatyComponent","reset(%s)",e);var t={name:"reset",payload:e};if(!this.ioService)throw new Error("no ioService");this.ioService.event.next(t)},e.prototype.shutdown=function(e){this.log.verbose("WechatyComponent","shutdown(%s)",e);var t={name:"shutdown",payload:e};if(!this.ioService)throw new Error("no ioService");this.ioService.event.next(t)},e.prototype.startSyncMessage=function(){this.log.verbose("WechatyComponent","startSyncMessage()");if(!this.ioService)throw new Error("no ioService");this.ioService.event.next({name:"botie",payload:{args:["message"],source:"return this.syncMessage(message)"}})},e.prototype.startTimer=function(){var e=this;this.log.verbose("WechatyComponent","startTimer()"),this.ender=new o.Subject,this.ngZone.runOutsideAngular((function(){e.timer=o.interval(3e3).pipe(n.tap((function(t){e.log.verbose("do"," %d",t)})),n.takeUntil(e.ender),n.share())})),this.timerSub=this.timer.subscribe((function(t){if(e.counter=t,!e.ioService)throw new Error("no ioService");e.ioService.rpcDing(e.counter)}))},e.prototype.endTimer=function(){this.log.verbose("WechatyComponent","endTimer()"),this.timerSub&&(this.timerSub.unsubscribe(),this.timerSub=null),this.ender&&this.ender.next(null)},e.prototype.logoff=function(e){this.log.silly("WechatyComponent","logoff(%s)",e);var t={name:"logout",payload:e};this.ioService.event.next(t)},Object.defineProperty(e.prototype,"readyState",{get:function(){return this.ioService.readyState},enumerable:!1,configurable:!0}),e}();l.decorators=[{type:t.Component,args:[{selector:"wechaty",template:"<ng-content></ng-content>"}]}],l.ctorParameters=function(){return[{type:s.Brolog},{type:t.NgZone}]},l.propDecorators={message:[{type:t.Output}],scan:[{type:t.Output}],login:[{type:t.Output}],logout:[{type:t.Output}],error:[{type:t.Output}],heartbeat:[{type:t.Output}],token:[{type:t.Input}]};var p=function(){};p.decorators=[{type:t.NgModule,args:[{id:"wechaty",declarations:[l],exports:[l]}]}],e.VERSION=h,e.WechatyComponent=l,e.WechatyModule=p,e.ɵa=l,Object.defineProperty(e,"__esModule",{value:!0})})); | ||
***************************************************************************** */function r(e,t,o,n){return new(o||(o=Promise))((function(s,i){function r(e){try{c(n.next(e))}catch(e){i(e)}}function a(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(r,a)}c((n=n.apply(e,t||[])).next())}))}function a(e,t){var o,n,s,i,r={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(o)throw new TypeError("Generator is already executing.");for(;r;)try{if(o=1,n&&(s=2&i[0]?n.return:i[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,i[1])).done)return s;switch(n=0,s&&(i=[2&i[0],s.value]),i[0]){case 0:case 1:s=i;break;case 4:return r.label++,{value:i[1],done:!1};case 5:r.label++,n=i[1],i=[0];continue;case 7:i=r.ops.pop(),r.trys.pop();continue;default:if(!(s=r.trys,(s=s.length>0&&s[s.length-1])||6!==i[0]&&2!==i[0])){r=0;continue}if(3===i[0]&&(!s||i[1]>s[0]&&i[1]<s[3])){r.label=i[1];break}if(6===i[0]&&r.label<s[1]){r.label=s[1],s=i;break}if(s&&r.label<s[2]){r.label=s[2],r.ops.push(i);break}s[2]&&r.ops.pop(),r.trys.pop();continue}i=t.call(e,r)}catch(e){i=[6,e],n=0}finally{o=s=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}Object.create;Object.create;var c,h="0.7.4";!function(e){e[e.CLOSED=WebSocket.CLOSED]="CLOSED",e[e.CLOSING=WebSocket.CLOSING]="CLOSING",e[e.CONNECTING=WebSocket.CONNECTING]="CONNECTING",e[e.OPEN=WebSocket.OPEN]="OPEN"}(c||(c={}));var u=function(){function e(){this.autoReconnect=!0,this.log=s.Brolog.instance(),this.CONNECT_TIMEOUT=1e4,this.ENDPOINT="wss://api.chatie.io/v0/websocket/token/",this.PROTOCOL="web|0.0.1",this.sendBuffer=[],this.log.verbose("IoService","constructor()")}return Object.defineProperty(e.prototype,"readyState",{get:function(){return this._readyState.asObservable()},enumerable:!1,configurable:!0}),e.prototype.init=function(){return r(this,void 0,void 0,(function(){var e,t=this;return a(this,(function(n){switch(n.label){case 0:if(this.log.verbose("IoService","init()"),this.state)throw new Error("re-init");this.snapshot={readyState:c.CLOSED,event:null},this._readyState=new o.BehaviorSubject(c.CLOSED),this.state=new i.StateSwitch("IoService",this.log),this.state.setLog(this.log),n.label=1;case 1:return n.trys.push([1,4,,5]),[4,this.initStateDealer()];case 2:return n.sent(),[4,this.initRxSocket()];case 3:return n.sent(),[3,5];case 4:throw e=n.sent(),this.log.silly("IoService","init() exception: %s",e.message),e;case 5:return this.readyState.subscribe((function(e){t.log.silly("IoService","init() readyState.subscribe(%s)",c[e]),t.snapshot.readyState=e})),this.event.subscribe((function(e){t.log.silly("IoService","init() event.subscribe({name:%s})",e.name),t.snapshot.event=e})),[2]}}))}))},e.prototype.token=function(e){if(this.log.silly("IoService","token(%s)",e),!e)return this._token;this._token=e},e.prototype.start=function(){return r(this,void 0,void 0,(function(){var e;return a(this,(function(t){switch(t.label){case 0:if(this.log.verbose("IoService","start() with token:%s",this._token),!this._token)throw new Error("start() without token");if(this.state.on())throw new Error("state is already ON");if(this.state.pending())throw new Error("state is pending");this.state.on("pending"),this.autoReconnect=!0,t.label=1;case 1:return t.trys.push([1,3,,4]),[4,this.connectRxSocket()];case 2:return t.sent(),this.state.on(!0),[3,4];case 3:return e=t.sent(),this.log.warn("IoService","start() failed:%s",e.message),this.state.off(!0),[3,4];case 4:return[2]}}))}))},e.prototype.stop=function(){return r(this,void 0,void 0,(function(){return a(this,(function(e){switch(e.label){case 0:if(this.log.verbose("IoService","stop()"),this.state.off()){if(this.log.warn("IoService","stop() state is already off"),this.state.pending())throw new Error("state pending() is true");return[2]}if(this.state.off("pending"),this.autoReconnect=!1,!this._websocket)throw new Error("no websocket");return[4,this.socketClose(1e3,"IoService.stop()")];case 1:return e.sent(),this.state.off(!0),[2]}}))}))},e.prototype.restart=function(){return r(this,void 0,void 0,(function(){var e;return a(this,(function(t){switch(t.label){case 0:this.log.verbose("IoService","restart()"),t.label=1;case 1:return t.trys.push([1,4,,5]),[4,this.stop()];case 2:return t.sent(),[4,this.start()];case 3:return t.sent(),[3,5];case 4:throw e=t.sent(),this.log.error("IoService","restart() error:%s",e.message),e;case 5:return[2]}}))}))},e.prototype.initStateDealer=function(){var e=this;this.log.verbose("IoService","initStateDealer()");this.readyState.pipe(n.filter((function(e){return e===c.OPEN}))).subscribe((function(t){return e.stateOnOpen()}))},e.prototype.initRxSocket=function(){return r(this,void 0,void 0,(function(){var e,t=this;return a(this,(function(s){if(this.log.verbose("IoService","initRxSocket()"),this.event)throw new Error("re-init is not permitted");return this.moObserver={next:this.socketSend.bind(this),error:this.socketClose.bind(this),complete:this.socketClose.bind(this)},e=new o.Observable((function(e){return t.log.verbose("IoService","initRxSocket() Observable.create()"),t.mtObserver=e,t.socketClose.bind(t)})),this.event=o.Subject.create(this.moObserver,e.pipe(n.share())),[2]}))}))},e.prototype.connectRxSocket=function(){return r(this,void 0,void 0,(function(){var e,t=this;return a(this,(function(o){if(this.log.verbose("IoService","connectRxSocket()"),this._websocket)throw new Error("already has a websocket");if(this.state.off())throw new Error("switch state is off");if(!this.state.pending())throw new Error("switch state is already ON");return this._websocket=new WebSocket(this.endPoint(),this.PROTOCOL),this.socketUpdateState(),e=new Promise((function(e,o){t.log.verbose("IoService","connectRxSocket() Promise()");var n=setTimeout((function(){t._websocket=null;var e=new Error("rxSocket connect timeout after "+Math.round(t.CONNECT_TIMEOUT/1e3));o(e)}),t.CONNECT_TIMEOUT);t._websocket.onopen=function(o){t.log.verbose("IoService","connectRxSocket() Promise() WebSocket.onOpen() resolve()"),t.socketUpdateState(),clearTimeout(n),e()}})),this._websocket.onmessage=this.socketOnMessage.bind(this),this._websocket.onerror=this.socketOnError.bind(this),this._websocket.onclose=this.socketOnClose.bind(this),[2,e]}))}))},e.prototype.endPoint=function(){var e=this.ENDPOINT+this._token;return this.log.verbose("IoService","endPoint() => %s",e),e},e.prototype.stateOnOpen=function(){this.log.verbose("IoService","stateOnOpen()"),this.socketSendBuffer(),this.rpcUpdate("from stateOnOpen()")},e.prototype.rpcDing=function(e){return r(this,void 0,void 0,(function(){var t;return a(this,(function(o){return this.log.verbose("IoService","ding(%s)",e),t={name:"ding",payload:e},this.event.next(t),[2]}))}))},e.prototype.rpcUpdate=function(e){return r(this,void 0,void 0,(function(){return a(this,(function(t){return this.event.next({name:"update",payload:e}),[2]}))}))},e.prototype.socketClose=function(e,t){return r(this,void 0,void 0,(function(){var o=this;return a(this,(function(s){switch(s.label){case 0:if(this.log.verbose("IoService","socketClose()"),!this._websocket)throw new Error("no websocket");return this._websocket.close(e,t),this.socketUpdateState(),[4,new Promise((function(e){o.readyState.pipe(n.filter((function(e){return e===c.CLOSED}))).subscribe(e)}))];case 1:return s.sent(),[2]}}))}))},e.prototype.socketSend=function(e){this.log.silly("IoService","socketSend({name:%s, payload:%s})",e.name,e.payload),this._websocket||this.log.silly("IoService","socketSend() no _websocket");var t=JSON.stringify(e);this.sendBuffer.push(t),this.socketSendBuffer()},e.prototype.socketSendBuffer=function(){if(this.log.silly("IoService","socketSendBuffer() length:%s",this.sendBuffer.length),!this._websocket)throw new Error("socketSendBuffer(): no _websocket");if(this._websocket.readyState===WebSocket.OPEN)for(;this.sendBuffer.length;){var e=this.sendBuffer.shift();this.log.silly("IoService","socketSendBuffer() sending(%s)",e),this._websocket.send(e)}else this.log.warn("IoService","socketSendBuffer() readyState is not OPEN, send job delayed.")},e.prototype.socketUpdateState=function(){var e;this.log.verbose("IoService","socketUpdateState() is %s",c[null===(e=this._websocket)||void 0===e?void 0:e.readyState]),this._websocket?this._readyState.next(this._websocket.readyState):this.log.error("IoService","socketUpdateState() no _websocket")},e.prototype.socketOnMessage=function(e){this.log.verbose("IoService","onMessage({data: %s})",e.data);var t=e.data,o={name:"raw",payload:t};try{var n=JSON.parse(t);o.name=n.name,o.payload=n.payload}catch(e){this.log.warn("IoService","onMessage parse message fail. save as RAW")}this.mtObserver.next(o)},e.prototype.socketOnError=function(e){this.log.silly("IoService","socketOnError(%s)",e)},e.prototype.socketOnClose=function(e){var t=this;this.log.verbose("IoService","socketOnClose({code:%s, reason:%s, returnValue:%s})",e.code,e.reason,e.returnValue),this.socketUpdateState(),this.autoReconnect?(this.state.on("pending"),setTimeout((function(){return r(t,void 0,void 0,(function(){var e;return a(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this.connectRxSocket()];case 1:return t.sent(),this.state.on(!0),[3,3];case 2:return e=t.sent(),this.log.warn("IoService","socketOnClose() autoReconnect() exception: %s",e),this.state.off(!0),[3,3];case 3:return[2]}}))}))}),1e3)):this.state.off(!0),this._websocket=null,e.wasClean||this.log.warn("IoService","socketOnClose() event.wasClean FALSE")},e}(),l=function(){function e(e,o){this.log=e,this.ngZone=o,this.message=new t.EventEmitter,this.scan=new t.EventEmitter,this.login=new t.EventEmitter,this.logout=new t.EventEmitter,this.error=new t.EventEmitter,this.heartbeat=new t.EventEmitter,this.timerSub=null,this.counter=0,this.timestamp=new Date,this.log.verbose("WechatyComponent","constructor() v%s",h)}return Object.defineProperty(e.prototype,"token",{get:function(){return this._token},set:function(e){this.log.verbose("WechatyComponent","set token(%s)",e);var t=(e||"").trim();if(this._token!==t){if(this._token=t,!this.ioService)return this.log.silly("WechatyComponent","set token() skip token init value"),void this.log.silly("WechatyComponent","set token() because ioService will do it inside ngOnInit()");this.log.silly("WechatyComponent","set token(%s) reloading ioService now...",t),this.ioService.token(this.token),this.ioService.restart()}else this.log.silly("WechatyComponent","set token(%s) not new",t)},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){return r(this,void 0,void 0,(function(){return a(this,(function(e){switch(e.label){case 0:return this.log.verbose("WechatyComponent","ngOnInit() with token: "+this.token),this.ioService=new u,[4,this.ioService.init()];case 1:return e.sent(),this.ioService.event.subscribe(this.onIo.bind(this)),this.log.silly("WechatyComponent","ngOnInit() ioService.event.subscribe()-ed"),this.token?(this.ioService.token(this.token),[4,this.ioService.start()]):[3,3];case 2:e.sent(),e.label=3;case 3:return[2]}}))}))},e.prototype.ngOnDestroy=function(){this.log.verbose("WechatyComponent","ngOnDestroy()"),this.endTimer(),this.ioService&&this.ioService.stop()},e.prototype.onIo=function(e){switch(this.log.silly("WechatyComponent","onIo#%d(%s)",this.counter++,e.name),this.timestamp=new Date,e.name){case"scan":this.scan.emit(e.payload);break;case"login":this.login.emit(e.payload);break;case"logout":this.logout.emit(e.payload);break;case"message":this.message.emit(e.payload);break;case"error":this.error.emit(e.payload);break;case"ding":case"dong":case"raw":this.heartbeat.emit(e.name+"["+e.payload+"]");break;case"heartbeat":this.heartbeat.emit(e.payload);break;case"sys":this.log.silly("WechatyComponent","onIo(%s): %s",e.name,e.payload);break;default:this.log.warn("WechatyComponent","onIo() unknown event name: %s[%s]",e.name,e.payload)}},e.prototype.reset=function(e){this.log.verbose("WechatyComponent","reset(%s)",e);var t={name:"reset",payload:e};if(!this.ioService)throw new Error("no ioService");this.ioService.event.next(t)},e.prototype.shutdown=function(e){this.log.verbose("WechatyComponent","shutdown(%s)",e);var t={name:"shutdown",payload:e};if(!this.ioService)throw new Error("no ioService");this.ioService.event.next(t)},e.prototype.startSyncMessage=function(){this.log.verbose("WechatyComponent","startSyncMessage()");if(!this.ioService)throw new Error("no ioService");this.ioService.event.next({name:"botie",payload:{args:["message"],source:"return this.syncMessage(message)"}})},e.prototype.startTimer=function(){var e=this;this.log.verbose("WechatyComponent","startTimer()"),this.ender=new o.Subject,this.ngZone.runOutsideAngular((function(){e.timer=o.interval(3e3).pipe(n.tap((function(t){e.log.verbose("do"," %d",t)})),n.takeUntil(e.ender),n.share())})),this.timerSub=this.timer.subscribe((function(t){if(e.counter=t,!e.ioService)throw new Error("no ioService");e.ioService.rpcDing(e.counter)}))},e.prototype.endTimer=function(){this.log.verbose("WechatyComponent","endTimer()"),this.timerSub&&(this.timerSub.unsubscribe(),this.timerSub=null),this.ender&&this.ender.next(null)},e.prototype.logoff=function(e){this.log.silly("WechatyComponent","logoff(%s)",e);var t={name:"logout",payload:e};this.ioService.event.next(t)},Object.defineProperty(e.prototype,"readyState",{get:function(){return this.ioService.readyState},enumerable:!1,configurable:!0}),e}();l.decorators=[{type:t.Component,args:[{selector:"wechaty",template:"<ng-content></ng-content>"}]}],l.ctorParameters=function(){return[{type:s.Brolog},{type:t.NgZone}]},l.propDecorators={message:[{type:t.Output}],scan:[{type:t.Output}],login:[{type:t.Output}],logout:[{type:t.Output}],error:[{type:t.Output}],heartbeat:[{type:t.Output}],token:[{type:t.Input}]};var p=function(){};p.decorators=[{type:t.NgModule,args:[{id:"wechaty",declarations:[l],exports:[l]}]}],e.VERSION=h,e.WechatyComponent=l,e.WechatyModule=p,e.ɵa=l,Object.defineProperty(e,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=chatie-angular.umd.min.js.map |
@@ -1,1 +0,1 @@ | ||
{"__symbolic":"module","version":4,"metadata":{"ɵa":{"__symbolic":"reference","name":"WechatyComponent"},"ScanInfo":{"__symbolic":"interface"},"UserInfo":{"__symbolic":"interface"},"WechatyComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":47,"character":1},"arguments":[{"selector":"wechaty","template":"<ng-content></ng-content>"}]}],"members":{"message":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":66,"character":3}}]}],"scan":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":67,"character":3}}]}],"login":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":68,"character":3}}]}],"logout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":69,"character":3}}]}],"error":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":70,"character":3}}]}],"heartbeat":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":71,"character":3}}]}],"token":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"brolog","name":"Brolog","line":108,"character":20},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":109,"character":20}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onIo":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"shutdown":[{"__symbolic":"method"}],"startSyncMessage":[{"__symbolic":"method"}],"startTimer":[{"__symbolic":"method"}],"endTimer":[{"__symbolic":"method"}],"logoff":[{"__symbolic":"method"}]}},"WechatyModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"id":"wechaty","declarations":[{"__symbolic":"reference","name":"ɵa"}],"exports":[{"__symbolic":"reference","name":"ɵa"}]}]}],"members":{}},"VERSION":"0.7.3"},"origins":{"ɵa":"./src/wechaty/wechaty.component","ScanInfo":"./src/wechaty/wechaty.component","UserInfo":"./src/wechaty/wechaty.component","WechatyComponent":"./src/wechaty/wechaty.component","WechatyModule":"./src/wechaty/wechaty.module","VERSION":"./src/version"},"importAs":"@chatie/angular"} | ||
{"__symbolic":"module","version":4,"metadata":{"ɵa":{"__symbolic":"reference","name":"WechatyComponent"},"ScanInfo":{"__symbolic":"interface"},"UserInfo":{"__symbolic":"interface"},"WechatyComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":47,"character":1},"arguments":[{"selector":"wechaty","template":"<ng-content></ng-content>"}]}],"members":{"message":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":66,"character":3}}]}],"scan":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":67,"character":3}}]}],"login":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":68,"character":3}}]}],"logout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":69,"character":3}}]}],"error":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":70,"character":3}}]}],"heartbeat":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":71,"character":3}}]}],"token":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"brolog","name":"Brolog","line":108,"character":20},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":109,"character":20}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onIo":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"shutdown":[{"__symbolic":"method"}],"startSyncMessage":[{"__symbolic":"method"}],"startTimer":[{"__symbolic":"method"}],"endTimer":[{"__symbolic":"method"}],"logoff":[{"__symbolic":"method"}]}},"WechatyModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"id":"wechaty","declarations":[{"__symbolic":"reference","name":"ɵa"}],"exports":[{"__symbolic":"reference","name":"ɵa"}]}]}],"members":{}},"VERSION":"0.7.4"},"origins":{"ɵa":"./src/wechaty/wechaty.component","ScanInfo":"./src/wechaty/wechaty.component","UserInfo":"./src/wechaty/wechaty.component","WechatyComponent":"./src/wechaty/wechaty.component","WechatyModule":"./src/wechaty/wechaty.module","VERSION":"./src/version"},"importAs":"@chatie/angular"} |
/** | ||
* This file was auto generated from scripts/generate-version.sh | ||
*/ | ||
export const VERSION = '0.7.3'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9hbmd1bGFyL2FuZ3VsYXIvIiwic291cmNlcyI6WyJzcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBVyxPQUFPLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgZmlsZSB3YXMgYXV0byBnZW5lcmF0ZWQgZnJvbSBzY3JpcHRzL2dlbmVyYXRlLXZlcnNpb24uc2hcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT046IHN0cmluZyA9ICcwLjcuMydcbiJdfQ== | ||
export const VERSION = '0.7.4'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9hbmd1bGFyL2FuZ3VsYXIvIiwic291cmNlcyI6WyJzcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBVyxPQUFPLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgZmlsZSB3YXMgYXV0byBnZW5lcmF0ZWQgZnJvbSBzY3JpcHRzL2dlbmVyYXRlLXZlcnNpb24uc2hcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT046IHN0cmluZyA9ICcwLjcuNCdcbiJdfQ== |
@@ -287,3 +287,4 @@ import { __awaiter } from "tslib"; | ||
socketUpdateState() { | ||
this.log.verbose('IoService', 'socketUpdateState() is %s', ReadyState[this._websocket.readyState]); | ||
var _a; | ||
this.log.verbose('IoService', 'socketUpdateState() is %s', ReadyState[(_a = this._websocket) === null || _a === void 0 ? void 0 : _a.readyState]); | ||
if (!this._websocket) { | ||
@@ -356,2 +357,2 @@ this.log.error('IoService', 'socketUpdateState() no _websocket'); | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvYW5ndWxhci9hbmd1bGFyLyIsInNvdXJjZXMiOlsic3JjL3dlY2hhdHkvaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUVWLE9BQU8sR0FDUixNQUF3QixNQUFNLENBQUE7QUFDL0IsT0FBTyxFQUNMLE1BQU0sRUFDTixLQUFLLEdBQ04sTUFBd0IsZ0JBQWdCLENBQUE7QUFFekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFZLFFBQVEsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU8sY0FBYyxDQUFBO0FBc0IzQyxNQUFNLENBQU4sSUFBWSxVQUtYO0FBTEQsV0FBWSxVQUFVO0lBQ3BCLGtDQUFjLFNBQVMsQ0FBQyxNQUFNLFlBQUEsQ0FBQTtJQUM5QixtQ0FBYyxTQUFTLENBQUMsT0FBTyxhQUFBLENBQUE7SUFDL0Isc0NBQWMsU0FBUyxDQUFDLFVBQVUsZ0JBQUEsQ0FBQTtJQUNsQyxnQ0FBYyxTQUFTLENBQUMsSUFBSSxVQUFBLENBQUE7QUFDOUIsQ0FBQyxFQUxXLFVBQVUsS0FBVixVQUFVLFFBS3JCO0FBT0QsTUFBTSxPQUFPLFNBQVM7SUEwQnBCO1FBZlEsa0JBQWEsR0FBRyxJQUFJLENBQUE7UUFDcEIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUVkLG9CQUFlLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQSxDQUFDLGFBQWE7UUFDekMsYUFBUSxHQUFHLHlDQUF5QyxDQUFBO1FBQ3BELGFBQVEsR0FBRyxXQUFXLENBQUE7UUFNL0IsZUFBVSxHQUFhLEVBQUUsQ0FBQTtRQUsvQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQXZCRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlB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SyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN4QixVQUFVLENBQUMsR0FBUyxFQUFFO2dCQUNwQixJQUFJO29CQUNGLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO29CQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtpQkFDcEI7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLCtDQUErQyxFQUFFLENBQUMsQ0FBQyxDQUFBO29CQUM5RSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtpQkFDckI7WUFDSCxDQUFDLENBQUEsRUFBRSxJQUFJLENBQUMsQ0FBQTtTQUNUO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUNyQjtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1FBRXRCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFBO1lBQ2xFLGtCQUFrQjtTQUNuQjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZFUlNJT04gfSAgICAgIGZyb20gJy4uL2NvbmZpZydcblxuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBPYnNlcnZlcixcbiAgU3ViamVjdCxcbn0gICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIGZpbHRlcixcbiAgc2hhcmUsXG59ICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBCcm9sb2cgfSAgICAgICBmcm9tICdicm9sb2cnXG5pbXBvcnQgeyBTdGF0ZVN3aXRjaCB9ICBmcm9tICdzdGF0ZS1zd2l0Y2gnXG5cbmV4cG9ydCB0eXBlIFdlY2hhdHlFdmVudE5hbWUgPVxuICAgICdzY2FuJ1xuICB8ICdsb2dpbicgfCAnbG9nb3V0J1xuICB8ICdyZXNldCcgfCAnc2h1dGRvd24nXG4gIHwgJ2RpbmcnICB8ICdkb25nJ1xuICB8ICdtZXNzYWdlJ1xuICB8ICdoZWFydGJlYXQnXG4gIHwgJ3VwZGF0ZSdcbiAgfCAnZXJyb3InXG5cbmV4cG9ydCB0eXBlIFNlcnZlckV2ZW50TmFtZSA9ICdzeXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAnYm90aWUnXG5cbmV4cG9ydCB0eXBlIElvRXZlbnROYW1lID0gJ3JhdycgfCBXZWNoYXR5RXZlbnROYW1lIHwgU2VydmVyRXZlbnROYW1lXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW9FdmVudCB7XG4gIG5hbWU6IElvRXZlbnROYW1lLFxuICBwYXlsb2FkOiBhbnksXG59XG5cbmV4cG9ydCBlbnVtIFJlYWR5U3RhdGUge1xuICBDTE9TRUQgICAgICA9IFdlYlNvY2tldC5DTE9TRUQsXG4gIENMT1NJTkcgICAgID0gV2ViU29ja2V0LkNMT1NJTkcsXG4gIENPTk5FQ1RJTkcgID0gV2ViU29ja2V0LkNPTk5FQ1RJTkcsXG4gIE9QRU4gICAgICAgID0gV2ViU29ja2V0Lk9QRU4sXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW9TZXJ2aWNlU25hcHNob3Qge1xuICByZWFkeVN0YXRlOiBSZWFkeVN0YXRlXG4gIGV2ZW50OiAgICAgSW9FdmVudFxufVxuXG5leHBvcnQgY2xhc3MgSW9TZXJ2aWNlIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1JlYWN0aXZlWC9yeGpzL2Jsb2IvbWFzdGVyL3NyYy9vYnNlcnZhYmxlL2RvbS9XZWJTb2NrZXRTdWJqZWN0LnRzXG4gIHB1YmxpYyBldmVudDogU3ViamVjdDxJb0V2ZW50PlxuXG4gIHByaXZhdGUgX3JlYWR5U3RhdGU6IEJlaGF2aW9yU3ViamVjdDxSZWFkeVN0YXRlPlxuICBwdWJsaWMgZ2V0IHJlYWR5U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWR5U3RhdGUuYXNPYnNlcnZhYmxlKClcbiAgfVxuXG4gIHB1YmxpYyBzbmFwc2hvdDogSW9TZXJ2aWNlU25hcHNob3RcblxuICBwcml2YXRlIGF1dG9SZWNvbm5lY3QgPSB0cnVlXG4gIHByaXZhdGUgbG9nID0gQnJvbG9nLmluc3RhbmNlKClcblxuICBwcml2YXRlIHJlYWRvbmx5IENPTk5FQ1RfVElNRU9VVCA9IDEwICogMTAwMCAvLyAxMCBzZWNvbmRzXG4gIHByaXZhdGUgcmVhZG9ubHkgRU5EUE9JTlQgPSAnd3NzOi8vYXBpLmNoYXRpZS5pby92MC93ZWJzb2NrZXQvdG9rZW4vJ1xuICBwcml2YXRlIHJlYWRvbmx5IFBST1RPQ09MID0gJ3dlYnwwLjAuMSdcblxuICBwcml2YXRlIF90b2tlbjogc3RyaW5nIC8vIEZJWE1FIHBvc3NpYmxlIGJlIGB1bmRlZmluZWRgXG4gIHByaXZhdGUgX3dlYnNvY2tldDogV2ViU29ja2V0IHwgbnVsbFxuICBwcml2YXRlIG1vT2JzZXJ2ZXI6IE9ic2VydmVyPElvRXZlbnQ+IC8vIE1vYmlsZSBPcmlnaW5hdGVkLiBtb09ic2VydmVyLm5leHQoKSBtZWFucyBtb2JpbGUgaXMgc2VuZGluZ1xuICBwcml2YXRlIG10T2JzZXJ2ZXI6IE9ic2VydmVyPElvRXZlbnQ+IC8vIE1vYmlsZSBUZXJtaW5hdGVkLiBtdE9ic2VydmVyLm5leHQoKSBtZWFucyBtb2JpbGUgaXMgcmVjZWl2aW5nXG4gIHByaXZhdGUgc2VuZEJ1ZmZlcjogc3RyaW5nW10gPSBbXVxuXG4gIHByaXZhdGUgc3RhdGU6IFN0YXRlU3dpdGNoXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ2NvbnN0cnVjdG9yKCknKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ2luaXQoKScpXG5cbiAgICBpZiAodGhpcy5zdGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZS1pbml0JylcbiAgICB9XG5cbiAgICB0aGlzLnNuYXBzaG90ID0ge1xuICAgICAgcmVhZHlTdGF0ZTogUmVhZHlTdGF0ZS5DTE9TRUQsXG4gICAgICBldmVudDogICAgIG51bGwsXG4gICAgfVxuXG4gICAgdGhpcy5fcmVhZHlTdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVhZHlTdGF0ZT4oUmVhZHlTdGF0ZS5DTE9TRUQpXG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZVN3aXRjaCgnSW9TZXJ2aWNlJywgdGhpcy5sb2cpXG4gICAgdGhpcy5zdGF0ZS5zZXRMb2codGhpcy5sb2cpXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0U3RhdGVEZWFsZXIoKVxuICAgICAgYXdhaXQgdGhpcy5pbml0UnhTb2NrZXQoKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLnNpbGx5KCdJb1NlcnZpY2UnLCAnaW5pdCgpIGV4Y2VwdGlvbjogJXMnLCBlLm1lc3NhZ2UpXG4gICAgICB0aHJvdyBlXG4gICAgfVxuXG4gICAgdGhpcy5yZWFkeVN0YXRlLnN1YnNjcmliZShzID0+IHtcbiAgICAgIHRoaXMubG9nLnNpbGx5KCdJb1NlcnZpY2UnLCAnaW5pdCgpIHJlYWR5U3RhdGUuc3Vic2NyaWJlKCVzKScsIFJlYWR5U3RhdGVbc10pXG4gICAgICB0aGlzLnNuYXBzaG90LnJlYWR5U3RhdGUgPSBzXG4gICAgfSlcbiAgICAvLyBJTVBPUlRBTlQ6IHN1YnNjcmliZSB0byBldmVudCBhbmQgbWFrZSBpdCBIT1QhXG4gICAgdGhpcy5ldmVudC5zdWJzY3JpYmUocyA9PiB7XG4gICAgICB0aGlzLmxvZy5zaWxseSgnSW9TZXJ2aWNlJywgJ2luaXQoKSBldmVudC5zdWJzY3JpYmUoe25hbWU6JXN9KScsIHMubmFtZSlcbiAgICAgIHRoaXMuc25hcHNob3QuZXZlbnQgPSBzXG4gICAgfSlcblxuICAgIHJldHVyblxuICB9XG5cbiAgcHVibGljIHRva2VuKCk6IHN0cmluZ1xuICBwdWJsaWMgdG9rZW4obmV3VG9rZW46IHN0cmluZyk6IHZvaWRcblxuICBwdWJsaWMgdG9rZW4obmV3VG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcgfCB2b2lkIHtcbiAgICB0aGlzLmxvZy5zaWxseSgnSW9TZXJ2aWNlJywgJ3Rva2VuKCVzKScsIG5ld1Rva2VuKVxuICAgIGlmIChuZXdUb2tlbikge1xuICAgICAgdGhpcy5fdG9rZW4gPSBuZXdUb2tlblxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90b2tlblxuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ3N0YXJ0KCkgd2l0aCB0b2tlbjolcycsIHRoaXMuX3Rva2VuKVxuXG4gICAgaWYgKCF0aGlzLl90b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCgpIHdpdGhvdXQgdG9rZW4nKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLm9uKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RhdGUgaXMgYWxyZWFkeSBPTicpXG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLnBlbmRpbmcoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGF0ZSBpcyBwZW5kaW5nJylcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlLm9uKCdwZW5kaW5nJylcblxuICAgIHRoaXMuYXV0b1JlY29ubmVjdCA9IHRydWVcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbm5lY3RSeFNvY2tldCgpXG4gICAgICB0aGlzLnN0YXRlLm9uKHRydWUpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybignSW9TZXJ2aWNlJywgJ3N0YXJ0KCkgZmFpbGVkOiVzJywgZS5tZXNzYWdlKVxuXG4gICAgICB0aGlzLnN0YXRlLm9mZih0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ3N0b3AoKScpXG5cbiAgICBpZiAodGhpcy5zdGF0ZS5vZmYoKSkge1xuICAgICAgdGhpcy5sb2cud2FybignSW9TZXJ2aWNlJywgJ3N0b3AoKSBzdGF0ZSBpcyBhbHJlYWR5IG9mZicpXG4gICAgICBpZiAodGhpcy5zdGF0ZS5wZW5kaW5nKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGF0ZSBwZW5kaW5nKCkgaXMgdHJ1ZScpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlLm9mZigncGVuZGluZycpXG5cbiAgICB0aGlzLmF1dG9SZWNvbm5lY3QgPSBmYWxzZVxuXG4gICAgaWYgKCF0aGlzLl93ZWJzb2NrZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gd2Vic29ja2V0JylcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNvY2tldENsb3NlKDEwMDAsICdJb1NlcnZpY2Uuc3RvcCgpJylcbiAgICB0aGlzLnN0YXRlLm9mZih0cnVlKVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKCdJb1NlcnZpY2UnLCAncmVzdGFydCgpJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zdG9wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnQoKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdJb1NlcnZpY2UnLCAncmVzdGFydCgpIGVycm9yOiVzJywgZS5tZXNzYWdlKVxuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0YXRlRGVhbGVyKCkge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdpbml0U3RhdGVEZWFsZXIoKScpXG5cbiAgICBjb25zdCBpc1JlYWR5U3RhdGVPcGVuID0gKHM6IFJlYWR5U3RhdGUpID0+IHMgPT09IFJlYWR5U3RhdGUuT1BFTlxuXG4gICAgdGhpcy5yZWFkeVN0YXRlLnBpcGUoXG4gICAgICBmaWx0ZXIoaXNSZWFkeVN0YXRlT3BlbiksXG4gICAgKVxuICAgICAgLnN1YnNjcmliZShvcGVuID0+IHRoaXMuc3RhdGVPbk9wZW4oKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3ViamVjdCBmcm9tIHRoZSBzcGVjaWZpZWQgb2JzZXJ2ZXIgYW5kIG9ic2VydmFibGUuXG4gICAqICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFjdGl2ZS1FeHRlbnNpb25zL1J4SlMvYmxvYi9tYXN0ZXIvZG9jL2FwaS9zdWJqZWN0cy9zdWJqZWN0Lm1kXG4gICAqIENyZWF0ZSBhbiBSeC5TdWJqZWN0IHVzaW5nIFN1YmplY3QuY3JlYXRlIHRoYXQgYWxsb3dzIG9uTmV4dCB3aXRob3V0IHN1YnNjcmlwdGlvblxuICAgKiAgIEEgc29ja2V0IGltcGxlbWVudGF0aW9uIChleGFtcGxlLCBkb24ndCB1c2UpXG4gICAqICAtIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM0ODYyMjg2LzExMjM5NTVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdFJ4U29ja2V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdpbml0UnhTb2NrZXQoKScpXG5cbiAgICBpZiAodGhpcy5ldmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZS1pbml0IGlzIG5vdCBwZXJtaXR0ZWQnKVxuICAgIH1cblxuICAgIC8vIDEuIE1vYmlsZSBPcmlnaW5hdGVkLiBtb09ic2VydmVyLm5leHQoKSBtZWFucyBtb2JpbGUgaXMgc2VuZGluZ1xuICAgIHRoaXMubW9PYnNlcnZlciA9IHtcbiAgICAgIG5leHQ6ICAgICB0aGlzLnNvY2tldFNlbmQuYmluZCh0aGlzKSxcbiAgICAgIGVycm9yOiAgICB0aGlzLnNvY2tldENsb3NlLmJpbmQodGhpcyksXG4gICAgICBjb21wbGV0ZTogdGhpcy5zb2NrZXRDbG9zZS5iaW5kKHRoaXMpLFxuICAgIH1cblxuICAgIC8vIDIuIE1vYmlsZSBUZXJtaW5hdGVkLiBtdE9ic2VydmVyLm5leHQoKSBtZWFucyBtb2JpbGUgaXMgcmVjZWl2aW5nXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8SW9FdmVudD4pID0+IHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdpbml0UnhTb2NrZXQoKSBPYnNlcnZhYmxlLmNyZWF0ZSgpJylcbiAgICAgIHRoaXMubXRPYnNlcnZlciA9IG9ic2VydmVyXG5cbiAgICAgIHJldHVybiB0aGlzLnNvY2tldENsb3NlLmJpbmQodGhpcylcbiAgICB9KVxuXG4gICAgLy8gMy4gU3ViamVjdCBmb3IgTU8gJiBNVCBPYnNlcnZlcnNcbiAgICB0aGlzLmV2ZW50ID0gU3ViamVjdC5jcmVhdGUodGhpcy5tb09ic2VydmVyLCBvYnNlcnZhYmxlLnBpcGUoc2hhcmUoKSkpXG5cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29ubmVjdFJ4U29ja2V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdjb25uZWN0UnhTb2NrZXQoKScpXG5cbiAgICAvLyBGSVhNRTogY2hlY2sgJiBjbG9zZSB0aGUgb2xkIG9uZVxuICAgIGlmICh0aGlzLl93ZWJzb2NrZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYWxyZWFkeSBoYXMgYSB3ZWJzb2NrZXQnKVxuICAgIH1cblxuICAgIC8vIGlmICh0aGlzLnN0YXRlLnRhcmdldCgpICE9PSAnb3BlbidcbiAgICAvLyAgIHx8IHRoaXMuc3RhdGUuY3VycmVudCgpICE9PSAnb3BlbidcbiAgICAvLyAgIHx8IHRoaXMuc3RhdGUuc3RhYmxlKClcbiAgICBpZiAodGhpcy5zdGF0ZS5vZmYoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2l0Y2ggc3RhdGUgaXMgb2ZmJylcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlLnBlbmRpbmcoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2l0Y2ggc3RhdGUgaXMgYWxyZWFkeSBPTicpXG4gICAgfVxuXG4gICAgdGhpcy5fd2Vic29ja2V0ID0gbmV3IFdlYlNvY2tldCh0aGlzLmVuZFBvaW50KCksIHRoaXMuUFJPVE9DT0wpXG4gICAgdGhpcy5zb2NrZXRVcGRhdGVTdGF0ZSgpXG5cbiAgICBjb25zdCBvbk9wZW5Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ2Nvbm5lY3RSeFNvY2tldCgpIFByb21pc2UoKScpXG5cbiAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3dlYnNvY2tldCA9IG51bGxcbiAgICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcigncnhTb2NrZXQgY29ubmVjdCB0aW1lb3V0IGFmdGVyICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIE1hdGgucm91bmQodGhpcy5DT05ORUNUX1RJTUVPVVQgLyAxMDAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICByZWplY3QoZSlcbiAgICAgIH0sIHRoaXMuQ09OTkVDVF9USU1FT1VUKSAvLyB0aW1lb3V0IGZvciBjb25uZWN0IHdlYnNvY2tldFxuXG4gICAgICB0aGlzLl93ZWJzb2NrZXQub25vcGVuID0gKGUpID0+IHtcbiAgICAgICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ2Nvbm5lY3RSeFNvY2tldCgpIFByb21pc2UoKSBXZWJTb2NrZXQub25PcGVuKCkgcmVzb2x2ZSgpJylcbiAgICAgICAgdGhpcy5zb2NrZXRVcGRhdGVTdGF0ZSgpXG4gICAgICAgIGNsZWFyVGltZW91dChpZClcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIEhhbmRsZSB0aGUgcGF5bG9hZFxuICAgIHRoaXMuX3dlYnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLnNvY2tldE9uTWVzc2FnZS5iaW5kKHRoaXMpXG4gICAgLy8gRGVhbCB0aGUgZXZlbnRcbiAgICB0aGlzLl93ZWJzb2NrZXQub25lcnJvciAgID0gdGhpcy5zb2NrZXRPbkVycm9yLmJpbmQodGhpcylcbiAgICB0aGlzLl93ZWJzb2NrZXQub25jbG9zZSAgID0gdGhpcy5zb2NrZXRPbkNsb3NlLmJpbmQodGhpcylcblxuICAgIHJldHVybiBvbk9wZW5Qcm9taXNlXG4gIH1cblxuICBwcml2YXRlIGVuZFBvaW50KCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5FTkRQT0lOVCArIHRoaXMuX3Rva2VuXG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ2VuZFBvaW50KCkgPT4gJXMnLCB1cmwpXG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBTdGF0ZSBFdmVudCBMaXN0ZW5lcnNcbiAgICpcbiAgICovXG4gIHByaXZhdGUgc3RhdGVPbk9wZW4oKSB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ3N0YXRlT25PcGVuKCknKVxuXG4gICAgdGhpcy5zb2NrZXRTZW5kQnVmZmVyKClcbiAgICB0aGlzLnJwY1VwZGF0ZSgnZnJvbSBzdGF0ZU9uT3BlbigpJylcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogSW8gUlBDIE1ldGhvZHNcbiAgICpcbiAgICovXG4gIGFzeW5jIHJwY0RpbmcocGF5bG9hZDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKCdJb1NlcnZpY2UnLCAnZGluZyglcyknLCBwYXlsb2FkKVxuXG4gICAgY29uc3QgZTogSW9FdmVudCA9IHtcbiAgICAgIG5hbWU6ICdkaW5nJyxcbiAgICAgIHBheWxvYWQsXG4gICAgfVxuICAgIHRoaXMuZXZlbnQubmV4dChlKVxuICAgIC8vIFRPRE86IGdldCB0aGUgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBhc3luYyBycGNVcGRhdGUocGF5bG9hZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5ldmVudC5uZXh0KHtcbiAgICAgIG5hbWU6ICAgICAndXBkYXRlJyxcbiAgICAgIHBheWxvYWQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogU29ja2V0IEFjdGlvbnNcbiAgICpcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc29ja2V0Q2xvc2UoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ3NvY2tldENsb3NlKCknKVxuXG4gICAgaWYgKCF0aGlzLl93ZWJzb2NrZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gd2Vic29ja2V0JylcbiAgICB9XG5cbiAgICB0aGlzLl93ZWJzb2NrZXQuY2xvc2UoY29kZSwgcmVhc29uKVxuICAgIHRoaXMuc29ja2V0VXBkYXRlU3RhdGUoKVxuXG4gICAgY29uc3QgZnV0dXJlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLnJlYWR5U3RhdGUucGlwZShcbiAgICAgICAgZmlsdGVyKHMgPT4gcyA9PT0gUmVhZHlTdGF0ZS5DTE9TRUQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXNvbHZlKVxuICAgIH0pXG4gICAgYXdhaXQgZnV0dXJlXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHByaXZhdGUgc29ja2V0U2VuZChpb0V2ZW50OiBJb0V2ZW50KSB7XG4gICAgdGhpcy5sb2cuc2lsbHkoJ0lvU2VydmljZScsICdzb2NrZXRTZW5kKHtuYW1lOiVzLCBwYXlsb2FkOiVzfSknLCBpb0V2ZW50Lm5hbWUsIGlvRXZlbnQucGF5bG9hZClcblxuICAgIGlmICghdGhpcy5fd2Vic29ja2V0KSB7XG4gICAgICB0aGlzLmxvZy5zaWxseSgnSW9TZXJ2aWNlJywgJ3NvY2tldFNlbmQoKSBubyBfd2Vic29ja2V0JylcbiAgICB9XG5cbiAgICBjb25zdCBzdHJFdnQgPSBKU09OLnN0cmluZ2lmeShpb0V2ZW50KVxuICAgIHRoaXMuc2VuZEJ1ZmZlci5wdXNoKHN0ckV2dClcblxuICAgIC8vIFhYWCBjYW4gbW92ZSB0aGlzIHRvIG9uT3Blbj9cbiAgICB0aGlzLnNvY2tldFNlbmRCdWZmZXIoKVxuICB9XG5cbiAgcHJpdmF0ZSBzb2NrZXRTZW5kQnVmZmVyKCk6IHZvaWQge1xuICAgIHRoaXMubG9nLnNpbGx5KCdJb1NlcnZpY2UnLCAnc29ja2V0U2VuZEJ1ZmZlcigpIGxlbmd0aDolcycsIHRoaXMuc2VuZEJ1ZmZlci5sZW5ndGgpXG5cbiAgICBpZiAoIXRoaXMuX3dlYnNvY2tldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb2NrZXRTZW5kQnVmZmVyKCk6IG5vIF93ZWJzb2NrZXQnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl93ZWJzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ0lvU2VydmljZScsICdzb2NrZXRTZW5kQnVmZmVyKCkgcmVhZHlTdGF0ZSBpcyBub3QgT1BFTiwgc2VuZCBqb2IgZGVsYXllZC4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2hpbGUgKHRoaXMuc2VuZEJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGJ1ZiA9IHRoaXMuc2VuZEJ1ZmZlci5zaGlmdCgpXG4gICAgICB0aGlzLmxvZy5zaWxseSgnSW9TZXJ2aWNlJywgJ3NvY2tldFNlbmRCdWZmZXIoKSBzZW5kaW5nKCVzKScsIGJ1ZilcbiAgICAgIHRoaXMuX3dlYnNvY2tldC5zZW5kKGJ1ZilcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNvY2tldFVwZGF0ZVN0YXRlKCkge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdzb2NrZXRVcGRhdGVTdGF0ZSgpIGlzICVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkeVN0YXRlW3RoaXMuX3dlYnNvY2tldC5yZWFkeVN0YXRlXSxcbiAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgaWYgKCF0aGlzLl93ZWJzb2NrZXQpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdJb1NlcnZpY2UnLCAnc29ja2V0VXBkYXRlU3RhdGUoKSBubyBfd2Vic29ja2V0JylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3JlYWR5U3RhdGUubmV4dCh0aGlzLl93ZWJzb2NrZXQucmVhZHlTdGF0ZSlcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogU29ja2V0IEV2ZW50cyBMaXN0ZW5lclxuICAgKlxuICAgKi9cbiAgcHJpdmF0ZSBzb2NrZXRPbk1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZUV2ZW50KSB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ29uTWVzc2FnZSh7ZGF0YTogJXN9KScsIG1lc3NhZ2UuZGF0YSlcblxuICAgIGNvbnN0IGRhdGEgPSBtZXNzYWdlLmRhdGEgLy8gV2ViU29ja2V0IGRhdGFcblxuICAgIGNvbnN0IGlvRXZlbnQ6IElvRXZlbnQgPSB7XG4gICAgICBuYW1lOiAgICAgJ3JhdycsXG4gICAgICBwYXlsb2FkOiAgZGF0YSxcbiAgICB9IC8vIHRoaXMgaXMgZGVmYXVsdCBpbyBldmVudCBmb3IgdW5rbm93biBmb3JtYXQgbWVzc2FnZVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSlcbiAgICAgIGlvRXZlbnQubmFtZSA9IG9iai5uYW1lXG4gICAgICBpb0V2ZW50LnBheWxvYWQgPSBvYmoucGF5bG9hZFxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ0lvU2VydmljZScsICdvbk1lc3NhZ2UgcGFyc2UgbWVzc2FnZSBmYWlsLiBzYXZlIGFzIFJBVycpXG4gICAgfVxuXG4gICAgdGhpcy5tdE9ic2VydmVyLm5leHQoaW9FdmVudClcbiAgfVxuXG4gIHByaXZhdGUgc29ja2V0T25FcnJvcihldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmxvZy5zaWxseSgnSW9TZXJ2aWNlJywgJ3NvY2tldE9uRXJyb3IoJXMpJywgZXZlbnQpXG4gICAgLy8gdGhpcy5fd2Vic29ja2V0ID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DbG9zZUV2ZW50XG4gICAqIGNvZGU6IDEwMDZcdENMT1NFX0FCTk9STUFMXG4gICAqICAtIFJlc2VydmVkLiBVc2VkIHRvIGluZGljYXRlIHRoYXQgYSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWJub3JtYWxseVxuICAgKiAgICAodGhhdCBpcywgd2l0aCBubyBjbG9zZSBmcmFtZSBiZWluZyBzZW50KSB3aGVuIGEgc3RhdHVzIGNvZGUgaXMgZXhwZWN0ZWQuXG4gICAqL1xuICBwcml2YXRlIHNvY2tldE9uQ2xvc2UoY2xvc2VFdmVudDogQ2xvc2VFdmVudCkge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdzb2NrZXRPbkNsb3NlKHtjb2RlOiVzLCByZWFzb246JXMsIHJldHVyblZhbHVlOiVzfSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlRXZlbnQuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUV2ZW50LnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUV2ZW50LnJldHVyblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgdGhpcy5zb2NrZXRVcGRhdGVTdGF0ZSgpXG4gICAgLyoqXG4gICAgICogcmVjb25uZWN0IGluc2lkZSBvbkNsb3NlXG4gICAgICovXG4gICAgaWYgKHRoaXMuYXV0b1JlY29ubmVjdCkge1xuICAgICAgdGhpcy5zdGF0ZS5vbigncGVuZGluZycpXG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3RSeFNvY2tldCgpXG4gICAgICAgICAgdGhpcy5zdGF0ZS5vbih0cnVlKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignSW9TZXJ2aWNlJywgJ3NvY2tldE9uQ2xvc2UoKSBhdXRvUmVjb25uZWN0KCkgZXhjZXB0aW9uOiAlcycsIGUpXG4gICAgICAgICAgdGhpcy5zdGF0ZS5vZmYodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSwgMTAwMClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZS5vZmYodHJ1ZSlcbiAgICB9XG4gICAgdGhpcy5fd2Vic29ja2V0ID0gbnVsbFxuXG4gICAgaWYgKCFjbG9zZUV2ZW50Lndhc0NsZWFuKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCdJb1NlcnZpY2UnLCAnc29ja2V0T25DbG9zZSgpIGV2ZW50Lndhc0NsZWFuIEZBTFNFJylcbiAgICAgIC8vIFRPRE8gZW1pdCBlcnJvclxuICAgIH1cbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvYW5ndWxhci9hbmd1bGFyLyIsInNvdXJjZXMiOlsic3JjL3dlY2hhdHkvaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUVWLE9BQU8sR0FDUixNQUF3QixNQUFNLENBQUE7QUFDL0IsT0FBTyxFQUNMLE1BQU0sRUFDTixLQUFLLEdBQ04sTUFBd0IsZ0JBQWdCLENBQUE7QUFFekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFZLFFBQVEsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU8sY0FBYyxDQUFBO0FBc0IzQyxNQUFNLENBQU4sSUFBWSxVQUtYO0FBTEQsV0FBWSxVQUFVO0lBQ3BCLGtDQUFjLFNBQVMsQ0FBQyxNQUFNLFlBQUEsQ0FBQTtJQUM5QixtQ0FBYyxTQUFTLENBQUMsT0FBTyxhQUFBLENBQUE7SUFDL0Isc0NBQWMsU0FBUyxDQUFDLFVBQVUsZ0JBQUEsQ0FBQTtJQUNsQyxnQ0FBYyxTQUFTLENBQUMsSUFBSSxVQUFBLENBQUE7QUFDOUIsQ0FBQyxFQUxXLFVBQVUsS0FBVixVQUFVLFFBS3JCO0FBT0QsTUFBTSxPQUFPLFNBQVM7SUEwQnBCO1FBZlEsa0JBQWEsR0FBRyxJQUFJLENBQUE7UUFDcEIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUVkLG9CQUFlLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQSxDQUFDLGFBQWE7UUFDekMsYUFBUSxHQUFHLHlDQUF5QyxDQUFBO1FBQ3BELGFBQVEsR0FBRyxXQUFXLENBQUE7UUFNL0IsZUFBVSxHQUFhLEVBQUUsQ0FBQTtRQUsvQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQXZCRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3hDLENBQUM7SUF1QlksSUFBSTs7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFFdkMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7YUFDM0I7WUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO2dCQUNkLFVBQVUsRUFBRSxVQUFVLENBQUMsTUFBTTtnQkFDN0IsS0FBSyxFQUFNLElBQUk7YUFDaEIsQ0FBQTtZQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQWEsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3JFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFM0IsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtnQkFDNUIsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7YUFDMUI7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM5RCxNQUFNLENBQUMsQ0FBQTthQUNSO1lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxpQ0FBaUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDN0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFBO1lBQzlCLENBQUMsQ0FBQyxDQUFBO1lBQ0YsaURBQWlEO1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7WUFDekIsQ0FBQyxDQUFDLENBQUE7WUFFRixPQUFNO1FBQ1IsQ0FBQztLQUFBO0lBS00sS0FBSyxDQUFDLFFBQWlCO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbEQsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQTtZQUN0QixPQUFNO1NBQ1A7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDcEIsQ0FBQztJQUVLLEtBQUs7O1lBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUVuRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO2FBQ3pDO1lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUE7YUFDdkM7WUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTthQUNwQztZQUVELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBRXhCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO1lBRXpCLElBQUk7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7Z0JBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ3BCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFFMUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDckI7UUFDSCxDQUFDO0tBQUE7SUFFSyxJQUFJOztZQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUV2QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSw2QkFBNkIsQ0FBQyxDQUFBO2dCQUN6RCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQTtpQkFDM0M7Z0JBQ0QsT0FBTTthQUNQO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7WUFFekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUE7WUFFMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7YUFDaEM7WUFFRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUE7WUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFcEIsT0FBTTtRQUNSLENBQUM7S0FBQTtJQUVZLE9BQU87O1lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUMxQyxJQUFJO2dCQUNGLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO2dCQUNqQixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTthQUNuQjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVELE1BQU0sQ0FBQyxDQUFBO2FBQ1I7WUFDRCxPQUFNO1FBQ1IsQ0FBQztLQUFBO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtRQUVsRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQTtRQUVqRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDbEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQ3pCO2FBQ0UsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNXLFlBQVk7O1lBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO1lBRS9DLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUE7YUFDNUM7WUFFRCxrRUFBa0U7WUFDbEUsSUFBSSxDQUFDLFVBQVUsR0FBRztnQkFDaEIsSUFBSSxFQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDcEMsS0FBSyxFQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDckMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzthQUN0QyxDQUFBO1lBRUQsb0VBQW9FO1lBQ3BFLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsUUFBMkIsRUFBRSxFQUFFO2dCQUNoRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsb0NBQW9DLENBQUMsQ0FBQTtnQkFDbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUE7Z0JBRTFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDcEMsQ0FBQyxDQUFDLENBQUE7WUFFRixtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFeEUsQ0FBQztLQUFBO0lBRWEsZUFBZTs7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUE7WUFFbEQsbUNBQW1DO1lBQ25DLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO2FBQzNDO1lBRUQscUNBQXFDO1lBQ3JDLHVDQUF1QztZQUN2QywyQkFBMkI7WUFDM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUE7YUFDdkM7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTthQUM5QztZQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUMvRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtZQUV4QixNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLDZCQUE2QixDQUFDLENBQUE7Z0JBRTVELE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO29CQUN0QixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQ0FBaUM7MEJBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FDMUMsQ0FBQTtvQkFDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNYLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUEsQ0FBQyxnQ0FBZ0M7Z0JBRXpELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSwwREFBMEQsQ0FBQyxDQUFBO29CQUN6RixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtvQkFDeEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO29CQUNoQixPQUFPLEVBQUUsQ0FBQTtnQkFDWCxDQUFDLENBQUE7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUVGLHFCQUFxQjtZQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMzRCxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFekQsT0FBTyxhQUFhLENBQUE7UUFDdEIsQ0FBQztLQUFBO0lBRU8sUUFBUTtRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDdEQsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFdBQVc7UUFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBRTlDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNHLE9BQU8sQ0FBQyxPQUFZOztZQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBRWxELE1BQU0sQ0FBQyxHQUFZO2dCQUNqQixJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPO2FBQ1IsQ0FBQTtZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xCLDZCQUE2QjtRQUMvQixDQUFDO0tBQUE7SUFFSyxTQUFTLENBQUMsT0FBWTs7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsSUFBSSxFQUFNLFFBQVE7Z0JBQ2xCLE9BQU87YUFDUixDQUFDLENBQUE7UUFDSixDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ1csV0FBVyxDQUFDLElBQWEsRUFBRSxNQUFlOztZQUN0RCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUE7WUFFOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7YUFDaEM7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFFeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNsQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUNyQztxQkFDQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckIsQ0FBQyxDQUFDLENBQUE7WUFDRixNQUFNLE1BQU0sQ0FBQTtZQUVaLE9BQU07UUFDUixDQUFDO0tBQUE7SUFFTyxVQUFVLENBQUMsT0FBZ0I7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLG1DQUFtQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRS9GLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSw0QkFBNEIsQ0FBQyxDQUFBO1NBQzFEO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU1QiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7SUFDekIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUVuRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUE7U0FDckQ7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7WUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLDhEQUE4RCxDQUFDLENBQUE7WUFDMUYsT0FBTTtTQUNQO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUNsRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUMxQjtJQUNILENBQUM7SUFFTyxpQkFBaUI7O1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSwyQkFBMkIsRUFDdkQsVUFBVSxPQUFDLElBQUksQ0FBQyxVQUFVLDBDQUFFLFVBQVUsQ0FBQyxDQUN4QyxDQUFBO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLG1DQUFtQyxDQUFDLENBQUE7WUFDaEUsT0FBTTtTQUNQO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGVBQWUsQ0FBQyxPQUFxQjtRQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXBFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUEsQ0FBQyxpQkFBaUI7UUFFM0MsTUFBTSxPQUFPLEdBQVk7WUFDdkIsSUFBSSxFQUFNLEtBQUs7WUFDZixPQUFPLEVBQUcsSUFBSTtTQUNmLENBQUEsQ0FBQyxzREFBc0Q7UUFFeEQsSUFBSTtZQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDNUIsT0FBTyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFBO1lBQ3ZCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQTtTQUM5QjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLDJDQUEyQyxDQUFDLENBQUE7U0FDeEU7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQVk7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3ZELHlCQUF5QjtJQUMzQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxhQUFhLENBQUMsVUFBc0I7UUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLHFEQUFxRCxFQUNyRCxVQUFVLENBQUMsSUFBSSxFQUNmLFVBQVUsQ0FBQyxNQUFNLEVBQ2pCLFVBQVUsQ0FBQyxXQUFXLENBQ25DLENBQUE7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDeEI7O1dBRUc7UUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDeEIsVUFBVSxDQUFDLEdBQVMsRUFBRTtnQkFDcEIsSUFBSTtvQkFDRixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtvQkFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7aUJBQ3BCO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSwrQ0FBK0MsRUFBRSxDQUFDLENBQUMsQ0FBQTtvQkFDOUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFBLEVBQUUsSUFBSSxDQUFDLENBQUE7U0FDVDthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDckI7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtRQUV0QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsc0NBQXNDLENBQUMsQ0FBQTtZQUNsRSxrQkFBa0I7U0FDbkI7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWRVJTSU9OIH0gICAgICBmcm9tICcuLi9jb25maWcnXG5cbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgT2JzZXJ2ZXIsXG4gIFN1YmplY3QsXG59ICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnXG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIHNoYXJlLFxufSAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgQnJvbG9nIH0gICAgICAgZnJvbSAnYnJvbG9nJ1xuaW1wb3J0IHsgU3RhdGVTd2l0Y2ggfSAgZnJvbSAnc3RhdGUtc3dpdGNoJ1xuXG5leHBvcnQgdHlwZSBXZWNoYXR5RXZlbnROYW1lID1cbiAgICAnc2NhbidcbiAgfCAnbG9naW4nIHwgJ2xvZ291dCdcbiAgfCAncmVzZXQnIHwgJ3NodXRkb3duJ1xuICB8ICdkaW5nJyAgfCAnZG9uZydcbiAgfCAnbWVzc2FnZSdcbiAgfCAnaGVhcnRiZWF0J1xuICB8ICd1cGRhdGUnXG4gIHwgJ2Vycm9yJ1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJFdmVudE5hbWUgPSAnc3lzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJ2JvdGllJ1xuXG5leHBvcnQgdHlwZSBJb0V2ZW50TmFtZSA9ICdyYXcnIHwgV2VjaGF0eUV2ZW50TmFtZSB8IFNlcnZlckV2ZW50TmFtZVxuXG5leHBvcnQgaW50ZXJmYWNlIElvRXZlbnQge1xuICBuYW1lOiBJb0V2ZW50TmFtZSxcbiAgcGF5bG9hZDogYW55LFxufVxuXG5leHBvcnQgZW51bSBSZWFkeVN0YXRlIHtcbiAgQ0xPU0VEICAgICAgPSBXZWJTb2NrZXQuQ0xPU0VELFxuICBDTE9TSU5HICAgICA9IFdlYlNvY2tldC5DTE9TSU5HLFxuICBDT05ORUNUSU5HICA9IFdlYlNvY2tldC5DT05ORUNUSU5HLFxuICBPUEVOICAgICAgICA9IFdlYlNvY2tldC5PUEVOLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElvU2VydmljZVNuYXBzaG90IHtcbiAgcmVhZHlTdGF0ZTogUmVhZHlTdGF0ZVxuICBldmVudDogICAgIElvRXZlbnRcbn1cblxuZXhwb3J0IGNsYXNzIElvU2VydmljZSB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFjdGl2ZVgvcnhqcy9ibG9iL21hc3Rlci9zcmMvb2JzZXJ2YWJsZS9kb20vV2ViU29ja2V0U3ViamVjdC50c1xuICBwdWJsaWMgZXZlbnQ6IFN1YmplY3Q8SW9FdmVudD5cblxuICBwcml2YXRlIF9yZWFkeVN0YXRlOiBCZWhhdmlvclN1YmplY3Q8UmVhZHlTdGF0ZT5cbiAgcHVibGljIGdldCByZWFkeVN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkeVN0YXRlLmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuICBwdWJsaWMgc25hcHNob3Q6IElvU2VydmljZVNuYXBzaG90XG5cbiAgcHJpdmF0ZSBhdXRvUmVjb25uZWN0ID0gdHJ1ZVxuICBwcml2YXRlIGxvZyA9IEJyb2xvZy5pbnN0YW5jZSgpXG5cbiAgcHJpdmF0ZSByZWFkb25seSBDT05ORUNUX1RJTUVPVVQgPSAxMCAqIDEwMDAgLy8gMTAgc2Vjb25kc1xuICBwcml2YXRlIHJlYWRvbmx5IEVORFBPSU5UID0gJ3dzczovL2FwaS5jaGF0aWUuaW8vdjAvd2Vic29ja2V0L3Rva2VuLydcbiAgcHJpdmF0ZSByZWFkb25seSBQUk9UT0NPTCA9ICd3ZWJ8MC4wLjEnXG5cbiAgcHJpdmF0ZSBfdG9rZW46IHN0cmluZyAvLyBGSVhNRSBwb3NzaWJsZSBiZSBgdW5kZWZpbmVkYFxuICBwcml2YXRlIF93ZWJzb2NrZXQ6IFdlYlNvY2tldCB8IG51bGxcbiAgcHJpdmF0ZSBtb09ic2VydmVyOiBPYnNlcnZlcjxJb0V2ZW50PiAvLyBNb2JpbGUgT3JpZ2luYXRlZC4gbW9PYnNlcnZlci5uZXh0KCkgbWVhbnMgbW9iaWxlIGlzIHNlbmRpbmdcbiAgcHJpdmF0ZSBtdE9ic2VydmVyOiBPYnNlcnZlcjxJb0V2ZW50PiAvLyBNb2JpbGUgVGVybWluYXRlZC4gbXRPYnNlcnZlci5uZXh0KCkgbWVhbnMgbW9iaWxlIGlzIHJlY2VpdmluZ1xuICBwcml2YXRlIHNlbmRCdWZmZXI6IHN0cmluZ1tdID0gW11cblxuICBwcml2YXRlIHN0YXRlOiBTdGF0ZVN3aXRjaFxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdjb25zdHJ1Y3RvcigpJylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdpbml0KCknKVxuXG4gICAgaWYgKHRoaXMuc3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmUtaW5pdCcpXG4gICAgfVxuXG4gICAgdGhpcy5zbmFwc2hvdCA9IHtcbiAgICAgIHJlYWR5U3RhdGU6IFJlYWR5U3RhdGUuQ0xPU0VELFxuICAgICAgZXZlbnQ6ICAgICBudWxsLFxuICAgIH1cblxuICAgIHRoaXMuX3JlYWR5U3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlYWR5U3RhdGU+KFJlYWR5U3RhdGUuQ0xPU0VEKVxuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3RhdGVTd2l0Y2goJ0lvU2VydmljZScsIHRoaXMubG9nKVxuICAgIHRoaXMuc3RhdGUuc2V0TG9nKHRoaXMubG9nKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdFN0YXRlRGVhbGVyKClcbiAgICAgIGF3YWl0IHRoaXMuaW5pdFJ4U29ja2V0KClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5zaWxseSgnSW9TZXJ2aWNlJywgJ2luaXQoKSBleGNlcHRpb246ICVzJywgZS5tZXNzYWdlKVxuICAgICAgdGhyb3cgZVxuICAgIH1cblxuICAgIHRoaXMucmVhZHlTdGF0ZS5zdWJzY3JpYmUocyA9PiB7XG4gICAgICB0aGlzLmxvZy5zaWxseSgnSW9TZXJ2aWNlJywgJ2luaXQoKSByZWFkeVN0YXRlLnN1YnNjcmliZSglcyknLCBSZWFkeVN0YXRlW3NdKVxuICAgICAgdGhpcy5zbmFwc2hvdC5yZWFkeVN0YXRlID0gc1xuICAgIH0pXG4gICAgLy8gSU1QT1JUQU5UOiBzdWJzY3JpYmUgdG8gZXZlbnQgYW5kIG1ha2UgaXQgSE9UIVxuICAgIHRoaXMuZXZlbnQuc3Vic2NyaWJlKHMgPT4ge1xuICAgICAgdGhpcy5sb2cuc2lsbHkoJ0lvU2VydmljZScsICdpbml0KCkgZXZlbnQuc3Vic2NyaWJlKHtuYW1lOiVzfSknLCBzLm5hbWUpXG4gICAgICB0aGlzLnNuYXBzaG90LmV2ZW50ID0gc1xuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHB1YmxpYyB0b2tlbigpOiBzdHJpbmdcbiAgcHVibGljIHRva2VuKG5ld1Rva2VuOiBzdHJpbmcpOiB2b2lkXG5cbiAgcHVibGljIHRva2VuKG5ld1Rva2VuPzogc3RyaW5nKTogc3RyaW5nIHwgdm9pZCB7XG4gICAgdGhpcy5sb2cuc2lsbHkoJ0lvU2VydmljZScsICd0b2tlbiglcyknLCBuZXdUb2tlbilcbiAgICBpZiAobmV3VG9rZW4pIHtcbiAgICAgIHRoaXMuX3Rva2VuID0gbmV3VG9rZW5cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdG9rZW5cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdzdGFydCgpIHdpdGggdG9rZW46JXMnLCB0aGlzLl90b2tlbilcblxuICAgIGlmICghdGhpcy5fdG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQoKSB3aXRob3V0IHRva2VuJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5vbigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXRlIGlzIGFscmVhZHkgT04nKVxuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5wZW5kaW5nKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RhdGUgaXMgcGVuZGluZycpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZS5vbigncGVuZGluZycpXG5cbiAgICB0aGlzLmF1dG9SZWNvbm5lY3QgPSB0cnVlXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb25uZWN0UnhTb2NrZXQoKVxuICAgICAgdGhpcy5zdGF0ZS5vbih0cnVlKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ0lvU2VydmljZScsICdzdGFydCgpIGZhaWxlZDolcycsIGUubWVzc2FnZSlcblxuICAgICAgdGhpcy5zdGF0ZS5vZmYodHJ1ZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdzdG9wKCknKVxuXG4gICAgaWYgKHRoaXMuc3RhdGUub2ZmKCkpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ0lvU2VydmljZScsICdzdG9wKCkgc3RhdGUgaXMgYWxyZWFkeSBvZmYnKVxuICAgICAgaWYgKHRoaXMuc3RhdGUucGVuZGluZygpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhdGUgcGVuZGluZygpIGlzIHRydWUnKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZS5vZmYoJ3BlbmRpbmcnKVxuXG4gICAgdGhpcy5hdXRvUmVjb25uZWN0ID0gZmFsc2VcblxuICAgIGlmICghdGhpcy5fd2Vic29ja2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHdlYnNvY2tldCcpXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zb2NrZXRDbG9zZSgxMDAwLCAnSW9TZXJ2aWNlLnN0b3AoKScpXG4gICAgdGhpcy5zdGF0ZS5vZmYodHJ1ZSlcblxuICAgIHJldHVyblxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ3Jlc3RhcnQoKScpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcCgpXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignSW9TZXJ2aWNlJywgJ3Jlc3RhcnQoKSBlcnJvcjolcycsIGUubWVzc2FnZSlcbiAgICAgIHRocm93IGVcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICBwcml2YXRlIGluaXRTdGF0ZURlYWxlcigpIHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKCdJb1NlcnZpY2UnLCAnaW5pdFN0YXRlRGVhbGVyKCknKVxuXG4gICAgY29uc3QgaXNSZWFkeVN0YXRlT3BlbiA9IChzOiBSZWFkeVN0YXRlKSA9PiBzID09PSBSZWFkeVN0YXRlLk9QRU5cblxuICAgIHRoaXMucmVhZHlTdGF0ZS5waXBlKFxuICAgICAgZmlsdGVyKGlzUmVhZHlTdGF0ZU9wZW4pLFxuICAgIClcbiAgICAgIC5zdWJzY3JpYmUob3BlbiA9PiB0aGlzLnN0YXRlT25PcGVuKCkpXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHN1YmplY3QgZnJvbSB0aGUgc3BlY2lmaWVkIG9ic2VydmVyIGFuZCBvYnNlcnZhYmxlLlxuICAgKiAgLSBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmUtRXh0ZW5zaW9ucy9SeEpTL2Jsb2IvbWFzdGVyL2RvYy9hcGkvc3ViamVjdHMvc3ViamVjdC5tZFxuICAgKiBDcmVhdGUgYW4gUnguU3ViamVjdCB1c2luZyBTdWJqZWN0LmNyZWF0ZSB0aGF0IGFsbG93cyBvbk5leHQgd2l0aG91dCBzdWJzY3JpcHRpb25cbiAgICogICBBIHNvY2tldCBpbXBsZW1lbnRhdGlvbiAoZXhhbXBsZSwgZG9uJ3QgdXNlKVxuICAgKiAgLSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zNDg2MjI4Ni8xMTIzOTU1XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGluaXRSeFNvY2tldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKCdJb1NlcnZpY2UnLCAnaW5pdFJ4U29ja2V0KCknKVxuXG4gICAgaWYgKHRoaXMuZXZlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmUtaW5pdCBpcyBub3QgcGVybWl0dGVkJylcbiAgICB9XG5cbiAgICAvLyAxLiBNb2JpbGUgT3JpZ2luYXRlZC4gbW9PYnNlcnZlci5uZXh0KCkgbWVhbnMgbW9iaWxlIGlzIHNlbmRpbmdcbiAgICB0aGlzLm1vT2JzZXJ2ZXIgPSB7XG4gICAgICBuZXh0OiAgICAgdGhpcy5zb2NrZXRTZW5kLmJpbmQodGhpcyksXG4gICAgICBlcnJvcjogICAgdGhpcy5zb2NrZXRDbG9zZS5iaW5kKHRoaXMpLFxuICAgICAgY29tcGxldGU6IHRoaXMuc29ja2V0Q2xvc2UuYmluZCh0aGlzKSxcbiAgICB9XG5cbiAgICAvLyAyLiBNb2JpbGUgVGVybWluYXRlZC4gbXRPYnNlcnZlci5uZXh0KCkgbWVhbnMgbW9iaWxlIGlzIHJlY2VpdmluZ1xuICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPElvRXZlbnQ+KSA9PiB7XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKCdJb1NlcnZpY2UnLCAnaW5pdFJ4U29ja2V0KCkgT2JzZXJ2YWJsZS5jcmVhdGUoKScpXG4gICAgICB0aGlzLm10T2JzZXJ2ZXIgPSBvYnNlcnZlclxuXG4gICAgICByZXR1cm4gdGhpcy5zb2NrZXRDbG9zZS5iaW5kKHRoaXMpXG4gICAgfSlcblxuICAgIC8vIDMuIFN1YmplY3QgZm9yIE1PICYgTVQgT2JzZXJ2ZXJzXG4gICAgdGhpcy5ldmVudCA9IFN1YmplY3QuY3JlYXRlKHRoaXMubW9PYnNlcnZlciwgb2JzZXJ2YWJsZS5waXBlKHNoYXJlKCkpKVxuXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbm5lY3RSeFNvY2tldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKCdJb1NlcnZpY2UnLCAnY29ubmVjdFJ4U29ja2V0KCknKVxuXG4gICAgLy8gRklYTUU6IGNoZWNrICYgY2xvc2UgdGhlIG9sZCBvbmVcbiAgICBpZiAodGhpcy5fd2Vic29ja2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FscmVhZHkgaGFzIGEgd2Vic29ja2V0JylcbiAgICB9XG5cbiAgICAvLyBpZiAodGhpcy5zdGF0ZS50YXJnZXQoKSAhPT0gJ29wZW4nXG4gICAgLy8gICB8fCB0aGlzLnN0YXRlLmN1cnJlbnQoKSAhPT0gJ29wZW4nXG4gICAgLy8gICB8fCB0aGlzLnN0YXRlLnN0YWJsZSgpXG4gICAgaWYgKHRoaXMuc3RhdGUub2ZmKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3dpdGNoIHN0YXRlIGlzIG9mZicpXG4gICAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZS5wZW5kaW5nKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3dpdGNoIHN0YXRlIGlzIGFscmVhZHkgT04nKVxuICAgIH1cblxuICAgIHRoaXMuX3dlYnNvY2tldCA9IG5ldyBXZWJTb2NrZXQodGhpcy5lbmRQb2ludCgpLCB0aGlzLlBST1RPQ09MKVxuICAgIHRoaXMuc29ja2V0VXBkYXRlU3RhdGUoKVxuXG4gICAgY29uc3Qgb25PcGVuUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdjb25uZWN0UnhTb2NrZXQoKSBQcm9taXNlKCknKVxuXG4gICAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl93ZWJzb2NrZXQgPSBudWxsXG4gICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoJ3J4U29ja2V0IGNvbm5lY3QgdGltZW91dCBhZnRlciAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBNYXRoLnJvdW5kKHRoaXMuQ09OTkVDVF9USU1FT1VUIC8gMTAwMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgcmVqZWN0KGUpXG4gICAgICB9LCB0aGlzLkNPTk5FQ1RfVElNRU9VVCkgLy8gdGltZW91dCBmb3IgY29ubmVjdCB3ZWJzb2NrZXRcblxuICAgICAgdGhpcy5fd2Vic29ja2V0Lm9ub3BlbiA9IChlKSA9PiB7XG4gICAgICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdjb25uZWN0UnhTb2NrZXQoKSBQcm9taXNlKCkgV2ViU29ja2V0Lm9uT3BlbigpIHJlc29sdmUoKScpXG4gICAgICAgIHRoaXMuc29ja2V0VXBkYXRlU3RhdGUoKVxuICAgICAgICBjbGVhclRpbWVvdXQoaWQpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBIYW5kbGUgdGhlIHBheWxvYWRcbiAgICB0aGlzLl93ZWJzb2NrZXQub25tZXNzYWdlID0gdGhpcy5zb2NrZXRPbk1lc3NhZ2UuYmluZCh0aGlzKVxuICAgIC8vIERlYWwgdGhlIGV2ZW50XG4gICAgdGhpcy5fd2Vic29ja2V0Lm9uZXJyb3IgICA9IHRoaXMuc29ja2V0T25FcnJvci5iaW5kKHRoaXMpXG4gICAgdGhpcy5fd2Vic29ja2V0Lm9uY2xvc2UgICA9IHRoaXMuc29ja2V0T25DbG9zZS5iaW5kKHRoaXMpXG5cbiAgICByZXR1cm4gb25PcGVuUHJvbWlzZVxuICB9XG5cbiAgcHJpdmF0ZSBlbmRQb2ludCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuRU5EUE9JTlQgKyB0aGlzLl90b2tlblxuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdlbmRQb2ludCgpID0+ICVzJywgdXJsKVxuICAgIHJldHVybiB1cmxcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogU3RhdGUgRXZlbnQgTGlzdGVuZXJzXG4gICAqXG4gICAqL1xuICBwcml2YXRlIHN0YXRlT25PcGVuKCkge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdzdGF0ZU9uT3BlbigpJylcblxuICAgIHRoaXMuc29ja2V0U2VuZEJ1ZmZlcigpXG4gICAgdGhpcy5ycGNVcGRhdGUoJ2Zyb20gc3RhdGVPbk9wZW4oKScpXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqXG4gICAqIElvIFJQQyBNZXRob2RzXG4gICAqXG4gICAqL1xuICBhc3luYyBycGNEaW5nKHBheWxvYWQ6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ2RpbmcoJXMpJywgcGF5bG9hZClcblxuICAgIGNvbnN0IGU6IElvRXZlbnQgPSB7XG4gICAgICBuYW1lOiAnZGluZycsXG4gICAgICBwYXlsb2FkLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50Lm5leHQoZSlcbiAgICAvLyBUT0RPOiBnZXQgdGhlIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgYXN5bmMgcnBjVXBkYXRlKHBheWxvYWQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZXZlbnQubmV4dCh7XG4gICAgICBuYW1lOiAgICAgJ3VwZGF0ZScsXG4gICAgICBwYXlsb2FkLFxuICAgIH0pXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqXG4gICAqIFNvY2tldCBBY3Rpb25zXG4gICAqXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNvY2tldENsb3NlKGNvZGU/OiBudW1iZXIsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdzb2NrZXRDbG9zZSgpJylcblxuICAgIGlmICghdGhpcy5fd2Vic29ja2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHdlYnNvY2tldCcpXG4gICAgfVxuXG4gICAgdGhpcy5fd2Vic29ja2V0LmNsb3NlKGNvZGUsIHJlYXNvbilcbiAgICB0aGlzLnNvY2tldFVwZGF0ZVN0YXRlKClcblxuICAgIGNvbnN0IGZ1dHVyZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5yZWFkeVN0YXRlLnBpcGUoXG4gICAgICAgIGZpbHRlcihzID0+IHMgPT09IFJlYWR5U3RhdGUuQ0xPU0VEKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzb2x2ZSlcbiAgICB9KVxuICAgIGF3YWl0IGZ1dHVyZVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBwcml2YXRlIHNvY2tldFNlbmQoaW9FdmVudDogSW9FdmVudCkge1xuICAgIHRoaXMubG9nLnNpbGx5KCdJb1NlcnZpY2UnLCAnc29ja2V0U2VuZCh7bmFtZTolcywgcGF5bG9hZDolc30pJywgaW9FdmVudC5uYW1lLCBpb0V2ZW50LnBheWxvYWQpXG5cbiAgICBpZiAoIXRoaXMuX3dlYnNvY2tldCkge1xuICAgICAgdGhpcy5sb2cuc2lsbHkoJ0lvU2VydmljZScsICdzb2NrZXRTZW5kKCkgbm8gX3dlYnNvY2tldCcpXG4gICAgfVxuXG4gICAgY29uc3Qgc3RyRXZ0ID0gSlNPTi5zdHJpbmdpZnkoaW9FdmVudClcbiAgICB0aGlzLnNlbmRCdWZmZXIucHVzaChzdHJFdnQpXG5cbiAgICAvLyBYWFggY2FuIG1vdmUgdGhpcyB0byBvbk9wZW4/XG4gICAgdGhpcy5zb2NrZXRTZW5kQnVmZmVyKClcbiAgfVxuXG4gIHByaXZhdGUgc29ja2V0U2VuZEJ1ZmZlcigpOiB2b2lkIHtcbiAgICB0aGlzLmxvZy5zaWxseSgnSW9TZXJ2aWNlJywgJ3NvY2tldFNlbmRCdWZmZXIoKSBsZW5ndGg6JXMnLCB0aGlzLnNlbmRCdWZmZXIubGVuZ3RoKVxuXG4gICAgaWYgKCF0aGlzLl93ZWJzb2NrZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc29ja2V0U2VuZEJ1ZmZlcigpOiBubyBfd2Vic29ja2V0JylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fd2Vic29ja2V0LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCdJb1NlcnZpY2UnLCAnc29ja2V0U2VuZEJ1ZmZlcigpIHJlYWR5U3RhdGUgaXMgbm90IE9QRU4sIHNlbmQgam9iIGRlbGF5ZWQuJylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHdoaWxlICh0aGlzLnNlbmRCdWZmZXIubGVuZ3RoKSB7XG4gICAgICBjb25zdCBidWYgPSB0aGlzLnNlbmRCdWZmZXIuc2hpZnQoKVxuICAgICAgdGhpcy5sb2cuc2lsbHkoJ0lvU2VydmljZScsICdzb2NrZXRTZW5kQnVmZmVyKCkgc2VuZGluZyglcyknLCBidWYpXG4gICAgICB0aGlzLl93ZWJzb2NrZXQuc2VuZChidWYpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzb2NrZXRVcGRhdGVTdGF0ZSgpIHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKCdJb1NlcnZpY2UnLCAnc29ja2V0VXBkYXRlU3RhdGUoKSBpcyAlcycsXG4gICAgICBSZWFkeVN0YXRlW3RoaXMuX3dlYnNvY2tldD8ucmVhZHlTdGF0ZV0sXG4gICAgKVxuXG4gICAgaWYgKCF0aGlzLl93ZWJzb2NrZXQpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdJb1NlcnZpY2UnLCAnc29ja2V0VXBkYXRlU3RhdGUoKSBubyBfd2Vic29ja2V0JylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3JlYWR5U3RhdGUubmV4dCh0aGlzLl93ZWJzb2NrZXQucmVhZHlTdGF0ZSlcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogU29ja2V0IEV2ZW50cyBMaXN0ZW5lclxuICAgKlxuICAgKi9cbiAgcHJpdmF0ZSBzb2NrZXRPbk1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZUV2ZW50KSB7XG4gICAgdGhpcy5sb2cudmVyYm9zZSgnSW9TZXJ2aWNlJywgJ29uTWVzc2FnZSh7ZGF0YTogJXN9KScsIG1lc3NhZ2UuZGF0YSlcblxuICAgIGNvbnN0IGRhdGEgPSBtZXNzYWdlLmRhdGEgLy8gV2ViU29ja2V0IGRhdGFcblxuICAgIGNvbnN0IGlvRXZlbnQ6IElvRXZlbnQgPSB7XG4gICAgICBuYW1lOiAgICAgJ3JhdycsXG4gICAgICBwYXlsb2FkOiAgZGF0YSxcbiAgICB9IC8vIHRoaXMgaXMgZGVmYXVsdCBpbyBldmVudCBmb3IgdW5rbm93biBmb3JtYXQgbWVzc2FnZVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSlcbiAgICAgIGlvRXZlbnQubmFtZSA9IG9iai5uYW1lXG4gICAgICBpb0V2ZW50LnBheWxvYWQgPSBvYmoucGF5bG9hZFxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ0lvU2VydmljZScsICdvbk1lc3NhZ2UgcGFyc2UgbWVzc2FnZSBmYWlsLiBzYXZlIGFzIFJBVycpXG4gICAgfVxuXG4gICAgdGhpcy5tdE9ic2VydmVyLm5leHQoaW9FdmVudClcbiAgfVxuXG4gIHByaXZhdGUgc29ja2V0T25FcnJvcihldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmxvZy5zaWxseSgnSW9TZXJ2aWNlJywgJ3NvY2tldE9uRXJyb3IoJXMpJywgZXZlbnQpXG4gICAgLy8gdGhpcy5fd2Vic29ja2V0ID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DbG9zZUV2ZW50XG4gICAqIGNvZGU6IDEwMDZcdENMT1NFX0FCTk9STUFMXG4gICAqICAtIFJlc2VydmVkLiBVc2VkIHRvIGluZGljYXRlIHRoYXQgYSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWJub3JtYWxseVxuICAgKiAgICAodGhhdCBpcywgd2l0aCBubyBjbG9zZSBmcmFtZSBiZWluZyBzZW50KSB3aGVuIGEgc3RhdHVzIGNvZGUgaXMgZXhwZWN0ZWQuXG4gICAqL1xuICBwcml2YXRlIHNvY2tldE9uQ2xvc2UoY2xvc2VFdmVudDogQ2xvc2VFdmVudCkge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ0lvU2VydmljZScsICdzb2NrZXRPbkNsb3NlKHtjb2RlOiVzLCByZWFzb246JXMsIHJldHVyblZhbHVlOiVzfSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlRXZlbnQuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUV2ZW50LnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUV2ZW50LnJldHVyblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgdGhpcy5zb2NrZXRVcGRhdGVTdGF0ZSgpXG4gICAgLyoqXG4gICAgICogcmVjb25uZWN0IGluc2lkZSBvbkNsb3NlXG4gICAgICovXG4gICAgaWYgKHRoaXMuYXV0b1JlY29ubmVjdCkge1xuICAgICAgdGhpcy5zdGF0ZS5vbigncGVuZGluZycpXG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3RSeFNvY2tldCgpXG4gICAgICAgICAgdGhpcy5zdGF0ZS5vbih0cnVlKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignSW9TZXJ2aWNlJywgJ3NvY2tldE9uQ2xvc2UoKSBhdXRvUmVjb25uZWN0KCkgZXhjZXB0aW9uOiAlcycsIGUpXG4gICAgICAgICAgdGhpcy5zdGF0ZS5vZmYodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSwgMTAwMClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZS5vZmYodHJ1ZSlcbiAgICB9XG4gICAgdGhpcy5fd2Vic29ja2V0ID0gbnVsbFxuXG4gICAgaWYgKCFjbG9zZUV2ZW50Lndhc0NsZWFuKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCdJb1NlcnZpY2UnLCAnc29ja2V0T25DbG9zZSgpIGV2ZW50Lndhc0NsZWFuIEZBTFNFJylcbiAgICAgIC8vIFRPRE8gZW1pdCBlcnJvclxuICAgIH1cbiAgfVxufVxuIl19 |
@@ -11,3 +11,3 @@ import { __awaiter } from 'tslib'; | ||
*/ | ||
const VERSION = '0.7.3'; | ||
const VERSION = '0.7.4'; | ||
@@ -295,3 +295,4 @@ var ReadyState; | ||
socketUpdateState() { | ||
this.log.verbose('IoService', 'socketUpdateState() is %s', ReadyState[this._websocket.readyState]); | ||
var _a; | ||
this.log.verbose('IoService', 'socketUpdateState() is %s', ReadyState[(_a = this._websocket) === null || _a === void 0 ? void 0 : _a.readyState]); | ||
if (!this._websocket) { | ||
@@ -298,0 +299,0 @@ this.log.error('IoService', 'socketUpdateState() no _websocket'); |
{ | ||
"$schema": "./node_modules/ng-packagr/package.schema.json", | ||
"name": "@chatie/angular", | ||
"version": "0.7.3", | ||
"version": "0.7.4", | ||
"description": "Wechaty Component NgModule", | ||
@@ -6,0 +6,0 @@ "license": "Apache-2.0", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
324312
2378