Socket
Socket
Sign inDemoInstall

ngx-captcha

Package Overview
Dependencies
Maintainers
1
Versions
68
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ngx-captcha - npm Package Compare versions

Comparing version 5.0.2 to 5.0.3

2

bundles/ngx-captcha.umd.min.js

@@ -1,2 +0,2 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/forms"),require("@angular/common")):"function"==typeof define&&define.amd?define("ngx-captcha",["exports","@angular/core","@angular/forms","@angular/common"],e):e(t["ngx-captcha"]={},t.ng.core,t.ng.forms,t.ng.common)}(this,function(t,a,e,n){"use strict";var r=function(){function t(t,e,n,r){this.renderer=t,this.zone=e,this.injector=n,this.scriptService=r,this.captchaElemPrefix="ngx_captcha_id_",this.type="image",this.tabIndex=0,this.success=new a.EventEmitter,this.load=new a.EventEmitter,this.ready=new a.EventEmitter,this.setupAfterLoad=!1,this.resetCaptchaAfterSuccess=!1,this.isLoaded=!1}return t.prototype.ngAfterViewInit=function(){this.control=this.injector.get(e.NgControl).control},t.prototype.ngOnChanges=function(t){t&&t.hl&&(t.hl.firstChange||t.hl.currentValue===t.hl.previousValue||this.scriptService.cleanup()),this.setupComponent()},t.prototype.getResponse=function(){return this.reCaptchaApi.getResponse(this.captchaId)},t.prototype.getCaptchaId=function(){return this.captchaId},t.prototype.resetCaptcha=function(){var t=this;this.zone.run(function(){t.onChange(undefined),t.onTouched(undefined)})},t.prototype.getCurrentResponse=function(){return this.currentResponse},t.prototype.reloadCaptcha=function(){this.setupComponent()},t.prototype.ensureCaptchaElem=function(t){var e=document.getElementById(t);if(!e)throw Error("Captcha element with id '"+t+"' was not found");this.captchaElem=e},t.prototype.renderReCaptcha=function(){this.captchaId=this.reCaptchaApi.render(this.captchaElemId,this.getCaptchaProperties()),this.ready.next()},t.prototype.handleCallback=function(t){var e=this;this.currentResponse=t,this.success.next(t),this.zone.run(function(){e.onChange(t),e.onTouched(t)}),this.resetCaptchaAfterSuccess&&this.resetCaptcha()},t.prototype.getPseudoUniqueNumber=function(){return(new Date).getUTCMilliseconds()+Math.floor(9999*Math.random())},t.prototype.setupComponent=function(){var e=this;this.captchaSpecificSetup(),this.createAndSetCaptchaElem(),this.scriptService.registerCaptchaScript("explicit",function(t){e.onloadCallback(t)},this.hl)},t.prototype.onloadCallback=function(t){if(this.reCaptchaApi=t,!this.reCaptchaApi)throw Error("ReCaptcha Api was not initialized correctly");this.isLoaded=!0,this.load.next(),this.renderReCaptcha(),this.setupAfterLoad&&(this.setupAfterLoad=!1,this.setupComponent())},t.prototype.generateNewElemId=function(){return this.captchaElemPrefix+this.getPseudoUniqueNumber()},t.prototype.createAndSetCaptchaElem=function(){if(this.captchaElemId=this.generateNewElemId(),!this.captchaElemId)throw Error("Captcha elem Id is not set");this.captchaWrapperElem.nativeElement.innerHTML="";var t=this.renderer.createElement("div");t.id=this.captchaElemId,this.renderer.appendChild(this.captchaWrapperElem.nativeElement,t),this.ensureCaptchaElem(this.captchaElemId)},t.prototype.writeValue=function(t){},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.propDecorators={siteKey:[{type:a.Input}],type:[{type:a.Input}],hl:[{type:a.Input}],tabIndex:[{type:a.Input}],success:[{type:a.Output}],load:[{type:a.Output}],ready:[{type:a.Output}],captchaWrapperElem:[{type:a.ViewChild,args:["captchaWrapperElem"]}],captchaScriptElem:[{type:a.ViewChild,args:["captchaScriptElem"]}]},t}(),i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function c(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var p={InvisibleReCaptcha:0,ReCaptcha2:1};p[p.InvisibleReCaptcha]="InvisibleReCaptcha",p[p.ReCaptcha2]="ReCaptcha2";var s=function(){function t(t){this.zone=t,this.windowGrecaptcha="grecaptcha",this.windowOnLoadCallbackProperty="ngx_captcha_onload_callback"}return t.prototype.registerCaptchaScript=function(t,e,n){var r=this;if(this.grecaptchaScriptLoaded())this.zone.run(function(){e(window[r.windowGrecaptcha])});else{window[this.windowOnLoadCallbackProperty]=function(){return r.zone.run(e.bind(r,window[r.windowGrecaptcha]))};var i=document.createElement("script");i.innerHTML="",i.src=this.getCaptchaScriptUrl(t,n),i.async=!0,i.defer=!0,document.getElementsByTagName("head")[0].appendChild(i)}},t.prototype.cleanup=function(){window[this.windowOnLoadCallbackProperty]=undefined,window[this.windowGrecaptcha]=undefined},t.prototype.grecaptchaScriptLoaded=function(){return!(!window[this.windowOnLoadCallbackProperty]||!window[this.windowGrecaptcha])},t.prototype.getLanguageParam=function(t){return t?"&hl="+t:""},t.prototype.getCaptchaScriptUrl=function(t,e){return"https://www.google.com/recaptcha/api.js?onload="+this.windowOnLoadCallbackProperty+"&render="+t+this.getLanguageParam(e)},t.decorators=[{type:a.Injectable}],t.ctorParameters=function(){return[{type:a.NgZone}]},t}(),o=function(o){function t(t,e,n,r){var i=o.call(this,t,e,n,r)||this;return i.renderer=t,i.zone=e,i.injector=n,i.scriptService=r,i.size="invisible",i.badge="bottomright",i.recaptchaType=p.InvisibleReCaptcha,i}return c(t,o),t.prototype.ngOnChanges=function(t){o.prototype.ngOnChanges.call(this,t)},t.prototype.execute=function(){this.reCaptchaApi.execute(this.captchaId)},t.prototype.captchaSpecificSetup=function(){},t.prototype.getCaptchaProperties=function(){var e=this;return{sitekey:this.siteKey,callback:function(t){return e.zone.run(function(){return e.handleCallback(t)})},badge:this.badge,type:this.type,tabindex:this.tabIndex,size:this.size}},t.decorators=[{type:a.Component,args:[{selector:"ngx-invisible-recaptcha",template:"\n <div #captchaWrapperElem></div>",providers:[{provide:e.NG_VALUE_ACCESSOR,useExisting:a.forwardRef(function(){return t}),multi:!0}]}]}],t.ctorParameters=function(){return[{type:a.Renderer2},{type:a.NgZone},{type:a.Injector},{type:s}]},t.propDecorators={badge:[{type:a.Input}],hl:[{type:a.Input}]},t}(r),h=function(o){function t(t,e,n,r){var i=o.call(this,t,e,n,r)||this;return i.renderer=t,i.zone=e,i.injector=n,i.scriptService=r,i.windowOnErrorCallbackProperty="ngx_captcha_error_callback",i.windowOnExpireCallbackProperty="ngx_captcha_expire_callback",i.theme="light",i.size="normal",i.expire=new a.EventEmitter,i.error=new a.EventEmitter,i.recaptchaType=p.ReCaptcha2,i}return c(t,o),t.prototype.ngOnChanges=function(t){o.prototype.ngOnChanges.call(this,t)},t.prototype.ngOnDestroy=function(){window[this.windowOnErrorCallbackProperty]={},window[this.windowOnExpireCallbackProperty]={}},t.prototype.captchaSpecificSetup=function(){this.registerCallbacks()},t.prototype.getCaptchaProperties=function(){var e=this;return{sitekey:this.siteKey,callback:function(t){return e.zone.run(function(){return e.handleCallback(t)})},"expired-callback":function(){return e.zone.run(function(){return e.handleExpireCallback()})},"error-callback":function(){return e.zone.run(function(){return e.handleErrorCallback()})},theme:this.theme,type:this.type,size:this.size,tabindex:this.tabIndex}},t.prototype.registerCallbacks=function(){window[this.windowOnErrorCallbackProperty]=this.handleErrorCallback.bind(this),window[this.windowOnExpireCallbackProperty]=this.handleExpireCallback.bind(this)},t.prototype.handleErrorCallback=function(){var t=this;this.zone.run(function(){t.onChange(undefined),t.onTouched(undefined)}),this.error.next()},t.prototype.handleExpireCallback=function(){this.expire.next(),this.resetCaptcha()},t.decorators=[{type:a.Component,args:[{selector:"ngx-recaptcha2",template:"\n <div #captchaWrapperElem></div>",providers:[{provide:e.NG_VALUE_ACCESSOR,useExisting:a.forwardRef(function(){return t}),multi:!0}]}]}],t.ctorParameters=function(){return[{type:a.Renderer2},{type:a.NgZone},{type:a.Injector},{type:s}]},t.propDecorators={theme:[{type:a.Input}],size:[{type:a.Input}],hl:[{type:a.Input}],expire:[{type:a.Output}],error:[{type:a.Output}]},t}(r),u=function(){function t(t){this.scriptService=t}return t.prototype.execute=function(e,n,r){this.scriptService.registerCaptchaScript(e,function(t){t.execute(e,{action:n}).then(function(t){r(t)})})},t.decorators=[{type:a.Injectable}],t.ctorParameters=function(){return[{type:s}]},t}(),l=function(){function t(){}return t.decorators=[{type:a.NgModule,args:[{imports:[n.CommonModule],declarations:[h,o],providers:[s,u],exports:[h,o]}]}],t}();t.BaseReCaptchaComponent=r,t.InvisibleReCaptchaComponent=o,t.ReCaptcha2Component=h,t.ReCaptchaType=p,t.ScriptService=s,t.ReCaptchaV3Service=u,t.NgxCaptchaModule=l,Object.defineProperty(t,"__esModule",{value:!0})});
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/forms"),require("@angular/common")):"function"==typeof define&&define.amd?define("ngx-captcha",["exports","@angular/core","@angular/forms","@angular/common"],e):e(t["ngx-captcha"]={},t.ng.core,t.ng.forms,t.ng.common)}(this,function(t,i,e,n){"use strict";var r=function(){function t(t,e,n,r){this.renderer=t,this.zone=e,this.injector=n,this.scriptService=r,this.captchaElemPrefix="ngx_captcha_id_",this.type="image",this.tabIndex=0,this.success=new i.EventEmitter,this.load=new i.EventEmitter,this.ready=new i.EventEmitter,this.setupAfterLoad=!1,this.resetCaptchaAfterSuccess=!1,this.isLoaded=!1}return t.prototype.ngAfterViewInit=function(){this.control=this.injector.get(e.NgControl).control},t.prototype.ngOnChanges=function(t){t&&t.hl&&(t.hl.firstChange||t.hl.currentValue===t.hl.previousValue||this.scriptService.cleanup()),this.setupComponent()},t.prototype.getResponse=function(){return this.reCaptchaApi.getResponse(this.captchaId)},t.prototype.getCaptchaId=function(){return this.captchaId},t.prototype.resetCaptcha=function(){var t=this;this.zone.run(function(){t.onChange(undefined),t.onTouched(undefined)})},t.prototype.getCurrentResponse=function(){return this.currentResponse},t.prototype.reloadCaptcha=function(){this.setupComponent()},t.prototype.ensureCaptchaElem=function(t){var e=document.getElementById(t);if(!e)throw Error("Captcha element with id '"+t+"' was not found");this.captchaElem=e},t.prototype.renderReCaptcha=function(){var t=this;this.zone.runOutsideAngular(function(){t.captchaId=t.reCaptchaApi.render(t.captchaElemId,t.getCaptchaProperties()),t.ready.next()})},t.prototype.handleCallback=function(t){var e=this;this.currentResponse=t,this.success.next(t),this.zone.run(function(){e.onChange(t),e.onTouched(t)}),this.resetCaptchaAfterSuccess&&this.resetCaptcha()},t.prototype.getPseudoUniqueNumber=function(){return(new Date).getUTCMilliseconds()+Math.floor(9999*Math.random())},t.prototype.setupComponent=function(){var e=this;this.captchaSpecificSetup(),this.createAndSetCaptchaElem(),this.scriptService.registerCaptchaScript("explicit",function(t){e.onloadCallback(t)},this.hl)},t.prototype.onloadCallback=function(t){if(this.reCaptchaApi=t,!this.reCaptchaApi)throw Error("ReCaptcha Api was not initialized correctly");this.isLoaded=!0,this.load.next(),this.renderReCaptcha(),this.setupAfterLoad&&(this.setupAfterLoad=!1,this.setupComponent())},t.prototype.generateNewElemId=function(){return this.captchaElemPrefix+this.getPseudoUniqueNumber()},t.prototype.createAndSetCaptchaElem=function(){if(this.captchaElemId=this.generateNewElemId(),!this.captchaElemId)throw Error("Captcha elem Id is not set");this.captchaWrapperElem.nativeElement.innerHTML="";var t=this.renderer.createElement("div");t.id=this.captchaElemId,this.renderer.appendChild(this.captchaWrapperElem.nativeElement,t),this.ensureCaptchaElem(this.captchaElemId)},t.prototype.writeValue=function(t){},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.propDecorators={siteKey:[{type:i.Input}],type:[{type:i.Input}],hl:[{type:i.Input}],tabIndex:[{type:i.Input}],success:[{type:i.Output}],load:[{type:i.Output}],ready:[{type:i.Output}],captchaWrapperElem:[{type:i.ViewChild,args:["captchaWrapperElem"]}],captchaScriptElem:[{type:i.ViewChild,args:["captchaScriptElem"]}]},t}(),o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function c(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var p={InvisibleReCaptcha:0,ReCaptcha2:1};p[p.InvisibleReCaptcha]="InvisibleReCaptcha",p[p.ReCaptcha2]="ReCaptcha2";var s=function(){function t(t){this.zone=t,this.windowGrecaptcha="grecaptcha",this.windowOnLoadCallbackProperty="ngx_captcha_onload_callback"}return t.prototype.registerCaptchaScript=function(t,e,n){var r=this;if(this.grecaptchaScriptLoaded())this.zone.run(function(){e(window[r.windowGrecaptcha])});else{window[this.windowOnLoadCallbackProperty]=function(){return r.zone.run(e.bind(r,window[r.windowGrecaptcha]))};var o=document.createElement("script");o.innerHTML="",o.src=this.getCaptchaScriptUrl(t,n),o.async=!0,o.defer=!0,document.getElementsByTagName("head")[0].appendChild(o)}},t.prototype.cleanup=function(){window[this.windowOnLoadCallbackProperty]=undefined,window[this.windowGrecaptcha]=undefined},t.prototype.grecaptchaScriptLoaded=function(){return!(!window[this.windowOnLoadCallbackProperty]||!window[this.windowGrecaptcha])},t.prototype.getLanguageParam=function(t){return t?"&hl="+t:""},t.prototype.getCaptchaScriptUrl=function(t,e){return"https://www.google.com/recaptcha/api.js?onload="+this.windowOnLoadCallbackProperty+"&render="+t+this.getLanguageParam(e)},t.decorators=[{type:i.Injectable}],t.ctorParameters=function(){return[{type:i.NgZone}]},t}(),a=function(a){function t(t,e,n,r){var o=a.call(this,t,e,n,r)||this;return o.renderer=t,o.zone=e,o.injector=n,o.scriptService=r,o.size="invisible",o.badge="bottomright",o.recaptchaType=p.InvisibleReCaptcha,o}return c(t,a),t.prototype.ngOnChanges=function(t){a.prototype.ngOnChanges.call(this,t)},t.prototype.execute=function(){this.reCaptchaApi.execute(this.captchaId)},t.prototype.captchaSpecificSetup=function(){},t.prototype.getCaptchaProperties=function(){var e=this;return{sitekey:this.siteKey,callback:function(t){return e.zone.run(function(){return e.handleCallback(t)})},badge:this.badge,type:this.type,tabindex:this.tabIndex,size:this.size}},t.decorators=[{type:i.Component,args:[{selector:"ngx-invisible-recaptcha",template:"\n <div #captchaWrapperElem></div>",providers:[{provide:e.NG_VALUE_ACCESSOR,useExisting:i.forwardRef(function(){return t}),multi:!0}]}]}],t.ctorParameters=function(){return[{type:i.Renderer2},{type:i.NgZone},{type:i.Injector},{type:s}]},t.propDecorators={badge:[{type:i.Input}],hl:[{type:i.Input}]},t}(r),h=function(a){function t(t,e,n,r){var o=a.call(this,t,e,n,r)||this;return o.renderer=t,o.zone=e,o.injector=n,o.scriptService=r,o.windowOnErrorCallbackProperty="ngx_captcha_error_callback",o.windowOnExpireCallbackProperty="ngx_captcha_expire_callback",o.theme="light",o.size="normal",o.expire=new i.EventEmitter,o.error=new i.EventEmitter,o.recaptchaType=p.ReCaptcha2,o}return c(t,a),t.prototype.ngOnChanges=function(t){a.prototype.ngOnChanges.call(this,t)},t.prototype.ngOnDestroy=function(){window[this.windowOnErrorCallbackProperty]={},window[this.windowOnExpireCallbackProperty]={}},t.prototype.captchaSpecificSetup=function(){this.registerCallbacks()},t.prototype.getCaptchaProperties=function(){var e=this;return{sitekey:this.siteKey,callback:function(t){return e.zone.run(function(){return e.handleCallback(t)})},"expired-callback":function(){return e.zone.run(function(){return e.handleExpireCallback()})},"error-callback":function(){return e.zone.run(function(){return e.handleErrorCallback()})},theme:this.theme,type:this.type,size:this.size,tabindex:this.tabIndex}},t.prototype.registerCallbacks=function(){window[this.windowOnErrorCallbackProperty]=this.handleErrorCallback.bind(this),window[this.windowOnExpireCallbackProperty]=this.handleExpireCallback.bind(this)},t.prototype.handleErrorCallback=function(){var t=this;this.zone.run(function(){t.onChange(undefined),t.onTouched(undefined)}),this.error.next()},t.prototype.handleExpireCallback=function(){this.expire.next(),this.resetCaptcha()},t.decorators=[{type:i.Component,args:[{selector:"ngx-recaptcha2",template:"\n <div #captchaWrapperElem></div>",providers:[{provide:e.NG_VALUE_ACCESSOR,useExisting:i.forwardRef(function(){return t}),multi:!0}]}]}],t.ctorParameters=function(){return[{type:i.Renderer2},{type:i.NgZone},{type:i.Injector},{type:s}]},t.propDecorators={theme:[{type:i.Input}],size:[{type:i.Input}],hl:[{type:i.Input}],expire:[{type:i.Output}],error:[{type:i.Output}]},t}(r),u=function(){function t(t){this.scriptService=t}return t.prototype.execute=function(e,n,r){this.scriptService.registerCaptchaScript(e,function(t){t.execute(e,{action:n}).then(function(t){r(t)})})},t.decorators=[{type:i.Injectable}],t.ctorParameters=function(){return[{type:s}]},t}(),l=function(){function t(){}return t.decorators=[{type:i.NgModule,args:[{imports:[n.CommonModule],declarations:[h,a],providers:[s,u],exports:[h,a]}]}],t}();t.BaseReCaptchaComponent=r,t.InvisibleReCaptchaComponent=a,t.ReCaptcha2Component=h,t.ReCaptchaType=p,t.ScriptService=s,t.ReCaptchaV3Service=u,t.NgxCaptchaModule=l,Object.defineProperty(t,"__esModule",{value:!0})});
//# sourceMappingURL=ngx-captcha.umd.min.js.map

@@ -136,4 +136,8 @@ /**

renderReCaptcha() {
this.captchaId = this.reCaptchaApi.render(this.captchaElemId, this.getCaptchaProperties());
this.ready.next();
// run outside angular zone due to timeout issues when testing
// details: https://github.com/Enngage/ngx-captcha/issues/26
this.zone.runOutsideAngular(() => {
this.captchaId = this.reCaptchaApi.render(this.captchaElemId, this.getCaptchaProperties());
this.ready.next();
});
}

@@ -383,2 +387,2 @@ /**

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZWNhcHRjaGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWNhcHRjaGEvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9iYXNlLXJlY2FwdGNoYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFSCxVQUFVLEVBQ1YsWUFBWSxFQUVaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLOUUsTUFBTTs7Ozs7OztJQXdHRixZQUNjLFFBQW1CLEVBQ25CLElBQVksRUFDWixRQUFrQixFQUNsQixhQUE0QjtRQUg1QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUFlOzs7O2lDQXZHSCxpQkFBaUI7Ozs7b0JBV3JCLE9BQU87Ozs7d0JBVXRCLENBQUM7Ozs7O3VCQU1ELElBQUksWUFBWSxFQUFVOzs7O29CQUs3QixJQUFJLFlBQVksRUFBVTs7OztxQkFLekIsSUFBSSxZQUFZLEVBQVE7Ozs7OEJBUWpCLEtBQUs7Ozs7O3dDQXFCTyxLQUFLOzs7O3dCQWdCeEIsS0FBSztLQXNCbEI7Ozs7SUFFTCxlQUFlO1FBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7S0FDdkQ7Ozs7O0lBWUQsV0FBVyxDQUFDLE9BQXNCOztRQUU5QixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxNQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFJLFdBQVcsSUFBSSxDQUFDLE9BQU8sT0FBSSxZQUFZLEtBQUssT0FBTyxP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LENBQUMsRUFBTztRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQzs7OztzQkE3UnZCLEtBQUs7bUJBS0wsS0FBSztpQkFLTCxLQUFLO3VCQUtMLEtBQUs7c0JBTUwsTUFBTTttQkFLTixNQUFNO29CQUtOLE1BQU07aUNBRU4sU0FBUyxTQUFDLG9CQUFvQjtnQ0FDOUIsU0FBUyxTQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBOZ1pvbmUsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBSZW5kZXJlcjIsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFJlQ2FwdGNoYVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcmVjYXB0Y2hhLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFNjcmlwdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY3JpcHQuc2VydmljZSc7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVJlQ2FwdGNoYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBQcmVmaXggb2YgdGhlIGNhcHRjaGEgZWxlbWVudFxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCByZWFkb25seSBjYXB0Y2hhRWxlbVByZWZpeCA9ICduZ3hfY2FwdGNoYV9pZF8nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHb29nbGUncyBzaXRlIGtleS5cclxuICAgICogWW91IGNhbiBmaW5kIHRoaXMgdW5kZXIgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGFcclxuICAgICovXHJcbiAgICBASW5wdXQoKSBzaXRlS2V5OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFR5cGVcclxuICAgICovXHJcbiAgICBASW5wdXQoKSB0eXBlOiAnYXVkaW8nIHwgJ2ltYWdlJyA9ICdpbWFnZSc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIExhbmd1YWdlIGNvZGUuIEF1dG8tZGV0ZWN0cyB0aGUgdXNlcidzIGxhbmd1YWdlIGlmIHVuc3BlY2lmaWVkLlxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpIGhsOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFRhYiBpbmRleFxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpIHRhYkluZGV4ID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSByZWNlaXZlcyBzdWNjZXNzZnVsIHJlc3BvbnNlLlxyXG4gICAgKiBDYXB0Y2hhIHJlc3BvbnNlIHRva2VuIGlzIHBhc3NlZCB0byBldmVudC5cclxuICAgICovXHJcbiAgICBAT3V0cHV0KCkgc3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYWxsZWQgd2hlbiBjYXB0Y2hhIGlzIGxvYWRlZC4gRXZlbnQgcmVjZWl2ZXMgaWQgb2YgdGhlIGNhcHRjaGFcclxuICAgICovXHJcbiAgICBAT3V0cHV0KCkgbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYWxsZWQgd2hlbiBjYXB0Y2hhIGlzIGxvYWRlZCAmIHJlYWR5LiBJLmUuIHdoZW4geW91IG5lZWQgdG8gZXhlY3V0ZSBjYXB0Y2hhIG9uIGNvbXBvbmVudCBsb2FkLlxyXG4gICAgKi9cclxuICAgIEBPdXRwdXQoKSByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdjYXB0Y2hhV3JhcHBlckVsZW0nKSBjYXB0Y2hhV3JhcHBlckVsZW06IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdjYXB0Y2hhU2NyaXB0RWxlbScpIGNhcHRjaGFTY3JpcHRFbGVtOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBJbmRpY2F0ZXMgaWYgY2FwdGNoYSBzaG91bGQgYmUgc2V0IG9uIGxvYWRcclxuICAgICovXHJcbiAgICBwcml2YXRlIHNldHVwQWZ0ZXJMb2FkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhcHRjaGEgZWxlbWVudFxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBjYXB0Y2hhRWxlbT86IEhUTUxFbGVtZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBJZCBvZiB0aGUgY2FwdGNoYSBlbGVtXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNhcHRjaGFJZD86IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICogSG9sZHMgbGFzdCByZXNwb25zZSB2YWx1ZVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBjdXJyZW50UmVzcG9uc2U/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIElmIGVuYWJsZWQsIGNhcHRjaGEgd2lsbCByZXNldCBhZnRlciByZWNlaXZpbmcgc3VjY2VzcyByZXNwb25zZS4gVGhpcyBpcyB1c2VmdWxcclxuICAgICogd2hlbiBpbnZpc2libGUgY2FwdGNoYSBuZWVkIHRvIGJlIHJlc29sdmVkIG11bHRpcGxlIHRpbWVzIG9uIHNhbWUgcGFnZVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCByZXNldENhcHRjaGFBZnRlclN1Y2Nlc3MgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FwdGNoYSB0eXBlXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHJlY2FwdGNoYVR5cGU6IFJlQ2FwdGNoYVR5cGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlcXVpcmVkIGJ5IENvbnRyb2xWYWx1ZUFjY2Vzc29yXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcclxuICAgIHByb3RlY3RlZCBvblRvdWNoZWQ6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBJbmRpY2F0ZXMgaWYgY2FwdGNoYSBpcyBsb2FkZWRcclxuICAgICovXHJcbiAgICBwdWJsaWMgaXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICogUmVmZXJlbmNlIHRvIGdsb2JhbCByZUNhcHRjaGEgQVBJXHJcbiAgICAqL1xyXG4gICAgcHVibGljIHJlQ2FwdGNoYUFwaT86IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICogSWQgb2YgdGhlIERPTSBlbGVtZW50IHdyYXBwaW5nIGNhcHRjaGFcclxuICAgICovXHJcbiAgICBwdWJsaWMgY2FwdGNoYUVsZW1JZD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICogRm9ybSBDb250cm9sIHRvIGJlIGVuYWJsZSB1c2FnZSBpbiByZWFjdGl2ZSBmb3Jtc1xyXG4gICAgKi9cclxuICAgIHB1YmxpYyBjb250cm9sPzogRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByb3RlY3RlZCB6b25lOiBOZ1pvbmUsXHJcbiAgICAgICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcm90ZWN0ZWQgc2NyaXB0U2VydmljZTogU2NyaXB0U2VydmljZSxcclxuICAgICkgeyB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCkuY29udHJvbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0cyByZUNhcHRjaGEgcHJvcGVydGllc1xyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRDYXB0Y2hhUHJvcGVydGllcygpOiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFVzZWQgZm9yIGNhcHRjaGEgc3BlY2lmaWMgc2V0dXBcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2FwdGNoYVNwZWNpZmljU2V0dXAoKTogdm9pZDtcclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgLy8gY2xlYW51cCBzY3JpcHRzIGlmIGxhbmd1YWdlIGNoYW5nZWQgYmVjYXVzZSB0aGV5IG5lZWQgdG8gYmUgcmVsb2FkZWRcclxuICAgICAgICBpZiAoY2hhbmdlcyAmJiBjaGFuZ2VzLmhsKSB7XHJcbiAgICAgICAgICAgIGlmICghY2hhbmdlcy5obC5maXJzdENoYW5nZSAmJiAoY2hhbmdlcy5obC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuaGwucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NyaXB0U2VydmljZS5jbGVhbnVwKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0cyBjYXB0Y2hhIHJlc3BvbnNlIGFzIHBlciByZUNhcHRjaGEgZG9jc1xyXG4gICAgKi9cclxuICAgIGdldFJlc3BvbnNlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVDYXB0Y2hhQXBpLmdldFJlc3BvbnNlKHRoaXMuY2FwdGNoYUlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0cyBJZCBvZiBjYXB0Y2hhIHdpZGdldFxyXG4gICAgKi9cclxuICAgIGdldENhcHRjaGFJZCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHRjaGFJZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogUmVzZXRzIGNhcHRjaGFcclxuICAgICovXHJcbiAgICByZXNldENhcHRjaGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQodW5kZWZpbmVkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0cyBsYXN0IHN1Ym1pdHRlZCBjYXB0Y2hhIHJlc3BvbnNlXHJcbiAgICAqL1xyXG4gICAgZ2V0Q3VycmVudFJlc3BvbnNlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFJlc3BvbnNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBSZWxvYWQgY2FwdGNoYS4gVXNlZnVsIHdoZW4gcHJvcGVydGllcyAoaS5lLiB0aGVtZSkgY2hhbmdlZCBhbmQgY2FwdGNoYSBuZWVkIHRvIHJlZmxlY3QgdGhlbVxyXG4gICAgKi9cclxuICAgIHJlbG9hZENhcHRjaGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBlbnN1cmVDYXB0Y2hhRWxlbShjYXB0Y2hhRWxlbUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjYXB0Y2hhRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhcHRjaGFFbGVtSWQpO1xyXG5cclxuICAgICAgICBpZiAoIWNhcHRjaGFFbGVtKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBDYXB0Y2hhIGVsZW1lbnQgd2l0aCBpZCAnJHtjYXB0Y2hhRWxlbUlkfScgd2FzIG5vdCBmb3VuZGApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYXNzaWduIGNhcHRjaGEgYWxlbVxyXG4gICAgICAgIHRoaXMuY2FwdGNoYUVsZW0gPSBjYXB0Y2hhRWxlbTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogUmVzcG9uc2libGUgZm9yIGluc3RhbnRpYXRpbmcgY2FwdGNoYSBlbGVtZW50XHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHJlbmRlclJlQ2FwdGNoYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhcHRjaGFJZCA9IHRoaXMucmVDYXB0Y2hhQXBpLnJlbmRlcih0aGlzLmNhcHRjaGFFbGVtSWQsIHRoaXMuZ2V0Q2FwdGNoYVByb3BlcnRpZXMoKSk7XHJcbiAgICAgICAgdGhpcy5yZWFkeS5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGNhcHRjaGEgcmVjZWl2ZXMgcmVzcG9uc2VcclxuICAgICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGhhbmRsZUNhbGxiYWNrKGNhbGxiYWNrOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZXNwb25zZSA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc3VjY2Vzcy5uZXh0KGNhbGxiYWNrKTtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoY2FsbGJhY2spO1xyXG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZChjYWxsYmFjayk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlc2V0Q2FwdGNoYUFmdGVyU3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0Q2FwdGNoYSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFBzZXVkb1VuaXF1ZU51bWJlcigpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFVUQ01pbGxpc2Vjb25kcygpICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTk5OSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXR1cENvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgICAgICAvLyBjYXB0Y2hhIHNwZWNpZmljIHNldHVwXHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhU3BlY2lmaWNTZXR1cCgpO1xyXG5cclxuICAgICAgICAvLyBjcmVhdGUgY2FwdGNoYSB3cmFwcGVyXHJcbiAgICAgICAgdGhpcy5jcmVhdGVBbmRTZXRDYXB0Y2hhRWxlbSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNjcmlwdFNlcnZpY2UucmVnaXN0ZXJDYXB0Y2hhU2NyaXB0KCdleHBsaWNpdCcsIChncmVjYXB0Y2hhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25sb2FkQ2FsbGJhY2soZ3JlY2FwdGNoYSk7XHJcbiAgICAgICAgfSwgdGhpcy5obCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGdvb2dsZSdzIHJlY2FwdGNoYSBzY3JpcHQgaXMgcmVhZHlcclxuICAgICovXHJcbiAgICBwcml2YXRlIG9ubG9hZENhbGxiYWNrKGdyZWNhcGNoYTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gYXNzaWduIHJlZmVyZW5jZSB0byByZUNhcHRjaGEgQXBpIG9uY2UgaXRzIGxvYWRlZFxyXG4gICAgICAgIHRoaXMucmVDYXB0Y2hhQXBpID0gZ3JlY2FwY2hhO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVDYXB0Y2hhQXBpKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBSZUNhcHRjaGEgQXBpIHdhcyBub3QgaW5pdGlhbGl6ZWQgY29ycmVjdGx5YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBsb2FkZWQgZmxhZ1xyXG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBmaXJlIGxvYWQgZXZlbnRcclxuICAgICAgICB0aGlzLmxvYWQubmV4dCgpO1xyXG5cclxuICAgICAgICAvLyByZW5kZXIgY2FwdGNoYVxyXG4gICAgICAgIHRoaXMucmVuZGVyUmVDYXB0Y2hhKCk7XHJcblxyXG4gICAgICAgIC8vIHNldHVwIGNvbXBvbmVudCBpZiBpdCB3YXMgZmxhZ2dlZCBhcyBzdWNoXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dXBBZnRlckxvYWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR1cEFmdGVyTG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldHVwQ29tcG9uZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVOZXdFbGVtSWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXB0Y2hhRWxlbVByZWZpeCArIHRoaXMuZ2V0UHNldWRvVW5pcXVlTnVtYmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVBbmRTZXRDYXB0Y2hhRWxlbSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBnZW5lcmF0ZSBuZXcgY2FwdGNoYSBpZFxyXG4gICAgICAgIHRoaXMuY2FwdGNoYUVsZW1JZCA9IHRoaXMuZ2VuZXJhdGVOZXdFbGVtSWQoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHRjaGFFbGVtSWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYENhcHRjaGEgZWxlbSBJZCBpcyBub3Qgc2V0YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZW1vdmUgb2xkIGh0bWxcclxuICAgICAgICB0aGlzLmNhcHRjaGFXcmFwcGVyRWxlbS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgICAgICAvLyBjcmVhdGUgbmV3IHdyYXBwZXIgZm9yIGNhcHRjaGFcclxuICAgICAgICBjb25zdCBuZXdFbGVtID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBuZXdFbGVtLmlkID0gdGhpcy5jYXB0Y2hhRWxlbUlkO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuY2FwdGNoYVdyYXBwZXJFbGVtLm5hdGl2ZUVsZW1lbnQsIG5ld0VsZW0pO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgY2FwdGNoYSBlbGVtXHJcbiAgICAgICAgdGhpcy5lbnN1cmVDYXB0Y2hhRWxlbSh0aGlzLmNhcHRjaGFFbGVtSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG8gYmUgYWxpZ25lZCB3aXRoIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2Ugd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2RcclxuICAgICAqIEhvd2V2ZXIgYXMgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgdGhlIHJlY2FwdGNoYSwgdGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgaW1wbGVtZW50ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaGVscHMgdXMgdGllIHRvZ2V0aGVyIHJlY2FwdGNoYSBhbmQgb3VyIGZvcm1Db250cm9sIHZhbHVlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBdCBzb21lIHBvaW50IHdlIG1pZ2h0IGJlIGludGVyZXN0ZWQgd2hldGhlciB0aGUgdXNlciBoYXMgdG91Y2hlZCBvdXIgY29tcG9uZW50XHJcbiAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZWNhcHRjaGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWNhcHRjaGEvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9iYXNlLXJlY2FwdGNoYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFSCxVQUFVLEVBQ1YsWUFBWSxFQUVaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLOUUsTUFBTTs7Ozs7OztJQXdHRixZQUNjLFFBQW1CLEVBQ25CLElBQVksRUFDWixRQUFrQixFQUNsQixhQUE0QjtRQUg1QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUFlOzs7O2lDQXZHSCxpQkFBaUI7Ozs7b0JBV3JCLE9BQU87Ozs7d0JBVXRCLENBQUM7Ozs7O3VCQU1ELElBQUksWUFBWSxFQUFVOzs7O29CQUs3QixJQUFJLFlBQVksRUFBVTs7OztxQkFLekIsSUFBSSxZQUFZLEVBQVE7Ozs7OEJBUWpCLEtBQUs7Ozs7O3dDQXFCTyxLQUFLOzs7O3dCQWdCeEIsS0FBSztLQXNCbEI7Ozs7SUFFTCxlQUFlO1FBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7S0FDdkQ7Ozs7O0lBWUQsV0FBVyxDQUFDLE9BQXNCOztRQUU5QixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxNQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFJLFdBQVcsSUFBSSxDQUFDLE9BQU8sT0FBSSxZQUFZLEtBQUssT0FBTyxP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LENBQUMsRUFBTztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztJQU1oQixpQkFBaUIsQ0FBQyxFQUFPO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDOzs7O3NCQWxTdkIsS0FBSzttQkFLTCxLQUFLO2lCQUtMLEtBQUs7dUJBS0wsS0FBSztzQkFNTCxNQUFNO21CQUtOLE1BQU07b0JBS04sTUFBTTtpQ0FFTixTQUFTLFNBQUMsb0JBQW9CO2dDQUM5QixTQUFTLFNBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE5nWm9uZSxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE91dHB1dCxcclxuICAgIFJlbmRlcmVyMixcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgUmVDYXB0Y2hhVHlwZSB9IGZyb20gJy4uL21vZGVscy9yZWNhcHRjaGEtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2NyaXB0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NjcmlwdC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlUmVDYXB0Y2hhQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFByZWZpeCBvZiB0aGUgY2FwdGNoYSBlbGVtZW50XHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhcHRjaGFFbGVtUHJlZml4ID0gJ25neF9jYXB0Y2hhX2lkXyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdvb2dsZSdzIHNpdGUga2V5LlxyXG4gICAgKiBZb3UgY2FuIGZpbmQgdGhpcyB1bmRlciBodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYVxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpIHNpdGVLZXk6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICogVHlwZVxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpIHR5cGU6ICdhdWRpbycgfCAnaW1hZ2UnID0gJ2ltYWdlJztcclxuXHJcbiAgICAvKipcclxuICAgICogTGFuZ3VhZ2UgY29kZS4gQXV0by1kZXRlY3RzIHRoZSB1c2VyJ3MgbGFuZ3VhZ2UgaWYgdW5zcGVjaWZpZWQuXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgaGw6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICogVGFiIGluZGV4XHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgdGFiSW5kZXggPSAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYWxsZWQgd2hlbiBjYXB0Y2hhIHJlY2VpdmVzIHN1Y2Nlc3NmdWwgcmVzcG9uc2UuXHJcbiAgICAqIENhcHRjaGEgcmVzcG9uc2UgdG9rZW4gaXMgcGFzc2VkIHRvIGV2ZW50LlxyXG4gICAgKi9cclxuICAgIEBPdXRwdXQoKSBzdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGNhcHRjaGEgaXMgbG9hZGVkLiBFdmVudCByZWNlaXZlcyBpZCBvZiB0aGUgY2FwdGNoYVxyXG4gICAgKi9cclxuICAgIEBPdXRwdXQoKSBsb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGNhcHRjaGEgaXMgbG9hZGVkICYgcmVhZHkuIEkuZS4gd2hlbiB5b3UgbmVlZCB0byBleGVjdXRlIGNhcHRjaGEgb24gY29tcG9uZW50IGxvYWQuXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2NhcHRjaGFXcmFwcGVyRWxlbScpIGNhcHRjaGFXcmFwcGVyRWxlbTogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ2NhcHRjaGFTY3JpcHRFbGVtJykgY2FwdGNoYVNjcmlwdEVsZW06IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEluZGljYXRlcyBpZiBjYXB0Y2hhIHNob3VsZCBiZSBzZXQgb24gbG9hZFxyXG4gICAgKi9cclxuICAgIHByaXZhdGUgc2V0dXBBZnRlckxvYWQgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FwdGNoYSBlbGVtZW50XHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNhcHRjaGFFbGVtPzogSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIElkIG9mIHRoZSBjYXB0Y2hhIGVsZW1cclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY2FwdGNoYUlkPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBIb2xkcyBsYXN0IHJlc3BvbnNlIHZhbHVlXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGN1cnJlbnRSZXNwb25zZT86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICogSWYgZW5hYmxlZCwgY2FwdGNoYSB3aWxsIHJlc2V0IGFmdGVyIHJlY2VpdmluZyBzdWNjZXNzIHJlc3BvbnNlLiBUaGlzIGlzIHVzZWZ1bFxyXG4gICAgKiB3aGVuIGludmlzaWJsZSBjYXB0Y2hhIG5lZWQgdG8gYmUgcmVzb2x2ZWQgbXVsdGlwbGUgdGltZXMgb24gc2FtZSBwYWdlXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHJlc2V0Q2FwdGNoYUFmdGVyU3VjY2VzcyA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYXB0Y2hhIHR5cGVcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVjYXB0Y2hhVHlwZTogUmVDYXB0Y2hhVHlwZTtcclxuXHJcbiAgICAvKipcclxuICAgICogUmVxdWlyZWQgYnkgQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xyXG4gICAgcHJvdGVjdGVkIG9uVG91Y2hlZDogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEluZGljYXRlcyBpZiBjYXB0Y2hhIGlzIGxvYWRlZFxyXG4gICAgKi9cclxuICAgIHB1YmxpYyBpc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBSZWZlcmVuY2UgdG8gZ2xvYmFsIHJlQ2FwdGNoYSBBUElcclxuICAgICovXHJcbiAgICBwdWJsaWMgcmVDYXB0Y2hhQXBpPzogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBJZCBvZiB0aGUgRE9NIGVsZW1lbnQgd3JhcHBpbmcgY2FwdGNoYVxyXG4gICAgKi9cclxuICAgIHB1YmxpYyBjYXB0Y2hhRWxlbUlkPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBGb3JtIENvbnRyb2wgdG8gYmUgZW5hYmxlIHVzYWdlIGluIHJlYWN0aXZlIGZvcm1zXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGNvbnRyb2w/OiBGb3JtQ29udHJvbDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSxcclxuICAgICAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByb3RlY3RlZCBzY3JpcHRTZXJ2aWNlOiBTY3JpcHRTZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sKS5jb250cm9sO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXRzIHJlQ2FwdGNoYSBwcm9wZXJ0aWVzXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldENhcHRjaGFQcm9wZXJ0aWVzKCk6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICogVXNlZCBmb3IgY2FwdGNoYSBzcGVjaWZpYyBzZXR1cFxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjYXB0Y2hhU3BlY2lmaWNTZXR1cCgpOiB2b2lkO1xyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICAvLyBjbGVhbnVwIHNjcmlwdHMgaWYgbGFuZ3VhZ2UgY2hhbmdlZCBiZWNhdXNlIHRoZXkgbmVlZCB0byBiZSByZWxvYWRlZFxyXG4gICAgICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXMuaGwpIHtcclxuICAgICAgICAgICAgaWYgKCFjaGFuZ2VzLmhsLmZpcnN0Q2hhbmdlICYmIChjaGFuZ2VzLmhsLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5obC5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JpcHRTZXJ2aWNlLmNsZWFudXAoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXRzIGNhcHRjaGEgcmVzcG9uc2UgYXMgcGVyIHJlQ2FwdGNoYSBkb2NzXHJcbiAgICAqL1xyXG4gICAgZ2V0UmVzcG9uc2UoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZUNhcHRjaGFBcGkuZ2V0UmVzcG9uc2UodGhpcy5jYXB0Y2hhSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXRzIElkIG9mIGNhcHRjaGEgd2lkZ2V0XHJcbiAgICAqL1xyXG4gICAgZ2V0Q2FwdGNoYUlkKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwdGNoYUlkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBSZXNldHMgY2FwdGNoYVxyXG4gICAgKi9cclxuICAgIHJlc2V0Q2FwdGNoYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCh1bmRlZmluZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXRzIGxhc3Qgc3VibWl0dGVkIGNhcHRjaGEgcmVzcG9uc2VcclxuICAgICovXHJcbiAgICBnZXRDdXJyZW50UmVzcG9uc2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlbG9hZCBjYXB0Y2hhLiBVc2VmdWwgd2hlbiBwcm9wZXJ0aWVzIChpLmUuIHRoZW1lKSBjaGFuZ2VkIGFuZCBjYXB0Y2hhIG5lZWQgdG8gcmVmbGVjdCB0aGVtXHJcbiAgICAqL1xyXG4gICAgcmVsb2FkQ2FwdGNoYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldHVwQ29tcG9uZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGVuc3VyZUNhcHRjaGFFbGVtKGNhcHRjaGFFbGVtSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNhcHRjaGFFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2FwdGNoYUVsZW1JZCk7XHJcblxyXG4gICAgICAgIGlmICghY2FwdGNoYUVsZW0pIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYENhcHRjaGEgZWxlbWVudCB3aXRoIGlkICcke2NhcHRjaGFFbGVtSWR9JyB3YXMgbm90IGZvdW5kYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhc3NpZ24gY2FwdGNoYSBhbGVtXHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhRWxlbSA9IGNhcHRjaGFFbGVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBSZXNwb25zaWJsZSBmb3IgaW5zdGFudGlhdGluZyBjYXB0Y2hhIGVsZW1lbnRcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyUmVDYXB0Y2hhKCk6IHZvaWQge1xyXG5cclxuICAgICAgICAvLyBydW4gb3V0c2lkZSBhbmd1bGFyIHpvbmUgZHVlIHRvIHRpbWVvdXQgaXNzdWVzIHdoZW4gdGVzdGluZ1xyXG4gICAgICAgIC8vIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9Fbm5nYWdlL25neC1jYXB0Y2hhL2lzc3Vlcy8yNlxyXG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwdGNoYUlkID0gdGhpcy5yZUNhcHRjaGFBcGkucmVuZGVyKHRoaXMuY2FwdGNoYUVsZW1JZCwgdGhpcy5nZXRDYXB0Y2hhUHJvcGVydGllcygpKTtcclxuICAgICAgICAgICAgdGhpcy5yZWFkeS5uZXh0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGNhcHRjaGEgcmVjZWl2ZXMgcmVzcG9uc2VcclxuICAgICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGhhbmRsZUNhbGxiYWNrKGNhbGxiYWNrOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZXNwb25zZSA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc3VjY2Vzcy5uZXh0KGNhbGxiYWNrKTtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoY2FsbGJhY2spO1xyXG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZChjYWxsYmFjayk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlc2V0Q2FwdGNoYUFmdGVyU3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0Q2FwdGNoYSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFBzZXVkb1VuaXF1ZU51bWJlcigpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFVUQ01pbGxpc2Vjb25kcygpICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTk5OSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXR1cENvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgICAgICAvLyBjYXB0Y2hhIHNwZWNpZmljIHNldHVwXHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhU3BlY2lmaWNTZXR1cCgpO1xyXG5cclxuICAgICAgICAvLyBjcmVhdGUgY2FwdGNoYSB3cmFwcGVyXHJcbiAgICAgICAgdGhpcy5jcmVhdGVBbmRTZXRDYXB0Y2hhRWxlbSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNjcmlwdFNlcnZpY2UucmVnaXN0ZXJDYXB0Y2hhU2NyaXB0KCdleHBsaWNpdCcsIChncmVjYXB0Y2hhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25sb2FkQ2FsbGJhY2soZ3JlY2FwdGNoYSk7XHJcbiAgICAgICAgfSwgdGhpcy5obCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGdvb2dsZSdzIHJlY2FwdGNoYSBzY3JpcHQgaXMgcmVhZHlcclxuICAgICovXHJcbiAgICBwcml2YXRlIG9ubG9hZENhbGxiYWNrKGdyZWNhcGNoYTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gYXNzaWduIHJlZmVyZW5jZSB0byByZUNhcHRjaGEgQXBpIG9uY2UgaXRzIGxvYWRlZFxyXG4gICAgICAgIHRoaXMucmVDYXB0Y2hhQXBpID0gZ3JlY2FwY2hhO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVDYXB0Y2hhQXBpKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBSZUNhcHRjaGEgQXBpIHdhcyBub3QgaW5pdGlhbGl6ZWQgY29ycmVjdGx5YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBsb2FkZWQgZmxhZ1xyXG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBmaXJlIGxvYWQgZXZlbnRcclxuICAgICAgICB0aGlzLmxvYWQubmV4dCgpO1xyXG5cclxuICAgICAgICAvLyByZW5kZXIgY2FwdGNoYVxyXG4gICAgICAgIHRoaXMucmVuZGVyUmVDYXB0Y2hhKCk7XHJcblxyXG4gICAgICAgIC8vIHNldHVwIGNvbXBvbmVudCBpZiBpdCB3YXMgZmxhZ2dlZCBhcyBzdWNoXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dXBBZnRlckxvYWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR1cEFmdGVyTG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldHVwQ29tcG9uZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVOZXdFbGVtSWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXB0Y2hhRWxlbVByZWZpeCArIHRoaXMuZ2V0UHNldWRvVW5pcXVlTnVtYmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVBbmRTZXRDYXB0Y2hhRWxlbSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBnZW5lcmF0ZSBuZXcgY2FwdGNoYSBpZFxyXG4gICAgICAgIHRoaXMuY2FwdGNoYUVsZW1JZCA9IHRoaXMuZ2VuZXJhdGVOZXdFbGVtSWQoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHRjaGFFbGVtSWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYENhcHRjaGEgZWxlbSBJZCBpcyBub3Qgc2V0YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZW1vdmUgb2xkIGh0bWxcclxuICAgICAgICB0aGlzLmNhcHRjaGFXcmFwcGVyRWxlbS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgICAgICAvLyBjcmVhdGUgbmV3IHdyYXBwZXIgZm9yIGNhcHRjaGFcclxuICAgICAgICBjb25zdCBuZXdFbGVtID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBuZXdFbGVtLmlkID0gdGhpcy5jYXB0Y2hhRWxlbUlkO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuY2FwdGNoYVdyYXBwZXJFbGVtLm5hdGl2ZUVsZW1lbnQsIG5ld0VsZW0pO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgY2FwdGNoYSBlbGVtXHJcbiAgICAgICAgdGhpcy5lbnN1cmVDYXB0Y2hhRWxlbSh0aGlzLmNhcHRjaGFFbGVtSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG8gYmUgYWxpZ25lZCB3aXRoIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2Ugd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2RcclxuICAgICAqIEhvd2V2ZXIgYXMgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgdGhlIHJlY2FwdGNoYSwgdGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgaW1wbGVtZW50ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaGVscHMgdXMgdGllIHRvZ2V0aGVyIHJlY2FwdGNoYSBhbmQgb3VyIGZvcm1Db250cm9sIHZhbHVlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBdCBzb21lIHBvaW50IHdlIG1pZ2h0IGJlIGludGVyZXN0ZWQgd2hldGhlciB0aGUgdXNlciBoYXMgdG91Y2hlZCBvdXIgY29tcG9uZW50XHJcbiAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=

@@ -184,4 +184,9 @@ /**

function () {
this.captchaId = this.reCaptchaApi.render(this.captchaElemId, this.getCaptchaProperties());
this.ready.next();
var _this = this;
// run outside angular zone due to timeout issues when testing
// details: https://github.com/Enngage/ngx-captcha/issues/26
this.zone.runOutsideAngular(function () {
_this.captchaId = _this.reCaptchaApi.render(_this.captchaElemId, _this.getCaptchaProperties());
_this.ready.next();
});
};

@@ -477,2 +482,2 @@ /**

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZWNhcHRjaGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWNhcHRjaGEvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9iYXNlLXJlY2FwdGNoYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFSCxVQUFVLEVBQ1YsWUFBWSxFQUVaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0lBNkcxRSxnQ0FDYyxRQUFtQixFQUNuQixJQUFZLEVBQ1osUUFBa0IsRUFDbEIsYUFBNEI7UUFINUIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTs7OztpQ0F2R0gsaUJBQWlCOzs7O29CQVdyQixPQUFPOzs7O3dCQVV0QixDQUFDOzs7Ozt1QkFNRCxJQUFJLFlBQVksRUFBVTs7OztvQkFLN0IsSUFBSSxZQUFZLEVBQVU7Ozs7cUJBS3pCLElBQUksWUFBWSxFQUFROzs7OzhCQVFqQixLQUFLOzs7Ozt3Q0FxQk8sS0FBSzs7Ozt3QkFnQnhCLEtBQUs7S0FzQmxCOzs7O0lBRUwsZ0RBQWU7OztJQUFmO1FBQ0ksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7S0FDdkQ7Ozs7O0lBWUQsNENBQVc7Ozs7SUFBWCxVQUFZLE9BQXNCOztRQUU5QixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxNQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFJLFdBQVcsSUFBSSxDQUFDLE9BQU8sT0FBSSxZQUFZLEtBQUssT0FB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QUFDOztRQUcxRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDOzs7Ozs7OztJQU94QywyQ0FBVTs7Ozs7O2NBQUMsR0FBUTs7Ozs7O0lBS25CLGlEQUFnQjs7Ozs7Y0FBQyxFQUFPO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDOzs7Ozs7O0lBTWhCLGtEQUFpQjs7Ozs7Y0FBQyxFQUFPO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDOzs7MEJBN1J2QixLQUFLO3VCQUtMLEtBQUs7cUJBS0wsS0FBSzsyQkFLTCxLQUFLOzBCQU1MLE1BQU07dUJBS04sTUFBTTt3QkFLTixNQUFNO3FDQUVOLFNBQVMsU0FBQyxvQkFBb0I7b0NBQzlCLFNBQVMsU0FBQyxtQkFBbUI7O2lDQS9EbEM7O1NBa0JzQixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgTmdab25lLFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUmVuZGVyZXIyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlY2FwdGNoYS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VSZUNhcHRjaGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICogUHJlZml4IG9mIHRoZSBjYXB0Y2hhIGVsZW1lbnRcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FwdGNoYUVsZW1QcmVmaXggPSAnbmd4X2NhcHRjaGFfaWRfJztcclxuXHJcbiAgICAvKipcclxuICAgICogR29vZ2xlJ3Mgc2l0ZSBrZXkuXHJcbiAgICAqIFlvdSBjYW4gZmluZCB0aGlzIHVuZGVyIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgc2l0ZUtleTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUeXBlXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgdHlwZTogJ2F1ZGlvJyB8ICdpbWFnZScgPSAnaW1hZ2UnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBMYW5ndWFnZSBjb2RlLiBBdXRvLWRldGVjdHMgdGhlIHVzZXIncyBsYW5ndWFnZSBpZiB1bnNwZWNpZmllZC5cclxuICAgICovXHJcbiAgICBASW5wdXQoKSBobDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUYWIgaW5kZXhcclxuICAgICovXHJcbiAgICBASW5wdXQoKSB0YWJJbmRleCA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGNhcHRjaGEgcmVjZWl2ZXMgc3VjY2Vzc2Z1bCByZXNwb25zZS5cclxuICAgICogQ2FwdGNoYSByZXNwb25zZSB0b2tlbiBpcyBwYXNzZWQgdG8gZXZlbnQuXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpIHN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSBpcyBsb2FkZWQuIEV2ZW50IHJlY2VpdmVzIGlkIG9mIHRoZSBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpIGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSBpcyBsb2FkZWQgJiByZWFkeS4gSS5lLiB3aGVuIHlvdSBuZWVkIHRvIGV4ZWN1dGUgY2FwdGNoYSBvbiBjb21wb25lbnQgbG9hZC5cclxuICAgICovXHJcbiAgICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY2FwdGNoYVdyYXBwZXJFbGVtJykgY2FwdGNoYVdyYXBwZXJFbGVtOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgnY2FwdGNoYVNjcmlwdEVsZW0nKSBjYXB0Y2hhU2NyaXB0RWxlbTogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhdGVzIGlmIGNhcHRjaGEgc2hvdWxkIGJlIHNldCBvbiBsb2FkXHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXR1cEFmdGVyTG9hZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYXB0Y2hhIGVsZW1lbnRcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY2FwdGNoYUVsZW0/OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAvKipcclxuICAgICogSWQgb2YgdGhlIGNhcHRjaGEgZWxlbVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBjYXB0Y2hhSWQ/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEhvbGRzIGxhc3QgcmVzcG9uc2UgdmFsdWVcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3VycmVudFJlc3BvbnNlPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBJZiBlbmFibGVkLCBjYXB0Y2hhIHdpbGwgcmVzZXQgYWZ0ZXIgcmVjZWl2aW5nIHN1Y2Nlc3MgcmVzcG9uc2UuIFRoaXMgaXMgdXNlZnVsXHJcbiAgICAqIHdoZW4gaW52aXNpYmxlIGNhcHRjaGEgbmVlZCB0byBiZSByZXNvbHZlZCBtdWx0aXBsZSB0aW1lcyBvbiBzYW1lIHBhZ2VcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVzZXRDYXB0Y2hhQWZ0ZXJTdWNjZXNzID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhcHRjaGEgdHlwZVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCByZWNhcHRjaGFUeXBlOiBSZUNhcHRjaGFUeXBlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBSZXF1aXJlZCBieSBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XHJcbiAgICBwcm90ZWN0ZWQgb25Ub3VjaGVkOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhdGVzIGlmIGNhcHRjaGEgaXMgbG9hZGVkXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGlzTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlZmVyZW5jZSB0byBnbG9iYWwgcmVDYXB0Y2hhIEFQSVxyXG4gICAgKi9cclxuICAgIHB1YmxpYyByZUNhcHRjaGFBcGk/OiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIElkIG9mIHRoZSBET00gZWxlbWVudCB3cmFwcGluZyBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGNhcHRjaGFFbGVtSWQ/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEZvcm0gQ29udHJvbCB0byBiZSBlbmFibGUgdXNhZ2UgaW4gcmVhY3RpdmUgZm9ybXNcclxuICAgICovXHJcbiAgICBwdWJsaWMgY29udHJvbD86IEZvcm1Db250cm9sO1xyXG5cclxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxyXG4gICAgICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJvdGVjdGVkIHNjcmlwdFNlcnZpY2U6IFNjcmlwdFNlcnZpY2UsXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpLmNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgcmVDYXB0Y2hhIHByb3BlcnRpZXNcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Q2FwdGNoYVByb3BlcnRpZXMoKTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBVc2VkIGZvciBjYXB0Y2hhIHNwZWNpZmljIHNldHVwXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGNhcHRjaGFTcGVjaWZpY1NldHVwKCk6IHZvaWQ7XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIC8vIGNsZWFudXAgc2NyaXB0cyBpZiBsYW5ndWFnZSBjaGFuZ2VkIGJlY2F1c2UgdGhleSBuZWVkIHRvIGJlIHJlbG9hZGVkXHJcbiAgICAgICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlcy5obCkge1xyXG4gICAgICAgICAgICBpZiAoIWNoYW5nZXMuaGwuZmlyc3RDaGFuZ2UgJiYgKGNoYW5nZXMuaGwuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmhsLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdFNlcnZpY2UuY2xlYW51cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHVwQ29tcG9uZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgY2FwdGNoYSByZXNwb25zZSBhcyBwZXIgcmVDYXB0Y2hhIGRvY3NcclxuICAgICovXHJcbiAgICBnZXRSZXNwb25zZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlQ2FwdGNoYUFwaS5nZXRSZXNwb25zZSh0aGlzLmNhcHRjaGFJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgSWQgb2YgY2FwdGNoYSB3aWRnZXRcclxuICAgICovXHJcbiAgICBnZXRDYXB0Y2hhSWQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXB0Y2hhSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlc2V0cyBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgcmVzZXRDYXB0Y2hhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgbGFzdCBzdWJtaXR0ZWQgY2FwdGNoYSByZXNwb25zZVxyXG4gICAgKi9cclxuICAgIGdldEN1cnJlbnRSZXNwb25zZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRSZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogUmVsb2FkIGNhcHRjaGEuIFVzZWZ1bCB3aGVuIHByb3BlcnRpZXMgKGkuZS4gdGhlbWUpIGNoYW5nZWQgYW5kIGNhcHRjaGEgbmVlZCB0byByZWZsZWN0IHRoZW1cclxuICAgICovXHJcbiAgICByZWxvYWRDYXB0Y2hhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZW5zdXJlQ2FwdGNoYUVsZW0oY2FwdGNoYUVsZW1JZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2FwdGNoYUVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYXB0Y2hhRWxlbUlkKTtcclxuXHJcbiAgICAgICAgaWYgKCFjYXB0Y2hhRWxlbSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgQ2FwdGNoYSBlbGVtZW50IHdpdGggaWQgJyR7Y2FwdGNoYUVsZW1JZH0nIHdhcyBub3QgZm91bmRgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFzc2lnbiBjYXB0Y2hhIGFsZW1cclxuICAgICAgICB0aGlzLmNhcHRjaGFFbGVtID0gY2FwdGNoYUVsZW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIGNhcHRjaGEgZWxlbWVudFxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCByZW5kZXJSZUNhcHRjaGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhSWQgPSB0aGlzLnJlQ2FwdGNoYUFwaS5yZW5kZXIodGhpcy5jYXB0Y2hhRWxlbUlkLCB0aGlzLmdldENhcHRjaGFQcm9wZXJ0aWVzKCkpO1xyXG4gICAgICAgIHRoaXMucmVhZHkubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYWxsZWQgd2hlbiBjYXB0Y2hhIHJlY2VpdmVzIHJlc3BvbnNlXHJcbiAgICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFja1xyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBoYW5kbGVDYWxsYmFjayhjYWxsYmFjazogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzcG9uc2UgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLnN1Y2Nlc3MubmV4dChjYWxsYmFjayk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoY2FsbGJhY2spO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZXNldENhcHRjaGFBZnRlclN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldENhcHRjaGEoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQc2V1ZG9VbmlxdWVOdW1iZXIoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRVVENNaWxsaXNlY29uZHMoKSArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0dXBDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gY2FwdGNoYSBzcGVjaWZpYyBzZXR1cFxyXG4gICAgICAgIHRoaXMuY2FwdGNoYVNwZWNpZmljU2V0dXAoKTtcclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIGNhcHRjaGEgd3JhcHBlclxyXG4gICAgICAgIHRoaXMuY3JlYXRlQW5kU2V0Q2FwdGNoYUVsZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JpcHRTZXJ2aWNlLnJlZ2lzdGVyQ2FwdGNoYVNjcmlwdCgnZXhwbGljaXQnLCAoZ3JlY2FwdGNoYSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9ubG9hZENhbGxiYWNrKGdyZWNhcHRjaGEpO1xyXG4gICAgICAgIH0sIHRoaXMuaGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYWxsZWQgd2hlbiBnb29nbGUncyByZWNhcHRjaGEgc2NyaXB0IGlzIHJlYWR5XHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbmxvYWRDYWxsYmFjayhncmVjYXBjaGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIC8vIGFzc2lnbiByZWZlcmVuY2UgdG8gcmVDYXB0Y2hhIEFwaSBvbmNlIGl0cyBsb2FkZWRcclxuICAgICAgICB0aGlzLnJlQ2FwdGNoYUFwaSA9IGdyZWNhcGNoYTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlQ2FwdGNoYUFwaSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUmVDYXB0Y2hhIEFwaSB3YXMgbm90IGluaXRpYWxpemVkIGNvcnJlY3RseWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbG9hZGVkIGZsYWdcclxuICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gZmlyZSBsb2FkIGV2ZW50XHJcbiAgICAgICAgdGhpcy5sb2FkLm5leHQoKTtcclxuXHJcbiAgICAgICAgLy8gcmVuZGVyIGNhcHRjaGFcclxuICAgICAgICB0aGlzLnJlbmRlclJlQ2FwdGNoYSgpO1xyXG5cclxuICAgICAgICAvLyBzZXR1cCBjb21wb25lbnQgaWYgaXQgd2FzIGZsYWdnZWQgYXMgc3VjaFxyXG4gICAgICAgIGlmICh0aGlzLnNldHVwQWZ0ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBBZnRlckxvYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlTmV3RWxlbUlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwdGNoYUVsZW1QcmVmaXggKyB0aGlzLmdldFBzZXVkb1VuaXF1ZU51bWJlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlQW5kU2V0Q2FwdGNoYUVsZW0oKTogdm9pZCB7XHJcbiAgICAgICAgLy8gZ2VuZXJhdGUgbmV3IGNhcHRjaGEgaWRcclxuICAgICAgICB0aGlzLmNhcHRjaGFFbGVtSWQgPSB0aGlzLmdlbmVyYXRlTmV3RWxlbUlkKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jYXB0Y2hhRWxlbUlkKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBDYXB0Y2hhIGVsZW0gSWQgaXMgbm90IHNldGApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVtb3ZlIG9sZCBodG1sXHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhV3JhcHBlckVsZW0ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIG5ldyB3cmFwcGVyIGZvciBjYXB0Y2hhXHJcbiAgICAgICAgY29uc3QgbmV3RWxlbSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5pZCA9IHRoaXMuY2FwdGNoYUVsZW1JZDtcclxuXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmNhcHRjaGFXcmFwcGVyRWxlbS5uYXRpdmVFbGVtZW50LCBuZXdFbGVtKTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIGNhcHRjaGEgZWxlbVxyXG4gICAgICAgIHRoaXMuZW5zdXJlQ2FwdGNoYUVsZW0odGhpcy5jYXB0Y2hhRWxlbUlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvIGJlIGFsaWduZWQgd2l0aCB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIHdlIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kXHJcbiAgICAgKiBIb3dldmVyIGFzIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHRoZSByZWNhcHRjaGEsIHRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGltcGxlbWVudGVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGhlbHBzIHVzIHRpZSB0b2dldGhlciByZWNhcHRjaGEgYW5kIG91ciBmb3JtQ29udHJvbCB2YWx1ZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQXQgc29tZSBwb2ludCB3ZSBtaWdodCBiZSBpbnRlcmVzdGVkIHdoZXRoZXIgdGhlIHVzZXIgaGFzIHRvdWNoZWQgb3VyIGNvbXBvbmVudFxyXG4gICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxufVxyXG5cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZWNhcHRjaGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWNhcHRjaGEvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9iYXNlLXJlY2FwdGNoYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFSCxVQUFVLEVBQ1YsWUFBWSxFQUVaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0lBNkcxRSxnQ0FDYyxRQUFtQixFQUNuQixJQUFZLEVBQ1osUUFBa0IsRUFDbEIsYUFBNEI7UUFINUIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTs7OztpQ0F2R0gsaUJBQWlCOzs7O29CQVdyQixPQUFPOzs7O3dCQVV0QixDQUFDOzs7Ozt1QkFNRCxJQUFJLFlBQVksRUFBVTs7OztvQkFLN0IsSUFBSSxZQUFZLEVBQVU7Ozs7cUJBS3pCLElBQUksWUFBWSxFQUFROzs7OzhCQVFqQixLQUFLOzs7Ozt3Q0FxQk8sS0FBSzs7Ozt3QkFnQnhCLEtBQUs7S0FzQmxCOzs7O0lBRUwsZ0RBQWU7OztJQUFmO1FBQ0ksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7S0FDdkQ7Ozs7O0lBWUQsNENBQVc7Ozs7SUFBWCxVQUFZLE9BQXNCOztRQUU5QixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxNQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFJLFdBQVcsSUFBSSxDQUFDLE9BQU8sT0FBSSxZQUFZLEtBQUssT0FB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QUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztRQUcxRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDOzs7Ozs7OztJQU94QywyQ0FBVTs7Ozs7O2NBQUMsR0FBUTs7Ozs7O0lBS25CLGlEQUFnQjs7Ozs7Y0FBQyxFQUFPO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDOzs7Ozs7O0lBTWhCLGtEQUFpQjs7Ozs7Y0FBQyxFQUFPO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDOzs7MEJBbFN2QixLQUFLO3VCQUtMLEtBQUs7cUJBS0wsS0FBSzsyQkFLTCxLQUFLOzBCQU1MLE1BQU07dUJBS04sTUFBTTt3QkFLTixNQUFNO3FDQUVOLFNBQVMsU0FBQyxvQkFBb0I7b0NBQzlCLFNBQVMsU0FBQyxtQkFBbUI7O2lDQS9EbEM7O1NBa0JzQixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgTmdab25lLFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUmVuZGVyZXIyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlY2FwdGNoYS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VSZUNhcHRjaGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICogUHJlZml4IG9mIHRoZSBjYXB0Y2hhIGVsZW1lbnRcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FwdGNoYUVsZW1QcmVmaXggPSAnbmd4X2NhcHRjaGFfaWRfJztcclxuXHJcbiAgICAvKipcclxuICAgICogR29vZ2xlJ3Mgc2l0ZSBrZXkuXHJcbiAgICAqIFlvdSBjYW4gZmluZCB0aGlzIHVuZGVyIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgc2l0ZUtleTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUeXBlXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgdHlwZTogJ2F1ZGlvJyB8ICdpbWFnZScgPSAnaW1hZ2UnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBMYW5ndWFnZSBjb2RlLiBBdXRvLWRldGVjdHMgdGhlIHVzZXIncyBsYW5ndWFnZSBpZiB1bnNwZWNpZmllZC5cclxuICAgICovXHJcbiAgICBASW5wdXQoKSBobDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUYWIgaW5kZXhcclxuICAgICovXHJcbiAgICBASW5wdXQoKSB0YWJJbmRleCA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGNhcHRjaGEgcmVjZWl2ZXMgc3VjY2Vzc2Z1bCByZXNwb25zZS5cclxuICAgICogQ2FwdGNoYSByZXNwb25zZSB0b2tlbiBpcyBwYXNzZWQgdG8gZXZlbnQuXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpIHN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSBpcyBsb2FkZWQuIEV2ZW50IHJlY2VpdmVzIGlkIG9mIHRoZSBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpIGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSBpcyBsb2FkZWQgJiByZWFkeS4gSS5lLiB3aGVuIHlvdSBuZWVkIHRvIGV4ZWN1dGUgY2FwdGNoYSBvbiBjb21wb25lbnQgbG9hZC5cclxuICAgICovXHJcbiAgICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY2FwdGNoYVdyYXBwZXJFbGVtJykgY2FwdGNoYVdyYXBwZXJFbGVtOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgnY2FwdGNoYVNjcmlwdEVsZW0nKSBjYXB0Y2hhU2NyaXB0RWxlbTogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhdGVzIGlmIGNhcHRjaGEgc2hvdWxkIGJlIHNldCBvbiBsb2FkXHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXR1cEFmdGVyTG9hZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYXB0Y2hhIGVsZW1lbnRcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY2FwdGNoYUVsZW0/OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAvKipcclxuICAgICogSWQgb2YgdGhlIGNhcHRjaGEgZWxlbVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBjYXB0Y2hhSWQ/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEhvbGRzIGxhc3QgcmVzcG9uc2UgdmFsdWVcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3VycmVudFJlc3BvbnNlPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBJZiBlbmFibGVkLCBjYXB0Y2hhIHdpbGwgcmVzZXQgYWZ0ZXIgcmVjZWl2aW5nIHN1Y2Nlc3MgcmVzcG9uc2UuIFRoaXMgaXMgdXNlZnVsXHJcbiAgICAqIHdoZW4gaW52aXNpYmxlIGNhcHRjaGEgbmVlZCB0byBiZSByZXNvbHZlZCBtdWx0aXBsZSB0aW1lcyBvbiBzYW1lIHBhZ2VcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVzZXRDYXB0Y2hhQWZ0ZXJTdWNjZXNzID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhcHRjaGEgdHlwZVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCByZWNhcHRjaGFUeXBlOiBSZUNhcHRjaGFUeXBlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBSZXF1aXJlZCBieSBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XHJcbiAgICBwcm90ZWN0ZWQgb25Ub3VjaGVkOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhdGVzIGlmIGNhcHRjaGEgaXMgbG9hZGVkXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGlzTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlZmVyZW5jZSB0byBnbG9iYWwgcmVDYXB0Y2hhIEFQSVxyXG4gICAgKi9cclxuICAgIHB1YmxpYyByZUNhcHRjaGFBcGk/OiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIElkIG9mIHRoZSBET00gZWxlbWVudCB3cmFwcGluZyBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGNhcHRjaGFFbGVtSWQ/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEZvcm0gQ29udHJvbCB0byBiZSBlbmFibGUgdXNhZ2UgaW4gcmVhY3RpdmUgZm9ybXNcclxuICAgICovXHJcbiAgICBwdWJsaWMgY29udHJvbD86IEZvcm1Db250cm9sO1xyXG5cclxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxyXG4gICAgICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJvdGVjdGVkIHNjcmlwdFNlcnZpY2U6IFNjcmlwdFNlcnZpY2UsXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpLmNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgcmVDYXB0Y2hhIHByb3BlcnRpZXNcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Q2FwdGNoYVByb3BlcnRpZXMoKTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBVc2VkIGZvciBjYXB0Y2hhIHNwZWNpZmljIHNldHVwXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGNhcHRjaGFTcGVjaWZpY1NldHVwKCk6IHZvaWQ7XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIC8vIGNsZWFudXAgc2NyaXB0cyBpZiBsYW5ndWFnZSBjaGFuZ2VkIGJlY2F1c2UgdGhleSBuZWVkIHRvIGJlIHJlbG9hZGVkXHJcbiAgICAgICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlcy5obCkge1xyXG4gICAgICAgICAgICBpZiAoIWNoYW5nZXMuaGwuZmlyc3RDaGFuZ2UgJiYgKGNoYW5nZXMuaGwuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmhsLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdFNlcnZpY2UuY2xlYW51cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHVwQ29tcG9uZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgY2FwdGNoYSByZXNwb25zZSBhcyBwZXIgcmVDYXB0Y2hhIGRvY3NcclxuICAgICovXHJcbiAgICBnZXRSZXNwb25zZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlQ2FwdGNoYUFwaS5nZXRSZXNwb25zZSh0aGlzLmNhcHRjaGFJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgSWQgb2YgY2FwdGNoYSB3aWRnZXRcclxuICAgICovXHJcbiAgICBnZXRDYXB0Y2hhSWQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXB0Y2hhSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlc2V0cyBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgcmVzZXRDYXB0Y2hhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgbGFzdCBzdWJtaXR0ZWQgY2FwdGNoYSByZXNwb25zZVxyXG4gICAgKi9cclxuICAgIGdldEN1cnJlbnRSZXNwb25zZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRSZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogUmVsb2FkIGNhcHRjaGEuIFVzZWZ1bCB3aGVuIHByb3BlcnRpZXMgKGkuZS4gdGhlbWUpIGNoYW5nZWQgYW5kIGNhcHRjaGEgbmVlZCB0byByZWZsZWN0IHRoZW1cclxuICAgICovXHJcbiAgICByZWxvYWRDYXB0Y2hhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZW5zdXJlQ2FwdGNoYUVsZW0oY2FwdGNoYUVsZW1JZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2FwdGNoYUVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYXB0Y2hhRWxlbUlkKTtcclxuXHJcbiAgICAgICAgaWYgKCFjYXB0Y2hhRWxlbSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgQ2FwdGNoYSBlbGVtZW50IHdpdGggaWQgJyR7Y2FwdGNoYUVsZW1JZH0nIHdhcyBub3QgZm91bmRgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFzc2lnbiBjYXB0Y2hhIGFsZW1cclxuICAgICAgICB0aGlzLmNhcHRjaGFFbGVtID0gY2FwdGNoYUVsZW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIGNhcHRjaGEgZWxlbWVudFxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCByZW5kZXJSZUNhcHRjaGEoKTogdm9pZCB7XHJcblxyXG4gICAgICAgIC8vIHJ1biBvdXRzaWRlIGFuZ3VsYXIgem9uZSBkdWUgdG8gdGltZW91dCBpc3N1ZXMgd2hlbiB0ZXN0aW5nXHJcbiAgICAgICAgLy8gZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL0VubmdhZ2Uvbmd4LWNhcHRjaGEvaXNzdWVzLzI2XHJcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYXB0Y2hhSWQgPSB0aGlzLnJlQ2FwdGNoYUFwaS5yZW5kZXIodGhpcy5jYXB0Y2hhRWxlbUlkLCB0aGlzLmdldENhcHRjaGFQcm9wZXJ0aWVzKCkpO1xyXG4gICAgICAgICAgICB0aGlzLnJlYWR5Lm5leHQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSByZWNlaXZlcyByZXNwb25zZVxyXG4gICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2tcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgaGFuZGxlQ2FsbGJhY2soY2FsbGJhY2s6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFJlc3BvbnNlID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzLm5leHQoY2FsbGJhY2spO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShjYWxsYmFjayk7XHJcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKGNhbGxiYWNrKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVzZXRDYXB0Y2hhQWZ0ZXJTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRDYXB0Y2hhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UHNldWRvVW5pcXVlTnVtYmVyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldHVwQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGNhcHRjaGEgc3BlY2lmaWMgc2V0dXBcclxuICAgICAgICB0aGlzLmNhcHRjaGFTcGVjaWZpY1NldHVwKCk7XHJcblxyXG4gICAgICAgIC8vIGNyZWF0ZSBjYXB0Y2hhIHdyYXBwZXJcclxuICAgICAgICB0aGlzLmNyZWF0ZUFuZFNldENhcHRjaGFFbGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NyaXB0U2VydmljZS5yZWdpc3RlckNhcHRjaGFTY3JpcHQoJ2V4cGxpY2l0JywgKGdyZWNhcHRjaGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbmxvYWRDYWxsYmFjayhncmVjYXB0Y2hhKTtcclxuICAgICAgICB9LCB0aGlzLmhsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gZ29vZ2xlJ3MgcmVjYXB0Y2hhIHNjcmlwdCBpcyByZWFkeVxyXG4gICAgKi9cclxuICAgIHByaXZhdGUgb25sb2FkQ2FsbGJhY2soZ3JlY2FwY2hhOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICAvLyBhc3NpZ24gcmVmZXJlbmNlIHRvIHJlQ2FwdGNoYSBBcGkgb25jZSBpdHMgbG9hZGVkXHJcbiAgICAgICAgdGhpcy5yZUNhcHRjaGFBcGkgPSBncmVjYXBjaGE7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZUNhcHRjaGFBcGkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFJlQ2FwdGNoYSBBcGkgd2FzIG5vdCBpbml0aWFsaXplZCBjb3JyZWN0bHlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGxvYWRlZCBmbGFnXHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIGZpcmUgbG9hZCBldmVudFxyXG4gICAgICAgIHRoaXMubG9hZC5uZXh0KCk7XHJcblxyXG4gICAgICAgIC8vIHJlbmRlciBjYXB0Y2hhXHJcbiAgICAgICAgdGhpcy5yZW5kZXJSZUNhcHRjaGEoKTtcclxuXHJcbiAgICAgICAgLy8gc2V0dXAgY29tcG9uZW50IGlmIGl0IHdhcyBmbGFnZ2VkIGFzIHN1Y2hcclxuICAgICAgICBpZiAodGhpcy5zZXR1cEFmdGVyTG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHVwQWZ0ZXJMb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZU5ld0VsZW1JZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHRjaGFFbGVtUHJlZml4ICsgdGhpcy5nZXRQc2V1ZG9VbmlxdWVOdW1iZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUFuZFNldENhcHRjaGFFbGVtKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGdlbmVyYXRlIG5ldyBjYXB0Y2hhIGlkXHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhRWxlbUlkID0gdGhpcy5nZW5lcmF0ZU5ld0VsZW1JZCgpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FwdGNoYUVsZW1JZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgQ2FwdGNoYSBlbGVtIElkIGlzIG5vdCBzZXRgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlbW92ZSBvbGQgaHRtbFxyXG4gICAgICAgIHRoaXMuY2FwdGNoYVdyYXBwZXJFbGVtLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XHJcblxyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgd3JhcHBlciBmb3IgY2FwdGNoYVxyXG4gICAgICAgIGNvbnN0IG5ld0VsZW0gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIG5ld0VsZW0uaWQgPSB0aGlzLmNhcHRjaGFFbGVtSWQ7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5jYXB0Y2hhV3JhcHBlckVsZW0ubmF0aXZlRWxlbWVudCwgbmV3RWxlbSk7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBjYXB0Y2hhIGVsZW1cclxuICAgICAgICB0aGlzLmVuc3VyZUNhcHRjaGFFbGVtKHRoaXMuY2FwdGNoYUVsZW1JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUbyBiZSBhbGlnbmVkIHdpdGggdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZFxyXG4gICAgICogSG93ZXZlciBhcyB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSB0aGUgcmVjYXB0Y2hhLCB0aGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBpbXBsZW1lbnRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBoZWxwcyB1cyB0aWUgdG9nZXRoZXIgcmVjYXB0Y2hhIGFuZCBvdXIgZm9ybUNvbnRyb2wgdmFsdWVzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEF0IHNvbWUgcG9pbnQgd2UgbWlnaHQgYmUgaW50ZXJlc3RlZCB3aGV0aGVyIHRoZSB1c2VyIGhhcyB0b3VjaGVkIG91ciBjb21wb25lbnRcclxuICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcbn1cclxuXHJcbiJdfQ==

@@ -138,4 +138,8 @@ import { EventEmitter, Input, Output, ViewChild, Injectable, NgZone, Component, forwardRef, Injector, Renderer2, NgModule } from '@angular/core';

renderReCaptcha() {
this.captchaId = this.reCaptchaApi.render(this.captchaElemId, this.getCaptchaProperties());
this.ready.next();
// run outside angular zone due to timeout issues when testing
// details: https://github.com/Enngage/ngx-captcha/issues/26
this.zone.runOutsideAngular(() => {
this.captchaId = this.reCaptchaApi.render(this.captchaElemId, this.getCaptchaProperties());
this.ready.next();
});
}

@@ -672,2 +676,2 @@ /**

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNhcHRjaGEuanMubWFwIiwic291cmNlcyI6WyJuZzovL25neC1jYXB0Y2hhL2xpYi9jb21wb25lbnRzL2Jhc2UtcmVjYXB0Y2hhLmNvbXBvbmVudC50cyIsIm5nOi8vbmd4LWNhcHRjaGEvbGliL21vZGVscy9yZWNhcHRjaGEtdHlwZS5lbnVtLnRzIiwibmc6Ly9uZ3gtY2FwdGNoYS9saWIvc2VydmljZXMvc2NyaXB0LnNlcnZpY2UudHMiLCJuZzovL25neC1jYXB0Y2hhL2xpYi9jb21wb25lbnRzL2ludmlzaWJsZS1yZWNhcHRjaGEuY29tcG9uZW50LnRzIiwibmc6Ly9uZ3gtY2FwdGNoYS9saWIvY29tcG9uZW50cy9yZWNhcHRjaGEtMi5jb21wb25lbnQudHMiLCJuZzovL25neC1jYXB0Y2hhL2xpYi9zZXJ2aWNlcy9yZWNhcHRjaGFfdjMuc2VydmljZS50cyIsIm5nOi8vbmd4LWNhcHRjaGEvbGliL25neC1jYXB0Y2hhLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgTmdab25lLFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUmVuZGVyZXIyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlY2FwdGNoYS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VSZUNhcHRjaGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICogUHJlZml4IG9mIHRoZSBjYXB0Y2hhIGVsZW1lbnRcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FwdGNoYUVsZW1QcmVmaXggPSAnbmd4X2NhcHRjaGFfaWRfJztcclxuXHJcbiAgICAvKipcclxuICAgICogR29vZ2xlJ3Mgc2l0ZSBrZXkuXHJcbiAgICAqIFlvdSBjYW4gZmluZCB0aGlzIHVuZGVyIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgc2l0ZUtleTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUeXBlXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgdHlwZTogJ2F1ZGlvJyB8ICdpbWFnZScgPSAnaW1hZ2UnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBMYW5ndWFnZSBjb2RlLiBBdXRvLWRldGVjdHMgdGhlIHVzZXIncyBsYW5ndWFnZSBpZiB1bnNwZWNpZmllZC5cclxuICAgICovXHJcbiAgICBASW5wdXQoKSBobDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUYWIgaW5kZXhcclxuICAgICovXHJcbiAgICBASW5wdXQoKSB0YWJJbmRleCA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGNhcHRjaGEgcmVjZWl2ZXMgc3VjY2Vzc2Z1bCByZXNwb25zZS5cclxuICAgICogQ2FwdGNoYSByZXNwb25zZSB0b2tlbiBpcyBwYXNzZWQgdG8gZXZlbnQuXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpIHN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSBpcyBsb2FkZWQuIEV2ZW50IHJlY2VpdmVzIGlkIG9mIHRoZSBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpIGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSBpcyBsb2FkZWQgJiByZWFkeS4gSS5lLiB3aGVuIHlvdSBuZWVkIHRvIGV4ZWN1dGUgY2FwdGNoYSBvbiBjb21wb25lbnQgbG9hZC5cclxuICAgICovXHJcbiAgICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY2FwdGNoYVdyYXBwZXJFbGVtJykgY2FwdGNoYVdyYXBwZXJFbGVtOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgnY2FwdGNoYVNjcmlwdEVsZW0nKSBjYXB0Y2hhU2NyaXB0RWxlbTogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhdGVzIGlmIGNhcHRjaGEgc2hvdWxkIGJlIHNldCBvbiBsb2FkXHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXR1cEFmdGVyTG9hZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYXB0Y2hhIGVsZW1lbnRcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY2FwdGNoYUVsZW0/OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAvKipcclxuICAgICogSWQgb2YgdGhlIGNhcHRjaGEgZWxlbVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBjYXB0Y2hhSWQ/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEhvbGRzIGxhc3QgcmVzcG9uc2UgdmFsdWVcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3VycmVudFJlc3BvbnNlPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBJZiBlbmFibGVkLCBjYXB0Y2hhIHdpbGwgcmVzZXQgYWZ0ZXIgcmVjZWl2aW5nIHN1Y2Nlc3MgcmVzcG9uc2UuIFRoaXMgaXMgdXNlZnVsXHJcbiAgICAqIHdoZW4gaW52aXNpYmxlIGNhcHRjaGEgbmVlZCB0byBiZSByZXNvbHZlZCBtdWx0aXBsZSB0aW1lcyBvbiBzYW1lIHBhZ2VcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVzZXRDYXB0Y2hhQWZ0ZXJTdWNjZXNzID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhcHRjaGEgdHlwZVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCByZWNhcHRjaGFUeXBlOiBSZUNhcHRjaGFUeXBlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBSZXF1aXJlZCBieSBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XHJcbiAgICBwcm90ZWN0ZWQgb25Ub3VjaGVkOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhdGVzIGlmIGNhcHRjaGEgaXMgbG9hZGVkXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGlzTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlZmVyZW5jZSB0byBnbG9iYWwgcmVDYXB0Y2hhIEFQSVxyXG4gICAgKi9cclxuICAgIHB1YmxpYyByZUNhcHRjaGFBcGk/OiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIElkIG9mIHRoZSBET00gZWxlbWVudCB3cmFwcGluZyBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGNhcHRjaGFFbGVtSWQ/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEZvcm0gQ29udHJvbCB0byBiZSBlbmFibGUgdXNhZ2UgaW4gcmVhY3RpdmUgZm9ybXNcclxuICAgICovXHJcbiAgICBwdWJsaWMgY29udHJvbD86IEZvcm1Db250cm9sO1xyXG5cclxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxyXG4gICAgICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJvdGVjdGVkIHNjcmlwdFNlcnZpY2U6IFNjcmlwdFNlcnZpY2UsXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpLmNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgcmVDYXB0Y2hhIHByb3BlcnRpZXNcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Q2FwdGNoYVByb3BlcnRpZXMoKTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBVc2VkIGZvciBjYXB0Y2hhIHNwZWNpZmljIHNldHVwXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGNhcHRjaGFTcGVjaWZpY1NldHVwKCk6IHZvaWQ7XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIC8vIGNsZWFudXAgc2NyaXB0cyBpZiBsYW5ndWFnZSBjaGFuZ2VkIGJlY2F1c2UgdGhleSBuZWVkIHRvIGJlIHJlbG9hZGVkXHJcbiAgICAgICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlcy5obCkge1xyXG4gICAgICAgICAgICBpZiAoIWNoYW5nZXMuaGwuZmlyc3RDaGFuZ2UgJiYgKGNoYW5nZXMuaGwuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmhsLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdFNlcnZpY2UuY2xlYW51cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHVwQ29tcG9uZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgY2FwdGNoYSByZXNwb25zZSBhcyBwZXIgcmVDYXB0Y2hhIGRvY3NcclxuICAgICovXHJcbiAgICBnZXRSZXNwb25zZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlQ2FwdGNoYUFwaS5nZXRSZXNwb25zZSh0aGlzLmNhcHRjaGFJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgSWQgb2YgY2FwdGNoYSB3aWRnZXRcclxuICAgICovXHJcbiAgICBnZXRDYXB0Y2hhSWQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXB0Y2hhSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlc2V0cyBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgcmVzZXRDYXB0Y2hhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgbGFzdCBzdWJtaXR0ZWQgY2FwdGNoYSByZXNwb25zZVxyXG4gICAgKi9cclxuICAgIGdldEN1cnJlbnRSZXNwb25zZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRSZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogUmVsb2FkIGNhcHRjaGEuIFVzZWZ1bCB3aGVuIHByb3BlcnRpZXMgKGkuZS4gdGhlbWUpIGNoYW5nZWQgYW5kIGNhcHRjaGEgbmVlZCB0byByZWZsZWN0IHRoZW1cclxuICAgICovXHJcbiAgICByZWxvYWRDYXB0Y2hhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZW5zdXJlQ2FwdGNoYUVsZW0oY2FwdGNoYUVsZW1JZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2FwdGNoYUVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYXB0Y2hhRWxlbUlkKTtcclxuXHJcbiAgICAgICAgaWYgKCFjYXB0Y2hhRWxlbSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgQ2FwdGNoYSBlbGVtZW50IHdpdGggaWQgJyR7Y2FwdGNoYUVsZW1JZH0nIHdhcyBub3QgZm91bmRgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFzc2lnbiBjYXB0Y2hhIGFsZW1cclxuICAgICAgICB0aGlzLmNhcHRjaGFFbGVtID0gY2FwdGNoYUVsZW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIGNhcHRjaGEgZWxlbWVudFxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCByZW5kZXJSZUNhcHRjaGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhSWQgPSB0aGlzLnJlQ2FwdGNoYUFwaS5yZW5kZXIodGhpcy5jYXB0Y2hhRWxlbUlkLCB0aGlzLmdldENhcHRjaGFQcm9wZXJ0aWVzKCkpO1xyXG4gICAgICAgIHRoaXMucmVhZHkubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYWxsZWQgd2hlbiBjYXB0Y2hhIHJlY2VpdmVzIHJlc3BvbnNlXHJcbiAgICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFja1xyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBoYW5kbGVDYWxsYmFjayhjYWxsYmFjazogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzcG9uc2UgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLnN1Y2Nlc3MubmV4dChjYWxsYmFjayk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoY2FsbGJhY2spO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZXNldENhcHRjaGFBZnRlclN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldENhcHRjaGEoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQc2V1ZG9VbmlxdWVOdW1iZXIoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRVVENNaWxsaXNlY29uZHMoKSArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0dXBDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gY2FwdGNoYSBzcGVjaWZpYyBzZXR1cFxyXG4gICAgICAgIHRoaXMuY2FwdGNoYVNwZWNpZmljU2V0dXAoKTtcclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIGNhcHRjaGEgd3JhcHBlclxyXG4gICAgICAgIHRoaXMuY3JlYXRlQW5kU2V0Q2FwdGNoYUVsZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JpcHRTZXJ2aWNlLnJlZ2lzdGVyQ2FwdGNoYVNjcmlwdCgnZXhwbGljaXQnLCAoZ3JlY2FwdGNoYSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9ubG9hZENhbGxiYWNrKGdyZWNhcHRjaGEpO1xyXG4gICAgICAgIH0sIHRoaXMuaGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYWxsZWQgd2hlbiBnb29nbGUncyByZWNhcHRjaGEgc2NyaXB0IGlzIHJlYWR5XHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbmxvYWRDYWxsYmFjayhncmVjYXBjaGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIC8vIGFzc2lnbiByZWZlcmVuY2UgdG8gcmVDYXB0Y2hhIEFwaSBvbmNlIGl0cyBsb2FkZWRcclxuICAgICAgICB0aGlzLnJlQ2FwdGNoYUFwaSA9IGdyZWNhcGNoYTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlQ2FwdGNoYUFwaSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUmVDYXB0Y2hhIEFwaSB3YXMgbm90IGluaXRpYWxpemVkIGNvcnJlY3RseWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbG9hZGVkIGZsYWdcclxuICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gZmlyZSBsb2FkIGV2ZW50XHJcbiAgICAgICAgdGhpcy5sb2FkLm5leHQoKTtcclxuXHJcbiAgICAgICAgLy8gcmVuZGVyIGNhcHRjaGFcclxuICAgICAgICB0aGlzLnJlbmRlclJlQ2FwdGNoYSgpO1xyXG5cclxuICAgICAgICAvLyBzZXR1cCBjb21wb25lbnQgaWYgaXQgd2FzIGZsYWdnZWQgYXMgc3VjaFxyXG4gICAgICAgIGlmICh0aGlzLnNldHVwQWZ0ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBBZnRlckxvYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlTmV3RWxlbUlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwdGNoYUVsZW1QcmVmaXggKyB0aGlzLmdldFBzZXVkb1VuaXF1ZU51bWJlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlQW5kU2V0Q2FwdGNoYUVsZW0oKTogdm9pZCB7XHJcbiAgICAgICAgLy8gZ2VuZXJhdGUgbmV3IGNhcHRjaGEgaWRcclxuICAgICAgICB0aGlzLmNhcHRjaGFFbGVtSWQgPSB0aGlzLmdlbmVyYXRlTmV3RWxlbUlkKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jYXB0Y2hhRWxlbUlkKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBDYXB0Y2hhIGVsZW0gSWQgaXMgbm90IHNldGApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVtb3ZlIG9sZCBodG1sXHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhV3JhcHBlckVsZW0ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIG5ldyB3cmFwcGVyIGZvciBjYXB0Y2hhXHJcbiAgICAgICAgY29uc3QgbmV3RWxlbSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5pZCA9IHRoaXMuY2FwdGNoYUVsZW1JZDtcclxuXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmNhcHRjaGFXcmFwcGVyRWxlbS5uYXRpdmVFbGVtZW50LCBuZXdFbGVtKTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIGNhcHRjaGEgZWxlbVxyXG4gICAgICAgIHRoaXMuZW5zdXJlQ2FwdGNoYUVsZW0odGhpcy5jYXB0Y2hhRWxlbUlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvIGJlIGFsaWduZWQgd2l0aCB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIHdlIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kXHJcbiAgICAgKiBIb3dldmVyIGFzIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHRoZSByZWNhcHRjaGEsIHRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGltcGxlbWVudGVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGhlbHBzIHVzIHRpZSB0b2dldGhlciByZWNhcHRjaGEgYW5kIG91ciBmb3JtQ29udHJvbCB2YWx1ZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQXQgc29tZSBwb2ludCB3ZSBtaWdodCBiZSBpbnRlcmVzdGVkIHdoZXRoZXIgdGhlIHVzZXIgaGFzIHRvdWNoZWQgb3VyIGNvbXBvbmVudFxyXG4gICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxufVxyXG5cclxuIiwiZXhwb3J0IGVudW0gUmVDYXB0Y2hhVHlwZSB7XHJcblxyXG4gICAgSW52aXNpYmxlUmVDYXB0Y2hhLFxyXG4gICAgUmVDYXB0Y2hhMlxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZGVjbGFyZSB2YXIgZG9jdW1lbnQ6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNjcmlwdFNlcnZpY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmFtZSBvZiB0aGUgZ2xvYmFsIGdvb2dsZSByZWNhcHRjaGEgc2NyaXB0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCByZWFkb25seSB3aW5kb3dHcmVjYXB0Y2hhID0gJ2dyZWNhcHRjaGEnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBOYW1lIG9mIHRoZSBnbG9iYWwgY2FsbGJhY2tcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2luZG93T25Mb2FkQ2FsbGJhY2tQcm9wZXJ0eSA9ICduZ3hfY2FwdGNoYV9vbmxvYWRfY2FsbGJhY2snO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCB6b25lOiBOZ1pvbmUsXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckNhcHRjaGFTY3JpcHQocmVuZGVyOiBzdHJpbmcsIG9uTG9hZDogKGdyZWNhcHRjaGE6IGFueSkgPT4gdm9pZCwgbGFuZ3VhZ2U/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5ncmVjYXB0Y2hhU2NyaXB0TG9hZGVkKCkpIHtcclxuICAgICAgICAgICAgLy8gcmVjYXB0Y2hhIHNjcmlwdCBpcyBhbHJlYWR5IGxvYWRlZFxyXG4gICAgICAgICAgICAvLyBqdXN0IGNhbGwgdGhlIGNhbGxiYWNrXHJcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25Mb2FkKHdpbmRvd1t0aGlzLndpbmRvd0dyZWNhcHRjaGFdKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gcGF0Y2ggdGhlIGNhbGxiYWNrIHRocm91Z2ggZ2xvYmFsIHZhcmlhYmxlLCBvdGhlcndpc2UgY2FsbGJhY2sgaXMgbm90IGFjY2Vzc2libGVcclxuICAgICAgICAvLyBub3RlOiBodHRwczovL2dpdGh1Yi5jb20vRW5uZ2FnZS9uZ3gtY2FwdGNoYS9pc3N1ZXMvMlxyXG4gICAgICAgIHdpbmRvd1t0aGlzLndpbmRvd09uTG9hZENhbGxiYWNrUHJvcGVydHldID0gPGFueT4oKCkgPT4gdGhpcy56b25lLnJ1bihcclxuICAgICAgICAgICAgb25Mb2FkLmJpbmQodGhpcywgd2luZG93W3RoaXMud2luZG93R3JlY2FwdGNoYV0pXHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICAgIC8vIHByZXBhcmUgc2NyaXB0IGVsZW1cclxuICAgICAgICBjb25zdCBzY3JpcHRFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgICAgc2NyaXB0RWxlbS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBzY3JpcHRFbGVtLnNyYyA9IHRoaXMuZ2V0Q2FwdGNoYVNjcmlwdFVybChyZW5kZXIsIGxhbmd1YWdlKTtcclxuICAgICAgICBzY3JpcHRFbGVtLmFzeW5jID0gdHJ1ZTtcclxuICAgICAgICBzY3JpcHRFbGVtLmRlZmVyID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gYWRkIHNjcmlwdCB0byBoZWFkZXJcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHNjcmlwdEVsZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFudXAoKTogdm9pZCB7XHJcbiAgICAgICAgd2luZG93W3RoaXMud2luZG93T25Mb2FkQ2FsbGJhY2tQcm9wZXJ0eV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgd2luZG93W3RoaXMud2luZG93R3JlY2FwdGNoYV0gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgZ29vZ2xlIHJlY2FwdGNoYSBzY3JpcHQgaXMgYXZhaWxhYmxlIGFuZCByZWFkeSB0byBiZSB1c2VkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ3JlY2FwdGNoYVNjcmlwdExvYWRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAod2luZG93W3RoaXMud2luZG93T25Mb2FkQ2FsbGJhY2tQcm9wZXJ0eV0gJiYgd2luZG93W3RoaXMud2luZG93R3JlY2FwdGNoYV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgbGFuZ3VhZ2UgcGFyYW0gdXNlZCBpbiBzY3JpcHQgdXJsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0TGFuZ3VhZ2VQYXJhbShobD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFobCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYCZobD0ke2hsfWA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFVybCB0byBnb29nbGUgYXBpIHNjcmlwdFxyXG4gICAgKi9cclxuICAgIHByaXZhdGUgZ2V0Q2FwdGNoYVNjcmlwdFVybChyZW5kZXI6IHN0cmluZywgbGFuZ3VhZ2U/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuICAgICAgICByZXR1cm4gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhL2FwaS5qcz9vbmxvYWQ9JHt0aGlzLndpbmRvd09uTG9hZENhbGxiYWNrUHJvcGVydHl9JnJlbmRlcj0ke3JlbmRlcn0ke3RoaXMuZ2V0TGFuZ3VhZ2VQYXJhbShsYW5ndWFnZSl9YDtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9wdGlvbmFsLFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFJlQ2FwdGNoYVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcmVjYXB0Y2hhLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFNjcmlwdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY3JpcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VSZUNhcHRjaGFDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtcmVjYXB0Y2hhLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1pbnZpc2libGUtcmVjYXB0Y2hhJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDxkaXYgI2NhcHRjaGFXcmFwcGVyRWxlbT48L2Rpdj5gLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW52aXNpYmxlUmVDYXB0Y2hhQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW52aXNpYmxlUmVDYXB0Y2hhQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJlQ2FwdGNoYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgc2l6ZSByZXByZXNlbnRpbmcgaW52aXNpYmxlIGNhcHRjaGFcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2l6ZSA9ICdpbnZpc2libGUnO1xyXG5cclxuICAvKipcclxuICAgKiBCYWRnZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGJhZGdlOiAnYm90dG9tcmlnaHQnIHwgJ2JvdHRvbWxlZnQnIHwgJ2lubGluZScgPSAnYm90dG9tcmlnaHQnO1xyXG5cclxuICAvKipcclxuICAgKiBMYW5ndWFnZSBjb2RlLiBBdXRvLWRldGVjdHMgdGhlIHVzZXIncyBsYW5ndWFnZSBpZiB1bnNwZWNpZmllZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBobDogc3RyaW5nO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVjYXB0Y2hhVHlwZTogUmVDYXB0Y2hhVHlwZSA9IFJlQ2FwdGNoYVR5cGUuSW52aXNpYmxlUmVDYXB0Y2hhO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSxcclxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcm90ZWN0ZWQgc2NyaXB0U2VydmljZTogU2NyaXB0U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIocmVuZGVyZXIsIHpvbmUsIGluamVjdG9yLCBzY3JpcHRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvZ3JhbWF0aWNhbGx5IGludm9rZSB0aGUgcmVDQVBUQ0hBIGNoZWNrLiBVc2VkIGlmIHRoZSBpbnZpc2libGUgcmVDQVBUQ0hBIGlzIG9uIGEgZGl2IGluc3RlYWQgb2YgYSBidXR0b24uXHJcbiAgICovXHJcbiAgZXhlY3V0ZSgpOiB2b2lkIHtcclxuICAgIC8vIGV4ZWN1dGUgY2FwdGNoYVxyXG4gICAgdGhpcy5yZUNhcHRjaGFBcGkuZXhlY3V0ZSh0aGlzLmNhcHRjaGFJZCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY2FwdGNoYVNwZWNpZmljU2V0dXAoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEdldHMgcmVDYXB0Y2hhIHByb3BlcnRpZXNcclxuICAqL1xyXG4gIHByb3RlY3RlZCBnZXRDYXB0Y2hhUHJvcGVydGllcygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ3NpdGVrZXknOiB0aGlzLnNpdGVLZXksXHJcbiAgICAgICdjYWxsYmFjayc6IChyZXNwb25zZSkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmhhbmRsZUNhbGxiYWNrKHJlc3BvbnNlKSksXHJcbiAgICAgICdiYWRnZSc6IHRoaXMuYmFkZ2UsXHJcbiAgICAgICd0eXBlJzogdGhpcy50eXBlLFxyXG4gICAgICAndGFiaW5kZXgnOiB0aGlzLnRhYkluZGV4LFxyXG4gICAgICAnc2l6ZSc6IHRoaXMuc2l6ZVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXHJcbiIsImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlY2FwdGNoYS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlUmVDYXB0Y2hhQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLXJlY2FwdGNoYS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtcmVjYXB0Y2hhMicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICA8ZGl2ICNjYXB0Y2hhV3JhcHBlckVsZW0+PC9kaXY+YCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJlQ2FwdGNoYTJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZUNhcHRjaGEyQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJlQ2FwdGNoYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgLyoqXHJcbiAgKiBOYW1lIG9mIHRoZSBnbG9iYWwgZXhwaXJlIGNhbGxiYWNrXHJcbiAgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2luZG93T25FcnJvckNhbGxiYWNrUHJvcGVydHkgPSAnbmd4X2NhcHRjaGFfZXJyb3JfY2FsbGJhY2snO1xyXG5cclxuICAvKipcclxuICAqIE5hbWUgb2YgdGhlIGdsb2JhbCBlcnJvciBjYWxsYmFja1xyXG4gICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpbmRvd09uRXhwaXJlQ2FsbGJhY2tQcm9wZXJ0eSA9ICduZ3hfY2FwdGNoYV9leHBpcmVfY2FsbGJhY2snO1xyXG5cclxuICAvKipcclxuICAgKiBUaGVtZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRoZW1lOiAnZGFyaycgfCAnbGlnaHQnID0gJ2xpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgKiBTaXplXHJcbiAgKi9cclxuICBASW5wdXQoKSBzaXplOiAnY29tcGFjdCcgfCAnbm9ybWFsJyA9ICdub3JtYWwnO1xyXG5cclxuICAvKipcclxuICAgKiBMYW5ndWFnZSBjb2RlLiBBdXRvLWRldGVjdHMgdGhlIHVzZXIncyBsYW5ndWFnZSBpZiB1bnNwZWNpZmllZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBobDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAqIEV4cGlyZWQgY2FsbGJhY2tcclxuICAqL1xyXG4gIEBPdXRwdXQoKSBleHBpcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICogRXJyb3IgY2FsbGJhY2tcclxuICAqL1xyXG4gIEBPdXRwdXQoKSBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlY2FwdGNoYVR5cGU6IFJlQ2FwdGNoYVR5cGUgPSBSZUNhcHRjaGFUeXBlLlJlQ2FwdGNoYTI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxyXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByb3RlY3RlZCBzY3JpcHRTZXJ2aWNlOiBTY3JpcHRTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIocmVuZGVyZXIsIHpvbmUsIGluamVjdG9yLCBzY3JpcHRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB3aW5kb3dbdGhpcy53aW5kb3dPbkVycm9yQ2FsbGJhY2tQcm9wZXJ0eV0gPSB7fTtcclxuICAgIHdpbmRvd1t0aGlzLndpbmRvd09uRXhwaXJlQ2FsbGJhY2tQcm9wZXJ0eV0gPSB7fTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjYXB0Y2hhU3BlY2lmaWNTZXR1cCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVnaXN0ZXJDYWxsYmFja3MoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgcmVDYXB0Y2hhIHByb3BlcnRpZXNcclxuICAqL1xyXG4gIHByb3RlY3RlZCBnZXRDYXB0Y2hhUHJvcGVydGllcygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ3NpdGVrZXknOiB0aGlzLnNpdGVLZXksXHJcbiAgICAgICdjYWxsYmFjayc6IChyZXNwb25zZSkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmhhbmRsZUNhbGxiYWNrKHJlc3BvbnNlKSksXHJcbiAgICAgICdleHBpcmVkLWNhbGxiYWNrJzogKCkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmhhbmRsZUV4cGlyZUNhbGxiYWNrKCkpLFxyXG4gICAgICAnZXJyb3ItY2FsbGJhY2snOiAoKSA9PiB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuaGFuZGxlRXJyb3JDYWxsYmFjaygpKSxcclxuICAgICAgJ3RoZW1lJzogdGhpcy50aGVtZSxcclxuICAgICAgJ3R5cGUnOiB0aGlzLnR5cGUsXHJcbiAgICAgICdzaXplJzogdGhpcy5zaXplLFxyXG4gICAgICAndGFiaW5kZXgnOiB0aGlzLnRhYkluZGV4XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXJzIGdsb2JhbCBjYWxsYmFja3NcclxuICAqL1xyXG4gIHByaXZhdGUgcmVnaXN0ZXJDYWxsYmFja3MoKTogdm9pZCB7XHJcbiAgICB3aW5kb3dbdGhpcy53aW5kb3dPbkVycm9yQ2FsbGJhY2tQcm9wZXJ0eV0gPSB0aGlzLmhhbmRsZUVycm9yQ2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIHdpbmRvd1t0aGlzLndpbmRvd09uRXhwaXJlQ2FsbGJhY2tQcm9wZXJ0eV0gPSB0aGlzLmhhbmRsZUV4cGlyZUNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGVycm9yIGNhbGxiYWNrXHJcbiAgKi9cclxuICBwcml2YXRlIGhhbmRsZUVycm9yQ2FsbGJhY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgdGhpcy5vbkNoYW5nZSh1bmRlZmluZWQpO1xyXG4gICAgICB0aGlzLm9uVG91Y2hlZCh1bmRlZmluZWQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lcnJvci5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGV4cGlyZWQgY2FsbGJhY2tcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZUV4cGlyZUNhbGxiYWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBpcmUubmV4dCgpO1xyXG5cclxuICAgIC8vIHJlc2V0IGNhcHRjaGEgb24gZXhwaXJlIGNhbGxiYWNrXHJcbiAgICB0aGlzLnJlc2V0Q2FwdGNoYSgpO1xyXG4gIH1cclxufVxyXG5cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU2NyaXB0U2VydmljZSB9IGZyb20gJy4vc2NyaXB0LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUmVDYXB0Y2hhVjNTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgc2NyaXB0U2VydmljZTogU2NyaXB0U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFeGVjdXRlcyByZUNhcHRjaGEgdjMgd2l0aCBnaXZlbiBhY3Rpb24gYW5kIHBhc3NlcyB0b2tlbiB2aWEgY2FsbGJhY2suIFlvdSBuZWVkIHRvIHZlcmlmeVxyXG4gICAgICogdGhpcyBjYWxsYmFjayBpbiB5b3VyIGJhY2tlbmQgdG8gZ2V0IG1lYW5pbmdmdWwgcmVzdWx0cy5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcmVjYXB0Y2hhL2RvY3MvdjNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2l0ZUtleSBTaXRlIGtleSBmb3VuZCBpbiB5b3VyIGdvb2dsZSBhZG1pbiBwYW5lbFxyXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdG8gbG9nXHJcbiAgICAgKi9cclxuICAgIGV4ZWN1dGUoc2l0ZUtleTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgY2FsbGJhY2s6ICh0b2tlbjogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY3JpcHRTZXJ2aWNlLnJlZ2lzdGVyQ2FwdGNoYVNjcmlwdChzaXRlS2V5LCAoZ3JlY2FwdGNoYSkgPT4ge1xyXG4gICAgICAgICAgICBncmVjYXB0Y2hhLmV4ZWN1dGUoc2l0ZUtleSwge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25cclxuICAgICAgICAgICAgfSkudGhlbigodG9rZW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRva2VuKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEludmlzaWJsZVJlQ2FwdGNoYUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pbnZpc2libGUtcmVjYXB0Y2hhLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZUNhcHRjaGEyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JlY2FwdGNoYS0yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZUNhcHRjaGFWM1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3JlY2FwdGNoYV92My5zZXJ2aWNlJztcbmltcG9ydCB7IFNjcmlwdFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NjcmlwdC5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBSZUNhcHRjaGEyQ29tcG9uZW50LFxuICAgIEludmlzaWJsZVJlQ2FwdGNoYUNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBTY3JpcHRTZXJ2aWNlLFxuICAgIFJlQ2FwdGNoYVYzU2VydmljZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgUmVDYXB0Y2hhMkNvbXBvbmVudCxcbiAgICBJbnZpc2libGVSZUNhcHRjaGFDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hDYXB0Y2hhTW9kdWxlIHtcbn1cblxuXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7O0FBa0JBOzs7Ozs7O0lBd0dJLFlBQ2MsUUFBbUIsRUFDbkIsSUFBWSxFQUNaLFFBQWtCLEVBQ2xCLGFBQTRCO1FBSDVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsa0JBQWEsR0FBYixhQUFhLENBQWU7Ozs7aUNBdkdILGlCQUFpQjs7OztvQkFXckIsT0FBTzs7Ozt3QkFVdEIsQ0FBQzs7Ozs7dUJBTUQsSUFBSSxZQUFZLEVBQVU7Ozs7b0JBSzdCLElBQUksWUFBWSxFQUFVOzs7O3FCQUt6QixJQUFJLFlBQVksRUFBUTs7Ozs4QkFRakIsS0FBSzs7Ozs7d0NBcUJPLEtBQUs7Ozs7d0JBZ0J4QixLQUFLO0tBc0JsQjs7OztJQUVMLGVBQWU7UUFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztLQUN2RDs7Ozs7SUFZRCxXQUFXLENBQUMsT0FBc0I7O1FBRTlCLElBQUksT0FBTyxJQUFJLE9BQU8sTUFBRyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLE9BQUksV0FBVyxLQUFLLE9BQU8sT0FBSSxZQUFZLEtBQUssT0FBTyxPQUFJLGFBQWEsQ0FBQyxFQUFFO2dCQUNuRixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2hDO1NBQ0o7UUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7S0FDekI7Ozs7O0lBS0QsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFD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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNhcHRjaGEuanMubWFwIiwic291cmNlcyI6WyJuZzovL25neC1jYXB0Y2hhL2xpYi9jb21wb25lbnRzL2Jhc2UtcmVjYXB0Y2hhLmNvbXBvbmVudC50cyIsIm5nOi8vbmd4LWNhcHRjaGEvbGliL21vZGVscy9yZWNhcHRjaGEtdHlwZS5lbnVtLnRzIiwibmc6Ly9uZ3gtY2FwdGNoYS9saWIvc2VydmljZXMvc2NyaXB0LnNlcnZpY2UudHMiLCJuZzovL25neC1jYXB0Y2hhL2xpYi9jb21wb25lbnRzL2ludmlzaWJsZS1yZWNhcHRjaGEuY29tcG9uZW50LnRzIiwibmc6Ly9uZ3gtY2FwdGNoYS9saWIvY29tcG9uZW50cy9yZWNhcHRjaGEtMi5jb21wb25lbnQudHMiLCJuZzovL25neC1jYXB0Y2hhL2xpYi9zZXJ2aWNlcy9yZWNhcHRjaGFfdjMuc2VydmljZS50cyIsIm5nOi8vbmd4LWNhcHRjaGEvbGliL25neC1jYXB0Y2hhLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgTmdab25lLFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUmVuZGVyZXIyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlY2FwdGNoYS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VSZUNhcHRjaGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICogUHJlZml4IG9mIHRoZSBjYXB0Y2hhIGVsZW1lbnRcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FwdGNoYUVsZW1QcmVmaXggPSAnbmd4X2NhcHRjaGFfaWRfJztcclxuXHJcbiAgICAvKipcclxuICAgICogR29vZ2xlJ3Mgc2l0ZSBrZXkuXHJcbiAgICAqIFlvdSBjYW4gZmluZCB0aGlzIHVuZGVyIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgc2l0ZUtleTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUeXBlXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgdHlwZTogJ2F1ZGlvJyB8ICdpbWFnZScgPSAnaW1hZ2UnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBMYW5ndWFnZSBjb2RlLiBBdXRvLWRldGVjdHMgdGhlIHVzZXIncyBsYW5ndWFnZSBpZiB1bnNwZWNpZmllZC5cclxuICAgICovXHJcbiAgICBASW5wdXQoKSBobDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUYWIgaW5kZXhcclxuICAgICovXHJcbiAgICBASW5wdXQoKSB0YWJJbmRleCA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGNhcHRjaGEgcmVjZWl2ZXMgc3VjY2Vzc2Z1bCByZXNwb25zZS5cclxuICAgICogQ2FwdGNoYSByZXNwb25zZSB0b2tlbiBpcyBwYXNzZWQgdG8gZXZlbnQuXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpIHN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSBpcyBsb2FkZWQuIEV2ZW50IHJlY2VpdmVzIGlkIG9mIHRoZSBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpIGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSBpcyBsb2FkZWQgJiByZWFkeS4gSS5lLiB3aGVuIHlvdSBuZWVkIHRvIGV4ZWN1dGUgY2FwdGNoYSBvbiBjb21wb25lbnQgbG9hZC5cclxuICAgICovXHJcbiAgICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY2FwdGNoYVdyYXBwZXJFbGVtJykgY2FwdGNoYVdyYXBwZXJFbGVtOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgnY2FwdGNoYVNjcmlwdEVsZW0nKSBjYXB0Y2hhU2NyaXB0RWxlbTogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhdGVzIGlmIGNhcHRjaGEgc2hvdWxkIGJlIHNldCBvbiBsb2FkXHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXR1cEFmdGVyTG9hZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDYXB0Y2hhIGVsZW1lbnRcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY2FwdGNoYUVsZW0/OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAvKipcclxuICAgICogSWQgb2YgdGhlIGNhcHRjaGEgZWxlbVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBjYXB0Y2hhSWQ/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEhvbGRzIGxhc3QgcmVzcG9uc2UgdmFsdWVcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3VycmVudFJlc3BvbnNlPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBJZiBlbmFibGVkLCBjYXB0Y2hhIHdpbGwgcmVzZXQgYWZ0ZXIgcmVjZWl2aW5nIHN1Y2Nlc3MgcmVzcG9uc2UuIFRoaXMgaXMgdXNlZnVsXHJcbiAgICAqIHdoZW4gaW52aXNpYmxlIGNhcHRjaGEgbmVlZCB0byBiZSByZXNvbHZlZCBtdWx0aXBsZSB0aW1lcyBvbiBzYW1lIHBhZ2VcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVzZXRDYXB0Y2hhQWZ0ZXJTdWNjZXNzID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhcHRjaGEgdHlwZVxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCByZWNhcHRjaGFUeXBlOiBSZUNhcHRjaGFUeXBlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBSZXF1aXJlZCBieSBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XHJcbiAgICBwcm90ZWN0ZWQgb25Ub3VjaGVkOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhdGVzIGlmIGNhcHRjaGEgaXMgbG9hZGVkXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGlzTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlZmVyZW5jZSB0byBnbG9iYWwgcmVDYXB0Y2hhIEFQSVxyXG4gICAgKi9cclxuICAgIHB1YmxpYyByZUNhcHRjaGFBcGk/OiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIElkIG9mIHRoZSBET00gZWxlbWVudCB3cmFwcGluZyBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGNhcHRjaGFFbGVtSWQ/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEZvcm0gQ29udHJvbCB0byBiZSBlbmFibGUgdXNhZ2UgaW4gcmVhY3RpdmUgZm9ybXNcclxuICAgICovXHJcbiAgICBwdWJsaWMgY29udHJvbD86IEZvcm1Db250cm9sO1xyXG5cclxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxyXG4gICAgICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJvdGVjdGVkIHNjcmlwdFNlcnZpY2U6IFNjcmlwdFNlcnZpY2UsXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpLmNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgcmVDYXB0Y2hhIHByb3BlcnRpZXNcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Q2FwdGNoYVByb3BlcnRpZXMoKTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBVc2VkIGZvciBjYXB0Y2hhIHNwZWNpZmljIHNldHVwXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGNhcHRjaGFTcGVjaWZpY1NldHVwKCk6IHZvaWQ7XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIC8vIGNsZWFudXAgc2NyaXB0cyBpZiBsYW5ndWFnZSBjaGFuZ2VkIGJlY2F1c2UgdGhleSBuZWVkIHRvIGJlIHJlbG9hZGVkXHJcbiAgICAgICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlcy5obCkge1xyXG4gICAgICAgICAgICBpZiAoIWNoYW5nZXMuaGwuZmlyc3RDaGFuZ2UgJiYgKGNoYW5nZXMuaGwuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmhsLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdFNlcnZpY2UuY2xlYW51cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHVwQ29tcG9uZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgY2FwdGNoYSByZXNwb25zZSBhcyBwZXIgcmVDYXB0Y2hhIGRvY3NcclxuICAgICovXHJcbiAgICBnZXRSZXNwb25zZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlQ2FwdGNoYUFwaS5nZXRSZXNwb25zZSh0aGlzLmNhcHRjaGFJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgSWQgb2YgY2FwdGNoYSB3aWRnZXRcclxuICAgICovXHJcbiAgICBnZXRDYXB0Y2hhSWQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXB0Y2hhSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlc2V0cyBjYXB0Y2hhXHJcbiAgICAqL1xyXG4gICAgcmVzZXRDYXB0Y2hhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgbGFzdCBzdWJtaXR0ZWQgY2FwdGNoYSByZXNwb25zZVxyXG4gICAgKi9cclxuICAgIGdldEN1cnJlbnRSZXNwb25zZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRSZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogUmVsb2FkIGNhcHRjaGEuIFVzZWZ1bCB3aGVuIHByb3BlcnRpZXMgKGkuZS4gdGhlbWUpIGNoYW5nZWQgYW5kIGNhcHRjaGEgbmVlZCB0byByZWZsZWN0IHRoZW1cclxuICAgICovXHJcbiAgICByZWxvYWRDYXB0Y2hhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZW5zdXJlQ2FwdGNoYUVsZW0oY2FwdGNoYUVsZW1JZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2FwdGNoYUVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYXB0Y2hhRWxlbUlkKTtcclxuXHJcbiAgICAgICAgaWYgKCFjYXB0Y2hhRWxlbSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgQ2FwdGNoYSBlbGVtZW50IHdpdGggaWQgJyR7Y2FwdGNoYUVsZW1JZH0nIHdhcyBub3QgZm91bmRgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFzc2lnbiBjYXB0Y2hhIGFsZW1cclxuICAgICAgICB0aGlzLmNhcHRjaGFFbGVtID0gY2FwdGNoYUVsZW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIGNhcHRjaGEgZWxlbWVudFxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCByZW5kZXJSZUNhcHRjaGEoKTogdm9pZCB7XHJcblxyXG4gICAgICAgIC8vIHJ1biBvdXRzaWRlIGFuZ3VsYXIgem9uZSBkdWUgdG8gdGltZW91dCBpc3N1ZXMgd2hlbiB0ZXN0aW5nXHJcbiAgICAgICAgLy8gZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL0VubmdhZ2Uvbmd4LWNhcHRjaGEvaXNzdWVzLzI2XHJcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYXB0Y2hhSWQgPSB0aGlzLnJlQ2FwdGNoYUFwaS5yZW5kZXIodGhpcy5jYXB0Y2hhRWxlbUlkLCB0aGlzLmdldENhcHRjaGFQcm9wZXJ0aWVzKCkpO1xyXG4gICAgICAgICAgICB0aGlzLnJlYWR5Lm5leHQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gY2FwdGNoYSByZWNlaXZlcyByZXNwb25zZVxyXG4gICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2tcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgaGFuZGxlQ2FsbGJhY2soY2FsbGJhY2s6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFJlc3BvbnNlID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzLm5leHQoY2FsbGJhY2spO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShjYWxsYmFjayk7XHJcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKGNhbGxiYWNrKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVzZXRDYXB0Y2hhQWZ0ZXJTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRDYXB0Y2hhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UHNldWRvVW5pcXVlTnVtYmVyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldHVwQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGNhcHRjaGEgc3BlY2lmaWMgc2V0dXBcclxuICAgICAgICB0aGlzLmNhcHRjaGFTcGVjaWZpY1NldHVwKCk7XHJcblxyXG4gICAgICAgIC8vIGNyZWF0ZSBjYXB0Y2hhIHdyYXBwZXJcclxuICAgICAgICB0aGlzLmNyZWF0ZUFuZFNldENhcHRjaGFFbGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NyaXB0U2VydmljZS5yZWdpc3RlckNhcHRjaGFTY3JpcHQoJ2V4cGxpY2l0JywgKGdyZWNhcHRjaGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbmxvYWRDYWxsYmFjayhncmVjYXB0Y2hhKTtcclxuICAgICAgICB9LCB0aGlzLmhsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQ2FsbGVkIHdoZW4gZ29vZ2xlJ3MgcmVjYXB0Y2hhIHNjcmlwdCBpcyByZWFkeVxyXG4gICAgKi9cclxuICAgIHByaXZhdGUgb25sb2FkQ2FsbGJhY2soZ3JlY2FwY2hhOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICAvLyBhc3NpZ24gcmVmZXJlbmNlIHRvIHJlQ2FwdGNoYSBBcGkgb25jZSBpdHMgbG9hZGVkXHJcbiAgICAgICAgdGhpcy5yZUNhcHRjaGFBcGkgPSBncmVjYXBjaGE7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZUNhcHRjaGFBcGkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFJlQ2FwdGNoYSBBcGkgd2FzIG5vdCBpbml0aWFsaXplZCBjb3JyZWN0bHlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGxvYWRlZCBmbGFnXHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIGZpcmUgbG9hZCBldmVudFxyXG4gICAgICAgIHRoaXMubG9hZC5uZXh0KCk7XHJcblxyXG4gICAgICAgIC8vIHJlbmRlciBjYXB0Y2hhXHJcbiAgICAgICAgdGhpcy5yZW5kZXJSZUNhcHRjaGEoKTtcclxuXHJcbiAgICAgICAgLy8gc2V0dXAgY29tcG9uZW50IGlmIGl0IHdhcyBmbGFnZ2VkIGFzIHN1Y2hcclxuICAgICAgICBpZiAodGhpcy5zZXR1cEFmdGVyTG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHVwQWZ0ZXJMb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZU5ld0VsZW1JZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHRjaGFFbGVtUHJlZml4ICsgdGhpcy5nZXRQc2V1ZG9VbmlxdWVOdW1iZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUFuZFNldENhcHRjaGFFbGVtKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGdlbmVyYXRlIG5ldyBjYXB0Y2hhIGlkXHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhRWxlbUlkID0gdGhpcy5nZW5lcmF0ZU5ld0VsZW1JZCgpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FwdGNoYUVsZW1JZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgQ2FwdGNoYSBlbGVtIElkIGlzIG5vdCBzZXRgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlbW92ZSBvbGQgaHRtbFxyXG4gICAgICAgIHRoaXMuY2FwdGNoYVdyYXBwZXJFbGVtLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XHJcblxyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgd3JhcHBlciBmb3IgY2FwdGNoYVxyXG4gICAgICAgIGNvbnN0IG5ld0VsZW0gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIG5ld0VsZW0uaWQgPSB0aGlzLmNhcHRjaGFFbGVtSWQ7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5jYXB0Y2hhV3JhcHBlckVsZW0ubmF0aXZlRWxlbWVudCwgbmV3RWxlbSk7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBjYXB0Y2hhIGVsZW1cclxuICAgICAgICB0aGlzLmVuc3VyZUNhcHRjaGFFbGVtKHRoaXMuY2FwdGNoYUVsZW1JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUbyBiZSBhbGlnbmVkIHdpdGggdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZFxyXG4gICAgICogSG93ZXZlciBhcyB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSB0aGUgcmVjYXB0Y2hhLCB0aGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBpbXBsZW1lbnRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBoZWxwcyB1cyB0aWUgdG9nZXRoZXIgcmVjYXB0Y2hhIGFuZCBvdXIgZm9ybUNvbnRyb2wgdmFsdWVzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEF0IHNvbWUgcG9pbnQgd2UgbWlnaHQgYmUgaW50ZXJlc3RlZCB3aGV0aGVyIHRoZSB1c2VyIGhhcyB0b3VjaGVkIG91ciBjb21wb25lbnRcclxuICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsImV4cG9ydCBlbnVtIFJlQ2FwdGNoYVR5cGUge1xyXG5cclxuICAgIEludmlzaWJsZVJlQ2FwdGNoYSxcclxuICAgIFJlQ2FwdGNoYTJcclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmRlY2xhcmUgdmFyIGRvY3VtZW50OiBhbnk7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTY3JpcHRTZXJ2aWNlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hbWUgb2YgdGhlIGdsb2JhbCBnb29nbGUgcmVjYXB0Y2hhIHNjcmlwdFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2luZG93R3JlY2FwdGNoYSA9ICdncmVjYXB0Y2hhJztcclxuXHJcbiAgICAvKipcclxuICAgICogTmFtZSBvZiB0aGUgZ2xvYmFsIGNhbGxiYWNrXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpbmRvd09uTG9hZENhbGxiYWNrUHJvcGVydHkgPSAnbmd4X2NhcHRjaGFfb25sb2FkX2NhbGxiYWNrJztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDYXB0Y2hhU2NyaXB0KHJlbmRlcjogc3RyaW5nLCBvbkxvYWQ6IChncmVjYXB0Y2hhOiBhbnkpID0+IHZvaWQsIGxhbmd1YWdlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JlY2FwdGNoYVNjcmlwdExvYWRlZCgpKSB7XHJcbiAgICAgICAgICAgIC8vIHJlY2FwdGNoYSBzY3JpcHQgaXMgYWxyZWFkeSBsb2FkZWRcclxuICAgICAgICAgICAgLy8ganVzdCBjYWxsIHRoZSBjYWxsYmFja1xyXG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uTG9hZCh3aW5kb3dbdGhpcy53aW5kb3dHcmVjYXB0Y2hhXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHBhdGNoIHRoZSBjYWxsYmFjayB0aHJvdWdoIGdsb2JhbCB2YXJpYWJsZSwgb3RoZXJ3aXNlIGNhbGxiYWNrIGlzIG5vdCBhY2Nlc3NpYmxlXHJcbiAgICAgICAgLy8gbm90ZTogaHR0cHM6Ly9naXRodWIuY29tL0VubmdhZ2Uvbmd4LWNhcHRjaGEvaXNzdWVzLzJcclxuICAgICAgICB3aW5kb3dbdGhpcy53aW5kb3dPbkxvYWRDYWxsYmFja1Byb3BlcnR5XSA9IDxhbnk+KCgpID0+IHRoaXMuem9uZS5ydW4oXHJcbiAgICAgICAgICAgIG9uTG9hZC5iaW5kKHRoaXMsIHdpbmRvd1t0aGlzLndpbmRvd0dyZWNhcHRjaGFdKVxyXG4gICAgICAgICkpO1xyXG5cclxuICAgICAgICAvLyBwcmVwYXJlIHNjcmlwdCBlbGVtXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgIHNjcmlwdEVsZW0uaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgc2NyaXB0RWxlbS5zcmMgPSB0aGlzLmdldENhcHRjaGFTY3JpcHRVcmwocmVuZGVyLCBsYW5ndWFnZSk7XHJcbiAgICAgICAgc2NyaXB0RWxlbS5hc3luYyA9IHRydWU7XHJcbiAgICAgICAgc2NyaXB0RWxlbS5kZWZlciA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIGFkZCBzY3JpcHQgdG8gaGVhZGVyXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHRFbGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhbnVwKCk6IHZvaWQge1xyXG4gICAgICAgIHdpbmRvd1t0aGlzLndpbmRvd09uTG9hZENhbGxiYWNrUHJvcGVydHldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHdpbmRvd1t0aGlzLndpbmRvd0dyZWNhcHRjaGFdID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIGdvb2dsZSByZWNhcHRjaGEgc2NyaXB0IGlzIGF2YWlsYWJsZSBhbmQgcmVhZHkgdG8gYmUgdXNlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdyZWNhcHRjaGFTY3JpcHRMb2FkZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHdpbmRvd1t0aGlzLndpbmRvd09uTG9hZENhbGxiYWNrUHJvcGVydHldICYmIHdpbmRvd1t0aGlzLndpbmRvd0dyZWNhcHRjaGFdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGxhbmd1YWdlIHBhcmFtIHVzZWQgaW4gc2NyaXB0IHVybFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldExhbmd1YWdlUGFyYW0oaGw/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghaGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGAmaGw9JHtobH1gO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBVcmwgdG8gZ29vZ2xlIGFwaSBzY3JpcHRcclxuICAgICovXHJcbiAgICBwcml2YXRlIGdldENhcHRjaGFTY3JpcHRVcmwocmVuZGVyOiBzdHJpbmcsIGxhbmd1YWdlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgcmV0dXJuIGBodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkuanM/b25sb2FkPSR7dGhpcy53aW5kb3dPbkxvYWRDYWxsYmFja1Byb3BlcnR5fSZyZW5kZXI9JHtyZW5kZXJ9JHt0aGlzLmdldExhbmd1YWdlUGFyYW0obGFuZ3VhZ2UpfWA7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgTmdab25lLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPcHRpb25hbCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlY2FwdGNoYS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlUmVDYXB0Y2hhQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLXJlY2FwdGNoYS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtaW52aXNpYmxlLXJlY2FwdGNoYScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICA8ZGl2ICNjYXB0Y2hhV3JhcHBlckVsZW0+PC9kaXY+YCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEludmlzaWJsZVJlQ2FwdGNoYUNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEludmlzaWJsZVJlQ2FwdGNoYUNvbXBvbmVudCBleHRlbmRzIEJhc2VSZUNhcHRjaGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG5cclxuICAvKipcclxuICAgKiBUaGlzIHNpemUgcmVwcmVzZW50aW5nIGludmlzaWJsZSBjYXB0Y2hhXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpemUgPSAnaW52aXNpYmxlJztcclxuXHJcbiAgLyoqXHJcbiAgICogQmFkZ2VcclxuICAgKi9cclxuICBASW5wdXQoKSBiYWRnZTogJ2JvdHRvbXJpZ2h0JyB8ICdib3R0b21sZWZ0JyB8ICdpbmxpbmUnID0gJ2JvdHRvbXJpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogTGFuZ3VhZ2UgY29kZS4gQXV0by1kZXRlY3RzIHRoZSB1c2VyJ3MgbGFuZ3VhZ2UgaWYgdW5zcGVjaWZpZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgaGw6IHN0cmluZztcclxuXHJcbiAgcHJvdGVjdGVkIHJlY2FwdGNoYVR5cGU6IFJlQ2FwdGNoYVR5cGUgPSBSZUNhcHRjaGFUeXBlLkludmlzaWJsZVJlQ2FwdGNoYTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByb3RlY3RlZCB6b25lOiBOZ1pvbmUsXHJcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJvdGVjdGVkIHNjcmlwdFNlcnZpY2U6IFNjcmlwdFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKHJlbmRlcmVyLCB6b25lLCBpbmplY3Rvciwgc2NyaXB0U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2dyYW1hdGljYWxseSBpbnZva2UgdGhlIHJlQ0FQVENIQSBjaGVjay4gVXNlZCBpZiB0aGUgaW52aXNpYmxlIHJlQ0FQVENIQSBpcyBvbiBhIGRpdiBpbnN0ZWFkIG9mIGEgYnV0dG9uLlxyXG4gICAqL1xyXG4gIGV4ZWN1dGUoKTogdm9pZCB7XHJcbiAgICAvLyBleGVjdXRlIGNhcHRjaGFcclxuICAgIHRoaXMucmVDYXB0Y2hhQXBpLmV4ZWN1dGUodGhpcy5jYXB0Y2hhSWQpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNhcHRjaGFTcGVjaWZpY1NldHVwKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBHZXRzIHJlQ2FwdGNoYSBwcm9wZXJ0aWVzXHJcbiAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0Q2FwdGNoYVByb3BlcnRpZXMoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdzaXRla2V5JzogdGhpcy5zaXRlS2V5LFxyXG4gICAgICAnY2FsbGJhY2snOiAocmVzcG9uc2UpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5oYW5kbGVDYWxsYmFjayhyZXNwb25zZSkpLFxyXG4gICAgICAnYmFkZ2UnOiB0aGlzLmJhZGdlLFxyXG4gICAgICAndHlwZSc6IHRoaXMudHlwZSxcclxuICAgICAgJ3RhYmluZGV4JzogdGhpcy50YWJJbmRleCxcclxuICAgICAgJ3NpemUnOiB0aGlzLnNpemVcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG4iLCJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgUmVDYXB0Y2hhVHlwZSB9IGZyb20gJy4uL21vZGVscy9yZWNhcHRjaGEtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2NyaXB0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NjcmlwdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVJlQ2FwdGNoYUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1yZWNhcHRjaGEuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LXJlY2FwdGNoYTInLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgPGRpdiAjY2FwdGNoYVdyYXBwZXJFbGVtPjwvZGl2PmAsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSZUNhcHRjaGEyQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVDYXB0Y2hhMkNvbXBvbmVudCBleHRlbmRzIEJhc2VSZUNhcHRjaGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qKlxyXG4gICogTmFtZSBvZiB0aGUgZ2xvYmFsIGV4cGlyZSBjYWxsYmFja1xyXG4gICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpbmRvd09uRXJyb3JDYWxsYmFja1Byb3BlcnR5ID0gJ25neF9jYXB0Y2hhX2Vycm9yX2NhbGxiYWNrJztcclxuXHJcbiAgLyoqXHJcbiAgKiBOYW1lIG9mIHRoZSBnbG9iYWwgZXJyb3IgY2FsbGJhY2tcclxuICAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSB3aW5kb3dPbkV4cGlyZUNhbGxiYWNrUHJvcGVydHkgPSAnbmd4X2NhcHRjaGFfZXhwaXJlX2NhbGxiYWNrJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlbWVcclxuICAgKi9cclxuICBASW5wdXQoKSB0aGVtZTogJ2RhcmsnIHwgJ2xpZ2h0JyA9ICdsaWdodCc7XHJcblxyXG4gIC8qKlxyXG4gICogU2l6ZVxyXG4gICovXHJcbiAgQElucHV0KCkgc2l6ZTogJ2NvbXBhY3QnIHwgJ25vcm1hbCcgPSAnbm9ybWFsJztcclxuXHJcbiAgLyoqXHJcbiAgICogTGFuZ3VhZ2UgY29kZS4gQXV0by1kZXRlY3RzIHRoZSB1c2VyJ3MgbGFuZ3VhZ2UgaWYgdW5zcGVjaWZpZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgaGw6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgKiBFeHBpcmVkIGNhbGxiYWNrXHJcbiAgKi9cclxuICBAT3V0cHV0KCkgZXhwaXJlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAqIEVycm9yIGNhbGxiYWNrXHJcbiAgKi9cclxuICBAT3V0cHV0KCkgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHByb3RlY3RlZCByZWNhcHRjaGFUeXBlOiBSZUNhcHRjaGFUeXBlID0gUmVDYXB0Y2hhVHlwZS5SZUNhcHRjaGEyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSxcclxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcm90ZWN0ZWQgc2NyaXB0U2VydmljZTogU2NyaXB0U2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKHJlbmRlcmVyLCB6b25lLCBpbmplY3Rvciwgc2NyaXB0U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgd2luZG93W3RoaXMud2luZG93T25FcnJvckNhbGxiYWNrUHJvcGVydHldID0ge307XHJcbiAgICB3aW5kb3dbdGhpcy53aW5kb3dPbkV4cGlyZUNhbGxiYWNrUHJvcGVydHldID0ge307XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY2FwdGNoYVNwZWNpZmljU2V0dXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2tzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHJlQ2FwdGNoYSBwcm9wZXJ0aWVzXHJcbiAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0Q2FwdGNoYVByb3BlcnRpZXMoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdzaXRla2V5JzogdGhpcy5zaXRlS2V5LFxyXG4gICAgICAnY2FsbGJhY2snOiAocmVzcG9uc2UpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5oYW5kbGVDYWxsYmFjayhyZXNwb25zZSkpLFxyXG4gICAgICAnZXhwaXJlZC1jYWxsYmFjayc6ICgpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5oYW5kbGVFeHBpcmVDYWxsYmFjaygpKSxcclxuICAgICAgJ2Vycm9yLWNhbGxiYWNrJzogKCkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmhhbmRsZUVycm9yQ2FsbGJhY2soKSksXHJcbiAgICAgICd0aGVtZSc6IHRoaXMudGhlbWUsXHJcbiAgICAgICd0eXBlJzogdGhpcy50eXBlLFxyXG4gICAgICAnc2l6ZSc6IHRoaXMuc2l6ZSxcclxuICAgICAgJ3RhYmluZGV4JzogdGhpcy50YWJJbmRleFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVycyBnbG9iYWwgY2FsbGJhY2tzXHJcbiAgKi9cclxuICBwcml2YXRlIHJlZ2lzdGVyQ2FsbGJhY2tzKCk6IHZvaWQge1xyXG4gICAgd2luZG93W3RoaXMud2luZG93T25FcnJvckNhbGxiYWNrUHJvcGVydHldID0gdGhpcy5oYW5kbGVFcnJvckNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB3aW5kb3dbdGhpcy53aW5kb3dPbkV4cGlyZUNhbGxiYWNrUHJvcGVydHldID0gdGhpcy5oYW5kbGVFeHBpcmVDYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBlcnJvciBjYWxsYmFja1xyXG4gICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvckNhbGxiYWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodW5kZWZpbmVkKTtcclxuICAgICAgdGhpcy5vblRvdWNoZWQodW5kZWZpbmVkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZXJyb3IubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBleHBpcmVkIGNhbGxiYWNrXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVFeHBpcmVDYWxsYmFjaygpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwaXJlLm5leHQoKTtcclxuXHJcbiAgICAvLyByZXNldCBjYXB0Y2hhIG9uIGV4cGlyZSBjYWxsYmFja1xyXG4gICAgdGhpcy5yZXNldENhcHRjaGEoKTtcclxuICB9XHJcbn1cclxuXHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFNjcmlwdFNlcnZpY2UgfSBmcm9tICcuL3NjcmlwdC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJlQ2FwdGNoYVYzU2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIHNjcmlwdFNlcnZpY2U6IFNjcmlwdFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhlY3V0ZXMgcmVDYXB0Y2hhIHYzIHdpdGggZ2l2ZW4gYWN0aW9uIGFuZCBwYXNzZXMgdG9rZW4gdmlhIGNhbGxiYWNrLiBZb3UgbmVlZCB0byB2ZXJpZnlcclxuICAgICAqIHRoaXMgY2FsbGJhY2sgaW4geW91ciBiYWNrZW5kIHRvIGdldCBtZWFuaW5nZnVsIHJlc3VsdHMuXHJcbiAgICAgKlxyXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3JlY2FwdGNoYS9kb2NzL3YzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNpdGVLZXkgU2l0ZSBrZXkgZm91bmQgaW4geW91ciBnb29nbGUgYWRtaW4gcGFuZWxcclxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIHRvIGxvZ1xyXG4gICAgICovXHJcbiAgICBleGVjdXRlKHNpdGVLZXk6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcsIGNhbGxiYWNrOiAodG9rZW46IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NyaXB0U2VydmljZS5yZWdpc3RlckNhcHRjaGFTY3JpcHQoc2l0ZUtleSwgKGdyZWNhcHRjaGEpID0+IHtcclxuICAgICAgICAgICAgZ3JlY2FwdGNoYS5leGVjdXRlKHNpdGVLZXksIHtcclxuICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uXHJcbiAgICAgICAgICAgIH0pLnRoZW4oKHRva2VuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh0b2tlbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJbnZpc2libGVSZUNhcHRjaGFDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvaW52aXNpYmxlLXJlY2FwdGNoYS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVDYXB0Y2hhMkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yZWNhcHRjaGEtMi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVDYXB0Y2hhVjNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9yZWNhcHRjaGFfdjMuc2VydmljZSc7XG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zY3JpcHQuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgUmVDYXB0Y2hhMkNvbXBvbmVudCxcbiAgICBJbnZpc2libGVSZUNhcHRjaGFDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2NyaXB0U2VydmljZSxcbiAgICBSZUNhcHRjaGFWM1NlcnZpY2VcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFJlQ2FwdGNoYTJDb21wb25lbnQsXG4gICAgSW52aXNpYmxlUmVDYXB0Y2hhQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4Q2FwdGNoYU1vZHVsZSB7XG59XG5cblxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7OztBQWtCQTs7Ozs7OztJQXdHSSxZQUNjLFFBQW1CLEVBQ25CLElBQVksRUFDWixRQUFrQixFQUNsQixhQUE0QjtRQUg1QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUFlOzs7O2lDQXZHSCxpQkFBaUI7Ozs7b0JBV3JCLE9BQU87Ozs7d0JBVXRCLENBQUM7Ozs7O3VCQU1ELElBQUksWUFBWSxFQUFVOzs7O29CQUs3QixJQUFJLFlBQVksRUFBVTs7OztxQkFLekIsSUFBSSxZQUFZLEVBQVE7Ozs7OEJBUWpCLEtBQUs7Ozs7O3dDQXFCTyxLQUFLOzs7O3dCQWdCeEIsS0FBSztLQXNCbEI7Ozs7SUFFTCxlQUFlO1FBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7S0FDdkQ7Ozs7O0lBWUQsV0FBVyxDQUFDLE9BQXNCOztRQUU5QixJQUFJLE9BQU8sSUFBSSxPQUFPLE1BQUcsRUFBRTtZQUN2QixJQUFJLENB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
{
"name": "ngx-captcha",
"version": "5.0.2",
"version": "5.0.3",
"license": "MIT",

@@ -5,0 +5,0 @@ "repository": {

Sorry, the diff of this file is too big to display

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

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc