mailgun.js 6.0.1 → 7.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/README.md +3 -2
- package/interfaces/RequestOptions.d.ts +4 -2
- package/mailgun.node.js +2 -2
- package/mailgun.node.js.LICENSE.txt +14 -2
- package/mailgun.web.js +2 -2
- package/mailgun.web.js.LICENSE.txt +1 -3
- package/messages.d.ts +1 -0
- package/package.json +2 -5
- package/request.d.ts +2 -1
- package/version.md +1 -1
package/mailgun.node.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see mailgun.node.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.mailgun=t():e.mailgun=t()}(this,(function(){return(()=>{var e={271:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(185);class AbortSignal extends n.EventTarget{constructor(){throw super(),new TypeError("AbortSignal cannot be constructed directly")}get aborted(){const e=o.get(this);if("boolean"!=typeof e)throw new TypeError("Expected 'this' to be an 'AbortSignal' object, but got "+(null===this?"null":typeof this));return e}}n.defineEventAttribute(AbortSignal.prototype,"abort");const o=new WeakMap;Object.defineProperties(AbortSignal.prototype,{aborted:{enumerable:!0}}),"function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag&&Object.defineProperty(AbortSignal.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortSignal"});class AbortController{constructor(){s.set(this,function(){const e=Object.create(AbortSignal.prototype);return n.EventTarget.call(e),o.set(e,!1),e}())}get signal(){return i(this)}abort(){var e;e=i(this),!1===o.get(e)&&(o.set(e,!0),e.dispatchEvent({type:"abort"}))}}const s=new WeakMap;function i(e){const t=s.get(e);if(null==t)throw new TypeError("Expected 'this' to be an 'AbortController' object, but got "+(null===e?"null":typeof e));return t}Object.defineProperties(AbortController.prototype,{signal:{enumerable:!0},abort:{enumerable:!0}}),"function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag&&Object.defineProperty(AbortController.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortController"}),t.AbortController=AbortController,t.AbortSignal=AbortSignal,t.default=AbortController,e.exports=AbortController,e.exports.AbortController=e.exports.default=AbortController,e.exports.AbortSignal=AbortSignal},475:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=o(r(438)),i=o(r(373)),a=o(r(22)),u=o(r(747)),l=o(r(778)),c=o(r(750)),d=o(r(197)),f=o(r(277)),p=o(r(839)),h=o(r(345)),b=o(r(602)),y=o(r(126)),m=o(r(135)),g=o(r(60)),_=o(r(587)),v=o(r(955)),w=o(r(75)),S=function(e,t){var r=n({},e);if(r.url||(r.url="https://api.mailgun.net"),!r.username)throw new Error('Parameter "username" is required');if(!r.key)throw new Error('Parameter "key" is required');this.request=new s.default(r,t);var o=new m.default(this.request),S=new g.default(this.request),R=new v.default(this.request),T=new w.default(this.request),q=new _.default(this.request);this.domains=new i.default(this.request,S,R,T),this.webhooks=new c.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.suppressions=new l.default(this.request),this.messages=new d.default(this.request),this.routes=new f.default(this.request),this.ips=new h.default(this.request),this.ip_pools=new b.default(this.request),this.lists=new y.default(this.request,o),this.validate=new p.default(this.request,q)};t.default=S},373:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Domain=void 0;var s=o(r(78)),i=o(r(142)),a=function(e,t,r){this.name=e.name,this.require_tls=e.require_tls,this.skip_verification=e.skip_verification,this.state=e.state,this.wildcard=e.wildcard,this.spam_action=e.spam_action,this.created_at=e.created_at,this.smtp_password=e.smtp_password,this.smtp_login=e.smtp_login,this.type=e.type,this.receiving_dns_records=t||null,this.sending_dns_records=r||null};t.Domain=a;var u=function(){function e(e,t,r,n){this.request=e,this.domainCredentials=t,this.domainTemplates=r,this.domainTags=n}return e.prototype._parseMessage=function(e){return e.body},e.prototype._parseDomainList=function(e){return e.body.items.map((function(e){return new a(e)}))},e.prototype._parseDomain=function(e){return new a(e.body.domain,e.body.receiving_dns_records,e.body.sending_dns_records)},e.prototype._parseTrackingSettings=function(e){return e.body.tracking},e.prototype._parseTrackingUpdate=function(e){return e.body},e.prototype.list=function(e){var t=this;return this.request.get("/v3/domains",e).then((function(e){return t._parseDomainList(e)}))},e.prototype.get=function(e){var t=this;return this.request.get("/v3/domains/".concat(e)).then((function(e){return t._parseDomain(e)}))},e.prototype.create=function(e){var t=this,r=n({},e);return"force_dkim_authority"in r&&"boolean"==typeof r.force_dkim_authority&&(r.force_dkim_authority="true"===r.toString()?"true":"false"),this.request.postWithFD("/v3/domains",r).then((function(e){return t._parseDomain(e)}))},e.prototype.verify=function(e){var t=this;return this.request.put("/v3/domains/".concat(e,"/verify")).then((function(e){return t._parseDomain(e)}))},e.prototype.destroy=function(e){var t=this;return this.request.delete("/v3/domains/".concat(e)).then((function(e){return t._parseMessage(e)}))},e.prototype.getConnection=function(e){return this.request.get("/v3/domains/".concat(e,"/connection")).then((function(e){return e})).then((function(e){return e.body.connection}))},e.prototype.updateConnection=function(e,t){return this.request.put("/v3/domains/".concat(e,"/connection"),t).then((function(e){return e})).then((function(e){return e.body}))},e.prototype.getTracking=function(e){return this.request.get((0,s.default)("/v3/domains",e,"tracking")).then(this._parseTrackingSettings)},e.prototype.updateTracking=function(e,t,r){var n=this;if("boolean"==typeof(null==r?void 0:r.active))throw new i.default({status:400,statusText:"Received boolean value for active property",body:{message:'Property "active" must contain string value.'}});return this.request.putWithFD((0,s.default)("/v3/domains",e,"tracking",t),r).then((function(e){return n._parseTrackingUpdate(e)}))},e.prototype.getIps=function(e){return this.request.get((0,s.default)("/v3/domains",e,"ips")).then((function(e){var t;return null===(t=null==e?void 0:e.body)||void 0===t?void 0:t.items}))},e.prototype.assignIp=function(e,t){return this.request.postWithFD((0,s.default)("/v3/domains",e,"ips"),{ip:t})},e.prototype.deleteIp=function(e,t){return this.request.delete((0,s.default)("/v3/domains",e,"ips",t))},e.prototype.linkIpPool=function(e,t){return this.request.postWithFD((0,s.default)("/v3/domains",e,"ips"),{pool_id:t})},e.prototype.unlinkIpPoll=function(e,t){var r="";if(t.pool_id&&t.ip)throw new i.default({status:400,statusText:"Too much data for replacement",body:{message:"Please specify either pool_id or ip (not both)"}});return t.pool_id?r="?pool_id=".concat(t.pool_id):t.ip&&(r="?ip=".concat(t.ip)),this.request.delete((0,s.default)("/v3/domains",e,"ips","ip_pool",r))},e.prototype.updateDKIMAuthority=function(e,t){return this.request.put("/v3/domains/".concat(e,"/dkim_authority"),{},{query:"self=".concat(t.self)}).then((function(e){return e})).then((function(e){return e.body}))},e.prototype.updateDKIMSelector=function(e,t){return this.request.put("/v3/domains/".concat(e,"/dkim_selector"),{},{query:"dkim_selector=".concat(t.dkimSelector)}).then((function(e){return e}))},e.prototype.updateWebPrefix=function(e,t){return this.request.put("/v3/domains/".concat(e,"/web_prefix"),{},{query:"web_prefix=".concat(t.webPrefix)}).then((function(e){return e}))},e}();t.default=u},60:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(78)),s=function(){function e(e){this.request=e,this.baseRoute="/v3/domains/"}return e.prototype._parseDomainCredentialsList=function(e){return{items:e.body.items,totalCount:e.body.total_count}},e.prototype._parseMessageResponse=function(e){return{status:e.status,message:e.body.message}},e.prototype._parseDeletedResponse=function(e){return{status:e.status,message:e.body.message,spec:e.body.spec}},e.prototype.list=function(e,t){var r=this;return this.request.get((0,o.default)(this.baseRoute,e,"/credentials"),t).then((function(e){return r._parseDomainCredentialsList(e)}))},e.prototype.create=function(e,t){var r=this;return this.request.postWithFD("".concat(this.baseRoute).concat(e,"/credentials"),t).then((function(e){return r._parseMessageResponse(e)}))},e.prototype.update=function(e,t,r){var n=this;return this.request.putWithFD("".concat(this.baseRoute).concat(e,"/credentials/").concat(t),r).then((function(e){return n._parseMessageResponse(e)}))},e.prototype.destroy=function(e,t){var r=this;return this.request.delete("".concat(this.baseRoute).concat(e,"/credentials/").concat(t)).then((function(e){return r._parseDeletedResponse(e)}))},e}();t.default=s},75:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomainTagStatistic=t.DomainTag=void 0;var s=o(r(78)),i=function(e){this.tag=e.tag,this.description=e.description,this["first-seen"]=new Date(e["first-seen"]),this["last-seen"]=new Date(e["last-seen"])};t.DomainTag=i;var a=function(e){this.tag=e.body.tag,this.description=e.body.description,this.start=new Date(e.body.start),this.end=new Date(e.body.end),this.resolution=e.body.resolution,this.stats=e.body.stats.map((function(e){return n(n({},e),{time:new Date(e.time)})}))};t.DomainTagStatistic=a;var u=function(){function e(e){this.request=e,this.baseRoute="/v3/"}return e.prototype._parsePageLinks=function(e){return Object.entries(e.body.paging).reduce((function(e,t){var r=t[0],n=t[1];return e[r]={id:r,url:n},e}),{})},e.prototype._parseDomainTagsList=function(e){return{items:e.body.items.map((function(e){return new i(e)})),pages:this._parsePageLinks(e)}},e.prototype._parseTagStatistic=function(e){return new a(e)},e.prototype.list=function(e,t){var r=this;return this.request.get((0,s.default)(this.baseRoute,e,"/tags"),t).then((function(e){return r._parseDomainTagsList(e)}))},e.prototype.get=function(e,t){return this.request.get((0,s.default)(this.baseRoute,e,"/tags",t)).then((function(e){return new i(e.body)}))},e.prototype.update=function(e,t,r){return this.request.put((0,s.default)(this.baseRoute,e,"/tags",t),r).then((function(e){return e.body}))},e.prototype.destroy=function(e,t){return this.request.delete("".concat(this.baseRoute).concat(e,"/tags/").concat(t)).then((function(e){return{message:e.body.message,status:e.status}}))},e.prototype.statistic=function(e,t,r){var n=this;return this.request.get((0,s.default)(this.baseRoute,e,"/tags",t,"stats"),r).then((function(e){return n._parseTagStatistic(e)}))},e.prototype.countries=function(e,t){return this.request.get((0,s.default)(this.baseRoute,e,"/tags",t,"stats/aggregates/countries")).then((function(e){return e.body}))},e.prototype.providers=function(e,t){return this.request.get((0,s.default)(this.baseRoute,e,"/tags",t,"stats/aggregates/providers")).then((function(e){return e.body}))},e.prototype.devices=function(e,t){return this.request.get((0,s.default)(this.baseRoute,e,"/tags",t,"stats/aggregates/devices")).then((function(e){return e.body}))},e}();t.default=u},955:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomainTemplateItem=void 0;var s=o(r(78)),i=function(e){this.name=e.name,this.description=e.description,this.createdAt=e.createdAt?new Date(e.createdAt):"",this.createdBy=e.createdBy,this.id=e.id,e.version&&(this.version=e.version,e.version.createdAt&&(this.version.createdAt=new Date(e.version.createdAt))),e.versions&&e.versions.length&&(this.versions=e.versions.map((function(e){var t=n({},e);return t.createdAt=new Date(e.createdAt),t})))};t.DomainTemplateItem=i;var a=function(){function e(e){this.request=e,this.baseRoute="/v3/"}return e.prototype.parseCreationResponse=function(e){return new i(e.body.template)},e.prototype.parseCreationVersionResponse=function(e){var t={};return t.status=e.status,t.message=e.body.message,e.body&&e.body.template&&(t.template=new i(e.body.template)),t},e.prototype.parseMutationResponse=function(e){var t={};return t.status=e.status,t.message=e.body.message,e.body&&e.body.template&&(t.templateName=e.body.template.name),t},e.prototype.parseNotificationResponse=function(e){var t={};return t.status=e.status,t.message=e.body.message,t},e.prototype.parseMutateTemplateVersionResponse=function(e){var t={};return t.status=e.status,t.message=e.body.message,e.body.template&&(t.templateName=e.body.template.name,t.templateVersion={tag:e.body.template.version.tag}),t},e.prototype.parseList=function(e){var t={};return t.items=e.body.items.map((function(e){return new i(e)})),t.pages=e.body.paging,t},e.prototype.parseListTemplateVersions=function(e){var t={};return t.template=new i(e.body.template),t.pages=e.body.paging,t},e.prototype.list=function(e,t){var r=this;return this.request.get((0,s.default)(this.baseRoute,e,"/templates"),t).then((function(e){return r.parseList(e)}))},e.prototype.get=function(e,t,r){return this.request.get((0,s.default)(this.baseRoute,e,"/templates/",t),r).then((function(e){return new i(e.body.template)}))},e.prototype.create=function(e,t){var r=this;return this.request.postWithFD((0,s.default)(this.baseRoute,e,"/templates"),t).then((function(e){return r.parseCreationResponse(e)}))},e.prototype.update=function(e,t,r){var n=this;return this.request.putWithFD((0,s.default)(this.baseRoute,e,"/templates/",t),r).then((function(e){return n.parseMutationResponse(e)}))},e.prototype.destroy=function(e,t){var r=this;return this.request.delete((0,s.default)(this.baseRoute,e,"/templates/",t)).then((function(e){return r.parseMutationResponse(e)}))},e.prototype.destroyAll=function(e){var t=this;return this.request.delete((0,s.default)(this.baseRoute,e,"/templates")).then((function(e){return t.parseNotificationResponse(e)}))},e.prototype.createVersion=function(e,t,r){var n=this;return this.request.postWithFD((0,s.default)(this.baseRoute,e,"/templates/",t,"/versions"),r).then((function(e){return n.parseCreationVersionResponse(e)}))},e.prototype.getVersion=function(e,t,r){return this.request.get((0,s.default)(this.baseRoute,e,"/templates/",t,"/versions/",r)).then((function(e){return new i(e.body.template)}))},e.prototype.updateVersion=function(e,t,r,n){var o=this;return this.request.putWithFD((0,s.default)(this.baseRoute,e,"/templates/",t,"/versions/",r),n).then((function(e){return o.parseMutateTemplateVersionResponse(e)}))},e.prototype.destroyVersion=function(e,t,r){var n=this;return this.request.delete((0,s.default)(this.baseRoute,e,"/templates/",t,"/versions/",r)).then((function(e){return n.parseMutateTemplateVersionResponse(e)}))},e.prototype.listVersions=function(e,t,r){var n=this;return this.request.get((0,s.default)(this.baseRoute,e,"/templates",t,"/versions"),r).then((function(e){return n.parseListTemplateVersions(e)}))},e}();t.default=a},142:function(e,t){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},r(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var r=t.status,n=t.statusText,o=t.message,s=t.body,i=void 0===s?{}:s,a=this,u=i.message,l=i.error;return(a=e.call(this)||this).stack="",a.status=r,a.message=o||l||n,a.details=u,a}return n(t,e),t}(Error);t.default=o},22:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=o(r(78)),i=function(){function e(e){this.request=e}return e.prototype._parsePageNumber=function(e){return e.split("/").pop()||""},e.prototype._parsePage=function(e,t){return{id:e,number:this._parsePageNumber(t),url:t}},e.prototype._parsePageLinks=function(e){var t=this;return Object.entries(e.body.paging).reduce((function(e,r){var n=r[0],o=r[1];return e[n]=t._parsePage(n,o),e}),{})},e.prototype._parseEventList=function(e){return{items:e.body.items,pages:this._parsePageLinks(e)}},e.prototype.get=function(e,t){var r,o=this,i=n({},t);return i&&i.page?(r=(0,s.default)("/v3",e,"events",i.page),delete i.page):r=(0,s.default)("/v3",e,"events"),this.request.get(r,i).then((function(e){return o._parseEventList(e)}))},e}();t.default=i},150:function(e,t){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e){this.FormDataConstructor=e}return e.prototype.createFormData=function(e){var t=this;if(!e)throw new Error("Please provide data object");return Object.keys(e).filter((function(t){return e[t]})).reduce((function(r,n){return["attachment","inline","multipleValidationFile"].includes(n)?(t.addFilesToFD(n,e[n],r),r):"message"===n?(t.addMimeDataToFD(n,e[n],r),r):(t.addCommonPropertyToFD(n,e[n],r),r)}),new this.FormDataConstructor)},e.prototype.isNodeFormData=function(e){return void 0!==e.getHeaders},e.prototype.getAttachmentOptions=function(e){if("object"!=typeof e||this.isStream(e))return{};var t=e.filename,n=e.contentType,o=e.knownLength;return r(r(r({},t?{filename:t}:{filename:"file"}),n&&{contentType:n}),o&&{knownLength:o})},e.prototype.addMimeDataToFD=function(e,t,r){this.isNodeFormData(r)?Buffer.isBuffer(t)&&r.append(e,t,{filename:"MimeMessage"}):r.append(e,t,"MimeMessage")},e.prototype.addFilesToFD=function(e,t,r){var n=this,o=function(e,t,r){var o="multipleValidationFile"===e?"file":e,s=n.isStream(t)?t:t.data,i=n.getAttachmentOptions(t);n.isNodeFormData(r)?r.append(o,s,i):r.append(o,s,i.filename)};Array.isArray(t)?t.forEach((function(t){o(e,t,r)})):o(e,t,r)},e.prototype.isStream=function(e){return"object"==typeof e&&"function"==typeof e.pipe},e.prototype.addCommonPropertyToFD=function(e,t,r){Array.isArray(t)?t.forEach((function(t){r.append(e,t)})):null!=t&&r.append(e,t)},e}();t.default=n},175:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(475)),s=function(){function e(e){this.formData=e}return Object.defineProperty(e,"default",{get:function(){return this},enumerable:!1,configurable:!0}),e.prototype.client=function(e){return new o.default(e,this.formData)},e}();t.default=s},990:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SuppressionModels=void 0,function(e){e.BOUNCES="bounces",e.COMPLAINTS="complaints",e.UNSUBSCRIBES="unsubscribes",e.WHITELISTS="whitelists"}(t.SuppressionModels||(t.SuppressionModels={}))},602:function(e,t){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{u(n.next(e))}catch(e){s(e)}}function a(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e){this.request=e}return e.prototype.list=function(){var e=this;return this.request.get("/v1/ip_pools").then((function(t){return e.parseIpPoolsResponse(t)}))},e.prototype.create=function(e){return n(this,void 0,void 0,(function(){var t;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",e)];case 1:return t=n.sent(),[2,r({status:t.status},t.body)]}}))}))},e.prototype.update=function(e,t){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(e),t)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},e.prototype.delete=function(e,t){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(e),t)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},e.prototype.parseIpPoolsResponse=function(e){return r({status:e.status},e.body)},e}();t.default=s},345:function(e,t){"use strict";var r=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{u(n.next(e))}catch(e){s(e)}}function a(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))},n=this&&this.__generator||function(e,t){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e){this.request=e}return e.prototype.list=function(e){return r(this,void 0,void 0,(function(){var t;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips",e)];case 1:return t=r.sent(),[2,this.parseIpsResponse(t)]}}))}))},e.prototype.get=function(e){return r(this,void 0,void 0,(function(){var t;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips/".concat(e))];case 1:return t=r.sent(),[2,this.parseIpsResponse(t)]}}))}))},e.prototype.parseIpsResponse=function(e){return e.body},e}();t.default=o},126:function(e,t){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){this.request=e,this.baseRoute="/v3/lists",this.members=t}return e.prototype.parseValidationResult=function(e,t){return{status:e,validationResult:r(r({},t),{created_at:new Date(1e3*t.created_at)})}},e.prototype.list=function(e){return this.request.get("".concat(this.baseRoute,"/pages"),e).then((function(e){return e.body.items}))},e.prototype.get=function(e){return this.request.get("".concat(this.baseRoute,"/").concat(e)).then((function(e){return e.body.list}))},e.prototype.create=function(e){return this.request.postWithFD(this.baseRoute,e).then((function(e){return e.body.list}))},e.prototype.update=function(e,t){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(e),t).then((function(e){return e.body.list}))},e.prototype.destroy=function(e){return this.request.delete("".concat(this.baseRoute,"/").concat(e)).then((function(e){return e.body}))},e.prototype.validate=function(e){return this.request.post("".concat(this.baseRoute,"/").concat(e,"/validate"),{}).then((function(e){return r({status:e.status},e.body)}))},e.prototype.validationResult=function(e){var t=this;return this.request.get("".concat(this.baseRoute,"/").concat(e,"/validate")).then((function(e){return t.parseValidationResult(e.status,e.body)}))},e.prototype.cancelValidation=function(e){return this.request.delete("".concat(this.baseRoute,"/").concat(e,"/validate")).then((function(e){return{status:e.status,message:e.body.message}}))},e}();t.default=n},135:function(e,t){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e){this.request=e,this.baseRoute="/v3/lists"}return e.prototype.checkAndUpdateData=function(e){var t=r({},e);return"object"==typeof e.vars&&(t.vars=JSON.stringify(t.vars)),"boolean"==typeof e.subscribed&&(t.subscribed=e.subscribed?"yes":"no"),t},e.prototype.listMembers=function(e,t){return this.request.get("".concat(this.baseRoute,"/").concat(e,"/members/pages"),t).then((function(e){return e.body.items}))},e.prototype.getMember=function(e,t){return this.request.get("".concat(this.baseRoute,"/").concat(e,"/members/").concat(t)).then((function(e){return e.body.member}))},e.prototype.createMember=function(e,t){var r=this.checkAndUpdateData(t);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(e,"/members"),r).then((function(e){return e.body.member}))},e.prototype.createMembers=function(e,t){var r={members:Array.isArray(t.members)?JSON.stringify(t.members):t.members,upsert:t.upsert};return this.request.postWithFD("".concat(this.baseRoute,"/").concat(e,"/members.json"),r).then((function(e){return e.body}))},e.prototype.updateMember=function(e,t,r){var n=this.checkAndUpdateData(r);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(e,"/members/").concat(t),n).then((function(e){return e.body.member}))},e.prototype.destroyMember=function(e,t){return this.request.delete("".concat(this.baseRoute,"/").concat(e,"/members/").concat(t)).then((function(e){return e.body}))},e}();t.default=n},197:function(e,t){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e){this.request=e}return e.prototype._parseResponse=function(e){return r({status:e.status},e.body)},e.prototype.create=function(e,t){return t.message?this.request.postWithFD("/v3/".concat(e,"/messages.mime"),t).then(this._parseResponse):this.request.postWithFD("/v3/".concat(e,"/messages"),t).then(this._parseResponse)},e}();t.default=n},587:function(e,t){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{u(n.next(e))}catch(e){s(e)}}function a(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e){this.request=e}return e.prototype.handleResponse=function(e){return r({status:e.status},null==e?void 0:e.body)},e.prototype.list=function(){return n(this,void 0,void 0,(function(){var e;return o(this,(function(t){switch(t.label){case 0:return[4,this.request.get("/v4/address/validate/bulk")];case 1:return e=t.sent(),[2,this.handleResponse(e)]}}))}))},e.prototype.get=function(e){return n(this,void 0,void 0,(function(){var t;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(e))];case 1:return t=n.sent(),[2,r({responseStatusCode:t.status},null==t?void 0:t.body)]}}))}))},e.prototype.create=function(e,t){return n(this,void 0,void 0,(function(){var n,s;return o(this,(function(o){switch(o.label){case 0:return delete(n=r({multipleValidationFile:r({},null==t?void 0:t.file)},t)).file,[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(e),n)];case 1:return s=o.sent(),[2,this.handleResponse(s)]}}))}))},e.prototype.destroy=function(e){return n(this,void 0,void 0,(function(){var t;return o(this,(function(r){switch(r.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(e))];case 1:return t=r.sent(),[2,this.handleResponse(t)]}}))}))},e}();t.default=s},438:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&o(t,e,r);return s(t,e),t},a=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{u(n.next(e))}catch(e){s(e)}}function a(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))},u=this&&this.__generator||function(e,t){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var c=i(r(501)),d=l(r(78)),f=l(r(556)),p=l(r(142)),h=l(r(150)),b=function(){function e(e,t){this.username=e.username,this.key=e.key,this.url=e.url,this.timeout=e.timeout,this.headers=e.headers||{},this.formDataBuilder=new h.default(t)}return e.prototype.request=function(e,t,r){return a(this,void 0,void 0,(function(){var o,s,i,a,l,h,b;return u(this,(function(u){switch(u.label){case 0:return o=n({},r),s=c.encode("".concat(this.username,":").concat(this.key)),i=o.headers?o.headers:{},a=n(n({Authorization:"Basic ".concat(s)},this.headers),i),null==o||delete o.headers,l=n({},o),(null==o?void 0:o.query)&&Object.getOwnPropertyNames(null==o?void 0:o.query).length>0&&(l.searchParams=o.query,delete l.query),[4,(0,f.default)((0,d.default)(this.url,t),n({method:e.toLocaleUpperCase(),headers:a,throwHttpErrors:!1,timeout:this.timeout},l))];case 1:return(null==(h=u.sent())?void 0:h.ok)?[3,3]:[4,this.getResponseBody(h)];case 2:throw b=u.sent(),new p.default({status:null==h?void 0:h.status,statusText:null==h?void 0:h.statusText,body:b.body});case 3:return[4,this.getResponseBody(h)];case 4:return[2,u.sent()]}}))}))},e.prototype.getResponseBody=function(e){return a(this,void 0,void 0,(function(){var t,r,n;return u(this,(function(o){switch(o.label){case 0:t={body:{},status:null==e?void 0:e.status},r="",o.label=1;case 1:return o.trys.push([1,3,,4]),[4,e.text()];case 2:return r=o.sent(),n=JSON.parse(r),t.body=n,[2,t];case 3:return o.sent(),t.status=400,t.body={message:r},[2,t];case 4:return[2]}}))}))},e.prototype.query=function(e,t,r,o){return this.request(e,t,n({query:r},o))},e.prototype.command=function(e,t,r,o,s){void 0===s&&(s=!0);var i={};s&&(i={"Content-Type":"application/x-www-form-urlencoded"});var a=n(n(n({},i),{body:r}),o);return this.request(e,t,a)},e.prototype.get=function(e,t,r){return this.query("get",e,t,r)},e.prototype.post=function(e,t,r){return this.command("post",e,t,r)},e.prototype.postWithFD=function(e,t){var r=this.formDataBuilder.createFormData(t);return this.command("post",e,r,{},!1)},e.prototype.putWithFD=function(e,t){var r=this.formDataBuilder.createFormData(t);return this.command("put",e,r,{},!1)},e.prototype.patchWithFD=function(e,t){var r=this.formDataBuilder.createFormData(t);return this.command("patch",e,r,{},!1)},e.prototype.put=function(e,t,r){return this.command("put",e,t,r)},e.prototype.delete=function(e,t){return this.command("delete",e,t)},e}();t.default=b},277:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.request=e}return e.prototype.list=function(e){return this.request.get("/v3/routes",e).then((function(e){return e.body.items}))},e.prototype.get=function(e){return this.request.get("/v3/routes/".concat(e)).then((function(e){return e.body.route}))},e.prototype.create=function(e){return this.request.postWithFD("/v3/routes",e).then((function(e){return e.body.route}))},e.prototype.update=function(e,t){return this.request.putWithFD("/v3/routes/".concat(e),t).then((function(e){return e.body}))},e.prototype.destroy=function(e){return this.request.delete("/v3/routes/".concat(e)).then((function(e){return e.body}))},e}();t.default=r},747:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)},o=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var n,o=0,s=t.length;o<s;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=s(r(78)),a=function(e){this.start=new Date(e.start),this.end=new Date(e.end),this.resolution=e.resolution,this.stats=e.stats.map((function(e){var t=n({},e);return t.time=new Date(e.time),t}))},u=function(){function e(e){this.request=e}return e.prototype.prepareSearchParams=function(e){var t=[];return"object"==typeof e&&Object.keys(e).length&&(t=Object.entries(e).reduce((function(e,t){var r=t[0],n=t[1];if(Array.isArray(n)&&n.length){var s=n.map((function(e){return[r,e]}));return o(o([],e,!0),s,!0)}return e.push([r,n]),e}),[])),t},e.prototype._parseStats=function(e){return new a(e.body)},e.prototype.getDomain=function(e,t){var r=this.prepareSearchParams(t);return this.request.get((0,i.default)("/v3",e,"stats/total"),r).then(this._parseStats)},e.prototype.getAccount=function(e){var t=this.prepareSearchParams(e);return this.request.get("/v3/stats/total",t).then(this._parseStats)},e}();t.default=u},778:function(e,t,r){"use strict";var n,o=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},n(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),s=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var n,o=0,s=t.length;o<s;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WhiteList=t.Unsubscribe=t.Complaint=t.Bounce=t.Suppression=void 0;var a=i(r(78)),u=r(990),l=i(r(142)),c={headers:{"Content-Type":"application/json"}},d=function(e){this.type=e};t.Suppression=d;var f=function(e){function t(t){var r=e.call(this,u.SuppressionModels.BOUNCES)||this;return r.address=t.address,r.code=+t.code,r.error=t.error,r.created_at=new Date(t.created_at),r}return o(t,e),t}(d);t.Bounce=f;var p=function(e){function t(t){var r=e.call(this,u.SuppressionModels.COMPLAINTS)||this;return r.address=t.address,r.created_at=new Date(t.created_at),r}return o(t,e),t}(d);t.Complaint=p;var h=function(e){function t(t){var r=e.call(this,u.SuppressionModels.UNSUBSCRIBES)||this;return r.address=t.address,r.tags=t.tags,r.created_at=new Date(t.created_at),r}return o(t,e),t}(d);t.Unsubscribe=h;var b=function(e){function t(t){var r=e.call(this,u.SuppressionModels.WHITELISTS)||this;return r.value=t.value,r.reason=t.reason,r.createdAt=new Date(t.createdAt),r}return o(t,e),t}(d);t.WhiteList=b;var y=function(){function e(e){this.request=e,this.models=new Map,this.models.set("bounces",f),this.models.set("complaints",p),this.models.set("unsubscribes",h),this.models.set("whitelists",b)}return e.prototype._parsePage=function(e,t){var r=new URL(t).searchParams;return{id:e,page:r.has("page")?r.get("page"):void 0,address:r.has("address")?r.get("address"):void 0,url:t}},e.prototype._parsePageLinks=function(e){var t=this;return Object.entries(e.body.paging).reduce((function(e,r){var n=r[0],o=r[1];return e[n]=t._parsePage(n,o),e}),{})},e.prototype._parseList=function(e,t){var r={};return r.items=e.body.items.map((function(e){return new t(e)})),r.pages=this._parsePageLinks(e),r},e.prototype._parseItem=function(e,t){return new t(e)},e.prototype.createWhiteList=function(e,t){if(Array.isArray(t))throw new l.default({status:400,statusText:"Data property should be an object",body:{message:"Whitelist's creation process does not support multiple creations. Data property should be an object"}});return this.request.postWithFD((0,a.default)("v3",e,"whitelists"),t).then(this.prepareResponse)},e.prototype.checkType=function(e){if(!this.models.has(e))throw new l.default({status:400,statusText:"Unknown type value",body:{message:"Type may be only one of [bounces, complaints, unsubscribes, whitelists]"}})},e.prototype.prepareResponse=function(e){return{message:e.body.message,type:e.body.type||"",value:e.body.value||"",status:e.status}},e.prototype.list=function(e,t,r){var n=this;this.checkType(t);var o=this.models.get(t);return this.request.get((0,a.default)("v3",e,t),r).then((function(e){return n._parseList(e,o)}))},e.prototype.get=function(e,t,r){var n=this;this.checkType(t);var o=this.models.get(t);return this.request.get((0,a.default)("v3",e,t,encodeURIComponent(r))).then((function(e){return n._parseItem(e.body,o)}))},e.prototype.create=function(e,t,r){var n;return this.checkType(t),"whitelists"===t?this.createWhiteList(e,r):(n=Array.isArray(r)?s([],r,!0):[r],this.request.post((0,a.default)("v3",e,t),JSON.stringify(n),c).then(this.prepareResponse))},e.prototype.destroy=function(e,t,r){return this.checkType(t),this.request.delete((0,a.default)("v3",e,t,encodeURIComponent(r))).then((function(e){return{message:e.body.message,value:e.body.value||"",address:e.body.address||"",status:e.status}}))},e}();t.default=y,e.exports=y},839:function(e,t){"use strict";var r=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{u(n.next(e))}catch(e){s(e)}}function a(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))},n=this&&this.__generator||function(e,t){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){this.request=e,this.multipleValidation=t}return e.prototype.get=function(e){return r(this,void 0,void 0,(function(){var t;return n(this,(function(r){switch(r.label){case 0:return t={address:e},[4,this.request.get("/v4/address/validate",t)];case 1:return[2,r.sent().body]}}))}))},e}();t.default=o},750:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(78)),s=function(e,t){this.id=e,this.url=t},i=function(){function e(e){this.request=e}return e.prototype._parseWebhookList=function(e){return e.body.webhooks},e.prototype._parseWebhookWithID=function(e){return function(t){var r,n=null===(r=null==t?void 0:t.body)||void 0===r?void 0:r.webhook,o=null==n?void 0:n.url;return o||(o=(null==n?void 0:n.urls)&&n.urls.length?n.urls[0]:void 0),new s(e,o)}},e.prototype._parseWebhookTest=function(e){return{code:e.body.code,message:e.body.message}},e.prototype.list=function(e,t){return this.request.get((0,o.default)("/v3/domains",e,"webhooks"),t).then(this._parseWebhookList)},e.prototype.get=function(e,t){return this.request.get((0,o.default)("/v3/domains",e,"webhooks",t)).then(this._parseWebhookWithID(t))},e.prototype.create=function(e,t,r,n){return void 0===n&&(n=!1),n?this.request.putWithFD((0,o.default)("/v3/domains",e,"webhooks",t,"test"),{url:r}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",e,"webhooks"),{id:t,url:r}).then(this._parseWebhookWithID(t))},e.prototype.update=function(e,t,r){return this.request.putWithFD((0,o.default)("/v3/domains",e,"webhooks",t),{url:r}).then(this._parseWebhookWithID(t))},e.prototype.destroy=function(e,t){return this.request.delete((0,o.default)("/v3/domains",e,"webhooks",t)).then(this._parseWebhookWithID(t))},e}();t.default=i},501:function(e,t,r){var n;e=r.nmd(e),function(o){var s=t,i=(e&&e.exports,"object"==typeof global&&global);i.global!==i&&i.window;var a=function(e){this.message=e};(a.prototype=new Error).name="InvalidCharacterError";var u=function(e){throw new a(e)},l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=/[\t\n\f\r ]/g,d={encode:function(e){e=String(e),/[^\0-\xFF]/.test(e)&&u("The string to be encoded contains characters outside of the Latin1 range.");for(var t,r,n,o,s=e.length%3,i="",a=-1,c=e.length-s;++a<c;)t=e.charCodeAt(a)<<16,r=e.charCodeAt(++a)<<8,n=e.charCodeAt(++a),i+=l.charAt((o=t+r+n)>>18&63)+l.charAt(o>>12&63)+l.charAt(o>>6&63)+l.charAt(63&o);return 2==s?(t=e.charCodeAt(a)<<8,r=e.charCodeAt(++a),i+=l.charAt((o=t+r)>>10)+l.charAt(o>>4&63)+l.charAt(o<<2&63)+"="):1==s&&(o=e.charCodeAt(a),i+=l.charAt(o>>2)+l.charAt(o<<4&63)+"=="),i},decode:function(e){var t=(e=String(e).replace(c,"")).length;t%4==0&&(t=(e=e.replace(/==?$/,"")).length),(t%4==1||/[^+a-zA-Z0-9/]/.test(e))&&u("Invalid character: the string to be decoded is not correctly encoded.");for(var r,n,o=0,s="",i=-1;++i<t;)n=l.indexOf(e.charAt(i)),r=o%4?64*r+n:n,o++%4&&(s+=String.fromCharCode(255&r>>(-2*o&6)));return s},version:"1.0.0"};void 0===(n=function(){return d}.call(t,r,t,e))||(e.exports=n)}()},94:e=>{"use strict";e.exports=function(e){if(!/^data:/i.test(e))throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');const t=(e=e.replace(/\r?\n/g,"")).indexOf(",");if(-1===t||t<=4)throw new TypeError("malformed data: URI");const r=e.substring(5,t).split(";");let n="",o=!1;const s=r[0]||"text/plain";let i=s;for(let e=1;e<r.length;e++)"base64"===r[e]?o=!0:(i+=`;${r[e]}`,0===r[e].indexOf("charset=")&&(n=r[e].substring(8)));r[0]||n.length||(i+=";charset=US-ASCII",n="US-ASCII");const a=o?"base64":"ascii",u=unescape(e.substring(t+1)),l=Buffer.from(u,a);return l.type=s,l.typeFull=i,l.charset=n,l}},185:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=new WeakMap,n=new WeakMap;function o(e){const t=r.get(e);return console.assert(null!=t,"'this' is expected an Event object, but got",e),t}function s(e){null==e.passiveListener?e.event.cancelable&&(e.canceled=!0,"function"==typeof e.event.preventDefault&&e.event.preventDefault()):"undefined"!=typeof console&&"function"==typeof console.error&&console.error("Unable to preventDefault inside passive event listener invocation.",e.passiveListener)}function i(e,t){r.set(this,{eventTarget:e,event:t,eventPhase:2,currentTarget:e,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:t.timeStamp||Date.now()}),Object.defineProperty(this,"isTrusted",{value:!1,enumerable:!0});const n=Object.keys(t);for(let e=0;e<n.length;++e){const t=n[e];t in this||Object.defineProperty(this,t,a(t))}}function a(e){return{get(){return o(this).event[e]},set(t){o(this).event[e]=t},configurable:!0,enumerable:!0}}function u(e){return{value(){const t=o(this).event;return t[e].apply(t,arguments)},configurable:!0,enumerable:!0}}function l(e){if(null==e||e===Object.prototype)return i;let t=n.get(e);return null==t&&(t=function(e,t){const r=Object.keys(t);if(0===r.length)return e;function n(t,r){e.call(this,t,r)}n.prototype=Object.create(e.prototype,{constructor:{value:n,configurable:!0,writable:!0}});for(let o=0;o<r.length;++o){const s=r[o];if(!(s in e.prototype)){const e="function"==typeof Object.getOwnPropertyDescriptor(t,s).value;Object.defineProperty(n.prototype,s,e?u(s):a(s))}}return n}(l(Object.getPrototypeOf(e)),e),n.set(e,t)),t}function c(e){return o(e).immediateStopped}function d(e,t){o(e).passiveListener=t}i.prototype={get type(){return o(this).event.type},get target(){return o(this).eventTarget},get currentTarget(){return o(this).currentTarget},composedPath(){const e=o(this).currentTarget;return null==e?[]:[e]},get NONE(){return 0},get CAPTURING_PHASE(){return 1},get AT_TARGET(){return 2},get BUBBLING_PHASE(){return 3},get eventPhase(){return o(this).eventPhase},stopPropagation(){const e=o(this);e.stopped=!0,"function"==typeof e.event.stopPropagation&&e.event.stopPropagation()},stopImmediatePropagation(){const e=o(this);e.stopped=!0,e.immediateStopped=!0,"function"==typeof e.event.stopImmediatePropagation&&e.event.stopImmediatePropagation()},get bubbles(){return Boolean(o(this).event.bubbles)},get cancelable(){return Boolean(o(this).event.cancelable)},preventDefault(){s(o(this))},get defaultPrevented(){return o(this).canceled},get composed(){return Boolean(o(this).event.composed)},get timeStamp(){return o(this).timeStamp},get srcElement(){return o(this).eventTarget},get cancelBubble(){return o(this).stopped},set cancelBubble(e){if(!e)return;const t=o(this);t.stopped=!0,"boolean"==typeof t.event.cancelBubble&&(t.event.cancelBubble=!0)},get returnValue(){return!o(this).canceled},set returnValue(e){e||s(o(this))},initEvent(){}},Object.defineProperty(i.prototype,"constructor",{value:i,configurable:!0,writable:!0}),"undefined"!=typeof window&&void 0!==window.Event&&(Object.setPrototypeOf(i.prototype,window.Event.prototype),n.set(window.Event.prototype,i));const f=new WeakMap;function p(e){return null!==e&&"object"==typeof e}function h(e){const t=f.get(e);if(null==t)throw new TypeError("'this' is expected an EventTarget object, but got another value.");return t}function b(e,t){Object.defineProperty(e,`on${t}`,function(e){return{get(){let t=h(this).get(e);for(;null!=t;){if(3===t.listenerType)return t.listener;t=t.next}return null},set(t){"function"==typeof t||p(t)||(t=null);const r=h(this);let n=null,o=r.get(e);for(;null!=o;)3===o.listenerType?null!==n?n.next=o.next:null!==o.next?r.set(e,o.next):r.delete(e):n=o,o=o.next;if(null!==t){const o={listener:t,listenerType:3,passive:!1,once:!1,next:null};null===n?r.set(e,o):n.next=o}},configurable:!0,enumerable:!0}}(t))}function y(e){function t(){m.call(this)}t.prototype=Object.create(m.prototype,{constructor:{value:t,configurable:!0,writable:!0}});for(let r=0;r<e.length;++r)b(t.prototype,e[r]);return t}function m(){if(!(this instanceof m)){if(1===arguments.length&&Array.isArray(arguments[0]))return y(arguments[0]);if(arguments.length>0){const e=new Array(arguments.length);for(let t=0;t<arguments.length;++t)e[t]=arguments[t];return y(e)}throw new TypeError("Cannot call a class as a function")}f.set(this,new Map)}m.prototype={addEventListener(e,t,r){if(null==t)return;if("function"!=typeof t&&!p(t))throw new TypeError("'listener' should be a function or an object.");const n=h(this),o=p(r),s=(o?Boolean(r.capture):Boolean(r))?1:2,i={listener:t,listenerType:s,passive:o&&Boolean(r.passive),once:o&&Boolean(r.once),next:null};let a=n.get(e);if(void 0===a)return void n.set(e,i);let u=null;for(;null!=a;){if(a.listener===t&&a.listenerType===s)return;u=a,a=a.next}u.next=i},removeEventListener(e,t,r){if(null==t)return;const n=h(this),o=(p(r)?Boolean(r.capture):Boolean(r))?1:2;let s=null,i=n.get(e);for(;null!=i;){if(i.listener===t&&i.listenerType===o)return void(null!==s?s.next=i.next:null!==i.next?n.set(e,i.next):n.delete(e));s=i,i=i.next}},dispatchEvent(e){if(null==e||"string"!=typeof e.type)throw new TypeError('"event.type" should be a string.');const t=h(this),r=e.type;let n=t.get(r);if(null==n)return!0;const s=function(e,t){return new(l(Object.getPrototypeOf(t)))(e,t)}(this,e);let i=null;for(;null!=n;){if(n.once?null!==i?i.next=n.next:null!==n.next?t.set(r,n.next):t.delete(r):i=n,d(s,n.passive?n.listener:null),"function"==typeof n.listener)try{n.listener.call(this,s)}catch(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}else 3!==n.listenerType&&"function"==typeof n.listener.handleEvent&&n.listener.handleEvent(s);if(c(s))break;n=n.next}return d(s,null),function(e,t){o(e).eventPhase=t}(s,0),function(e,t){o(e).currentTarget=t}(s,null),!s.defaultPrevented}},Object.defineProperty(m.prototype,"constructor",{value:m,configurable:!0,writable:!0}),"undefined"!=typeof window&&void 0!==window.EventTarget&&Object.setPrototypeOf(m.prototype,window.EventTarget.prototype),t.defineEventAttribute=b,t.EventTarget=m,t.default=m,e.exports=m,e.exports.EventTarget=e.exports.default=m,e.exports.defineEventAttribute=b},30:(e,t,r)=>{const{Readable:n}=r(781),o=new WeakMap;class Blob{constructor(e=[],t={}){let r=0;const n=e.map((e=>{let t;return t=e instanceof Buffer?e:ArrayBuffer.isView(e)?Buffer.from(e.buffer,e.byteOffset,e.byteLength):e instanceof ArrayBuffer?Buffer.from(e):e instanceof Blob?e:Buffer.from("string"==typeof e?e:String(e)),r+=t.length||t.size||0,t})),s=void 0===t.type?"":String(t.type).toLowerCase();o.set(this,{type:/[^\u0020-\u007E]/.test(s)?"":s,size:r,parts:n})}get size(){return o.get(this).size}get type(){return o.get(this).type}async text(){return Buffer.from(await this.arrayBuffer()).toString()}async arrayBuffer(){const e=new Uint8Array(this.size);let t=0;for await(const r of this.stream())e.set(r,t),t+=r.length;return e.buffer}stream(){return n.from(async function*(e){for(const t of e)"stream"in t?yield*t.stream():yield t}(o.get(this).parts))}slice(e=0,t=this.size,r=""){const{size:n}=this;let s=e<0?Math.max(n+e,0):Math.min(e,n),i=t<0?Math.max(n+t,0):Math.min(t,n);const a=Math.max(i-s,0),u=o.get(this).parts.values(),l=[];let c=0;for(const e of u){const t=ArrayBuffer.isView(e)?e.byteLength:e.size;if(s&&t<=s)s-=t,i-=t;else{const r=e.slice(s,Math.min(t,i));if(l.push(r),c+=ArrayBuffer.isView(r)?r.byteLength:r.size,s=0,c>=a)break}}const d=new Blob([],{type:String(r).toLowerCase()});return Object.assign(o.get(d),{size:a,parts:l}),d}get[Symbol.toStringTag](){return"Blob"}static[Symbol.hasInstance](e){return e&&"object"==typeof e&&"function"==typeof e.stream&&0===e.stream.length&&"function"==typeof e.constructor&&/^(Blob|File)$/.test(e[Symbol.toStringTag])}}Object.defineProperties(Blob.prototype,{size:{enumerable:!0},type:{enumerable:!0},slice:{enumerable:!0}}),e.exports=Blob},556:(e,t,r)=>{"use strict";const n=r(594),o=r(271);if(global.fetch||(global.fetch=(e,t)=>n(e,{highWaterMark:1e7,...t})),global.Headers||(global.Headers=n.Headers),global.Request||(global.Request=n.Request),global.Response||(global.Response=n.Response),global.AbortController||(global.AbortController=o),!global.ReadableStream)try{global.ReadableStream=r(902)}catch(e){}e.exports=r(721)},721:function(e){var t;t=function(){"use strict";const e={},t=e=>"undefined"!=typeof self&&self&&e in self?self:"undefined"!=typeof window&&window&&e in window?window:"undefined"!=typeof global&&global&&e in global?global:"undefined"!=typeof globalThis&&globalThis?globalThis:void 0,r=["Headers","Request","Response","ReadableStream","fetch","AbortController","FormData"];for(const n of r)Object.defineProperty(e,n,{get(){const e=t(n),r=e&&e[n];return"function"==typeof r?r.bind(e):r}});const n=e=>null!==e&&"object"==typeof e,o="function"==typeof e.AbortController,s="function"==typeof e.ReadableStream,i="function"==typeof e.FormData,a=(t,r)=>{const n=new e.Headers(t||{}),o=r instanceof e.Headers,s=new e.Headers(r||{});for(const[e,t]of s)o&&"undefined"===t||void 0===t?n.delete(e):n.set(e,t);return n},u=(...e)=>{let t={},r={};for(const o of e){if(Array.isArray(o))Array.isArray(t)||(t=[]),t=[...t,...o];else if(n(o)){for(let[e,r]of Object.entries(o))n(r)&&e in t&&(r=u(t[e],r)),t={...t,[e]:r};n(o.headers)&&(r=a(r,o.headers))}t.headers=r}return t},l=["get","post","put","patch","head","delete"],c={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},d=[413,429,503],f=Symbol("stop");class HTTPError extends Error{constructor(e){super(e.statusText||String(0===e.status||e.status?e.status:"Unknown response error")),this.name="HTTPError",this.response=e}}class TimeoutError extends Error{constructor(e){super("Request timed out"),this.name="TimeoutError",this.request=e}}const p=e=>new Promise((t=>setTimeout(t,e))),h=e=>l.includes(e)?e.toUpperCase():e,b={limit:2,methods:["get","put","head","delete","options","trace"],statusCodes:[408,413,429,500,502,503,504],afterStatusCodes:d},y=(e={})=>{if("number"==typeof e)return{...b,limit:e};if(e.methods&&!Array.isArray(e.methods))throw new Error("retry.methods must be an array");if(e.statusCodes&&!Array.isArray(e.statusCodes))throw new Error("retry.statusCodes must be an array");return{...b,...e,afterStatusCodes:d}},m=2147483647;class Ky{constructor(t,r={}){if(this._retryCount=0,this._input=t,this._options={credentials:this._input.credentials||"same-origin",...r,headers:a(this._input.headers,r.headers),hooks:u({beforeRequest:[],beforeRetry:[],afterResponse:[]},r.hooks),method:h(r.method||this._input.method),prefixUrl:String(r.prefixUrl||""),retry:y(r.retry),throwHttpErrors:!1!==r.throwHttpErrors,timeout:void 0===r.timeout?1e4:r.timeout,fetch:r.fetch||e.fetch},"string"!=typeof this._input&&!(this._input instanceof URL||this._input instanceof e.Request))throw new TypeError("`input` must be a string, URL, or Request");if(this._options.prefixUrl&&"string"==typeof this._input){if(this._input.startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");this._options.prefixUrl.endsWith("/")||(this._options.prefixUrl+="/"),this._input=this._options.prefixUrl+this._input}if(o&&(this.abortController=new e.AbortController,this._options.signal&&this._options.signal.addEventListener("abort",(()=>{this.abortController.abort()})),this._options.signal=this.abortController.signal),this.request=new e.Request(this._input,this._options),this._options.searchParams){const t="?"+new URLSearchParams(this._options.searchParams).toString(),r=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,t);!(i&&this._options.body instanceof e.FormData||this._options.body instanceof URLSearchParams)||this._options.headers&&this._options.headers["content-type"]||this.request.headers.delete("content-type"),this.request=new e.Request(new e.Request(r,this.request),this._options)}void 0!==this._options.json&&(this._options.body=JSON.stringify(this._options.json),this.request.headers.set("content-type","application/json"),this.request=new e.Request(this.request,{body:this._options.body}));const n=async()=>{if(this._options.timeout>m)throw new RangeError("The `timeout` option cannot be greater than 2147483647");await p(1);let t=await this._fetch();for(const r of this._options.hooks.afterResponse){const n=await r(this.request,this._options,this._decorateResponse(t.clone()));n instanceof e.Response&&(t=n)}if(this._decorateResponse(t),!t.ok&&this._options.throwHttpErrors)throw new HTTPError(t);if(this._options.onDownloadProgress){if("function"!=typeof this._options.onDownloadProgress)throw new TypeError("The `onDownloadProgress` option must be a function");if(!s)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return this._stream(t.clone(),this._options.onDownloadProgress)}return t},l=this._options.retry.methods.includes(this.request.method.toLowerCase())?this._retry(n):n();for(const[e,t]of Object.entries(c))l[e]=async()=>{this.request.headers.set("accept",this.request.headers.get("accept")||t);const n=(await l).clone();if("json"===e){if(204===n.status)return"";if(r.parseJson)return r.parseJson(await n.text())}return n[e]()};return l}_calculateRetryDelay(e){if(this._retryCount++,this._retryCount<this._options.retry.limit&&!(e instanceof TimeoutError)){if(e instanceof HTTPError){if(!this._options.retry.statusCodes.includes(e.response.status))return 0;const t=e.response.headers.get("Retry-After");if(t&&this._options.retry.afterStatusCodes.includes(e.response.status)){let e=Number(t);return Number.isNaN(e)?e=Date.parse(t)-Date.now():e*=1e3,void 0!==this._options.retry.maxRetryAfter&&e>this._options.retry.maxRetryAfter?0:e}if(413===e.response.status)return 0}return.3*2**(this._retryCount-1)*1e3}return 0}_decorateResponse(e){return this._options.parseJson&&(e.json=async()=>this._options.parseJson(await e.text())),e}async _retry(e){try{return await e()}catch(t){const r=Math.min(this._calculateRetryDelay(t),m);if(0!==r&&this._retryCount>0){await p(r);for(const e of this._options.hooks.beforeRetry)if(await e({request:this.request,options:this._options,error:t,retryCount:this._retryCount})===f)return;return this._retry(e)}if(this._options.throwHttpErrors)throw t}}async _fetch(){for(const e of this._options.hooks.beforeRequest){const t=await e(this.request,this._options);if(t instanceof Request){this.request=t;break}if(t instanceof Response)return t}return!1===this._options.timeout?this._options.fetch(this.request.clone()):(e=this.request.clone(),t=this.abortController,r=this._options,new Promise(((n,o)=>{const s=setTimeout((()=>{t&&t.abort(),o(new TimeoutError(e))}),r.timeout);r.fetch(e).then(n).catch(o).then((()=>{clearTimeout(s)}))})));var e,t,r}_stream(t,r){const n=Number(t.headers.get("content-length"))||0;let o=0;return new e.Response(new e.ReadableStream({start(e){const s=t.body.getReader();r&&r({percent:0,transferredBytes:0,totalBytes:n},new Uint8Array),async function t(){const{done:i,value:a}=await s.read();i?e.close():(r&&(o+=a.byteLength,r({percent:0===n?0:o/n,transferredBytes:o,totalBytes:n},a)),e.enqueue(a),t())}()}}))}}const g=(...e)=>{for(const t of e)if((!n(t)||Array.isArray(t))&&void 0!==t)throw new TypeError("The `options` argument must be an object");return u({},...e)},_=e=>{const t=(t,r)=>new Ky(t,g(e,r));for(const r of l)t[r]=(t,n)=>new Ky(t,g(e,n,{method:r}));return t.HTTPError=HTTPError,t.TimeoutError=TimeoutError,t.create=e=>_(g(e)),t.extend=t=>_(g(e,t)),t.stop=f,t};return _()},e.exports=t()},78:function(e,t,r){var n,o,s;s=function(){function e(e){var t=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var r=e.shift();e[0]=r+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n<e.length;n++){var o=e[n];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(n>0&&(o=o.replace(/^[\/]+/,"")),o=n<e.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),t.push(o))}var s=t.join("/"),i=(s=s.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s=i.shift()+(i.length>0?"?":"")+i.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=s():void 0===(o="function"==typeof(n=s)?n.call(t,r,t,e):n)||(e.exports=o)},113:e=>{"use strict";e.exports=require("crypto")},685:e=>{"use strict";e.exports=require("http")},687:e=>{"use strict";e.exports=require("https")},781:e=>{"use strict";e.exports=require("stream")},310:e=>{"use strict";e.exports=require("url")},837:e=>{"use strict";e.exports=require("util")},796:e=>{"use strict";e.exports=require("zlib")},594:(e,t,r)=>{"use strict";t=e.exports=D;const n=r(685),o=r(687),s=r(796),i=r(781),a=r(94),u=r(837),l=r(30),c=r(113),d=r(310);class FetchBaseError extends Error{constructor(e,t){super(e),Error.captureStackTrace(this,this.constructor),this.type=t}get name(){return this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}}class FetchError extends FetchBaseError{constructor(e,t,r){super(e,t),r&&(this.code=this.errno=r.code,this.erroredSysCall=r.syscall)}}const f=Symbol.toStringTag,p=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[f],h=e=>"object"==typeof e&&"function"==typeof e.arrayBuffer&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.constructor&&/^(Blob|File)$/.test(e[f]);function b(e){return"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.set&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.delete&&"function"==typeof e.keys&&"function"==typeof e.values&&"function"==typeof e.entries&&"function"==typeof e.constructor&&"FormData"===e[f]}const y="\r\n",m="-".repeat(2),g=Buffer.byteLength(y),_=e=>`${m}${e}${m}${y.repeat(2)}`;function v(e,t,r){let n="";return n+=`${m}${e}\r\n`,n+=`Content-Disposition: form-data; name="${t}"`,h(r)&&(n+=`; filename="${r.name}"\r\n`,n+=`Content-Type: ${r.type||"application/octet-stream"}`),`${n}${y.repeat(2)}`}const w=Symbol("Body internals");class Body{constructor(e,{size:t=0}={}){let r=null;null===e?e=null:p(e)?e=Buffer.from(e.toString()):h(e)||Buffer.isBuffer(e)||(u.types.isAnyArrayBuffer(e)?e=Buffer.from(e):ArrayBuffer.isView(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):e instanceof i||(b(e)?(r=`NodeFetchFormDataBoundary${c.randomBytes(8).toString("hex")}`,e=i.Readable.from(async function*(e,t){for(const[r,n]of e)yield v(t,r,n),h(n)?yield*n.stream():yield n,yield y;yield _(t)}(e,r))):e=Buffer.from(String(e)))),this[w]={body:e,boundary:r,disturbed:!1,error:null},this.size=t,e instanceof i&&e.on("error",(e=>{const t=e instanceof FetchBaseError?e:new FetchError(`Invalid response body while trying to fetch ${this.url}: ${e.message}`,"system",e);this[w].error=t}))}get body(){return this[w].body}get bodyUsed(){return this[w].disturbed}async arrayBuffer(){const{buffer:e,byteOffset:t,byteLength:r}=await S(this);return e.slice(t,t+r)}async blob(){const e=this.headers&&this.headers.get("content-type")||this[w].body&&this[w].body.type||"",t=await this.buffer();return new l([t],{type:e})}async json(){const e=await S(this);return JSON.parse(e.toString())}async text(){return(await S(this)).toString()}buffer(){return S(this)}}async function S(e){if(e[w].disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e[w].disturbed=!0,e[w].error)throw e[w].error;let{body:t}=e;if(null===t)return Buffer.alloc(0);if(h(t)&&(t=t.stream()),Buffer.isBuffer(t))return t;if(!(t instanceof i))return Buffer.alloc(0);const r=[];let n=0;try{for await(const o of t){if(e.size>0&&n+o.length>e.size){const r=new FetchError(`content size at ${e.url} over limit: ${e.size}`,"max-size");throw t.destroy(r),r}n+=o.length,r.push(o)}}catch(t){throw t instanceof FetchBaseError?t:new FetchError(`Invalid response body while trying to fetch ${e.url}: ${t.message}`,"system",t)}if(!0!==t.readableEnded&&!0!==t._readableState.ended)throw new FetchError(`Premature close of server response while trying to fetch ${e.url}`);try{return r.every((e=>"string"==typeof e))?Buffer.from(r.join("")):Buffer.concat(r,n)}catch(t){throw new FetchError(`Could not create Buffer from response body for ${e.url}: ${t.message}`,"system",t)}}Object.defineProperties(Body.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const R=(e,t)=>{let r,n,{body:o}=e;if(e.bodyUsed)throw new Error("cannot clone body after it is used");return o instanceof i&&"function"!=typeof o.getBoundary&&(r=new i.PassThrough({highWaterMark:t}),n=new i.PassThrough({highWaterMark:t}),o.pipe(r),o.pipe(n),e[w].body=r,o=n),o},T=(e,t)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":p(e)?"application/x-www-form-urlencoded;charset=UTF-8":h(e)?e.type||null:Buffer.isBuffer(e)||u.types.isAnyArrayBuffer(e)||ArrayBuffer.isView(e)?null:e&&"function"==typeof e.getBoundary?`multipart/form-data;boundary=${e.getBoundary()}`:b(e)?`multipart/form-data; boundary=${t[w].boundary}`:e instanceof i?null:"text/plain;charset=UTF-8",q=e=>{const{body:t}=e;return null===t?0:h(t)?t.size:Buffer.isBuffer(t)?t.length:t&&"function"==typeof t.getLengthSync?t.hasKnownLength&&t.hasKnownLength()?t.getLengthSync():null:b(t)?function(e,t){let r=0;for(const[n,o]of e)r+=Buffer.byteLength(v(t,n,o)),h(o)?r+=o.size:r+=Buffer.byteLength(String(o)),r+=g;return r+=Buffer.byteLength(_(t)),r}(e[w].boundary):null},P="function"==typeof n.validateHeaderName?n.validateHeaderName:e=>{if(!/^[\^`\-\w!#$%&'*+.|~]+$/.test(e)){const t=new TypeError(`Header name must be a valid HTTP token [${e}]`);throw Object.defineProperty(t,"code",{value:"ERR_INVALID_HTTP_TOKEN"}),t}},C="function"==typeof n.validateHeaderValue?n.validateHeaderValue:(e,t)=>{if(/[^\t\u0020-\u007E\u0080-\u00FF]/.test(t)){const t=new TypeError(`Invalid character in header content ["${e}"]`);throw Object.defineProperty(t,"code",{value:"ERR_INVALID_CHAR"}),t}};class Headers extends URLSearchParams{constructor(e){let t=[];if(e instanceof Headers){const r=e.raw();for(const[e,n]of Object.entries(r))t.push(...n.map((t=>[e,t])))}else if(null==e);else{if("object"!=typeof e||u.types.isBoxedPrimitive(e))throw new TypeError("Failed to construct 'Headers': The provided value is not of type '(sequence<sequence<ByteString>> or record<ByteString, ByteString>)");{const r=e[Symbol.iterator];if(null==r)t.push(...Object.entries(e));else{if("function"!=typeof r)throw new TypeError("Header pairs must be iterable");t=[...e].map((e=>{if("object"!=typeof e||u.types.isBoxedPrimitive(e))throw new TypeError("Each header pair must be an iterable object");return[...e]})).map((e=>{if(2!==e.length)throw new TypeError("Each header pair must be a name/value tuple");return[...e]}))}}}return t=t.length>0?t.map((([e,t])=>(P(e),C(e,String(t)),[String(e).toLowerCase(),String(t)]))):void 0,super(t),new Proxy(this,{get(e,t,r){switch(t){case"append":case"set":return(e,n)=>(P(e),C(e,String(n)),URLSearchParams.prototype[t].call(r,String(e).toLowerCase(),String(n)));case"delete":case"has":case"getAll":return e=>(P(e),URLSearchParams.prototype[t].call(r,String(e).toLowerCase()));case"keys":return()=>(e.sort(),new Set(URLSearchParams.prototype.keys.call(e)).keys());default:return Reflect.get(e,t,r)}}})}get[Symbol.toStringTag](){return this.constructor.name}toString(){return Object.prototype.toString.call(this)}get(e){const t=this.getAll(e);if(0===t.length)return null;let r=t.join(", ");return/^content-encoding$/i.test(e)&&(r=r.toLowerCase()),r}forEach(e){for(const t of this.keys())e(this.get(t),t)}*values(){for(const e of this.keys())yield this.get(e)}*entries(){for(const e of this.keys())yield[e,this.get(e)]}[Symbol.iterator](){return this.entries()}raw(){return[...this.keys()].reduce(((e,t)=>(e[t]=this.getAll(t),e)),{})}[Symbol.for("nodejs.util.inspect.custom")](){return[...this.keys()].reduce(((e,t)=>{const r=this.getAll(t);return e[t]="host"===t?r[0]:r.length>1?r:r[0],e}),{})}}Object.defineProperties(Headers.prototype,["get","entries","forEach","values"].reduce(((e,t)=>(e[t]={enumerable:!0},e)),{}));const E=new Set([301,302,303,307,308]),O=e=>E.has(e),j=Symbol("Response internals");class Response extends Body{constructor(e=null,t={}){super(e,t);const r=t.status||200,n=new Headers(t.headers);if(null!==e&&!n.has("Content-Type")){const t=T(e);t&&n.append("Content-Type",t)}this[j]={url:t.url,status:r,statusText:t.statusText||"",headers:n,counter:t.counter,highWaterMark:t.highWaterMark}}get url(){return this[j].url||""}get status(){return this[j].status}get ok(){return this[j].status>=200&&this[j].status<300}get redirected(){return this[j].counter>0}get statusText(){return this[j].statusText}get headers(){return this[j].headers}get highWaterMark(){return this[j].highWaterMark}clone(){return new Response(R(this,this.highWaterMark),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,t=302){if(!O(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');return new Response(null,{headers:{location:new URL(e).toString()},status:t})}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const A=Symbol("Request internals"),k=e=>"object"==typeof e&&"object"==typeof e[A];class Request extends Body{constructor(e,t={}){let r;k(e)?r=new URL(e.url):(r=new URL(e),e={});let n=t.method||e.method||"GET";if(n=n.toUpperCase(),(null!=t.body||k(e))&&null!==e.body&&("GET"===n||"HEAD"===n))throw new TypeError("Request with GET/HEAD method cannot have body");const o=t.body?t.body:k(e)&&null!==e.body?R(e):null;super(o,{size:t.size||e.size||0});const s=new Headers(t.headers||e.headers||{});if(null!==o&&!s.has("Content-Type")){const e=T(o,this);e&&s.append("Content-Type",e)}let i=k(e)?e.signal:null;if("signal"in t&&(i=t.signal),null!==i&&("object"!=typeof(a=i)||"AbortSignal"!==a[f]))throw new TypeError("Expected signal to be an instanceof AbortSignal");var a;this[A]={method:n,redirect:t.redirect||e.redirect||"follow",headers:s,parsedURL:r,signal:i},this.follow=void 0===t.follow?void 0===e.follow?20:e.follow:t.follow,this.compress=void 0===t.compress?void 0===e.compress||e.compress:t.compress,this.counter=t.counter||e.counter||0,this.agent=t.agent||e.agent,this.highWaterMark=t.highWaterMark||e.highWaterMark||16384,this.insecureHTTPParser=t.insecureHTTPParser||e.insecureHTTPParser||!1}get method(){return this[A].method}get url(){return d.format(this[A].parsedURL)}get headers(){return this[A].headers}get redirect(){return this[A].redirect}get signal(){return this[A].signal}clone(){return new Request(this)}get[Symbol.toStringTag](){return"Request"}}Object.defineProperties(Request.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}});class AbortError extends FetchBaseError{constructor(e,t="aborted"){super(e,t)}}const B=new Set(["data:","http:","https:"]);async function D(e,t){return new Promise(((r,u)=>{const l=new Request(e,t),c=(e=>{const{parsedURL:t}=e[A],r=new Headers(e[A].headers);r.has("Accept")||r.set("Accept","*/*");let n=null;if(null===e.body&&/^(post|put)$/i.test(e.method)&&(n="0"),null!==e.body){const t=q(e);"number"!=typeof t||Number.isNaN(t)||(n=String(t))}n&&r.set("Content-Length",n),r.has("User-Agent")||r.set("User-Agent","node-fetch"),e.compress&&!r.has("Accept-Encoding")&&r.set("Accept-Encoding","gzip,deflate,br");let{agent:o}=e;"function"==typeof o&&(o=o(t)),r.has("Connection")||o||r.set("Connection","close");const s=(e=>{if(e.search)return e.search;const t=e.href.length-1,r=e.hash||("#"===e.href[t]?"#":"");return"?"===e.href[t-r.length]?"?":""})(t);return{path:t.pathname+s,pathname:t.pathname,hostname:t.hostname,protocol:t.protocol,port:t.port,hash:t.hash,search:t.search,query:t.query,href:t.href,method:e.method,headers:r[Symbol.for("nodejs.util.inspect.custom")](),insecureHTTPParser:e.insecureHTTPParser,agent:o}})(l);if(!B.has(c.protocol))throw new TypeError(`node-fetch cannot load ${e}. URL scheme "${c.protocol.replace(/:$/,"")}" is not supported.`);if("data:"===c.protocol){const e=a(l.url),t=new Response(e,{headers:{"Content-Type":e.typeFull}});return void r(t)}const d=("https:"===c.protocol?o:n).request,{signal:f}=l;let p=null;const b=()=>{const e=new AbortError("The operation was aborted.");u(e),l.body&&l.body instanceof i.Readable&&l.body.destroy(e),p&&p.body&&p.body.emit("error",e)};if(f&&f.aborted)return void b();const y=()=>{b(),g()},m=d(c);f&&f.addEventListener("abort",y);const g=()=>{m.abort(),f&&f.removeEventListener("abort",y)};m.on("error",(e=>{u(new FetchError(`request to ${l.url} failed, reason: ${e.message}`,"system",e)),g()})),m.on("response",(e=>{m.setTimeout(0);const n=function(e=[]){return new Headers(e.reduce(((e,t,r,n)=>(r%2==0&&e.push(n.slice(r,r+2)),e)),[]).filter((([e,t])=>{try{return P(e),C(e,String(t)),!0}catch{return!1}})))}(e.rawHeaders);if(O(e.statusCode)){const o=n.get("Location"),s=null===o?null:new URL(o,l.url);switch(l.redirect){case"error":return u(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${l.url}`,"no-redirect")),void g();case"manual":if(null!==s)try{n.set("Location",s)}catch(e){u(e)}break;case"follow":{if(null===s)break;if(l.counter>=l.follow)return u(new FetchError(`maximum redirect reached at: ${l.url}`,"max-redirect")),void g();const n={headers:new Headers(l.headers),follow:l.follow,counter:l.counter+1,agent:l.agent,compress:l.compress,method:l.method,body:l.body,signal:l.signal,size:l.size};return 303!==e.statusCode&&l.body&&t.body instanceof i.Readable?(u(new FetchError("Cannot follow redirect with body being a readable stream","unsupported-redirect")),void g()):(303!==e.statusCode&&(301!==e.statusCode&&302!==e.statusCode||"POST"!==l.method)||(n.method="GET",n.body=void 0,n.headers.delete("content-length")),r(D(new Request(s,n))),void g())}}}e.once("end",(()=>{f&&f.removeEventListener("abort",y)}));let o=i.pipeline(e,new i.PassThrough,(e=>{u(e)}));process.version<"v12.10"&&e.on("aborted",y);const a={url:l.url,status:e.statusCode,statusText:e.statusMessage,headers:n,size:l.size,counter:l.counter,highWaterMark:l.highWaterMark},c=n.get("Content-Encoding");if(!l.compress||"HEAD"===l.method||null===c||204===e.statusCode||304===e.statusCode)return p=new Response(o,a),void r(p);const d={flush:s.Z_SYNC_FLUSH,finishFlush:s.Z_SYNC_FLUSH};if("gzip"===c||"x-gzip"===c)return o=i.pipeline(o,s.createGunzip(d),(e=>{u(e)})),p=new Response(o,a),void r(p);if("deflate"!==c&&"x-deflate"!==c){if("br"===c)return o=i.pipeline(o,s.createBrotliDecompress(),(e=>{u(e)})),p=new Response(o,a),void r(p);p=new Response(o,a),r(p)}else{i.pipeline(e,new i.PassThrough,(e=>{u(e)})).once("data",(e=>{o=8==(15&e[0])?i.pipeline(o,s.createInflate(),(e=>{u(e)})):i.pipeline(o,s.createInflateRaw(),(e=>{u(e)})),p=new Response(o,a),r(p)}))}})),((e,{body:t})=>{null===t?e.end():h(t)?t.stream().pipe(e):Buffer.isBuffer(t)?(e.write(t),e.end()):t.pipe(e)})(m,l)}))}t.AbortError=AbortError,t.FetchError=FetchError,t.Headers=Headers,t.Request=Request,t.Response=Response,t.default=D,t.isRedirect=O},902:(e,t,r)=>{"use strict";r.r(t),r.d(t,{ByteLengthQueuingStrategy:()=>ByteLengthQueuingStrategy,CountQueuingStrategy:()=>CountQueuingStrategy,ReadableByteStreamController:()=>ReadableByteStreamController,ReadableStream:()=>ReadableStream,ReadableStreamBYOBReader:()=>ReadableStreamBYOBReader,ReadableStreamBYOBRequest:()=>ReadableStreamBYOBRequest,ReadableStreamDefaultController:()=>ReadableStreamDefaultController,ReadableStreamDefaultReader:()=>ReadableStreamDefaultReader,TransformStream:()=>TransformStream,TransformStreamDefaultController:()=>TransformStreamDefaultController,WritableStream:()=>WritableStream,WritableStreamDefaultController:()=>WritableStreamDefaultController,WritableStreamDefaultWriter:()=>WritableStreamDefaultWriter});const n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:e=>`Symbol(${e})`;function o(){}const s="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function i(e){return"object"==typeof e&&null!==e||"function"==typeof e}const a=o,u=Promise,l=Promise.prototype.then,c=Promise.resolve.bind(u),d=Promise.reject.bind(u);function f(e){return new u(e)}function p(e){return c(e)}function h(e){return d(e)}function b(e,t,r){return l.call(e,t,r)}function y(e,t,r){b(b(e,t,r),void 0,a)}function m(e,t){y(e,t)}function g(e,t){y(e,void 0,t)}function _(e,t,r){return b(e,t,r)}function v(e){b(e,void 0,a)}const w=(()=>{const e=s&&s.queueMicrotask;if("function"==typeof e)return e;const t=p(void 0);return e=>b(t,e)})();function S(e,t,r){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,t,r)}function R(e,t,r){try{return p(S(e,t,r))}catch(e){return h(e)}}class SimpleQueue{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(e){const t=this._back;let r=t;16383===t._elements.length&&(r={_elements:[],_next:void 0}),t._elements.push(e),r!==t&&(this._back=r,t._next=r),++this._size}shift(){const e=this._front;let t=e;const r=this._cursor;let n=r+1;const o=e._elements,s=o[r];return 16384===n&&(t=e._next,n=0),--this._size,this._cursor=n,e!==t&&(this._front=t),o[r]=void 0,s}forEach(e){let t=this._cursor,r=this._front,n=r._elements;for(;!(t===n.length&&void 0===r._next||t===n.length&&(r=r._next,n=r._elements,t=0,0===n.length));)e(n[t]),++t}peek(){const e=this._front,t=this._cursor;return e._elements[t]}}function T(e,t){e._ownerReadableStream=t,t._reader=e,"readable"===t._state?E(e):"closed"===t._state?function(e){E(e),A(e)}(e):O(e,t._storedError)}function q(e,t){return pr(e._ownerReadableStream,t)}function P(e){"readable"===e._ownerReadableStream._state?j(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,t){O(e,t)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function C(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function E(e){e._closedPromise=f(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r}))}function O(e,t){E(e),j(e,t)}function j(e,t){void 0!==e._closedPromise_reject&&(v(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function A(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}const k=n("[[AbortSteps]]"),B=n("[[ErrorSteps]]"),D=n("[[CancelSteps]]"),W=n("[[PullSteps]]"),x=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},L=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function F(e,t){if(void 0!==e&&("object"!=typeof(r=e)&&"function"!=typeof r))throw new TypeError(`${t} is not an object.`);var r}function M(e,t){if("function"!=typeof e)throw new TypeError(`${t} is not a function.`)}function I(e,t){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(`${t} is not an object.`)}function z(e,t,r){if(void 0===e)throw new TypeError(`Parameter ${t} is required in '${r}'.`)}function $(e,t,r){if(void 0===e)throw new TypeError(`${t} is required in '${r}'.`)}function U(e){return Number(e)}function H(e){return 0===e?0:e}function N(e,t){const r=Number.MAX_SAFE_INTEGER;let n=Number(e);if(n=H(n),!x(n))throw new TypeError(`${t} is not a finite number`);if(n=function(e){return H(L(e))}(n),n<0||n>r)throw new TypeError(`${t} is outside the accepted range of 0 to ${r}, inclusive`);return x(n)&&0!==n?n:0}function V(e,t){if(!dr(e))throw new TypeError(`${t} is not a ReadableStream.`)}function Q(e){return new ReadableStreamDefaultReader(e)}function Y(e,t){e._reader._readRequests.push(t)}function G(e,t,r){const n=e._reader._readRequests.shift();r?n._closeSteps():n._chunkSteps(t)}function J(e){return e._reader._readRequests.length}function K(e){const t=e._reader;return void 0!==t&&!!Z(t)}class ReadableStreamDefaultReader{constructor(e){if(z(e,1,"ReadableStreamDefaultReader"),V(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");T(this,e),this._readRequests=new SimpleQueue}get closed(){return Z(this)?this._closedPromise:h(ee("closed"))}cancel(e){return Z(this)?void 0===this._ownerReadableStream?h(C("cancel")):q(this,e):h(ee("cancel"))}read(){if(!Z(this))return h(ee("read"));if(void 0===this._ownerReadableStream)return h(C("read from"));let e,t;const r=f(((r,n)=>{e=r,t=n}));return X(this,{_chunkSteps:t=>e({value:t,done:!1}),_closeSteps:()=>e({value:void 0,done:!0}),_errorSteps:e=>t(e)}),r}releaseLock(){if(!Z(this))throw ee("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");P(this)}}}function Z(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readRequests")&&e instanceof ReadableStreamDefaultReader)}function X(e,t){const r=e._ownerReadableStream;r._disturbed=!0,"closed"===r._state?t._closeSteps():"errored"===r._state?t._errorSteps(r._storedError):r._readableStreamController[W](t)}function ee(e){return new TypeError(`ReadableStreamDefaultReader.prototype.${e} can only be used on a ReadableStreamDefaultReader`)}Object.defineProperties(ReadableStreamDefaultReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(ReadableStreamDefaultReader.prototype,n.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0});const te=Object.getPrototypeOf(Object.getPrototypeOf((async function*(){})).prototype);class ReadableStreamAsyncIteratorImpl{constructor(e,t){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=t}next(){const e=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?_(this._ongoingPromise,e,e):e(),this._ongoingPromise}return(e){const t=()=>this._returnSteps(e);return this._ongoingPromise?_(this._ongoingPromise,t,t):t()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});const e=this._reader;if(void 0===e._ownerReadableStream)return h(C("iterate"));let t,r;const n=f(((e,n)=>{t=e,r=n}));return X(e,{_chunkSteps:e=>{this._ongoingPromise=void 0,w((()=>t({value:e,done:!1})))},_closeSteps:()=>{this._ongoingPromise=void 0,this._isFinished=!0,P(e),t({value:void 0,done:!0})},_errorSteps:t=>{this._ongoingPromise=void 0,this._isFinished=!0,P(e),r(t)}}),n}_returnSteps(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;const t=this._reader;if(void 0===t._ownerReadableStream)return h(C("finish iterating"));if(!this._preventCancel){const r=q(t,e);return P(t),_(r,(()=>({value:e,done:!0})))}return P(t),p({value:e,done:!0})}}const re={next(){return ne(this)?this._asyncIteratorImpl.next():h(oe("next"))},return(e){return ne(this)?this._asyncIteratorImpl.return(e):h(oe("return"))}};function ne(e){if(!i(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl"))return!1;try{return e._asyncIteratorImpl instanceof ReadableStreamAsyncIteratorImpl}catch(e){return!1}}function oe(e){return new TypeError(`ReadableStreamAsyncIterator.${e} can only be used on a ReadableSteamAsyncIterator`)}void 0!==te&&Object.setPrototypeOf(re,te);const se=Number.isNaN||function(e){return e!=e};function ie(e){return e.slice()}function ae(e,t,r,n,o){new Uint8Array(e).set(new Uint8Array(r,n,o),t)}function ue(e,t,r){if(e.slice)return e.slice(t,r);const n=r-t,o=new ArrayBuffer(n);return ae(o,0,e,t,n),o}function le(e){const t=ue(e.buffer,e.byteOffset,e.byteOffset+e.byteLength);return new Uint8Array(t)}function ce(e){const t=e._queue.shift();return e._queueTotalSize-=t.size,e._queueTotalSize<0&&(e._queueTotalSize=0),t.value}function de(e,t,r){if("number"!=typeof(n=r)||se(n)||n<0||r===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");var n;e._queue.push({value:t,size:r}),e._queueTotalSize+=r}function fe(e){e._queue=new SimpleQueue,e._queueTotalSize=0}class ReadableStreamBYOBRequest{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!he(this))throw xe("view");return this._view}respond(e){if(!he(this))throw xe("respond");if(z(e,1,"respond"),e=N(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,Be(this._associatedReadableByteStreamController,e)}respondWithNewView(e){if(!he(this))throw xe("respondWithNewView");if(z(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");e.buffer,De(this._associatedReadableByteStreamController,e)}}Object.defineProperties(ReadableStreamBYOBRequest.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(ReadableStreamBYOBRequest.prototype,n.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});class ReadableByteStreamController{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!pe(this))throw Le("byobRequest");return Ae(this)}get desiredSize(){if(!pe(this))throw Le("desiredSize");return ke(this)}close(){if(!pe(this))throw Le("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");const e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError(`The stream (in ${e} state) is not in the readable state and cannot be closed`);Ee(this)}enqueue(e){if(!pe(this))throw Le("enqueue");if(z(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");const t=this._controlledReadableByteStream._state;if("readable"!==t)throw new TypeError(`The stream (in ${t} state) is not in the readable state and cannot be enqueued to`);Oe(this,e)}error(e){if(!pe(this))throw Le("error");je(this,e)}[D](e){ye(this),fe(this);const t=this._cancelAlgorithm(e);return Ce(this),t}[W](e){const t=this._controlledReadableByteStream;if(this._queueTotalSize>0){const t=this._queue.shift();this._queueTotalSize-=t.byteLength,Se(this);const r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return void e._chunkSteps(r)}const r=this._autoAllocateChunkSize;if(void 0!==r){let t;try{t=new ArrayBuffer(r)}catch(t){return void e._errorSteps(t)}const n={buffer:t,bufferByteLength:r,byteOffset:0,byteLength:r,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(n)}Y(t,e),be(this)}}function pe(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")&&e instanceof ReadableByteStreamController)}function he(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")&&e instanceof ReadableStreamBYOBRequest)}function be(e){const t=function(e){const t=e._controlledReadableByteStream;if("readable"!==t._state)return!1;if(e._closeRequested)return!1;if(!e._started)return!1;if(K(t)&&J(t)>0)return!0;if(ze(t)&&Ie(t)>0)return!0;if(ke(e)>0)return!0;return!1}(e);if(!t)return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;y(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,be(e))}),(t=>{je(e,t)}))}function ye(e){Re(e),e._pendingPullIntos=new SimpleQueue}function me(e,t){let r=!1;"closed"===e._state&&(r=!0);const n=ge(t);"default"===t.readerType?G(e,n,r):function(e,t,r){const n=e._reader._readIntoRequests.shift();r?n._closeSteps(t):n._chunkSteps(t)}(e,n,r)}function ge(e){const t=e.bytesFilled,r=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,t/r)}function _e(e,t,r,n){e._queue.push({buffer:t,byteOffset:r,byteLength:n}),e._queueTotalSize+=n}function ve(e,t){const r=t.elementSize,n=t.bytesFilled-t.bytesFilled%r,o=Math.min(e._queueTotalSize,t.byteLength-t.bytesFilled),s=t.bytesFilled+o,i=s-s%r;let a=o,u=!1;i>n&&(a=i-t.bytesFilled,u=!0);const l=e._queue;for(;a>0;){const r=l.peek(),n=Math.min(a,r.byteLength),o=t.byteOffset+t.bytesFilled;ae(t.buffer,o,r.buffer,r.byteOffset,n),r.byteLength===n?l.shift():(r.byteOffset+=n,r.byteLength-=n),e._queueTotalSize-=n,we(e,n,t),a-=n}return u}function we(e,t,r){r.bytesFilled+=t}function Se(e){0===e._queueTotalSize&&e._closeRequested?(Ce(e),hr(e._controlledReadableByteStream)):be(e)}function Re(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Te(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;const t=e._pendingPullIntos.peek();ve(e,t)&&(Pe(e),me(e._controlledReadableByteStream,t))}}function qe(e,t){const r=e._pendingPullIntos.peek();Re(e);"closed"===e._controlledReadableByteStream._state?function(e,t){const r=e._controlledReadableByteStream;if(ze(r))for(;Ie(r)>0;)me(r,Pe(e))}(e):function(e,t,r){if(we(0,t,r),r.bytesFilled<r.elementSize)return;Pe(e);const n=r.bytesFilled%r.elementSize;if(n>0){const t=r.byteOffset+r.bytesFilled,o=ue(r.buffer,t-n,t);_e(e,o,0,o.byteLength)}r.bytesFilled-=n,me(e._controlledReadableByteStream,r),Te(e)}(e,t,r),be(e)}function Pe(e){return e._pendingPullIntos.shift()}function Ce(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function Ee(e){const t=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===t._state)if(e._queueTotalSize>0)e._closeRequested=!0;else{if(e._pendingPullIntos.length>0){if(e._pendingPullIntos.peek().bytesFilled>0){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw je(e,t),t}}Ce(e),hr(t)}}function Oe(e,t){const r=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==r._state)return;const n=t.buffer,o=t.byteOffset,s=t.byteLength,i=n;if(e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek();t.buffer,0,t.buffer=t.buffer}if(Re(e),K(r))if(0===J(r))_e(e,i,o,s);else{e._pendingPullIntos.length>0&&Pe(e);G(r,new Uint8Array(i,o,s),!1)}else ze(r)?(_e(e,i,o,s),Te(e)):_e(e,i,o,s);be(e)}function je(e,t){const r=e._controlledReadableByteStream;"readable"===r._state&&(ye(e),fe(e),Ce(e),br(r,t))}function Ae(e){if(null===e._byobRequest&&e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek(),r=new Uint8Array(t.buffer,t.byteOffset+t.bytesFilled,t.byteLength-t.bytesFilled),n=Object.create(ReadableStreamBYOBRequest.prototype);!function(e,t,r){e._associatedReadableByteStreamController=t,e._view=r}(n,e,r),e._byobRequest=n}return e._byobRequest}function ke(e){const t=e._controlledReadableByteStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function Be(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(0===t)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(r.bytesFilled+t>r.byteLength)throw new RangeError("bytesWritten out of range")}r.buffer=r.buffer,qe(e,t)}function De(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t.byteLength)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(0===t.byteLength)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(r.byteOffset+r.bytesFilled!==t.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(r.bufferByteLength!==t.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(r.bytesFilled+t.byteLength>r.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");const n=t.byteLength;r.buffer=t.buffer,qe(e,n)}function We(e,t,r,n,o,s,i){t._controlledReadableByteStream=e,t._pullAgain=!1,t._pulling=!1,t._byobRequest=null,t._queue=t._queueTotalSize=void 0,fe(t),t._closeRequested=!1,t._started=!1,t._strategyHWM=s,t._pullAlgorithm=n,t._cancelAlgorithm=o,t._autoAllocateChunkSize=i,t._pendingPullIntos=new SimpleQueue,e._readableStreamController=t;y(p(r()),(()=>{t._started=!0,be(t)}),(e=>{je(t,e)}))}function xe(e){return new TypeError(`ReadableStreamBYOBRequest.prototype.${e} can only be used on a ReadableStreamBYOBRequest`)}function Le(e){return new TypeError(`ReadableByteStreamController.prototype.${e} can only be used on a ReadableByteStreamController`)}function Fe(e){return new ReadableStreamBYOBReader(e)}function Me(e,t){e._reader._readIntoRequests.push(t)}function Ie(e){return e._reader._readIntoRequests.length}function ze(e){const t=e._reader;return void 0!==t&&!!$e(t)}Object.defineProperties(ReadableByteStreamController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(ReadableByteStreamController.prototype,n.toStringTag,{value:"ReadableByteStreamController",configurable:!0});class ReadableStreamBYOBReader{constructor(e){if(z(e,1,"ReadableStreamBYOBReader"),V(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!pe(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");T(this,e),this._readIntoRequests=new SimpleQueue}get closed(){return $e(this)?this._closedPromise:h(He("closed"))}cancel(e){return $e(this)?void 0===this._ownerReadableStream?h(C("cancel")):q(this,e):h(He("cancel"))}read(e){if(!$e(this))return h(He("read"));if(!ArrayBuffer.isView(e))return h(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return h(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return h(new TypeError("view's buffer must have non-zero byteLength"));if(e.buffer,void 0===this._ownerReadableStream)return h(C("read from"));let t,r;const n=f(((e,n)=>{t=e,r=n}));return Ue(this,e,{_chunkSteps:e=>t({value:e,done:!1}),_closeSteps:e=>t({value:e,done:!0}),_errorSteps:e=>r(e)}),n}releaseLock(){if(!$e(this))throw He("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");P(this)}}}function $e(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")&&e instanceof ReadableStreamBYOBReader)}function Ue(e,t,r){const n=e._ownerReadableStream;n._disturbed=!0,"errored"===n._state?r._errorSteps(n._storedError):function(e,t,r){const n=e._controlledReadableByteStream;let o=1;t.constructor!==DataView&&(o=t.constructor.BYTES_PER_ELEMENT);const s=t.constructor,i=t.buffer,a={buffer:i,bufferByteLength:i.byteLength,byteOffset:t.byteOffset,byteLength:t.byteLength,bytesFilled:0,elementSize:o,viewConstructor:s,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(a),void Me(n,r);if("closed"!==n._state){if(e._queueTotalSize>0){if(ve(e,a)){const t=ge(a);return Se(e),void r._chunkSteps(t)}if(e._closeRequested){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");return je(e,t),void r._errorSteps(t)}}e._pendingPullIntos.push(a),Me(n,r),be(e)}else{const e=new s(a.buffer,a.byteOffset,0);r._closeSteps(e)}}(n._readableStreamController,t,r)}function He(e){return new TypeError(`ReadableStreamBYOBReader.prototype.${e} can only be used on a ReadableStreamBYOBReader`)}function Ne(e,t){const{highWaterMark:r}=e;if(void 0===r)return t;if(se(r)||r<0)throw new RangeError("Invalid highWaterMark");return r}function Ve(e){const{size:t}=e;return t||(()=>1)}function Qe(e,t){F(e,t);const r=null==e?void 0:e.highWaterMark,n=null==e?void 0:e.size;return{highWaterMark:void 0===r?void 0:U(r),size:void 0===n?void 0:Ye(n,`${t} has member 'size' that`)}}function Ye(e,t){return M(e,t),t=>U(e(t))}function Ge(e,t,r){return M(e,r),r=>R(e,t,[r])}function Je(e,t,r){return M(e,r),()=>R(e,t,[])}function Ke(e,t,r){return M(e,r),r=>S(e,t,[r])}function Ze(e,t,r){return M(e,r),(r,n)=>R(e,t,[r,n])}function Xe(e,t){if(!nt(e))throw new TypeError(`${t} is not a WritableStream.`)}Object.defineProperties(ReadableStreamBYOBReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(ReadableStreamBYOBReader.prototype,n.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});const et="function"==typeof AbortController;class WritableStream{constructor(e={},t={}){void 0===e?e=null:I(e,"First parameter");const r=Qe(t,"Second parameter"),n=function(e,t){F(e,t);const r=null==e?void 0:e.abort,n=null==e?void 0:e.close,o=null==e?void 0:e.start,s=null==e?void 0:e.type,i=null==e?void 0:e.write;return{abort:void 0===r?void 0:Ge(r,e,`${t} has member 'abort' that`),close:void 0===n?void 0:Je(n,e,`${t} has member 'close' that`),start:void 0===o?void 0:Ke(o,e,`${t} has member 'start' that`),write:void 0===i?void 0:Ze(i,e,`${t} has member 'write' that`),type:s}}(e,"First parameter");rt(this);if(void 0!==n.type)throw new RangeError("Invalid type is specified");const o=Ve(r);!function(e,t,r,n){const o=Object.create(WritableStreamDefaultController.prototype);let s=()=>{},i=()=>p(void 0),a=()=>p(void 0),u=()=>p(void 0);void 0!==t.start&&(s=()=>t.start(o));void 0!==t.write&&(i=e=>t.write(e,o));void 0!==t.close&&(a=()=>t.close());void 0!==t.abort&&(u=e=>t.abort(e));wt(e,o,s,i,a,u,r,n)}(this,n,Ne(r,1),o)}get locked(){if(!nt(this))throw Et("locked");return ot(this)}abort(e){return nt(this)?ot(this)?h(new TypeError("Cannot abort a stream that already has a writer")):st(this,e):h(Et("abort"))}close(){return nt(this)?ot(this)?h(new TypeError("Cannot close a stream that already has a writer")):ct(this)?h(new TypeError("Cannot close an already-closing stream")):it(this):h(Et("close"))}getWriter(){if(!nt(this))throw Et("getWriter");return tt(this)}}function tt(e){return new WritableStreamDefaultWriter(e)}function rt(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new SimpleQueue,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function nt(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")&&e instanceof WritableStream)}function ot(e){return void 0!==e._writer}function st(e,t){var r;if("closed"===e._state||"errored"===e._state)return p(void 0);e._writableStreamController._abortReason=t,null===(r=e._writableStreamController._abortController)||void 0===r||r.abort();const n=e._state;if("closed"===n||"errored"===n)return p(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;let o=!1;"erroring"===n&&(o=!0,t=void 0);const s=f(((r,n)=>{e._pendingAbortRequest={_promise:void 0,_resolve:r,_reject:n,_reason:t,_wasAlreadyErroring:o}}));return e._pendingAbortRequest._promise=s,o||ut(e,t),s}function it(e){const t=e._state;if("closed"===t||"errored"===t)return h(new TypeError(`The stream (in ${t} state) is not in the writable state and cannot be closed`));const r=f(((t,r)=>{const n={_resolve:t,_reject:r};e._closeRequest=n})),n=e._writer;var o;return void 0!==n&&e._backpressure&&"writable"===t&&It(n),de(o=e._writableStreamController,_t,0),Tt(o),r}function at(e,t){"writable"!==e._state?lt(e):ut(e,t)}function ut(e,t){const r=e._writableStreamController;e._state="erroring",e._storedError=t;const n=e._writer;void 0!==n&&yt(n,t),!function(e){if(void 0===e._inFlightWriteRequest&&void 0===e._inFlightCloseRequest)return!1;return!0}(e)&&r._started&<(e)}function lt(e){e._state="errored",e._writableStreamController[B]();const t=e._storedError;if(e._writeRequests.forEach((e=>{e._reject(t)})),e._writeRequests=new SimpleQueue,void 0===e._pendingAbortRequest)return void dt(e);const r=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,r._wasAlreadyErroring)return r._reject(t),void dt(e);y(e._writableStreamController[k](r._reason),(()=>{r._resolve(),dt(e)}),(t=>{r._reject(t),dt(e)}))}function ct(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function dt(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);const t=e._writer;void 0!==t&&Dt(t,e._storedError)}function ft(e,t){const r=e._writer;void 0!==r&&t!==e._backpressure&&(t?function(e){xt(e)}(r):It(r)),e._backpressure=t}Object.defineProperties(WritableStream.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(WritableStream.prototype,n.toStringTag,{value:"WritableStream",configurable:!0});class WritableStreamDefaultWriter{constructor(e){if(z(e,1,"WritableStreamDefaultWriter"),Xe(e,"First parameter"),ot(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;const t=e._state;if("writable"===t)!ct(e)&&e._backpressure?xt(this):Ft(this),kt(this);else if("erroring"===t)Lt(this,e._storedError),kt(this);else if("closed"===t)Ft(this),kt(r=this),Wt(r);else{const t=e._storedError;Lt(this,t),Bt(this,t)}var r}get closed(){return pt(this)?this._closedPromise:h(jt("closed"))}get desiredSize(){if(!pt(this))throw jt("desiredSize");if(void 0===this._ownerWritableStream)throw At("desiredSize");return function(e){const t=e._ownerWritableStream,r=t._state;if("errored"===r||"erroring"===r)return null;if("closed"===r)return 0;return Rt(t._writableStreamController)}(this)}get ready(){return pt(this)?this._readyPromise:h(jt("ready"))}abort(e){return pt(this)?void 0===this._ownerWritableStream?h(At("abort")):function(e,t){return st(e._ownerWritableStream,t)}(this,e):h(jt("abort"))}close(){if(!pt(this))return h(jt("close"));const e=this._ownerWritableStream;return void 0===e?h(At("close")):ct(e)?h(new TypeError("Cannot close an already-closing stream")):ht(this)}releaseLock(){if(!pt(this))throw jt("releaseLock");void 0!==this._ownerWritableStream&&mt(this)}write(e){return pt(this)?void 0===this._ownerWritableStream?h(At("write to")):gt(this,e):h(jt("write"))}}function pt(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")&&e instanceof WritableStreamDefaultWriter)}function ht(e){return it(e._ownerWritableStream)}function bt(e,t){"pending"===e._closedPromiseState?Dt(e,t):function(e,t){Bt(e,t)}(e,t)}function yt(e,t){"pending"===e._readyPromiseState?Mt(e,t):function(e,t){Lt(e,t)}(e,t)}function mt(e){const t=e._ownerWritableStream,r=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");yt(e,r),bt(e,r),t._writer=void 0,e._ownerWritableStream=void 0}function gt(e,t){const r=e._ownerWritableStream,n=r._writableStreamController,o=function(e,t){try{return e._strategySizeAlgorithm(t)}catch(t){return qt(e,t),1}}(n,t);if(r!==e._ownerWritableStream)return h(At("write to"));const s=r._state;if("errored"===s)return h(r._storedError);if(ct(r)||"closed"===s)return h(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===s)return h(r._storedError);const i=function(e){return f(((t,r)=>{const n={_resolve:t,_reject:r};e._writeRequests.push(n)}))}(r);return function(e,t,r){try{de(e,t,r)}catch(t){return void qt(e,t)}const n=e._controlledWritableStream;if(!ct(n)&&"writable"===n._state){ft(n,Pt(e))}Tt(e)}(n,t,o),i}Object.defineProperties(WritableStreamDefaultWriter.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(WritableStreamDefaultWriter.prototype,n.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});const _t={};class WritableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get abortReason(){if(!vt(this))throw Ot("abortReason");return this._abortReason}get signal(){if(!vt(this))throw Ot("signal");if(void 0===this._abortController)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal}error(e){if(!vt(this))throw Ot("error");"writable"===this._controlledWritableStream._state&&Ct(this,e)}[k](e){const t=this._abortAlgorithm(e);return St(this),t}[B](){fe(this)}}function vt(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream")&&e instanceof WritableStreamDefaultController)}function wt(e,t,r,n,o,s,i,a){t._controlledWritableStream=e,e._writableStreamController=t,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._abortReason=void 0,t._abortController=function(){if(et)return new AbortController}(),t._started=!1,t._strategySizeAlgorithm=a,t._strategyHWM=i,t._writeAlgorithm=n,t._closeAlgorithm=o,t._abortAlgorithm=s;const u=Pt(t);ft(e,u);y(p(r()),(()=>{t._started=!0,Tt(t)}),(r=>{t._started=!0,at(e,r)}))}function St(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Rt(e){return e._strategyHWM-e._queueTotalSize}function Tt(e){const t=e._controlledWritableStream;if(!e._started)return;if(void 0!==t._inFlightWriteRequest)return;if("erroring"===t._state)return void lt(t);if(0===e._queue.length)return;const r=e._queue.peek().value;r===_t?function(e){const t=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(t),ce(e);const r=e._closeAlgorithm();St(e),y(r,(()=>{!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";const t=e._writer;void 0!==t&&Wt(t)}(t)}),(e=>{!function(e,t){e._inFlightCloseRequest._reject(t),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(t),e._pendingAbortRequest=void 0),at(e,t)}(t,e)}))}(e):function(e,t){const r=e._controlledWritableStream;!function(e){e._inFlightWriteRequest=e._writeRequests.shift()}(r);y(e._writeAlgorithm(t),(()=>{!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(r);const t=r._state;if(ce(e),!ct(r)&&"writable"===t){const t=Pt(e);ft(r,t)}Tt(e)}),(t=>{"writable"===r._state&&St(e),function(e,t){e._inFlightWriteRequest._reject(t),e._inFlightWriteRequest=void 0,at(e,t)}(r,t)}))}(e,r)}function qt(e,t){"writable"===e._controlledWritableStream._state&&Ct(e,t)}function Pt(e){return Rt(e)<=0}function Ct(e,t){const r=e._controlledWritableStream;St(e),ut(r,t)}function Et(e){return new TypeError(`WritableStream.prototype.${e} can only be used on a WritableStream`)}function Ot(e){return new TypeError(`WritableStreamDefaultController.prototype.${e} can only be used on a WritableStreamDefaultController`)}function jt(e){return new TypeError(`WritableStreamDefaultWriter.prototype.${e} can only be used on a WritableStreamDefaultWriter`)}function At(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function kt(e){e._closedPromise=f(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r,e._closedPromiseState="pending"}))}function Bt(e,t){kt(e),Dt(e,t)}function Dt(e,t){void 0!==e._closedPromise_reject&&(v(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function Wt(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function xt(e){e._readyPromise=f(((t,r)=>{e._readyPromise_resolve=t,e._readyPromise_reject=r})),e._readyPromiseState="pending"}function Lt(e,t){xt(e),Mt(e,t)}function Ft(e){xt(e),It(e)}function Mt(e,t){void 0!==e._readyPromise_reject&&(v(e._readyPromise),e._readyPromise_reject(t),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function It(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(WritableStreamDefaultController.prototype,{abortReason:{enumerable:!0},signal:{enumerable:!0},error:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(WritableStreamDefaultController.prototype,n.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});const zt="undefined"!=typeof DOMException?DOMException:void 0;const $t=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(zt)?zt:function(){const e=function(e,t){this.message=e||"",this.name=t||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return e.prototype=Object.create(Error.prototype),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,configurable:!0}),e}();function Ut(e,t,r,n,s,i){const a=Q(e),u=tt(t);e._disturbed=!0;let l=!1,c=p(void 0);return f(((d,_)=>{let w;if(void 0!==i){if(w=()=>{const r=new $t("Aborted","AbortError"),o=[];n||o.push((()=>"writable"===t._state?st(t,r):p(void 0))),s||o.push((()=>"readable"===e._state?pr(e,r):p(void 0))),E((()=>Promise.all(o.map((e=>e())))),!0,r)},i.aborted)return void w();i.addEventListener("abort",w)}var S,R,T;if(C(e,a._closedPromise,(e=>{n?O(!0,e):E((()=>st(t,e)),!0,e)})),C(t,u._closedPromise,(t=>{s?O(!0,t):E((()=>pr(e,t)),!0,t)})),S=e,R=a._closedPromise,T=()=>{r?O():E((()=>function(e){const t=e._ownerWritableStream,r=t._state;return ct(t)||"closed"===r?p(void 0):"errored"===r?h(t._storedError):ht(e)}(u)))},"closed"===S._state?T():m(R,T),ct(t)||"closed"===t._state){const t=new TypeError("the destination writable stream closed before all data could be piped to it");s?O(!0,t):E((()=>pr(e,t)),!0,t)}function q(){const e=c;return b(c,(()=>e!==c?q():void 0))}function C(e,t,r){"errored"===e._state?r(e._storedError):g(t,r)}function E(e,r,n){function o(){y(e(),(()=>j(r,n)),(e=>j(!0,e)))}l||(l=!0,"writable"!==t._state||ct(t)?o():m(q(),o))}function O(e,r){l||(l=!0,"writable"!==t._state||ct(t)?j(e,r):m(q(),(()=>j(e,r))))}function j(e,t){mt(u),P(a),void 0!==i&&i.removeEventListener("abort",w),e?_(t):d(void 0)}v(f(((e,t)=>{!function r(n){n?e():b(l?p(!0):b(u._readyPromise,(()=>f(((e,t)=>{X(a,{_chunkSteps:t=>{c=b(gt(u,t),void 0,o),e(!1)},_closeSteps:()=>e(!0),_errorSteps:t})})))),r,t)}(!1)})))}))}class ReadableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!Ht(this))throw er("desiredSize");return Kt(this)}close(){if(!Ht(this))throw er("close");if(!Zt(this))throw new TypeError("The stream is not in a state that permits close");Yt(this)}enqueue(e){if(!Ht(this))throw er("enqueue");if(!Zt(this))throw new TypeError("The stream is not in a state that permits enqueue");return Gt(this,e)}error(e){if(!Ht(this))throw er("error");Jt(this,e)}[D](e){fe(this);const t=this._cancelAlgorithm(e);return Qt(this),t}[W](e){const t=this._controlledReadableStream;if(this._queue.length>0){const r=ce(this);this._closeRequested&&0===this._queue.length?(Qt(this),hr(t)):Nt(this),e._chunkSteps(r)}else Y(t,e),Nt(this)}}function Ht(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")&&e instanceof ReadableStreamDefaultController)}function Nt(e){if(!Vt(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;y(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,Nt(e))}),(t=>{Jt(e,t)}))}function Vt(e){const t=e._controlledReadableStream;if(!Zt(e))return!1;if(!e._started)return!1;if(fr(t)&&J(t)>0)return!0;return Kt(e)>0}function Qt(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Yt(e){if(!Zt(e))return;const t=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(Qt(e),hr(t))}function Gt(e,t){if(!Zt(e))return;const r=e._controlledReadableStream;if(fr(r)&&J(r)>0)G(r,t,!1);else{let r;try{r=e._strategySizeAlgorithm(t)}catch(t){throw Jt(e,t),t}try{de(e,t,r)}catch(t){throw Jt(e,t),t}}Nt(e)}function Jt(e,t){const r=e._controlledReadableStream;"readable"===r._state&&(fe(e),Qt(e),br(r,t))}function Kt(e){const t=e._controlledReadableStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function Zt(e){const t=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===t}function Xt(e,t,r,n,o,s,i){t._controlledReadableStream=e,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._started=!1,t._closeRequested=!1,t._pullAgain=!1,t._pulling=!1,t._strategySizeAlgorithm=i,t._strategyHWM=s,t._pullAlgorithm=n,t._cancelAlgorithm=o,e._readableStreamController=t;y(p(r()),(()=>{t._started=!0,Nt(t)}),(e=>{Jt(t,e)}))}function er(e){return new TypeError(`ReadableStreamDefaultController.prototype.${e} can only be used on a ReadableStreamDefaultController`)}function tr(e,t){return pe(e._readableStreamController)?function(e){let t,r,n,o,s,i=Q(e),a=!1,u=!1,l=!1,c=!1,d=!1;const h=f((e=>{s=e}));function b(e){g(e._closedPromise,(t=>{e===i&&(je(n._readableStreamController,t),je(o._readableStreamController,t),c&&d||s(void 0))}))}function y(){$e(i)&&(P(i),i=Q(e),b(i));X(i,{_chunkSteps:t=>{w((()=>{u=!1,l=!1;const r=t;let i=t;if(!c&&!d)try{i=le(t)}catch(t){return je(n._readableStreamController,t),je(o._readableStreamController,t),void s(pr(e,t))}c||Oe(n._readableStreamController,r),d||Oe(o._readableStreamController,i),a=!1,u?_():l&&v()}))},_closeSteps:()=>{a=!1,c||Ee(n._readableStreamController),d||Ee(o._readableStreamController),n._readableStreamController._pendingPullIntos.length>0&&Be(n._readableStreamController,0),o._readableStreamController._pendingPullIntos.length>0&&Be(o._readableStreamController,0),c&&d||s(void 0)},_errorSteps:()=>{a=!1}})}function m(t,r){Z(i)&&(P(i),i=Fe(e),b(i));const f=r?o:n,p=r?n:o;Ue(i,t,{_chunkSteps:t=>{w((()=>{u=!1,l=!1;const n=r?d:c;if(r?c:d)n||De(f._readableStreamController,t);else{let r;try{r=le(t)}catch(t){return je(f._readableStreamController,t),je(p._readableStreamController,t),void s(pr(e,t))}n||De(f._readableStreamController,t),Oe(p._readableStreamController,r)}a=!1,u?_():l&&v()}))},_closeSteps:e=>{a=!1;const t=r?d:c,n=r?c:d;t||Ee(f._readableStreamController),n||Ee(p._readableStreamController),void 0!==e&&(t||De(f._readableStreamController,e),!n&&p._readableStreamController._pendingPullIntos.length>0&&Be(p._readableStreamController,0)),t&&n||s(void 0)},_errorSteps:()=>{a=!1}})}function _(){if(a)return u=!0,p(void 0);a=!0;const e=Ae(n._readableStreamController);return null===e?y():m(e._view,!1),p(void 0)}function v(){if(a)return l=!0,p(void 0);a=!0;const e=Ae(o._readableStreamController);return null===e?y():m(e._view,!0),p(void 0)}function S(n){if(c=!0,t=n,d){const n=ie([t,r]),o=pr(e,n);s(o)}return h}function R(n){if(d=!0,r=n,c){const n=ie([t,r]),o=pr(e,n);s(o)}return h}function T(){}return n=lr(T,_,S),o=lr(T,v,R),b(i),[n,o]}(e):function(e,t){const r=Q(e);let n,o,s,i,a,u=!1,l=!1,c=!1,d=!1;const h=f((e=>{a=e}));function b(){if(u)return l=!0,p(void 0);u=!0;return X(r,{_chunkSteps:e=>{w((()=>{l=!1;const t=e,r=e;c||Gt(s._readableStreamController,t),d||Gt(i._readableStreamController,r),u=!1,l&&b()}))},_closeSteps:()=>{u=!1,c||Yt(s._readableStreamController),d||Yt(i._readableStreamController),c&&d||a(void 0)},_errorSteps:()=>{u=!1}}),p(void 0)}function y(t){if(c=!0,n=t,d){const t=ie([n,o]),r=pr(e,t);a(r)}return h}function m(t){if(d=!0,o=t,c){const t=ie([n,o]),r=pr(e,t);a(r)}return h}function _(){}return s=ur(_,b,y),i=ur(_,b,m),g(r._closedPromise,(e=>{Jt(s._readableStreamController,e),Jt(i._readableStreamController,e),c&&d||a(void 0)})),[s,i]}(e)}function rr(e,t,r){return M(e,r),r=>R(e,t,[r])}function nr(e,t,r){return M(e,r),r=>R(e,t,[r])}function or(e,t,r){return M(e,r),r=>S(e,t,[r])}function sr(e,t){if("bytes"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamType`);return e}function ir(e,t){if("byob"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamReaderMode`);return e}function ar(e,t){F(e,t);const r=null==e?void 0:e.preventAbort,n=null==e?void 0:e.preventCancel,o=null==e?void 0:e.preventClose,s=null==e?void 0:e.signal;return void 0!==s&&function(e,t){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(`${t} is not an AbortSignal.`)}(s,`${t} has member 'signal' that`),{preventAbort:Boolean(r),preventCancel:Boolean(n),preventClose:Boolean(o),signal:s}}Object.defineProperties(ReadableStreamDefaultController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(ReadableStreamDefaultController.prototype,n.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});class ReadableStream{constructor(e={},t={}){void 0===e?e=null:I(e,"First parameter");const r=Qe(t,"Second parameter"),n=function(e,t){F(e,t);const r=e,n=null==r?void 0:r.autoAllocateChunkSize,o=null==r?void 0:r.cancel,s=null==r?void 0:r.pull,i=null==r?void 0:r.start,a=null==r?void 0:r.type;return{autoAllocateChunkSize:void 0===n?void 0:N(n,`${t} has member 'autoAllocateChunkSize' that`),cancel:void 0===o?void 0:rr(o,r,`${t} has member 'cancel' that`),pull:void 0===s?void 0:nr(s,r,`${t} has member 'pull' that`),start:void 0===i?void 0:or(i,r,`${t} has member 'start' that`),type:void 0===a?void 0:sr(a,`${t} has member 'type' that`)}}(e,"First parameter");if(cr(this),"bytes"===n.type){if(void 0!==r.size)throw new RangeError("The strategy for a byte stream cannot have a size function");!function(e,t,r){const n=Object.create(ReadableByteStreamController.prototype);let o=()=>{},s=()=>p(void 0),i=()=>p(void 0);void 0!==t.start&&(o=()=>t.start(n)),void 0!==t.pull&&(s=()=>t.pull(n)),void 0!==t.cancel&&(i=e=>t.cancel(e));const a=t.autoAllocateChunkSize;if(0===a)throw new TypeError("autoAllocateChunkSize must be greater than 0");We(e,n,o,s,i,r,a)}(this,n,Ne(r,0))}else{const e=Ve(r);!function(e,t,r,n){const o=Object.create(ReadableStreamDefaultController.prototype);let s=()=>{},i=()=>p(void 0),a=()=>p(void 0);void 0!==t.start&&(s=()=>t.start(o)),void 0!==t.pull&&(i=()=>t.pull(o)),void 0!==t.cancel&&(a=e=>t.cancel(e)),Xt(e,o,s,i,a,r,n)}(this,n,Ne(r,1),e)}}get locked(){if(!dr(this))throw yr("locked");return fr(this)}cancel(e){return dr(this)?fr(this)?h(new TypeError("Cannot cancel a stream that already has a reader")):pr(this,e):h(yr("cancel"))}getReader(e){if(!dr(this))throw yr("getReader");return void 0===function(e,t){F(e,t);const r=null==e?void 0:e.mode;return{mode:void 0===r?void 0:ir(r,`${t} has member 'mode' that`)}}(e,"First parameter").mode?Q(this):Fe(this)}pipeThrough(e,t={}){if(!dr(this))throw yr("pipeThrough");z(e,1,"pipeThrough");const r=function(e,t){F(e,t);const r=null==e?void 0:e.readable;$(r,"readable","ReadableWritablePair"),V(r,`${t} has member 'readable' that`);const n=null==e?void 0:e.writable;return $(n,"writable","ReadableWritablePair"),Xe(n,`${t} has member 'writable' that`),{readable:r,writable:n}}(e,"First parameter"),n=ar(t,"Second parameter");if(fr(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(ot(r.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return v(Ut(this,r.writable,n.preventClose,n.preventAbort,n.preventCancel,n.signal)),r.readable}pipeTo(e,t={}){if(!dr(this))return h(yr("pipeTo"));if(void 0===e)return h("Parameter 1 is required in 'pipeTo'.");if(!nt(e))return h(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let r;try{r=ar(t,"Second parameter")}catch(e){return h(e)}return fr(this)?h(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):ot(e)?h(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):Ut(this,e,r.preventClose,r.preventAbort,r.preventCancel,r.signal)}tee(){if(!dr(this))throw yr("tee");return ie(tr(this))}values(e){if(!dr(this))throw yr("values");return function(e,t){const r=Q(e),n=new ReadableStreamAsyncIteratorImpl(r,t),o=Object.create(re);return o._asyncIteratorImpl=n,o}(this,function(e,t){F(e,t);const r=null==e?void 0:e.preventCancel;return{preventCancel:Boolean(r)}}(e,"First parameter").preventCancel)}}function ur(e,t,r,n=1,o=(()=>1)){const s=Object.create(ReadableStream.prototype);cr(s);return Xt(s,Object.create(ReadableStreamDefaultController.prototype),e,t,r,n,o),s}function lr(e,t,r){const n=Object.create(ReadableStream.prototype);cr(n);return We(n,Object.create(ReadableByteStreamController.prototype),e,t,r,0,void 0),n}function cr(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function dr(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")&&e instanceof ReadableStream)}function fr(e){return void 0!==e._reader}function pr(e,t){if(e._disturbed=!0,"closed"===e._state)return p(void 0);if("errored"===e._state)return h(e._storedError);hr(e);const r=e._reader;void 0!==r&&$e(r)&&(r._readIntoRequests.forEach((e=>{e._closeSteps(void 0)})),r._readIntoRequests=new SimpleQueue);return _(e._readableStreamController[D](t),o)}function hr(e){e._state="closed";const t=e._reader;void 0!==t&&(A(t),Z(t)&&(t._readRequests.forEach((e=>{e._closeSteps()})),t._readRequests=new SimpleQueue))}function br(e,t){e._state="errored",e._storedError=t;const r=e._reader;void 0!==r&&(j(r,t),Z(r)?(r._readRequests.forEach((e=>{e._errorSteps(t)})),r._readRequests=new SimpleQueue):(r._readIntoRequests.forEach((e=>{e._errorSteps(t)})),r._readIntoRequests=new SimpleQueue))}function yr(e){return new TypeError(`ReadableStream.prototype.${e} can only be used on a ReadableStream`)}function mr(e,t){F(e,t);const r=null==e?void 0:e.highWaterMark;return $(r,"highWaterMark","QueuingStrategyInit"),{highWaterMark:U(r)}}Object.defineProperties(ReadableStream.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(ReadableStream.prototype,n.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof n.asyncIterator&&Object.defineProperty(ReadableStream.prototype,n.asyncIterator,{value:ReadableStream.prototype.values,writable:!0,configurable:!0});const gr=e=>e.byteLength;Object.defineProperty(gr,"name",{value:"size",configurable:!0});class ByteLengthQueuingStrategy{constructor(e){z(e,1,"ByteLengthQueuingStrategy"),e=mr(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!vr(this))throw _r("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!vr(this))throw _r("size");return gr}}function _r(e){return new TypeError(`ByteLengthQueuingStrategy.prototype.${e} can only be used on a ByteLengthQueuingStrategy`)}function vr(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")&&e instanceof ByteLengthQueuingStrategy)}Object.defineProperties(ByteLengthQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(ByteLengthQueuingStrategy.prototype,n.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});const wr=()=>1;Object.defineProperty(wr,"name",{value:"size",configurable:!0});class CountQueuingStrategy{constructor(e){z(e,1,"CountQueuingStrategy"),e=mr(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Rr(this))throw Sr("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!Rr(this))throw Sr("size");return wr}}function Sr(e){return new TypeError(`CountQueuingStrategy.prototype.${e} can only be used on a CountQueuingStrategy`)}function Rr(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")&&e instanceof CountQueuingStrategy)}function Tr(e,t,r){return M(e,r),r=>R(e,t,[r])}function qr(e,t,r){return M(e,r),r=>S(e,t,[r])}function Pr(e,t,r){return M(e,r),(r,n)=>R(e,t,[r,n])}Object.defineProperties(CountQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(CountQueuingStrategy.prototype,n.toStringTag,{value:"CountQueuingStrategy",configurable:!0});class TransformStream{constructor(e={},t={},r={}){void 0===e&&(e=null);const n=Qe(t,"Second parameter"),o=Qe(r,"Third parameter"),s=function(e,t){F(e,t);const r=null==e?void 0:e.flush,n=null==e?void 0:e.readableType,o=null==e?void 0:e.start,s=null==e?void 0:e.transform,i=null==e?void 0:e.writableType;return{flush:void 0===r?void 0:Tr(r,e,`${t} has member 'flush' that`),readableType:n,start:void 0===o?void 0:qr(o,e,`${t} has member 'start' that`),transform:void 0===s?void 0:Pr(s,e,`${t} has member 'transform' that`),writableType:i}}(e,"First parameter");if(void 0!==s.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==s.writableType)throw new RangeError("Invalid writableType specified");const i=Ne(o,0),a=Ve(o),u=Ne(n,1),l=Ve(n);let c;!function(e,t,r,n,o,s){function i(){return t}function a(t){return function(e,t){const r=e._transformStreamController;if(e._backpressure){return _(e._backpressureChangePromise,(()=>{const n=e._writable;if("erroring"===n._state)throw n._storedError;return Dr(r,t)}))}return Dr(r,t)}(e,t)}function u(t){return function(e,t){return Er(e,t),p(void 0)}(e,t)}function l(){return function(e){const t=e._readable,r=e._transformStreamController,n=r._flushAlgorithm();return kr(r),_(n,(()=>{if("errored"===t._state)throw t._storedError;Yt(t._readableStreamController)}),(r=>{throw Er(e,r),t._storedError}))}(e)}function c(){return function(e){return jr(e,!1),e._backpressureChangePromise}(e)}function d(t){return Or(e,t),p(void 0)}e._writable=function(e,t,r,n,o=1,s=(()=>1)){const i=Object.create(WritableStream.prototype);return rt(i),wt(i,Object.create(WritableStreamDefaultController.prototype),e,t,r,n,o,s),i}(i,a,l,u,r,n),e._readable=ur(i,c,d,o,s),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,jr(e,!0),e._transformStreamController=void 0}(this,f((e=>{c=e})),u,l,i,a),function(e,t){const r=Object.create(TransformStreamDefaultController.prototype);let n=e=>{try{return Br(r,e),p(void 0)}catch(e){return h(e)}},o=()=>p(void 0);void 0!==t.transform&&(n=e=>t.transform(e,r));void 0!==t.flush&&(o=()=>t.flush(r));!function(e,t,r,n){t._controlledTransformStream=e,e._transformStreamController=t,t._transformAlgorithm=r,t._flushAlgorithm=n}(e,r,n,o)}(this,s),void 0!==s.start?c(s.start(this._transformStreamController)):c(void 0)}get readable(){if(!Cr(this))throw xr("readable");return this._readable}get writable(){if(!Cr(this))throw xr("writable");return this._writable}}function Cr(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")&&e instanceof TransformStream)}function Er(e,t){Jt(e._readable._readableStreamController,t),Or(e,t)}function Or(e,t){kr(e._transformStreamController),qt(e._writable._writableStreamController,t),e._backpressure&&jr(e,!1)}function jr(e,t){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=f((t=>{e._backpressureChangePromise_resolve=t})),e._backpressure=t}Object.defineProperties(TransformStream.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(TransformStream.prototype,n.toStringTag,{value:"TransformStream",configurable:!0});class TransformStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!Ar(this))throw Wr("desiredSize");return Kt(this._controlledTransformStream._readable._readableStreamController)}enqueue(e){if(!Ar(this))throw Wr("enqueue");Br(this,e)}error(e){if(!Ar(this))throw Wr("error");var t;t=e,Er(this._controlledTransformStream,t)}terminate(){if(!Ar(this))throw Wr("terminate");!function(e){const t=e._controlledTransformStream;Yt(t._readable._readableStreamController);const r=new TypeError("TransformStream terminated");Or(t,r)}(this)}}function Ar(e){return!!i(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")&&e instanceof TransformStreamDefaultController)}function kr(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function Br(e,t){const r=e._controlledTransformStream,n=r._readable._readableStreamController;if(!Zt(n))throw new TypeError("Readable side is not in a state that permits enqueue");try{Gt(n,t)}catch(e){throw Or(r,e),r._readable._storedError}const o=function(e){return!Vt(e)}(n);o!==r._backpressure&&jr(r,!0)}function Dr(e,t){return _(e._transformAlgorithm(t),void 0,(t=>{throw Er(e._controlledTransformStream,t),t}))}function Wr(e){return new TypeError(`TransformStreamDefaultController.prototype.${e} can only be used on a TransformStreamDefaultController`)}function xr(e){return new TypeError(`TransformStream.prototype.${e} can only be used on a TransformStream`)}Object.defineProperties(TransformStreamDefaultController.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(TransformStreamDefaultController.prototype,n.toStringTag,{value:"TransformStreamDefaultController",configurable:!0})}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var s=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(s.exports,s,s.exports,r),s.loaded=!0,s.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var n=r(175);return n=n.default})()}));
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Y2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2Fib3J0LWNvbnRyb2xsZXIvZGlzdC9hYm9ydC1jb250cm9sbGVyLmpzIiwid2VicGFjazovL21haWxndW4vLi9saWIvY2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvZG9tYWlucy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2RvbWFpbnNDcmVkZW50aWFscy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2RvbWFpbnNUYWdzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvZG9tYWluc1RlbXBsYXRlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2Vycm9yLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvZXZlbnRzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvZm9ybURhdGFCdWlsZGVyLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9pbnRlcmZhY2VzL1N1cHJlc3Npb25zLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvaXAtcG9vbHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9pcHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9saXN0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL21haWxMaXN0TWVtYmVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL21lc3NhZ2VzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvbXVsdGlwbGVWYWxpZGF0aW9uLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL3JvdXRlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL3N0YXRzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvc3VwcHJlc3Npb25zLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvdmFsaWRhdGUudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi93ZWJob29rcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2Jhc2UtNjQvYmFzZTY0LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZGF0YS11cmktdG8tYnVmZmVyL2Rpc3Qvc3JjL2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0vZGlzdC9ldmVudC10YXJnZXQtc2hpbS5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2ZldGNoLWJsb2IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9reS11bml2ZXJzYWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9reS91bWQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cFwiIiwid2VicGFjazovL21haWxndW4vZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImh0dHBzXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidXJsXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidXRpbFwiIiwid2VicGFjazovL21haWxndW4vZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInpsaWJcIiIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL25vZGUtZmV0Y2gvZGlzdC9pbmRleC5janMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy93ZWItc3RyZWFtcy1wb2x5ZmlsbC9kaXN0L3BvbnlmaWxsLmVzMjAxOC5tanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vbWFpbGd1bi93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL21haWxndW4vd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJtYWlsZ3VuXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm1haWxndW5cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIvKipcbiAqIEBhdXRob3IgVG9ydSBOYWdhc2hpbWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9teXN0aWNhdGVhPlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBldmVudFRhcmdldFNoaW0gPSByZXF1aXJlKCdldmVudC10YXJnZXQtc2hpbScpO1xuXG4vKipcbiAqIFRoZSBzaWduYWwgY2xhc3MuXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jYWJvcnRzaWduYWxcbiAqL1xuY2xhc3MgQWJvcnRTaWduYWwgZXh0ZW5kcyBldmVudFRhcmdldFNoaW0uRXZlbnRUYXJnZXQge1xuICAgIC8qKlxuICAgICAqIEFib3J0U2lnbmFsIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFib3J0U2lnbmFsIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseVwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBgQWJvcnRTaWduYWxgJ3MgYEFib3J0Q29udHJvbGxlcmAgaGFzIHNpZ25hbGVkIHRvIGFib3J0LCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIGNvbnN0IGFib3J0ZWQgPSBhYm9ydGVkRmxhZ3MuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAodHlwZW9mIGFib3J0ZWQgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAndGhpcycgdG8gYmUgYW4gJ0Fib3J0U2lnbmFsJyBvYmplY3QsIGJ1dCBnb3QgJHt0aGlzID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdGhpc31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJvcnRlZDtcbiAgICB9XG59XG5ldmVudFRhcmdldFNoaW0uZGVmaW5lRXZlbnRBdHRyaWJ1dGUoQWJvcnRTaWduYWwucHJvdG90eXBlLCBcImFib3J0XCIpO1xuLyoqXG4gKiBDcmVhdGUgYW4gQWJvcnRTaWduYWwgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVBYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBzaWduYWwgPSBPYmplY3QuY3JlYXRlKEFib3J0U2lnbmFsLnByb3RvdHlwZSk7XG4gICAgZXZlbnRUYXJnZXRTaGltLkV2ZW50VGFyZ2V0LmNhbGwoc2lnbmFsKTtcbiAgICBhYm9ydGVkRmxhZ3Muc2V0KHNpZ25hbCwgZmFsc2UpO1xuICAgIHJldHVybiBzaWduYWw7XG59XG4vKipcbiAqIEFib3J0IGEgZ2l2ZW4gc2lnbmFsLlxuICovXG5mdW5jdGlvbiBhYm9ydFNpZ25hbChzaWduYWwpIHtcbiAgICBpZiAoYWJvcnRlZEZsYWdzLmdldChzaWduYWwpICE9PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFib3J0ZWRGbGFncy5zZXQoc2lnbmFsLCB0cnVlKTtcbiAgICBzaWduYWwuZGlzcGF0Y2hFdmVudCh7IHR5cGU6IFwiYWJvcnRcIiB9KTtcbn1cbi8qKlxuICogQWJvcnRlZCBmbGFnIGZvciBlYWNoIGluc3RhbmNlcy5cbiAqL1xuY29uc3QgYWJvcnRlZEZsYWdzID0gbmV3IFdlYWtNYXAoKTtcbi8vIFByb3BlcnRpZXMgc2hvdWxkIGJlIGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYm9ydFNpZ25hbC5wcm90b3R5cGUsIHtcbiAgICBhYm9ydGVkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbn0pO1xuLy8gYHRvU3RyaW5nKClgIHNob3VsZCByZXR1cm4gYFwiW29iamVjdCBBYm9ydFNpZ25hbF1cImBcbmlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gXCJzeW1ib2xcIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYm9ydFNpZ25hbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBcIkFib3J0U2lnbmFsXCIsXG4gICAgfSk7XG59XG5cbi8qKlxuICogVGhlIEFib3J0Q29udHJvbGxlci5cbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9ydGNvbnRyb2xsZXJcbiAqL1xuY2xhc3MgQWJvcnRDb250cm9sbGVyIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHRoaXMgY29udHJvbGxlci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc2lnbmFscy5zZXQodGhpcywgY3JlYXRlQWJvcnRTaWduYWwoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBBYm9ydFNpZ25hbGAgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBnZXQgc2lnbmFsKCkge1xuICAgICAgICByZXR1cm4gZ2V0U2lnbmFsKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBYm9ydCBhbmQgc2lnbmFsIHRvIGFueSBvYnNlcnZlcnMgdGhhdCB0aGUgYXNzb2NpYXRlZCBhY3Rpdml0eSBpcyB0byBiZSBhYm9ydGVkLlxuICAgICAqL1xuICAgIGFib3J0KCkge1xuICAgICAgICBhYm9ydFNpZ25hbChnZXRTaWduYWwodGhpcykpO1xuICAgIH1cbn1cbi8qKlxuICogQXNzb2NpYXRlZCBzaWduYWxzLlxuICovXG5jb25zdCBzaWduYWxzID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogR2V0IHRoZSBhc3NvY2lhdGVkIHNpZ25hbCBvZiBhIGdpdmVuIGNvbnRyb2xsZXIuXG4gKi9cbmZ1bmN0aW9uIGdldFNpZ25hbChjb250cm9sbGVyKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gc2lnbmFscy5nZXQoY29udHJvbGxlcik7XG4gICAgaWYgKHNpZ25hbCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICd0aGlzJyB0byBiZSBhbiAnQWJvcnRDb250cm9sbGVyJyBvYmplY3QsIGJ1dCBnb3QgJHtjb250cm9sbGVyID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgY29udHJvbGxlcn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25hbDtcbn1cbi8vIFByb3BlcnRpZXMgc2hvdWxkIGJlIGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlLCB7XG4gICAgc2lnbmFsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBhYm9ydDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG59KTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gXCJzeW1ib2xcIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogXCJBYm9ydENvbnRyb2xsZXJcIixcbiAgICB9KTtcbn1cblxuZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7XG5leHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7XG5leHBvcnRzLmRlZmF1bHQgPSBBYm9ydENvbnRyb2xsZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gQWJvcnRDb250cm9sbGVyXG5tb2R1bGUuZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBYm9ydENvbnRyb2xsZXJcbm1vZHVsZS5leHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFib3J0LWNvbnRyb2xsZXIuanMubWFwXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQgT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvT3B0aW9ucyc7XG5pbXBvcnQgeyBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9SZXF1ZXN0T3B0aW9ucyc7XG5cbmltcG9ydCBEb21haW5DbGllbnQgZnJvbSAnLi9kb21haW5zJztcbmltcG9ydCBFdmVudENsaWVudCBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgU3RhdHNDbGllbnQgZnJvbSAnLi9zdGF0cyc7XG5pbXBvcnQgU3VwcHJlc3Npb25DbGllbnQgZnJvbSAnLi9zdXBwcmVzc2lvbnMnO1xuaW1wb3J0IFdlYmhvb2tDbGllbnQgZnJvbSAnLi93ZWJob29rcyc7XG5pbXBvcnQgTWVzc2FnZXNDbGllbnQgZnJvbSAnLi9tZXNzYWdlcyc7XG5pbXBvcnQgUm91dGVzQ2xpZW50IGZyb20gJy4vcm91dGVzJztcbmltcG9ydCBWYWxpZGF0ZUNsaWVudCBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCBJcHNDbGllbnQgZnJvbSAnLi9pcHMnO1xuaW1wb3J0IElwUG9vbHNDbGllbnQgZnJvbSAnLi9pcC1wb29scyc7XG5pbXBvcnQgTGlzdHNDbGllbnQgZnJvbSAnLi9saXN0cyc7XG5pbXBvcnQgTWFpbExpc3RzTWVtYmVycyBmcm9tICcuL21haWxMaXN0TWVtYmVycyc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lGb3JtRGF0YSc7XG5pbXBvcnQgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgZnJvbSAnLi9kb21haW5zQ3JlZGVudGlhbHMnO1xuaW1wb3J0IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCBmcm9tICcuL211bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgRG9tYWluVGVtcGxhdGVzQ2xpZW50IGZyb20gJy4vZG9tYWluc1RlbXBsYXRlcyc7XG5pbXBvcnQgRG9tYWluVGFnc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUYWdzJztcbmltcG9ydCB7IElNYWlsZ3VuQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lNYWlsZ3VuQ2xpZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50IGltcGxlbWVudHMgSU1haWxndW5DbGllbnQge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgcHVibGljIGRvbWFpbnM7XG4gIHB1YmxpYyB3ZWJob29rcztcbiAgcHVibGljIGV2ZW50cztcbiAgcHVibGljIHN0YXRzO1xuICBwdWJsaWMgc3VwcHJlc3Npb25zO1xuICBwdWJsaWMgbWVzc2FnZXM7XG4gIHB1YmxpYyByb3V0ZXM7XG4gIHB1YmxpYyB2YWxpZGF0ZTtcbiAgcHVibGljIGlwcztcbiAgcHVibGljIGlwX3Bvb2xzO1xuICBwdWJsaWMgbGlzdHM7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICBjb25zdCBjb25maWc6IFJlcXVlc3RPcHRpb25zID0geyAuLi5vcHRpb25zIH0gYXMgUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBpZiAoIWNvbmZpZy51cmwpIHtcbiAgICAgIGNvbmZpZy51cmwgPSAnaHR0cHM6Ly9hcGkubWFpbGd1bi5uZXQnO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLnVzZXJuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcInVzZXJuYW1lXCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIFwia2V5XCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5yZXF1ZXN0ID0gbmV3IFJlcXVlc3QoY29uZmlnLCBmb3JtRGF0YSk7XG4gICAgY29uc3QgbWFpbExpc3RzTWVtYmVycyA9IG5ldyBNYWlsTGlzdHNNZW1iZXJzKHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQgPSBuZXcgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5UZW1wbGF0ZXNDbGllbnQgPSBuZXcgRG9tYWluVGVtcGxhdGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGFnc0NsaWVudCA9IG5ldyBEb21haW5UYWdzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50ID0gbmV3IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuXG4gICAgdGhpcy5kb21haW5zID0gbmV3IERvbWFpbkNsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdCxcbiAgICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgICAgZG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgICAgZG9tYWluVGFnc0NsaWVudFxuICAgICk7XG4gICAgdGhpcy53ZWJob29rcyA9IG5ldyBXZWJob29rQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN0YXRzID0gbmV3IFN0YXRzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdXBwcmVzc2lvbnMgPSBuZXcgU3VwcHJlc3Npb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5yb3V0ZXMgPSBuZXcgUm91dGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcHMgPSBuZXcgSXBzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcF9wb29scyA9IG5ldyBJcFBvb2xzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5saXN0cyA9IG5ldyBMaXN0c0NsaWVudCh0aGlzLnJlcXVlc3QsIG1haWxMaXN0c01lbWJlcnMpO1xuICAgIHRoaXMudmFsaWRhdGUgPSBuZXcgVmFsaWRhdGVDbGllbnQodGhpcy5yZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7XG4gIERvbWFpblJlc3BvbnNlRGF0YSxcbiAgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UsXG4gIERvbWFpbnNRdWVyeSxcbiAgRG9tYWluSW5mbyxcbiAgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSxcbiAgRG9tYWluU2hvcnREYXRhLFxuICBETlNSZWNvcmQsXG4gIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlLFxuICBDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMsXG4gIERLSU1BdXRob3JpdHlJbmZvLFxuICBVcGRhdGVkREtJTUF1dGhvcml0eSxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSxcbiAgREtJTVNlbGVjdG9ySW5mbyxcbiAgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlLFxuICBXZWJQcmVmaXhJbmZvLFxuICBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UsXG4gIFJlcGxhY2VtZW50Rm9yUG9vbCxcbiAgTWVzc2FnZVJlc3BvbnNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIERvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIERvbWFpblRyYWNraW5nRGF0YSxcbiAgT3BlblRyYWNraW5nSW5mbyxcbiAgQ2xpY2tUcmFja2luZ0luZm8sXG4gIFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvLFxuICBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlLFxuICBVcGRhdGVkT3BlblRyYWNraW5nXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UcmFja2luZyc7XG5pbXBvcnQgeyBJRG9tYWluQ3JlZGVudGlhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgSURvbWFpblRlbXBsYXRlc0NsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCB7IElEb21haW5UYWdzQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRhZ3MnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9kb21haW5zVGFncyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlcXVpcmVfdGxzOiBib29sZWFuO1xuICBza2lwX3ZlcmlmaWNhdGlvbjogYm9vbGVhbjtcbiAgc3RhdGU6IHN0cmluZztcbiAgd2lsZGNhcmQ6IGJvb2xlYW47XG4gIHNwYW1fYWN0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgc210cF9wYXNzd29yZDogc3RyaW5nO1xuICBzbXRwX2xvZ2luOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcmVjZWl2aW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIHNlbmRpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBEb21haW5TaG9ydERhdGEsIHJlY2VpdmluZz86IEROU1JlY29yZFtdIHwgbnVsbCwgc2VuZGluZz86IEROU1JlY29yZFtdIHwgbnVsbCkge1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLnJlcXVpcmVfdGxzID0gZGF0YS5yZXF1aXJlX3RscztcbiAgICB0aGlzLnNraXBfdmVyaWZpY2F0aW9uID0gZGF0YS5za2lwX3ZlcmlmaWNhdGlvbjtcbiAgICB0aGlzLnN0YXRlID0gZGF0YS5zdGF0ZTtcbiAgICB0aGlzLndpbGRjYXJkID0gZGF0YS53aWxkY2FyZDtcbiAgICB0aGlzLnNwYW1fYWN0aW9uID0gZGF0YS5zcGFtX2FjdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBkYXRhLmNyZWF0ZWRfYXQ7XG4gICAgdGhpcy5zbXRwX3Bhc3N3b3JkID0gZGF0YS5zbXRwX3Bhc3N3b3JkO1xuICAgIHRoaXMuc210cF9sb2dpbiA9IGRhdGEuc210cF9sb2dpbjtcbiAgICB0aGlzLnR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICB0aGlzLnJlY2VpdmluZ19kbnNfcmVjb3JkcyA9IHJlY2VpdmluZyB8fCBudWxsO1xuICAgIHRoaXMuc2VuZGluZ19kbnNfcmVjb3JkcyA9IHNlbmRpbmcgfHwgbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgZG9tYWluQ3JlZGVudGlhbHM6IElEb21haW5DcmVkZW50aWFscztcbiAgcHVibGljIGRvbWFpblRlbXBsYXRlczogSURvbWFpblRlbXBsYXRlc0NsaWVudDtcbiAgcHVibGljIGRvbWFpblRhZ3M6IElEb21haW5UYWdzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ6IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgIGRvbWFpblRlbXBsYXRlc0NsaWVudDogRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgIGRvbWFpblRhZ3NDbGllbnQ6IERvbWFpblRhZ3NDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmRvbWFpbkNyZWRlbnRpYWxzID0gZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UZW1wbGF0ZXMgPSBkb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UYWdzID0gZG9tYWluVGFnc0NsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZShyZXNwb25zZTogRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpIDogTWVzc2FnZVJlc3BvbnNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluTGlzdChyZXNwb25zZTogRG9tYWluTGlzdFJlc3BvbnNlRGF0YSk6IERvbWFpbltdIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBuZXcgRG9tYWluKGl0ZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW4ocmVzcG9uc2U6IERvbWFpblJlc3BvbnNlRGF0YSk6IERvbWFpbiB7XG4gICAgcmV0dXJuIG5ldyBEb21haW4oXG4gICAgICByZXNwb25zZS5ib2R5LmRvbWFpbixcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVjZWl2aW5nX2Ruc19yZWNvcmRzLFxuICAgICAgcmVzcG9uc2UuYm9keS5zZW5kaW5nX2Ruc19yZWNvcmRzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyhyZXNwb25zZTogRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOiBEb21haW5UcmFja2luZ0RhdGEge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LnRyYWNraW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1VwZGF0ZShyZXNwb25zZTogVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOlVwZGF0ZWRPcGVuVHJhY2tpbmcge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgbGlzdChxdWVyeT86IERvbWFpbnNRdWVyeSk6IFByb21pc2U8RG9tYWluW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2RvbWFpbnMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5MaXN0KHJlcyBhcyBEb21haW5MaXN0UmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2RvbWFpbnMvJHtkb21haW59YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IERvbWFpbkluZm8pIDogUHJvbWlzZTxEb21haW4+IHtcbiAgICBjb25zdCBwb3N0T2JqID0geyAuLi5kYXRhIH07XG4gICAgaWYgKCdmb3JjZV9ka2ltX2F1dGhvcml0eScgaW4gcG9zdE9iaiAmJiB0eXBlb2YgcG9zdE9iai5mb3JjZV9ka2ltX2F1dGhvcml0eSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwb3N0T2JqLmZvcmNlX2RraW1fYXV0aG9yaXR5ID0gcG9zdE9iai50b1N0cmluZygpID09PSAndHJ1ZScgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL2RvbWFpbnMnLCBwb3N0T2JqKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICB2ZXJpZnkoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vdmVyaWZ5YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZShyZXMgYXMgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXM6Q29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpID0+IHJlcy5ib2R5LmNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcsIGRhdGE6IENvbm5lY3Rpb25TZXR0aW5ncyk6IFByb21pc2U8VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmAsIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKVxuICAgICAgLnRoZW4oKHJlczpVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIC8vIFRyYWNraW5nXG5cbiAgZ2V0VHJhY2tpbmcoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW5UcmFja2luZ0RhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJykpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVRyYWNraW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlVHJhY2tpbmcoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IE9wZW5UcmFja2luZ0luZm8gfCBDbGlja1RyYWNraW5nSW5mbyB8IFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvXG4gICk6IFByb21pc2U8VXBkYXRlZE9wZW5UcmFja2luZz4ge1xuICAgIGlmICh0eXBlb2YgZGF0YT8uYWN0aXZlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7IHN0YXR1czogNDAwLCBzdGF0dXNUZXh0OiAnUmVjZWl2ZWQgYm9vbGVhbiB2YWx1ZSBmb3IgYWN0aXZlIHByb3BlcnR5JywgYm9keTogeyBtZXNzYWdlOiAnUHJvcGVydHkgXCJhY3RpdmVcIiBtdXN0IGNvbnRhaW4gc3RyaW5nIHZhbHVlLicgfSB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAndHJhY2tpbmcnLCB0eXBlKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUcmFja2luZ1VwZGF0ZShyZXMgYXMgVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkpO1xuICB9XG5cbiAgLy8gSVBzXG5cbiAgZ2V0SXBzKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJykpXG4gICAgICAudGhlbigocmVzcG9uc2U6IEFQSVJlc3BvbnNlKSA9PiByZXNwb25zZT8uYm9keT8uaXRlbXMpO1xuICB9XG5cbiAgYXNzaWduSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJyksIHsgaXAgfSk7XG4gIH1cblxuICBkZWxldGVJcChkb21haW46IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycsIGlwKSk7XG4gIH1cblxuICBsaW5rSXBQb29sKGRvbWFpbjogc3RyaW5nLCBwb29sX2lkOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJyksIHsgcG9vbF9pZCB9KTtcbiAgfVxuXG4gIHVubGlua0lwUG9sbChkb21haW46IHN0cmluZywgcmVwbGFjZW1lbnQ6IFJlcGxhY2VtZW50Rm9yUG9vbCk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gJyc7XG4gICAgaWYgKHJlcGxhY2VtZW50LnBvb2xfaWQgJiYgcmVwbGFjZW1lbnQuaXApIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcihcbiAgICAgICAge1xuICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIHN0YXR1c1RleHQ6ICdUb28gbXVjaCBkYXRhIGZvciByZXBsYWNlbWVudCcsXG4gICAgICAgICAgYm9keTogeyBtZXNzYWdlOiAnUGxlYXNlIHNwZWNpZnkgZWl0aGVyIHBvb2xfaWQgb3IgaXAgKG5vdCBib3RoKScgfVxuICAgICAgICB9IGFzIEFQSUVycm9yT3B0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50LnBvb2xfaWQpIHtcbiAgICAgIHNlYXJjaFBhcmFtcyA9IGA/cG9vbF9pZD0ke3JlcGxhY2VtZW50LnBvb2xfaWR9YDtcbiAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP2lwPSR7cmVwbGFjZW1lbnQuaXB9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnLCAnaXBfcG9vbCcsIHNlYXJjaFBhcmFtcykpO1xuICB9XG5cbiAgdXBkYXRlREtJTUF1dGhvcml0eShkb21haW46IHN0cmluZywgZGF0YTogREtJTUF1dGhvcml0eUluZm8pOiBQcm9taXNlPFVwZGF0ZWRES0lNQXV0aG9yaXR5PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX2F1dGhvcml0eWAsIHt9LCB7IHF1ZXJ5OiBgc2VsZj0ke2RhdGEuc2VsZn1gIH0pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlcyA6IFVwZGF0ZWRES0lNQXV0aG9yaXR5UmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIFVwZGF0ZWRES0lNQXV0aG9yaXR5KTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1TZWxlY3Rvcihkb21haW46IHN0cmluZywgZGF0YTogREtJTVNlbGVjdG9ySW5mbyk6IFByb21pc2U8VXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX3NlbGVjdG9yYCwge30sIHsgcXVlcnk6IGBka2ltX3NlbGVjdG9yPSR7ZGF0YS5ka2ltU2VsZWN0b3J9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlKTtcbiAgfVxuXG4gIHVwZGF0ZVdlYlByZWZpeChkb21haW46IHN0cmluZywgZGF0YTogV2ViUHJlZml4SW5mbyk6IFByb21pc2U8VXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS93ZWJfcHJlZml4YCwge30sIHsgcXVlcnk6IGB3ZWJfcHJlZml4PSR7ZGF0YS53ZWJQcmVmaXh9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2UsXG4gIERlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEb21haW5DcmVkZW50aWFscyxcbiAgRG9tYWluQ3JlZGVudGlhbHNMaXN0LFxuICBEb21haW5DcmVkZW50aWFsc1F1ZXJ5LFxuICBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQsXG4gIElEb21haW5DcmVkZW50aWFscyxcbiAgVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5DcmVkZW50aWFscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGltcGxlbWVudHMgSURvbWFpbkNyZWRlbnRpYWxzIHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzL2RvbWFpbnMvJztcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0KFxuICAgIHJlc3BvbnNlOiBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YVxuICApOiBEb21haW5DcmVkZW50aWFsc0xpc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcmVzcG9uc2UuYm9keS5pdGVtcyxcbiAgICAgIHRvdGFsQ291bnQ6IHJlc3BvbnNlLmJvZHkudG90YWxfY291bnRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VNZXNzYWdlUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6IENyZWF0ZWRVcGRhdGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZVxuICApOiBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2VcbiAgICB9IGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURlbGV0ZWRSZXNwb25zZShcbiAgICByZXNwb25zZTpEZWxldGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZVxuICApOiBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICBzcGVjOiByZXNwb25zZS5ib2R5LnNwZWNcbiAgICB9IGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluQ3JlZGVudGlhbHNRdWVyeSk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL2NyZWRlbnRpYWxzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChyZXMgYXMgRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGEpXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpbkNyZWRlbnRpYWxzXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzYCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2VSZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmcsXG4gICAgZGF0YTogVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHMvJHtjcmVkZW50aWFsc0xvZ2lufWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzTG9naW46IHN0cmluZ1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRGVsZXRlZFJlc3BvbnNlKHJlcykpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgQVBJUmVzcG9uc2UgZnJvbSAnLi9pbnRlcmZhY2VzL0FwaVJlc3BvbnNlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIERvbWFpblRhZ0FQSVJlc3BvbnNlU3RhdHNJdGVtLFxuICBEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnQ291bnRyaWVzQVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnRGV2aWNlc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnUHJvdmlkZXJzQVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ3NJdGVtLFxuICBEb21haW5UYWdzSXRlbUluZm8sXG4gIERvbWFpblRhZ3NMaXN0LFxuICBEb21haW5UYWdzTWVzc2FnZVJlcyxcbiAgRG9tYWluVGFnc1F1ZXJ5LFxuICBEb21haW5UYWdzUmVzcG9uc2VEYXRhLFxuICBEb21haW5UYWdzU3RhdGlzdGljUXVlcnksXG4gIERvbWFpblRhZ1N0YXRBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnU3RhdGlzdGljSXRlbSxcbiAgRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0LFxuICBJRG9tYWluVGFnc0NsaWVudCxcbiAgUGFnZXNMaXN0LFxuICBQYWdlc0xpc3RBY2N1bXVsYXRvcixcbiAgUGFyc2VkUGFnZXNMaXN0LFxuICBSZXNvbHV0aW9uXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UYWdzJztcblxuZXhwb3J0IGNsYXNzIERvbWFpblRhZyBpbXBsZW1lbnRzIERvbWFpblRhZ3NJdGVtIHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICdmaXJzdC1zZWVuJzogRGF0ZTtcbiAgJ2xhc3Qtc2Vlbic6IERhdGU7XG5cbiAgY29uc3RydWN0b3IodGFnSW5mbzogRG9tYWluVGFnc0l0ZW1JbmZvKSB7XG4gICAgdGhpcy50YWcgPSB0YWdJbmZvLnRhZztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGFnSW5mby5kZXNjcmlwdGlvbjtcbiAgICB0aGlzWydmaXJzdC1zZWVuJ10gPSBuZXcgRGF0ZSh0YWdJbmZvWydmaXJzdC1zZWVuJ10pO1xuICAgIHRoaXNbJ2xhc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snbGFzdC1zZWVuJ10pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWdTdGF0aXN0aWMgaW1wbGVtZW50cyBEb21haW5UYWdTdGF0aXN0aWNSZXN1bHQge1xuICB0YWc6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgcmVzb2x1dGlvbjogUmVzb2x1dGlvbjtcbiAgc3RhdHM6IERvbWFpblRhZ1N0YXRpc3RpY0l0ZW1bXTtcblxuICBjb25zdHJ1Y3Rvcih0YWdTdGF0aXN0aWNJbmZvOiBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2UpIHtcbiAgICB0aGlzLnRhZyA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS50YWc7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnN0YXJ0ID0gbmV3IERhdGUodGFnU3RhdGlzdGljSW5mby5ib2R5LnN0YXJ0KTtcbiAgICB0aGlzLmVuZCA9IG5ldyBEYXRlKHRhZ1N0YXRpc3RpY0luZm8uYm9keS5lbmQpO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS5yZXNvbHV0aW9uO1xuICAgIHRoaXMuc3RhdHMgPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkuc3RhdHMubWFwKGZ1bmN0aW9uIChzdGF0OiBEb21haW5UYWdBUElSZXNwb25zZVN0YXRzSXRlbSkge1xuICAgICAgY29uc3QgcmVzID0geyAuLi5zdGF0LCB0aW1lOiBuZXcgRGF0ZShzdGF0LnRpbWUpIH07XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpblRhZ3NDbGllbnQgaW1wbGVtZW50cyBJRG9tYWluVGFnc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VQYWdlTGlua3MocmVzcG9uc2U6IERvbWFpblRhZ3NSZXNwb25zZURhdGEpOiBQYXJzZWRQYWdlc0xpc3Qge1xuICAgIGNvbnN0IHBhZ2VzID0gT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuYm9keS5wYWdpbmcgYXMgUGFnZXNMaXN0KTtcbiAgICByZXR1cm4gcGFnZXMucmVkdWNlKFxuICAgICAgKGFjYzogUGFnZXNMaXN0QWNjdW11bGF0b3IsIGVudHJpZTogW3VybDogc3RyaW5nLCBpZDogc3RyaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGVudHJpZVswXTtcbiAgICAgICAgY29uc3QgdXJsID0gZW50cmllWzFdO1xuICAgICAgICBhY2NbaWRdID0ge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIHVybFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApIGFzIHVua25vd24gYXMgUGFyc2VkUGFnZXNMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW5UYWdzTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluVGFnc1Jlc3BvbnNlRGF0YVxuICApOiBEb21haW5UYWdzTGlzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcCgodGFnSW5mbykgPT4gbmV3IERvbWFpblRhZyh0YWdJbmZvKSksXG4gICAgICBwYWdlczogdGhpcy5fcGFyc2VQYWdlTGlua3MocmVzcG9uc2UpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVGFnU3RhdGlzdGljKFxuICAgIHJlc3BvbnNlOiBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2VcbiAgKTogRG9tYWluVGFnU3RhdGlzdGljIHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRhZ1N0YXRpc3RpYyhyZXNwb25zZSk7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpblRhZ3NRdWVyeSk6IFByb21pc2U8RG9tYWluVGFnc0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5UYWdzTGlzdChyZXMgYXMgRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSlcbiAgICAgICk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdzSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRhZyhyZXMuYm9keSlcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdzTWVzc2FnZVJlcz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnKSwgZGVzY3JpcHRpb24pXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ3NNZXNzYWdlUmVzXG4gICAgICApO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZ1xuICApOiBQcm9taXNlPERvbWFpblRhZ3NNZXNzYWdlUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L3RhZ3MvJHt0YWd9YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiAoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiByZXMuYm9keS5tZXNzYWdlLFxuICAgICAgICAgIHN0YXR1czogcmVzLnN0YXR1c1xuICAgICAgICB9IGFzIERvbWFpblRhZ3NNZXNzYWdlUmVzKSk7XG4gIH1cblxuICBzdGF0aXN0aWMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBxdWVyeTogRG9tYWluVGFnc1N0YXRpc3RpY1F1ZXJ5KVxuICAgIDogUHJvbWlzZTxEb21haW5UYWdTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZVRhZ1N0YXRpc3RpYyhyZXMpXG4gICAgICApO1xuICB9XG5cbiAgY291bnRyaWVzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvY291bnRyaWVzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnQ291bnRyaWVzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG5cbiAgcHJvdmlkZXJzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvcHJvdmlkZXJzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnUHJvdmlkZXJzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG5cbiAgZGV2aWNlcyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9kZXZpY2VzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnRGV2aWNlc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UsXG4gIENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCxcbiAgRG9tYWluVGVtcGxhdGUsIERvbWFpblRlbXBsYXRlRGF0YSxcbiAgRG9tYWluVGVtcGxhdGVzUXVlcnksXG4gIERvbWFpblRlbXBsYXRlVXBkYXRlRGF0YSxcbiAgRG9tYWluVGVtcGxhdGVVcGRhdGVWZXJzaW9uRGF0YSxcbiAgRG9tYWluVGVtcGxhdGVWZXJzaW9uRGF0YSxcbiAgR2V0RG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgSURvbWFpblRlbXBsYXRlc0NsaWVudCxcbiAgTGlzdERvbWFpblRlbXBsYXRlc0FQSVJlc3BvbnNlLFxuICBMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0LFxuICBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlLFxuICBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdCxcbiAgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UsXG4gIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCxcbiAgTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UsXG4gIE5vdGlmaWNhdGlvblJlc3VsdCxcbiAgU2hvcnRUZW1wbGF0ZVZlcnNpb24sXG4gIFRlbXBsYXRlUXVlcnksXG4gIFRlbXBsYXRlVmVyc2lvbixcbiAgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UZW1wbGF0ZXMnO1xuXG5leHBvcnQgY2xhc3MgRG9tYWluVGVtcGxhdGVJdGVtIGltcGxlbWVudHMgRG9tYWluVGVtcGxhdGUge1xuICBuYW1lIDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbiA6IHN0cmluZztcbiAgY3JlYXRlZEF0IDogRGF0ZSB8ICcnO1xuICBjcmVhdGVkQnkgOiBzdHJpbmc7XG4gIGlkIDogc3RyaW5nO1xuICB2ZXJzaW9uPzogVGVtcGxhdGVWZXJzaW9uO1xuICB2ZXJzaW9ucz86IFNob3J0VGVtcGxhdGVWZXJzaW9uW107XG5cbiAgY29uc3RydWN0b3IoZG9tYWluVGVtcGxhdGVGcm9tQVBJOiBEb21haW5UZW1wbGF0ZSkge1xuICAgIHRoaXMubmFtZSA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5uYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuZGVzY3JpcHRpb247XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEF0ID8gbmV3IERhdGUoZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRBdCkgOiAnJztcbiAgICB0aGlzLmNyZWF0ZWRCeSA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQnk7XG4gICAgdGhpcy5pZCA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5pZDtcblxuICAgIGlmIChkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbikge1xuICAgICAgdGhpcy52ZXJzaW9uID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb247XG4gICAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24uY3JlYXRlZEF0KSB7XG4gICAgICAgIHRoaXMudmVyc2lvbi5jcmVhdGVkQXQgPSBuZXcgRGF0ZShkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbi5jcmVhdGVkQXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMgJiYgZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy52ZXJzaW9ucyA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucy5tYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0geyAuLi52ZXJzaW9uIH07XG4gICAgICAgIHJlc3VsdC5jcmVhdGVkQXQgPSBuZXcgRGF0ZSh2ZXJzaW9uLmNyZWF0ZWRBdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluVGVtcGxhdGVzQ2xpZW50IGltcGxlbWVudHMgSURvbWFpblRlbXBsYXRlc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uUmVzcG9uc2UoZGF0YTogQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSk6IERvbWFpblRlbXBsYXRlSXRlbSB7XG4gICAgcmV0dXJuIG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZShcbiAgICBkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZVxuICApOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0ID0ge30gYXMgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGUgPSBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGRhdGEuYm9keS50ZW1wbGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRpb25SZXNwb25zZShcbiAgICBkYXRhOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2VcbiAgKTogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0ID0ge30gYXMgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5ICYmIGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlTmFtZSA9IGRhdGEuYm9keS50ZW1wbGF0ZS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlKGRhdGE6IE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlKTogTm90aWZpY2F0aW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE5vdGlmaWNhdGlvblJlc3VsdCA9IHt9IGFzIE5vdGlmaWNhdGlvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlTmFtZSA9IGRhdGEuYm9keS50ZW1wbGF0ZS5uYW1lO1xuICAgICAgcmVzdWx0LnRlbXBsYXRlVmVyc2lvbiA9IHsgdGFnOiBkYXRhLmJvZHkudGVtcGxhdGUudmVyc2lvbi50YWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaXN0KHJlc3BvbnNlOiBMaXN0RG9tYWluVGVtcGxhdGVzQVBJUmVzcG9uc2UpOiBMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcCgoZDogRG9tYWluVGVtcGxhdGUpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZCkpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHJlc3BvbnNlLmJvZHkucGFnaW5nO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMoXG4gICAgcmVzcG9uc2U6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2VcbiAgKTogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdDtcblxuICAgIGRhdGEudGVtcGxhdGUgPSBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlc3BvbnNlLmJvZHkudGVtcGxhdGUpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHJlc3BvbnNlLmJvZHkucGFnaW5nO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5KTogUHJvbWlzZTxMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUxpc3QocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcsIHF1ZXJ5PzogVGVtcGxhdGVRdWVyeSk6IFByb21pc2U8RG9tYWluVGVtcGxhdGVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlcy5ib2R5LnRlbXBsYXRlKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZURhdGFcbiAgKTogUHJvbWlzZTxEb21haW5UZW1wbGF0ZUl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUNyZWF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVVcGRhdGVEYXRhXG4gICk6IFByb21pc2U8VXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8VXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSlcbiAgICAgIC50aGVuKChyZXM6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95QWxsKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxOb3RpZmljYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJykpXG4gICAgICAudGhlbigocmVzOiBOb3RpZmljYXRpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgY3JlYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8Q3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0VmVyc2lvbihkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UZW1wbGF0ZUl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzLmJvZHkudGVtcGxhdGUpXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8TXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSwgZGF0YSlcbiAgICAgIC50aGVuKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAocmVzOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBkZXN0cm95VmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZ1xuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZykpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgLnRoZW4oKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGxpc3RWZXJzaW9ucyhcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5XG4gICk6IFByb21pc2U8TGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyhyZXMpXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBUElFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgc3RhdHVzOiBudW1iZXIgfCBzdHJpbmc7XG4gIHN0YWNrOiBzdHJpbmc7XG4gIGRldGFpbHM6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3RhdHVzLFxuICAgIHN0YXR1c1RleHQsXG4gICAgbWVzc2FnZSxcbiAgICBib2R5ID0ge31cbiAgfTogQVBJRXJyb3JPcHRpb25zKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlOiBib2R5TWVzc2FnZSwgZXJyb3IgfSA9IGJvZHk7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8IGVycm9yIHx8IHN0YXR1c1RleHQ7XG4gICAgdGhpcy5kZXRhaWxzID0gYm9keU1lc3NhZ2U7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7XG4gIEV2ZW50c0xpc3QsXG4gIEV2ZW50c1BhZ2UsXG4gIEV2ZW50c1F1ZXJ5LFxuICBFdmVudHNSZXNwb25zZSxcbiAgUGFnZXNMaXN0LFxuICBQYWdlc0xpc3RBY2N1bXVsYXRvcixcbiAgUGFyc2VkUGFnZXNMaXN0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9FdmVudHMnO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudENsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBfcGFyc2VQYWdlTnVtYmVyKHVybDogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zcGxpdCgnLycpLnBvcCgpIHx8ICcnO1xuICB9XG5cbiAgX3BhcnNlUGFnZShpZDogc3RyaW5nLCB1cmw6IHN0cmluZykgOiBFdmVudHNQYWdlIHtcbiAgICByZXR1cm4geyBpZCwgbnVtYmVyOiB0aGlzLl9wYXJzZVBhZ2VOdW1iZXIodXJsKSwgdXJsIH07XG4gIH1cblxuICBfcGFyc2VQYWdlTGlua3MocmVzcG9uc2U6IEV2ZW50c1Jlc3BvbnNlKSA6IFBhcnNlZFBhZ2VzTGlzdCB7XG4gICAgY29uc3QgcGFnZXMgPSBPYmplY3QuZW50cmllcyhyZXNwb25zZS5ib2R5LnBhZ2luZyBhcyBQYWdlc0xpc3QpO1xuICAgIHJldHVybiBwYWdlcy5yZWR1Y2UoXG4gICAgICAoYWNjOiBQYWdlc0xpc3RBY2N1bXVsYXRvciwgcGFpcjogW3VybDogc3RyaW5nLCBpZDogc3RyaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHBhaXJbMF07XG4gICAgICAgIGNvbnN0IHVybCA9IHBhaXJbMV07XG4gICAgICAgIGFjY1tpZF0gPSB0aGlzLl9wYXJzZVBhZ2UoaWQsIHVybCk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICkgYXMgdW5rbm93biBhcyBQYXJzZWRQYWdlc0xpc3Q7XG4gIH1cblxuICBfcGFyc2VFdmVudExpc3QocmVzcG9uc2U6IEV2ZW50c1Jlc3BvbnNlKSA6IEV2ZW50c0xpc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcmVzcG9uc2UuYm9keS5pdGVtcyxcbiAgICAgIHBhZ2VzOiB0aGlzLl9wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSlcbiAgICB9O1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IEV2ZW50c1F1ZXJ5KSA6IFByb21pc2U8RXZlbnRzTGlzdD4ge1xuICAgIGxldCB1cmw7XG4gICAgY29uc3QgcXVlcnlDb3B5ID0geyAuLi5xdWVyeSB9O1xuICAgIGlmIChxdWVyeUNvcHkgJiYgcXVlcnlDb3B5LnBhZ2UpIHtcbiAgICAgIHVybCA9IHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ2V2ZW50cycsIHF1ZXJ5Q29weS5wYWdlKTtcbiAgICAgIGRlbGV0ZSBxdWVyeUNvcHkucGFnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsID0gdXJsam9pbignL3YzJywgZG9tYWluLCAnZXZlbnRzJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybCwgcXVlcnlDb3B5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBFdmVudHNSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VFdmVudExpc3QocmVzcG9uc2UpKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lGb3JtRGF0YSc7XG5cbmNsYXNzIEZvcm1EYXRhQnVpbGRlciB7XG4gIHByaXZhdGUgRm9ybURhdGFDb25zdHJ1Y3RvcjogSW5wdXRGb3JtRGF0YTtcbiAgY29uc3RydWN0b3IoRm9ybURhdGFDb25zdHJ1Y3RvcjogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMuRm9ybURhdGFDb25zdHJ1Y3RvciA9IEZvcm1EYXRhQ29uc3RydWN0b3I7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRm9ybURhdGEoZGF0YTogYW55KTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBkYXRhIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCBmb3JtRGF0YTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEgPSBPYmplY3Qua2V5cyhkYXRhKVxuICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBkYXRhW2tleV07IH0pXG4gICAgICAucmVkdWNlKChmb3JtRGF0YUFjYzogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEsIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlS2V5cyA9IFsnYXR0YWNobWVudCcsICdpbmxpbmUnLCAnbXVsdGlwbGVWYWxpZGF0aW9uRmlsZSddO1xuICAgICAgICBpZiAoZmlsZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHRoaXMuYWRkRmlsZXNUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ21lc3NhZ2UnKSB7IC8vIG1pbWUgbWVzc2FnZVxuICAgICAgICAgIHRoaXMuYWRkTWltZURhdGFUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZGRDb21tb25Qcm9wZXJ0eVRvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgfSwgbmV3IHRoaXMuRm9ybURhdGFDb25zdHJ1Y3RvcigpKTtcbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cblxuICBwcml2YXRlIGlzTm9kZUZvcm1EYXRhKGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhKVxuICA6IGZvcm1EYXRhSW5zdGFuY2UgaXMgTm9kZUZvcm1EYXRhIHtcbiAgICByZXR1cm4gKDxOb2RlRm9ybURhdGE+Zm9ybURhdGFJbnN0YW5jZSkuZ2V0SGVhZGVycyAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdHRhY2htZW50T3B0aW9ucyhpdGVtOiB7XG4gICAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gICAgY29udGVudFR5cGU/IDogc3RyaW5nO1xuICAgIGtub3duTGVuZ3RoPzogbnVtYmVyO1xuICB9KToge1xuICAgIGZpbGVuYW1lPzogc3RyaW5nLFxuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nLFxuICAgIGtub3duTGVuZ3RoPzogbnVtYmVyXG4gIH0ge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcgfHwgdGhpcy5pc1N0cmVhbShpdGVtKSkgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgY29udGVudFR5cGUsXG4gICAgICBrbm93bkxlbmd0aFxuICAgIH0gPSBpdGVtO1xuICAgIHJldHVybiB7XG4gICAgICAuLi4oZmlsZW5hbWUgPyB7IGZpbGVuYW1lIH0gOiB7IGZpbGVuYW1lOiAnZmlsZScgfSksXG4gICAgICAuLi4oY29udGVudFR5cGUgJiYgeyBjb250ZW50VHlwZSB9KSxcbiAgICAgIC4uLihrbm93bkxlbmd0aCAmJiB7IGtub3duTGVuZ3RoIH0pXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTWltZURhdGFUb0ZEKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGRhdGE6IEJ1ZmZlciB8IEJsb2IsXG4gICAgZm9ybURhdGFJbnN0YW5jZTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNOb2RlRm9ybURhdGEoZm9ybURhdGFJbnN0YW5jZSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgZm9ybURhdGFJbnN0YW5jZS5hcHBlbmQoa2V5LCBkYXRhLCB7IGZpbGVuYW1lOiAnTWltZU1lc3NhZ2UnIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRGF0YUluc3RhbmNlLmFwcGVuZChrZXksIGRhdGEgYXMgQmxvYiwgJ01pbWVNZXNzYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaWxlc1RvRkQoXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhcHBlbmRGaWxlVG9GRCA9IChcbiAgICAgIG9yaWdpbmFsS2V5OiBzdHJpbmcsXG4gICAgICBvYmo6IGFueSxcbiAgICAgIGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gb3JpZ2luYWxLZXkgPT09ICdtdWx0aXBsZVZhbGlkYXRpb25GaWxlJyA/ICdmaWxlJyA6IG9yaWdpbmFsS2V5O1xuICAgICAgY29uc3QgaXNTdHJlYW1EYXRhID0gdGhpcy5pc1N0cmVhbShvYmopO1xuICAgICAgY29uc3Qgb2JqRGF0YSA9IGlzU3RyZWFtRGF0YSA/IG9iaiA6IG9iai5kYXRhO1xuICAgICAgLy8gZ2V0QXR0YWNobWVudE9wdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG9iaiBwYXJhbWV0ZXIgdG8gcHJldmVudCBsb29zaW5nIGZpbGVuYW1lXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyhvYmopO1xuICAgICAgaWYgKHRoaXMuaXNOb2RlRm9ybURhdGEoZm9ybURhdGEpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIG9iakRhdGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpEYXRhLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGFwcGVuZEZpbGVUb0ZEKHByb3BlcnR5TmFtZSwgaXRlbSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCB2YWx1ZSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmVhbShkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBkYXRhLnBpcGUgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBwcml2YXRlIGFkZENvbW1vblByb3BlcnR5VG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuICAgICAgICBmb3JtRGF0YUFjYy5hcHBlbmQoa2V5LCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgZm9ybURhdGFBY2MuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgRm9ybURhdGFCdWlsZGVyO1xuIiwiaW1wb3J0IENsaWVudCBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lGb3JtRGF0YSc7XG5pbXBvcnQgT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvT3B0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxndW4ge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHQoKTogdHlwZW9mIE1haWxndW4geyByZXR1cm4gdGhpczsgfVxuICBwcml2YXRlIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhXG5cbiAgY29uc3RydWN0b3IoRm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gRm9ybURhdGE7XG4gIH1cblxuICBjbGllbnQob3B0aW9uczogT3B0aW9ucykgOiBDbGllbnQge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KG9wdGlvbnMsIHRoaXMuZm9ybURhdGEpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBCb3VuY2UsIENvbXBsYWludCwgVW5zdWJzY3JpYmUsIFdoaXRlTGlzdFxufSBmcm9tICcuLi9zdXBwcmVzc2lvbnMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm91bmNlRGF0YSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29kZTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmcgfCBEYXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsYWludERhdGEge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZyB8IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5zdWJzY3JpYmVEYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB0YWdzOiBhbnk7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZyB8IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2hpdGVMaXN0RGF0YSB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgcmVhc29uOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQYWdlIHtcbiAgaWQ6IHN0cmluZztcbiAgcGFnZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgYWRkcmVzczogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXJsOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUGFnZXNMaXN0IHtcbiAgcHJldmlvdXM6IFBhcnNlZFBhZ2U7XG4gIGZpcnN0OiBQYXJzZWRQYWdlO1xuICBsYXN0OiBQYXJzZWRQYWdlO1xuICBuZXh0OiBQYXJzZWRQYWdlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uTGlzdCB7XG4gIGl0ZW1zOiAoQm91bmNlIHwgQ29tcGxhaW50IHwgVW5zdWJzY3JpYmUgfCBXaGl0ZUxpc3QpW107XG4gIHBhZ2VzOiBQYXJzZWRQYWdlc0xpc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZXNMaXN0IHtcbiAgcHJldmlvdXM6IHN0cmluZztcbiAgZmlyc3Q6IHN0cmluZztcbiAgbGFzdDogc3RyaW5nO1xuICBuZXh0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIFN1cHByZXNzaW9uTW9kZWxzIHtcbiAgQk9VTkNFUyA9ICdib3VuY2VzJyxcbiAgQ09NUExBSU5UUyA9ICdjb21wbGFpbnRzJyxcbiAgVU5TVUJTQ1JJQkVTID0gJ3Vuc3Vic2NyaWJlcycsXG4gIFdISVRFTElTVFMgPSAnd2hpdGVsaXN0cydcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlc0xpc3RBY2N1bXVsYXRvciB7XG4gIFtpbmRleDogc3RyaW5nXTogUGFyc2VkUGFnZTtcbn1cblxuZXhwb3J0IHR5cGUgU3VwcHJlc3Npb25MaXN0UXVlcnkgPSB7XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlIHtcbiAgYm9keToge1xuICAgIGl0ZW1zOiBCb3VuY2VEYXRhW10gfCBDb21wbGFpbnREYXRhW10gfCBVbnN1YnNjcmliZURhdGFbXSB8IFdoaXRlTGlzdERhdGFbXTtcbiAgICBwYWdpbmc6IFBhZ2VzTGlzdDtcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvblJlc3BvbnNlIHtcbiAgYm9keTogQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhO1xuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkRlc3Ryb3lSZXNwb25zZSB7XG4gIGJvZHk6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgYWRkcmVzcz86IHN0cmluZztcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkRlc3Ryb3lSZXN1bHQge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgc3RhdHVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvZGU/OiBudW1iZXI7XG4gIGVycm9yPzogc3RyaW5nO1xuICBkb21haW4/OiBzdHJpbmc7XG4gIHRhZz86IHN0cmluZztcbiAgY3JlYXRlZF9hdD86IHN0cmluZyA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25DcmVhdGlvblJlc3BvbnNlIHtcbiAgYm9keTp7XG4gICAgbWVzc2FnZTpzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZztcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0IHtcbiAgbWVzc2FnZTpzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgc3RhdHVzOiBudW1iZXI7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIElwUG9vbENyZWF0ZURhdGEsXG4gIElwUG9vbENyZWF0ZVJlc3BvbnNlLFxuICBJcFBvb2xDcmVhdGVSZXN1bHQsXG4gIElwUG9vbERlbGV0ZURhdGEsXG4gIElwUG9vbExpc3RSZXNwb25zZSxcbiAgSXBQb29sTGlzdFJlc3VsdCxcbiAgSXBQb29sTWVzc2FnZVJlc3BvbnNlLFxuICBJcFBvb2xNZXNzYWdlUmVzdWx0LFxuICBJcFBvb2xVcGRhdGVEYXRhLFxufSBmcm9tICcuL2ludGVyZmFjZXMvSXBQb29scyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwUG9vbHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdCgpOiBQcm9taXNlPElwUG9vbExpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YxL2lwX3Bvb2xzJylcbiAgICAgIC50aGVuKChyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGF0YTogSXBQb29sQ3JlYXRlRGF0YSk6IFByb21pc2U8SXBQb29sQ3JlYXRlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbENyZWF0ZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92MS9pcF9wb29scycsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xVcGRhdGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbE1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wYXRjaFdpdGhGRChgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xEZWxldGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6SXBQb29sTWVzc2FnZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwUG9vbHNSZXNwb25zZShyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKTogSXBQb29sTGlzdFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCBNZ1JlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IElwRGF0YSwgSXBzTGlzdFJlc3BvbnNlQm9keSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JcHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcHNDbGllbnQge1xuICByZXF1ZXN0OiBNZ1JlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogTWdSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk6IGFueSk6IFByb21pc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2lwcycsIHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwc0xpc3RSZXNwb25zZUJvZHk+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldChpcDogc3RyaW5nKTogUHJvbWlzZTxJcERhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92My9pcHMvJHtpcH1gKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwRGF0YT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwc1Jlc3BvbnNlPFQ+KHJlc3BvbnNlOiB7IGJvZHk6IFQgfSk6IFQge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgTGlzdHNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTGlzdCxcbiAgRGVzdHJveWVkTGlzdCxcbiAgTWFpbGluZ0xpc3QsXG4gIFZhbGlkYXRpb25BcGlSZXNwb25zZSxcbiAgU3RhcnRWYWxpZGF0aW9uUmVzdWx0LFxuICBWYWxpZGF0aW9uUmVzdWx0LFxuICBDYW5jZWxWYWxpZGF0aW9uUmVzdWx0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9saXN0cyc7XG5pbXBvcnQgeyBJTWFpbExpc3RzTWVtYmVycyB9IGZyb20gJy4vaW50ZXJmYWNlcy9tYWlsTGlzdE1lbWJlcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0c0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBtZW1iZXJzOiBJTWFpbExpc3RzTWVtYmVycztcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtZW1iZXJzOklNYWlsTGlzdHNNZW1iZXJzKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvbGlzdHMnO1xuICAgIHRoaXMubWVtYmVycyA9IG1lbWJlcnM7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVmFsaWRhdGlvblJlc3VsdChzdGF0dXM6IG51bWJlciwgZGF0YTogVmFsaWRhdGlvbkFwaVJlc3BvbnNlKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0ICogMTAwMCkgLy8gYWRkIG1pbGxpc2Vjb25kIHRvIFVuaXggdGltZXN0YW1wXG4gICAgICB9XG4gICAgfSBhcyBWYWxpZGF0aW9uUmVzdWx0O1xuICB9XG5cbiAgbGlzdChxdWVyeT86IExpc3RzUXVlcnkpOiBQcm9taXNlPE1haWxpbmdMaXN0W10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vcGFnZXNgLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5pdGVtcyBhcyBNYWlsaW5nTGlzdFtdKTtcbiAgfVxuXG4gIGdldChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh0aGlzLmJhc2VSb3V0ZSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIHVwZGF0ZShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgZGF0YTogQ3JlYXRlVXBkYXRlTGlzdCk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIGRlc3Ryb3kobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3llZExpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZXN0cm95ZWRMaXN0KTtcbiAgfVxuXG4gIHZhbGlkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxTdGFydFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3QoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS92YWxpZGF0ZWAsIHt9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgICAgfSkgYXMgU3RhcnRWYWxpZGF0aW9uUmVzdWx0KTtcbiAgfVxuXG4gIHZhbGlkYXRpb25SZXN1bHQobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYClcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzcG9uc2UpID0+IHRoaXMucGFyc2VWYWxpZGF0aW9uUmVzdWx0KFxuICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgcmVzcG9uc2UuYm9keSBhcyBWYWxpZGF0aW9uQXBpUmVzcG9uc2VcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGNhbmNlbFZhbGlkYXRpb24obWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENhbmNlbFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gKHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgICAgfSBhcyBDYW5jZWxWYWxpZGF0aW9uUmVzdWx0KSk7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBNYWlsTGlzdE1lbWJlcnNRdWVyeSxcbiAgSU1haWxMaXN0c01lbWJlcnMsXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVycyxcbiAgTWFpbExpc3RNZW1iZXIsXG4gIE11bHRpcGxlTWVtYmVyc0RhdGEsXG4gIE11bHRpcGxlTWVtYmVyc1JlcURhdGEsXG4gIERlbGV0ZWRNZW1iZXIsXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcSxcbiAgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL21haWxMaXN0TWVtYmVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxMaXN0c01lbWJlcnMgaW1wbGVtZW50cyBJTWFpbExpc3RzTWVtYmVycyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kVXBkYXRlRGF0YShkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMpIHtcbiAgICBjb25zdCBuZXdEYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICBpZiAodHlwZW9mIGRhdGEudmFycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG5ld0RhdGEudmFycyA9IEpTT04uc3RyaW5naWZ5KG5ld0RhdGEudmFycyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnN1YnNjcmliZWQgPT09ICdib29sZWFuJykge1xuICAgICAgbmV3RGF0YS5zdWJzY3JpYmVkID0gZGF0YS5zdWJzY3JpYmVkID8gJ3llcycgOiAnbm8nO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdEYXRhIGFzIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcTtcbiAgfVxuXG4gIGxpc3RNZW1iZXJzKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBxdWVyeT86IE1haWxMaXN0TWVtYmVyc1F1ZXJ5KTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzL3BhZ2VzYCwgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkuaXRlbXMgYXMgTWFpbExpc3RNZW1iZXJbXSk7XG4gIH1cblxuICBnZXRNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBjcmVhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVyc2AsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogTXVsdGlwbGVNZW1iZXJzRGF0YVxuICApOiBQcm9taXNlPE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgbmV3RGF0YTogTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSA9IHtcbiAgICAgIG1lbWJlcnM6IEFycmF5LmlzQXJyYXkoZGF0YS5tZW1iZXJzKSA/IEpTT04uc3RyaW5naWZ5KGRhdGEubWVtYmVycykgOiBkYXRhLm1lbWJlcnMsXG4gICAgICB1cHNlcnQ6IGRhdGEudXBzZXJ0XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMuanNvbmAsIG5ld0RhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2UpO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1xuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgY29uc3QgcmVxRGF0YSA9IHRoaXMuY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gLCByZXFEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBkZXN0cm95TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZykgOiBQcm9taXNlPERlbGV0ZWRNZW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZWxldGVkTWVtYmVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgTWFpbGd1bk1lc3NhZ2VEYXRhLFxuICBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSxcbiAgTWVzc2FnZXNTZW5kUmVzdWx0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9NZXNzYWdlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXNzYWdlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBfcGFyc2VSZXNwb25zZShyZXNwb25zZTogTWVzc2FnZXNTZW5kQVBJUmVzcG9uc2UpOiBNZXNzYWdlc1NlbmRSZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBNYWlsZ3VuTWVzc2FnZURhdGEpOiBQcm9taXNlPE1lc3NhZ2VzU2VuZFJlc3VsdD4ge1xuICAgIGlmIChkYXRhLm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3YzLyR7ZG9tYWlufS9tZXNzYWdlcy5taW1lYCwgZGF0YSlcbiAgICAgICAgLnRoZW4odGhpcy5fcGFyc2VSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzYCwgZGF0YSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgQVBJUmVzcG9uc2UgZnJvbSAnLi9pbnRlcmZhY2VzL0FwaVJlc3BvbnNlJztcbmltcG9ydCB7XG4gIENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iLFxuICBDcmVhdGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iLFxuICBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50LFxuICBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGFVcGRhdGVkLFxuICBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGEsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYixcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHRcbn1cbiAgZnJvbSAnLi9pbnRlcmZhY2VzL011bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgaW1wbGVtZW50cyBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzcG9uc2U8VD4ocmVzcG9uc2U6IEFQSVJlc3BvbnNlKTogVCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2U/LmJvZHlcbiAgICB9IGFzIFQ7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsnKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdD4ocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGxpc3RJZDogc3RyaW5nKTogUHJvbWlzZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlU3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2U/LmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKFxuICAgIGxpc3RJZDogc3RyaW5nLFxuICAgIGRhdGE6IE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVxuICApOiBQcm9taXNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCBtdWx0aXBsZVZhbGlkYXRpb25EYXRhOiBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGFVcGRhdGVkID0ge1xuICAgICAgbXVsdGlwbGVWYWxpZGF0aW9uRmlsZToge1xuICAgICAgICAuLi5kYXRhPy5maWxlXG4gICAgICB9LFxuICAgICAgLi4uZGF0YVxuICAgIH07XG4gICAgZGVsZXRlIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEuZmlsZTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWAsIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3kobGlzdElkOiBzdHJpbmcpOiBQcm9taXNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPihyZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIGJhc2U2NCBmcm9tICdiYXNlLTY0JztcbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBreSBmcm9tICdreS11bml2ZXJzYWwnO1xuaW1wb3J0ICogYXMgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgeyBPbkNhbGxFbXB0eUhlYWRlcnMsIE9uQ2FsbFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9SZXF1ZXN0T3B0aW9ucyc7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgRm9ybURhdGFCdWlsZGVyIGZyb20gJy4vZm9ybURhdGFCdWlsZGVyJztcbmltcG9ydCB7IElwUG9vbERlbGV0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSXBQb29scyc7XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBwcml2YXRlIHVzZXJuYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUga2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwcml2YXRlIGZvcm1EYXRhQnVpbGRlcjogRm9ybURhdGFCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLCBmb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMudXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lO1xuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCBhcyBzdHJpbmc7XG4gICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICB0aGlzLmZvcm1EYXRhQnVpbGRlciA9IG5ldyBGb3JtRGF0YUJ1aWxkZXIoZm9ybURhdGEpO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvbkNhbGxPcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IE9uQ2FsbFJlcXVlc3RPcHRpb25zID0geyAuLi5vbkNhbGxPcHRpb25zIH07XG4gICAgY29uc3QgYmFzaWMgPSBiYXNlNjQuZW5jb2RlKGAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5rZXl9YCk7XG4gICAgY29uc3Qgb25DYWxsSGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyA/IG9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcnNJbml0fCBPbkNhbGxFbXB0eUhlYWRlcnMgPSB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY31gLFxuICAgICAgLi4udGhpcy5oZWFkZXJzLFxuICAgICAgLi4ub25DYWxsSGVhZGVyc1xuICAgIH07XG5cbiAgICBkZWxldGUgb3B0aW9ucz8uaGVhZGVycztcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4ub3B0aW9ucyB9O1xuXG4gICAgaWYgKG9wdGlvbnM/LnF1ZXJ5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9wdGlvbnM/LnF1ZXJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJhbXMuc2VhcmNoUGFyYW1zID0gb3B0aW9ucy5xdWVyeTtcbiAgICAgIGRlbGV0ZSBwYXJhbXMucXVlcnk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQga3koXG4gICAgICB1cmxqb2luKHRoaXMudXJsLCB1cmwpLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZC50b0xvY2FsZVVwcGVyQ2FzZSgpLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICB0aHJvd0h0dHBFcnJvcnM6IGZhbHNlLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgIC4uLnBhcmFtc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoIXJlc3BvbnNlPy5vaykge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRSZXNwb25zZUJvZHkocmVzcG9uc2UpO1xuXG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlPy5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlPy5zdGF0dXNUZXh0LFxuICAgICAgICBib2R5OiByZXMuYm9keVxuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VCb2R5KHJlc3BvbnNlKTtcbiAgICByZXR1cm4gcmVzIGFzIEFQSVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZUJvZHkocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgIGJvZHk6IHt9LFxuICAgICAgc3RhdHVzOiByZXNwb25zZT8uc3RhdHVzXG4gICAgfSBhcyBBUElSZXNwb25zZTtcbiAgICBsZXQgcmVzcG9uc2VTdHJpbmcgPSAnJztcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2VTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICBjb25zdCBqc29uQm9keSA9IEpTT04ucGFyc2UocmVzcG9uc2VTdHJpbmcpO1xuICAgICAgcmVzLmJvZHkgPSBqc29uQm9keTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHJlcy5zdGF0dXMgPSA0MDA7XG4gICAgICByZXMuYm9keSA9IHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2VTdHJpbmcsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH1cblxuICBxdWVyeShcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgQXJyYXk8QXJyYXk8c3RyaW5nPj4sXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1ldGhvZCwgdXJsLCB7IHF1ZXJ5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgY29tbWFuZChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcgfCBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSxcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgYWRkRGVmYXVsdEhlYWRlcnMgPSB0cnVlXG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgIGlmIChhZGREZWZhdWx0SGVhZGVycykge1xuICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH07XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgLi4uaGVhZGVycyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBBcnJheTxBcnJheTxzdHJpbmc+PixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdnZXQnLCB1cmwsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncG9zdCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0V2l0aEZEKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwb3N0JywgdXJsLCBmb3JtRGF0YSwge30sIGZhbHNlKTtcbiAgfVxuXG4gIHB1dFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGZvcm1EYXRhLCB7fSwgZmFsc2UpO1xuICB9XG5cbiAgcGF0Y2hXaXRoRkQodXJsOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5mb3JtRGF0YUJ1aWxkZXIuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncGF0Y2gnLCB1cmwsIGZvcm1EYXRhLCB7fSwgZmFsc2UpO1xuICB9XG5cbiAgcHV0KHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncHV0JywgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIGRlbGV0ZSh1cmw6IHN0cmluZywgZGF0YT86IElwUG9vbERlbGV0ZURhdGEpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgnZGVsZXRlJywgdXJsLCBkYXRhKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0O1xuIiwiaW1wb3J0IHtcbiAgQ3JlYXRlVXBkYXRlUm91dGVEYXRhLCBEZXN0cm95Um91dGVSZXNwb25zZSwgUm91dGUsIFJvdXRlc0xpc3RRdWVyeSwgVXBkYXRlUm91dGVSZXNwb25zZVxufSBmcm9tICcuL2ludGVyZmFjZXMvcm91dGVzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5OiBSb3V0ZXNMaXN0UXVlcnkpOiBQcm9taXNlPFJvdXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL3JvdXRlcycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lml0ZW1zKTtcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvcm91dGVzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL3JvdXRlcycsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkucm91dGUpO1xuICB9XG5cbiAgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSk6IFByb21pc2U8VXBkYXRlUm91dGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAvdjMvcm91dGVzLyR7aWR9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBkZXN0cm95KGlkOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3lSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IFN0YXRzUXVlcnksIFN0YXRzT3B0aW9ucywgU3RhdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9TdGF0c09wdGlvbnMnO1xuXG5jbGFzcyBTdGF0cyB7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IHN0cmluZztcbiAgc3RhdHM6IFN0YXRbXTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTdGF0c09wdGlvbnMpIHtcbiAgICB0aGlzLnN0YXJ0ID0gbmV3IERhdGUoZGF0YS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZShkYXRhLmVuZCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gZGF0YS5yZXNvbHV0aW9uO1xuICAgIHRoaXMuc3RhdHMgPSBkYXRhLnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogU3RhdCkge1xuICAgICAgY29uc3QgcmVzID0geyAuLi5zdGF0IH07XG4gICAgICByZXMudGltZSA9IG5ldyBEYXRlKHN0YXQudGltZSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeTogU3RhdHNRdWVyeSB8IHVuZGVmaW5lZCk6IEFycmF5PEFycmF5PHN0cmluZz4+IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj47XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMocXVlcnkpLmxlbmd0aCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocXVlcnkpLnJlZHVjZSgoYXJyYXlXaXRoUGFpcnMsIGN1cnJlbnRQYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGN1cnJlbnRQYWlyO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcmVwZWF0ZWRQcm9wZXJ0eSA9IHZhbHVlLm1hcCgoaXRlbSkgPT4gW2tleSwgaXRlbV0pO1xuICAgICAgICAgIHJldHVybiBbLi4uYXJyYXlXaXRoUGFpcnMsIC4uLnJlcGVhdGVkUHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGFycmF5V2l0aFBhaXJzO1xuICAgICAgfSwgW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj4pO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hQYXJhbXM7XG4gIH1cblxuICBfcGFyc2VTdGF0cyhyZXNwb25zZTogeyBib2R5OiBTdGF0c09wdGlvbnMgfSk6IFN0YXRzIHtcbiAgICByZXR1cm4gbmV3IFN0YXRzKHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZ2V0RG9tYWluKGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPFN0YXRzPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5wcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMnLCBkb21haW4sICdzdGF0cy90b3RhbCcpLCBzZWFyY2hQYXJhbXMpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVN0YXRzKTtcbiAgfVxuXG4gIGdldEFjY291bnQocXVlcnk/OiBTdGF0c1F1ZXJ5KTogUHJvbWlzZTxTdGF0cz4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9zdGF0cy90b3RhbCcsIHNlYXJjaFBhcmFtcylcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlU3RhdHMpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIEJvdW5jZURhdGEsXG4gIENvbXBsYWludERhdGEsXG4gIFBhZ2VzTGlzdCxcbiAgUGFnZXNMaXN0QWNjdW11bGF0b3IsXG4gIFBhcnNlZFBhZ2UsXG4gIFBhcnNlZFBhZ2VzTGlzdCxcbiAgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25SZXNwb25zZSxcbiAgU3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdCxcbiAgU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdCxcbiAgU3VwcHJlc3Npb25MaXN0LFxuICBTdXBwcmVzc2lvbkxpc3RRdWVyeSxcbiAgU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uTW9kZWxzLFxuICBTdXBwcmVzc2lvblJlc3BvbnNlLFxuICBVbnN1YnNjcmliZURhdGEsXG4gIFdoaXRlTGlzdERhdGEsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9TdXByZXNzaW9ucyc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuXG5jb25zdCBjcmVhdGVPcHRpb25zID0ge1xuICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfVxufTtcbmV4cG9ydCBjbGFzcyBTdXBwcmVzc2lvbiB7XG4gIHR5cGU6IHN0cmluZztcbiAgY29uc3RydWN0b3IodHlwZTogU3VwcHJlc3Npb25Nb2RlbHMpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG59XG5leHBvcnQgY2xhc3MgQm91bmNlIGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvZGU6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBCb3VuY2VEYXRhKSB7XG4gICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuQk9VTkNFUyk7XG4gICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgIHRoaXMuY29kZSA9ICtkYXRhLmNvZGU7XG4gICAgdGhpcy5lcnJvciA9IGRhdGEuZXJyb3I7XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcGxhaW50IGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRfYXQ6IERhdGU7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogQ29tcGxhaW50RGF0YSkge1xuICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkNPTVBMQUlOVFMpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1YnNjcmliZSBleHRlbmRzIFN1cHByZXNzaW9uIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBVbnN1YnNjcmliZURhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5VTlNVQlNDUklCRVMpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLnRhZ3MgPSBkYXRhLnRhZ3M7XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV2hpdGVMaXN0IGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICB2YWx1ZTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFdoaXRlTGlzdERhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5XSElURUxJU1RTKTtcbiAgICB0aGlzLnZhbHVlID0gZGF0YS52YWx1ZTtcbiAgICB0aGlzLnJlYXNvbiA9IGRhdGEucmVhc29uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkQXQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHByZXNzaW9uQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgbW9kZWxzOiBNYXA8c3RyaW5nLCBhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubW9kZWxzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMubW9kZWxzLnNldCgnYm91bmNlcycsIEJvdW5jZSk7XG4gICAgdGhpcy5tb2RlbHMuc2V0KCdjb21wbGFpbnRzJywgQ29tcGxhaW50KTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ3Vuc3Vic2NyaWJlcycsIFVuc3Vic2NyaWJlKTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ3doaXRlbGlzdHMnLCBXaGl0ZUxpc3QpO1xuICB9XG5cbiAgX3BhcnNlUGFnZShpZDogc3RyaW5nLCBwYWdlVXJsOiBzdHJpbmcpIDogUGFyc2VkUGFnZSB7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChwYWdlVXJsKTtcbiAgICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gcGFyc2VkVXJsO1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIHBhZ2U6IHNlYXJjaFBhcmFtcy5oYXMoJ3BhZ2UnKSA/IHNlYXJjaFBhcmFtcy5nZXQoJ3BhZ2UnKSA6IHVuZGVmaW5lZCxcbiAgICAgIGFkZHJlc3M6IHNlYXJjaFBhcmFtcy5oYXMoJ2FkZHJlc3MnKSA/IHNlYXJjaFBhcmFtcy5nZXQoJ2FkZHJlc3MnKSA6IHVuZGVmaW5lZCxcbiAgICAgIHVybDogcGFnZVVybFxuICAgIH07XG4gIH1cblxuICBfcGFyc2VQYWdlTGlua3MocmVzcG9uc2U6IFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlKTogUGFyc2VkUGFnZXNMaXN0IHtcbiAgICBjb25zdCBwYWdlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmJvZHkucGFnaW5nIGFzIFBhZ2VzTGlzdCk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBwYWlyOiBbcGFnZVVybDogc3RyaW5nLCBpZDogc3RyaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHBhaXJbMF07XG4gICAgICAgIGNvbnN0IHBhZ2VVcmwgPSBwYWlyWzFdO1xuICAgICAgICBhY2NbaWRdID0gdGhpcy5fcGFyc2VQYWdlKGlkLCBwYWdlVXJsKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKSBhcyB1bmtub3duIGFzIFBhcnNlZFBhZ2VzTGlzdDtcbiAgfVxuXG4gIF9wYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlLFxuICAgIE1vZGVsOiB7XG4gICAgICBuZXcoZGF0YTogQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhKTpcbiAgICAgIEJvdW5jZSB8IENvbXBsYWludCB8IFVuc3Vic2NyaWJlIHwgV2hpdGVMaXN0XG4gICAgfVxuICApOiBTdXBwcmVzc2lvbkxpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBTdXBwcmVzc2lvbkxpc3Q7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKChpdGVtKSA9PiBuZXcgTW9kZWwoaXRlbSkpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMuX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX3BhcnNlSXRlbTxUIGV4dGVuZHMgU3VwcHJlc3Npb24+KFxuICAgIGRhdGEgOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEpOlxuICAgICAgVFxuICAgIH1cbiAgKTogVCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbChkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2hpdGVMaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZTogJ1doaXRlbGlzdFxcJ3MgY3JlYXRpb24gcHJvY2VzcyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGNyZWF0aW9ucy4gRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0J1xuICAgICAgICB9XG4gICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0V2l0aEZEKHVybGpvaW4oJ3YzJywgZG9tYWluLCAnd2hpdGVsaXN0cycpLCBkYXRhKVxuICAgICAgLnRoZW4odGhpcy5wcmVwYXJlUmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1R5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVscy5oYXModHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICBzdGF0dXNUZXh0OiAnVW5rbm93biB0eXBlIHZhbHVlJyxcbiAgICAgICAgYm9keTogeyBtZXNzYWdlOiAnVHlwZSBtYXkgYmUgb25seSBvbmUgb2YgW2JvdW5jZXMsIGNvbXBsYWludHMsIHVuc3Vic2NyaWJlcywgd2hpdGVsaXN0c10nIH1cbiAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSZXNwb25zZShyZXNwb25zZTogU3VwcHJlc3Npb25DcmVhdGlvblJlc3BvbnNlKTogU3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgIHR5cGU6IHJlc3BvbnNlLmJvZHkudHlwZSB8fCAnJyxcbiAgICAgIHZhbHVlOiByZXNwb25zZS5ib2R5LnZhbHVlIHx8ICcnLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG5cbiAgbGlzdChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBTdXBwcmVzc2lvbkxpc3RRdWVyeVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uTGlzdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVscy5nZXQodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmdldCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkxpc3RSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VMaXN0KHJlc3BvbnNlLCBtb2RlbCkpO1xuICB9XG5cbiAgZ2V0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBhZGRyZXNzOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxCb3VuY2UgfCBDb21wbGFpbnQgfCBVbnN1YnNjcmliZSB8IFdoaXRlTGlzdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVscy5nZXQodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmdldCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25SZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VJdGVtPHR5cGVvZiBtb2RlbD4ocmVzcG9uc2UuYm9keSwgbW9kZWwpKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuICAgIC8vIHN1cHBvcnRzIGFkZGluZyBtdWx0aXBsZSBzdXBwcmVzc2lvbnMgYnkgZGVmYXVsdFxuICAgIGxldCBwb3N0RGF0YTtcbiAgICBpZiAodHlwZSA9PT0gJ3doaXRlbGlzdHMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVXaGl0ZUxpc3QoZG9tYWluLCBkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHBvc3REYXRhID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0RGF0YSA9IFsuLi5kYXRhXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAucG9zdCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSwgY3JlYXRlT3B0aW9ucylcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5kZWxldGUodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUsIGVuY29kZVVSSUNvbXBvbmVudChhZGRyZXNzKSkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IFN1cHByZXNzaW9uRGVzdHJveVJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgIHZhbHVlOiByZXNwb25zZS5ib2R5LnZhbHVlIHx8ICcnLFxuICAgICAgICBhZGRyZXNzOiByZXNwb25zZS5ib2R5LmFkZHJlc3MgfHwgJycsXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTdXBwcmVzc2lvbkNsaWVudDtcbiIsImltcG9ydCB7IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvTXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQsIFZhbGlkYXRpb25SZXNwb25zZSwgVmFsaWRhdGlvblF1ZXJ5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL1ZhbGlkYXRlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRlQ2xpZW50IHtcbiAgcHVibGljIG11bHRpcGxlVmFsaWRhdGlvbjtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQ6IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubXVsdGlwbGVWYWxpZGF0aW9uID0gbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBWYWxpZGF0aW9uUXVlcnkgPSB7IGFkZHJlc3MgfTtcbiAgICBjb25zdCByZXN1bHQ6IFZhbGlkYXRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9hZGRyZXNzL3ZhbGlkYXRlJywgcXVlcnkpO1xuICAgIHJldHVybiByZXN1bHQuYm9keSBhcyBWYWxpZGF0aW9uUmVzdWx0O1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5cbmltcG9ydCB7XG4gIFZhbGlkYXRpb25SZXNwb25zZSxcbiAgV2ViaG9va0xpc3QsXG4gIFdlYmhvb2tSZXNwb25zZSxcbiAgV2ViaG9va3NJZHMsXG4gIFdlYmhvb2tzUXVlcnlcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL1dlYmhvb2tzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmNsYXNzIFdlYmhvb2sge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJob29rQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIF9wYXJzZVdlYmhvb2tMaXN0KHJlc3BvbnNlOiB7IGJvZHk6IHsgd2ViaG9va3M6IFdlYmhvb2tMaXN0IH0gfSk6IFdlYmhvb2tMaXN0IHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS53ZWJob29rcztcbiAgfVxuXG4gIF9wYXJzZVdlYmhvb2tXaXRoSUQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzcG9uc2U6IFdlYmhvb2tSZXNwb25zZSk6IFdlYmhvb2sge1xuICAgICAgY29uc3Qgd2ViaG9va1Jlc3BvbnNlID0gcmVzcG9uc2U/LmJvZHk/LndlYmhvb2s7XG4gICAgICBsZXQgdXJsID0gd2ViaG9va1Jlc3BvbnNlPy51cmw7XG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICB1cmwgPSB3ZWJob29rUmVzcG9uc2U/LnVybHMgJiYgd2ViaG9va1Jlc3BvbnNlLnVybHMubGVuZ3RoXG4gICAgICAgICAgPyB3ZWJob29rUmVzcG9uc2UudXJsc1swXVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBXZWJob29rKGlkLCB1cmwpO1xuICAgIH07XG4gIH1cblxuICBfcGFyc2VXZWJob29rVGVzdChyZXNwb25zZTogeyBib2R5OiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfSlcbiAgOiB7Y29kZTogbnVtYmVyLCBtZXNzYWdlOnN0cmluZ30ge1xuICAgIHJldHVybiB7IGNvZGU6IHJlc3BvbnNlLmJvZHkuY29kZSwgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlIH0gYXMgVmFsaWRhdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk6IFdlYmhvb2tzUXVlcnkpOiBQcm9taXNlPFdlYmhvb2tMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycpLCBxdWVyeSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va0xpc3QpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCBpZDogV2ViaG9va3NJZHMpOiBQcm9taXNlPFdlYmhvb2s+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICBjcmVhdGUoZG9tYWluOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICB0ZXN0ID0gZmFsc2UpOiBQcm9taXNlPFdlYmhvb2sgfCBWYWxpZGF0aW9uUmVzcG9uc2U+IHtcbiAgICBpZiAodGVzdCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkLCAndGVzdCcpLCB7IHVybCB9KVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tUZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycpLCB7IGlkLCB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nLCB1cmw6IHN0cmluZyk6IFByb21pc2U8V2ViaG9vaz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCksIHsgdXJsIH0pXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcpIDogUHJvbWlzZTxXZWJob29rPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG59XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2Jhc2U2NCB2MS4wLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGVzIGBleHBvcnRzYC5cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCwgZnJvbSBOb2RlLmpzIG9yIEJyb3dzZXJpZmllZCBjb2RlLCBhbmQgdXNlXG5cdC8vIGl0IGFzIGByb290YC5cblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgSW52YWxpZENoYXJhY3RlckVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdH07XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InO1xuXG5cdHZhciBlcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHQvLyBOb3RlOiB0aGUgZXJyb3IgbWVzc2FnZXMgdXNlZCB0aHJvdWdob3V0IHRoaXMgZmlsZSBtYXRjaCB0aG9zZSB1c2VkIGJ5XG5cdFx0Ly8gdGhlIG5hdGl2ZSBgYXRvYmAvYGJ0b2FgIGltcGxlbWVudGF0aW9uIGluIENocm9taXVtLlxuXHRcdHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IobWVzc2FnZSk7XG5cdH07XG5cblx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXHQvLyBodHRwOi8vd2hhdHdnLm9yZy9odG1sL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjc3BhY2UtY2hhcmFjdGVyXG5cdHZhciBSRUdFWF9TUEFDRV9DSEFSQUNURVJTID0gL1tcXHRcXG5cXGZcXHIgXS9nO1xuXG5cdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxuXHQvLyBIVE1MIFN0YW5kYXJkLiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWF0b2Jcblx0Ly8gVGhlIG9wdGltaXplZCBiYXNlNjQtZGVjb2RpbmcgYWxnb3JpdGhtIHVzZWQgaXMgYmFzZWQgb24gQGF0a+KAmXMgZXhjZWxsZW50XG5cdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxuXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dClcblx0XHRcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggJSA0ID09IDApIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZSgvPT0/JC8sICcnKTtcblx0XHRcdGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0bGVuZ3RoICUgNCA9PSAxIHx8XG5cdFx0XHQvLyBodHRwOi8vd2hhdHdnLm9yZy9DI2FscGhhbnVtZXJpYy1hc2NpaS1jaGFyYWN0ZXJzXG5cdFx0XHQvW14rYS16QS1aMC05L10vLnRlc3QoaW5wdXQpXG5cdFx0KSB7XG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J0ludmFsaWQgY2hhcmFjdGVyOiB0aGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBiaXRDb3VudGVyID0gMDtcblx0XHR2YXIgYml0U3RvcmFnZTtcblx0XHR2YXIgYnVmZmVyO1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHR2YXIgcG9zaXRpb24gPSAtMTtcblx0XHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuXHRcdFx0YnVmZmVyID0gVEFCTEUuaW5kZXhPZihpbnB1dC5jaGFyQXQocG9zaXRpb24pKTtcblx0XHRcdGJpdFN0b3JhZ2UgPSBiaXRDb3VudGVyICUgNCA/IGJpdFN0b3JhZ2UgKiA2NCArIGJ1ZmZlciA6IGJ1ZmZlcjtcblx0XHRcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxuXHRcdFx0aWYgKGJpdENvdW50ZXIrKyAlIDQpIHtcblx0XHRcdFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cblx0XHRcdFx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXG5cdFx0XHRcdFx0MHhGRiAmIGJpdFN0b3JhZ2UgPj4gKC0yICogYml0Q291bnRlciAmIDYpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0Ly8gYGVuY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBidG9hYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxuXHR2YXIgZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dCk7XG5cdFx0aWYgKC9bXlxcMC1cXHhGRl0vLnRlc3QoaW5wdXQpKSB7XG5cdFx0XHQvLyBOb3RlOiBubyBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhc3RyYWwgc3ltYm9scyBoZXJlLCBhcyBzdXJyb2dhdGVzIGFyZVxuXHRcdFx0Ly8gbWF0Y2hlZCwgYW5kIHRoZSBpbnB1dCBpcyBzdXBwb3NlZCB0byBvbmx5IGNvbnRhaW4gQVNDSUkgYW55d2F5LlxuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIG9mIHRoZSAnICtcblx0XHRcdFx0J0xhdGluMSByYW5nZS4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgcGFkZGluZyA9IGlucHV0Lmxlbmd0aCAlIDM7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHZhciBhO1xuXHRcdHZhciBiO1xuXHRcdHZhciBjO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0Ly8gTWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgbG9vcC5cblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gcGFkZGluZztcblxuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBSZWFkIHRocmVlIGJ5dGVzLCBpLmUuIDI0IGJpdHMuXG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgMTY7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YyA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYiArIGM7XG5cdFx0XHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXG5cdFx0XHQvLyBtYXRjaGluZyBjaGFyYWN0ZXIgZm9yIGVhY2ggb2YgdGhlbSB0byB0aGUgb3V0cHV0LlxuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxOCAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiA2ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyICYgMHgzRilcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhZGRpbmcgPT0gMikge1xuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDg7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA+PiA0KSAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgMikgJiAweDNGKSArXG5cdFx0XHRcdCc9J1xuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHBhZGRpbmcgPT0gMSkge1xuXHRcdFx0YnVmZmVyID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbik7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDIpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgNCkgJiAweDNGKSArXG5cdFx0XHRcdCc9PSdcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHR2YXIgYmFzZTY0ID0ge1xuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQndmVyc2lvbic6ICcxLjAuMCdcblx0fTtcblxuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBiYXNlNjQ7XG5cdFx0fSk7XG5cdH1cdGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xuXHRcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAodmFyIGtleSBpbiBiYXNlNjQpIHtcblx0XHRcdFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XG5cdH1cblxufSh0aGlzKSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogUmV0dXJucyBhIGBCdWZmZXJgIGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIGRhdGEgVVJJIGB1cmlgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmkgRGF0YSBVUkkgdG8gdHVybiBpbnRvIGEgQnVmZmVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IEJ1ZmZlciBpbnN0YW5jZSBmcm9tIERhdGEgVVJJXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBkYXRhVXJpVG9CdWZmZXIodXJpKSB7XG4gICAgaWYgKCEvXmRhdGE6L2kudGVzdCh1cmkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2B1cmlgIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIERhdGEgVVJJIChtdXN0IGJlZ2luIHdpdGggXCJkYXRhOlwiKScpO1xuICAgIH1cbiAgICAvLyBzdHJpcCBuZXdsaW5lc1xuICAgIHVyaSA9IHVyaS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKTtcbiAgICAvLyBzcGxpdCB0aGUgVVJJIHVwIGludG8gdGhlIFwibWV0YWRhdGFcIiBhbmQgdGhlIFwiZGF0YVwiIHBvcnRpb25zXG4gICAgY29uc3QgZmlyc3RDb21tYSA9IHVyaS5pbmRleE9mKCcsJyk7XG4gICAgaWYgKGZpcnN0Q29tbWEgPT09IC0xIHx8IGZpcnN0Q29tbWEgPD0gNCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYWxmb3JtZWQgZGF0YTogVVJJJyk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSB0aGUgXCJkYXRhOlwiIHNjaGVtZSBhbmQgcGFyc2UgdGhlIG1ldGFkYXRhXG4gICAgY29uc3QgbWV0YSA9IHVyaS5zdWJzdHJpbmcoNSwgZmlyc3RDb21tYSkuc3BsaXQoJzsnKTtcbiAgICBsZXQgY2hhcnNldCA9ICcnO1xuICAgIGxldCBiYXNlNjQgPSBmYWxzZTtcbiAgICBjb25zdCB0eXBlID0gbWV0YVswXSB8fCAndGV4dC9wbGFpbic7XG4gICAgbGV0IHR5cGVGdWxsID0gdHlwZTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG1ldGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG1ldGFbaV0gPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBiYXNlNjQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdHlwZUZ1bGwgKz0gYDske21ldGFbaV19YDtcbiAgICAgICAgICAgIGlmIChtZXRhW2ldLmluZGV4T2YoJ2NoYXJzZXQ9JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjaGFyc2V0ID0gbWV0YVtpXS5zdWJzdHJpbmcoOCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZGVmYXVsdHMgdG8gVVMtQVNDSUkgb25seSBpZiB0eXBlIGlzIG5vdCBwcm92aWRlZFxuICAgIGlmICghbWV0YVswXSAmJiAhY2hhcnNldC5sZW5ndGgpIHtcbiAgICAgICAgdHlwZUZ1bGwgKz0gJztjaGFyc2V0PVVTLUFTQ0lJJztcbiAgICAgICAgY2hhcnNldCA9ICdVUy1BU0NJSSc7XG4gICAgfVxuICAgIC8vIGdldCB0aGUgZW5jb2RlZCBkYXRhIHBvcnRpb24gYW5kIGRlY29kZSBVUkktZW5jb2RlZCBjaGFyc1xuICAgIGNvbnN0IGVuY29kaW5nID0gYmFzZTY0ID8gJ2Jhc2U2NCcgOiAnYXNjaWknO1xuICAgIGNvbnN0IGRhdGEgPSB1bmVzY2FwZSh1cmkuc3Vic3RyaW5nKGZpcnN0Q29tbWEgKyAxKSk7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSwgZW5jb2RpbmcpO1xuICAgIC8vIHNldCBgLnR5cGVgIGFuZCBgLnR5cGVGdWxsYCBwcm9wZXJ0aWVzIHRvIE1JTUUgdHlwZVxuICAgIGJ1ZmZlci50eXBlID0gdHlwZTtcbiAgICBidWZmZXIudHlwZUZ1bGwgPSB0eXBlRnVsbDtcbiAgICAvLyBzZXQgdGhlIGAuY2hhcnNldGAgcHJvcGVydHlcbiAgICBidWZmZXIuY2hhcnNldCA9IGNoYXJzZXQ7XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gZGF0YVVyaVRvQnVmZmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiBAYXV0aG9yIFRvcnUgTmFnYXNoaW1hIDxodHRwczovL2dpdGh1Yi5jb20vbXlzdGljYXRlYT5cbiAqIEBjb3B5cmlnaHQgMjAxNSBUb3J1IE5hZ2FzaGltYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gcm9vdCBkaXJlY3RvcnkgZm9yIGZ1bGwgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFByaXZhdGVEYXRhXG4gKiBAcHJvcGVydHkge0V2ZW50VGFyZ2V0fSBldmVudFRhcmdldCBUaGUgZXZlbnQgdGFyZ2V0LlxuICogQHByb3BlcnR5IHt7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQgb2JqZWN0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGV2ZW50UGhhc2UgVGhlIGN1cnJlbnQgZXZlbnQgcGhhc2UuXG4gKiBAcHJvcGVydHkge0V2ZW50VGFyZ2V0fG51bGx9IGN1cnJlbnRUYXJnZXQgVGhlIGN1cnJlbnQgZXZlbnQgdGFyZ2V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBjYW5jZWxlZCBUaGUgZmxhZyB0byBwcmV2ZW50IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHN0b3BwZWQgVGhlIGZsYWcgdG8gc3RvcCBwcm9wYWdhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaW1tZWRpYXRlU3RvcHBlZCBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uIGltbWVkaWF0ZWx5LlxuICogQHByb3BlcnR5IHtGdW5jdGlvbnxudWxsfSBwYXNzaXZlTGlzdGVuZXIgVGhlIGxpc3RlbmVyIGlmIHRoZSBjdXJyZW50IGxpc3RlbmVyIGlzIHBhc3NpdmUuIE90aGVyd2lzZSB0aGlzIGlzIG51bGwuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZVN0YW1wIFRoZSB1bml4IHRpbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogUHJpdmF0ZSBkYXRhIGZvciBldmVudCB3cmFwcGVycy5cbiAqIEB0eXBlIHtXZWFrTWFwPEV2ZW50LCBQcml2YXRlRGF0YT59XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBwcml2YXRlRGF0YSA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogQ2FjaGUgZm9yIHdyYXBwZXIgY2xhc3Nlcy5cbiAqIEB0eXBlIHtXZWFrTWFwPE9iamVjdCwgRnVuY3Rpb24+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3Qgd3JhcHBlcnMgPSBuZXcgV2Vha01hcCgpO1xuXG4vKipcbiAqIEdldCBwcml2YXRlIGRhdGEuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IHRvIGdldCBwcml2YXRlIGRhdGEuXG4gKiBAcmV0dXJucyB7UHJpdmF0ZURhdGF9IFRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIGV2ZW50LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGQoZXZlbnQpIHtcbiAgICBjb25zdCByZXR2ID0gcHJpdmF0ZURhdGEuZ2V0KGV2ZW50KTtcbiAgICBjb25zb2xlLmFzc2VydChcbiAgICAgICAgcmV0diAhPSBudWxsLFxuICAgICAgICBcIid0aGlzJyBpcyBleHBlY3RlZCBhbiBFdmVudCBvYmplY3QsIGJ1dCBnb3RcIixcbiAgICAgICAgZXZlbnRcbiAgICApO1xuICAgIHJldHVybiByZXR2XG59XG5cbi8qKlxuICogaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNzZXQtdGhlLWNhbmNlbGVkLWZsYWdcbiAqIEBwYXJhbSBkYXRhIHtQcml2YXRlRGF0YX0gcHJpdmF0ZSBkYXRhLlxuICovXG5mdW5jdGlvbiBzZXRDYW5jZWxGbGFnKGRhdGEpIHtcbiAgICBpZiAoZGF0YS5wYXNzaXZlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbmFibGUgdG8gcHJldmVudERlZmF1bHQgaW5zaWRlIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXIgaW52b2NhdGlvbi5cIixcbiAgICAgICAgICAgICAgICBkYXRhLnBhc3NpdmVMaXN0ZW5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFkYXRhLmV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZGF0YS5jYW5jZWxlZCA9IHRydWU7XG4gICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnByZXZlbnREZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGF0YS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLWV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG4vKipcbiAqIFRoZSBldmVudCB3cmFwcGVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBldmVudFRhcmdldCBUaGUgZXZlbnQgdGFyZ2V0IG9mIHRoaXMgZGlzcGF0Y2hpbmcuXG4gKiBAcGFyYW0ge0V2ZW50fHt0eXBlOnN0cmluZ319IGV2ZW50IFRoZSBvcmlnaW5hbCBldmVudCB0byB3cmFwLlxuICovXG5mdW5jdGlvbiBFdmVudChldmVudFRhcmdldCwgZXZlbnQpIHtcbiAgICBwcml2YXRlRGF0YS5zZXQodGhpcywge1xuICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGV2ZW50UGhhc2U6IDIsXG4gICAgICAgIGN1cnJlbnRUYXJnZXQ6IGV2ZW50VGFyZ2V0LFxuICAgICAgICBjYW5jZWxlZDogZmFsc2UsXG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICBpbW1lZGlhdGVTdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgcGFzc2l2ZUxpc3RlbmVyOiBudWxsLFxuICAgICAgICB0aW1lU3RhbXA6IGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpLFxuICAgIH0pO1xuXG4gICAgLy8gaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jVW5mb3JnZWFibGVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJpc1RydXN0ZWRcIiwgeyB2YWx1ZTogZmFsc2UsIGVudW1lcmFibGU6IHRydWUgfSk7XG5cbiAgICAvLyBEZWZpbmUgYWNjZXNzb3JzXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKCEoa2V5IGluIHRoaXMpKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBkZWZpbmVSZWRpcmVjdERlc2NyaXB0b3Ioa2V5KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFNob3VsZCBiZSBlbnVtZXJhYmxlLCBidXQgY2xhc3MgbWV0aG9kcyBhcmUgbm90IGVudW1lcmFibGUuXG5FdmVudC5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnQudHlwZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fVxuICAgICAqL1xuICAgIGdldCB0YXJnZXQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFRhcmdldFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fVxuICAgICAqL1xuICAgIGdldCBjdXJyZW50VGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuY3VycmVudFRhcmdldFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7RXZlbnRUYXJnZXRbXX0gVGhlIGNvbXBvc2VkIHBhdGggb2YgdGhpcyBldmVudC5cbiAgICAgKi9cbiAgICBjb21wb3NlZFBhdGgoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBwZCh0aGlzKS5jdXJyZW50VGFyZ2V0O1xuICAgICAgICBpZiAoY3VycmVudFRhcmdldCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2N1cnJlbnRUYXJnZXRdXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIE5PTkUuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgTk9ORSgpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgb2YgQ0FQVFVSSU5HX1BIQVNFLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IENBUFRVUklOR19QSEFTRSgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgb2YgQVRfVEFSR0VULlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IEFUX1RBUkdFVCgpIHtcbiAgICAgICAgcmV0dXJuIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgb2YgQlVCQkxJTkdfUEhBU0UuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgQlVCQkxJTkdfUEhBU0UoKSB7XG4gICAgICAgIHJldHVybiAzXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBldmVudFBoYXNlKCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRQaGFzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGV2ZW50IGJ1YmJsaW5nLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHBkKHRoaXMpO1xuXG4gICAgICAgIGRhdGEuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5zdG9wUHJvcGFnYXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgZGF0YS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGV2ZW50IGJ1YmJsaW5nLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHBkKHRoaXMpO1xuXG4gICAgICAgIGRhdGEuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIGRhdGEuaW1tZWRpYXRlU3RvcHBlZCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgZGF0YS5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBiZSBidWJibGluZy5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgYnViYmxlcygpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGQodGhpcykuZXZlbnQuYnViYmxlcylcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgY2FuY2VsYWJsZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgY2FuY2VsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGQodGhpcykuZXZlbnQuY2FuY2VsYWJsZSlcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VsIHRoaXMgZXZlbnQuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHNldENhbmNlbEZsYWcocGQodGhpcykpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBpbmRpY2F0ZSBjYW5jZWxsYXRpb24gc3RhdGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5jYW5jZWxlZFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBiZSBjb21wb3NlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgY29tcG9zZWQoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHBkKHRoaXMpLmV2ZW50LmNvbXBvc2VkKVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5peCB0aW1lIG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgdGltZVN0YW1wKCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykudGltZVN0YW1wXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBnZXQgc3JjRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIHN0b3AgZXZlbnQgYnViYmxpbmcuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBnZXQgY2FuY2VsQnViYmxlKCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuc3RvcHBlZFxuICAgIH0sXG4gICAgc2V0IGNhbmNlbEJ1YmJsZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gcGQodGhpcyk7XG5cbiAgICAgICAgZGF0YS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LmNhbmNlbEJ1YmJsZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBpbmRpY2F0ZSBjYW5jZWxsYXRpb24gc3RhdGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBnZXQgcmV0dXJuVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiAhcGQodGhpcykuY2FuY2VsZWRcbiAgICB9LFxuICAgIHNldCByZXR1cm5WYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICBzZXRDYW5jZWxGbGFnKHBkKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHRoaXMgZXZlbnQgb2JqZWN0LiBCdXQgZG8gbm90aGluZyB1bmRlciBldmVudCBkaXNwYXRjaGluZy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtidWJibGVzPWZhbHNlXSBUaGUgZmxhZyB0byBiZSBwb3NzaWJsZSB0byBidWJibGUgdXAuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2FuY2VsYWJsZT1mYWxzZV0gVGhlIGZsYWcgdG8gYmUgcG9zc2libGUgdG8gY2FuY2VsLlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgaW5pdEV2ZW50KCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0sXG59O1xuXG4vLyBgY29uc3RydWN0b3JgIGlzIG5vdCBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEV2ZW50LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbn0pO1xuXG4vLyBFbnN1cmUgYGV2ZW50IGluc3RhbmNlb2Ygd2luZG93LkV2ZW50YCBpcyBgdHJ1ZWAuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LkV2ZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEV2ZW50LnByb3RvdHlwZSwgd2luZG93LkV2ZW50LnByb3RvdHlwZSk7XG5cbiAgICAvLyBNYWtlIGFzc29jaWF0aW9uIGZvciB3cmFwcGVycy5cbiAgICB3cmFwcGVycy5zZXQod2luZG93LkV2ZW50LnByb3RvdHlwZSwgRXZlbnQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byByZWRpcmVjdCBhIGdpdmVuIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBQcm9wZXJ0eSBuYW1lIHRvIGRlZmluZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge1Byb3BlcnR5RGVzY3JpcHRvcn0gVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gcmVkaXJlY3QgdGhlIHByb3BlcnR5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFtrZXldXG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgcGQodGhpcykuZXZlbnRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byBjYWxsIGEgZ2l2ZW4gbWV0aG9kIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBQcm9wZXJ0eSBuYW1lIHRvIGRlZmluZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge1Byb3BlcnR5RGVzY3JpcHRvcn0gVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gY2FsbCB0aGUgbWV0aG9kIHByb3BlcnR5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lQ2FsbERlc2NyaXB0b3Ioa2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWUoKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IHBkKHRoaXMpLmV2ZW50O1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50W2tleV0uYXBwbHkoZXZlbnQsIGFyZ3VtZW50cylcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH1cbn1cblxuLyoqXG4gKiBEZWZpbmUgbmV3IHdyYXBwZXIgY2xhc3MuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBCYXNlRXZlbnQgVGhlIGJhc2Ugd3JhcHBlciBjbGFzcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgcHJvdG90eXBlIG9mIHRoZSBvcmlnaW5hbCBldmVudC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIGRlZmluZWQgd3JhcHBlciBjbGFzcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVdyYXBwZXIoQmFzZUV2ZW50LCBwcm90bykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm90byk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCYXNlRXZlbnRcbiAgICB9XG5cbiAgICAvKiogQ3VzdG9tRXZlbnQgKi9cbiAgICBmdW5jdGlvbiBDdXN0b21FdmVudChldmVudFRhcmdldCwgZXZlbnQpIHtcbiAgICAgICAgQmFzZUV2ZW50LmNhbGwodGhpcywgZXZlbnRUYXJnZXQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBDdXN0b21FdmVudC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IEN1c3RvbUV2ZW50LCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgfSk7XG5cbiAgICAvLyBEZWZpbmUgYWNjZXNzb3JzLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIShrZXkgaW4gQmFzZUV2ZW50LnByb3RvdHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBrZXkpO1xuICAgICAgICAgICAgY29uc3QgaXNGdW5jID0gdHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBDdXN0b21FdmVudC5wcm90b3R5cGUsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGlzRnVuY1xuICAgICAgICAgICAgICAgICAgICA/IGRlZmluZUNhbGxEZXNjcmlwdG9yKGtleSlcbiAgICAgICAgICAgICAgICAgICAgOiBkZWZpbmVSZWRpcmVjdERlc2NyaXB0b3Ioa2V5KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBDdXN0b21FdmVudFxufVxuXG4vKipcbiAqIEdldCB0aGUgd3JhcHBlciBjbGFzcyBvZiBhIGdpdmVuIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgcHJvdG90eXBlIG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byBnZXQgaXRzIHdyYXBwZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSB3cmFwcGVyIGNsYXNzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0V3JhcHBlcihwcm90bykge1xuICAgIGlmIChwcm90byA9PSBudWxsIHx8IHByb3RvID09PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgICAgIHJldHVybiBFdmVudFxuICAgIH1cblxuICAgIGxldCB3cmFwcGVyID0gd3JhcHBlcnMuZ2V0KHByb3RvKTtcbiAgICBpZiAod3JhcHBlciA9PSBudWxsKSB7XG4gICAgICAgIHdyYXBwZXIgPSBkZWZpbmVXcmFwcGVyKGdldFdyYXBwZXIoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSksIHByb3RvKTtcbiAgICAgICAgd3JhcHBlcnMuc2V0KHByb3RvLCB3cmFwcGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXJcbn1cblxuLyoqXG4gKiBXcmFwIGEgZ2l2ZW4gZXZlbnQgdG8gbWFuYWdlbWVudCBhIGRpc3BhdGNoaW5nLlxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCBvZiB0aGlzIGRpc3BhdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IFRoZSBldmVudCB0byB3cmFwLlxuICogQHJldHVybnMge0V2ZW50fSBUaGUgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHdyYXBFdmVudChldmVudFRhcmdldCwgZXZlbnQpIHtcbiAgICBjb25zdCBXcmFwcGVyID0gZ2V0V3JhcHBlcihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZXZlbnQpKTtcbiAgICByZXR1cm4gbmV3IFdyYXBwZXIoZXZlbnRUYXJnZXQsIGV2ZW50KVxufVxuXG4vKipcbiAqIEdldCB0aGUgaW1tZWRpYXRlU3RvcHBlZCBmbGFnIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gZ2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24gaW1tZWRpYXRlbHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc1N0b3BwZWQoZXZlbnQpIHtcbiAgICByZXR1cm4gcGQoZXZlbnQpLmltbWVkaWF0ZVN0b3BwZWRcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgZXZlbnQgcGhhc2Ugb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge251bWJlcn0gZXZlbnRQaGFzZSBOZXcgZXZlbnQgcGhhc2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldEV2ZW50UGhhc2UoZXZlbnQsIGV2ZW50UGhhc2UpIHtcbiAgICBwZChldmVudCkuZXZlbnRQaGFzZSA9IGV2ZW50UGhhc2U7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHRhcmdldCBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIHNldCBjdXJyZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8bnVsbH0gY3VycmVudFRhcmdldCBOZXcgY3VycmVudCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldEN1cnJlbnRUYXJnZXQoZXZlbnQsIGN1cnJlbnRUYXJnZXQpIHtcbiAgICBwZChldmVudCkuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7XG59XG5cbi8qKlxuICogU2V0IGEgcGFzc2l2ZSBsaXN0ZW5lciBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIHNldCBjdXJyZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gcGFzc2l2ZUxpc3RlbmVyIE5ldyBwYXNzaXZlIGxpc3RlbmVyLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRQYXNzaXZlTGlzdGVuZXIoZXZlbnQsIHBhc3NpdmVMaXN0ZW5lcikge1xuICAgIHBkKGV2ZW50KS5wYXNzaXZlTGlzdGVuZXIgPSBwYXNzaXZlTGlzdGVuZXI7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTGlzdGVuZXJOb2RlXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICogQHByb3BlcnR5IHsxfDJ8M30gbGlzdGVuZXJUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhc3NpdmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb25jZVxuICogQHByb3BlcnR5IHtMaXN0ZW5lck5vZGV8bnVsbH0gbmV4dFxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgTWFwPHN0cmluZywgTGlzdGVuZXJOb2RlPj59XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBsaXN0ZW5lcnNNYXAgPSBuZXcgV2Vha01hcCgpO1xuXG4vLyBMaXN0ZW5lciB0eXBlc1xuY29uc3QgQ0FQVFVSRSA9IDE7XG5jb25zdCBCVUJCTEUgPSAyO1xuY29uc3QgQVRUUklCVVRFID0gMztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gdmFsdWUgaXMgYW4gb2JqZWN0IG9yIG5vdC5cbiAqIEBwYXJhbSB7YW55fSB4IFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QoeCkge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiIC8vZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxufVxuXG4vKipcbiAqIEdldCBsaXN0ZW5lcnMuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBldmVudFRhcmdldCBUaGUgZXZlbnQgdGFyZ2V0IHRvIGdldC5cbiAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBMaXN0ZW5lck5vZGU+fSBUaGUgbGlzdGVuZXJzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0TGlzdGVuZXJzKGV2ZW50VGFyZ2V0KSB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gbGlzdGVuZXJzTWFwLmdldChldmVudFRhcmdldCk7XG4gICAgaWYgKGxpc3RlbmVycyA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBcIid0aGlzJyBpcyBleHBlY3RlZCBhbiBFdmVudFRhcmdldCBvYmplY3QsIGJ1dCBnb3QgYW5vdGhlciB2YWx1ZS5cIlxuICAgICAgICApXG4gICAgfVxuICAgIHJldHVybiBsaXN0ZW5lcnNcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBldmVudCBhdHRyaWJ1dGUgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gZ2V0IHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUV2ZW50QXR0cmlidXRlRGVzY3JpcHRvcihldmVudE5hbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5saXN0ZW5lclR5cGUgPT09IEFUVFJJQlVURSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5saXN0ZW5lclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQobGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIiAmJiAhaXNPYmplY3QobGlzdGVuZXIpKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIgPSBudWxsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG5cbiAgICAgICAgICAgIC8vIFRyYXZlcnNlIHRvIHRoZSB0YWlsIHdoaWxlIHJlbW92aW5nIG9sZCB2YWx1ZS5cbiAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmxpc3RlbmVyVHlwZSA9PT0gQVRUUklCVVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBvbGQgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbm9kZS5uZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFkZCBuZXcgdmFsdWUuXG4gICAgICAgICAgICBpZiAobGlzdGVuZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0ge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcixcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJUeXBlOiBBVFRSSUJVVEUsXG4gICAgICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvbmNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChwcmV2ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBuZXdOb2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH1cbn1cblxuLyoqXG4gKiBEZWZpbmUgYW4gZXZlbnQgYXR0cmlidXRlIChlLmcuIGBldmVudFRhcmdldC5vbmNsaWNrYCkuXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnRUYXJnZXRQcm90b3R5cGUgVGhlIGV2ZW50IHRhcmdldCBwcm90b3R5cGUgdG8gZGVmaW5lIGFuIGV2ZW50IGF0dHJiaXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byBkZWZpbmUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZGVmaW5lRXZlbnRBdHRyaWJ1dGUoZXZlbnRUYXJnZXRQcm90b3R5cGUsIGV2ZW50TmFtZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgZXZlbnRUYXJnZXRQcm90b3R5cGUsXG4gICAgICAgIGBvbiR7ZXZlbnROYW1lfWAsXG4gICAgICAgIGRlZmluZUV2ZW50QXR0cmlidXRlRGVzY3JpcHRvcihldmVudE5hbWUpXG4gICAgKTtcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBjdXN0b20gRXZlbnRUYXJnZXQgd2l0aCBldmVudCBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gZXZlbnROYW1lcyBFdmVudCBuYW1lcyBmb3IgZXZlbnQgYXR0cmlidXRlcy5cbiAqIEByZXR1cm5zIHtFdmVudFRhcmdldH0gVGhlIGN1c3RvbSBFdmVudFRhcmdldC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUN1c3RvbUV2ZW50VGFyZ2V0KGV2ZW50TmFtZXMpIHtcbiAgICAvKiogQ3VzdG9tRXZlbnRUYXJnZXQgKi9cbiAgICBmdW5jdGlvbiBDdXN0b21FdmVudFRhcmdldCgpIHtcbiAgICAgICAgRXZlbnRUYXJnZXQuY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICBDdXN0b21FdmVudFRhcmdldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50VGFyZ2V0LnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IEN1c3RvbUV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50TmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZGVmaW5lRXZlbnRBdHRyaWJ1dGUoQ3VzdG9tRXZlbnRUYXJnZXQucHJvdG90eXBlLCBldmVudE5hbWVzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQ3VzdG9tRXZlbnRUYXJnZXRcbn1cblxuLyoqXG4gKiBFdmVudFRhcmdldC5cbiAqXG4gKiAtIFRoaXMgaXMgY29uc3RydWN0b3IgaWYgbm8gYXJndW1lbnRzLlxuICogLSBUaGlzIGlzIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIEN1c3RvbUV2ZW50VGFyZ2V0IGNvbnN0cnVjdG9yIGlmIHRoZXJlIGFyZSBhcmd1bWVudHMuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKlxuICogICAgIGNsYXNzIEEgZXh0ZW5kcyBFdmVudFRhcmdldCB7fVxuICogICAgIGNsYXNzIEIgZXh0ZW5kcyBFdmVudFRhcmdldChcIm1lc3NhZ2VcIikge31cbiAqICAgICBjbGFzcyBDIGV4dGVuZHMgRXZlbnRUYXJnZXQoXCJtZXNzYWdlXCIsIFwiZXJyb3JcIikge31cbiAqICAgICBjbGFzcyBEIGV4dGVuZHMgRXZlbnRUYXJnZXQoW1wibWVzc2FnZVwiLCBcImVycm9yXCJdKSB7fVxuICovXG5mdW5jdGlvbiBFdmVudFRhcmdldCgpIHtcbiAgICAvKmVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuICovXG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBFdmVudFRhcmdldCkge1xuICAgICAgICBsaXN0ZW5lcnNNYXAuc2V0KHRoaXMsIG5ldyBNYXAoKSk7XG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZUN1c3RvbUV2ZW50VGFyZ2V0KGFyZ3VtZW50c1swXSlcbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdHlwZXNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmluZUN1c3RvbUV2ZW50VGFyZ2V0KHR5cGVzKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpXG4gICAgLyplc2xpbnQtZW5hYmxlIGNvbnNpc3RlbnQtcmV0dXJuICovXG59XG5cbi8vIFNob3VsZCBiZSBlbnVtZXJhYmxlLCBidXQgY2xhc3MgbWV0aG9kcyBhcmUgbm90IGVudW1lcmFibGUuXG5FdmVudFRhcmdldC5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQWRkIGEgZ2l2ZW4gbGlzdGVuZXIgdG8gdGhpcyBldmVudCB0YXJnZXQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byBhZGQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIHRvIGFkZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58e2NhcHR1cmU/OmJvb2xlYW4scGFzc2l2ZT86Ym9vbGVhbixvbmNlPzpib29sZWFufX0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGZvciB0aGlzIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiICYmICFpc09iamVjdChsaXN0ZW5lcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCInbGlzdGVuZXInIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdC5cIilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0lzT2JqID0gaXNPYmplY3Qob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGNhcHR1cmUgPSBvcHRpb25zSXNPYmpcbiAgICAgICAgICAgID8gQm9vbGVhbihvcHRpb25zLmNhcHR1cmUpXG4gICAgICAgICAgICA6IEJvb2xlYW4ob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyVHlwZSA9IGNhcHR1cmUgPyBDQVBUVVJFIDogQlVCQkxFO1xuICAgICAgICBjb25zdCBuZXdOb2RlID0ge1xuICAgICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgICBsaXN0ZW5lclR5cGUsXG4gICAgICAgICAgICBwYXNzaXZlOiBvcHRpb25zSXNPYmogJiYgQm9vbGVhbihvcHRpb25zLnBhc3NpdmUpLFxuICAgICAgICAgICAgb25jZTogb3B0aW9uc0lzT2JqICYmIEJvb2xlYW4ob3B0aW9ucy5vbmNlKSxcbiAgICAgICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gU2V0IGl0IGFzIHRoZSBmaXJzdCBub2RlIGlmIHRoZSBmaXJzdCBub2RlIGlzIG51bGwuXG4gICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbmV3Tm9kZSk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYXZlcnNlIHRvIHRoZSB0YWlsIHdoaWxlIGNoZWNraW5nIGR1cGxpY2F0aW9uLi5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lciA9PT0gbGlzdGVuZXIgJiZcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSA9PT0gbGlzdGVuZXJUeXBlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBTaG91bGQgaWdub3JlIGR1cGxpY2F0aW9uLlxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGl0LlxuICAgICAgICBwcmV2Lm5leHQgPSBuZXdOb2RlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBnaXZlbiBsaXN0ZW5lciBmcm9tIHRoaXMgZXZlbnQgdGFyZ2V0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufHtjYXB0dXJlPzpib29sZWFuLHBhc3NpdmU/OmJvb2xlYW4sb25jZT86Ym9vbGVhbn19IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBmb3IgdGhpcyBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICBjb25zdCBjYXB0dXJlID0gaXNPYmplY3Qob3B0aW9ucylcbiAgICAgICAgICAgID8gQm9vbGVhbihvcHRpb25zLmNhcHR1cmUpXG4gICAgICAgICAgICA6IEJvb2xlYW4ob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyVHlwZSA9IGNhcHR1cmUgPyBDQVBUVVJFIDogQlVCQkxFO1xuXG4gICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyID09PSBsaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXJUeXBlID09PSBsaXN0ZW5lclR5cGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbm9kZS5uZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzcGF0Y2ggYSBnaXZlbiBldmVudC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fHt0eXBlOnN0cmluZ319IGV2ZW50IFRoZSBldmVudCB0byBkaXNwYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYGZhbHNlYCBpZiBjYW5jZWxlZC5cbiAgICAgKi9cbiAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudCA9PSBudWxsIHx8IHR5cGVvZiBldmVudC50eXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV2ZW50LnR5cGVcIiBzaG91bGQgYmUgYSBzdHJpbmcuJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGxpc3RlbmVycyBhcmVuJ3QgcmVnaXN0ZXJlZCwgdGVybWluYXRlLlxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGV2ZW50LnR5cGU7XG4gICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2luY2Ugd2UgY2Fubm90IHJld3JpdGUgc2V2ZXJhbCBwcm9wZXJ0aWVzLCBzbyB3cmFwIG9iamVjdC5cbiAgICAgICAgY29uc3Qgd3JhcHBlZEV2ZW50ID0gd3JhcEV2ZW50KHRoaXMsIGV2ZW50KTtcblxuICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgcHJvY2VzcyBjYXB0dXJpbmcgcGhhc2UgYW5kIGJ1YmJsaW5nIHBoYXNlLlxuICAgICAgICAvLyBUaGlzIGlzbid0IHBhcnRpY2lwYXRpbmcgaW4gYSB0cmVlLlxuICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGlzIGxpc3RlbmVyIGlmIGl0J3Mgb25jZVxuICAgICAgICAgICAgaWYgKG5vZGUub25jZSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbm9kZS5uZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2FsbCB0aGlzIGxpc3RlbmVyXG4gICAgICAgICAgICBzZXRQYXNzaXZlTGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgd3JhcHBlZEV2ZW50LFxuICAgICAgICAgICAgICAgIG5vZGUucGFzc2l2ZSA/IG5vZGUubGlzdGVuZXIgOiBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLmxpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyLmNhbGwodGhpcywgd3JhcHBlZEV2ZW50KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXJUeXBlICE9PSBBVFRSSUJVVEUgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2Ygbm9kZS5saXN0ZW5lci5oYW5kbGVFdmVudCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyLmhhbmRsZUV2ZW50KHdyYXBwZWRFdmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJyZWFrIGlmIGBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25gIHdhcyBjYWxsZWQuXG4gICAgICAgICAgICBpZiAoaXNTdG9wcGVkKHdyYXBwZWRFdmVudCkpIHtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHNldFBhc3NpdmVMaXN0ZW5lcih3cmFwcGVkRXZlbnQsIG51bGwpO1xuICAgICAgICBzZXRFdmVudFBoYXNlKHdyYXBwZWRFdmVudCwgMCk7XG4gICAgICAgIHNldEN1cnJlbnRUYXJnZXQod3JhcHBlZEV2ZW50LCBudWxsKTtcblxuICAgICAgICByZXR1cm4gIXdyYXBwZWRFdmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgfSxcbn07XG5cbi8vIGBjb25zdHJ1Y3RvcmAgaXMgbm90IGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRUYXJnZXQucHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogRXZlbnRUYXJnZXQsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxufSk7XG5cbi8vIEVuc3VyZSBgZXZlbnRUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuRXZlbnRUYXJnZXRgIGlzIGB0cnVlYC5cbmlmIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgdHlwZW9mIHdpbmRvdy5FdmVudFRhcmdldCAhPT0gXCJ1bmRlZmluZWRcIlxuKSB7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgd2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZSk7XG59XG5cbmV4cG9ydHMuZGVmaW5lRXZlbnRBdHRyaWJ1dGUgPSBkZWZpbmVFdmVudEF0dHJpYnV0ZTtcbmV4cG9ydHMuRXZlbnRUYXJnZXQgPSBFdmVudFRhcmdldDtcbmV4cG9ydHMuZGVmYXVsdCA9IEV2ZW50VGFyZ2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50VGFyZ2V0XG5tb2R1bGUuZXhwb3J0cy5FdmVudFRhcmdldCA9IG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEV2ZW50VGFyZ2V0XG5tb2R1bGUuZXhwb3J0cy5kZWZpbmVFdmVudEF0dHJpYnV0ZSA9IGRlZmluZUV2ZW50QXR0cmlidXRlXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ldmVudC10YXJnZXQtc2hpbS5qcy5tYXBcbiIsImNvbnN0IHtSZWFkYWJsZX0gPSByZXF1aXJlKCdzdHJlYW0nKTtcblxuLyoqXG4gKiBAdHlwZSB7V2Vha01hcDxCbG9iLCB7dHlwZTogc3RyaW5nLCBzaXplOiBudW1iZXIsIHBhcnRzOiAoQmxvYiB8IEJ1ZmZlcilbXSB9Pn1cbiAqL1xuY29uc3Qgd20gPSBuZXcgV2Vha01hcCgpO1xuXG5hc3luYyBmdW5jdGlvbiAqIHJlYWQocGFydHMpIHtcblx0Zm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG5cdFx0aWYgKCdzdHJlYW0nIGluIHBhcnQpIHtcblx0XHRcdHlpZWxkICogcGFydC5zdHJlYW0oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0eWllbGQgcGFydDtcblx0XHR9XG5cdH1cbn1cblxuY2xhc3MgQmxvYiB7XG5cdC8qKlxuXHQgKiBUaGUgQmxvYigpIGNvbnN0cnVjdG9yIHJldHVybnMgYSBuZXcgQmxvYiBvYmplY3QuIFRoZSBjb250ZW50XG5cdCAqIG9mIHRoZSBibG9iIGNvbnNpc3RzIG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSB2YWx1ZXMgZ2l2ZW5cblx0ICogaW4gdGhlIHBhcmFtZXRlciBhcnJheS5cblx0ICpcblx0ICogQHBhcmFtIHsoQXJyYXlCdWZmZXJMaWtlIHwgQXJyYXlCdWZmZXJWaWV3IHwgQmxvYiB8IEJ1ZmZlciB8IHN0cmluZylbXX0gYmxvYlBhcnRzXG5cdCAqIEBwYXJhbSB7eyB0eXBlPzogc3RyaW5nIH19IFtvcHRpb25zXVxuXHQgKi9cblx0Y29uc3RydWN0b3IoYmxvYlBhcnRzID0gW10sIG9wdGlvbnMgPSB7fSkge1xuXHRcdGxldCBzaXplID0gMDtcblxuXHRcdGNvbnN0IHBhcnRzID0gYmxvYlBhcnRzLm1hcChlbGVtZW50ID0+IHtcblx0XHRcdGxldCBidWZmZXI7XG5cdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuXHRcdFx0XHRidWZmZXIgPSBlbGVtZW50O1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZWxlbWVudCkpIHtcblx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20oZWxlbWVudC5idWZmZXIsIGVsZW1lbnQuYnl0ZU9mZnNldCwgZWxlbWVudC5ieXRlTGVuZ3RoKTtcblx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdFx0XHRcdGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGVsZW1lbnQpO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0XHRidWZmZXIgPSBlbGVtZW50O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20odHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZWxlbWVudCA6IFN0cmluZyhlbGVtZW50KSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2V4cGxpY2l0LWxlbmd0aC1jaGVja1xuXHRcdFx0c2l6ZSArPSBidWZmZXIubGVuZ3RoIHx8IGJ1ZmZlci5zaXplIHx8IDA7XG5cdFx0XHRyZXR1cm4gYnVmZmVyO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgdHlwZSA9IG9wdGlvbnMudHlwZSA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcob3B0aW9ucy50eXBlKS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0d20uc2V0KHRoaXMsIHtcblx0XHRcdHR5cGU6IC9bXlxcdTAwMjAtXFx1MDA3RV0vLnRlc3QodHlwZSkgPyAnJyA6IHR5cGUsXG5cdFx0XHRzaXplLFxuXHRcdFx0cGFydHNcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQmxvYiBpbnRlcmZhY2UncyBzaXplIHByb3BlcnR5IHJldHVybnMgdGhlXG5cdCAqIHNpemUgb2YgdGhlIEJsb2IgaW4gYnl0ZXMuXG5cdCAqL1xuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gd20uZ2V0KHRoaXMpLnNpemU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHR5cGUgcHJvcGVydHkgb2YgYSBCbG9iIG9iamVjdCByZXR1cm5zIHRoZSBNSU1FIHR5cGUgb2YgdGhlIGZpbGUuXG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gd20uZ2V0KHRoaXMpLnR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHRleHQoKSBtZXRob2QgaW4gdGhlIEJsb2IgaW50ZXJmYWNlIHJldHVybnMgYSBQcm9taXNlXG5cdCAqIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZlxuXHQgKiB0aGUgYmxvYiwgaW50ZXJwcmV0ZWQgYXMgVVRGLTguXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn1cblx0ICovXG5cdGFzeW5jIHRleHQoKSB7XG5cdFx0cmV0dXJuIEJ1ZmZlci5mcm9tKGF3YWl0IHRoaXMuYXJyYXlCdWZmZXIoKSkudG9TdHJpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYXJyYXlCdWZmZXIoKSBtZXRob2QgaW4gdGhlIEJsb2IgaW50ZXJmYWNlIHJldHVybnMgYVxuXHQgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIGJsb2IgYXNcblx0ICogYmluYXJ5IGRhdGEgY29udGFpbmVkIGluIGFuIEFycmF5QnVmZmVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPEFycmF5QnVmZmVyPn1cblx0ICovXG5cdGFzeW5jIGFycmF5QnVmZmVyKCkge1xuXHRcdGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheSh0aGlzLnNpemUpO1xuXHRcdGxldCBvZmZzZXQgPSAwO1xuXHRcdGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgdGhpcy5zdHJlYW0oKSkge1xuXHRcdFx0ZGF0YS5zZXQoY2h1bmssIG9mZnNldCk7XG5cdFx0XHRvZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhLmJ1ZmZlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQmxvYiBpbnRlcmZhY2UncyBzdHJlYW0oKSBtZXRob2QgaXMgZGlmZmVyZW5jZSBmcm9tIG5hdGl2ZVxuXHQgKiBhbmQgdXNlcyBub2RlIHN0cmVhbXMgaW5zdGVhZCBvZiB3aGF0d2cgc3RyZWFtcy5cblx0ICpcblx0ICogQHJldHVybnMge1JlYWRhYmxlfSBOb2RlIHJlYWRhYmxlIHN0cmVhbVxuXHQgKi9cblx0c3RyZWFtKCkge1xuXHRcdHJldHVybiBSZWFkYWJsZS5mcm9tKHJlYWQod20uZ2V0KHRoaXMpLnBhcnRzKSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJsb2IgaW50ZXJmYWNlJ3Mgc2xpY2UoKSBtZXRob2QgY3JlYXRlcyBhbmQgcmV0dXJucyBhXG5cdCAqIG5ldyBCbG9iIG9iamVjdCB3aGljaCBjb250YWlucyBkYXRhIGZyb20gYSBzdWJzZXQgb2YgdGhlXG5cdCAqIGJsb2Igb24gd2hpY2ggaXQncyBjYWxsZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnRdXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVdXG5cdCAqL1xuXHRzbGljZShzdGFydCA9IDAsIGVuZCA9IHRoaXMuc2l6ZSwgdHlwZSA9ICcnKSB7XG5cdFx0Y29uc3Qge3NpemV9ID0gdGhpcztcblxuXHRcdGxldCByZWxhdGl2ZVN0YXJ0ID0gc3RhcnQgPCAwID8gTWF0aC5tYXgoc2l6ZSArIHN0YXJ0LCAwKSA6IE1hdGgubWluKHN0YXJ0LCBzaXplKTtcblx0XHRsZXQgcmVsYXRpdmVFbmQgPSBlbmQgPCAwID8gTWF0aC5tYXgoc2l6ZSArIGVuZCwgMCkgOiBNYXRoLm1pbihlbmQsIHNpemUpO1xuXG5cdFx0Y29uc3Qgc3BhbiA9IE1hdGgubWF4KHJlbGF0aXZlRW5kIC0gcmVsYXRpdmVTdGFydCwgMCk7XG5cdFx0Y29uc3QgcGFydHMgPSB3bS5nZXQodGhpcykucGFydHMudmFsdWVzKCk7XG5cdFx0Y29uc3QgYmxvYlBhcnRzID0gW107XG5cdFx0bGV0IGFkZGVkID0gMDtcblxuXHRcdGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuXHRcdFx0Y29uc3Qgc2l6ZSA9IEFycmF5QnVmZmVyLmlzVmlldyhwYXJ0KSA/IHBhcnQuYnl0ZUxlbmd0aCA6IHBhcnQuc2l6ZTtcblx0XHRcdGlmIChyZWxhdGl2ZVN0YXJ0ICYmIHNpemUgPD0gcmVsYXRpdmVTdGFydCkge1xuXHRcdFx0XHQvLyBTa2lwIHRoZSBiZWdpbm5pbmcgYW5kIGNoYW5nZSB0aGUgcmVsYXRpdmVcblx0XHRcdFx0Ly8gc3RhcnQgJiBlbmQgcG9zaXRpb24gYXMgd2Ugc2tpcCB0aGUgdW53YW50ZWQgcGFydHNcblx0XHRcdFx0cmVsYXRpdmVTdGFydCAtPSBzaXplO1xuXHRcdFx0XHRyZWxhdGl2ZUVuZCAtPSBzaXplO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgY2h1bmsgPSBwYXJ0LnNsaWNlKHJlbGF0aXZlU3RhcnQsIE1hdGgubWluKHNpemUsIHJlbGF0aXZlRW5kKSk7XG5cdFx0XHRcdGJsb2JQYXJ0cy5wdXNoKGNodW5rKTtcblx0XHRcdFx0YWRkZWQgKz0gQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSA/IGNodW5rLmJ5dGVMZW5ndGggOiBjaHVuay5zaXplO1xuXHRcdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gMDsgLy8gQWxsIG5leHQgc2VxdWVudGFsIHBhcnRzIHNob3VsZCBzdGFydCBhdCAwXG5cblx0XHRcdFx0Ly8gZG9uJ3QgYWRkIHRoZSBvdmVyZmxvdyB0byBuZXcgYmxvYlBhcnRzXG5cdFx0XHRcdGlmIChhZGRlZCA+PSBzcGFuKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW10sIHt0eXBlOiBTdHJpbmcodHlwZSkudG9Mb3dlckNhc2UoKX0pO1xuXHRcdE9iamVjdC5hc3NpZ24od20uZ2V0KGJsb2IpLCB7c2l6ZTogc3BhbiwgcGFydHM6IGJsb2JQYXJ0c30pO1xuXG5cdFx0cmV0dXJuIGJsb2I7XG5cdH1cblxuXHRnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG5cdFx0cmV0dXJuICdCbG9iJztcblx0fVxuXG5cdHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXShvYmplY3QpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0b2JqZWN0ICYmXG5cdFx0XHR0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuXHRcdFx0dHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgJiZcblx0XHRcdG9iamVjdC5zdHJlYW0ubGVuZ3RoID09PSAwICYmXG5cdFx0XHR0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmXG5cdFx0XHQvXihCbG9ifEZpbGUpJC8udGVzdChvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSlcblx0XHQpO1xuXHR9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb2IucHJvdG90eXBlLCB7XG5cdHNpemU6IHtlbnVtZXJhYmxlOiB0cnVlfSxcblx0dHlwZToge2VudW1lcmFibGU6IHRydWV9LFxuXHRzbGljZToge2VudW1lcmFibGU6IHRydWV9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBCbG9iO1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZmV0Y2ggPSByZXF1aXJlKCdub2RlLWZldGNoJyk7XG5jb25zdCBBYm9ydENvbnRyb2xsZXIgPSByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJyk7XG5cbmNvbnN0IFRFTl9NRUdBQllURVMgPSAxMDAwICogMTAwMCAqIDEwO1xuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuXHRnbG9iYWwuZmV0Y2ggPSAodXJsLCBvcHRpb25zKSA9PiBmZXRjaCh1cmwsIHtoaWdoV2F0ZXJNYXJrOiBURU5fTUVHQUJZVEVTLCAuLi5vcHRpb25zfSk7XG59XG5cbmlmICghZ2xvYmFsLkhlYWRlcnMpIHtcblx0Z2xvYmFsLkhlYWRlcnMgPSBmZXRjaC5IZWFkZXJzO1xufVxuXG5pZiAoIWdsb2JhbC5SZXF1ZXN0KSB7XG5cdGdsb2JhbC5SZXF1ZXN0ID0gZmV0Y2guUmVxdWVzdDtcbn1cblxuaWYgKCFnbG9iYWwuUmVzcG9uc2UpIHtcblx0Z2xvYmFsLlJlc3BvbnNlID0gZmV0Y2guUmVzcG9uc2U7XG59XG5cbmlmICghZ2xvYmFsLkFib3J0Q29udHJvbGxlcikge1xuXHRnbG9iYWwuQWJvcnRDb250cm9sbGVyID0gQWJvcnRDb250cm9sbGVyO1xufVxuXG5pZiAoIWdsb2JhbC5SZWFkYWJsZVN0cmVhbSkge1xuXHR0cnkge1xuXHRcdGdsb2JhbC5SZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3dlYi1zdHJlYW1zLXBvbHlmaWxsL3BvbnlmaWxsL2VzMjAxOCcpO1xuXHR9IGNhdGNoIChfKSB7fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2t5L3VtZCcpO1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwua3kgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cblx0LyohIE1JVCBMaWNlbnNlIMKpIFNpbmRyZSBTb3JodXMgKi9cblxuXHRjb25zdCBnbG9iYWxzID0ge307XG5cblx0Y29uc3QgZ2V0R2xvYmFsID0gcHJvcGVydHkgPT4ge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0aWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmICYmIHByb3BlcnR5IGluIHNlbGYpIHtcblx0XHRcdHJldHVybiBzZWxmO1xuXHRcdH1cblxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdyAmJiBwcm9wZXJ0eSBpbiB3aW5kb3cpIHtcblx0XHRcdHJldHVybiB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbCAmJiBwcm9wZXJ0eSBpbiBnbG9iYWwpIHtcblx0XHRcdHJldHVybiBnbG9iYWw7XG5cdFx0fVxuXG5cdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHtcblx0XHRcdHJldHVybiBnbG9iYWxUaGlzO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCBnbG9iYWxQcm9wZXJ0aWVzID0gW1xuXHRcdCdIZWFkZXJzJyxcblx0XHQnUmVxdWVzdCcsXG5cdFx0J1Jlc3BvbnNlJyxcblx0XHQnUmVhZGFibGVTdHJlYW0nLFxuXHRcdCdmZXRjaCcsXG5cdFx0J0Fib3J0Q29udHJvbGxlcicsXG5cdFx0J0Zvcm1EYXRhJ1xuXHRdO1xuXG5cdGZvciAoY29uc3QgcHJvcGVydHkgb2YgZ2xvYmFsUHJvcGVydGllcykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxzLCBwcm9wZXJ0eSwge1xuXHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRjb25zdCBnbG9iYWxPYmplY3QgPSBnZXRHbG9iYWwocHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGdsb2JhbE9iamVjdCAmJiBnbG9iYWxPYmplY3RbcHJvcGVydHldO1xuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUuYmluZChnbG9iYWxPYmplY3QpIDogdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBpc09iamVjdCA9IHZhbHVlID0+IHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG5cdGNvbnN0IHN1cHBvcnRzQWJvcnRDb250cm9sbGVyID0gdHlwZW9mIGdsb2JhbHMuQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nO1xuXHRjb25zdCBzdXBwb3J0c1N0cmVhbXMgPSB0eXBlb2YgZ2xvYmFscy5SZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblx0Y29uc3Qgc3VwcG9ydHNGb3JtRGF0YSA9IHR5cGVvZiBnbG9iYWxzLkZvcm1EYXRhID09PSAnZnVuY3Rpb24nO1xuXG5cdGNvbnN0IG1lcmdlSGVhZGVycyA9IChzb3VyY2UxLCBzb3VyY2UyKSA9PiB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IGdsb2JhbHMuSGVhZGVycyhzb3VyY2UxIHx8IHt9KTtcblx0XHRjb25zdCBpc0hlYWRlcnNJbnN0YW5jZSA9IHNvdXJjZTIgaW5zdGFuY2VvZiBnbG9iYWxzLkhlYWRlcnM7XG5cdFx0Y29uc3Qgc291cmNlID0gbmV3IGdsb2JhbHMuSGVhZGVycyhzb3VyY2UyIHx8IHt9KTtcblxuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHNvdXJjZSkge1xuXHRcdFx0aWYgKChpc0hlYWRlcnNJbnN0YW5jZSAmJiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmVzdWx0LmRlbGV0ZShrZXkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0LnNldChrZXksIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdGNvbnN0IGRlZXBNZXJnZSA9ICguLi5zb3VyY2VzKSA9PiB7XG5cdFx0bGV0IHJldHVyblZhbHVlID0ge307XG5cdFx0bGV0IGhlYWRlcnMgPSB7fTtcblxuXHRcdGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcblx0XHRcdFx0aWYgKCEoQXJyYXkuaXNBcnJheShyZXR1cm5WYWx1ZSkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBbXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVyblZhbHVlID0gWy4uLnJldHVyblZhbHVlLCAuLi5zb3VyY2VdO1xuXHRcdFx0fSBlbHNlIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG5cdFx0XHRcdGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XG5cdFx0XHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAoa2V5IGluIHJldHVyblZhbHVlKSkge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBkZWVwTWVyZ2UocmV0dXJuVmFsdWVba2V5XSwgdmFsdWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVyblZhbHVlID0gey4uLnJldHVyblZhbHVlLCBba2V5XTogdmFsdWV9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzT2JqZWN0KHNvdXJjZS5oZWFkZXJzKSkge1xuXHRcdFx0XHRcdGhlYWRlcnMgPSBtZXJnZUhlYWRlcnMoaGVhZGVycywgc291cmNlLmhlYWRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVyblZhbHVlLmhlYWRlcnMgPSBoZWFkZXJzO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0fTtcblxuXHRjb25zdCByZXF1ZXN0TWV0aG9kcyA9IFtcblx0XHQnZ2V0Jyxcblx0XHQncG9zdCcsXG5cdFx0J3B1dCcsXG5cdFx0J3BhdGNoJyxcblx0XHQnaGVhZCcsXG5cdFx0J2RlbGV0ZSdcblx0XTtcblxuXHRjb25zdCByZXNwb25zZVR5cGVzID0ge1xuXHRcdGpzb246ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHR0ZXh0OiAndGV4dC8qJyxcblx0XHRmb3JtRGF0YTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuXHRcdGFycmF5QnVmZmVyOiAnKi8qJyxcblx0XHRibG9iOiAnKi8qJ1xuXHR9O1xuXG5cdGNvbnN0IHJldHJ5TWV0aG9kcyA9IFtcblx0XHQnZ2V0Jyxcblx0XHQncHV0Jyxcblx0XHQnaGVhZCcsXG5cdFx0J2RlbGV0ZScsXG5cdFx0J29wdGlvbnMnLFxuXHRcdCd0cmFjZSdcblx0XTtcblxuXHRjb25zdCByZXRyeVN0YXR1c0NvZGVzID0gW1xuXHRcdDQwOCxcblx0XHQ0MTMsXG5cdFx0NDI5LFxuXHRcdDUwMCxcblx0XHQ1MDIsXG5cdFx0NTAzLFxuXHRcdDUwNFxuXHRdO1xuXG5cdGNvbnN0IHJldHJ5QWZ0ZXJTdGF0dXNDb2RlcyA9IFtcblx0XHQ0MTMsXG5cdFx0NDI5LFxuXHRcdDUwM1xuXHRdO1xuXG5cdGNvbnN0IHN0b3AgPSBTeW1ib2woJ3N0b3AnKTtcblxuXHRjbGFzcyBIVFRQRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdFx0Y29uc3RydWN0b3IocmVzcG9uc2UpIHtcblx0XHRcdC8vIFNldCB0aGUgbWVzc2FnZSB0byB0aGUgc3RhdHVzIHRleHQsIHN1Y2ggYXMgVW5hdXRob3JpemVkLFxuXHRcdFx0Ly8gd2l0aCBzb21lIGZhbGxiYWNrcy4gVGhpcyBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSB1bmRlZmluZWQuXG5cdFx0XHRzdXBlcihcblx0XHRcdFx0cmVzcG9uc2Uuc3RhdHVzVGV4dCB8fFxuXHRcdFx0XHRTdHJpbmcoXG5cdFx0XHRcdFx0KHJlc3BvbnNlLnN0YXR1cyA9PT0gMCB8fCByZXNwb25zZS5zdGF0dXMpID9cblx0XHRcdFx0XHRcdHJlc3BvbnNlLnN0YXR1cyA6ICdVbmtub3duIHJlc3BvbnNlIGVycm9yJ1xuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5uYW1lID0gJ0hUVFBFcnJvcic7XG5cdFx0XHR0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRcdGNvbnN0cnVjdG9yKHJlcXVlc3QpIHtcblx0XHRcdHN1cGVyKCdSZXF1ZXN0IHRpbWVkIG91dCcpO1xuXHRcdFx0dGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cdFx0XHR0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGRlbGF5ID0gbXMgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG5cblx0Ly8gYFByb21pc2UucmFjZSgpYCB3b3JrYXJvdW5kICgjOTEpXG5cdGNvbnN0IHRpbWVvdXQgPSAocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBvcHRpb25zKSA9PlxuXHRcdG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAoYWJvcnRDb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0YWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZWplY3QobmV3IFRpbWVvdXRFcnJvcihyZXF1ZXN0KSk7XG5cdFx0XHR9LCBvcHRpb25zLnRpbWVvdXQpO1xuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuICovXG5cdFx0XHRvcHRpb25zLmZldGNoKHJlcXVlc3QpXG5cdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdC5jYXRjaChyZWplY3QpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dElEKTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW4gKi9cblx0XHR9KTtcblxuXHRjb25zdCBub3JtYWxpemVSZXF1ZXN0TWV0aG9kID0gaW5wdXQgPT4gcmVxdWVzdE1ldGhvZHMuaW5jbHVkZXMoaW5wdXQpID8gaW5wdXQudG9VcHBlckNhc2UoKSA6IGlucHV0O1xuXG5cdGNvbnN0IGRlZmF1bHRSZXRyeU9wdGlvbnMgPSB7XG5cdFx0bGltaXQ6IDIsXG5cdFx0bWV0aG9kczogcmV0cnlNZXRob2RzLFxuXHRcdHN0YXR1c0NvZGVzOiByZXRyeVN0YXR1c0NvZGVzLFxuXHRcdGFmdGVyU3RhdHVzQ29kZXM6IHJldHJ5QWZ0ZXJTdGF0dXNDb2Rlc1xuXHR9O1xuXG5cdGNvbnN0IG5vcm1hbGl6ZVJldHJ5T3B0aW9ucyA9IChyZXRyeSA9IHt9KSA9PiB7XG5cdFx0aWYgKHR5cGVvZiByZXRyeSA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdC4uLmRlZmF1bHRSZXRyeU9wdGlvbnMsXG5cdFx0XHRcdGxpbWl0OiByZXRyeVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAocmV0cnkubWV0aG9kcyAmJiAhQXJyYXkuaXNBcnJheShyZXRyeS5tZXRob2RzKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdyZXRyeS5tZXRob2RzIG11c3QgYmUgYW4gYXJyYXknKTtcblx0XHR9XG5cblx0XHRpZiAocmV0cnkuc3RhdHVzQ29kZXMgJiYgIUFycmF5LmlzQXJyYXkocmV0cnkuc3RhdHVzQ29kZXMpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3JldHJ5LnN0YXR1c0NvZGVzIG11c3QgYmUgYW4gYXJyYXknKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uZGVmYXVsdFJldHJ5T3B0aW9ucyxcblx0XHRcdC4uLnJldHJ5LFxuXHRcdFx0YWZ0ZXJTdGF0dXNDb2RlczogcmV0cnlBZnRlclN0YXR1c0NvZGVzXG5cdFx0fTtcblx0fTtcblxuXHQvLyBUaGUgbWF4aW11bSB2YWx1ZSBvZiBhIDMyYml0IGludCAoc2VlIGlzc3VlICMxMTcpXG5cdGNvbnN0IG1heFNhZmVUaW1lb3V0ID0gMjE0NzQ4MzY0NztcblxuXHRjbGFzcyBLeSB7XG5cdFx0Y29uc3RydWN0b3IoaW5wdXQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdFx0dGhpcy5fcmV0cnlDb3VudCA9IDA7XG5cdFx0XHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHRcdFx0dGhpcy5fb3B0aW9ucyA9IHtcblx0XHRcdFx0Ly8gVE9ETzogY3JlZGVudGlhbHMgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUgc3BlYyBjaGFuZ2UgaXMgaW1wbGVtZW50ZWQgaW4gYWxsIGJyb3dzZXJzLiBDb250ZXh0OiBodHRwczovL3d3dy5jaHJvbWVzdGF0dXMuY29tL2ZlYXR1cmUvNDUzOTQ3MzMxMjM1MDIwOFxuXHRcdFx0XHRjcmVkZW50aWFsczogdGhpcy5faW5wdXQuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJyxcblx0XHRcdFx0Li4ub3B0aW9ucyxcblx0XHRcdFx0aGVhZGVyczogbWVyZ2VIZWFkZXJzKHRoaXMuX2lucHV0LmhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycyksXG5cdFx0XHRcdGhvb2tzOiBkZWVwTWVyZ2Uoe1xuXHRcdFx0XHRcdGJlZm9yZVJlcXVlc3Q6IFtdLFxuXHRcdFx0XHRcdGJlZm9yZVJldHJ5OiBbXSxcblx0XHRcdFx0XHRhZnRlclJlc3BvbnNlOiBbXVxuXHRcdFx0XHR9LCBvcHRpb25zLmhvb2tzKSxcblx0XHRcdFx0bWV0aG9kOiBub3JtYWxpemVSZXF1ZXN0TWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMuX2lucHV0Lm1ldGhvZCksXG5cdFx0XHRcdHByZWZpeFVybDogU3RyaW5nKG9wdGlvbnMucHJlZml4VXJsIHx8ICcnKSxcblx0XHRcdFx0cmV0cnk6IG5vcm1hbGl6ZVJldHJ5T3B0aW9ucyhvcHRpb25zLnJldHJ5KSxcblx0XHRcdFx0dGhyb3dIdHRwRXJyb3JzOiBvcHRpb25zLnRocm93SHR0cEVycm9ycyAhPT0gZmFsc2UsXG5cdFx0XHRcdHRpbWVvdXQ6IHR5cGVvZiBvcHRpb25zLnRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gMTAwMDAgOiBvcHRpb25zLnRpbWVvdXQsXG5cdFx0XHRcdGZldGNoOiBvcHRpb25zLmZldGNoIHx8IGdsb2JhbHMuZmV0Y2hcblx0XHRcdH07XG5cblx0XHRcdGlmICh0eXBlb2YgdGhpcy5faW5wdXQgIT09ICdzdHJpbmcnICYmICEodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBVUkwgfHwgdGhpcy5faW5wdXQgaW5zdGFuY2VvZiBnbG9iYWxzLlJlcXVlc3QpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2BpbnB1dGAgbXVzdCBiZSBhIHN0cmluZywgVVJMLCBvciBSZXF1ZXN0Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLnByZWZpeFVybCAmJiB0eXBlb2YgdGhpcy5faW5wdXQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9pbnB1dC5zdGFydHNXaXRoKCcvJykpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2BpbnB1dGAgbXVzdCBub3QgYmVnaW4gd2l0aCBhIHNsYXNoIHdoZW4gdXNpbmcgYHByZWZpeFVybGAnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5fb3B0aW9ucy5wcmVmaXhVcmwuZW5kc1dpdGgoJy8nKSkge1xuXHRcdFx0XHRcdHRoaXMuX29wdGlvbnMucHJlZml4VXJsICs9ICcvJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuX2lucHV0ID0gdGhpcy5fb3B0aW9ucy5wcmVmaXhVcmwgKyB0aGlzLl9pbnB1dDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN1cHBvcnRzQWJvcnRDb250cm9sbGVyKSB7XG5cdFx0XHRcdHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IGdsb2JhbHMuQWJvcnRDb250cm9sbGVyKCk7XG5cdFx0XHRcdGlmICh0aGlzLl9vcHRpb25zLnNpZ25hbCkge1xuXHRcdFx0XHRcdHRoaXMuX29wdGlvbnMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuX29wdGlvbnMuc2lnbmFsID0gdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJlcXVlc3QgPSBuZXcgZ2xvYmFscy5SZXF1ZXN0KHRoaXMuX2lucHV0LCB0aGlzLl9vcHRpb25zKTtcblxuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMuc2VhcmNoUGFyYW1zKSB7XG5cdFx0XHRcdGNvbnN0IHNlYXJjaFBhcmFtcyA9ICc/JyArIG5ldyBVUkxTZWFyY2hQYXJhbXModGhpcy5fb3B0aW9ucy5zZWFyY2hQYXJhbXMpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdGNvbnN0IHVybCA9IHRoaXMucmVxdWVzdC51cmwucmVwbGFjZSgvKD86XFw/Lio/KT8oPz0jfCQpLywgc2VhcmNoUGFyYW1zKTtcblxuXHRcdFx0XHQvLyBUbyBwcm92aWRlIGNvcnJlY3QgZm9ybSBib3VuZGFyeSwgQ29udGVudC1UeXBlIGhlYWRlciBzaG91bGQgYmUgZGVsZXRlZCBlYWNoIHRpbWUgd2hlbiBuZXcgUmVxdWVzdCBpbnN0YW50aWF0ZWQgZnJvbSBhbm90aGVyIG9uZVxuXHRcdFx0XHRpZiAoKChzdXBwb3J0c0Zvcm1EYXRhICYmIHRoaXMuX29wdGlvbnMuYm9keSBpbnN0YW5jZW9mIGdsb2JhbHMuRm9ybURhdGEpIHx8IHRoaXMuX29wdGlvbnMuYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykgJiYgISh0aGlzLl9vcHRpb25zLmhlYWRlcnMgJiYgdGhpcy5fb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSkpIHtcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3QuaGVhZGVycy5kZWxldGUoJ2NvbnRlbnQtdHlwZScpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5yZXF1ZXN0ID0gbmV3IGdsb2JhbHMuUmVxdWVzdChuZXcgZ2xvYmFscy5SZXF1ZXN0KHVybCwgdGhpcy5yZXF1ZXN0KSwgdGhpcy5fb3B0aW9ucyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLmpzb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLl9vcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeSh0aGlzLl9vcHRpb25zLmpzb24pO1xuXHRcdFx0XHR0aGlzLnJlcXVlc3QuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cdFx0XHRcdHRoaXMucmVxdWVzdCA9IG5ldyBnbG9iYWxzLlJlcXVlc3QodGhpcy5yZXF1ZXN0LCB7Ym9keTogdGhpcy5fb3B0aW9ucy5ib2R5fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZuID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fb3B0aW9ucy50aW1lb3V0ID4gbWF4U2FmZVRpbWVvdXQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIFxcYHRpbWVvdXRcXGAgb3B0aW9uIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gJHttYXhTYWZlVGltZW91dH1gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF3YWl0IGRlbGF5KDEpO1xuXHRcdFx0XHRsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9mZXRjaCgpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaG9vayBvZiB0aGlzLl9vcHRpb25zLmhvb2tzLmFmdGVyUmVzcG9uc2UpIHtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuXHRcdFx0XHRcdGNvbnN0IG1vZGlmaWVkUmVzcG9uc2UgPSBhd2FpdCBob29rKFxuXHRcdFx0XHRcdFx0dGhpcy5yZXF1ZXN0LFxuXHRcdFx0XHRcdFx0dGhpcy5fb3B0aW9ucyxcblx0XHRcdFx0XHRcdHRoaXMuX2RlY29yYXRlUmVzcG9uc2UocmVzcG9uc2UuY2xvbmUoKSlcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKG1vZGlmaWVkUmVzcG9uc2UgaW5zdGFuY2VvZiBnbG9iYWxzLlJlc3BvbnNlKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IG1vZGlmaWVkUmVzcG9uc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fZGVjb3JhdGVSZXNwb25zZShyZXNwb25zZSk7XG5cblx0XHRcdFx0aWYgKCFyZXNwb25zZS5vayAmJiB0aGlzLl9vcHRpb25zLnRocm93SHR0cEVycm9ycykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBIVFRQRXJyb3IocmVzcG9uc2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgYG9uRG93bmxvYWRQcm9ncmVzc2AgaXMgcGFzc2VkLCBpdCB1c2VzIHRoZSBzdHJlYW0gQVBJIGludGVybmFsbHlcblx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdFx0aWYgKHRoaXMuX29wdGlvbnMub25Eb3dubG9hZFByb2dyZXNzKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLl9vcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGBvbkRvd25sb2FkUHJvZ3Jlc3NgIG9wdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIXN1cHBvcnRzU3RyZWFtcykge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdTdHJlYW1zIGFyZSBub3Qgc3VwcG9ydGVkIGluIHlvdXIgZW52aXJvbm1lbnQuIGBSZWFkYWJsZVN0cmVhbWAgaXMgbWlzc2luZy4nKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fc3RyZWFtKHJlc3BvbnNlLmNsb25lKCksIHRoaXMuX29wdGlvbnMub25Eb3dubG9hZFByb2dyZXNzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGlzUmV0cmlhYmxlTWV0aG9kID0gdGhpcy5fb3B0aW9ucy5yZXRyeS5tZXRob2RzLmluY2x1ZGVzKHRoaXMucmVxdWVzdC5tZXRob2QudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBpc1JldHJpYWJsZU1ldGhvZCA/IHRoaXMuX3JldHJ5KGZuKSA6IGZuKCk7XG5cblx0XHRcdGZvciAoY29uc3QgW3R5cGUsIG1pbWVUeXBlXSBvZiBPYmplY3QuZW50cmllcyhyZXNwb25zZVR5cGVzKSkge1xuXHRcdFx0XHRyZXN1bHRbdHlwZV0gPSBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0LmhlYWRlcnMuc2V0KCdhY2NlcHQnLCB0aGlzLnJlcXVlc3QuaGVhZGVycy5nZXQoJ2FjY2VwdCcpIHx8IG1pbWVUeXBlKTtcblxuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IHJlc3VsdCkuY2xvbmUoKTtcblxuXHRcdFx0XHRcdGlmICh0eXBlID09PSAnanNvbicpIHtcblx0XHRcdFx0XHRcdGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChvcHRpb25zLnBhcnNlSnNvbikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb3B0aW9ucy5wYXJzZUpzb24oYXdhaXQgcmVzcG9uc2UudGV4dCgpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2VbdHlwZV0oKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRfY2FsY3VsYXRlUmV0cnlEZWxheShlcnJvcikge1xuXHRcdFx0dGhpcy5fcmV0cnlDb3VudCsrO1xuXG5cdFx0XHRpZiAodGhpcy5fcmV0cnlDb3VudCA8IHRoaXMuX29wdGlvbnMucmV0cnkubGltaXQgJiYgIShlcnJvciBpbnN0YW5jZW9mIFRpbWVvdXRFcnJvcikpIHtcblx0XHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgSFRUUEVycm9yKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLl9vcHRpb25zLnJldHJ5LnN0YXR1c0NvZGVzLmluY2x1ZGVzKGVycm9yLnJlc3BvbnNlLnN0YXR1cykpIHtcblx0XHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXIgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzLmdldCgnUmV0cnktQWZ0ZXInKTtcblx0XHRcdFx0XHRpZiAocmV0cnlBZnRlciAmJiB0aGlzLl9vcHRpb25zLnJldHJ5LmFmdGVyU3RhdHVzQ29kZXMuaW5jbHVkZXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKSkge1xuXHRcdFx0XHRcdFx0bGV0IGFmdGVyID0gTnVtYmVyKHJldHJ5QWZ0ZXIpO1xuXHRcdFx0XHRcdFx0aWYgKE51bWJlci5pc05hTihhZnRlcikpIHtcblx0XHRcdFx0XHRcdFx0YWZ0ZXIgPSBEYXRlLnBhcnNlKHJldHJ5QWZ0ZXIpIC0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFmdGVyICo9IDEwMDA7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgdGhpcy5fb3B0aW9ucy5yZXRyeS5tYXhSZXRyeUFmdGVyICE9PSAndW5kZWZpbmVkJyAmJiBhZnRlciA+IHRoaXMuX29wdGlvbnMucmV0cnkubWF4UmV0cnlBZnRlcikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIGFmdGVyO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgQkFDS09GRl9GQUNUT1IgPSAwLjM7XG5cdFx0XHRcdHJldHVybiBCQUNLT0ZGX0ZBQ1RPUiAqICgyICoqICh0aGlzLl9yZXRyeUNvdW50IC0gMSkpICogMTAwMDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0X2RlY29yYXRlUmVzcG9uc2UocmVzcG9uc2UpIHtcblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLnBhcnNlSnNvbikge1xuXHRcdFx0XHRyZXNwb25zZS5qc29uID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLl9vcHRpb25zLnBhcnNlSnNvbihhd2FpdCByZXNwb25zZS50ZXh0KCkpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0YXN5bmMgX3JldHJ5KGZuKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgZm4oKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IG1zID0gTWF0aC5taW4odGhpcy5fY2FsY3VsYXRlUmV0cnlEZWxheShlcnJvciksIG1heFNhZmVUaW1lb3V0KTtcblx0XHRcdFx0aWYgKG1zICE9PSAwICYmIHRoaXMuX3JldHJ5Q291bnQgPiAwKSB7XG5cdFx0XHRcdFx0YXdhaXQgZGVsYXkobXMpO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBob29rIG9mIHRoaXMuX29wdGlvbnMuaG9va3MuYmVmb3JlUmV0cnkpIHtcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG5cdFx0XHRcdFx0XHRjb25zdCBob29rUmVzdWx0ID0gYXdhaXQgaG9vayh7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcblx0XHRcdFx0XHRcdFx0b3B0aW9uczogdGhpcy5fb3B0aW9ucyxcblx0XHRcdFx0XHRcdFx0ZXJyb3IsXG5cdFx0XHRcdFx0XHRcdHJldHJ5Q291bnQ6IHRoaXMuX3JldHJ5Q291bnRcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBgc3RvcGAgaXMgcmV0dXJuZWQgZnJvbSB0aGUgaG9vaywgdGhlIHJldHJ5IHByb2Nlc3MgaXMgc3RvcHBlZFxuXHRcdFx0XHRcdFx0aWYgKGhvb2tSZXN1bHQgPT09IHN0b3ApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLl9yZXRyeShmbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5fb3B0aW9ucy50aHJvd0h0dHBFcnJvcnMpIHtcblx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGFzeW5jIF9mZXRjaCgpIHtcblx0XHRcdGZvciAoY29uc3QgaG9vayBvZiB0aGlzLl9vcHRpb25zLmhvb2tzLmJlZm9yZVJlcXVlc3QpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3Bcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgaG9vayh0aGlzLnJlcXVlc3QsIHRoaXMuX29wdGlvbnMpO1xuXG5cdFx0XHRcdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0ID0gcmVzdWx0O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlc3BvbnNlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy50aW1lb3V0ID09PSBmYWxzZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fb3B0aW9ucy5mZXRjaCh0aGlzLnJlcXVlc3QuY2xvbmUoKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aW1lb3V0KHRoaXMucmVxdWVzdC5jbG9uZSgpLCB0aGlzLmFib3J0Q29udHJvbGxlciwgdGhpcy5fb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRfc3RyZWFtKHJlc3BvbnNlLCBvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcblx0XHRcdGNvbnN0IHRvdGFsQnl0ZXMgPSBOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpIHx8IDA7XG5cdFx0XHRsZXQgdHJhbnNmZXJyZWRCeXRlcyA9IDA7XG5cblx0XHRcdHJldHVybiBuZXcgZ2xvYmFscy5SZXNwb25zZShcblx0XHRcdFx0bmV3IGdsb2JhbHMuUmVhZGFibGVTdHJlYW0oe1xuXHRcdFx0XHRcdHN0YXJ0KGNvbnRyb2xsZXIpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG5cblx0XHRcdFx0XHRcdGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcblx0XHRcdFx0XHRcdFx0b25Eb3dubG9hZFByb2dyZXNzKHtwZXJjZW50OiAwLCB0cmFuc2ZlcnJlZEJ5dGVzOiAwLCB0b3RhbEJ5dGVzfSwgbmV3IFVpbnQ4QXJyYXkoKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGFzeW5jIGZ1bmN0aW9uIHJlYWQoKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZG9uZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNmZXJyZWRCeXRlcyArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBlcmNlbnQgPSB0b3RhbEJ5dGVzID09PSAwID8gMCA6IHRyYW5zZmVycmVkQnl0ZXMgLyB0b3RhbEJ5dGVzO1xuXHRcdFx0XHRcdFx0XHRcdG9uRG93bmxvYWRQcm9ncmVzcyh7cGVyY2VudCwgdHJhbnNmZXJyZWRCeXRlcywgdG90YWxCeXRlc30sIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdHJlYWQoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmVhZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgdmFsaWRhdGVBbmRNZXJnZSA9ICguLi5zb3VyY2VzKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuXHRcdFx0aWYgKCghaXNPYmplY3Qoc291cmNlKSB8fCBBcnJheS5pc0FycmF5KHNvdXJjZSkpICYmIHR5cGVvZiBzb3VyY2UgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgb3B0aW9uc2AgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZGVlcE1lcmdlKHt9LCAuLi5zb3VyY2VzKTtcblx0fTtcblxuXHRjb25zdCBjcmVhdGVJbnN0YW5jZSA9IGRlZmF1bHRzID0+IHtcblx0XHRjb25zdCBreSA9IChpbnB1dCwgb3B0aW9ucykgPT4gbmV3IEt5KGlucHV0LCB2YWxpZGF0ZUFuZE1lcmdlKGRlZmF1bHRzLCBvcHRpb25zKSk7XG5cblx0XHRmb3IgKGNvbnN0IG1ldGhvZCBvZiByZXF1ZXN0TWV0aG9kcykge1xuXHRcdFx0a3lbbWV0aG9kXSA9IChpbnB1dCwgb3B0aW9ucykgPT4gbmV3IEt5KGlucHV0LCB2YWxpZGF0ZUFuZE1lcmdlKGRlZmF1bHRzLCBvcHRpb25zLCB7bWV0aG9kfSkpO1xuXHRcdH1cblxuXHRcdGt5LkhUVFBFcnJvciA9IEhUVFBFcnJvcjtcblx0XHRreS5UaW1lb3V0RXJyb3IgPSBUaW1lb3V0RXJyb3I7XG5cdFx0a3kuY3JlYXRlID0gbmV3RGVmYXVsdHMgPT4gY3JlYXRlSW5zdGFuY2UodmFsaWRhdGVBbmRNZXJnZShuZXdEZWZhdWx0cykpO1xuXHRcdGt5LmV4dGVuZCA9IG5ld0RlZmF1bHRzID0+IGNyZWF0ZUluc3RhbmNlKHZhbGlkYXRlQW5kTWVyZ2UoZGVmYXVsdHMsIG5ld0RlZmF1bHRzKSk7XG5cdFx0a3kuc3RvcCA9IHN0b3A7XG5cblx0XHRyZXR1cm4ga3k7XG5cdH07XG5cblx0dmFyIGluZGV4ID0gY3JlYXRlSW5zdGFuY2UoKTtcblxuXHRyZXR1cm4gaW5kZXg7XG5cbn0pKSk7XG4iLCIoZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIGRlZmluaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZGVmaW5pdGlvbik7XG4gIGVsc2UgY29udGV4dFtuYW1lXSA9IGRlZmluaXRpb24oKTtcbn0pKCd1cmxqb2luJywgdGhpcywgZnVuY3Rpb24gKCkge1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0QXJyYXkgPSBbXTtcbiAgICBpZiAoc3RyQXJyYXkubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuXG4gICAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgc3RyQXJyYXlbMF0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXlteLzpdKzpcXC8qJC8pICYmIHN0ckFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBmaXJzdCA9IHN0ckFycmF5LnNoaWZ0KCk7XG4gICAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gICAgfVxuXG4gICAgLy8gVGhlcmUgbXVzdCBiZSB0d28gb3IgdGhyZWUgc2xhc2hlcyBpbiB0aGUgZmlsZSBwcm90b2NvbCwgdHdvIHNsYXNoZXMgaW4gYW55dGhpbmcgZWxzZS5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBjb21wb25lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9uZW50ID09PSAnJykgeyBjb250aW51ZTsgfVxuXG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9eW1xcL10rLywgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBlbmRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBsYXN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciB0aGUgbGFzdCBjb21wb25lbnQgd2Ugd2lsbCBjb21iaW5lIG11bHRpcGxlIHNsYXNoZXMgdG8gYSBzaW5nbGUgb25lLlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcvJyk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdEFycmF5LnB1c2goY29tcG9uZW50KTtcblxuICAgIH1cblxuICAgIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gICAgLy8gRWFjaCBpbnB1dCBjb21wb25lbnQgaXMgbm93IHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzbGFzaCBleGNlcHQgdGhlIHBvc3NpYmxlIGZpcnN0IHBsYWluIHByb3RvY29sIHBhcnQuXG5cbiAgICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIHBhcmFtZXRlcnMgb3IgaGFzaFxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gICAgLy8gcmVwbGFjZSA/IGluIHBhcmFtZXRlcnMgd2l0aCAmXG4gICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCc/Jyk7XG4gICAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXQ7XG5cbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplKGlucHV0KTtcbiAgfTtcblxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHJlYW1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXJsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInV0aWxcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiemxpYlwiKTsiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZldGNoO1xuXG5jb25zdCBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xuY29uc3QgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xuY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgZGF0YVVyaVRvQnVmZmVyID0gcmVxdWlyZSgnZGF0YS11cmktdG8tYnVmZmVyJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgQmxvYiA9IHJlcXVpcmUoJ2ZldGNoLWJsb2InKTtcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbmNsYXNzIEZldGNoQmFzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCB0eXBlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0Ly8gSGlkZSBjdXN0b20gZXJyb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmcm9tIGVuZC11c2Vyc1xuXHRcdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuXG5cdFx0dGhpcy50eXBlID0gdHlwZTtcblx0fVxuXG5cdGdldCBuYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG5cdH1cblxuXHRnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcblx0fVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHt7IGFkZHJlc3M/OiBzdHJpbmcsIGNvZGU6IHN0cmluZywgZGVzdD86IHN0cmluZywgZXJybm86IG51bWJlciwgaW5mbz86IG9iamVjdCwgbWVzc2FnZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBzeXNjYWxsOiBzdHJpbmd9fSBTeXN0ZW1FcnJvclxuKi9cblxuLyoqXG4gKiBGZXRjaEVycm9yIGludGVyZmFjZSBmb3Igb3BlcmF0aW9uYWwgZXJyb3JzXG4gKi9cbmNsYXNzIEZldGNoRXJyb3IgZXh0ZW5kcyBGZXRjaEJhc2VFcnJvciB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gIHtzdHJpbmd9IG1lc3NhZ2UgLSAgICAgIEVycm9yIG1lc3NhZ2UgZm9yIGh1bWFuXG5cdCAqIEBwYXJhbSAge3N0cmluZ30gW3R5cGVdIC0gICAgICAgIEVycm9yIHR5cGUgZm9yIG1hY2hpbmVcblx0ICogQHBhcmFtICB7U3lzdGVtRXJyb3J9IFtzeXN0ZW1FcnJvcl0gLSBGb3IgTm9kZS5qcyBzeXN0ZW0gZXJyb3Jcblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHR5cGUsIHN5c3RlbUVycm9yKSB7XG5cdFx0c3VwZXIobWVzc2FnZSwgdHlwZSk7XG5cdFx0Ly8gV2hlbiBlcnIudHlwZSBpcyBgc3lzdGVtYCwgZXJyLmVycm9yZWRTeXNDYWxsIGNvbnRhaW5zIHN5c3RlbSBlcnJvciBhbmQgZXJyLmNvZGUgY29udGFpbnMgc3lzdGVtIGVycm9yIGNvZGVcblx0XHRpZiAoc3lzdGVtRXJyb3IpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tdWx0aS1hc3NpZ25cblx0XHRcdHRoaXMuY29kZSA9IHRoaXMuZXJybm8gPSBzeXN0ZW1FcnJvci5jb2RlO1xuXHRcdFx0dGhpcy5lcnJvcmVkU3lzQ2FsbCA9IHN5c3RlbUVycm9yLnN5c2NhbGw7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogSXMuanNcbiAqXG4gKiBPYmplY3QgdHlwZSBjaGVja3MuXG4gKi9cblxuY29uc3QgTkFNRSA9IFN5bWJvbC50b1N0cmluZ1RhZztcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvbm9kZS1mZXRjaC9pc3N1ZXMvMjk2I2lzc3VlY29tbWVudC0zMDc1OTgxNDNcbiAqXG4gKiBAcGFyYW0gIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1ldGVycyA9IG9iamVjdCA9PiB7XG5cdHJldHVybiAoXG5cdFx0dHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcblx0XHR0eXBlb2Ygb2JqZWN0LmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBvYmplY3QuZGVsZXRlID09PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2Ygb2JqZWN0LmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBvYmplY3QuaGFzID09PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIG9iamVjdC5zZXQgPT09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2Ygb2JqZWN0LnNvcnQgPT09ICdmdW5jdGlvbicgJiZcblx0XHRvYmplY3RbTkFNRV0gPT09ICdVUkxTZWFyY2hQYXJhbXMnXG5cdCk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGBvYmplY3RgIGlzIGEgVzNDIGBCbG9iYCBvYmplY3QgKHdoaWNoIGBGaWxlYCBpbmhlcml0cyBmcm9tKVxuICpcbiAqIEBwYXJhbSAgeyp9IG9ialxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNCbG9iID0gb2JqZWN0ID0+IHtcblx0cmV0dXJuIChcblx0XHR0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuXHRcdHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2Ygb2JqZWN0LnR5cGUgPT09ICdzdHJpbmcnICYmXG5cdFx0dHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmXG5cdFx0L14oQmxvYnxGaWxlKSQvLnRlc3Qob2JqZWN0W05BTUVdKVxuXHQpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIHNwZWMtY29tcGxpYW50IGBGb3JtRGF0YWAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEob2JqZWN0KSB7XG5cdHJldHVybiAoXG5cdFx0dHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcblx0XHR0eXBlb2Ygb2JqZWN0LmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2Ygb2JqZWN0LmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBvYmplY3QuZGVsZXRlID09PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIG9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIG9iamVjdC52YWx1ZXMgPT09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2Ygb2JqZWN0LmVudHJpZXMgPT09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmXG5cdFx0b2JqZWN0W05BTUVdID09PSAnRm9ybURhdGEnXG5cdCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYW4gaW5zdGFuY2Ugb2YgQWJvcnRTaWduYWwuXG4gKlxuICogQHBhcmFtICB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5jb25zdCBpc0Fib3J0U2lnbmFsID0gb2JqZWN0ID0+IHtcblx0cmV0dXJuIChcblx0XHR0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuXHRcdG9iamVjdFtOQU1FXSA9PT0gJ0Fib3J0U2lnbmFsJ1xuXHQpO1xufTtcblxuY29uc3QgY2FycmlhZ2UgPSAnXFxyXFxuJztcbmNvbnN0IGRhc2hlcyA9ICctJy5yZXBlYXQoMik7XG5jb25zdCBjYXJyaWFnZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNhcnJpYWdlKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRhcnlcbiAqL1xuY29uc3QgZ2V0Rm9vdGVyID0gYm91bmRhcnkgPT4gYCR7ZGFzaGVzfSR7Ym91bmRhcnl9JHtkYXNoZXN9JHtjYXJyaWFnZS5yZXBlYXQoMil9YDtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRhcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IGZpZWxkXG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXIoYm91bmRhcnksIG5hbWUsIGZpZWxkKSB7XG5cdGxldCBoZWFkZXIgPSAnJztcblxuXHRoZWFkZXIgKz0gYCR7ZGFzaGVzfSR7Ym91bmRhcnl9JHtjYXJyaWFnZX1gO1xuXHRoZWFkZXIgKz0gYENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cIiR7bmFtZX1cImA7XG5cblx0aWYgKGlzQmxvYihmaWVsZCkpIHtcblx0XHRoZWFkZXIgKz0gYDsgZmlsZW5hbWU9XCIke2ZpZWxkLm5hbWV9XCIke2NhcnJpYWdlfWA7XG5cdFx0aGVhZGVyICs9IGBDb250ZW50LVR5cGU6ICR7ZmllbGQudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ31gO1xuXHR9XG5cblx0cmV0dXJuIGAke2hlYWRlcn0ke2NhcnJpYWdlLnJlcGVhdCgyKX1gO1xufVxuXG4vKipcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuY29uc3QgZ2V0Qm91bmRhcnkgPSAoKSA9PiBjcnlwdG8ucmFuZG9tQnl0ZXMoOCkudG9TdHJpbmcoJ2hleCcpO1xuXG4vKipcbiAqIEBwYXJhbSB7Rm9ybURhdGF9IGZvcm1cbiAqIEBwYXJhbSB7c3RyaW5nfSBib3VuZGFyeVxuICovXG5hc3luYyBmdW5jdGlvbiAqIGZvcm1EYXRhSXRlcmF0b3IoZm9ybSwgYm91bmRhcnkpIHtcblx0Zm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGZvcm0pIHtcblx0XHR5aWVsZCBnZXRIZWFkZXIoYm91bmRhcnksIG5hbWUsIHZhbHVlKTtcblxuXHRcdGlmIChpc0Jsb2IodmFsdWUpKSB7XG5cdFx0XHR5aWVsZCAqIHZhbHVlLnN0cmVhbSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR5aWVsZCB2YWx1ZTtcblx0XHR9XG5cblx0XHR5aWVsZCBjYXJyaWFnZTtcblx0fVxuXG5cdHlpZWxkIGdldEZvb3Rlcihib3VuZGFyeSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGb3JtRGF0YX0gZm9ybVxuICogQHBhcmFtIHtzdHJpbmd9IGJvdW5kYXJ5XG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1EYXRhTGVuZ3RoKGZvcm0sIGJvdW5kYXJ5KSB7XG5cdGxldCBsZW5ndGggPSAwO1xuXG5cdGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBmb3JtKSB7XG5cdFx0bGVuZ3RoICs9IEJ1ZmZlci5ieXRlTGVuZ3RoKGdldEhlYWRlcihib3VuZGFyeSwgbmFtZSwgdmFsdWUpKTtcblxuXHRcdGlmIChpc0Jsb2IodmFsdWUpKSB7XG5cdFx0XHRsZW5ndGggKz0gdmFsdWUuc2l6ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGVuZ3RoICs9IEJ1ZmZlci5ieXRlTGVuZ3RoKFN0cmluZyh2YWx1ZSkpO1xuXHRcdH1cblxuXHRcdGxlbmd0aCArPSBjYXJyaWFnZUxlbmd0aDtcblx0fVxuXG5cdGxlbmd0aCArPSBCdWZmZXIuYnl0ZUxlbmd0aChnZXRGb290ZXIoYm91bmRhcnkpKTtcblxuXHRyZXR1cm4gbGVuZ3RoO1xufVxuXG5jb25zdCBJTlRFUk5BTFMgPSBTeW1ib2woJ0JvZHkgaW50ZXJuYWxzJyk7XG5cbi8qKlxuICogQm9keSBtaXhpblxuICpcbiAqIFJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlcbiAqXG4gKiBAcGFyYW0gICBTdHJlYW0gIGJvZHkgIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtICAgT2JqZWN0ICBvcHRzICBSZXNwb25zZSBvcHRpb25zXG4gKiBAcmV0dXJuICBWb2lkXG4gKi9cbmNsYXNzIEJvZHkge1xuXHRjb25zdHJ1Y3Rvcihib2R5LCB7XG5cdFx0c2l6ZSA9IDBcblx0fSA9IHt9KSB7XG5cdFx0bGV0IGJvdW5kYXJ5ID0gbnVsbDtcblxuXHRcdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0XHQvLyBCb2R5IGlzIHVuZGVmaW5lZCBvciBudWxsXG5cdFx0XHRib2R5ID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1ldGVycyhib2R5KSkge1xuXHRcdC8vIEJvZHkgaXMgYSBVUkxTZWFyY2hQYXJhbXNcblx0XHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5LnRvU3RyaW5nKCkpO1xuXHRcdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSA7IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkgOyBlbHNlIGlmICh1dGlsLnR5cGVzLmlzQW55QXJyYXlCdWZmZXIoYm9keSkpIHtcblx0XHRcdC8vIEJvZHkgaXMgQXJyYXlCdWZmZXJcblx0XHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5KTtcblx0XHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuXHRcdFx0Ly8gQm9keSBpcyBBcnJheUJ1ZmZlclZpZXdcblx0XHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpO1xuXHRcdH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkgOyBlbHNlIGlmIChpc0Zvcm1EYXRhKGJvZHkpKSB7XG5cdFx0XHQvLyBCb2R5IGlzIGFuIGluc3RhbmNlIG9mIGZvcm1kYXRhLW5vZGVcblx0XHRcdGJvdW5kYXJ5ID0gYE5vZGVGZXRjaEZvcm1EYXRhQm91bmRhcnkke2dldEJvdW5kYXJ5KCl9YDtcblx0XHRcdGJvZHkgPSBTdHJlYW0uUmVhZGFibGUuZnJvbShmb3JtRGF0YUl0ZXJhdG9yKGJvZHksIGJvdW5kYXJ5KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vbmUgb2YgdGhlIGFib3ZlXG5cdFx0XHQvLyBjb2VyY2UgdG8gc3RyaW5nIHRoZW4gYnVmZmVyXG5cdFx0XHRib2R5ID0gQnVmZmVyLmZyb20oU3RyaW5nKGJvZHkpKTtcblx0XHR9XG5cblx0XHR0aGlzW0lOVEVSTkFMU10gPSB7XG5cdFx0XHRib2R5LFxuXHRcdFx0Ym91bmRhcnksXG5cdFx0XHRkaXN0dXJiZWQ6IGZhbHNlLFxuXHRcdFx0ZXJyb3I6IG51bGxcblx0XHR9O1xuXHRcdHRoaXMuc2l6ZSA9IHNpemU7XG5cblx0XHRpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkge1xuXHRcdFx0Ym9keS5vbignZXJyb3InLCBlcnIgPT4ge1xuXHRcdFx0XHRjb25zdCBlcnJvciA9IGVyciBpbnN0YW5jZW9mIEZldGNoQmFzZUVycm9yID9cblx0XHRcdFx0XHRlcnIgOlxuXHRcdFx0XHRcdG5ldyBGZXRjaEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGJvZHkgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7dGhpcy51cmx9OiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpO1xuXHRcdFx0XHR0aGlzW0lOVEVSTkFMU10uZXJyb3IgPSBlcnJvcjtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGdldCBib2R5KCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMU10uYm9keTtcblx0fVxuXG5cdGdldCBib2R5VXNlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWNvZGUgcmVzcG9uc2UgYXMgQXJyYXlCdWZmZXJcblx0ICpcblx0ICogQHJldHVybiAgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgYXJyYXlCdWZmZXIoKSB7XG5cdFx0Y29uc3Qge2J1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aH0gPSBhd2FpdCBjb25zdW1lQm9keSh0aGlzKTtcblx0XHRyZXR1cm4gYnVmZmVyLnNsaWNlKGJ5dGVPZmZzZXQsIGJ5dGVPZmZzZXQgKyBieXRlTGVuZ3RoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gcmF3IHJlc3BvbnNlIGFzIEJsb2Jcblx0ICpcblx0ICogQHJldHVybiBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBibG9iKCkge1xuXHRcdGNvbnN0IGN0ID0gKHRoaXMuaGVhZGVycyAmJiB0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkgfHwgKHRoaXNbSU5URVJOQUxTXS5ib2R5ICYmIHRoaXNbSU5URVJOQUxTXS5ib2R5LnR5cGUpIHx8ICcnO1xuXHRcdGNvbnN0IGJ1ZiA9IGF3YWl0IHRoaXMuYnVmZmVyKCk7XG5cblx0XHRyZXR1cm4gbmV3IEJsb2IoW2J1Zl0sIHtcblx0XHRcdHR5cGU6IGN0XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVjb2RlIHJlc3BvbnNlIGFzIGpzb25cblx0ICpcblx0ICogQHJldHVybiAgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMganNvbigpIHtcblx0XHRjb25zdCBidWZmZXIgPSBhd2FpdCBjb25zdW1lQm9keSh0aGlzKTtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShidWZmZXIudG9TdHJpbmcoKSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVjb2RlIHJlc3BvbnNlIGFzIHRleHRcblx0ICpcblx0ICogQHJldHVybiAgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgdGV4dCgpIHtcblx0XHRjb25zdCBidWZmZXIgPSBhd2FpdCBjb25zdW1lQm9keSh0aGlzKTtcblx0XHRyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVjb2RlIHJlc3BvbnNlIGFzIGJ1ZmZlciAobm9uLXNwZWMgYXBpKVxuXHQgKlxuXHQgKiBAcmV0dXJuICBQcm9taXNlXG5cdCAqL1xuXHRidWZmZXIoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMpO1xuXHR9XG59XG5cbi8vIEluIGJyb3dzZXJzLCBhbGwgcHJvcGVydGllcyBhcmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJvZHkucHJvdG90eXBlLCB7XG5cdGJvZHk6IHtlbnVtZXJhYmxlOiB0cnVlfSxcblx0Ym9keVVzZWQ6IHtlbnVtZXJhYmxlOiB0cnVlfSxcblx0YXJyYXlCdWZmZXI6IHtlbnVtZXJhYmxlOiB0cnVlfSxcblx0YmxvYjoge2VudW1lcmFibGU6IHRydWV9LFxuXHRqc29uOiB7ZW51bWVyYWJsZTogdHJ1ZX0sXG5cdHRleHQ6IHtlbnVtZXJhYmxlOiB0cnVlfVxufSk7XG5cbi8qKlxuICogQ29uc3VtZSBhbmQgY29udmVydCBhbiBlbnRpcmUgQm9keSB0byBhIEJ1ZmZlci5cbiAqXG4gKiBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKlxuICogQHJldHVybiBQcm9taXNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbnN1bWVCb2R5KGRhdGEpIHtcblx0aWYgKGRhdGFbSU5URVJOQUxTXS5kaXN0dXJiZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBib2R5IHVzZWQgYWxyZWFkeSBmb3I6ICR7ZGF0YS51cmx9YCk7XG5cdH1cblxuXHRkYXRhW0lOVEVSTkFMU10uZGlzdHVyYmVkID0gdHJ1ZTtcblxuXHRpZiAoZGF0YVtJTlRFUk5BTFNdLmVycm9yKSB7XG5cdFx0dGhyb3cgZGF0YVtJTlRFUk5BTFNdLmVycm9yO1xuXHR9XG5cblx0bGV0IHtib2R5fSA9IGRhdGE7XG5cblx0Ly8gQm9keSBpcyBudWxsXG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcblx0fVxuXG5cdC8vIEJvZHkgaXMgYmxvYlxuXHRpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0Ym9keSA9IGJvZHkuc3RyZWFtKCk7XG5cdH1cblxuXHQvLyBCb2R5IGlzIGJ1ZmZlclxuXHRpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0cmV0dXJuIGJvZHk7XG5cdH1cblxuXHQvKiBjOCBpZ25vcmUgbmV4dCAzICovXG5cdGlmICghKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pKSB7XG5cdFx0cmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcblx0fVxuXG5cdC8vIEJvZHkgaXMgc3RyZWFtXG5cdC8vIGdldCByZWFkeSB0byBhY3R1YWxseSBjb25zdW1lIHRoZSBib2R5XG5cdGNvbnN0IGFjY3VtID0gW107XG5cdGxldCBhY2N1bUJ5dGVzID0gMDtcblxuXHR0cnkge1xuXHRcdGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuXHRcdFx0aWYgKGRhdGEuc2l6ZSA+IDAgJiYgYWNjdW1CeXRlcyArIGNodW5rLmxlbmd0aCA+IGRhdGEuc2l6ZSkge1xuXHRcdFx0XHRjb25zdCBlcnIgPSBuZXcgRmV0Y2hFcnJvcihgY29udGVudCBzaXplIGF0ICR7ZGF0YS51cmx9IG92ZXIgbGltaXQ6ICR7ZGF0YS5zaXplfWAsICdtYXgtc2l6ZScpO1xuXHRcdFx0XHRib2R5LmRlc3Ryb3koZXJyKTtcblx0XHRcdFx0dGhyb3cgZXJyO1xuXHRcdFx0fVxuXG5cdFx0XHRhY2N1bUJ5dGVzICs9IGNodW5rLmxlbmd0aDtcblx0XHRcdGFjY3VtLnB1c2goY2h1bmspO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAoZXJyb3IgaW5zdGFuY2VvZiBGZXRjaEJhc2VFcnJvcikge1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE90aGVyIGVycm9ycywgc3VjaCBhcyBpbmNvcnJlY3QgY29udGVudC1lbmNvZGluZ1xuXHRcdFx0dGhyb3cgbmV3IEZldGNoRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgYm9keSB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtkYXRhLnVybH06ICR7ZXJyb3IubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChib2R5LnJlYWRhYmxlRW5kZWQgPT09IHRydWUgfHwgYm9keS5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9PT0gdHJ1ZSkge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoYWNjdW0uZXZlcnkoYyA9PiB0eXBlb2YgYyA9PT0gJ3N0cmluZycpKSB7XG5cdFx0XHRcdHJldHVybiBCdWZmZXIuZnJvbShhY2N1bS5qb2luKCcnKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBCdWZmZXIuY29uY2F0KGFjY3VtLCBhY2N1bUJ5dGVzKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhyb3cgbmV3IEZldGNoRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgQnVmZmVyIGZyb20gcmVzcG9uc2UgYm9keSBmb3IgJHtkYXRhLnVybH06ICR7ZXJyb3IubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyb3IpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRmV0Y2hFcnJvcihgUHJlbWF0dXJlIGNsb3NlIG9mIHNlcnZlciByZXNwb25zZSB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtkYXRhLnVybH1gKTtcblx0fVxufVxuXG4vKipcbiAqIENsb25lIGJvZHkgZ2l2ZW4gUmVzL1JlcSBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5zdGFuY2UgICAgICAgUmVzcG9uc2Ugb3IgUmVxdWVzdCBpbnN0YW5jZVxuICogQHBhcmFtICAgU3RyaW5nICBoaWdoV2F0ZXJNYXJrICBoaWdoV2F0ZXJNYXJrIGZvciBib3RoIFBhc3NUaHJvdWdoIGJvZHkgc3RyZWFtc1xuICogQHJldHVybiAgTWl4ZWRcbiAqL1xuY29uc3QgY2xvbmUgPSAoaW5zdGFuY2UsIGhpZ2hXYXRlck1hcmspID0+IHtcblx0bGV0IHAxO1xuXHRsZXQgcDI7XG5cdGxldCB7Ym9keX0gPSBpbnN0YW5jZTtcblxuXHQvLyBEb24ndCBhbGxvdyBjbG9uaW5nIGEgdXNlZCBib2R5XG5cdGlmIChpbnN0YW5jZS5ib2R5VXNlZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2Fubm90IGNsb25lIGJvZHkgYWZ0ZXIgaXQgaXMgdXNlZCcpO1xuXHR9XG5cblx0Ly8gQ2hlY2sgdGhhdCBib2R5IGlzIGEgc3RyZWFtIGFuZCBub3QgZm9ybS1kYXRhIG9iamVjdFxuXHQvLyBub3RlOiB3ZSBjYW4ndCBjbG9uZSB0aGUgZm9ybS1kYXRhIG9iamVjdCB3aXRob3V0IGhhdmluZyBpdCBhcyBhIGRlcGVuZGVuY3lcblx0aWYgKChib2R5IGluc3RhbmNlb2YgU3RyZWFtKSAmJiAodHlwZW9mIGJvZHkuZ2V0Qm91bmRhcnkgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0Ly8gVGVlIGluc3RhbmNlIGJvZHlcblx0XHRwMSA9IG5ldyBTdHJlYW0uUGFzc1Rocm91Z2goe2hpZ2hXYXRlck1hcmt9KTtcblx0XHRwMiA9IG5ldyBTdHJlYW0uUGFzc1Rocm91Z2goe2hpZ2hXYXRlck1hcmt9KTtcblx0XHRib2R5LnBpcGUocDEpO1xuXHRcdGJvZHkucGlwZShwMik7XG5cdFx0Ly8gU2V0IGluc3RhbmNlIGJvZHkgdG8gdGVlZCBib2R5IGFuZCByZXR1cm4gdGhlIG90aGVyIHRlZWQgYm9keVxuXHRcdGluc3RhbmNlW0lOVEVSTkFMU10uYm9keSA9IHAxO1xuXHRcdGJvZHkgPSBwMjtcblx0fVxuXG5cdHJldHVybiBib2R5O1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgb3BlcmF0aW9uIFwiZXh0cmFjdCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb20gfG9iamVjdHxcIiBhc1xuICogc3BlY2lmaWVkIGluIHRoZSBzcGVjaWZpY2F0aW9uOlxuICogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGluc3RhbmNlLmJvZHkgaXMgcHJlc2VudC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gYm9keSBBbnkgb3B0aW9ucy5ib2R5IGlucHV0XG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH1cbiAqL1xuY29uc3QgZXh0cmFjdENvbnRlbnRUeXBlID0gKGJvZHksIHJlcXVlc3QpID0+IHtcblx0Ly8gQm9keSBpcyBudWxsIG9yIHVuZGVmaW5lZFxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gQm9keSBpcyBzdHJpbmdcblx0aWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jztcblx0fVxuXG5cdC8vIEJvZHkgaXMgYSBVUkxTZWFyY2hQYXJhbXNcblx0aWYgKGlzVVJMU2VhcmNoUGFyYW1ldGVycyhib2R5KSkge1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnO1xuXHR9XG5cblx0Ly8gQm9keSBpcyBibG9iXG5cdGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHRyZXR1cm4gYm9keS50eXBlIHx8IG51bGw7XG5cdH1cblxuXHQvLyBCb2R5IGlzIGEgQnVmZmVyIChCdWZmZXIsIEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldylcblx0aWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSB8fCB1dGlsLnR5cGVzLmlzQW55QXJyYXlCdWZmZXIoYm9keSkgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBEZXRlY3QgZm9ybSBkYXRhIGlucHV0IGZyb20gZm9ybS1kYXRhIG1vZHVsZVxuXHRpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5nZXRCb3VuZGFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTtib3VuZGFyeT0ke2JvZHkuZ2V0Qm91bmRhcnkoKX1gO1xuXHR9XG5cblx0aWYgKGlzRm9ybURhdGEoYm9keSkpIHtcblx0XHRyZXR1cm4gYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7cmVxdWVzdFtJTlRFUk5BTFNdLmJvdW5kYXJ5fWA7XG5cdH1cblxuXHQvLyBCb2R5IGlzIHN0cmVhbSAtIGNhbid0IHJlYWxseSBkbyBtdWNoIGFib3V0IHRoaXNcblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIEJvZHkgY29uc3RydWN0b3IgZGVmYXVsdHMgb3RoZXIgdGhpbmdzIHRvIHN0cmluZ1xuXHRyZXR1cm4gJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCc7XG59O1xuXG4vKipcbiAqIFRoZSBGZXRjaCBTdGFuZGFyZCB0cmVhdHMgdGhpcyBhcyBpZiBcInRvdGFsIGJ5dGVzXCIgaXMgYSBwcm9wZXJ0eSBvbiB0aGUgYm9keS5cbiAqIEZvciB1cywgd2UgaGF2ZSB0byBleHBsaWNpdGx5IGdldCBpdCB3aXRoIGEgZnVuY3Rpb24uXG4gKlxuICogcmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LXRvdGFsLWJ5dGVzXG4gKlxuICogQHBhcmFtIHthbnl9IG9iai5ib2R5IEJvZHkgb2JqZWN0IGZyb20gdGhlIEJvZHkgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7bnVtYmVyIHwgbnVsbH1cbiAqL1xuY29uc3QgZ2V0VG90YWxCeXRlcyA9IHJlcXVlc3QgPT4ge1xuXHRjb25zdCB7Ym9keX0gPSByZXF1ZXN0O1xuXG5cdC8vIEJvZHkgaXMgbnVsbCBvciB1bmRlZmluZWRcblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdC8vIEJvZHkgaXMgQmxvYlxuXHRpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0cmV0dXJuIGJvZHkuc2l6ZTtcblx0fVxuXG5cdC8vIEJvZHkgaXMgQnVmZmVyXG5cdGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHRyZXR1cm4gYm9keS5sZW5ndGg7XG5cdH1cblxuXHQvLyBEZXRlY3QgZm9ybSBkYXRhIGlucHV0IGZyb20gZm9ybS1kYXRhIG1vZHVsZVxuXHRpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5nZXRMZW5ndGhTeW5jID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIGJvZHkuaGFzS25vd25MZW5ndGggJiYgYm9keS5oYXNLbm93bkxlbmd0aCgpID8gYm9keS5nZXRMZW5ndGhTeW5jKCkgOiBudWxsO1xuXHR9XG5cblx0Ly8gQm9keSBpcyBhIHNwZWMtY29tcGxpYW50IGZvcm0tZGF0YVxuXHRpZiAoaXNGb3JtRGF0YShib2R5KSkge1xuXHRcdHJldHVybiBnZXRGb3JtRGF0YUxlbmd0aChyZXF1ZXN0W0lOVEVSTkFMU10uYm91bmRhcnkpO1xuXHR9XG5cblx0Ly8gQm9keSBpcyBzdHJlYW1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFdyaXRlIGEgQm9keSB0byBhIE5vZGUuanMgV3JpdGFibGVTdHJlYW0gKGUuZy4gaHR0cC5SZXF1ZXN0KSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtTdHJlYW0uV3JpdGFibGV9IGRlc3QgVGhlIHN0cmVhbSB0byB3cml0ZSB0by5cbiAqIEBwYXJhbSBvYmouYm9keSBCb2R5IG9iamVjdCBmcm9tIHRoZSBCb2R5IGluc3RhbmNlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IHdyaXRlVG9TdHJlYW0gPSAoZGVzdCwge2JvZHl9KSA9PiB7XG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0Ly8gQm9keSBpcyBudWxsXG5cdFx0ZGVzdC5lbmQoKTtcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHQvLyBCb2R5IGlzIEJsb2Jcblx0XHRib2R5LnN0cmVhbSgpLnBpcGUoZGVzdCk7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gQm9keSBpcyBidWZmZXJcblx0XHRkZXN0LndyaXRlKGJvZHkpO1xuXHRcdGRlc3QuZW5kKCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQm9keSBpcyBzdHJlYW1cblx0XHRib2R5LnBpcGUoZGVzdCk7XG5cdH1cbn07XG5cbi8qKlxuICogSGVhZGVycy5qc1xuICpcbiAqIEhlYWRlcnMgY2xhc3Mgb2ZmZXJzIGNvbnZlbmllbnQgaGVscGVyc1xuICovXG5cbmNvbnN0IHZhbGlkYXRlSGVhZGVyTmFtZSA9IHR5cGVvZiBodHRwLnZhbGlkYXRlSGVhZGVyTmFtZSA9PT0gJ2Z1bmN0aW9uJyA/XG5cdGh0dHAudmFsaWRhdGVIZWFkZXJOYW1lIDpcblx0bmFtZSA9PiB7XG5cdFx0aWYgKCEvXltcXF5gXFwtXFx3ISMkJSYnKisufH5dKyQvLnRlc3QobmFtZSkpIHtcblx0XHRcdGNvbnN0IGVyciA9IG5ldyBUeXBlRXJyb3IoYEhlYWRlciBuYW1lIG11c3QgYmUgYSB2YWxpZCBIVFRQIHRva2VuIFske25hbWV9XWApO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ2NvZGUnLCB7dmFsdWU6ICdFUlJfSU5WQUxJRF9IVFRQX1RPS0VOJ30pO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fTtcblxuY29uc3QgdmFsaWRhdGVIZWFkZXJWYWx1ZSA9IHR5cGVvZiBodHRwLnZhbGlkYXRlSGVhZGVyVmFsdWUgPT09ICdmdW5jdGlvbicgP1xuXHRodHRwLnZhbGlkYXRlSGVhZGVyVmFsdWUgOlxuXHQobmFtZSwgdmFsdWUpID0+IHtcblx0XHRpZiAoL1teXFx0XFx1MDAyMC1cXHUwMDdFXFx1MDA4MC1cXHUwMEZGXS8udGVzdCh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGVyciA9IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBjb250ZW50IFtcIiR7bmFtZX1cIl1gKTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnIsICdjb2RlJywge3ZhbHVlOiAnRVJSX0lOVkFMSURfQ0hBUid9KTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9XG5cdH07XG5cbi8qKlxuICogQHR5cGVkZWYge0hlYWRlcnMgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgSXRlcmFibGU8cmVhZG9ubHkgW3N0cmluZywgc3RyaW5nXT4gfCBJdGVyYWJsZTxJdGVyYWJsZTxzdHJpbmc+Pn0gSGVhZGVyc0luaXRcbiAqL1xuXG4vKipcbiAqIFRoaXMgRmV0Y2ggQVBJIGludGVyZmFjZSBhbGxvd3MgeW91IHRvIHBlcmZvcm0gdmFyaW91cyBhY3Rpb25zIG9uIEhUVFAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgaGVhZGVycy5cbiAqIFRoZXNlIGFjdGlvbnMgaW5jbHVkZSByZXRyaWV2aW5nLCBzZXR0aW5nLCBhZGRpbmcgdG8sIGFuZCByZW1vdmluZy5cbiAqIEEgSGVhZGVycyBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgaGVhZGVyIGxpc3QsIHdoaWNoIGlzIGluaXRpYWxseSBlbXB0eSBhbmQgY29uc2lzdHMgb2YgemVybyBvciBtb3JlIG5hbWUgYW5kIHZhbHVlIHBhaXJzLlxuICogWW91IGNhbiBhZGQgdG8gdGhpcyB1c2luZyBtZXRob2RzIGxpa2UgYXBwZW5kKCkgKHNlZSBFeGFtcGxlcy4pXG4gKiBJbiBhbGwgbWV0aG9kcyBvZiB0aGlzIGludGVyZmFjZSwgaGVhZGVyIG5hbWVzIGFyZSBtYXRjaGVkIGJ5IGNhc2UtaW5zZW5zaXRpdmUgYnl0ZSBzZXF1ZW5jZS5cbiAqXG4gKi9cbmNsYXNzIEhlYWRlcnMgZXh0ZW5kcyBVUkxTZWFyY2hQYXJhbXMge1xuXHQvKipcblx0ICogSGVhZGVycyBjbGFzc1xuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQHBhcmFtIHtIZWFkZXJzSW5pdH0gW2luaXRdIC0gUmVzcG9uc2UgaGVhZGVyc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoaW5pdCkge1xuXHRcdC8vIFZhbGlkYXRlIGFuZCBub3JtYWxpemUgaW5pdCBvYmplY3QgaW4gW25hbWUsIHZhbHVlKHMpXVtdXG5cdFx0LyoqIEB0eXBlIHtzdHJpbmdbXVtdfSAqL1xuXHRcdGxldCByZXN1bHQgPSBbXTtcblx0XHRpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcblx0XHRcdGNvbnN0IHJhdyA9IGluaXQucmF3KCk7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHJhdykpIHtcblx0XHRcdFx0cmVzdWx0LnB1c2goLi4udmFsdWVzLm1hcCh2YWx1ZSA9PiBbbmFtZSwgdmFsdWVdKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpbml0ID09IG51bGwpIDsgZWxzZSBpZiAodHlwZW9mIGluaXQgPT09ICdvYmplY3QnICYmICF1dGlsLnR5cGVzLmlzQm94ZWRQcmltaXRpdmUoaW5pdCkpIHtcblx0XHRcdGNvbnN0IG1ldGhvZCA9IGluaXRbU3ltYm9sLml0ZXJhdG9yXTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLCBlcWVxZXFcblx0XHRcdGlmIChtZXRob2QgPT0gbnVsbCkge1xuXHRcdFx0XHQvLyBSZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz5cblx0XHRcdFx0cmVzdWx0LnB1c2goLi4uT2JqZWN0LmVudHJpZXMoaW5pdCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtZXRob2QgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIZWFkZXIgcGFpcnMgbXVzdCBiZSBpdGVyYWJsZScpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+XG5cdFx0XHRcdC8vIE5vdGU6IHBlciBzcGVjIHdlIGhhdmUgdG8gZmlyc3QgZXhoYXVzdCB0aGUgbGlzdHMgdGhlbiBwcm9jZXNzIHRoZW1cblx0XHRcdFx0cmVzdWx0ID0gWy4uLmluaXRdXG5cdFx0XHRcdFx0Lm1hcChwYWlyID0+IHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0dHlwZW9mIHBhaXIgIT09ICdvYmplY3QnIHx8IHV0aWwudHlwZXMuaXNCb3hlZFByaW1pdGl2ZShwYWlyKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0VhY2ggaGVhZGVyIHBhaXIgbXVzdCBiZSBhbiBpdGVyYWJsZSBvYmplY3QnKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIFsuLi5wYWlyXTtcblx0XHRcdFx0XHR9KS5tYXAocGFpciA9PiB7XG5cdFx0XHRcdFx0XHRpZiAocGFpci5sZW5ndGggIT09IDIpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRWFjaCBoZWFkZXIgcGFpciBtdXN0IGJlIGEgbmFtZS92YWx1ZSB0dXBsZScpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gWy4uLnBhaXJdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gY29uc3RydWN0IFxcJ0hlYWRlcnNcXCc6IFRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3Qgb2YgdHlwZSBcXCcoc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+IG9yIHJlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiknKTtcblx0XHR9XG5cblx0XHQvLyBWYWxpZGF0ZSBhbmQgbG93ZXJjYXNlXG5cdFx0cmVzdWx0ID1cblx0XHRcdHJlc3VsdC5sZW5ndGggPiAwID9cblx0XHRcdFx0cmVzdWx0Lm1hcCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuXHRcdFx0XHRcdHZhbGlkYXRlSGVhZGVyTmFtZShuYW1lKTtcblx0XHRcdFx0XHR2YWxpZGF0ZUhlYWRlclZhbHVlKG5hbWUsIFN0cmluZyh2YWx1ZSkpO1xuXHRcdFx0XHRcdHJldHVybiBbU3RyaW5nKG5hbWUpLnRvTG93ZXJDYXNlKCksIFN0cmluZyh2YWx1ZSldO1xuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdHVuZGVmaW5lZDtcblxuXHRcdHN1cGVyKHJlc3VsdCk7XG5cblx0XHQvLyBSZXR1cm5pbmcgYSBQcm94eSB0aGF0IHdpbGwgbG93ZXJjYXNlIGtleSBuYW1lcywgdmFsaWRhdGUgcGFyYW1ldGVycyBhbmQgc29ydCBrZXlzXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBuZXcgUHJveHkodGhpcywge1xuXHRcdFx0Z2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpIHtcblx0XHRcdFx0c3dpdGNoIChwKSB7XG5cdFx0XHRcdFx0Y2FzZSAnYXBwZW5kJzpcblx0XHRcdFx0XHRjYXNlICdzZXQnOlxuXHRcdFx0XHRcdFx0cmV0dXJuIChuYW1lLCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHR2YWxpZGF0ZUhlYWRlck5hbWUobmFtZSk7XG5cdFx0XHRcdFx0XHRcdHZhbGlkYXRlSGVhZGVyVmFsdWUobmFtZSwgU3RyaW5nKHZhbHVlKSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlW3BdLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0cmVjZWl2ZXIsXG5cdFx0XHRcdFx0XHRcdFx0U3RyaW5nKG5hbWUpLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHRcdFx0U3RyaW5nKHZhbHVlKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGNhc2UgJ2RlbGV0ZSc6XG5cdFx0XHRcdFx0Y2FzZSAnaGFzJzpcblx0XHRcdFx0XHRjYXNlICdnZXRBbGwnOlxuXHRcdFx0XHRcdFx0cmV0dXJuIG5hbWUgPT4ge1xuXHRcdFx0XHRcdFx0XHR2YWxpZGF0ZUhlYWRlck5hbWUobmFtZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlW3BdLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0cmVjZWl2ZXIsXG5cdFx0XHRcdFx0XHRcdFx0U3RyaW5nKG5hbWUpLnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRjYXNlICdrZXlzJzpcblx0XHRcdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldC5zb3J0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBuZXcgU2V0KFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUua2V5cy5jYWxsKHRhcmdldCkpLmtleXMoKTtcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKiBjOCBpZ25vcmUgbmV4dCAqL1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG5cdH1cblxuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpO1xuXHR9XG5cblx0Z2V0KG5hbWUpIHtcblx0XHRjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEFsbChuYW1lKTtcblx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0bGV0IHZhbHVlID0gdmFsdWVzLmpvaW4oJywgJyk7XG5cdFx0aWYgKC9eY29udGVudC1lbmNvZGluZyQvaS50ZXN0KG5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0Zm9yRWFjaChjYWxsYmFjaykge1xuXHRcdGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLmtleXMoKSkge1xuXHRcdFx0Y2FsbGJhY2sodGhpcy5nZXQobmFtZSksIG5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdCogdmFsdWVzKCkge1xuXHRcdGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLmtleXMoKSkge1xuXHRcdFx0eWllbGQgdGhpcy5nZXQobmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEB0eXBlIHsoKSA9PiBJdGVyYWJsZUl0ZXJhdG9yPFtzdHJpbmcsIHN0cmluZ10+fVxuXHQgKi9cblx0KiBlbnRyaWVzKCkge1xuXHRcdGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLmtleXMoKSkge1xuXHRcdFx0eWllbGQgW25hbWUsIHRoaXMuZ2V0KG5hbWUpXTtcblx0XHR9XG5cdH1cblxuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzKCk7XG5cdH1cblxuXHQvKipcblx0ICogTm9kZS1mZXRjaCBub24tc3BlYyBtZXRob2Rcblx0ICogcmV0dXJuaW5nIGFsbCBoZWFkZXJzIGFuZCB0aGVpciB2YWx1ZXMgYXMgYXJyYXlcblx0ICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn1cblx0ICovXG5cdHJhdygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMua2V5cygpXS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZ2V0QWxsKGtleSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgYmV0dGVyIGNvbnNvbGUubG9nKGhlYWRlcnMpIGFuZCBhbHNvIHRvIGNvbnZlcnQgSGVhZGVycyBpbnRvIE5vZGUuanMgUmVxdWVzdCBjb21wYXRpYmxlIGZvcm1hdFxuXHQgKi9cblx0W1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5rZXlzKCldLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcblx0XHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0QWxsKGtleSk7XG5cdFx0XHQvLyBIdHRwLnJlcXVlc3QoKSBvbmx5IHN1cHBvcnRzIHN0cmluZyBhcyBIb3N0IGhlYWRlci5cblx0XHRcdC8vIFRoaXMgaGFjayBtYWtlcyBzcGVjaWZ5aW5nIGN1c3RvbSBIb3N0IGhlYWRlciBwb3NzaWJsZS5cblx0XHRcdGlmIChrZXkgPT09ICdob3N0Jykge1xuXHRcdFx0XHRyZXN1bHRba2V5XSA9IHZhbHVlc1swXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdFtrZXldID0gdmFsdWVzLmxlbmd0aCA+IDEgPyB2YWx1ZXMgOiB2YWx1ZXNbMF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSwge30pO1xuXHR9XG59XG5cbi8qKlxuICogUmUtc2hhcGluZyBvYmplY3QgZm9yIFdlYiBJREwgdGVzdHNcbiAqIE9ubHkgbmVlZCB0byBkbyBpdCBmb3Igb3ZlcnJpZGRlbiBtZXRob2RzXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFxuXHRIZWFkZXJzLnByb3RvdHlwZSxcblx0WydnZXQnLCAnZW50cmllcycsICdmb3JFYWNoJywgJ3ZhbHVlcyddLnJlZHVjZSgocmVzdWx0LCBwcm9wZXJ0eSkgPT4ge1xuXHRcdHJlc3VsdFtwcm9wZXJ0eV0gPSB7ZW51bWVyYWJsZTogdHJ1ZX07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSwge30pXG4pO1xuXG4vKipcbiAqIENyZWF0ZSBhIEhlYWRlcnMgb2JqZWN0IGZyb20gYW4gaHR0cC5JbmNvbWluZ01lc3NhZ2UucmF3SGVhZGVycywgaWdub3JpbmcgdGhvc2UgdGhhdCBkb1xuICogbm90IGNvbmZvcm0gdG8gSFRUUCBncmFtbWFyIHByb2R1Y3Rpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoJ2h0dHAnKS5JbmNvbWluZ01lc3NhZ2VbJ3Jhd0hlYWRlcnMnXX0gaGVhZGVyc1xuICovXG5mdW5jdGlvbiBmcm9tUmF3SGVhZGVycyhoZWFkZXJzID0gW10pIHtcblx0cmV0dXJuIG5ldyBIZWFkZXJzKFxuXHRcdGhlYWRlcnNcblx0XHRcdC8vIFNwbGl0IGludG8gcGFpcnNcblx0XHRcdC5yZWR1Y2UoKHJlc3VsdCwgdmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuXHRcdFx0XHRpZiAoaW5kZXggJSAyID09PSAwKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goYXJyYXkuc2xpY2UoaW5kZXgsIGluZGV4ICsgMikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sIFtdKVxuXHRcdFx0LmZpbHRlcigoW25hbWUsIHZhbHVlXSkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHZhbGlkYXRlSGVhZGVyTmFtZShuYW1lKTtcblx0XHRcdFx0XHR2YWxpZGF0ZUhlYWRlclZhbHVlKG5hbWUsIFN0cmluZyh2YWx1ZSkpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cblx0KTtcbn1cblxuY29uc3QgcmVkaXJlY3RTdGF0dXMgPSBuZXcgU2V0KFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF0pO1xuXG4vKipcbiAqIFJlZGlyZWN0IGNvZGUgbWF0Y2hpbmdcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZSAtIFN0YXR1cyBjb2RlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5jb25zdCBpc1JlZGlyZWN0ID0gY29kZSA9PiB7XG5cdHJldHVybiByZWRpcmVjdFN0YXR1cy5oYXMoY29kZSk7XG59O1xuXG4vKipcbiAqIFJlc3BvbnNlLmpzXG4gKlxuICogUmVzcG9uc2UgY2xhc3MgcHJvdmlkZXMgY29udGVudCBkZWNvZGluZ1xuICovXG5cbmNvbnN0IElOVEVSTkFMUyQxID0gU3ltYm9sKCdSZXNwb25zZSBpbnRlcm5hbHMnKTtcblxuLyoqXG4gKiBSZXNwb25zZSBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIFN0cmVhbSAgYm9keSAgUmVhZGFibGUgc3RyZWFtXG4gKiBAcGFyYW0gICBPYmplY3QgIG9wdHMgIFJlc3BvbnNlIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuY2xhc3MgUmVzcG9uc2UgZXh0ZW5kcyBCb2R5IHtcblx0Y29uc3RydWN0b3IoYm9keSA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGJvZHksIG9wdGlvbnMpO1xuXG5cdFx0Y29uc3Qgc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgfHwgMjAwO1xuXHRcdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuXG5cdFx0aWYgKGJvZHkgIT09IG51bGwgJiYgIWhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKSkge1xuXHRcdFx0Y29uc3QgY29udGVudFR5cGUgPSBleHRyYWN0Q29udGVudFR5cGUoYm9keSk7XG5cdFx0XHRpZiAoY29udGVudFR5cGUpIHtcblx0XHRcdFx0aGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW0lOVEVSTkFMUyQxXSA9IHtcblx0XHRcdHVybDogb3B0aW9ucy51cmwsXG5cdFx0XHRzdGF0dXMsXG5cdFx0XHRzdGF0dXNUZXh0OiBvcHRpb25zLnN0YXR1c1RleHQgfHwgJycsXG5cdFx0XHRoZWFkZXJzLFxuXHRcdFx0Y291bnRlcjogb3B0aW9ucy5jb3VudGVyLFxuXHRcdFx0aGlnaFdhdGVyTWFyazogb3B0aW9ucy5oaWdoV2F0ZXJNYXJrXG5cdFx0fTtcblx0fVxuXG5cdGdldCB1cmwoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLnVybCB8fCAnJztcblx0fVxuXG5cdGdldCBzdGF0dXMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLnN0YXR1cztcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBwcm9wZXJ0eSByZXByZXNlbnRpbmcgaWYgdGhlIHJlcXVlc3QgZW5kZWQgbm9ybWFsbHlcblx0ICovXG5cdGdldCBvaygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzID49IDIwMCAmJiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXMgPCAzMDA7XG5cdH1cblxuXHRnZXQgcmVkaXJlY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uY291bnRlciA+IDA7XG5cdH1cblxuXHRnZXQgc3RhdHVzVGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzVGV4dDtcblx0fVxuXG5cdGdldCBoZWFkZXJzKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5oZWFkZXJzO1xuXHR9XG5cblx0Z2V0IGhpZ2hXYXRlck1hcmsoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLmhpZ2hXYXRlck1hcms7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvbmUgdGhpcyByZXNwb25zZVxuXHQgKlxuXHQgKiBAcmV0dXJuICBSZXNwb25zZVxuXHQgKi9cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXNwb25zZShjbG9uZSh0aGlzLCB0aGlzLmhpZ2hXYXRlck1hcmspLCB7XG5cdFx0XHR1cmw6IHRoaXMudXJsLFxuXHRcdFx0c3RhdHVzOiB0aGlzLnN0YXR1cyxcblx0XHRcdHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcblx0XHRcdGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcblx0XHRcdG9rOiB0aGlzLm9rLFxuXHRcdFx0cmVkaXJlY3RlZDogdGhpcy5yZWRpcmVjdGVkLFxuXHRcdFx0c2l6ZTogdGhpcy5zaXplXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCAgICBUaGUgVVJMIHRoYXQgdGhlIG5ldyByZXNwb25zZSBpcyB0byBvcmlnaW5hdGUgZnJvbS5cblx0ICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1cyBBbiBvcHRpb25hbCBzdGF0dXMgY29kZSBmb3IgdGhlIHJlc3BvbnNlIChlLmcuLCAzMDIuKVxuXHQgKiBAcmV0dXJucyB7UmVzcG9uc2V9ICAgIEEgUmVzcG9uc2Ugb2JqZWN0LlxuXHQgKi9cblx0c3RhdGljIHJlZGlyZWN0KHVybCwgc3RhdHVzID0gMzAyKSB7XG5cdFx0aWYgKCFpc1JlZGlyZWN0KHN0YXR1cykpIHtcblx0XHRcdHRocm93IG5ldyBSYW5nZUVycm9yKCdGYWlsZWQgdG8gZXhlY3V0ZSBcInJlZGlyZWN0XCIgb24gXCJyZXNwb25zZVwiOiBJbnZhbGlkIHN0YXR1cyBjb2RlJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7XG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdGxvY2F0aW9uOiBuZXcgVVJMKHVybCkudG9TdHJpbmcoKVxuXHRcdFx0fSxcblx0XHRcdHN0YXR1c1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuXHRcdHJldHVybiAnUmVzcG9uc2UnO1xuXHR9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLnByb3RvdHlwZSwge1xuXHR1cmw6IHtlbnVtZXJhYmxlOiB0cnVlfSxcblx0c3RhdHVzOiB7ZW51bWVyYWJsZTogdHJ1ZX0sXG5cdG9rOiB7ZW51bWVyYWJsZTogdHJ1ZX0sXG5cdHJlZGlyZWN0ZWQ6IHtlbnVtZXJhYmxlOiB0cnVlfSxcblx0c3RhdHVzVGV4dDoge2VudW1lcmFibGU6IHRydWV9LFxuXHRoZWFkZXJzOiB7ZW51bWVyYWJsZTogdHJ1ZX0sXG5cdGNsb25lOiB7ZW51bWVyYWJsZTogdHJ1ZX1cbn0pO1xuXG5jb25zdCBnZXRTZWFyY2ggPSBwYXJzZWRVUkwgPT4ge1xuXHRpZiAocGFyc2VkVVJMLnNlYXJjaCkge1xuXHRcdHJldHVybiBwYXJzZWRVUkwuc2VhcmNoO1xuXHR9XG5cblx0Y29uc3QgbGFzdE9mZnNldCA9IHBhcnNlZFVSTC5ocmVmLmxlbmd0aCAtIDE7XG5cdGNvbnN0IGhhc2ggPSBwYXJzZWRVUkwuaGFzaCB8fCAocGFyc2VkVVJMLmhyZWZbbGFzdE9mZnNldF0gPT09ICcjJyA/ICcjJyA6ICcnKTtcblx0cmV0dXJuIHBhcnNlZFVSTC5ocmVmW2xhc3RPZmZzZXQgLSBoYXNoLmxlbmd0aF0gPT09ICc/JyA/ICc/JyA6ICcnO1xufTtcblxuY29uc3QgSU5URVJOQUxTJDIgPSBTeW1ib2woJ1JlcXVlc3QgaW50ZXJuYWxzJyk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYW4gaW5zdGFuY2Ugb2YgUmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGlzUmVxdWVzdCA9IG9iamVjdCA9PiB7XG5cdHJldHVybiAoXG5cdFx0dHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcblx0XHR0eXBlb2Ygb2JqZWN0W0lOVEVSTkFMUyQyXSA9PT0gJ29iamVjdCdcblx0KTtcbn07XG5cbi8qKlxuICogUmVxdWVzdCBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5wdXQgIFVybCBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcGFyYW0gICBPYmplY3QgIGluaXQgICBDdXN0b20gb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5jbGFzcyBSZXF1ZXN0IGV4dGVuZHMgQm9keSB7XG5cdGNvbnN0cnVjdG9yKGlucHV0LCBpbml0ID0ge30pIHtcblx0XHRsZXQgcGFyc2VkVVJMO1xuXG5cdFx0Ly8gTm9ybWFsaXplIGlucHV0IGFuZCBmb3JjZSBVUkwgdG8gYmUgZW5jb2RlZCBhcyBVVEYtOCAoaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvbm9kZS1mZXRjaC9pc3N1ZXMvMjQ1KVxuXHRcdGlmIChpc1JlcXVlc3QoaW5wdXQpKSB7XG5cdFx0XHRwYXJzZWRVUkwgPSBuZXcgVVJMKGlucHV0LnVybCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcnNlZFVSTCA9IG5ldyBVUkwoaW5wdXQpO1xuXHRcdFx0aW5wdXQgPSB7fTtcblx0XHR9XG5cblx0XHRsZXQgbWV0aG9kID0gaW5pdC5tZXRob2QgfHwgaW5wdXQubWV0aG9kIHx8ICdHRVQnO1xuXHRcdG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsIGVxZXFlcVxuXHRcdGlmICgoKGluaXQuYm9keSAhPSBudWxsIHx8IGlzUmVxdWVzdChpbnB1dCkpICYmIGlucHV0LmJvZHkgIT09IG51bGwpICYmXG5cdFx0XHQobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3Qgd2l0aCBHRVQvSEVBRCBtZXRob2QgY2Fubm90IGhhdmUgYm9keScpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlucHV0Qm9keSA9IGluaXQuYm9keSA/XG5cdFx0XHRpbml0LmJvZHkgOlxuXHRcdFx0KGlzUmVxdWVzdChpbnB1dCkgJiYgaW5wdXQuYm9keSAhPT0gbnVsbCA/XG5cdFx0XHRcdGNsb25lKGlucHV0KSA6XG5cdFx0XHRcdG51bGwpO1xuXG5cdFx0c3VwZXIoaW5wdXRCb2R5LCB7XG5cdFx0XHRzaXplOiBpbml0LnNpemUgfHwgaW5wdXQuc2l6ZSB8fCAwXG5cdFx0fSk7XG5cblx0XHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzIHx8IGlucHV0LmhlYWRlcnMgfHwge30pO1xuXG5cdFx0aWYgKGlucHV0Qm9keSAhPT0gbnVsbCAmJiAhaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IGV4dHJhY3RDb250ZW50VHlwZShpbnB1dEJvZHksIHRoaXMpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNpZ25hbCA9IGlzUmVxdWVzdChpbnB1dCkgP1xuXHRcdFx0aW5wdXQuc2lnbmFsIDpcblx0XHRcdG51bGw7XG5cdFx0aWYgKCdzaWduYWwnIGluIGluaXQpIHtcblx0XHRcdHNpZ25hbCA9IGluaXQuc2lnbmFsO1xuXHRcdH1cblxuXHRcdGlmIChzaWduYWwgIT09IG51bGwgJiYgIWlzQWJvcnRTaWduYWwoc2lnbmFsKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgc2lnbmFsIHRvIGJlIGFuIGluc3RhbmNlb2YgQWJvcnRTaWduYWwnKTtcblx0XHR9XG5cblx0XHR0aGlzW0lOVEVSTkFMUyQyXSA9IHtcblx0XHRcdG1ldGhvZCxcblx0XHRcdHJlZGlyZWN0OiBpbml0LnJlZGlyZWN0IHx8IGlucHV0LnJlZGlyZWN0IHx8ICdmb2xsb3cnLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdHBhcnNlZFVSTCxcblx0XHRcdHNpZ25hbFxuXHRcdH07XG5cblx0XHQvLyBOb2RlLWZldGNoLW9ubHkgb3B0aW9uc1xuXHRcdHRoaXMuZm9sbG93ID0gaW5pdC5mb2xsb3cgPT09IHVuZGVmaW5lZCA/IChpbnB1dC5mb2xsb3cgPT09IHVuZGVmaW5lZCA/IDIwIDogaW5wdXQuZm9sbG93KSA6IGluaXQuZm9sbG93O1xuXHRcdHRoaXMuY29tcHJlc3MgPSBpbml0LmNvbXByZXNzID09PSB1bmRlZmluZWQgPyAoaW5wdXQuY29tcHJlc3MgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBpbnB1dC5jb21wcmVzcykgOiBpbml0LmNvbXByZXNzO1xuXHRcdHRoaXMuY291bnRlciA9IGluaXQuY291bnRlciB8fCBpbnB1dC5jb3VudGVyIHx8IDA7XG5cdFx0dGhpcy5hZ2VudCA9IGluaXQuYWdlbnQgfHwgaW5wdXQuYWdlbnQ7XG5cdFx0dGhpcy5oaWdoV2F0ZXJNYXJrID0gaW5pdC5oaWdoV2F0ZXJNYXJrIHx8IGlucHV0LmhpZ2hXYXRlck1hcmsgfHwgMTYzODQ7XG5cdFx0dGhpcy5pbnNlY3VyZUhUVFBQYXJzZXIgPSBpbml0Lmluc2VjdXJlSFRUUFBhcnNlciB8fCBpbnB1dC5pbnNlY3VyZUhUVFBQYXJzZXIgfHwgZmFsc2U7XG5cdH1cblxuXHRnZXQgbWV0aG9kKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5tZXRob2Q7XG5cdH1cblxuXHRnZXQgdXJsKCkge1xuXHRcdHJldHVybiB1cmwuZm9ybWF0KHRoaXNbSU5URVJOQUxTJDJdLnBhcnNlZFVSTCk7XG5cdH1cblxuXHRnZXQgaGVhZGVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0uaGVhZGVycztcblx0fVxuXG5cdGdldCByZWRpcmVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0ucmVkaXJlY3Q7XG5cdH1cblxuXHRnZXQgc2lnbmFsKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5zaWduYWw7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvbmUgdGhpcyByZXF1ZXN0XG5cdCAqXG5cdCAqIEByZXR1cm4gIFJlcXVlc3Rcblx0ICovXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdCh0aGlzKTtcblx0fVxuXG5cdGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcblx0XHRyZXR1cm4gJ1JlcXVlc3QnO1xuXHR9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlcXVlc3QucHJvdG90eXBlLCB7XG5cdG1ldGhvZDoge2VudW1lcmFibGU6IHRydWV9LFxuXHR1cmw6IHtlbnVtZXJhYmxlOiB0cnVlfSxcblx0aGVhZGVyczoge2VudW1lcmFibGU6IHRydWV9LFxuXHRyZWRpcmVjdDoge2VudW1lcmFibGU6IHRydWV9LFxuXHRjbG9uZToge2VudW1lcmFibGU6IHRydWV9LFxuXHRzaWduYWw6IHtlbnVtZXJhYmxlOiB0cnVlfVxufSk7XG5cbi8qKlxuICogQ29udmVydCBhIFJlcXVlc3QgdG8gTm9kZS5qcyBodHRwIHJlcXVlc3Qgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gICBSZXF1ZXN0ICBBIFJlcXVlc3QgaW5zdGFuY2VcbiAqIEByZXR1cm4gIE9iamVjdCAgIFRoZSBvcHRpb25zIG9iamVjdCB0byBiZSBwYXNzZWQgdG8gaHR0cC5yZXF1ZXN0XG4gKi9cbmNvbnN0IGdldE5vZGVSZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3QgPT4ge1xuXHRjb25zdCB7cGFyc2VkVVJMfSA9IHJlcXVlc3RbSU5URVJOQUxTJDJdO1xuXHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMocmVxdWVzdFtJTlRFUk5BTFMkMl0uaGVhZGVycyk7XG5cblx0Ly8gRmV0Y2ggc3RlcCAxLjNcblx0aWYgKCFoZWFkZXJzLmhhcygnQWNjZXB0JykpIHtcblx0XHRoZWFkZXJzLnNldCgnQWNjZXB0JywgJyovKicpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXBzIDIuNC0yLjdcblx0bGV0IGNvbnRlbnRMZW5ndGhWYWx1ZSA9IG51bGw7XG5cdGlmIChyZXF1ZXN0LmJvZHkgPT09IG51bGwgJiYgL14ocG9zdHxwdXQpJC9pLnRlc3QocmVxdWVzdC5tZXRob2QpKSB7XG5cdFx0Y29udGVudExlbmd0aFZhbHVlID0gJzAnO1xuXHR9XG5cblx0aWYgKHJlcXVlc3QuYm9keSAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IHRvdGFsQnl0ZXMgPSBnZXRUb3RhbEJ5dGVzKHJlcXVlc3QpO1xuXHRcdC8vIFNldCBDb250ZW50LUxlbmd0aCBpZiB0b3RhbEJ5dGVzIGlzIGEgbnVtYmVyICh0aGF0IGlzIG5vdCBOYU4pXG5cdFx0aWYgKHR5cGVvZiB0b3RhbEJ5dGVzID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzTmFOKHRvdGFsQnl0ZXMpKSB7XG5cdFx0XHRjb250ZW50TGVuZ3RoVmFsdWUgPSBTdHJpbmcodG90YWxCeXRlcyk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGNvbnRlbnRMZW5ndGhWYWx1ZSkge1xuXHRcdGhlYWRlcnMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGNvbnRlbnRMZW5ndGhWYWx1ZSk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggc3RlcCAyLjExXG5cdGlmICghaGVhZGVycy5oYXMoJ1VzZXItQWdlbnQnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdVc2VyLUFnZW50JywgJ25vZGUtZmV0Y2gnKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwIDIuMTVcblx0aWYgKHJlcXVlc3QuY29tcHJlc3MgJiYgIWhlYWRlcnMuaGFzKCdBY2NlcHQtRW5jb2RpbmcnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdBY2NlcHQtRW5jb2RpbmcnLCAnZ3ppcCxkZWZsYXRlLGJyJyk7XG5cdH1cblxuXHRsZXQge2FnZW50fSA9IHJlcXVlc3Q7XG5cdGlmICh0eXBlb2YgYWdlbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRhZ2VudCA9IGFnZW50KHBhcnNlZFVSTCk7XG5cdH1cblxuXHRpZiAoIWhlYWRlcnMuaGFzKCdDb25uZWN0aW9uJykgJiYgIWFnZW50KSB7XG5cdFx0aGVhZGVycy5zZXQoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDQuMlxuXHQvLyBjaHVua2VkIGVuY29kaW5nIGlzIGhhbmRsZWQgYnkgTm9kZS5qc1xuXG5cdGNvbnN0IHNlYXJjaCA9IGdldFNlYXJjaChwYXJzZWRVUkwpO1xuXG5cdC8vIE1hbnVhbGx5IHNwcmVhZCB0aGUgVVJMIG9iamVjdCBpbnN0ZWFkIG9mIHNwcmVhZCBzeW50YXhcblx0Y29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG5cdFx0cGF0aDogcGFyc2VkVVJMLnBhdGhuYW1lICsgc2VhcmNoLFxuXHRcdHBhdGhuYW1lOiBwYXJzZWRVUkwucGF0aG5hbWUsXG5cdFx0aG9zdG5hbWU6IHBhcnNlZFVSTC5ob3N0bmFtZSxcblx0XHRwcm90b2NvbDogcGFyc2VkVVJMLnByb3RvY29sLFxuXHRcdHBvcnQ6IHBhcnNlZFVSTC5wb3J0LFxuXHRcdGhhc2g6IHBhcnNlZFVSTC5oYXNoLFxuXHRcdHNlYXJjaDogcGFyc2VkVVJMLnNlYXJjaCxcblx0XHRxdWVyeTogcGFyc2VkVVJMLnF1ZXJ5LFxuXHRcdGhyZWY6IHBhcnNlZFVSTC5ocmVmLFxuXHRcdG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG5cdFx0aGVhZGVyczogaGVhZGVyc1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSgpLFxuXHRcdGluc2VjdXJlSFRUUFBhcnNlcjogcmVxdWVzdC5pbnNlY3VyZUhUVFBQYXJzZXIsXG5cdFx0YWdlbnRcblx0fTtcblxuXHRyZXR1cm4gcmVxdWVzdE9wdGlvbnM7XG59O1xuXG4vKipcbiAqIEFib3J0RXJyb3IgaW50ZXJmYWNlIGZvciBjYW5jZWxsZWQgcmVxdWVzdHNcbiAqL1xuY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIEZldGNoQmFzZUVycm9yIHtcblx0Y29uc3RydWN0b3IobWVzc2FnZSwgdHlwZSA9ICdhYm9ydGVkJykge1xuXHRcdHN1cGVyKG1lc3NhZ2UsIHR5cGUpO1xuXHR9XG59XG5cbi8qKlxuICogSW5kZXguanNcbiAqXG4gKiBhIHJlcXVlc3QgQVBJIGNvbXBhdGlibGUgd2l0aCB3aW5kb3cuZmV0Y2hcbiAqXG4gKiBBbGwgc3BlYyBhbGdvcml0aG0gc3RlcCBudW1iZXJzIGFyZSBiYXNlZCBvbiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy9jb21taXQtc25hcHNob3RzL2FlNzE2ODIyY2IzYTYxODQzMjI2Y2QwOTBlZWZjNjU4OTQ0NmMxZDIvLlxuICovXG5cbmNvbnN0IHN1cHBvcnRlZFNjaGVtYXMgPSBuZXcgU2V0KFsnZGF0YTonLCAnaHR0cDonLCAnaHR0cHM6J10pO1xuXG4vKipcbiAqIEZldGNoIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtICAge3N0cmluZyB8IFVSTCB8IGltcG9ydCgnLi9yZXF1ZXN0JykuZGVmYXVsdH0gdXJsIC0gQWJzb2x1dGUgdXJsIG9yIFJlcXVlc3QgaW5zdGFuY2VcbiAqIEBwYXJhbSAgIHsqfSBbb3B0aW9uc19dIC0gRmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiAge1Byb21pc2U8aW1wb3J0KCcuL3Jlc3BvbnNlJykuZGVmYXVsdD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoKHVybCwgb3B0aW9uc18pIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHQvLyBCdWlsZCByZXF1ZXN0IG9iamVjdFxuXHRcdGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIG9wdGlvbnNfKTtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpO1xuXHRcdGlmICghc3VwcG9ydGVkU2NoZW1hcy5oYXMob3B0aW9ucy5wcm90b2NvbCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYG5vZGUtZmV0Y2ggY2Fubm90IGxvYWQgJHt1cmx9LiBVUkwgc2NoZW1lIFwiJHtvcHRpb25zLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpfVwiIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbnMucHJvdG9jb2wgPT09ICdkYXRhOicpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBkYXRhVXJpVG9CdWZmZXIocmVxdWVzdC51cmwpO1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoZGF0YSwge2hlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogZGF0YS50eXBlRnVsbH19KTtcblx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFdyYXAgaHR0cC5yZXF1ZXN0IGludG8gZmV0Y2hcblx0XHRjb25zdCBzZW5kID0gKG9wdGlvbnMucHJvdG9jb2wgPT09ICdodHRwczonID8gaHR0cHMgOiBodHRwKS5yZXF1ZXN0O1xuXHRcdGNvbnN0IHtzaWduYWx9ID0gcmVxdWVzdDtcblx0XHRsZXQgcmVzcG9uc2UgPSBudWxsO1xuXG5cdFx0Y29uc3QgYWJvcnQgPSAoKSA9PiB7XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBBYm9ydEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicpO1xuXHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdGlmIChyZXF1ZXN0LmJvZHkgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlKSB7XG5cdFx0XHRcdHJlcXVlc3QuYm9keS5kZXN0cm95KGVycm9yKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuYm9keSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlLmJvZHkuZW1pdCgnZXJyb3InLCBlcnJvcik7XG5cdFx0fTtcblxuXHRcdGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcblx0XHRcdGFib3J0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWJvcnRBbmRGaW5hbGl6ZSA9ICgpID0+IHtcblx0XHRcdGFib3J0KCk7XG5cdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdH07XG5cblx0XHQvLyBTZW5kIHJlcXVlc3Rcblx0XHRjb25zdCByZXF1ZXN0XyA9IHNlbmQob3B0aW9ucyk7XG5cblx0XHRpZiAoc2lnbmFsKSB7XG5cdFx0XHRzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFuZEZpbmFsaXplKTtcblx0XHR9XG5cblx0XHRjb25zdCBmaW5hbGl6ZSA9ICgpID0+IHtcblx0XHRcdHJlcXVlc3RfLmFib3J0KCk7XG5cdFx0XHRpZiAoc2lnbmFsKSB7XG5cdFx0XHRcdHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0QW5kRmluYWxpemUpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRyZXF1ZXN0Xy5vbignZXJyb3InLCBlcnIgPT4ge1xuXHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGByZXF1ZXN0IHRvICR7cmVxdWVzdC51cmx9IGZhaWxlZCwgcmVhc29uOiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpKTtcblx0XHRcdGZpbmFsaXplKCk7XG5cdFx0fSk7XG5cblx0XHRyZXF1ZXN0Xy5vbigncmVzcG9uc2UnLCByZXNwb25zZV8gPT4ge1xuXHRcdFx0cmVxdWVzdF8uc2V0VGltZW91dCgwKTtcblx0XHRcdGNvbnN0IGhlYWRlcnMgPSBmcm9tUmF3SGVhZGVycyhyZXNwb25zZV8ucmF3SGVhZGVycyk7XG5cblx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1XG5cdFx0XHRpZiAoaXNSZWRpcmVjdChyZXNwb25zZV8uc3RhdHVzQ29kZSkpIHtcblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuMlxuXHRcdFx0XHRjb25zdCBsb2NhdGlvbiA9IGhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpO1xuXG5cdFx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1LjNcblx0XHRcdFx0Y29uc3QgbG9jYXRpb25VUkwgPSBsb2NhdGlvbiA9PT0gbnVsbCA/IG51bGwgOiBuZXcgVVJMKGxvY2F0aW9uLCByZXF1ZXN0LnVybCk7XG5cblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuNVxuXHRcdFx0XHRzd2l0Y2ggKHJlcXVlc3QucmVkaXJlY3QpIHtcblx0XHRcdFx0XHRjYXNlICdlcnJvcic6XG5cdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHVyaSByZXF1ZXN0ZWQgcmVzcG9uZHMgd2l0aCBhIHJlZGlyZWN0LCByZWRpcmVjdCBtb2RlIGlzIHNldCB0byBlcnJvcjogJHtyZXF1ZXN0LnVybH1gLCAnbm8tcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdGNhc2UgJ21hbnVhbCc6XG5cdFx0XHRcdFx0XHQvLyBOb2RlLWZldGNoLXNwZWNpZmljIHN0ZXA6IG1ha2UgbWFudWFsIHJlZGlyZWN0IGEgYml0IGVhc2llciB0byB1c2UgYnkgc2V0dGluZyB0aGUgTG9jYXRpb24gaGVhZGVyIHZhbHVlIHRvIHRoZSByZXNvbHZlZCBVUkwuXG5cdFx0XHRcdFx0XHRpZiAobG9jYXRpb25VUkwgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGNvcnJ1cHRlZCBoZWFkZXJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRoZWFkZXJzLnNldCgnTG9jYXRpb24nLCBsb2NhdGlvblVSTCk7XG5cdFx0XHRcdFx0XHRcdFx0LyogYzggaWdub3JlIG5leHQgMyAqL1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnZm9sbG93Jzoge1xuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDJcblx0XHRcdFx0XHRcdGlmIChsb2NhdGlvblVSTCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDVcblx0XHRcdFx0XHRcdGlmIChyZXF1ZXN0LmNvdW50ZXIgPj0gcmVxdWVzdC5mb2xsb3cpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBtYXhpbXVtIHJlZGlyZWN0IHJlYWNoZWQgYXQ6ICR7cmVxdWVzdC51cmx9YCwgJ21heC1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgNiAoY291bnRlciBpbmNyZW1lbnQpXG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgUmVxdWVzdCBvYmplY3QuXG5cdFx0XHRcdFx0XHRjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0aGVhZGVyczogbmV3IEhlYWRlcnMocmVxdWVzdC5oZWFkZXJzKSxcblx0XHRcdFx0XHRcdFx0Zm9sbG93OiByZXF1ZXN0LmZvbGxvdyxcblx0XHRcdFx0XHRcdFx0Y291bnRlcjogcmVxdWVzdC5jb3VudGVyICsgMSxcblx0XHRcdFx0XHRcdFx0YWdlbnQ6IHJlcXVlc3QuYWdlbnQsXG5cdFx0XHRcdFx0XHRcdGNvbXByZXNzOiByZXF1ZXN0LmNvbXByZXNzLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRib2R5OiByZXF1ZXN0LmJvZHksXG5cdFx0XHRcdFx0XHRcdHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXG5cdFx0XHRcdFx0XHRcdHNpemU6IHJlcXVlc3Quc2l6ZVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDlcblx0XHRcdFx0XHRcdGlmIChyZXNwb25zZV8uc3RhdHVzQ29kZSAhPT0gMzAzICYmIHJlcXVlc3QuYm9keSAmJiBvcHRpb25zXy5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcignQ2Fubm90IGZvbGxvdyByZWRpcmVjdCB3aXRoIGJvZHkgYmVpbmcgYSByZWFkYWJsZSBzdHJlYW0nLCAndW5zdXBwb3J0ZWQtcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDExXG5cdFx0XHRcdFx0XHRpZiAocmVzcG9uc2VfLnN0YXR1c0NvZGUgPT09IDMwMyB8fCAoKHJlc3BvbnNlXy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzcG9uc2VfLnN0YXR1c0NvZGUgPT09IDMwMikgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdQT1NUJykpIHtcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdGlvbnMubWV0aG9kID0gJ0dFVCc7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRpb25zLmJvZHkgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRpb25zLmhlYWRlcnMuZGVsZXRlKCdjb250ZW50LWxlbmd0aCcpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgMTVcblx0XHRcdFx0XHRcdHJlc29sdmUoZmV0Y2gobmV3IFJlcXVlc3QobG9jYXRpb25VUkwsIHJlcXVlc3RPcHRpb25zKSkpO1xuXHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gRG8gbm90aGluZ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFByZXBhcmUgcmVzcG9uc2Vcblx0XHRcdHJlc3BvbnNlXy5vbmNlKCdlbmQnLCAoKSA9PiB7XG5cdFx0XHRcdGlmIChzaWduYWwpIHtcblx0XHRcdFx0XHRzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFuZEZpbmFsaXplKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGxldCBib2R5ID0gU3RyZWFtLnBpcGVsaW5lKHJlc3BvbnNlXywgbmV3IFN0cmVhbS5QYXNzVGhyb3VnaCgpLCBlcnJvciA9PiB7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9KTtcblx0XHRcdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8yOTM3NlxuXHRcdFx0aWYgKHByb2Nlc3MudmVyc2lvbiA8ICd2MTIuMTAnKSB7XG5cdFx0XHRcdHJlc3BvbnNlXy5vbignYWJvcnRlZCcsIGFib3J0QW5kRmluYWxpemUpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCByZXNwb25zZU9wdGlvbnMgPSB7XG5cdFx0XHRcdHVybDogcmVxdWVzdC51cmwsXG5cdFx0XHRcdHN0YXR1czogcmVzcG9uc2VfLnN0YXR1c0NvZGUsXG5cdFx0XHRcdHN0YXR1c1RleHQ6IHJlc3BvbnNlXy5zdGF0dXNNZXNzYWdlLFxuXHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemUsXG5cdFx0XHRcdGNvdW50ZXI6IHJlcXVlc3QuY291bnRlcixcblx0XHRcdFx0aGlnaFdhdGVyTWFyazogcmVxdWVzdC5oaWdoV2F0ZXJNYXJrXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCAxMi4xLjEuM1xuXHRcdFx0Y29uc3QgY29kaW5ncyA9IGhlYWRlcnMuZ2V0KCdDb250ZW50LUVuY29kaW5nJyk7XG5cblx0XHRcdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDEyLjEuMS40OiBoYW5kbGUgY29udGVudCBjb2RpbmdzXG5cblx0XHRcdC8vIGluIGZvbGxvd2luZyBzY2VuYXJpb3Mgd2UgaWdub3JlIGNvbXByZXNzaW9uIHN1cHBvcnRcblx0XHRcdC8vIDEuIGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZGlzYWJsZWRcblx0XHRcdC8vIDIuIEhFQUQgcmVxdWVzdFxuXHRcdFx0Ly8gMy4gbm8gQ29udGVudC1FbmNvZGluZyBoZWFkZXJcblx0XHRcdC8vIDQuIG5vIGNvbnRlbnQgcmVzcG9uc2UgKDIwNClcblx0XHRcdC8vIDUuIGNvbnRlbnQgbm90IG1vZGlmaWVkIHJlc3BvbnNlICgzMDQpXG5cdFx0XHRpZiAoIXJlcXVlc3QuY29tcHJlc3MgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fCBjb2RpbmdzID09PSBudWxsIHx8IHJlc3BvbnNlXy5zdGF0dXNDb2RlID09PSAyMDQgfHwgcmVzcG9uc2VfLnN0YXR1c0NvZGUgPT09IDMwNCkge1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZU9wdGlvbnMpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgTm9kZSB2Nitcblx0XHRcdC8vIEJlIGxlc3Mgc3RyaWN0IHdoZW4gZGVjb2RpbmcgY29tcHJlc3NlZCByZXNwb25zZXMsIHNpbmNlIHNvbWV0aW1lc1xuXHRcdFx0Ly8gc2VydmVycyBzZW5kIHNsaWdodGx5IGludmFsaWQgcmVzcG9uc2VzIHRoYXQgYXJlIHN0aWxsIGFjY2VwdGVkXG5cdFx0XHQvLyBieSBjb21tb24gYnJvd3NlcnMuXG5cdFx0XHQvLyBBbHdheXMgdXNpbmcgWl9TWU5DX0ZMVVNIIGlzIHdoYXQgY1VSTCBkb2VzLlxuXHRcdFx0Y29uc3QgemxpYk9wdGlvbnMgPSB7XG5cdFx0XHRcdGZsdXNoOiB6bGliLlpfU1lOQ19GTFVTSCxcblx0XHRcdFx0ZmluaXNoRmx1c2g6IHpsaWIuWl9TWU5DX0ZMVVNIXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBGb3IgZ3ppcFxuXHRcdFx0aWYgKGNvZGluZ3MgPT09ICdnemlwJyB8fCBjb2RpbmdzID09PSAneC1nemlwJykge1xuXHRcdFx0XHRib2R5ID0gU3RyZWFtLnBpcGVsaW5lKGJvZHksIHpsaWIuY3JlYXRlR3VuemlwKHpsaWJPcHRpb25zKSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZU9wdGlvbnMpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgZGVmbGF0ZVxuXHRcdFx0aWYgKGNvZGluZ3MgPT09ICdkZWZsYXRlJyB8fCBjb2RpbmdzID09PSAneC1kZWZsYXRlJykge1xuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGluZmFtb3VzIHJhdyBkZWZsYXRlIHJlc3BvbnNlIGZyb20gb2xkIHNlcnZlcnNcblx0XHRcdFx0Ly8gYSBoYWNrIGZvciBvbGQgSUlTIGFuZCBBcGFjaGUgc2VydmVyc1xuXHRcdFx0XHRjb25zdCByYXcgPSBTdHJlYW0ucGlwZWxpbmUocmVzcG9uc2VfLCBuZXcgU3RyZWFtLlBhc3NUaHJvdWdoKCksIGVycm9yID0+IHtcblx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmF3Lm9uY2UoJ2RhdGEnLCBjaHVuayA9PiB7XG5cdFx0XHRcdFx0Ly8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzc1MTk4Mjhcblx0XHRcdFx0XHRpZiAoKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDgpIHtcblx0XHRcdFx0XHRcdGJvZHkgPSBTdHJlYW0ucGlwZWxpbmUoYm9keSwgemxpYi5jcmVhdGVJbmZsYXRlKCksIGVycm9yID0+IHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRib2R5ID0gU3RyZWFtLnBpcGVsaW5lKGJvZHksIHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpLCBlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZU9wdGlvbnMpO1xuXHRcdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgYnJcblx0XHRcdGlmIChjb2RpbmdzID09PSAnYnInKSB7XG5cdFx0XHRcdGJvZHkgPSBTdHJlYW0ucGlwZWxpbmUoYm9keSwgemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKCksIGVycm9yID0+IHtcblx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2VPcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCB1c2UgcmVzcG9uc2UgYXMtaXNcblx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlT3B0aW9ucyk7XG5cdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHR9KTtcblxuXHRcdHdyaXRlVG9TdHJlYW0ocmVxdWVzdF8sIHJlcXVlc3QpO1xuXHR9KTtcbn1cblxuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbmV4cG9ydHMuRmV0Y2hFcnJvciA9IEZldGNoRXJyb3I7XG5leHBvcnRzLkhlYWRlcnMgPSBIZWFkZXJzO1xuZXhwb3J0cy5SZXF1ZXN0ID0gUmVxdWVzdDtcbmV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGZldGNoO1xuZXhwb3J0cy5pc1JlZGlyZWN0ID0gaXNSZWRpcmVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmNqcy5tYXBcbiIsIi8qKlxuICogd2ViLXN0cmVhbXMtcG9seWZpbGwgdjMuMi4wXG4gKi9cbi8vLyA8cmVmZXJlbmNlIGxpYj1cImVzMjAxNS5zeW1ib2xcIiAvPlxuY29uc3QgU3ltYm9sUG9seWZpbGwgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID9cbiAgICBTeW1ib2wgOlxuICAgIGRlc2NyaXB0aW9uID0+IGBTeW1ib2woJHtkZXNjcmlwdGlvbn0pYDtcblxuLy8vIDxyZWZlcmVuY2UgbGliPVwiZG9tXCIgLz5cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldEdsb2JhbHMoKSB7XG4gICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmNvbnN0IGdsb2JhbHMgPSBnZXRHbG9iYWxzKCk7XG5cbmZ1bmN0aW9uIHR5cGVJc09iamVjdCh4KSB7XG4gICAgcmV0dXJuICh0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbCkgfHwgdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5jb25zdCByZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24gPSBub29wO1xuXG5jb25zdCBvcmlnaW5hbFByb21pc2UgPSBQcm9taXNlO1xuY29uc3Qgb3JpZ2luYWxQcm9taXNlVGhlbiA9IFByb21pc2UucHJvdG90eXBlLnRoZW47XG5jb25zdCBvcmlnaW5hbFByb21pc2VSZXNvbHZlID0gUHJvbWlzZS5yZXNvbHZlLmJpbmQob3JpZ2luYWxQcm9taXNlKTtcbmNvbnN0IG9yaWdpbmFsUHJvbWlzZVJlamVjdCA9IFByb21pc2UucmVqZWN0LmJpbmQob3JpZ2luYWxQcm9taXNlKTtcbmZ1bmN0aW9uIG5ld1Byb21pc2UoZXhlY3V0b3IpIHtcbiAgICByZXR1cm4gbmV3IG9yaWdpbmFsUHJvbWlzZShleGVjdXRvcik7XG59XG5mdW5jdGlvbiBwcm9taXNlUmVzb2x2ZWRXaXRoKHZhbHVlKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsUHJvbWlzZVJlc29sdmUodmFsdWUpO1xufVxuZnVuY3Rpb24gcHJvbWlzZVJlamVjdGVkV2l0aChyZWFzb24pIHtcbiAgICByZXR1cm4gb3JpZ2luYWxQcm9taXNlUmVqZWN0KHJlYXNvbik7XG59XG5mdW5jdGlvbiBQZXJmb3JtUHJvbWlzZVRoZW4ocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAvLyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnkgd2F5IHRvIGNvcnJlY3RseSBlbXVsYXRlIHRoZSBiZWhhdmlvdXIgZnJvbSBKYXZhU2NyaXB0LCBzbyB0aGlzIGlzIGp1c3QgYW5cbiAgICAvLyBhcHByb3hpbWF0aW9uLlxuICAgIHJldHVybiBvcmlnaW5hbFByb21pc2VUaGVuLmNhbGwocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xufVxuZnVuY3Rpb24gdXBvblByb21pc2UocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICBQZXJmb3JtUHJvbWlzZVRoZW4oUGVyZm9ybVByb21pc2VUaGVuKHByb21pc2UsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSwgdW5kZWZpbmVkLCByZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xufVxuZnVuY3Rpb24gdXBvbkZ1bGZpbGxtZW50KHByb21pc2UsIG9uRnVsZmlsbGVkKSB7XG4gICAgdXBvblByb21pc2UocHJvbWlzZSwgb25GdWxmaWxsZWQpO1xufVxuZnVuY3Rpb24gdXBvblJlamVjdGlvbihwcm9taXNlLCBvblJlamVjdGVkKSB7XG4gICAgdXBvblByb21pc2UocHJvbWlzZSwgdW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybVByb21pc2VXaXRoKHByb21pc2UsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICAgIHJldHVybiBQZXJmb3JtUHJvbWlzZVRoZW4ocHJvbWlzZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbn1cbmZ1bmN0aW9uIHNldFByb21pc2VJc0hhbmRsZWRUb1RydWUocHJvbWlzZSkge1xuICAgIFBlcmZvcm1Qcm9taXNlVGhlbihwcm9taXNlLCB1bmRlZmluZWQsIHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG59XG5jb25zdCBxdWV1ZU1pY3JvdGFzayA9ICgoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsUXVldWVNaWNyb3Rhc2sgPSBnbG9iYWxzICYmIGdsb2JhbHMucXVldWVNaWNyb3Rhc2s7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxRdWV1ZU1pY3JvdGFzayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZ2xvYmFsUXVldWVNaWNyb3Rhc2s7XG4gICAgfVxuICAgIGNvbnN0IHJlc29sdmVkUHJvbWlzZSA9IHByb21pc2VSZXNvbHZlZFdpdGgodW5kZWZpbmVkKTtcbiAgICByZXR1cm4gKGZuKSA9PiBQZXJmb3JtUHJvbWlzZVRoZW4ocmVzb2x2ZWRQcm9taXNlLCBmbik7XG59KSgpO1xuZnVuY3Rpb24gcmVmbGVjdENhbGwoRiwgViwgYXJncykge1xuICAgIGlmICh0eXBlb2YgRiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoRiwgViwgYXJncyk7XG59XG5mdW5jdGlvbiBwcm9taXNlQ2FsbChGLCBWLCBhcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlZFdpdGgocmVmbGVjdENhbGwoRiwgViwgYXJncykpO1xuICAgIH1cbiAgICBjYXRjaCAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgodmFsdWUpO1xuICAgIH1cbn1cblxuLy8gT3JpZ2luYWwgZnJvbSBDaHJvbWl1bVxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYy8rLzBhZWU0NDM0YTRkYmE0MmE0MmFiYWVhOWJmYmMwY2QxOTZhNjNiYzEvdGhpcmRfcGFydHkvYmxpbmsvcmVuZGVyZXIvY29yZS9zdHJlYW1zL1NpbXBsZVF1ZXVlLmpzXG5jb25zdCBRVUVVRV9NQVhfQVJSQVlfU0laRSA9IDE2Mzg0O1xuLyoqXG4gKiBTaW1wbGUgcXVldWUgc3RydWN0dXJlLlxuICpcbiAqIEF2b2lkcyBzY2FsYWJpbGl0eSBpc3N1ZXMgd2l0aCB1c2luZyBhIHBhY2tlZCBhcnJheSBkaXJlY3RseSBieSB1c2luZ1xuICogbXVsdGlwbGUgYXJyYXlzIGluIGEgbGlua2VkIGxpc3QgYW5kIGtlZXBpbmcgdGhlIGFycmF5IHNpemUgYm91bmRlZC5cbiAqL1xuY2xhc3MgU2ltcGxlUXVldWUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9jdXJzb3IgPSAwO1xuICAgICAgICB0aGlzLl9zaXplID0gMDtcbiAgICAgICAgLy8gX2Zyb250IGFuZCBfYmFjayBhcmUgYWx3YXlzIGRlZmluZWQuXG4gICAgICAgIHRoaXMuX2Zyb250ID0ge1xuICAgICAgICAgICAgX2VsZW1lbnRzOiBbXSxcbiAgICAgICAgICAgIF9uZXh0OiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fYmFjayA9IHRoaXMuX2Zyb250O1xuICAgICAgICAvLyBUaGUgY3Vyc29yIGlzIHVzZWQgdG8gYXZvaWQgY2FsbGluZyBBcnJheS5zaGlmdCgpLlxuICAgICAgICAvLyBJdCBjb250YWlucyB0aGUgaW5kZXggb2YgdGhlIGZyb250IGVsZW1lbnQgb2YgdGhlIGFycmF5IGluc2lkZSB0aGVcbiAgICAgICAgLy8gZnJvbnQtbW9zdCBub2RlLiBJdCBpcyBhbHdheXMgaW4gdGhlIHJhbmdlIFswLCBRVUVVRV9NQVhfQVJSQVlfU0laRSkuXG4gICAgICAgIHRoaXMuX2N1cnNvciA9IDA7XG4gICAgICAgIC8vIFdoZW4gdGhlcmUgaXMgb25seSBvbmUgbm9kZSwgc2l6ZSA9PT0gZWxlbWVudHMubGVuZ3RoIC0gY3Vyc29yLlxuICAgICAgICB0aGlzLl9zaXplID0gMDtcbiAgICB9XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuICAgIC8vIEZvciBleGNlcHRpb24gc2FmZXR5LCB0aGlzIG1ldGhvZCBpcyBzdHJ1Y3R1cmVkIGluIG9yZGVyOlxuICAgIC8vIDEuIFJlYWQgc3RhdGVcbiAgICAvLyAyLiBDYWxjdWxhdGUgcmVxdWlyZWQgc3RhdGUgbXV0YXRpb25zXG4gICAgLy8gMy4gUGVyZm9ybSBzdGF0ZSBtdXRhdGlvbnNcbiAgICBwdXNoKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgb2xkQmFjayA9IHRoaXMuX2JhY2s7XG4gICAgICAgIGxldCBuZXdCYWNrID0gb2xkQmFjaztcbiAgICAgICAgaWYgKG9sZEJhY2suX2VsZW1lbnRzLmxlbmd0aCA9PT0gUVVFVUVfTUFYX0FSUkFZX1NJWkUgLSAxKSB7XG4gICAgICAgICAgICBuZXdCYWNrID0ge1xuICAgICAgICAgICAgICAgIF9lbGVtZW50czogW10sXG4gICAgICAgICAgICAgICAgX25leHQ6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwdXNoKCkgaXMgdGhlIG11dGF0aW9uIG1vc3QgbGlrZWx5IHRvIHRocm93IGFuIGV4Y2VwdGlvbiwgc28gaXRcbiAgICAgICAgLy8gZ29lcyBmaXJzdC5cbiAgICAgICAgb2xkQmFjay5fZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgaWYgKG5ld0JhY2sgIT09IG9sZEJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2sgPSBuZXdCYWNrO1xuICAgICAgICAgICAgb2xkQmFjay5fbmV4dCA9IG5ld0JhY2s7XG4gICAgICAgIH1cbiAgICAgICAgKyt0aGlzLl9zaXplO1xuICAgIH1cbiAgICAvLyBMaWtlIHB1c2goKSwgc2hpZnQoKSBmb2xsb3dzIHRoZSByZWFkIC0+IGNhbGN1bGF0ZSAtPiBtdXRhdGUgcGF0dGVybiBmb3JcbiAgICAvLyBleGNlcHRpb24gc2FmZXR5LlxuICAgIHNoaWZ0KCkgeyAvLyBtdXN0IG5vdCBiZSBjYWxsZWQgb24gYW4gZW1wdHkgcXVldWVcbiAgICAgICAgY29uc3Qgb2xkRnJvbnQgPSB0aGlzLl9mcm9udDtcbiAgICAgICAgbGV0IG5ld0Zyb250ID0gb2xkRnJvbnQ7XG4gICAgICAgIGNvbnN0IG9sZEN1cnNvciA9IHRoaXMuX2N1cnNvcjtcbiAgICAgICAgbGV0IG5ld0N1cnNvciA9IG9sZEN1cnNvciArIDE7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gb2xkRnJvbnQuX2VsZW1lbnRzO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbb2xkQ3Vyc29yXTtcbiAgICAgICAgaWYgKG5ld0N1cnNvciA9PT0gUVVFVUVfTUFYX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgICAgIG5ld0Zyb250ID0gb2xkRnJvbnQuX25leHQ7XG4gICAgICAgICAgICBuZXdDdXJzb3IgPSAwO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIG11dGF0aW9ucyBiZWZvcmUgdGhpcyBwb2ludC5cbiAgICAgICAgLS10aGlzLl9zaXplO1xuICAgICAgICB0aGlzLl9jdXJzb3IgPSBuZXdDdXJzb3I7XG4gICAgICAgIGlmIChvbGRGcm9udCAhPT0gbmV3RnJvbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Zyb250ID0gbmV3RnJvbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGVybWl0IHNoaWZ0ZWQgZWxlbWVudCB0byBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgZWxlbWVudHNbb2xkQ3Vyc29yXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIC8vIFRoZSB0cmlja3kgdGhpbmcgYWJvdXQgZm9yRWFjaCgpIGlzIHRoYXQgaXQgY2FuIGJlIGNhbGxlZFxuICAgIC8vIHJlLWVudHJhbnRseS4gVGhlIHF1ZXVlIG1heSBiZSBtdXRhdGVkIGluc2lkZSB0aGUgY2FsbGJhY2suIEl0IGlzIGVhc3kgdG9cbiAgICAvLyBzZWUgdGhhdCBwdXNoKCkgd2l0aGluIHRoZSBjYWxsYmFjayBoYXMgbm8gbmVnYXRpdmUgZWZmZWN0cyBzaW5jZSB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIHF1ZXVlIGlzIGNoZWNrZWQgZm9yIG9uIGV2ZXJ5IGl0ZXJhdGlvbi4gSWYgc2hpZnQoKSBpcyBjYWxsZWRcbiAgICAvLyByZXBlYXRlZGx5IHdpdGhpbiB0aGUgY2FsbGJhY2sgdGhlbiB0aGUgbmV4dCBpdGVyYXRpb24gbWF5IHJldHVybiBhblxuICAgIC8vIGVsZW1lbnQgdGhhdCBoYXMgYmVlbiByZW1vdmVkLiBJbiB0aGlzIGNhc2UgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkXG4gICAgLy8gd2l0aCB1bmRlZmluZWQgdmFsdWVzIHVudGlsIHdlIGVpdGhlciBcImNhdGNoIHVwXCIgd2l0aCBlbGVtZW50cyB0aGF0IHN0aWxsXG4gICAgLy8gZXhpc3Qgb3IgcmVhY2ggdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLlxuICAgIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IGkgPSB0aGlzLl9jdXJzb3I7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5fZnJvbnQ7XG4gICAgICAgIGxldCBlbGVtZW50cyA9IG5vZGUuX2VsZW1lbnRzO1xuICAgICAgICB3aGlsZSAoaSAhPT0gZWxlbWVudHMubGVuZ3RoIHx8IG5vZGUuX25leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGkgPT09IGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLl9uZXh0O1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gbm9kZS5fZWxlbWVudHM7XG4gICAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhlbGVtZW50c1tpXSk7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUmV0dXJuIHRoZSBlbGVtZW50IHRoYXQgd291bGQgYmUgcmV0dXJuZWQgaWYgc2hpZnQoKSB3YXMgY2FsbGVkIG5vdyxcbiAgICAvLyB3aXRob3V0IG1vZGlmeWluZyB0aGUgcXVldWUuXG4gICAgcGVlaygpIHsgLy8gbXVzdCBub3QgYmUgY2FsbGVkIG9uIGFuIGVtcHR5IHF1ZXVlXG4gICAgICAgIGNvbnN0IGZyb250ID0gdGhpcy5fZnJvbnQ7XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IHRoaXMuX2N1cnNvcjtcbiAgICAgICAgcmV0dXJuIGZyb250Ll9lbGVtZW50c1tjdXJzb3JdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljSW5pdGlhbGl6ZShyZWFkZXIsIHN0cmVhbSkge1xuICAgIHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICBzdHJlYW0uX3JlYWRlciA9IHJlYWRlcjtcbiAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUocmVhZGVyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZChyZWFkZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZChyZWFkZXIsIHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgIH1cbn1cbi8vIEEgY2xpZW50IG9mIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBhbmQgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIG1heSB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5IHRvIGJ5cGFzcyBzdGF0ZVxuLy8gY2hlY2suXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNDYW5jZWwocmVhZGVyLCByZWFzb24pIHtcbiAgICBjb25zdCBzdHJlYW0gPSByZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW07XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgcmVhc29uKTtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKSB7XG4gICAgaWYgKHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZWplY3QocmVhZGVyLCBuZXcgVHlwZUVycm9yKGBSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtJ3MgY2xvc2VkbmVzc2ApKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVzZXRUb1JlamVjdGVkKHJlYWRlciwgbmV3IFR5cGVFcnJvcihgUmVhZGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3NgKSk7XG4gICAgfVxuICAgIHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbS5fcmVhZGVyID0gdW5kZWZpbmVkO1xuICAgIHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbSA9IHVuZGVmaW5lZDtcbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSByZWFkZXJzLlxuZnVuY3Rpb24gcmVhZGVyTG9ja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCAnICsgbmFtZSArICcgYSBzdHJlYW0gdXNpbmcgYSByZWxlYXNlZCByZWFkZXInKTtcbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIuXG5mdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUocmVhZGVyKSB7XG4gICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlID0gbmV3UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQocmVhZGVyLCByZWFzb24pIHtcbiAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUocmVhZGVyKTtcbiAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlamVjdChyZWFkZXIsIHJlYXNvbik7XG59XG5mdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemVBc1Jlc29sdmVkKHJlYWRlcikge1xuICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZShyZWFkZXIpO1xuICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVzb2x2ZShyZWFkZXIpO1xufVxuZnVuY3Rpb24gZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZWplY3QocmVhZGVyLCByZWFzb24pIHtcbiAgICBpZiAocmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0UHJvbWlzZUlzSGFuZGxlZFRvVHJ1ZShyZWFkZXIuX2Nsb3NlZFByb21pc2UpO1xuICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QocmVhc29uKTtcbiAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZXNldFRvUmVqZWN0ZWQocmVhZGVyLCByZWFzb24pIHtcbiAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemVBc1JlamVjdGVkKHJlYWRlciwgcmVhc29uKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVzb2x2ZShyZWFkZXIpIHtcbiAgICBpZiAocmVhZGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgQWJvcnRTdGVwcyA9IFN5bWJvbFBvbHlmaWxsKCdbW0Fib3J0U3RlcHNdXScpO1xuY29uc3QgRXJyb3JTdGVwcyA9IFN5bWJvbFBvbHlmaWxsKCdbW0Vycm9yU3RlcHNdXScpO1xuY29uc3QgQ2FuY2VsU3RlcHMgPSBTeW1ib2xQb2x5ZmlsbCgnW1tDYW5jZWxTdGVwc11dJyk7XG5jb25zdCBQdWxsU3RlcHMgPSBTeW1ib2xQb2x5ZmlsbCgnW1tQdWxsU3RlcHNdXScpO1xuXG4vLy8gPHJlZmVyZW5jZSBsaWI9XCJlczIwMTUuY29yZVwiIC8+XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9OdW1iZXIvaXNGaW5pdGUjUG9seWZpbGxcbmNvbnN0IE51bWJlcklzRmluaXRlID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh4KTtcbn07XG5cbi8vLyA8cmVmZXJlbmNlIGxpYj1cImVzMjAxNS5jb3JlXCIgLz5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvdHJ1bmMjUG9seWZpbGxcbmNvbnN0IE1hdGhUcnVuYyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gdiA8IDAgPyBNYXRoLmNlaWwodikgOiBNYXRoLmZsb29yKHYpO1xufTtcblxuLy8gaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLWRpY3Rpb25hcmllc1xuZnVuY3Rpb24gaXNEaWN0aW9uYXJ5KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnIHx8IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gYXNzZXJ0RGljdGlvbmFyeShvYmosIGNvbnRleHQpIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgIWlzRGljdGlvbmFyeShvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7Y29udGV4dH0gaXMgbm90IGFuIG9iamVjdC5gKTtcbiAgICB9XG59XG4vLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtY2FsbGJhY2stZnVuY3Rpb25zXG5mdW5jdGlvbiBhc3NlcnRGdW5jdGlvbih4LCBjb250ZXh0KSB7XG4gICAgaWYgKHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7Y29udGV4dH0gaXMgbm90IGEgZnVuY3Rpb24uYCk7XG4gICAgfVxufVxuLy8gaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLW9iamVjdFxuZnVuY3Rpb24gaXNPYmplY3QoeCkge1xuICAgIHJldHVybiAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpIHx8IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gYXNzZXJ0T2JqZWN0KHgsIGNvbnRleHQpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7Y29udGV4dH0gaXMgbm90IGFuIG9iamVjdC5gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhc3NlcnRSZXF1aXJlZEFyZ3VtZW50KHgsIHBvc2l0aW9uLCBjb250ZXh0KSB7XG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBQYXJhbWV0ZXIgJHtwb3NpdGlvbn0gaXMgcmVxdWlyZWQgaW4gJyR7Y29udGV4dH0nLmApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFJlcXVpcmVkRmllbGQoeCwgZmllbGQsIGNvbnRleHQpIHtcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7ZmllbGR9IGlzIHJlcXVpcmVkIGluICcke2NvbnRleHR9Jy5gKTtcbiAgICB9XG59XG4vLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtdW5yZXN0cmljdGVkLWRvdWJsZVxuZnVuY3Rpb24gY29udmVydFVucmVzdHJpY3RlZERvdWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xufVxuZnVuY3Rpb24gY2Vuc29yTmVnYXRpdmVaZXJvKHgpIHtcbiAgICByZXR1cm4geCA9PT0gMCA/IDAgOiB4O1xufVxuZnVuY3Rpb24gaW50ZWdlclBhcnQoeCkge1xuICAgIHJldHVybiBjZW5zb3JOZWdhdGl2ZVplcm8oTWF0aFRydW5jKHgpKTtcbn1cbi8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC11bnNpZ25lZC1sb25nLWxvbmdcbmZ1bmN0aW9uIGNvbnZlcnRVbnNpZ25lZExvbmdMb25nV2l0aEVuZm9yY2VSYW5nZSh2YWx1ZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGxvd2VyQm91bmQgPSAwO1xuICAgIGNvbnN0IHVwcGVyQm91bmQgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICBsZXQgeCA9IE51bWJlcih2YWx1ZSk7XG4gICAgeCA9IGNlbnNvck5lZ2F0aXZlWmVybyh4KTtcbiAgICBpZiAoIU51bWJlcklzRmluaXRlKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7Y29udGV4dH0gaXMgbm90IGEgZmluaXRlIG51bWJlcmApO1xuICAgIH1cbiAgICB4ID0gaW50ZWdlclBhcnQoeCk7XG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7Y29udGV4dH0gaXMgb3V0c2lkZSB0aGUgYWNjZXB0ZWQgcmFuZ2Ugb2YgJHtsb3dlckJvdW5kfSB0byAke3VwcGVyQm91bmR9LCBpbmNsdXNpdmVgKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXJJc0Zpbml0ZSh4KSB8fCB4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAvLyBUT0RPIFVzZSBCaWdJbnQgaWYgc3VwcG9ydGVkP1xuICAgIC8vIGxldCB4QmlnSW50ID0gQmlnSW50KGludGVnZXJQYXJ0KHgpKTtcbiAgICAvLyB4QmlnSW50ID0gQmlnSW50LmFzVWludE4oNjQsIHhCaWdJbnQpO1xuICAgIC8vIHJldHVybiBOdW1iZXIoeEJpZ0ludCk7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFJlYWRhYmxlU3RyZWFtKHgsIGNvbnRleHQpIHtcbiAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW0oeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtjb250ZXh0fSBpcyBub3QgYSBSZWFkYWJsZVN0cmVhbS5gKTtcbiAgICB9XG59XG5cbi8vIEFic3RyYWN0IG9wZXJhdGlvbnMgZm9yIHRoZSBSZWFkYWJsZVN0cmVhbS5cbmZ1bmN0aW9uIEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoc3RyZWFtKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoc3RyZWFtKTtcbn1cbi8vIFJlYWRhYmxlU3RyZWFtIEFQSSBleHBvc2VkIGZvciBjb250cm9sbGVycy5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQWRkUmVhZFJlcXVlc3Qoc3RyZWFtLCByZWFkUmVxdWVzdCkge1xuICAgIHN0cmVhbS5fcmVhZGVyLl9yZWFkUmVxdWVzdHMucHVzaChyZWFkUmVxdWVzdCk7XG59XG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZ1bGZpbGxSZWFkUmVxdWVzdChzdHJlYW0sIGNodW5rLCBkb25lKSB7XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG4gICAgY29uc3QgcmVhZFJlcXVlc3QgPSByZWFkZXIuX3JlYWRSZXF1ZXN0cy5zaGlmdCgpO1xuICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJlYWRSZXF1ZXN0Ll9jbG9zZVN0ZXBzKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZWFkUmVxdWVzdC5fY2h1bmtTdGVwcyhjaHVuayk7XG4gICAgfVxufVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSB7XG4gICAgcmV0dXJuIHN0cmVhbS5fcmVhZGVyLl9yZWFkUmVxdWVzdHMubGVuZ3RoO1xufVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1IYXNEZWZhdWx0UmVhZGVyKHN0cmVhbSkge1xuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuICAgIGlmIChyZWFkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIocmVhZGVyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBBIGRlZmF1bHQgcmVhZGVyIHZlbmRlZCBieSBhIHtAbGluayBSZWFkYWJsZVN0cmVhbX0uXG4gKlxuICogQHB1YmxpY1xuICovXG5jbGFzcyBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmVhbSkge1xuICAgICAgICBhc3NlcnRSZXF1aXJlZEFyZ3VtZW50KHN0cmVhbSwgMSwgJ1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcicpO1xuICAgICAgICBhc3NlcnRSZWFkYWJsZVN0cmVhbShzdHJlYW0sICdGaXJzdCBwYXJhbWV0ZXInKTtcbiAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSByZWFkaW5nIGJ5IGFub3RoZXIgcmVhZGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljSW5pdGlhbGl6ZSh0aGlzLCBzdHJlYW0pO1xuICAgICAgICB0aGlzLl9yZWFkUmVxdWVzdHMgPSBuZXcgU2ltcGxlUXVldWUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIGJlIGZ1bGZpbGxlZCB3aGVuIHRoZSBzdHJlYW0gYmVjb21lcyBjbG9zZWQsXG4gICAgICogb3IgcmVqZWN0ZWQgaWYgdGhlIHN0cmVhbSBldmVyIGVycm9ycyBvciB0aGUgcmVhZGVyJ3MgbG9jayBpcyByZWxlYXNlZCBiZWZvcmUgdGhlIHN0cmVhbSBmaW5pc2hlcyBjbG9zaW5nLlxuICAgICAqL1xuICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKGRlZmF1bHRSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlZFByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSByZWFkZXIgaXMgYWN0aXZlLCBiZWhhdmVzIHRoZSBzYW1lIGFzIHtAbGluayBSZWFkYWJsZVN0cmVhbS5jYW5jZWwgfCBzdHJlYW0uY2FuY2VsKHJlYXNvbil9LlxuICAgICAqL1xuICAgIGNhbmNlbChyZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2NhbmNlbCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChyZWFkZXJMb2NrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0NhbmNlbCh0aGlzLCByZWFzb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIG5leHQgY2h1bmsgZnJvbSB0aGUgc3RyZWFtJ3MgaW50ZXJuYWwgcXVldWUsIGlmIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIElmIHJlYWRpbmcgYSBjaHVuayBjYXVzZXMgdGhlIHF1ZXVlIHRvIGJlY29tZSBlbXB0eSwgbW9yZSBkYXRhIHdpbGwgYmUgcHVsbGVkIGZyb20gdGhlIHVuZGVybHlpbmcgc291cmNlLlxuICAgICAqL1xuICAgIHJlYWQoKSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKGRlZmF1bHRSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWFkJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKHJlYWRlckxvY2tFeGNlcHRpb24oJ3JlYWQgZnJvbScpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG4gICAgICAgIGxldCByZWplY3RQcm9taXNlO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgICAgICAgICByZWplY3RQcm9taXNlID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVhZFJlcXVlc3QgPSB7XG4gICAgICAgICAgICBfY2h1bmtTdGVwczogY2h1bmsgPT4gcmVzb2x2ZVByb21pc2UoeyB2YWx1ZTogY2h1bmssIGRvbmU6IGZhbHNlIH0pLFxuICAgICAgICAgICAgX2Nsb3NlU3RlcHM6ICgpID0+IHJlc29sdmVQcm9taXNlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgIF9lcnJvclN0ZXBzOiBlID0+IHJlamVjdFByb21pc2UoZSlcbiAgICAgICAgfTtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZCh0aGlzLCByZWFkUmVxdWVzdCk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWxlYXNlcyB0aGUgcmVhZGVyJ3MgbG9jayBvbiB0aGUgY29ycmVzcG9uZGluZyBzdHJlYW0uIEFmdGVyIHRoZSBsb2NrIGlzIHJlbGVhc2VkLCB0aGUgcmVhZGVyIGlzIG5vIGxvbmdlciBhY3RpdmUuXG4gICAgICogSWYgdGhlIGFzc29jaWF0ZWQgc3RyZWFtIGlzIGVycm9yZWQgd2hlbiB0aGUgbG9jayBpcyByZWxlYXNlZCwgdGhlIHJlYWRlciB3aWxsIGFwcGVhciBlcnJvcmVkIGluIHRoZSBzYW1lIHdheVxuICAgICAqIGZyb20gbm93IG9uOyBvdGhlcndpc2UsIHRoZSByZWFkZXIgd2lsbCBhcHBlYXIgY2xvc2VkLlxuICAgICAqXG4gICAgICogQSByZWFkZXIncyBsb2NrIGNhbm5vdCBiZSByZWxlYXNlZCB3aGlsZSBpdCBzdGlsbCBoYXMgYSBwZW5kaW5nIHJlYWQgcmVxdWVzdCwgaS5lLiwgaWYgYSBwcm9taXNlIHJldHVybmVkIGJ5XG4gICAgICogdGhlIHJlYWRlcidzIHtAbGluayBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucmVhZCB8IHJlYWQoKX0gbWV0aG9kIGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZC4gQXR0ZW1wdGluZyB0b1xuICAgICAqIGRvIHNvIHdpbGwgdGhyb3cgYSBgVHlwZUVycm9yYCBhbmQgbGVhdmUgdGhlIHJlYWRlciBsb2NrZWQgdG8gdGhlIHN0cmVhbS5cbiAgICAgKi9cbiAgICByZWxlYXNlTG9jaygpIHtcbiAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlbGVhc2VMb2NrJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9yZWFkUmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gcmVsZWFzZSBhIHJlYWRlciBsb2NrIHdoZW4gdGhhdCByZWFkZXIgaGFzIHBlbmRpbmcgcmVhZCgpIGNhbGxzIHVuLXNldHRsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNSZWxlYXNlKHRoaXMpO1xuICAgIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5wcm90b3R5cGUsIHtcbiAgICBjYW5jZWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIHJlYWQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIHJlbGVhc2VMb2NrOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBjbG9zZWQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcbmlmICh0eXBlb2YgU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWcgPT09ICdzeW1ib2wnKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIHZhbHVlOiAnUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyJyxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG59XG4vLyBBYnN0cmFjdCBvcGVyYXRpb25zIGZvciB0aGUgcmVhZGVycy5cbmZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHgpIHtcbiAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfcmVhZFJlcXVlc3RzJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4geCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcjtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlclJlYWQocmVhZGVyLCByZWFkUmVxdWVzdCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbTtcbiAgICBzdHJlYW0uX2Rpc3R1cmJlZCA9IHRydWU7XG4gICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgIHJlYWRSZXF1ZXN0Ll9jbG9zZVN0ZXBzKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICByZWFkUmVxdWVzdC5fZXJyb3JTdGVwcyhzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyW1B1bGxTdGVwc10ocmVhZFJlcXVlc3QpO1xuICAgIH1cbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIuXG5mdW5jdGlvbiBkZWZhdWx0UmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5wcm90b3R5cGUuJHtuYW1lfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyYCk7XG59XG5cbi8vLyA8cmVmZXJlbmNlIGxpYj1cImVzMjAxOC5hc3luY2l0ZXJhYmxlXCIgLz5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xuY29uc3QgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXN5bmMgZnVuY3Rpb24qICgpIHsgfSkucHJvdG90eXBlKTtcblxuLy8vIDxyZWZlcmVuY2UgbGliPVwiZXMyMDE4LmFzeW5jaXRlcmFibGVcIiAvPlxuY2xhc3MgUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9ySW1wbCB7XG4gICAgY29uc3RydWN0b3IocmVhZGVyLCBwcmV2ZW50Q2FuY2VsKSB7XG4gICAgICAgIHRoaXMuX29uZ29pbmdQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9pc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3JlYWRlciA9IHJlYWRlcjtcbiAgICAgICAgdGhpcy5fcHJldmVudENhbmNlbCA9IHByZXZlbnRDYW5jZWw7XG4gICAgfVxuICAgIG5leHQoKSB7XG4gICAgICAgIGNvbnN0IG5leHRTdGVwcyA9ICgpID0+IHRoaXMuX25leHRTdGVwcygpO1xuICAgICAgICB0aGlzLl9vbmdvaW5nUHJvbWlzZSA9IHRoaXMuX29uZ29pbmdQcm9taXNlID9cbiAgICAgICAgICAgIHRyYW5zZm9ybVByb21pc2VXaXRoKHRoaXMuX29uZ29pbmdQcm9taXNlLCBuZXh0U3RlcHMsIG5leHRTdGVwcykgOlxuICAgICAgICAgICAgbmV4dFN0ZXBzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9vbmdvaW5nUHJvbWlzZTtcbiAgICB9XG4gICAgcmV0dXJuKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHJldHVyblN0ZXBzID0gKCkgPT4gdGhpcy5fcmV0dXJuU3RlcHModmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5fb25nb2luZ1Byb21pc2UgP1xuICAgICAgICAgICAgdHJhbnNmb3JtUHJvbWlzZVdpdGgodGhpcy5fb25nb2luZ1Byb21pc2UsIHJldHVyblN0ZXBzLCByZXR1cm5TdGVwcykgOlxuICAgICAgICAgICAgcmV0dXJuU3RlcHMoKTtcbiAgICB9XG4gICAgX25leHRTdGVwcygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHRoaXMuX3JlYWRlcjtcbiAgICAgICAgaWYgKHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChyZWFkZXJMb2NrRXhjZXB0aW9uKCdpdGVyYXRlJykpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNvbHZlUHJvbWlzZTtcbiAgICAgICAgbGV0IHJlamVjdFByb21pc2U7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXdQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHJlamVjdFByb21pc2UgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZWFkUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIF9jaHVua1N0ZXBzOiBjaHVuayA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25nb2luZ1Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBkZWxheWVkIGJ5IG9uZSBtaWNyb3Rhc2ssIG90aGVyd2lzZSB3ZSBzdG9wIHB1bGxpbmcgdG9vIGVhcmx5IHdoaWNoIGJyZWFrcyBhIHRlc3QuXG4gICAgICAgICAgICAgICAgLy8gRklYTUUgSXMgdGhpcyBhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbiwgb3IgaW4gdGhlIHRlc3Q/XG4gICAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVzb2x2ZVByb21pc2UoeyB2YWx1ZTogY2h1bmssIGRvbmU6IGZhbHNlIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfY2xvc2VTdGVwczogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX29uZ29pbmdQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlUHJvbWlzZSh7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2Vycm9yU3RlcHM6IHJlYXNvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25nb2luZ1Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNGaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgIHJlamVjdFByb21pc2UocmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZChyZWFkZXIsIHJlYWRSZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIF9yZXR1cm5TdGVwcyh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5faXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHZhbHVlLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCByZWFkZXIgPSB0aGlzLl9yZWFkZXI7XG4gICAgICAgIGlmIChyZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgocmVhZGVyTG9ja0V4Y2VwdGlvbignZmluaXNoIGl0ZXJhdGluZycpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3ByZXZlbnRDYW5jZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0NhbmNlbChyZWFkZXIsIHZhbHVlKTtcbiAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKTtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9taXNlV2l0aChyZXN1bHQsICgpID0+ICh7IHZhbHVlLCBkb25lOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNSZWxlYXNlKHJlYWRlcik7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZWRXaXRoKHsgdmFsdWUsIGRvbmU6IHRydWUgfSk7XG4gICAgfVxufVxuY29uc3QgUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yUHJvdG90eXBlID0ge1xuICAgIG5leHQoKSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKHN0cmVhbUFzeW5jSXRlcmF0b3JCcmFuZENoZWNrRXhjZXB0aW9uKCduZXh0JykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hc3luY0l0ZXJhdG9ySW1wbC5uZXh0KCk7XG4gICAgfSxcbiAgICByZXR1cm4odmFsdWUpIHtcbiAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcih0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoc3RyZWFtQXN5bmNJdGVyYXRvckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JldHVybicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYXN5bmNJdGVyYXRvckltcGwucmV0dXJuKHZhbHVlKTtcbiAgICB9XG59O1xuaWYgKEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUpO1xufVxuLy8gQWJzdHJhY3Qgb3BlcmF0aW9ucyBmb3IgdGhlIFJlYWRhYmxlU3RyZWFtLlxuZnVuY3Rpb24gQWNxdWlyZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcihzdHJlYW0sIHByZXZlbnRDYW5jZWwpIHtcbiAgICBjb25zdCByZWFkZXIgPSBBY3F1aXJlUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHN0cmVhbSk7XG4gICAgY29uc3QgaW1wbCA9IG5ldyBSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JJbXBsKHJlYWRlciwgcHJldmVudENhbmNlbCk7XG4gICAgY29uc3QgaXRlcmF0b3IgPSBPYmplY3QuY3JlYXRlKFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgaXRlcmF0b3IuX2FzeW5jSXRlcmF0b3JJbXBsID0gaW1wbDtcbiAgICByZXR1cm4gaXRlcmF0b3I7XG59XG5mdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcih4KSB7XG4gICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX2FzeW5jSXRlcmF0b3JJbXBsJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyBub2luc3BlY3Rpb24gU3VzcGljaW91c1R5cGVPZkd1YXJkXG4gICAgICAgIHJldHVybiB4Ll9hc3luY0l0ZXJhdG9ySW1wbCBpbnN0YW5jZW9mXG4gICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JJbXBsO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBSZWFkYWJsZVN0cmVhbS5cbmZ1bmN0aW9uIHN0cmVhbUFzeW5jSXRlcmF0b3JCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihgUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yLiR7bmFtZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RlYW1Bc3luY0l0ZXJhdG9yYCk7XG59XG5cbi8vLyA8cmVmZXJlbmNlIGxpYj1cImVzMjAxNS5jb3JlXCIgLz5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL051bWJlci9pc05hTiNQb2x5ZmlsbFxuY29uc3QgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHggIT09IHg7XG59O1xuXG5mdW5jdGlvbiBDcmVhdGVBcnJheUZyb21MaXN0KGVsZW1lbnRzKSB7XG4gICAgLy8gV2UgdXNlIGFycmF5cyB0byByZXByZXNlbnQgbGlzdHMsIHNvIHRoaXMgaXMgYmFzaWNhbGx5IGEgbm8tb3AuXG4gICAgLy8gRG8gYSBzbGljZSB0aG91Z2gganVzdCBpbiBjYXNlIHdlIGhhcHBlbiB0byBkZXBlbmQgb24gdGhlIHVuaXF1ZS1uZXNzLlxuICAgIHJldHVybiBlbGVtZW50cy5zbGljZSgpO1xufVxuZnVuY3Rpb24gQ29weURhdGFCbG9ja0J5dGVzKGRlc3QsIGRlc3RPZmZzZXQsIHNyYywgc3JjT2Zmc2V0LCBuKSB7XG4gICAgbmV3IFVpbnQ4QXJyYXkoZGVzdCkuc2V0KG5ldyBVaW50OEFycmF5KHNyYywgc3JjT2Zmc2V0LCBuKSwgZGVzdE9mZnNldCk7XG59XG4vLyBOb3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5XG5mdW5jdGlvbiBUcmFuc2ZlckFycmF5QnVmZmVyKE8pIHtcbiAgICByZXR1cm4gTztcbn1cbi8vIE5vdCBpbXBsZW1lbnRlZCBjb3JyZWN0bHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIElzRGV0YWNoZWRCdWZmZXIoTykge1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIEFycmF5QnVmZmVyU2xpY2UoYnVmZmVyLCBiZWdpbiwgZW5kKSB7XG4gICAgLy8gQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlIGlzIG5vdCBhdmFpbGFibGUgb24gSUUxMFxuICAgIC8vIGh0dHBzOi8vd3d3LmNhbml1c2UuY29tL21kbi1qYXZhc2NyaXB0X2J1aWx0aW5zX2FycmF5YnVmZmVyX3NsaWNlXG4gICAgaWYgKGJ1ZmZlci5zbGljZSkge1xuICAgICAgICByZXR1cm4gYnVmZmVyLnNsaWNlKGJlZ2luLCBlbmQpO1xuICAgIH1cbiAgICBjb25zdCBsZW5ndGggPSBlbmQgLSBiZWdpbjtcbiAgICBjb25zdCBzbGljZSA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGgpO1xuICAgIENvcHlEYXRhQmxvY2tCeXRlcyhzbGljZSwgMCwgYnVmZmVyLCBiZWdpbiwgbGVuZ3RoKTtcbiAgICByZXR1cm4gc2xpY2U7XG59XG5cbmZ1bmN0aW9uIElzTm9uTmVnYXRpdmVOdW1iZXIodikge1xuICAgIGlmICh0eXBlb2YgdiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoTnVtYmVySXNOYU4odikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodiA8IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIENsb25lQXNVaW50OEFycmF5KE8pIHtcbiAgICBjb25zdCBidWZmZXIgPSBBcnJheUJ1ZmZlclNsaWNlKE8uYnVmZmVyLCBPLmJ5dGVPZmZzZXQsIE8uYnl0ZU9mZnNldCArIE8uYnl0ZUxlbmd0aCk7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG59XG5cbmZ1bmN0aW9uIERlcXVldWVWYWx1ZShjb250YWluZXIpIHtcbiAgICBjb25zdCBwYWlyID0gY29udGFpbmVyLl9xdWV1ZS5zaGlmdCgpO1xuICAgIGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgLT0gcGFpci5zaXplO1xuICAgIGlmIChjb250YWluZXIuX3F1ZXVlVG90YWxTaXplIDwgMCkge1xuICAgICAgICBjb250YWluZXIuX3F1ZXVlVG90YWxTaXplID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXIudmFsdWU7XG59XG5mdW5jdGlvbiBFbnF1ZXVlVmFsdWVXaXRoU2l6ZShjb250YWluZXIsIHZhbHVlLCBzaXplKSB7XG4gICAgaWYgKCFJc05vbk5lZ2F0aXZlTnVtYmVyKHNpemUpIHx8IHNpemUgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdTaXplIG11c3QgYmUgYSBmaW5pdGUsIG5vbi1OYU4sIG5vbi1uZWdhdGl2ZSBudW1iZXIuJyk7XG4gICAgfVxuICAgIGNvbnRhaW5lci5fcXVldWUucHVzaCh7IHZhbHVlLCBzaXplIH0pO1xuICAgIGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgKz0gc2l6ZTtcbn1cbmZ1bmN0aW9uIFBlZWtRdWV1ZVZhbHVlKGNvbnRhaW5lcikge1xuICAgIGNvbnN0IHBhaXIgPSBjb250YWluZXIuX3F1ZXVlLnBlZWsoKTtcbiAgICByZXR1cm4gcGFpci52YWx1ZTtcbn1cbmZ1bmN0aW9uIFJlc2V0UXVldWUoY29udGFpbmVyKSB7XG4gICAgY29udGFpbmVyLl9xdWV1ZSA9IG5ldyBTaW1wbGVRdWV1ZSgpO1xuICAgIGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgPSAwO1xufVxuXG4vKipcbiAqIEEgcHVsbC1pbnRvIHJlcXVlc3QgaW4gYSB7QGxpbmsgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcn0uXG4gKlxuICogQHB1YmxpY1xuICovXG5jbGFzcyBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBjb25zdHJ1Y3RvcicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGZvciB3cml0aW5nIGluIHRvLCBvciBgbnVsbGAgaWYgdGhlIEJZT0IgcmVxdWVzdCBoYXMgYWxyZWFkeSBiZWVuIHJlc3BvbmRlZCB0by5cbiAgICAgKi9cbiAgICBnZXQgdmlldygpIHtcbiAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QodGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IGJ5b2JSZXF1ZXN0QnJhbmRDaGVja0V4Y2VwdGlvbigndmlldycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl92aWV3O1xuICAgIH1cbiAgICByZXNwb25kKGJ5dGVzV3JpdHRlbikge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCh0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgYnlvYlJlcXVlc3RCcmFuZENoZWNrRXhjZXB0aW9uKCdyZXNwb25kJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0UmVxdWlyZWRBcmd1bWVudChieXRlc1dyaXR0ZW4sIDEsICdyZXNwb25kJyk7XG4gICAgICAgIGJ5dGVzV3JpdHRlbiA9IGNvbnZlcnRVbnNpZ25lZExvbmdMb25nV2l0aEVuZm9yY2VSYW5nZShieXRlc1dyaXR0ZW4sICdGaXJzdCBwYXJhbWV0ZXInKTtcbiAgICAgICAgaWYgKHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXMgQllPQiByZXF1ZXN0IGhhcyBiZWVuIGludmFsaWRhdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzRGV0YWNoZWRCdWZmZXIodGhpcy5fdmlldy5idWZmZXIpKSA7XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kKHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLCBieXRlc1dyaXR0ZW4pO1xuICAgIH1cbiAgICByZXNwb25kV2l0aE5ld1ZpZXcodmlldykge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCh0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgYnlvYlJlcXVlc3RCcmFuZENoZWNrRXhjZXB0aW9uKCdyZXNwb25kV2l0aE5ld1ZpZXcnKTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnRSZXF1aXJlZEFyZ3VtZW50KHZpZXcsIDEsICdyZXNwb25kV2l0aE5ld1ZpZXcnKTtcbiAgICAgICAgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcodmlldykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1lvdSBjYW4gb25seSByZXNwb25kIHdpdGggYXJyYXkgYnVmZmVyIHZpZXdzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXMgQllPQiByZXF1ZXN0IGhhcyBiZWVuIGludmFsaWRhdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzRGV0YWNoZWRCdWZmZXIodmlldy5idWZmZXIpKSA7XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kV2l0aE5ld1ZpZXcodGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsIHZpZXcpO1xuICAgIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLCB7XG4gICAgcmVzcG9uZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgcmVzcG9uZFdpdGhOZXdWaWV3OiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICB2aWV3OiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0LnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgdmFsdWU6ICdSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0JyxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG59XG4vKipcbiAqIEFsbG93cyBjb250cm9sIG9mIGEge0BsaW5rIFJlYWRhYmxlU3RyZWFtIHwgcmVhZGFibGUgYnl0ZSBzdHJlYW19J3Mgc3RhdGUgYW5kIGludGVybmFsIHF1ZXVlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY2xhc3MgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgY29uc3RydWN0b3InKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBCWU9CIHB1bGwgcmVxdWVzdCwgb3IgYG51bGxgIGlmIHRoZXJlIGlzbid0IG9uZS5cbiAgICAgKi9cbiAgICBnZXQgYnlvYlJlcXVlc3QoKSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2J5b2JSZXF1ZXN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJHZXRCWU9CUmVxdWVzdCh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGVzaXJlZCBzaXplIHRvIGZpbGwgdGhlIGNvbnRyb2xsZWQgc3RyZWFtJ3MgaW50ZXJuYWwgcXVldWUuIEl0IGNhbiBiZSBuZWdhdGl2ZSwgaWYgdGhlIHF1ZXVlIGlzXG4gICAgICogb3Zlci1mdWxsLiBBbiB1bmRlcmx5aW5nIGJ5dGUgc291cmNlIG91Z2h0IHRvIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGVuIGFuZCBob3cgdG8gYXBwbHkgYmFja3ByZXNzdXJlLlxuICAgICAqL1xuICAgIGdldCBkZXNpcmVkU2l6ZSgpIHtcbiAgICAgICAgaWYgKCFJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IGJ5dGVTdHJlYW1Db250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZGVzaXJlZFNpemUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckdldERlc2lyZWRTaXplKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGNvbnRyb2xsZWQgcmVhZGFibGUgc3RyZWFtLiBDb25zdW1lcnMgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIHJlYWQgYW55IHByZXZpb3VzbHktZW5xdWV1ZWQgY2h1bmtzIGZyb21cbiAgICAgKiB0aGUgc3RyZWFtLCBidXQgb25jZSB0aG9zZSBhcmUgcmVhZCwgdGhlIHN0cmVhbSB3aWxsIGJlY29tZSBjbG9zZWQuXG4gICAgICovXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Nsb3NlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Nsb3NlUmVxdWVzdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkOyBkbyBub3QgY2xvc2UgaXQgYWdhaW4hJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLl9zdGF0ZTtcbiAgICAgICAgaWYgKHN0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBUaGUgc3RyZWFtIChpbiAke3N0YXRlfSBzdGF0ZSkgaXMgbm90IGluIHRoZSByZWFkYWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGNsb3NlZGApO1xuICAgICAgICB9XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbG9zZSh0aGlzKTtcbiAgICB9XG4gICAgZW5xdWV1ZShjaHVuaykge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcih0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlbnF1ZXVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0UmVxdWlyZWRBcmd1bWVudChjaHVuaywgMSwgJ2VucXVldWUnKTtcbiAgICAgICAgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcoY2h1bmspKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjaHVuayBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciB2aWV3Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NodW5rIG11c3QgaGF2ZSBub24temVybyBieXRlTGVuZ3RoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rLmJ1ZmZlci5ieXRlTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBjaHVuaydzIGJ1ZmZlciBtdXN0IGhhdmUgbm9uLXplcm8gYnl0ZUxlbmd0aGApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jbG9zZVJlcXVlc3RlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyZWFtIGlzIGNsb3NlZCBvciBkcmFpbmluZycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbS5fc3RhdGU7XG4gICAgICAgIGlmIChzdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIHN0cmVhbSAoaW4gJHtzdGF0ZX0gc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBlbnF1ZXVlZCB0b2ApO1xuICAgICAgICB9XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlKHRoaXMsIGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXJyb3JzIHRoZSBjb250cm9sbGVkIHJlYWRhYmxlIHN0cmVhbSwgbWFraW5nIGFsbCBmdXR1cmUgaW50ZXJhY3Rpb25zIHdpdGggaXQgZmFpbCB3aXRoIHRoZSBnaXZlbiBlcnJvciBgZWAuXG4gICAgICovXG4gICAgZXJyb3IoZSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcih0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcih0aGlzLCBlKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIFtDYW5jZWxTdGVwc10ocmVhc29uKSB7XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbGVhclBlbmRpbmdQdWxsSW50b3ModGhpcyk7XG4gICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2NhbmNlbEFsZ29yaXRobShyZWFzb24pO1xuICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJBbGdvcml0aG1zKHRoaXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgW1B1bGxTdGVwc10ocmVhZFJlcXVlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbTtcbiAgICAgICAgaWYgKHRoaXMuX3F1ZXVlVG90YWxTaXplID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLl9xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5fcXVldWVUb3RhbFNpemUgLT0gZW50cnkuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJIYW5kbGVRdWV1ZURyYWluKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGVudHJ5LmJ1ZmZlciwgZW50cnkuYnl0ZU9mZnNldCwgZW50cnkuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICByZWFkUmVxdWVzdC5fY2h1bmtTdGVwcyh2aWV3KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdXRvQWxsb2NhdGVDaHVua1NpemUgPSB0aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU7XG4gICAgICAgIGlmIChhdXRvQWxsb2NhdGVDaHVua1NpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoYnVmZmVyRSkge1xuICAgICAgICAgICAgICAgIHJlYWRSZXF1ZXN0Ll9lcnJvclN0ZXBzKGJ1ZmZlckUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHB1bGxJbnRvRGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgICAgYnVmZmVyQnl0ZUxlbmd0aDogYXV0b0FsbG9jYXRlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgIGJ5dGVPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgYnl0ZUxlbmd0aDogYXV0b0FsbG9jYXRlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgIGJ5dGVzRmlsbGVkOiAwLFxuICAgICAgICAgICAgICAgIGVsZW1lbnRTaXplOiAxLFxuICAgICAgICAgICAgICAgIHZpZXdDb25zdHJ1Y3RvcjogVWludDhBcnJheSxcbiAgICAgICAgICAgICAgICByZWFkZXJUeXBlOiAnZGVmYXVsdCdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nUHVsbEludG9zLnB1c2gocHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBSZWFkYWJsZVN0cmVhbUFkZFJlYWRSZXF1ZXN0KHN0cmVhbSwgcmVhZFJlcXVlc3QpO1xuICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZCh0aGlzKTtcbiAgICB9XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLnByb3RvdHlwZSwge1xuICAgIGNsb3NlOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBlbnF1ZXVlOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBlcnJvcjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgYnlvYlJlcXVlc3Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGRlc2lyZWRTaXplOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgdmFsdWU6ICdSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJyxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG59XG4vLyBBYnN0cmFjdCBvcGVyYXRpb25zIGZvciB0aGUgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5cbmZ1bmN0aW9uIElzUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcih4KSB7XG4gICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0nKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB4IGluc3RhbmNlb2YgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcjtcbn1cbmZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCh4KSB7XG4gICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4geCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3Q7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKSB7XG4gICAgY29uc3Qgc2hvdWxkUHVsbCA9IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaG91bGRDYWxsUHVsbChjb250cm9sbGVyKTtcbiAgICBpZiAoIXNob3VsZFB1bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29udHJvbGxlci5fcHVsbGluZykge1xuICAgICAgICBjb250cm9sbGVyLl9wdWxsQWdhaW4gPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRyb2xsZXIuX3B1bGxpbmcgPSB0cnVlO1xuICAgIC8vIFRPRE86IFRlc3QgY29udHJvbGxlciBhcmd1bWVudFxuICAgIGNvbnN0IHB1bGxQcm9taXNlID0gY29udHJvbGxlci5fcHVsbEFsZ29yaXRobSgpO1xuICAgIHVwb25Qcm9taXNlKHB1bGxQcm9taXNlLCAoKSA9PiB7XG4gICAgICAgIGNvbnRyb2xsZXIuX3B1bGxpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3B1bGxBZ2Fpbikge1xuICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gZmFsc2U7XG4gICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgIH0sIGUgPT4ge1xuICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJQZW5kaW5nUHVsbEludG9zKGNvbnRyb2xsZXIpIHtcbiAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpO1xuICAgIGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MgPSBuZXcgU2ltcGxlUXVldWUoKTtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDb21taXRQdWxsSW50b0Rlc2NyaXB0b3Ioc3RyZWFtLCBwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsbGVkVmlldyA9IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDb252ZXJ0UHVsbEludG9EZXNjcmlwdG9yKHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgaWYgKHB1bGxJbnRvRGVzY3JpcHRvci5yZWFkZXJUeXBlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZFJlcXVlc3Qoc3RyZWFtLCBmaWxsZWRWaWV3LCBkb25lKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRJbnRvUmVxdWVzdChzdHJlYW0sIGZpbGxlZFZpZXcsIGRvbmUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDb252ZXJ0UHVsbEludG9EZXNjcmlwdG9yKHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgIGNvbnN0IGJ5dGVzRmlsbGVkID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkO1xuICAgIGNvbnN0IGVsZW1lbnRTaXplID0gcHVsbEludG9EZXNjcmlwdG9yLmVsZW1lbnRTaXplO1xuICAgIHJldHVybiBuZXcgcHVsbEludG9EZXNjcmlwdG9yLnZpZXdDb25zdHJ1Y3RvcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyLCBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZU9mZnNldCwgYnl0ZXNGaWxsZWQgLyBlbGVtZW50U2l6ZSk7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBjb250cm9sbGVyLl9xdWV1ZS5wdXNoKHsgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoIH0pO1xuICAgIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplICs9IGJ5dGVMZW5ndGg7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbFB1bGxJbnRvRGVzY3JpcHRvckZyb21RdWV1ZShjb250cm9sbGVyLCBwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICBjb25zdCBlbGVtZW50U2l6ZSA9IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZTtcbiAgICBjb25zdCBjdXJyZW50QWxpZ25lZEJ5dGVzID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkIC0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICUgZWxlbWVudFNpemU7XG4gICAgY29uc3QgbWF4Qnl0ZXNUb0NvcHkgPSBNYXRoLm1pbihjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSwgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVMZW5ndGggLSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQpO1xuICAgIGNvbnN0IG1heEJ5dGVzRmlsbGVkID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICsgbWF4Qnl0ZXNUb0NvcHk7XG4gICAgY29uc3QgbWF4QWxpZ25lZEJ5dGVzID0gbWF4Qnl0ZXNGaWxsZWQgLSBtYXhCeXRlc0ZpbGxlZCAlIGVsZW1lbnRTaXplO1xuICAgIGxldCB0b3RhbEJ5dGVzVG9Db3B5UmVtYWluaW5nID0gbWF4Qnl0ZXNUb0NvcHk7XG4gICAgbGV0IHJlYWR5ID0gZmFsc2U7XG4gICAgaWYgKG1heEFsaWduZWRCeXRlcyA+IGN1cnJlbnRBbGlnbmVkQnl0ZXMpIHtcbiAgICAgICAgdG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyA9IG1heEFsaWduZWRCeXRlcyAtIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZDtcbiAgICAgICAgcmVhZHkgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBxdWV1ZSA9IGNvbnRyb2xsZXIuX3F1ZXVlO1xuICAgIHdoaWxlICh0b3RhbEJ5dGVzVG9Db3B5UmVtYWluaW5nID4gMCkge1xuICAgICAgICBjb25zdCBoZWFkT2ZRdWV1ZSA9IHF1ZXVlLnBlZWsoKTtcbiAgICAgICAgY29uc3QgYnl0ZXNUb0NvcHkgPSBNYXRoLm1pbih0b3RhbEJ5dGVzVG9Db3B5UmVtYWluaW5nLCBoZWFkT2ZRdWV1ZS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZGVzdFN0YXJ0ID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVPZmZzZXQgKyBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQ7XG4gICAgICAgIENvcHlEYXRhQmxvY2tCeXRlcyhwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyLCBkZXN0U3RhcnQsIGhlYWRPZlF1ZXVlLmJ1ZmZlciwgaGVhZE9mUXVldWUuYnl0ZU9mZnNldCwgYnl0ZXNUb0NvcHkpO1xuICAgICAgICBpZiAoaGVhZE9mUXVldWUuYnl0ZUxlbmd0aCA9PT0gYnl0ZXNUb0NvcHkpIHtcbiAgICAgICAgICAgIHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoZWFkT2ZRdWV1ZS5ieXRlT2Zmc2V0ICs9IGJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgaGVhZE9mUXVldWUuYnl0ZUxlbmd0aCAtPSBieXRlc1RvQ29weTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSAtPSBieXRlc1RvQ29weTtcbiAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZpbGxIZWFkUHVsbEludG9EZXNjcmlwdG9yKGNvbnRyb2xsZXIsIGJ5dGVzVG9Db3B5LCBwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICB0b3RhbEJ5dGVzVG9Db3B5UmVtYWluaW5nIC09IGJ5dGVzVG9Db3B5O1xuICAgIH1cbiAgICByZXR1cm4gcmVhZHk7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbEhlYWRQdWxsSW50b0Rlc2NyaXB0b3IoY29udHJvbGxlciwgc2l6ZSwgcHVsbEludG9EZXNjcmlwdG9yKSB7XG4gICAgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICs9IHNpemU7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySGFuZGxlUXVldWVEcmFpbihjb250cm9sbGVyKSB7XG4gICAgaWYgKGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplID09PSAwICYmIGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkKSB7XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbGVhckFsZ29yaXRobXMoY29udHJvbGxlcik7XG4gICAgICAgIFJlYWRhYmxlU3RyZWFtQ2xvc2UoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICB9XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpIHtcbiAgICBpZiAoY29udHJvbGxlci5fYnlvYlJlcXVlc3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250cm9sbGVyLl9ieW9iUmVxdWVzdC5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgY29udHJvbGxlci5fYnlvYlJlcXVlc3QuX3ZpZXcgPSBudWxsO1xuICAgIGNvbnRyb2xsZXIuX2J5b2JSZXF1ZXN0ID0gbnVsbDtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJQcm9jZXNzUHVsbEludG9EZXNjcmlwdG9yc1VzaW5nUXVldWUoY29udHJvbGxlcikge1xuICAgIHdoaWxlIChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHVsbEludG9EZXNjcmlwdG9yID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCk7XG4gICAgICAgIGlmIChSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbFB1bGxJbnRvRGVzY3JpcHRvckZyb21RdWV1ZShjb250cm9sbGVyLCBwdWxsSW50b0Rlc2NyaXB0b3IpKSB7XG4gICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hpZnRQZW5kaW5nUHVsbEludG8oY29udHJvbGxlcik7XG4gICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29tbWl0UHVsbEludG9EZXNjcmlwdG9yKGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0sIHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUHVsbEludG8oY29udHJvbGxlciwgdmlldywgcmVhZEludG9SZXF1ZXN0KSB7XG4gICAgY29uc3Qgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbTtcbiAgICBsZXQgZWxlbWVudFNpemUgPSAxO1xuICAgIGlmICh2aWV3LmNvbnN0cnVjdG9yICE9PSBEYXRhVmlldykge1xuICAgICAgICBlbGVtZW50U2l6ZSA9IHZpZXcuY29uc3RydWN0b3IuQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB2aWV3LmNvbnN0cnVjdG9yO1xuICAgIC8vIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcih2aWV3LmJ1ZmZlcik7XG4gICAgLy8gfSBjYXRjaCAoZSkge1xuICAgIC8vICAgcmVhZEludG9SZXF1ZXN0Ll9lcnJvclN0ZXBzKGUpO1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBjb25zdCBwdWxsSW50b0Rlc2NyaXB0b3IgPSB7XG4gICAgICAgIGJ1ZmZlcixcbiAgICAgICAgYnVmZmVyQnl0ZUxlbmd0aDogYnVmZmVyLmJ5dGVMZW5ndGgsXG4gICAgICAgIGJ5dGVPZmZzZXQ6IHZpZXcuYnl0ZU9mZnNldCxcbiAgICAgICAgYnl0ZUxlbmd0aDogdmlldy5ieXRlTGVuZ3RoLFxuICAgICAgICBieXRlc0ZpbGxlZDogMCxcbiAgICAgICAgZWxlbWVudFNpemUsXG4gICAgICAgIHZpZXdDb25zdHJ1Y3RvcjogY3RvcixcbiAgICAgICAgcmVhZGVyVHlwZTogJ2J5b2InXG4gICAgfTtcbiAgICBpZiAoY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MucHVzaChwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICAvLyBObyBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZCgpIGNhbGwgc2luY2U6XG4gICAgICAgIC8vIC0gTm8gY2hhbmdlIGhhcHBlbnMgb24gZGVzaXJlZFNpemVcbiAgICAgICAgLy8gLSBUaGUgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gbm90aWZpZWQgb2YgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IDEgcGVuZGluZyByZWFkKHZpZXcpXG4gICAgICAgIFJlYWRhYmxlU3RyZWFtQWRkUmVhZEludG9SZXF1ZXN0KHN0cmVhbSwgcmVhZEludG9SZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgY29uc3QgZW1wdHlWaWV3ID0gbmV3IGN0b3IocHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlciwgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVPZmZzZXQsIDApO1xuICAgICAgICByZWFkSW50b1JlcXVlc3QuX2Nsb3NlU3RlcHMoZW1wdHlWaWV3KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPiAwKSB7XG4gICAgICAgIGlmIChSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbFB1bGxJbnRvRGVzY3JpcHRvckZyb21RdWV1ZShjb250cm9sbGVyLCBwdWxsSW50b0Rlc2NyaXB0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxsZWRWaWV3ID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbnZlcnRQdWxsSW50b0Rlc2NyaXB0b3IocHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJIYW5kbGVRdWV1ZURyYWluKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgcmVhZEludG9SZXF1ZXN0Ll9jaHVua1N0ZXBzKGZpbGxlZFZpZXcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCkge1xuICAgICAgICAgICAgY29uc3QgZSA9IG5ldyBUeXBlRXJyb3IoJ0luc3VmZmljaWVudCBieXRlcyB0byBmaWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBidWZmZXInKTtcbiAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCBlKTtcbiAgICAgICAgICAgIHJlYWRJbnRvUmVxdWVzdC5fZXJyb3JTdGVwcyhlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnB1c2gocHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICBSZWFkYWJsZVN0cmVhbUFkZFJlYWRJbnRvUmVxdWVzdChzdHJlYW0sIHJlYWRJbnRvUmVxdWVzdCk7XG4gICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEluQ2xvc2VkU3RhdGUoY29udHJvbGxlciwgZmlyc3REZXNjcmlwdG9yKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbTtcbiAgICBpZiAoUmVhZGFibGVTdHJlYW1IYXNCWU9CUmVhZGVyKHN0cmVhbSkpIHtcbiAgICAgICAgd2hpbGUgKFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZEludG9SZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcHVsbEludG9EZXNjcmlwdG9yID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbW1pdFB1bGxJbnRvRGVzY3JpcHRvcihzdHJlYW0sIHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEluUmVhZGFibGVTdGF0ZShjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4sIHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsSGVhZFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4sIHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgaWYgKHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA8IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaGlmdFBlbmRpbmdQdWxsSW50byhjb250cm9sbGVyKTtcbiAgICBjb25zdCByZW1haW5kZXJTaXplID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICUgcHVsbEludG9EZXNjcmlwdG9yLmVsZW1lbnRTaXplO1xuICAgIGlmIChyZW1haW5kZXJTaXplID4gMCkge1xuICAgICAgICBjb25zdCBlbmQgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZU9mZnNldCArIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZDtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gQXJyYXlCdWZmZXJTbGljZShwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyLCBlbmQgLSByZW1haW5kZXJTaXplLCBlbmQpO1xuICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCByZW1haW5kZXIsIDAsIHJlbWFpbmRlci5ieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkIC09IHJlbWFpbmRlclNpemU7XG4gICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbW1pdFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLCBwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJQcm9jZXNzUHVsbEludG9EZXNjcmlwdG9yc1VzaW5nUXVldWUoY29udHJvbGxlcik7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEludGVybmFsKGNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbikge1xuICAgIGNvbnN0IGZpcnN0RGVzY3JpcHRvciA9IGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MucGVlaygpO1xuICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJJbnZhbGlkYXRlQllPQlJlcXVlc3QoY29udHJvbGxlcik7XG4gICAgY29uc3Qgc3RhdGUgPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLl9zdGF0ZTtcbiAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kSW5DbG9zZWRTdGF0ZShjb250cm9sbGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kSW5SZWFkYWJsZVN0YXRlKGNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbiwgZmlyc3REZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hpZnRQZW5kaW5nUHVsbEludG8oY29udHJvbGxlcikge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnNoaWZ0KCk7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcikge1xuICAgIGNvbnN0IHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW07XG4gICAgaWYgKHN0cmVhbS5fc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWNvbnRyb2xsZXIuX3N0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoUmVhZGFibGVTdHJlYW1IYXNEZWZhdWx0UmVhZGVyKHN0cmVhbSkgJiYgUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChSZWFkYWJsZVN0cmVhbUhhc0JZT0JSZWFkZXIoc3RyZWFtKSAmJiBSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRJbnRvUmVxdWVzdHMoc3RyZWFtKSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGRlc2lyZWRTaXplID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpO1xuICAgIGlmIChkZXNpcmVkU2l6ZSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbGVhckFsZ29yaXRobXMoY29udHJvbGxlcikge1xuICAgIGNvbnRyb2xsZXIuX3B1bGxBbGdvcml0aG0gPSB1bmRlZmluZWQ7XG4gICAgY29udHJvbGxlci5fY2FuY2VsQWxnb3JpdGhtID0gdW5kZWZpbmVkO1xufVxuLy8gQSBjbGllbnQgb2YgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBtYXkgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSB0byBieXBhc3Mgc3RhdGUgY2hlY2suXG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xvc2UoY29udHJvbGxlcikge1xuICAgIGNvbnN0IHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW07XG4gICAgaWYgKGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkIHx8IHN0cmVhbS5fc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPiAwKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0UGVuZGluZ1B1bGxJbnRvID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCk7XG4gICAgICAgIGlmIChmaXJzdFBlbmRpbmdQdWxsSW50by5ieXRlc0ZpbGxlZCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgVHlwZUVycm9yKCdJbnN1ZmZpY2llbnQgYnl0ZXMgdG8gZmlsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYnVmZmVyJyk7XG4gICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbGVhckFsZ29yaXRobXMoY29udHJvbGxlcik7XG4gICAgUmVhZGFibGVTdHJlYW1DbG9zZShzdHJlYW0pO1xufVxuZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVucXVldWUoY29udHJvbGxlciwgY2h1bmspIHtcbiAgICBjb25zdCBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtO1xuICAgIGlmIChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCB8fCBzdHJlYW0uX3N0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYnVmZmVyID0gY2h1bmsuYnVmZmVyO1xuICAgIGNvbnN0IGJ5dGVPZmZzZXQgPSBjaHVuay5ieXRlT2Zmc2V0O1xuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBjaHVuay5ieXRlTGVuZ3RoO1xuICAgIGNvbnN0IHRyYW5zZmVycmVkQnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihidWZmZXIpO1xuICAgIGlmIChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RQZW5kaW5nUHVsbEludG8gPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnBlZWsoKTtcbiAgICAgICAgaWYgKElzRGV0YWNoZWRCdWZmZXIoZmlyc3RQZW5kaW5nUHVsbEludG8uYnVmZmVyKSkgO1xuICAgICAgICBmaXJzdFBlbmRpbmdQdWxsSW50by5idWZmZXIgPSBUcmFuc2ZlckFycmF5QnVmZmVyKGZpcnN0UGVuZGluZ1B1bGxJbnRvLmJ1ZmZlcik7XG4gICAgfVxuICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJJbnZhbGlkYXRlQllPQlJlcXVlc3QoY29udHJvbGxlcik7XG4gICAgaWYgKFJlYWRhYmxlU3RyZWFtSGFzRGVmYXVsdFJlYWRlcihzdHJlYW0pKSB7XG4gICAgICAgIGlmIChSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRSZXF1ZXN0cyhzdHJlYW0pID09PSAwKSB7XG4gICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCB0cmFuc2ZlcnJlZEJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJyZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodHJhbnNmZXJyZWRCdWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZFJlcXVlc3Qoc3RyZWFtLCB0cmFuc2ZlcnJlZFZpZXcsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChSZWFkYWJsZVN0cmVhbUhhc0JZT0JSZWFkZXIoc3RyZWFtKSkge1xuICAgICAgICAvLyBUT0RPOiBJZGVhbGx5IGluIHRoaXMgYnJhbmNoIGRldGFjaGluZyBzaG91bGQgaGFwcGVuIG9ubHkgaWYgdGhlIGJ1ZmZlciBpcyBub3QgY29uc3VtZWQgZnVsbHkuXG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlQ2h1bmtUb1F1ZXVlKGNvbnRyb2xsZXIsIHRyYW5zZmVycmVkQnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTtcbiAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclByb2Nlc3NQdWxsSW50b0Rlc2NyaXB0b3JzVXNpbmdRdWV1ZShjb250cm9sbGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlQ2h1bmtUb1F1ZXVlKGNvbnRyb2xsZXIsIHRyYW5zZmVycmVkQnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSkge1xuICAgIGNvbnN0IHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW07XG4gICAgaWYgKHN0cmVhbS5fc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJQZW5kaW5nUHVsbEludG9zKGNvbnRyb2xsZXIpO1xuICAgIFJlc2V0UXVldWUoY29udHJvbGxlcik7XG4gICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsZWFyQWxnb3JpdGhtcyhjb250cm9sbGVyKTtcbiAgICBSZWFkYWJsZVN0cmVhbUVycm9yKHN0cmVhbSwgZSk7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyR2V0QllPQlJlcXVlc3QoY29udHJvbGxlcikge1xuICAgIGlmIChjb250cm9sbGVyLl9ieW9iUmVxdWVzdCA9PT0gbnVsbCAmJiBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3REZXNjcmlwdG9yID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdERlc2NyaXB0b3IuYnVmZmVyLCBmaXJzdERlc2NyaXB0b3IuYnl0ZU9mZnNldCArIGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCwgZmlyc3REZXNjcmlwdG9yLmJ5dGVMZW5ndGggLSBmaXJzdERlc2NyaXB0b3IuYnl0ZXNGaWxsZWQpO1xuICAgICAgICBjb25zdCBieW9iUmVxdWVzdCA9IE9iamVjdC5jcmVhdGUoUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdC5wcm90b3R5cGUpO1xuICAgICAgICBTZXRVcFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QoYnlvYlJlcXVlc3QsIGNvbnRyb2xsZXIsIHZpZXcpO1xuICAgICAgICBjb250cm9sbGVyLl9ieW9iUmVxdWVzdCA9IGJ5b2JSZXF1ZXN0O1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbGxlci5fYnlvYlJlcXVlc3Q7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcikge1xuICAgIGNvbnN0IHN0YXRlID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbS5fc3RhdGU7XG4gICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sbGVyLl9zdHJhdGVneUhXTSAtIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplO1xufVxuZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmQoY29udHJvbGxlciwgYnl0ZXNXcml0dGVuKSB7XG4gICAgY29uc3QgZmlyc3REZXNjcmlwdG9yID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLl9zdGF0ZTtcbiAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgIGlmIChieXRlc1dyaXR0ZW4gIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2J5dGVzV3JpdHRlbiBtdXN0IGJlIDAgd2hlbiBjYWxsaW5nIHJlc3BvbmQoKSBvbiBhIGNsb3NlZCBzdHJlYW0nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYnl0ZXNXcml0dGVuIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgd2hlbiBjYWxsaW5nIHJlc3BvbmQoKSBvbiBhIHJlYWRhYmxlIHN0cmVhbScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJzdERlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgKyBieXRlc1dyaXR0ZW4gPiBmaXJzdERlc2NyaXB0b3IuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2J5dGVzV3JpdHRlbiBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaXJzdERlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihmaXJzdERlc2NyaXB0b3IuYnVmZmVyKTtcbiAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEludGVybmFsKGNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbik7XG59XG5mdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZFdpdGhOZXdWaWV3KGNvbnRyb2xsZXIsIHZpZXcpIHtcbiAgICBjb25zdCBmaXJzdERlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnBlZWsoKTtcbiAgICBjb25zdCBzdGF0ZSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0uX3N0YXRlO1xuICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgaWYgKHZpZXcuYnl0ZUxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZpZXdcXCdzIGxlbmd0aCBtdXN0IGJlIDAgd2hlbiBjYWxsaW5nIHJlc3BvbmRXaXRoTmV3VmlldygpIG9uIGEgY2xvc2VkIHN0cmVhbScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAodmlldy5ieXRlTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmlld1xcJ3MgbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgd2hlbiBjYWxsaW5nIHJlc3BvbmRXaXRoTmV3VmlldygpIG9uIGEgcmVhZGFibGUgc3RyZWFtJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpcnN0RGVzY3JpcHRvci5ieXRlT2Zmc2V0ICsgZmlyc3REZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICE9PSB2aWV3LmJ5dGVPZmZzZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSByZWdpb24gc3BlY2lmaWVkIGJ5IHZpZXcgZG9lcyBub3QgbWF0Y2ggYnlvYlJlcXVlc3QnKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0RGVzY3JpcHRvci5idWZmZXJCeXRlTGVuZ3RoICE9PSB2aWV3LmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgYnVmZmVyIG9mIHZpZXcgaGFzIGRpZmZlcmVudCBjYXBhY2l0eSB0aGFuIGJ5b2JSZXF1ZXN0Jyk7XG4gICAgfVxuICAgIGlmIChmaXJzdERlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgKyB2aWV3LmJ5dGVMZW5ndGggPiBmaXJzdERlc2NyaXB0b3IuYnl0ZUxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHJlZ2lvbiBzcGVjaWZpZWQgYnkgdmlldyBpcyBsYXJnZXIgdGhhbiBieW9iUmVxdWVzdCcpO1xuICAgIH1cbiAgICBjb25zdCB2aWV3Qnl0ZUxlbmd0aCA9IHZpZXcuYnl0ZUxlbmd0aDtcbiAgICBmaXJzdERlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcih2aWV3LmJ1ZmZlcik7XG4gICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbnRlcm5hbChjb250cm9sbGVyLCB2aWV3Qnl0ZUxlbmd0aCk7XG59XG5mdW5jdGlvbiBTZXRVcFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtLCBjb250cm9sbGVyLCBzdGFydEFsZ29yaXRobSwgcHVsbEFsZ29yaXRobSwgY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrLCBhdXRvQWxsb2NhdGVDaHVua1NpemUpIHtcbiAgICBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtID0gc3RyZWFtO1xuICAgIGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9IGZhbHNlO1xuICAgIGNvbnRyb2xsZXIuX3B1bGxpbmcgPSBmYWxzZTtcbiAgICBjb250cm9sbGVyLl9ieW9iUmVxdWVzdCA9IG51bGw7XG4gICAgLy8gTmVlZCB0byBzZXQgdGhlIHNsb3RzIHNvIHRoYXQgdGhlIGFzc2VydCBkb2Vzbid0IGZpcmUuIEluIHRoZSBzcGVjIHRoZSBzbG90cyBhbHJlYWR5IGV4aXN0IGltcGxpY2l0bHkuXG4gICAgY29udHJvbGxlci5fcXVldWUgPSBjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICBSZXNldFF1ZXVlKGNvbnRyb2xsZXIpO1xuICAgIGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgY29udHJvbGxlci5fc3RhcnRlZCA9IGZhbHNlO1xuICAgIGNvbnRyb2xsZXIuX3N0cmF0ZWd5SFdNID0gaGlnaFdhdGVyTWFyaztcbiAgICBjb250cm9sbGVyLl9wdWxsQWxnb3JpdGhtID0gcHVsbEFsZ29yaXRobTtcbiAgICBjb250cm9sbGVyLl9jYW5jZWxBbGdvcml0aG0gPSBjYW5jZWxBbGdvcml0aG07XG4gICAgY29udHJvbGxlci5fYXV0b0FsbG9jYXRlQ2h1bmtTaXplID0gYXV0b0FsbG9jYXRlQ2h1bmtTaXplO1xuICAgIGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MgPSBuZXcgU2ltcGxlUXVldWUoKTtcbiAgICBzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgY29uc3Qgc3RhcnRSZXN1bHQgPSBzdGFydEFsZ29yaXRobSgpO1xuICAgIHVwb25Qcm9taXNlKHByb21pc2VSZXNvbHZlZFdpdGgoc3RhcnRSZXN1bHQpLCAoKSA9PiB7XG4gICAgICAgIGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICB9LCByID0+IHtcbiAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIHIpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gU2V0VXBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRnJvbVVuZGVybHlpbmdTb3VyY2Uoc3RyZWFtLCB1bmRlcmx5aW5nQnl0ZVNvdXJjZSwgaGlnaFdhdGVyTWFyaykge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBPYmplY3QuY3JlYXRlKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlKTtcbiAgICBsZXQgc3RhcnRBbGdvcml0aG0gPSAoKSA9PiB1bmRlZmluZWQ7XG4gICAgbGV0IHB1bGxBbGdvcml0aG0gPSAoKSA9PiBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG4gICAgbGV0IGNhbmNlbEFsZ29yaXRobSA9ICgpID0+IHByb21pc2VSZXNvbHZlZFdpdGgodW5kZWZpbmVkKTtcbiAgICBpZiAodW5kZXJseWluZ0J5dGVTb3VyY2Uuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGFydEFsZ29yaXRobSA9ICgpID0+IHVuZGVybHlpbmdCeXRlU291cmNlLnN0YXJ0KGNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICBpZiAodW5kZXJseWluZ0J5dGVTb3VyY2UucHVsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHB1bGxBbGdvcml0aG0gPSAoKSA9PiB1bmRlcmx5aW5nQnl0ZVNvdXJjZS5wdWxsKGNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICBpZiAodW5kZXJseWluZ0J5dGVTb3VyY2UuY2FuY2VsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FuY2VsQWxnb3JpdGhtID0gcmVhc29uID0+IHVuZGVybHlpbmdCeXRlU291cmNlLmNhbmNlbChyZWFzb24pO1xuICAgIH1cbiAgICBjb25zdCBhdXRvQWxsb2NhdGVDaHVua1NpemUgPSB1bmRlcmx5aW5nQnl0ZVNvdXJjZS5hdXRvQWxsb2NhdGVDaHVua1NpemU7XG4gICAgaWYgKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhdXRvQWxsb2NhdGVDaHVua1NpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuICAgIH1cbiAgICBTZXRVcFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtLCBjb250cm9sbGVyLCBzdGFydEFsZ29yaXRobSwgcHVsbEFsZ29yaXRobSwgY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrLCBhdXRvQWxsb2NhdGVDaHVua1NpemUpO1xufVxuZnVuY3Rpb24gU2V0VXBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KHJlcXVlc3QsIGNvbnRyb2xsZXIsIHZpZXcpIHtcbiAgICByZXF1ZXN0Ll9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgcmVxdWVzdC5fdmlldyA9IHZpZXc7XG59XG4vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdC5cbmZ1bmN0aW9uIGJ5b2JSZXF1ZXN0QnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLiR7bmFtZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3RgKTtcbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLlxuZnVuY3Rpb24gYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGUuJHtuYW1lfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcmApO1xufVxuXG4vLyBBYnN0cmFjdCBvcGVyYXRpb25zIGZvciB0aGUgUmVhZGFibGVTdHJlYW0uXG5mdW5jdGlvbiBBY3F1aXJlUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHN0cmVhbSkge1xuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHN0cmVhbSk7XG59XG4vLyBSZWFkYWJsZVN0cmVhbSBBUEkgZXhwb3NlZCBmb3IgY29udHJvbGxlcnMuXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUFkZFJlYWRJbnRvUmVxdWVzdChzdHJlYW0sIHJlYWRJbnRvUmVxdWVzdCkge1xuICAgIHN0cmVhbS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLnB1c2gocmVhZEludG9SZXF1ZXN0KTtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRJbnRvUmVxdWVzdChzdHJlYW0sIGNodW5rLCBkb25lKSB7XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG4gICAgY29uc3QgcmVhZEludG9SZXF1ZXN0ID0gcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLnNoaWZ0KCk7XG4gICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmVhZEludG9SZXF1ZXN0Ll9jbG9zZVN0ZXBzKGNodW5rKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlYWRJbnRvUmVxdWVzdC5fY2h1bmtTdGVwcyhjaHVuayk7XG4gICAgfVxufVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkSW50b1JlcXVlc3RzKHN0cmVhbSkge1xuICAgIHJldHVybiBzdHJlYW0uX3JlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGg7XG59XG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUhhc0JZT0JSZWFkZXIoc3RyZWFtKSB7XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG4gICAgaWYgKHJlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcihyZWFkZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEEgQllPQiByZWFkZXIgdmVuZGVkIGJ5IGEge0BsaW5rIFJlYWRhYmxlU3RyZWFtfS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmNsYXNzIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgICAgIGFzc2VydFJlcXVpcmVkQXJndW1lbnQoc3RyZWFtLCAxLCAnUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyJyk7XG4gICAgICAgIGFzc2VydFJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgJ0ZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGlzIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBmb3IgZXhjbHVzaXZlIHJlYWRpbmcgYnkgYW5vdGhlciByZWFkZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUlzUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgZm9yIGEgc3RyZWFtIG5vdCBjb25zdHJ1Y3RlZCB3aXRoIGEgYnl0ZSAnICtcbiAgICAgICAgICAgICAgICAnc291cmNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljSW5pdGlhbGl6ZSh0aGlzLCBzdHJlYW0pO1xuICAgICAgICB0aGlzLl9yZWFkSW50b1JlcXVlc3RzID0gbmV3IFNpbXBsZVF1ZXVlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZSBmdWxmaWxsZWQgd2hlbiB0aGUgc3RyZWFtIGJlY29tZXMgY2xvc2VkLCBvciByZWplY3RlZCBpZiB0aGUgc3RyZWFtIGV2ZXIgZXJyb3JzIG9yXG4gICAgICogdGhlIHJlYWRlcidzIGxvY2sgaXMgcmVsZWFzZWQgYmVmb3JlIHRoZSBzdHJlYW0gZmluaXNoZXMgY2xvc2luZy5cbiAgICAgKi9cbiAgICBnZXQgY2xvc2VkKCkge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChieW9iUmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2VkJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9zZWRQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcmVhZGVyIGlzIGFjdGl2ZSwgYmVoYXZlcyB0aGUgc2FtZSBhcyB7QGxpbmsgUmVhZGFibGVTdHJlYW0uY2FuY2VsIHwgc3RyZWFtLmNhbmNlbChyZWFzb24pfS5cbiAgICAgKi9cbiAgICBjYW5jZWwocmVhc29uID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgocmVhZGVyTG9ja0V4Y2VwdGlvbignY2FuY2VsJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNDYW5jZWwodGhpcywgcmVhc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gcmVhZHMgYnl0ZXMgaW50byB2aWV3LCBhbmQgcmV0dXJucyBhIHByb21pc2UgcmVzb2x2ZWQgd2l0aCB0aGUgcmVzdWx0LlxuICAgICAqXG4gICAgICogSWYgcmVhZGluZyBhIGNodW5rIGNhdXNlcyB0aGUgcXVldWUgdG8gYmVjb21lIGVtcHR5LCBtb3JlIGRhdGEgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgdW5kZXJseWluZyBzb3VyY2UuXG4gICAgICovXG4gICAgcmVhZCh2aWV3KSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWFkJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KHZpZXcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChuZXcgVHlwZUVycm9yKCd2aWV3IG11c3QgYmUgYW4gYXJyYXkgYnVmZmVyIHZpZXcnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpZXcuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgobmV3IFR5cGVFcnJvcigndmlldyBtdXN0IGhhdmUgbm9uLXplcm8gYnl0ZUxlbmd0aCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmlldy5idWZmZXIuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgobmV3IFR5cGVFcnJvcihgdmlldydzIGJ1ZmZlciBtdXN0IGhhdmUgbm9uLXplcm8gYnl0ZUxlbmd0aGApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSXNEZXRhY2hlZEJ1ZmZlcih2aWV3LmJ1ZmZlcikpIDtcbiAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgocmVhZGVyTG9ja0V4Y2VwdGlvbigncmVhZCBmcm9tJykpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNvbHZlUHJvbWlzZTtcbiAgICAgICAgbGV0IHJlamVjdFByb21pc2U7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXdQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHJlamVjdFByb21pc2UgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZWFkSW50b1JlcXVlc3QgPSB7XG4gICAgICAgICAgICBfY2h1bmtTdGVwczogY2h1bmsgPT4gcmVzb2x2ZVByb21pc2UoeyB2YWx1ZTogY2h1bmssIGRvbmU6IGZhbHNlIH0pLFxuICAgICAgICAgICAgX2Nsb3NlU3RlcHM6IGNodW5rID0+IHJlc29sdmVQcm9taXNlKHsgdmFsdWU6IGNodW5rLCBkb25lOiB0cnVlIH0pLFxuICAgICAgICAgICAgX2Vycm9yU3RlcHM6IGUgPT4gcmVqZWN0UHJvbWlzZShlKVxuICAgICAgICB9O1xuICAgICAgICBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXJSZWFkKHRoaXMsIHZpZXcsIHJlYWRJbnRvUmVxdWVzdCk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWxlYXNlcyB0aGUgcmVhZGVyJ3MgbG9jayBvbiB0aGUgY29ycmVzcG9uZGluZyBzdHJlYW0uIEFmdGVyIHRoZSBsb2NrIGlzIHJlbGVhc2VkLCB0aGUgcmVhZGVyIGlzIG5vIGxvbmdlciBhY3RpdmUuXG4gICAgICogSWYgdGhlIGFzc29jaWF0ZWQgc3RyZWFtIGlzIGVycm9yZWQgd2hlbiB0aGUgbG9jayBpcyByZWxlYXNlZCwgdGhlIHJlYWRlciB3aWxsIGFwcGVhciBlcnJvcmVkIGluIHRoZSBzYW1lIHdheVxuICAgICAqIGZyb20gbm93IG9uOyBvdGhlcndpc2UsIHRoZSByZWFkZXIgd2lsbCBhcHBlYXIgY2xvc2VkLlxuICAgICAqXG4gICAgICogQSByZWFkZXIncyBsb2NrIGNhbm5vdCBiZSByZWxlYXNlZCB3aGlsZSBpdCBzdGlsbCBoYXMgYSBwZW5kaW5nIHJlYWQgcmVxdWVzdCwgaS5lLiwgaWYgYSBwcm9taXNlIHJldHVybmVkIGJ5XG4gICAgICogdGhlIHJlYWRlcidzIHtAbGluayBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucmVhZCB8IHJlYWQoKX0gbWV0aG9kIGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZC4gQXR0ZW1wdGluZyB0b1xuICAgICAqIGRvIHNvIHdpbGwgdGhyb3cgYSBgVHlwZUVycm9yYCBhbmQgbGVhdmUgdGhlIHJlYWRlciBsb2NrZWQgdG8gdGhlIHN0cmVhbS5cbiAgICAgKi9cbiAgICByZWxlYXNlTG9jaygpIHtcbiAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgYnlvYlJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlbGVhc2VMb2NrJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHJlbGVhc2UgYSByZWFkZXIgbG9jayB3aGVuIHRoYXQgcmVhZGVyIGhhcyBwZW5kaW5nIHJlYWQoKSBjYWxscyB1bi1zZXR0bGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZSh0aGlzKTtcbiAgICB9XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucHJvdG90eXBlLCB7XG4gICAgY2FuY2VsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICByZWFkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICByZWxlYXNlTG9jazogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgY2xvc2VkOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucHJvdG90eXBlLCBTeW1ib2xQb2x5ZmlsbC50b1N0cmluZ1RhZywge1xuICAgICAgICB2YWx1ZTogJ1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcicsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuLy8gQWJzdHJhY3Qgb3BlcmF0aW9ucyBmb3IgdGhlIHJlYWRlcnMuXG5mdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih4KSB7XG4gICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3JlYWRJbnRvUmVxdWVzdHMnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB4IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyO1xufVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyUmVhZChyZWFkZXIsIHZpZXcsIHJlYWRJbnRvUmVxdWVzdCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbTtcbiAgICBzdHJlYW0uX2Rpc3R1cmJlZCA9IHRydWU7XG4gICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICByZWFkSW50b1JlcXVlc3QuX2Vycm9yU3RlcHMoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUHVsbEludG8oc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsIHZpZXcsIHJlYWRJbnRvUmVxdWVzdCk7XG4gICAgfVxufVxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlci5cbmZ1bmN0aW9uIGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLnByb3RvdHlwZS4ke25hbWV9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXJgKTtcbn1cblxuZnVuY3Rpb24gRXh0cmFjdEhpZ2hXYXRlck1hcmsoc3RyYXRlZ3ksIGRlZmF1bHRIV00pIHtcbiAgICBjb25zdCB7IGhpZ2hXYXRlck1hcmsgfSA9IHN0cmF0ZWd5O1xuICAgIGlmIChoaWdoV2F0ZXJNYXJrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRIV007XG4gICAgfVxuICAgIGlmIChOdW1iZXJJc05hTihoaWdoV2F0ZXJNYXJrKSB8fCBoaWdoV2F0ZXJNYXJrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBoaWdoV2F0ZXJNYXJrJyk7XG4gICAgfVxuICAgIHJldHVybiBoaWdoV2F0ZXJNYXJrO1xufVxuZnVuY3Rpb24gRXh0cmFjdFNpemVBbGdvcml0aG0oc3RyYXRlZ3kpIHtcbiAgICBjb25zdCB7IHNpemUgfSA9IHN0cmF0ZWd5O1xuICAgIGlmICghc2l6ZSkge1xuICAgICAgICByZXR1cm4gKCkgPT4gMTtcbiAgICB9XG4gICAgcmV0dXJuIHNpemU7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRRdWV1aW5nU3RyYXRlZ3koaW5pdCwgY29udGV4dCkge1xuICAgIGFzc2VydERpY3Rpb25hcnkoaW5pdCwgY29udGV4dCk7XG4gICAgY29uc3QgaGlnaFdhdGVyTWFyayA9IGluaXQgPT09IG51bGwgfHwgaW5pdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5pdC5oaWdoV2F0ZXJNYXJrO1xuICAgIGNvbnN0IHNpemUgPSBpbml0ID09PSBudWxsIHx8IGluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXQuc2l6ZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBoaWdoV2F0ZXJNYXJrOiBoaWdoV2F0ZXJNYXJrID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBjb252ZXJ0VW5yZXN0cmljdGVkRG91YmxlKGhpZ2hXYXRlck1hcmspLFxuICAgICAgICBzaXplOiBzaXplID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBjb252ZXJ0UXVldWluZ1N0cmF0ZWd5U2l6ZShzaXplLCBgJHtjb250ZXh0fSBoYXMgbWVtYmVyICdzaXplJyB0aGF0YClcbiAgICB9O1xufVxuZnVuY3Rpb24gY29udmVydFF1ZXVpbmdTdHJhdGVneVNpemUoZm4sIGNvbnRleHQpIHtcbiAgICBhc3NlcnRGdW5jdGlvbihmbiwgY29udGV4dCk7XG4gICAgcmV0dXJuIGNodW5rID0+IGNvbnZlcnRVbnJlc3RyaWN0ZWREb3VibGUoZm4oY2h1bmspKTtcbn1cblxuZnVuY3Rpb24gY29udmVydFVuZGVybHlpbmdTaW5rKG9yaWdpbmFsLCBjb250ZXh0KSB7XG4gICAgYXNzZXJ0RGljdGlvbmFyeShvcmlnaW5hbCwgY29udGV4dCk7XG4gICAgY29uc3QgYWJvcnQgPSBvcmlnaW5hbCA9PT0gbnVsbCB8fCBvcmlnaW5hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luYWwuYWJvcnQ7XG4gICAgY29uc3QgY2xvc2UgPSBvcmlnaW5hbCA9PT0gbnVsbCB8fCBvcmlnaW5hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luYWwuY2xvc2U7XG4gICAgY29uc3Qgc3RhcnQgPSBvcmlnaW5hbCA9PT0gbnVsbCB8fCBvcmlnaW5hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luYWwuc3RhcnQ7XG4gICAgY29uc3QgdHlwZSA9IG9yaWdpbmFsID09PSBudWxsIHx8IG9yaWdpbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5hbC50eXBlO1xuICAgIGNvbnN0IHdyaXRlID0gb3JpZ2luYWwgPT09IG51bGwgfHwgb3JpZ2luYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbmFsLndyaXRlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFib3J0OiBhYm9ydCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHVuZGVmaW5lZCA6XG4gICAgICAgICAgICBjb252ZXJ0VW5kZXJseWluZ1NpbmtBYm9ydENhbGxiYWNrKGFib3J0LCBvcmlnaW5hbCwgYCR7Y29udGV4dH0gaGFzIG1lbWJlciAnYWJvcnQnIHRoYXRgKSxcbiAgICAgICAgY2xvc2U6IGNsb3NlID09PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdW5kZWZpbmVkIDpcbiAgICAgICAgICAgIGNvbnZlcnRVbmRlcmx5aW5nU2lua0Nsb3NlQ2FsbGJhY2soY2xvc2UsIG9yaWdpbmFsLCBgJHtjb250ZXh0fSBoYXMgbWVtYmVyICdjbG9zZScgdGhhdGApLFxuICAgICAgICBzdGFydDogc3RhcnQgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB1bmRlZmluZWQgOlxuICAgICAgICAgICAgY29udmVydFVuZGVybHlpbmdTaW5rU3RhcnRDYWxsYmFjayhzdGFydCwgb3JpZ2luYWwsIGAke2NvbnRleHR9IGhhcyBtZW1iZXIgJ3N0YXJ0JyB0aGF0YCksXG4gICAgICAgIHdyaXRlOiB3cml0ZSA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHVuZGVmaW5lZCA6XG4gICAgICAgICAgICBjb252ZXJ0VW5kZXJseWluZ1NpbmtXcml0ZUNhbGxiYWNrKHdyaXRlLCBvcmlnaW5hbCwgYCR7Y29udGV4dH0gaGFzIG1lbWJlciAnd3JpdGUnIHRoYXRgKSxcbiAgICAgICAgdHlwZVxuICAgIH07XG59XG5mdW5jdGlvbiBjb252ZXJ0VW5kZXJseWluZ1NpbmtBYm9ydENhbGxiYWNrKGZuLCBvcmlnaW5hbCwgY29udGV4dCkge1xuICAgIGFzc2VydEZ1bmN0aW9uKGZuLCBjb250ZXh0KTtcbiAgICByZXR1cm4gKHJlYXNvbikgPT4gcHJvbWlzZUNhbGwoZm4sIG9yaWdpbmFsLCBbcmVhc29uXSk7XG59XG5mdW5jdGlvbiBjb252ZXJ0VW5kZXJseWluZ1NpbmtDbG9zZUNhbGxiYWNrKGZuLCBvcmlnaW5hbCwgY29udGV4dCkge1xuICAgIGFzc2VydEZ1bmN0aW9uKGZuLCBjb250ZXh0KTtcbiAgICByZXR1cm4gKCkgPT4gcHJvbWlzZUNhbGwoZm4sIG9yaWdpbmFsLCBbXSk7XG59XG5mdW5jdGlvbiBjb252ZXJ0VW5kZXJseWluZ1NpbmtTdGFydENhbGxiYWNrKGZuLCBvcmlnaW5hbCwgY29udGV4dCkge1xuICAgIGFzc2VydEZ1bmN0aW9uKGZuLCBjb250ZXh0KTtcbiAgICByZXR1cm4gKGNvbnRyb2xsZXIpID0+IHJlZmxlY3RDYWxsKGZuLCBvcmlnaW5hbCwgW2NvbnRyb2xsZXJdKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRVbmRlcmx5aW5nU2lua1dyaXRlQ2FsbGJhY2soZm4sIG9yaWdpbmFsLCBjb250ZXh0KSB7XG4gICAgYXNzZXJ0RnVuY3Rpb24oZm4sIGNvbnRleHQpO1xuICAgIHJldHVybiAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHByb21pc2VDYWxsKGZuLCBvcmlnaW5hbCwgW2NodW5rLCBjb250cm9sbGVyXSk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFdyaXRhYmxlU3RyZWFtKHgsIGNvbnRleHQpIHtcbiAgICBpZiAoIUlzV3JpdGFibGVTdHJlYW0oeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtjb250ZXh0fSBpcyBub3QgYSBXcml0YWJsZVN0cmVhbS5gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzQWJvcnRTaWduYWwodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUuYWJvcnRlZCA9PT0gJ2Jvb2xlYW4nO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgLy8gQWJvcnRTaWduYWwucHJvdG90eXBlLmFib3J0ZWQgdGhyb3dzIGlmIGl0cyBicmFuZCBjaGVjayBmYWlsc1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuY29uc3Qgc3VwcG9ydHNBYm9ydENvbnRyb2xsZXIgPSB0eXBlb2YgQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nO1xuLyoqXG4gKiBDb25zdHJ1Y3QgYSBuZXcgQWJvcnRDb250cm9sbGVyLCBpZiBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBjcmVhdGVBYm9ydENvbnRyb2xsZXIoKSB7XG4gICAgaWYgKHN1cHBvcnRzQWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSB3cml0YWJsZSBzdHJlYW0gcmVwcmVzZW50cyBhIGRlc3RpbmF0aW9uIGZvciBkYXRhLCBpbnRvIHdoaWNoIHlvdSBjYW4gd3JpdGUuXG4gKlxuICogQHB1YmxpY1xuICovXG5jbGFzcyBXcml0YWJsZVN0cmVhbSB7XG4gICAgY29uc3RydWN0b3IocmF3VW5kZXJseWluZ1NpbmsgPSB7fSwgcmF3U3RyYXRlZ3kgPSB7fSkge1xuICAgICAgICBpZiAocmF3VW5kZXJseWluZ1NpbmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmF3VW5kZXJseWluZ1NpbmsgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXNzZXJ0T2JqZWN0KHJhd1VuZGVybHlpbmdTaW5rLCAnRmlyc3QgcGFyYW1ldGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyYXRlZ3kgPSBjb252ZXJ0UXVldWluZ1N0cmF0ZWd5KHJhd1N0cmF0ZWd5LCAnU2Vjb25kIHBhcmFtZXRlcicpO1xuICAgICAgICBjb25zdCB1bmRlcmx5aW5nU2luayA9IGNvbnZlcnRVbmRlcmx5aW5nU2luayhyYXdVbmRlcmx5aW5nU2luaywgJ0ZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICBJbml0aWFsaXplV3JpdGFibGVTdHJlYW0odGhpcyk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB1bmRlcmx5aW5nU2luay50eXBlO1xuICAgICAgICBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlIGlzIHNwZWNpZmllZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpemVBbGdvcml0aG0gPSBFeHRyYWN0U2l6ZUFsZ29yaXRobShzdHJhdGVneSk7XG4gICAgICAgIGNvbnN0IGhpZ2hXYXRlck1hcmsgPSBFeHRyYWN0SGlnaFdhdGVyTWFyayhzdHJhdGVneSwgMSk7XG4gICAgICAgIFNldFVwV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckZyb21VbmRlcmx5aW5nU2luayh0aGlzLCB1bmRlcmx5aW5nU2luaywgaGlnaFdhdGVyTWFyaywgc2l6ZUFsZ29yaXRobSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHdyaXRhYmxlIHN0cmVhbSBpcyBsb2NrZWQgdG8gYSB3cml0ZXIuXG4gICAgICovXG4gICAgZ2V0IGxvY2tlZCgpIHtcbiAgICAgICAgaWYgKCFJc1dyaXRhYmxlU3RyZWFtKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uJDIoJ2xvY2tlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBYm9ydHMgdGhlIHN0cmVhbSwgc2lnbmFsaW5nIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBubyBsb25nZXIgc3VjY2Vzc2Z1bGx5IHdyaXRlIHRvIHRoZSBzdHJlYW0gYW5kIGl0IGlzIHRvIGJlXG4gICAgICogaW1tZWRpYXRlbHkgbW92ZWQgdG8gYW4gZXJyb3JlZCBzdGF0ZSwgd2l0aCBhbnkgcXVldWVkLXVwIHdyaXRlcyBkaXNjYXJkZWQuIFRoaXMgd2lsbCBhbHNvIGV4ZWN1dGUgYW55IGFib3J0XG4gICAgICogbWVjaGFuaXNtIG9mIHRoZSB1bmRlcmx5aW5nIHNpbmsuXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGZ1bGZpbGwgaWYgdGhlIHN0cmVhbSBzaHV0cyBkb3duIHN1Y2Nlc3NmdWxseSwgb3IgcmVqZWN0IGlmIHRoZSB1bmRlcmx5aW5nIHNpbmsgc2lnbmFsZWRcbiAgICAgKiB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvciBkb2luZyBzby4gQWRkaXRpb25hbGx5LCBpdCB3aWxsIHJlamVjdCB3aXRoIGEgYFR5cGVFcnJvcmAgKHdpdGhvdXQgYXR0ZW1wdGluZyB0byBjYW5jZWxcbiAgICAgKiB0aGUgc3RyZWFtKSBpZiB0aGUgc3RyZWFtIGlzIGN1cnJlbnRseSBsb2NrZWQuXG4gICAgICovXG4gICAgYWJvcnQocmVhc29uID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghSXNXcml0YWJsZVN0cmVhbSh0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbiQyKCdhYm9ydCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbUxvY2tlZCh0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgobmV3IFR5cGVFcnJvcignQ2Fubm90IGFib3J0IGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSB3cml0ZXInKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtQWJvcnQodGhpcywgcmVhc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBzdHJlYW0uIFRoZSB1bmRlcmx5aW5nIHNpbmsgd2lsbCBmaW5pc2ggcHJvY2Vzc2luZyBhbnkgcHJldmlvdXNseS13cml0dGVuIGNodW5rcywgYmVmb3JlIGludm9raW5nIGl0c1xuICAgICAqIGNsb3NlIGJlaGF2aW9yLiBEdXJpbmcgdGhpcyB0aW1lIGFueSBmdXJ0aGVyIGF0dGVtcHRzIHRvIHdyaXRlIHdpbGwgZmFpbCAod2l0aG91dCBlcnJvcmluZyB0aGUgc3RyZWFtKS5cbiAgICAgKlxuICAgICAqIFRoZSBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIGZ1bGZpbGwgaWYgYWxsIHJlbWFpbmluZyBjaHVua3MgYXJlIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGFuZCB0aGUgc3RyZWFtXG4gICAgICogc3VjY2Vzc2Z1bGx5IGNsb3Nlcywgb3IgcmVqZWN0cyBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhpcyBwcm9jZXNzLiBBZGRpdGlvbmFsbHksIGl0IHdpbGwgcmVqZWN0IHdpdGhcbiAgICAgKiBhIGBUeXBlRXJyb3JgICh3aXRob3V0IGF0dGVtcHRpbmcgdG8gY2FuY2VsIHRoZSBzdHJlYW0pIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGxvY2tlZC5cbiAgICAgKi9cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKCFJc1dyaXRhYmxlU3RyZWFtKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uJDIoJ2Nsb3NlJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2xvc2UgYSBzdHJlYW0gdGhhdCBhbHJlYWR5IGhhcyBhIHdyaXRlcicpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjbG9zZSBhbiBhbHJlYWR5LWNsb3Npbmcgc3RyZWFtJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbUNsb3NlKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciB8IHdyaXRlcn0gYW5kIGxvY2tzIHRoZSBzdHJlYW0gdG8gdGhlIG5ldyB3cml0ZXIuIFdoaWxlIHRoZSBzdHJlYW1cbiAgICAgKiBpcyBsb2NrZWQsIG5vIG90aGVyIHdyaXRlciBjYW4gYmUgYWNxdWlyZWQgdW50aWwgdGhpcyBvbmUgaXMgcmVsZWFzZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNyZWF0aW5nIGFic3RyYWN0aW9ucyB0aGF0IGRlc2lyZSB0aGUgYWJpbGl0eSB0byB3cml0ZSB0byBhIHN0cmVhbVxuICAgICAqIHdpdGhvdXQgaW50ZXJydXB0aW9uIG9yIGludGVybGVhdmluZy4gQnkgZ2V0dGluZyBhIHdyaXRlciBmb3IgdGhlIHN0cmVhbSwgeW91IGNhbiBlbnN1cmUgbm9ib2R5IGVsc2UgY2FuIHdyaXRlIGF0XG4gICAgICogdGhlIHNhbWUgdGltZSwgd2hpY2ggd291bGQgY2F1c2UgdGhlIHJlc3VsdGluZyB3cml0dGVuIGRhdGEgdG8gYmUgdW5wcmVkaWN0YWJsZSBhbmQgcHJvYmFibHkgdXNlbGVzcy5cbiAgICAgKi9cbiAgICBnZXRXcml0ZXIoKSB7XG4gICAgICAgIGlmICghSXNXcml0YWJsZVN0cmVhbSh0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbiQyKCdnZXRXcml0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKTtcbiAgICB9XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUsIHtcbiAgICBhYm9ydDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgY2xvc2U6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGdldFdyaXRlcjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgbG9ja2VkOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIHZhbHVlOiAnV3JpdGFibGVTdHJlYW0nLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cbi8vIEFic3RyYWN0IG9wZXJhdGlvbnMgZm9yIHRoZSBXcml0YWJsZVN0cmVhbS5cbmZ1bmN0aW9uIEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIoc3RyZWFtKSB7XG4gICAgcmV0dXJuIG5ldyBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIoc3RyZWFtKTtcbn1cbi8vIFRocm93cyBpZiBhbmQgb25seSBpZiBzdGFydEFsZ29yaXRobSB0aHJvd3MuXG5mdW5jdGlvbiBDcmVhdGVXcml0YWJsZVN0cmVhbShzdGFydEFsZ29yaXRobSwgd3JpdGVBbGdvcml0aG0sIGNsb3NlQWxnb3JpdGhtLCBhYm9ydEFsZ29yaXRobSwgaGlnaFdhdGVyTWFyayA9IDEsIHNpemVBbGdvcml0aG0gPSAoKSA9PiAxKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gT2JqZWN0LmNyZWF0ZShXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUpO1xuICAgIEluaXRpYWxpemVXcml0YWJsZVN0cmVhbShzdHJlYW0pO1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBPYmplY3QuY3JlYXRlKFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlKTtcbiAgICBTZXRVcFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoc3RyZWFtLCBjb250cm9sbGVyLCBzdGFydEFsZ29yaXRobSwgd3JpdGVBbGdvcml0aG0sIGNsb3NlQWxnb3JpdGhtLCBhYm9ydEFsZ29yaXRobSwgaGlnaFdhdGVyTWFyaywgc2l6ZUFsZ29yaXRobSk7XG4gICAgcmV0dXJuIHN0cmVhbTtcbn1cbmZ1bmN0aW9uIEluaXRpYWxpemVXcml0YWJsZVN0cmVhbShzdHJlYW0pIHtcbiAgICBzdHJlYW0uX3N0YXRlID0gJ3dyaXRhYmxlJztcbiAgICAvLyBUaGUgZXJyb3IgdGhhdCB3aWxsIGJlIHJlcG9ydGVkIGJ5IG5ldyBtZXRob2QgY2FsbHMgb25jZSB0aGUgc3RhdGUgYmVjb21lcyBlcnJvcmVkLiBPbmx5IHNldCB3aGVuIFtbc3RhdGVdXSBpc1xuICAgIC8vICdlcnJvcmluZycgb3IgJ2Vycm9yZWQnLiBNYXkgYmUgc2V0IHRvIGFuIHVuZGVmaW5lZCB2YWx1ZS5cbiAgICBzdHJlYW0uX3N0b3JlZEVycm9yID0gdW5kZWZpbmVkO1xuICAgIHN0cmVhbS5fd3JpdGVyID0gdW5kZWZpbmVkO1xuICAgIC8vIEluaXRpYWxpemUgdG8gdW5kZWZpbmVkIGZpcnN0IGJlY2F1c2UgdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjb250cm9sbGVyIGNoZWNrcyB0aGlzXG4gICAgLy8gdmFyaWFibGUgdG8gdmFsaWRhdGUgdGhlIGNhbGxlci5cbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgICAvLyBUaGlzIHF1ZXVlIGlzIHBsYWNlZCBoZXJlIGluc3RlYWQgb2YgdGhlIHdyaXRlciBjbGFzcyBpbiBvcmRlciB0byBhbGxvdyBmb3IgcGFzc2luZyBhIHdyaXRlciB0byB0aGUgbmV4dCBkYXRhXG4gICAgLy8gcHJvZHVjZXIgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcXVldWVkIHdyaXRlcyB0byBmaW5pc2guXG4gICAgc3RyZWFtLl93cml0ZVJlcXVlc3RzID0gbmV3IFNpbXBsZVF1ZXVlKCk7XG4gICAgLy8gV3JpdGUgcmVxdWVzdHMgYXJlIHJlbW92ZWQgZnJvbSBfd3JpdGVSZXF1ZXN0cyB3aGVuIHdyaXRlKCkgaXMgY2FsbGVkIG9uIHRoZSB1bmRlcmx5aW5nIHNpbmsuIFRoaXMgcHJldmVudHNcbiAgICAvLyB0aGVtIGZyb20gYmVpbmcgZXJyb25lb3VzbHkgcmVqZWN0ZWQgb24gZXJyb3IuIElmIGEgd3JpdGUoKSBjYWxsIGlzIGluLWZsaWdodCwgdGhlIHJlcXVlc3QgaXMgc3RvcmVkIGhlcmUuXG4gICAgc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAvLyBUaGUgcHJvbWlzZSB0aGF0IHdhcyByZXR1cm5lZCBmcm9tIHdyaXRlci5jbG9zZSgpLiBTdG9yZWQgaGVyZSBiZWNhdXNlIGl0IG1heSBiZSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIHdyaXRlclxuICAgIC8vIGhhcyBiZWVuIGRldGFjaGVkLlxuICAgIHN0cmVhbS5fY2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgIC8vIENsb3NlIHJlcXVlc3QgaXMgcmVtb3ZlZCBmcm9tIF9jbG9zZVJlcXVlc3Qgd2hlbiBjbG9zZSgpIGlzIGNhbGxlZCBvbiB0aGUgdW5kZXJseWluZyBzaW5rLiBUaGlzIHByZXZlbnRzIGl0XG4gICAgLy8gZnJvbSBiZWluZyBlcnJvbmVvdXNseSByZWplY3RlZCBvbiBlcnJvci4gSWYgYSBjbG9zZSgpIGNhbGwgaXMgaW4tZmxpZ2h0LCB0aGUgcmVxdWVzdCBpcyBzdG9yZWQgaGVyZS5cbiAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgIC8vIFRoZSBwcm9taXNlIHRoYXQgd2FzIHJldHVybmVkIGZyb20gd3JpdGVyLmFib3J0KCkuIFRoaXMgbWF5IGFsc28gYmUgZnVsZmlsbGVkIGFmdGVyIHRoZSB3cml0ZXIgaGFzIGRldGFjaGVkLlxuICAgIHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAvLyBUaGUgYmFja3ByZXNzdXJlIHNpZ25hbCBzZXQgYnkgdGhlIGNvbnRyb2xsZXIuXG4gICAgc3RyZWFtLl9iYWNrcHJlc3N1cmUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIElzV3JpdGFibGVTdHJlYW0oeCkge1xuICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ193cml0YWJsZVN0cmVhbUNvbnRyb2xsZXInKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB4IGluc3RhbmNlb2YgV3JpdGFibGVTdHJlYW07XG59XG5mdW5jdGlvbiBJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0uX3dyaXRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbUFib3J0KHN0cmVhbSwgcmVhc29uKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlZFdpdGgodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgc3RyZWFtLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIuX2Fib3J0UmVhc29uID0gcmVhc29uO1xuICAgIChfYSA9IHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9hYm9ydENvbnRyb2xsZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hYm9ydCgpO1xuICAgIC8vIFR5cGVTY3JpcHQgbmFycm93cyB0aGUgdHlwZSBvZiBgc3RyZWFtLl9zdGF0ZWAgZG93biB0byAnd3JpdGFibGUnIHwgJ2Vycm9yaW5nJyxcbiAgICAvLyBidXQgaXQgZG9lc24ndCBrbm93IHRoYXQgc2lnbmFsaW5nIGFib3J0IHJ1bnMgYXV0aG9yIGNvZGUgdGhhdCBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHN0YXRlLlxuICAgIC8vIFdpZGVuIHRoZSB0eXBlIGFnYWluIGJ5IGNhc3RpbmcgdG8gV3JpdGFibGVTdHJlYW1TdGF0ZS5cbiAgICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG4gICAgaWYgKHN0YXRlID09PSAnY2xvc2VkJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGlmIChzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9wcm9taXNlO1xuICAgIH1cbiAgICBsZXQgd2FzQWxyZWFkeUVycm9yaW5nID0gZmFsc2U7XG4gICAgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgIHdhc0FscmVhZHlFcnJvcmluZyA9IHRydWU7XG4gICAgICAgIC8vIHJlYXNvbiB3aWxsIG5vdCBiZSB1c2VkLCBzbyBkb24ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIGl0LlxuICAgICAgICByZWFzb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHByb21pc2UgPSBuZXdQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgX3Byb21pc2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgX3JlamVjdDogcmVqZWN0LFxuICAgICAgICAgICAgX3JlYXNvbjogcmVhc29uLFxuICAgICAgICAgICAgX3dhc0FscmVhZHlFcnJvcmluZzogd2FzQWxyZWFkeUVycm9yaW5nXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9wcm9taXNlID0gcHJvbWlzZTtcbiAgICBpZiAoIXdhc0FscmVhZHlFcnJvcmluZykge1xuICAgICAgICBXcml0YWJsZVN0cmVhbVN0YXJ0RXJyb3Jpbmcoc3RyZWFtLCByZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtQ2xvc2Uoc3RyZWFtKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcgfHwgc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChuZXcgVHlwZUVycm9yKGBUaGUgc3RyZWFtIChpbiAke3N0YXRlfSBzdGF0ZSkgaXMgbm90IGluIHRoZSB3cml0YWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGNsb3NlZGApKTtcbiAgICB9XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ld1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjbG9zZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICBfcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIF9yZWplY3Q6IHJlamVjdFxuICAgICAgICB9O1xuICAgICAgICBzdHJlYW0uX2Nsb3NlUmVxdWVzdCA9IGNsb3NlUmVxdWVzdDtcbiAgICB9KTtcbiAgICBjb25zdCB3cml0ZXIgPSBzdHJlYW0uX3dyaXRlcjtcbiAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQgJiYgc3RyZWFtLl9iYWNrcHJlc3N1cmUgJiYgc3RhdGUgPT09ICd3cml0YWJsZScpIHtcbiAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc29sdmUod3JpdGVyKTtcbiAgICB9XG4gICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cbi8vIFdyaXRhYmxlU3RyZWFtIEFQSSBleHBvc2VkIGZvciBjb250cm9sbGVycy5cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtQWRkV3JpdGVSZXF1ZXN0KHN0cmVhbSkge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXdQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd3JpdGVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgX3Jlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICBfcmVqZWN0OiByZWplY3RcbiAgICAgICAgfTtcbiAgICAgICAgc3RyZWFtLl93cml0ZVJlcXVlc3RzLnB1c2god3JpdGVSZXF1ZXN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCBlcnJvcikge1xuICAgIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcbiAgICBpZiAoc3RhdGUgPT09ICd3cml0YWJsZScpIHtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1TdGFydEVycm9yaW5nKHN0cmVhbSwgZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtU3RhcnRFcnJvcmluZyhzdHJlYW0sIHJlYXNvbikge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcjtcbiAgICBzdHJlYW0uX3N0YXRlID0gJ2Vycm9yaW5nJztcbiAgICBzdHJlYW0uX3N0b3JlZEVycm9yID0gcmVhc29uO1xuICAgIGNvbnN0IHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuICAgIGlmICh3cml0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVSZWFkeVByb21pc2VSZWplY3RlZCh3cml0ZXIsIHJlYXNvbik7XG4gICAgfVxuICAgIGlmICghV3JpdGFibGVTdHJlYW1IYXNPcGVyYXRpb25NYXJrZWRJbkZsaWdodChzdHJlYW0pICYmIGNvbnRyb2xsZXIuX3N0YXJ0ZWQpIHtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hFcnJvcmluZyhzdHJlYW0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKSB7XG4gICAgc3RyZWFtLl9zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcltFcnJvclN0ZXBzXSgpO1xuICAgIGNvbnN0IHN0b3JlZEVycm9yID0gc3RyZWFtLl9zdG9yZWRFcnJvcjtcbiAgICBzdHJlYW0uX3dyaXRlUmVxdWVzdHMuZm9yRWFjaCh3cml0ZVJlcXVlc3QgPT4ge1xuICAgICAgICB3cml0ZVJlcXVlc3QuX3JlamVjdChzdG9yZWRFcnJvcik7XG4gICAgfSk7XG4gICAgc3RyZWFtLl93cml0ZVJlcXVlc3RzID0gbmV3IFNpbXBsZVF1ZXVlKCk7XG4gICAgaWYgKHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIFdyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQoc3RyZWFtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhYm9ydFJlcXVlc3QgPSBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3Q7XG4gICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChhYm9ydFJlcXVlc3QuX3dhc0FscmVhZHlFcnJvcmluZykge1xuICAgICAgICBhYm9ydFJlcXVlc3QuX3JlamVjdChzdG9yZWRFcnJvcik7XG4gICAgICAgIFdyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQoc3RyZWFtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm9taXNlID0gc3RyZWFtLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXJbQWJvcnRTdGVwc10oYWJvcnRSZXF1ZXN0Ll9yZWFzb24pO1xuICAgIHVwb25Qcm9taXNlKHByb21pc2UsICgpID0+IHtcbiAgICAgICAgYWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCk7XG4gICAgICAgIFdyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQoc3RyZWFtKTtcbiAgICB9LCAocmVhc29uKSA9PiB7XG4gICAgICAgIGFib3J0UmVxdWVzdC5fcmVqZWN0KHJlYXNvbik7XG4gICAgICAgIFdyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQoc3RyZWFtKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRXcml0ZShzdHJlYW0pIHtcbiAgICBzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0Ll9yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRXcml0ZVdpdGhFcnJvcihzdHJlYW0sIGVycm9yKSB7XG4gICAgc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVqZWN0KGVycm9yKTtcbiAgICBzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCBlcnJvcik7XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0Q2xvc2Uoc3RyZWFtKSB7XG4gICAgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdC5fcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAvLyBUaGUgZXJyb3Igd2FzIHRvbyBsYXRlIHRvIGRvIGFueXRoaW5nLCBzbyBpdCBpcyBpZ25vcmVkLlxuICAgICAgICBzdHJlYW0uX3N0b3JlZEVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdC5fcmVzb2x2ZSgpO1xuICAgICAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0cmVhbS5fc3RhdGUgPSAnY2xvc2VkJztcbiAgICBjb25zdCB3cml0ZXIgPSBzdHJlYW0uX3dyaXRlcjtcbiAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZXNvbHZlKHdyaXRlcik7XG4gICAgfVxufVxuZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodENsb3NlV2l0aEVycm9yKHN0cmVhbSwgZXJyb3IpIHtcbiAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0Ll9yZWplY3QoZXJyb3IpO1xuICAgIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgLy8gTmV2ZXIgZXhlY3V0ZSBzaW5rIGFib3J0KCkgYWZ0ZXIgc2luayBjbG9zZSgpLlxuICAgIGlmIChzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QuX3JlamVjdChlcnJvcik7XG4gICAgICAgIHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgV3JpdGFibGVTdHJlYW1EZWFsV2l0aFJlamVjdGlvbihzdHJlYW0sIGVycm9yKTtcbn1cbi8vIFRPRE8ocmljZWEpOiBGaXggYWxwaGFiZXRpY2FsIG9yZGVyLlxuZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSB7XG4gICAgaWYgKHN0cmVhbS5fY2xvc2VSZXF1ZXN0ID09PSB1bmRlZmluZWQgJiYgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ID09PSB1bmRlZmluZWQgJiYgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbU1hcmtDbG9zZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pIHtcbiAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID0gc3RyZWFtLl9jbG9zZVJlcXVlc3Q7XG4gICAgc3RyZWFtLl9jbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbU1hcmtGaXJzdFdyaXRlUmVxdWVzdEluRmxpZ2h0KHN0cmVhbSkge1xuICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPSBzdHJlYW0uX3dyaXRlUmVxdWVzdHMuc2hpZnQoKTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQoc3RyZWFtKSB7XG4gICAgaWYgKHN0cmVhbS5fY2xvc2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RyZWFtLl9jbG9zZVJlcXVlc3QuX3JlamVjdChzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgc3RyZWFtLl9jbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuICAgIGlmICh3cml0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlamVjdCh3cml0ZXIsIHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtVXBkYXRlQmFja3ByZXNzdXJlKHN0cmVhbSwgYmFja3ByZXNzdXJlKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gc3RyZWFtLl93cml0ZXI7XG4gICAgaWYgKHdyaXRlciAhPT0gdW5kZWZpbmVkICYmIGJhY2twcmVzc3VyZSAhPT0gc3RyZWFtLl9iYWNrcHJlc3N1cmUpIHtcbiAgICAgICAgaWYgKGJhY2twcmVzc3VyZSkge1xuICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc2V0KHdyaXRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzb2x2ZSh3cml0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0cmVhbS5fYmFja3ByZXNzdXJlID0gYmFja3ByZXNzdXJlO1xufVxuLyoqXG4gKiBBIGRlZmF1bHQgd3JpdGVyIHZlbmRlZCBieSBhIHtAbGluayBXcml0YWJsZVN0cmVhbX0uXG4gKlxuICogQHB1YmxpY1xuICovXG5jbGFzcyBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmVhbSkge1xuICAgICAgICBhc3NlcnRSZXF1aXJlZEFyZ3VtZW50KHN0cmVhbSwgMSwgJ1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcicpO1xuICAgICAgICBhc3NlcnRXcml0YWJsZVN0cmVhbShzdHJlYW0sICdGaXJzdCBwYXJhbWV0ZXInKTtcbiAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSB3cml0aW5nIGJ5IGFub3RoZXIgd3JpdGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgc3RyZWFtLl93cml0ZXIgPSB0aGlzO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgaWYgKCFXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pICYmIHN0cmVhbS5fYmFja3ByZXNzdXJlKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT09ICdlcnJvcmluZycpIHtcbiAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh0aGlzLCBzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh0aGlzKTtcbiAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdG9yZWRFcnJvciA9IHN0cmVhbS5fc3RvcmVkRXJyb3I7XG4gICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQodGhpcywgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh0aGlzLCBzdG9yZWRFcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIGJlIGZ1bGZpbGxlZCB3aGVuIHRoZSBzdHJlYW0gYmVjb21lcyBjbG9zZWQsIG9yIHJlamVjdGVkIGlmIHRoZSBzdHJlYW0gZXZlciBlcnJvcnMgb3JcbiAgICAgKiB0aGUgd3JpdGVy4oCZcyBsb2NrIGlzIHJlbGVhc2VkIGJlZm9yZSB0aGUgc3RyZWFtIGZpbmlzaGVzIGNsb3NpbmcuXG4gICAgICovXG4gICAgZ2V0IGNsb3NlZCgpIHtcbiAgICAgICAgaWYgKCFJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Nsb3NlZCcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGVzaXJlZCBzaXplIHRvIGZpbGwgdGhlIHN0cmVhbeKAmXMgaW50ZXJuYWwgcXVldWUuIEl0IGNhbiBiZSBuZWdhdGl2ZSwgaWYgdGhlIHF1ZXVlIGlzIG92ZXItZnVsbC5cbiAgICAgKiBBIHByb2R1Y2VyIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IGFtb3VudCBvZiBkYXRhIHRvIHdyaXRlLlxuICAgICAqXG4gICAgICogSXQgd2lsbCBiZSBgbnVsbGAgaWYgdGhlIHN0cmVhbSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gKGR1ZSB0byBlaXRoZXIgYmVpbmcgZXJyb3JlZCwgb3IgaGF2aW5nIGFuIGFib3J0XG4gICAgICogcXVldWVkIHVwKS4gSXQgd2lsbCByZXR1cm4gemVybyBpZiB0aGUgc3RyZWFtIGlzIGNsb3NlZC4gQW5kIHRoZSBnZXR0ZXIgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgaW52b2tlZCB3aGVuXG4gICAgICogdGhlIHdyaXRlcuKAmXMgbG9jayBpcyByZWxlYXNlZC5cbiAgICAgKi9cbiAgICBnZXQgZGVzaXJlZFNpemUoKSB7XG4gICAgICAgIGlmICghSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IGRlZmF1bHRXcml0ZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdkZXNpcmVkU2l6ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKCdkZXNpcmVkU2l6ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJHZXREZXNpcmVkU2l6ZSh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIGJlIGZ1bGZpbGxlZCB3aGVuIHRoZSBkZXNpcmVkIHNpemUgdG8gZmlsbCB0aGUgc3RyZWFt4oCZcyBpbnRlcm5hbCBxdWV1ZSB0cmFuc2l0aW9uc1xuICAgICAqIGZyb20gbm9uLXBvc2l0aXZlIHRvIHBvc2l0aXZlLCBzaWduYWxpbmcgdGhhdCBpdCBpcyBubyBsb25nZXIgYXBwbHlpbmcgYmFja3ByZXNzdXJlLiBPbmNlIHRoZSBkZXNpcmVkIHNpemUgZGlwc1xuICAgICAqIGJhY2sgdG8gemVybyBvciBiZWxvdywgdGhlIGdldHRlciB3aWxsIHJldHVybiBhIG5ldyBwcm9taXNlIHRoYXQgc3RheXMgcGVuZGluZyB1bnRpbCB0aGUgbmV4dCB0cmFuc2l0aW9uLlxuICAgICAqXG4gICAgICogSWYgdGhlIHN0cmVhbSBiZWNvbWVzIGVycm9yZWQgb3IgYWJvcnRlZCwgb3IgdGhlIHdyaXRlcuKAmXMgbG9jayBpcyByZWxlYXNlZCwgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZWNvbWVcbiAgICAgKiByZWplY3RlZC5cbiAgICAgKi9cbiAgICBnZXQgcmVhZHkoKSB7XG4gICAgICAgIGlmICghSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKGRlZmF1bHRXcml0ZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWFkeScpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcmVhZGVyIGlzIGFjdGl2ZSwgYmVoYXZlcyB0aGUgc2FtZSBhcyB7QGxpbmsgV3JpdGFibGVTdHJlYW0uYWJvcnQgfCBzdHJlYW0uYWJvcnQocmVhc29uKX0uXG4gICAgICovXG4gICAgYWJvcnQocmVhc29uID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKGRlZmF1bHRXcml0ZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdhYm9ydCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChkZWZhdWx0V3JpdGVyTG9ja0V4Y2VwdGlvbignYWJvcnQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckFib3J0KHRoaXMsIHJlYXNvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSByZWFkZXIgaXMgYWN0aXZlLCBiZWhhdmVzIHRoZSBzYW1lIGFzIHtAbGluayBXcml0YWJsZVN0cmVhbS5jbG9zZSB8IHN0cmVhbS5jbG9zZSgpfS5cbiAgICAgKi9cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKCFJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Nsb3NlJykpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgIGlmIChzdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ2Nsb3NlJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2xvc2UgYW4gYWxyZWFkeS1jbG9zaW5nIHN0cmVhbScpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2UodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbGVhc2VzIHRoZSB3cml0ZXLigJlzIGxvY2sgb24gdGhlIGNvcnJlc3BvbmRpbmcgc3RyZWFtLiBBZnRlciB0aGUgbG9jayBpcyByZWxlYXNlZCwgdGhlIHdyaXRlciBpcyBubyBsb25nZXIgYWN0aXZlLlxuICAgICAqIElmIHRoZSBhc3NvY2lhdGVkIHN0cmVhbSBpcyBlcnJvcmVkIHdoZW4gdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHRoZSB3cml0ZXIgd2lsbCBhcHBlYXIgZXJyb3JlZCBpbiB0aGUgc2FtZSB3YXkgZnJvbVxuICAgICAqIG5vdyBvbjsgb3RoZXJ3aXNlLCB0aGUgd3JpdGVyIHdpbGwgYXBwZWFyIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGUgbG9jayBjYW4gc3RpbGwgYmUgcmVsZWFzZWQgZXZlbiBpZiBzb21lIG9uZ29pbmcgd3JpdGVzIGhhdmUgbm90IHlldCBmaW5pc2hlZCAoaS5lLiBldmVuIGlmIHRoZVxuICAgICAqIHByb21pc2VzIHJldHVybmVkIGZyb20gcHJldmlvdXMgY2FsbHMgdG8ge0BsaW5rIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci53cml0ZSB8IHdyaXRlKCl9IGhhdmUgbm90IHlldCBzZXR0bGVkKS5cbiAgICAgKiBJdOKAmXMgbm90IG5lY2Vzc2FyeSB0byBob2xkIHRoZSBsb2NrIG9uIHRoZSB3cml0ZXIgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgd3JpdGU7IHRoZSBsb2NrIGluc3RlYWQgc2ltcGx5IHByZXZlbnRzXG4gICAgICogb3RoZXIgcHJvZHVjZXJzIGZyb20gd3JpdGluZyBpbiBhbiBpbnRlcmxlYXZlZCBtYW5uZXIuXG4gICAgICovXG4gICAgcmVsZWFzZUxvY2soKSB7XG4gICAgICAgIGlmICghSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IGRlZmF1bHRXcml0ZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWxlYXNlTG9jaycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgIGlmIChzdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UodGhpcyk7XG4gICAgfVxuICAgIHdyaXRlKGNodW5rID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKGRlZmF1bHRXcml0ZXJCcmFuZENoZWNrRXhjZXB0aW9uKCd3cml0ZScpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChkZWZhdWx0V3JpdGVyTG9ja0V4Y2VwdGlvbignd3JpdGUgdG8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlKHRoaXMsIGNodW5rKTtcbiAgICB9XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLCB7XG4gICAgYWJvcnQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGNsb3NlOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICByZWxlYXNlTG9jazogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgd3JpdGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGNsb3NlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgZGVzaXJlZFNpemU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIHJlYWR5OiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLCBTeW1ib2xQb2x5ZmlsbC50b1N0cmluZ1RhZywge1xuICAgICAgICB2YWx1ZTogJ1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcicsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuLy8gQWJzdHJhY3Qgb3BlcmF0aW9ucyBmb3IgdGhlIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5cbmZ1bmN0aW9uIElzV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHgpIHtcbiAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfb3duZXJXcml0YWJsZVN0cmVhbScpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI7XG59XG4vLyBBIGNsaWVudCBvZiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgbWF5IHVzZSB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHkgdG8gYnlwYXNzIHN0YXRlIGNoZWNrLlxuZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQWJvcnQod3JpdGVyLCByZWFzb24pIHtcbiAgICBjb25zdCBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtQWJvcnQoc3RyZWFtLCByZWFzb24pO1xufVxuZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2Uod3JpdGVyKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtO1xuICAgIHJldHVybiBXcml0YWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uKHdyaXRlcikge1xuICAgIGNvbnN0IHN0cmVhbSA9IHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbTtcbiAgICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG4gICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgfHwgc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2Uod3JpdGVyKTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZUNsb3NlZFByb21pc2VSZWplY3RlZCh3cml0ZXIsIGVycm9yKSB7XG4gICAgaWYgKHdyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZWplY3Qod3JpdGVyLCBlcnJvcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZCh3cml0ZXIsIGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVSZWFkeVByb21pc2VSZWplY3RlZCh3cml0ZXIsIGVycm9yKSB7XG4gICAgaWYgKHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPT09ICdwZW5kaW5nJykge1xuICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVqZWN0KHdyaXRlciwgZXJyb3IpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc2V0VG9SZWplY3RlZCh3cml0ZXIsIGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJHZXREZXNpcmVkU2l6ZSh3cml0ZXIpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yZWQnIHx8IHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyKTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2Uod3JpdGVyKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtO1xuICAgIGNvbnN0IHJlbGVhc2VkRXJyb3IgPSBuZXcgVHlwZUVycm9yKGBXcml0ZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtJ3MgY2xvc2VkbmVzc2ApO1xuICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZVJlYWR5UHJvbWlzZVJlamVjdGVkKHdyaXRlciwgcmVsZWFzZWRFcnJvcik7XG4gICAgLy8gVGhlIHN0YXRlIHRyYW5zaXRpb25zIHRvIFwiZXJyb3JlZFwiIGJlZm9yZSB0aGUgc2luayBhYm9ydCgpIG1ldGhvZCBydW5zLCBidXQgdGhlIHdyaXRlci5jbG9zZWQgcHJvbWlzZSBpcyBub3RcbiAgICAvLyByZWplY3RlZCB1bnRpbCBhZnRlcndhcmRzLiBUaGlzIG1lYW5zIHRoYXQgc2ltcGx5IHRlc3Rpbmcgc3RhdGUgd2lsbCBub3Qgd29yay5cbiAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVDbG9zZWRQcm9taXNlUmVqZWN0ZWQod3JpdGVyLCByZWxlYXNlZEVycm9yKTtcbiAgICBzdHJlYW0uX3dyaXRlciA9IHVuZGVmaW5lZDtcbiAgICB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW0gPSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZSh3cml0ZXIsIGNodW5rKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtO1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcjtcbiAgICBjb25zdCBjaHVua1NpemUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0Q2h1bmtTaXplKGNvbnRyb2xsZXIsIGNodW5rKTtcbiAgICBpZiAoc3RyZWFtICE9PSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ3dyaXRlIHRvJykpO1xuICAgIH1cbiAgICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG4gICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgfVxuICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pIHx8IHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzIGNsb3Npbmcgb3IgY2xvc2VkIGFuZCBjYW5ub3QgYmUgd3JpdHRlbiB0bycpKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCBwcm9taXNlID0gV3JpdGFibGVTdHJlYW1BZGRXcml0ZVJlcXVlc3Qoc3RyZWFtKTtcbiAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyV3JpdGUoY29udHJvbGxlciwgY2h1bmssIGNodW5rU2l6ZSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5jb25zdCBjbG9zZVNlbnRpbmVsID0ge307XG4vKipcbiAqIEFsbG93cyBjb250cm9sIG9mIGEge0BsaW5rIFdyaXRhYmxlU3RyZWFtIHwgd3JpdGFibGUgc3RyZWFtfSdzIHN0YXRlIGFuZCBpbnRlcm5hbCBxdWV1ZS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmNsYXNzIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZWFzb24gd2hpY2ggd2FzIHBhc3NlZCB0byBgV3JpdGFibGVTdHJlYW0uYWJvcnQocmVhc29uKWAgd2hlbiB0aGUgc3RyZWFtIHdhcyBhYm9ydGVkLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKiAgVGhpcyBwcm9wZXJ0eSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNwZWNpZmljYXRpb24sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3N0cmVhbXMvcHVsbC8xMTc3LlxuICAgICAqICBVc2Uge0BsaW5rIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuc2lnbmFsfSdzIGByZWFzb25gIGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IGFib3J0UmVhc29uKCkge1xuICAgICAgICBpZiAoIUlzV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uJDIoJ2Fib3J0UmVhc29uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fib3J0UmVhc29uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBgQWJvcnRTaWduYWxgIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWJvcnQgdGhlIHBlbmRpbmcgd3JpdGUgb3IgY2xvc2Ugb3BlcmF0aW9uIHdoZW4gdGhlIHN0cmVhbSBpcyBhYm9ydGVkLlxuICAgICAqL1xuICAgIGdldCBzaWduYWwoKSB7XG4gICAgICAgIGlmICghSXNXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24kMignc2lnbmFsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Fib3J0Q29udHJvbGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBPbGRlciBicm93c2VycyBvciBvbGRlciBOb2RlIHZlcnNpb25zIG1heSBub3Qgc3VwcG9ydCBgQWJvcnRDb250cm9sbGVyYCBvciBgQWJvcnRTaWduYWxgLlxuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBidW5kbGUgYW5kIHNoaXAgYW4gYEFib3J0Q29udHJvbGxlcmAgcG9seWZpbGwgdG9nZXRoZXIgd2l0aCBvdXIgcG9seWZpbGwsXG4gICAgICAgICAgICAvLyBzbyBpbnN0ZWFkIHdlIG9ubHkgaW1wbGVtZW50IHN1cHBvcnQgZm9yIGBzaWduYWxgIGlmIHdlIGZpbmQgYSBnbG9iYWwgYEFib3J0Q29udHJvbGxlcmAgY29uc3RydWN0b3IuXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS5zaWduYWwgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGNvbnRyb2xsZWQgd3JpdGFibGUgc3RyZWFtLCBtYWtpbmcgYWxsIGZ1dHVyZSBpbnRlcmFjdGlvbnMgd2l0aCBpdCBmYWlsIHdpdGggdGhlIGdpdmVuIGVycm9yIGBlYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHJhcmVseSB1c2VkLCBzaW5jZSB1c3VhbGx5IGl0IHN1ZmZpY2VzIHRvIHJldHVybiBhIHJlamVjdGVkIHByb21pc2UgZnJvbSBvbmUgb2YgdGhlIHVuZGVybHlpbmdcbiAgICAgKiBzaW5rJ3MgbWV0aG9kcy4gSG93ZXZlciwgaXQgY2FuIGJlIHVzZWZ1bCBmb3Igc3VkZGVubHkgc2h1dHRpbmcgZG93biBhIHN0cmVhbSBpbiByZXNwb25zZSB0byBhbiBldmVudCBvdXRzaWRlIHRoZVxuICAgICAqIG5vcm1hbCBsaWZlY3ljbGUgb2YgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgc2luay5cbiAgICAgKi9cbiAgICBlcnJvcihlID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghSXNXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24kMignZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbS5fc3RhdGU7XG4gICAgICAgIGlmIChzdGF0ZSAhPT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgLy8gVGhlIHN0cmVhbSBpcyBjbG9zZWQsIGVycm9yZWQgb3Igd2lsbCBiZSBzb29uLiBUaGUgc2luayBjYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaWYgaXQgZ2V0cyBhbiBlcnJvciBoZXJlLCBzb1xuICAgICAgICAgICAgLy8ganVzdCB0cmVhdCBpdCBhcyBhIG5vLW9wLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcih0aGlzLCBlKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIFtBYm9ydFN0ZXBzXShyZWFzb24pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fYWJvcnRBbGdvcml0aG0ocmVhc29uKTtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsZWFyQWxnb3JpdGhtcyh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIFtFcnJvclN0ZXBzXSgpIHtcbiAgICAgICAgUmVzZXRRdWV1ZSh0aGlzKTtcbiAgICB9XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSwge1xuICAgIGFib3J0UmVhc29uOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGVycm9yOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgdmFsdWU6ICdXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyJyxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG59XG4vLyBBYnN0cmFjdCBvcGVyYXRpb25zIGltcGxlbWVudGluZyBpbnRlcmZhY2UgcmVxdWlyZWQgYnkgdGhlIFdyaXRhYmxlU3RyZWFtLlxuZnVuY3Rpb24gSXNXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHgpIHtcbiAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4geCBpbnN0YW5jZW9mIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI7XG59XG5mdW5jdGlvbiBTZXRVcFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoc3RyZWFtLCBjb250cm9sbGVyLCBzdGFydEFsZ29yaXRobSwgd3JpdGVBbGdvcml0aG0sIGNsb3NlQWxnb3JpdGhtLCBhYm9ydEFsZ29yaXRobSwgaGlnaFdhdGVyTWFyaywgc2l6ZUFsZ29yaXRobSkge1xuICAgIGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgLy8gTmVlZCB0byBzZXQgdGhlIHNsb3RzIHNvIHRoYXQgdGhlIGFzc2VydCBkb2Vzbid0IGZpcmUuIEluIHRoZSBzcGVjIHRoZSBzbG90cyBhbHJlYWR5IGV4aXN0IGltcGxpY2l0bHkuXG4gICAgY29udHJvbGxlci5fcXVldWUgPSB1bmRlZmluZWQ7XG4gICAgY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPSB1bmRlZmluZWQ7XG4gICAgUmVzZXRRdWV1ZShjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLl9hYm9ydFJlYXNvbiA9IHVuZGVmaW5lZDtcbiAgICBjb250cm9sbGVyLl9hYm9ydENvbnRyb2xsZXIgPSBjcmVhdGVBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb250cm9sbGVyLl9zdGFydGVkID0gZmFsc2U7XG4gICAgY29udHJvbGxlci5fc3RyYXRlZ3lTaXplQWxnb3JpdGhtID0gc2l6ZUFsZ29yaXRobTtcbiAgICBjb250cm9sbGVyLl9zdHJhdGVneUhXTSA9IGhpZ2hXYXRlck1hcms7XG4gICAgY29udHJvbGxlci5fd3JpdGVBbGdvcml0aG0gPSB3cml0ZUFsZ29yaXRobTtcbiAgICBjb250cm9sbGVyLl9jbG9zZUFsZ29yaXRobSA9IGNsb3NlQWxnb3JpdGhtO1xuICAgIGNvbnRyb2xsZXIuX2Fib3J0QWxnb3JpdGhtID0gYWJvcnRBbGdvcml0aG07XG4gICAgY29uc3QgYmFja3ByZXNzdXJlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZShjb250cm9sbGVyKTtcbiAgICBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSk7XG4gICAgY29uc3Qgc3RhcnRSZXN1bHQgPSBzdGFydEFsZ29yaXRobSgpO1xuICAgIGNvbnN0IHN0YXJ0UHJvbWlzZSA9IHByb21pc2VSZXNvbHZlZFdpdGgoc3RhcnRSZXN1bHQpO1xuICAgIHVwb25Qcm9taXNlKHN0YXJ0UHJvbWlzZSwgKCkgPT4ge1xuICAgICAgICBjb250cm9sbGVyLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckFkdmFuY2VRdWV1ZUlmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgIH0sIHIgPT4ge1xuICAgICAgICBjb250cm9sbGVyLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1EZWFsV2l0aFJlamVjdGlvbihzdHJlYW0sIHIpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gU2V0VXBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRnJvbVVuZGVybHlpbmdTaW5rKHN0cmVhbSwgdW5kZXJseWluZ1NpbmssIGhpZ2hXYXRlck1hcmssIHNpemVBbGdvcml0aG0pIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gT2JqZWN0LmNyZWF0ZShXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSk7XG4gICAgbGV0IHN0YXJ0QWxnb3JpdGhtID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgIGxldCB3cml0ZUFsZ29yaXRobSA9ICgpID0+IHByb21pc2VSZXNvbHZlZFdpdGgodW5kZWZpbmVkKTtcbiAgICBsZXQgY2xvc2VBbGdvcml0aG0gPSAoKSA9PiBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG4gICAgbGV0IGFib3J0QWxnb3JpdGhtID0gKCkgPT4gcHJvbWlzZVJlc29sdmVkV2l0aCh1bmRlZmluZWQpO1xuICAgIGlmICh1bmRlcmx5aW5nU2luay5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN0YXJ0QWxnb3JpdGhtID0gKCkgPT4gdW5kZXJseWluZ1Npbmsuc3RhcnQoY29udHJvbGxlcik7XG4gICAgfVxuICAgIGlmICh1bmRlcmx5aW5nU2luay53cml0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHdyaXRlQWxnb3JpdGhtID0gY2h1bmsgPT4gdW5kZXJseWluZ1Npbmsud3JpdGUoY2h1bmssIGNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICBpZiAodW5kZXJseWluZ1NpbmsuY2xvc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbG9zZUFsZ29yaXRobSA9ICgpID0+IHVuZGVybHlpbmdTaW5rLmNsb3NlKCk7XG4gICAgfVxuICAgIGlmICh1bmRlcmx5aW5nU2luay5hYm9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFib3J0QWxnb3JpdGhtID0gcmVhc29uID0+IHVuZGVybHlpbmdTaW5rLmFib3J0KHJlYXNvbik7XG4gICAgfVxuICAgIFNldFVwV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcihzdHJlYW0sIGNvbnRyb2xsZXIsIHN0YXJ0QWxnb3JpdGhtLCB3cml0ZUFsZ29yaXRobSwgY2xvc2VBbGdvcml0aG0sIGFib3J0QWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrLCBzaXplQWxnb3JpdGhtKTtcbn1cbi8vIENsZWFyQWxnb3JpdGhtcyBtYXkgYmUgY2FsbGVkIHR3aWNlLiBFcnJvcmluZyB0aGUgc2FtZSBzdHJlYW0gaW4gbXVsdGlwbGUgd2F5cyB3aWxsIG9mdGVuIHJlc3VsdCBpbiByZWR1bmRhbnQgY2FsbHMuXG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xlYXJBbGdvcml0aG1zKGNvbnRyb2xsZXIpIHtcbiAgICBjb250cm9sbGVyLl93cml0ZUFsZ29yaXRobSA9IHVuZGVmaW5lZDtcbiAgICBjb250cm9sbGVyLl9jbG9zZUFsZ29yaXRobSA9IHVuZGVmaW5lZDtcbiAgICBjb250cm9sbGVyLl9hYm9ydEFsZ29yaXRobSA9IHVuZGVmaW5lZDtcbiAgICBjb250cm9sbGVyLl9zdHJhdGVneVNpemVBbGdvcml0aG0gPSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UoY29udHJvbGxlcikge1xuICAgIEVucXVldWVWYWx1ZVdpdGhTaXplKGNvbnRyb2xsZXIsIGNsb3NlU2VudGluZWwsIDApO1xuICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRDaHVua1NpemUoY29udHJvbGxlciwgY2h1bmspIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci5fc3RyYXRlZ3lTaXplQWxnb3JpdGhtKGNodW5rKTtcbiAgICB9XG4gICAgY2F0Y2ggKGNodW5rU2l6ZUUpIHtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgY2h1bmtTaXplRSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShjb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuX3N0cmF0ZWd5SFdNIC0gY29udHJvbGxlci5fcXVldWVUb3RhbFNpemU7XG59XG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyV3JpdGUoY29udHJvbGxlciwgY2h1bmssIGNodW5rU2l6ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIEVucXVldWVWYWx1ZVdpdGhTaXplKGNvbnRyb2xsZXIsIGNodW5rLCBjaHVua1NpemUpO1xuICAgIH1cbiAgICBjYXRjaCAoZW5xdWV1ZUUpIHtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZW5xdWV1ZUUpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcbiAgICBpZiAoIVdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgJiYgc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICBjb25zdCBiYWNrcHJlc3N1cmUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0QmFja3ByZXNzdXJlKGNvbnRyb2xsZXIpO1xuICAgICAgICBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSk7XG4gICAgfVxuICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKTtcbn1cbi8vIEFic3RyYWN0IG9wZXJhdGlvbnMgZm9yIHRoZSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLlxuZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckFkdmFuY2VRdWV1ZUlmTmVlZGVkKGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgaWYgKCFjb250cm9sbGVyLl9zdGFydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcbiAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmluZycpIHtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hFcnJvcmluZyhzdHJlYW0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IFBlZWtRdWV1ZVZhbHVlKGNvbnRyb2xsZXIpO1xuICAgIGlmICh2YWx1ZSA9PT0gY2xvc2VTZW50aW5lbCkge1xuICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyUHJvY2Vzc0Nsb3NlKGNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlclByb2Nlc3NXcml0ZShjb250cm9sbGVyLCB2YWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZXJyb3IpIHtcbiAgICBpZiAoY29udHJvbGxlci5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzQ2xvc2UoY29udHJvbGxlcikge1xuICAgIGNvbnN0IHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcbiAgICBXcml0YWJsZVN0cmVhbU1hcmtDbG9zZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pO1xuICAgIERlcXVldWVWYWx1ZShjb250cm9sbGVyKTtcbiAgICBjb25zdCBzaW5rQ2xvc2VQcm9taXNlID0gY29udHJvbGxlci5fY2xvc2VBbGdvcml0aG0oKTtcbiAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xlYXJBbGdvcml0aG1zKGNvbnRyb2xsZXIpO1xuICAgIHVwb25Qcm9taXNlKHNpbmtDbG9zZVByb21pc2UsICgpID0+IHtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodENsb3NlKHN0cmVhbSk7XG4gICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodENsb3NlV2l0aEVycm9yKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzV3JpdGUoY29udHJvbGxlciwgY2h1bmspIHtcbiAgICBjb25zdCBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgV3JpdGFibGVTdHJlYW1NYXJrRmlyc3RXcml0ZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pO1xuICAgIGNvbnN0IHNpbmtXcml0ZVByb21pc2UgPSBjb250cm9sbGVyLl93cml0ZUFsZ29yaXRobShjaHVuayk7XG4gICAgdXBvblByb21pc2Uoc2lua1dyaXRlUHJvbWlzZSwgKCkgPT4ge1xuICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0V3JpdGUoc3RyZWFtKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuICAgICAgICBEZXF1ZXVlVmFsdWUoY29udHJvbGxlcik7XG4gICAgICAgIGlmICghV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSAmJiBzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgY29uc3QgYmFja3ByZXNzdXJlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtVXBkYXRlQmFja3ByZXNzdXJlKHN0cmVhbSwgYmFja3ByZXNzdXJlKTtcbiAgICAgICAgfVxuICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQWR2YW5jZVF1ZXVlSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScpIHtcbiAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbGVhckFsZ29yaXRobXMoY29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodFdyaXRlV2l0aEVycm9yKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRCYWNrcHJlc3N1cmUoY29udHJvbGxlcikge1xuICAgIGNvbnN0IGRlc2lyZWRTaXplID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpO1xuICAgIHJldHVybiBkZXNpcmVkU2l6ZSA8PSAwO1xufVxuLy8gQSBjbGllbnQgb2YgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBtYXkgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSB0byBieXBhc3Mgc3RhdGUgY2hlY2suXG5mdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZXJyb3IpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsZWFyQWxnb3JpdGhtcyhjb250cm9sbGVyKTtcbiAgICBXcml0YWJsZVN0cmVhbVN0YXJ0RXJyb3Jpbmcoc3RyZWFtLCBlcnJvcik7XG59XG4vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgV3JpdGFibGVTdHJlYW0uXG5mdW5jdGlvbiBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uJDIobmFtZSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKGBXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuJHtuYW1lfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgV3JpdGFibGVTdHJlYW1gKTtcbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLlxuZnVuY3Rpb24gZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uJDIobmFtZSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKGBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS4ke25hbWV9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyYCk7XG59XG4vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLlxuZnVuY3Rpb24gZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKGBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLiR7bmFtZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcmApO1xufVxuZnVuY3Rpb24gZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24obmFtZSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdDYW5ub3QgJyArIG5hbWUgKyAnIGEgc3RyZWFtIHVzaW5nIGEgcmVsZWFzZWQgd3JpdGVyJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUod3JpdGVyKSB7XG4gICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlID0gbmV3UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPSAncGVuZGluZyc7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemVBc1JlamVjdGVkKHdyaXRlciwgcmVhc29uKSB7XG4gICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplKHdyaXRlcik7XG4gICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZWplY3Qod3JpdGVyLCByZWFzb24pO1xufVxuZnVuY3Rpb24gZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh3cml0ZXIpIHtcbiAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUod3JpdGVyKTtcbiAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc29sdmUod3JpdGVyKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVqZWN0KHdyaXRlciwgcmVhc29uKSB7XG4gICAgaWYgKHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFByb21pc2VJc0hhbmRsZWRUb1RydWUod3JpdGVyLl9jbG9zZWRQcm9taXNlKTtcbiAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0KHJlYXNvbik7XG4gICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZWplY3RlZCc7XG59XG5mdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZCh3cml0ZXIsIHJlYXNvbikge1xuICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQod3JpdGVyLCByZWFzb24pO1xufVxuZnVuY3Rpb24gZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZXNvbHZlKHdyaXRlcikge1xuICAgIGlmICh3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUodW5kZWZpbmVkKTtcbiAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlID0gJ3Jlc29sdmVkJztcbn1cbmZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplKHdyaXRlcikge1xuICAgIHdyaXRlci5fcmVhZHlQcm9taXNlID0gbmV3UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdwZW5kaW5nJztcbn1cbmZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh3cml0ZXIsIHJlYXNvbikge1xuICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplKHdyaXRlcik7XG4gICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlamVjdCh3cml0ZXIsIHJlYXNvbik7XG59XG5mdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQod3JpdGVyKSB7XG4gICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemUod3JpdGVyKTtcbiAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzb2x2ZSh3cml0ZXIpO1xufVxuZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlamVjdCh3cml0ZXIsIHJlYXNvbikge1xuICAgIGlmICh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFByb21pc2VJc0hhbmRsZWRUb1RydWUod3JpdGVyLl9yZWFkeVByb21pc2UpO1xuICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdChyZWFzb24pO1xuICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAncmVqZWN0ZWQnO1xufVxuZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc2V0KHdyaXRlcikge1xuICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplKHdyaXRlcik7XG59XG5mdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzZXRUb1JlamVjdGVkKHdyaXRlciwgcmVhc29uKSB7XG4gICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemVBc1JlamVjdGVkKHdyaXRlciwgcmVhc29uKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNvbHZlKHdyaXRlcikge1xuICAgIGlmICh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdmdWxmaWxsZWQnO1xufVxuXG4vLy8gPHJlZmVyZW5jZSBsaWI9XCJkb21cIiAvPlxuY29uc3QgTmF0aXZlRE9NRXhjZXB0aW9uID0gdHlwZW9mIERPTUV4Y2VwdGlvbiAhPT0gJ3VuZGVmaW5lZCcgPyBET01FeGNlcHRpb24gOiB1bmRlZmluZWQ7XG5cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwibm9kZVwiIC8+XG5mdW5jdGlvbiBpc0RPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yKGN0b3IpIHtcbiAgICBpZiAoISh0eXBlb2YgY3RvciA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgY3RvciA9PT0gJ29iamVjdCcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbmV3IGN0b3IoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChfYSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRE9NRXhjZXB0aW9uUG9seWZpbGwoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICAgIGNvbnN0IGN0b3IgPSBmdW5jdGlvbiBET01FeGNlcHRpb24obWVzc2FnZSwgbmFtZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lIHx8ICdFcnJvcic7XG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdG9yLnByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgeyB2YWx1ZTogY3Rvciwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gY3Rvcjtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbmNvbnN0IERPTUV4Y2VwdGlvbiQxID0gaXNET01FeGNlcHRpb25Db25zdHJ1Y3RvcihOYXRpdmVET01FeGNlcHRpb24pID8gTmF0aXZlRE9NRXhjZXB0aW9uIDogY3JlYXRlRE9NRXhjZXB0aW9uUG9seWZpbGwoKTtcblxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1QaXBlVG8oc291cmNlLCBkZXN0LCBwcmV2ZW50Q2xvc2UsIHByZXZlbnRBYm9ydCwgcHJldmVudENhbmNlbCwgc2lnbmFsKSB7XG4gICAgY29uc3QgcmVhZGVyID0gQWNxdWlyZVJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzb3VyY2UpO1xuICAgIGNvbnN0IHdyaXRlciA9IEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIoZGVzdCk7XG4gICAgc291cmNlLl9kaXN0dXJiZWQgPSB0cnVlO1xuICAgIGxldCBzaHV0dGluZ0Rvd24gPSBmYWxzZTtcbiAgICAvLyBUaGlzIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgc3BlYydzIHJlcXVpcmVtZW50IHRoYXQgd2Ugd2FpdCBmb3Igb25nb2luZyB3cml0ZXMgZHVyaW5nIHNodXRkb3duLlxuICAgIGxldCBjdXJyZW50V3JpdGUgPSBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG5ld1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgYWJvcnRBbGdvcml0aG07XG4gICAgICAgIGlmIChzaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWJvcnRBbGdvcml0aG0gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uJDEoJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZlbnRBYm9ydCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QuX3N0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtQWJvcnQoZGVzdCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlZFdpdGgodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcHJldmVudENhbmNlbCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5fc3RhdGUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1DYW5jZWwoc291cmNlLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmVkV2l0aCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2h1dGRvd25XaXRoQWN0aW9uKCgpID0+IFByb21pc2UuYWxsKGFjdGlvbnMubWFwKGFjdGlvbiA9PiBhY3Rpb24oKSkpLCB0cnVlLCBlcnJvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgYWJvcnRBbGdvcml0aG0oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFsZ29yaXRobSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXNpbmcgcmVhZGVyIGFuZCB3cml0ZXIsIHJlYWQgYWxsIGNodW5rcyBmcm9tIHRoaXMgYW5kIHdyaXRlIHRoZW0gdG8gZGVzdFxuICAgICAgICAvLyAtIEJhY2twcmVzc3VyZSBtdXN0IGJlIGVuZm9yY2VkXG4gICAgICAgIC8vIC0gU2h1dGRvd24gbXVzdCBzdG9wIGFsbCBhY3Rpdml0eVxuICAgICAgICBmdW5jdGlvbiBwaXBlTG9vcCgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXdQcm9taXNlKChyZXNvbHZlTG9vcCwgcmVqZWN0TG9vcCkgPT4ge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG5leHQoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUxvb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBgUGVyZm9ybVByb21pc2VUaGVuYCBpbnN0ZWFkIG9mIGB1cG9uUHJvbWlzZWAgdG8gYXZvaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZGluZyB1bm5lY2Vzc2FyeSBgLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbilgIGhhbmRsZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBQZXJmb3JtUHJvbWlzZVRoZW4ocGlwZVN0ZXAoKSwgbmV4dCwgcmVqZWN0TG9vcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwaXBlU3RlcCgpIHtcbiAgICAgICAgICAgIGlmIChzaHV0dGluZ0Rvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmVkV2l0aCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBQZXJmb3JtUHJvbWlzZVRoZW4od3JpdGVyLl9yZWFkeVByb21pc2UsICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3UHJvbWlzZSgocmVzb2x2ZVJlYWQsIHJlamVjdFJlYWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZChyZWFkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jaHVua1N0ZXBzOiBjaHVuayA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFdyaXRlID0gUGVyZm9ybVByb21pc2VUaGVuKFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlKHdyaXRlciwgY2h1bmspLCB1bmRlZmluZWQsIG5vb3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVSZWFkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VTdGVwczogKCkgPT4gcmVzb2x2ZVJlYWQodHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBfZXJyb3JTdGVwczogcmVqZWN0UmVhZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVycm9ycyBtdXN0IGJlIHByb3BhZ2F0ZWQgZm9yd2FyZFxuICAgICAgICBpc09yQmVjb21lc0Vycm9yZWQoc291cmNlLCByZWFkZXIuX2Nsb3NlZFByb21pc2UsIHN0b3JlZEVycm9yID0+IHtcbiAgICAgICAgICAgIGlmICghcHJldmVudEFib3J0KSB7XG4gICAgICAgICAgICAgICAgc2h1dGRvd25XaXRoQWN0aW9uKCgpID0+IFdyaXRhYmxlU3RyZWFtQWJvcnQoZGVzdCwgc3RvcmVkRXJyb3IpLCB0cnVlLCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaHV0ZG93bih0cnVlLCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBFcnJvcnMgbXVzdCBiZSBwcm9wYWdhdGVkIGJhY2t3YXJkXG4gICAgICAgIGlzT3JCZWNvbWVzRXJyb3JlZChkZXN0LCB3cml0ZXIuX2Nsb3NlZFByb21pc2UsIHN0b3JlZEVycm9yID0+IHtcbiAgICAgICAgICAgIGlmICghcHJldmVudENhbmNlbCkge1xuICAgICAgICAgICAgICAgIHNodXRkb3duV2l0aEFjdGlvbigoKSA9PiBSZWFkYWJsZVN0cmVhbUNhbmNlbChzb3VyY2UsIHN0b3JlZEVycm9yKSwgdHJ1ZSwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2h1dGRvd24odHJ1ZSwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ2xvc2luZyBtdXN0IGJlIHByb3BhZ2F0ZWQgZm9yd2FyZFxuICAgICAgICBpc09yQmVjb21lc0Nsb3NlZChzb3VyY2UsIHJlYWRlci5fY2xvc2VkUHJvbWlzZSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcmV2ZW50Q2xvc2UpIHtcbiAgICAgICAgICAgICAgICBzaHV0ZG93bldpdGhBY3Rpb24oKCkgPT4gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbih3cml0ZXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNodXRkb3duKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBDbG9zaW5nIG11c3QgYmUgcHJvcGFnYXRlZCBiYWNrd2FyZFxuICAgICAgICBpZiAoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoZGVzdCkgfHwgZGVzdC5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBkZXN0Q2xvc2VkID0gbmV3IFR5cGVFcnJvcigndGhlIGRlc3RpbmF0aW9uIHdyaXRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGFsbCBkYXRhIGNvdWxkIGJlIHBpcGVkIHRvIGl0Jyk7XG4gICAgICAgICAgICBpZiAoIXByZXZlbnRDYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBzaHV0ZG93bldpdGhBY3Rpb24oKCkgPT4gUmVhZGFibGVTdHJlYW1DYW5jZWwoc291cmNlLCBkZXN0Q2xvc2VkKSwgdHJ1ZSwgZGVzdENsb3NlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaHV0ZG93bih0cnVlLCBkZXN0Q2xvc2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRQcm9taXNlSXNIYW5kbGVkVG9UcnVlKHBpcGVMb29wKCkpO1xuICAgICAgICBmdW5jdGlvbiB3YWl0Rm9yV3JpdGVzVG9GaW5pc2goKSB7XG4gICAgICAgICAgICAvLyBBbm90aGVyIHdyaXRlIG1heSBoYXZlIHN0YXJ0ZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nIG9uIHRoaXMgY3VycmVudFdyaXRlLCBzbyB3ZSBoYXZlIHRvIGJlIHN1cmUgdG8gd2FpdFxuICAgICAgICAgICAgLy8gZm9yIHRoYXQgdG9vLlxuICAgICAgICAgICAgY29uc3Qgb2xkQ3VycmVudFdyaXRlID0gY3VycmVudFdyaXRlO1xuICAgICAgICAgICAgcmV0dXJuIFBlcmZvcm1Qcm9taXNlVGhlbihjdXJyZW50V3JpdGUsICgpID0+IG9sZEN1cnJlbnRXcml0ZSAhPT0gY3VycmVudFdyaXRlID8gd2FpdEZvcldyaXRlc1RvRmluaXNoKCkgOiB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzT3JCZWNvbWVzRXJyb3JlZChzdHJlYW0sIHByb21pc2UsIGFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgIGFjdGlvbihzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVwb25SZWplY3Rpb24ocHJvbWlzZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc09yQmVjb21lc0Nsb3NlZChzdHJlYW0sIHByb21pc2UsIGFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cG9uRnVsZmlsbG1lbnQocHJvbWlzZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzaHV0ZG93bldpdGhBY3Rpb24oYWN0aW9uLCBvcmlnaW5hbElzRXJyb3IsIG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChzaHV0dGluZ0Rvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaHV0dGluZ0Rvd24gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGRlc3QuX3N0YXRlID09PSAnd3JpdGFibGUnICYmICFXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChkZXN0KSkge1xuICAgICAgICAgICAgICAgIHVwb25GdWxmaWxsbWVudCh3YWl0Rm9yV3JpdGVzVG9GaW5pc2goKSwgZG9UaGVSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvVGhlUmVzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZG9UaGVSZXN0KCkge1xuICAgICAgICAgICAgICAgIHVwb25Qcm9taXNlKGFjdGlvbigpLCAoKSA9PiBmaW5hbGl6ZShvcmlnaW5hbElzRXJyb3IsIG9yaWdpbmFsRXJyb3IpLCBuZXdFcnJvciA9PiBmaW5hbGl6ZSh0cnVlLCBuZXdFcnJvcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNodXRkb3duKGlzRXJyb3IsIGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoc2h1dHRpbmdEb3duKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2h1dHRpbmdEb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChkZXN0Ll9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyAmJiAhV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoZGVzdCkpIHtcbiAgICAgICAgICAgICAgICB1cG9uRnVsZmlsbG1lbnQod2FpdEZvcldyaXRlc1RvRmluaXNoKCksICgpID0+IGZpbmFsaXplKGlzRXJyb3IsIGVycm9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZShpc0Vycm9yLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZmluYWxpemUoaXNFcnJvciwgZXJyb3IpIHtcbiAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2Uod3JpdGVyKTtcbiAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKTtcbiAgICAgICAgICAgIGlmIChzaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0QWxnb3JpdGhtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIEFsbG93cyBjb250cm9sIG9mIGEge0BsaW5rIFJlYWRhYmxlU3RyZWFtIHwgcmVhZGFibGUgc3RyZWFtfSdzIHN0YXRlIGFuZCBpbnRlcm5hbCBxdWV1ZS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmNsYXNzIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRlc2lyZWQgc2l6ZSB0byBmaWxsIHRoZSBjb250cm9sbGVkIHN0cmVhbSdzIGludGVybmFsIHF1ZXVlLiBJdCBjYW4gYmUgbmVnYXRpdmUsIGlmIHRoZSBxdWV1ZSBpc1xuICAgICAqIG92ZXItZnVsbC4gQW4gdW5kZXJseWluZyBzb3VyY2Ugb3VnaHQgdG8gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHdoZW4gYW5kIGhvdyB0byBhcHBseSBiYWNrcHJlc3N1cmUuXG4gICAgICovXG4gICAgZ2V0IGRlc2lyZWRTaXplKCkge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uJDEoJ2Rlc2lyZWRTaXplJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBjb250cm9sbGVkIHJlYWRhYmxlIHN0cmVhbS4gQ29uc3VtZXJzIHdpbGwgc3RpbGwgYmUgYWJsZSB0byByZWFkIGFueSBwcmV2aW91c2x5LWVucXVldWVkIGNodW5rcyBmcm9tXG4gICAgICogdGhlIHN0cmVhbSwgYnV0IG9uY2UgdGhvc2UgYXJlIHJlYWQsIHRoZSBzdHJlYW0gd2lsbCBiZWNvbWUgY2xvc2VkLlxuICAgICAqL1xuICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uJDEoJ2Nsb3NlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FuQ2xvc2VPckVucXVldWUodGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaXMgbm90IGluIGEgc3RhdGUgdGhhdCBwZXJtaXRzIGNsb3NlJyk7XG4gICAgICAgIH1cbiAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKHRoaXMpO1xuICAgIH1cbiAgICBlbnF1ZXVlKGNodW5rID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24kMSgnZW5xdWV1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbkNsb3NlT3JFbnF1ZXVlKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzIG5vdCBpbiBhIHN0YXRlIHRoYXQgcGVybWl0cyBlbnF1ZXVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlKHRoaXMsIGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXJyb3JzIHRoZSBjb250cm9sbGVkIHJlYWRhYmxlIHN0cmVhbSwgbWFraW5nIGFsbCBmdXR1cmUgaW50ZXJhY3Rpb25zIHdpdGggaXQgZmFpbCB3aXRoIHRoZSBnaXZlbiBlcnJvciBgZWAuXG4gICAgICovXG4gICAgZXJyb3IoZSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uJDEoJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKHRoaXMsIGUpO1xuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgW0NhbmNlbFN0ZXBzXShyZWFzb24pIHtcbiAgICAgICAgUmVzZXRRdWV1ZSh0aGlzKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fY2FuY2VsQWxnb3JpdGhtKHJlYXNvbik7XG4gICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbGVhckFsZ29yaXRobXModGhpcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBbUHVsbFN0ZXBzXShyZWFkUmVxdWVzdCkge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjaHVuayA9IERlcXVldWVWYWx1ZSh0aGlzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbG9zZVJlcXVlc3RlZCAmJiB0aGlzLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xlYXJBbGdvcml0aG1zKHRoaXMpO1xuICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtQ2xvc2Uoc3RyZWFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVhZFJlcXVlc3QuX2NodW5rU3RlcHMoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1BZGRSZWFkUmVxdWVzdChzdHJlYW0sIHJlYWRSZXF1ZXN0KTtcbiAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUsIHtcbiAgICBjbG9zZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgZW5xdWV1ZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgZXJyb3I6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGRlc2lyZWRTaXplOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgdmFsdWU6ICdSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyJyxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG59XG4vLyBBYnN0cmFjdCBvcGVyYXRpb25zIGZvciB0aGUgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5cbmZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih4KSB7XG4gICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbScpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyO1xufVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcikge1xuICAgIGNvbnN0IHNob3VsZFB1bGwgPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcik7XG4gICAgaWYgKCFzaG91bGRQdWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2xsZXIuX3B1bGxpbmcpIHtcbiAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250cm9sbGVyLl9wdWxsaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBwdWxsUHJvbWlzZSA9IGNvbnRyb2xsZXIuX3B1bGxBbGdvcml0aG0oKTtcbiAgICB1cG9uUHJvbWlzZShwdWxsUHJvbWlzZSwgKCkgPT4ge1xuICAgICAgICBjb250cm9sbGVyLl9wdWxsaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChjb250cm9sbGVyLl9wdWxsQWdhaW4pIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9IGZhbHNlO1xuICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICB9LCBlID0+IHtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlclNob3VsZENhbGxQdWxsKGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgaWYgKCFSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FuQ2xvc2VPckVucXVldWUoY29udHJvbGxlcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWNvbnRyb2xsZXIuX3N0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pICYmIFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzKHN0cmVhbSkgPiAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkZXNpcmVkU2l6ZSA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShjb250cm9sbGVyKTtcbiAgICBpZiAoZGVzaXJlZFNpemUgPiAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xlYXJBbGdvcml0aG1zKGNvbnRyb2xsZXIpIHtcbiAgICBjb250cm9sbGVyLl9wdWxsQWxnb3JpdGhtID0gdW5kZWZpbmVkO1xuICAgIGNvbnRyb2xsZXIuX2NhbmNlbEFsZ29yaXRobSA9IHVuZGVmaW5lZDtcbiAgICBjb250cm9sbGVyLl9zdHJhdGVneVNpemVBbGdvcml0aG0gPSB1bmRlZmluZWQ7XG59XG4vLyBBIGNsaWVudCBvZiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIG1heSB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5IHRvIGJ5cGFzcyBzdGF0ZSBjaGVjay5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShjb250cm9sbGVyKSB7XG4gICAgaWYgKCFSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FuQ2xvc2VPckVucXVldWUoY29udHJvbGxlcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsZWFyQWxnb3JpdGhtcyhjb250cm9sbGVyKTtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1DbG9zZShzdHJlYW0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlKGNvbnRyb2xsZXIsIGNodW5rKSB7XG4gICAgaWYgKCFSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FuQ2xvc2VPckVucXVldWUoY29udHJvbGxlcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSAmJiBSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRSZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICBSZWFkYWJsZVN0cmVhbUZ1bGZpbGxSZWFkUmVxdWVzdChzdHJlYW0sIGNodW5rLCBmYWxzZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgY2h1bmtTaXplO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2h1bmtTaXplID0gY29udHJvbGxlci5fc3RyYXRlZ3lTaXplQWxnb3JpdGhtKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoY2h1bmtTaXplRSkge1xuICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGNodW5rU2l6ZUUpO1xuICAgICAgICAgICAgdGhyb3cgY2h1bmtTaXplRTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgRW5xdWV1ZVZhbHVlV2l0aFNpemUoY29udHJvbGxlciwgY2h1bmssIGNodW5rU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVucXVldWVFKSB7XG4gICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZW5xdWV1ZUUpO1xuICAgICAgICAgICAgdGhyb3cgZW5xdWV1ZUU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG59XG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSkge1xuICAgIGNvbnN0IHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICBpZiAoc3RyZWFtLl9zdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIFJlc2V0UXVldWUoY29udHJvbGxlcik7XG4gICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsZWFyQWxnb3JpdGhtcyhjb250cm9sbGVyKTtcbiAgICBSZWFkYWJsZVN0cmVhbUVycm9yKHN0cmVhbSwgZSk7XG59XG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcikge1xuICAgIGNvbnN0IHN0YXRlID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZTtcbiAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuX3N0cmF0ZWd5SFdNIC0gY29udHJvbGxlci5fcXVldWVUb3RhbFNpemU7XG59XG4vLyBUaGlzIGlzIHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIFRyYW5zZm9ybVN0cmVhbS5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJIYXNCYWNrcHJlc3N1cmUoY29udHJvbGxlcikge1xuICAgIGlmIChSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYW5DbG9zZU9yRW5xdWV1ZShjb250cm9sbGVyKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO1xuICAgIGlmICghY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgJiYgc3RhdGUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIFNldFVwUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcihzdHJlYW0sIGNvbnRyb2xsZXIsIHN0YXJ0QWxnb3JpdGhtLCBwdWxsQWxnb3JpdGhtLCBjYW5jZWxBbGdvcml0aG0sIGhpZ2hXYXRlck1hcmssIHNpemVBbGdvcml0aG0pIHtcbiAgICBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0gPSBzdHJlYW07XG4gICAgY29udHJvbGxlci5fcXVldWUgPSB1bmRlZmluZWQ7XG4gICAgY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPSB1bmRlZmluZWQ7XG4gICAgUmVzZXRRdWV1ZShjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLl9zdGFydGVkID0gZmFsc2U7XG4gICAgY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICBjb250cm9sbGVyLl9wdWxsQWdhaW4gPSBmYWxzZTtcbiAgICBjb250cm9sbGVyLl9wdWxsaW5nID0gZmFsc2U7XG4gICAgY29udHJvbGxlci5fc3RyYXRlZ3lTaXplQWxnb3JpdGhtID0gc2l6ZUFsZ29yaXRobTtcbiAgICBjb250cm9sbGVyLl9zdHJhdGVneUhXTSA9IGhpZ2hXYXRlck1hcms7XG4gICAgY29udHJvbGxlci5fcHVsbEFsZ29yaXRobSA9IHB1bGxBbGdvcml0aG07XG4gICAgY29udHJvbGxlci5fY2FuY2VsQWxnb3JpdGhtID0gY2FuY2VsQWxnb3JpdGhtO1xuICAgIHN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICBjb25zdCBzdGFydFJlc3VsdCA9IHN0YXJ0QWxnb3JpdGhtKCk7XG4gICAgdXBvblByb21pc2UocHJvbWlzZVJlc29sdmVkV2l0aChzdGFydFJlc3VsdCksICgpID0+IHtcbiAgICAgICAgY29udHJvbGxlci5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgIH0sIHIgPT4ge1xuICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBTZXRVcFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJGcm9tVW5kZXJseWluZ1NvdXJjZShzdHJlYW0sIHVuZGVybHlpbmdTb3VyY2UsIGhpZ2hXYXRlck1hcmssIHNpemVBbGdvcml0aG0pIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gT2JqZWN0LmNyZWF0ZShSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSk7XG4gICAgbGV0IHN0YXJ0QWxnb3JpdGhtID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgIGxldCBwdWxsQWxnb3JpdGhtID0gKCkgPT4gcHJvbWlzZVJlc29sdmVkV2l0aCh1bmRlZmluZWQpO1xuICAgIGxldCBjYW5jZWxBbGdvcml0aG0gPSAoKSA9PiBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG4gICAgaWYgKHVuZGVybHlpbmdTb3VyY2Uuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGFydEFsZ29yaXRobSA9ICgpID0+IHVuZGVybHlpbmdTb3VyY2Uuc3RhcnQoY29udHJvbGxlcik7XG4gICAgfVxuICAgIGlmICh1bmRlcmx5aW5nU291cmNlLnB1bGwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwdWxsQWxnb3JpdGhtID0gKCkgPT4gdW5kZXJseWluZ1NvdXJjZS5wdWxsKGNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICBpZiAodW5kZXJseWluZ1NvdXJjZS5jYW5jZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYW5jZWxBbGdvcml0aG0gPSByZWFzb24gPT4gdW5kZXJseWluZ1NvdXJjZS5jYW5jZWwocmVhc29uKTtcbiAgICB9XG4gICAgU2V0VXBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHN0cmVhbSwgY29udHJvbGxlciwgc3RhcnRBbGdvcml0aG0sIHB1bGxBbGdvcml0aG0sIGNhbmNlbEFsZ29yaXRobSwgaGlnaFdhdGVyTWFyaywgc2l6ZUFsZ29yaXRobSk7XG59XG4vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5cbmZ1bmN0aW9uIGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbiQxKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuJHtuYW1lfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcmApO1xufVxuXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbVRlZShzdHJlYW0sIGNsb25lRm9yQnJhbmNoMikge1xuICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpKSB7XG4gICAgICAgIHJldHVybiBSZWFkYWJsZUJ5dGVTdHJlYW1UZWUoc3RyZWFtKTtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFRlZShzdHJlYW0pO1xufVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0VGVlKHN0cmVhbSwgY2xvbmVGb3JCcmFuY2gyKSB7XG4gICAgY29uc3QgcmVhZGVyID0gQWNxdWlyZVJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0pO1xuICAgIGxldCByZWFkaW5nID0gZmFsc2U7XG4gICAgbGV0IHJlYWRBZ2FpbiA9IGZhbHNlO1xuICAgIGxldCBjYW5jZWxlZDEgPSBmYWxzZTtcbiAgICBsZXQgY2FuY2VsZWQyID0gZmFsc2U7XG4gICAgbGV0IHJlYXNvbjE7XG4gICAgbGV0IHJlYXNvbjI7XG4gICAgbGV0IGJyYW5jaDE7XG4gICAgbGV0IGJyYW5jaDI7XG4gICAgbGV0IHJlc29sdmVDYW5jZWxQcm9taXNlO1xuICAgIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXdQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlQ2FuY2VsUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gcHVsbEFsZ29yaXRobSgpIHtcbiAgICAgICAgaWYgKHJlYWRpbmcpIHtcbiAgICAgICAgICAgIHJlYWRBZ2FpbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmVkV2l0aCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJlYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCByZWFkUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIF9jaHVua1N0ZXBzOiBjaHVuayA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBkZWxheWVkIGEgbWljcm90YXNrIGJlY2F1c2UgaXQgdGFrZXMgYXQgbGVhc3QgYSBtaWNyb3Rhc2sgdG8gZGV0ZWN0IGVycm9ycyAodXNpbmdcbiAgICAgICAgICAgICAgICAvLyByZWFkZXIuX2Nsb3NlZFByb21pc2UgYmVsb3cpLCBhbmQgd2Ugd2FudCBlcnJvcnMgaW4gc3RyZWFtIHRvIGVycm9yIGJvdGggYnJhbmNoZXMgaW1tZWRpYXRlbHkuIFdlIGNhbm5vdCBsZXRcbiAgICAgICAgICAgICAgICAvLyBzdWNjZXNzZnVsIHN5bmNocm9ub3VzbHktYXZhaWxhYmxlIHJlYWRzIGdldCBhaGVhZCBvZiBhc3luY2hyb25vdXNseS1hdmFpbGFibGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVhZEFnYWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rMSA9IGNodW5rO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVuazIgPSBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gd2F5IHRvIGFjY2VzcyB0aGUgY2xvbmluZyBjb2RlIHJpZ2h0IG5vdyBpbiB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhZGQgb25lIHRoZW4gd2UnbGwgbmVlZCBhbiBpbXBsZW1lbnRhdGlvbiBmb3Igc2VyaWFsaXphYmxlIG9iamVjdHMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmICghY2FuY2VsZWQyICYmIGNsb25lRm9yQnJhbmNoMikge1xuICAgICAgICAgICAgICAgICAgICAvLyAgIGNodW5rMiA9IFN0cnVjdHVyZWREZXNlcmlhbGl6ZShTdHJ1Y3R1cmVkU2VyaWFsaXplKGNodW5rMikpO1xuICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuY2VsZWQxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShicmFuY2gxLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsIGNodW5rMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxlZDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlKGJyYW5jaDIuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciwgY2h1bmsyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWFkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkQWdhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxBbGdvcml0aG0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9jbG9zZVN0ZXBzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVhZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghY2FuY2VsZWQxKSB7XG4gICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShicmFuY2gxLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGVkMikge1xuICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UoYnJhbmNoMi5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxlZDEgfHwgIWNhbmNlbGVkMikge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FuY2VsUHJvbWlzZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfZXJyb3JTdGVwczogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZChyZWFkZXIsIHJlYWRSZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlZFdpdGgodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuY2VsMUFsZ29yaXRobShyZWFzb24pIHtcbiAgICAgICAgY2FuY2VsZWQxID0gdHJ1ZTtcbiAgICAgICAgcmVhc29uMSA9IHJlYXNvbjtcbiAgICAgICAgaWYgKGNhbmNlbGVkMikge1xuICAgICAgICAgICAgY29uc3QgY29tcG9zaXRlUmVhc29uID0gQ3JlYXRlQXJyYXlGcm9tTGlzdChbcmVhc29uMSwgcmVhc29uMl0pO1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsUmVzdWx0ID0gUmVhZGFibGVTdHJlYW1DYW5jZWwoc3RyZWFtLCBjb21wb3NpdGVSZWFzb24pO1xuICAgICAgICAgICAgcmVzb2x2ZUNhbmNlbFByb21pc2UoY2FuY2VsUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuY2VsUHJvbWlzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuY2VsMkFsZ29yaXRobShyZWFzb24pIHtcbiAgICAgICAgY2FuY2VsZWQyID0gdHJ1ZTtcbiAgICAgICAgcmVhc29uMiA9IHJlYXNvbjtcbiAgICAgICAgaWYgKGNhbmNlbGVkMSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9zaXRlUmVhc29uID0gQ3JlYXRlQXJyYXlGcm9tTGlzdChbcmVhc29uMSwgcmVhc29uMl0pO1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsUmVzdWx0ID0gUmVhZGFibGVTdHJlYW1DYW5jZWwoc3RyZWFtLCBjb21wb3NpdGVSZWFzb24pO1xuICAgICAgICAgICAgcmVzb2x2ZUNhbmNlbFByb21pc2UoY2FuY2VsUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuY2VsUHJvbWlzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRBbGdvcml0aG0oKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgYnJhbmNoMSA9IENyZWF0ZVJlYWRhYmxlU3RyZWFtKHN0YXJ0QWxnb3JpdGhtLCBwdWxsQWxnb3JpdGhtLCBjYW5jZWwxQWxnb3JpdGhtKTtcbiAgICBicmFuY2gyID0gQ3JlYXRlUmVhZGFibGVTdHJlYW0oc3RhcnRBbGdvcml0aG0sIHB1bGxBbGdvcml0aG0sIGNhbmNlbDJBbGdvcml0aG0pO1xuICAgIHVwb25SZWplY3Rpb24ocmVhZGVyLl9jbG9zZWRQcm9taXNlLCAocikgPT4ge1xuICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoYnJhbmNoMS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLCByKTtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGJyYW5jaDIuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciwgcik7XG4gICAgICAgIGlmICghY2FuY2VsZWQxIHx8ICFjYW5jZWxlZDIpIHtcbiAgICAgICAgICAgIHJlc29sdmVDYW5jZWxQcm9taXNlKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW2JyYW5jaDEsIGJyYW5jaDJdO1xufVxuZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtVGVlKHN0cmVhbSkge1xuICAgIGxldCByZWFkZXIgPSBBY3F1aXJlUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHN0cmVhbSk7XG4gICAgbGV0IHJlYWRpbmcgPSBmYWxzZTtcbiAgICBsZXQgcmVhZEFnYWluRm9yQnJhbmNoMSA9IGZhbHNlO1xuICAgIGxldCByZWFkQWdhaW5Gb3JCcmFuY2gyID0gZmFsc2U7XG4gICAgbGV0IGNhbmNlbGVkMSA9IGZhbHNlO1xuICAgIGxldCBjYW5jZWxlZDIgPSBmYWxzZTtcbiAgICBsZXQgcmVhc29uMTtcbiAgICBsZXQgcmVhc29uMjtcbiAgICBsZXQgYnJhbmNoMTtcbiAgICBsZXQgYnJhbmNoMjtcbiAgICBsZXQgcmVzb2x2ZUNhbmNlbFByb21pc2U7XG4gICAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IG5ld1Byb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHJlc29sdmVDYW5jZWxQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBmb3J3YXJkUmVhZGVyRXJyb3IodGhpc1JlYWRlcikge1xuICAgICAgICB1cG9uUmVqZWN0aW9uKHRoaXNSZWFkZXIuX2Nsb3NlZFByb21pc2UsIHIgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXNSZWFkZXIgIT09IHJlYWRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcihicmFuY2gxLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsIHIpO1xuICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKGJyYW5jaDIuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciwgcik7XG4gICAgICAgICAgICBpZiAoIWNhbmNlbGVkMSB8fCAhY2FuY2VsZWQyKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZUNhbmNlbFByb21pc2UodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1bGxXaXRoRGVmYXVsdFJlYWRlcigpIHtcbiAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHJlYWRlcikpIHtcbiAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKTtcbiAgICAgICAgICAgIHJlYWRlciA9IEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoc3RyZWFtKTtcbiAgICAgICAgICAgIGZvcndhcmRSZWFkZXJFcnJvcihyZWFkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlYWRSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgX2NodW5rU3RlcHM6IGNodW5rID0+IHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGRlbGF5ZWQgYSBtaWNyb3Rhc2sgYmVjYXVzZSBpdCB0YWtlcyBhdCBsZWFzdCBhIG1pY3JvdGFzayB0byBkZXRlY3QgZXJyb3JzICh1c2luZ1xuICAgICAgICAgICAgICAgIC8vIHJlYWRlci5fY2xvc2VkUHJvbWlzZSBiZWxvdyksIGFuZCB3ZSB3YW50IGVycm9ycyBpbiBzdHJlYW0gdG8gZXJyb3IgYm90aCBicmFuY2hlcyBpbW1lZGlhdGVseS4gV2UgY2Fubm90IGxldFxuICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3NmdWwgc3luY2hyb25vdXNseS1hdmFpbGFibGUgcmVhZHMgZ2V0IGFoZWFkIG9mIGFzeW5jaHJvbm91c2x5LWF2YWlsYWJsZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWFkQWdhaW5Gb3JCcmFuY2gxID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRBZ2FpbkZvckJyYW5jaDIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsxID0gY2h1bms7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaHVuazIgPSBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxlZDEgJiYgIWNhbmNlbGVkMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazIgPSBDbG9uZUFzVWludDhBcnJheShjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoY2xvbmVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKGJyYW5jaDEuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciwgY2xvbmVFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoYnJhbmNoMi5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLCBjbG9uZUUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVDYW5jZWxQcm9taXNlKFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgY2xvbmVFKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuY2VsZWQxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZShicmFuY2gxLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsIGNodW5rMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxlZDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlKGJyYW5jaDIuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciwgY2h1bmsyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWFkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkQWdhaW5Gb3JCcmFuY2gxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsMUFsZ29yaXRobSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYWRBZ2FpbkZvckJyYW5jaDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGwyQWxnb3JpdGhtKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfY2xvc2VTdGVwczogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGVkMSkge1xuICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xvc2UoYnJhbmNoMS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxlZDIpIHtcbiAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsb3NlKGJyYW5jaDIuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChicmFuY2gxLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZChicmFuY2gxLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYnJhbmNoMi5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmQoYnJhbmNoMi5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxlZDEgfHwgIWNhbmNlbGVkMikge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FuY2VsUHJvbWlzZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfZXJyb3JTdGVwczogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZChyZWFkZXIsIHJlYWRSZXF1ZXN0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVsbFdpdGhCWU9CUmVhZGVyKHZpZXcsIGZvckJyYW5jaDIpIHtcbiAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHJlYWRlcikpIHtcbiAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKTtcbiAgICAgICAgICAgIHJlYWRlciA9IEFjcXVpcmVSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoc3RyZWFtKTtcbiAgICAgICAgICAgIGZvcndhcmRSZWFkZXJFcnJvcihyZWFkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ5b2JCcmFuY2ggPSBmb3JCcmFuY2gyID8gYnJhbmNoMiA6IGJyYW5jaDE7XG4gICAgICAgIGNvbnN0IG90aGVyQnJhbmNoID0gZm9yQnJhbmNoMiA/IGJyYW5jaDEgOiBicmFuY2gyO1xuICAgICAgICBjb25zdCByZWFkSW50b1JlcXVlc3QgPSB7XG4gICAgICAgICAgICBfY2h1bmtTdGVwczogY2h1bmsgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZGVsYXllZCBhIG1pY3JvdGFzayBiZWNhdXNlIGl0IHRha2VzIGF0IGxlYXN0IGEgbWljcm90YXNrIHRvIGRldGVjdCBlcnJvcnMgKHVzaW5nXG4gICAgICAgICAgICAgICAgLy8gcmVhZGVyLl9jbG9zZWRQcm9taXNlIGJlbG93KSwgYW5kIHdlIHdhbnQgZXJyb3JzIGluIHN0cmVhbSB0byBlcnJvciBib3RoIGJyYW5jaGVzIGltbWVkaWF0ZWx5LiBXZSBjYW5ub3QgbGV0XG4gICAgICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bCBzeW5jaHJvbm91c2x5LWF2YWlsYWJsZSByZWFkcyBnZXQgYWhlYWQgb2YgYXN5bmNocm9ub3VzbHktYXZhaWxhYmxlIGVycm9ycy5cbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRBZ2FpbkZvckJyYW5jaDEgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmVhZEFnYWluRm9yQnJhbmNoMiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBieW9iQ2FuY2VsZWQgPSBmb3JCcmFuY2gyID8gY2FuY2VsZWQyIDogY2FuY2VsZWQxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdGhlckNhbmNlbGVkID0gZm9yQnJhbmNoMiA/IGNhbmNlbGVkMSA6IGNhbmNlbGVkMjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvdGhlckNhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2xvbmVkQ2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lZENodW5rID0gQ2xvbmVBc1VpbnQ4QXJyYXkoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGNsb25lRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcihieW9iQnJhbmNoLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsIGNsb25lRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKG90aGVyQnJhbmNoLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsIGNsb25lRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNhbmNlbFByb21pc2UoUmVhZGFibGVTdHJlYW1DYW5jZWwoc3RyZWFtLCBjbG9uZUUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJ5b2JDYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kV2l0aE5ld1ZpZXcoYnlvYkJyYW5jaC5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZShvdGhlckJyYW5jaC5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLCBjbG9uZWRDaHVuayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWJ5b2JDYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRXaXRoTmV3VmlldyhieW9iQnJhbmNoLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWFkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkQWdhaW5Gb3JCcmFuY2gxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsMUFsZ29yaXRobSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYWRBZ2FpbkZvckJyYW5jaDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGwyQWxnb3JpdGhtKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfY2xvc2VTdGVwczogY2h1bmsgPT4ge1xuICAgICAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBieW9iQ2FuY2VsZWQgPSBmb3JCcmFuY2gyID8gY2FuY2VsZWQyIDogY2FuY2VsZWQxO1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyQ2FuY2VsZWQgPSBmb3JCcmFuY2gyID8gY2FuY2VsZWQxIDogY2FuY2VsZWQyO1xuICAgICAgICAgICAgICAgIGlmICghYnlvYkNhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbG9zZShieW9iQnJhbmNoLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW90aGVyQ2FuY2VsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsb3NlKG90aGVyQnJhbmNoLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJ5b2JDYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRXaXRoTmV3VmlldyhieW9iQnJhbmNoLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyQ2FuY2VsZWQgJiYgb3RoZXJCcmFuY2guX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZChvdGhlckJyYW5jaC5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWJ5b2JDYW5jZWxlZCB8fCAhb3RoZXJDYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FuY2VsUHJvbWlzZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfZXJyb3JTdGVwczogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyUmVhZChyZWFkZXIsIHZpZXcsIHJlYWRJbnRvUmVxdWVzdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1bGwxQWxnb3JpdGhtKCkge1xuICAgICAgICBpZiAocmVhZGluZykge1xuICAgICAgICAgICAgcmVhZEFnYWluRm9yQnJhbmNoMSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmVkV2l0aCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJlYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBieW9iUmVxdWVzdCA9IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJHZXRCWU9CUmVxdWVzdChicmFuY2gxLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpO1xuICAgICAgICBpZiAoYnlvYlJlcXVlc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHB1bGxXaXRoRGVmYXVsdFJlYWRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHVsbFdpdGhCWU9CUmVhZGVyKGJ5b2JSZXF1ZXN0Ll92aWV3LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlZFdpdGgodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVsbDJBbGdvcml0aG0oKSB7XG4gICAgICAgIGlmIChyZWFkaW5nKSB7XG4gICAgICAgICAgICByZWFkQWdhaW5Gb3JCcmFuY2gyID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGJ5b2JSZXF1ZXN0ID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckdldEJZT0JSZXF1ZXN0KGJyYW5jaDIuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcik7XG4gICAgICAgIGlmIChieW9iUmVxdWVzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcHVsbFdpdGhEZWZhdWx0UmVhZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwdWxsV2l0aEJZT0JSZWFkZXIoYnlvYlJlcXVlc3QuX3ZpZXcsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbmNlbDFBbGdvcml0aG0ocmVhc29uKSB7XG4gICAgICAgIGNhbmNlbGVkMSA9IHRydWU7XG4gICAgICAgIHJlYXNvbjEgPSByZWFzb247XG4gICAgICAgIGlmIChjYW5jZWxlZDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvc2l0ZVJlYXNvbiA9IENyZWF0ZUFycmF5RnJvbUxpc3QoW3JlYXNvbjEsIHJlYXNvbjJdKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbFJlc3VsdCA9IFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgY29tcG9zaXRlUmVhc29uKTtcbiAgICAgICAgICAgIHJlc29sdmVDYW5jZWxQcm9taXNlKGNhbmNlbFJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmNlbFByb21pc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbmNlbDJBbGdvcml0aG0ocmVhc29uKSB7XG4gICAgICAgIGNhbmNlbGVkMiA9IHRydWU7XG4gICAgICAgIHJlYXNvbjIgPSByZWFzb247XG4gICAgICAgIGlmIChjYW5jZWxlZDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvc2l0ZVJlYXNvbiA9IENyZWF0ZUFycmF5RnJvbUxpc3QoW3JlYXNvbjEsIHJlYXNvbjJdKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbFJlc3VsdCA9IFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgY29tcG9zaXRlUmVhc29uKTtcbiAgICAgICAgICAgIHJlc29sdmVDYW5jZWxQcm9taXNlKGNhbmNlbFJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmNlbFByb21pc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0QWxnb3JpdGhtKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGJyYW5jaDEgPSBDcmVhdGVSZWFkYWJsZUJ5dGVTdHJlYW0oc3RhcnRBbGdvcml0aG0sIHB1bGwxQWxnb3JpdGhtLCBjYW5jZWwxQWxnb3JpdGhtKTtcbiAgICBicmFuY2gyID0gQ3JlYXRlUmVhZGFibGVCeXRlU3RyZWFtKHN0YXJ0QWxnb3JpdGhtLCBwdWxsMkFsZ29yaXRobSwgY2FuY2VsMkFsZ29yaXRobSk7XG4gICAgZm9yd2FyZFJlYWRlckVycm9yKHJlYWRlcik7XG4gICAgcmV0dXJuIFticmFuY2gxLCBicmFuY2gyXTtcbn1cblxuZnVuY3Rpb24gY29udmVydFVuZGVybHlpbmdEZWZhdWx0T3JCeXRlU291cmNlKHNvdXJjZSwgY29udGV4dCkge1xuICAgIGFzc2VydERpY3Rpb25hcnkoc291cmNlLCBjb250ZXh0KTtcbiAgICBjb25zdCBvcmlnaW5hbCA9IHNvdXJjZTtcbiAgICBjb25zdCBhdXRvQWxsb2NhdGVDaHVua1NpemUgPSBvcmlnaW5hbCA9PT0gbnVsbCB8fCBvcmlnaW5hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luYWwuYXV0b0FsbG9jYXRlQ2h1bmtTaXplO1xuICAgIGNvbnN0IGNhbmNlbCA9IG9yaWdpbmFsID09PSBudWxsIHx8IG9yaWdpbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5hbC5jYW5jZWw7XG4gICAgY29uc3QgcHVsbCA9IG9yaWdpbmFsID09PSBudWxsIHx8IG9yaWdpbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5hbC5wdWxsO1xuICAgIGNvbnN0IHN0YXJ0ID0gb3JpZ2luYWwgPT09IG51bGwgfHwgb3JpZ2luYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbmFsLnN0YXJ0O1xuICAgIGNvbnN0IHR5cGUgPSBvcmlnaW5hbCA9PT0gbnVsbCB8fCBvcmlnaW5hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luYWwudHlwZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhdXRvQWxsb2NhdGVDaHVua1NpemU6IGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHVuZGVmaW5lZCA6XG4gICAgICAgICAgICBjb252ZXJ0VW5zaWduZWRMb25nTG9uZ1dpdGhFbmZvcmNlUmFuZ2UoYXV0b0FsbG9jYXRlQ2h1bmtTaXplLCBgJHtjb250ZXh0fSBoYXMgbWVtYmVyICdhdXRvQWxsb2NhdGVDaHVua1NpemUnIHRoYXRgKSxcbiAgICAgICAgY2FuY2VsOiBjYW5jZWwgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB1bmRlZmluZWQgOlxuICAgICAgICAgICAgY29udmVydFVuZGVybHlpbmdTb3VyY2VDYW5jZWxDYWxsYmFjayhjYW5jZWwsIG9yaWdpbmFsLCBgJHtjb250ZXh0fSBoYXMgbWVtYmVyICdjYW5jZWwnIHRoYXRgKSxcbiAgICAgICAgcHVsbDogcHVsbCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHVuZGVmaW5lZCA6XG4gICAgICAgICAgICBjb252ZXJ0VW5kZXJseWluZ1NvdXJjZVB1bGxDYWxsYmFjayhwdWxsLCBvcmlnaW5hbCwgYCR7Y29udGV4dH0gaGFzIG1lbWJlciAncHVsbCcgdGhhdGApLFxuICAgICAgICBzdGFydDogc3RhcnQgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB1bmRlZmluZWQgOlxuICAgICAgICAgICAgY29udmVydFVuZGVybHlpbmdTb3VyY2VTdGFydENhbGxiYWNrKHN0YXJ0LCBvcmlnaW5hbCwgYCR7Y29udGV4dH0gaGFzIG1lbWJlciAnc3RhcnQnIHRoYXRgKSxcbiAgICAgICAgdHlwZTogdHlwZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY29udmVydFJlYWRhYmxlU3RyZWFtVHlwZSh0eXBlLCBgJHtjb250ZXh0fSBoYXMgbWVtYmVyICd0eXBlJyB0aGF0YClcbiAgICB9O1xufVxuZnVuY3Rpb24gY29udmVydFVuZGVybHlpbmdTb3VyY2VDYW5jZWxDYWxsYmFjayhmbiwgb3JpZ2luYWwsIGNvbnRleHQpIHtcbiAgICBhc3NlcnRGdW5jdGlvbihmbiwgY29udGV4dCk7XG4gICAgcmV0dXJuIChyZWFzb24pID0+IHByb21pc2VDYWxsKGZuLCBvcmlnaW5hbCwgW3JlYXNvbl0pO1xufVxuZnVuY3Rpb24gY29udmVydFVuZGVybHlpbmdTb3VyY2VQdWxsQ2FsbGJhY2soZm4sIG9yaWdpbmFsLCBjb250ZXh0KSB7XG4gICAgYXNzZXJ0RnVuY3Rpb24oZm4sIGNvbnRleHQpO1xuICAgIHJldHVybiAoY29udHJvbGxlcikgPT4gcHJvbWlzZUNhbGwoZm4sIG9yaWdpbmFsLCBbY29udHJvbGxlcl0pO1xufVxuZnVuY3Rpb24gY29udmVydFVuZGVybHlpbmdTb3VyY2VTdGFydENhbGxiYWNrKGZuLCBvcmlnaW5hbCwgY29udGV4dCkge1xuICAgIGFzc2VydEZ1bmN0aW9uKGZuLCBjb250ZXh0KTtcbiAgICByZXR1cm4gKGNvbnRyb2xsZXIpID0+IHJlZmxlY3RDYWxsKGZuLCBvcmlnaW5hbCwgW2NvbnRyb2xsZXJdKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRSZWFkYWJsZVN0cmVhbVR5cGUodHlwZSwgY29udGV4dCkge1xuICAgIHR5cGUgPSBgJHt0eXBlfWA7XG4gICAgaWYgKHR5cGUgIT09ICdieXRlcycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtjb250ZXh0fSAnJHt0eXBlfScgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRpb24gdmFsdWUgZm9yIFJlYWRhYmxlU3RyZWFtVHlwZWApO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZTtcbn1cblxuZnVuY3Rpb24gY29udmVydFJlYWRlck9wdGlvbnMob3B0aW9ucywgY29udGV4dCkge1xuICAgIGFzc2VydERpY3Rpb25hcnkob3B0aW9ucywgY29udGV4dCk7XG4gICAgY29uc3QgbW9kZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tb2RlO1xuICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IG1vZGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNvbnZlcnRSZWFkYWJsZVN0cmVhbVJlYWRlck1vZGUobW9kZSwgYCR7Y29udGV4dH0gaGFzIG1lbWJlciAnbW9kZScgdGhhdGApXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRSZWFkYWJsZVN0cmVhbVJlYWRlck1vZGUobW9kZSwgY29udGV4dCkge1xuICAgIG1vZGUgPSBgJHttb2RlfWA7XG4gICAgaWYgKG1vZGUgIT09ICdieW9iJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2NvbnRleHR9ICcke21vZGV9JyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdGlvbiB2YWx1ZSBmb3IgUmVhZGFibGVTdHJlYW1SZWFkZXJNb2RlYCk7XG4gICAgfVxuICAgIHJldHVybiBtb2RlO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0SXRlcmF0b3JPcHRpb25zKG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICBhc3NlcnREaWN0aW9uYXJ5KG9wdGlvbnMsIGNvbnRleHQpO1xuICAgIGNvbnN0IHByZXZlbnRDYW5jZWwgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJldmVudENhbmNlbDtcbiAgICByZXR1cm4geyBwcmV2ZW50Q2FuY2VsOiBCb29sZWFuKHByZXZlbnRDYW5jZWwpIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQaXBlT3B0aW9ucyhvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgYXNzZXJ0RGljdGlvbmFyeShvcHRpb25zLCBjb250ZXh0KTtcbiAgICBjb25zdCBwcmV2ZW50QWJvcnQgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJldmVudEFib3J0O1xuICAgIGNvbnN0IHByZXZlbnRDYW5jZWwgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJldmVudENhbmNlbDtcbiAgICBjb25zdCBwcmV2ZW50Q2xvc2UgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJldmVudENsb3NlO1xuICAgIGNvbnN0IHNpZ25hbCA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduYWw7XG4gICAgaWYgKHNpZ25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFzc2VydEFib3J0U2lnbmFsKHNpZ25hbCwgYCR7Y29udGV4dH0gaGFzIG1lbWJlciAnc2lnbmFsJyB0aGF0YCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHByZXZlbnRBYm9ydDogQm9vbGVhbihwcmV2ZW50QWJvcnQpLFxuICAgICAgICBwcmV2ZW50Q2FuY2VsOiBCb29sZWFuKHByZXZlbnRDYW5jZWwpLFxuICAgICAgICBwcmV2ZW50Q2xvc2U6IEJvb2xlYW4ocHJldmVudENsb3NlKSxcbiAgICAgICAgc2lnbmFsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGFzc2VydEFib3J0U2lnbmFsKHNpZ25hbCwgY29udGV4dCkge1xuICAgIGlmICghaXNBYm9ydFNpZ25hbChzaWduYWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7Y29udGV4dH0gaXMgbm90IGFuIEFib3J0U2lnbmFsLmApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29udmVydFJlYWRhYmxlV3JpdGFibGVQYWlyKHBhaXIsIGNvbnRleHQpIHtcbiAgICBhc3NlcnREaWN0aW9uYXJ5KHBhaXIsIGNvbnRleHQpO1xuICAgIGNvbnN0IHJlYWRhYmxlID0gcGFpciA9PT0gbnVsbCB8fCBwYWlyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYWlyLnJlYWRhYmxlO1xuICAgIGFzc2VydFJlcXVpcmVkRmllbGQocmVhZGFibGUsICdyZWFkYWJsZScsICdSZWFkYWJsZVdyaXRhYmxlUGFpcicpO1xuICAgIGFzc2VydFJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlLCBgJHtjb250ZXh0fSBoYXMgbWVtYmVyICdyZWFkYWJsZScgdGhhdGApO1xuICAgIGNvbnN0IHdyaXRhYmxlID0gcGFpciA9PT0gbnVsbCB8fCBwYWlyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYWlyLndyaXRhYmxlO1xuICAgIGFzc2VydFJlcXVpcmVkRmllbGQod3JpdGFibGUsICd3cml0YWJsZScsICdSZWFkYWJsZVdyaXRhYmxlUGFpcicpO1xuICAgIGFzc2VydFdyaXRhYmxlU3RyZWFtKHdyaXRhYmxlLCBgJHtjb250ZXh0fSBoYXMgbWVtYmVyICd3cml0YWJsZScgdGhhdGApO1xuICAgIHJldHVybiB7IHJlYWRhYmxlLCB3cml0YWJsZSB9O1xufVxuXG4vKipcbiAqIEEgcmVhZGFibGUgc3RyZWFtIHJlcHJlc2VudHMgYSBzb3VyY2Ugb2YgZGF0YSwgZnJvbSB3aGljaCB5b3UgY2FuIHJlYWQuXG4gKlxuICogQHB1YmxpY1xuICovXG5jbGFzcyBSZWFkYWJsZVN0cmVhbSB7XG4gICAgY29uc3RydWN0b3IocmF3VW5kZXJseWluZ1NvdXJjZSA9IHt9LCByYXdTdHJhdGVneSA9IHt9KSB7XG4gICAgICAgIGlmIChyYXdVbmRlcmx5aW5nU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJhd1VuZGVybHlpbmdTb3VyY2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXNzZXJ0T2JqZWN0KHJhd1VuZGVybHlpbmdTb3VyY2UsICdGaXJzdCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHJhdGVneSA9IGNvbnZlcnRRdWV1aW5nU3RyYXRlZ3kocmF3U3RyYXRlZ3ksICdTZWNvbmQgcGFyYW1ldGVyJyk7XG4gICAgICAgIGNvbnN0IHVuZGVybHlpbmdTb3VyY2UgPSBjb252ZXJ0VW5kZXJseWluZ0RlZmF1bHRPckJ5dGVTb3VyY2UocmF3VW5kZXJseWluZ1NvdXJjZSwgJ0ZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICBJbml0aWFsaXplUmVhZGFibGVTdHJlYW0odGhpcyk7XG4gICAgICAgIGlmICh1bmRlcmx5aW5nU291cmNlLnR5cGUgPT09ICdieXRlcycpIHtcbiAgICAgICAgICAgIGlmIChzdHJhdGVneS5zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHN0cmF0ZWd5IGZvciBhIGJ5dGUgc3RyZWFtIGNhbm5vdCBoYXZlIGEgc2l6ZSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGlnaFdhdGVyTWFyayA9IEV4dHJhY3RIaWdoV2F0ZXJNYXJrKHN0cmF0ZWd5LCAwKTtcbiAgICAgICAgICAgIFNldFVwUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZyb21VbmRlcmx5aW5nU291cmNlKHRoaXMsIHVuZGVybHlpbmdTb3VyY2UsIGhpZ2hXYXRlck1hcmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2l6ZUFsZ29yaXRobSA9IEV4dHJhY3RTaXplQWxnb3JpdGhtKHN0cmF0ZWd5KTtcbiAgICAgICAgICAgIGNvbnN0IGhpZ2hXYXRlck1hcmsgPSBFeHRyYWN0SGlnaFdhdGVyTWFyayhzdHJhdGVneSwgMSk7XG4gICAgICAgICAgICBTZXRVcFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJGcm9tVW5kZXJseWluZ1NvdXJjZSh0aGlzLCB1bmRlcmx5aW5nU291cmNlLCBoaWdoV2F0ZXJNYXJrLCBzaXplQWxnb3JpdGhtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgcmVhZGFibGUgc3RyZWFtIGlzIGxvY2tlZCB0byBhIHtAbGluayBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgfCByZWFkZXJ9LlxuICAgICAqL1xuICAgIGdldCBsb2NrZWQoKSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbiQxKCdsb2NrZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FuY2VscyB0aGUgc3RyZWFtLCBzaWduYWxpbmcgYSBsb3NzIG9mIGludGVyZXN0IGluIHRoZSBzdHJlYW0gYnkgYSBjb25zdW1lci5cbiAgICAgKlxuICAgICAqIFRoZSBzdXBwbGllZCBgcmVhc29uYCBhcmd1bWVudCB3aWxsIGJlIGdpdmVuIHRvIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSdzIHtAbGluayBVbmRlcmx5aW5nU291cmNlLmNhbmNlbCB8IGNhbmNlbCgpfVxuICAgICAqIG1ldGhvZCwgd2hpY2ggbWlnaHQgb3IgbWlnaHQgbm90IHVzZSBpdC5cbiAgICAgKi9cbiAgICBjYW5jZWwocmVhc29uID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbiQxKCdjYW5jZWwnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYW5jZWwgYSBzdHJlYW0gdGhhdCBhbHJlYWR5IGhhcyBhIHJlYWRlcicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1DYW5jZWwodGhpcywgcmVhc29uKTtcbiAgICB9XG4gICAgZ2V0UmVhZGVyKHJhd09wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uJDEoJ2dldFJlYWRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjb252ZXJ0UmVhZGVyT3B0aW9ucyhyYXdPcHRpb25zLCAnRmlyc3QgcGFyYW1ldGVyJyk7XG4gICAgICAgIGlmIChvcHRpb25zLm1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEFjcXVpcmVSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIodGhpcyk7XG4gICAgfVxuICAgIHBpcGVUaHJvdWdoKHJhd1RyYW5zZm9ybSwgcmF3T3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbiQxKCdwaXBlVGhyb3VnaCcpO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydFJlcXVpcmVkQXJndW1lbnQocmF3VHJhbnNmb3JtLCAxLCAncGlwZVRocm91Z2gnKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gY29udmVydFJlYWRhYmxlV3JpdGFibGVQYWlyKHJhd1RyYW5zZm9ybSwgJ0ZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gY29udmVydFBpcGVPcHRpb25zKHJhd09wdGlvbnMsICdTZWNvbmQgcGFyYW1ldGVyJyk7XG4gICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtTG9ja2VkKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRocm91Z2ggY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgUmVhZGFibGVTdHJlYW0nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbUxvY2tlZCh0cmFuc2Zvcm0ud3JpdGFibGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRocm91Z2ggY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgV3JpdGFibGVTdHJlYW0nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNlID0gUmVhZGFibGVTdHJlYW1QaXBlVG8odGhpcywgdHJhbnNmb3JtLndyaXRhYmxlLCBvcHRpb25zLnByZXZlbnRDbG9zZSwgb3B0aW9ucy5wcmV2ZW50QWJvcnQsIG9wdGlvbnMucHJldmVudENhbmNlbCwgb3B0aW9ucy5zaWduYWwpO1xuICAgICAgICBzZXRQcm9taXNlSXNIYW5kbGVkVG9UcnVlKHByb21pc2UpO1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtLnJlYWRhYmxlO1xuICAgIH1cbiAgICBwaXBlVG8oZGVzdGluYXRpb24sIHJhd09wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW0odGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24kMSgncGlwZVRvJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChgUGFyYW1ldGVyIDEgaXMgcmVxdWlyZWQgaW4gJ3BpcGVUbycuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFJc1dyaXRhYmxlU3RyZWFtKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgobmV3IFR5cGVFcnJvcihgUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnBpcGVUbydzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXcml0YWJsZVN0cmVhbWApKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3B0aW9ucztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBjb252ZXJ0UGlwZU9wdGlvbnMocmF3T3B0aW9ucywgJ1NlY29uZCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZWplY3RlZFdpdGgoZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8gY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgUmVhZGFibGVTdHJlYW0nKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1Mb2NrZWQoZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aChuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFdyaXRhYmxlU3RyZWFtJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbVBpcGVUbyh0aGlzLCBkZXN0aW5hdGlvbiwgb3B0aW9ucy5wcmV2ZW50Q2xvc2UsIG9wdGlvbnMucHJldmVudEFib3J0LCBvcHRpb25zLnByZXZlbnRDYW5jZWwsIG9wdGlvbnMuc2lnbmFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGVlcyB0aGlzIHJlYWRhYmxlIHN0cmVhbSwgcmV0dXJuaW5nIGEgdHdvLWVsZW1lbnQgYXJyYXkgY29udGFpbmluZyB0aGUgdHdvIHJlc3VsdGluZyBicmFuY2hlcyBhc1xuICAgICAqIG5ldyB7QGxpbmsgUmVhZGFibGVTdHJlYW19IGluc3RhbmNlcy5cbiAgICAgKlxuICAgICAqIFRlZWluZyBhIHN0cmVhbSB3aWxsIGxvY2sgaXQsIHByZXZlbnRpbmcgYW55IG90aGVyIGNvbnN1bWVyIGZyb20gYWNxdWlyaW5nIGEgcmVhZGVyLlxuICAgICAqIFRvIGNhbmNlbCB0aGUgc3RyZWFtLCBjYW5jZWwgYm90aCBvZiB0aGUgcmVzdWx0aW5nIGJyYW5jaGVzOyBhIGNvbXBvc2l0ZSBjYW5jZWxsYXRpb24gcmVhc29uIHdpbGwgdGhlbiBiZVxuICAgICAqIHByb3BhZ2F0ZWQgdG8gdGhlIHN0cmVhbSdzIHVuZGVybHlpbmcgc291cmNlLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHRoZSBjaHVua3Mgc2VlbiBpbiBlYWNoIGJyYW5jaCB3aWxsIGJlIHRoZSBzYW1lIG9iamVjdC4gSWYgdGhlIGNodW5rcyBhcmUgbm90IGltbXV0YWJsZSxcbiAgICAgKiB0aGlzIGNvdWxkIGFsbG93IGludGVyZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gYnJhbmNoZXMuXG4gICAgICovXG4gICAgdGVlKCkge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW0odGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24kMSgndGVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnJhbmNoZXMgPSBSZWFkYWJsZVN0cmVhbVRlZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIENyZWF0ZUFycmF5RnJvbUxpc3QoYnJhbmNoZXMpO1xuICAgIH1cbiAgICB2YWx1ZXMocmF3T3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW0odGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24kMSgndmFsdWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbnZlcnRJdGVyYXRvck9wdGlvbnMocmF3T3B0aW9ucywgJ0ZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICByZXR1cm4gQWNxdWlyZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcih0aGlzLCBvcHRpb25zLnByZXZlbnRDYW5jZWwpO1xuICAgIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZSwge1xuICAgIGNhbmNlbDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgZ2V0UmVhZGVyOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBwaXBlVGhyb3VnaDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgcGlwZVRvOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICB0ZWU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIHZhbHVlczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgbG9ja2VkOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIHZhbHVlOiAnUmVhZGFibGVTdHJlYW0nLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cbmlmICh0eXBlb2YgU3ltYm9sUG9seWZpbGwuYXN5bmNJdGVyYXRvciA9PT0gJ3N5bWJvbCcpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLCBTeW1ib2xQb2x5ZmlsbC5hc3luY0l0ZXJhdG9yLCB7XG4gICAgICAgIHZhbHVlOiBSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUudmFsdWVzLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG59XG4vLyBBYnN0cmFjdCBvcGVyYXRpb25zIGZvciB0aGUgUmVhZGFibGVTdHJlYW0uXG4vLyBUaHJvd3MgaWYgYW5kIG9ubHkgaWYgc3RhcnRBbGdvcml0aG0gdGhyb3dzLlxuZnVuY3Rpb24gQ3JlYXRlUmVhZGFibGVTdHJlYW0oc3RhcnRBbGdvcml0aG0sIHB1bGxBbGdvcml0aG0sIGNhbmNlbEFsZ29yaXRobSwgaGlnaFdhdGVyTWFyayA9IDEsIHNpemVBbGdvcml0aG0gPSAoKSA9PiAxKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gT2JqZWN0LmNyZWF0ZShSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUpO1xuICAgIEluaXRpYWxpemVSZWFkYWJsZVN0cmVhbShzdHJlYW0pO1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBPYmplY3QuY3JlYXRlKFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlKTtcbiAgICBTZXRVcFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoc3RyZWFtLCBjb250cm9sbGVyLCBzdGFydEFsZ29yaXRobSwgcHVsbEFsZ29yaXRobSwgY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrLCBzaXplQWxnb3JpdGhtKTtcbiAgICByZXR1cm4gc3RyZWFtO1xufVxuLy8gVGhyb3dzIGlmIGFuZCBvbmx5IGlmIHN0YXJ0QWxnb3JpdGhtIHRocm93cy5cbmZ1bmN0aW9uIENyZWF0ZVJlYWRhYmxlQnl0ZVN0cmVhbShzdGFydEFsZ29yaXRobSwgcHVsbEFsZ29yaXRobSwgY2FuY2VsQWxnb3JpdGhtKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gT2JqZWN0LmNyZWF0ZShSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUpO1xuICAgIEluaXRpYWxpemVSZWFkYWJsZVN0cmVhbShzdHJlYW0pO1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBPYmplY3QuY3JlYXRlKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlKTtcbiAgICBTZXRVcFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtLCBjb250cm9sbGVyLCBzdGFydEFsZ29yaXRobSwgcHVsbEFsZ29yaXRobSwgY2FuY2VsQWxnb3JpdGhtLCAwLCB1bmRlZmluZWQpO1xuICAgIHJldHVybiBzdHJlYW07XG59XG5mdW5jdGlvbiBJbml0aWFsaXplUmVhZGFibGVTdHJlYW0oc3RyZWFtKSB7XG4gICAgc3RyZWFtLl9zdGF0ZSA9ICdyZWFkYWJsZSc7XG4gICAgc3RyZWFtLl9yZWFkZXIgPSB1bmRlZmluZWQ7XG4gICAgc3RyZWFtLl9zdG9yZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgICBzdHJlYW0uX2Rpc3R1cmJlZCA9IGZhbHNlO1xufVxuZnVuY3Rpb24gSXNSZWFkYWJsZVN0cmVhbSh4KSB7XG4gICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcicpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbTtcbn1cbmZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSB7XG4gICAgaWYgKHN0cmVhbS5fcmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFJlYWRhYmxlU3RyZWFtIEFQSSBleHBvc2VkIGZvciBjb250cm9sbGVycy5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgcmVhc29uKSB7XG4gICAgc3RyZWFtLl9kaXN0dXJiZWQgPSB0cnVlO1xuICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmVkV2l0aCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVqZWN0ZWRXaXRoKHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgIH1cbiAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG4gICAgaWYgKHJlYWRlciAhPT0gdW5kZWZpbmVkICYmIElzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHJlYWRlcikpIHtcbiAgICAgICAgcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLmZvckVhY2gocmVhZEludG9SZXF1ZXN0ID0+IHtcbiAgICAgICAgICAgIHJlYWRJbnRvUmVxdWVzdC5fY2xvc2VTdGVwcyh1bmRlZmluZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzID0gbmV3IFNpbXBsZVF1ZXVlKCk7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZUNhbmNlbFByb21pc2UgPSBzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcltDYW5jZWxTdGVwc10ocmVhc29uKTtcbiAgICByZXR1cm4gdHJhbnNmb3JtUHJvbWlzZVdpdGgoc291cmNlQ2FuY2VsUHJvbWlzZSwgbm9vcCk7XG59XG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSkge1xuICAgIHN0cmVhbS5fc3RhdGUgPSAnY2xvc2VkJztcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcbiAgICBpZiAocmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlc29sdmUocmVhZGVyKTtcbiAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIocmVhZGVyKSkge1xuICAgICAgICByZWFkZXIuX3JlYWRSZXF1ZXN0cy5mb3JFYWNoKHJlYWRSZXF1ZXN0ID0+IHtcbiAgICAgICAgICAgIHJlYWRSZXF1ZXN0Ll9jbG9zZVN0ZXBzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZWFkZXIuX3JlYWRSZXF1ZXN0cyA9IG5ldyBTaW1wbGVRdWV1ZSgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRXJyb3Ioc3RyZWFtLCBlKSB7XG4gICAgc3RyZWFtLl9zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICBzdHJlYW0uX3N0b3JlZEVycm9yID0gZTtcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcbiAgICBpZiAocmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlamVjdChyZWFkZXIsIGUpO1xuICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihyZWFkZXIpKSB7XG4gICAgICAgIHJlYWRlci5fcmVhZFJlcXVlc3RzLmZvckVhY2gocmVhZFJlcXVlc3QgPT4ge1xuICAgICAgICAgICAgcmVhZFJlcXVlc3QuX2Vycm9yU3RlcHMoZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZWFkZXIuX3JlYWRSZXF1ZXN0cyA9IG5ldyBTaW1wbGVRdWV1ZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLmZvckVhY2gocmVhZEludG9SZXF1ZXN0ID0+IHtcbiAgICAgICAgICAgIHJlYWRJbnRvUmVxdWVzdC5fZXJyb3JTdGVwcyhlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlYWRlci5fcmVhZEludG9SZXF1ZXN0cyA9IG5ldyBTaW1wbGVRdWV1ZSgpO1xuICAgIH1cbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBSZWFkYWJsZVN0cmVhbS5cbmZ1bmN0aW9uIHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24kMShuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS4ke25hbWV9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbWApO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UXVldWluZ1N0cmF0ZWd5SW5pdChpbml0LCBjb250ZXh0KSB7XG4gICAgYXNzZXJ0RGljdGlvbmFyeShpbml0LCBjb250ZXh0KTtcbiAgICBjb25zdCBoaWdoV2F0ZXJNYXJrID0gaW5pdCA9PT0gbnVsbCB8fCBpbml0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbml0LmhpZ2hXYXRlck1hcms7XG4gICAgYXNzZXJ0UmVxdWlyZWRGaWVsZChoaWdoV2F0ZXJNYXJrLCAnaGlnaFdhdGVyTWFyaycsICdRdWV1aW5nU3RyYXRlZ3lJbml0Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogY29udmVydFVucmVzdHJpY3RlZERvdWJsZShoaWdoV2F0ZXJNYXJrKVxuICAgIH07XG59XG5cbi8vIFRoZSBzaXplIGZ1bmN0aW9uIG11c3Qgbm90IGhhdmUgYSBwcm90b3R5cGUgcHJvcGVydHkgbm9yIGJlIGEgY29uc3RydWN0b3JcbmNvbnN0IGJ5dGVMZW5ndGhTaXplRnVuY3Rpb24gPSAoY2h1bmspID0+IHtcbiAgICByZXR1cm4gY2h1bmsuYnl0ZUxlbmd0aDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoYnl0ZUxlbmd0aFNpemVGdW5jdGlvbiwgJ25hbWUnLCB7XG4gICAgdmFsdWU6ICdzaXplJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuLyoqXG4gKiBBIHF1ZXVpbmcgc3RyYXRlZ3kgdGhhdCBjb3VudHMgdGhlIG51bWJlciBvZiBieXRlcyBpbiBlYWNoIGNodW5rLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY2xhc3MgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBhc3NlcnRSZXF1aXJlZEFyZ3VtZW50KG9wdGlvbnMsIDEsICdCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5Jyk7XG4gICAgICAgIG9wdGlvbnMgPSBjb252ZXJ0UXVldWluZ1N0cmF0ZWd5SW5pdChvcHRpb25zLCAnRmlyc3QgcGFyYW1ldGVyJyk7XG4gICAgICAgIHRoaXMuX2J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lIaWdoV2F0ZXJNYXJrID0gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBoaWdoIHdhdGVyIG1hcmsgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqL1xuICAgIGdldCBoaWdoV2F0ZXJNYXJrKCkge1xuICAgICAgICBpZiAoIUlzQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSh0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgYnl0ZUxlbmd0aEJyYW5kQ2hlY2tFeGNlcHRpb24oJ2hpZ2hXYXRlck1hcmsnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUhpZ2hXYXRlck1hcms7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1lYXN1cmVzIHRoZSBzaXplIG9mIGBjaHVua2AgYnkgcmV0dXJuaW5nIHRoZSB2YWx1ZSBvZiBpdHMgYGJ5dGVMZW5ndGhgIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICBpZiAoIUlzQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSh0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgYnl0ZUxlbmd0aEJyYW5kQ2hlY2tFeGNlcHRpb24oJ3NpemUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnl0ZUxlbmd0aFNpemVGdW5jdGlvbjtcbiAgICB9XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5LnByb3RvdHlwZSwge1xuICAgIGhpZ2hXYXRlck1hcms6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIHNpemU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcbmlmICh0eXBlb2YgU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWcgPT09ICdzeW1ib2wnKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kucHJvdG90eXBlLCBTeW1ib2xQb2x5ZmlsbC50b1N0cmluZ1RhZywge1xuICAgICAgICB2YWx1ZTogJ0J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3knLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5LlxuZnVuY3Rpb24gYnl0ZUxlbmd0aEJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKGBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5LnByb3RvdHlwZS4ke25hbWV9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5YCk7XG59XG5mdW5jdGlvbiBJc0J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3koeCkge1xuICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19ieXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5SGlnaFdhdGVyTWFyaycpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5O1xufVxuXG4vLyBUaGUgc2l6ZSBmdW5jdGlvbiBtdXN0IG5vdCBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5IG5vciBiZSBhIGNvbnN0cnVjdG9yXG5jb25zdCBjb3VudFNpemVGdW5jdGlvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gMTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoY291bnRTaXplRnVuY3Rpb24sICduYW1lJywge1xuICAgIHZhbHVlOiAnc2l6ZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcbi8qKlxuICogQSBxdWV1aW5nIHN0cmF0ZWd5IHRoYXQgY291bnRzIHRoZSBudW1iZXIgb2YgY2h1bmtzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY2xhc3MgQ291bnRRdWV1aW5nU3RyYXRlZ3kge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0UmVxdWlyZWRBcmd1bWVudChvcHRpb25zLCAxLCAnQ291bnRRdWV1aW5nU3RyYXRlZ3knKTtcbiAgICAgICAgb3B0aW9ucyA9IGNvbnZlcnRRdWV1aW5nU3RyYXRlZ3lJbml0KG9wdGlvbnMsICdGaXJzdCBwYXJhbWV0ZXInKTtcbiAgICAgICAgdGhpcy5fY291bnRRdWV1aW5nU3RyYXRlZ3lIaWdoV2F0ZXJNYXJrID0gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBoaWdoIHdhdGVyIG1hcmsgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqL1xuICAgIGdldCBoaWdoV2F0ZXJNYXJrKCkge1xuICAgICAgICBpZiAoIUlzQ291bnRRdWV1aW5nU3RyYXRlZ3kodGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IGNvdW50QnJhbmRDaGVja0V4Y2VwdGlvbignaGlnaFdhdGVyTWFyaycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3VudFF1ZXVpbmdTdHJhdGVneUhpZ2hXYXRlck1hcms7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1lYXN1cmVzIHRoZSBzaXplIG9mIGBjaHVua2AgYnkgYWx3YXlzIHJldHVybmluZyAxLlxuICAgICAqIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB0b3RhbCBxdWV1ZSBzaXplIGlzIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBjaHVua3MgaW4gdGhlIHF1ZXVlLlxuICAgICAqL1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICBpZiAoIUlzQ291bnRRdWV1aW5nU3RyYXRlZ3kodGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IGNvdW50QnJhbmRDaGVja0V4Y2VwdGlvbignc2l6ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudFNpemVGdW5jdGlvbjtcbiAgICB9XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb3VudFF1ZXVpbmdTdHJhdGVneS5wcm90b3R5cGUsIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBzaXplOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3VudFF1ZXVpbmdTdHJhdGVneS5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIHZhbHVlOiAnQ291bnRRdWV1aW5nU3RyYXRlZ3knLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBDb3VudFF1ZXVpbmdTdHJhdGVneS5cbmZ1bmN0aW9uIGNvdW50QnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYENvdW50UXVldWluZ1N0cmF0ZWd5LnByb3RvdHlwZS4ke25hbWV9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBDb3VudFF1ZXVpbmdTdHJhdGVneWApO1xufVxuZnVuY3Rpb24gSXNDb3VudFF1ZXVpbmdTdHJhdGVneSh4KSB7XG4gICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX2NvdW50UXVldWluZ1N0cmF0ZWd5SGlnaFdhdGVyTWFyaycpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBDb3VudFF1ZXVpbmdTdHJhdGVneTtcbn1cblxuZnVuY3Rpb24gY29udmVydFRyYW5zZm9ybWVyKG9yaWdpbmFsLCBjb250ZXh0KSB7XG4gICAgYXNzZXJ0RGljdGlvbmFyeShvcmlnaW5hbCwgY29udGV4dCk7XG4gICAgY29uc3QgZmx1c2ggPSBvcmlnaW5hbCA9PT0gbnVsbCB8fCBvcmlnaW5hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luYWwuZmx1c2g7XG4gICAgY29uc3QgcmVhZGFibGVUeXBlID0gb3JpZ2luYWwgPT09IG51bGwgfHwgb3JpZ2luYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbmFsLnJlYWRhYmxlVHlwZTtcbiAgICBjb25zdCBzdGFydCA9IG9yaWdpbmFsID09PSBudWxsIHx8IG9yaWdpbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5hbC5zdGFydDtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBvcmlnaW5hbCA9PT0gbnVsbCB8fCBvcmlnaW5hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luYWwudHJhbnNmb3JtO1xuICAgIGNvbnN0IHdyaXRhYmxlVHlwZSA9IG9yaWdpbmFsID09PSBudWxsIHx8IG9yaWdpbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5hbC53cml0YWJsZVR5cGU7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmx1c2g6IGZsdXNoID09PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdW5kZWZpbmVkIDpcbiAgICAgICAgICAgIGNvbnZlcnRUcmFuc2Zvcm1lckZsdXNoQ2FsbGJhY2soZmx1c2gsIG9yaWdpbmFsLCBgJHtjb250ZXh0fSBoYXMgbWVtYmVyICdmbHVzaCcgdGhhdGApLFxuICAgICAgICByZWFkYWJsZVR5cGUsXG4gICAgICAgIHN0YXJ0OiBzdGFydCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHVuZGVmaW5lZCA6XG4gICAgICAgICAgICBjb252ZXJ0VHJhbnNmb3JtZXJTdGFydENhbGxiYWNrKHN0YXJ0LCBvcmlnaW5hbCwgYCR7Y29udGV4dH0gaGFzIG1lbWJlciAnc3RhcnQnIHRoYXRgKSxcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0gPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB1bmRlZmluZWQgOlxuICAgICAgICAgICAgY29udmVydFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2sodHJhbnNmb3JtLCBvcmlnaW5hbCwgYCR7Y29udGV4dH0gaGFzIG1lbWJlciAndHJhbnNmb3JtJyB0aGF0YCksXG4gICAgICAgIHdyaXRhYmxlVHlwZVxuICAgIH07XG59XG5mdW5jdGlvbiBjb252ZXJ0VHJhbnNmb3JtZXJGbHVzaENhbGxiYWNrKGZuLCBvcmlnaW5hbCwgY29udGV4dCkge1xuICAgIGFzc2VydEZ1bmN0aW9uKGZuLCBjb250ZXh0KTtcbiAgICByZXR1cm4gKGNvbnRyb2xsZXIpID0+IHByb21pc2VDYWxsKGZuLCBvcmlnaW5hbCwgW2NvbnRyb2xsZXJdKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUcmFuc2Zvcm1lclN0YXJ0Q2FsbGJhY2soZm4sIG9yaWdpbmFsLCBjb250ZXh0KSB7XG4gICAgYXNzZXJ0RnVuY3Rpb24oZm4sIGNvbnRleHQpO1xuICAgIHJldHVybiAoY29udHJvbGxlcikgPT4gcmVmbGVjdENhbGwoZm4sIG9yaWdpbmFsLCBbY29udHJvbGxlcl0pO1xufVxuZnVuY3Rpb24gY29udmVydFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2soZm4sIG9yaWdpbmFsLCBjb250ZXh0KSB7XG4gICAgYXNzZXJ0RnVuY3Rpb24oZm4sIGNvbnRleHQpO1xuICAgIHJldHVybiAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHByb21pc2VDYWxsKGZuLCBvcmlnaW5hbCwgW2NodW5rLCBjb250cm9sbGVyXSk7XG59XG5cbi8vIENsYXNzIFRyYW5zZm9ybVN0cmVhbVxuLyoqXG4gKiBBIHRyYW5zZm9ybSBzdHJlYW0gY29uc2lzdHMgb2YgYSBwYWlyIG9mIHN0cmVhbXM6IGEge0BsaW5rIFdyaXRhYmxlU3RyZWFtIHwgd3JpdGFibGUgc3RyZWFtfSxcbiAqIGtub3duIGFzIGl0cyB3cml0YWJsZSBzaWRlLCBhbmQgYSB7QGxpbmsgUmVhZGFibGVTdHJlYW0gfCByZWFkYWJsZSBzdHJlYW19LCBrbm93biBhcyBpdHMgcmVhZGFibGUgc2lkZS5cbiAqIEluIGEgbWFubmVyIHNwZWNpZmljIHRvIHRoZSB0cmFuc2Zvcm0gc3RyZWFtIGluIHF1ZXN0aW9uLCB3cml0ZXMgdG8gdGhlIHdyaXRhYmxlIHNpZGUgcmVzdWx0IGluIG5ldyBkYXRhIGJlaW5nXG4gKiBtYWRlIGF2YWlsYWJsZSBmb3IgcmVhZGluZyBmcm9tIHRoZSByZWFkYWJsZSBzaWRlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY2xhc3MgVHJhbnNmb3JtU3RyZWFtIHtcbiAgICBjb25zdHJ1Y3RvcihyYXdUcmFuc2Zvcm1lciA9IHt9LCByYXdXcml0YWJsZVN0cmF0ZWd5ID0ge30sIHJhd1JlYWRhYmxlU3RyYXRlZ3kgPSB7fSkge1xuICAgICAgICBpZiAocmF3VHJhbnNmb3JtZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmF3VHJhbnNmb3JtZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdyaXRhYmxlU3RyYXRlZ3kgPSBjb252ZXJ0UXVldWluZ1N0cmF0ZWd5KHJhd1dyaXRhYmxlU3RyYXRlZ3ksICdTZWNvbmQgcGFyYW1ldGVyJyk7XG4gICAgICAgIGNvbnN0IHJlYWRhYmxlU3RyYXRlZ3kgPSBjb252ZXJ0UXVldWluZ1N0cmF0ZWd5KHJhd1JlYWRhYmxlU3RyYXRlZ3ksICdUaGlyZCBwYXJhbWV0ZXInKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjb252ZXJ0VHJhbnNmb3JtZXIocmF3VHJhbnNmb3JtZXIsICdGaXJzdCBwYXJhbWV0ZXInKTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybWVyLnJlYWRhYmxlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCByZWFkYWJsZVR5cGUgc3BlY2lmaWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYW5zZm9ybWVyLndyaXRhYmxlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB3cml0YWJsZVR5cGUgc3BlY2lmaWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVhZGFibGVIaWdoV2F0ZXJNYXJrID0gRXh0cmFjdEhpZ2hXYXRlck1hcmsocmVhZGFibGVTdHJhdGVneSwgMCk7XG4gICAgICAgIGNvbnN0IHJlYWRhYmxlU2l6ZUFsZ29yaXRobSA9IEV4dHJhY3RTaXplQWxnb3JpdGhtKHJlYWRhYmxlU3RyYXRlZ3kpO1xuICAgICAgICBjb25zdCB3cml0YWJsZUhpZ2hXYXRlck1hcmsgPSBFeHRyYWN0SGlnaFdhdGVyTWFyayh3cml0YWJsZVN0cmF0ZWd5LCAxKTtcbiAgICAgICAgY29uc3Qgd3JpdGFibGVTaXplQWxnb3JpdGhtID0gRXh0cmFjdFNpemVBbGdvcml0aG0od3JpdGFibGVTdHJhdGVneSk7XG4gICAgICAgIGxldCBzdGFydFByb21pc2VfcmVzb2x2ZTtcbiAgICAgICAgY29uc3Qgc3RhcnRQcm9taXNlID0gbmV3UHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHN0YXJ0UHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEluaXRpYWxpemVUcmFuc2Zvcm1TdHJlYW0odGhpcywgc3RhcnRQcm9taXNlLCB3cml0YWJsZUhpZ2hXYXRlck1hcmssIHdyaXRhYmxlU2l6ZUFsZ29yaXRobSwgcmVhZGFibGVIaWdoV2F0ZXJNYXJrLCByZWFkYWJsZVNpemVBbGdvcml0aG0pO1xuICAgICAgICBTZXRVcFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyRnJvbVRyYW5zZm9ybWVyKHRoaXMsIHRyYW5zZm9ybWVyKTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybWVyLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0UHJvbWlzZV9yZXNvbHZlKHRyYW5zZm9ybWVyLnN0YXJ0KHRoaXMuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0UHJvbWlzZV9yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlYWRhYmxlIHNpZGUgb2YgdGhlIHRyYW5zZm9ybSBzdHJlYW0uXG4gICAgICovXG4gICAgZ2V0IHJlYWRhYmxlKCkge1xuICAgICAgICBpZiAoIUlzVHJhbnNmb3JtU3RyZWFtKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdyZWFkYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHdyaXRhYmxlIHNpZGUgb2YgdGhlIHRyYW5zZm9ybSBzdHJlYW0uXG4gICAgICovXG4gICAgZ2V0IHdyaXRhYmxlKCkge1xuICAgICAgICBpZiAoIUlzVHJhbnNmb3JtU3RyZWFtKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCd3cml0YWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZTtcbiAgICB9XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLCB7XG4gICAgcmVhZGFibGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIHdyaXRhYmxlOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLCBTeW1ib2xQb2x5ZmlsbC50b1N0cmluZ1RhZywge1xuICAgICAgICB2YWx1ZTogJ1RyYW5zZm9ybVN0cmVhbScsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuZnVuY3Rpb24gSW5pdGlhbGl6ZVRyYW5zZm9ybVN0cmVhbShzdHJlYW0sIHN0YXJ0UHJvbWlzZSwgd3JpdGFibGVIaWdoV2F0ZXJNYXJrLCB3cml0YWJsZVNpemVBbGdvcml0aG0sIHJlYWRhYmxlSGlnaFdhdGVyTWFyaywgcmVhZGFibGVTaXplQWxnb3JpdGhtKSB7XG4gICAgZnVuY3Rpb24gc3RhcnRBbGdvcml0aG0oKSB7XG4gICAgICAgIHJldHVybiBzdGFydFByb21pc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlQWxnb3JpdGhtKGNodW5rKSB7XG4gICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0U2lua1dyaXRlQWxnb3JpdGhtKHN0cmVhbSwgY2h1bmspO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhYm9ydEFsZ29yaXRobShyZWFzb24pIHtcbiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRTaW5rQWJvcnRBbGdvcml0aG0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9zZUFsZ29yaXRobSgpIHtcbiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRTaW5rQ2xvc2VBbGdvcml0aG0oc3RyZWFtKTtcbiAgICB9XG4gICAgc3RyZWFtLl93cml0YWJsZSA9IENyZWF0ZVdyaXRhYmxlU3RyZWFtKHN0YXJ0QWxnb3JpdGhtLCB3cml0ZUFsZ29yaXRobSwgY2xvc2VBbGdvcml0aG0sIGFib3J0QWxnb3JpdGhtLCB3cml0YWJsZUhpZ2hXYXRlck1hcmssIHdyaXRhYmxlU2l6ZUFsZ29yaXRobSk7XG4gICAgZnVuY3Rpb24gcHVsbEFsZ29yaXRobSgpIHtcbiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRTb3VyY2VQdWxsQWxnb3JpdGhtKHN0cmVhbSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbmNlbEFsZ29yaXRobShyZWFzb24pIHtcbiAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JXcml0YWJsZUFuZFVuYmxvY2tXcml0ZShzdHJlYW0sIHJlYXNvbik7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHN0cmVhbS5fcmVhZGFibGUgPSBDcmVhdGVSZWFkYWJsZVN0cmVhbShzdGFydEFsZ29yaXRobSwgcHVsbEFsZ29yaXRobSwgY2FuY2VsQWxnb3JpdGhtLCByZWFkYWJsZUhpZ2hXYXRlck1hcmssIHJlYWRhYmxlU2l6ZUFsZ29yaXRobSk7XG4gICAgLy8gVGhlIFtbYmFja3ByZXNzdXJlXV0gc2xvdCBpcyBzZXQgdG8gdW5kZWZpbmVkIHNvIHRoYXQgaXQgY2FuIGJlIGluaXRpYWxpc2VkIGJ5IFRyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZS5cbiAgICBzdHJlYW0uX2JhY2twcmVzc3VyZSA9IHVuZGVmaW5lZDtcbiAgICBzdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgc3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKHN0cmVhbSwgdHJ1ZSk7XG4gICAgc3RyZWFtLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyID0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gSXNUcmFuc2Zvcm1TdHJlYW0oeCkge1xuICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ190cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4geCBpbnN0YW5jZW9mIFRyYW5zZm9ybVN0cmVhbTtcbn1cbi8vIFRoaXMgaXMgYSBuby1vcCBpZiBib3RoIHNpZGVzIGFyZSBhbHJlYWR5IGVycm9yZWQuXG5mdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1FcnJvcihzdHJlYW0sIGUpIHtcbiAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3Ioc3RyZWFtLl9yZWFkYWJsZS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLCBlKTtcbiAgICBUcmFuc2Zvcm1TdHJlYW1FcnJvcldyaXRhYmxlQW5kVW5ibG9ja1dyaXRlKHN0cmVhbSwgZSk7XG59XG5mdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1FcnJvcldyaXRhYmxlQW5kVW5ibG9ja1dyaXRlKHN0cmVhbSwgZSkge1xuICAgIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xlYXJBbGdvcml0aG1zKHN0cmVhbS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcik7XG4gICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoc3RyZWFtLl93cml0YWJsZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLCBlKTtcbiAgICBpZiAoc3RyZWFtLl9iYWNrcHJlc3N1cmUpIHtcbiAgICAgICAgLy8gUHJldGVuZCB0aGF0IHB1bGwoKSB3YXMgY2FsbGVkIHRvIHBlcm1pdCBhbnkgcGVuZGluZyB3cml0ZSgpIGNhbGxzIHRvIGNvbXBsZXRlLiBUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUoKVxuICAgICAgICAvLyBjYW5ub3QgYmUgY2FsbGVkIGZyb20gZW5xdWV1ZSgpIG9yIHB1bGwoKSBvbmNlIHRoZSBSZWFkYWJsZVN0cmVhbSBpcyBlcnJvcmVkLCBzbyB0aGlzIHdpbGwgd2lsbCBiZSB0aGUgZmluYWwgdGltZVxuICAgICAgICAvLyBfYmFja3ByZXNzdXJlIGlzIHNldC5cbiAgICAgICAgVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKHN0cmVhbSwgZmFsc2UpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSkge1xuICAgIC8vIFBhc3NlcyBhbHNvIHdoZW4gY2FsbGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24uXG4gICAgaWYgKHN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlKCk7XG4gICAgfVxuICAgIHN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSA9IG5ld1Byb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgICBzdHJlYW0uX2JhY2twcmVzc3VyZSA9IGJhY2twcmVzc3VyZTtcbn1cbi8vIENsYXNzIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyXG4vKipcbiAqIEFsbG93cyBjb250cm9sIG9mIHRoZSB7QGxpbmsgUmVhZGFibGVTdHJlYW19IGFuZCB7QGxpbmsgV3JpdGFibGVTdHJlYW19IG9mIHRoZSBhc3NvY2lhdGVkIHtAbGluayBUcmFuc2Zvcm1TdHJlYW19LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY2xhc3MgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRlc2lyZWQgc2l6ZSB0byBmaWxsIHRoZSByZWFkYWJsZSBzaWRl4oCZcyBpbnRlcm5hbCBxdWV1ZS4gSXQgY2FuIGJlIG5lZ2F0aXZlLCBpZiB0aGUgcXVldWUgaXMgb3Zlci1mdWxsLlxuICAgICAqL1xuICAgIGdldCBkZXNpcmVkU2l6ZSgpIHtcbiAgICAgICAgaWYgKCFJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Rlc2lyZWRTaXplJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVhZGFibGVDb250cm9sbGVyID0gdGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcjtcbiAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShyZWFkYWJsZUNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICBlbnF1ZXVlKGNodW5rID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSkge1xuICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlbnF1ZXVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlKHRoaXMsIGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXJyb3JzIGJvdGggdGhlIHJlYWRhYmxlIHNpZGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlIG9mIHRoZSBjb250cm9sbGVkIHRyYW5zZm9ybSBzdHJlYW0sIG1ha2luZyBhbGwgZnV0dXJlXG4gICAgICogaW50ZXJhY3Rpb25zIHdpdGggaXQgZmFpbCB3aXRoIHRoZSBnaXZlbiBlcnJvciBgZWAuIEFueSBjaHVua3MgcXVldWVkIGZvciB0cmFuc2Zvcm1hdGlvbiB3aWxsIGJlIGRpc2NhcmRlZC5cbiAgICAgKi9cbiAgICBlcnJvcihyZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcih0aGlzLCByZWFzb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIHJlYWRhYmxlIHNpZGUgYW5kIGVycm9ycyB0aGUgd3JpdGFibGUgc2lkZSBvZiB0aGUgY29udHJvbGxlZCB0cmFuc2Zvcm0gc3RyZWFtLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZVxuICAgICAqIHRyYW5zZm9ybWVyIG9ubHkgbmVlZHMgdG8gY29uc3VtZSBhIHBvcnRpb24gb2YgdGhlIGNodW5rcyB3cml0dGVuIHRvIHRoZSB3cml0YWJsZSBzaWRlLlxuICAgICAqL1xuICAgIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgaWYgKCFJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3Rlcm1pbmF0ZScpO1xuICAgICAgICB9XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyVGVybWluYXRlKHRoaXMpO1xuICAgIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSwge1xuICAgIGVucXVldWU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGVycm9yOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICB0ZXJtaW5hdGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGRlc2lyZWRTaXplOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5pZiAodHlwZW9mIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIHZhbHVlOiAnVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXInLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cbi8vIFRyYW5zZm9ybSBTdHJlYW0gRGVmYXVsdCBDb250cm9sbGVyIEFic3RyYWN0IE9wZXJhdGlvbnNcbmZ1bmN0aW9uIElzVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoeCkge1xuICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4geCBpbnN0YW5jZW9mIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyO1xufVxuZnVuY3Rpb24gU2V0VXBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcihzdHJlYW0sIGNvbnRyb2xsZXIsIHRyYW5zZm9ybUFsZ29yaXRobSwgZmx1c2hBbGdvcml0aG0pIHtcbiAgICBjb250cm9sbGVyLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtID0gc3RyZWFtO1xuICAgIHN0cmVhbS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgY29udHJvbGxlci5fdHJhbnNmb3JtQWxnb3JpdGhtID0gdHJhbnNmb3JtQWxnb3JpdGhtO1xuICAgIGNvbnRyb2xsZXIuX2ZsdXNoQWxnb3JpdGhtID0gZmx1c2hBbGdvcml0aG07XG59XG5mdW5jdGlvbiBTZXRVcFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyRnJvbVRyYW5zZm9ybWVyKHN0cmVhbSwgdHJhbnNmb3JtZXIpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUpO1xuICAgIGxldCB0cmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmspID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShjb250cm9sbGVyLCBjaHVuayk7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmVkV2l0aCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh0cmFuc2Zvcm1SZXN1bHRFKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlamVjdGVkV2l0aCh0cmFuc2Zvcm1SZXN1bHRFKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IGZsdXNoQWxnb3JpdGhtID0gKCkgPT4gcHJvbWlzZVJlc29sdmVkV2l0aCh1bmRlZmluZWQpO1xuICAgIGlmICh0cmFuc2Zvcm1lci50cmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0cmFuc2Zvcm1BbGdvcml0aG0gPSBjaHVuayA9PiB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oY2h1bmssIGNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICBpZiAodHJhbnNmb3JtZXIuZmx1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmbHVzaEFsZ29yaXRobSA9ICgpID0+IHRyYW5zZm9ybWVyLmZsdXNoKGNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICBTZXRVcFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHN0cmVhbSwgY29udHJvbGxlciwgdHJhbnNmb3JtQWxnb3JpdGhtLCBmbHVzaEFsZ29yaXRobSk7XG59XG5mdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsZWFyQWxnb3JpdGhtcyhjb250cm9sbGVyKSB7XG4gICAgY29udHJvbGxlci5fdHJhbnNmb3JtQWxnb3JpdGhtID0gdW5kZWZpbmVkO1xuICAgIGNvbnRyb2xsZXIuX2ZsdXNoQWxnb3JpdGhtID0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlKGNvbnRyb2xsZXIsIGNodW5rKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbTtcbiAgICBjb25zdCByZWFkYWJsZUNvbnRyb2xsZXIgPSBzdHJlYW0uX3JlYWRhYmxlLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI7XG4gICAgaWYgKCFSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FuQ2xvc2VPckVucXVldWUocmVhZGFibGVDb250cm9sbGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZSBzaWRlIGlzIG5vdCBpbiBhIHN0YXRlIHRoYXQgcGVybWl0cyBlbnF1ZXVlJyk7XG4gICAgfVxuICAgIC8vIFdlIHRocm90dGxlIHRyYW5zZm9ybSBpbnZvY2F0aW9ucyBiYXNlZCBvbiB0aGUgYmFja3ByZXNzdXJlIG9mIHRoZSBSZWFkYWJsZVN0cmVhbSwgYnV0IHdlIHN0aWxsXG4gICAgLy8gYWNjZXB0IFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSgpIGNhbGxzLlxuICAgIHRyeSB7XG4gICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlKHJlYWRhYmxlQ29udHJvbGxlciwgY2h1bmspO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWFkYWJsZVN0cmF0ZWd5LnNpemUoKSB0aHJvd3MuXG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9yV3JpdGFibGVBbmRVbmJsb2NrV3JpdGUoc3RyZWFtLCBlKTtcbiAgICAgICAgdGhyb3cgc3RyZWFtLl9yZWFkYWJsZS5fc3RvcmVkRXJyb3I7XG4gICAgfVxuICAgIGNvbnN0IGJhY2twcmVzc3VyZSA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJIYXNCYWNrcHJlc3N1cmUocmVhZGFibGVDb250cm9sbGVyKTtcbiAgICBpZiAoYmFja3ByZXNzdXJlICE9PSBzdHJlYW0uX2JhY2twcmVzc3VyZSkge1xuICAgICAgICBUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUoc3RyZWFtLCB0cnVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpIHtcbiAgICBUcmFuc2Zvcm1TdHJlYW1FcnJvcihjb250cm9sbGVyLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLCBlKTtcbn1cbmZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyUGVyZm9ybVRyYW5zZm9ybShjb250cm9sbGVyLCBjaHVuaykge1xuICAgIGNvbnN0IHRyYW5zZm9ybVByb21pc2UgPSBjb250cm9sbGVyLl90cmFuc2Zvcm1BbGdvcml0aG0oY2h1bmspO1xuICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9taXNlV2l0aCh0cmFuc2Zvcm1Qcm9taXNlLCB1bmRlZmluZWQsIHIgPT4ge1xuICAgICAgICBUcmFuc2Zvcm1TdHJlYW1FcnJvcihjb250cm9sbGVyLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLCByKTtcbiAgICAgICAgdGhyb3cgcjtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyVGVybWluYXRlKGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtO1xuICAgIGNvbnN0IHJlYWRhYmxlQ29udHJvbGxlciA9IHN0cmVhbS5fcmVhZGFibGUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcjtcbiAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UocmVhZGFibGVDb250cm9sbGVyKTtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbSB0ZXJtaW5hdGVkJyk7XG4gICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JXcml0YWJsZUFuZFVuYmxvY2tXcml0ZShzdHJlYW0sIGVycm9yKTtcbn1cbi8vIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRTaW5rIEFsZ29yaXRobXNcbmZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRTaW5rV3JpdGVBbGdvcml0aG0oc3RyZWFtLCBjaHVuaykge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBzdHJlYW0uX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXI7XG4gICAgaWYgKHN0cmVhbS5fYmFja3ByZXNzdXJlKSB7XG4gICAgICAgIGNvbnN0IGJhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgPSBzdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9taXNlV2l0aChiYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3cml0YWJsZSA9IHN0cmVhbS5fd3JpdGFibGU7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHdyaXRhYmxlLl9zdGF0ZTtcbiAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IHdyaXRhYmxlLl9zdG9yZWRFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlclBlcmZvcm1UcmFuc2Zvcm0oY29udHJvbGxlciwgY2h1bmspO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyUGVyZm9ybVRyYW5zZm9ybShjb250cm9sbGVyLCBjaHVuayk7XG59XG5mdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0U2lua0Fib3J0QWxnb3JpdGhtKHN0cmVhbSwgcmVhc29uKSB7XG4gICAgLy8gYWJvcnQoKSBpcyBub3QgY2FsbGVkIHN5bmNocm9ub3VzbHksIHNvIGl0IGlzIHBvc3NpYmxlIGZvciBhYm9ydCgpIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgYWxyZWFkeVxuICAgIC8vIGVycm9yZWQuXG4gICAgVHJhbnNmb3JtU3RyZWFtRXJyb3Ioc3RyZWFtLCByZWFzb24pO1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZWRXaXRoKHVuZGVmaW5lZCk7XG59XG5mdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0U2lua0Nsb3NlQWxnb3JpdGhtKHN0cmVhbSkge1xuICAgIC8vIHN0cmVhbS5fcmVhZGFibGUgY2Fubm90IGNoYW5nZSBhZnRlciBjb25zdHJ1Y3Rpb24sIHNvIGNhY2hpbmcgaXQgYWNyb3NzIGEgY2FsbCB0byB1c2VyIGNvZGUgaXMgc2FmZS5cbiAgICBjb25zdCByZWFkYWJsZSA9IHN0cmVhbS5fcmVhZGFibGU7XG4gICAgY29uc3QgY29udHJvbGxlciA9IHN0cmVhbS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcjtcbiAgICBjb25zdCBmbHVzaFByb21pc2UgPSBjb250cm9sbGVyLl9mbHVzaEFsZ29yaXRobSgpO1xuICAgIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xlYXJBbGdvcml0aG1zKGNvbnRyb2xsZXIpO1xuICAgIC8vIFJldHVybiBhIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCB1bmRlZmluZWQgb24gc3VjY2Vzcy5cbiAgICByZXR1cm4gdHJhbnNmb3JtUHJvbWlzZVdpdGgoZmx1c2hQcm9taXNlLCAoKSA9PiB7XG4gICAgICAgIGlmIChyZWFkYWJsZS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgdGhyb3cgcmVhZGFibGUuX3N0b3JlZEVycm9yO1xuICAgICAgICB9XG4gICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShyZWFkYWJsZS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyKTtcbiAgICB9LCByID0+IHtcbiAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3Ioc3RyZWFtLCByKTtcbiAgICAgICAgdGhyb3cgcmVhZGFibGUuX3N0b3JlZEVycm9yO1xuICAgIH0pO1xufVxuLy8gVHJhbnNmb3JtU3RyZWFtRGVmYXVsdFNvdXJjZSBBbGdvcml0aG1zXG5mdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0U291cmNlUHVsbEFsZ29yaXRobShzdHJlYW0pIHtcbiAgICAvLyBJbnZhcmlhbnQuIEVuZm9yY2VkIGJ5IHRoZSBwcm9taXNlcyByZXR1cm5lZCBieSBzdGFydCgpIGFuZCBwdWxsKCkuXG4gICAgVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKHN0cmVhbSwgZmFsc2UpO1xuICAgIC8vIFByZXZlbnQgdGhlIG5leHQgcHVsbCgpIGNhbGwgdW50aWwgdGhlcmUgaXMgYmFja3ByZXNzdXJlLlxuICAgIHJldHVybiBzdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U7XG59XG4vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuXG5mdW5jdGlvbiBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKGBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuJHtuYW1lfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJgKTtcbn1cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBUcmFuc2Zvcm1TdHJlYW0uXG5mdW5jdGlvbiBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihgVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZS4ke25hbWV9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW1gKTtcbn1cblxuZXhwb3J0IHsgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSwgQ291bnRRdWV1aW5nU3RyYXRlZ3ksIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsIFJlYWRhYmxlU3RyZWFtLCBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIsIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QsIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIsIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciwgVHJhbnNmb3JtU3RyZWFtLCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciwgV3JpdGFibGVTdHJlYW0sIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIsIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9ueWZpbGwuZXMyMDE4Lm1qcy5tYXBcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlLnBhdGhzID0gW107XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3NSk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJldmVudFRhcmdldFNoaW0iLCJBYm9ydFNpZ25hbCIsIkV2ZW50VGFyZ2V0IiwiY29uc3RydWN0b3IiLCJzdXBlciIsIlR5cGVFcnJvciIsImFib3J0ZWQiLCJhYm9ydGVkRmxhZ3MiLCJnZXQiLCJkZWZpbmVFdmVudEF0dHJpYnV0ZSIsInByb3RvdHlwZSIsIldlYWtNYXAiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZW51bWVyYWJsZSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiY29uZmlndXJhYmxlIiwiQWJvcnRDb250cm9sbGVyIiwic2lnbmFscyIsInNldCIsInNpZ25hbCIsImNyZWF0ZSIsImNhbGwiLCJjcmVhdGVBYm9ydFNpZ25hbCIsImdldFNpZ25hbCIsImFib3J0IiwiZGlzcGF0Y2hFdmVudCIsInR5cGUiLCJjb250cm9sbGVyIiwib3B0aW9ucyIsImZvcm1EYXRhIiwiY29uZmlnIiwiX19hc3NpZ24iLCJ1cmwiLCJ1c2VybmFtZSIsIkVycm9yIiwia2V5IiwicmVxdWVzdCIsInJlcXVlc3RfMSIsIm1haWxMaXN0c01lbWJlcnMiLCJtYWlsTGlzdE1lbWJlcnNfMSIsImRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwiZG9tYWluc0NyZWRlbnRpYWxzXzEiLCJkb21haW5UZW1wbGF0ZXNDbGllbnQiLCJkb21haW5zVGVtcGxhdGVzXzEiLCJkb21haW5UYWdzQ2xpZW50IiwiZG9tYWluc1RhZ3NfMSIsIm11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsIm11bHRpcGxlVmFsaWRhdGlvbl8xIiwiZG9tYWlucyIsImRvbWFpbnNfMSIsIndlYmhvb2tzIiwid2ViaG9va3NfMSIsImV2ZW50cyIsImV2ZW50c18xIiwic3RhdHMiLCJzdGF0c18xIiwic3VwcHJlc3Npb25zIiwic3VwcHJlc3Npb25zXzEiLCJtZXNzYWdlcyIsIm1lc3NhZ2VzXzEiLCJyb3V0ZXMiLCJyb3V0ZXNfMSIsImlwcyIsImlwc18xIiwiaXBfcG9vbHMiLCJpcF9wb29sc18xIiwibGlzdHMiLCJsaXN0c18xIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZV8xIiwiZGF0YSIsInJlY2VpdmluZyIsInNlbmRpbmciLCJuYW1lIiwicmVxdWlyZV90bHMiLCJza2lwX3ZlcmlmaWNhdGlvbiIsInN0YXRlIiwid2lsZGNhcmQiLCJzcGFtX2FjdGlvbiIsImNyZWF0ZWRfYXQiLCJzbXRwX3Bhc3N3b3JkIiwic210cF9sb2dpbiIsInJlY2VpdmluZ19kbnNfcmVjb3JkcyIsInNlbmRpbmdfZG5zX3JlY29yZHMiLCJkb21haW5DcmVkZW50aWFscyIsImRvbWFpblRlbXBsYXRlcyIsImRvbWFpblRhZ3MiLCJEb21haW5DbGllbnQiLCJyZXNwb25zZSIsImJvZHkiLCJpdGVtcyIsIm1hcCIsIml0ZW0iLCJEb21haW4iLCJkb21haW4iLCJ0cmFja2luZyIsInF1ZXJ5IiwidGhlbiIsInJlcyIsIl9wYXJzZURvbWFpbkxpc3QiLCJfcGFyc2VEb21haW4iLCJwb3N0T2JqIiwiZm9yY2VfZGtpbV9hdXRob3JpdHkiLCJ0b1N0cmluZyIsInBvc3RXaXRoRkQiLCJwdXQiLCJkZWxldGUiLCJfcGFyc2VNZXNzYWdlIiwiY29ubmVjdGlvbiIsIl9wYXJzZVRyYWNraW5nU2V0dGluZ3MiLCJhY3RpdmUiLCJlcnJvcl8xIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsIm1lc3NhZ2UiLCJwdXRXaXRoRkQiLCJfcGFyc2VUcmFja2luZ1VwZGF0ZSIsIl9hIiwiaXAiLCJwb29sX2lkIiwicmVwbGFjZW1lbnQiLCJzZWFyY2hQYXJhbXMiLCJzZWxmIiwiZGtpbVNlbGVjdG9yIiwid2ViUHJlZml4IiwiYmFzZVJvdXRlIiwiRG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJ0b3RhbENvdW50IiwidG90YWxfY291bnQiLCJzcGVjIiwiX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0IiwiY29uY2F0IiwiX3BhcnNlTWVzc2FnZVJlc3BvbnNlIiwiY3JlZGVudGlhbHNMb2dpbiIsIl9wYXJzZURlbGV0ZWRSZXNwb25zZSIsInRhZ0luZm8iLCJ0YWciLCJkZXNjcmlwdGlvbiIsIkRhdGUiLCJ0YWdTdGF0aXN0aWNJbmZvIiwic3RhcnQiLCJlbmQiLCJyZXNvbHV0aW9uIiwic3RhdCIsInRpbWUiLCJEb21haW5UYWdzQ2xpZW50IiwiZW50cmllcyIsInBhZ2luZyIsInJlZHVjZSIsImFjYyIsImVudHJpZSIsImlkIiwiRG9tYWluVGFnIiwicGFnZXMiLCJfcGFyc2VQYWdlTGlua3MiLCJEb21haW5UYWdTdGF0aXN0aWMiLCJfcGFyc2VEb21haW5UYWdzTGlzdCIsIl9wYXJzZVRhZ1N0YXRpc3RpYyIsImRvbWFpblRlbXBsYXRlRnJvbUFQSSIsImNyZWF0ZWRBdCIsImNyZWF0ZWRCeSIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsImxlbmd0aCIsInJlc3VsdCIsIkRvbWFpblRlbXBsYXRlc0NsaWVudCIsIkRvbWFpblRlbXBsYXRlSXRlbSIsInRlbXBsYXRlIiwidGVtcGxhdGVOYW1lIiwidGVtcGxhdGVWZXJzaW9uIiwiZCIsInBhcnNlTGlzdCIsInBhcnNlQ3JlYXRpb25SZXNwb25zZSIsInBhcnNlTXV0YXRpb25SZXNwb25zZSIsInBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UiLCJwYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlIiwicGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZSIsInBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMiLCJfYiIsImJvZHlNZXNzYWdlIiwiZXJyb3IiLCJfc3VwZXIiLCJzdGFjayIsIl90aGlzIiwiZGV0YWlscyIsIl9fZXh0ZW5kcyIsIkV2ZW50Q2xpZW50Iiwic3BsaXQiLCJwb3AiLCJudW1iZXIiLCJfcGFyc2VQYWdlTnVtYmVyIiwicGFpciIsIl9wYXJzZVBhZ2UiLCJxdWVyeUNvcHkiLCJwYWdlIiwiX3BhcnNlRXZlbnRMaXN0IiwiRm9ybURhdGFDb25zdHJ1Y3RvciIsIkZvcm1EYXRhQnVpbGRlciIsImtleXMiLCJmaWx0ZXIiLCJmb3JtRGF0YUFjYyIsImluY2x1ZGVzIiwiYWRkRmlsZXNUb0ZEIiwiYWRkTWltZURhdGFUb0ZEIiwiYWRkQ29tbW9uUHJvcGVydHlUb0ZEIiwiZm9ybURhdGFJbnN0YW5jZSIsInVuZGVmaW5lZCIsImdldEhlYWRlcnMiLCJpc1N0cmVhbSIsImZpbGVuYW1lIiwiY29udGVudFR5cGUiLCJrbm93bkxlbmd0aCIsImlzTm9kZUZvcm1EYXRhIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJhcHBlbmQiLCJwcm9wZXJ0eU5hbWUiLCJhcHBlbmRGaWxlVG9GRCIsIm9yaWdpbmFsS2V5Iiwib2JqIiwib2JqRGF0YSIsImdldEF0dGFjaG1lbnRPcHRpb25zIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9yRWFjaCIsInBpcGUiLCJGb3JtRGF0YSIsIk1haWxndW4iLCJjbGllbnRfMSIsIlN1cHByZXNzaW9uTW9kZWxzIiwiSXBQb29sc0NsaWVudCIsInBhcnNlSXBQb29sc1Jlc3BvbnNlIiwicG9vbElkIiwicGF0Y2hXaXRoRkQiLCJJcHNDbGllbnQiLCJwYXJzZUlwc1Jlc3BvbnNlIiwibWVtYmVycyIsIkxpc3RzQ2xpZW50IiwidmFsaWRhdGlvblJlc3VsdCIsIm1haWxMaXN0QWRkcmVzcyIsImxpc3QiLCJwb3N0IiwicGFyc2VWYWxpZGF0aW9uUmVzdWx0IiwiTWFpbExpc3RzTWVtYmVycyIsIm5ld0RhdGEiLCJ2YXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsInN1YnNjcmliZWQiLCJtYWlsTGlzdE1lbWJlckFkZHJlc3MiLCJtZW1iZXIiLCJyZXFEYXRhIiwiY2hlY2tBbmRVcGRhdGVEYXRhIiwidXBzZXJ0IiwiTWVzc2FnZXNDbGllbnQiLCJfcGFyc2VSZXNwb25zZSIsIk11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsImhhbmRsZVJlc3BvbnNlIiwibGlzdElkIiwicmVzcG9uc2VTdGF0dXNDb2RlIiwibXVsdGlwbGVWYWxpZGF0aW9uRGF0YSIsIm11bHRpcGxlVmFsaWRhdGlvbkZpbGUiLCJmaWxlIiwidGltZW91dCIsImhlYWRlcnMiLCJmb3JtRGF0YUJ1aWxkZXIiLCJmb3JtRGF0YUJ1aWxkZXJfMSIsIlJlcXVlc3QiLCJtZXRob2QiLCJvbkNhbGxPcHRpb25zIiwiYmFzaWMiLCJiYXNlNjQiLCJlbmNvZGUiLCJvbkNhbGxIZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsInBhcmFtcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0b0xvY2FsZVVwcGVyQ2FzZSIsInRocm93SHR0cEVycm9ycyIsIm9rIiwiZ2V0UmVzcG9uc2VCb2R5IiwicmVzXzEiLCJyZXNwb25zZVN0cmluZyIsInRleHQiLCJqc29uQm9keSIsInBhcnNlIiwiYWRkRGVmYXVsdEhlYWRlcnMiLCJyZXF1ZXN0T3B0aW9ucyIsImNvbW1hbmQiLCJjcmVhdGVGb3JtRGF0YSIsIlJvdXRlc0NsaWVudCIsInJvdXRlIiwiU3RhdHNDbGllbnQiLCJhcnJheVdpdGhQYWlycyIsImN1cnJlbnRQYWlyIiwicmVwZWF0ZWRQcm9wZXJ0eSIsInB1c2giLCJTdGF0cyIsInByZXBhcmVTZWFyY2hQYXJhbXMiLCJfcGFyc2VTdGF0cyIsImNyZWF0ZU9wdGlvbnMiLCJTdXByZXNzaW9uc18xIiwiQk9VTkNFUyIsImFkZHJlc3MiLCJjb2RlIiwiU3VwcHJlc3Npb24iLCJDT01QTEFJTlRTIiwiVU5TVUJTQ1JJQkVTIiwidGFncyIsIldISVRFTElTVFMiLCJyZWFzb24iLCJtb2RlbHMiLCJNYXAiLCJCb3VuY2UiLCJDb21wbGFpbnQiLCJVbnN1YnNjcmliZSIsIldoaXRlTGlzdCIsIlN1cHByZXNzaW9uQ2xpZW50IiwicGFnZVVybCIsIlVSTCIsImhhcyIsIk1vZGVsIiwicHJlcGFyZVJlc3BvbnNlIiwiY2hlY2tUeXBlIiwibW9kZWwiLCJfcGFyc2VMaXN0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiX3BhcnNlSXRlbSIsInBvc3REYXRhIiwiY3JlYXRlV2hpdGVMaXN0IiwibXVsdGlwbGVWYWxpZGF0aW9uIiwiVmFsaWRhdGVDbGllbnQiLCJXZWJob29rQ2xpZW50Iiwid2ViaG9va1Jlc3BvbnNlIiwid2ViaG9vayIsInVybHMiLCJXZWJob29rIiwiX3BhcnNlV2ViaG9va0xpc3QiLCJfcGFyc2VXZWJob29rV2l0aElEIiwidGVzdCIsIl9wYXJzZVdlYmhvb2tUZXN0IiwiZnJlZUV4cG9ydHMiLCJmcmVlR2xvYmFsIiwiZ2xvYmFsIiwid2luZG93IiwiSW52YWxpZENoYXJhY3RlckVycm9yIiwiVEFCTEUiLCJSRUdFWF9TUEFDRV9DSEFSQUNURVJTIiwiaW5wdXQiLCJTdHJpbmciLCJhIiwiYiIsImMiLCJidWZmZXIiLCJwYWRkaW5nIiwib3V0cHV0IiwicG9zaXRpb24iLCJjaGFyQ29kZUF0IiwiY2hhckF0IiwicmVwbGFjZSIsImJpdFN0b3JhZ2UiLCJiaXRDb3VudGVyIiwiaW5kZXhPZiIsImZyb21DaGFyQ29kZSIsInVyaSIsImZpcnN0Q29tbWEiLCJtZXRhIiwic3Vic3RyaW5nIiwiY2hhcnNldCIsInR5cGVGdWxsIiwiaSIsImVuY29kaW5nIiwidW5lc2NhcGUiLCJmcm9tIiwicHJpdmF0ZURhdGEiLCJ3cmFwcGVycyIsInBkIiwiZXZlbnQiLCJyZXR2IiwiY29uc29sZSIsImFzc2VydCIsInNldENhbmNlbEZsYWciLCJwYXNzaXZlTGlzdGVuZXIiLCJjYW5jZWxhYmxlIiwiY2FuY2VsZWQiLCJwcmV2ZW50RGVmYXVsdCIsIkV2ZW50IiwiZXZlbnRUYXJnZXQiLCJldmVudFBoYXNlIiwiY3VycmVudFRhcmdldCIsInN0b3BwZWQiLCJpbW1lZGlhdGVTdG9wcGVkIiwidGltZVN0YW1wIiwibm93IiwiZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yIiwiZGVmaW5lQ2FsbERlc2NyaXB0b3IiLCJhcHBseSIsImFyZ3VtZW50cyIsImdldFdyYXBwZXIiLCJwcm90byIsIndyYXBwZXIiLCJCYXNlRXZlbnQiLCJDdXN0b21FdmVudCIsIndyaXRhYmxlIiwiaXNGdW5jIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZGVmaW5lV3JhcHBlciIsImdldFByb3RvdHlwZU9mIiwiaXNTdG9wcGVkIiwic2V0UGFzc2l2ZUxpc3RlbmVyIiwidGFyZ2V0IiwiY29tcG9zZWRQYXRoIiwiTk9ORSIsIkNBUFRVUklOR19QSEFTRSIsIkFUX1RBUkdFVCIsIkJVQkJMSU5HX1BIQVNFIiwic3RvcFByb3BhZ2F0aW9uIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwiYnViYmxlcyIsIkJvb2xlYW4iLCJkZWZhdWx0UHJldmVudGVkIiwiY29tcG9zZWQiLCJzcmNFbGVtZW50IiwiY2FuY2VsQnViYmxlIiwicmV0dXJuVmFsdWUiLCJpbml0RXZlbnQiLCJzZXRQcm90b3R5cGVPZiIsImxpc3RlbmVyc01hcCIsImlzT2JqZWN0IiwieCIsImdldExpc3RlbmVycyIsImxpc3RlbmVycyIsImV2ZW50VGFyZ2V0UHJvdG90eXBlIiwiZXZlbnROYW1lIiwibm9kZSIsImxpc3RlbmVyVHlwZSIsImxpc3RlbmVyIiwibmV4dCIsInByZXYiLCJuZXdOb2RlIiwicGFzc2l2ZSIsIm9uY2UiLCJkZWZpbmVFdmVudEF0dHJpYnV0ZURlc2NyaXB0b3IiLCJkZWZpbmVDdXN0b21FdmVudFRhcmdldCIsImV2ZW50TmFtZXMiLCJDdXN0b21FdmVudFRhcmdldCIsInR5cGVzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9wdGlvbnNJc09iaiIsImNhcHR1cmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwid3JhcHBlZEV2ZW50Iiwid3JhcEV2ZW50IiwiZXJyIiwiaGFuZGxlRXZlbnQiLCJzZXRFdmVudFBoYXNlIiwic2V0Q3VycmVudFRhcmdldCIsIlJlYWRhYmxlIiwid20iLCJCbG9iIiwiYmxvYlBhcnRzIiwic2l6ZSIsInBhcnRzIiwiZWxlbWVudCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnl0ZU9mZnNldCIsImJ5dGVMZW5ndGgiLCJ0b0xvd2VyQ2FzZSIsImFzeW5jIiwiYXJyYXlCdWZmZXIiLCJVaW50OEFycmF5Iiwib2Zmc2V0IiwiY2h1bmsiLCJzdHJlYW0iLCJwYXJ0IiwicmVhZCIsInNsaWNlIiwicmVsYXRpdmVTdGFydCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJyZWxhdGl2ZUVuZCIsInNwYW4iLCJ2YWx1ZXMiLCJhZGRlZCIsImJsb2IiLCJhc3NpZ24iLCJzdGF0aWMiLCJoYXNJbnN0YW5jZSIsIm9iamVjdCIsImZldGNoIiwiaGlnaFdhdGVyTWFyayIsIkhlYWRlcnMiLCJSZXNwb25zZSIsIlJlYWRhYmxlU3RyZWFtIiwiXyIsImdsb2JhbHMiLCJnZXRHbG9iYWwiLCJwcm9wZXJ0eSIsImdsb2JhbFRoaXMiLCJnbG9iYWxQcm9wZXJ0aWVzIiwiZ2xvYmFsT2JqZWN0IiwiYmluZCIsInN1cHBvcnRzQWJvcnRDb250cm9sbGVyIiwic3VwcG9ydHNTdHJlYW1zIiwic3VwcG9ydHNGb3JtRGF0YSIsIm1lcmdlSGVhZGVycyIsInNvdXJjZTEiLCJzb3VyY2UyIiwiaXNIZWFkZXJzSW5zdGFuY2UiLCJzb3VyY2UiLCJkZWVwTWVyZ2UiLCJzb3VyY2VzIiwicmVxdWVzdE1ldGhvZHMiLCJyZXNwb25zZVR5cGVzIiwianNvbiIsInJldHJ5QWZ0ZXJTdGF0dXNDb2RlcyIsInN0b3AiLCJIVFRQRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJkZWxheSIsIm1zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0Iiwibm9ybWFsaXplUmVxdWVzdE1ldGhvZCIsInRvVXBwZXJDYXNlIiwiZGVmYXVsdFJldHJ5T3B0aW9ucyIsImxpbWl0IiwibWV0aG9kcyIsInN0YXR1c0NvZGVzIiwiYWZ0ZXJTdGF0dXNDb2RlcyIsIm5vcm1hbGl6ZVJldHJ5T3B0aW9ucyIsInJldHJ5IiwibWF4U2FmZVRpbWVvdXQiLCJLeSIsIl9yZXRyeUNvdW50IiwiX2lucHV0IiwiX29wdGlvbnMiLCJjcmVkZW50aWFscyIsImhvb2tzIiwiYmVmb3JlUmVxdWVzdCIsImJlZm9yZVJldHJ5IiwiYWZ0ZXJSZXNwb25zZSIsInByZWZpeFVybCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImFib3J0Q29udHJvbGxlciIsIlVSTFNlYXJjaFBhcmFtcyIsImZuIiwiUmFuZ2VFcnJvciIsIl9mZXRjaCIsImhvb2siLCJtb2RpZmllZFJlc3BvbnNlIiwiX2RlY29yYXRlUmVzcG9uc2UiLCJjbG9uZSIsIm9uRG93bmxvYWRQcm9ncmVzcyIsIl9zdHJlYW0iLCJfcmV0cnkiLCJtaW1lVHlwZSIsInBhcnNlSnNvbiIsIl9jYWxjdWxhdGVSZXRyeURlbGF5IiwicmV0cnlBZnRlciIsImFmdGVyIiwiTnVtYmVyIiwiaXNOYU4iLCJtYXhSZXRyeUFmdGVyIiwicmV0cnlDb3VudCIsInJlamVjdCIsInRpbWVvdXRJRCIsImNhdGNoIiwiY2xlYXJUaW1lb3V0IiwidG90YWxCeXRlcyIsInRyYW5zZmVycmVkQnl0ZXMiLCJyZWFkZXIiLCJnZXRSZWFkZXIiLCJwZXJjZW50IiwiZG9uZSIsImNsb3NlIiwiZW5xdWV1ZSIsInZhbGlkYXRlQW5kTWVyZ2UiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRzIiwia3kiLCJuZXdEZWZhdWx0cyIsImV4dGVuZCIsIm5vcm1hbGl6ZSIsInN0ckFycmF5IiwicmVzdWx0QXJyYXkiLCJtYXRjaCIsImZpcnN0Iiwic2hpZnQiLCJjb21wb25lbnQiLCJzdHIiLCJqb2luIiwiZGVmaW5pdGlvbiIsInJlcXVpcmUiLCJodHRwIiwiaHR0cHMiLCJ6bGliIiwiU3RyZWFtIiwiZGF0YVVyaVRvQnVmZmVyIiwidXRpbCIsImNyeXB0byIsIkZldGNoQmFzZUVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJGZXRjaEVycm9yIiwic3lzdGVtRXJyb3IiLCJlcnJubyIsImVycm9yZWRTeXNDYWxsIiwic3lzY2FsbCIsIk5BTUUiLCJpc1VSTFNlYXJjaFBhcmFtZXRlcnMiLCJnZXRBbGwiLCJzb3J0IiwiaXNCbG9iIiwiaXNGb3JtRGF0YSIsImNhcnJpYWdlIiwiZGFzaGVzIiwicmVwZWF0IiwiY2FycmlhZ2VMZW5ndGgiLCJnZXRGb290ZXIiLCJib3VuZGFyeSIsImdldEhlYWRlciIsImZpZWxkIiwiaGVhZGVyIiwiSU5URVJOQUxTIiwiQm9keSIsImlzQW55QXJyYXlCdWZmZXIiLCJyYW5kb21CeXRlcyIsImZvcm0iLCJmb3JtRGF0YUl0ZXJhdG9yIiwiZGlzdHVyYmVkIiwib24iLCJib2R5VXNlZCIsImNvbnN1bWVCb2R5IiwiY3QiLCJidWYiLCJhbGxvYyIsImFjY3VtIiwiYWNjdW1CeXRlcyIsImRlc3Ryb3kiLCJyZWFkYWJsZUVuZGVkIiwiX3JlYWRhYmxlU3RhdGUiLCJlbmRlZCIsImV2ZXJ5IiwiaW5zdGFuY2UiLCJwMSIsInAyIiwiZ2V0Qm91bmRhcnkiLCJQYXNzVGhyb3VnaCIsImV4dHJhY3RDb250ZW50VHlwZSIsImdldFRvdGFsQnl0ZXMiLCJnZXRMZW5ndGhTeW5jIiwiaGFzS25vd25MZW5ndGgiLCJnZXRGb3JtRGF0YUxlbmd0aCIsInZhbGlkYXRlSGVhZGVyTmFtZSIsInZhbGlkYXRlSGVhZGVyVmFsdWUiLCJpbml0IiwicmF3IiwiaXNCb3hlZFByaW1pdGl2ZSIsIml0ZXJhdG9yIiwiUHJveHkiLCJwIiwicmVjZWl2ZXIiLCJTZXQiLCJSZWZsZWN0IiwiY2FsbGJhY2siLCJmb3IiLCJyZWRpcmVjdFN0YXR1cyIsImlzUmVkaXJlY3QiLCJJTlRFUk5BTFMkMSIsImNvdW50ZXIiLCJyZWRpcmVjdGVkIiwibG9jYXRpb24iLCJJTlRFUk5BTFMkMiIsImlzUmVxdWVzdCIsInBhcnNlZFVSTCIsImlucHV0Qm9keSIsInJlZGlyZWN0IiwiZm9sbG93IiwiY29tcHJlc3MiLCJhZ2VudCIsImluc2VjdXJlSFRUUFBhcnNlciIsImZvcm1hdCIsIkFib3J0RXJyb3IiLCJzdXBwb3J0ZWRTY2hlbWFzIiwib3B0aW9uc18iLCJjb250ZW50TGVuZ3RoVmFsdWUiLCJzZWFyY2giLCJsYXN0T2Zmc2V0IiwiaHJlZiIsImhhc2giLCJnZXRTZWFyY2giLCJwYXRoIiwicGF0aG5hbWUiLCJob3N0bmFtZSIsInByb3RvY29sIiwicG9ydCIsImdldE5vZGVSZXF1ZXN0T3B0aW9ucyIsInNlbmQiLCJlbWl0IiwiYWJvcnRBbmRGaW5hbGl6ZSIsImZpbmFsaXplIiwicmVxdWVzdF8iLCJyZXNwb25zZV8iLCJpbmRleCIsImFycmF5IiwiZnJvbVJhd0hlYWRlcnMiLCJyYXdIZWFkZXJzIiwic3RhdHVzQ29kZSIsImxvY2F0aW9uVVJMIiwicGlwZWxpbmUiLCJwcm9jZXNzIiwicmVzcG9uc2VPcHRpb25zIiwic3RhdHVzTWVzc2FnZSIsImNvZGluZ3MiLCJ6bGliT3B0aW9ucyIsImZsdXNoIiwiWl9TWU5DX0ZMVVNIIiwiZmluaXNoRmx1c2giLCJjcmVhdGVHdW56aXAiLCJjcmVhdGVCcm90bGlEZWNvbXByZXNzIiwiY3JlYXRlSW5mbGF0ZSIsImNyZWF0ZUluZmxhdGVSYXciLCJkZXN0Iiwid3JpdGUiLCJ3cml0ZVRvU3RyZWFtIiwiU3ltYm9sUG9seWZpbGwiLCJub29wIiwidHlwZUlzT2JqZWN0IiwicmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uIiwib3JpZ2luYWxQcm9taXNlIiwib3JpZ2luYWxQcm9taXNlVGhlbiIsIm9yaWdpbmFsUHJvbWlzZVJlc29sdmUiLCJvcmlnaW5hbFByb21pc2VSZWplY3QiLCJuZXdQcm9taXNlIiwiZXhlY3V0b3IiLCJwcm9taXNlUmVzb2x2ZWRXaXRoIiwicHJvbWlzZVJlamVjdGVkV2l0aCIsIlBlcmZvcm1Qcm9taXNlVGhlbiIsInByb21pc2UiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJ1cG9uUHJvbWlzZSIsInVwb25GdWxmaWxsbWVudCIsInVwb25SZWplY3Rpb24iLCJ0cmFuc2Zvcm1Qcm9taXNlV2l0aCIsImZ1bGZpbGxtZW50SGFuZGxlciIsInJlamVjdGlvbkhhbmRsZXIiLCJzZXRQcm9taXNlSXNIYW5kbGVkVG9UcnVlIiwicXVldWVNaWNyb3Rhc2siLCJnbG9iYWxRdWV1ZU1pY3JvdGFzayIsInJlc29sdmVkUHJvbWlzZSIsInJlZmxlY3RDYWxsIiwiRiIsIlYiLCJhcmdzIiwiRnVuY3Rpb24iLCJwcm9taXNlQ2FsbCIsIlNpbXBsZVF1ZXVlIiwiX2N1cnNvciIsIl9zaXplIiwiX2Zyb250IiwiX2VsZW1lbnRzIiwiX25leHQiLCJfYmFjayIsIm9sZEJhY2siLCJuZXdCYWNrIiwiUVVFVUVfTUFYX0FSUkFZX1NJWkUiLCJvbGRGcm9udCIsIm5ld0Zyb250Iiwib2xkQ3Vyc29yIiwibmV3Q3Vyc29yIiwiZWxlbWVudHMiLCJwZWVrIiwiZnJvbnQiLCJjdXJzb3IiLCJSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNJbml0aWFsaXplIiwiX293bmVyUmVhZGFibGVTdHJlYW0iLCJfcmVhZGVyIiwiX3N0YXRlIiwiZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplIiwiZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZXNvbHZlIiwiZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCIsImRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQiLCJfc3RvcmVkRXJyb3IiLCJSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNDYW5jZWwiLCJSZWFkYWJsZVN0cmVhbUNhbmNlbCIsIlJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UiLCJkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlamVjdCIsImRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVzZXRUb1JlamVjdGVkIiwicmVhZGVyTG9ja0V4Y2VwdGlvbiIsIl9jbG9zZWRQcm9taXNlIiwiX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSIsIl9jbG9zZWRQcm9taXNlX3JlamVjdCIsIkFib3J0U3RlcHMiLCJFcnJvclN0ZXBzIiwiQ2FuY2VsU3RlcHMiLCJQdWxsU3RlcHMiLCJOdW1iZXJJc0Zpbml0ZSIsImlzRmluaXRlIiwiTWF0aFRydW5jIiwidHJ1bmMiLCJ2IiwiY2VpbCIsImZsb29yIiwiYXNzZXJ0RGljdGlvbmFyeSIsImNvbnRleHQiLCJhc3NlcnRGdW5jdGlvbiIsImFzc2VydE9iamVjdCIsImFzc2VydFJlcXVpcmVkQXJndW1lbnQiLCJhc3NlcnRSZXF1aXJlZEZpZWxkIiwiY29udmVydFVucmVzdHJpY3RlZERvdWJsZSIsImNlbnNvck5lZ2F0aXZlWmVybyIsImNvbnZlcnRVbnNpZ25lZExvbmdMb25nV2l0aEVuZm9yY2VSYW5nZSIsInVwcGVyQm91bmQiLCJNQVhfU0FGRV9JTlRFR0VSIiwiaW50ZWdlclBhcnQiLCJhc3NlcnRSZWFkYWJsZVN0cmVhbSIsIklzUmVhZGFibGVTdHJlYW0iLCJBY3F1aXJlUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiwiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiwiUmVhZGFibGVTdHJlYW1BZGRSZWFkUmVxdWVzdCIsInJlYWRSZXF1ZXN0IiwiX3JlYWRSZXF1ZXN0cyIsIlJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRSZXF1ZXN0IiwiX2Nsb3NlU3RlcHMiLCJfY2h1bmtTdGVwcyIsIlJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzIiwiUmVhZGFibGVTdHJlYW1IYXNEZWZhdWx0UmVhZGVyIiwiSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiLCJJc1JlYWRhYmxlU3RyZWFtTG9ja2VkIiwiY2xvc2VkIiwiZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24iLCJjYW5jZWwiLCJyZXNvbHZlUHJvbWlzZSIsInJlamVjdFByb21pc2UiLCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJSZWFkIiwiX2Vycm9yU3RlcHMiLCJlIiwicmVsZWFzZUxvY2siLCJoYXNPd25Qcm9wZXJ0eSIsIl9kaXN0dXJiZWQiLCJfcmVhZGFibGVTdHJlYW1Db250cm9sbGVyIiwiQXN5bmNJdGVyYXRvclByb3RvdHlwZSIsIlJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvckltcGwiLCJwcmV2ZW50Q2FuY2VsIiwiX29uZ29pbmdQcm9taXNlIiwiX2lzRmluaXNoZWQiLCJfcHJldmVudENhbmNlbCIsIm5leHRTdGVwcyIsIl9uZXh0U3RlcHMiLCJyZXR1cm4iLCJyZXR1cm5TdGVwcyIsIl9yZXR1cm5TdGVwcyIsIlJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSIsIklzUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yIiwiX2FzeW5jSXRlcmF0b3JJbXBsIiwic3RyZWFtQXN5bmNJdGVyYXRvckJyYW5kQ2hlY2tFeGNlcHRpb24iLCJOdW1iZXJJc05hTiIsIkNyZWF0ZUFycmF5RnJvbUxpc3QiLCJDb3B5RGF0YUJsb2NrQnl0ZXMiLCJkZXN0T2Zmc2V0Iiwic3JjIiwic3JjT2Zmc2V0IiwibiIsIkFycmF5QnVmZmVyU2xpY2UiLCJiZWdpbiIsIkNsb25lQXNVaW50OEFycmF5IiwiTyIsIkRlcXVldWVWYWx1ZSIsImNvbnRhaW5lciIsIl9xdWV1ZSIsIl9xdWV1ZVRvdGFsU2l6ZSIsIkVucXVldWVWYWx1ZVdpdGhTaXplIiwiSW5maW5pdHkiLCJSZXNldFF1ZXVlIiwiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIsInZpZXciLCJJc1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QiLCJieW9iUmVxdWVzdEJyYW5kQ2hlY2tFeGNlcHRpb24iLCJfdmlldyIsInJlc3BvbmQiLCJieXRlc1dyaXR0ZW4iLCJfYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZCIsInJlc3BvbmRXaXRoTmV3VmlldyIsIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kV2l0aE5ld1ZpZXciLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiwiYnlvYlJlcXVlc3QiLCJJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiLCJieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24iLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyR2V0QllPQlJlcXVlc3QiLCJkZXNpcmVkU2l6ZSIsIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSIsIl9jbG9zZVJlcXVlc3RlZCIsIl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtIiwiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsb3NlIiwiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVucXVldWUiLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IiLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJQZW5kaW5nUHVsbEludG9zIiwiX2NhbmNlbEFsZ29yaXRobSIsIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbGVhckFsZ29yaXRobXMiLCJlbnRyeSIsIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJIYW5kbGVRdWV1ZURyYWluIiwiYXV0b0FsbG9jYXRlQ2h1bmtTaXplIiwiX2F1dG9BbGxvY2F0ZUNodW5rU2l6ZSIsImJ1ZmZlckUiLCJwdWxsSW50b0Rlc2NyaXB0b3IiLCJidWZmZXJCeXRlTGVuZ3RoIiwiYnl0ZXNGaWxsZWQiLCJlbGVtZW50U2l6ZSIsInZpZXdDb25zdHJ1Y3RvciIsInJlYWRlclR5cGUiLCJfcGVuZGluZ1B1bGxJbnRvcyIsIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkIiwic2hvdWxkUHVsbCIsIl9zdGFydGVkIiwiUmVhZGFibGVTdHJlYW1IYXNCWU9CUmVhZGVyIiwiUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkSW50b1JlcXVlc3RzIiwiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNob3VsZENhbGxQdWxsIiwiX3B1bGxpbmciLCJfcHVsbEFnYWluIiwiX3B1bGxBbGdvcml0aG0iLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0IiwiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbW1pdFB1bGxJbnRvRGVzY3JpcHRvciIsImZpbGxlZFZpZXciLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29udmVydFB1bGxJbnRvRGVzY3JpcHRvciIsInJlYWRJbnRvUmVxdWVzdCIsIl9yZWFkSW50b1JlcXVlc3RzIiwiUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZEludG9SZXF1ZXN0IiwiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVucXVldWVDaHVua1RvUXVldWUiLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbFB1bGxJbnRvRGVzY3JpcHRvckZyb21RdWV1ZSIsImN1cnJlbnRBbGlnbmVkQnl0ZXMiLCJtYXhCeXRlc1RvQ29weSIsIm1heEJ5dGVzRmlsbGVkIiwibWF4QWxpZ25lZEJ5dGVzIiwidG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyIsInJlYWR5IiwicXVldWUiLCJoZWFkT2ZRdWV1ZSIsImJ5dGVzVG9Db3B5IiwiZGVzdFN0YXJ0IiwiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZpbGxIZWFkUHVsbEludG9EZXNjcmlwdG9yIiwiUmVhZGFibGVTdHJlYW1DbG9zZSIsIl9ieW9iUmVxdWVzdCIsIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJQcm9jZXNzUHVsbEludG9EZXNjcmlwdG9yc1VzaW5nUXVldWUiLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hpZnRQZW5kaW5nUHVsbEludG8iLCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEludGVybmFsIiwiZmlyc3REZXNjcmlwdG9yIiwiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbkNsb3NlZFN0YXRlIiwicmVtYWluZGVyU2l6ZSIsInJlbWFpbmRlciIsIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kSW5SZWFkYWJsZVN0YXRlIiwidHJhbnNmZXJyZWRCdWZmZXIiLCJmaXJzdFBlbmRpbmdQdWxsSW50byIsIlJlYWRhYmxlU3RyZWFtRXJyb3IiLCJTZXRVcFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QiLCJfc3RyYXRlZ3lIV00iLCJ2aWV3Qnl0ZUxlbmd0aCIsIlNldFVwUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIsInN0YXJ0QWxnb3JpdGhtIiwicHVsbEFsZ29yaXRobSIsImNhbmNlbEFsZ29yaXRobSIsInIiLCJBY3F1aXJlUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiwiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiwiUmVhZGFibGVTdHJlYW1BZGRSZWFkSW50b1JlcXVlc3QiLCJJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIsImJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uIiwiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyUmVhZCIsIkRhdGFWaWV3IiwiQllURVNfUEVSX0VMRU1FTlQiLCJjdG9yIiwiZW1wdHlWaWV3IiwiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclB1bGxJbnRvIiwiRXh0cmFjdEhpZ2hXYXRlck1hcmsiLCJzdHJhdGVneSIsImRlZmF1bHRIV00iLCJFeHRyYWN0U2l6ZUFsZ29yaXRobSIsImNvbnZlcnRRdWV1aW5nU3RyYXRlZ3kiLCJjb252ZXJ0UXVldWluZ1N0cmF0ZWd5U2l6ZSIsImNvbnZlcnRVbmRlcmx5aW5nU2lua0Fib3J0Q2FsbGJhY2siLCJvcmlnaW5hbCIsImNvbnZlcnRVbmRlcmx5aW5nU2lua0Nsb3NlQ2FsbGJhY2siLCJjb252ZXJ0VW5kZXJseWluZ1NpbmtTdGFydENhbGxiYWNrIiwiY29udmVydFVuZGVybHlpbmdTaW5rV3JpdGVDYWxsYmFjayIsImFzc2VydFdyaXRhYmxlU3RyZWFtIiwiSXNXcml0YWJsZVN0cmVhbSIsIldyaXRhYmxlU3RyZWFtIiwicmF3VW5kZXJseWluZ1NpbmsiLCJyYXdTdHJhdGVneSIsInVuZGVybHlpbmdTaW5rIiwiY29udmVydFVuZGVybHlpbmdTaW5rIiwiSW5pdGlhbGl6ZVdyaXRhYmxlU3RyZWFtIiwic2l6ZUFsZ29yaXRobSIsIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiLCJ3cml0ZUFsZ29yaXRobSIsImNsb3NlQWxnb3JpdGhtIiwiYWJvcnRBbGdvcml0aG0iLCJTZXRVcFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiLCJTZXRVcFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJGcm9tVW5kZXJseWluZ1NpbmsiLCJsb2NrZWQiLCJzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uJDIiLCJJc1dyaXRhYmxlU3RyZWFtTG9ja2VkIiwiV3JpdGFibGVTdHJlYW1BYm9ydCIsIldyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0IiwiV3JpdGFibGVTdHJlYW1DbG9zZSIsImdldFdyaXRlciIsIkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiLCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiLCJfd3JpdGVyIiwiX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciIsIl93cml0ZVJlcXVlc3RzIiwiX2luRmxpZ2h0V3JpdGVSZXF1ZXN0IiwiX2Nsb3NlUmVxdWVzdCIsIl9pbkZsaWdodENsb3NlUmVxdWVzdCIsIl9wZW5kaW5nQWJvcnRSZXF1ZXN0IiwiX2JhY2twcmVzc3VyZSIsIl9hYm9ydFJlYXNvbiIsIl9hYm9ydENvbnRyb2xsZXIiLCJfcHJvbWlzZSIsIndhc0FscmVhZHlFcnJvcmluZyIsIl9yZXNvbHZlIiwiX3JlamVjdCIsIl9yZWFzb24iLCJfd2FzQWxyZWFkeUVycm9yaW5nIiwiV3JpdGFibGVTdHJlYW1TdGFydEVycm9yaW5nIiwiY2xvc2VSZXF1ZXN0Iiwid3JpdGVyIiwiZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc29sdmUiLCJjbG9zZVNlbnRpbmVsIiwiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckFkdmFuY2VRdWV1ZUlmTmVlZGVkIiwiV3JpdGFibGVTdHJlYW1EZWFsV2l0aFJlamVjdGlvbiIsIldyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3JpbmciLCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVSZWFkeVByb21pc2VSZWplY3RlZCIsIldyaXRhYmxlU3RyZWFtSGFzT3BlcmF0aW9uTWFya2VkSW5GbGlnaHQiLCJzdG9yZWRFcnJvciIsIndyaXRlUmVxdWVzdCIsIldyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQiLCJhYm9ydFJlcXVlc3QiLCJkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlamVjdCIsIldyaXRhYmxlU3RyZWFtVXBkYXRlQmFja3ByZXNzdXJlIiwiYmFja3ByZXNzdXJlIiwiZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemUiLCJkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzZXQiLCJfb3duZXJXcml0YWJsZVN0cmVhbSIsImRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCIsImRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZSIsImRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCIsImRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVzb2x2ZSIsImRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQiLCJJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIsImRlZmF1bHRXcml0ZXJCcmFuZENoZWNrRXhjZXB0aW9uIiwiZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24iLCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUiLCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJHZXREZXNpcmVkU2l6ZSIsIl9yZWFkeVByb21pc2UiLCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJBYm9ydCIsIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlIiwiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSIsIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlIiwiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyRW5zdXJlQ2xvc2VkUHJvbWlzZVJlamVjdGVkIiwiX2Nsb3NlZFByb21pc2VTdGF0ZSIsImRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVzZXRUb1JlamVjdGVkIiwiX3JlYWR5UHJvbWlzZVN0YXRlIiwiZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlamVjdCIsImRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNldFRvUmVqZWN0ZWQiLCJyZWxlYXNlZEVycm9yIiwiY2h1bmtTaXplIiwiX3N0cmF0ZWd5U2l6ZUFsZ29yaXRobSIsImNodW5rU2l6ZUUiLCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3JJZk5lZWRlZCIsIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRDaHVua1NpemUiLCJXcml0YWJsZVN0cmVhbUFkZFdyaXRlUmVxdWVzdCIsImVucXVldWVFIiwiX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbSIsIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRCYWNrcHJlc3N1cmUiLCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyV3JpdGUiLCJhYm9ydFJlYXNvbiIsIklzV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIsImRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbiQyIiwiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yIiwiX2Fib3J0QWxnb3JpdGhtIiwiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsZWFyQWxnb3JpdGhtcyIsImNyZWF0ZUFib3J0Q29udHJvbGxlciIsIl93cml0ZUFsZ29yaXRobSIsIl9jbG9zZUFsZ29yaXRobSIsIldyaXRhYmxlU3RyZWFtTWFya0Nsb3NlUmVxdWVzdEluRmxpZ2h0Iiwic2lua0Nsb3NlUHJvbWlzZSIsIldyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRDbG9zZSIsIldyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRDbG9zZVdpdGhFcnJvciIsIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzQ2xvc2UiLCJXcml0YWJsZVN0cmVhbU1hcmtGaXJzdFdyaXRlUmVxdWVzdEluRmxpZ2h0IiwiV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodFdyaXRlIiwiV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodFdyaXRlV2l0aEVycm9yIiwiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlclByb2Nlc3NXcml0ZSIsIl9yZWFkeVByb21pc2VfcmVzb2x2ZSIsIl9yZWFkeVByb21pc2VfcmVqZWN0IiwiTmF0aXZlRE9NRXhjZXB0aW9uIiwiRE9NRXhjZXB0aW9uIiwiRE9NRXhjZXB0aW9uJDEiLCJpc0RPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yIiwiY3JlYXRlRE9NRXhjZXB0aW9uUG9seWZpbGwiLCJSZWFkYWJsZVN0cmVhbVBpcGVUbyIsInByZXZlbnRDbG9zZSIsInByZXZlbnRBYm9ydCIsInNodXR0aW5nRG93biIsImN1cnJlbnRXcml0ZSIsImFjdGlvbnMiLCJzaHV0ZG93bldpdGhBY3Rpb24iLCJhbGwiLCJhY3Rpb24iLCJpc09yQmVjb21lc0Vycm9yZWQiLCJzaHV0ZG93biIsIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24iLCJkZXN0Q2xvc2VkIiwid2FpdEZvcldyaXRlc1RvRmluaXNoIiwib2xkQ3VycmVudFdyaXRlIiwib3JpZ2luYWxJc0Vycm9yIiwib3JpZ2luYWxFcnJvciIsImRvVGhlUmVzdCIsIm5ld0Vycm9yIiwiaXNFcnJvciIsInJlc29sdmVMb29wIiwicmVqZWN0TG9vcCIsInJlc29sdmVSZWFkIiwicmVqZWN0UmVhZCIsIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiLCJJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiLCJkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24kMSIsIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSIsIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYW5DbG9zZU9yRW5xdWV1ZSIsIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZSIsIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlIiwiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yIiwiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsZWFyQWxnb3JpdGhtcyIsIl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0iLCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZCIsIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJTaG91bGRDYWxsUHVsbCIsIlNldFVwUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIsIlJlYWRhYmxlU3RyZWFtVGVlIiwiY2xvbmVGb3JCcmFuY2gyIiwicmVhc29uMSIsInJlYXNvbjIiLCJicmFuY2gxIiwiYnJhbmNoMiIsInJlc29sdmVDYW5jZWxQcm9taXNlIiwicmVhZGluZyIsInJlYWRBZ2FpbkZvckJyYW5jaDEiLCJyZWFkQWdhaW5Gb3JCcmFuY2gyIiwiY2FuY2VsZWQxIiwiY2FuY2VsZWQyIiwiY2FuY2VsUHJvbWlzZSIsImZvcndhcmRSZWFkZXJFcnJvciIsInRoaXNSZWFkZXIiLCJwdWxsV2l0aERlZmF1bHRSZWFkZXIiLCJjaHVuazEiLCJjaHVuazIiLCJjbG9uZUUiLCJwdWxsMUFsZ29yaXRobSIsInB1bGwyQWxnb3JpdGhtIiwicHVsbFdpdGhCWU9CUmVhZGVyIiwiZm9yQnJhbmNoMiIsImJ5b2JCcmFuY2giLCJvdGhlckJyYW5jaCIsImJ5b2JDYW5jZWxlZCIsImNsb25lZENodW5rIiwib3RoZXJDYW5jZWxlZCIsImNhbmNlbDFBbGdvcml0aG0iLCJjb21wb3NpdGVSZWFzb24iLCJjYW5jZWxSZXN1bHQiLCJjYW5jZWwyQWxnb3JpdGhtIiwiQ3JlYXRlUmVhZGFibGVCeXRlU3RyZWFtIiwiUmVhZGFibGVCeXRlU3RyZWFtVGVlIiwicmVhZEFnYWluIiwiQ3JlYXRlUmVhZGFibGVTdHJlYW0iLCJSZWFkYWJsZVN0cmVhbURlZmF1bHRUZWUiLCJjb252ZXJ0VW5kZXJseWluZ1NvdXJjZUNhbmNlbENhbGxiYWNrIiwiY29udmVydFVuZGVybHlpbmdTb3VyY2VQdWxsQ2FsbGJhY2siLCJjb252ZXJ0VW5kZXJseWluZ1NvdXJjZVN0YXJ0Q2FsbGJhY2siLCJjb252ZXJ0UmVhZGFibGVTdHJlYW1UeXBlIiwiY29udmVydFJlYWRhYmxlU3RyZWFtUmVhZGVyTW9kZSIsIm1vZGUiLCJjb252ZXJ0UGlwZU9wdGlvbnMiLCJpc0Fib3J0U2lnbmFsIiwiYXNzZXJ0QWJvcnRTaWduYWwiLCJyYXdVbmRlcmx5aW5nU291cmNlIiwidW5kZXJseWluZ1NvdXJjZSIsInB1bGwiLCJjb252ZXJ0VW5kZXJseWluZ0RlZmF1bHRPckJ5dGVTb3VyY2UiLCJJbml0aWFsaXplUmVhZGFibGVTdHJlYW0iLCJ1bmRlcmx5aW5nQnl0ZVNvdXJjZSIsIlNldFVwUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZyb21VbmRlcmx5aW5nU291cmNlIiwiU2V0VXBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRnJvbVVuZGVybHlpbmdTb3VyY2UiLCJzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uJDEiLCJyYXdPcHRpb25zIiwiY29udmVydFJlYWRlck9wdGlvbnMiLCJwaXBlVGhyb3VnaCIsInJhd1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsInJlYWRhYmxlIiwiY29udmVydFJlYWRhYmxlV3JpdGFibGVQYWlyIiwicGlwZVRvIiwiZGVzdGluYXRpb24iLCJ0ZWUiLCJpbXBsIiwiQWNxdWlyZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciIsImNvbnZlcnRJdGVyYXRvck9wdGlvbnMiLCJjb252ZXJ0UXVldWluZ1N0cmF0ZWd5SW5pdCIsImFzeW5jSXRlcmF0b3IiLCJieXRlTGVuZ3RoU2l6ZUZ1bmN0aW9uIiwiQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSIsIl9ieXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5SGlnaFdhdGVyTWFyayIsIklzQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSIsImJ5dGVMZW5ndGhCcmFuZENoZWNrRXhjZXB0aW9uIiwiY291bnRTaXplRnVuY3Rpb24iLCJDb3VudFF1ZXVpbmdTdHJhdGVneSIsIl9jb3VudFF1ZXVpbmdTdHJhdGVneUhpZ2hXYXRlck1hcmsiLCJJc0NvdW50UXVldWluZ1N0cmF0ZWd5IiwiY291bnRCcmFuZENoZWNrRXhjZXB0aW9uIiwiY29udmVydFRyYW5zZm9ybWVyRmx1c2hDYWxsYmFjayIsImNvbnZlcnRUcmFuc2Zvcm1lclN0YXJ0Q2FsbGJhY2siLCJjb252ZXJ0VHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjayIsIlRyYW5zZm9ybVN0cmVhbSIsInJhd1RyYW5zZm9ybWVyIiwicmF3V3JpdGFibGVTdHJhdGVneSIsInJhd1JlYWRhYmxlU3RyYXRlZ3kiLCJ3cml0YWJsZVN0cmF0ZWd5IiwicmVhZGFibGVTdHJhdGVneSIsInRyYW5zZm9ybWVyIiwicmVhZGFibGVUeXBlIiwid3JpdGFibGVUeXBlIiwiY29udmVydFRyYW5zZm9ybWVyIiwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIiwicmVhZGFibGVTaXplQWxnb3JpdGhtIiwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIiwid3JpdGFibGVTaXplQWxnb3JpdGhtIiwic3RhcnRQcm9taXNlX3Jlc29sdmUiLCJzdGFydFByb21pc2UiLCJfdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciIsIl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIiwiX3dyaXRhYmxlIiwiVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQZXJmb3JtVHJhbnNmb3JtIiwiVHJhbnNmb3JtU3RyZWFtRGVmYXVsdFNpbmtXcml0ZUFsZ29yaXRobSIsIlRyYW5zZm9ybVN0cmVhbUVycm9yIiwiVHJhbnNmb3JtU3RyZWFtRGVmYXVsdFNpbmtBYm9ydEFsZ29yaXRobSIsIl9yZWFkYWJsZSIsImZsdXNoUHJvbWlzZSIsIl9mbHVzaEFsZ29yaXRobSIsIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xlYXJBbGdvcml0aG1zIiwiVHJhbnNmb3JtU3RyZWFtRGVmYXVsdFNpbmtDbG9zZUFsZ29yaXRobSIsIlRyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZSIsIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRTb3VyY2VQdWxsQWxnb3JpdGhtIiwiVHJhbnNmb3JtU3RyZWFtRXJyb3JXcml0YWJsZUFuZFVuYmxvY2tXcml0ZSIsIkNyZWF0ZVdyaXRhYmxlU3RyZWFtIiwiX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZSIsIkluaXRpYWxpemVUcmFuc2Zvcm1TdHJlYW0iLCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIsInRyYW5zZm9ybUFsZ29yaXRobSIsIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSIsInRyYW5zZm9ybVJlc3VsdEUiLCJmbHVzaEFsZ29yaXRobSIsIl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtIiwiX3RyYW5zZm9ybUFsZ29yaXRobSIsIlNldFVwVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiLCJTZXRVcFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyRnJvbVRyYW5zZm9ybWVyIiwiSXNUcmFuc2Zvcm1TdHJlYW0iLCJzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uIiwiSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIsImRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbiIsInRlcm1pbmF0ZSIsIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyVGVybWluYXRlIiwicmVhZGFibGVDb250cm9sbGVyIiwiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckhhc0JhY2twcmVzc3VyZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJvIiwicHJvcCIsIm5tZCIsInBhdGhzIiwiY2hpbGRyZW4iLCJfX3dlYnBhY2tfZXhwb3J0c19fIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
2
|
+
!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports.mailgun=a():e.mailgun=a()}(this,(function(){return(()=>{var e={9118:(e,a,n)=>{e.exports={parallel:n(9162),serial:n(1357),serialOrdered:n(9087)}},7651:e=>{function a(e){"function"==typeof this.jobs[e]&&this.jobs[e]()}e.exports=function(e){Object.keys(e.jobs).forEach(a.bind(e)),e.jobs={}}},5912:(e,a,n)=>{var i=n(9265);e.exports=function(e){var a=!1;return i((function(){a=!0})),function(n,t){a?e(n,t):i((function(){e(n,t)}))}}},9265:e=>{e.exports=function(e){var a="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;a?a(e):setTimeout(e,0)}},7594:(e,a,n)=>{var i=n(5912),t=n(7651);e.exports=function(e,a,n,o){var s=n.keyedList?n.keyedList[n.index]:n.index;n.jobs[s]=function(e,a,n,t){var o;o=2==e.length?e(n,i(t)):e(n,a,i(t));return o}(a,s,e[s],(function(e,a){s in n.jobs&&(delete n.jobs[s],e?t(n):n.results[s]=a,o(e,n.results))}))}},4528:e=>{e.exports=function(e,a){var n=!Array.isArray(e),i={index:0,keyedList:n||a?Object.keys(e):null,jobs:{},results:n?{}:[],size:n?Object.keys(e).length:e.length};a&&i.keyedList.sort(n?a:function(n,i){return a(e[n],e[i])});return i}},5353:(e,a,n)=>{var i=n(7651),t=n(5912);e.exports=function(e){if(!Object.keys(this.jobs).length)return;this.index=this.size,i(this),t(e)(null,this.results)}},9162:(e,a,n)=>{var i=n(7594),t=n(4528),o=n(5353);e.exports=function(e,a,n){var s=t(e);for(;s.index<(s.keyedList||e).length;)i(e,a,s,(function(e,a){e?n(e,a):0!==Object.keys(s.jobs).length||n(null,s.results)})),s.index++;return o.bind(s,n)}},1357:(e,a,n)=>{var i=n(9087);e.exports=function(e,a,n){return i(e,a,null,n)}},9087:(e,a,n)=>{var i=n(7594),t=n(4528),o=n(5353);function s(e,a){return e<a?-1:e>a?1:0}e.exports=function(e,a,n,s){var r=t(e,n);return i(e,a,r,(function n(t,o){t?s(t,o):(r.index++,r.index<(r.keyedList||e).length?i(e,a,r,n):s(null,r.results))})),o.bind(r,s)},e.exports.ascending=s,e.exports.descending=function(e,a){return-1*s(e,a)}},9669:(e,a,n)=>{e.exports=n(1609)},7970:(e,a,n)=>{"use strict";var i=n(4867),t=n(6026),o=n(4097),s=n(5327),r=n(3685),c=n(5687),p=n(938).http,u=n(938).https,l=n(7310),d=n(9796),m=n(7288).version,f=n(7874),x=n(2648),v=n(644),h=/https:?/,b=["http:","https:","file:"];function g(e,a,n){if(e.hostname=a.host,e.host=a.host,e.port=a.port,e.path=n,a.auth){var i=Buffer.from(a.auth.username+":"+a.auth.password,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+i}e.beforeRedirect=function(e){e.headers.host=e.host,g(e,a,e.href)}}e.exports=function(e){return new Promise((function(a,n){var y;function w(){e.cancelToken&&e.cancelToken.unsubscribe(y),e.signal&&e.signal.removeEventListener("abort",y)}var _=function(e){w(),a(e)},k=!1,j=function(e){w(),k=!0,n(e)},q=e.data,R=e.headers,O={};if(Object.keys(R).forEach((function(e){O[e.toLowerCase()]=e})),"user-agent"in O?R[O["user-agent"]]||delete R[O["user-agent"]]:R["User-Agent"]="axios/"+m,i.isFormData(q)&&i.isFunction(q.getHeaders))Object.assign(R,q.getHeaders());else if(q&&!i.isStream(q)){if(Buffer.isBuffer(q));else if(i.isArrayBuffer(q))q=Buffer.from(new Uint8Array(q));else{if(!i.isString(q))return j(new x("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",x.ERR_BAD_REQUEST,e));q=Buffer.from(q,"utf-8")}if(e.maxBodyLength>-1&&q.length>e.maxBodyLength)return j(new x("Request body larger than maxBodyLength limit",x.ERR_BAD_REQUEST,e));O["content-length"]||(R["Content-Length"]=q.length)}var E=void 0;e.auth&&(E=(e.auth.username||"")+":"+(e.auth.password||""));var C=o(e.baseURL,e.url),T=l.parse(C),S=T.protocol||b[0];if(-1===b.indexOf(S))return j(new x("Unsupported protocol "+S,x.ERR_BAD_REQUEST,e));if(!E&&T.auth){var D=T.auth.split(":");E=(D[0]||"")+":"+(D[1]||"")}E&&O.authorization&&delete R[O.authorization];var z=h.test(S),F=z?e.httpsAgent:e.httpAgent;try{s(T.path,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(a){var A=new Error(a.message);A.config=e,A.url=e.url,A.exists=!0,j(A)}var L={path:s(T.path,e.params,e.paramsSerializer).replace(/^\?/,""),method:e.method.toUpperCase(),headers:R,agent:F,agents:{http:e.httpAgent,https:e.httpsAgent},auth:E};e.socketPath?L.socketPath=e.socketPath:(L.hostname=T.hostname,L.port=T.port);var P,B=e.proxy;if(!B&&!1!==B){var U=S.slice(0,-1)+"_proxy",N=process.env[U]||process.env[U.toUpperCase()];if(N){var M=l.parse(N),I=process.env.no_proxy||process.env.NO_PROXY,W=!0;if(I)W=!I.split(",").map((function(e){return e.trim()})).some((function(e){return!!e&&("*"===e||("."===e[0]&&T.hostname.substr(T.hostname.length-e.length)===e||T.hostname===e))}));if(W&&(B={host:M.hostname,port:M.port,protocol:M.protocol},M.auth)){var V=M.auth.split(":");B.auth={username:V[0],password:V[1]}}}}B&&(L.headers.host=T.hostname+(T.port?":"+T.port:""),g(L,B,S+"//"+T.hostname+(T.port?":"+T.port:"")+L.path));var H=z&&(!B||h.test(B.protocol));e.transport?P=e.transport:0===e.maxRedirects?P=H?c:r:(e.maxRedirects&&(L.maxRedirects=e.maxRedirects),e.beforeRedirect&&(L.beforeRedirect=e.beforeRedirect),P=H?u:p),e.maxBodyLength>-1&&(L.maxBodyLength=e.maxBodyLength),e.insecureHTTPParser&&(L.insecureHTTPParser=e.insecureHTTPParser);var $=P.request(L,(function(a){if(!$.aborted){var n=a,o=a.req||$;if(204!==a.statusCode&&"HEAD"!==o.method&&!1!==e.decompress)switch(a.headers["content-encoding"]){case"gzip":case"compress":case"deflate":n=n.pipe(d.createUnzip()),delete a.headers["content-encoding"]}var s={status:a.statusCode,statusText:a.statusMessage,headers:a.headers,config:e,request:o};if("stream"===e.responseType)s.data=n,t(_,j,s);else{var r=[],c=0;n.on("data",(function(a){r.push(a),c+=a.length,e.maxContentLength>-1&&c>e.maxContentLength&&(k=!0,n.destroy(),j(new x("maxContentLength size of "+e.maxContentLength+" exceeded",x.ERR_BAD_RESPONSE,e,o)))})),n.on("aborted",(function(){k||(n.destroy(),j(new x("maxContentLength size of "+e.maxContentLength+" exceeded",x.ERR_BAD_RESPONSE,e,o)))})),n.on("error",(function(a){$.aborted||j(x.from(a,null,e,o))})),n.on("end",(function(){try{var a=1===r.length?r[0]:Buffer.concat(r);"arraybuffer"!==e.responseType&&(a=a.toString(e.responseEncoding),e.responseEncoding&&"utf8"!==e.responseEncoding||(a=i.stripBOM(a))),s.data=a}catch(a){j(x.from(a,null,e,s.request,s))}t(_,j,s)}))}}}));if($.on("error",(function(a){j(x.from(a,null,e,$))})),$.on("socket",(function(e){e.setKeepAlive(!0,6e4)})),e.timeout){var G=parseInt(e.timeout,10);if(isNaN(G))return void j(new x("error trying to parse `config.timeout` to int",x.ERR_BAD_OPTION_VALUE,e,$));$.setTimeout(G,(function(){$.abort();var a=e.transitional||f;j(new x("timeout of "+G+"ms exceeded",a.clarifyTimeoutError?x.ETIMEDOUT:x.ECONNABORTED,e,$))}))}(e.cancelToken||e.signal)&&(y=function(e){$.aborted||($.abort(),j(!e||e&&e.type?new v:e))},e.cancelToken&&e.cancelToken.subscribe(y),e.signal&&(e.signal.aborted?y():e.signal.addEventListener("abort",y))),i.isStream(q)?q.on("error",(function(a){j(x.from(a,e,null,$))})).pipe($):$.end(q)}))}},5448:(e,a,n)=>{"use strict";var i=n(4867),t=n(6026),o=n(4372),s=n(5327),r=n(4097),c=n(4109),p=n(7985),u=n(7874),l=n(2648),d=n(644),m=n(205);e.exports=function(e){return new Promise((function(a,n){var f,x=e.data,v=e.headers,h=e.responseType;function b(){e.cancelToken&&e.cancelToken.unsubscribe(f),e.signal&&e.signal.removeEventListener("abort",f)}i.isFormData(x)&&i.isStandardBrowserEnv()&&delete v["Content-Type"];var g=new XMLHttpRequest;if(e.auth){var y=e.auth.username||"",w=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";v.Authorization="Basic "+btoa(y+":"+w)}var _=r(e.baseURL,e.url);function k(){if(g){var i="getAllResponseHeaders"in g?c(g.getAllResponseHeaders()):null,o={data:h&&"text"!==h&&"json"!==h?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:i,config:e,request:g};t((function(e){a(e),b()}),(function(e){n(e),b()}),o),g=null}}if(g.open(e.method.toUpperCase(),s(_,e.params,e.paramsSerializer),!0),g.timeout=e.timeout,"onloadend"in g?g.onloadend=k:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(k)},g.onabort=function(){g&&(n(new l("Request aborted",l.ECONNABORTED,e,g)),g=null)},g.onerror=function(){n(new l("Network Error",l.ERR_NETWORK,e,g,g)),g=null},g.ontimeout=function(){var a=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",i=e.transitional||u;e.timeoutErrorMessage&&(a=e.timeoutErrorMessage),n(new l(a,i.clarifyTimeoutError?l.ETIMEDOUT:l.ECONNABORTED,e,g)),g=null},i.isStandardBrowserEnv()){var j=(e.withCredentials||p(_))&&e.xsrfCookieName?o.read(e.xsrfCookieName):void 0;j&&(v[e.xsrfHeaderName]=j)}"setRequestHeader"in g&&i.forEach(v,(function(e,a){void 0===x&&"content-type"===a.toLowerCase()?delete v[a]:g.setRequestHeader(a,e)})),i.isUndefined(e.withCredentials)||(g.withCredentials=!!e.withCredentials),h&&"json"!==h&&(g.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&g.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&g.upload&&g.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(f=function(e){g&&(n(!e||e&&e.type?new d:e),g.abort(),g=null)},e.cancelToken&&e.cancelToken.subscribe(f),e.signal&&(e.signal.aborted?f():e.signal.addEventListener("abort",f))),x||(x=null);var q=m(_);q&&-1===["http","https","file"].indexOf(q)?n(new l("Unsupported protocol "+q+":",l.ERR_BAD_REQUEST,e)):g.send(x)}))}},1609:(e,a,n)=>{"use strict";var i=n(4867),t=n(1849),o=n(321),s=n(7185);var r=function e(a){var n=new o(a),r=t(o.prototype.request,n);return i.extend(r,o.prototype,n),i.extend(r,n),r.create=function(n){return e(s(a,n))},r}(n(5546));r.Axios=o,r.CanceledError=n(644),r.CancelToken=n(4972),r.isCancel=n(6502),r.VERSION=n(7288).version,r.toFormData=n(7675),r.AxiosError=n(2648),r.Cancel=r.CanceledError,r.all=function(e){return Promise.all(e)},r.spread=n(8713),r.isAxiosError=n(6268),e.exports=r,e.exports.default=r},4972:(e,a,n)=>{"use strict";var i=n(644);function t(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var a;this.promise=new Promise((function(e){a=e}));var n=this;this.promise.then((function(e){if(n._listeners){var a,i=n._listeners.length;for(a=0;a<i;a++)n._listeners[a](e);n._listeners=null}})),this.promise.then=function(e){var a,i=new Promise((function(e){n.subscribe(e),a=e})).then(e);return i.cancel=function(){n.unsubscribe(a)},i},e((function(e){n.reason||(n.reason=new i(e),a(n.reason))}))}t.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},t.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},t.prototype.unsubscribe=function(e){if(this._listeners){var a=this._listeners.indexOf(e);-1!==a&&this._listeners.splice(a,1)}},t.source=function(){var e;return{token:new t((function(a){e=a})),cancel:e}},e.exports=t},644:(e,a,n)=>{"use strict";var i=n(2648);function t(e){i.call(this,null==e?"canceled":e,i.ERR_CANCELED),this.name="CanceledError"}n(4867).inherits(t,i,{__CANCEL__:!0}),e.exports=t},6502:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,a,n)=>{"use strict";var i=n(4867),t=n(5327),o=n(782),s=n(3572),r=n(7185),c=n(4097),p=n(4875),u=p.validators;function l(e){this.defaults=e,this.interceptors={request:new o,response:new o}}l.prototype.request=function(e,a){"string"==typeof e?(a=a||{}).url=e:a=e||{},(a=r(this.defaults,a)).method?a.method=a.method.toLowerCase():this.defaults.method?a.method=this.defaults.method.toLowerCase():a.method="get";var n=a.transitional;void 0!==n&&p.assertOptions(n,{silentJSONParsing:u.transitional(u.boolean),forcedJSONParsing:u.transitional(u.boolean),clarifyTimeoutError:u.transitional(u.boolean)},!1);var i=[],t=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(a)||(t=t&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));var o,c=[];if(this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)})),!t){var l=[s,void 0];for(Array.prototype.unshift.apply(l,i),l=l.concat(c),o=Promise.resolve(a);l.length;)o=o.then(l.shift(),l.shift());return o}for(var d=a;i.length;){var m=i.shift(),f=i.shift();try{d=m(d)}catch(e){f(e);break}}try{o=s(d)}catch(e){return Promise.reject(e)}for(;c.length;)o=o.then(c.shift(),c.shift());return o},l.prototype.getUri=function(e){e=r(this.defaults,e);var a=c(e.baseURL,e.url);return t(a,e.params,e.paramsSerializer)},i.forEach(["delete","get","head","options"],(function(e){l.prototype[e]=function(a,n){return this.request(r(n||{},{method:e,url:a,data:(n||{}).data}))}})),i.forEach(["post","put","patch"],(function(e){function a(a){return function(n,i,t){return this.request(r(t||{},{method:e,headers:a?{"Content-Type":"multipart/form-data"}:{},url:n,data:i}))}}l.prototype[e]=a(),l.prototype[e+"Form"]=a(!0)})),e.exports=l},2648:(e,a,n)=>{"use strict";var i=n(4867);function t(e,a,n,i,t){Error.call(this),this.message=e,this.name="AxiosError",a&&(this.code=a),n&&(this.config=n),i&&(this.request=i),t&&(this.response=t)}i.inherits(t,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var o=t.prototype,s={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){s[e]={value:e}})),Object.defineProperties(t,s),Object.defineProperty(o,"isAxiosError",{value:!0}),t.from=function(e,a,n,s,r,c){var p=Object.create(o);return i.toFlatObject(e,p,(function(e){return e!==Error.prototype})),t.call(p,e.message,a,n,s,r),p.name=e.name,c&&Object.assign(p,c),p},e.exports=t},782:(e,a,n)=>{"use strict";var i=n(4867);function t(){this.handlers=[]}t.prototype.use=function(e,a,n){return this.handlers.push({fulfilled:e,rejected:a,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},t.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},t.prototype.forEach=function(e){i.forEach(this.handlers,(function(a){null!==a&&e(a)}))},e.exports=t},4097:(e,a,n)=>{"use strict";var i=n(1793),t=n(7303);e.exports=function(e,a){return e&&!i(a)?t(e,a):a}},3572:(e,a,n)=>{"use strict";var i=n(4867),t=n(8527),o=n(6502),s=n(5546),r=n(644);function c(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new r}e.exports=function(e){return c(e),e.headers=e.headers||{},e.data=t.call(e,e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),i.forEach(["delete","get","head","post","put","patch","common"],(function(a){delete e.headers[a]})),(e.adapter||s.adapter)(e).then((function(a){return c(e),a.data=t.call(e,a.data,a.headers,e.transformResponse),a}),(function(a){return o(a)||(c(e),a&&a.response&&(a.response.data=t.call(e,a.response.data,a.response.headers,e.transformResponse))),Promise.reject(a)}))}},7185:(e,a,n)=>{"use strict";var i=n(4867);e.exports=function(e,a){a=a||{};var n={};function t(e,a){return i.isPlainObject(e)&&i.isPlainObject(a)?i.merge(e,a):i.isPlainObject(a)?i.merge({},a):i.isArray(a)?a.slice():a}function o(n){return i.isUndefined(a[n])?i.isUndefined(e[n])?void 0:t(void 0,e[n]):t(e[n],a[n])}function s(e){if(!i.isUndefined(a[e]))return t(void 0,a[e])}function r(n){return i.isUndefined(a[n])?i.isUndefined(e[n])?void 0:t(void 0,e[n]):t(void 0,a[n])}function c(n){return n in a?t(e[n],a[n]):n in e?t(void 0,e[n]):void 0}var p={url:s,method:s,data:s,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,responseEncoding:r,validateStatus:c};return i.forEach(Object.keys(e).concat(Object.keys(a)),(function(e){var a=p[e]||o,t=a(e);i.isUndefined(t)&&a!==c||(n[e]=t)})),n}},6026:(e,a,n)=>{"use strict";var i=n(2648);e.exports=function(e,a,n){var t=n.config.validateStatus;n.status&&t&&!t(n.status)?a(new i("Request failed with status code "+n.status,[i.ERR_BAD_REQUEST,i.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}},8527:(e,a,n)=>{"use strict";var i=n(4867),t=n(5546);e.exports=function(e,a,n){var o=this||t;return i.forEach(n,(function(n){e=n.call(o,e,a)})),e}},3784:(e,a,n)=>{e.exports=n(4106)},5546:(e,a,n)=>{"use strict";var i=n(4867),t=n(6016),o=n(2648),s=n(7874),r=n(7675),c={"Content-Type":"application/x-www-form-urlencoded"};function p(e,a){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=a)}var u,l={transitional:s,adapter:("undefined"!=typeof XMLHttpRequest?u=n(5448):"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process)&&(u=n(7970)),u),transformRequest:[function(e,a){if(t(a,"Accept"),t(a,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e))return e;if(i.isArrayBufferView(e))return e.buffer;if(i.isURLSearchParams(e))return p(a,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();var n,o=i.isObject(e),s=a&&a["Content-Type"];if((n=i.isFileList(e))||o&&"multipart/form-data"===s){var c=this.env&&this.env.FormData;return r(n?{"files[]":e}:e,c&&new c)}return o||"application/json"===s?(p(a,"application/json"),function(e,a,n){if(i.isString(e))try{return(a||JSON.parse)(e),i.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var a=this.transitional||l.transitional,n=a&&a.silentJSONParsing,t=a&&a.forcedJSONParsing,s=!n&&"json"===this.responseType;if(s||t&&i.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(s){if("SyntaxError"===e.name)throw o.from(e,o.ERR_BAD_RESPONSE,this,null,this.response);throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n(3784)},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};i.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),i.forEach(["post","put","patch"],(function(e){l.headers[e]=i.merge(c)})),e.exports=l},7874:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7288:e=>{e.exports={version:"0.27.2"}},1849:e=>{"use strict";e.exports=function(e,a){return function(){for(var n=new Array(arguments.length),i=0;i<n.length;i++)n[i]=arguments[i];return e.apply(a,n)}}},5327:(e,a,n)=>{"use strict";var i=n(4867);function t(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,a,n){if(!a)return e;var o;if(n)o=n(a);else if(i.isURLSearchParams(a))o=a.toString();else{var s=[];i.forEach(a,(function(e,a){null!=e&&(i.isArray(e)?a+="[]":e=[e],i.forEach(e,(function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),s.push(t(a)+"="+t(e))})))})),o=s.join("&")}if(o){var r=e.indexOf("#");-1!==r&&(e=e.slice(0,r)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}},7303:e=>{"use strict";e.exports=function(e,a){return a?e.replace(/\/+$/,"")+"/"+a.replace(/^\/+/,""):e}},4372:(e,a,n)=>{"use strict";var i=n(4867);e.exports=i.isStandardBrowserEnv()?{write:function(e,a,n,t,o,s){var r=[];r.push(e+"="+encodeURIComponent(a)),i.isNumber(n)&&r.push("expires="+new Date(n).toGMTString()),i.isString(t)&&r.push("path="+t),i.isString(o)&&r.push("domain="+o),!0===s&&r.push("secure"),document.cookie=r.join("; ")},read:function(e){var a=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},6268:(e,a,n)=>{"use strict";var i=n(4867);e.exports=function(e){return i.isObject(e)&&!0===e.isAxiosError}},7985:(e,a,n)=>{"use strict";var i=n(4867);e.exports=i.isStandardBrowserEnv()?function(){var e,a=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function t(e){var i=e;return a&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=t(window.location.href),function(a){var n=i.isString(a)?t(a):a;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},6016:(e,a,n)=>{"use strict";var i=n(4867);e.exports=function(e,a){i.forEach(e,(function(n,i){i!==a&&i.toUpperCase()===a.toUpperCase()&&(e[a]=n,delete e[i])}))}},4109:(e,a,n)=>{"use strict";var i=n(4867),t=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var a,n,o,s={};return e?(i.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),a=i.trim(e.substr(0,o)).toLowerCase(),n=i.trim(e.substr(o+1)),a){if(s[a]&&t.indexOf(a)>=0)return;s[a]="set-cookie"===a?(s[a]?s[a]:[]).concat([n]):s[a]?s[a]+", "+n:n}})),s):s}},205:e=>{"use strict";e.exports=function(e){var a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return a&&a[1]||""}},8713:e=>{"use strict";e.exports=function(e){return function(a){return e.apply(null,a)}}},7675:(e,a,n)=>{"use strict";var i=n(4867);e.exports=function(e,a){a=a||new FormData;var n=[];function t(e){return null===e?"":i.isDate(e)?e.toISOString():i.isArrayBuffer(e)||i.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(o,s){if(i.isPlainObject(o)||i.isArray(o)){if(-1!==n.indexOf(o))throw Error("Circular reference detected in "+s);n.push(o),i.forEach(o,(function(n,o){if(!i.isUndefined(n)){var r,c=s?s+"."+o:o;if(n&&!s&&"object"==typeof n)if(i.endsWith(o,"{}"))n=JSON.stringify(n);else if(i.endsWith(o,"[]")&&(r=i.toArray(n)))return void r.forEach((function(e){!i.isUndefined(e)&&a.append(c,t(e))}));e(n,c)}})),n.pop()}else a.append(s,t(o))}(e),a}},4875:(e,a,n)=>{"use strict";var i=n(7288).version,t=n(2648),o={};["object","boolean","number","function","string","symbol"].forEach((function(e,a){o[e]=function(n){return typeof n===e||"a"+(a<1?"n ":" ")+e}}));var s={};o.transitional=function(e,a,n){function o(e,a){return"[Axios v"+i+"] Transitional option '"+e+"'"+a+(n?". "+n:"")}return function(n,i,r){if(!1===e)throw new t(o(i," has been removed"+(a?" in "+a:"")),t.ERR_DEPRECATED);return a&&!s[i]&&(s[i]=!0,console.warn(o(i," has been deprecated since v"+a+" and will be removed in the near future"))),!e||e(n,i,r)}},e.exports={assertOptions:function(e,a,n){if("object"!=typeof e)throw new t("options must be an object",t.ERR_BAD_OPTION_VALUE);for(var i=Object.keys(e),o=i.length;o-- >0;){var s=i[o],r=a[s];if(r){var c=e[s],p=void 0===c||r(c,s,e);if(!0!==p)throw new t("option "+s+" must be "+p,t.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new t("Unknown option "+s,t.ERR_BAD_OPTION)}},validators:o}},4867:(e,a,n)=>{"use strict";var i,t=n(1849),o=Object.prototype.toString,s=(i=Object.create(null),function(e){var a=o.call(e);return i[a]||(i[a]=a.slice(8,-1).toLowerCase())});function r(e){return e=e.toLowerCase(),function(a){return s(a)===e}}function c(e){return Array.isArray(e)}function p(e){return void 0===e}var u=r("ArrayBuffer");function l(e){return null!==e&&"object"==typeof e}function d(e){if("object"!==s(e))return!1;var a=Object.getPrototypeOf(e);return null===a||a===Object.prototype}var m=r("Date"),f=r("File"),x=r("Blob"),v=r("FileList");function h(e){return"[object Function]"===o.call(e)}var b=r("URLSearchParams");function g(e,a){if(null!=e)if("object"!=typeof e&&(e=[e]),c(e))for(var n=0,i=e.length;n<i;n++)a.call(null,e[n],n,e);else for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&a.call(null,e[t],t,e)}var y,w=(y="undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array),function(e){return y&&e instanceof y});e.exports={isArray:c,isArrayBuffer:u,isBuffer:function(e){return null!==e&&!p(e)&&null!==e.constructor&&!p(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){var a="[object FormData]";return e&&("function"==typeof FormData&&e instanceof FormData||o.call(e)===a||h(e.toString)&&e.toString()===a)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&u(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:l,isPlainObject:d,isUndefined:p,isDate:m,isFile:f,isBlob:x,isFunction:h,isStream:function(e){return l(e)&&h(e.pipe)},isURLSearchParams:b,isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:g,merge:function e(){var a={};function n(n,i){d(a[i])&&d(n)?a[i]=e(a[i],n):d(n)?a[i]=e({},n):c(n)?a[i]=n.slice():a[i]=n}for(var i=0,t=arguments.length;i<t;i++)g(arguments[i],n);return a},extend:function(e,a,n){return g(a,(function(a,i){e[i]=n&&"function"==typeof a?t(a,n):a})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,a,n,i){e.prototype=Object.create(a.prototype,i),e.prototype.constructor=e,n&&Object.assign(e.prototype,n)},toFlatObject:function(e,a,n){var i,t,o,s={};a=a||{};do{for(t=(i=Object.getOwnPropertyNames(e)).length;t-- >0;)s[o=i[t]]||(a[o]=e[o],s[o]=!0);e=Object.getPrototypeOf(e)}while(e&&(!n||n(e,a))&&e!==Object.prototype);return a},kindOf:s,kindOfTest:r,endsWith:function(e,a,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=a.length;var i=e.indexOf(a,n);return-1!==i&&i===n},toArray:function(e){if(!e)return null;var a=e.length;if(p(a))return null;for(var n=new Array(a);a-- >0;)n[a]=e[a];return n},isTypedArray:w,isFileList:v}},4106:(e,a,n)=>{var i=n(9779),t=n(3837),o=n(1017),s=n(3685),r=n(5687),c=n(7310).parse,p=n(7147),u=n(2781).Stream,l=n(983),d=n(9118),m=n(5469);function f(e){if(!(this instanceof f))return new f(e);for(var a in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],i.call(this),e=e||{})this[a]=e[a]}e.exports=f,t.inherits(f,i),f.LINE_BREAK="\r\n",f.DEFAULT_CONTENT_TYPE="application/octet-stream",f.prototype.append=function(e,a,n){"string"==typeof(n=n||{})&&(n={filename:n});var o=i.prototype.append.bind(this);if("number"==typeof a&&(a=""+a),t.isArray(a))this._error(new Error("Arrays are not supported."));else{var s=this._multiPartHeader(e,a,n),r=this._multiPartFooter();o(s),o(a),o(r),this._trackLength(s,a,n)}},f.prototype._trackLength=function(e,a,n){var i=0;null!=n.knownLength?i+=+n.knownLength:Buffer.isBuffer(a)?i=a.length:"string"==typeof a&&(i=Buffer.byteLength(a)),this._valueLength+=i,this._overheadLength+=Buffer.byteLength(e)+f.LINE_BREAK.length,a&&(a.path||a.readable&&a.hasOwnProperty("httpVersion")||a instanceof u)&&(n.knownLength||this._valuesToMeasure.push(a))},f.prototype._lengthRetriever=function(e,a){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?a(null,e.end+1-(e.start?e.start:0)):p.stat(e.path,(function(n,i){var t;n?a(n):(t=i.size-(e.start?e.start:0),a(null,t))})):e.hasOwnProperty("httpVersion")?a(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",(function(n){e.pause(),a(null,+n.headers["content-length"])})),e.resume()):a("Unknown stream")},f.prototype._multiPartHeader=function(e,a,n){if("string"==typeof n.header)return n.header;var i,t=this._getContentDisposition(a,n),o=this._getContentType(a,n),s="",r={"Content-Disposition":["form-data",'name="'+e+'"'].concat(t||[]),"Content-Type":[].concat(o||[])};for(var c in"object"==typeof n.header&&m(r,n.header),r)r.hasOwnProperty(c)&&null!=(i=r[c])&&(Array.isArray(i)||(i=[i]),i.length&&(s+=c+": "+i.join("; ")+f.LINE_BREAK));return"--"+this.getBoundary()+f.LINE_BREAK+s+f.LINE_BREAK},f.prototype._getContentDisposition=function(e,a){var n,i;return"string"==typeof a.filepath?n=o.normalize(a.filepath).replace(/\\/g,"/"):a.filename||e.name||e.path?n=o.basename(a.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(n=o.basename(e.client._httpMessage.path||"")),n&&(i='filename="'+n+'"'),i},f.prototype._getContentType=function(e,a){var n=a.contentType;return!n&&e.name&&(n=l.lookup(e.name)),!n&&e.path&&(n=l.lookup(e.path)),!n&&e.readable&&e.hasOwnProperty("httpVersion")&&(n=e.headers["content-type"]),n||!a.filepath&&!a.filename||(n=l.lookup(a.filepath||a.filename)),n||"object"!=typeof e||(n=f.DEFAULT_CONTENT_TYPE),n},f.prototype._multiPartFooter=function(){return function(e){var a=f.LINE_BREAK;0===this._streams.length&&(a+=this._lastBoundary()),e(a)}.bind(this)},f.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+f.LINE_BREAK},f.prototype.getHeaders=function(e){var a,n={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(a in e)e.hasOwnProperty(a)&&(n[a.toLowerCase()]=e[a]);return n},f.prototype.setBoundary=function(e){this._boundary=e},f.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},f.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),a=this.getBoundary(),n=0,i=this._streams.length;n<i;n++)"function"!=typeof this._streams[n]&&(e=Buffer.isBuffer(this._streams[n])?Buffer.concat([e,this._streams[n]]):Buffer.concat([e,Buffer.from(this._streams[n])]),"string"==typeof this._streams[n]&&this._streams[n].substring(2,a.length+2)===a||(e=Buffer.concat([e,Buffer.from(f.LINE_BREAK)])));return Buffer.concat([e,Buffer.from(this._lastBoundary())])},f.prototype._generateBoundary=function(){for(var e="--------------------------",a=0;a<24;a++)e+=Math.floor(10*Math.random()).toString(16);this._boundary=e},f.prototype.getLengthSync=function(){var e=this._overheadLength+this._valueLength;return this._streams.length&&(e+=this._lastBoundary().length),this.hasKnownLength()||this._error(new Error("Cannot calculate proper length in synchronous way.")),e},f.prototype.hasKnownLength=function(){var e=!0;return this._valuesToMeasure.length&&(e=!1),e},f.prototype.getLength=function(e){var a=this._overheadLength+this._valueLength;this._streams.length&&(a+=this._lastBoundary().length),this._valuesToMeasure.length?d.parallel(this._valuesToMeasure,this._lengthRetriever,(function(n,i){n?e(n):(i.forEach((function(e){a+=e})),e(null,a))})):process.nextTick(e.bind(this,null,a))},f.prototype.submit=function(e,a){var n,i,t={method:"post"};return"string"==typeof e?(e=c(e),i=m({port:e.port,path:e.pathname,host:e.hostname,protocol:e.protocol},t)):(i=m(e,t)).port||(i.port="https:"==i.protocol?443:80),i.headers=this.getHeaders(e.headers),n="https:"==i.protocol?r.request(i):s.request(i),this.getLength(function(e,i){if(e&&"Unknown stream"!==e)this._error(e);else if(i&&n.setHeader("Content-Length",i),this.pipe(n),a){var t,o=function(e,i){return n.removeListener("error",o),n.removeListener("response",t),a.call(this,e,i)};t=o.bind(this,null),n.on("error",o),n.on("response",t)}}.bind(this)),n},f.prototype._error=function(e){this.error||(this.error=e,this.pause(),this.emit("error",e))},f.prototype.toString=function(){return"[object FormData]"}},5469:e=>{e.exports=function(e,a){return Object.keys(a).forEach((function(n){e[n]=e[n]||a[n]})),e}},1475:function(e,a,n){"use strict";var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},i.apply(this,arguments)},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var o=t(n(4438)),s=t(n(4373)),r=t(n(5022)),c=t(n(3747)),p=t(n(4778)),u=t(n(4750)),l=t(n(3197)),d=t(n(5277)),m=t(n(9721)),f=t(n(9345)),x=t(n(9602)),v=t(n(6126)),h=t(n(5135)),b=t(n(5060)),g=t(n(7587)),y=t(n(9955)),w=t(n(7075)),_=function(e,a){var n=i({},e);if(n.url||(n.url="https://api.mailgun.net"),!n.username)throw new Error('Parameter "username" is required');if(!n.key)throw new Error('Parameter "key" is required');this.request=new o.default(n,a);var t=new h.default(this.request),_=new b.default(this.request),k=new y.default(this.request),j=new w.default(this.request),q=new g.default(this.request);this.domains=new s.default(this.request,_,k,j),this.webhooks=new u.default(this.request),this.events=new r.default(this.request),this.stats=new c.default(this.request),this.suppressions=new p.default(this.request),this.messages=new l.default(this.request),this.routes=new d.default(this.request),this.ips=new f.default(this.request),this.ip_pools=new x.default(this.request),this.lists=new v.default(this.request,t),this.validate=new m.default(this.request,q)};a.default=_},4373:function(e,a,n){"use strict";var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},i.apply(this,arguments)},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.Domain=void 0;var o=t(n(4078)),s=t(n(3142)),r=function(e,a,n){this.name=e.name,this.require_tls=e.require_tls,this.skip_verification=e.skip_verification,this.state=e.state,this.wildcard=e.wildcard,this.spam_action=e.spam_action,this.created_at=e.created_at,this.smtp_password=e.smtp_password,this.smtp_login=e.smtp_login,this.type=e.type,this.receiving_dns_records=a||null,this.sending_dns_records=n||null};a.Domain=r;var c=function(){function e(e,a,n,i){this.request=e,this.domainCredentials=a,this.domainTemplates=n,this.domainTags=i}return e.prototype._parseMessage=function(e){return e.body},e.prototype._parseDomainList=function(e){return e.body.items.map((function(e){return new r(e)}))},e.prototype._parseDomain=function(e){return new r(e.body.domain,e.body.receiving_dns_records,e.body.sending_dns_records)},e.prototype._parseTrackingSettings=function(e){return e.body.tracking},e.prototype._parseTrackingUpdate=function(e){return e.body},e.prototype.list=function(e){var a=this;return this.request.get("/v3/domains",e).then((function(e){return a._parseDomainList(e)}))},e.prototype.get=function(e){var a=this;return this.request.get("/v3/domains/".concat(e)).then((function(e){return a._parseDomain(e)}))},e.prototype.create=function(e){var a=this,n=i({},e);return"force_dkim_authority"in n&&"boolean"==typeof n.force_dkim_authority&&(n.force_dkim_authority="true"===n.toString()?"true":"false"),this.request.postWithFD("/v3/domains",n).then((function(e){return a._parseDomain(e)}))},e.prototype.verify=function(e){var a=this;return this.request.put("/v3/domains/".concat(e,"/verify")).then((function(e){return a._parseDomain(e)}))},e.prototype.destroy=function(e){var a=this;return this.request.delete("/v3/domains/".concat(e)).then((function(e){return a._parseMessage(e)}))},e.prototype.getConnection=function(e){return this.request.get("/v3/domains/".concat(e,"/connection")).then((function(e){return e})).then((function(e){return e.body.connection}))},e.prototype.updateConnection=function(e,a){return this.request.put("/v3/domains/".concat(e,"/connection"),a).then((function(e){return e})).then((function(e){return e.body}))},e.prototype.getTracking=function(e){return this.request.get((0,o.default)("/v3/domains",e,"tracking")).then(this._parseTrackingSettings)},e.prototype.updateTracking=function(e,a,n){var i=this;if("boolean"==typeof(null==n?void 0:n.active))throw new s.default({status:400,statusText:"Received boolean value for active property",body:{message:'Property "active" must contain string value.'}});return this.request.putWithFD((0,o.default)("/v3/domains",e,"tracking",a),n).then((function(e){return i._parseTrackingUpdate(e)}))},e.prototype.getIps=function(e){return this.request.get((0,o.default)("/v3/domains",e,"ips")).then((function(e){var a;return null===(a=null==e?void 0:e.body)||void 0===a?void 0:a.items}))},e.prototype.assignIp=function(e,a){return this.request.postWithFD((0,o.default)("/v3/domains",e,"ips"),{ip:a})},e.prototype.deleteIp=function(e,a){return this.request.delete((0,o.default)("/v3/domains",e,"ips",a))},e.prototype.linkIpPool=function(e,a){return this.request.postWithFD((0,o.default)("/v3/domains",e,"ips"),{pool_id:a})},e.prototype.unlinkIpPoll=function(e,a){var n="";if(a.pool_id&&a.ip)throw new s.default({status:400,statusText:"Too much data for replacement",body:{message:"Please specify either pool_id or ip (not both)"}});return a.pool_id?n="?pool_id=".concat(a.pool_id):a.ip&&(n="?ip=".concat(a.ip)),this.request.delete((0,o.default)("/v3/domains",e,"ips","ip_pool",n))},e.prototype.updateDKIMAuthority=function(e,a){return this.request.put("/v3/domains/".concat(e,"/dkim_authority"),{},{query:"self=".concat(a.self)}).then((function(e){return e})).then((function(e){return e.body}))},e.prototype.updateDKIMSelector=function(e,a){return this.request.put("/v3/domains/".concat(e,"/dkim_selector"),{},{query:"dkim_selector=".concat(a.dkimSelector)}).then((function(e){return e}))},e.prototype.updateWebPrefix=function(e,a){return this.request.put("/v3/domains/".concat(e,"/web_prefix"),{},{query:"web_prefix=".concat(a.webPrefix)}).then((function(e){return e}))},e}();a.default=c},5060:function(e,a,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var t=i(n(4078)),o=function(){function e(e){this.request=e,this.baseRoute="/v3/domains/"}return e.prototype._parseDomainCredentialsList=function(e){return{items:e.body.items,totalCount:e.body.total_count}},e.prototype._parseMessageResponse=function(e){return{status:e.status,message:e.body.message}},e.prototype._parseDeletedResponse=function(e){return{status:e.status,message:e.body.message,spec:e.body.spec}},e.prototype.list=function(e,a){var n=this;return this.request.get((0,t.default)(this.baseRoute,e,"/credentials"),a).then((function(e){return n._parseDomainCredentialsList(e)}))},e.prototype.create=function(e,a){var n=this;return this.request.postWithFD("".concat(this.baseRoute).concat(e,"/credentials"),a).then((function(e){return n._parseMessageResponse(e)}))},e.prototype.update=function(e,a,n){var i=this;return this.request.putWithFD("".concat(this.baseRoute).concat(e,"/credentials/").concat(a),n).then((function(e){return i._parseMessageResponse(e)}))},e.prototype.destroy=function(e,a){var n=this;return this.request.delete("".concat(this.baseRoute).concat(e,"/credentials/").concat(a)).then((function(e){return n._parseDeletedResponse(e)}))},e}();a.default=o},7075:function(e,a,n){"use strict";var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},i.apply(this,arguments)},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.DomainTagStatistic=a.DomainTag=void 0;var o=t(n(4078)),s=function(e){this.tag=e.tag,this.description=e.description,this["first-seen"]=new Date(e["first-seen"]),this["last-seen"]=new Date(e["last-seen"])};a.DomainTag=s;var r=function(e){this.tag=e.body.tag,this.description=e.body.description,this.start=new Date(e.body.start),this.end=new Date(e.body.end),this.resolution=e.body.resolution,this.stats=e.body.stats.map((function(e){return i(i({},e),{time:new Date(e.time)})}))};a.DomainTagStatistic=r;var c=function(){function e(e){this.request=e,this.baseRoute="/v3/"}return e.prototype._parsePageLinks=function(e){return Object.entries(e.body.paging).reduce((function(e,a){var n=a[0],i=a[1];return e[n]={id:n,url:i},e}),{})},e.prototype._parseDomainTagsList=function(e){return{items:e.body.items.map((function(e){return new s(e)})),pages:this._parsePageLinks(e)}},e.prototype._parseTagStatistic=function(e){return new r(e)},e.prototype.list=function(e,a){var n=this;return this.request.get((0,o.default)(this.baseRoute,e,"/tags"),a).then((function(e){return n._parseDomainTagsList(e)}))},e.prototype.get=function(e,a){return this.request.get((0,o.default)(this.baseRoute,e,"/tags",a)).then((function(e){return new s(e.body)}))},e.prototype.update=function(e,a,n){return this.request.put((0,o.default)(this.baseRoute,e,"/tags",a),n).then((function(e){return e.body}))},e.prototype.destroy=function(e,a){return this.request.delete("".concat(this.baseRoute).concat(e,"/tags/").concat(a)).then((function(e){return{message:e.body.message,status:e.status}}))},e.prototype.statistic=function(e,a,n){var i=this;return this.request.get((0,o.default)(this.baseRoute,e,"/tags",a,"stats"),n).then((function(e){return i._parseTagStatistic(e)}))},e.prototype.countries=function(e,a){return this.request.get((0,o.default)(this.baseRoute,e,"/tags",a,"stats/aggregates/countries")).then((function(e){return e.body}))},e.prototype.providers=function(e,a){return this.request.get((0,o.default)(this.baseRoute,e,"/tags",a,"stats/aggregates/providers")).then((function(e){return e.body}))},e.prototype.devices=function(e,a){return this.request.get((0,o.default)(this.baseRoute,e,"/tags",a,"stats/aggregates/devices")).then((function(e){return e.body}))},e}();a.default=c},9955:function(e,a,n){"use strict";var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},i.apply(this,arguments)},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.DomainTemplateItem=void 0;var o=t(n(4078)),s=function(e){this.name=e.name,this.description=e.description,this.createdAt=e.createdAt?new Date(e.createdAt):"",this.createdBy=e.createdBy,this.id=e.id,e.version&&(this.version=e.version,e.version.createdAt&&(this.version.createdAt=new Date(e.version.createdAt))),e.versions&&e.versions.length&&(this.versions=e.versions.map((function(e){var a=i({},e);return a.createdAt=new Date(e.createdAt),a})))};a.DomainTemplateItem=s;var r=function(){function e(e){this.request=e,this.baseRoute="/v3/"}return e.prototype.parseCreationResponse=function(e){return new s(e.body.template)},e.prototype.parseCreationVersionResponse=function(e){var a={};return a.status=e.status,a.message=e.body.message,e.body&&e.body.template&&(a.template=new s(e.body.template)),a},e.prototype.parseMutationResponse=function(e){var a={};return a.status=e.status,a.message=e.body.message,e.body&&e.body.template&&(a.templateName=e.body.template.name),a},e.prototype.parseNotificationResponse=function(e){var a={};return a.status=e.status,a.message=e.body.message,a},e.prototype.parseMutateTemplateVersionResponse=function(e){var a={};return a.status=e.status,a.message=e.body.message,e.body.template&&(a.templateName=e.body.template.name,a.templateVersion={tag:e.body.template.version.tag}),a},e.prototype.parseList=function(e){var a={};return a.items=e.body.items.map((function(e){return new s(e)})),a.pages=e.body.paging,a},e.prototype.parseListTemplateVersions=function(e){var a={};return a.template=new s(e.body.template),a.pages=e.body.paging,a},e.prototype.list=function(e,a){var n=this;return this.request.get((0,o.default)(this.baseRoute,e,"/templates"),a).then((function(e){return n.parseList(e)}))},e.prototype.get=function(e,a,n){return this.request.get((0,o.default)(this.baseRoute,e,"/templates/",a),n).then((function(e){return new s(e.body.template)}))},e.prototype.create=function(e,a){var n=this;return this.request.postWithFD((0,o.default)(this.baseRoute,e,"/templates"),a).then((function(e){return n.parseCreationResponse(e)}))},e.prototype.update=function(e,a,n){var i=this;return this.request.putWithFD((0,o.default)(this.baseRoute,e,"/templates/",a),n).then((function(e){return i.parseMutationResponse(e)}))},e.prototype.destroy=function(e,a){var n=this;return this.request.delete((0,o.default)(this.baseRoute,e,"/templates/",a)).then((function(e){return n.parseMutationResponse(e)}))},e.prototype.destroyAll=function(e){var a=this;return this.request.delete((0,o.default)(this.baseRoute,e,"/templates")).then((function(e){return a.parseNotificationResponse(e)}))},e.prototype.createVersion=function(e,a,n){var i=this;return this.request.postWithFD((0,o.default)(this.baseRoute,e,"/templates/",a,"/versions"),n).then((function(e){return i.parseCreationVersionResponse(e)}))},e.prototype.getVersion=function(e,a,n){return this.request.get((0,o.default)(this.baseRoute,e,"/templates/",a,"/versions/",n)).then((function(e){return new s(e.body.template)}))},e.prototype.updateVersion=function(e,a,n,i){var t=this;return this.request.putWithFD((0,o.default)(this.baseRoute,e,"/templates/",a,"/versions/",n),i).then((function(e){return t.parseMutateTemplateVersionResponse(e)}))},e.prototype.destroyVersion=function(e,a,n){var i=this;return this.request.delete((0,o.default)(this.baseRoute,e,"/templates/",a,"/versions/",n)).then((function(e){return i.parseMutateTemplateVersionResponse(e)}))},e.prototype.listVersions=function(e,a,n){var i=this;return this.request.get((0,o.default)(this.baseRoute,e,"/templates",a,"/versions"),n).then((function(e){return i.parseListTemplateVersions(e)}))},e}();a.default=r},3142:function(e,a){"use strict";var n,i=this&&this.__extends||(n=function(e,a){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,a){e.__proto__=a}||function(e,a){for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])},n(e,a)},function(e,a){if("function"!=typeof a&&null!==a)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");function i(){this.constructor=e}n(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)});Object.defineProperty(a,"__esModule",{value:!0});var t=function(e){function a(a){var n=a.status,i=a.statusText,t=a.message,o=a.body,s=void 0===o?{}:o,r=this,c="",p="";return"string"==typeof s?c=s:(c=null==s?void 0:s.message,p=null==s?void 0:s.error),(r=e.call(this)||this).stack="",r.status=n,r.message=t||p||i,r.details=c,r}return i(a,e),a}(Error);a.default=t},5022:function(e,a,n){"use strict";var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},i.apply(this,arguments)},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var o=t(n(4078)),s=function(){function e(e){this.request=e}return e.prototype._parsePageNumber=function(e){return e.split("/").pop()||""},e.prototype._parsePage=function(e,a){return{id:e,number:this._parsePageNumber(a),url:a}},e.prototype._parsePageLinks=function(e){var a=this;return Object.entries(e.body.paging).reduce((function(e,n){var i=n[0],t=n[1];return e[i]=a._parsePage(i,t),e}),{})},e.prototype._parseEventList=function(e){return{items:e.body.items,pages:this._parsePageLinks(e)}},e.prototype.get=function(e,a){var n,t=this,s=i({},a);return s&&s.page?(n=(0,o.default)("/v3",e,"events",s.page),delete s.page):n=(0,o.default)("/v3",e,"events"),this.request.get(n,s).then((function(e){return t._parseEventList(e)}))},e}();a.default=s},4150:function(e,a){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},n.apply(this,arguments)};Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e){this.FormDataConstructor=e}return e.prototype.createFormData=function(e){var a=this;if(!e)throw new Error("Please provide data object");return Object.keys(e).filter((function(a){return e[a]})).reduce((function(n,i){return["attachment","inline","multipleValidationFile"].includes(i)?(a.addFilesToFD(i,e[i],n),n):"message"===i?(a.addMimeDataToFD(i,e[i],n),n):(a.addCommonPropertyToFD(i,e[i],n),n)}),new this.FormDataConstructor)},e.prototype.isNodeFormData=function(e){return void 0!==e.getHeaders},e.prototype.getAttachmentOptions=function(e){if("object"!=typeof e||this.isStream(e))return{};var a=e.filename,i=e.contentType,t=e.knownLength;return n(n(n({},a?{filename:a}:{filename:"file"}),i&&{contentType:i}),t&&{knownLength:t})},e.prototype.addMimeDataToFD=function(e,a,n){this.isNodeFormData(n)?Buffer.isBuffer(a)&&n.append(e,a,{filename:"MimeMessage"}):n.append(e,a,"MimeMessage")},e.prototype.addFilesToFD=function(e,a,n){var i=this,t=function(e,a,n){var t="multipleValidationFile"===e?"file":e,o=i.isStream(a)?a:a.data,s=i.getAttachmentOptions(a);i.isNodeFormData(n)?n.append(t,o,s):n.append(t,o,s.filename)};Array.isArray(a)?a.forEach((function(a){t(e,a,n)})):t(e,a,n)},e.prototype.isStream=function(e){return"object"==typeof e&&"function"==typeof e.pipe},e.prototype.addCommonPropertyToFD=function(e,a,n){Array.isArray(a)?a.forEach((function(a){n.append(e,a)})):null!=a&&n.append(e,a)},e}();a.default=i},6175:function(e,a,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var t=i(n(1475)),o=function(){function e(e){this.formData=e}return Object.defineProperty(e,"default",{get:function(){return this},enumerable:!1,configurable:!0}),e.prototype.client=function(e){return new t.default(e,this.formData)},e}();a.default=o},3990:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.SuppressionModels=void 0,function(e){e.BOUNCES="bounces",e.COMPLAINTS="complaints",e.UNSUBSCRIBES="unsubscribes",e.WHITELISTS="whitelists"}(a.SuppressionModels||(a.SuppressionModels={}))},9602:function(e,a){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},n.apply(this,arguments)},i=this&&this.__awaiter||function(e,a,n,i){return new(n||(n=Promise))((function(t,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function r(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var a;e.done?t(e.value):(a=e.value,a instanceof n?a:new n((function(e){e(a)}))).then(s,r)}c((i=i.apply(e,a||[])).next())}))},t=this&&this.__generator||function(e,a){var n,i,t,o,s={label:0,sent:function(){if(1&t[0])throw t[1];return t[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(o){return function(r){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,i&&(t=2&o[0]?i.return:o[0]?i.throw||((t=i.return)&&t.call(i),0):i.next)&&!(t=t.call(i,o[1])).done)return t;switch(i=0,t&&(o=[2&o[0],t.value]),o[0]){case 0:case 1:t=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(t=s.trys,(t=t.length>0&&t[t.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!t||o[1]>t[0]&&o[1]<t[3])){s.label=o[1];break}if(6===o[0]&&s.label<t[1]){s.label=t[1],t=o;break}if(t&&s.label<t[2]){s.label=t[2],s.ops.push(o);break}t[2]&&s.ops.pop(),s.trys.pop();continue}o=a.call(e,s)}catch(e){o=[6,e],i=0}finally{n=t=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,r])}}};Object.defineProperty(a,"__esModule",{value:!0});var o=function(){function e(e){this.request=e}return e.prototype.list=function(){var e=this;return this.request.get("/v1/ip_pools").then((function(a){return e.parseIpPoolsResponse(a)}))},e.prototype.create=function(e){return i(this,void 0,void 0,(function(){var a;return t(this,(function(i){switch(i.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",e)];case 1:return a=i.sent(),[2,n({status:a.status},a.body)]}}))}))},e.prototype.update=function(e,a){return i(this,void 0,void 0,(function(){var i;return t(this,(function(t){switch(t.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(e),a)];case 1:return i=t.sent(),[2,n({status:i.status},i.body)]}}))}))},e.prototype.delete=function(e,a){return i(this,void 0,void 0,(function(){var i;return t(this,(function(t){switch(t.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(e),a)];case 1:return i=t.sent(),[2,n({status:i.status},i.body)]}}))}))},e.prototype.parseIpPoolsResponse=function(e){return n({status:e.status},e.body)},e}();a.default=o},9345:function(e,a){"use strict";var n=this&&this.__awaiter||function(e,a,n,i){return new(n||(n=Promise))((function(t,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function r(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var a;e.done?t(e.value):(a=e.value,a instanceof n?a:new n((function(e){e(a)}))).then(s,r)}c((i=i.apply(e,a||[])).next())}))},i=this&&this.__generator||function(e,a){var n,i,t,o,s={label:0,sent:function(){if(1&t[0])throw t[1];return t[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(o){return function(r){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,i&&(t=2&o[0]?i.return:o[0]?i.throw||((t=i.return)&&t.call(i),0):i.next)&&!(t=t.call(i,o[1])).done)return t;switch(i=0,t&&(o=[2&o[0],t.value]),o[0]){case 0:case 1:t=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(t=s.trys,(t=t.length>0&&t[t.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!t||o[1]>t[0]&&o[1]<t[3])){s.label=o[1];break}if(6===o[0]&&s.label<t[1]){s.label=t[1],t=o;break}if(t&&s.label<t[2]){s.label=t[2],s.ops.push(o);break}t[2]&&s.ops.pop(),s.trys.pop();continue}o=a.call(e,s)}catch(e){o=[6,e],i=0}finally{n=t=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,r])}}};Object.defineProperty(a,"__esModule",{value:!0});var t=function(){function e(e){this.request=e}return e.prototype.list=function(e){return n(this,void 0,void 0,(function(){var a;return i(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips",e)];case 1:return a=n.sent(),[2,this.parseIpsResponse(a)]}}))}))},e.prototype.get=function(e){return n(this,void 0,void 0,(function(){var a;return i(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips/".concat(e))];case 1:return a=n.sent(),[2,this.parseIpsResponse(a)]}}))}))},e.prototype.parseIpsResponse=function(e){return e.body},e}();a.default=t},6126:function(e,a){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},n.apply(this,arguments)};Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,a){this.request=e,this.baseRoute="/v3/lists",this.members=a}return e.prototype.parseValidationResult=function(e,a){return{status:e,validationResult:n(n({},a),{created_at:new Date(1e3*a.created_at)})}},e.prototype.list=function(e){return this.request.get("".concat(this.baseRoute,"/pages"),e).then((function(e){return e.body.items}))},e.prototype.get=function(e){return this.request.get("".concat(this.baseRoute,"/").concat(e)).then((function(e){return e.body.list}))},e.prototype.create=function(e){return this.request.postWithFD(this.baseRoute,e).then((function(e){return e.body.list}))},e.prototype.update=function(e,a){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(e),a).then((function(e){return e.body.list}))},e.prototype.destroy=function(e){return this.request.delete("".concat(this.baseRoute,"/").concat(e)).then((function(e){return e.body}))},e.prototype.validate=function(e){return this.request.post("".concat(this.baseRoute,"/").concat(e,"/validate"),{}).then((function(e){return n({status:e.status},e.body)}))},e.prototype.validationResult=function(e){var a=this;return this.request.get("".concat(this.baseRoute,"/").concat(e,"/validate")).then((function(e){return a.parseValidationResult(e.status,e.body)}))},e.prototype.cancelValidation=function(e){return this.request.delete("".concat(this.baseRoute,"/").concat(e,"/validate")).then((function(e){return{status:e.status,message:e.body.message}}))},e}();a.default=i},5135:function(e,a){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},n.apply(this,arguments)};Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e){this.request=e,this.baseRoute="/v3/lists"}return e.prototype.checkAndUpdateData=function(e){var a=n({},e);return"object"==typeof e.vars&&(a.vars=JSON.stringify(a.vars)),"boolean"==typeof e.subscribed&&(a.subscribed=e.subscribed?"yes":"no"),a},e.prototype.listMembers=function(e,a){return this.request.get("".concat(this.baseRoute,"/").concat(e,"/members/pages"),a).then((function(e){return e.body.items}))},e.prototype.getMember=function(e,a){return this.request.get("".concat(this.baseRoute,"/").concat(e,"/members/").concat(a)).then((function(e){return e.body.member}))},e.prototype.createMember=function(e,a){var n=this.checkAndUpdateData(a);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(e,"/members"),n).then((function(e){return e.body.member}))},e.prototype.createMembers=function(e,a){var n={members:Array.isArray(a.members)?JSON.stringify(a.members):a.members,upsert:a.upsert};return this.request.postWithFD("".concat(this.baseRoute,"/").concat(e,"/members.json"),n).then((function(e){return e.body}))},e.prototype.updateMember=function(e,a,n){var i=this.checkAndUpdateData(n);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(e,"/members/").concat(a),i).then((function(e){return e.body.member}))},e.prototype.destroyMember=function(e,a){return this.request.delete("".concat(this.baseRoute,"/").concat(e,"/members/").concat(a)).then((function(e){return e.body}))},e}();a.default=i},3197:function(e,a){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},n.apply(this,arguments)};Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e){this.request=e}return e.prototype.prepareBooleanValues=function(e){var a=new Set(["o:testmode","t:text","o:dkim","o:tracking","o:tracking-clicks","o:tracking-opens","o:require-tls","o:skip-verification"]);return e&&0!==Object.keys(e).length?Object.keys(e).reduce((function(n,i){return a.has(i)&&"boolean"==typeof e[i]?n[i]=e[i]?"yes":"no":n[i]=e[i],n}),{}):{}},e.prototype._parseResponse=function(e){return n({status:e.status},e.body)},e.prototype.create=function(e,a){if(a.message)return this.request.postWithFD("/v3/".concat(e,"/messages.mime"),a).then(this._parseResponse);var n=this.prepareBooleanValues(a);return this.request.postWithFD("/v3/".concat(e,"/messages"),n).then(this._parseResponse)},e}();a.default=i},7587:function(e,a){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},n.apply(this,arguments)},i=this&&this.__awaiter||function(e,a,n,i){return new(n||(n=Promise))((function(t,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function r(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var a;e.done?t(e.value):(a=e.value,a instanceof n?a:new n((function(e){e(a)}))).then(s,r)}c((i=i.apply(e,a||[])).next())}))},t=this&&this.__generator||function(e,a){var n,i,t,o,s={label:0,sent:function(){if(1&t[0])throw t[1];return t[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(o){return function(r){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,i&&(t=2&o[0]?i.return:o[0]?i.throw||((t=i.return)&&t.call(i),0):i.next)&&!(t=t.call(i,o[1])).done)return t;switch(i=0,t&&(o=[2&o[0],t.value]),o[0]){case 0:case 1:t=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(t=s.trys,(t=t.length>0&&t[t.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!t||o[1]>t[0]&&o[1]<t[3])){s.label=o[1];break}if(6===o[0]&&s.label<t[1]){s.label=t[1],t=o;break}if(t&&s.label<t[2]){s.label=t[2],s.ops.push(o);break}t[2]&&s.ops.pop(),s.trys.pop();continue}o=a.call(e,s)}catch(e){o=[6,e],i=0}finally{n=t=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,r])}}};Object.defineProperty(a,"__esModule",{value:!0});var o=function(){function e(e){this.request=e}return e.prototype.handleResponse=function(e){return n({status:e.status},null==e?void 0:e.body)},e.prototype.list=function(){return i(this,void 0,void 0,(function(){var e;return t(this,(function(a){switch(a.label){case 0:return[4,this.request.get("/v4/address/validate/bulk")];case 1:return e=a.sent(),[2,this.handleResponse(e)]}}))}))},e.prototype.get=function(e){return i(this,void 0,void 0,(function(){var a;return t(this,(function(i){switch(i.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(e))];case 1:return a=i.sent(),[2,n({responseStatusCode:a.status},null==a?void 0:a.body)]}}))}))},e.prototype.create=function(e,a){return i(this,void 0,void 0,(function(){var i,o;return t(this,(function(t){switch(t.label){case 0:return delete(i=n({multipleValidationFile:n({},null==a?void 0:a.file)},a)).file,[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(e),i)];case 1:return o=t.sent(),[2,this.handleResponse(o)]}}))}))},e.prototype.destroy=function(e){return i(this,void 0,void 0,(function(){var a;return t(this,(function(n){switch(n.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(e))];case 1:return a=n.sent(),[2,this.handleResponse(a)]}}))}))},e}();a.default=o},4438:function(e,a,n){"use strict";var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},i.apply(this,arguments)},t=this&&this.__createBinding||(Object.create?function(e,a,n,i){void 0===i&&(i=n);var t=Object.getOwnPropertyDescriptor(a,n);t&&!("get"in t?!a.__esModule:t.writable||t.configurable)||(t={enumerable:!0,get:function(){return a[n]}}),Object.defineProperty(e,i,t)}:function(e,a,n,i){void 0===i&&(i=n),e[i]=a[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:!0,value:a})}:function(e,a){e.default=a}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&t(a,e,n);return o(a,e),a},r=this&&this.__awaiter||function(e,a,n,i){return new(n||(n=Promise))((function(t,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function r(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var a;e.done?t(e.value):(a=e.value,a instanceof n?a:new n((function(e){e(a)}))).then(s,r)}c((i=i.apply(e,a||[])).next())}))},c=this&&this.__generator||function(e,a){var n,i,t,o,s={label:0,sent:function(){if(1&t[0])throw t[1];return t[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(o){return function(r){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,i&&(t=2&o[0]?i.return:o[0]?i.throw||((t=i.return)&&t.call(i),0):i.next)&&!(t=t.call(i,o[1])).done)return t;switch(i=0,t&&(o=[2&o[0],t.value]),o[0]){case 0:case 1:t=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(t=s.trys,(t=t.length>0&&t[t.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!t||o[1]>t[0]&&o[1]<t[3])){s.label=o[1];break}if(6===o[0]&&s.label<t[1]){s.label=t[1],t=o;break}if(t&&s.label<t[2]){s.label=t[2],s.ops.push(o);break}t[2]&&s.ops.pop(),s.trys.pop();continue}o=a.call(e,s)}catch(e){o=[6,e],i=0}finally{n=t=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,r])}}},p=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var u=s(n(7501)),l=p(n(4078)),d=p(n(9669)),m=p(n(3142)),f=p(n(4150)),x=function(){function e(e,a){this.username=e.username,this.key=e.key,this.url=e.url,this.timeout=e.timeout,this.headers=e.headers||{},this.formDataBuilder=new f.default(a),this.maxBodyLength=25e6}return e.prototype.request=function(e,a,n){var t,o,s;return r(this,void 0,void 0,(function(){var r,p,f,x,v,h,b,g,y;return c(this,(function(c){switch(c.label){case 0:r=i({},n),p=u.encode("".concat(this.username,":").concat(this.key)),f=r.headers?r.headers:{},x=i(i({Authorization:"Basic ".concat(p)},this.headers),f),null==r||delete r.headers,v=i({},r),(null==r?void 0:r.query)&&Object.getOwnPropertyNames(null==r?void 0:r.query).length>0&&(v.params=new URLSearchParams(r.query),delete v.query),(null==r?void 0:r.body)&&(h=null==r?void 0:r.body,v.data=h,delete v.body),c.label=1;case 1:return c.trys.push([1,3,,4]),[4,d.default.request(i(i({method:e.toLocaleUpperCase(),timeout:this.timeout,url:(0,l.default)(this.url,a),headers:x},v),{maxBodyLength:this.maxBodyLength}))];case 2:return b=c.sent(),[3,4];case 3:throw g=c.sent(),y=g,new m.default({status:(null===(t=null==y?void 0:y.response)||void 0===t?void 0:t.status)||400,statusText:(null===(o=null==y?void 0:y.response)||void 0===o?void 0:o.statusText)||y.code,body:(null===(s=null==y?void 0:y.response)||void 0===s?void 0:s.data)||y.message});case 4:return[4,this.getResponseBody(b)];case 5:return[2,c.sent()]}}))}))},e.prototype.getResponseBody=function(e){return r(this,void 0,void 0,(function(){var a;return c(this,(function(n){if(a={body:{},status:null==e?void 0:e.status},"string"==typeof e.data){if("Mailgun Magnificent API"===e.data)throw new m.default({status:400,statusText:"Incorrect url",body:e.data});a.body={message:e.data}}else a.body=e.data;return[2,a]}))}))},e.prototype.query=function(e,a,n,t){return this.request(e,a,i({query:n},t))},e.prototype.command=function(e,a,n,t,o){void 0===o&&(o=!0);var s={};o&&(s={"Content-Type":"application/x-www-form-urlencoded"});var r=i(i(i({},s),{body:n}),t);return this.request(e,a,r)},e.prototype.get=function(e,a,n){return this.query("get",e,a,n)},e.prototype.post=function(e,a,n){return this.command("post",e,a,n)},e.prototype.postWithFD=function(e,a){var n=this.formDataBuilder.createFormData(a);return this.command("post",e,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},e.prototype.putWithFD=function(e,a){var n=this.formDataBuilder.createFormData(a);return this.command("put",e,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},e.prototype.patchWithFD=function(e,a){var n=this.formDataBuilder.createFormData(a);return this.command("patch",e,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},e.prototype.put=function(e,a,n){return this.command("put",e,a,n)},e.prototype.delete=function(e,a){return this.command("delete",e,a)},e}();a.default=x},5277:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var n=function(){function e(e){this.request=e}return e.prototype.list=function(e){return this.request.get("/v3/routes",e).then((function(e){return e.body.items}))},e.prototype.get=function(e){return this.request.get("/v3/routes/".concat(e)).then((function(e){return e.body.route}))},e.prototype.create=function(e){return this.request.postWithFD("/v3/routes",e).then((function(e){return e.body.route}))},e.prototype.update=function(e,a){return this.request.putWithFD("/v3/routes/".concat(e),a).then((function(e){return e.body}))},e.prototype.destroy=function(e){return this.request.delete("/v3/routes/".concat(e)).then((function(e){return e.body}))},e}();a.default=n},3747:function(e,a,n){"use strict";var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var a,n=1,i=arguments.length;n<i;n++)for(var t in a=arguments[n])Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t]);return e},i.apply(this,arguments)},t=this&&this.__spreadArray||function(e,a,n){if(n||2===arguments.length)for(var i,t=0,o=a.length;t<o;t++)!i&&t in a||(i||(i=Array.prototype.slice.call(a,0,t)),i[t]=a[t]);return e.concat(i||Array.prototype.slice.call(a))},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var s=o(n(4078)),r=function(e){this.start=new Date(e.start),this.end=new Date(e.end),this.resolution=e.resolution,this.stats=e.stats.map((function(e){var a=i({},e);return a.time=new Date(e.time),a}))},c=function(){function e(e){this.request=e}return e.prototype.prepareSearchParams=function(e){var a=[];return"object"==typeof e&&Object.keys(e).length&&(a=Object.entries(e).reduce((function(e,a){var n=a[0],i=a[1];if(Array.isArray(i)&&i.length){var o=i.map((function(e){return[n,e]}));return t(t([],e,!0),o,!0)}return e.push([n,i]),e}),[])),a},e.prototype._parseStats=function(e){return new r(e.body)},e.prototype.getDomain=function(e,a){var n=this.prepareSearchParams(a);return this.request.get((0,s.default)("/v3",e,"stats/total"),n).then(this._parseStats)},e.prototype.getAccount=function(e){var a=this.prepareSearchParams(e);return this.request.get("/v3/stats/total",a).then(this._parseStats)},e}();a.default=c},4778:function(e,a,n){"use strict";var i,t=this&&this.__extends||(i=function(e,a){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,a){e.__proto__=a}||function(e,a){for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])},i(e,a)},function(e,a){if("function"!=typeof a&&null!==a)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");function n(){this.constructor=e}i(e,a),e.prototype=null===a?Object.create(a):(n.prototype=a.prototype,new n)}),o=this&&this.__spreadArray||function(e,a,n){if(n||2===arguments.length)for(var i,t=0,o=a.length;t<o;t++)!i&&t in a||(i||(i=Array.prototype.slice.call(a,0,t)),i[t]=a[t]);return e.concat(i||Array.prototype.slice.call(a))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.WhiteList=a.Unsubscribe=a.Complaint=a.Bounce=a.Suppression=void 0;var r=s(n(4078)),c=n(3990),p=s(n(3142)),u={headers:{"Content-Type":"application/json"}},l=function(e){this.type=e};a.Suppression=l;var d=function(e){function a(a){var n=e.call(this,c.SuppressionModels.BOUNCES)||this;return n.address=a.address,n.code=+a.code,n.error=a.error,n.created_at=new Date(a.created_at),n}return t(a,e),a}(l);a.Bounce=d;var m=function(e){function a(a){var n=e.call(this,c.SuppressionModels.COMPLAINTS)||this;return n.address=a.address,n.created_at=new Date(a.created_at),n}return t(a,e),a}(l);a.Complaint=m;var f=function(e){function a(a){var n=e.call(this,c.SuppressionModels.UNSUBSCRIBES)||this;return n.address=a.address,n.tags=a.tags,n.created_at=new Date(a.created_at),n}return t(a,e),a}(l);a.Unsubscribe=f;var x=function(e){function a(a){var n=e.call(this,c.SuppressionModels.WHITELISTS)||this;return n.value=a.value,n.reason=a.reason,n.createdAt=new Date(a.createdAt),n}return t(a,e),a}(l);a.WhiteList=x;var v=function(){function e(e){this.request=e,this.models=new Map,this.models.set("bounces",d),this.models.set("complaints",m),this.models.set("unsubscribes",f),this.models.set("whitelists",x)}return e.prototype._parsePage=function(e,a){var n=new URL(a).searchParams;return{id:e,page:n.has("page")?n.get("page"):void 0,address:n.has("address")?n.get("address"):void 0,url:a}},e.prototype._parsePageLinks=function(e){var a=this;return Object.entries(e.body.paging).reduce((function(e,n){var i=n[0],t=n[1];return e[i]=a._parsePage(i,t),e}),{})},e.prototype._parseList=function(e,a){var n={};return n.items=e.body.items.map((function(e){return new a(e)})),n.pages=this._parsePageLinks(e),n},e.prototype._parseItem=function(e,a){return new a(e)},e.prototype.createWhiteList=function(e,a){if(Array.isArray(a))throw new p.default({status:400,statusText:"Data property should be an object",body:{message:"Whitelist's creation process does not support multiple creations. Data property should be an object"}});return this.request.postWithFD((0,r.default)("v3",e,"whitelists"),a).then(this.prepareResponse)},e.prototype.checkType=function(e){if(!this.models.has(e))throw new p.default({status:400,statusText:"Unknown type value",body:{message:"Type may be only one of [bounces, complaints, unsubscribes, whitelists]"}})},e.prototype.prepareResponse=function(e){return{message:e.body.message,type:e.body.type||"",value:e.body.value||"",status:e.status}},e.prototype.list=function(e,a,n){var i=this;this.checkType(a);var t=this.models.get(a);return this.request.get((0,r.default)("v3",e,a),n).then((function(e){return i._parseList(e,t)}))},e.prototype.get=function(e,a,n){var i=this;this.checkType(a);var t=this.models.get(a);return this.request.get((0,r.default)("v3",e,a,encodeURIComponent(n))).then((function(e){return i._parseItem(e.body,t)}))},e.prototype.create=function(e,a,n){var i;return this.checkType(a),"whitelists"===a?this.createWhiteList(e,n):(i=Array.isArray(n)?o([],n,!0):[n],this.request.post((0,r.default)("v3",e,a),JSON.stringify(i),u).then(this.prepareResponse))},e.prototype.destroy=function(e,a,n){return this.checkType(a),this.request.delete((0,r.default)("v3",e,a,encodeURIComponent(n))).then((function(e){return{message:e.body.message,value:e.body.value||"",address:e.body.address||"",status:e.status}}))},e}();a.default=v,e.exports=v},9721:function(e,a){"use strict";var n=this&&this.__awaiter||function(e,a,n,i){return new(n||(n=Promise))((function(t,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function r(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var a;e.done?t(e.value):(a=e.value,a instanceof n?a:new n((function(e){e(a)}))).then(s,r)}c((i=i.apply(e,a||[])).next())}))},i=this&&this.__generator||function(e,a){var n,i,t,o,s={label:0,sent:function(){if(1&t[0])throw t[1];return t[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(o){return function(r){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,i&&(t=2&o[0]?i.return:o[0]?i.throw||((t=i.return)&&t.call(i),0):i.next)&&!(t=t.call(i,o[1])).done)return t;switch(i=0,t&&(o=[2&o[0],t.value]),o[0]){case 0:case 1:t=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(t=s.trys,(t=t.length>0&&t[t.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!t||o[1]>t[0]&&o[1]<t[3])){s.label=o[1];break}if(6===o[0]&&s.label<t[1]){s.label=t[1],t=o;break}if(t&&s.label<t[2]){s.label=t[2],s.ops.push(o);break}t[2]&&s.ops.pop(),s.trys.pop();continue}o=a.call(e,s)}catch(e){o=[6,e],i=0}finally{n=t=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,r])}}};Object.defineProperty(a,"__esModule",{value:!0});var t=function(){function e(e,a){this.request=e,this.multipleValidation=a}return e.prototype.get=function(e){return n(this,void 0,void 0,(function(){var a;return i(this,(function(n){switch(n.label){case 0:return a={address:e},[4,this.request.get("/v4/address/validate",a)];case 1:return[2,n.sent().body]}}))}))},e}();a.default=t},4750:function(e,a,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var t=i(n(4078)),o=function(e,a){this.id=e,this.url=a},s=function(){function e(e){this.request=e}return e.prototype._parseWebhookList=function(e){return e.body.webhooks},e.prototype._parseWebhookWithID=function(e){return function(a){var n,i=null===(n=null==a?void 0:a.body)||void 0===n?void 0:n.webhook,t=null==i?void 0:i.url;return t||(t=(null==i?void 0:i.urls)&&i.urls.length?i.urls[0]:void 0),new o(e,t)}},e.prototype._parseWebhookTest=function(e){return{code:e.body.code,message:e.body.message}},e.prototype.list=function(e,a){return this.request.get((0,t.default)("/v3/domains",e,"webhooks"),a).then(this._parseWebhookList)},e.prototype.get=function(e,a){return this.request.get((0,t.default)("/v3/domains",e,"webhooks",a)).then(this._parseWebhookWithID(a))},e.prototype.create=function(e,a,n,i){return void 0===i&&(i=!1),i?this.request.putWithFD((0,t.default)("/v3/domains",e,"webhooks",a,"test"),{url:n}).then(this._parseWebhookTest):this.request.postWithFD((0,t.default)("/v3/domains",e,"webhooks"),{id:a,url:n}).then(this._parseWebhookWithID(a))},e.prototype.update=function(e,a,n){return this.request.putWithFD((0,t.default)("/v3/domains",e,"webhooks",a),{url:n}).then(this._parseWebhookWithID(a))},e.prototype.destroy=function(e,a){return this.request.delete((0,t.default)("/v3/domains",e,"webhooks",a)).then(this._parseWebhookWithID(a))},e}();a.default=s},7501:function(e,a,n){var i;e=n.nmd(e),function(t){var o=a,s=(e&&e.exports,"object"==typeof global&&global);s.global!==s&&s.window;var r=function(e){this.message=e};(r.prototype=new Error).name="InvalidCharacterError";var c=function(e){throw new r(e)},p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=/[\t\n\f\r ]/g,l={encode:function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var a,n,i,t,o=e.length%3,s="",r=-1,u=e.length-o;++r<u;)a=e.charCodeAt(r)<<16,n=e.charCodeAt(++r)<<8,i=e.charCodeAt(++r),s+=p.charAt((t=a+n+i)>>18&63)+p.charAt(t>>12&63)+p.charAt(t>>6&63)+p.charAt(63&t);return 2==o?(a=e.charCodeAt(r)<<8,n=e.charCodeAt(++r),s+=p.charAt((t=a+n)>>10)+p.charAt(t>>4&63)+p.charAt(t<<2&63)+"="):1==o&&(t=e.charCodeAt(r),s+=p.charAt(t>>2)+p.charAt(t<<4&63)+"=="),s},decode:function(e){var a=(e=String(e).replace(u,"")).length;a%4==0&&(a=(e=e.replace(/==?$/,"")).length),(a%4==1||/[^+a-zA-Z0-9/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,i,t=0,o="",s=-1;++s<a;)i=p.indexOf(e.charAt(s)),n=t%4?64*n+i:i,t++%4&&(o+=String.fromCharCode(255&n>>(-2*t&6)));return o},version:"1.0.0"};void 0===(i=function(){return l}.call(a,n,a,e))||(e.exports=i)}()},9779:(e,a,n)=>{var i=n(3837),t=n(2781).Stream,o=n(3463);function s(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=s,i.inherits(s,t),s.create=function(e){var a=new this;for(var n in e=e||{})a[n]=e[n];return a},s.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},s.prototype.append=function(e){if(s.isStreamLike(e)){if(!(e instanceof o)){var a=o.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=a}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},s.prototype.pipe=function(e,a){return t.prototype.pipe.call(this,e,a),this.resume(),e},s.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},s.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){s.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},s.prototype._pipeNext=function(e){if(this._currentStream=e,s.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var a=e;this.write(a),this._getNext()},s.prototype._handleErrors=function(e){var a=this;e.on("error",(function(e){a._emitError(e)}))},s.prototype.write=function(e){this.emit("data",e)},s.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},s.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},s.prototype.end=function(){this._reset(),this.emit("end")},s.prototype.destroy=function(){this._reset(),this.emit("close")},s.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},s.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},s.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(a){a.dataSize&&(e.dataSize+=a.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},s.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},1227:(e,a,n)=>{a.formatArgs=function(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;a.splice(1,0,n,"color: inherit");let i=0,t=0;a[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(i++,"%c"===e&&(t=i))})),a.splice(t,0,n)},a.save=function(e){try{e?a.storage.setItem("debug",e):a.storage.removeItem("debug")}catch(e){}},a.load=function(){let e;try{e=a.storage.getItem("debug")}catch(e){}!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG);return e},a.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},a.storage=function(){try{return localStorage}catch(e){}}(),a.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),a.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],a.log=console.debug||console.log||(()=>{}),e.exports=n(2447)(a);const{formatters:i}=e.exports;i.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},2447:(e,a,n)=>{e.exports=function(e){function a(e){let n,t,o,s=null;function r(...e){if(!r.enabled)return;const i=r,t=Number(new Date),o=t-(n||t);i.diff=o,i.prev=n,i.curr=t,n=t,e[0]=a.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,t)=>{if("%%"===n)return"%";s++;const o=a.formatters[t];if("function"==typeof o){const a=e[s];n=o.call(i,a),e.splice(s,1),s--}return n})),a.formatArgs.call(i,e);(i.log||a.log).apply(i,e)}return r.namespace=e,r.useColors=a.useColors(),r.color=a.selectColor(e),r.extend=i,r.destroy=a.destroy,Object.defineProperty(r,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(t!==a.namespaces&&(t=a.namespaces,o=a.enabled(e)),o),set:e=>{s=e}}),"function"==typeof a.init&&a.init(r),r}function i(e,n){const i=a(this.namespace+(void 0===n?":":n)+e);return i.log=this.log,i}function t(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return a.debug=a,a.default=a,a.coerce=function(e){if(e instanceof Error)return e.stack||e.message;return e},a.disable=function(){const e=[...a.names.map(t),...a.skips.map(t).map((e=>"-"+e))].join(",");return a.enable(""),e},a.enable=function(e){let n;a.save(e),a.namespaces=e,a.names=[],a.skips=[];const i=("string"==typeof e?e:"").split(/[\s,]+/),t=i.length;for(n=0;n<t;n++)i[n]&&("-"===(e=i[n].replace(/\*/g,".*?"))[0]?a.skips.push(new RegExp("^"+e.slice(1)+"$")):a.names.push(new RegExp("^"+e+"$")))},a.enabled=function(e){if("*"===e[e.length-1])return!0;let n,i;for(n=0,i=a.skips.length;n<i;n++)if(a.skips[n].test(e))return!1;for(n=0,i=a.names.length;n<i;n++)if(a.names[n].test(e))return!0;return!1},a.humanize=n(7824),a.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(e).forEach((n=>{a[n]=e[n]})),a.names=[],a.skips=[],a.formatters={},a.selectColor=function(e){let n=0;for(let a=0;a<e.length;a++)n=(n<<5)-n+e.charCodeAt(a),n|=0;return a.colors[Math.abs(n)%a.colors.length]},a.enable(a.load()),a}},5158:(e,a,n)=>{"undefined"==typeof process||"renderer"===process.type||!0===process.browser||process.__nwjs?e.exports=n(1227):e.exports=n(39)},39:(e,a,n)=>{const i=n(6224),t=n(3837);a.init=function(e){e.inspectOpts={};const n=Object.keys(a.inspectOpts);for(let i=0;i<n.length;i++)e.inspectOpts[n[i]]=a.inspectOpts[n[i]]},a.log=function(...e){return process.stderr.write(t.format(...e)+"\n")},a.formatArgs=function(n){const{namespace:i,useColors:t}=this;if(t){const a=this.color,t="[3"+(a<8?a:"8;5;"+a),o=` ${t};1m${i} [0m`;n[0]=o+n[0].split("\n").join("\n"+o),n.push(t+"m+"+e.exports.humanize(this.diff)+"[0m")}else n[0]=function(){if(a.inspectOpts.hideDate)return"";return(new Date).toISOString()+" "}()+i+" "+n[0]},a.save=function(e){e?process.env.DEBUG=e:delete process.env.DEBUG},a.load=function(){return process.env.DEBUG},a.useColors=function(){return"colors"in a.inspectOpts?Boolean(a.inspectOpts.colors):i.isatty(process.stderr.fd)},a.destroy=t.deprecate((()=>{}),"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),a.colors=[6,2,3,4,5,1];try{const e=n(2130);e&&(e.stderr||e).level>=2&&(a.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}a.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,a)=>{const n=a.substring(6).toLowerCase().replace(/_([a-z])/g,((e,a)=>a.toUpperCase()));let i=process.env[a];return i=!!/^(yes|on|true|enabled)$/i.test(i)||!/^(no|off|false|disabled)$/i.test(i)&&("null"===i?null:Number(i)),e[n]=i,e}),{}),e.exports=n(2447)(a);const{formatters:o}=e.exports;o.o=function(e){return this.inspectOpts.colors=this.useColors,t.inspect(e,this.inspectOpts).split("\n").map((e=>e.trim())).join(" ")},o.O=function(e){return this.inspectOpts.colors=this.useColors,t.inspect(e,this.inspectOpts)}},3463:(e,a,n)=>{var i=n(2781).Stream,t=n(3837);function o(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=o,t.inherits(o,i),o.create=function(e,a){var n=new this;for(var i in a=a||{})n[i]=a[i];n.source=e;var t=e.emit;return e.emit=function(){return n._handleEmit(arguments),t.apply(e,arguments)},e.on("error",(function(){})),n.pauseStream&&e.pause(),n},Object.defineProperty(o.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),o.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},o.prototype.resume=function(){this._released||this.release(),this.source.resume()},o.prototype.pause=function(){this.source.pause()},o.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},o.prototype.pipe=function(){var e=i.prototype.pipe.apply(this,arguments);return this.resume(),e},o.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},o.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},2261:(e,a,n)=>{var i;e.exports=function(){if(!i){try{i=n(5158)("follow-redirects")}catch(e){}"function"!=typeof i&&(i=function(){})}i.apply(null,arguments)}},938:(e,a,n)=>{var i=n(7310),t=i.URL,o=n(3685),s=n(5687),r=n(2781).Writable,c=n(9491),p=n(2261),u=["abort","aborted","connect","error","socket","timeout"],l=Object.create(null);u.forEach((function(e){l[e]=function(a,n,i){this._redirectable.emit(e,a,n,i)}}));var d=w("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),m=w("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded"),f=w("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),x=w("ERR_STREAM_WRITE_AFTER_END","write after end");function v(e,a){r.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],a&&this.on("response",a);var n=this;this._onNativeResponse=function(e){n._processResponse(e)},this._performRequest()}function h(e){var a={maxRedirects:21,maxBodyLength:10485760},n={};return Object.keys(e).forEach((function(o){var s=o+":",r=n[s]=e[o],u=a[o]=Object.create(r);Object.defineProperties(u,{request:{value:function(e,o,r){if("string"==typeof e){var u=e;try{e=g(new t(u))}catch(a){e=i.parse(u)}}else t&&e instanceof t?e=g(e):(r=o,o=e,e={protocol:s});return"function"==typeof o&&(r=o,o=null),(o=Object.assign({maxRedirects:a.maxRedirects,maxBodyLength:a.maxBodyLength},e,o)).nativeProtocols=n,c.equal(o.protocol,s,"protocol mismatch"),p("options",o),new v(o,r)},configurable:!0,enumerable:!0,writable:!0},get:{value:function(e,a,n){var i=u.request(e,a,n);return i.end(),i},configurable:!0,enumerable:!0,writable:!0}})})),a}function b(){}function g(e){var a={protocol:e.protocol,hostname:e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:e.pathname+e.search,href:e.href};return""!==e.port&&(a.port=Number(e.port)),a}function y(e,a){var n;for(var i in a)e.test(i)&&(n=a[i],delete a[i]);return null==n?void 0:String(n).trim()}function w(e,a){function n(e){Error.captureStackTrace(this,this.constructor),e?(this.message=a+": "+e.message,this.cause=e):this.message=a}return n.prototype=new Error,n.prototype.constructor=n,n.prototype.name="Error ["+e+"]",n.prototype.code=e,n}function _(e){for(var a=0;a<u.length;a++)e.removeListener(u[a],l[u[a]]);e.on("error",b),e.abort()}v.prototype=Object.create(r.prototype),v.prototype.abort=function(){_(this._currentRequest),this.emit("abort")},v.prototype.write=function(e,a,n){if(this._ending)throw new x;if(!("string"==typeof e||"object"==typeof e&&"length"in e))throw new TypeError("data should be a string, Buffer or Uint8Array");"function"==typeof a&&(n=a,a=null),0!==e.length?this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:a}),this._currentRequest.write(e,a,n)):(this.emit("error",new f),this.abort()):n&&n()},v.prototype.end=function(e,a,n){if("function"==typeof e?(n=e,e=a=null):"function"==typeof a&&(n=a,a=null),e){var i=this,t=this._currentRequest;this.write(e,a,(function(){i._ended=!0,t.end(null,null,n)})),this._ending=!0}else this._ended=this._ending=!0,this._currentRequest.end(null,null,n)},v.prototype.setHeader=function(e,a){this._options.headers[e]=a,this._currentRequest.setHeader(e,a)},v.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)},v.prototype.setTimeout=function(e,a){var n=this;function i(a){a.setTimeout(e),a.removeListener("timeout",a.destroy),a.addListener("timeout",a.destroy)}function t(a){n._timeout&&clearTimeout(n._timeout),n._timeout=setTimeout((function(){n.emit("timeout"),o()}),e),i(a)}function o(){n._timeout&&(clearTimeout(n._timeout),n._timeout=null),n.removeListener("abort",o),n.removeListener("error",o),n.removeListener("response",o),a&&n.removeListener("timeout",a),n.socket||n._currentRequest.removeListener("socket",t)}return a&&this.on("timeout",a),this.socket?t(this.socket):this._currentRequest.once("socket",t),this.on("socket",i),this.on("abort",o),this.on("error",o),this.on("response",o),this},["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach((function(e){v.prototype[e]=function(a,n){return this._currentRequest[e](a,n)}})),["aborted","connection","socket"].forEach((function(e){Object.defineProperty(v.prototype,e,{get:function(){return this._currentRequest[e]}})})),v.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var a=e.path.indexOf("?");a<0?e.pathname=e.path:(e.pathname=e.path.substring(0,a),e.search=e.path.substring(a))}},v.prototype._performRequest=function(){var e=this._options.protocol,a=this._options.nativeProtocols[e];if(a){if(this._options.agents){var n=e.slice(0,-1);this._options.agent=this._options.agents[n]}var t=this._currentRequest=a.request(this._options,this._onNativeResponse);this._currentUrl=i.format(this._options),t._redirectable=this;for(var o=0;o<u.length;o++)t.on(u[o],l[u[o]]);if(this._isRedirect){var s=0,r=this,c=this._requestBodyBuffers;!function e(a){if(t===r._currentRequest)if(a)r.emit("error",a);else if(s<c.length){var n=c[s++];t.finished||t.write(n.data,n.encoding,e)}else r._ended&&t.end()}()}}else this.emit("error",new TypeError("Unsupported protocol "+e))},v.prototype._processResponse=function(e){var a=e.statusCode;this._options.trackRedirects&&this._redirects.push({url:this._currentUrl,headers:e.headers,statusCode:a});var n=e.headers.location;if(!n||!1===this._options.followRedirects||a<300||a>=400)return e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),void(this._requestBodyBuffers=[]);if(_(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)this.emit("error",new m);else{var t,o=this._options.beforeRedirect;o&&(t=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var s=this._options.method;((301===a||302===a)&&"POST"===this._options.method||303===a&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],y(/^content-/i,this._options.headers));var r,c=y(/^host$/i,this._options.headers),u=i.parse(this._currentUrl),l=c||u.host,f=/^\w+:/.test(n)?this._currentUrl:i.format(Object.assign(u,{host:l}));try{r=i.resolve(f,n)}catch(e){return void this.emit("error",new d(e))}p("redirecting to",r),this._isRedirect=!0;var x=i.parse(r);if(Object.assign(this._options,x),(x.protocol!==u.protocol&&"https:"!==x.protocol||x.host!==l&&!function(e,a){const n=e.length-a.length-1;return n>0&&"."===e[n]&&e.endsWith(a)}(x.host,l))&&y(/^(?:authorization|cookie)$/i,this._options.headers),"function"==typeof o){var v={headers:e.headers,statusCode:a},h={url:f,method:s,headers:t};try{o(this._options,v,h)}catch(e){return void this.emit("error",e)}this._sanitizeOptions(this._options)}try{this._performRequest()}catch(e){this.emit("error",new d(e))}}},e.exports=h({http:o,https:s}),e.exports.wrap=h},6560:e=>{"use strict";e.exports=(e,a)=>{a=a||process.argv;const n=e.startsWith("-")?"":1===e.length?"-":"--",i=a.indexOf(n+e),t=a.indexOf("--");return-1!==i&&(-1===t||i<t)}},5234:(e,a,n)=>{e.exports=n(3765)},983:(e,a,n)=>{"use strict";var i,t,o,s=n(5234),r=n(1017).extname,c=/^\s*([^;\s]*)(?:;|\s|$)/,p=/^text\//i;function u(e){if(!e||"string"!=typeof e)return!1;var a=c.exec(e),n=a&&s[a[1].toLowerCase()];return n&&n.charset?n.charset:!(!a||!p.test(a[1]))&&"UTF-8"}a.charset=u,a.charsets={lookup:u},a.contentType=function(e){if(!e||"string"!=typeof e)return!1;var n=-1===e.indexOf("/")?a.lookup(e):e;if(!n)return!1;if(-1===n.indexOf("charset")){var i=a.charset(n);i&&(n+="; charset="+i.toLowerCase())}return n},a.extension=function(e){if(!e||"string"!=typeof e)return!1;var n=c.exec(e),i=n&&a.extensions[n[1].toLowerCase()];if(!i||!i.length)return!1;return i[0]},a.extensions=Object.create(null),a.lookup=function(e){if(!e||"string"!=typeof e)return!1;var n=r("x."+e).toLowerCase().substr(1);if(!n)return!1;return a.types[n]||!1},a.types=Object.create(null),i=a.extensions,t=a.types,o=["nginx","apache",void 0,"iana"],Object.keys(s).forEach((function(e){var a=s[e],n=a.extensions;if(n&&n.length){i[e]=n;for(var r=0;r<n.length;r++){var c=n[r];if(t[c]){var p=o.indexOf(s[t[c]].source),u=o.indexOf(a.source);if("application/octet-stream"!==t[c]&&(p>u||p===u&&"application/"===t[c].substr(0,12)))continue}t[c]=e}}}))},7824:e=>{var a=1e3,n=60*a,i=60*n,t=24*i,o=7*t,s=365.25*t;function r(e,a,n,i){var t=a>=1.5*n;return Math.round(e/n)+" "+i+(t?"s":"")}e.exports=function(e,c){c=c||{};var p=typeof e;if("string"===p&&e.length>0)return function(e){if((e=String(e)).length>100)return;var r=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!r)return;var c=parseFloat(r[1]);switch((r[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*s;case"weeks":case"week":case"w":return c*o;case"days":case"day":case"d":return c*t;case"hours":case"hour":case"hrs":case"hr":case"h":return c*i;case"minutes":case"minute":case"mins":case"min":case"m":return c*n;case"seconds":case"second":case"secs":case"sec":case"s":return c*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(e);if("number"===p&&isFinite(e))return c.long?function(e){var o=Math.abs(e);if(o>=t)return r(e,o,t,"day");if(o>=i)return r(e,o,i,"hour");if(o>=n)return r(e,o,n,"minute");if(o>=a)return r(e,o,a,"second");return e+" ms"}(e):function(e){var o=Math.abs(e);if(o>=t)return Math.round(e/t)+"d";if(o>=i)return Math.round(e/i)+"h";if(o>=n)return Math.round(e/n)+"m";if(o>=a)return Math.round(e/a)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},2130:(e,a,n)=>{"use strict";const i=n(2037),t=n(6560),o=process.env;let s;function r(e){const a=function(e){if(!1===s)return 0;if(t("color=16m")||t("color=full")||t("color=truecolor"))return 3;if(t("color=256"))return 2;if(e&&!e.isTTY&&!0!==s)return 0;const a=s?1:0;if("win32"===process.platform){const e=i.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in o)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some((e=>e in o))||"codeship"===o.CI_NAME?1:a;if("TEAMCITY_VERSION"in o)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION)?1:0;if("truecolor"===o.COLORTERM)return 3;if("TERM_PROGRAM"in o){const e=parseInt((o.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(o.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(o.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM)||"COLORTERM"in o?1:(o.TERM,a)}(e);return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(a)}t("no-color")||t("no-colors")||t("color=false")?s=!1:(t("color")||t("colors")||t("color=true")||t("color=always"))&&(s=!0),"FORCE_COLOR"in o&&(s=0===o.FORCE_COLOR.length||0!==parseInt(o.FORCE_COLOR,10)),e.exports={supportsColor:r,stdout:r(process.stdout),stderr:r(process.stderr)}},4078:function(e,a,n){var i,t,o;o=function(){function e(e){var a=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var n=e.shift();e[0]=n+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var i=0;i<e.length;i++){var t=e[i];if("string"!=typeof t)throw new TypeError("Url must be a string. Received "+t);""!==t&&(i>0&&(t=t.replace(/^[\/]+/,"")),t=i<e.length-1?t.replace(/[\/]+$/,""):t.replace(/[\/]+$/,"/"),a.push(t))}var o=a.join("/"),s=(o=o.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return o=s.shift()+(s.length>0?"?":"")+s.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=o():void 0===(t="function"==typeof(i=o)?i.call(a,n,a,e):i)||(e.exports=t)},9491:e=>{"use strict";e.exports=require("assert")},7147:e=>{"use strict";e.exports=require("fs")},3685:e=>{"use strict";e.exports=require("http")},5687:e=>{"use strict";e.exports=require("https")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},2781:e=>{"use strict";e.exports=require("stream")},6224:e=>{"use strict";e.exports=require("tty")},7310:e=>{"use strict";e.exports=require("url")},3837:e=>{"use strict";e.exports=require("util")},9796:e=>{"use strict";e.exports=require("zlib")},3765:e=>{"use strict";e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')}},a={};function n(i){var t=a[i];if(void 0!==t)return t.exports;var o=a[i]={id:i,loaded:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var i=n(6175);return i=i.default})()}));
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxRQUdyQixJQUFJQyxFQUFTNGhDLEVBQXlCRSxHQUFZLENBQ2pEeHRCLEdBQUl3dEIsRUFDSkUsUUFBUSxFQUNSamlDLFFBQVMsSUFVVixPQU5Ba2lDLEVBQW9CSCxHQUFVMXdCLEtBQUtwUixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTOGhDLEdBRzNFN2hDLEVBQU9naUMsUUFBUyxFQUdUaGlDLEVBQU9ELFFDeEJmOGhDLEVBQW9CSyxJQUFPbGlDLElBQzFCQSxFQUFPbWlDLE1BQVEsR0FDVm5pQyxFQUFPb2lDLFdBQVVwaUMsRUFBT29pQyxTQUFXLElBQ2pDcGlDLEdDQVIsSUFBSXFpQyxFQUFzQlIsRUFBb0IsMEJoR085QyIsInNvdXJjZXMiOlsid2VicGFjazovL21haWxndW4vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9zdGF0ZS5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWxPcmRlcmVkLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvaHR0cC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvZW52L0Zvcm1EYXRhLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9mb3JtX2RhdGEuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9heGlvcy9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9wb3B1bGF0ZS5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2RvbWFpbnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9kb21haW5zQ3JlZGVudGlhbHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9kb21haW5zVGFncy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2RvbWFpbnNUZW1wbGF0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9lcnJvci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2V2ZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2Zvcm1EYXRhQnVpbGRlci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvaW50ZXJmYWNlcy9TdXByZXNzaW9ucy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL2lwLXBvb2xzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvaXBzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvbGlzdHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9tYWlsTGlzdE1lbWJlcnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9tZXNzYWdlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL211bHRpcGxlVmFsaWRhdGlvbi50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL3JlcXVlc3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9yb3V0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9zdGF0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL3N1cHByZXNzaW9ucy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL3ZhbGlkYXRlLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvd2ViaG9va3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9iYXNlLTY0L2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2NvbWJpbmVkLXN0cmVhbS9saWIvY29tYmluZWRfc3RyZWFtLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvY29tbW9uLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL25vZGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9kZWxheWVkLXN0cmVhbS9saWIvZGVsYXllZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzL2RlYnVnLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2hhcy1mbGFnL2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvbWltZS1kYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwid2VicGFjazovL21haWxndW4vZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImFzc2VydFwiIiwid2VicGFjazovL21haWxndW4vZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImZzXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cFwiIiwid2VicGFjazovL21haWxndW4vZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImh0dHBzXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwib3NcIiIsIndlYnBhY2s6Ly9tYWlsZ3VuL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidHR5XCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidXJsXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidXRpbFwiIiwid2VicGFjazovL21haWxndW4vZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInpsaWJcIiIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL21haWxndW4vd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJtYWlsZ3VuXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm1haWxndW5cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYWJvcnQ7XG5cbi8qKlxuICogQWJvcnRzIGxlZnRvdmVyIGFjdGl2ZSBqb2JzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYWJvcnQoc3RhdGUpXG57XG4gIE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmZvckVhY2goY2xlYW4uYmluZChzdGF0ZSkpO1xuXG4gIC8vIHJlc2V0IGxlZnRvdmVyIGpvYnNcbiAgc3RhdGUuam9icyA9IHt9O1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBsZWZ0b3ZlciBqb2IgYnkgaW52b2tpbmcgYWJvcnQgZnVuY3Rpb24gZm9yIHRoZSBwcm92aWRlZCBqb2IgaWRcbiAqXG4gKiBAdGhpcyAgc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0ga2V5IC0gam9iIGlkIHRvIGFib3J0XG4gKi9cbmZ1bmN0aW9uIGNsZWFuKGtleSlcbntcbiAgaWYgKHR5cGVvZiB0aGlzLmpvYnNba2V5XSA9PSAnZnVuY3Rpb24nKVxuICB7XG4gICAgdGhpcy5qb2JzW2tleV0oKTtcbiAgfVxufVxuIiwidmFyIGRlZmVyID0gcmVxdWlyZSgnLi9kZWZlci5qcycpO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBjYWxsYmFjayBhc3luY2hyb25vdXNseVxuICogZXZlbiBpZiBjYWxsYmFjayBpdHNlbGYgaXMgbm90XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGNhbGxiYWNrIHRvIGludm9rZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGF1Z21lbnRlZCBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhc3luYyhjYWxsYmFjaylcbntcbiAgdmFyIGlzQXN5bmMgPSBmYWxzZTtcblxuICAvLyBjaGVjayBpZiBhc3luYyBoYXBwZW5lZFxuICBkZWZlcihmdW5jdGlvbigpIHsgaXNBc3luYyA9IHRydWU7IH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBhc3luY19jYWxsYmFjayhlcnIsIHJlc3VsdClcbiAge1xuICAgIGlmIChpc0FzeW5jKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGRlZmVyKGZ1bmN0aW9uIG5leHRUaWNrX2NhbGxiYWNrKClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBkZWZlcjtcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBmdW5jdGlvbiB0byBydW5cbiAqL1xuZnVuY3Rpb24gZGVmZXIoZm4pXG57XG4gIHZhciBuZXh0VGljayA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2V0SW1tZWRpYXRlXG4gICAgOiAoXG4gICAgICB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb2Nlc3MubmV4dFRpY2tcbiAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgaWYgKG5leHRUaWNrKVxuICB7XG4gICAgbmV4dFRpY2soZm4pO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICB9XG59XG4iLCJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgLCBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRlO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWFjaCBqb2Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgam9iIHN0YXR1c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICovXG5mdW5jdGlvbiBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgY2FsbGJhY2spXG57XG4gIC8vIHN0b3JlIGN1cnJlbnQgaW5kZXhcbiAgdmFyIGtleSA9IHN0YXRlWydrZXllZExpc3QnXSA/IHN0YXRlWydrZXllZExpc3QnXVtzdGF0ZS5pbmRleF0gOiBzdGF0ZS5pbmRleDtcblxuICBzdGF0ZS5qb2JzW2tleV0gPSBydW5Kb2IoaXRlcmF0b3IsIGtleSwgbGlzdFtrZXldLCBmdW5jdGlvbihlcnJvciwgb3V0cHV0KVxuICB7XG4gICAgLy8gZG9uJ3QgcmVwZWF0IHlvdXJzZWxmXG4gICAgLy8gc2tpcCBzZWNvbmRhcnkgY2FsbGJhY2tzXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmpvYnMpKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBqb2JzXG4gICAgZGVsZXRlIHN0YXRlLmpvYnNba2V5XTtcblxuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICAvLyBkb24ndCBwcm9jZXNzIHJlc3Qgb2YgdGhlIHJlc3VsdHNcbiAgICAgIC8vIHN0b3Agc3RpbGwgYWN0aXZlIGpvYnNcbiAgICAgIC8vIGFuZCByZXNldCB0aGUgbGlzdFxuICAgICAgYWJvcnQoc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3RhdGUucmVzdWx0c1trZXldID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIHJldHVybiBzYWx2YWdlZCByZXN1bHRzXG4gICAgY2FsbGJhY2soZXJyb3IsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgam9iIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gaW52b2tlXG4gKiBAcGFyYW0gICB7c3RyaW5nfG51bWJlcn0ga2V5IC0ga2V5L2luZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGpvYnNcbiAqIEBwYXJhbSAgIHttaXhlZH0gaXRlbSAtIGpvYiBkZXNjcmlwdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgYWZ0ZXIgaXRlcmF0b3IgaXMgZG9uZSB3aXRoIHRoZSBqb2JcbiAqIEByZXR1cm5zIHtmdW5jdGlvbnxtaXhlZH0gLSBqb2IgYWJvcnQgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2VcbiAqL1xuZnVuY3Rpb24gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGl0ZW0sIGNhbGxiYWNrKVxue1xuICB2YXIgYWJvcnRlcjtcblxuICAvLyBhbGxvdyBzaG9ydGN1dCBpZiBpdGVyYXRvciBleHBlY3RzIG9ubHkgdHdvIGFyZ3VtZW50c1xuICBpZiAoaXRlcmF0b3IubGVuZ3RoID09IDIpXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuICAvLyBvdGhlcndpc2UgZ28gd2l0aCBmdWxsIHRocmVlIGFyZ3VtZW50c1xuICBlbHNlXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwga2V5LCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG5cbiAgcmV0dXJuIGFib3J0ZXI7XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsInZhciBzZXJpYWxPcmRlcmVkID0gcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICByZXR1cm4gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgbnVsbCwgY2FsbGJhY2spO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbE9yZGVyZWQ7XG4vLyBzb3J0aW5nIGhlbHBlcnNcbm1vZHVsZS5leHBvcnRzLmFzY2VuZGluZyAgPSBhc2NlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZXNjZW5kaW5nID0gZGVzY2VuZGluZztcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgc29ydGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBzb3J0TWV0aG9kIC0gY3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBzb3J0TWV0aG9kLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QsIHNvcnRNZXRob2QpO1xuXG4gIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbiBpdGVyYXRvckhhbmRsZXIoZXJyb3IsIHJlc3VsdClcbiAge1xuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuXG4gICAgLy8gYXJlIHdlIHRoZXJlIHlldD9cbiAgICBpZiAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAgICB7XG4gICAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgaXRlcmF0b3JIYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkb25lIGhlcmVcbiAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuXG4vKlxuICogLS0gU29ydCBtZXRob2RzXG4gKi9cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGFzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gLTEgKiBhc2NlbmRpbmcoYSwgYik7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGh0dHBGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cDtcbnZhciBodHRwc0ZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwcztcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIFZFUlNJT04gPSByZXF1aXJlKCcuLy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcblxudmFyIGlzSHR0cHMgPSAvaHR0cHM6Py87XG5cbnZhciBzdXBwb3J0ZWRQcm90b2NvbHMgPSBbICdodHRwOicsICdodHRwczonLCAnZmlsZTonIF07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBwcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBsb2NhdGlvbikge1xuICBvcHRpb25zLmhvc3RuYW1lID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5ob3N0ID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5wb3J0ID0gcHJveHkucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gbG9jYXRpb247XG5cbiAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICBpZiAocHJveHkuYXV0aCkge1xuICAgIHZhciBiYXNlNjQgPSBCdWZmZXIuZnJvbShwcm94eS5hdXRoLnVzZXJuYW1lICsgJzonICsgcHJveHkuYXV0aC5wYXNzd29yZCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgb3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIGJhc2U2NDtcbiAgfVxuXG4gIC8vIElmIGEgcHJveHkgaXMgdXNlZCwgYW55IHJlZGlyZWN0cyBtdXN0IGFsc28gcGFzcyB0aHJvdWdoIHRoZSBwcm94eVxuICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0ID0gZnVuY3Rpb24gYmVmb3JlUmVkaXJlY3QocmVkaXJlY3Rpb24pIHtcbiAgICByZWRpcmVjdGlvbi5oZWFkZXJzLmhvc3QgPSByZWRpcmVjdGlvbi5ob3N0O1xuICAgIHNldFByb3h5KHJlZGlyZWN0aW9uLCBwcm94eSwgcmVkaXJlY3Rpb24uaHJlZik7XG4gIH07XG59XG5cbi8qZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOjAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoSHR0cFJlcXVlc3QocmVzb2x2ZVByb21pc2UsIHJlamVjdFByb21pc2UpIHtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh2YWx1ZSk7XG4gICAgfTtcbiAgICB2YXIgcmVqZWN0ZWQgPSBmYWxzZTtcbiAgICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICByZWplY3RQcm9taXNlKHZhbHVlKTtcbiAgICB9O1xuICAgIHZhciBkYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIGhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgaGVhZGVyTmFtZXMgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24gc3RvcmVMb3dlck5hbWUobmFtZSkge1xuICAgICAgaGVhZGVyTmFtZXNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IG5hbWU7XG4gICAgfSk7XG5cbiAgICAvLyBTZXQgVXNlci1BZ2VudCAocmVxdWlyZWQgYnkgc29tZSBzZXJ2ZXJzKVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgaWYgKCd1c2VyLWFnZW50JyBpbiBoZWFkZXJOYW1lcykge1xuICAgICAgLy8gVXNlci1BZ2VudCBpcyBzcGVjaWZpZWQ7IGhhbmRsZSBjYXNlIHdoZXJlIG5vIFVBIGhlYWRlciBpcyBkZXNpcmVkXG4gICAgICBpZiAoIWhlYWRlcnNbaGVhZGVyTmFtZXNbJ3VzZXItYWdlbnQnXV0pIHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyTmFtZXNbJ3VzZXItYWdlbnQnXV07XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIHVzZSBzcGVjaWZpZWQgdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT25seSBzZXQgaGVhZGVyIGlmIGl0IGhhc24ndCBiZWVuIHNldCBpbiBjb25maWdcbiAgICAgIGhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9ICdheGlvcy8nICsgVkVSU0lPTjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9mb3JtLWRhdGEgYXBpXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIGRhdGEuZ2V0SGVhZGVycygpKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgIXV0aWxzLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uLi5cbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmluZyhkYXRhKSkge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdEYXRhIGFmdGVyIHRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBzdHJpbmcsIGFuIEFycmF5QnVmZmVyLCBhIEJ1ZmZlciwgb3IgYSBTdHJlYW0nLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEgJiYgZGF0YS5sZW5ndGggPiBjb25maWcubWF4Qm9keUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdCcsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIGRhdGEgZXhpc3RzXG4gICAgICBpZiAoIWhlYWRlck5hbWVzWydjb250ZW50LWxlbmd0aCddKSB7XG4gICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBkYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgdmFyIGF1dGggPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgYXV0aCA9IHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgdmFyIHBhcnNlZCA9IHVybC5wYXJzZShmdWxsUGF0aCk7XG4gICAgdmFyIHByb3RvY29sID0gcGFyc2VkLnByb3RvY29sIHx8IHN1cHBvcnRlZFByb3RvY29sc1swXTtcblxuICAgIGlmIChzdXBwb3J0ZWRQcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAnVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgY29uZmlnXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAoIWF1dGggJiYgcGFyc2VkLmF1dGgpIHtcbiAgICAgIHZhciB1cmxBdXRoID0gcGFyc2VkLmF1dGguc3BsaXQoJzonKTtcbiAgICAgIHZhciB1cmxVc2VybmFtZSA9IHVybEF1dGhbMF0gfHwgJyc7XG4gICAgICB2YXIgdXJsUGFzc3dvcmQgPSB1cmxBdXRoWzFdIHx8ICcnO1xuICAgICAgYXV0aCA9IHVybFVzZXJuYW1lICsgJzonICsgdXJsUGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgaWYgKGF1dGggJiYgaGVhZGVyTmFtZXMuYXV0aG9yaXphdGlvbikge1xuICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyTmFtZXMuYXV0aG9yaXphdGlvbl07XG4gICAgfVxuXG4gICAgdmFyIGlzSHR0cHNSZXF1ZXN0ID0gaXNIdHRwcy50ZXN0KHByb3RvY29sKTtcbiAgICB2YXIgYWdlbnQgPSBpc0h0dHBzUmVxdWVzdCA/IGNvbmZpZy5odHRwc0FnZW50IDogY29uZmlnLmh0dHBBZ2VudDtcblxuICAgIHRyeSB7XG4gICAgICBidWlsZFVSTChwYXJzZWQucGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB2YXIgY3VzdG9tRXJyID0gbmV3IEVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgIGN1c3RvbUVyci5jb25maWcgPSBjb25maWc7XG4gICAgICBjdXN0b21FcnIudXJsID0gY29uZmlnLnVybDtcbiAgICAgIGN1c3RvbUVyci5leGlzdHMgPSB0cnVlO1xuICAgICAgcmVqZWN0KGN1c3RvbUVycik7XG4gICAgfVxuXG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwYXRoOiBidWlsZFVSTChwYXJzZWQucGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyksXG4gICAgICBtZXRob2Q6IGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBhZ2VudDogYWdlbnQsXG4gICAgICBhZ2VudHM6IHsgaHR0cDogY29uZmlnLmh0dHBBZ2VudCwgaHR0cHM6IGNvbmZpZy5odHRwc0FnZW50IH0sXG4gICAgICBhdXRoOiBhdXRoXG4gICAgfTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICB9XG5cbiAgICB2YXIgcHJveHkgPSBjb25maWcucHJveHk7XG4gICAgaWYgKCFwcm94eSAmJiBwcm94eSAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcm94eUVudiA9IHByb3RvY29sLnNsaWNlKDAsIC0xKSArICdfcHJveHknO1xuICAgICAgdmFyIHByb3h5VXJsID0gcHJvY2Vzcy5lbnZbcHJveHlFbnZdIHx8IHByb2Nlc3MuZW52W3Byb3h5RW52LnRvVXBwZXJDYXNlKCldO1xuICAgICAgaWYgKHByb3h5VXJsKSB7XG4gICAgICAgIHZhciBwYXJzZWRQcm94eVVybCA9IHVybC5wYXJzZShwcm94eVVybCk7XG4gICAgICAgIHZhciBub1Byb3h5RW52ID0gcHJvY2Vzcy5lbnYubm9fcHJveHkgfHwgcHJvY2Vzcy5lbnYuTk9fUFJPWFk7XG4gICAgICAgIHZhciBzaG91bGRQcm94eSA9IHRydWU7XG5cbiAgICAgICAgaWYgKG5vUHJveHlFbnYpIHtcbiAgICAgICAgICB2YXIgbm9Qcm94eSA9IG5vUHJveHlFbnYuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gdHJpbShzKSB7XG4gICAgICAgICAgICByZXR1cm4gcy50cmltKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzaG91bGRQcm94eSA9ICFub1Byb3h5LnNvbWUoZnVuY3Rpb24gcHJveHlNYXRjaChwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICghcHJveHlFbGVtZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm94eUVsZW1lbnQgPT09ICcqJykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm94eUVsZW1lbnRbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgIHBhcnNlZC5ob3N0bmFtZS5zdWJzdHIocGFyc2VkLmhvc3RuYW1lLmxlbmd0aCAtIHByb3h5RWxlbWVudC5sZW5ndGgpID09PSBwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQuaG9zdG5hbWUgPT09IHByb3h5RWxlbWVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRQcm94eSkge1xuICAgICAgICAgIHByb3h5ID0ge1xuICAgICAgICAgICAgaG9zdDogcGFyc2VkUHJveHlVcmwuaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiBwYXJzZWRQcm94eVVybC5wb3J0LFxuICAgICAgICAgICAgcHJvdG9jb2w6IHBhcnNlZFByb3h5VXJsLnByb3RvY29sXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChwYXJzZWRQcm94eVVybC5hdXRoKSB7XG4gICAgICAgICAgICB2YXIgcHJveHlVcmxBdXRoID0gcGFyc2VkUHJveHlVcmwuYXV0aC5zcGxpdCgnOicpO1xuICAgICAgICAgICAgcHJveHkuYXV0aCA9IHtcbiAgICAgICAgICAgICAgdXNlcm5hbWU6IHByb3h5VXJsQXV0aFswXSxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IHByb3h5VXJsQXV0aFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJveHkpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5ob3N0ID0gcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJyk7XG4gICAgICBzZXRQcm94eShvcHRpb25zLCBwcm94eSwgcHJvdG9jb2wgKyAnLy8nICsgcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJykgKyBvcHRpb25zLnBhdGgpO1xuICAgIH1cblxuICAgIHZhciB0cmFuc3BvcnQ7XG4gICAgdmFyIGlzSHR0cHNQcm94eSA9IGlzSHR0cHNSZXF1ZXN0ICYmIChwcm94eSA/IGlzSHR0cHMudGVzdChwcm94eS5wcm90b2NvbCkgOiB0cnVlKTtcbiAgICBpZiAoY29uZmlnLnRyYW5zcG9ydCkge1xuICAgICAgdHJhbnNwb3J0ID0gY29uZmlnLnRyYW5zcG9ydDtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMgPT09IDApIHtcbiAgICAgIHRyYW5zcG9ydCA9IGlzSHR0cHNQcm94eSA/IGh0dHBzIDogaHR0cDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgICAgb3B0aW9ucy5tYXhSZWRpcmVjdHMgPSBjb25maWcubWF4UmVkaXJlY3RzO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5iZWZvcmVSZWRpcmVjdCkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0ID0gY29uZmlnLmJlZm9yZVJlZGlyZWN0O1xuICAgICAgfVxuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1Byb3h5ID8gaHR0cHNGb2xsb3cgOiBodHRwRm9sbG93O1xuICAgIH1cblxuICAgIGlmIChjb25maWcubWF4Qm9keUxlbmd0aCA+IC0xKSB7XG4gICAgICBvcHRpb25zLm1heEJvZHlMZW5ndGggPSBjb25maWcubWF4Qm9keUxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmluc2VjdXJlSFRUUFBhcnNlcikge1xuICAgICAgb3B0aW9ucy5pbnNlY3VyZUhUVFBQYXJzZXIgPSBjb25maWcuaW5zZWN1cmVIVFRQUGFyc2VyO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdFxuICAgIHZhciByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAvLyB1bmNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIHZhciBzdHJlYW0gPSByZXM7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgbGFzdCByZXF1ZXN0IGluIGNhc2Ugb2YgcmVkaXJlY3RzXG4gICAgICB2YXIgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuXG4gICAgICAvLyBpZiBubyBjb250ZW50LCBpcyBIRUFEIHJlcXVlc3Qgb3IgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjA0ICYmIGxhc3RSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbmZpZy5kZWNvbXByZXNzICE9PSBmYWxzZSkge1xuICAgICAgICBzd2l0Y2ggKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICdkZWZsYXRlJzpcbiAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbSA9IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiBsYXN0UmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSBzdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICB2YXIgdG90YWxSZXNwb25zZUJ5dGVzID0gMDtcbiAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRGF0YShjaHVuaykge1xuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgIHRvdGFsUmVzcG9uc2VCeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIHRvdGFsUmVzcG9uc2VCeXRlcyA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzdHJlYW0uZGVzdG95KCkgZW1pdCBhYm9ydGVkIGV2ZW50IGJlZm9yZSBjYWxsaW5nIHJlamVjdCgpIG9uIE5vZGUuanMgdjE2XG4gICAgICAgICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdhYm9ydGVkJywgZnVuY3Rpb24gaGFuZGxlclN0cmVhbUFib3J0ZWQoKSB7XG4gICAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgY29uZmlnLm1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGxhc3RSZXF1ZXN0XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgICByZWplY3QoQXhpb3NFcnJvci5mcm9tKGVyciwgbnVsbCwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVuZCgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlQnVmZmVyLmxlbmd0aCA9PT0gMSA/IHJlc3BvbnNlQnVmZmVyWzBdIDogQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEudG9TdHJpbmcoY29uZmlnLnJlc3BvbnNlRW5jb2RpbmcpO1xuICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5yZXNwb25zZUVuY29kaW5nIHx8IGNvbmZpZy5yZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSB1dGlscy5zdHJpcEJPTShyZXNwb25zZURhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVzcG9uc2UucmVxdWVzdCwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKGVycikge1xuICAgICAgLy8gQHRvZG8gcmVtb3ZlXG4gICAgICAvLyBpZiAocmVxLmFib3J0ZWQgJiYgZXJyLmNvZGUgIT09IEF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUykgcmV0dXJuO1xuICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVxKSk7XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgdGNwIGtlZXAgYWxpdmUgdG8gcHJldmVudCBkcm9wIGNvbm5lY3Rpb24gYnkgcGVlclxuICAgIHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFNvY2tldChzb2NrZXQpIHtcbiAgICAgIC8vIGRlZmF1bHQgaW50ZXJ2YWwgb2Ygc2VuZGluZyBhY2sgcGFja2V0IGlzIDEgbWludXRlXG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIDEwMDAgKiA2MCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVxdWVzdCB0aW1lb3V0XG4gICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAvLyBUaGlzIGlzIGZvcmNpbmcgYSBpbnQgdGltZW91dCB0byBhdm9pZCBwcm9ibGVtcyBpZiB0aGUgYHJlcWAgaW50ZXJmYWNlIGRvZXNuJ3QgaGFuZGxlIG90aGVyIHR5cGVzLlxuICAgICAgdmFyIHRpbWVvdXQgPSBwYXJzZUludChjb25maWcudGltZW91dCwgMTApO1xuXG4gICAgICBpZiAoaXNOYU4odGltZW91dCkpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdlcnJvciB0cnlpbmcgdG8gcGFyc2UgYGNvbmZpZy50aW1lb3V0YCB0byBpbnQnLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3JpbmcgQ1BVIGxpdHRsZSBieSBsaXR0bGUuXG4gICAgICAvLyBDbGllbnRSZXF1ZXN0LnNldFRpbWVvdXQgd2lsbCBiZSBmaXJlZCBvbiB0aGUgc3BlY2lmeSBtaWxsaXNlY29uZHMsIGFuZCBjYW4gbWFrZSBzdXJlIHRoYXQgYWJvcnQoKSB3aWxsIGJlIGZpcmVkIGFmdGVyIGNvbm5lY3QuXG4gICAgICByZXEuc2V0VGltZW91dCh0aW1lb3V0LCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0VGltZW91dCgpIHtcbiAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ3RpbWVvdXQgb2YgJyArIHRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLFxuICAgICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxXG4gICAgICAgICkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcblxuICAgICAgICByZXEuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsZWRFcnJvcigpIDogY2FuY2VsKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIGlmICh1dGlscy5pc1N0cmVhbShkYXRhKSkge1xuICAgICAgZGF0YS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIGNvbmZpZywgbnVsbCwgcmVxKSk7XG4gICAgICB9KS5waXBlKHJlcSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcS5lbmQoZGF0YSk7XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbnZhciBwYXJzZVByb3RvY29sID0gcmVxdWlyZSgnLi4vaGVscGVycy9wYXJzZVByb3RvY29sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkgJiYgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsZWRFcnJvcigpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBbICdodHRwJywgJ2h0dHBzJywgJ2ZpbGUnIF0uaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuYXhpb3MuVkVSU0lPTiA9IHJlcXVpcmUoJy4vZW52L2RhdGEnKS52ZXJzaW9uO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vbGliL2NvcmUvQXhpb3NFcnJvcicpO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzQXhpb3NFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuXG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgdmFyIGk7XG4gICAgdmFyIGwgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICB9XG4gICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuID0gZnVuY3Rpb24ob25mdWxmaWxsZWQpIHtcbiAgICB2YXIgX3Jlc29sdmU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuL2J1aWxkRnVsbFBhdGgnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG52YXIgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG52YXIgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goZnVuY3Rpb24oY29kZSkge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gZnVuY3Rpb24oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gIHZhciBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcigpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtZXJnZU1hcCA9IHtcbiAgICAndXJsJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnbWV0aG9kJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnZGF0YSc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2Jhc2VVUkwnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXF1ZXN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVzcG9uc2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdwYXJhbXNTZXJpYWxpemVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXRNZXNzYWdlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aENyZWRlbnRpYWxzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYWRhcHRlcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlVHlwZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZDb29raWVOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkhlYWRlck5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvblVwbG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25Eb3dubG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnZGVjb21wcmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhCb2R5TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYmVmb3JlUmVkaXJlY3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc3BvcnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwc0FnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnY2FuY2VsVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdzb2NrZXRQYXRoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VFbmNvZGluZyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJzogbWVyZ2VEaXJlY3RLZXlzXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcxKS5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIHZhciBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UocHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuL0F4aW9zRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2Zvcm0tZGF0YScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSByZXF1aXJlKCcuL3RyYW5zaXRpb25hbCcpO1xudmFyIHRvRm9ybURhdGEgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3RvRm9ybURhdGEnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdBY2NlcHQnKTtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB2YXIgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG4gICAgdmFyIGNvbnRlbnRUeXBlID0gaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXTtcblxuICAgIHZhciBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgKGlzT2JqZWN0UGF5bG9hZCAmJiBjb250ZW50VHlwZSA9PT0gJ211bHRpcGFydC9mb3JtLWRhdGEnKSkge1xuICAgICAgdmFyIF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuICAgICAgcmV0dXJuIHRvRm9ybURhdGEoaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSwgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSk7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdFBheWxvYWQgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICB2YXIgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICB2YXIgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChzdHJpY3RKU09OUGFyc2luZyB8fCAoZm9yY2VkSlNPTlBhcnNpbmcgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgZGF0YS5sZW5ndGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiByZXF1aXJlKCcuL2Vudi9Gb3JtRGF0YScpXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwidmVyc2lvblwiOiBcIjAuMjcuMlwiXG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIHZhciBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgRm9ybURhdGEoKTtcblxuICB2YXIgc3RhY2sgPSBbXTtcblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGQoZGF0YSwgcGFyZW50S2V5KSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoZGF0YSkgfHwgdXRpbHMuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2YoZGF0YSkgIT09IC0xKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhcmVudEtleSk7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrLnB1c2goZGF0YSk7XG5cbiAgICAgIHV0aWxzLmZvckVhY2goZGF0YSwgZnVuY3Rpb24gZWFjaCh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgdmFyIGZ1bGxLZXkgPSBwYXJlbnRLZXkgPyBwYXJlbnRLZXkgKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICAgIHZhciBhcnI7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmICFwYXJlbnRLZXkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgIXV0aWxzLmlzVW5kZWZpbmVkKGVsKSAmJiBmb3JtRGF0YS5hcHBlbmQoZnVsbEtleSwgY29udmVydFZhbHVlKGVsKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICB9KTtcblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJlbnRLZXksIGNvbnZlcnRWYWx1ZShkYXRhKSk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZFUlNJT04gPSByZXF1aXJlKCcuLi9lbnYvZGF0YScpLnZlcnNpb247XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goZnVuY3Rpb24odHlwZSwgaSkge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxudmFyIGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3B0LCBvcHRzKSB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNzZXJ0T3B0aW9uczogYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xudmFyIGtpbmRPZiA9IChmdW5jdGlvbihjYWNoZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odGhpbmcpIHtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xuICB9O1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmZ1bmN0aW9uIGtpbmRPZlRlc3QodHlwZSkge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gaXNLaW5kT2YodGhpbmcpIHtcbiAgICByZXR1cm4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbCkge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmVhbSh2YWwpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHRoaW5nKSB7XG4gIHZhciBwYXR0ZXJuID0gJ1tvYmplY3QgRm9ybURhdGFdJztcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8XG4gICAgdG9TdHJpbmcuY2FsbCh0aGluZykgPT09IHBhdHRlcm4gfHxcbiAgICAoaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gcGF0dGVybilcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICogQHJldHVybiB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdHMoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZmlsdGVyXVxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiB0b0ZsYXRPYmplY3Qoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIpIHtcbiAgdmFyIHByb3BzO1xuICB2YXIgaTtcbiAgdmFyIHByb3A7XG4gIHZhciBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICghbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qXG4gKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICB2YXIgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSh0aGluZykge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgdmFyIGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmIChpc1VuZGVmaW5lZChpKSkgcmV0dXJuIG51bGw7XG4gIHZhciBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBpc1R5cGVkQXJyYXkgPSAoZnVuY3Rpb24oVHlwZWRBcnJheSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW0sXG4gIHN0cmlwQk9NOiBzdHJpcEJPTSxcbiAgaW5oZXJpdHM6IGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3Q6IHRvRmxhdE9iamVjdCxcbiAga2luZE9mOiBraW5kT2YsXG4gIGtpbmRPZlRlc3Q6IGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoOiBlbmRzV2l0aCxcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3Q6IGlzRmlsZUxpc3Rcbn07XG4iLCJ2YXIgQ29tYmluZWRTdHJlYW0gPSByZXF1aXJlKCdjb21iaW5lZC1zdHJlYW0nKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG52YXIgcGFyc2VVcmwgPSByZXF1aXJlKCd1cmwnKS5wYXJzZTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIG1pbWUgPSByZXF1aXJlKCdtaW1lLXR5cGVzJyk7XG52YXIgYXN5bmNraXQgPSByZXF1aXJlKCdhc3luY2tpdCcpO1xudmFyIHBvcHVsYXRlID0gcmVxdWlyZSgnLi9wb3B1bGF0ZS5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1EYXRhO1xuXG4vLyBtYWtlIGl0IGEgU3RyZWFtXG51dGlsLmluaGVyaXRzKEZvcm1EYXRhLCBDb21iaW5lZFN0cmVhbSk7XG5cbi8qKlxuICogQ3JlYXRlIHJlYWRhYmxlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHN0cmVhbXMuXG4gKiBDYW4gYmUgdXNlZCB0byBzdWJtaXQgZm9ybXNcbiAqIGFuZCBmaWxlIHVwbG9hZHMgdG8gb3RoZXIgd2ViIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUHJvcGVydGllcyB0byBiZSBhZGRlZC9vdmVycmlkZW4gZm9yIEZvcm1EYXRhIGFuZCBDb21iaW5lZFN0cmVhbVxuICovXG5mdW5jdGlvbiBGb3JtRGF0YShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1EYXRhKG9wdGlvbnMpO1xuICB9XG5cbiAgdGhpcy5fb3ZlcmhlYWRMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZUxlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSA9IFtdO1xuXG4gIENvbWJpbmVkU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgdGhpc1tvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG59XG5cbkZvcm1EYXRhLkxJTkVfQlJFQUsgPSAnXFxyXFxuJztcbkZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBhbGxvdyBmaWxlbmFtZSBhcyBzaW5nbGUgb3B0aW9uXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7ZmlsZW5hbWU6IG9wdGlvbnN9O1xuICB9XG5cbiAgdmFyIGFwcGVuZCA9IENvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQuYmluZCh0aGlzKTtcblxuICAvLyBhbGwgdGhhdCBzdHJlYW15IGJ1c2luZXNzIGNhbid0IGhhbmRsZSBudW1iZXJzXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICB2YWx1ZSA9ICcnICsgdmFsdWU7XG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmVsaXhnZS9ub2RlLWZvcm0tZGF0YS9pc3N1ZXMvMzhcbiAgaWYgKHV0aWwuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBQbGVhc2UgY29udmVydCB5b3VyIGFycmF5IGludG8gc3RyaW5nXG4gICAgLy8gdGhlIHdheSB3ZWIgc2VydmVyIGV4cGVjdHMgaXRcbiAgICB0aGlzLl9lcnJvcihuZXcgRXJyb3IoJ0FycmF5cyBhcmUgbm90IHN1cHBvcnRlZC4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGhlYWRlciA9IHRoaXMuX211bHRpUGFydEhlYWRlcihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpO1xuICB2YXIgZm9vdGVyID0gdGhpcy5fbXVsdGlQYXJ0Rm9vdGVyKCk7XG5cbiAgYXBwZW5kKGhlYWRlcik7XG4gIGFwcGVuZCh2YWx1ZSk7XG4gIGFwcGVuZChmb290ZXIpO1xuXG4gIC8vIHBhc3MgYWxvbmcgb3B0aW9ucy5rbm93bkxlbmd0aFxuICB0aGlzLl90cmFja0xlbmd0aChoZWFkZXIsIHZhbHVlLCBvcHRpb25zKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fdHJhY2tMZW5ndGggPSBmdW5jdGlvbihoZWFkZXIsIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB2YWx1ZUxlbmd0aCA9IDA7XG5cbiAgLy8gdXNlZCB3LyBnZXRMZW5ndGhTeW5jKCksIHdoZW4gbGVuZ3RoIGlzIGtub3duLlxuICAvLyBlLmcuIGZvciBzdHJlYW1pbmcgZGlyZWN0bHkgZnJvbSBhIHJlbW90ZSBzZXJ2ZXIsXG4gIC8vIHcvIGEga25vd24gZmlsZSBhIHNpemUsIGFuZCBub3Qgd2FudGluZyB0byB3YWl0IGZvclxuICAvLyBpbmNvbWluZyBmaWxlIHRvIGZpbmlzaCB0byBnZXQgaXRzIHNpemUuXG4gIGlmIChvcHRpb25zLmtub3duTGVuZ3RoICE9IG51bGwpIHtcbiAgICB2YWx1ZUxlbmd0aCArPSArb3B0aW9ucy5rbm93bkxlbmd0aDtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpO1xuICB9XG5cbiAgdGhpcy5fdmFsdWVMZW5ndGggKz0gdmFsdWVMZW5ndGg7XG5cbiAgLy8gQGNoZWNrIHdoeSBhZGQgQ1JMRj8gZG9lcyB0aGlzIGFjY291bnQgZm9yIGN1c3RvbS9tdWx0aXBsZSBDUkxGcz9cbiAgdGhpcy5fb3ZlcmhlYWRMZW5ndGggKz1cbiAgICBCdWZmZXIuYnl0ZUxlbmd0aChoZWFkZXIpICtcbiAgICBGb3JtRGF0YS5MSU5FX0JSRUFLLmxlbmd0aDtcblxuICAvLyBlbXB0eSBvciBlaXRoZXIgZG9lc24ndCBoYXZlIHBhdGggb3Igbm90IGFuIGh0dHAgcmVzcG9uc2Ugb3Igbm90IGEgc3RyZWFtXG4gIGlmICghdmFsdWUgfHwgKCAhdmFsdWUucGF0aCAmJiAhKHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgU3RyZWFtKSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBubyBuZWVkIHRvIGJvdGhlciB3aXRoIHRoZSBsZW5ndGhcbiAgaWYgKCFvcHRpb25zLmtub3duTGVuZ3RoKSB7XG4gICAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlLnB1c2godmFsdWUpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xlbmd0aFJldHJpZXZlciA9IGZ1bmN0aW9uKHZhbHVlLCBjYWxsYmFjaykge1xuXG4gIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnZmQnKSkge1xuXG4gICAgLy8gdGFrZSByZWFkIHJhbmdlIGludG8gYSBhY2NvdW50XG4gICAgLy8gYGVuZGAgPSBJbmZpbml0eSDigJM+IHJlYWQgZmlsZSB0aWxsIHRoZSBlbmRcbiAgICAvL1xuICAgIC8vIFRPRE86IExvb2tzIGxpa2UgdGhlcmUgaXMgYnVnIGluIE5vZGUgZnMuY3JlYXRlUmVhZFN0cmVhbVxuICAgIC8vIGl0IGRvZXNuJ3QgcmVzcGVjdCBgZW5kYCBvcHRpb25zIHdpdGhvdXQgYHN0YXJ0YCBvcHRpb25zXG4gICAgLy8gRml4IGl0IHdoZW4gbm9kZSBmaXhlcyBpdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzc4MTlcbiAgICBpZiAodmFsdWUuZW5kICE9IHVuZGVmaW5lZCAmJiB2YWx1ZS5lbmQgIT0gSW5maW5pdHkgJiYgdmFsdWUuc3RhcnQgIT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgIC8vIHdoZW4gZW5kIHNwZWNpZmllZFxuICAgICAgLy8gbm8gbmVlZCB0byBjYWxjdWxhdGUgcmFuZ2VcbiAgICAgIC8vIGluY2x1c2l2ZSwgc3RhcnRzIHdpdGggMFxuICAgICAgY2FsbGJhY2sobnVsbCwgdmFsdWUuZW5kICsgMSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCkpO1xuXG4gICAgLy8gbm90IHRoYXQgZmFzdCBzbm9vcHlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc3RpbGwgbmVlZCB0byBmZXRjaCBmaWxlIHNpemUgZnJvbSBmc1xuICAgICAgZnMuc3RhdCh2YWx1ZS5wYXRoLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcblxuICAgICAgICB2YXIgZmlsZVNpemU7XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGZpbmFsIHNpemUgYmFzZWQgb24gdGhlIHJhbmdlIG9wdGlvbnNcbiAgICAgICAgZmlsZVNpemUgPSBzdGF0LnNpemUgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApO1xuICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgLy8gb3IgaHR0cCByZXNwb25zZVxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgY2FsbGJhY2sobnVsbCwgK3ZhbHVlLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pO1xuXG4gIC8vIG9yIHJlcXVlc3Qgc3RyZWFtIGh0dHA6Ly9naXRodWIuY29tL21pa2VhbC9yZXF1ZXN0XG4gIH0gZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBNb2R1bGUnKSkge1xuICAgIC8vIHdhaXQgdGlsbCByZXNwb25zZSBjb21lIGJhY2tcbiAgICB2YWx1ZS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgdmFsdWUucGF1c2UoKTtcbiAgICAgIGNhbGxiYWNrKG51bGwsICtyZXNwb25zZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcbiAgICB9KTtcbiAgICB2YWx1ZS5yZXN1bWUoKTtcblxuICAvLyBzb21ldGhpbmcgZWxzZVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKCdVbmtub3duIHN0cmVhbScpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEhlYWRlciA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBjdXN0b20gaGVhZGVyIHNwZWNpZmllZCAoYXMgc3RyaW5nKT9cbiAgLy8gaXQgYmVjb21lcyByZXNwb25zaWJsZSBmb3IgYm91bmRhcnlcbiAgLy8gKGUuZy4gdG8gaGFuZGxlIGV4dHJhIENSTEZzIG9uIC5ORVQgc2VydmVycylcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmhlYWRlciA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBvcHRpb25zLmhlYWRlcjtcbiAgfVxuXG4gIHZhciBjb250ZW50RGlzcG9zaXRpb24gPSB0aGlzLl9nZXRDb250ZW50RGlzcG9zaXRpb24odmFsdWUsIG9wdGlvbnMpO1xuICB2YXIgY29udGVudFR5cGUgPSB0aGlzLl9nZXRDb250ZW50VHlwZSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgdmFyIGNvbnRlbnRzID0gJyc7XG4gIHZhciBoZWFkZXJzICA9IHtcbiAgICAvLyBhZGQgY3VzdG9tIGRpc3Bvc2l0aW9uIGFzIHRoaXJkIGVsZW1lbnQgb3Iga2VlcCBpdCB0d28gZWxlbWVudHMgaWYgbm90XG4gICAgJ0NvbnRlbnQtRGlzcG9zaXRpb24nOiBbJ2Zvcm0tZGF0YScsICduYW1lPVwiJyArIGZpZWxkICsgJ1wiJ10uY29uY2F0KGNvbnRlbnREaXNwb3NpdGlvbiB8fCBbXSksXG4gICAgLy8gaWYgbm8gY29udGVudCB0eXBlLiBhbGxvdyBpdCB0byBiZSBlbXB0eSBhcnJheVxuICAgICdDb250ZW50LVR5cGUnOiBbXS5jb25jYXQoY29udGVudFR5cGUgfHwgW10pXG4gIH07XG5cbiAgLy8gYWxsb3cgY3VzdG9tIGhlYWRlcnMuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ29iamVjdCcpIHtcbiAgICBwb3B1bGF0ZShoZWFkZXJzLCBvcHRpb25zLmhlYWRlcik7XG4gIH1cblxuICB2YXIgaGVhZGVyO1xuICBmb3IgKHZhciBwcm9wIGluIGhlYWRlcnMpIHtcbiAgICBpZiAoIWhlYWRlcnMuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgIGhlYWRlciA9IGhlYWRlcnNbcHJvcF07XG5cbiAgICAvLyBza2lwIG51bGxpc2ggaGVhZGVycy5cbiAgICBpZiAoaGVhZGVyID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYWxsIGhlYWRlcnMgdG8gYXJyYXlzLlxuICAgIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIgPSBbaGVhZGVyXTtcbiAgICB9XG5cbiAgICAvLyBhZGQgbm9uLWVtcHR5IGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlci5sZW5ndGgpIHtcbiAgICAgIGNvbnRlbnRzICs9IHByb3AgKyAnOiAnICsgaGVhZGVyLmpvaW4oJzsgJykgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgRm9ybURhdGEuTElORV9CUkVBSyArIGNvbnRlbnRzICsgRm9ybURhdGEuTElORV9CUkVBSztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2V0Q29udGVudERpc3Bvc2l0aW9uID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICB2YXIgZmlsZW5hbWVcbiAgICAsIGNvbnRlbnREaXNwb3NpdGlvblxuICAgIDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsZXBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVwYXRoIGZvciByZWxhdGl2ZSBwYXRoc1xuICAgIGZpbGVuYW1lID0gcGF0aC5ub3JtYWxpemUob3B0aW9ucy5maWxlcGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVuYW1lIHRha2UgcHJlY2VkZW5jZVxuICAgIC8vIGZvcm1pZGFibGUgYW5kIHRoZSBicm93c2VyIGFkZCBhIG5hbWUgcHJvcGVydHlcbiAgICAvLyBmcy0gYW5kIHJlcXVlc3QtIHN0cmVhbXMgaGF2ZSBwYXRoIHByb3BlcnR5XG4gICAgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIC8vIG9yIHRyeSBodHRwIHJlc3BvbnNlXG4gICAgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKHZhbHVlLmNsaWVudC5faHR0cE1lc3NhZ2UucGF0aCB8fCAnJyk7XG4gIH1cblxuICBpZiAoZmlsZW5hbWUpIHtcbiAgICBjb250ZW50RGlzcG9zaXRpb24gPSAnZmlsZW5hbWU9XCInICsgZmlsZW5hbWUgKyAnXCInO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnREaXNwb3NpdGlvbjtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2V0Q29udGVudFR5cGUgPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuXG4gIC8vIHVzZSBjdXN0b20gY29udGVudC10eXBlIGFib3ZlIGFsbFxuICB2YXIgY29udGVudFR5cGUgPSBvcHRpb25zLmNvbnRlbnRUeXBlO1xuXG4gIC8vIG9yIHRyeSBgbmFtZWAgZnJvbSBmb3JtaWRhYmxlLCBicm93c2VyXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUubmFtZSkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAodmFsdWUubmFtZSk7XG4gIH1cblxuICAvLyBvciB0cnkgYHBhdGhgIGZyb20gZnMtLCByZXF1ZXN0LSBzdHJlYW1zXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucGF0aCkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAodmFsdWUucGF0aCk7XG4gIH1cblxuICAvLyBvciBpZiBpdCdzIGh0dHAtcmVwb25zZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgY29udGVudFR5cGUgPSB2YWx1ZS5oZWFkZXJzWydjb250ZW50LXR5cGUnXTtcbiAgfVxuXG4gIC8vIG9yIGd1ZXNzIGl0IGZyb20gdGhlIGZpbGVwYXRoIG9yIGZpbGVuYW1lXG4gIGlmICghY29udGVudFR5cGUgJiYgKG9wdGlvbnMuZmlsZXBhdGggfHwgb3B0aW9ucy5maWxlbmFtZSkpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKG9wdGlvbnMuZmlsZXBhdGggfHwgb3B0aW9ucy5maWxlbmFtZSk7XG4gIH1cblxuICAvLyBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBjb250ZW50IHR5cGUgaWYgYHZhbHVlYCBpcyBub3Qgc2ltcGxlIHZhbHVlXG4gIGlmICghY29udGVudFR5cGUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgY29udGVudFR5cGUgPSBGb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50VHlwZTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbXVsdGlQYXJ0Rm9vdGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBmdW5jdGlvbihuZXh0KSB7XG4gICAgdmFyIGZvb3RlciA9IEZvcm1EYXRhLkxJTkVfQlJFQUs7XG5cbiAgICB2YXIgbGFzdFBhcnQgPSAodGhpcy5fc3RyZWFtcy5sZW5ndGggPT09IDApO1xuICAgIGlmIChsYXN0UGFydCkge1xuICAgICAgZm9vdGVyICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpO1xuICAgIH1cblxuICAgIG5leHQoZm9vdGVyKTtcbiAgfS5iaW5kKHRoaXMpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sYXN0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICctLScgKyB0aGlzLmdldEJvdW5kYXJ5KCkgKyAnLS0nICsgRm9ybURhdGEuTElORV9CUkVBSztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRIZWFkZXJzID0gZnVuY3Rpb24odXNlckhlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcjtcbiAgdmFyIGZvcm1IZWFkZXJzID0ge1xuICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JyArIHRoaXMuZ2V0Qm91bmRhcnkoKVxuICB9O1xuXG4gIGZvciAoaGVhZGVyIGluIHVzZXJIZWFkZXJzKSB7XG4gICAgaWYgKHVzZXJIZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlcikpIHtcbiAgICAgIGZvcm1IZWFkZXJzW2hlYWRlci50b0xvd2VyQ2FzZSgpXSA9IHVzZXJIZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvcm1IZWFkZXJzO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24oYm91bmRhcnkpIHtcbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX2JvdW5kYXJ5KSB7XG4gICAgdGhpcy5fZ2VuZXJhdGVCb3VuZGFyeSgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2JvdW5kYXJ5O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZGF0YUJ1ZmZlciA9IG5ldyBCdWZmZXIuYWxsb2MoIDAgKTtcbiAgdmFyIGJvdW5kYXJ5ID0gdGhpcy5nZXRCb3VuZGFyeSgpO1xuXG4gIC8vIENyZWF0ZSB0aGUgZm9ybSBjb250ZW50LiBBZGQgTGluZSBicmVha3MgdG8gdGhlIGVuZCBvZiBkYXRhLlxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fc3RyZWFtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAvLyBBZGQgY29udGVudCB0byB0aGUgYnVmZmVyLlxuICAgICAgaWYoQnVmZmVyLmlzQnVmZmVyKHRoaXMuX3N0cmVhbXNbaV0pKSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgdGhpcy5fc3RyZWFtc1tpXV0pO1xuICAgICAgfWVsc2Uge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX3N0cmVhbXNbaV0pXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBicmVhayBhZnRlciBjb250ZW50LlxuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdHJlYW1zW2ldICE9PSAnc3RyaW5nJyB8fCB0aGlzLl9zdHJlYW1zW2ldLnN1YnN0cmluZyggMiwgYm91bmRhcnkubGVuZ3RoICsgMiApICE9PSBib3VuZGFyeSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKEZvcm1EYXRhLkxJTkVfQlJFQUspXSApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB0aGUgZm9vdGVyIGFuZCByZXR1cm4gdGhlIEJ1ZmZlciBvYmplY3QuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20odGhpcy5fbGFzdEJvdW5kYXJ5KCkpXSApO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZW5lcmF0ZUJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIC8vIFRoaXMgZ2VuZXJhdGVzIGEgNTAgY2hhcmFjdGVyIGJvdW5kYXJ5IHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieSBGaXJlZm94LlxuICAvLyBUaGV5IGFyZSBvcHRpbWl6ZWQgZm9yIGJveWVyLW1vb3JlIHBhcnNpbmcuXG4gIHZhciBib3VuZGFyeSA9ICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgIGJvdW5kYXJ5ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKS50b1N0cmluZygxNik7XG4gIH1cblxuICB0aGlzLl9ib3VuZGFyeSA9IGJvdW5kYXJ5O1xufTtcblxuLy8gTm90ZTogZ2V0TGVuZ3RoU3luYyBET0VTTidUIGNhbGN1bGF0ZSBzdHJlYW1zIGxlbmd0aFxuLy8gQXMgd29ya2Fyb3VuZCBvbmUgY2FuIGNhbGN1bGF0ZSBmaWxlIHNpemUgbWFudWFsbHlcbi8vIGFuZCBhZGQgaXQgYXMga25vd25MZW5ndGggb3B0aW9uXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0TGVuZ3RoU3luYyA9IGZ1bmN0aW9uKCkge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIC8vIERvbid0IGdldCBjb25mdXNlZCwgdGhlcmUgYXJlIDMgXCJpbnRlcm5hbFwiIHN0cmVhbXMgZm9yIGVhY2gga2V5dmFsIHBhaXJcbiAgLy8gc28gaXQgYmFzaWNhbGx5IGNoZWNrcyBpZiB0aGVyZSBpcyBhbnkgdmFsdWUgYWRkZWQgdG8gdGhlIGZvcm1cbiAgaWYgKHRoaXMuX3N0cmVhbXMubGVuZ3RoKSB7XG4gICAga25vd25MZW5ndGggKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCkubGVuZ3RoO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzQwXG4gIGlmICghdGhpcy5oYXNLbm93bkxlbmd0aCgpKSB7XG4gICAgLy8gU29tZSBhc3luYyBsZW5ndGggcmV0cmlldmVycyBhcmUgcHJlc2VudFxuICAgIC8vIHRoZXJlZm9yZSBzeW5jaHJvbm91cyBsZW5ndGggY2FsY3VsYXRpb24gaXMgZmFsc2UuXG4gICAgLy8gUGxlYXNlIHVzZSBnZXRMZW5ndGgoY2FsbGJhY2spIHRvIGdldCBwcm9wZXIgbGVuZ3RoXG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHByb3BlciBsZW5ndGggaW4gc3luY2hyb25vdXMgd2F5LicpKTtcbiAgfVxuXG4gIHJldHVybiBrbm93bkxlbmd0aDtcbn07XG5cbi8vIFB1YmxpYyBBUEkgdG8gY2hlY2sgaWYgbGVuZ3RoIG9mIGFkZGVkIHZhbHVlcyBpcyBrbm93blxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzE5NlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzI2MlxuRm9ybURhdGEucHJvdG90eXBlLmhhc0tub3duTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIHZhciBoYXNLbm93bkxlbmd0aCA9IHRydWU7XG5cbiAgaWYgKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5sZW5ndGgpIHtcbiAgICBoYXNLbm93bkxlbmd0aCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGhhc0tub3duTGVuZ3RoO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aCA9IGZ1bmN0aW9uKGNiKSB7XG4gIHZhciBrbm93bkxlbmd0aCA9IHRoaXMuX292ZXJoZWFkTGVuZ3RoICsgdGhpcy5fdmFsdWVMZW5ndGg7XG5cbiAgaWYgKHRoaXMuX3N0cmVhbXMubGVuZ3RoKSB7XG4gICAga25vd25MZW5ndGggKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCkubGVuZ3RoO1xuICB9XG5cbiAgaWYgKCF0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYi5iaW5kKHRoaXMsIG51bGwsIGtub3duTGVuZ3RoKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXN5bmNraXQucGFyYWxsZWwodGhpcy5fdmFsdWVzVG9NZWFzdXJlLCB0aGlzLl9sZW5ndGhSZXRyaWV2ZXIsIGZ1bmN0aW9uKGVyciwgdmFsdWVzKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2IoZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbihsZW5ndGgpIHtcbiAgICAgIGtub3duTGVuZ3RoICs9IGxlbmd0aDtcbiAgICB9KTtcblxuICAgIGNiKG51bGwsIGtub3duTGVuZ3RoKTtcbiAgfSk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuc3VibWl0ID0gZnVuY3Rpb24ocGFyYW1zLCBjYikge1xuICB2YXIgcmVxdWVzdFxuICAgICwgb3B0aW9uc1xuICAgICwgZGVmYXVsdHMgPSB7bWV0aG9kOiAncG9zdCd9XG4gICAgO1xuXG4gIC8vIHBhcnNlIHByb3ZpZGVkIHVybCBpZiBpdCdzIHN0cmluZ1xuICAvLyBvciB0cmVhdCBpdCBhcyBvcHRpb25zIG9iamVjdFxuICBpZiAodHlwZW9mIHBhcmFtcyA9PSAnc3RyaW5nJykge1xuXG4gICAgcGFyYW1zID0gcGFyc2VVcmwocGFyYW1zKTtcbiAgICBvcHRpb25zID0gcG9wdWxhdGUoe1xuICAgICAgcG9ydDogcGFyYW1zLnBvcnQsXG4gICAgICBwYXRoOiBwYXJhbXMucGF0aG5hbWUsXG4gICAgICBob3N0OiBwYXJhbXMuaG9zdG5hbWUsXG4gICAgICBwcm90b2NvbDogcGFyYW1zLnByb3RvY29sXG4gICAgfSwgZGVmYXVsdHMpO1xuXG4gIC8vIHVzZSBjdXN0b20gcGFyYW1zXG4gIH0gZWxzZSB7XG5cbiAgICBvcHRpb25zID0gcG9wdWxhdGUocGFyYW1zLCBkZWZhdWx0cyk7XG4gICAgLy8gaWYgbm8gcG9ydCBwcm92aWRlZCB1c2UgZGVmYXVsdCBvbmVcbiAgICBpZiAoIW9wdGlvbnMucG9ydCkge1xuICAgICAgb3B0aW9ucy5wb3J0ID0gb3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6JyA/IDQ0MyA6IDgwO1xuICAgIH1cbiAgfVxuXG4gIC8vIHB1dCB0aGF0IGdvb2QgY29kZSBpbiBnZXRIZWFkZXJzIHRvIHNvbWUgdXNlXG4gIG9wdGlvbnMuaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycyhwYXJhbXMuaGVhZGVycyk7XG5cbiAgLy8gaHR0cHMgaWYgc3BlY2lmaWVkLCBmYWxsYmFjayB0byBodHRwIGluIGFueSBvdGhlciBjYXNlXG4gIGlmIChvcHRpb25zLnByb3RvY29sID09ICdodHRwczonKSB7XG4gICAgcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmVxdWVzdCA9IGh0dHAucmVxdWVzdChvcHRpb25zKTtcbiAgfVxuXG4gIC8vIGdldCBjb250ZW50IGxlbmd0aCBhbmQgZmlyZSBhd2F5XG4gIHRoaXMuZ2V0TGVuZ3RoKGZ1bmN0aW9uKGVyciwgbGVuZ3RoKSB7XG4gICAgaWYgKGVyciAmJiBlcnIgIT09ICdVbmtub3duIHN0cmVhbScpIHtcbiAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWRkIGNvbnRlbnQgbGVuZ3RoXG4gICAgaWYgKGxlbmd0aCkge1xuICAgICAgcmVxdWVzdC5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICB0aGlzLnBpcGUocmVxdWVzdCk7XG4gICAgaWYgKGNiKSB7XG4gICAgICB2YXIgb25SZXNwb25zZTtcblxuICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKGVycm9yLCByZXNwb25jZSkge1xuICAgICAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcigncmVzcG9uc2UnLCBvblJlc3BvbnNlKTtcblxuICAgICAgICByZXR1cm4gY2IuY2FsbCh0aGlzLCBlcnJvciwgcmVzcG9uY2UpO1xuICAgICAgfTtcblxuICAgICAgb25SZXNwb25zZSA9IGNhbGxiYWNrLmJpbmQodGhpcywgbnVsbCk7XG5cbiAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgY2FsbGJhY2spO1xuICAgICAgcmVxdWVzdC5vbigncmVzcG9uc2UnLCBvblJlc3BvbnNlKTtcbiAgICB9XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmICghdGhpcy5lcnJvcikge1xuICAgIHRoaXMuZXJyb3IgPSBlcnI7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnW29iamVjdCBGb3JtRGF0YV0nO1xufTtcbiIsIi8vIHBvcHVsYXRlcyBtaXNzaW5nIHZhbHVlc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkc3QsIHNyYykge1xuXG4gIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbihwcm9wKVxuICB7XG4gICAgZHN0W3Byb3BdID0gZHN0W3Byb3BdIHx8IHNyY1twcm9wXTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRzdDtcbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQgT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvT3B0aW9ucyc7XG5pbXBvcnQgeyBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9SZXF1ZXN0T3B0aW9ucyc7XG5cbmltcG9ydCBEb21haW5DbGllbnQgZnJvbSAnLi9kb21haW5zJztcbmltcG9ydCBFdmVudENsaWVudCBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgU3RhdHNDbGllbnQgZnJvbSAnLi9zdGF0cyc7XG5pbXBvcnQgU3VwcHJlc3Npb25DbGllbnQgZnJvbSAnLi9zdXBwcmVzc2lvbnMnO1xuaW1wb3J0IFdlYmhvb2tDbGllbnQgZnJvbSAnLi93ZWJob29rcyc7XG5pbXBvcnQgTWVzc2FnZXNDbGllbnQgZnJvbSAnLi9tZXNzYWdlcyc7XG5pbXBvcnQgUm91dGVzQ2xpZW50IGZyb20gJy4vcm91dGVzJztcbmltcG9ydCBWYWxpZGF0ZUNsaWVudCBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCBJcHNDbGllbnQgZnJvbSAnLi9pcHMnO1xuaW1wb3J0IElwUG9vbHNDbGllbnQgZnJvbSAnLi9pcC1wb29scyc7XG5pbXBvcnQgTGlzdHNDbGllbnQgZnJvbSAnLi9saXN0cyc7XG5pbXBvcnQgTWFpbExpc3RzTWVtYmVycyBmcm9tICcuL21haWxMaXN0TWVtYmVycyc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lGb3JtRGF0YSc7XG5pbXBvcnQgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgZnJvbSAnLi9kb21haW5zQ3JlZGVudGlhbHMnO1xuaW1wb3J0IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCBmcm9tICcuL211bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgRG9tYWluVGVtcGxhdGVzQ2xpZW50IGZyb20gJy4vZG9tYWluc1RlbXBsYXRlcyc7XG5pbXBvcnQgRG9tYWluVGFnc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUYWdzJztcbmltcG9ydCB7IElNYWlsZ3VuQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lNYWlsZ3VuQ2xpZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50IGltcGxlbWVudHMgSU1haWxndW5DbGllbnQge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgcHVibGljIGRvbWFpbnM7XG4gIHB1YmxpYyB3ZWJob29rcztcbiAgcHVibGljIGV2ZW50cztcbiAgcHVibGljIHN0YXRzO1xuICBwdWJsaWMgc3VwcHJlc3Npb25zO1xuICBwdWJsaWMgbWVzc2FnZXM7XG4gIHB1YmxpYyByb3V0ZXM7XG4gIHB1YmxpYyB2YWxpZGF0ZTtcbiAgcHVibGljIGlwcztcbiAgcHVibGljIGlwX3Bvb2xzO1xuICBwdWJsaWMgbGlzdHM7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICBjb25zdCBjb25maWc6IFJlcXVlc3RPcHRpb25zID0geyAuLi5vcHRpb25zIH0gYXMgUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBpZiAoIWNvbmZpZy51cmwpIHtcbiAgICAgIGNvbmZpZy51cmwgPSAnaHR0cHM6Ly9hcGkubWFpbGd1bi5uZXQnO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLnVzZXJuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcInVzZXJuYW1lXCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIFwia2V5XCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5yZXF1ZXN0ID0gbmV3IFJlcXVlc3QoY29uZmlnLCBmb3JtRGF0YSk7XG4gICAgY29uc3QgbWFpbExpc3RzTWVtYmVycyA9IG5ldyBNYWlsTGlzdHNNZW1iZXJzKHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQgPSBuZXcgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5UZW1wbGF0ZXNDbGllbnQgPSBuZXcgRG9tYWluVGVtcGxhdGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGFnc0NsaWVudCA9IG5ldyBEb21haW5UYWdzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50ID0gbmV3IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuXG4gICAgdGhpcy5kb21haW5zID0gbmV3IERvbWFpbkNsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdCxcbiAgICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgICAgZG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgICAgZG9tYWluVGFnc0NsaWVudFxuICAgICk7XG4gICAgdGhpcy53ZWJob29rcyA9IG5ldyBXZWJob29rQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN0YXRzID0gbmV3IFN0YXRzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdXBwcmVzc2lvbnMgPSBuZXcgU3VwcHJlc3Npb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5yb3V0ZXMgPSBuZXcgUm91dGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcHMgPSBuZXcgSXBzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcF9wb29scyA9IG5ldyBJcFBvb2xzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5saXN0cyA9IG5ldyBMaXN0c0NsaWVudCh0aGlzLnJlcXVlc3QsIG1haWxMaXN0c01lbWJlcnMpO1xuICAgIHRoaXMudmFsaWRhdGUgPSBuZXcgVmFsaWRhdGVDbGllbnQodGhpcy5yZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7XG4gIERvbWFpblJlc3BvbnNlRGF0YSxcbiAgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UsXG4gIERvbWFpbnNRdWVyeSxcbiAgRG9tYWluSW5mbyxcbiAgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSxcbiAgRG9tYWluU2hvcnREYXRhLFxuICBETlNSZWNvcmQsXG4gIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlLFxuICBDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMsXG4gIERLSU1BdXRob3JpdHlJbmZvLFxuICBVcGRhdGVkREtJTUF1dGhvcml0eSxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSxcbiAgREtJTVNlbGVjdG9ySW5mbyxcbiAgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlLFxuICBXZWJQcmVmaXhJbmZvLFxuICBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UsXG4gIFJlcGxhY2VtZW50Rm9yUG9vbCxcbiAgTWVzc2FnZVJlc3BvbnNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIERvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIERvbWFpblRyYWNraW5nRGF0YSxcbiAgT3BlblRyYWNraW5nSW5mbyxcbiAgQ2xpY2tUcmFja2luZ0luZm8sXG4gIFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvLFxuICBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlLFxuICBVcGRhdGVkT3BlblRyYWNraW5nXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UcmFja2luZyc7XG5pbXBvcnQgeyBJRG9tYWluQ3JlZGVudGlhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgSURvbWFpblRlbXBsYXRlc0NsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCB7IElEb21haW5UYWdzQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRhZ3MnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9kb21haW5zVGFncyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlcXVpcmVfdGxzOiBib29sZWFuO1xuICBza2lwX3ZlcmlmaWNhdGlvbjogYm9vbGVhbjtcbiAgc3RhdGU6IHN0cmluZztcbiAgd2lsZGNhcmQ6IGJvb2xlYW47XG4gIHNwYW1fYWN0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgc210cF9wYXNzd29yZDogc3RyaW5nO1xuICBzbXRwX2xvZ2luOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcmVjZWl2aW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIHNlbmRpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBEb21haW5TaG9ydERhdGEsIHJlY2VpdmluZz86IEROU1JlY29yZFtdIHwgbnVsbCwgc2VuZGluZz86IEROU1JlY29yZFtdIHwgbnVsbCkge1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLnJlcXVpcmVfdGxzID0gZGF0YS5yZXF1aXJlX3RscztcbiAgICB0aGlzLnNraXBfdmVyaWZpY2F0aW9uID0gZGF0YS5za2lwX3ZlcmlmaWNhdGlvbjtcbiAgICB0aGlzLnN0YXRlID0gZGF0YS5zdGF0ZTtcbiAgICB0aGlzLndpbGRjYXJkID0gZGF0YS53aWxkY2FyZDtcbiAgICB0aGlzLnNwYW1fYWN0aW9uID0gZGF0YS5zcGFtX2FjdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBkYXRhLmNyZWF0ZWRfYXQ7XG4gICAgdGhpcy5zbXRwX3Bhc3N3b3JkID0gZGF0YS5zbXRwX3Bhc3N3b3JkO1xuICAgIHRoaXMuc210cF9sb2dpbiA9IGRhdGEuc210cF9sb2dpbjtcbiAgICB0aGlzLnR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICB0aGlzLnJlY2VpdmluZ19kbnNfcmVjb3JkcyA9IHJlY2VpdmluZyB8fCBudWxsO1xuICAgIHRoaXMuc2VuZGluZ19kbnNfcmVjb3JkcyA9IHNlbmRpbmcgfHwgbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgZG9tYWluQ3JlZGVudGlhbHM6IElEb21haW5DcmVkZW50aWFscztcbiAgcHVibGljIGRvbWFpblRlbXBsYXRlczogSURvbWFpblRlbXBsYXRlc0NsaWVudDtcbiAgcHVibGljIGRvbWFpblRhZ3M6IElEb21haW5UYWdzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ6IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgIGRvbWFpblRlbXBsYXRlc0NsaWVudDogRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgIGRvbWFpblRhZ3NDbGllbnQ6IERvbWFpblRhZ3NDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmRvbWFpbkNyZWRlbnRpYWxzID0gZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UZW1wbGF0ZXMgPSBkb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UYWdzID0gZG9tYWluVGFnc0NsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZShyZXNwb25zZTogRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpIDogTWVzc2FnZVJlc3BvbnNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluTGlzdChyZXNwb25zZTogRG9tYWluTGlzdFJlc3BvbnNlRGF0YSk6IERvbWFpbltdIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBuZXcgRG9tYWluKGl0ZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW4ocmVzcG9uc2U6IERvbWFpblJlc3BvbnNlRGF0YSk6IERvbWFpbiB7XG4gICAgcmV0dXJuIG5ldyBEb21haW4oXG4gICAgICByZXNwb25zZS5ib2R5LmRvbWFpbixcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVjZWl2aW5nX2Ruc19yZWNvcmRzLFxuICAgICAgcmVzcG9uc2UuYm9keS5zZW5kaW5nX2Ruc19yZWNvcmRzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyhyZXNwb25zZTogRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOiBEb21haW5UcmFja2luZ0RhdGEge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LnRyYWNraW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1VwZGF0ZShyZXNwb25zZTogVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOlVwZGF0ZWRPcGVuVHJhY2tpbmcge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgbGlzdChxdWVyeT86IERvbWFpbnNRdWVyeSk6IFByb21pc2U8RG9tYWluW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2RvbWFpbnMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5MaXN0KHJlcyBhcyBEb21haW5MaXN0UmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2RvbWFpbnMvJHtkb21haW59YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IERvbWFpbkluZm8pIDogUHJvbWlzZTxEb21haW4+IHtcbiAgICBjb25zdCBwb3N0T2JqID0geyAuLi5kYXRhIH07XG4gICAgaWYgKCdmb3JjZV9ka2ltX2F1dGhvcml0eScgaW4gcG9zdE9iaiAmJiB0eXBlb2YgcG9zdE9iai5mb3JjZV9ka2ltX2F1dGhvcml0eSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwb3N0T2JqLmZvcmNlX2RraW1fYXV0aG9yaXR5ID0gcG9zdE9iai50b1N0cmluZygpID09PSAndHJ1ZScgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL2RvbWFpbnMnLCBwb3N0T2JqKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICB2ZXJpZnkoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vdmVyaWZ5YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZShyZXMgYXMgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXM6Q29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpID0+IHJlcy5ib2R5LmNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcsIGRhdGE6IENvbm5lY3Rpb25TZXR0aW5ncyk6IFByb21pc2U8VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmAsIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKVxuICAgICAgLnRoZW4oKHJlczpVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIC8vIFRyYWNraW5nXG5cbiAgZ2V0VHJhY2tpbmcoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW5UcmFja2luZ0RhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJykpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVRyYWNraW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlVHJhY2tpbmcoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IE9wZW5UcmFja2luZ0luZm8gfCBDbGlja1RyYWNraW5nSW5mbyB8IFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvXG4gICk6IFByb21pc2U8VXBkYXRlZE9wZW5UcmFja2luZz4ge1xuICAgIGlmICh0eXBlb2YgZGF0YT8uYWN0aXZlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7IHN0YXR1czogNDAwLCBzdGF0dXNUZXh0OiAnUmVjZWl2ZWQgYm9vbGVhbiB2YWx1ZSBmb3IgYWN0aXZlIHByb3BlcnR5JywgYm9keTogeyBtZXNzYWdlOiAnUHJvcGVydHkgXCJhY3RpdmVcIiBtdXN0IGNvbnRhaW4gc3RyaW5nIHZhbHVlLicgfSB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAndHJhY2tpbmcnLCB0eXBlKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUcmFja2luZ1VwZGF0ZShyZXMgYXMgVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkpO1xuICB9XG5cbiAgLy8gSVBzXG5cbiAgZ2V0SXBzKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJykpXG4gICAgICAudGhlbigocmVzcG9uc2U6IEFQSVJlc3BvbnNlKSA9PiByZXNwb25zZT8uYm9keT8uaXRlbXMpO1xuICB9XG5cbiAgYXNzaWduSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJyksIHsgaXAgfSk7XG4gIH1cblxuICBkZWxldGVJcChkb21haW46IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycsIGlwKSk7XG4gIH1cblxuICBsaW5rSXBQb29sKGRvbWFpbjogc3RyaW5nLCBwb29sX2lkOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJyksIHsgcG9vbF9pZCB9KTtcbiAgfVxuXG4gIHVubGlua0lwUG9sbChkb21haW46IHN0cmluZywgcmVwbGFjZW1lbnQ6IFJlcGxhY2VtZW50Rm9yUG9vbCk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gJyc7XG4gICAgaWYgKHJlcGxhY2VtZW50LnBvb2xfaWQgJiYgcmVwbGFjZW1lbnQuaXApIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcihcbiAgICAgICAge1xuICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIHN0YXR1c1RleHQ6ICdUb28gbXVjaCBkYXRhIGZvciByZXBsYWNlbWVudCcsXG4gICAgICAgICAgYm9keTogeyBtZXNzYWdlOiAnUGxlYXNlIHNwZWNpZnkgZWl0aGVyIHBvb2xfaWQgb3IgaXAgKG5vdCBib3RoKScgfVxuICAgICAgICB9IGFzIEFQSUVycm9yT3B0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50LnBvb2xfaWQpIHtcbiAgICAgIHNlYXJjaFBhcmFtcyA9IGA/cG9vbF9pZD0ke3JlcGxhY2VtZW50LnBvb2xfaWR9YDtcbiAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP2lwPSR7cmVwbGFjZW1lbnQuaXB9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnLCAnaXBfcG9vbCcsIHNlYXJjaFBhcmFtcykpO1xuICB9XG5cbiAgdXBkYXRlREtJTUF1dGhvcml0eShkb21haW46IHN0cmluZywgZGF0YTogREtJTUF1dGhvcml0eUluZm8pOiBQcm9taXNlPFVwZGF0ZWRES0lNQXV0aG9yaXR5PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX2F1dGhvcml0eWAsIHt9LCB7IHF1ZXJ5OiBgc2VsZj0ke2RhdGEuc2VsZn1gIH0pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlcyA6IFVwZGF0ZWRES0lNQXV0aG9yaXR5UmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIFVwZGF0ZWRES0lNQXV0aG9yaXR5KTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1TZWxlY3Rvcihkb21haW46IHN0cmluZywgZGF0YTogREtJTVNlbGVjdG9ySW5mbyk6IFByb21pc2U8VXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX3NlbGVjdG9yYCwge30sIHsgcXVlcnk6IGBka2ltX3NlbGVjdG9yPSR7ZGF0YS5ka2ltU2VsZWN0b3J9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlKTtcbiAgfVxuXG4gIHVwZGF0ZVdlYlByZWZpeChkb21haW46IHN0cmluZywgZGF0YTogV2ViUHJlZml4SW5mbyk6IFByb21pc2U8VXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS93ZWJfcHJlZml4YCwge30sIHsgcXVlcnk6IGB3ZWJfcHJlZml4PSR7ZGF0YS53ZWJQcmVmaXh9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2UsXG4gIERlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEb21haW5DcmVkZW50aWFscyxcbiAgRG9tYWluQ3JlZGVudGlhbHNMaXN0LFxuICBEb21haW5DcmVkZW50aWFsc1F1ZXJ5LFxuICBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQsXG4gIElEb21haW5DcmVkZW50aWFscyxcbiAgVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5DcmVkZW50aWFscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGltcGxlbWVudHMgSURvbWFpbkNyZWRlbnRpYWxzIHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzL2RvbWFpbnMvJztcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0KFxuICAgIHJlc3BvbnNlOiBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YVxuICApOiBEb21haW5DcmVkZW50aWFsc0xpc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcmVzcG9uc2UuYm9keS5pdGVtcyxcbiAgICAgIHRvdGFsQ291bnQ6IHJlc3BvbnNlLmJvZHkudG90YWxfY291bnRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VNZXNzYWdlUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6IENyZWF0ZWRVcGRhdGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZVxuICApOiBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2VcbiAgICB9IGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURlbGV0ZWRSZXNwb25zZShcbiAgICByZXNwb25zZTpEZWxldGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZVxuICApOiBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICBzcGVjOiByZXNwb25zZS5ib2R5LnNwZWNcbiAgICB9IGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluQ3JlZGVudGlhbHNRdWVyeSk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL2NyZWRlbnRpYWxzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChyZXMgYXMgRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGEpXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpbkNyZWRlbnRpYWxzXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzYCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2VSZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmcsXG4gICAgZGF0YTogVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHMvJHtjcmVkZW50aWFsc0xvZ2lufWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzTG9naW46IHN0cmluZ1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRGVsZXRlZFJlc3BvbnNlKHJlcykpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgQVBJUmVzcG9uc2UgZnJvbSAnLi9pbnRlcmZhY2VzL0FwaVJlc3BvbnNlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIERvbWFpblRhZ0FQSVJlc3BvbnNlU3RhdHNJdGVtLFxuICBEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnQ291bnRyaWVzQVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnRGV2aWNlc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnUHJvdmlkZXJzQVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ3NJdGVtLFxuICBEb21haW5UYWdzSXRlbUluZm8sXG4gIERvbWFpblRhZ3NMaXN0LFxuICBEb21haW5UYWdzTWVzc2FnZVJlcyxcbiAgRG9tYWluVGFnc1F1ZXJ5LFxuICBEb21haW5UYWdzUmVzcG9uc2VEYXRhLFxuICBEb21haW5UYWdzU3RhdGlzdGljUXVlcnksXG4gIERvbWFpblRhZ1N0YXRBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnU3RhdGlzdGljSXRlbSxcbiAgRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0LFxuICBJRG9tYWluVGFnc0NsaWVudCxcbiAgUGFnZXNMaXN0LFxuICBQYWdlc0xpc3RBY2N1bXVsYXRvcixcbiAgUGFyc2VkUGFnZXNMaXN0LFxuICBSZXNvbHV0aW9uXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UYWdzJztcblxuZXhwb3J0IGNsYXNzIERvbWFpblRhZyBpbXBsZW1lbnRzIERvbWFpblRhZ3NJdGVtIHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICdmaXJzdC1zZWVuJzogRGF0ZTtcbiAgJ2xhc3Qtc2Vlbic6IERhdGU7XG5cbiAgY29uc3RydWN0b3IodGFnSW5mbzogRG9tYWluVGFnc0l0ZW1JbmZvKSB7XG4gICAgdGhpcy50YWcgPSB0YWdJbmZvLnRhZztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGFnSW5mby5kZXNjcmlwdGlvbjtcbiAgICB0aGlzWydmaXJzdC1zZWVuJ10gPSBuZXcgRGF0ZSh0YWdJbmZvWydmaXJzdC1zZWVuJ10pO1xuICAgIHRoaXNbJ2xhc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snbGFzdC1zZWVuJ10pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWdTdGF0aXN0aWMgaW1wbGVtZW50cyBEb21haW5UYWdTdGF0aXN0aWNSZXN1bHQge1xuICB0YWc6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgcmVzb2x1dGlvbjogUmVzb2x1dGlvbjtcbiAgc3RhdHM6IERvbWFpblRhZ1N0YXRpc3RpY0l0ZW1bXTtcblxuICBjb25zdHJ1Y3Rvcih0YWdTdGF0aXN0aWNJbmZvOiBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2UpIHtcbiAgICB0aGlzLnRhZyA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS50YWc7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnN0YXJ0ID0gbmV3IERhdGUodGFnU3RhdGlzdGljSW5mby5ib2R5LnN0YXJ0KTtcbiAgICB0aGlzLmVuZCA9IG5ldyBEYXRlKHRhZ1N0YXRpc3RpY0luZm8uYm9keS5lbmQpO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS5yZXNvbHV0aW9uO1xuICAgIHRoaXMuc3RhdHMgPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkuc3RhdHMubWFwKGZ1bmN0aW9uIChzdGF0OiBEb21haW5UYWdBUElSZXNwb25zZVN0YXRzSXRlbSkge1xuICAgICAgY29uc3QgcmVzID0geyAuLi5zdGF0LCB0aW1lOiBuZXcgRGF0ZShzdGF0LnRpbWUpIH07XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpblRhZ3NDbGllbnQgaW1wbGVtZW50cyBJRG9tYWluVGFnc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VQYWdlTGlua3MocmVzcG9uc2U6IERvbWFpblRhZ3NSZXNwb25zZURhdGEpOiBQYXJzZWRQYWdlc0xpc3Qge1xuICAgIGNvbnN0IHBhZ2VzID0gT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuYm9keS5wYWdpbmcgYXMgUGFnZXNMaXN0KTtcbiAgICByZXR1cm4gcGFnZXMucmVkdWNlKFxuICAgICAgKGFjYzogUGFnZXNMaXN0QWNjdW11bGF0b3IsIGVudHJpZTogW3VybDogc3RyaW5nLCBpZDogc3RyaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGVudHJpZVswXTtcbiAgICAgICAgY29uc3QgdXJsID0gZW50cmllWzFdO1xuICAgICAgICBhY2NbaWRdID0ge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIHVybFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApIGFzIHVua25vd24gYXMgUGFyc2VkUGFnZXNMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW5UYWdzTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluVGFnc1Jlc3BvbnNlRGF0YVxuICApOiBEb21haW5UYWdzTGlzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcCgodGFnSW5mbykgPT4gbmV3IERvbWFpblRhZyh0YWdJbmZvKSksXG4gICAgICBwYWdlczogdGhpcy5fcGFyc2VQYWdlTGlua3MocmVzcG9uc2UpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVGFnU3RhdGlzdGljKFxuICAgIHJlc3BvbnNlOiBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2VcbiAgKTogRG9tYWluVGFnU3RhdGlzdGljIHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRhZ1N0YXRpc3RpYyhyZXNwb25zZSk7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpblRhZ3NRdWVyeSk6IFByb21pc2U8RG9tYWluVGFnc0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5UYWdzTGlzdChyZXMgYXMgRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSlcbiAgICAgICk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdzSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRhZyhyZXMuYm9keSlcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdzTWVzc2FnZVJlcz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnKSwgZGVzY3JpcHRpb24pXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ3NNZXNzYWdlUmVzXG4gICAgICApO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZ1xuICApOiBQcm9taXNlPERvbWFpblRhZ3NNZXNzYWdlUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L3RhZ3MvJHt0YWd9YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiAoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiByZXMuYm9keS5tZXNzYWdlLFxuICAgICAgICAgIHN0YXR1czogcmVzLnN0YXR1c1xuICAgICAgICB9IGFzIERvbWFpblRhZ3NNZXNzYWdlUmVzKSk7XG4gIH1cblxuICBzdGF0aXN0aWMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBxdWVyeTogRG9tYWluVGFnc1N0YXRpc3RpY1F1ZXJ5KVxuICAgIDogUHJvbWlzZTxEb21haW5UYWdTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZVRhZ1N0YXRpc3RpYyhyZXMpXG4gICAgICApO1xuICB9XG5cbiAgY291bnRyaWVzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvY291bnRyaWVzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnQ291bnRyaWVzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG5cbiAgcHJvdmlkZXJzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvcHJvdmlkZXJzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnUHJvdmlkZXJzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG5cbiAgZGV2aWNlcyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9kZXZpY2VzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnRGV2aWNlc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UsXG4gIENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCxcbiAgRG9tYWluVGVtcGxhdGUsIERvbWFpblRlbXBsYXRlRGF0YSxcbiAgRG9tYWluVGVtcGxhdGVzUXVlcnksXG4gIERvbWFpblRlbXBsYXRlVXBkYXRlRGF0YSxcbiAgRG9tYWluVGVtcGxhdGVVcGRhdGVWZXJzaW9uRGF0YSxcbiAgRG9tYWluVGVtcGxhdGVWZXJzaW9uRGF0YSxcbiAgR2V0RG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgSURvbWFpblRlbXBsYXRlc0NsaWVudCxcbiAgTGlzdERvbWFpblRlbXBsYXRlc0FQSVJlc3BvbnNlLFxuICBMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0LFxuICBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlLFxuICBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdCxcbiAgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UsXG4gIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCxcbiAgTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UsXG4gIE5vdGlmaWNhdGlvblJlc3VsdCxcbiAgU2hvcnRUZW1wbGF0ZVZlcnNpb24sXG4gIFRlbXBsYXRlUXVlcnksXG4gIFRlbXBsYXRlVmVyc2lvbixcbiAgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UZW1wbGF0ZXMnO1xuXG5leHBvcnQgY2xhc3MgRG9tYWluVGVtcGxhdGVJdGVtIGltcGxlbWVudHMgRG9tYWluVGVtcGxhdGUge1xuICBuYW1lIDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbiA6IHN0cmluZztcbiAgY3JlYXRlZEF0IDogRGF0ZSB8ICcnO1xuICBjcmVhdGVkQnkgOiBzdHJpbmc7XG4gIGlkIDogc3RyaW5nO1xuICB2ZXJzaW9uPzogVGVtcGxhdGVWZXJzaW9uO1xuICB2ZXJzaW9ucz86IFNob3J0VGVtcGxhdGVWZXJzaW9uW107XG5cbiAgY29uc3RydWN0b3IoZG9tYWluVGVtcGxhdGVGcm9tQVBJOiBEb21haW5UZW1wbGF0ZSkge1xuICAgIHRoaXMubmFtZSA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5uYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuZGVzY3JpcHRpb247XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEF0ID8gbmV3IERhdGUoZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRBdCkgOiAnJztcbiAgICB0aGlzLmNyZWF0ZWRCeSA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQnk7XG4gICAgdGhpcy5pZCA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5pZDtcblxuICAgIGlmIChkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbikge1xuICAgICAgdGhpcy52ZXJzaW9uID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb247XG4gICAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24uY3JlYXRlZEF0KSB7XG4gICAgICAgIHRoaXMudmVyc2lvbi5jcmVhdGVkQXQgPSBuZXcgRGF0ZShkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbi5jcmVhdGVkQXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMgJiYgZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy52ZXJzaW9ucyA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucy5tYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0geyAuLi52ZXJzaW9uIH07XG4gICAgICAgIHJlc3VsdC5jcmVhdGVkQXQgPSBuZXcgRGF0ZSh2ZXJzaW9uLmNyZWF0ZWRBdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluVGVtcGxhdGVzQ2xpZW50IGltcGxlbWVudHMgSURvbWFpblRlbXBsYXRlc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uUmVzcG9uc2UoZGF0YTogQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSk6IERvbWFpblRlbXBsYXRlSXRlbSB7XG4gICAgcmV0dXJuIG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZShcbiAgICBkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZVxuICApOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0ID0ge30gYXMgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGUgPSBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGRhdGEuYm9keS50ZW1wbGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRpb25SZXNwb25zZShcbiAgICBkYXRhOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2VcbiAgKTogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0ID0ge30gYXMgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5ICYmIGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlTmFtZSA9IGRhdGEuYm9keS50ZW1wbGF0ZS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlKGRhdGE6IE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlKTogTm90aWZpY2F0aW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE5vdGlmaWNhdGlvblJlc3VsdCA9IHt9IGFzIE5vdGlmaWNhdGlvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlTmFtZSA9IGRhdGEuYm9keS50ZW1wbGF0ZS5uYW1lO1xuICAgICAgcmVzdWx0LnRlbXBsYXRlVmVyc2lvbiA9IHsgdGFnOiBkYXRhLmJvZHkudGVtcGxhdGUudmVyc2lvbi50YWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaXN0KHJlc3BvbnNlOiBMaXN0RG9tYWluVGVtcGxhdGVzQVBJUmVzcG9uc2UpOiBMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcCgoZDogRG9tYWluVGVtcGxhdGUpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZCkpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHJlc3BvbnNlLmJvZHkucGFnaW5nO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMoXG4gICAgcmVzcG9uc2U6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2VcbiAgKTogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdDtcblxuICAgIGRhdGEudGVtcGxhdGUgPSBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlc3BvbnNlLmJvZHkudGVtcGxhdGUpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHJlc3BvbnNlLmJvZHkucGFnaW5nO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5KTogUHJvbWlzZTxMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUxpc3QocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcsIHF1ZXJ5PzogVGVtcGxhdGVRdWVyeSk6IFByb21pc2U8RG9tYWluVGVtcGxhdGVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlcy5ib2R5LnRlbXBsYXRlKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZURhdGFcbiAgKTogUHJvbWlzZTxEb21haW5UZW1wbGF0ZUl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUNyZWF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVVcGRhdGVEYXRhXG4gICk6IFByb21pc2U8VXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8VXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSlcbiAgICAgIC50aGVuKChyZXM6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95QWxsKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxOb3RpZmljYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJykpXG4gICAgICAudGhlbigocmVzOiBOb3RpZmljYXRpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgY3JlYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8Q3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0VmVyc2lvbihkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UZW1wbGF0ZUl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzLmJvZHkudGVtcGxhdGUpXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8TXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSwgZGF0YSlcbiAgICAgIC50aGVuKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAocmVzOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBkZXN0cm95VmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZ1xuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZykpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgLnRoZW4oKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGxpc3RWZXJzaW9ucyhcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5XG4gICk6IFByb21pc2U8TGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyhyZXMpXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBUElFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgc3RhdHVzOiBudW1iZXIgfCBzdHJpbmc7XG4gIHN0YWNrOiBzdHJpbmc7XG4gIGRldGFpbHM6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3RhdHVzLFxuICAgIHN0YXR1c1RleHQsXG4gICAgbWVzc2FnZSxcbiAgICBib2R5ID0ge31cbiAgfTogQVBJRXJyb3JPcHRpb25zKSB7XG4gICAgbGV0IGJvZHlNZXNzYWdlID0gJyc7XG4gICAgbGV0IGVycm9yID0gJyc7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgYm9keU1lc3NhZ2UgPSBib2R5O1xuICAgIH0gZWxzZSB7XG4gICAgICBib2R5TWVzc2FnZSA9IGJvZHk/Lm1lc3NhZ2U7XG4gICAgICBlcnJvciA9IGJvZHk/LmVycm9yO1xuICAgIH1cbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgZXJyb3IgfHwgc3RhdHVzVGV4dDtcbiAgICB0aGlzLmRldGFpbHMgPSBib2R5TWVzc2FnZTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHtcbiAgRXZlbnRzTGlzdCxcbiAgRXZlbnRzUGFnZSxcbiAgRXZlbnRzUXVlcnksXG4gIEV2ZW50c1Jlc3BvbnNlLFxuICBQYWdlc0xpc3QsXG4gIFBhZ2VzTGlzdEFjY3VtdWxhdG9yLFxuICBQYXJzZWRQYWdlc0xpc3Rcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0V2ZW50cyc7XG5cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50Q2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIF9wYXJzZVBhZ2VOdW1iZXIodXJsOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNwbGl0KCcvJykucG9wKCkgfHwgJyc7XG4gIH1cblxuICBfcGFyc2VQYWdlKGlkOiBzdHJpbmcsIHVybDogc3RyaW5nKSA6IEV2ZW50c1BhZ2Uge1xuICAgIHJldHVybiB7IGlkLCBudW1iZXI6IHRoaXMuX3BhcnNlUGFnZU51bWJlcih1cmwpLCB1cmwgfTtcbiAgfVxuXG4gIF9wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZTogRXZlbnRzUmVzcG9uc2UpIDogUGFyc2VkUGFnZXNMaXN0IHtcbiAgICBjb25zdCBwYWdlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmJvZHkucGFnaW5nIGFzIFBhZ2VzTGlzdCk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBwYWlyOiBbdXJsOiBzdHJpbmcsIGlkOiBzdHJpbmddKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gcGFpclswXTtcbiAgICAgICAgY29uc3QgdXJsID0gcGFpclsxXTtcbiAgICAgICAgYWNjW2lkXSA9IHRoaXMuX3BhcnNlUGFnZShpZCwgdXJsKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKSBhcyB1bmtub3duIGFzIFBhcnNlZFBhZ2VzTGlzdDtcbiAgfVxuXG4gIF9wYXJzZUV2ZW50TGlzdChyZXNwb25zZTogRXZlbnRzUmVzcG9uc2UpIDogRXZlbnRzTGlzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLFxuICAgICAgcGFnZXM6IHRoaXMuX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlKVxuICAgIH07XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRXZlbnRzUXVlcnkpIDogUHJvbWlzZTxFdmVudHNMaXN0PiB7XG4gICAgbGV0IHVybDtcbiAgICBjb25zdCBxdWVyeUNvcHkgPSB7IC4uLnF1ZXJ5IH07XG4gICAgaWYgKHF1ZXJ5Q29weSAmJiBxdWVyeUNvcHkucGFnZSkge1xuICAgICAgdXJsID0gdXJsam9pbignL3YzJywgZG9tYWluLCAnZXZlbnRzJywgcXVlcnlDb3B5LnBhZ2UpO1xuICAgICAgZGVsZXRlIHF1ZXJ5Q29weS5wYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgPSB1cmxqb2luKCcvdjMnLCBkb21haW4sICdldmVudHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsLCBxdWVyeUNvcHkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IEV2ZW50c1Jlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZUV2ZW50TGlzdChyZXNwb25zZSkpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCB7IElucHV0Rm9ybURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSUZvcm1EYXRhJztcblxuY2xhc3MgRm9ybURhdGFCdWlsZGVyIHtcbiAgcHJpdmF0ZSBGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhO1xuICBjb25zdHJ1Y3RvcihGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yID0gRm9ybURhdGFDb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVGb3JtRGF0YShkYXRhOiBhbnkpOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGRhdGEgb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSA9IE9iamVjdC5rZXlzKGRhdGEpXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGRhdGFba2V5XTsgfSlcbiAgICAgIC5yZWR1Y2UoKGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVLZXlzID0gWydhdHRhY2htZW50JywgJ2lubGluZScsICdtdWx0aXBsZVZhbGlkYXRpb25GaWxlJ107XG4gICAgICAgIGlmIChmaWxlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgdGhpcy5hZGRGaWxlc1RvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnbWVzc2FnZScpIHsgLy8gbWltZSBtZXNzYWdlXG4gICAgICAgICAgdGhpcy5hZGRNaW1lRGF0YVRvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENvbW1vblByb3BlcnR5VG9GRChrZXksIGRhdGFba2V5XSwgZm9ybURhdGFBY2MpO1xuICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICB9LCBuZXcgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yKCkpO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgaXNOb2RlRm9ybURhdGEoZm9ybURhdGFJbnN0YW5jZTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEpXG4gIDogZm9ybURhdGFJbnN0YW5jZSBpcyBOb2RlRm9ybURhdGEge1xuICAgIHJldHVybiAoPE5vZGVGb3JtRGF0YT5mb3JtRGF0YUluc3RhbmNlKS5nZXRIZWFkZXJzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldEF0dGFjaG1lbnRPcHRpb25zKGl0ZW06IHtcbiAgICBmaWxlbmFtZT86IHN0cmluZztcbiAgICBjb250ZW50VHlwZT8gOiBzdHJpbmc7XG4gICAga25vd25MZW5ndGg/OiBudW1iZXI7XG4gIH0pOiB7XG4gICAgZmlsZW5hbWU/OiBzdHJpbmcsXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmcsXG4gICAga25vd25MZW5ndGg/OiBudW1iZXJcbiAgfSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnb2JqZWN0JyB8fCB0aGlzLmlzU3RyZWFtKGl0ZW0pKSByZXR1cm4ge307XG4gICAgY29uc3Qge1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBjb250ZW50VHlwZSxcbiAgICAgIGtub3duTGVuZ3RoXG4gICAgfSA9IGl0ZW07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihmaWxlbmFtZSA/IHsgZmlsZW5hbWUgfSA6IHsgZmlsZW5hbWU6ICdmaWxlJyB9KSxcbiAgICAgIC4uLihjb250ZW50VHlwZSAmJiB7IGNvbnRlbnRUeXBlIH0pLFxuICAgICAgLi4uKGtub3duTGVuZ3RoICYmIHsga25vd25MZW5ndGggfSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNaW1lRGF0YVRvRkQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZGF0YTogQnVmZmVyIHwgQmxvYixcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc05vZGVGb3JtRGF0YShmb3JtRGF0YUluc3RhbmNlKSkge1xuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICBmb3JtRGF0YUluc3RhbmNlLmFwcGVuZChrZXksIGRhdGEsIHsgZmlsZW5hbWU6ICdNaW1lTWVzc2FnZScgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhSW5zdGFuY2UuYXBwZW5kKGtleSwgZGF0YSBhcyBCbG9iLCAnTWltZU1lc3NhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEZpbGVzVG9GRChcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFwcGVuZEZpbGVUb0ZEID0gKFxuICAgICAgb3JpZ2luYWxLZXk6IHN0cmluZyxcbiAgICAgIG9iajogYW55LFxuICAgICAgZm9ybURhdGE6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBvcmlnaW5hbEtleSA9PT0gJ211bHRpcGxlVmFsaWRhdGlvbkZpbGUnID8gJ2ZpbGUnIDogb3JpZ2luYWxLZXk7XG4gICAgICBjb25zdCBpc1N0cmVhbURhdGEgPSB0aGlzLmlzU3RyZWFtKG9iaik7XG4gICAgICBjb25zdCBvYmpEYXRhID0gaXNTdHJlYW1EYXRhID8gb2JqIDogb2JqLmRhdGE7XG4gICAgICAvLyBnZXRBdHRhY2htZW50T3B0aW9ucyBzaG91bGQgYmUgY2FsbGVkIHdpdGggb2JqIHBhcmFtZXRlciB0byBwcmV2ZW50IGxvb3NpbmcgZmlsZW5hbWVcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldEF0dGFjaG1lbnRPcHRpb25zKG9iaik7XG4gICAgICBpZiAodGhpcy5pc05vZGVGb3JtRGF0YShmb3JtRGF0YSkpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgb2JqRGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIG9iakRhdGEsIG9wdGlvbnMuZmlsZW5hbWUpO1xuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCBpdGVtLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRGaWxlVG9GRChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzU3RyZWFtKGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGRhdGEucGlwZSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29tbW9uUHJvcGVydHlUb0ZEKFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbTogYW55KSB7XG4gICAgICAgIGZvcm1EYXRhQWNjLmFwcGVuZChrZXksIGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBmb3JtRGF0YUFjYy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtRGF0YUJ1aWxkZXI7XG4iLCJpbXBvcnQgQ2xpZW50IGZyb20gJy4vY2xpZW50JztcbmltcG9ydCB7IElucHV0Rm9ybURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSUZvcm1EYXRhJztcbmltcG9ydCBPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9PcHRpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbGd1biB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdCgpOiB0eXBlb2YgTWFpbGd1biB7IHJldHVybiB0aGlzOyB9XG4gIHByaXZhdGUgZm9ybURhdGE6IElucHV0Rm9ybURhdGFcblxuICBjb25zdHJ1Y3RvcihGb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBGb3JtRGF0YTtcbiAgfVxuXG4gIGNsaWVudChvcHRpb25zOiBPcHRpb25zKSA6IENsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnQob3B0aW9ucywgdGhpcy5mb3JtRGF0YSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEJvdW5jZSwgQ29tcGxhaW50LCBVbnN1YnNjcmliZSwgV2hpdGVMaXN0XG59IGZyb20gJy4uL3N1cHByZXNzaW9ucyc7XG5cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuZXhwb3J0IGludGVyZmFjZSBCb3VuY2VEYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb2RlOiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZyB8IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxhaW50RGF0YSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY3JlYXRlZF9hdDogc3RyaW5nIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbnN1YnNjcmliZURhdGEge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHRhZ3M6IGFueTtcbiAgY3JlYXRlZF9hdDogc3RyaW5nIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaGl0ZUxpc3REYXRhIHtcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmcgfCBEYXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFBhZ2Uge1xuICBpZDogc3RyaW5nO1xuICBwYWdlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBhZGRyZXNzOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB1cmw6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQYWdlc0xpc3Qge1xuICBwcmV2aW91czogUGFyc2VkUGFnZTtcbiAgZmlyc3Q6IFBhcnNlZFBhZ2U7XG4gIGxhc3Q6IFBhcnNlZFBhZ2U7XG4gIG5leHQ6IFBhcnNlZFBhZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25MaXN0IHtcbiAgaXRlbXM6IChCb3VuY2UgfCBDb21wbGFpbnQgfCBVbnN1YnNjcmliZSB8IFdoaXRlTGlzdClbXTtcbiAgcGFnZXM6IFBhcnNlZFBhZ2VzTGlzdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlc0xpc3Qge1xuICBwcmV2aW91czogc3RyaW5nO1xuICBmaXJzdDogc3RyaW5nO1xuICBsYXN0OiBzdHJpbmc7XG4gIG5leHQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gU3VwcHJlc3Npb25Nb2RlbHMge1xuICBCT1VOQ0VTID0gJ2JvdW5jZXMnLFxuICBDT01QTEFJTlRTID0gJ2NvbXBsYWludHMnLFxuICBVTlNVQlNDUklCRVMgPSAndW5zdWJzY3JpYmVzJyxcbiAgV0hJVEVMSVNUUyA9ICd3aGl0ZWxpc3RzJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VzTGlzdEFjY3VtdWxhdG9yIHtcbiAgW2luZGV4OiBzdHJpbmddOiBQYXJzZWRQYWdlO1xufVxuXG5leHBvcnQgdHlwZSBTdXBwcmVzc2lvbkxpc3RRdWVyeSA9IHtcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25MaXN0UmVzcG9uc2Uge1xuICBib2R5OiB7XG4gICAgaXRlbXM6IEJvdW5jZURhdGFbXSB8IENvbXBsYWludERhdGFbXSB8IFVuc3Vic2NyaWJlRGF0YVtdIHwgV2hpdGVMaXN0RGF0YVtdO1xuICAgIHBhZ2luZzogUGFnZXNMaXN0O1xuICB9XG4gIHN0YXR1czogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uUmVzcG9uc2Uge1xuICBib2R5OiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGE7XG4gIHN0YXR1czogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uRGVzdHJveVJlc3BvbnNlIHtcbiAgYm9keToge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZztcbiAgICBhZGRyZXNzPzogc3RyaW5nO1xuICB9XG4gIHN0YXR1czogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdCB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nO1xuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29kZT86IG51bWJlcjtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIGRvbWFpbj86IHN0cmluZztcbiAgdGFnPzogc3RyaW5nO1xuICBjcmVhdGVkX2F0Pzogc3RyaW5nIDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2Uge1xuICBib2R5OntcbiAgICBtZXNzYWdlOnN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICB9XG4gIHN0YXR1czogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQge1xuICBtZXNzYWdlOnN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzdGF0dXM6IG51bWJlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgSXBQb29sQ3JlYXRlRGF0YSxcbiAgSXBQb29sQ3JlYXRlUmVzcG9uc2UsXG4gIElwUG9vbENyZWF0ZVJlc3VsdCxcbiAgSXBQb29sRGVsZXRlRGF0YSxcbiAgSXBQb29sTGlzdFJlc3BvbnNlLFxuICBJcFBvb2xMaXN0UmVzdWx0LFxuICBJcFBvb2xNZXNzYWdlUmVzcG9uc2UsXG4gIElwUG9vbE1lc3NhZ2VSZXN1bHQsXG4gIElwUG9vbFVwZGF0ZURhdGEsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9JcFBvb2xzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBQb29sc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KCk6IFByb21pc2U8SXBQb29sTGlzdFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjEvaXBfcG9vbHMnKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpID0+IHRoaXMucGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiBJcFBvb2xDcmVhdGVEYXRhKTogUHJvbWlzZTxJcFBvb2xDcmVhdGVSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogSXBQb29sQ3JlYXRlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YxL2lwX3Bvb2xzJywgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IElwUG9vbFVwZGF0ZURhdGEpOiBQcm9taXNlPElwUG9vbE1lc3NhZ2VSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogSXBQb29sTWVzc2FnZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBhdGNoV2l0aEZEKGAvdjEvaXBfcG9vbHMvJHtwb29sSWR9YCwgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IElwUG9vbERlbGV0ZURhdGEpOiBQcm9taXNlPElwUG9vbE1lc3NhZ2VSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTpJcFBvb2xNZXNzYWdlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjEvaXBfcG9vbHMvJHtwb29sSWR9YCwgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpOiBJcFBvb2xMaXN0UmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IE1nUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHsgSXBEYXRhLCBJcHNMaXN0UmVzcG9uc2VCb2R5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lwcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwc0NsaWVudCB7XG4gIHJlcXVlc3Q6IE1nUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBNZ1JlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeTogYW55KTogUHJvbWlzZTxJcHNMaXN0UmVzcG9uc2VCb2R5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvaXBzJywgcXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlSXBzUmVzcG9uc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGlwOiBzdHJpbmcpOiBQcm9taXNlPElwRGF0YT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgL3YzL2lwcy8ke2lwfWApO1xuICAgIHJldHVybiB0aGlzLnBhcnNlSXBzUmVzcG9uc2U8SXBEYXRhPihyZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSXBzUmVzcG9uc2U8VD4ocmVzcG9uc2U6IHsgYm9keTogVCB9KTogVCB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBMaXN0c1F1ZXJ5LFxuICBDcmVhdGVVcGRhdGVMaXN0LFxuICBEZXN0cm95ZWRMaXN0LFxuICBNYWlsaW5nTGlzdCxcbiAgVmFsaWRhdGlvbkFwaVJlc3BvbnNlLFxuICBTdGFydFZhbGlkYXRpb25SZXN1bHQsXG4gIFZhbGlkYXRpb25SZXN1bHQsXG4gIENhbmNlbFZhbGlkYXRpb25SZXN1bHRcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL2xpc3RzJztcbmltcG9ydCB7IElNYWlsTGlzdHNNZW1iZXJzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL21haWxMaXN0TWVtYmVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIG1lbWJlcnM6IElNYWlsTGlzdHNNZW1iZXJzO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIG1lbWJlcnM6SU1haWxMaXN0c01lbWJlcnMpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gICAgdGhpcy5tZW1iZXJzID0gbWVtYmVycztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWxpZGF0aW9uUmVzdWx0KHN0YXR1czogbnVtYmVyLCBkYXRhOiBWYWxpZGF0aW9uQXBpUmVzcG9uc2UpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDoge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQgKiAxMDAwKSAvLyBhZGQgbWlsbGlzZWNvbmQgdG8gVW5peCB0aW1lc3RhbXBcbiAgICAgIH1cbiAgICB9IGFzIFZhbGlkYXRpb25SZXN1bHQ7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogTGlzdHNRdWVyeSk6IFByb21pc2U8TWFpbGluZ0xpc3RbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS9wYWdlc2AsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lml0ZW1zIGFzIE1haWxpbmdMaXN0W10pO1xuICB9XG5cbiAgZ2V0KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZUxpc3QpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHRoaXMuYmFzZVJvdXRlLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgdXBkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgZGVzdHJveShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveWVkTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlc3Ryb3llZExpc3QpO1xuICB9XG5cbiAgdmFsaWRhdGUobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFN0YXJ0VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYCwge30pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+ICh7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgICB9KSBhcyBTdGFydFZhbGlkYXRpb25SZXN1bHQpO1xuICB9XG5cbiAgdmFsaWRhdGlvblJlc3VsdChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXNwb25zZSkgPT4gdGhpcy5wYXJzZVZhbGlkYXRpb25SZXN1bHQoXG4gICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICByZXNwb25zZS5ib2R5IGFzIFZhbGlkYXRpb25BcGlSZXNwb25zZVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgY2FuY2VsVmFsaWRhdGlvbihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8Q2FuY2VsVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgICB9IGFzIENhbmNlbFZhbGlkYXRpb25SZXN1bHQpKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIE1haWxMaXN0TWVtYmVyc1F1ZXJ5LFxuICBJTWFpbExpc3RzTWVtYmVycyxcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzLFxuICBNYWlsTGlzdE1lbWJlcixcbiAgTXVsdGlwbGVNZW1iZXJzRGF0YSxcbiAgTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSxcbiAgRGVsZXRlZE1lbWJlcixcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzUmVxLFxuICBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZVxufSBmcm9tICcuL2ludGVyZmFjZXMvbWFpbExpc3RNZW1iZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbExpc3RzTWVtYmVycyBpbXBsZW1lbnRzIElNYWlsTGlzdHNNZW1iZXJzIHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzL2xpc3RzJztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVycykge1xuICAgIGNvbnN0IG5ld0RhdGEgPSB7IC4uLmRhdGEgfTtcblxuICAgIGlmICh0eXBlb2YgZGF0YS52YXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgbmV3RGF0YS52YXJzID0gSlNPTi5zdHJpbmdpZnkobmV3RGF0YS52YXJzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEuc3Vic2NyaWJlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBuZXdEYXRhLnN1YnNjcmliZWQgPSBkYXRhLnN1YnNjcmliZWQgPyAneWVzJyA6ICdubyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0RhdGEgYXMgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzUmVxO1xuICB9XG5cbiAgbGlzdE1lbWJlcnMobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIHF1ZXJ5PzogTWFpbExpc3RNZW1iZXJzUXVlcnkpOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvcGFnZXNgLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5pdGVtcyBhcyBNYWlsTGlzdE1lbWJlcltdKTtcbiAgfVxuXG4gIGdldE1lbWJlcihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcihcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNcbiAgKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIGNvbnN0IHJlcURhdGEgPSB0aGlzLmNoZWNrQW5kVXBkYXRlRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzYCwgcmVxRGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5tZW1iZXIgYXMgTWFpbExpc3RNZW1iZXIpO1xuICB9XG5cbiAgY3JlYXRlTWVtYmVycyhcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBNdWx0aXBsZU1lbWJlcnNEYXRhXG4gICk6IFByb21pc2U8TmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBuZXdEYXRhOiBNdWx0aXBsZU1lbWJlcnNSZXFEYXRhID0ge1xuICAgICAgbWVtYmVyczogQXJyYXkuaXNBcnJheShkYXRhLm1lbWJlcnMpID8gSlNPTi5zdHJpbmdpZnkoZGF0YS5tZW1iZXJzKSA6IGRhdGEubWVtYmVycyxcbiAgICAgIHVwc2VydDogZGF0YS51cHNlcnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy5qc29uYCwgbmV3RGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZSk7XG4gIH1cblxuICB1cGRhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWAsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGRlc3Ryb3lNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKSA6IFByb21pc2U8RGVsZXRlZE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlbGV0ZWRNZW1iZXIpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBNYWlsZ3VuTWVzc2FnZURhdGEsXG4gIE1lc3NhZ2VzU2VuZEFQSVJlc3BvbnNlLFxuICBNZXNzYWdlc1NlbmRSZXN1bHRcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL01lc3NhZ2VzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUJvb2xlYW5WYWx1ZXMoZGF0YTogTWFpbGd1bk1lc3NhZ2VEYXRhKTogTWFpbGd1bk1lc3NhZ2VEYXRhIHtcbiAgICBjb25zdCB5ZXNOb1Byb3BlcnRpZXMgPSBuZXcgU2V0KFtcbiAgICAgICdvOnRlc3Rtb2RlJyxcbiAgICAgICd0OnRleHQnLFxuICAgICAgJ286ZGtpbScsXG4gICAgICAnbzp0cmFja2luZycsXG4gICAgICAnbzp0cmFja2luZy1jbGlja3MnLFxuICAgICAgJ286dHJhY2tpbmctb3BlbnMnLFxuICAgICAgJ286cmVxdWlyZS10bHMnLFxuICAgICAgJ286c2tpcC12ZXJpZmljYXRpb24nXG4gICAgXSk7XG5cbiAgICBpZiAoIWRhdGEgfHwgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gT2JqZWN0LmtleXMoZGF0YSkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHllc05vUHJvcGVydGllcy5oYXMoa2V5KSAmJiB0eXBlb2YgZGF0YVtrZXldID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgYWNjW2tleV0gPSBkYXRhW2tleV0gPyAneWVzJyA6ICdubyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2Nba2V5XSA9IGRhdGFba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgTWFpbGd1bk1lc3NhZ2VEYXRhKTtcblxuICAgIHJldHVybiB1cGRhdGVkRGF0YTtcbiAgfVxuXG4gIF9wYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSk6IE1lc3NhZ2VzU2VuZFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBjcmVhdGUoZG9tYWluOiBzdHJpbmcsIGRhdGE6IE1haWxndW5NZXNzYWdlRGF0YSk6IFByb21pc2U8TWVzc2FnZXNTZW5kUmVzdWx0PiB7XG4gICAgaWYgKGRhdGEubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzLm1pbWVgLCBkYXRhKVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RpZmllZERhdGEgPSB0aGlzLnByZXBhcmVCb29sZWFuVmFsdWVzKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3YzLyR7ZG9tYWlufS9tZXNzYWdlc2AsIG1vZGlmaWVkRGF0YSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgQVBJUmVzcG9uc2UgZnJvbSAnLi9pbnRlcmZhY2VzL0FwaVJlc3BvbnNlJztcbmltcG9ydCB7XG4gIENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iLFxuICBDcmVhdGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iLFxuICBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50LFxuICBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGFVcGRhdGVkLFxuICBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGEsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYixcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHRcbn1cbiAgZnJvbSAnLi9pbnRlcmZhY2VzL011bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgaW1wbGVtZW50cyBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzcG9uc2U8VD4ocmVzcG9uc2U6IEFQSVJlc3BvbnNlKTogVCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2U/LmJvZHlcbiAgICB9IGFzIFQ7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsnKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdD4ocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGxpc3RJZDogc3RyaW5nKTogUHJvbWlzZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlU3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2U/LmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKFxuICAgIGxpc3RJZDogc3RyaW5nLFxuICAgIGRhdGE6IE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVxuICApOiBQcm9taXNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCBtdWx0aXBsZVZhbGlkYXRpb25EYXRhOiBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGFVcGRhdGVkID0ge1xuICAgICAgbXVsdGlwbGVWYWxpZGF0aW9uRmlsZToge1xuICAgICAgICAuLi5kYXRhPy5maWxlXG4gICAgICB9LFxuICAgICAgLi4uZGF0YVxuICAgIH07XG4gICAgZGVsZXRlIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEuZmlsZTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWAsIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3kobGlzdElkOiBzdHJpbmcpOiBQcm9taXNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPihyZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIGJhc2U2NCBmcm9tICdiYXNlLTY0JztcbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yLCBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0ICogYXMgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgeyBPbkNhbGxFbXB0eUhlYWRlcnMsIE9uQ2FsbFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9SZXF1ZXN0T3B0aW9ucyc7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgRm9ybURhdGFCdWlsZGVyIGZyb20gJy4vZm9ybURhdGFCdWlsZGVyJztcbmltcG9ydCB7IElwUG9vbERlbGV0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSXBQb29scyc7XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBwcml2YXRlIHVzZXJuYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUga2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwcml2YXRlIGZvcm1EYXRhQnVpbGRlcjogRm9ybURhdGFCdWlsZGVyO1xuICBwcml2YXRlIG1heEJvZHlMZW5ndGg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZTtcbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgYXMgc3RyaW5nO1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgdGhpcy5mb3JtRGF0YUJ1aWxkZXIgPSBuZXcgRm9ybURhdGFCdWlsZGVyKGZvcm1EYXRhKTtcbiAgICB0aGlzLm1heEJvZHlMZW5ndGggPSAyNTAwMDAwMDsgLy8gMjVNQlxuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvbkNhbGxPcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IE9uQ2FsbFJlcXVlc3RPcHRpb25zID0geyAuLi5vbkNhbGxPcHRpb25zIH07XG4gICAgY29uc3QgYmFzaWMgPSBiYXNlNjQuZW5jb2RlKGAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5rZXl9YCk7XG4gICAgY29uc3Qgb25DYWxsSGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyA/IG9wdGlvbnMuaGVhZGVycyA6IHt9O1xuXG4gICAgY29uc3QgaGVhZGVyczogSGVhZGVyc0luaXR8IE9uQ2FsbEVtcHR5SGVhZGVycyA9IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljfWAsXG4gICAgICAuLi50aGlzLmhlYWRlcnMsXG4gICAgICAuLi5vbkNhbGxIZWFkZXJzXG4gICAgfTtcblxuICAgIGRlbGV0ZSBvcHRpb25zPy5oZWFkZXJzO1xuXG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5vcHRpb25zIH07XG5cbiAgICBpZiAob3B0aW9ucz8ucXVlcnkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob3B0aW9ucz8ucXVlcnkpLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtcy5wYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKG9wdGlvbnMucXVlcnkpO1xuICAgICAgZGVsZXRlIHBhcmFtcy5xdWVyeTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uYm9keSkge1xuICAgICAgY29uc3QgYm9keSA9IG9wdGlvbnM/LmJvZHk7XG4gICAgICBwYXJhbXMuZGF0YSA9IGJvZHk7XG4gICAgICBkZWxldGUgcGFyYW1zLmJvZHk7XG4gICAgfVxuICAgIGxldCByZXNwb25zZTogQXhpb3NSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnJlcXVlc3Qoe1xuICAgICAgICBtZXRob2Q6IG1ldGhvZC50b0xvY2FsZVVwcGVyQ2FzZSgpLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgIHVybDogdXJsam9pbih0aGlzLnVybCwgdXJsKSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBtYXhCb2R5TGVuZ3RoOiB0aGlzLm1heEJvZHlMZW5ndGhcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IGVyciBhcyBBeGlvc0Vycm9yO1xuXG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5zdGF0dXMgfHwgNDAwLFxuICAgICAgICBzdGF0dXNUZXh0OiBlcnJvclJlc3BvbnNlPy5yZXNwb25zZT8uc3RhdHVzVGV4dCB8fCBlcnJvclJlc3BvbnNlLmNvZGUsXG4gICAgICAgIGJvZHk6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yUmVzcG9uc2UubWVzc2FnZVxuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VCb2R5KHJlc3BvbnNlKTtcbiAgICByZXR1cm4gcmVzIGFzIEFQSVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZUJvZHkocmVzcG9uc2U6IEF4aW9zUmVzcG9uc2UpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgYm9keToge30sXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlPy5zdGF0dXNcbiAgICB9IGFzIEFQSVJlc3BvbnNlO1xuXG4gICAgaWYgKHR5cGVvZiByZXNwb25zZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgPT09ICdNYWlsZ3VuIE1hZ25pZmljZW50IEFQSScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnSW5jb3JyZWN0IHVybCcsXG4gICAgICAgICAgYm9keTogcmVzcG9uc2UuZGF0YVxuICAgICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXMuYm9keSA9IHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLmJvZHkgPSByZXNwb25zZS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcXVlcnkoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IEFycmF5PEFycmF5PHN0cmluZz4+LFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXRob2QsIHVybCwgeyBxdWVyeSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIGNvbW1hbmQoXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSB8IHN0cmluZyB8IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhLFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBhZGREZWZhdWx0SGVhZGVycyA9IHRydWVcbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGxldCBoZWFkZXJzID0ge307XG4gICAgaWYgKGFkZERlZmF1bHRIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzID0geyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAuLi5oZWFkZXJzLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0T3B0aW9uc1xuICAgICk7XG4gIH1cblxuICBnZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IEFycmF5PEFycmF5PHN0cmluZz4+LFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoJ2dldCcsIHVybCwgcXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgcG9zdChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwb3N0JywgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIHBvc3RXaXRoRkQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdXG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScgfVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHB1dFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScgfVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHBhdGNoV2l0aEZEKHVybDogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3BhdGNoJywgdXJsLCBmb3JtRGF0YSwge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwdXQodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVsZXRlKHVybDogc3RyaW5nLCBkYXRhPzogSXBQb29sRGVsZXRlRGF0YSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdkZWxldGUnLCB1cmwsIGRhdGEpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJpbXBvcnQge1xuICBDcmVhdGVVcGRhdGVSb3V0ZURhdGEsIERlc3Ryb3lSb3V0ZVJlc3BvbnNlLCBSb3V0ZSwgUm91dGVzTGlzdFF1ZXJ5LCBVcGRhdGVSb3V0ZVJlc3BvbnNlXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yb3V0ZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QocXVlcnk6IFJvdXRlc0xpc3RRdWVyeSk6IFByb21pc2U8Um91dGVbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvcm91dGVzJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkuaXRlbXMpO1xuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFJvdXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5LnJvdXRlKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBDcmVhdGVVcGRhdGVSb3V0ZURhdGEpOiBQcm9taXNlPFJvdXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjMvcm91dGVzJywgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxVcGRhdGVSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYC92My9yb3V0ZXMvJHtpZH1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxuXG4gIGRlc3Ryb3koaWQ6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveVJvdXRlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YzL3JvdXRlcy8ke2lkfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHsgU3RhdHNRdWVyeSwgU3RhdHNPcHRpb25zLCBTdGF0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL1N0YXRzT3B0aW9ucyc7XG5cbmNsYXNzIFN0YXRzIHtcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgcmVzb2x1dGlvbjogc3RyaW5nO1xuICBzdGF0czogU3RhdFtdO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFN0YXRzT3B0aW9ucykge1xuICAgIHRoaXMuc3RhcnQgPSBuZXcgRGF0ZShkYXRhLnN0YXJ0KTtcbiAgICB0aGlzLmVuZCA9IG5ldyBEYXRlKGRhdGEuZW5kKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBkYXRhLnJlc29sdXRpb247XG4gICAgdGhpcy5zdGF0cyA9IGRhdGEuc3RhdHMubWFwKGZ1bmN0aW9uIChzdGF0OiBTdGF0KSB7XG4gICAgICBjb25zdCByZXMgPSB7IC4uLnN0YXQgfTtcbiAgICAgIHJlcy50aW1lID0gbmV3IERhdGUoc3RhdC50aW1lKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5OiBTdGF0c1F1ZXJ5IHwgdW5kZWZpbmVkKTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGxldCBzZWFyY2hQYXJhbXMgPSBbXSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBPYmplY3QuZW50cmllcyhxdWVyeSkucmVkdWNlKChhcnJheVdpdGhQYWlycywgY3VycmVudFBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gY3VycmVudFBhaXI7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCByZXBlYXRlZFByb3BlcnR5ID0gdmFsdWUubWFwKChpdGVtKSA9PiBba2V5LCBpdGVtXSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5hcnJheVdpdGhQYWlycywgLi4ucmVwZWF0ZWRQcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXlXaXRoUGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICByZXR1cm4gYXJyYXlXaXRoUGFpcnM7XG4gICAgICB9LCBbXSBhcyBBcnJheTxBcnJheTxzdHJpbmc+Pik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlYXJjaFBhcmFtcztcbiAgfVxuXG4gIF9wYXJzZVN0YXRzKHJlc3BvbnNlOiB7IGJvZHk6IFN0YXRzT3B0aW9ucyB9KTogU3RhdHMge1xuICAgIHJldHVybiBuZXcgU3RhdHMocmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBnZXREb21haW4oZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogU3RhdHNRdWVyeSk6IFByb21pc2U8U3RhdHM+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLnByZXBhcmVTZWFyY2hQYXJhbXMocXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ3N0YXRzL3RvdGFsJyksIHNlYXJjaFBhcmFtcylcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlU3RhdHMpO1xuICB9XG5cbiAgZ2V0QWNjb3VudChxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPFN0YXRzPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5wcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL3N0YXRzL3RvdGFsJywgc2VhcmNoUGFyYW1zKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VTdGF0cyk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgQm91bmNlRGF0YSxcbiAgQ29tcGxhaW50RGF0YSxcbiAgUGFnZXNMaXN0LFxuICBQYWdlc0xpc3RBY2N1bXVsYXRvcixcbiAgUGFyc2VkUGFnZSxcbiAgUGFyc2VkUGFnZXNMaXN0LFxuICBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YSxcbiAgU3VwcHJlc3Npb25DcmVhdGlvblJlc3BvbnNlLFxuICBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0LFxuICBTdXBwcmVzc2lvbkRlc3Ryb3lSZXNwb25zZSxcbiAgU3VwcHJlc3Npb25EZXN0cm95UmVzdWx0LFxuICBTdXBwcmVzc2lvbkxpc3QsXG4gIFN1cHByZXNzaW9uTGlzdFF1ZXJ5LFxuICBTdXBwcmVzc2lvbkxpc3RSZXNwb25zZSxcbiAgU3VwcHJlc3Npb25Nb2RlbHMsXG4gIFN1cHByZXNzaW9uUmVzcG9uc2UsXG4gIFVuc3Vic2NyaWJlRGF0YSxcbiAgV2hpdGVMaXN0RGF0YSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL1N1cHJlc3Npb25zJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL2Vycm9yJztcbmltcG9ydCBBUElFcnJvck9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL0FQSUVycm9yT3B0aW9ucyc7XG5cbmNvbnN0IGNyZWF0ZU9wdGlvbnMgPSB7XG4gIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XG59O1xuZXhwb3J0IGNsYXNzIFN1cHByZXNzaW9uIHtcbiAgdHlwZTogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcih0eXBlOiBTdXBwcmVzc2lvbk1vZGVscykge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBCb3VuY2UgZXh0ZW5kcyBTdXBwcmVzc2lvbiB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29kZTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJvdW5jZURhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5CT1VOQ0VTKTtcbiAgICB0aGlzLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3M7XG4gICAgdGhpcy5jb2RlID0gK2RhdGEuY29kZTtcbiAgICB0aGlzLmVycm9yID0gZGF0YS5lcnJvcjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wbGFpbnQgZXh0ZW5kcyBTdXBwcmVzc2lvbiB7XG4gIGFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBDb21wbGFpbnREYXRhKSB7XG4gICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuQ09NUExBSU5UUyk7XG4gICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgIHRoaXMuY3JlYXRlZF9hdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuc3Vic2NyaWJlIGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHRhZ3M6IHN0cmluZ1tdO1xuICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFVuc3Vic2NyaWJlRGF0YSkge1xuICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLlVOU1VCU0NSSUJFUyk7XG4gICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgIHRoaXMudGFncyA9IGRhdGEudGFncztcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXaGl0ZUxpc3QgZXh0ZW5kcyBTdXBwcmVzc2lvbiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHJlYXNvbjogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IERhdGU7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogV2hpdGVMaXN0RGF0YSkge1xuICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLldISVRFTElTVFMpO1xuICAgIHRoaXMudmFsdWUgPSBkYXRhLnZhbHVlO1xuICAgIHRoaXMucmVhc29uID0gZGF0YS5yZWFzb247XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRBdCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VwcHJlc3Npb25DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBtb2RlbHM6IE1hcDxzdHJpbmcsIGFueT47XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5tb2RlbHMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5tb2RlbHMuc2V0KCdib3VuY2VzJywgQm91bmNlKTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ2NvbXBsYWludHMnLCBDb21wbGFpbnQpO1xuICAgIHRoaXMubW9kZWxzLnNldCgndW5zdWJzY3JpYmVzJywgVW5zdWJzY3JpYmUpO1xuICAgIHRoaXMubW9kZWxzLnNldCgnd2hpdGVsaXN0cycsIFdoaXRlTGlzdCk7XG4gIH1cblxuICBfcGFyc2VQYWdlKGlkOiBzdHJpbmcsIHBhZ2VVcmw6IHN0cmluZykgOiBQYXJzZWRQYWdlIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHBhZ2VVcmwpO1xuICAgIGNvbnN0IHsgc2VhcmNoUGFyYW1zIH0gPSBwYXJzZWRVcmw7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgcGFnZTogc2VhcmNoUGFyYW1zLmhhcygncGFnZScpID8gc2VhcmNoUGFyYW1zLmdldCgncGFnZScpIDogdW5kZWZpbmVkLFxuICAgICAgYWRkcmVzczogc2VhcmNoUGFyYW1zLmhhcygnYWRkcmVzcycpID8gc2VhcmNoUGFyYW1zLmdldCgnYWRkcmVzcycpIDogdW5kZWZpbmVkLFxuICAgICAgdXJsOiBwYWdlVXJsXG4gICAgfTtcbiAgfVxuXG4gIF9wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZTogU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UpOiBQYXJzZWRQYWdlc0xpc3Qge1xuICAgIGNvbnN0IHBhZ2VzID0gT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuYm9keS5wYWdpbmcgYXMgUGFnZXNMaXN0KTtcbiAgICByZXR1cm4gcGFnZXMucmVkdWNlKFxuICAgICAgKGFjYzogUGFnZXNMaXN0QWNjdW11bGF0b3IsIHBhaXI6IFtwYWdlVXJsOiBzdHJpbmcsIGlkOiBzdHJpbmddKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gcGFpclswXTtcbiAgICAgICAgY29uc3QgcGFnZVVybCA9IHBhaXJbMV07XG4gICAgICAgIGFjY1tpZF0gPSB0aGlzLl9wYXJzZVBhZ2UoaWQsIHBhZ2VVcmwpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApIGFzIHVua25vd24gYXMgUGFyc2VkUGFnZXNMaXN0O1xuICB9XG5cbiAgX3BhcnNlTGlzdChcbiAgICByZXNwb25zZTogU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEpOlxuICAgICAgQm91bmNlIHwgQ29tcGxhaW50IHwgVW5zdWJzY3JpYmUgfCBXaGl0ZUxpc3RcbiAgICB9XG4gICk6IFN1cHByZXNzaW9uTGlzdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIFN1cHByZXNzaW9uTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKGl0ZW0pID0+IG5ldyBNb2RlbChpdGVtKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5fcGFyc2VQYWdlTGlua3MocmVzcG9uc2UpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBfcGFyc2VJdGVtPFQgZXh0ZW5kcyBTdXBwcmVzc2lvbj4oXG4gICAgZGF0YSA6IEJvdW5jZURhdGEgfCBDb21wbGFpbnREYXRhIHwgVW5zdWJzY3JpYmVEYXRhIHwgV2hpdGVMaXN0RGF0YSxcbiAgICBNb2RlbDoge1xuICAgICAgbmV3KGRhdGE6IEJvdW5jZURhdGEgfCBDb21wbGFpbnREYXRhIHwgVW5zdWJzY3JpYmVEYXRhIHwgV2hpdGVMaXN0RGF0YSk6XG4gICAgICBUXG4gICAgfVxuICApOiBUIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsKGRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVXaGl0ZUxpc3QoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgc3RhdHVzVGV4dDogJ0RhdGEgcHJvcGVydHkgc2hvdWxkIGJlIGFuIG9iamVjdCcsXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlOiAnV2hpdGVsaXN0XFwncyBjcmVhdGlvbiBwcm9jZXNzIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY3JlYXRpb25zLiBEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnXG4gICAgICAgIH1cbiAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3RXaXRoRkQodXJsam9pbigndjMnLCBkb21haW4sICd3aGl0ZWxpc3RzJyksIGRhdGEpXG4gICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMubW9kZWxzLmhhcyh0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdVbmtub3duIHR5cGUgdmFsdWUnLFxuICAgICAgICBib2R5OiB7IG1lc3NhZ2U6ICdUeXBlIG1heSBiZSBvbmx5IG9uZSBvZiBbYm91bmNlcywgY29tcGxhaW50cywgdW5zdWJzY3JpYmVzLCB3aGl0ZWxpc3RzXScgfVxuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVJlc3BvbnNlKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2UpOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgdHlwZTogcmVzcG9uc2UuYm9keS50eXBlIHx8ICcnLFxuICAgICAgdmFsdWU6IHJlc3BvbnNlLmJvZHkudmFsdWUgfHwgJycsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cblxuICBsaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBxdWVyeT86IFN1cHByZXNzaW9uTGlzdFF1ZXJ5XG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25MaXN0PiB7XG4gICAgdGhpcy5jaGVja1R5cGUodHlwZSk7XG5cbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxzLmdldCh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAuZ2V0KHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZUxpc3QocmVzcG9uc2UsIG1vZGVsKSk7XG4gIH1cblxuICBnZXQoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZ1xuICApOiBQcm9taXNlPEJvdW5jZSB8IENvbXBsYWludCB8IFVuc3Vic2NyaWJlIHwgV2hpdGVMaXN0PiB7XG4gICAgdGhpcy5jaGVja1R5cGUodHlwZSk7XG5cbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxzLmdldCh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAuZ2V0KHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlLCBlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcykpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBTdXBwcmVzc2lvblJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZUl0ZW08dHlwZW9mIG1vZGVsPihyZXNwb25zZS5ib2R5LCBtb2RlbCkpO1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhOiBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YSB8IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhW11cbiAgKTogUHJvbWlzZTxTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5jaGVja1R5cGUodHlwZSk7XG4gICAgLy8gc3VwcG9ydHMgYWRkaW5nIG11bHRpcGxlIHN1cHByZXNzaW9ucyBieSBkZWZhdWx0XG4gICAgbGV0IHBvc3REYXRhO1xuICAgIGlmICh0eXBlID09PSAnd2hpdGVsaXN0cycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdoaXRlTGlzdChkb21haW4sIGRhdGEpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgcG9zdERhdGEgPSBbZGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc3REYXRhID0gWy4uLmRhdGFdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0KHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpLCBjcmVhdGVPcHRpb25zKVxuICAgICAgLnRoZW4odGhpcy5wcmVwYXJlUmVzcG9uc2UpO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgYWRkcmVzczogc3RyaW5nXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25EZXN0cm95UmVzdWx0PiB7XG4gICAgdGhpcy5jaGVja1R5cGUodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmRlbGV0ZSh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2UpID0+ICh7XG4gICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgICAgdmFsdWU6IHJlc3BvbnNlLmJvZHkudmFsdWUgfHwgJycsXG4gICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLmJvZHkuYWRkcmVzcyB8fCAnJyxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICAgIH0pKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN1cHByZXNzaW9uQ2xpZW50O1xuIiwiaW1wb3J0IHsgSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9NdWx0aXBsZVZhbGlkYXRpb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCwgVmFsaWRhdGlvblJlc3BvbnNlLCBWYWxpZGF0aW9uUXVlcnkgfSBmcm9tICcuL2ludGVyZmFjZXMvVmFsaWRhdGUnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFsaWRhdGVDbGllbnQge1xuICBwdWJsaWMgbXVsdGlwbGVWYWxpZGF0aW9uO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudDogSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5tdWx0aXBsZVZhbGlkYXRpb24gPSBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQ7XG4gIH1cblxuICBhc3luYyBnZXQoYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgY29uc3QgcXVlcnk6IFZhbGlkYXRpb25RdWVyeSA9IHsgYWRkcmVzcyB9O1xuICAgIGNvbnN0IHJlc3VsdDogVmFsaWRhdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3Y0L2FkZHJlc3MvdmFsaWRhdGUnLCBxdWVyeSk7XG4gICAgcmV0dXJuIHJlc3VsdC5ib2R5IGFzIFZhbGlkYXRpb25SZXN1bHQ7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcblxuaW1wb3J0IHtcbiAgVmFsaWRhdGlvblJlc3BvbnNlLFxuICBXZWJob29rTGlzdCxcbiAgV2ViaG9va1Jlc3BvbnNlLFxuICBXZWJob29rc0lkcyxcbiAgV2ViaG9va3NRdWVyeVxufSBmcm9tICcuL2ludGVyZmFjZXMvV2ViaG9va3MnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuY2xhc3MgV2ViaG9vayB7XG4gIGlkOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHVybDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYmhvb2tDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va0xpc3QocmVzcG9uc2U6IHsgYm9keTogeyB3ZWJob29rczogV2ViaG9va0xpc3QgfSB9KTogV2ViaG9va0xpc3Qge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LndlYmhvb2tzO1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va1dpdGhJRChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNwb25zZTogV2ViaG9va1Jlc3BvbnNlKTogV2ViaG9vayB7XG4gICAgICBjb25zdCB3ZWJob29rUmVzcG9uc2UgPSByZXNwb25zZT8uYm9keT8ud2ViaG9vaztcbiAgICAgIGxldCB1cmwgPSB3ZWJob29rUmVzcG9uc2U/LnVybDtcbiAgICAgIGlmICghdXJsKSB7XG4gICAgICAgIHVybCA9IHdlYmhvb2tSZXNwb25zZT8udXJscyAmJiB3ZWJob29rUmVzcG9uc2UudXJscy5sZW5ndGhcbiAgICAgICAgICA/IHdlYmhvb2tSZXNwb25zZS51cmxzWzBdXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFdlYmhvb2soaWQsIHVybCk7XG4gICAgfTtcbiAgfVxuXG4gIF9wYXJzZVdlYmhvb2tUZXN0KHJlc3BvbnNlOiB7IGJvZHk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB9KVxuICA6IHtjb2RlOiBudW1iZXIsIG1lc3NhZ2U6c3RyaW5nfSB7XG4gICAgcmV0dXJuIHsgY29kZTogcmVzcG9uc2UuYm9keS5jb2RlLCBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UgfSBhcyBWYWxpZGF0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeTogV2ViaG9va3NRdWVyeSk6IFByb21pc2U8V2ViaG9va0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rTGlzdCk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIGlkOiBXZWJob29rc0lkcyk6IFByb21pc2U8V2ViaG9vaz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRlc3QgPSBmYWxzZSk6IFByb21pc2U8V2ViaG9vayB8IFZhbGlkYXRpb25SZXNwb25zZT4ge1xuICAgIGlmICh0ZXN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQsICd0ZXN0JyksIHsgdXJsIH0pXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1Rlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHsgaWQsIHVybCB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHVybDogc3RyaW5nKTogUHJvbWlzZTxXZWJob29rPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSwgeyB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZywgaWQ6IHN0cmluZykgOiBQcm9taXNlPFdlYmhvb2s+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cbn1cbiIsIi8qISBodHRwczovL210aHMuYmUvYmFzZTY0IHYxLjAuMCBieSBAbWF0aGlhcyB8IE1JVCBsaWNlbnNlICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgYGV4cG9ydHNgLlxuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLlxuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2Vcblx0Ly8gaXQgYXMgYHJvb3RgLlxuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdHZhciBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0fTtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XG5cblx0dmFyIGVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdC8vIE5vdGU6IHRoZSBlcnJvciBtZXNzYWdlcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlIG1hdGNoIHRob3NlIHVzZWQgYnlcblx0XHQvLyB0aGUgbmF0aXZlIGBhdG9iYC9gYnRvYWAgaW1wbGVtZW50YXRpb24gaW4gQ2hyb21pdW0uXG5cdFx0dGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKTtcblx0fTtcblxuXHR2YXIgVEFCTEUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcblx0dmFyIFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMgPSAvW1xcdFxcblxcZlxcciBdL2c7XG5cblx0Ly8gYGRlY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBhdG9iYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxuXHQvLyBUaGUgb3B0aW1pemVkIGJhc2U2NC1kZWNvZGluZyBhbGdvcml0aG0gdXNlZCBpcyBiYXNlZCBvbiBAYXRr4oCZcyBleGNlbGxlbnRcblx0Ly8gaW1wbGVtZW50YXRpb24uIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2F0ay8xMDIwMzk2XG5cdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxuXHRcdFx0LnJlcGxhY2UoUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUywgJycpO1xuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCAlIDQgPT0gMCkge1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKC89PT8kLywgJycpO1xuXHRcdFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRsZW5ndGggJSA0ID09IDEgfHxcblx0XHRcdC8vIGh0dHA6Ly93aGF0d2cub3JnL0MjYWxwaGFudW1lcmljLWFzY2lpLWNoYXJhY3RlcnNcblx0XHRcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcblx0XHQpIHtcblx0XHRcdGVycm9yKFxuXHRcdFx0XHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIGJpdENvdW50ZXIgPSAwO1xuXHRcdHZhciBiaXRTdG9yYWdlO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHRidWZmZXIgPSBUQUJMRS5pbmRleE9mKGlucHV0LmNoYXJBdChwb3NpdGlvbikpO1xuXHRcdFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xuXHRcdFx0Ly8gVW5sZXNzIHRoaXMgaXMgdGhlIGZpcnN0IG9mIGEgZ3JvdXAgb2YgNCBjaGFyYWN0ZXJz4oCmXG5cdFx0XHRpZiAoYml0Q291bnRlcisrICUgNCkge1xuXHRcdFx0XHQvLyDigKZjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gYSBzaW5nbGUgQVNDSUkgY2hhcmFjdGVyLlxuXHRcdFx0XHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0XHRcdFx0XHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHQvLyBgZW5jb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGJ0b2FgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZDogaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1idG9hXG5cdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcblx0XHRpZiAoL1teXFwwLVxceEZGXS8udGVzdChpbnB1dCkpIHtcblx0XHRcdC8vIE5vdGU6IG5vIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGFzdHJhbCBzeW1ib2xzIGhlcmUsIGFzIHN1cnJvZ2F0ZXMgYXJlXG5cdFx0XHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xuXHRcdFx0XHQnTGF0aW4xIHJhbmdlLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0dmFyIHBvc2l0aW9uID0gLTE7XG5cdFx0dmFyIGE7XG5cdFx0dmFyIGI7XG5cdFx0dmFyIGM7XG5cdFx0dmFyIGJ1ZmZlcjtcblx0XHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xuXG5cdFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcblx0XHRcdC8vIFJlYWQgdGhyZWUgYnl0ZXMsIGkuZS4gMjQgYml0cy5cblx0XHRcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pIDw8IDg7XG5cdFx0XHRjID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiICsgYztcblx0XHRcdC8vIFR1cm4gdGhlIDI0IGJpdHMgaW50byBmb3VyIGNodW5rcyBvZiA2IGJpdHMgZWFjaCwgYW5kIGFwcGVuZCB0aGVcblx0XHRcdC8vIG1hdGNoaW5nIGNoYXJhY3RlciBmb3IgZWFjaCBvZiB0aGVtIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDE4ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEyICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgJiAweDNGKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAocGFkZGluZyA9PSAyKSB7XG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgODtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xuXHRcdFx0YnVmZmVyID0gYSArIGI7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEwKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCAyKSAmIDB4M0YpICtcblx0XHRcdFx0Jz0nXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAocGFkZGluZyA9PSAxKSB7XG5cdFx0XHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCA0KSAmIDB4M0YpICtcblx0XHRcdFx0Jz09J1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdHZhciBiYXNlNjQgPSB7XG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCd2ZXJzaW9uJzogJzEuMC4wJ1xuXHR9O1xuXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGJhc2U2NDtcblx0XHR9KTtcblx0fVx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XG5cdFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IGJhc2U2NDtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIGJhc2U2NCkge1xuXHRcdFx0XHRiYXNlNjQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IGJhc2U2NFtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LmJhc2U2NCA9IGJhc2U2NDtcblx0fVxuXG59KHRoaXMpKTtcbiIsInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBEZWxheWVkU3RyZWFtID0gcmVxdWlyZSgnZGVsYXllZC1zdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb21iaW5lZFN0cmVhbTtcbmZ1bmN0aW9uIENvbWJpbmVkU3RyZWFtKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICB0aGlzLmRhdGFTaXplID0gMDtcbiAgdGhpcy5tYXhEYXRhU2l6ZSA9IDIgKiAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbXMgPSB0cnVlO1xuXG4gIHRoaXMuX3JlbGVhc2VkID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG4gIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbn1cbnV0aWwuaW5oZXJpdHMoQ29tYmluZWRTdHJlYW0sIFN0cmVhbSk7XG5cbkNvbWJpbmVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNvbWJpbmVkU3RyZWFtID0gbmV3IHRoaXMoKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBjb21iaW5lZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkU3RyZWFtO1xufTtcblxuQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHJldHVybiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ3N0cmluZycpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdib29sZWFuJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ251bWJlcicpXG4gICAgJiYgKCFCdWZmZXIuaXNCdWZmZXIoc3RyZWFtKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcblxuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgaWYgKCEoc3RyZWFtIGluc3RhbmNlb2YgRGVsYXllZFN0cmVhbSkpIHtcbiAgICAgIHZhciBuZXdTdHJlYW0gPSBEZWxheWVkU3RyZWFtLmNyZWF0ZShzdHJlYW0sIHtcbiAgICAgICAgbWF4RGF0YVNpemU6IEluZmluaXR5LFxuICAgICAgICBwYXVzZVN0cmVhbTogdGhpcy5wYXVzZVN0cmVhbXMsXG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICBzdHJlYW0gPSBuZXdTdHJlYW07XG4gICAgfVxuXG4gICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG5cbiAgICBpZiAodGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX3N0cmVhbXMucHVzaChzdHJlYW0pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICBTdHJlYW0ucHJvdG90eXBlLnBpcGUuY2FsbCh0aGlzLCBkZXN0LCBvcHRpb25zKTtcbiAgdGhpcy5yZXN1bWUoKTtcbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2dldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX2luc2lkZUxvb3ApIHtcbiAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IHRydWU7XG4gICAgcmV0dXJuOyAvLyBkZWZlciBjYWxsXG4gIH1cblxuICB0aGlzLl9pbnNpZGVMb29wID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBkbyB7XG4gICAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVhbEdldE5leHQoKTtcbiAgICB9IHdoaWxlICh0aGlzLl9wZW5kaW5nTmV4dCk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3JlYWxHZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdHJlYW0gPSB0aGlzLl9zdHJlYW1zLnNoaWZ0KCk7XG5cblxuICBpZiAodHlwZW9mIHN0cmVhbSA9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuZW5kKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXRTdHJlYW0gPSBzdHJlYW07XG4gIGdldFN0cmVhbShmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gICAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3BpcGVOZXh0ID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBzdHJlYW07XG5cbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCB0aGlzLl9nZXROZXh0LmJpbmQodGhpcykpO1xuICAgIHN0cmVhbS5waXBlKHRoaXMsIHtlbmQ6IGZhbHNlfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gc3RyZWFtO1xuICB0aGlzLndyaXRlKHZhbHVlKTtcbiAgdGhpcy5fZ2V0TmV4dCgpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFcnJvcnMgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc2VsZi5fZW1pdEVycm9yKGVycik7XG4gIH0pO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSgpO1xuICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5fZ2V0TmV4dCgpO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKCk7XG4gIHRoaXMuZW1pdCgncmVzdW1lJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZW5kJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl91cGRhdGVEYXRhU2l6ZSgpO1xuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nO1xuICB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fdXBkYXRlRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9zdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgaWYgKCFzdHJlYW0uZGF0YVNpemUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxmLmRhdGFTaXplICs9IHN0cmVhbS5kYXRhU2l6ZTtcbiAgfSk7XG5cbiAgaWYgKHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZSkge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9lbWl0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5cbmZ1bmN0aW9uIHNldHVwKGVudikge1xuXHRjcmVhdGVEZWJ1Zy5kZWJ1ZyA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5kZWZhdWx0ID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmNvZXJjZSA9IGNvZXJjZTtcblx0Y3JlYXRlRGVidWcuZGlzYWJsZSA9IGRpc2FibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZSA9IGVuYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlZCA9IGVuYWJsZWQ7XG5cdGNyZWF0ZURlYnVnLmh1bWFuaXplID0gcmVxdWlyZSgnbXMnKTtcblx0Y3JlYXRlRGVidWcuZGVzdHJveSA9IGRlc3Ryb3k7XG5cblx0T2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0Y3JlYXRlRGVidWdba2V5XSA9IGVudltrZXldO1xuXHR9KTtcblxuXHQvKipcblx0KiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cblx0Ki9cblxuXHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdC8qKlxuXHQqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cblx0KlxuXHQqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cblx0Ki9cblx0Y3JlYXRlRGVidWcuZm9ybWF0dGVycyA9IHt9O1xuXG5cdC8qKlxuXHQqIFNlbGVjdHMgYSBjb2xvciBmb3IgYSBkZWJ1ZyBuYW1lc3BhY2Vcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugc3RyaW5nIGZvciB0aGUgZGVidWcgaW5zdGFuY2UgdG8gYmUgY29sb3JlZFxuXHQqIEByZXR1cm4ge051bWJlcnxTdHJpbmd9IEFuIEFOU0kgY29sb3IgY29kZSBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBzZWxlY3RDb2xvcihuYW1lc3BhY2UpIHtcblx0XHRsZXQgaGFzaCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzcGFjZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgbmFtZXNwYWNlLmNoYXJDb2RlQXQoaSk7XG5cdFx0XHRoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVEZWJ1Zy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBjcmVhdGVEZWJ1Zy5jb2xvcnMubGVuZ3RoXTtcblx0fVxuXHRjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvciA9IHNlbGVjdENvbG9yO1xuXG5cdC8qKlxuXHQqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuXHRcdGxldCBwcmV2VGltZTtcblx0XHRsZXQgZW5hYmxlT3ZlcnJpZGUgPSBudWxsO1xuXHRcdGxldCBuYW1lc3BhY2VzQ2FjaGU7XG5cdFx0bGV0IGVuYWJsZWRDYWNoZTtcblxuXHRcdGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcblx0XHRcdC8vIERpc2FibGVkP1xuXHRcdFx0aWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsZiA9IGRlYnVnO1xuXG5cdFx0XHQvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXHRcdFx0Y29uc3QgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNvbnN0IG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcblx0XHRcdHNlbGYuZGlmZiA9IG1zO1xuXHRcdFx0c2VsZi5wcmV2ID0gcHJldlRpbWU7XG5cdFx0XHRzZWxmLmN1cnIgPSBjdXJyO1xuXHRcdFx0cHJldlRpbWUgPSBjdXJyO1xuXG5cdFx0XHRhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG5cdFx0XHRcdGFyZ3MudW5zaGlmdCgnJU8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcblx0XHRcdFx0Ly8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuXHRcdFx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblx0XHRcdFx0aWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBhcmdzW2luZGV4XTtcblx0XHRcdFx0XHRtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cblx0XHRcdFx0XHQvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG5cdFx0XHRcdFx0YXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdGluZGV4LS07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cdFx0XHRjcmVhdGVEZWJ1Zy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cblx0XHRcdGNvbnN0IGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuXHRcdFx0bG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0ZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuXHRcdGRlYnVnLmNvbG9yID0gY3JlYXRlRGVidWcuc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcblx0XHRkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7XG5cdFx0ZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdGlmIChlbmFibGVPdmVycmlkZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBlbmFibGVPdmVycmlkZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobmFtZXNwYWNlc0NhY2hlICE9PSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzKSB7XG5cdFx0XHRcdFx0bmFtZXNwYWNlc0NhY2hlID0gY3JlYXRlRGVidWcubmFtZXNwYWNlcztcblx0XHRcdFx0XHRlbmFibGVkQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZW5hYmxlZENhY2hlO1xuXHRcdFx0fSxcblx0XHRcdHNldDogdiA9PiB7XG5cdFx0XHRcdGVuYWJsZU92ZXJyaWRlID0gdjtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG5cdFx0aWYgKHR5cGVvZiBjcmVhdGVEZWJ1Zy5pbml0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVidWc7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcblx0XHRjb25zdCBuZXdEZWJ1ZyA9IGNyZWF0ZURlYnVnKHRoaXMubmFtZXNwYWNlICsgKHR5cGVvZiBkZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gJzonIDogZGVsaW1pdGVyKSArIG5hbWVzcGFjZSk7XG5cdFx0bmV3RGVidWcubG9nID0gdGhpcy5sb2c7XG5cdFx0cmV0dXJuIG5ld0RlYnVnO1xuXHR9XG5cblx0LyoqXG5cdCogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuXHQqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG5cdFx0Y3JlYXRlRGVidWcuc2F2ZShuYW1lc3BhY2VzKTtcblx0XHRjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcztcblxuXHRcdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdFx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHRcdGxldCBpO1xuXHRcdGNvbnN0IHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJykuc3BsaXQoL1tcXHMsXSsvKTtcblx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmICghc3BsaXRbaV0pIHtcblx0XHRcdFx0Ly8gaWdub3JlIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuXG5cdFx0XHRpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnNsaWNlKDEpICsgJyQnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuXHQqXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZGlzYWJsZSgpIHtcblx0XHRjb25zdCBuYW1lc3BhY2VzID0gW1xuXHRcdFx0Li4uY3JlYXRlRGVidWcubmFtZXMubWFwKHRvTmFtZXNwYWNlKSxcblx0XHRcdC4uLmNyZWF0ZURlYnVnLnNraXBzLm1hcCh0b05hbWVzcGFjZSkubWFwKG5hbWVzcGFjZSA9PiAnLScgKyBuYW1lc3BhY2UpXG5cdFx0XS5qb2luKCcsJyk7XG5cdFx0Y3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcblx0XHRyZXR1cm4gbmFtZXNwYWNlcztcblx0fVxuXG5cdC8qKlxuXHQqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG5cdCogQHJldHVybiB7Qm9vbGVhbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcblx0XHRpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGxldCBpO1xuXHRcdGxldCBsZW47XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcubmFtZXNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0KiBDb252ZXJ0IHJlZ2V4cCB0byBuYW1lc3BhY2Vcblx0KlxuXHQqIEBwYXJhbSB7UmVnRXhwfSByZWd4ZXBcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiB0b05hbWVzcGFjZShyZWdleHApIHtcblx0XHRyZXR1cm4gcmVnZXhwLnRvU3RyaW5nKClcblx0XHRcdC5zdWJzdHJpbmcoMiwgcmVnZXhwLnRvU3RyaW5nKCkubGVuZ3RoIC0gMilcblx0XHRcdC5yZXBsYWNlKC9cXC5cXCpcXD8kLywgJyonKTtcblx0fVxuXG5cdC8qKlxuXHQqIENvZXJjZSBgdmFsYC5cblx0KlxuXHQqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuXHQqIEByZXR1cm4ge01peGVkfVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBjb2VyY2UodmFsKSB7XG5cdFx0aWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRyZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0LyoqXG5cdCogWFhYIERPIE5PVCBVU0UuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3R1YiBmdW5jdGlvbi5cblx0KiBYWFggSXQgV0lMTCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cdCovXG5cdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdH1cblxuXHRjcmVhdGVEZWJ1Zy5lbmFibGUoY3JlYXRlRGVidWcubG9hZCgpKTtcblxuXHRyZXR1cm4gY3JlYXRlRGVidWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0dXA7XG4iLCIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG5cdHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdCguLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsInZhciBkZWJ1ZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghZGVidWcpIHtcbiAgICB0cnkge1xuICAgICAgLyogZXNsaW50IGdsb2JhbC1yZXF1aXJlOiBvZmYgKi9cbiAgICAgIGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiZm9sbG93LXJlZGlyZWN0c1wiKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IC8qICovIH1cbiAgICBpZiAodHlwZW9mIGRlYnVnICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGRlYnVnID0gZnVuY3Rpb24gKCkgeyAvKiAqLyB9O1xuICAgIH1cbiAgfVxuICBkZWJ1Zy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbiIsInZhciB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xudmFyIFVSTCA9IHVybC5VUkw7XG52YXIgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xudmFyIGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZShcInN0cmVhbVwiKS5Xcml0YWJsZTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xudmFyIGRlYnVnID0gcmVxdWlyZShcIi4vZGVidWdcIik7XG5cbi8vIENyZWF0ZSBoYW5kbGVycyB0aGF0IHBhc3MgZXZlbnRzIGZyb20gbmF0aXZlIHJlcXVlc3RzXG52YXIgZXZlbnRzID0gW1wiYWJvcnRcIiwgXCJhYm9ydGVkXCIsIFwiY29ubmVjdFwiLCBcImVycm9yXCIsIFwic29ja2V0XCIsIFwidGltZW91dFwiXTtcbnZhciBldmVudEhhbmRsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudEhhbmRsZXJzW2V2ZW50XSA9IGZ1bmN0aW9uIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdGhpcy5fcmVkaXJlY3RhYmxlLmVtaXQoZXZlbnQsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICB9O1xufSk7XG5cbi8vIEVycm9yIHR5cGVzIHdpdGggY29kZXNcbnZhciBSZWRpcmVjdGlvbkVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9SRURJUkVDVElPTl9GQUlMVVJFXCIsXG4gIFwiUmVkaXJlY3RlZCByZXF1ZXN0IGZhaWxlZFwiXG4pO1xudmFyIFRvb01hbnlSZWRpcmVjdHNFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTXCIsXG4gIFwiTWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIGV4Y2VlZGVkXCJcbik7XG52YXIgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX01BWF9CT0RZX0xFTkdUSF9FWENFRURFRFwiLFxuICBcIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0XCJcbik7XG52YXIgV3JpdGVBZnRlckVuZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EXCIsXG4gIFwid3JpdGUgYWZ0ZXIgZW5kXCJcbik7XG5cbi8vIEFuIEhUVFAoUykgcmVxdWVzdCB0aGF0IGNhbiBiZSByZWRpcmVjdGVkXG5mdW5jdGlvbiBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVxdWVzdFxuICBXcml0YWJsZS5jYWxsKHRoaXMpO1xuICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICB0aGlzLl9lbmRpbmcgPSBmYWxzZTtcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAocmVzcG9uc2VDYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJyZXNwb25zZVwiLCByZXNwb25zZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIHJlc3BvbnNlcyBvZiBuYXRpdmUgcmVxdWVzdHNcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgc2VsZi5fcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIHRoZSBmaXJzdCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGFibGUucHJvdG90eXBlKTtcblxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gIGFib3J0UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIHRoaXMuZW1pdChcImFib3J0XCIpO1xufTtcblxuLy8gV3JpdGVzIGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBXcml0aW5nIGlzIG5vdCBhbGxvd2VkIGlmIGVuZCBoYXMgYmVlbiBjYWxsZWRcbiAgaWYgKHRoaXMuX2VuZGluZykge1xuICAgIHRocm93IG5ldyBXcml0ZUFmdGVyRW5kRXJyb3IoKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGlucHV0IGFuZCBzaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAoISh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiAoXCJsZW5ndGhcIiBpbiBkYXRhKSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGF0YSBzaG91bGQgYmUgYSBzdHJpbmcsIEJ1ZmZlciBvciBVaW50OEFycmF5XCIpO1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gSWdub3JlIGVtcHR5IGJ1ZmZlcnMsIHNpbmNlIHdyaXRpbmcgdGhlbSBkb2Vzbid0IGludm9rZSB0aGUgY2FsbGJhY2tcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yMjA2NlxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICAvLyBPbmx5IHdyaXRlIHdoZW4gd2UgZG9uJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGlmICh0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArIGRhdGEubGVuZ3RoIDw9IHRoaXMuX29wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycy5wdXNoKHsgZGF0YTogZGF0YSwgZW5jb2Rpbmc6IGVuY29kaW5nIH0pO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LndyaXRlKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjayk7XG4gIH1cbiAgLy8gRXJyb3Igd2hlbiB3ZSBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgZWxzZSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IE1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yKCkpO1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxufTtcblxuLy8gRW5kcyB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBTaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZGF0YTtcbiAgICBkYXRhID0gZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBXcml0ZSBkYXRhIGlmIG5lZWRlZCBhbmQgZW5kXG4gIGlmICghZGF0YSkge1xuICAgIHRoaXMuX2VuZGVkID0gdGhpcy5fZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5lbmQobnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY3VycmVudFJlcXVlc3QgPSB0aGlzLl9jdXJyZW50UmVxdWVzdDtcbiAgICB0aGlzLndyaXRlKGRhdGEsIGVuY29kaW5nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9lbmRlZCA9IHRydWU7XG4gICAgICBjdXJyZW50UmVxdWVzdC5lbmQobnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMuX2VuZGluZyA9IHRydWU7XG4gIH1cbn07XG5cbi8vIFNldHMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3Quc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbn07XG5cbi8vIENsZWFycyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUucmVtb3ZlSGVhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3QucmVtb3ZlSGVhZGVyKG5hbWUpO1xufTtcblxuLy8gR2xvYmFsIHRpbWVvdXQgZm9yIGFsbCB1bmRlcmx5aW5nIHJlcXVlc3RzXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG1zZWNzLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gRGVzdHJveXMgdGhlIHNvY2tldCBvbiB0aW1lb3V0XG4gIGZ1bmN0aW9uIGRlc3Ryb3lPblRpbWVvdXQoc29ja2V0KSB7XG4gICAgc29ja2V0LnNldFRpbWVvdXQobXNlY3MpO1xuICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcihcInRpbWVvdXRcIiwgc29ja2V0LmRlc3Ryb3kpO1xuICAgIHNvY2tldC5hZGRMaXN0ZW5lcihcInRpbWVvdXRcIiwgc29ja2V0LmRlc3Ryb3kpO1xuICB9XG5cbiAgLy8gU2V0cyB1cCBhIHRpbWVyIHRvIHRyaWdnZXIgYSB0aW1lb3V0IGV2ZW50XG4gIGZ1bmN0aW9uIHN0YXJ0VGltZXIoc29ja2V0KSB7XG4gICAgaWYgKHNlbGYuX3RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLl90aW1lb3V0KTtcbiAgICB9XG4gICAgc2VsZi5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5lbWl0KFwidGltZW91dFwiKTtcbiAgICAgIGNsZWFyVGltZXIoKTtcbiAgICB9LCBtc2Vjcyk7XG4gICAgZGVzdHJveU9uVGltZW91dChzb2NrZXQpO1xuICB9XG5cbiAgLy8gU3RvcHMgYSB0aW1lb3V0IGZyb20gdHJpZ2dlcmluZ1xuICBmdW5jdGlvbiBjbGVhclRpbWVyKCkge1xuICAgIC8vIENsZWFyIHRoZSB0aW1lb3V0XG4gICAgaWYgKHNlbGYuX3RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLl90aW1lb3V0KTtcbiAgICAgIHNlbGYuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHVwIGFsbCBhdHRhY2hlZCBsaXN0ZW5lcnNcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRcIiwgY2xlYXJUaW1lcik7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJyZXNwb25zZVwiLCBjbGVhclRpbWVyKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgaWYgKCFzZWxmLnNvY2tldCkge1xuICAgICAgc2VsZi5fY3VycmVudFJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoXCJzb2NrZXRcIiwgc3RhcnRUaW1lcik7XG4gICAgfVxuICB9XG5cbiAgLy8gQXR0YWNoIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAoY2FsbGJhY2spIHtcbiAgICB0aGlzLm9uKFwidGltZW91dFwiLCBjYWxsYmFjayk7XG4gIH1cblxuICAvLyBTdGFydCB0aGUgdGltZXIgaWYgb3Igd2hlbiB0aGUgc29ja2V0IGlzIG9wZW5lZFxuICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICBzdGFydFRpbWVyKHRoaXMuc29ja2V0KTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5vbmNlKFwic29ja2V0XCIsIHN0YXJ0VGltZXIpO1xuICB9XG5cbiAgLy8gQ2xlYW4gdXAgb24gZXZlbnRzXG4gIHRoaXMub24oXCJzb2NrZXRcIiwgZGVzdHJveU9uVGltZW91dCk7XG4gIHRoaXMub24oXCJhYm9ydFwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcImVycm9yXCIsIGNsZWFyVGltZXIpO1xuICB0aGlzLm9uKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBQcm94eSBhbGwgb3RoZXIgcHVibGljIENsaWVudFJlcXVlc3QgbWV0aG9kc1xuW1xuICBcImZsdXNoSGVhZGVyc1wiLCBcImdldEhlYWRlclwiLFxuICBcInNldE5vRGVsYXlcIiwgXCJzZXRTb2NrZXRLZWVwQWxpdmVcIixcbl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFttZXRob2RdKGEsIGIpO1xuICB9O1xufSk7XG5cbi8vIFByb3h5IGFsbCBwdWJsaWMgQ2xpZW50UmVxdWVzdCBwcm9wZXJ0aWVzXG5bXCJhYm9ydGVkXCIsIFwiY29ubmVjdGlvblwiLCBcInNvY2tldFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUsIHByb3BlcnR5LCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFtwcm9wZXJ0eV07IH0sXG4gIH0pO1xufSk7XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9zYW5pdGl6ZU9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAvLyBFbnN1cmUgaGVhZGVycyBhcmUgYWx3YXlzIHByZXNlbnRcbiAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIC8vIFNpbmNlIGh0dHAucmVxdWVzdCB0cmVhdHMgaG9zdCBhcyBhbiBhbGlhcyBvZiBob3N0bmFtZSxcbiAgLy8gYnV0IHRoZSB1cmwgbW9kdWxlIGludGVycHJldHMgaG9zdCBhcyBob3N0bmFtZSBwbHVzIHBvcnQsXG4gIC8vIGVsaW1pbmF0ZSB0aGUgaG9zdCBwcm9wZXJ0eSB0byBhdm9pZCBjb25mdXNpb24uXG4gIGlmIChvcHRpb25zLmhvc3QpIHtcbiAgICAvLyBVc2UgaG9zdG5hbWUgaWYgc2V0LCBiZWNhdXNlIGl0IGhhcyBwcmVjZWRlbmNlXG4gICAgaWYgKCFvcHRpb25zLmhvc3RuYW1lKSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gb3B0aW9ucy5ob3N0O1xuICAgIH1cbiAgICBkZWxldGUgb3B0aW9ucy5ob3N0O1xuICB9XG5cbiAgLy8gQ29tcGxldGUgdGhlIFVSTCBvYmplY3Qgd2hlbiBuZWNlc3NhcnlcbiAgaWYgKCFvcHRpb25zLnBhdGhuYW1lICYmIG9wdGlvbnMucGF0aCkge1xuICAgIHZhciBzZWFyY2hQb3MgPSBvcHRpb25zLnBhdGguaW5kZXhPZihcIj9cIik7XG4gICAgaWYgKHNlYXJjaFBvcyA8IDApIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb3B0aW9ucy5wYXRobmFtZSA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoMCwgc2VhcmNoUG9zKTtcbiAgICAgIG9wdGlvbnMuc2VhcmNoID0gb3B0aW9ucy5wYXRoLnN1YnN0cmluZyhzZWFyY2hQb3MpO1xuICAgIH1cbiAgfVxufTtcblxuXG4vLyBFeGVjdXRlcyB0aGUgbmV4dCBuYXRpdmUgcmVxdWVzdCAoaW5pdGlhbCBvciByZWRpcmVjdClcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wZXJmb3JtUmVxdWVzdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gTG9hZCB0aGUgbmF0aXZlIHByb3RvY29sXG4gIHZhciBwcm90b2NvbCA9IHRoaXMuX29wdGlvbnMucHJvdG9jb2w7XG4gIHZhciBuYXRpdmVQcm90b2NvbCA9IHRoaXMuX29wdGlvbnMubmF0aXZlUHJvdG9jb2xzW3Byb3RvY29sXTtcbiAgaWYgKCFuYXRpdmVQcm90b2NvbCkge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBwcm90b2NvbCBcIiArIHByb3RvY29sKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB1c2UgdGhlIGFnZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3RvY29sXG4gIC8vIChIVFRQIGFuZCBIVFRQUyB1c2UgZGlmZmVyZW50IHR5cGVzIG9mIGFnZW50cylcbiAgaWYgKHRoaXMuX29wdGlvbnMuYWdlbnRzKSB7XG4gICAgdmFyIHNjaGVtZSA9IHByb3RvY29sLnNsaWNlKDAsIC0xKTtcbiAgICB0aGlzLl9vcHRpb25zLmFnZW50ID0gdGhpcy5fb3B0aW9ucy5hZ2VudHNbc2NoZW1lXTtcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgbmF0aXZlIHJlcXVlc3RcbiAgdmFyIHJlcXVlc3QgPSB0aGlzLl9jdXJyZW50UmVxdWVzdCA9XG4gICAgICAgIG5hdGl2ZVByb3RvY29sLnJlcXVlc3QodGhpcy5fb3B0aW9ucywgdGhpcy5fb25OYXRpdmVSZXNwb25zZSk7XG4gIHRoaXMuX2N1cnJlbnRVcmwgPSB1cmwuZm9ybWF0KHRoaXMuX29wdGlvbnMpO1xuXG4gIC8vIFNldCB1cCBldmVudCBoYW5kbGVyc1xuICByZXF1ZXN0Ll9yZWRpcmVjdGFibGUgPSB0aGlzO1xuICBmb3IgKHZhciBlID0gMDsgZSA8IGV2ZW50cy5sZW5ndGg7IGUrKykge1xuICAgIHJlcXVlc3Qub24oZXZlbnRzW2VdLCBldmVudEhhbmRsZXJzW2V2ZW50c1tlXV0pO1xuICB9XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZC5cbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBidWZmZXJzID0gdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzO1xuICAgIChmdW5jdGlvbiB3cml0ZU5leHQoZXJyb3IpIHtcbiAgICAgIC8vIE9ubHkgd3JpdGUgaWYgdGhpcyByZXF1ZXN0IGhhcyBub3QgYmVlbiByZWRpcmVjdGVkIHlldFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChyZXF1ZXN0ID09PSBzZWxmLl9jdXJyZW50UmVxdWVzdCkge1xuICAgICAgICAvLyBSZXBvcnQgYW55IHdyaXRlIGVycm9yc1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdyaXRlIHRoZSBuZXh0IGJ1ZmZlciBpZiB0aGVyZSBhcmUgc3RpbGwgbGVmdFxuICAgICAgICBlbHNlIGlmIChpIDwgYnVmZmVycy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgYnVmZmVyID0gYnVmZmVyc1tpKytdO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKCFyZXF1ZXN0LmZpbmlzaGVkKSB7XG4gICAgICAgICAgICByZXF1ZXN0LndyaXRlKGJ1ZmZlci5kYXRhLCBidWZmZXIuZW5jb2RpbmcsIHdyaXRlTmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEVuZCB0aGUgcmVxdWVzdCBpZiBgZW5kYCBoYXMgYmVlbiBjYWxsZWQgb24gdXNcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fZW5kZWQpIHtcbiAgICAgICAgICByZXF1ZXN0LmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSgpKTtcbiAgfVxufTtcblxuLy8gUHJvY2Vzc2VzIGEgcmVzcG9uc2UgZnJvbSB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3Byb2Nlc3NSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAvLyBTdG9yZSB0aGUgcmVkaXJlY3RlZCByZXNwb25zZVxuICB2YXIgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XG4gIGlmICh0aGlzLl9vcHRpb25zLnRyYWNrUmVkaXJlY3RzKSB7XG4gICAgdGhpcy5fcmVkaXJlY3RzLnB1c2goe1xuICAgICAgdXJsOiB0aGlzLl9jdXJyZW50VXJsLFxuICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBSRkM3MjMxwqc2LjQ6IFRoZSAzeHggKFJlZGlyZWN0aW9uKSBjbGFzcyBvZiBzdGF0dXMgY29kZSBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBmdXJ0aGVyIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbiBieSB0aGUgdXNlciBhZ2VudCBpbiBvcmRlciB0b1xuICAvLyBmdWxmaWxsIHRoZSByZXF1ZXN0LiBJZiBhIExvY2F0aW9uIGhlYWRlciBmaWVsZCBpcyBwcm92aWRlZCxcbiAgLy8gdGhlIHVzZXIgYWdlbnQgTUFZIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3QgaXRzIHJlcXVlc3QgdG8gdGhlIFVSSVxuICAvLyByZWZlcmVuY2VkIGJ5IHRoZSBMb2NhdGlvbiBmaWVsZCB2YWx1ZSxcbiAgLy8gZXZlbiBpZiB0aGUgc3BlY2lmaWMgc3RhdHVzIGNvZGUgaXMgbm90IHVuZGVyc3Rvb2QuXG5cbiAgLy8gSWYgdGhlIHJlc3BvbnNlIGlzIG5vdCBhIHJlZGlyZWN0OyByZXR1cm4gaXQgYXMtaXNcbiAgdmFyIGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVycy5sb2NhdGlvbjtcbiAgaWYgKCFsb2NhdGlvbiB8fCB0aGlzLl9vcHRpb25zLmZvbGxvd1JlZGlyZWN0cyA9PT0gZmFsc2UgfHxcbiAgICAgIHN0YXR1c0NvZGUgPCAzMDAgfHwgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICByZXNwb25zZS5yZXNwb25zZVVybCA9IHRoaXMuX2N1cnJlbnRVcmw7XG4gICAgcmVzcG9uc2UucmVkaXJlY3RzID0gdGhpcy5fcmVkaXJlY3RzO1xuICAgIHRoaXMuZW1pdChcInJlc3BvbnNlXCIsIHJlc3BvbnNlKTtcblxuICAgIC8vIENsZWFuIHVwXG4gICAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzID0gW107XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlIHJlc3BvbnNlIGlzIGEgcmVkaXJlY3QsIHNvIGFib3J0IHRoZSBjdXJyZW50IHJlcXVlc3RcbiAgYWJvcnRSZXF1ZXN0KHRoaXMuX2N1cnJlbnRSZXF1ZXN0KTtcbiAgLy8gRGlzY2FyZCB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXNwb25zZSB0byBhdm9pZCB3YWl0aW5nIGZvciBkYXRhXG4gIHJlc3BvbnNlLmRlc3Ryb3koKTtcblxuICAvLyBSRkM3MjMxwqc2LjQ6IEEgY2xpZW50IFNIT1VMRCBkZXRlY3QgYW5kIGludGVydmVuZVxuICAvLyBpbiBjeWNsaWNhbCByZWRpcmVjdGlvbnMgKGkuZS4sIFwiaW5maW5pdGVcIiByZWRpcmVjdGlvbiBsb29wcykuXG4gIGlmICgrK3RoaXMuX3JlZGlyZWN0Q291bnQgPiB0aGlzLl9vcHRpb25zLm1heFJlZGlyZWN0cykge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBUb29NYW55UmVkaXJlY3RzRXJyb3IoKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU3RvcmUgdGhlIHJlcXVlc3QgaGVhZGVycyBpZiBhcHBsaWNhYmxlXG4gIHZhciByZXF1ZXN0SGVhZGVycztcbiAgdmFyIGJlZm9yZVJlZGlyZWN0ID0gdGhpcy5fb3B0aW9ucy5iZWZvcmVSZWRpcmVjdDtcbiAgaWYgKGJlZm9yZVJlZGlyZWN0KSB7XG4gICAgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIC8vIFRoZSBIb3N0IGhlYWRlciB3YXMgc2V0IGJ5IG5hdGl2ZVByb3RvY29sLnJlcXVlc3RcbiAgICAgIEhvc3Q6IHJlc3BvbnNlLnJlcS5nZXRIZWFkZXIoXCJob3N0XCIpLFxuICAgIH0sIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gIH1cblxuICAvLyBSRkM3MjMxwqc2LjQ6IEF1dG9tYXRpYyByZWRpcmVjdGlvbiBuZWVkcyB0byBkb25lIHdpdGhcbiAgLy8gY2FyZSBmb3IgbWV0aG9kcyBub3Qga25vd24gdG8gYmUgc2FmZSwgW+KApl1cbiAgLy8gUkZDNzIzMcKnNi40LjLigJMzOiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBhIHVzZXIgYWdlbnQgTUFZIGNoYW5nZVxuICAvLyB0aGUgcmVxdWVzdCBtZXRob2QgZnJvbSBQT1NUIHRvIEdFVCBmb3IgdGhlIHN1YnNlcXVlbnQgcmVxdWVzdC5cbiAgdmFyIG1ldGhvZCA9IHRoaXMuX29wdGlvbnMubWV0aG9kO1xuICBpZiAoKHN0YXR1c0NvZGUgPT09IDMwMSB8fCBzdGF0dXNDb2RlID09PSAzMDIpICYmIHRoaXMuX29wdGlvbnMubWV0aG9kID09PSBcIlBPU1RcIiB8fFxuICAgICAgLy8gUkZDNzIzMcKnNi40LjQ6IFRoZSAzMDMgKFNlZSBPdGhlcikgc3RhdHVzIGNvZGUgaW5kaWNhdGVzIHRoYXRcbiAgICAgIC8vIHRoZSBzZXJ2ZXIgaXMgcmVkaXJlY3RpbmcgdGhlIHVzZXIgYWdlbnQgdG8gYSBkaWZmZXJlbnQgcmVzb3VyY2UgW+KApl1cbiAgICAgIC8vIEEgdXNlciBhZ2VudCBjYW4gcGVyZm9ybSBhIHJldHJpZXZhbCByZXF1ZXN0IHRhcmdldGluZyB0aGF0IFVSSVxuICAgICAgLy8gKGEgR0VUIG9yIEhFQUQgcmVxdWVzdCBpZiB1c2luZyBIVFRQKSBb4oCmXVxuICAgICAgKHN0YXR1c0NvZGUgPT09IDMwMykgJiYgIS9eKD86R0VUfEhFQUQpJC8udGVzdCh0aGlzLl9vcHRpb25zLm1ldGhvZCkpIHtcbiAgICB0aGlzLl9vcHRpb25zLm1ldGhvZCA9IFwiR0VUXCI7XG4gICAgLy8gRHJvcCBhIHBvc3NpYmxlIGVudGl0eSBhbmQgaGVhZGVycyByZWxhdGVkIHRvIGl0XG4gICAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzID0gW107XG4gICAgcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eY29udGVudC0vaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIERyb3AgdGhlIEhvc3QgaGVhZGVyLCBhcyB0aGUgcmVkaXJlY3QgbWlnaHQgbGVhZCB0byBhIGRpZmZlcmVudCBob3N0XG4gIHZhciBjdXJyZW50SG9zdEhlYWRlciA9IHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmhvc3QkL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG5cbiAgLy8gSWYgdGhlIHJlZGlyZWN0IGlzIHJlbGF0aXZlLCBjYXJyeSBvdmVyIHRoZSBob3N0IG9mIHRoZSBsYXN0IHJlcXVlc3RcbiAgdmFyIGN1cnJlbnRVcmxQYXJ0cyA9IHVybC5wYXJzZSh0aGlzLl9jdXJyZW50VXJsKTtcbiAgdmFyIGN1cnJlbnRIb3N0ID0gY3VycmVudEhvc3RIZWFkZXIgfHwgY3VycmVudFVybFBhcnRzLmhvc3Q7XG4gIHZhciBjdXJyZW50VXJsID0gL15cXHcrOi8udGVzdChsb2NhdGlvbikgPyB0aGlzLl9jdXJyZW50VXJsIDpcbiAgICB1cmwuZm9ybWF0KE9iamVjdC5hc3NpZ24oY3VycmVudFVybFBhcnRzLCB7IGhvc3Q6IGN1cnJlbnRIb3N0IH0pKTtcblxuICAvLyBEZXRlcm1pbmUgdGhlIFVSTCBvZiB0aGUgcmVkaXJlY3Rpb25cbiAgdmFyIHJlZGlyZWN0VXJsO1xuICB0cnkge1xuICAgIHJlZGlyZWN0VXJsID0gdXJsLnJlc29sdmUoY3VycmVudFVybCwgbG9jYXRpb24pO1xuICB9XG4gIGNhdGNoIChjYXVzZSkge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBSZWRpcmVjdGlvbkVycm9yKGNhdXNlKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgZGVidWcoXCJyZWRpcmVjdGluZyB0b1wiLCByZWRpcmVjdFVybCk7XG4gIHRoaXMuX2lzUmVkaXJlY3QgPSB0cnVlO1xuICB2YXIgcmVkaXJlY3RVcmxQYXJ0cyA9IHVybC5wYXJzZShyZWRpcmVjdFVybCk7XG4gIE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgcmVkaXJlY3RVcmxQYXJ0cyk7XG5cbiAgLy8gRHJvcCBjb25maWRlbnRpYWwgaGVhZGVycyB3aGVuIHJlZGlyZWN0aW5nIHRvIGEgbGVzcyBzZWN1cmUgcHJvdG9jb2xcbiAgLy8gb3IgdG8gYSBkaWZmZXJlbnQgZG9tYWluIHRoYXQgaXMgbm90IGEgc3VwZXJkb21haW5cbiAgaWYgKHJlZGlyZWN0VXJsUGFydHMucHJvdG9jb2wgIT09IGN1cnJlbnRVcmxQYXJ0cy5wcm90b2NvbCAmJlxuICAgICByZWRpcmVjdFVybFBhcnRzLnByb3RvY29sICE9PSBcImh0dHBzOlwiIHx8XG4gICAgIHJlZGlyZWN0VXJsUGFydHMuaG9zdCAhPT0gY3VycmVudEhvc3QgJiZcbiAgICAgIWlzU3ViZG9tYWluKHJlZGlyZWN0VXJsUGFydHMuaG9zdCwgY3VycmVudEhvc3QpKSB7XG4gICAgcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eKD86YXV0aG9yaXphdGlvbnxjb29raWUpJC9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgLy8gRXZhbHVhdGUgdGhlIGJlZm9yZVJlZGlyZWN0IGNhbGxiYWNrXG4gIGlmICh0eXBlb2YgYmVmb3JlUmVkaXJlY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciByZXNwb25zZURldGFpbHMgPSB7XG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICB9O1xuICAgIHZhciByZXF1ZXN0RGV0YWlscyA9IHtcbiAgICAgIHVybDogY3VycmVudFVybCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgYmVmb3JlUmVkaXJlY3QodGhpcy5fb3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzLCByZXF1ZXN0RGV0YWlscyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3Nhbml0aXplT3B0aW9ucyh0aGlzLl9vcHRpb25zKTtcbiAgfVxuXG4gIC8vIFBlcmZvcm0gdGhlIHJlZGlyZWN0ZWQgcmVxdWVzdFxuICB0cnkge1xuICAgIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG4gIH1cbiAgY2F0Y2ggKGNhdXNlKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IFJlZGlyZWN0aW9uRXJyb3IoY2F1c2UpKTtcbiAgfVxufTtcblxuLy8gV3JhcHMgdGhlIGtleS92YWx1ZSBvYmplY3Qgb2YgcHJvdG9jb2xzIHdpdGggcmVkaXJlY3QgZnVuY3Rpb25hbGl0eVxuZnVuY3Rpb24gd3JhcChwcm90b2NvbHMpIHtcbiAgLy8gRGVmYXVsdCBzZXR0aW5nc1xuICB2YXIgZXhwb3J0cyA9IHtcbiAgICBtYXhSZWRpcmVjdHM6IDIxLFxuICAgIG1heEJvZHlMZW5ndGg6IDEwICogMTAyNCAqIDEwMjQsXG4gIH07XG5cbiAgLy8gV3JhcCBlYWNoIHByb3RvY29sXG4gIHZhciBuYXRpdmVQcm90b2NvbHMgPSB7fTtcbiAgT2JqZWN0LmtleXMocHJvdG9jb2xzKS5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlbWUpIHtcbiAgICB2YXIgcHJvdG9jb2wgPSBzY2hlbWUgKyBcIjpcIjtcbiAgICB2YXIgbmF0aXZlUHJvdG9jb2wgPSBuYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdID0gcHJvdG9jb2xzW3NjaGVtZV07XG4gICAgdmFyIHdyYXBwZWRQcm90b2NvbCA9IGV4cG9ydHNbc2NoZW1lXSA9IE9iamVjdC5jcmVhdGUobmF0aXZlUHJvdG9jb2wpO1xuXG4gICAgLy8gRXhlY3V0ZXMgYSByZXF1ZXN0LCBmb2xsb3dpbmcgcmVkaXJlY3RzXG4gICAgZnVuY3Rpb24gcmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgIC8vIFBhcnNlIHBhcmFtZXRlcnNcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdmFyIHVybFN0ciA9IGlucHV0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlucHV0ID0gdXJsVG9PcHRpb25zKG5ldyBVUkwodXJsU3RyKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgaW5wdXQgPSB1cmwucGFyc2UodXJsU3RyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoVVJMICYmIChpbnB1dCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgICAgaW5wdXQgPSB1cmxUb09wdGlvbnMoaW5wdXQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IGlucHV0O1xuICAgICAgICBpbnB1dCA9IHsgcHJvdG9jb2w6IHByb3RvY29sIH07XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbWF4UmVkaXJlY3RzOiBleHBvcnRzLm1heFJlZGlyZWN0cyxcbiAgICAgICAgbWF4Qm9keUxlbmd0aDogZXhwb3J0cy5tYXhCb2R5TGVuZ3RoLFxuICAgICAgfSwgaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5uYXRpdmVQcm90b2NvbHMgPSBuYXRpdmVQcm90b2NvbHM7XG5cbiAgICAgIGFzc2VydC5lcXVhbChvcHRpb25zLnByb3RvY29sLCBwcm90b2NvbCwgXCJwcm90b2NvbCBtaXNtYXRjaFwiKTtcbiAgICAgIGRlYnVnKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBuZXcgUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZXMgYSBHRVQgcmVxdWVzdCwgZm9sbG93aW5nIHJlZGlyZWN0c1xuICAgIGZ1bmN0aW9uIGdldChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgIHZhciB3cmFwcGVkUmVxdWVzdCA9IHdyYXBwZWRQcm90b2NvbC5yZXF1ZXN0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICB3cmFwcGVkUmVxdWVzdC5lbmQoKTtcbiAgICAgIHJldHVybiB3cmFwcGVkUmVxdWVzdDtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgdGhlIHByb3BlcnRpZXMgb24gdGhlIHdyYXBwZWQgcHJvdG9jb2xcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3cmFwcGVkUHJvdG9jb2wsIHtcbiAgICAgIHJlcXVlc3Q6IHsgdmFsdWU6IHJlcXVlc3QsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICAgIGdldDogeyB2YWx1ZTogZ2V0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZXhwb3J0cztcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIG5vb3AoKSB7IC8qIGVtcHR5ICovIH1cblxuLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL3VybC5qc1xuZnVuY3Rpb24gdXJsVG9PcHRpb25zKHVybE9iamVjdCkge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBwcm90b2NvbDogdXJsT2JqZWN0LnByb3RvY29sLFxuICAgIGhvc3RuYW1lOiB1cmxPYmplY3QuaG9zdG5hbWUuc3RhcnRzV2l0aChcIltcIikgP1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHVybE9iamVjdC5ob3N0bmFtZS5zbGljZSgxLCAtMSkgOlxuICAgICAgdXJsT2JqZWN0Lmhvc3RuYW1lLFxuICAgIGhhc2g6IHVybE9iamVjdC5oYXNoLFxuICAgIHNlYXJjaDogdXJsT2JqZWN0LnNlYXJjaCxcbiAgICBwYXRobmFtZTogdXJsT2JqZWN0LnBhdGhuYW1lLFxuICAgIHBhdGg6IHVybE9iamVjdC5wYXRobmFtZSArIHVybE9iamVjdC5zZWFyY2gsXG4gICAgaHJlZjogdXJsT2JqZWN0LmhyZWYsXG4gIH07XG4gIGlmICh1cmxPYmplY3QucG9ydCAhPT0gXCJcIikge1xuICAgIG9wdGlvbnMucG9ydCA9IE51bWJlcih1cmxPYmplY3QucG9ydCk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU1hdGNoaW5nSGVhZGVycyhyZWdleCwgaGVhZGVycykge1xuICB2YXIgbGFzdFZhbHVlO1xuICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgIGlmIChyZWdleC50ZXN0KGhlYWRlcikpIHtcbiAgICAgIGxhc3RWYWx1ZSA9IGhlYWRlcnNbaGVhZGVyXTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG4gIHJldHVybiAobGFzdFZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBsYXN0VmFsdWUgPT09IFwidW5kZWZpbmVkXCIpID9cbiAgICB1bmRlZmluZWQgOiBTdHJpbmcobGFzdFZhbHVlKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLCBkZWZhdWx0TWVzc2FnZSkge1xuICBmdW5jdGlvbiBDdXN0b21FcnJvcihjYXVzZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIGlmICghY2F1c2UpIHtcbiAgICAgIHRoaXMubWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlICsgXCI6IFwiICsgY2F1c2UubWVzc2FnZTtcbiAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTtcbiAgICB9XG4gIH1cbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEN1c3RvbUVycm9yO1xuICBDdXN0b21FcnJvci5wcm90b3R5cGUubmFtZSA9IFwiRXJyb3IgW1wiICsgY29kZSArIFwiXVwiO1xuICBDdXN0b21FcnJvci5wcm90b3R5cGUuY29kZSA9IGNvZGU7XG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn1cblxuZnVuY3Rpb24gYWJvcnRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgZm9yICh2YXIgZSA9IDA7IGUgPCBldmVudHMubGVuZ3RoOyBlKyspIHtcbiAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKGV2ZW50c1tlXSwgZXZlbnRIYW5kbGVyc1tldmVudHNbZV1dKTtcbiAgfVxuICByZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgbm9vcCk7XG4gIHJlcXVlc3QuYWJvcnQoKTtcbn1cblxuZnVuY3Rpb24gaXNTdWJkb21haW4oc3ViZG9tYWluLCBkb21haW4pIHtcbiAgY29uc3QgZG90ID0gc3ViZG9tYWluLmxlbmd0aCAtIGRvbWFpbi5sZW5ndGggLSAxO1xuICByZXR1cm4gZG90ID4gMCAmJiBzdWJkb21haW5bZG90XSA9PT0gXCIuXCIgJiYgc3ViZG9tYWluLmVuZHNXaXRoKGRvbWFpbik7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndikgPT4ge1xuXHRhcmd2ID0gYXJndiB8fCBwcm9jZXNzLmFyZ3Y7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zICE9PSAtMSAmJiAodGVybWluYXRvclBvcyA9PT0gLTEgPyB0cnVlIDogcG9zIDwgdGVybWluYXRvclBvcyk7XG59O1xuIiwiLyohXG4gKiBtaW1lLWRiXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1LTIwMjIgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RiLmpzb24nKVxuIiwiLyohXG4gKiBtaW1lLXR5cGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGIgPSByZXF1aXJlKCdtaW1lLWRiJylcbnZhciBleHRuYW1lID0gcmVxdWlyZSgncGF0aCcpLmV4dG5hbWVcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgRVhUUkFDVF9UWVBFX1JFR0VYUCA9IC9eXFxzKihbXjtcXHNdKikoPzo7fFxcc3wkKS9cbnZhciBURVhUX1RZUEVfUkVHRVhQID0gL150ZXh0XFwvL2lcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNoYXJzZXQgPSBjaGFyc2V0XG5leHBvcnRzLmNoYXJzZXRzID0geyBsb29rdXA6IGNoYXJzZXQgfVxuZXhwb3J0cy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG5leHBvcnRzLmV4dGVuc2lvbiA9IGV4dGVuc2lvblxuZXhwb3J0cy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuZXhwb3J0cy5sb29rdXAgPSBsb29rdXBcbmV4cG9ydHMudHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8vIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zL3R5cGVzIG1hcHNcbnBvcHVsYXRlTWFwcyhleHBvcnRzLmV4dGVuc2lvbnMsIGV4cG9ydHMudHlwZXMpXG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjaGFyc2V0ICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcbiAgdmFyIG1pbWUgPSBtYXRjaCAmJiBkYlttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmIChtaW1lICYmIG1pbWUuY2hhcnNldCkge1xuICAgIHJldHVybiBtaW1lLmNoYXJzZXRcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdGV4dC8qIHRvIHV0Zi04XG4gIGlmIChtYXRjaCAmJiBURVhUX1RZUEVfUkVHRVhQLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bGwgQ29udGVudC1UeXBlIGhlYWRlciBnaXZlbiBhIE1JTUUgdHlwZSBvciBleHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY29udGVudFR5cGUgKHN0cikge1xuICAvLyBUT0RPOiBzaG91bGQgdGhpcyBldmVuIGJlIGluIHRoaXMgbW9kdWxlP1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIG1pbWUgPSBzdHIuaW5kZXhPZignLycpID09PSAtMVxuICAgID8gZXhwb3J0cy5sb29rdXAoc3RyKVxuICAgIDogc3RyXG5cbiAgaWYgKCFtaW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgY29udGVudC10eXBlIG9yIG90aGVyIG1vZHVsZVxuICBpZiAobWltZS5pbmRleE9mKCdjaGFyc2V0JykgPT09IC0xKSB7XG4gICAgdmFyIGNoYXJzZXQgPSBleHBvcnRzLmNoYXJzZXQobWltZSlcbiAgICBpZiAoY2hhcnNldCkgbWltZSArPSAnOyBjaGFyc2V0PScgKyBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBtaW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbiAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG5cbiAgLy8gZ2V0IGV4dGVuc2lvbnNcbiAgdmFyIGV4dHMgPSBtYXRjaCAmJiBleHBvcnRzLmV4dGVuc2lvbnNbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXh0c1swXVxufVxuXG4vKipcbiAqIExvb2t1cCB0aGUgTUlNRSB0eXBlIGZvciBhIGZpbGUgcGF0aC9leHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGxvb2t1cCAocGF0aCkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBnZXQgdGhlIGV4dGVuc2lvbiAoXCJleHRcIiBvciBcIi5leHRcIiBvciBmdWxsIHBhdGgpXG4gIHZhciBleHRlbnNpb24gPSBleHRuYW1lKCd4LicgKyBwYXRoKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnN1YnN0cigxKVxuXG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy50eXBlc1tleHRlbnNpb25dIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMgYW5kIHR5cGVzIG1hcHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvcHVsYXRlTWFwcyAoZXh0ZW5zaW9ucywgdHlwZXMpIHtcbiAgLy8gc291cmNlIHByZWZlcmVuY2UgKGxlYXN0IC0+IG1vc3QpXG4gIHZhciBwcmVmZXJlbmNlID0gWyduZ2lueCcsICdhcGFjaGUnLCB1bmRlZmluZWQsICdpYW5hJ11cblxuICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoTWltZVR5cGUgKHR5cGUpIHtcbiAgICB2YXIgbWltZSA9IGRiW3R5cGVdXG4gICAgdmFyIGV4dHMgPSBtaW1lLmV4dGVuc2lvbnNcblxuICAgIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG1pbWUgLT4gZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnNbdHlwZV0gPSBleHRzXG5cbiAgICAvLyBleHRlbnNpb24gLT4gbWltZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dHNbaV1cblxuICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0pIHtcbiAgICAgICAgdmFyIGZyb20gPSBwcmVmZXJlbmNlLmluZGV4T2YoZGJbdHlwZXNbZXh0ZW5zaW9uXV0uc291cmNlKVxuICAgICAgICB2YXIgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpXG5cbiAgICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0gIT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nICYmXG4gICAgICAgICAgKGZyb20gPiB0byB8fCAoZnJvbSA9PT0gdG8gJiYgdHlwZXNbZXh0ZW5zaW9uXS5zdWJzdHIoMCwgMTIpID09PSAnYXBwbGljYXRpb24vJykpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgcmVtYXBwaW5nXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgICB0eXBlc1tleHRlbnNpb25dID0gdHlwZVxuICAgIH1cbiAgfSlcbn1cbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5sZXQgZm9yY2VDb2xvcjtcbmlmIChoYXNGbGFnKCduby1jb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ25vLWNvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJykpIHtcblx0Zm9yY2VDb2xvciA9IGZhbHNlO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gdHJ1ZTtcbn1cbmlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRmb3JjZUNvbG9yID0gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCB8fCBwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzXG5cdH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3Ioc3RyZWFtKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSBmYWxzZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZICYmIGZvcmNlQ29sb3IgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgPyAxIDogMDtcblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIE5vZGUuanMgNy41LjAgaXMgdGhlIGZpcnN0IHZlcnNpb24gb2YgTm9kZS5qcyB0byBpbmNsdWRlIGEgcGF0Y2ggdG9cblx0XHQvLyBsaWJ1diB0aGF0IGVuYWJsZXMgMjU2IGNvbG9yIG91dHB1dCBvbiBXaW5kb3dzLiBBbnl0aGluZyBlYXJsaWVyIGFuZCBpdFxuXHRcdC8vIHdvbid0IHdvcmsuIEhvd2V2ZXIsIGhlcmUgd2UgdGFyZ2V0IE5vZGUuanMgOCBhdCBtaW5pbXVtIGFzIGl0IGlzIGFuIExUU1xuXHRcdC8vIHJlbGVhc2UsIGFuZCBOb2RlLmpzIDcgaXMgbm90LiBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzXG5cdFx0Ly8gcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2Vcblx0XHQvLyB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpWzBdKSA+PSA4ICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0pO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZG91dCksXG5cdHN0ZGVycjogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3RkZXJyKVxufTtcbiIsIihmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgZGVmaW5pdGlvbikge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShkZWZpbml0aW9uKTtcbiAgZWxzZSBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpO1xufSkoJ3VybGpvaW4nLCB0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICAgIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICAgIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dDtcblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xuICB9O1xuXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImFzc2VydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm9zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3RyZWFtXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInR0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmxcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXRpbFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ6bGliXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjE3NSk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsInBhcmFsbGVsIiwic2VyaWFsIiwic2VyaWFsT3JkZXJlZCIsImNsZWFuIiwia2V5Iiwiam9icyIsInN0YXRlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJiaW5kIiwiZGVmZXIiLCJjYWxsYmFjayIsImlzQXN5bmMiLCJlcnIiLCJyZXN1bHQiLCJmbiIsIm5leHRUaWNrIiwic2V0SW1tZWRpYXRlIiwicHJvY2VzcyIsInNldFRpbWVvdXQiLCJhc3luYyIsImFib3J0IiwibGlzdCIsIml0ZXJhdG9yIiwiaW5kZXgiLCJpdGVtIiwiYWJvcnRlciIsImxlbmd0aCIsInJ1bkpvYiIsImVycm9yIiwib3V0cHV0IiwicmVzdWx0cyIsInNvcnRNZXRob2QiLCJpc05hbWVkTGlzdCIsIkFycmF5IiwiaXNBcnJheSIsImluaXRTdGF0ZSIsImtleWVkTGlzdCIsInNpemUiLCJzb3J0IiwiYSIsImIiLCJpdGVyYXRlIiwidGVybWluYXRvciIsImFzY2VuZGluZyIsIml0ZXJhdG9ySGFuZGxlciIsImRlc2NlbmRpbmciLCJ1dGlscyIsInNldHRsZSIsImJ1aWxkRnVsbFBhdGgiLCJidWlsZFVSTCIsImh0dHAiLCJodHRwcyIsImh0dHBGb2xsb3ciLCJodHRwc0ZvbGxvdyIsInVybCIsInpsaWIiLCJWRVJTSU9OIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJBeGlvc0Vycm9yIiwiQ2FuY2VsZWRFcnJvciIsImlzSHR0cHMiLCJzdXBwb3J0ZWRQcm90b2NvbHMiLCJzZXRQcm94eSIsIm9wdGlvbnMiLCJwcm94eSIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJob3N0IiwicG9ydCIsInBhdGgiLCJhdXRoIiwiYmFzZTY0IiwiQnVmZmVyIiwiZnJvbSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ0b1N0cmluZyIsImhlYWRlcnMiLCJiZWZvcmVSZWRpcmVjdCIsInJlZGlyZWN0aW9uIiwiaHJlZiIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlUHJvbWlzZSIsInJlamVjdFByb21pc2UiLCJvbkNhbmNlbGVkIiwiZG9uZSIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVzb2x2ZSIsInZhbHVlIiwicmVqZWN0ZWQiLCJyZWplY3QiLCJkYXRhIiwiaGVhZGVyTmFtZXMiLCJuYW1lIiwidG9Mb3dlckNhc2UiLCJpc0Zvcm1EYXRhIiwiaXNGdW5jdGlvbiIsImdldEhlYWRlcnMiLCJhc3NpZ24iLCJpc1N0cmVhbSIsImlzQnVmZmVyIiwiaXNBcnJheUJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJpc1N0cmluZyIsIkVSUl9CQURfUkVRVUVTVCIsIm1heEJvZHlMZW5ndGgiLCJ1bmRlZmluZWQiLCJmdWxsUGF0aCIsImJhc2VVUkwiLCJwYXJzZWQiLCJwYXJzZSIsInByb3RvY29sIiwiaW5kZXhPZiIsInVybEF1dGgiLCJzcGxpdCIsImF1dGhvcml6YXRpb24iLCJpc0h0dHBzUmVxdWVzdCIsInRlc3QiLCJhZ2VudCIsImh0dHBzQWdlbnQiLCJodHRwQWdlbnQiLCJwYXJhbXMiLCJwYXJhbXNTZXJpYWxpemVyIiwicmVwbGFjZSIsImN1c3RvbUVyciIsIkVycm9yIiwibWVzc2FnZSIsImV4aXN0cyIsIm1ldGhvZCIsInRvVXBwZXJDYXNlIiwiYWdlbnRzIiwic29ja2V0UGF0aCIsInRyYW5zcG9ydCIsInByb3h5RW52Iiwic2xpY2UiLCJwcm94eVVybCIsImVudiIsInBhcnNlZFByb3h5VXJsIiwibm9Qcm94eUVudiIsIm5vX3Byb3h5IiwiTk9fUFJPWFkiLCJzaG91bGRQcm94eSIsIm1hcCIsInMiLCJ0cmltIiwic29tZSIsInByb3h5RWxlbWVudCIsInN1YnN0ciIsInByb3h5VXJsQXV0aCIsImlzSHR0cHNQcm94eSIsIm1heFJlZGlyZWN0cyIsImluc2VjdXJlSFRUUFBhcnNlciIsInJlcSIsInJlcXVlc3QiLCJyZXMiLCJhYm9ydGVkIiwic3RyZWFtIiwibGFzdFJlcXVlc3QiLCJzdGF0dXNDb2RlIiwiZGVjb21wcmVzcyIsInBpcGUiLCJjcmVhdGVVbnppcCIsInJlc3BvbnNlIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInN0YXR1c01lc3NhZ2UiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZUJ1ZmZlciIsInRvdGFsUmVzcG9uc2VCeXRlcyIsIm9uIiwiY2h1bmsiLCJwdXNoIiwibWF4Q29udGVudExlbmd0aCIsImRlc3Ryb3kiLCJFUlJfQkFEX1JFU1BPTlNFIiwicmVzcG9uc2VEYXRhIiwiY29uY2F0IiwicmVzcG9uc2VFbmNvZGluZyIsInN0cmlwQk9NIiwic29ja2V0Iiwic2V0S2VlcEFsaXZlIiwidGltZW91dCIsInBhcnNlSW50IiwiaXNOYU4iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsInRyYW5zaXRpb25hbCIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJFVElNRURPVVQiLCJFQ09OTkFCT1JURUQiLCJjYW5jZWwiLCJ0eXBlIiwic3Vic2NyaWJlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImVuZCIsImNvb2tpZXMiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJwYXJzZVByb3RvY29sIiwicmVxdWVzdERhdGEiLCJyZXF1ZXN0SGVhZGVycyIsImlzU3RhbmRhcmRCcm93c2VyRW52IiwiWE1MSHR0cFJlcXVlc3QiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkF1dGhvcml6YXRpb24iLCJidG9hIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwieHNyZkNvb2tpZU5hbWUiLCJyZWFkIiwieHNyZkhlYWRlck5hbWUiLCJ2YWwiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiaXNVbmRlZmluZWQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkIiwic2VuZCIsIkF4aW9zIiwibWVyZ2VDb25maWciLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImNvbnRleHQiLCJpbnN0YW5jZSIsInByb3RvdHlwZSIsImV4dGVuZCIsImNyZWF0ZSIsImluc3RhbmNlQ29uZmlnIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsInRvRm9ybURhdGEiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImlzQXhpb3NFcnJvciIsImV4ZWN1dG9yIiwiVHlwZUVycm9yIiwicHJvbWlzZSIsInRva2VuIiwidGhlbiIsIl9saXN0ZW5lcnMiLCJpIiwibCIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJyZWFzb24iLCJ0aHJvd0lmUmVxdWVzdGVkIiwibGlzdGVuZXIiLCJzcGxpY2UiLCJzb3VyY2UiLCJjIiwiY2FsbCIsIkVSUl9DQU5DRUxFRCIsImluaGVyaXRzIiwiX19DQU5DRUxfXyIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvciIsInZhbGlkYXRvcnMiLCJkZWZhdWx0cyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiYXNzZXJ0T3B0aW9ucyIsInNpbGVudEpTT05QYXJzaW5nIiwiYm9vbGVhbiIsImZvcmNlZEpTT05QYXJzaW5nIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInJ1bldoZW4iLCJzeW5jaHJvbm91cyIsInVuc2hpZnQiLCJmdWxmaWxsZWQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJjaGFpbiIsImFwcGx5Iiwic2hpZnQiLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJjb2RlIiwidG9KU09OIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGFjayIsImRlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwidG9GbGF0T2JqZWN0Iiwib2JqIiwiaGFuZGxlcnMiLCJ1c2UiLCJlamVjdCIsImlkIiwiaCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsInJlcXVlc3RlZFVSTCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidHJhbnNmb3JtUmVxdWVzdCIsIm1lcmdlIiwiY29tbW9uIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlc3BvbnNlIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsInRhcmdldCIsImlzUGxhaW5PYmplY3QiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwicHJvcCIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJjb25maWdWYWx1ZSIsInZhbGlkYXRlU3RhdHVzIiwiTWF0aCIsImZsb29yIiwiZm5zIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJidWZmZXIiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzRmlsZUxpc3QiLCJpc09iamVjdFBheWxvYWQiLCJpc09iamVjdCIsImNvbnRlbnRUeXBlIiwiX0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJyYXdWYWx1ZSIsInBhcnNlciIsImVuY29kZXIiLCJKU09OIiwiZSIsInN0cmluZ2lmeSIsInN0cmluZ2lmeVNhZmVseSIsInN0cmljdEpTT05QYXJzaW5nIiwidGhpc0FyZyIsImFyZ3MiLCJhcmd1bWVudHMiLCJlbmNvZGUiLCJzZXJpYWxpemVkUGFyYW1zIiwicGFydHMiLCJ2IiwiaXNEYXRlIiwidG9JU09TdHJpbmciLCJqb2luIiwiaGFzaG1hcmtJbmRleCIsInJlbGF0aXZlVVJMIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiaXNOdW1iZXIiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJkb2N1bWVudCIsIm1hdGNoIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93IiwicGF5bG9hZCIsIm9yaWdpblVSTCIsIm1zaWUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJyZXNvbHZlVVJMIiwic2V0QXR0cmlidXRlIiwic2VhcmNoIiwiaGFzaCIsInBhdGhuYW1lIiwiY2hhckF0Iiwid2luZG93IiwicmVxdWVzdFVSTCIsIm5vcm1hbGl6ZWROYW1lIiwiaWdub3JlRHVwbGljYXRlT2YiLCJsaW5lIiwiZXhlYyIsImFyciIsImZvcm1EYXRhIiwiY29udmVydFZhbHVlIiwiaXNUeXBlZEFycmF5IiwiQmxvYiIsImJ1aWxkIiwicGFyZW50S2V5IiwiZnVsbEtleSIsImVuZHNXaXRoIiwidG9BcnJheSIsImVsIiwiYXBwZW5kIiwicG9wIiwidGhpbmciLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkVSUl9CQURfT1BUSU9OIiwiY2FjaGUiLCJraW5kT2YiLCJzdHIiLCJraW5kT2ZUZXN0IiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsIlR5cGVkQXJyYXkiLCJjb25zdHJ1Y3RvciIsInBhdHRlcm4iLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsInByb2R1Y3QiLCJhc3NpZ25WYWx1ZSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0Iiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwic291cmNlT2JqIiwiZGVzdE9iaiIsImZpbHRlciIsIm1lcmdlZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsIlN0cmluZyIsImxhc3RJbmRleCIsIkNvbWJpbmVkU3RyZWFtIiwidXRpbCIsInBhcnNlVXJsIiwiZnMiLCJTdHJlYW0iLCJtaW1lIiwiYXN5bmNraXQiLCJwb3B1bGF0ZSIsIm9wdGlvbiIsIl9vdmVyaGVhZExlbmd0aCIsIl92YWx1ZUxlbmd0aCIsIl92YWx1ZXNUb01lYXN1cmUiLCJMSU5FX0JSRUFLIiwiZmllbGQiLCJmaWxlbmFtZSIsIl9lcnJvciIsImhlYWRlciIsIl9tdWx0aVBhcnRIZWFkZXIiLCJmb290ZXIiLCJfbXVsdGlQYXJ0Rm9vdGVyIiwiX3RyYWNrTGVuZ3RoIiwidmFsdWVMZW5ndGgiLCJrbm93bkxlbmd0aCIsImJ5dGVMZW5ndGgiLCJyZWFkYWJsZSIsIl9sZW5ndGhSZXRyaWV2ZXIiLCJJbmZpbml0eSIsInN0YXJ0Iiwic3RhdCIsImZpbGVTaXplIiwicGF1c2UiLCJyZXN1bWUiLCJjb250ZW50RGlzcG9zaXRpb24iLCJfZ2V0Q29udGVudERpc3Bvc2l0aW9uIiwiX2dldENvbnRlbnRUeXBlIiwiY29udGVudHMiLCJnZXRCb3VuZGFyeSIsImZpbGVwYXRoIiwibm9ybWFsaXplIiwiYmFzZW5hbWUiLCJjbGllbnQiLCJfaHR0cE1lc3NhZ2UiLCJsb29rdXAiLCJuZXh0IiwiX3N0cmVhbXMiLCJfbGFzdEJvdW5kYXJ5IiwidXNlckhlYWRlcnMiLCJmb3JtSGVhZGVycyIsInNldEJvdW5kYXJ5IiwiYm91bmRhcnkiLCJfYm91bmRhcnkiLCJfZ2VuZXJhdGVCb3VuZGFyeSIsImdldEJ1ZmZlciIsImRhdGFCdWZmZXIiLCJhbGxvYyIsImxlbiIsInN1YnN0cmluZyIsInJhbmRvbSIsImdldExlbmd0aFN5bmMiLCJoYXNLbm93bkxlbmd0aCIsImdldExlbmd0aCIsImNiIiwidmFsdWVzIiwic3VibWl0Iiwic2V0SGVhZGVyIiwib25SZXNwb25zZSIsInJlc3BvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJlbWl0IiwiZHN0Iiwic3JjIiwiX19hc3NpZ24iLCJyZXF1ZXN0XzEiLCJtYWlsTGlzdHNNZW1iZXJzIiwibWFpbExpc3RNZW1iZXJzXzEiLCJkb21haW5DcmVkZW50aWFsc0NsaWVudCIsImRvbWFpbnNDcmVkZW50aWFsc18xIiwiZG9tYWluVGVtcGxhdGVzQ2xpZW50IiwiZG9tYWluc1RlbXBsYXRlc18xIiwiZG9tYWluVGFnc0NsaWVudCIsImRvbWFpbnNUYWdzXzEiLCJtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQiLCJtdWx0aXBsZVZhbGlkYXRpb25fMSIsImRvbWFpbnMiLCJkb21haW5zXzEiLCJ3ZWJob29rcyIsIndlYmhvb2tzXzEiLCJldmVudHMiLCJldmVudHNfMSIsInN0YXRzIiwic3RhdHNfMSIsInN1cHByZXNzaW9ucyIsInN1cHByZXNzaW9uc18xIiwibWVzc2FnZXMiLCJtZXNzYWdlc18xIiwicm91dGVzIiwicm91dGVzXzEiLCJpcHMiLCJpcHNfMSIsImlwX3Bvb2xzIiwiaXBfcG9vbHNfMSIsImxpc3RzIiwibGlzdHNfMSIsInZhbGlkYXRlIiwidmFsaWRhdGVfMSIsInJlY2VpdmluZyIsInNlbmRpbmciLCJyZXF1aXJlX3RscyIsInNraXBfdmVyaWZpY2F0aW9uIiwid2lsZGNhcmQiLCJzcGFtX2FjdGlvbiIsImNyZWF0ZWRfYXQiLCJzbXRwX3Bhc3N3b3JkIiwic210cF9sb2dpbiIsInJlY2VpdmluZ19kbnNfcmVjb3JkcyIsInNlbmRpbmdfZG5zX3JlY29yZHMiLCJkb21haW5DcmVkZW50aWFscyIsImRvbWFpblRlbXBsYXRlcyIsImRvbWFpblRhZ3MiLCJEb21haW5DbGllbnQiLCJib2R5IiwiaXRlbXMiLCJEb21haW4iLCJ0cmFja2luZyIsInF1ZXJ5IiwiZ2V0IiwiX3BhcnNlRG9tYWluTGlzdCIsIl9wYXJzZURvbWFpbiIsInBvc3RPYmoiLCJmb3JjZV9ka2ltX2F1dGhvcml0eSIsInBvc3RXaXRoRkQiLCJwdXQiLCJkZWxldGUiLCJfcGFyc2VNZXNzYWdlIiwiY29ubmVjdGlvbiIsIl9wYXJzZVRyYWNraW5nU2V0dGluZ3MiLCJhY3RpdmUiLCJlcnJvcl8xIiwicHV0V2l0aEZEIiwiX3BhcnNlVHJhY2tpbmdVcGRhdGUiLCJfYSIsImlwIiwicG9vbF9pZCIsInJlcGxhY2VtZW50Iiwic2VhcmNoUGFyYW1zIiwic2VsZiIsImRraW1TZWxlY3RvciIsIndlYlByZWZpeCIsImJhc2VSb3V0ZSIsIkRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwidG90YWxDb3VudCIsInRvdGFsX2NvdW50Iiwic3BlYyIsIl9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdCIsIl9wYXJzZU1lc3NhZ2VSZXNwb25zZSIsImNyZWRlbnRpYWxzTG9naW4iLCJfcGFyc2VEZWxldGVkUmVzcG9uc2UiLCJ0YWdJbmZvIiwidGFnIiwidGFnU3RhdGlzdGljSW5mbyIsInJlc29sdXRpb24iLCJ0aW1lIiwiRG9tYWluVGFnc0NsaWVudCIsImVudHJpZXMiLCJwYWdpbmciLCJyZWR1Y2UiLCJhY2MiLCJlbnRyaWUiLCJEb21haW5UYWciLCJwYWdlcyIsIl9wYXJzZVBhZ2VMaW5rcyIsIkRvbWFpblRhZ1N0YXRpc3RpYyIsIl9wYXJzZURvbWFpblRhZ3NMaXN0IiwiX3BhcnNlVGFnU3RhdGlzdGljIiwiZG9tYWluVGVtcGxhdGVGcm9tQVBJIiwiY3JlYXRlZEF0IiwiY3JlYXRlZEJ5IiwidmVyc2lvbnMiLCJEb21haW5UZW1wbGF0ZXNDbGllbnQiLCJEb21haW5UZW1wbGF0ZUl0ZW0iLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlTmFtZSIsInRlbXBsYXRlVmVyc2lvbiIsImQiLCJwYXJzZUxpc3QiLCJwYXJzZUNyZWF0aW9uUmVzcG9uc2UiLCJwYXJzZU11dGF0aW9uUmVzcG9uc2UiLCJwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlIiwicGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZSIsInBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UiLCJwYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zIiwiX2IiLCJib2R5TWVzc2FnZSIsIl9zdXBlciIsIl90aGlzIiwiZGV0YWlscyIsIl9fZXh0ZW5kcyIsIkV2ZW50Q2xpZW50IiwiX3BhcnNlUGFnZU51bWJlciIsInBhaXIiLCJfcGFyc2VQYWdlIiwicXVlcnlDb3B5IiwicGFnZSIsIl9wYXJzZUV2ZW50TGlzdCIsIkZvcm1EYXRhQ29uc3RydWN0b3IiLCJGb3JtRGF0YUJ1aWxkZXIiLCJmb3JtRGF0YUFjYyIsImluY2x1ZGVzIiwiYWRkRmlsZXNUb0ZEIiwiYWRkTWltZURhdGFUb0ZEIiwiYWRkQ29tbW9uUHJvcGVydHlUb0ZEIiwiZm9ybURhdGFJbnN0YW5jZSIsImlzTm9kZUZvcm1EYXRhIiwicHJvcGVydHlOYW1lIiwiYXBwZW5kRmlsZVRvRkQiLCJvcmlnaW5hbEtleSIsIm9iakRhdGEiLCJnZXRBdHRhY2htZW50T3B0aW9ucyIsIk1haWxndW4iLCJjbGllbnRfMSIsIlN1cHByZXNzaW9uTW9kZWxzIiwiSXBQb29sc0NsaWVudCIsInBhcnNlSXBQb29sc1Jlc3BvbnNlIiwicG9vbElkIiwicGF0Y2hXaXRoRkQiLCJJcHNDbGllbnQiLCJwYXJzZUlwc1Jlc3BvbnNlIiwibWVtYmVycyIsIkxpc3RzQ2xpZW50IiwidmFsaWRhdGlvblJlc3VsdCIsIm1haWxMaXN0QWRkcmVzcyIsInBvc3QiLCJwYXJzZVZhbGlkYXRpb25SZXN1bHQiLCJNYWlsTGlzdHNNZW1iZXJzIiwibmV3RGF0YSIsInZhcnMiLCJzdWJzY3JpYmVkIiwibWFpbExpc3RNZW1iZXJBZGRyZXNzIiwibWVtYmVyIiwicmVxRGF0YSIsImNoZWNrQW5kVXBkYXRlRGF0YSIsInVwc2VydCIsIk1lc3NhZ2VzQ2xpZW50IiwieWVzTm9Qcm9wZXJ0aWVzIiwiU2V0IiwiaGFzIiwiX3BhcnNlUmVzcG9uc2UiLCJtb2RpZmllZERhdGEiLCJwcmVwYXJlQm9vbGVhblZhbHVlcyIsIk11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsImhhbmRsZVJlc3BvbnNlIiwibGlzdElkIiwicmVzcG9uc2VTdGF0dXNDb2RlIiwibXVsdGlwbGVWYWxpZGF0aW9uRGF0YSIsIm11bHRpcGxlVmFsaWRhdGlvbkZpbGUiLCJmaWxlIiwiZm9ybURhdGFCdWlsZGVyIiwiZm9ybURhdGFCdWlsZGVyXzEiLCJSZXF1ZXN0Iiwib25DYWxsT3B0aW9ucyIsImJhc2ljIiwib25DYWxsSGVhZGVycyIsIlVSTFNlYXJjaFBhcmFtcyIsImF4aW9zXzEiLCJ0b0xvY2FsZVVwcGVyQ2FzZSIsIl9kIiwiZXJyb3JSZXNwb25zZSIsImVycl8xIiwiX2MiLCJnZXRSZXNwb25zZUJvZHkiLCJhZGREZWZhdWx0SGVhZGVycyIsInJlcXVlc3RPcHRpb25zIiwiY29tbWFuZCIsImNyZWF0ZUZvcm1EYXRhIiwiUm91dGVzQ2xpZW50Iiwicm91dGUiLCJTdGF0c0NsaWVudCIsImFycmF5V2l0aFBhaXJzIiwiY3VycmVudFBhaXIiLCJyZXBlYXRlZFByb3BlcnR5IiwiU3RhdHMiLCJwcmVwYXJlU2VhcmNoUGFyYW1zIiwiX3BhcnNlU3RhdHMiLCJjcmVhdGVPcHRpb25zIiwiU3VwcmVzc2lvbnNfMSIsIkJPVU5DRVMiLCJhZGRyZXNzIiwiU3VwcHJlc3Npb24iLCJDT01QTEFJTlRTIiwiVU5TVUJTQ1JJQkVTIiwidGFncyIsIldISVRFTElTVFMiLCJtb2RlbHMiLCJNYXAiLCJzZXQiLCJCb3VuY2UiLCJDb21wbGFpbnQiLCJVbnN1YnNjcmliZSIsIldoaXRlTGlzdCIsIlN1cHByZXNzaW9uQ2xpZW50IiwicGFnZVVybCIsIlVSTCIsIk1vZGVsIiwicHJlcGFyZVJlc3BvbnNlIiwiY2hlY2tUeXBlIiwibW9kZWwiLCJfcGFyc2VMaXN0IiwiX3BhcnNlSXRlbSIsInBvc3REYXRhIiwiY3JlYXRlV2hpdGVMaXN0IiwibXVsdGlwbGVWYWxpZGF0aW9uIiwiVmFsaWRhdGVDbGllbnQiLCJXZWJob29rQ2xpZW50Iiwid2ViaG9va1Jlc3BvbnNlIiwid2ViaG9vayIsInVybHMiLCJXZWJob29rIiwiX3BhcnNlV2ViaG9va0xpc3QiLCJfcGFyc2VXZWJob29rV2l0aElEIiwiX3BhcnNlV2ViaG9va1Rlc3QiLCJmcmVlRXhwb3J0cyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJUQUJMRSIsIlJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMiLCJpbnB1dCIsInBhZGRpbmciLCJiaXRTdG9yYWdlIiwiYml0Q291bnRlciIsImZyb21DaGFyQ29kZSIsIkRlbGF5ZWRTdHJlYW0iLCJ3cml0YWJsZSIsImRhdGFTaXplIiwibWF4RGF0YVNpemUiLCJwYXVzZVN0cmVhbXMiLCJfcmVsZWFzZWQiLCJfY3VycmVudFN0cmVhbSIsIl9pbnNpZGVMb29wIiwiX3BlbmRpbmdOZXh0IiwiY29tYmluZWRTdHJlYW0iLCJpc1N0cmVhbUxpa2UiLCJuZXdTdHJlYW0iLCJwYXVzZVN0cmVhbSIsIl9jaGVja0RhdGFTaXplIiwiX2hhbmRsZUVycm9ycyIsImRlc3QiLCJfZ2V0TmV4dCIsIl9yZWFsR2V0TmV4dCIsIl9waXBlTmV4dCIsIl9lbWl0RXJyb3IiLCJfcmVzZXQiLCJfdXBkYXRlRGF0YVNpemUiLCJmb3JtYXRBcmdzIiwidXNlQ29sb3JzIiwibmFtZXNwYWNlIiwiaHVtYW5pemUiLCJkaWZmIiwiY29sb3IiLCJsYXN0QyIsInNhdmUiLCJuYW1lc3BhY2VzIiwic3RvcmFnZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwibG9hZCIsInIiLCJnZXRJdGVtIiwiREVCVUciLCJfX253anMiLCJkb2N1bWVudEVsZW1lbnQiLCJzdHlsZSIsIldlYmtpdEFwcGVhcmFuY2UiLCJmaXJlYnVnIiwiZXhjZXB0aW9uIiwidGFibGUiLCIkMSIsImxvY2FsU3RvcmFnZSIsImxvY2Fsc3RvcmFnZSIsIndhcm5lZCIsImNvbG9ycyIsImxvZyIsImRlYnVnIiwiZm9ybWF0dGVycyIsImoiLCJjcmVhdGVEZWJ1ZyIsInByZXZUaW1lIiwibmFtZXNwYWNlc0NhY2hlIiwiZW5hYmxlZENhY2hlIiwiZW5hYmxlT3ZlcnJpZGUiLCJlbmFibGVkIiwiY3VyciIsIk51bWJlciIsIm1zIiwicHJldiIsImNvZXJjZSIsImZvcm1hdCIsImZvcm1hdHRlciIsInNlbGVjdENvbG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsImluaXQiLCJkZWxpbWl0ZXIiLCJuZXdEZWJ1ZyIsInRvTmFtZXNwYWNlIiwicmVnZXhwIiwiZGVmYXVsdCIsImRpc2FibGUiLCJuYW1lcyIsInNraXBzIiwiZW5hYmxlIiwiYWJzIiwiYnJvd3NlciIsInR0eSIsImluc3BlY3RPcHRzIiwic3RkZXJyIiwiY29sb3JDb2RlIiwicHJlZml4IiwiaGlkZURhdGUiLCJnZXREYXRlIiwiQm9vbGVhbiIsImlzYXR0eSIsImZkIiwiZGVwcmVjYXRlIiwic3VwcG9ydHNDb2xvciIsImxldmVsIiwiXyIsImsiLCJvIiwiaW5zcGVjdCIsIk8iLCJfbWF4RGF0YVNpemVFeGNlZWRlZCIsIl9idWZmZXJlZEV2ZW50cyIsImRlbGF5ZWRTdHJlYW0iLCJyZWFsRW1pdCIsIl9oYW5kbGVFbWl0Iiwic2V0RW5jb2RpbmciLCJyZWxlYXNlIiwiX2NoZWNrSWZNYXhEYXRhU2l6ZUV4Y2VlZGVkIiwiV3JpdGFibGUiLCJhc3NlcnQiLCJldmVudEhhbmRsZXJzIiwiZXZlbnQiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJfcmVkaXJlY3RhYmxlIiwiUmVkaXJlY3Rpb25FcnJvciIsImNyZWF0ZUVycm9yVHlwZSIsIlRvb01hbnlSZWRpcmVjdHNFcnJvciIsIk1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yIiwiV3JpdGVBZnRlckVuZEVycm9yIiwiUmVkaXJlY3RhYmxlUmVxdWVzdCIsInJlc3BvbnNlQ2FsbGJhY2siLCJfc2FuaXRpemVPcHRpb25zIiwiX29wdGlvbnMiLCJfZW5kZWQiLCJfZW5kaW5nIiwiX3JlZGlyZWN0Q291bnQiLCJfcmVkaXJlY3RzIiwiX3JlcXVlc3RCb2R5TGVuZ3RoIiwiX3JlcXVlc3RCb2R5QnVmZmVycyIsIl9vbk5hdGl2ZVJlc3BvbnNlIiwiX3Byb2Nlc3NSZXNwb25zZSIsIl9wZXJmb3JtUmVxdWVzdCIsIndyYXAiLCJwcm90b2NvbHMiLCJuYXRpdmVQcm90b2NvbHMiLCJzY2hlbWUiLCJuYXRpdmVQcm90b2NvbCIsIndyYXBwZWRQcm90b2NvbCIsInVybFN0ciIsInVybFRvT3B0aW9ucyIsImVxdWFsIiwid3JhcHBlZFJlcXVlc3QiLCJub29wIiwidXJsT2JqZWN0Iiwic3RhcnRzV2l0aCIsInJlbW92ZU1hdGNoaW5nSGVhZGVycyIsInJlZ2V4IiwibGFzdFZhbHVlIiwiZGVmYXVsdE1lc3NhZ2UiLCJDdXN0b21FcnJvciIsImNhdXNlIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJhYm9ydFJlcXVlc3QiLCJfY3VycmVudFJlcXVlc3QiLCJlbmNvZGluZyIsImN1cnJlbnRSZXF1ZXN0IiwicmVtb3ZlSGVhZGVyIiwibXNlY3MiLCJkZXN0cm95T25UaW1lb3V0IiwiYWRkTGlzdGVuZXIiLCJzdGFydFRpbWVyIiwiX3RpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjbGVhclRpbWVyIiwib25jZSIsInByb3BlcnR5Iiwic2VhcmNoUG9zIiwiX2N1cnJlbnRVcmwiLCJfaXNSZWRpcmVjdCIsImJ1ZmZlcnMiLCJ3cml0ZU5leHQiLCJmaW5pc2hlZCIsInRyYWNrUmVkaXJlY3RzIiwiZm9sbG93UmVkaXJlY3RzIiwicmVzcG9uc2VVcmwiLCJyZWRpcmVjdHMiLCJIb3N0IiwiZ2V0SGVhZGVyIiwicmVkaXJlY3RVcmwiLCJjdXJyZW50SG9zdEhlYWRlciIsImN1cnJlbnRVcmxQYXJ0cyIsImN1cnJlbnRIb3N0IiwiY3VycmVudFVybCIsInJlZGlyZWN0VXJsUGFydHMiLCJzdWJkb21haW4iLCJkb3QiLCJpc1N1YmRvbWFpbiIsInJlc3BvbnNlRGV0YWlscyIsInJlcXVlc3REZXRhaWxzIiwiZmxhZyIsImFyZ3YiLCJwb3MiLCJ0ZXJtaW5hdG9yUG9zIiwiZXh0ZW5zaW9ucyIsInR5cGVzIiwicHJlZmVyZW5jZSIsImRiIiwiZXh0bmFtZSIsIkVYVFJBQ1RfVFlQRV9SRUdFWFAiLCJURVhUX1RZUEVfUkVHRVhQIiwiY2hhcnNldCIsImNoYXJzZXRzIiwiZXh0ZW5zaW9uIiwiZXh0cyIsInRvIiwibSIsInciLCJ5IiwicGx1cmFsIiwibXNBYnMiLCJuIiwiaXNQbHVyYWwiLCJyb3VuZCIsInBhcnNlRmxvYXQiLCJpc0Zpbml0ZSIsImxvbmciLCJmbXRMb25nIiwiZm10U2hvcnQiLCJvcyIsImhhc0ZsYWciLCJmb3JjZUNvbG9yIiwiZ2V0U3VwcG9ydExldmVsIiwiaXNUVFkiLCJtaW4iLCJwbGF0Zm9ybSIsIm9zUmVsZWFzZSIsIm5vZGUiLCJzaWduIiwiQ0lfTkFNRSIsIlRFQU1DSVRZX1ZFUlNJT04iLCJDT0xPUlRFUk0iLCJURVJNX1BST0dSQU1fVkVSU0lPTiIsIlRFUk1fUFJPR1JBTSIsIlRFUk0iLCJoYXNCYXNpYyIsImhhczI1NiIsImhhczE2bSIsInRyYW5zbGF0ZUxldmVsIiwiRk9SQ0VfQ09MT1IiLCJzdGRvdXQiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwiZmlyc3QiLCJjb21wb25lbnQiLCJkZWZpbml0aW9uIiwicmVxdWlyZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJubWQiLCJwYXRocyIsImNoaWxkcmVuIiwiX193ZWJwYWNrX2V4cG9ydHNfXyJdLCJzb3VyY2VSb290IjoiIn0=
|