Socket
Socket
Sign inDemoInstall

react-google-oauth2

Package Overview
Dependencies
8
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.25 to 0.0.26

9

CHANGELOG.md
# Changelog
### Changed
**Releases 0.0.26**
- mail never gets posted to the server. [Issue #20](https://github.com/joegasewicz/react-google-oauth2.0/issues/20)
- Make get Access token function public. [Issue #23](https://github.com/joegasewicz/react-google-oauth2.0/issues/23)
- Add custom request headers for dynamic resources [Issue #22](https://github.com/joegasewicz/react-google-oauth2.0/issues/22)
- Make IOAuthState public [Issue #24](https://github.com/joegasewicz/react-google-oauth2.0/issues/24)
- Fix incorrect types [Issue #25](https://github.com/joegasewicz/react-google-oauth2.0/issues/25)
**Releases 0.0.25** - css class selectors are not propagating down to the button component. [Issue #18](https://github.com/joegasewicz/react-google-oauth2.0/issues/18)

@@ -13,2 +20,2 @@

## Unreleased
## Unreleased

4

lib/index.js

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

module.exports=function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(e,t){e.exports=require("react")},function(e,t,r){"use strict";r.r(t),r.d(t,"GoogleButton",(function(){return O})),r.d(t,"isLoggedIn",(function(){return a})),r.d(t,"logOutOAuthUser",(function(){return i})),r.d(t,"createOAuthHeaders",(function(){return s})),r.d(t,"GoogleAuth",(function(){return w})),r.d(t,"GoogleAuthConsumer",(function(){return m}));var o=function(e,t,r,o){return new(r||(r=Promise))((function(n,c){function a(e){try{s(o.next(e))}catch(e){c(e)}}function i(e){try{s(o.throw(e))}catch(e){c(e)}}function s(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,i)}s((o=o.apply(e,t||[])).next())}))},n=function(e,t){var r,o,n,c,a={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return c={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function i(c){return function(i){return function(c){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,o&&(n=2&c[0]?o.return:c[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,c[1])).done)return n;switch(o=0,n&&(c=[2&c[0],n.value]),c[0]){case 0:case 1:n=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,o=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(n=a.trys,(n=n.length>0&&n[n.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!n||c[1]>n[0]&&c[1]<n[3])){a.label=c[1];break}if(6===c[0]&&a.label<n[1]){a.label=n[1],n=c;break}if(n&&a.label<n[2]){a.label=n[2],a.ops.push(c);break}n[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],o=0}finally{r=n=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,i])}}};function c(e){var t=e.email,r=void 0===t?"":t,c=e.code;(function(e,t){return o(this,void 0,void 0,(function(){return n(this,(function(r){switch(r.label){case 0:return[4,fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})];case 1:return[2,r.sent().json()]}}))}))})(e.apiUrl,{code:c,email:r,scope:e.scope}).then((function(t){"access_token"in t?e.setResponseState({accessToken:t.access_token}):e.setResponseState({error:"No access_token in response data!"})})).catch((function(t){e.setResponseState({error:t.message})}))}function a(){return!!window.localStorage.getItem("accessToken")}function i(){window.localStorage.removeItem("accessToken")}function s(){return{"X-Auth-Token":"Bearer "+window.localStorage.getItem("accessToken")}}function u(){var e=document.location.href;if(document.location.search){var t=e.substring(0,e.indexOf("?"));window.history.replaceState({},document.title,t)}}var l,d=r(0),p=r.n(d);!function(e){e.GOOGLE_OAUTH_ENDPOINT="https://accounts.google.com/o/oauth2/v2/auth"}(l||(l={}));var f=function(){function e(e,t){var r=this;this.redirect=function(e){if(!r.googleRedirectURL)throw new ReferenceError("Error creating redirect url to Google's authorization server");window.location.replace(r.googleRedirectURL)},this.params=e,this.scopesStr=t}return Object.defineProperty(e.prototype,"googleRedirectURL",{get:function(){return this._googleRedirectURL},set:function(e){this._googleRedirectURL=e},enumerable:!1,configurable:!0}),e.prototype.createAuthorizationRequestURL=function(){var e,t=this.params,r=t.accessType,o=void 0===r?"offline":r,n=t.includeGrantedScopes,c=void 0===n||n,a=t.responseType,i=void 0===a?"code":a,s=t.state,u=void 0===s?null:s,d=t.redirectUri,p=t.clientId;e=l.GOOGLE_OAUTH_ENDPOINT+"?scope="+this.scopesStr+"&",e=(e=(e=o?e+"access_type="+o+"&":e)+"include_granted_scopes="+c+"&")+"response_type="+i+"&",e=(e=(e=u?e+"state="+u+"&":e)+"redirect_uri="+d+"&")+"client_id="+p,this.googleRedirectURL=e},e.createScopes=function(e){var t="";return e.map((function(r,o){e.length-1===o?t+=""+r:t+=r+"%20"})),t},e}(),g=function(){return(g=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<o;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)},h={},v={backgroundSize:"20px 20px",backgroundRepeat:"no-repeat",backgroundPosition:"12px 10px",textIndent:"19px",border:"1px solid #bdc3c7",padding:"9px 23px",borderRadius:"9px",backgroundColor:"#bdc3c7",fontSize:"18px"},b=p.a.createContext({}),y=b.Provider,m=b.Consumer,S=function(e){var t=e.placeholder,r=void 0===t?"":t,o=e.defaultStyle,n=void 0===o||o,c=e.options,a=e.displayErrors,i=void 0!==a&&a,s=f.createScopes(c.scopes),l=new f(c,s);l.createAuthorizationRequestURL();var d=n?function(e,t){return e?g(g({},t),{backgroundImage:"url("+e+")"}):t}(r,v):void 0;return e.error&&console.error("[React-Google-OAuth2] Error: "+e.error+"\n - To display the error to the user, set IGoogleProps displayErrors to true.\n See https://joegasewicz.github.io/react-google-oauth2.0/"),u(),p.a.createElement(p.a.Fragment,null,p.a.createElement("button",{style:d,onClick:l.redirect,className:e.className+" google-oauth-btn"},e.children),i&&e.error&&p.a.createElement("div",null,e.error))};function O(e){var t,r,o,n,i,s=e.callback,l=Object(d.useContext)(b),f=new URLSearchParams(window.location.search),h=f.get("code"),v=f.get("error"),y=p.a.createElement(S,g({},e,{placeholder:e.placeholder,error:null===(t=l.responseState)||void 0===t?void 0:t.error,options:e.options}));if((null===(r=l.responseState)||void 0===r?void 0:r.accessToken)&&!a())return i=l.responseState.accessToken,window.localStorage.setItem("accessToken",i),console.debug("`accessToken` set in local storage."),"function"==typeof l.setOAuthState&&Object(d.useEffect)((function(){l.setOAuthState(!0)})),null;if(null===(o=l.responseState)||void 0===o?void 0:o.error)return console.error("[React-Google-OAuth2] Error: Api call failed with "+(null===(n=l.responseState)||void 0===n?void 0:n.error)+" error."),y;if(h&&!a()){var m={email:f.get("email")||"",scope:f.get("scope")||"",code:h,client_id:e.options.clientId,apiUrl:e.apiUrl,responseState:l.responseState,setResponseState:l.setResponseState};return u(),Object(d.useEffect)((function(){c(m)}),[]),console.debug("Waiting for remote api response"),s?s():p.a.createElement(p.a.Fragment,null,"Loading...")}return v?(console.error("Error: Google login attempt failed with "+v+" error."),y):y}var w=function(e){var t=Object(d.useState)(h),r=t[0],o=t[1],n=Object(d.useState)(a()),c={isAuthenticated:n[0],setOAuthState:n[1],responseState:r,setResponseState:o};return p.a.createElement(y,{value:c},e.children)}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFjdC1nb29nbGUtb2F1dGgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcmVhY3QtZ29vZ2xlLW9hdXRoL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9yZWFjdC1nb29nbGUtb2F1dGgvLi9zcmMvX2FwaVV0aWxzLnRzIiwid2VicGFjazovL3JlYWN0LWdvb2dsZS1vYXV0aC8uL3NyYy9hdXRob3JpemF0aW9uLnRzIiwid2VicGFjazovL3JlYWN0LWdvb2dsZS1vYXV0aC8uL3NyYy9jb21wb25lbnRzLnRzeCJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJzZXJ2ZXJSZXNwb25zZSIsInByb3BzIiwiZW1haWwiLCJjb2RlIiwiYXBpVXJsIiwicGF5bG9hZCIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwianNvbiIsInBvc3RUb0V4Y2hhbmdlQXBpVXJsIiwic2NvcGUiLCJ0aGVuIiwiZGF0YSIsInNldFJlc3BvbnNlU3RhdGUiLCJhY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsImVycm9yIiwiY2F0Y2giLCJlcnIiLCJtZXNzYWdlIiwiaXNMb2dnZWRJbiIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJsb2dPdXRPQXV0aFVzZXIiLCJyZW1vdmVJdGVtIiwiY3JlYXRlT0F1dGhIZWFkZXJzIiwicmVtb3ZlT0F1dGhRdWVyeVBhcmFtcyIsImN1cnJlbnRMb2NhdGlvbiIsImRvY3VtZW50IiwibG9jYXRpb24iLCJocmVmIiwic2VhcmNoIiwiY2xlYW5fdXJpIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJ0aXRsZSIsIkdvb2dsZUFQSUNvbm5lY3Rpb25TdHJpbmdzIiwicGFyYW1zIiwic2NvcGVzU3RyIiwicmVkaXJlY3QiLCJlIiwiZ29vZ2xlUmVkaXJlY3RVUkwiLCJSZWZlcmVuY2VFcnJvciIsInJlcGxhY2UiLCJ0aGlzIiwiX2dvb2dsZVJlZGlyZWN0VVJMIiwiY3JlYXRlQXV0aG9yaXphdGlvblJlcXVlc3RVUkwiLCJ1cmwiLCJhY2Nlc3NUeXBlIiwiaW5jbHVkZUdyYW50ZWRTY29wZXMiLCJyZXNwb25zZVR5cGUiLCJzdGF0ZSIsInJlZGlyZWN0VXJpIiwiY2xpZW50SWQiLCJHT09HTEVfT0FVVEhfRU5EUE9JTlQiLCJjcmVhdGVTY29wZXMiLCJzY29wZXMiLCJzdHIiLCJtYXAiLCJsZW5ndGgiLCJTRVJWRVJfUkVTUE9OU0VfU1RBVEUiLCJidXR0b25TdHlsaW5nIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFBvc2l0aW9uIiwidGV4dEluZGVudCIsImJvcmRlciIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250U2l6ZSIsIkdvb2dsZUF1dGhDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsIkdvb2dsZUF1dGhQcm92aWRlciIsIlByb3ZpZGVyIiwiR29vZ2xlQXV0aENvbnN1bWVyIiwiQ29uc3VtZXIiLCJJbm5lckJ1dHRvbiIsInBsYWNlaG9sZGVyIiwiZGVmYXVsdFN0eWxlIiwib3B0aW9ucyIsImRpc3BsYXlFcnJvcnMiLCJBdXRob3JpemF0aW9uIiwiYXV0aCIsInN0eWxlcyIsImJhY2tncm91bmRJbWFnZSIsIl9nZXRCYWNrZ3JvdW5kSW1nIiwidW5kZWZpbmVkIiwiY29uc29sZSIsInN0eWxlIiwib25DbGljayIsImNsYXNzTmFtZSIsImNoaWxkcmVuIiwiR29vZ2xlQnV0dG9uIiwidG9rZW4iLCJjYWxsYmFjayIsIm9hdXRoQ29udGV4dCIsImN1cnJlbnRVcmwiLCJVUkxTZWFyY2hQYXJhbXMiLCJxdWVyeVBhcmFtc0NvZGUiLCJxdWVyeVBhcmFtc0Vycm9yIiwiX2lubmVyIiwicmVzcG9uc2VTdGF0ZSIsInNldEl0ZW0iLCJkZWJ1ZyIsInNldE9BdXRoU3RhdGUiLCJjbGllbnRfaWQiLCJHb29nbGVBdXRoIiwiX3Byb3ZpZGVyUHJvcHMiLCJpc0F1dGhlbnRpY2F0ZWQiXSwibWFwcGluZ3MiOiIyQkFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUEwRGYsT0FyREFGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixP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dUMsUUFBbEMsRUFBQVQsRUFBcUJNLHFCQUFhLGVBQUV6RixNQUU1QyxPQURBMkUsUUFBUTNFLE1BQU0sc0RBQXdGLFFBQXhGLEVBQXNEbUYsRUFBcUJNLHFCQUFhLGVBQUV6RixPQUFLLFdBQ3RHd0YsRUFDSixHQUFJRixJQUFvQmxGLElBQWMsQ0FFekMsSUFFTSxFQUF1QyxDQUN6Q3RCLE1BSHFCc0csRUFBVzVILElBQUksVUFBWSxHQUloRGtDLE1BSHFCMEYsRUFBVzVILElBQUksVUFBWSxHQUloRHVCLEtBQU11RyxFQUNOTyxVQUFXaEgsRUFBTXNGLFFBQVEzQixTQUN6QnhELE9BQVFILEVBQU1HLE9BQ2R5RyxjQUFnQk4sRUFBcUJNLGNBQ3JDNUYsaUJBQW1Cc0YsRUFBcUJ0RixrQkFPNUMsT0FMQWMsSUFDQSxxQkFBVSxXQUNOL0IsRUFBZSxLQUNoQixJQUNIK0YsUUFBUWdCLE1BQU0sbUNBQ1BULEVBQVdBLElBQWEsa0RBQzVCLE9BQUlLLEdBQ1BaLFFBQVEzRSxNQUFNLDJDQUEyQ3VGLEVBQWdCLFdBQ2xFQyxHQUdKQSxFQUdKLElBQU1NLEVBQWEsU0FBQ2pILEdBQ2pCLE1BQW9DLG1CQUErQmtFLEdBQWxFMEMsRUFBYSxLQUFFNUYsRUFBZ0IsS0FDaEMsRUFBbUMsbUJBQWtCTyxLQUNyRDJGLEVBQWlCLENBQ25CQyxnQkFGa0IsS0FHbEJKLGNBSGlDLEtBSWpDSCxjQUFhLEVBQ2I1RixpQkFBZ0IsR0FFcEIsT0FDSSxrQkFBQytELEVBQWtCLENBQUNoRyxNQUFPbUksR0FDdEJsSCxFQUFNa0ciLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCIvKiogQGludGVybmFsICovXG5leHBvcnQgaW50ZXJmYWNlIElQYXlsb2FkIHtcbiAgICByZWFkb25seSBlbWFpbDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgICByZWFkb25seSBzY29wZTogc3RyaW5nO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXBpUmVzcG9uc2VEYXRhIHsgcmVhZG9ubHkgYWNjZXNzX3Rva2VuOiBzdHJpbmc7IH1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0VG9FeGNoYW5nZUFwaVVybChhcGlVcmw6IHN0cmluZywgcGF5bG9hZDogSVBheWxvYWQpOiBQcm9taXNlPElBcGlSZXNwb25zZURhdGE+IHtcbiAgICBjb25zdCByZXM6IFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYXBpVXJsLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLmpzb24oKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZXJSZXNwb25zZShwcm9wczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgeyBlbWFpbCA9IFwiXCIsIGNvZGUsIGFwaVVybCwgc2NvcGUgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBheWxvYWQ6IElQYXlsb2FkID0geyBjb2RlLCBlbWFpbCwgc2NvcGUgfTtcbiAgICBwb3N0VG9FeGNoYW5nZUFwaVVybChhcGlVcmwsIHBheWxvYWQpXG4gICAgICAgIC50aGVuKChkYXRhOiBJQXBpUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgcmVzcG9uc2VTdGF0ZSBhY2Nlc3NUb2tlblxuICAgICAgICAgICAgaWYoIShcImFjY2Vzc190b2tlblwiIGluIGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuc2V0UmVzcG9uc2VTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIk5vIGFjY2Vzc190b2tlbiBpbiByZXNwb25zZSBkYXRhIVwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5zZXRSZXNwb25zZVN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzVG9rZW46IGRhdGEuYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgcHJvcHMuc2V0UmVzcG9uc2VTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVBY2Nlc3NUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImFjY2Vzc1Rva2VuXCIsIHRva2VuKTtcbn1cblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiAgaWYoaXNMb2dnZWRJbigpKSB7IC8vIHJldHVybnMgdHJ1ZSBpcyBhY2Nlc3NUb2tlbiBleGlzdHMgaW4gTG9jYWxTdG9yYWdlXG4gKiAgICAgIC8vIHVzZXIgbG9nZ2VkIGNvZGUuLi5cbiAqICB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTG9nZ2VkSW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWNjZXNzVG9rZW5cIik7XG59XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogIGxvZ091dE9BdXRoVXNlcigpIC8vIHJlbW92ZXMgdGhlIGFjY2Vzc1Rva2VuIGZyb20gTG9jYWxTdG9yYWdlXG4gKiBgYGBcbiAqIEByZXR1cm4gdm9pZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nT3V0T0F1dGhVc2VyKCk6IHZvaWQge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFjY2Vzc1Rva2VuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dldEFjY2Vzc1Rva2VuKCkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhY2Nlc3NUb2tlblwiKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gV2FybmluZzogUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IGFzIG9mIHZlcnNpb24gYDAuMC4yM2Agd2UgaGF2ZSByZW1vdmVkXG4gKiB0aGUgYGFwcGxpY2F0aW9uL2pzb25gIGNvbnRlbnQgdHlwZSBoZWFkZXJzIGZyb20gdGhpcyBmdW5jdGlvbi4gVGhpcyBtYXkgY2F1c2UgYW4gaXNzdWVcbiAqIGlmIHlvdSBvcmlnaW5hbGx5IGRpZG4ndCBjb25zdHJ1Y3QgeW91ciByZXF1ZXN0IGNvbnRlbnQgdHlwZSBoZWFkZXJzIHdpdGggYGFwcGxpY2F0aW9uL2pzb25gLlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogIGZldGNoKHVybCwge1xuICogICAgICBoZWFkZXJzOiBjcmVhdGVPQXV0aEhlYWRlcnMoKSxcbiAqICB9KVxuICogYGBgXG4gKiBAcmV0dXJuIE9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9BdXRoSGVhZGVycygpOiBPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICAgIFwiWC1BdXRoLVRva2VuXCI6IGBCZWFyZXIgJHtfZ2V0QWNjZXNzVG9rZW4oKX1gLFxuICAgIH1cbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU9BdXRoUXVlcnlQYXJhbXMoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudExvY2F0aW9uID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcbiAgICBpZihkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2gpIHtcbiAgICAgICAgY29uc3QgY2xlYW5fdXJpID0gY3VycmVudExvY2F0aW9uLnN1YnN0cmluZygwLCBjdXJyZW50TG9jYXRpb24uaW5kZXhPZihcIj9cIikpO1xuICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGRvY3VtZW50LnRpdGxlLCBjbGVhbl91cmkpO1xuICAgIH1cbn1cbiIsIi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEdvb2dsZUFQSUNvbm5lY3Rpb25TdHJpbmdzIHtcbiAgICBHT09HTEVfT0FVVEhfRU5EUE9JTlQgPSBcImh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi92Mi9hdXRoXCIsXG59XG4vKiogQHB1YmxpYyAqL1xuaW50ZXJmYWNlIElBdXRob3JpemF0aW9uQmFzZSB7XG4gICAgLyoqIFRoaXMgaXMgeW91ciBjbGllbnQgSUQgKi9cbiAgICBjbGllbnRJZDogc3RyaW5nO1xuICAgIC8qKiBXaGVyZSB5b3UgUmVhY3QgYXBwIHNob3VsZCByZWRpcmVjdCB0byBpZiB1c2VyIGhhcyBzdWNjZXNzZnVsbHkgbG9nZ2VkIGluICoqL1xuICAgIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG4gICAgLyoqIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gKmNvZGUqICovXG4gICAgcmVzcG9uc2VUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgYXBpICoqYXBpVXJsKioge0BsaW5rIElHb29nbGVCdXR0b259IGNhbiByZWZyZXNoIHRva2VucyBvbiB0aGUgdXNlcidzXG4gICAgICogYmVoYWxmLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAqb25saW5lKiBidXQgaWYgeW91ciBiYWNrZW5kIGFwaSB3aWxsIHJlZnJlc2ggdGhlIHRva2VuIHRoZW5cbiAgICAgKiB5b3UgbXVzdCBwYXNzIGluIGEgc3RyaW5nIHZhbHVlIG9mICpvZmZsaW5lKiAoVGhpcyBpcyByZWNvbW1lbmRlZCBmb3IgcmVhY3QgYXBwcyBjb25uZWN0ZWRcbiAgICAgKiB0byBhIFJFU1QgYXBpIGJhY2tlbmQpLlxuICAgICAqL1xuICAgIGFjY2Vzc1R5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlIGJ1dCB3aWxsIGJlIGluIGEgYWRkZWQgaW4gYSBmdXR1cmUgdmVyc2lvbixcbiAgICAgKiBUT0RPIC0gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb2VnYXNld2ljei9yZWFjdC1nb29nbGUtb2F1dGgyLjAvaXNzdWVzLzNcbiAgICAgKiAqL1xuICAgIHN0YXRlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERlZmF1bHRlZCB0byB0cnVlLiBBbnkgZXh0cmEgc2NvcGVzIHRoZSBsb2dnZWQgaW4gdXNlciBwcmV2aW91c2x5IGdyYW50ZWRcbiAgICAgKiB3aWxsIGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIG5ldyBhY2Nlc3MgdG9rZW4uXG4gICAgICogKi9cbiAgICBpbmNsdWRlR3JhbnRlZFNjb3Blcz86IGJvb2xlYW47XG4gICAgLyoqIE5vdCByZXF1aXJlZCwgb3B0aW9uYWwuIEZvciBwcmVmaWxsaW5nIGVtYWlsIGZpZWxkcyBldGMuICovXG4gICAgbG9naW5IaW50Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIE5vdCByZXF1aXJlZCwgb3B0aW9uYWwuIEEgc3BhY2UtZGVsaW1pdGVkLCBjYXNlLXNlbnNpdGl2ZSBsaXN0IG9mIHByb21wdHMgdG9cbiAgICAgKiBwcmVzZW50IHRoZSB1c2VyLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciwgdGhlIHVzZXIgd2lsbCBiZSBwcm9tcHRlZFxuICAgICAqIG9ubHkgdGhlIGZpcnN0IHRpbWUgeW91ciBwcm9qZWN0IHJlcXVlc3RzIGFjY2Vzcy5cbiAgICAgKiAqL1xuICAgIHByb21wdD86IHN0cmluZztcbn1cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIElBdXRob3JpemF0aW9uT3B0aW9ucyBleHRlbmRzIElBdXRob3JpemF0aW9uQmFzZSB7XG4gICAgc2NvcGVzOiBBcnJheTxzdHJpbmc+O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXV0aG9yaXphdGlvbiB7XG4gICAgcGFyYW1zOiBJQXV0aG9yaXphdGlvbk9wdGlvbnM7XG4gICAgLyoqIFNldCB0byAgYFtcIm9wZW5pZFwiLCBcInByb2ZpbGVcIl1gIGJ5IGRlZmF1bHQgKiovXG4gICAgc2NvcGVzU3RyOiBzdHJpbmc7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY2xhc3MgQXV0aG9yaXphdGlvbiBpbXBsZW1lbnRzIElBdXRob3JpemF0aW9uIHtcblxuICAgIHByaXZhdGUgX2dvb2dsZVJlZGlyZWN0VVJMPzogc3RyaW5nO1xuXG4gICAgcHVibGljIHBhcmFtczogSUF1dGhvcml6YXRpb25PcHRpb25zO1xuXG4gICAgcHVibGljIHNjb3Blc1N0cjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1zOiBJQXV0aG9yaXphdGlvbk9wdGlvbnMsIHNjb3Blc1N0cjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICB0aGlzLnNjb3Blc1N0ciA9IHNjb3Blc1N0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAcHJvcGVydHkgZ29vZ2xlUmVkaXJlY3RVUkwgQWNjZXNzIHRoZSB1cmwgZm9yIHRoZSBpbml0aWFsXG4gICAgICogYnJvd3NlciBjYWxsIHRvIEdvb2dsZSdzIE9BdXRoIDIuMCBzZXJ2ZXIuIFVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ29vZ2xlUmVkaXJlY3RVUkwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nb29nbGVSZWRpcmVjdFVSTDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGdvb2dsZVJlZGlyZWN0VVJMKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fZ29vZ2xlUmVkaXJlY3RVUkwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcHVibGljIGNyZWF0ZUF1dGhvcml6YXRpb25SZXF1ZXN0VVJMKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBhY2Nlc3NUeXBlID0gXCJvZmZsaW5lXCIsXG4gICAgICAgICAgICBpbmNsdWRlR3JhbnRlZFNjb3BlcyA9IHRydWUsXG4gICAgICAgICAgICByZXNwb25zZVR5cGUgPSBcImNvZGVcIixcbiAgICAgICAgICAgIHN0YXRlID0gbnVsbCxcbiAgICAgICAgICAgIHJlZGlyZWN0VXJpLFxuICAgICAgICAgICAgY2xpZW50SWQsXG4gICAgICAgIH0gPSB0aGlzLnBhcmFtcztcbiAgICAgICAgY29uc3QgZG9tYWluID0gR29vZ2xlQVBJQ29ubmVjdGlvblN0cmluZ3MuR09PR0xFX09BVVRIX0VORFBPSU5UO1xuICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XG4gICAgICAgIHVybCA9IGAke2RvbWFpbn0/c2NvcGU9JHt0aGlzLnNjb3Blc1N0cn0mYDtcbiAgICAgICAgdXJsID0gYWNjZXNzVHlwZSA/IGAke3VybH1hY2Nlc3NfdHlwZT0ke2FjY2Vzc1R5cGV9JmAgOiB1cmw7XG4gICAgICAgIHVybCA9IGAke3VybH1pbmNsdWRlX2dyYW50ZWRfc2NvcGVzPSR7aW5jbHVkZUdyYW50ZWRTY29wZXN9JmA7XG4gICAgICAgIHVybCA9IGAke3VybH1yZXNwb25zZV90eXBlPSR7cmVzcG9uc2VUeXBlfSZgO1xuICAgICAgICB1cmwgPSBzdGF0ZSA/IGAke3VybH1zdGF0ZT0ke3N0YXRlfSZgIDogdXJsO1xuICAgICAgICB1cmwgPSBgJHt1cmx9cmVkaXJlY3RfdXJpPSR7cmVkaXJlY3RVcml9JmA7XG4gICAgICAgIHVybCA9IGAke3VybH1jbGllbnRfaWQ9JHtjbGllbnRJZH1gO1xuICAgICAgICB0aGlzLmdvb2dsZVJlZGlyZWN0VVJMID0gdXJsO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVNjb3BlcyhzY29wZXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3RyID0gXCJcIjtcbiAgICAgICAgc2NvcGVzLm1hcCgoc2NvcGUsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChzY29wZXMubGVuZ3RoIC0gMSA9PT0gaSkge1xuICAgICAgICAgICAgICAgIHN0ciArPSBgJHtzY29wZX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gYCR7c2NvcGV9JTIwYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWRpcmVjdCA9IChlOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgICAgaWYodGhpcy5nb29nbGVSZWRpcmVjdFVSTCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodGhpcy5nb29nbGVSZWRpcmVjdFVSTClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcIkVycm9yIGNyZWF0aW5nIHJlZGlyZWN0IHVybCB0byBHb29nbGUncyBhdXRob3JpemF0aW9uIHNlcnZlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQge2RlZmF1bHQgYXMgUmVhY3QsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgICBBdXRob3JpemF0aW9uLFxuICAgIElBdXRob3JpemF0aW9uT3B0aW9ucyxcbn0gZnJvbSBcIi4vYXV0aG9yaXphdGlvblwiO1xuaW1wb3J0IHtcbiAgICBzZXJ2ZXJSZXNwb25zZSxcbiAgICBzdG9yZUFjY2Vzc1Rva2VuLFxuICAgIGlzTG9nZ2VkSW4sXG4gICAgcmVtb3ZlT0F1dGhRdWVyeVBhcmFtcyxcbn0gZnJvbSBcIi4vX2FwaVV0aWxzXCI7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIElHb29nbGVCdXR0b24ge1xuICAgIC8qKiBQbGFjZWhvbGRlciBpbWFnZSBkaXNwbGF5ZWQgbmV4dCB0byBidXR0b24gdGV4dC4gVGhlIHBsYWNlaG9sZGVyIHByb3AgaGFzIG5vIGVmZmVjdCBpZiBwbGFjZWhvbGRlciBpcyBzZXQgdG8gZmFsc2UgKi9cbiAgICByZWFkb25seSBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICAvKiogUmVtb3ZlIGRlZmF1bHQgc3R5bGVzLlxuICAgICAqICBUbyBTdHlsZSB0aGUgPGJ1dHRvbj4gZWxlbWVudCB3aXRoIENTUywgdXNlIGBnb29nbGUtb2F1dGgtYnRuYC4gRm9yIGV4YW1wbGU6XG4gICAgICogIGBgYFxuICAgICAqICAuZ29vZ2xlLW9hdXRoLWJ0biB7XG4gICAgICogICAgICBjb2xvcjogcmVkO1xuICAgICAqICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTtcbiAgICAgKiAgfVxuICAgICAqICBgYGBcbiAgICAgKiAoeW91IGNhbiBhbHNvIHBhc3MgeW91ciBjc3Mgc2VsZWN0b3JzIGRpcmVjdGx5IHdpdGggUmVhY3RzJyBgY2xhc3NOYW1lYCBwcm9wKVxuICAgICAqICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdFN0eWxlPzogYm9vbGVhbjtcbiAgICAvKiogU2VlIElBdXRob3JpemF0aW9uUmVxdWVzdFBhcmFtcyAqL1xuICAgIHJlYWRvbmx5IG9wdGlvbnM6IElBdXRob3JpemF0aW9uT3B0aW9ucztcbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHlcbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKiBBIFJlYWN0IGNvbXBvbmVudCBvciBhbnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgUmVhY3QgY29tcG9uZW50LlxuICAgICAqIFRoaXMgd291bGQgbm9ybWFsbHkgYmUgdXNlZCB0byBkaXNwbGF5IGEgcHJlbG9hZGVyIHRvIHRoZSB1c2VyIHdoaWxzdFxuICAgICAqIHRoZSBPQXV0aDIuMCBsb2dpbiBzdHJhdGVneSBpcyBpbiBmbGlnaHQuIEJ5IGRlZmF1bHQgYSBgTG9hZGluZy4uLmBcbiAgICAgKiBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgXG4gICAgICogPEdvb2dsZUJ1dHRvblxuICAgICAqICAgIGNhbGxiYWNrPXsoKSA9PiA8PlwiTG9hZGluZy4uLlwiPC8+fVxuICAgICAqICAgIC8vIG90aGVyIHByb3BzLi4uXG4gICAgICogLz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWFkb25seSBjYWxsYmFjaz86ICgpID0+IFJlYWN0LlJlYWN0SFRNTEVsZW1lbnQ8YW55PjtcbiAgICAvKiogVGhlIHVybCBvZiB0aGUgYXBpIHRvIHBlcmZvcm0gdGhlIGV4Y2hhbmdlICovXG4gICAgcmVhZG9ubHkgYXBpVXJsOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwuIERlZmF1bHQgc2V0IHRvIGZhbHNlLlxuICAgICAqIERpc3BsYXkgYW4gZXJyb3IgdG8gdGhlIHVzZXIgKHdpbGwgYmUgZGlzcGxheWVkIGluIGEgY2hpbGQgYGRpdmAgZWxlbWVudCkuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGlzcGxheUVycm9ycz86IGJvb2xlYW47XG59XG4vKiogQGludGVybmFsICovXG50eXBlIFR5cGVCdXR0b25TdHlsZXMgPSB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuLyoqIEBpbnRlcm5hbCAqL1xudHlwZSBUeXBlR29vZ2xlQnV0dG9uID0gSUdvb2dsZUJ1dHRvbiAmIFJlYWN0LkJ1dHRvbkhUTUxBdHRyaWJ1dGVzPEhUTUxCdXR0b25FbGVtZW50PjtcbmludGVyZmFjZSBJU2VydmVyUmVzcG9uc2VTdGF0ZSB7IHJlYWRvbmx5IGFjY2Vzc1Rva2VuPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZ31cbi8qKiBAaW50ZXJuYWwgKi9cbmludGVyZmFjZSBJU2VydmVyUmVzcG9uc2Uge1xuICAgIHJlYWRvbmx5IGVtYWlsPzogc3RyaW5nO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgICByZWFkb25seSBzY29wZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNsaWVudF9pZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFwaVVybDogc3RyaW5nO1xuICAgIHJlc3BvbnNlU3RhdGU6IElTZXJ2ZXJSZXNwb25zZVN0YXRlO1xuICAgIHNldFJlc3BvbnNlU3RhdGU6IGFueTsgLy8gVE9ET1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuY29uc3QgU0VSVkVSX1JFU1BPTlNFX1NUQVRFID0geyB9O1xuXG4vKiogQGludGVybmFsICovXG5jb25zdCBidXR0b25TdHlsaW5nOiBUeXBlQnV0dG9uU3R5bGVzID0ge1xuICAgIGJhY2tncm91bmRTaXplOiBcIjIwcHggMjBweFwiLFxuICAgIGJhY2tncm91bmRSZXBlYXQ6IFwibm8tcmVwZWF0XCIsXG4gICAgYmFja2dyb3VuZFBvc2l0aW9uOiBcIjEycHggMTBweFwiLFxuICAgIHRleHRJbmRlbnQ6IFwiMTlweFwiLFxuICAgIGJvcmRlcjogXCIxcHggc29saWQgI2JkYzNjN1wiLFxuICAgIHBhZGRpbmc6IFwiOXB4IDIzcHhcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiOXB4XCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcIiNiZGMzYzdcIixcbiAgICBmb250U2l6ZTogXCIxOHB4XCIsXG59O1xuXG5pbnRlcmZhY2UgSU9BdXRoU3RhdGUge1xuICAgIGlzQXV0aGVudGljYXRlZD86IGJvb2xlYW47XG4gICAgc2V0T0F1dGhTdGF0ZT86IEZ1bmN0aW9uO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuY29uc3QgR29vZ2xlQXV0aENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PElPQXV0aFN0YXRlPih7fSk7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgR29vZ2xlQXV0aFByb3ZpZGVyID0gR29vZ2xlQXV0aENvbnRleHQuUHJvdmlkZXI7XG4vKipcbiAqIEBleGFtcGxlXG4gKiBHZXQgbm90aWZpZWQgd2hlbiBhIHVzZXIgaGFzIGxvZ2dlZCBpbiBzdWNjZXNzZnVsbHkgYnkgd3JhcHBpbmcgdGhlIEdvb2dsZUJ1dHRvblxuICogY29tcG9uZW50IHdpdGhpbiB0aGUgR29vZ2xlQXV0aCBwcm92aWRlci4gRm9yIGV4YW1wbGU6XG4gKiBgYGBcbiAqICAgIGltcG9ydCB7XG4gKiAgICAgICBHb29nbGVBdXRoXG4gKiAgIH0gZnJvbSBcInJlYWN0LWdvb2dsZS1vYXV0aDJcIjtcbiAqXG4gKiAgIDxHb29nbGVBdXRoPlxuICogICB7KHtpc0F1dGhlbnRpY2F0ZWR9KSA9PiB7XG4gKiAgICAgICAvLyBpc0F1dGhlbnRpY2F0ZWQgd2lsbCBnZXQgc2V0IHRvIHRydWUgd2hlbiBhIHVzZXIgaGFzIHN1Y2Nlc3NmdWxseSBsb2dnZWQgaW4uXG4gKiAgICAgICBjb25zb2xlLmxvZyhcInZhbHVlOiBcIiwgaXNBdXRoZW50aWNhdGVkKTsgLy8gdmFsdWU6IHRydWUgb3IgZmFsc2VcbiAqICAgICAgIHJldHVybiA8R29vZ2xlQnV0dG9uXG4gKiAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucy4uLlxuICogICAgICAgICAgICAgICAvPlxuICogICB9fVxuICogICA8L0dvb2dsZUF1dGg+XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IEdvb2dsZUF1dGhDb25zdW1lciA9IEdvb2dsZUF1dGhDb250ZXh0LkNvbnN1bWVyO1xuLyoqIEBpbnRlcm5hbCAqL1xuY29uc3QgX2dldEJhY2tncm91bmRJbWcgPSAocGxhY2Vob2xkZXI6IHN0cmluZywgc3R5bGVzOiBUeXBlQnV0dG9uU3R5bGVzKTogVHlwZUJ1dHRvblN0eWxlcyA9PiB7XG4gICAgaWYocGxhY2Vob2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3R5bGVzLCBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtwbGFjZWhvbGRlcn0pYCB9O1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGVzO1xufVxuXG4vKiogQGludGVybmFsICovXG5pbnRlcmZhY2UgSUlubmVyQnV0dG9uUHJvcHMgZXh0ZW5kcyBJR29vZ2xlQnV0dG9uIHtcbiAgICBlcnJvcj86IHN0cmluZztcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBJbm5lckJ1dHRvbiA9IChwcm9wczogSUlubmVyQnV0dG9uUHJvcHMgJiBSZWFjdC5CdXR0b25IVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlaG9sZGVyID0gXCJcIixcbiAgICAgICAgZGVmYXVsdFN0eWxlID0gdHJ1ZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZGlzcGxheUVycm9ycyA9IGZhbHNlLFxuICAgIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IHNjb3BlcyA9IEF1dGhvcml6YXRpb24uY3JlYXRlU2NvcGVzKG9wdGlvbnMuc2NvcGVzKTtcbiAgICBjb25zdCBhdXRoID0gbmV3IEF1dGhvcml6YXRpb24ob3B0aW9ucywgc2NvcGVzKTtcbiAgICBhdXRoLmNyZWF0ZUF1dGhvcml6YXRpb25SZXF1ZXN0VVJMKCk7XG5cbiAgICBjb25zdCBzdHlsZXMgPSBkZWZhdWx0U3R5bGUgPyBfZ2V0QmFja2dyb3VuZEltZyhwbGFjZWhvbGRlciwgYnV0dG9uU3R5bGluZykgOiB1bmRlZmluZWQ7XG4gICAgaWYocHJvcHMuZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1JlYWN0LUdvb2dsZS1PQXV0aDJdIEVycm9yOiAke3Byb3BzLmVycm9yfVxuICAgICAgICAgLSBUbyBkaXNwbGF5IHRoZSBlcnJvciB0byB0aGUgdXNlciwgc2V0IElHb29nbGVQcm9wcyBkaXNwbGF5RXJyb3JzIHRvIHRydWUuXG4gICAgICAgICBTZWUgaHR0cHM6Ly9qb2VnYXNld2ljei5naXRodWIuaW8vcmVhY3QtZ29vZ2xlLW9hdXRoMi4wL2ApO1xuICAgIH1cbiAgICByZW1vdmVPQXV0aFF1ZXJ5UGFyYW1zKCk7XG4gICAgcmV0dXJuIDw+XG4gICAgICAgIDxidXR0b24gc3R5bGU9e3N0eWxlc30gb25DbGljaz17YXV0aC5yZWRpcmVjdH0gY2xhc3NOYW1lPXtgJHtwcm9wcy5jbGFzc05hbWV9IGdvb2dsZS1vYXV0aC1idG5gfT57cHJvcHMuY2hpbGRyZW59PC9idXR0b24+XG4gICAgICAgIHsoZGlzcGxheUVycm9ycyAmJiBwcm9wcy5lcnJvcikgJiYgPGRpdj57cHJvcHMuZXJyb3J9PC9kaXY+fVxuICAgIDwvPlxufVxuLyoqXG4gKiBAZXhhbXBsZVxuICogKipRdWljayBTdGFydDoqKlxuICpcbiAqIEZpcnN0IGNyZWF0ZSBhbiBvcHRpb25zIG9iamVjdCB0aGF0IGltcGxlbWVudHMgYW4ge0BsaW5rICBJQXV0aG9yaXphdGlvbk9wdGlvbnN9IHR5cGUuXG4gKiBDaGVjayB0aGUge0BsaW5rICBJQXV0aG9yaXphdGlvbk9wdGlvbnN9IGFuZCB7QGxpbmsgIElBdXRob3JpemF0aW9uQmFzZX0gdHlwZXMgZm9yXG4gKiBhbGwgcmVxdWlyZWQgcHJvcGVydGllcy4gVGhlbiwgcGFzcyB0aGUgb3B0aW9ucyB0byB0aGUge0BsaW5rIEdvb2dsZUJ1dHRvbn0gY29tcG9uZW50LlxuICpcbiAqIGBgYElBdXRob3JpemF0aW9uT3B0aW9uc1xuICogIGNvbnN0IG9wdGlvbnM6ICA9IHtcbiAqICAgICAgY2xpZW50SWQ6IChwcm9jZXNzLmVudi5DTElFTlRfSUQgYXMgc3RyaW5nKSxcbiAqICAgICAgIHJlZGlyZWN0VXJpOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLFxuICogICAgICAgc2NvcGVzOiBbXCJvcGVuaWRcIiwgXCJwcm9maWxlXCIsIFwiZW1haWxcIl0sXG4gKiAgICAgICBpbmNsdWRlR3JhbnRlZFNjb3BlczogdHJ1ZSxcbiAqICAgICAgIGFjY2Vzc1R5cGU6IFwib2ZmbGluZVwiLFxuICogICB9O1xuICpcbiAqICAgPEdvb2dsZUJ1dHRvblxuICogICAgICAgICBwbGFjZWhvbGRlcj1cImRlbW8vc2VhcmNoLnBuZ1wiXG4gKiAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gKiAgICAgICAgIGFwaVVybD1cImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9nb29nbGVfbG9naW5cIlxuICogICAvPlxuICogYGBgXG4gKiBAcGFyYW0gcHJvcHMgc2VlIElHb29nbGVCdXR0b25cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gR29vZ2xlQnV0dG9uKHByb3BzOiBUeXBlR29vZ2xlQnV0dG9uKSB7XG4gICAgY29uc3Qge2NhbGxiYWNrfSA9IHByb3BzO1xuICAgIGNvbnN0IG9hdXRoQ29udGV4dCA9IHVzZUNvbnRleHQ8SU9BdXRoU3RhdGU+KEdvb2dsZUF1dGhDb250ZXh0KTtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICBjb25zdCBxdWVyeVBhcmFtc0NvZGUgPSBjdXJyZW50VXJsLmdldChcImNvZGVcIik7XG4gICAgY29uc3QgcXVlcnlQYXJhbXNFcnJvciA9IGN1cnJlbnRVcmwuZ2V0KFwiZXJyb3JcIik7XG4gICAgbGV0IF9pbm5lciA9XG4gICAgICAgIDxJbm5lckJ1dHRvblxuICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgZXJyb3I9eyhvYXV0aENvbnRleHQgYXMgYW55KS5yZXNwb25zZVN0YXRlPy5lcnJvcn1cbiAgICAgICAgICAgIG9wdGlvbnM9e3Byb3BzLm9wdGlvbnN9XG4gICAgICAgIC8+O1xuICAgIGlmICgob2F1dGhDb250ZXh0IGFzIGFueSkucmVzcG9uc2VTdGF0ZT8uYWNjZXNzVG9rZW4gJiYgIWlzTG9nZ2VkSW4oKSkge1xuICAgICAgICBzdG9yZUFjY2Vzc1Rva2VuKChvYXV0aENvbnRleHQgYXMgYW55KS5yZXNwb25zZVN0YXRlLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcImBhY2Nlc3NUb2tlbmAgc2V0IGluIGxvY2FsIHN0b3JhZ2UuXCIpO1xuICAgICAgICBpZih0eXBlb2YgKG9hdXRoQ29udGV4dCBhcyBhbnkpLnNldE9BdXRoU3RhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAob2F1dGhDb250ZXh0IGFzIGFueSkuc2V0T0F1dGhTdGF0ZSh0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoKG9hdXRoQ29udGV4dCBhcyBhbnkpLnJlc3BvbnNlU3RhdGU/LmVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtSZWFjdC1Hb29nbGUtT0F1dGgyXSBFcnJvcjogQXBpIGNhbGwgZmFpbGVkIHdpdGggJHsob2F1dGhDb250ZXh0IGFzIGFueSkucmVzcG9uc2VTdGF0ZT8uZXJyb3J9IGVycm9yLmApO1xuICAgICAgICByZXR1cm4gX2lubmVyO1xuICAgIH0gZWxzZSBpZiAocXVlcnlQYXJhbXNDb2RlICYmICFpc0xvZ2dlZEluKCkpIHtcbiAgICAgICAgLy8gR2V0IHJlc3Qgb2YgcGFyYW1zXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zRW1haWwgPSBjdXJyZW50VXJsLmdldChcImVtYWlsXCIpIHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zU2NvcGUgPSBjdXJyZW50VXJsLmdldChcInNjb3BlXCIpIHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IHNlcnZlclJlc3BvbnNlUHJvcHM6IElTZXJ2ZXJSZXNwb25zZSA9IHtcbiAgICAgICAgICAgIGVtYWlsOiBxdWVyeVBhcmFtc0VtYWlsLFxuICAgICAgICAgICAgc2NvcGU6IHF1ZXJ5UGFyYW1zU2NvcGUsXG4gICAgICAgICAgICBjb2RlOiBxdWVyeVBhcmFtc0NvZGUsXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHByb3BzLm9wdGlvbnMuY2xpZW50SWQsXG4gICAgICAgICAgICBhcGlVcmw6IHByb3BzLmFwaVVybCxcbiAgICAgICAgICAgIHJlc3BvbnNlU3RhdGU6IChvYXV0aENvbnRleHQgYXMgYW55KS5yZXNwb25zZVN0YXRlLFxuICAgICAgICAgICAgc2V0UmVzcG9uc2VTdGF0ZTogKG9hdXRoQ29udGV4dCBhcyBhbnkpLnNldFJlc3BvbnNlU3RhdGUsXG4gICAgICAgIH07XG4gICAgICAgIHJlbW92ZU9BdXRoUXVlcnlQYXJhbXMoKTtcbiAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlKHNlcnZlclJlc3BvbnNlUHJvcHMpO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJXYWl0aW5nIGZvciByZW1vdGUgYXBpIHJlc3BvbnNlXCIpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyBjYWxsYmFjaygpIDogPD5Mb2FkaW5nLi4uPC8+O1xuICAgIH0gZWxzZSBpZiAocXVlcnlQYXJhbXNFcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvcjogR29vZ2xlIGxvZ2luIGF0dGVtcHQgZmFpbGVkIHdpdGggJHtxdWVyeVBhcmFtc0Vycm9yfSBlcnJvci5gKVxuICAgICAgICByZXR1cm4gX2lubmVyO1xuICAgIH1cbiAgICAvLyBEaXNwbGF5IGJ1dHRvbiB3aXRoIG5vIGVycm9yc1xuICAgIHJldHVybiBfaW5uZXI7XG59XG5cbmV4cG9ydCBjb25zdCBHb29nbGVBdXRoID0gKHByb3BzOiBhbnkpID0+IHtcbiAgICBjb25zdCBbcmVzcG9uc2VTdGF0ZSwgc2V0UmVzcG9uc2VTdGF0ZV0gPSB1c2VTdGF0ZTxJU2VydmVyUmVzcG9uc2VTdGF0ZT4oU0VSVkVSX1JFU1BPTlNFX1NUQVRFKTtcbiAgICBjb25zdCBbaXNBdXRoZW50aWNhdGVkLCBzZXRPQXV0aFN0YXRlXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGlzTG9nZ2VkSW4oKSk7XG4gICAgY29uc3QgX3Byb3ZpZGVyUHJvcHMgPSB7XG4gICAgICAgIGlzQXV0aGVudGljYXRlZCxcbiAgICAgICAgc2V0T0F1dGhTdGF0ZSxcbiAgICAgICAgcmVzcG9uc2VTdGF0ZSxcbiAgICAgICAgc2V0UmVzcG9uc2VTdGF0ZSxcbiAgICB9O1xuICAgIHJldHVybiAgKFxuICAgICAgICA8R29vZ2xlQXV0aFByb3ZpZGVyIHZhbHVlPXtfcHJvdmlkZXJQcm9wc30+XG4gICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvR29vZ2xlQXV0aFByb3ZpZGVyPlxuICAgICk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==
module.exports=function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(e,t){e.exports=require("react")},function(e,t,r){"use strict";r.r(t),r.d(t,"GoogleButton",(function(){return R})),r.d(t,"isLoggedIn",(function(){return i})),r.d(t,"logOutOAuthUser",(function(){return s})),r.d(t,"createOAuthHeaders",(function(){return l})),r.d(t,"GoogleAuth",(function(){return x})),r.d(t,"GoogleAuthConsumer",(function(){return O})),r.d(t,"getAccessToken",(function(){return u}));var o=function(){return(o=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<o;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)},n=function(e,t,r,o){return new(r||(r=Promise))((function(n,c){function a(e){try{s(o.next(e))}catch(e){c(e)}}function i(e){try{s(o.throw(e))}catch(e){c(e)}}function s(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,i)}s((o=o.apply(e,t||[])).next())}))},c=function(e,t){var r,o,n,c,a={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return c={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function i(c){return function(i){return function(c){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,o&&(n=2&c[0]?o.return:c[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,c[1])).done)return n;switch(o=0,n&&(c=[2&c[0],n.value]),c[0]){case 0:case 1:n=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,o=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(n=a.trys,(n=n.length>0&&n[n.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!n||c[1]>n[0]&&c[1]<n[3])){a.label=c[1];break}if(6===c[0]&&a.label<n[1]){a.label=n[1],n=c;break}if(n&&a.label<n[2]){a.label=n[2],a.ops.push(c);break}n[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],o=0}finally{r=n=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,i])}}};function a(e){var t=e.code;(function(e,t){return n(this,void 0,void 0,(function(){return c(this,(function(r){switch(r.label){case 0:return[4,fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})];case 1:return[2,r.sent().json()]}}))}))})(e.apiUrl,{code:t,scope:e.scope}).then((function(t){"access_token"in t?e.setResponseState({accessToken:t.access_token}):e.setResponseState({error:"so access_token in response data!"})})).catch((function(t){e.setResponseState({error:t.message})}))}function i(){return!!window.localStorage.getItem("accessToken")}function s(){window.localStorage.removeItem("accessToken")}function u(){return window.localStorage.getItem("accessToken")}function l(e){var t={};return e&&(t={"X-Auth-Resource":e}),o(o({},t),{"X-Auth-Token":"Bearer "+u()})}function p(){var e=document.location.href;if(document.location.search){var t=e.substring(0,e.indexOf("?"));window.history.replaceState({},document.title,t)}}var d,f=r(0),g=r.n(f);!function(e){e.GOOGLE_OAUTH_ENDPOINT="https://accounts.google.com/o/oauth2/v2/auth"}(d||(d={}));var h=function(){function e(e,t){var r=this;this.redirect=function(e){if(!r.googleRedirectURL)throw new ReferenceError("Error creating redirect url to Google's authorization server");window.location.replace(r.googleRedirectURL)},this.params=e,this.scopesStr=t}return Object.defineProperty(e.prototype,"googleRedirectURL",{get:function(){return this._googleRedirectURL},set:function(e){this._googleRedirectURL=e},enumerable:!1,configurable:!0}),e.prototype.createAuthorizationRequestURL=function(){var e,t=this.params,r=t.accessType,o=void 0===r?"offline":r,n=t.includeGrantedScopes,c=void 0===n||n,a=t.responseType,i=void 0===a?"code":a,s=t.state,u=void 0===s?null:s,l=t.redirectUri,p=t.clientId;e=d.GOOGLE_OAUTH_ENDPOINT+"?scope="+this.scopesStr+"&",e=(e=(e=o?e+"access_type="+o+"&":e)+"include_granted_scopes="+c+"&")+"response_type="+i+"&",e=(e=(e=u?e+"state="+u+"&":e)+"redirect_uri="+l+"&")+"client_id="+p,this.googleRedirectURL=e},e.createScopes=function(e){var t="";return e.map((function(r,o){e.length-1===o?t+=""+r:t+=r+"%20"})),t},e}(),v=function(){return(v=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<o;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)},b={},y={backgroundSize:"20px 20px",backgroundRepeat:"no-repeat",backgroundPosition:"12px 10px",textIndent:"19px",border:"1px solid #bdc3c7",padding:"9px 23px",borderRadius:"9px",backgroundColor:"#bdc3c7",fontSize:"18px"},m=g.a.createContext({}),S=m.Provider,O=m.Consumer,w=function(e){var t=e.placeholder,r=void 0===t?"":t,o=e.defaultStyle,n=void 0===o||o,c=e.options,a=e.displayErrors,i=void 0!==a&&a,s=h.createScopes(c.scopes),u=new h(c,s);u.createAuthorizationRequestURL();var l=n?function(e,t){return e?v(v({},t),{backgroundImage:"url("+e+")"}):t}(r,y):void 0;return e.error&&console.error("[React-Google-OAuth2] Error: "+e.error+"\n - To display the error to the user, set IGoogleProps displayErrors to true.\n See https://joegasewicz.github.io/react-google-oauth2.0/"),p(),g.a.createElement(g.a.Fragment,null,g.a.createElement("button",{style:l,onClick:u.redirect,className:e.className+" google-oauth-btn"},e.children),i&&e.error&&g.a.createElement("div",null,e.error))};function R(e){var t,r,o,n,c,s=e.callback,u=Object(f.useContext)(m),l=new URLSearchParams(window.location.search),d=l.get("code"),h=l.get("error"),b=g.a.createElement(w,v({},e,{placeholder:e.placeholder,error:null===(t=u.responseState)||void 0===t?void 0:t.error,options:e.options}));if((null===(r=u.responseState)||void 0===r?void 0:r.accessToken)&&!i())return c=u.responseState.accessToken,window.localStorage.setItem("accessToken",c),console.debug("`accessToken` set in local storage."),"function"==typeof u.setOAuthState&&Object(f.useEffect)((function(){u.setOAuthState(!0)})),null;if(null===(o=u.responseState)||void 0===o?void 0:o.error)return console.error("[React-Google-OAuth2] Error: Api call failed with "+(null===(n=u.responseState)||void 0===n?void 0:n.error)+" error."),b;if(d&&!i()){var y={email:l.get("email")||"",scope:l.get("scope")||"",code:d,client_id:e.options.clientId,apiUrl:e.apiUrl,responseState:u.responseState,setResponseState:u.setResponseState};return p(),Object(f.useEffect)((function(){a(y)}),[]),console.debug("Waiting for remote api response"),s?s():g.a.createElement(g.a.Fragment,null,"Loading...")}return h?(console.error("Error: Google login attempt failed with "+h+" error."),b):b}var x=function(e){var t=Object(f.useState)(b),r=t[0],o=t[1],n=Object(f.useState)(i()),c={isAuthenticated:n[0],setOAuthState:n[1],responseState:r,setResponseState:o};return g.a.createElement(S,{value:c},e.children)}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFjdC1nb29nbGUtb2F1dGgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcmVhY3QtZ29vZ2xlLW9hdXRoL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9yZWFjdC1nb29nbGUtb2F1dGgvLi9zcmMvYXBpVXRpbHMudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtZ29vZ2xlLW9hdXRoLy4vc3JjL2F1dGhvcml6YXRpb24udHMiLCJ3ZWJwYWNrOi8vcmVhY3QtZ29vZ2xlLW9hdXRoLy4vc3JjL2NvbXBvbmVudHMudHN4Il0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsInNlcnZlclJlc3BvbnNlIiwicHJvcHMiLCJjb2RlIiwiYXBpVXJsIiwicGF5bG9hZCIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwianNvbiIsInBvc3RUb0V4Y2hhbmdlQXBpVXJsIiwic2NvcGUiLCJ0aGVuIiwiZGF0YSIsInNldFJlc3BvbnNlU3RhdGUiLCJhY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsImVycm9yIiwiY2F0Y2giLCJlcnIiLCJtZXNzYWdlIiwiaXNMb2dnZWRJbiIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJsb2dPdXRPQXV0aFVzZXIiLCJyZW1vdmVJdGVtIiwiZ2V0QWNjZXNzVG9rZW4iLCJjcmVhdGVPQXV0aEhlYWRlcnMiLCJyZXNvdXJjZSIsInJlc291cmNlSGVhZGVycyIsInJlbW92ZU9BdXRoUXVlcnlQYXJhbXMiLCJjdXJyZW50TG9jYXRpb24iLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaHJlZiIsInNlYXJjaCIsImNsZWFuX3VyaSIsInN1YnN0cmluZyIsImluZGV4T2YiLCJoaXN0b3J5IiwicmVwbGFjZVN0YXRlIiwidGl0bGUiLCJHb29nbGVBUElDb25uZWN0aW9uU3RyaW5ncyIsInBhcmFtcyIsInNjb3Blc1N0ciIsInJlZGlyZWN0IiwiZSIsImdvb2dsZVJlZGlyZWN0VVJMIiwiUmVmZXJlbmNlRXJyb3IiLCJyZXBsYWNlIiwidGhpcyIsIl9nb29nbGVSZWRpcmVjdFVSTCIsImNyZWF0ZUF1dGhvcml6YXRpb25SZXF1ZXN0VVJMIiwidXJsIiwiYWNjZXNzVHlwZSIsImluY2x1ZGVHcmFudGVkU2NvcGVzIiwicmVzcG9uc2VUeXBlIiwic3RhdGUiLCJyZWRpcmVjdFVyaSIsImNsaWVudElkIiwiR09PR0xFX09BVVRIX0VORFBPSU5UIiwiY3JlYXRlU2NvcGVzIiwic2NvcGVzIiwic3RyIiwibWFwIiwibGVuZ3RoIiwiU0VSVkVSX1JFU1BPTlNFX1NUQVRFIiwiYnV0dG9uU3R5bGluZyIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRQb3NpdGlvbiIsInRleHRJbmRlbnQiLCJib3JkZXIiLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwiYmFja2dyb3VuZENvbG9yIiwiZm9udFNpemUiLCJHb29nbGVBdXRoQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJHb29nbGVBdXRoUHJvdmlkZXIiLCJQcm92aWRlciIsIkdvb2dsZUF1dGhDb25zdW1lciIsIkNvbnN1bWVyIiwiSW5uZXJCdXR0b24iLCJwbGFjZWhvbGRlciIsImRlZmF1bHRTdHlsZSIsIm9wdGlvbnMiLCJkaXNwbGF5RXJyb3JzIiwiQXV0aG9yaXphdGlvbiIsImF1dGgiLCJzdHlsZXMiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJfZ2V0QmFja2dyb3VuZEltZyIsInVuZGVmaW5lZCIsImNvbnNvbGUiLCJzdHlsZSIsIm9uQ2xpY2siLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsIkdvb2dsZUJ1dHRvbiIsInRva2VuIiwiY2FsbGJhY2siLCJvYXV0aENvbnRleHQiLCJjdXJyZW50VXJsIiwiVVJMU2VhcmNoUGFyYW1zIiwicXVlcnlQYXJhbXNDb2RlIiwicXVlcnlQYXJhbXNFcnJvciIsIl9pbm5lciIsInJlc3BvbnNlU3RhdGUiLCJzZXRJdGVtIiwiZGVidWciLCJzZXRPQXV0aFN0YXRlIiwiZW1haWwiLCJjbGllbnRfaWQiLCJHb29nbGVBdXRoIiwiX3Byb3ZpZGVyUHJvcHMiLCJpc0F1dGhlbnRpY2F0ZWQiXSwibWFwcGluZ3MiOiIyQkFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUEwRGYsT0FyREFGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FB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QWVULEdFd0p4Q04sUUFBUWdCLE1BQU0sdUNBQ29DLG1CQUF2Q1IsRUFBcUJTLGVBQzVCLHFCQUFVLFdBQ0xULEVBQXFCUyxlQUFjLE1BR3JDLEtBQ0osR0FBdUMsUUFBbEMsRUFBQVQsRUFBcUJNLHFCQUFhLGVBQUU1RixNQUU1QyxPQURBOEUsUUFBUTlFLE1BQU0sc0RBQXdGLFFBQXhGLEVBQXNEc0YsRUFBcUJNLHFCQUFhLGVBQUU1RixPQUFLLFdBQ3RHMkYsRUFDSixHQUFJRixJQUFvQnJGLElBQWMsQ0FFekMsSUFFTSxFQUF1QyxDQUN6QzRGLE1BSHFCVCxFQUFXOUgsSUFBSSxVQUFZLEdBSWhEaUMsTUFIcUI2RixFQUFXOUgsSUFBSSxVQUFZLEdBSWhEc0IsS0FBTTBHLEVBQ05RLFVBQVduSCxFQUFNd0YsUUFBUTNCLFNBQ3pCM0QsT0FBUUYsRUFBTUUsT0FDZDRHLGNBQWdCTixFQUFxQk0sY0FDckMvRixpQkFBbUJ5RixFQUFxQnpGLGtCQU81QyxPQUxBaUIsSUFDQSxxQkFBVSxXQUNOakMsRUFBZSxLQUNoQixJQUNIaUcsUUFBUWdCLE1BQU0sbUNBQ1BULEVBQVdBLElBQWEsa0RBQzVCLE9BQUlLLEdBQ1BaLFFBQVE5RSxNQUFNLDJDQUEyQzBGLEVBQWdCLFdBQ2xFQyxHQUdKQSxFQUdKLElBQU1PLEVBQWEsU0FBQ3BILEdBQ2pCLE1BQW9DLG1CQUErQm9FLEdBQWxFMEMsRUFBYSxLQUFFL0YsRUFBZ0IsS0FDaEMsRUFBbUMsbUJBQWtCTyxLQUNyRCtGLEVBQThCLENBQ2hDQyxnQkFGa0IsS0FHbEJMLGNBSGlDLEtBSWpDSCxjQUFhLEVBQ2IvRixpQkFBZ0IsR0FFcEIsT0FDSSxrQkFBQ2tFLEVBQWtCLENBQUNsRyxNQUFPc0ksR0FDdEJySCxFQUFNb0ciLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCIvKiogQGludGVybmFsICovXG5pbXBvcnQge0Rpc3BhdGNoLCBTZXRTdGF0ZUFjdGlvbn0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBheWxvYWQge1xuICAgIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgICByZWFkb25seSBzY29wZTogc3RyaW5nO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXBpUmVzcG9uc2VEYXRhIHsgcmVhZG9ubHkgYWNjZXNzX3Rva2VuOiBzdHJpbmc7IH1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0VG9FeGNoYW5nZUFwaVVybChhcGlVcmw6IHN0cmluZywgcGF5bG9hZDogSVBheWxvYWQpOiBQcm9taXNlPElBcGlSZXNwb25zZURhdGE+IHtcbiAgICBjb25zdCByZXM6IFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYXBpVXJsLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLmpzb24oKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZlclJlc3BvbnNlU3RhdGUgeyByZWFkb25seSBhY2Nlc3NUb2tlbj86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmd9XG4vKiogQGludGVybmFsICovXG5leHBvcnQgaW50ZXJmYWNlIElTZXJ2ZXJSZXNwb25zZVByb3BzIHtcbiAgICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2NvcGU6IHN0cmluZztcbiAgICByZWFkb25seSBhcGlVcmw6IHN0cmluZztcbiAgICBzZXRSZXNwb25zZVN0YXRlOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjxJU2VydmVyUmVzcG9uc2VTdGF0ZT4+O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlclJlc3BvbnNlKHByb3BzOiBJU2VydmVyUmVzcG9uc2VQcm9wcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29kZSwgYXBpVXJsLCBzY29wZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgcGF5bG9hZDogSVBheWxvYWQgPSB7IGNvZGUsIHNjb3BlIH07XG4gICAgcG9zdFRvRXhjaGFuZ2VBcGlVcmwoYXBpVXJsLCBwYXlsb2FkKVxuICAgICAgICAudGhlbigoZGF0YTogSUFwaVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHJlc3BvbnNlU3RhdGUgYWNjZXNzVG9rZW5cbiAgICAgICAgICAgIGlmKCEoXCJhY2Nlc3NfdG9rZW5cIiBpbiBkYXRhKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLnNldFJlc3BvbnNlU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJzbyBhY2Nlc3NfdG9rZW4gaW4gcmVzcG9uc2UgZGF0YSFcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuc2V0UmVzcG9uc2VTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBkYXRhLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHByb3BzLnNldFJlc3BvbnNlU3RhdGUoe1xuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlQWNjZXNzVG9rZW4odG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJhY2Nlc3NUb2tlblwiLCB0b2tlbik7XG59XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogIGlmKGlzTG9nZ2VkSW4oKSkgeyAvLyByZXR1cm5zIHRydWUgaXMgYWNjZXNzVG9rZW4gZXhpc3RzIGluIExvY2FsU3RvcmFnZVxuICogICAgICAvLyB1c2VyIGxvZ2dlZCBjb2RlLi4uXG4gKiAgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvZ2dlZEluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFjY2Vzc1Rva2VuXCIpO1xufVxuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqICBsb2dPdXRPQXV0aFVzZXIoKSAvLyByZW1vdmVzIHRoZSBhY2Nlc3NUb2tlbiBmcm9tIExvY2FsU3RvcmFnZVxuICogYGBgXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ091dE9BdXRoVXNlcigpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhY2Nlc3NUb2tlblwiKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBzdG9yZWQgYWNjZXNzVG9rZW5cbiAqIEByZXR1cm4gVGhlIEFjY2VzcyBUb2tlbiBvciBub25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWNjZXNzVG9rZW5cIik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFdhcm5pbmc6IFBsZWFzZSBtYWtlIHN1cmUgdGhhdCBhcyBvZiB2ZXJzaW9uIGAwLjAuMjNgIHdlIGhhdmUgcmVtb3ZlZFxuICogdGhlIGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50IHR5cGUgaGVhZGVycyBmcm9tIHRoaXMgZnVuY3Rpb24uIFRoaXMgbWF5IGNhdXNlIGFuIGlzc3VlXG4gKiBpZiB5b3Ugb3JpZ2luYWxseSBkaWRuJ3QgY29uc3RydWN0IHlvdXIgcmVxdWVzdCBjb250ZW50IHR5cGUgaGVhZGVycyB3aXRoIGBhcHBsaWNhdGlvbi9qc29uYC5cbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqICBmZXRjaCh1cmwsIHtcbiAqICAgICAgaGVhZGVyczogY3JlYXRlT0F1dGhIZWFkZXJzKCksXG4gKiAgfSlcbiAqIGBgYFxuICpcbiAqIElmIHlvdSByZXF1aXJlIHlvdXIgc2VydmVyIHRvIGhhbmRsZSBhdXRoZW50aWNhdGluZyBtdWx0aXBsZSB1c2VycyBhY3Jvc3MgbWFueSByZXNvdXJjZXNcbiAqIChvciB0YWJsZXMpIHRoZW4gcGFzcyBpbiB0aGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UsIGZvciBFeGFtcGxlOlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogIGZldGNoKHVybCwge1xuICogICAgICBoZWFkZXJzOiBjcmVhdGVPQXV0aEhlYWRlcnMoXCJ1c2Vyc1wiKSxcbiAqICB9KVxuICogYGBgXG4gKlxuICogIFdpdGggdGhlIHJlc291cmNlIHZhbHVlLCB0aGUgZm9sbG93aW5nIGhlYWRlcnMgYXJlIGNvbnN0cnVjdGVkOlxuICpcbiAqICBAZXhhbXBsZVxuICogIGBgYFxuICogIHtcbiAqICAgIFwiWC1BdXRoLVRva2VuXCIgOiBcIjxUT0tFTj5cIixcbiAqICAgIFwiWC1BdXRoLVJlc291cmNlXCI6IFwidXNlcnNcIixcbiAqICB9XG4gKiAgYGBgXG4gKiBAcGFyYW0gcmVzb3VyY2UgT3B0aW9uYWwgcmVzb3VyY2UgbmFtZSB0byBsb29rIHVwIG9uIHRoZSBzZXJ2ZXJcbiAqIEByZXR1cm4gT2JqZWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT0F1dGhIZWFkZXJzKHJlc291cmNlPzogc3RyaW5nKTogT2JqZWN0IHtcbiAgICBsZXQgcmVzb3VyY2VIZWFkZXJzID0ge307XG4gICAgaWYocmVzb3VyY2UpIHtcbiAgICAgICAgcmVzb3VyY2VIZWFkZXJzID0ge1xuICAgICAgICAgICAgXCJYLUF1dGgtUmVzb3VyY2VcIjogcmVzb3VyY2UsXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVzb3VyY2VIZWFkZXJzLFxuICAgICAgICBcIlgtQXV0aC1Ub2tlblwiOiBgQmVhcmVyICR7Z2V0QWNjZXNzVG9rZW4oKX1gLFxuICAgIH1cbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU9BdXRoUXVlcnlQYXJhbXMoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudExvY2F0aW9uID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcbiAgICBpZihkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2gpIHtcbiAgICAgICAgY29uc3QgY2xlYW5fdXJpID0gY3VycmVudExvY2F0aW9uLnN1YnN0cmluZygwLCBjdXJyZW50TG9jYXRpb24uaW5kZXhPZihcIj9cIikpO1xuICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGRvY3VtZW50LnRpdGxlLCBjbGVhbl91cmkpO1xuICAgIH1cbn1cbiIsIi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEdvb2dsZUFQSUNvbm5lY3Rpb25TdHJpbmdzIHtcbiAgICBHT09HTEVfT0FVVEhfRU5EUE9JTlQgPSBcImh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi92Mi9hdXRoXCIsXG59XG4vKiogQHB1YmxpYyAqL1xuaW50ZXJmYWNlIElBdXRob3JpemF0aW9uQmFzZSB7XG4gICAgLyoqIFRoaXMgaXMgeW91ciBjbGllbnQgSUQgKi9cbiAgICBjbGllbnRJZDogc3RyaW5nO1xuICAgIC8qKiBXaGVyZSB5b3UgUmVhY3QgYXBwIHNob3VsZCByZWRpcmVjdCB0byBpZiB1c2VyIGhhcyBzdWNjZXNzZnVsbHkgbG9nZ2VkIGluICoqL1xuICAgIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG4gICAgLyoqIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gKmNvZGUqICovXG4gICAgcmVzcG9uc2VUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgYXBpICoqYXBpVXJsKioge0BsaW5rIElHb29nbGVCdXR0b259IGNhbiByZWZyZXNoIHRva2VucyBvbiB0aGUgdXNlcidzXG4gICAgICogYmVoYWxmLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAqb25saW5lKiBidXQgaWYgeW91ciBiYWNrZW5kIGFwaSB3aWxsIHJlZnJlc2ggdGhlIHRva2VuIHRoZW5cbiAgICAgKiB5b3UgbXVzdCBwYXNzIGluIGEgc3RyaW5nIHZhbHVlIG9mICpvZmZsaW5lKiAoVGhpcyBpcyByZWNvbW1lbmRlZCBmb3IgcmVhY3QgYXBwcyBjb25uZWN0ZWRcbiAgICAgKiB0byBhIFJFU1QgYXBpIGJhY2tlbmQpLlxuICAgICAqL1xuICAgIGFjY2Vzc1R5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlIGJ1dCB3aWxsIGJlIGluIGEgYWRkZWQgaW4gYSBmdXR1cmUgdmVyc2lvbixcbiAgICAgKiBUT0RPIC0gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb2VnYXNld2ljei9yZWFjdC1nb29nbGUtb2F1dGgyLjAvaXNzdWVzLzNcbiAgICAgKiAqL1xuICAgIHN0YXRlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERlZmF1bHRlZCB0byB0cnVlLiBBbnkgZXh0cmEgc2NvcGVzIHRoZSBsb2dnZWQgaW4gdXNlciBwcmV2aW91c2x5IGdyYW50ZWRcbiAgICAgKiB3aWxsIGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIG5ldyBhY2Nlc3MgdG9rZW4uXG4gICAgICogKi9cbiAgICBpbmNsdWRlR3JhbnRlZFNjb3Blcz86IGJvb2xlYW47XG4gICAgLyoqIE5vdCByZXF1aXJlZCwgb3B0aW9uYWwuIEZvciBwcmVmaWxsaW5nIGVtYWlsIGZpZWxkcyBldGMuICovXG4gICAgbG9naW5IaW50Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIE5vdCByZXF1aXJlZCwgb3B0aW9uYWwuIEEgc3BhY2UtZGVsaW1pdGVkLCBjYXNlLXNlbnNpdGl2ZSBsaXN0IG9mIHByb21wdHMgdG9cbiAgICAgKiBwcmVzZW50IHRoZSB1c2VyLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciwgdGhlIHVzZXIgd2lsbCBiZSBwcm9tcHRlZFxuICAgICAqIG9ubHkgdGhlIGZpcnN0IHRpbWUgeW91ciBwcm9qZWN0IHJlcXVlc3RzIGFjY2Vzcy5cbiAgICAgKiAqL1xuICAgIHByb21wdD86IHN0cmluZztcbn1cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIElBdXRob3JpemF0aW9uT3B0aW9ucyBleHRlbmRzIElBdXRob3JpemF0aW9uQmFzZSB7XG4gICAgc2NvcGVzOiBBcnJheTxzdHJpbmc+O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXV0aG9yaXphdGlvbiB7XG4gICAgcGFyYW1zOiBJQXV0aG9yaXphdGlvbk9wdGlvbnM7XG4gICAgLyoqIFNldCB0byAgYFtcIm9wZW5pZFwiLCBcInByb2ZpbGVcIl1gIGJ5IGRlZmF1bHQgKiovXG4gICAgc2NvcGVzU3RyOiBzdHJpbmc7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY2xhc3MgQXV0aG9yaXphdGlvbiBpbXBsZW1lbnRzIElBdXRob3JpemF0aW9uIHtcblxuICAgIHByaXZhdGUgX2dvb2dsZVJlZGlyZWN0VVJMPzogc3RyaW5nO1xuXG4gICAgcHVibGljIHBhcmFtczogSUF1dGhvcml6YXRpb25PcHRpb25zO1xuXG4gICAgcHVibGljIHNjb3Blc1N0cjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1zOiBJQXV0aG9yaXphdGlvbk9wdGlvbnMsIHNjb3Blc1N0cjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICB0aGlzLnNjb3Blc1N0ciA9IHNjb3Blc1N0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAcHJvcGVydHkgZ29vZ2xlUmVkaXJlY3RVUkwgQWNjZXNzIHRoZSB1cmwgZm9yIHRoZSBpbml0aWFsXG4gICAgICogYnJvd3NlciBjYWxsIHRvIEdvb2dsZSdzIE9BdXRoIDIuMCBzZXJ2ZXIuIFVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ29vZ2xlUmVkaXJlY3RVUkwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nb29nbGVSZWRpcmVjdFVSTDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGdvb2dsZVJlZGlyZWN0VVJMKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fZ29vZ2xlUmVkaXJlY3RVUkwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcHVibGljIGNyZWF0ZUF1dGhvcml6YXRpb25SZXF1ZXN0VVJMKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBhY2Nlc3NUeXBlID0gXCJvZmZsaW5lXCIsXG4gICAgICAgICAgICBpbmNsdWRlR3JhbnRlZFNjb3BlcyA9IHRydWUsXG4gICAgICAgICAgICByZXNwb25zZVR5cGUgPSBcImNvZGVcIixcbiAgICAgICAgICAgIHN0YXRlID0gbnVsbCxcbiAgICAgICAgICAgIHJlZGlyZWN0VXJpLFxuICAgICAgICAgICAgY2xpZW50SWQsXG4gICAgICAgIH0gPSB0aGlzLnBhcmFtcztcbiAgICAgICAgY29uc3QgZG9tYWluID0gR29vZ2xlQVBJQ29ubmVjdGlvblN0cmluZ3MuR09PR0xFX09BVVRIX0VORFBPSU5UO1xuICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XG4gICAgICAgIHVybCA9IGAke2RvbWFpbn0/c2NvcGU9JHt0aGlzLnNjb3Blc1N0cn0mYDtcbiAgICAgICAgdXJsID0gYWNjZXNzVHlwZSA/IGAke3VybH1hY2Nlc3NfdHlwZT0ke2FjY2Vzc1R5cGV9JmAgOiB1cmw7XG4gICAgICAgIHVybCA9IGAke3VybH1pbmNsdWRlX2dyYW50ZWRfc2NvcGVzPSR7aW5jbHVkZUdyYW50ZWRTY29wZXN9JmA7XG4gICAgICAgIHVybCA9IGAke3VybH1yZXNwb25zZV90eXBlPSR7cmVzcG9uc2VUeXBlfSZgO1xuICAgICAgICB1cmwgPSBzdGF0ZSA/IGAke3VybH1zdGF0ZT0ke3N0YXRlfSZgIDogdXJsO1xuICAgICAgICB1cmwgPSBgJHt1cmx9cmVkaXJlY3RfdXJpPSR7cmVkaXJlY3RVcml9JmA7XG4gICAgICAgIHVybCA9IGAke3VybH1jbGllbnRfaWQ9JHtjbGllbnRJZH1gO1xuICAgICAgICB0aGlzLmdvb2dsZVJlZGlyZWN0VVJMID0gdXJsO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVNjb3BlcyhzY29wZXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3RyID0gXCJcIjtcbiAgICAgICAgc2NvcGVzLm1hcCgoc2NvcGUsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChzY29wZXMubGVuZ3RoIC0gMSA9PT0gaSkge1xuICAgICAgICAgICAgICAgIHN0ciArPSBgJHtzY29wZX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gYCR7c2NvcGV9JTIwYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWRpcmVjdCA9IChlOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgICAgaWYodGhpcy5nb29nbGVSZWRpcmVjdFVSTCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodGhpcy5nb29nbGVSZWRpcmVjdFVSTClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcIkVycm9yIGNyZWF0aW5nIHJlZGlyZWN0IHVybCB0byBHb29nbGUncyBhdXRob3JpemF0aW9uIHNlcnZlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQge2RlZmF1bHQgYXMgUmVhY3QsIERpc3BhdGNoLCBTZXRTdGF0ZUFjdGlvbiwgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICAgIEF1dGhvcml6YXRpb24sXG4gICAgSUF1dGhvcml6YXRpb25PcHRpb25zLFxufSBmcm9tIFwiLi9hdXRob3JpemF0aW9uXCI7XG5pbXBvcnQge1xuICAgIHNlcnZlclJlc3BvbnNlLFxuICAgIHN0b3JlQWNjZXNzVG9rZW4sXG4gICAgaXNMb2dnZWRJbixcbiAgICByZW1vdmVPQXV0aFF1ZXJ5UGFyYW1zLCBJU2VydmVyUmVzcG9uc2VTdGF0ZSwgSVNlcnZlclJlc3BvbnNlUHJvcHMsXG59IGZyb20gXCIuL2FwaVV0aWxzXCI7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIElHb29nbGVCdXR0b24ge1xuICAgIC8qKiBQbGFjZWhvbGRlciBpbWFnZSBkaXNwbGF5ZWQgbmV4dCB0byBidXR0b24gdGV4dC4gVGhlIHBsYWNlaG9sZGVyIHByb3AgaGFzIG5vIGVmZmVjdCBpZiBwbGFjZWhvbGRlciBpcyBzZXQgdG8gZmFsc2UgKi9cbiAgICByZWFkb25seSBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICAvKiogUmVtb3ZlIGRlZmF1bHQgc3R5bGVzLlxuICAgICAqICBUbyBTdHlsZSB0aGUgPGJ1dHRvbj4gZWxlbWVudCB3aXRoIENTUywgdXNlIGBnb29nbGUtb2F1dGgtYnRuYC4gRm9yIGV4YW1wbGU6XG4gICAgICogIGBgYFxuICAgICAqICAuZ29vZ2xlLW9hdXRoLWJ0biB7XG4gICAgICogICAgICBjb2xvcjogcmVkO1xuICAgICAqICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTtcbiAgICAgKiAgfVxuICAgICAqICBgYGBcbiAgICAgKiAoeW91IGNhbiBhbHNvIHBhc3MgeW91ciBjc3Mgc2VsZWN0b3JzIGRpcmVjdGx5IHdpdGggUmVhY3RzJyBgY2xhc3NOYW1lYCBwcm9wKVxuICAgICAqICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdFN0eWxlPzogYm9vbGVhbjtcbiAgICAvKiogU2VlIElBdXRob3JpemF0aW9uUmVxdWVzdFBhcmFtcyAqL1xuICAgIHJlYWRvbmx5IG9wdGlvbnM6IElBdXRob3JpemF0aW9uT3B0aW9ucztcbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHlcbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKiBBIFJlYWN0IGNvbXBvbmVudCBvciBhbnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgUmVhY3QgY29tcG9uZW50LlxuICAgICAqIFRoaXMgd291bGQgbm9ybWFsbHkgYmUgdXNlZCB0byBkaXNwbGF5IGEgcHJlbG9hZGVyIHRvIHRoZSB1c2VyIHdoaWxzdFxuICAgICAqIHRoZSBPQXV0aDIuMCBsb2dpbiBzdHJhdGVneSBpcyBpbiBmbGlnaHQuIEJ5IGRlZmF1bHQgYSBgTG9hZGluZy4uLmBcbiAgICAgKiBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgXG4gICAgICogPEdvb2dsZUJ1dHRvblxuICAgICAqICAgIGNhbGxiYWNrPXsoKSA9PiA8PlwiTG9hZGluZy4uLlwiPC8+fVxuICAgICAqICAgIC8vIG90aGVyIHByb3BzLi4uXG4gICAgICogLz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWFkb25seSBjYWxsYmFjaz86ICgpID0+IFJlYWN0LlJlYWN0SFRNTEVsZW1lbnQ8YW55PjtcbiAgICAvKiogVGhlIHVybCBvZiB0aGUgYXBpIHRvIHBlcmZvcm0gdGhlIGV4Y2hhbmdlICovXG4gICAgcmVhZG9ubHkgYXBpVXJsOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwuIERlZmF1bHQgc2V0IHRvIGZhbHNlLlxuICAgICAqIERpc3BsYXkgYW4gZXJyb3IgdG8gdGhlIHVzZXIgKHdpbGwgYmUgZGlzcGxheWVkIGluIGEgY2hpbGQgYGRpdmAgZWxlbWVudCkuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGlzcGxheUVycm9ycz86IGJvb2xlYW47XG59XG4vKiogQGludGVybmFsICovXG50eXBlIFR5cGVCdXR0b25TdHlsZXMgPSB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuLyoqIEBpbnRlcm5hbCAqL1xudHlwZSBUeXBlR29vZ2xlQnV0dG9uID0gSUdvb2dsZUJ1dHRvbiAmIFJlYWN0LkJ1dHRvbkhUTUxBdHRyaWJ1dGVzPEhUTUxCdXR0b25FbGVtZW50Pjtcbi8qKiBAaW50ZXJuYWwgKi9cbmludGVyZmFjZSBJU2VydmVyUmVzcG9uc2Uge1xuICAgIHJlYWRvbmx5IGVtYWlsPzogc3RyaW5nO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgICByZWFkb25seSBzY29wZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNsaWVudF9pZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFwaVVybDogc3RyaW5nO1xuICAgIHJlc3BvbnNlU3RhdGU6IElTZXJ2ZXJSZXNwb25zZVN0YXRlO1xuICAgIHNldFJlc3BvbnNlU3RhdGU6IERpc3BhdGNoPFNldFN0YXRlQWN0aW9uPElTZXJ2ZXJSZXNwb25zZVN0YXRlPj47XG59XG4vKiogQGludGVybmFsICovXG5jb25zdCBTRVJWRVJfUkVTUE9OU0VfU1RBVEUgPSB7IH07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmNvbnN0IGJ1dHRvblN0eWxpbmc6IFR5cGVCdXR0b25TdHlsZXMgPSB7XG4gICAgYmFja2dyb3VuZFNpemU6IFwiMjBweCAyMHB4XCIsXG4gICAgYmFja2dyb3VuZFJlcGVhdDogXCJuby1yZXBlYXRcIixcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb246IFwiMTJweCAxMHB4XCIsXG4gICAgdGV4dEluZGVudDogXCIxOXB4XCIsXG4gICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjYmRjM2M3XCIsXG4gICAgcGFkZGluZzogXCI5cHggMjNweFwiLFxuICAgIGJvcmRlclJhZGl1czogXCI5cHhcIixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2JkYzNjN1wiLFxuICAgIGZvbnRTaXplOiBcIjE4cHhcIixcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU9BdXRoU3RhdGUge1xuICAgIGlzQXV0aGVudGljYXRlZD86IGJvb2xlYW47XG4gICAgc2V0T0F1dGhTdGF0ZT86IEZ1bmN0aW9uO1xuICAgIHJlc3BvbnNlU3RhdGU/OiBJU2VydmVyUmVzcG9uc2VTdGF0ZTtcbiAgICAvKipcbiAgICAgKiBgYGBcbiAgICAgKiAgICBpbXBvcnQge1xuICAgICAqICAgICAgIHJlc3BvbnNlU3RhdGVcbiAgICAgKiAgIH0gZnJvbSBcInJlYWN0LWdvb2dsZS1vYXV0aDJcIjtcbiAgICAgKlxuICAgICAqICAgPEdvb2dsZUF1dGg+XG4gICAgICogICB7KHtyZXNwb25zZVN0YXRlfSkgPT4ge1xuICAgICAqICAgICAgIC8vIGFjY2VzcyB0aGUgdG9rZW4gZnJvbSB0aGUgc3RhdGVcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZVN0YXRlLmFjY2Vzc1Rva2VuKSAvLyA8QUNDRVNTX1RPS0VOPlxuICAgICAqICAgfX1cbiAgICAgKiAgIDwvR29vZ2xlQXV0aD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZXRSZXNwb25zZVN0YXRlPzogRGlzcGF0Y2g8U2V0U3RhdGVBY3Rpb248SVNlcnZlclJlc3BvbnNlU3RhdGU+Pjtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmNvbnN0IEdvb2dsZUF1dGhDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxJT0F1dGhTdGF0ZT4oe30pO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IEdvb2dsZUF1dGhQcm92aWRlciA9IEdvb2dsZUF1dGhDb250ZXh0LlByb3ZpZGVyO1xuLyoqXG4gKiBAZXhhbXBsZVxuICogR2V0IG5vdGlmaWVkIHdoZW4gYSB1c2VyIGhhcyBsb2dnZWQgaW4gc3VjY2Vzc2Z1bGx5IGJ5IHdyYXBwaW5nIHRoZSBHb29nbGVCdXR0b25cbiAqIGNvbXBvbmVudCB3aXRoaW4gdGhlIEdvb2dsZUF1dGggcHJvdmlkZXIuIEZvciBleGFtcGxlOlxuICogYGBgXG4gKiAgICBpbXBvcnQge1xuICogICAgICAgR29vZ2xlQXV0aFxuICogICB9IGZyb20gXCJyZWFjdC1nb29nbGUtb2F1dGgyXCI7XG4gKlxuICogICA8R29vZ2xlQXV0aD5cbiAqICAgeyh7aXNBdXRoZW50aWNhdGVkfSkgPT4ge1xuICogICAgICAgLy8gaXNBdXRoZW50aWNhdGVkIHdpbGwgZ2V0IHNldCB0byB0cnVlIHdoZW4gYSB1c2VyIGhhcyBzdWNjZXNzZnVsbHkgbG9nZ2VkIGluLlxuICogICAgICAgY29uc29sZS5sb2coXCJ2YWx1ZTogXCIsIGlzQXV0aGVudGljYXRlZCk7IC8vIHZhbHVlOiB0cnVlIG9yIGZhbHNlXG4gKiAgICAgICByZXR1cm4gPEdvb2dsZUJ1dHRvblxuICogICAgICAgICAgICAgICAgIC8vIG9wdGlvbnMuLi5cbiAqICAgICAgICAgICAgICAgLz5cbiAqICAgfX1cbiAqICAgPC9Hb29nbGVBdXRoPlxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBHb29nbGVBdXRoQ29uc3VtZXIgPSBHb29nbGVBdXRoQ29udGV4dC5Db25zdW1lcjtcbi8qKiBAaW50ZXJuYWwgKi9cbmNvbnN0IF9nZXRCYWNrZ3JvdW5kSW1nID0gKHBsYWNlaG9sZGVyOiBzdHJpbmcsIHN0eWxlczogVHlwZUJ1dHRvblN0eWxlcyk6IFR5cGVCdXR0b25TdHlsZXMgPT4ge1xuICAgIGlmKHBsYWNlaG9sZGVyKSB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0eWxlcywgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7cGxhY2Vob2xkZXJ9KWAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlcztcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuaW50ZXJmYWNlIElJbm5lckJ1dHRvblByb3BzIGV4dGVuZHMgSUdvb2dsZUJ1dHRvbiB7XG4gICAgZXJyb3I/OiBzdHJpbmc7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgSW5uZXJCdXR0b24gPSAocHJvcHM6IElJbm5lckJ1dHRvblByb3BzICYgUmVhY3QuQnV0dG9uSFRNTEF0dHJpYnV0ZXM8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBwbGFjZWhvbGRlciA9IFwiXCIsXG4gICAgICAgIGRlZmF1bHRTdHlsZSA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGRpc3BsYXlFcnJvcnMgPSBmYWxzZSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBzY29wZXMgPSBBdXRob3JpemF0aW9uLmNyZWF0ZVNjb3BlcyhvcHRpb25zLnNjb3Blcyk7XG4gICAgY29uc3QgYXV0aCA9IG5ldyBBdXRob3JpemF0aW9uKG9wdGlvbnMsIHNjb3Blcyk7XG4gICAgYXV0aC5jcmVhdGVBdXRob3JpemF0aW9uUmVxdWVzdFVSTCgpO1xuXG4gICAgY29uc3Qgc3R5bGVzID0gZGVmYXVsdFN0eWxlID8gX2dldEJhY2tncm91bmRJbWcocGxhY2Vob2xkZXIsIGJ1dHRvblN0eWxpbmcpIDogdW5kZWZpbmVkO1xuICAgIGlmKHByb3BzLmVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtSZWFjdC1Hb29nbGUtT0F1dGgyXSBFcnJvcjogJHtwcm9wcy5lcnJvcn1cbiAgICAgICAgIC0gVG8gZGlzcGxheSB0aGUgZXJyb3IgdG8gdGhlIHVzZXIsIHNldCBJR29vZ2xlUHJvcHMgZGlzcGxheUVycm9ycyB0byB0cnVlLlxuICAgICAgICAgU2VlIGh0dHBzOi8vam9lZ2FzZXdpY3ouZ2l0aHViLmlvL3JlYWN0LWdvb2dsZS1vYXV0aDIuMC9gKTtcbiAgICB9XG4gICAgcmVtb3ZlT0F1dGhRdWVyeVBhcmFtcygpO1xuICAgIHJldHVybiA8PlxuICAgICAgICA8YnV0dG9uIHN0eWxlPXtzdHlsZXN9IG9uQ2xpY2s9e2F1dGgucmVkaXJlY3R9IGNsYXNzTmFtZT17YCR7cHJvcHMuY2xhc3NOYW1lfSBnb29nbGUtb2F1dGgtYnRuYH0+e3Byb3BzLmNoaWxkcmVufTwvYnV0dG9uPlxuICAgICAgICB7KGRpc3BsYXlFcnJvcnMgJiYgcHJvcHMuZXJyb3IpICYmIDxkaXY+e3Byb3BzLmVycm9yfTwvZGl2Pn1cbiAgICA8Lz5cbn1cbi8qKlxuICogQGV4YW1wbGVcbiAqICoqUXVpY2sgU3RhcnQ6KipcbiAqXG4gKiBGaXJzdCBjcmVhdGUgYW4gb3B0aW9ucyBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIGFuIHtAbGluayAgSUF1dGhvcml6YXRpb25PcHRpb25zfSB0eXBlLlxuICogQ2hlY2sgdGhlIHtAbGluayAgSUF1dGhvcml6YXRpb25PcHRpb25zfSBhbmQge0BsaW5rICBJQXV0aG9yaXphdGlvbkJhc2V9IHR5cGVzIGZvclxuICogYWxsIHJlcXVpcmVkIHByb3BlcnRpZXMuIFRoZW4sIHBhc3MgdGhlIG9wdGlvbnMgdG8gdGhlIHtAbGluayBHb29nbGVCdXR0b259IGNvbXBvbmVudC5cbiAqXG4gKiBgYGBJQXV0aG9yaXphdGlvbk9wdGlvbnNcbiAqICBjb25zdCBvcHRpb25zOiAgPSB7XG4gKiAgICAgIGNsaWVudElkOiAocHJvY2Vzcy5lbnYuQ0xJRU5UX0lEIGFzIHN0cmluZyksXG4gKiAgICAgICByZWRpcmVjdFVyaTogXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIixcbiAqICAgICAgIHNjb3BlczogW1wib3BlbmlkXCIsIFwicHJvZmlsZVwiLCBcImVtYWlsXCJdLFxuICogICAgICAgaW5jbHVkZUdyYW50ZWRTY29wZXM6IHRydWUsXG4gKiAgICAgICBhY2Nlc3NUeXBlOiBcIm9mZmxpbmVcIixcbiAqICAgfTtcbiAqXG4gKiAgIDxHb29nbGVCdXR0b25cbiAqICAgICAgICAgcGxhY2Vob2xkZXI9XCJkZW1vL3NlYXJjaC5wbmdcIlxuICogICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICogICAgICAgICBhcGlVcmw9XCJodHRwOi8vbG9jYWxob3N0OjUwMDAvZ29vZ2xlX2xvZ2luXCJcbiAqICAgLz5cbiAqIGBgYFxuICogQHBhcmFtIHByb3BzIHNlZSBJR29vZ2xlQnV0dG9uXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEdvb2dsZUJ1dHRvbihwcm9wczogVHlwZUdvb2dsZUJ1dHRvbikge1xuICAgIGNvbnN0IHtjYWxsYmFja30gPSBwcm9wcztcbiAgICBjb25zdCBvYXV0aENvbnRleHQgPSB1c2VDb250ZXh0PElPQXV0aFN0YXRlPihHb29nbGVBdXRoQ29udGV4dCk7XG4gICAgY29uc3QgY3VycmVudFVybCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgY29uc3QgcXVlcnlQYXJhbXNDb2RlID0gY3VycmVudFVybC5nZXQoXCJjb2RlXCIpO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zRXJyb3IgPSBjdXJyZW50VXJsLmdldChcImVycm9yXCIpO1xuICAgIGxldCBfaW5uZXIgPVxuICAgICAgICA8SW5uZXJCdXR0b25cbiAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgIGVycm9yPXsob2F1dGhDb250ZXh0IGFzIGFueSkucmVzcG9uc2VTdGF0ZT8uZXJyb3J9XG4gICAgICAgICAgICBvcHRpb25zPXtwcm9wcy5vcHRpb25zfVxuICAgICAgICAvPjtcbiAgICBpZiAoKG9hdXRoQ29udGV4dCBhcyBhbnkpLnJlc3BvbnNlU3RhdGU/LmFjY2Vzc1Rva2VuICYmICFpc0xvZ2dlZEluKCkpIHtcbiAgICAgICAgc3RvcmVBY2Nlc3NUb2tlbigob2F1dGhDb250ZXh0IGFzIGFueSkucmVzcG9uc2VTdGF0ZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJgYWNjZXNzVG9rZW5gIHNldCBpbiBsb2NhbCBzdG9yYWdlLlwiKTtcbiAgICAgICAgaWYodHlwZW9mIChvYXV0aENvbnRleHQgYXMgYW55KS5zZXRPQXV0aFN0YXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgKG9hdXRoQ29udGV4dCBhcyBhbnkpLnNldE9BdXRoU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKChvYXV0aENvbnRleHQgYXMgYW55KS5yZXNwb25zZVN0YXRlPy5lcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbUmVhY3QtR29vZ2xlLU9BdXRoMl0gRXJyb3I6IEFwaSBjYWxsIGZhaWxlZCB3aXRoICR7KG9hdXRoQ29udGV4dCBhcyBhbnkpLnJlc3BvbnNlU3RhdGU/LmVycm9yfSBlcnJvci5gKTtcbiAgICAgICAgcmV0dXJuIF9pbm5lcjtcbiAgICB9IGVsc2UgaWYgKHF1ZXJ5UGFyYW1zQ29kZSAmJiAhaXNMb2dnZWRJbigpKSB7XG4gICAgICAgIC8vIEdldCByZXN0IG9mIHBhcmFtc1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtc0VtYWlsID0gY3VycmVudFVybC5nZXQoXCJlbWFpbFwiKSB8fCBcIlwiO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtc1Njb3BlID0gY3VycmVudFVybC5nZXQoXCJzY29wZVwiKSB8fCBcIlwiO1xuICAgICAgICBjb25zdCBzZXJ2ZXJSZXNwb25zZVByb3BzOiBJU2VydmVyUmVzcG9uc2UgPSB7XG4gICAgICAgICAgICBlbWFpbDogcXVlcnlQYXJhbXNFbWFpbCxcbiAgICAgICAgICAgIHNjb3BlOiBxdWVyeVBhcmFtc1Njb3BlLFxuICAgICAgICAgICAgY29kZTogcXVlcnlQYXJhbXNDb2RlLFxuICAgICAgICAgICAgY2xpZW50X2lkOiBwcm9wcy5vcHRpb25zLmNsaWVudElkLFxuICAgICAgICAgICAgYXBpVXJsOiBwcm9wcy5hcGlVcmwsXG4gICAgICAgICAgICByZXNwb25zZVN0YXRlOiAob2F1dGhDb250ZXh0IGFzIGFueSkucmVzcG9uc2VTdGF0ZSxcbiAgICAgICAgICAgIHNldFJlc3BvbnNlU3RhdGU6IChvYXV0aENvbnRleHQgYXMgYW55KS5zZXRSZXNwb25zZVN0YXRlLFxuICAgICAgICB9O1xuICAgICAgICByZW1vdmVPQXV0aFF1ZXJ5UGFyYW1zKCk7XG4gICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZShzZXJ2ZXJSZXNwb25zZVByb3BzKTtcbiAgICAgICAgfSwgW10pO1xuICAgICAgICBjb25zb2xlLmRlYnVnKFwiV2FpdGluZyBmb3IgcmVtb3RlIGFwaSByZXNwb25zZVwiKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gY2FsbGJhY2soKSA6IDw+TG9hZGluZy4uLjwvPjtcbiAgICB9IGVsc2UgaWYgKHF1ZXJ5UGFyYW1zRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3I6IEdvb2dsZSBsb2dpbiBhdHRlbXB0IGZhaWxlZCB3aXRoICR7cXVlcnlQYXJhbXNFcnJvcn0gZXJyb3IuYClcbiAgICAgICAgcmV0dXJuIF9pbm5lcjtcbiAgICB9XG4gICAgLy8gRGlzcGxheSBidXR0b24gd2l0aCBubyBlcnJvcnNcbiAgICByZXR1cm4gX2lubmVyO1xufVxuXG5leHBvcnQgY29uc3QgR29vZ2xlQXV0aCA9IChwcm9wczogYW55KSA9PiB7XG4gICAgY29uc3QgW3Jlc3BvbnNlU3RhdGUsIHNldFJlc3BvbnNlU3RhdGVdID0gdXNlU3RhdGU8SVNlcnZlclJlc3BvbnNlU3RhdGU+KFNFUlZFUl9SRVNQT05TRV9TVEFURSk7XG4gICAgY29uc3QgW2lzQXV0aGVudGljYXRlZCwgc2V0T0F1dGhTdGF0ZV0gPSB1c2VTdGF0ZTxib29sZWFuPihpc0xvZ2dlZEluKCkpO1xuICAgIGNvbnN0IF9wcm92aWRlclByb3BzOiBJT0F1dGhTdGF0ZSA9IHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkLFxuICAgICAgICBzZXRPQXV0aFN0YXRlLFxuICAgICAgICByZXNwb25zZVN0YXRlLFxuICAgICAgICBzZXRSZXNwb25zZVN0YXRlLFxuICAgIH07XG4gICAgcmV0dXJuICAoXG4gICAgICAgIDxHb29nbGVBdXRoUHJvdmlkZXIgdmFsdWU9e19wcm92aWRlclByb3BzfT5cbiAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9Hb29nbGVBdXRoUHJvdmlkZXI+XG4gICAgKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9
{
"name": "react-google-oauth2",
"version": "0.0.25",
"version": "0.0.26",
"main": "lib/index.js",

@@ -5,0 +5,0 @@ "types": "lib/index.d.ts",

@@ -8,3 +8,3 @@ [![GitHub license](https://img.shields.io/github/license/joegasewicz/react-google-oauth2.0)](https://github.com/joegasewicz/react-google-oauth2.0/blob/main/LICENSE)

This library will work directly with [Flask JWT Router](https://github.com/joegasewicz/flask-jwt-router) & provide
Google OAuth 2.0 integration out of the box with minimal setup.
Google OAuth 2.0 integration out of the box with minimal setup.

@@ -61,3 +61,3 @@ Docs: https://joegasewicz.github.io/react-google-oauth2.0/

### GoogleAuth Provider & GoogleAuthConsumer
Get notified when a user has logged in successfully by wrapping the
Get notified when a user has logged in successfully by wrapping the
`GoogleButton` component within the `GoogleAuth` provider.

@@ -72,7 +72,8 @@ You can then use the `GoogleAuthConsumer` to redirect to your authorized routes

GoogleAuthConsumer,
} from "react-google-oauth2";
IOAuthState,
} from "react-google-oauth2";
<GoogleAuth>
<GoogleAuthConsumer>
{({isAuthenticated}: any) => {
{({responseState, isAuthenticated}: IOAuthState) => {
if (!isAuthenticated) {

@@ -86,3 +87,10 @@ return <GoogleButton

} else {
return <Redirect to="/home" />;
if (responseState.accessToken) { // You can also use isOAuthLoggedIn()
// Now send a request to your server using createOAuthHeaders() function
fetch(url, {
headers: createOAuthHeaders(),
})
.then(data => console.log("Horay We're logged in!"))
.catch(err => console.error("Just because you have a gmail account doesn't mean you have access!"))
}
}

@@ -116,3 +124,3 @@ }}

```
POST options = {body: { code: <code>, email: <email>, scope: <scope> }} URL = `apiUrl`
POST options = {body: { code: <code>, scope: <scope> }} URL = `apiUrl`
```

@@ -134,2 +142,2 @@

```
(you can also pass your css selectors directly with Reacts' `className` prop)
(you can also pass your css selectors directly with Reacts' `className` prop)
SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc