inversify 6.1.3 → 6.1.4-beta.1

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/es/inversify.js CHANGED
@@ -1,23 +1,2 @@
1
- import * as keys from './constants/metadata_keys';
2
- export { LazyServiceIdentifier } from '@inversifyjs/common';
3
- export var METADATA_KEY = keys;
4
- export { Container } from './container/container';
5
- export { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum, } from './constants/literal_types';
6
- export { AsyncContainerModule, ContainerModule, } from './container/container_module';
7
- export { createTaggedDecorator } from './annotation/decorator_utils';
8
- export { injectable } from './annotation/injectable';
9
- export { tagged } from './annotation/tagged';
10
- export { named } from './annotation/named';
11
- export { inject } from './annotation/inject';
12
- export { optional } from './annotation/optional';
13
- export { unmanaged } from './annotation/unmanaged';
14
- export { multiInject } from './annotation/multi_inject';
15
- export { targetName } from './annotation/target_name';
16
- export { postConstruct } from './annotation/post_construct';
17
- export { preDestroy } from './annotation/pre_destroy';
18
- export { MetadataReader } from './planning/metadata_reader';
19
- export { id } from './utils/id';
20
- export { decorate } from './annotation/decorator_utils';
21
- export { traverseAncerstors, taggedConstraint, namedConstraint, typeConstraint, } from './syntax/constraint_helpers';
22
- export { getServiceIdentifierAsString } from './utils/serialization';
23
- export { multiBindToService } from './utils/binding_utils';
1
+ import*as t from"@inversifyjs/common";import*as n from"@inversifyjs/core";var e={d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},i={};e.d(i,{QC:()=>qt,bU:()=>m,XK:()=>A,mc:()=>Ot,i0:()=>Bt,FU:()=>b.LazyServiceIdentifier,KK:()=>on,PG:()=>j,$Z:()=>S,OZ:()=>Kt,Yi:()=>Ut,A$:()=>O,id:()=>T,WQ:()=>Qt,_G:()=>Ht,F$:()=>it,tt:()=>Xt,KT:()=>zt,dU:()=>St,lq:()=>Zt,kr:()=>en,E3:()=>rn,VK:()=>Yt,w:()=>At,je:()=>tn,Nu:()=>mt,if:()=>It,Fz:()=>Jt});var r={};e.r(r),e.d(r,{DESIGN_PARAM_TYPES:()=>p,INJECT_TAG:()=>s,MULTI_INJECT_TAG:()=>d,NAMED_TAG:()=>o,NAME_TAG:()=>a,NON_CUSTOM_TAG_KEYS:()=>g,OPTIONAL_TAG:()=>u,PARAM_TYPES:()=>h,POST_CONSTRUCT:()=>y,PRE_DESTROY:()=>v,TAGGED:()=>l,TAGGED_PROP:()=>f,UNMANAGED_TAG:()=>c});var o="named",a="name",c="unmanaged",u="optional",s="inject",d="multi_inject",l="inversify:tagged",f="inversify:tagged_props",h="inversify:paramtypes",p="design:paramtypes",y="post_construct",v="pre_destroy",g=[s,d,a,c,o,u];const b=(w={LazyServiceIdentifier:()=>t.LazyServiceIdentifier},_={},e.d(_,w),_);var w,_,m={Request:"Request",Singleton:"Singleton",Transient:"Transient"},A={ConstantValue:"ConstantValue",Constructor:"Constructor",DynamicValue:"DynamicValue",Factory:"Factory",Function:"Function",Instance:"Instance",Invalid:"Invalid",Provider:"Provider"},S={ClassProperty:"ClassProperty",ConstructorArgument:"ConstructorArgument",Variable:"Variable"},I=0;function T(){return I++}var D=function(){function t(t,n){this.id=T(),this.activated=!1,this.serviceIdentifier=t,this.scope=n,this.type=A.Invalid,this.constraint=function(t){return!0},this.implementationType=null,this.cache=null,this.factory=null,this.provider=null,this.onActivation=null,this.onDeactivation=null,this.dynamicValue=null}return t.prototype.clone=function(){var n=new t(this.serviceIdentifier,this.scope);return n.activated=n.scope===m.Singleton&&this.activated,n.implementationType=this.implementationType,n.dynamicValue=this.dynamicValue,n.scope=this.scope,n.type=this.type,n.factory=this.factory,n.provider=this.provider,n.constraint=this.constraint,n.onActivation=this.onActivation,n.onDeactivation=this.onDeactivation,n.cache=this.cache,n},t}(),C="Cannot apply @injectable decorator multiple times.",E="Metadata key was used more than once in a parameter:",x="NULL argument",N="Key Not Found",M="The @inject @multiInject @tagged and @named decorators must be applied to the parameters of a class constructor or a class property.",R=function(t,n){return"onDeactivation() error in class ".concat(t,": ").concat(n)},j=function(){function t(){}return t.prototype.getConstructorMetadata=function(t){var n,e=null!==(n=Reflect.getMetadata(p,t))&&void 0!==n?n:[],i=Reflect.getMetadata(l,t);return{compilerGeneratedMetadata:e,userGeneratedMetadata:null!=i?i:{}}},t.prototype.getPropertiesMetadata=function(t){var n;return null!==(n=Reflect.getMetadata(f,t))&&void 0!==n?n:{}},t}();const k=(t=>{var n={};return e.d(n,t),n})({ClassElementMetadataKind:()=>n.ClassElementMetadataKind,LegacyTargetImpl:()=>n.LegacyTargetImpl,getClassElementMetadataFromLegacyMetadata:()=>n.getClassElementMetadataFromLegacyMetadata,getTargets:()=>n.getTargets});var P;function F(t){return t instanceof RangeError||"Maximum call stack size exceeded"===t.message}function O(t){return"function"==typeof t?t.name:"symbol"==typeof t?t.toString():t}function B(t,n,e){var i="",r=e(t,n);return 0!==r.length&&(i="\nRegistered bindings:",r.forEach((function(t){var n="Object";null!==t.implementationType&&(n=W(t.implementationType)),i="".concat(i,"\n ").concat(n),t.constraint.metaData&&(i="".concat(i," - ").concat(t.constraint.metaData))}))),i}function q(t,n){return null!==t.parentRequest&&(t.parentRequest.serviceIdentifier===n||q(t.parentRequest,n))}function V(t){t.childRequests.forEach((function(n){if(q(t,n.serviceIdentifier)){var e=function(t){return function t(n,e){void 0===e&&(e=[]);var i=O(n.serviceIdentifier);return e.push(i),null!==n.parentRequest?t(n.parentRequest,e):e}(t).reverse().join(" --\x3e ")}(n);throw new Error("".concat("Circular dependency found:"," ").concat(e))}V(n)}))}function W(t){if(null!=t.name&&""!==t.name)return t.name;var n=t.toString(),e=n.match(/^function\s*([^\s(]+)/);return null===e?"Anonymous function: ".concat(n):e[1]}function K(t){return'{"key":"'.concat(t.key.toString(),'","value":"').concat(t.value.toString(),'"}')}!function(t){t[t.MultipleBindingsAvailable=2]="MultipleBindingsAvailable",t[t.NoBindingsAvailable=0]="NoBindingsAvailable",t[t.OnlyOneBindingAvailable=1]="OnlyOneBindingAvailable"}(P||(P={}));var G=function(){function t(t){this.id=T(),this.container=t}return t.prototype.addPlan=function(t){this.plan=t},t.prototype.setCurrentRequest=function(t){this.currentRequest=t},t}(),L=function(){function t(t,n){this.key=t,this.value=n}return t.prototype.toString=function(){return this.key===o?"named: ".concat(String(this.value).toString()," "):"tagged: { key:".concat(this.key.toString(),", value: ").concat(String(this.value)," }")},t}(),U=function(t,n){this.parentContext=t,this.rootRequest=n};function H(t,n){var e=Object.getPrototypeOf(n.prototype).constructor;if(e!==Object){var i=(0,k.getTargets)(t)(e),r=i.map((function(t){return t.metadata.filter((function(t){return t.key===c}))})),o=[].concat.apply([],r).length,a=i.length-o;return a>0?a:H(t,e)}return 0}var Y=function(){function t(t,n,e,i,r){this.id=T(),this.serviceIdentifier=t,this.parentContext=n,this.parentRequest=e,this.target=r,this.childRequests=[],this.bindings=Array.isArray(i)?i:[i],this.requestScope=null===e?new Map:null}return t.prototype.addChildRequest=function(n,e,i){var r=new t(n,this.parentContext,this,e,i);return this.childRequests.push(r),r},t}();function z(t){return t._bindingDictionary}function $(t,n,e,i,r){var o,a=J(e.container,r.serviceIdentifier);return a.length===P.NoBindingsAvailable&&!0===e.container.options.autoBindInjectable&&"function"==typeof r.serviceIdentifier&&t.getConstructorMetadata(r.serviceIdentifier).compilerGeneratedMetadata&&(e.container.bind(r.serviceIdentifier).toSelf(),a=J(e.container,r.serviceIdentifier)),o=n?a:a.filter((function(t){var n=new Y(t.serviceIdentifier,e,i,t,r);return t.constraint(n)})),function(t,n,e,i,r){switch(n.length){case P.NoBindingsAvailable:if(i.isOptional())return n;var o=O(t),a="No matching bindings found for serviceIdentifier:";throw a+=function(t,n){if(n.isTagged()||n.isNamed()){var e="",i=n.getNamedTag(),r=n.getCustomTags();return null!==i&&(e+=K(i)+"\n"),null!==r&&r.forEach((function(t){e+=K(t)+"\n"}))," ".concat(t,"\n ").concat(t," - ").concat(e)}return" ".concat(t)}(o,i),a+=B(r,o,J),null!==e&&(a+="\n".concat((c=O(e.serviceIdentifier),'Trying to resolve bindings for "'.concat(c,'"')))),new Error(a);case P.OnlyOneBindingAvailable:return n;case P.MultipleBindingsAvailable:default:if(i.isArray())return n;throw o=O(t),a="".concat("Ambiguous match found for serviceIdentifier:"," ").concat(o),a+=B(r,o,J),new Error(a)}var c}(r.serviceIdentifier,o,i,r,e.container),o}function Q(t,n,e,i){var r=[new L(t?d:s,n)];return void 0!==e&&r.push(new L(e,i)),r}function Z(t,n,e,i,r,o){var a,c;if(null===r){a=$(t,n,i,null,o),c=new Y(e,i,null,a,o);var u=new U(i,c);i.addPlan(u)}else a=$(t,n,i,r,o),c=r.addChildRequest(o.serviceIdentifier,a,o);a.forEach((function(n){var e,r=null;if(o.isArray())r=c.addChildRequest(n.serviceIdentifier,n,o);else{if(null!==n.cache)return;r=c}if(n.type===A.Instance&&null!==n.implementationType){var a=function(t,n){return(0,k.getTargets)(t)(n)}(t,n.implementationType);if(!0!==i.container.options.skipBaseClassChecks){var u=H(t,n.implementationType);if(a.length<u){var s=(e=W(n.implementationType),"The number of constructor arguments in the derived class "+"".concat(e," must be >= than the number of constructor arguments of its base class."));throw new Error(s)}}a.forEach((function(n){Z(t,!1,n.serviceIdentifier,i,r,n)}))}}))}function J(t,n){var e=[],i=z(t);return i.hasKey(n)?e=i.get(n):null!==t.parent&&(e=J(t.parent,n)),e}function X(t){return("object"==typeof t&&null!==t||"function"==typeof t)&&"function"==typeof t.then}function tt(t){return!!X(t)||Array.isArray(t)&&t.some(X)}var nt,et=function(t,n){return e=void 0,i=void 0,o=function(){var e,i;return function(t,n){var e,i,r,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(u){return function(c){if(e)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(o=0)),o;)try{if(e=1,i&&(r=2&c[0]?i.return:c[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,c[1])).done)return r;switch(i=0,r&&(c=[2&c[0],r.value]),c[0]){case 0:case 1:r=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,i=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!((r=(r=o.trys).length>0&&r[r.length-1])||6!==c[0]&&2!==c[0])){o=0;continue}if(3===c[0]&&(!r||c[1]>r[0]&&c[1]<r[3])){o.label=c[1];break}if(6===c[0]&&o.label<r[1]){o.label=r[1],r=c;break}if(r&&o.label<r[2]){o.label=r[2],o.ops.push(c);break}r[2]&&o.ops.pop(),o.trys.pop();continue}c=n.call(t,o)}catch(t){c=[6,t],i=0}finally{e=r=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}}(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,n];case 1:return e=r.sent(),t.cache=e,[3,3];case 2:throw i=r.sent(),t.cache=null,t.activated=!1,i;case 3:return[2]}}))},new((r=void 0)||(r=Promise))((function(t,n){function a(t){try{u(o.next(t))}catch(t){n(t)}}function c(t){try{u(o.throw(t))}catch(t){n(t)}}function u(n){var e;n.done?t(n.value):(e=n.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,c)}u((o=o.apply(e,i||[])).next())}));var e,i,r,o};!function(t){t.DynamicValue="toDynamicValue",t.Factory="toFactory",t.Provider="toProvider"}(nt||(nt={}));var it=function(t){return function(n){return function(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];e.forEach((function(e){t.bind(e).toService(n)}))}}},rt=function(){return rt=Object.assign||function(t){for(var n,e=1,i=arguments.length;e<i;e++)for(var r in n=arguments[e])Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r]);return t},rt.apply(this,arguments)},ot=function(t,n,e,i){return new(e||(e=Promise))((function(r,o){function a(t){try{u(i.next(t))}catch(t){o(t)}}function c(t){try{u(i.throw(t))}catch(t){o(t)}}function u(t){var n;t.done?r(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(a,c)}u((i=i.apply(t,n||[])).next())}))},at=function(t,n){var e,i,r,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(u){return function(c){if(e)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(o=0)),o;)try{if(e=1,i&&(r=2&c[0]?i.return:c[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,c[1])).done)return r;switch(i=0,r&&(c=[2&c[0],r.value]),c[0]){case 0:case 1:r=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,i=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!((r=(r=o.trys).length>0&&r[r.length-1])||6!==c[0]&&2!==c[0])){o=0;continue}if(3===c[0]&&(!r||c[1]>r[0]&&c[1]<r[3])){o.label=c[1];break}if(6===c[0]&&o.label<r[1]){o.label=r[1],r=c;break}if(r&&o.label<r[2]){o.label=r[2],o.ops.push(c);break}r[2]&&o.ops.pop(),o.trys.pop();continue}c=n.call(t,o)}catch(t){c=[6,t],i=0}finally{e=r=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}};function ct(t){var n,e=new((n=t.constr).bind.apply(n,function(t,n,e){if(e||2===arguments.length)for(var i,r=0,o=n.length;r<o;r++)!i&&r in n||(i||(i=Array.prototype.slice.call(n,0,r)),i[r]=n[r]);return t.concat(i||Array.prototype.slice.call(n))}([void 0],t.constructorInjections,!1)));return t.propertyRequests.forEach((function(n,i){var r=n.target.identifier,o=t.propertyInjections[i];n.target.isOptional()&&void 0===o||(e[r]=o)})),e}function ut(t){return ot(this,void 0,void 0,(function(){var n,e,i,r;return at(this,(function(o){for(n=[],e=0,i=t;e<i.length;e++)r=i[e],Array.isArray(r)?n.push(Promise.all(r)):n.push(r);return[2,Promise.all(n)]}))}))}function st(t,n){var e=function(t,n){var e,i,r,o;if(Reflect.hasMetadata(y,t)){var a=Reflect.getMetadata(y,t);try{return null===(i=(e=n)[a.value])||void 0===i?void 0:i.call(e)}catch(n){if(n instanceof Error)throw new Error((r=t.name,o=n.message,"@postConstruct error in class ".concat(r,": ").concat(o)))}}}(t,n);return X(e)?e.then((function(){return n})):n}var dt=function(t){return function(n){n.parentContext.setCurrentRequest(n);var e=n.bindings,i=n.childRequests,r=n.target&&n.target.isArray(),o=!(n.parentRequest&&n.parentRequest.target&&n.target&&n.parentRequest.target.matchesArray(n.target.serviceIdentifier));if(r&&o)return i.map((function(n){return dt(t)(n)}));if(!n.target.isOptional()||0!==e.length){var a=e[0];return pt(t,n,a)}}},lt=function(t,n){var e=function(t){switch(t.type){case A.Factory:return{factory:t.factory,factoryType:nt.Factory};case A.Provider:return{factory:t.provider,factoryType:nt.Provider};case A.DynamicValue:return{factory:t.dynamicValue,factoryType:nt.DynamicValue};default:throw new Error("Unexpected factory type ".concat(t.type))}}(t);return function(){try{return e.factory.bind(t)(n)}catch(t){if(F(t))throw new Error((i=e.factoryType,r=n.currentRequest.serviceIdentifier.toString(),"It looks like there is a circular dependency in one of the '".concat(i,"' bindings. Please investigate bindings with ")+"service identifier '".concat(r,"'.")));throw t}var i,r}()},ft=function(t,n,e){var i,r=n.childRequests;switch(function(t){var n=null;switch(t.type){case A.ConstantValue:case A.Function:n=t.cache;break;case A.Constructor:case A.Instance:n=t.implementationType;break;case A.DynamicValue:n=t.dynamicValue;break;case A.Provider:n=t.provider;break;case A.Factory:n=t.factory}if(null===n){var e=O(t.serviceIdentifier);throw new Error("".concat("Invalid binding type:"," ").concat(e))}}(e),e.type){case A.ConstantValue:case A.Function:i=e.cache;break;case A.Constructor:i=e.implementationType;break;case A.Instance:i=function(t,n,e,i){!function(t,n){t.scope!==m.Singleton&&function(t,n){var e,i,r="Class cannot be instantiated in ".concat(t.scope===m.Request?"request":"transient"," scope.");if("function"==typeof t.onDeactivation)throw new Error(R(n.name,r));if(Reflect.hasMetadata(v,n))throw new Error((e=n.name,i=r,"@preDestroy error in class ".concat(e,": ").concat(i)))}(t,n)}(t,n);var r=function(t,n,e){var i;if(n.length>0){var r=function(t,n){return t.reduce((function(t,e){var i=n(e);return e.target.type===S.ConstructorArgument?t.constructorInjections.push(i):(t.propertyRequests.push(e),t.propertyInjections.push(i)),t.isAsync||(t.isAsync=tt(i)),t}),{constructorInjections:[],isAsync:!1,propertyInjections:[],propertyRequests:[]})}(n,e),o=rt(rt({},r),{constr:t});i=r.isAsync?function(t){return ot(this,void 0,void 0,(function(){var n,e;return at(this,(function(i){switch(i.label){case 0:return[4,ut(t.constructorInjections)];case 1:return n=i.sent(),[4,ut(t.propertyInjections)];case 2:return e=i.sent(),[2,ct(rt(rt({},t),{constructorInjections:n,propertyInjections:e}))]}}))}))}(o):ct(o)}else i=new t;return i}(n,e,i);return X(r)?r.then((function(t){return st(n,t)})):st(n,r)}(e,e.implementationType,r,dt(t));break;default:i=lt(e,n.parentContext)}return i},ht=function(t,n,e){var i=function(t,n){return n.scope===m.Singleton&&n.activated?n.cache:n.scope===m.Request&&t.has(n.id)?t.get(n.id):null}(t,n);return null!==i||function(t,n,e){n.scope===m.Singleton&&function(t,n){t.cache=n,t.activated=!0,X(n)&&et(t,n)}(n,e),n.scope===m.Request&&function(t,n,e){t.has(n.id)||t.set(n.id,e)}(t,n,e)}(t,n,i=e()),i},pt=function(t,n,e){return ht(t,e,(function(){var i=ft(t,n,e);return X(i)?i.then((function(t){return yt(n,e,t)})):yt(n,e,i)}))};function yt(t,n,e){var i,r=vt(t.parentContext,n,e),o=_t(t.parentContext.container),a=o.next();do{i=a.value;var c=t.parentContext,u=t.serviceIdentifier,s=wt(i,u);r=X(r)?bt(s,c,r):gt(s,c,r),a=o.next()}while(!0!==a.done&&!z(i).hasKey(t.serviceIdentifier));return r}var vt=function(t,n,e){return"function"==typeof n.onActivation?n.onActivation(t,e):e},gt=function(t,n,e){for(var i=t.next();!0!==i.done;){if(X(e=i.value(n,e)))return bt(t,n,e);i=t.next()}return e},bt=function(t,n,e){return i=void 0,r=void 0,a=function(){var i,r;return function(t,n){var e,i,r,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(u){return function(c){if(e)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(o=0)),o;)try{if(e=1,i&&(r=2&c[0]?i.return:c[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,c[1])).done)return r;switch(i=0,r&&(c=[2&c[0],r.value]),c[0]){case 0:case 1:r=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,i=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!((r=(r=o.trys).length>0&&r[r.length-1])||6!==c[0]&&2!==c[0])){o=0;continue}if(3===c[0]&&(!r||c[1]>r[0]&&c[1]<r[3])){o.label=c[1];break}if(6===c[0]&&o.label<r[1]){o.label=r[1],r=c;break}if(r&&o.label<r[2]){o.label=r[2],o.ops.push(c);break}r[2]&&o.ops.pop(),o.trys.pop();continue}c=n.call(t,o)}catch(t){c=[6,t],i=0}finally{e=r=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}}(this,(function(o){switch(o.label){case 0:return[4,e];case 1:i=o.sent(),r=t.next(),o.label=2;case 2:return!0===r.done?[3,4]:[4,r.value(n,i)];case 3:return i=o.sent(),r=t.next(),[3,2];case 4:return[2,i]}}))},new((o=void 0)||(o=Promise))((function(t,n){function e(t){try{u(a.next(t))}catch(t){n(t)}}function c(t){try{u(a.throw(t))}catch(t){n(t)}}function u(n){var i;n.done?t(n.value):(i=n.value,i instanceof o?i:new o((function(t){t(i)}))).then(e,c)}u((a=a.apply(i,r||[])).next())}));var i,r,o,a},wt=function(t,n){var e=t._activations;return e.hasKey(n)?e.get(n).values():[].values()},_t=function(t){for(var n=[t],e=t.parent;null!==e;)n.push(e),e=e.parent;return{next:function(){var t=n.pop();return void 0!==t?{done:!1,value:t}:{done:!0,value:void 0}}}},mt=function(t,n){var e=t.parentRequest;return null!==e&&(!!n(e)||mt(e,n))},At=function(t){return function(n){var e=function(e){return null!==e&&null!==e.target&&e.target.matchesTag(t)(n)};return e.metaData=new L(t,n),e}},St=At(o),It=function(t){return function(n){var e=null;if(null!==n){if(e=n.bindings[0],"string"==typeof t)return e.serviceIdentifier===t;var i=n.bindings[0].implementationType;return t===i}return!1}},Tt=function(){function t(t){this._binding=t}return t.prototype.when=function(t){return this._binding.constraint=t,new Dt(this._binding)},t.prototype.whenTargetNamed=function(t){return this._binding.constraint=St(t),new Dt(this._binding)},t.prototype.whenTargetIsDefault=function(){return this._binding.constraint=function(t){return null!==t&&null!==t.target&&!t.target.isNamed()&&!t.target.isTagged()},new Dt(this._binding)},t.prototype.whenTargetTagged=function(t,n){return this._binding.constraint=At(t)(n),new Dt(this._binding)},t.prototype.whenInjectedInto=function(t){return this._binding.constraint=function(n){return null!==n&&It(t)(n.parentRequest)},new Dt(this._binding)},t.prototype.whenParentNamed=function(t){return this._binding.constraint=function(n){return null!==n&&St(t)(n.parentRequest)},new Dt(this._binding)},t.prototype.whenParentTagged=function(t,n){return this._binding.constraint=function(e){return null!==e&&At(t)(n)(e.parentRequest)},new Dt(this._binding)},t.prototype.whenAnyAncestorIs=function(t){return this._binding.constraint=function(n){return null!==n&&mt(n,It(t))},new Dt(this._binding)},t.prototype.whenNoAncestorIs=function(t){return this._binding.constraint=function(n){return null!==n&&!mt(n,It(t))},new Dt(this._binding)},t.prototype.whenAnyAncestorNamed=function(t){return this._binding.constraint=function(n){return null!==n&&mt(n,St(t))},new Dt(this._binding)},t.prototype.whenNoAncestorNamed=function(t){return this._binding.constraint=function(n){return null!==n&&!mt(n,St(t))},new Dt(this._binding)},t.prototype.whenAnyAncestorTagged=function(t,n){return this._binding.constraint=function(e){return null!==e&&mt(e,At(t)(n))},new Dt(this._binding)},t.prototype.whenNoAncestorTagged=function(t,n){return this._binding.constraint=function(e){return null!==e&&!mt(e,At(t)(n))},new Dt(this._binding)},t.prototype.whenAnyAncestorMatches=function(t){return this._binding.constraint=function(n){return null!==n&&mt(n,t)},new Dt(this._binding)},t.prototype.whenNoAncestorMatches=function(t){return this._binding.constraint=function(n){return null!==n&&!mt(n,t)},new Dt(this._binding)},t}(),Dt=function(){function t(t){this._binding=t}return t.prototype.onActivation=function(t){return this._binding.onActivation=t,new Tt(this._binding)},t.prototype.onDeactivation=function(t){return this._binding.onDeactivation=t,new Tt(this._binding)},t}(),Ct=function(){function t(t){this._binding=t,this._bindingWhenSyntax=new Tt(this._binding),this._bindingOnSyntax=new Dt(this._binding)}return t.prototype.when=function(t){return this._bindingWhenSyntax.when(t)},t.prototype.whenTargetNamed=function(t){return this._bindingWhenSyntax.whenTargetNamed(t)},t.prototype.whenTargetIsDefault=function(){return this._bindingWhenSyntax.whenTargetIsDefault()},t.prototype.whenTargetTagged=function(t,n){return this._bindingWhenSyntax.whenTargetTagged(t,n)},t.prototype.whenInjectedInto=function(t){return this._bindingWhenSyntax.whenInjectedInto(t)},t.prototype.whenParentNamed=function(t){return this._bindingWhenSyntax.whenParentNamed(t)},t.prototype.whenParentTagged=function(t,n){return this._bindingWhenSyntax.whenParentTagged(t,n)},t.prototype.whenAnyAncestorIs=function(t){return this._bindingWhenSyntax.whenAnyAncestorIs(t)},t.prototype.whenNoAncestorIs=function(t){return this._bindingWhenSyntax.whenNoAncestorIs(t)},t.prototype.whenAnyAncestorNamed=function(t){return this._bindingWhenSyntax.whenAnyAncestorNamed(t)},t.prototype.whenAnyAncestorTagged=function(t,n){return this._bindingWhenSyntax.whenAnyAncestorTagged(t,n)},t.prototype.whenNoAncestorNamed=function(t){return this._bindingWhenSyntax.whenNoAncestorNamed(t)},t.prototype.whenNoAncestorTagged=function(t,n){return this._bindingWhenSyntax.whenNoAncestorTagged(t,n)},t.prototype.whenAnyAncestorMatches=function(t){return this._bindingWhenSyntax.whenAnyAncestorMatches(t)},t.prototype.whenNoAncestorMatches=function(t){return this._bindingWhenSyntax.whenNoAncestorMatches(t)},t.prototype.onActivation=function(t){return this._bindingOnSyntax.onActivation(t)},t.prototype.onDeactivation=function(t){return this._bindingOnSyntax.onDeactivation(t)},t}(),Et=function(){function t(t){this._binding=t}return t.prototype.inRequestScope=function(){return this._binding.scope=m.Request,new Ct(this._binding)},t.prototype.inSingletonScope=function(){return this._binding.scope=m.Singleton,new Ct(this._binding)},t.prototype.inTransientScope=function(){return this._binding.scope=m.Transient,new Ct(this._binding)},t}(),xt=function(){function t(t){this._binding=t,this._bindingWhenSyntax=new Tt(this._binding),this._bindingOnSyntax=new Dt(this._binding),this._bindingInSyntax=new Et(t)}return t.prototype.inRequestScope=function(){return this._bindingInSyntax.inRequestScope()},t.prototype.inSingletonScope=function(){return this._bindingInSyntax.inSingletonScope()},t.prototype.inTransientScope=function(){return this._bindingInSyntax.inTransientScope()},t.prototype.when=function(t){return this._bindingWhenSyntax.when(t)},t.prototype.whenTargetNamed=function(t){return this._bindingWhenSyntax.whenTargetNamed(t)},t.prototype.whenTargetIsDefault=function(){return this._bindingWhenSyntax.whenTargetIsDefault()},t.prototype.whenTargetTagged=function(t,n){return this._bindingWhenSyntax.whenTargetTagged(t,n)},t.prototype.whenInjectedInto=function(t){return this._bindingWhenSyntax.whenInjectedInto(t)},t.prototype.whenParentNamed=function(t){return this._bindingWhenSyntax.whenParentNamed(t)},t.prototype.whenParentTagged=function(t,n){return this._bindingWhenSyntax.whenParentTagged(t,n)},t.prototype.whenAnyAncestorIs=function(t){return this._bindingWhenSyntax.whenAnyAncestorIs(t)},t.prototype.whenNoAncestorIs=function(t){return this._bindingWhenSyntax.whenNoAncestorIs(t)},t.prototype.whenAnyAncestorNamed=function(t){return this._bindingWhenSyntax.whenAnyAncestorNamed(t)},t.prototype.whenAnyAncestorTagged=function(t,n){return this._bindingWhenSyntax.whenAnyAncestorTagged(t,n)},t.prototype.whenNoAncestorNamed=function(t){return this._bindingWhenSyntax.whenNoAncestorNamed(t)},t.prototype.whenNoAncestorTagged=function(t,n){return this._bindingWhenSyntax.whenNoAncestorTagged(t,n)},t.prototype.whenAnyAncestorMatches=function(t){return this._bindingWhenSyntax.whenAnyAncestorMatches(t)},t.prototype.whenNoAncestorMatches=function(t){return this._bindingWhenSyntax.whenNoAncestorMatches(t)},t.prototype.onActivation=function(t){return this._bindingOnSyntax.onActivation(t)},t.prototype.onDeactivation=function(t){return this._bindingOnSyntax.onDeactivation(t)},t}(),Nt=function(){function t(t){this._binding=t}return t.prototype.to=function(t){return this._binding.type=A.Instance,this._binding.implementationType=t,new xt(this._binding)},t.prototype.toSelf=function(){if("function"!=typeof this._binding.serviceIdentifier)throw new Error("The toSelf function can only be applied when a constructor is used as service identifier");var t=this._binding.serviceIdentifier;return this.to(t)},t.prototype.toConstantValue=function(t){return this._binding.type=A.ConstantValue,this._binding.cache=t,this._binding.dynamicValue=null,this._binding.implementationType=null,this._binding.scope=m.Singleton,new Ct(this._binding)},t.prototype.toDynamicValue=function(t){return this._binding.type=A.DynamicValue,this._binding.cache=null,this._binding.dynamicValue=t,this._binding.implementationType=null,new xt(this._binding)},t.prototype.toConstructor=function(t){return this._binding.type=A.Constructor,this._binding.implementationType=t,this._binding.scope=m.Singleton,new Ct(this._binding)},t.prototype.toFactory=function(t){return this._binding.type=A.Factory,this._binding.factory=t,this._binding.scope=m.Singleton,new Ct(this._binding)},t.prototype.toFunction=function(t){if("function"!=typeof t)throw new Error("Value provided to function binding must be a function!");var n=this.toConstantValue(t);return this._binding.type=A.Function,this._binding.scope=m.Singleton,n},t.prototype.toAutoFactory=function(t){return this._binding.type=A.Factory,this._binding.factory=function(n){return function(){return n.container.get(t)}},this._binding.scope=m.Singleton,new Ct(this._binding)},t.prototype.toAutoNamedFactory=function(t){return this._binding.type=A.Factory,this._binding.factory=function(n){return function(e){return n.container.getNamed(t,e)}},new Ct(this._binding)},t.prototype.toProvider=function(t){return this._binding.type=A.Provider,this._binding.provider=t,this._binding.scope=m.Singleton,new Ct(this._binding)},t.prototype.toService=function(t){this.toDynamicValue((function(n){return n.container.get(t)}))},t}(),Mt=function(){function t(){}return t.of=function(n,e,i,r,o){var a=new t;return a.bindings=n,a.middleware=e,a.deactivations=r,a.activations=i,a.moduleActivationStore=o,a},t}(),Rt=function(){function t(){this._map=new Map}return t.prototype.getMap=function(){return this._map},t.prototype.add=function(t,n){if(this._checkNonNulish(t),null==n)throw new Error(x);var e=this._map.get(t);void 0!==e?e.push(n):this._map.set(t,[n])},t.prototype.get=function(t){this._checkNonNulish(t);var n=this._map.get(t);if(void 0!==n)return n;throw new Error(N)},t.prototype.remove=function(t){if(this._checkNonNulish(t),!this._map.delete(t))throw new Error(N)},t.prototype.removeIntersection=function(t){var n=this;this.traverse((function(e,i){var r=t.hasKey(e)?t.get(e):void 0;if(void 0!==r){var o=i.filter((function(t){return!r.some((function(n){return t===n}))}));n._setValue(e,o)}}))},t.prototype.removeByCondition=function(t){var n=this,e=[];return this._map.forEach((function(i,r){for(var o=[],a=0,c=i;a<c.length;a++){var u=c[a];t(u)?e.push(u):o.push(u)}n._setValue(r,o)})),e},t.prototype.hasKey=function(t){return this._checkNonNulish(t),this._map.has(t)},t.prototype.clone=function(){var n=new t;return this._map.forEach((function(t,e){t.forEach((function(t){var i;n.add(e,"object"==typeof(i=t)&&null!==i&&"clone"in i&&"function"==typeof i.clone?t.clone():t)}))})),n},t.prototype.traverse=function(t){this._map.forEach((function(n,e){t(e,n)}))},t.prototype._checkNonNulish=function(t){if(null==t)throw new Error(x)},t.prototype._setValue=function(t,n){n.length>0?this._map.set(t,n):this._map.delete(t)},t}(),jt=function(){function t(){this._map=new Map}return t.prototype.remove=function(t){var n=this._map.get(t);return void 0===n?this._getEmptyHandlersStore():(this._map.delete(t),n)},t.prototype.addDeactivation=function(t,n,e){this._getModuleActivationHandlers(t).onDeactivations.add(n,e)},t.prototype.addActivation=function(t,n,e){this._getModuleActivationHandlers(t).onActivations.add(n,e)},t.prototype.clone=function(){var n=new t;return this._map.forEach((function(t,e){n._map.set(e,{onActivations:t.onActivations.clone(),onDeactivations:t.onDeactivations.clone()})})),n},t.prototype._getModuleActivationHandlers=function(t){var n=this._map.get(t);return void 0===n&&(n=this._getEmptyHandlersStore(),this._map.set(t,n)),n},t.prototype._getEmptyHandlersStore=function(){return{onActivations:new Rt,onDeactivations:new Rt}},t}(),kt=function(){return kt=Object.assign||function(t){for(var n,e=1,i=arguments.length;e<i;e++)for(var r in n=arguments[e])Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r]);return t},kt.apply(this,arguments)},Pt=function(t,n,e,i){return new(e||(e=Promise))((function(r,o){function a(t){try{u(i.next(t))}catch(t){o(t)}}function c(t){try{u(i.throw(t))}catch(t){o(t)}}function u(t){var n;t.done?r(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(a,c)}u((i=i.apply(t,n||[])).next())}))},Ft=function(t,n){var e,i,r,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(u){return function(c){if(e)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(o=0)),o;)try{if(e=1,i&&(r=2&c[0]?i.return:c[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,c[1])).done)return r;switch(i=0,r&&(c=[2&c[0],r.value]),c[0]){case 0:case 1:r=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,i=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!((r=(r=o.trys).length>0&&r[r.length-1])||6!==c[0]&&2!==c[0])){o=0;continue}if(3===c[0]&&(!r||c[1]>r[0]&&c[1]<r[3])){o.label=c[1];break}if(6===c[0]&&o.label<r[1]){o.label=r[1],r=c;break}if(r&&o.label<r[2]){o.label=r[2],o.ops.push(c);break}r[2]&&o.ops.pop(),o.trys.pop();continue}c=n.call(t,o)}catch(t){c=[6,t],i=0}finally{e=r=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}},Ot=function(){function t(t){var n=t||{};if("object"!=typeof n)throw new Error("Invalid Container constructor argument. Container options must be an object.");if(void 0===n.defaultScope)n.defaultScope=m.Transient;else if(n.defaultScope!==m.Singleton&&n.defaultScope!==m.Transient&&n.defaultScope!==m.Request)throw new Error('Invalid Container option. Default scope must be a string ("singleton" or "transient").');if(void 0===n.autoBindInjectable)n.autoBindInjectable=!1;else if("boolean"!=typeof n.autoBindInjectable)throw new Error("Invalid Container option. Auto bind injectable must be a boolean");if(void 0===n.skipBaseClassChecks)n.skipBaseClassChecks=!1;else if("boolean"!=typeof n.skipBaseClassChecks)throw new Error("Invalid Container option. Skip base check must be a boolean");this.options={autoBindInjectable:n.autoBindInjectable,defaultScope:n.defaultScope,skipBaseClassChecks:n.skipBaseClassChecks},this.id=T(),this._bindingDictionary=new Rt,this._snapshots=[],this._middleware=null,this._activations=new Rt,this._deactivations=new Rt,this.parent=null,this._metadataReader=new j,this._moduleActivationStore=new jt}return t.merge=function(n,e){for(var i=[],r=2;r<arguments.length;r++)i[r-2]=arguments[r];var o=new t,a=function(t,n,e){if(e||2===arguments.length)for(var i,r=0,o=n.length;r<o;r++)!i&&r in n||(i||(i=Array.prototype.slice.call(n,0,r)),i[r]=n[r]);return t.concat(i||Array.prototype.slice.call(n))}([n,e],i,!0).map((function(t){return z(t)})),c=z(o);return a.forEach((function(t){var n;n=c,t.traverse((function(t,e){e.forEach((function(t){n.add(t.serviceIdentifier,t.clone())}))}))})),o},t.prototype.load=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var e=this._getContainerModuleHelpersFactory(),i=0,r=t;i<r.length;i++){var o=r[i],a=e(o.id);o.registry(a.bindFunction,a.unbindFunction,a.isboundFunction,a.rebindFunction,a.unbindAsyncFunction,a.onActivationFunction,a.onDeactivationFunction)}},t.prototype.loadAsync=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return Pt(this,void 0,void 0,(function(){var n,e,i,r,o;return Ft(this,(function(a){switch(a.label){case 0:n=this._getContainerModuleHelpersFactory(),e=0,i=t,a.label=1;case 1:return e<i.length?(r=i[e],o=n(r.id),[4,r.registry(o.bindFunction,o.unbindFunction,o.isboundFunction,o.rebindFunction,o.unbindAsyncFunction,o.onActivationFunction,o.onDeactivationFunction)]):[3,4];case 2:a.sent(),a.label=3;case 3:return e++,[3,1];case 4:return[2]}}))}))},t.prototype.unload=function(){for(var t=this,n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];n.forEach((function(n){var e=t._removeModuleBindings(n.id);t._deactivateSingletons(e),t._removeModuleHandlers(n.id)}))},t.prototype.unloadAsync=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return Pt(this,void 0,void 0,(function(){var n,e,i,r;return Ft(this,(function(o){switch(o.label){case 0:n=0,e=t,o.label=1;case 1:return n<e.length?(i=e[n],r=this._removeModuleBindings(i.id),[4,this._deactivateSingletonsAsync(r)]):[3,4];case 2:o.sent(),this._removeModuleHandlers(i.id),o.label=3;case 3:return n++,[3,1];case 4:return[2]}}))}))},t.prototype.bind=function(t){var n=this.options.defaultScope||m.Transient,e=new D(t,n);return this._bindingDictionary.add(t,e),new Nt(e)},t.prototype.rebind=function(t){return this.unbind(t),this.bind(t)},t.prototype.rebindAsync=function(t){return Pt(this,void 0,void 0,(function(){return Ft(this,(function(n){switch(n.label){case 0:return[4,this.unbindAsync(t)];case 1:return n.sent(),[2,this.bind(t)]}}))}))},t.prototype.unbind=function(t){if(this._bindingDictionary.hasKey(t)){var n=this._bindingDictionary.get(t);this._deactivateSingletons(n)}this._removeServiceFromDictionary(t)},t.prototype.unbindAsync=function(t){return Pt(this,void 0,void 0,(function(){var n;return Ft(this,(function(e){switch(e.label){case 0:return this._bindingDictionary.hasKey(t)?(n=this._bindingDictionary.get(t),[4,this._deactivateSingletonsAsync(n)]):[3,2];case 1:e.sent(),e.label=2;case 2:return this._removeServiceFromDictionary(t),[2]}}))}))},t.prototype.unbindAll=function(){var t=this;this._bindingDictionary.traverse((function(n,e){t._deactivateSingletons(e)})),this._bindingDictionary=new Rt},t.prototype.unbindAllAsync=function(){return Pt(this,void 0,void 0,(function(){var t,n=this;return Ft(this,(function(e){switch(e.label){case 0:return t=[],this._bindingDictionary.traverse((function(e,i){t.push(n._deactivateSingletonsAsync(i))})),[4,Promise.all(t)];case 1:return e.sent(),this._bindingDictionary=new Rt,[2]}}))}))},t.prototype.onActivation=function(t,n){this._activations.add(t,n)},t.prototype.onDeactivation=function(t,n){this._deactivations.add(t,n)},t.prototype.isBound=function(t){var n=this._bindingDictionary.hasKey(t);return!n&&this.parent&&(n=this.parent.isBound(t)),n},t.prototype.isCurrentBound=function(t){return this._bindingDictionary.hasKey(t)},t.prototype.isBoundNamed=function(t,n){return this.isBoundTagged(t,o,n)},t.prototype.isBoundTagged=function(t,n,e){var i=!1;if(this._bindingDictionary.hasKey(t)){var r=this._bindingDictionary.get(t),o=function(t,n,e,i){var r=Q(!1,n,e,i),o=(0,k.getClassElementMetadataFromLegacyMetadata)(r);if(o.kind===k.ClassElementMetadataKind.unmanaged)throw new Error("Unexpected metadata when creating target");var a=new k.LegacyTargetImpl("",o,"Variable"),c=new G(t);return new Y(n,c,null,[],a)}(this,t,n,e);i=r.some((function(t){return t.constraint(o)}))}return!i&&this.parent&&(i=this.parent.isBoundTagged(t,n,e)),i},t.prototype.snapshot=function(){this._snapshots.push(Mt.of(this._bindingDictionary.clone(),this._middleware,this._activations.clone(),this._deactivations.clone(),this._moduleActivationStore.clone()))},t.prototype.restore=function(){var t=this._snapshots.pop();if(void 0===t)throw new Error("No snapshot available to restore.");this._bindingDictionary=t.bindings,this._activations=t.activations,this._deactivations=t.deactivations,this._middleware=t.middleware,this._moduleActivationStore=t.moduleActivationStore},t.prototype.createChild=function(n){var e=new t(n||this.options);return e.parent=this,e},t.prototype.applyMiddleware=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var e=this._middleware?this._middleware:this._planAndResolve();this._middleware=t.reduce((function(t,n){return n(t)}),e)},t.prototype.applyCustomMetadataReader=function(t){this._metadataReader=t},t.prototype.get=function(t){var n=this._getNotAllArgs(t,!1);return this._getButThrowIfAsync(n)},t.prototype.getAsync=function(t){return Pt(this,void 0,void 0,(function(){var n;return Ft(this,(function(e){return n=this._getNotAllArgs(t,!1),[2,this._get(n)]}))}))},t.prototype.getTagged=function(t,n,e){var i=this._getNotAllArgs(t,!1,n,e);return this._getButThrowIfAsync(i)},t.prototype.getTaggedAsync=function(t,n,e){return Pt(this,void 0,void 0,(function(){var i;return Ft(this,(function(r){return i=this._getNotAllArgs(t,!1,n,e),[2,this._get(i)]}))}))},t.prototype.getNamed=function(t,n){return this.getTagged(t,o,n)},t.prototype.getNamedAsync=function(t,n){return Pt(this,void 0,void 0,(function(){return Ft(this,(function(e){return[2,this.getTaggedAsync(t,o,n)]}))}))},t.prototype.getAll=function(t){var n=this._getAllArgs(t);return this._getButThrowIfAsync(n)},t.prototype.getAllAsync=function(t){return Pt(this,void 0,void 0,(function(){var n;return Ft(this,(function(e){return n=this._getAllArgs(t),[2,this._getAll(n)]}))}))},t.prototype.getAllTagged=function(t,n,e){var i=this._getNotAllArgs(t,!0,n,e);return this._getButThrowIfAsync(i)},t.prototype.getAllTaggedAsync=function(t,n,e){return Pt(this,void 0,void 0,(function(){var i;return Ft(this,(function(r){return i=this._getNotAllArgs(t,!0,n,e),[2,this._getAll(i)]}))}))},t.prototype.getAllNamed=function(t,n){return this.getAllTagged(t,o,n)},t.prototype.getAllNamedAsync=function(t,n){return Pt(this,void 0,void 0,(function(){return Ft(this,(function(e){return[2,this.getAllTaggedAsync(t,o,n)]}))}))},t.prototype.resolve=function(t){var n=this.isBound(t);n||this.bind(t).toSelf();var e=this.get(t);return n||this.unbind(t),e},t.prototype._preDestroy=function(t,n){var e,i;if(void 0!==t&&Reflect.hasMetadata(v,t))return null===(i=(e=n)[Reflect.getMetadata(v,t).value])||void 0===i?void 0:i.call(e)},t.prototype._removeModuleHandlers=function(t){var n=this._moduleActivationStore.remove(t);this._activations.removeIntersection(n.onActivations),this._deactivations.removeIntersection(n.onDeactivations)},t.prototype._removeModuleBindings=function(t){return this._bindingDictionary.removeByCondition((function(n){return n.moduleId===t}))},t.prototype._deactivate=function(t,n){var e=this,i=null==n?void 0:Object.getPrototypeOf(n).constructor;try{if(this._deactivations.hasKey(t.serviceIdentifier)){var r=this._deactivateContainer(n,this._deactivations.get(t.serviceIdentifier).values());if(X(r))return this._handleDeactivationError(r.then((function(){return Pt(e,void 0,void 0,(function(){return Ft(this,(function(e){return[2,this._propagateContainerDeactivationThenBindingAndPreDestroyAsync(t,n,i)]}))}))})),t.serviceIdentifier)}var o=this._propagateContainerDeactivationThenBindingAndPreDestroy(t,n,i);if(X(o))return this._handleDeactivationError(o,t.serviceIdentifier)}catch(n){if(n instanceof Error)throw new Error(R(O(t.serviceIdentifier),n.message))}},t.prototype._handleDeactivationError=function(t,n){return Pt(this,void 0,void 0,(function(){var e;return Ft(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,t];case 1:return i.sent(),[3,3];case 2:if((e=i.sent())instanceof Error)throw new Error(R(O(n),e.message));return[3,3];case 3:return[2]}}))}))},t.prototype._deactivateContainer=function(t,n){for(var e=this,i=n.next();"function"==typeof i.value;){var r=i.value(t);if(X(r))return r.then((function(){return Pt(e,void 0,void 0,(function(){return Ft(this,(function(e){return[2,this._deactivateContainerAsync(t,n)]}))}))}));i=n.next()}},t.prototype._deactivateContainerAsync=function(t,n){return Pt(this,void 0,void 0,(function(){var e;return Ft(this,(function(i){switch(i.label){case 0:e=n.next(),i.label=1;case 1:return"function"!=typeof e.value?[3,3]:[4,e.value(t)];case 2:return i.sent(),e=n.next(),[3,1];case 3:return[2]}}))}))},t.prototype._getContainerModuleHelpersFactory=function(){var t=this,n=function(t,n){t._binding.moduleId=n},e=function(e){return function(i){var r=t.rebind(i);return n(r,e),r}},i=function(n){return function(e,i){t._moduleActivationStore.addActivation(n,e,i),t.onActivation(e,i)}},r=function(n){return function(e,i){t._moduleActivationStore.addDeactivation(n,e,i),t.onDeactivation(e,i)}};return function(o){return{bindFunction:(a=o,function(e){var i=t.bind(e);return n(i,a),i}),isboundFunction:function(n){return t.isBound(n)},onActivationFunction:i(o),onDeactivationFunction:r(o),rebindFunction:e(o),unbindAsyncFunction:function(n){return Pt(t,void 0,void 0,(function(){return Ft(this,(function(t){return[2,this.unbindAsync(n)]}))}))},unbindFunction:function(n){t.unbind(n)}};var a}},t.prototype._getAll=function(t){return Pt(this,void 0,void 0,(function(){return Ft(this,(function(n){return[2,Promise.all(this._get(t))]}))}))},t.prototype._get=function(t){var n=kt(kt({},t),{contextInterceptor:function(t){return t},targetType:S.Variable});if(this._middleware){var e=this._middleware(n);if(null==e)throw new Error("Invalid return type in middleware. Middleware must return!");return e}return this._planAndResolve()(n)},t.prototype._getButThrowIfAsync=function(t){var n,e=this._get(t);if(tt(e))throw new Error((n=t.serviceIdentifier,"You are attempting to construct ".concat(function(t){return"function"==typeof t?"[function/class ".concat(t.name||"<anonymous>","]"):"symbol"==typeof t?t.toString():"'".concat(t,"'")}(n)," in a synchronous way ")+"but it has asynchronous dependencies."));return e},t.prototype._getAllArgs=function(t){return{avoidConstraints:!0,isMultiInject:!0,serviceIdentifier:t}},t.prototype._getNotAllArgs=function(t,n,e,i){return{avoidConstraints:!1,isMultiInject:n,key:e,serviceIdentifier:t,value:i}},t.prototype._planAndResolve=function(){var t=this;return function(n){var e=function(t,n,e,i,r,o,a,c){void 0===c&&(c=!1);var u=new G(n),s=function(t,n,e,i,r,o){var a=Q(t,e,r,o),c=(0,k.getClassElementMetadataFromLegacyMetadata)(a);if(c.kind===k.ClassElementMetadataKind.unmanaged)throw new Error("Unexpected metadata when creating target");return new k.LegacyTargetImpl("",c,n)}(e,i,r,0,o,a);try{return Z(t,c,r,u,null,s),u}catch(t){throw F(t)&&V(u.plan.rootRequest),t}}(t._metadataReader,t,n.isMultiInject,n.targetType,n.serviceIdentifier,n.key,n.value,n.avoidConstraints);return function(t){return dt(t.plan.rootRequest.requestScope)(t.plan.rootRequest)}(e=n.contextInterceptor(e))}},t.prototype._deactivateIfSingleton=function(t){var n=this;if(t.activated)return X(t.cache)?t.cache.then((function(e){return n._deactivate(t,e)})):this._deactivate(t,t.cache)},t.prototype._deactivateSingletons=function(t){for(var n=0,e=t;n<e.length;n++){var i=e[n];if(X(this._deactivateIfSingleton(i)))throw new Error("Attempting to unbind dependency with asynchronous destruction (@preDestroy or onDeactivation)")}},t.prototype._deactivateSingletonsAsync=function(t){return Pt(this,void 0,void 0,(function(){var n=this;return Ft(this,(function(e){switch(e.label){case 0:return[4,Promise.all(t.map((function(t){return Pt(n,void 0,void 0,(function(){return Ft(this,(function(n){return[2,this._deactivateIfSingleton(t)]}))}))})))];case 1:return e.sent(),[2]}}))}))},t.prototype._propagateContainerDeactivationThenBindingAndPreDestroy=function(t,n,e){return this.parent?this._deactivate.bind(this.parent)(t,n):this._bindingDeactivationAndPreDestroy(t,n,e)},t.prototype._propagateContainerDeactivationThenBindingAndPreDestroyAsync=function(t,n,e){return Pt(this,void 0,void 0,(function(){return Ft(this,(function(i){switch(i.label){case 0:return this.parent?[4,this._deactivate.bind(this.parent)(t,n)]:[3,2];case 1:return i.sent(),[3,4];case 2:return[4,this._bindingDeactivationAndPreDestroyAsync(t,n,e)];case 3:i.sent(),i.label=4;case 4:return[2]}}))}))},t.prototype._removeServiceFromDictionary=function(t){try{this._bindingDictionary.remove(t)}catch(n){throw new Error("".concat("Could not unbind serviceIdentifier:"," ").concat(O(t)))}},t.prototype._bindingDeactivationAndPreDestroy=function(t,n,e){var i=this;if("function"==typeof t.onDeactivation){var r=t.onDeactivation(n);if(X(r))return r.then((function(){return i._preDestroy(e,n)}))}return this._preDestroy(e,n)},t.prototype._bindingDeactivationAndPreDestroyAsync=function(t,n,e){return Pt(this,void 0,void 0,(function(){return Ft(this,(function(i){switch(i.label){case 0:return"function"!=typeof t.onDeactivation?[3,2]:[4,t.onDeactivation(n)];case 1:i.sent(),i.label=2;case 2:return[4,this._preDestroy(e,n)];case 3:return i.sent(),[2]}}))}))},t}(),Bt=function(t){this.id=T(),this.registry=t},qt=function(t){this.id=T(),this.registry=t};function Vt(t,n,e,i){!function(t){if(void 0!==t)throw new Error(M)}(n),Wt(l,t,e.toString(),i)}function Wt(t,n,e,i){var r=function(t){var n=[];if(Array.isArray(t)){var e=function(t){for(var n=new Set,e=0,i=t;e<i.length;e++){var r=i[e];if(n.has(r))return r;n.add(r)}}((n=t).map((function(t){return t.key})));if(void 0!==e)throw new Error("".concat(E," ").concat(e.toString()))}else n=[t];return n}(i),o={};Reflect.hasOwnMetadata(t,n)&&(o=Reflect.getMetadata(t,n));var a=o[e];if(void 0===a)a=[];else for(var c=function(t){if(r.some((function(n){return n.key===t.key})))throw new Error("".concat(E," ").concat(t.key.toString()))},u=0,s=a;u<s.length;u++)c(s[u]);a.push.apply(a,r),o[e]=a,Reflect.defineMetadata(t,o,n)}function Kt(t){return function(n,e,i){"number"==typeof i?Vt(n,e,i,t):function(t,n,e){if(void 0!==t.prototype)throw new Error(M);Wt(f,t.constructor,n,e)}(n,e,t)}}function Gt(t,n){Reflect.decorate(t,n)}function Lt(t,n){return function(e,i){n(e,i,t)}}function Ut(t,n,e){"number"==typeof e?Gt([Lt(e,t)],n):"string"==typeof e?Reflect.decorate([t],n,e):Gt([t],n)}function Ht(){return function(t){if(Reflect.hasOwnMetadata(h,t))throw new Error(C);var n=Reflect.getMetadata(p,t)||[];return Reflect.defineMetadata(h,n,t),t}}function Yt(t,n){return Kt(new L(t,n))}function zt(t){return Kt(new L(o,t))}function $t(t){return function(n){return function(e,i,r){if(void 0===n){var o="function"==typeof e?e.name:e.constructor.name;throw new Error("@inject called with undefined this could mean that the class ".concat(o," has ")+"a circular dependency problem. You can use a LazyServiceIdentifer to overcome this limitation.")}Kt(new L(t,n))(e,i,r)}}}var Qt=$t(s);function Zt(){return Kt(new L(u,!0))}function Jt(){return function(t,n,e){Vt(t,n,e,new L(c,!0))}}var Xt=$t(d);function tn(t){return function(n,e,i){Vt(n,e,i,new L(a,t))}}function nn(t,n){return function(){return function(e,i){var r=new L(t,i);if(Reflect.hasOwnMetadata(t,e.constructor))throw new Error(n);Reflect.defineMetadata(t,r,e.constructor)}}}var en=nn(y,"Cannot apply @postConstruct decorator multiple times in the same class"),rn=nn(v,"Cannot apply @preDestroy decorator multiple times in the same class"),on=r,an=i.QC,cn=i.bU,un=i.XK,sn=i.mc,dn=i.i0,ln=i.FU,fn=i.KK,hn=i.PG,pn=i.$Z,yn=i.OZ,vn=i.Yi,gn=i.A$,bn=i.id,wn=i.WQ,_n=i._G,mn=i.F$,An=i.tt,Sn=i.KT,In=i.dU,Tn=i.lq,Dn=i.kr,Cn=i.E3,En=i.VK,xn=i.w,Nn=i.je,Mn=i.Nu,Rn=i.if,jn=i.Fz;export{an as AsyncContainerModule,cn as BindingScopeEnum,un as BindingTypeEnum,sn as Container,dn as ContainerModule,ln as LazyServiceIdentifier,fn as METADATA_KEY,hn as MetadataReader,pn as TargetTypeEnum,yn as createTaggedDecorator,vn as decorate,gn as getServiceIdentifierAsString,bn as id,wn as inject,_n as injectable,mn as multiBindToService,An as multiInject,Sn as named,In as namedConstraint,Tn as optional,Dn as postConstruct,Cn as preDestroy,En as tagged,xn as taggedConstraint,Nn as targetName,Mn as traverseAncerstors,Rn as typeConstraint,jn as unmanaged};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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TCxPQUFPLFNBQVU5VSxFQUFRaWEsRUFBVy9TLEdBRWhDd1IsR0FBYTFZLEVBQVFpYSxFQUFXL1MsRUFEakIsSUFBSXRJLEVBQVMsR0FBNEIsR0FFNUQsQ0FDSixDQ05BLElBQUl1YyxHQUFjSixHQUFXLEdDQzdCLFNBQVNLLEdBQVc3ZSxHQUNoQixPQUFPLFNBQVV5RCxFQUFRaWEsRUFBVy9TLEdBRWhDd1IsR0FBYTFZLEVBQVFpYSxFQUFXL1MsRUFEakIsSUFBSXRJLEVBQVMsRUFBdUJyQyxHQUV2RCxDQUNKLENDUEEsU0FBUzhlLEdBQXVCQyxFQUFVamdCLEdBQ3RDLE9BQU8sV0FDSCxPQUFPLFNBQVUyRSxFQUFRdWIsR0FDckIsSUFBSWpkLEVBQVcsSUFBSU0sRUFBUzBjLEVBQVVDLEdBQ3RDLEdBQUkzZixRQUFRK2QsZUFBZTJCLEVBQVV0YixFQUFPWCxhQUN4QyxNQUFNLElBQUlwQixNQUFNNUMsR0FFcEJPLFFBQVFtZSxlQUFldUIsRUFBVWhkLEVBQVUwQixFQUFPWCxZQUN0RCxDQUNKLENBQ0osQ0NSQSxJQUFJbWMsR0FBZ0JILEdBQXVCLEUzQ2tDRSwwRTRDbEN6Q0ksR0FBYUosR0FBdUIsRTVDaUNFLHVFNkNsQy9CSyxHQUFlLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pbnZlcnNpZnkvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvY29uc3RhbnRzL21ldGFkYXRhX2tleXMudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5L2V4dGVybmFsIG1vZHVsZSBcIkBpbnZlcnNpZnlqcy9jb21tb25cIiIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvY29uc3RhbnRzL2xpdGVyYWxfdHlwZXMudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL3V0aWxzL2lkLnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy9iaW5kaW5ncy9iaW5kaW5nLnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy9jb25zdGFudHMvZXJyb3JfbXNncy50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvcGxhbm5pbmcvbWV0YWRhdGFfcmVhZGVyLnRzIiwid2VicGFjazovL2ludmVyc2lmeS9leHRlcm5hbCBtb2R1bGUgXCJAaW52ZXJzaWZ5anMvY29yZVwiIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy9iaW5kaW5ncy9iaW5kaW5nX2NvdW50LnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy91dGlscy9leGNlcHRpb25zLnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy91dGlscy9zZXJpYWxpemF0aW9uLnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy9wbGFubmluZy9jb250ZXh0LnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy9wbGFubmluZy9tZXRhZGF0YS50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvcGxhbm5pbmcvcGxhbi50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvcGxhbm5pbmcvcmVmbGVjdGlvbl91dGlscy50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvcGxhbm5pbmcvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvcGxhbm5pbmcvcGxhbm5lci50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvdXRpbHMvYXN5bmMudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL3Njb3BlL3Njb3BlLnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy91dGlscy9mYWN0b3J5X3R5cGUudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL3V0aWxzL2JpbmRpbmdfdXRpbHMudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL3Jlc29sdXRpb24vaW5zdGFudGlhdGlvbi50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvcmVzb2x1dGlvbi9yZXNvbHZlci50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvc3ludGF4L2NvbnN0cmFpbnRfaGVscGVycy50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvc3ludGF4L2JpbmRpbmdfd2hlbl9zeW50YXgudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL3N5bnRheC9iaW5kaW5nX29uX3N5bnRheC50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvc3ludGF4L2JpbmRpbmdfd2hlbl9vbl9zeW50YXgudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL3N5bnRheC9iaW5kaW5nX2luX3N5bnRheC50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvc3ludGF4L2JpbmRpbmdfaW5fd2hlbl9vbl9zeW50YXgudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL3N5bnRheC9iaW5kaW5nX3RvX3N5bnRheC50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvY29udGFpbmVyL2NvbnRhaW5lcl9zbmFwc2hvdC50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvY29udGFpbmVyL2xvb2t1cC50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvdXRpbHMvY2xvbmFibGUudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL2NvbnRhaW5lci9tb2R1bGVfYWN0aXZhdGlvbl9zdG9yZS50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvY29udGFpbmVyL2NvbnRhaW5lci50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvY29udGFpbmVyL2NvbnRhaW5lcl9tb2R1bGUudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL2Fubm90YXRpb24vZGVjb3JhdG9yX3V0aWxzLnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy91dGlscy9qcy50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvYW5ub3RhdGlvbi9pbmplY3RhYmxlLnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy9hbm5vdGF0aW9uL3RhZ2dlZC50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvYW5ub3RhdGlvbi9uYW1lZC50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvYW5ub3RhdGlvbi9pbmplY3RfYmFzZS50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvYW5ub3RhdGlvbi9pbmplY3QudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL2Fubm90YXRpb24vb3B0aW9uYWwudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL2Fubm90YXRpb24vdW5tYW5hZ2VkLnRzIiwid2VicGFjazovL2ludmVyc2lmeS8uL3NyYy9hbm5vdGF0aW9uL211bHRpX2luamVjdC50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvYW5ub3RhdGlvbi90YXJnZXRfbmFtZS50cyIsIndlYnBhY2s6Ly9pbnZlcnNpZnkvLi9zcmMvYW5ub3RhdGlvbi9wcm9wZXJ0eV9ldmVudF9kZWNvcmF0b3IudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL2Fubm90YXRpb24vcG9zdF9jb25zdHJ1Y3QudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL2Fubm90YXRpb24vcHJlX2Rlc3Ryb3kudHMiLCJ3ZWJwYWNrOi8vaW52ZXJzaWZ5Ly4vc3JjL2ludmVyc2lmeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImV4cG9ydCB2YXIgTkFNRURfVEFHID0gJ25hbWVkJztcbmV4cG9ydCB2YXIgTkFNRV9UQUcgPSAnbmFtZSc7XG5leHBvcnQgdmFyIFVOTUFOQUdFRF9UQUcgPSAndW5tYW5hZ2VkJztcbmV4cG9ydCB2YXIgT1BUSU9OQUxfVEFHID0gJ29wdGlvbmFsJztcbmV4cG9ydCB2YXIgSU5KRUNUX1RBRyA9ICdpbmplY3QnO1xuZXhwb3J0IHZhciBNVUxUSV9JTkpFQ1RfVEFHID0gJ211bHRpX2luamVjdCc7XG5leHBvcnQgdmFyIFRBR0dFRCA9ICdpbnZlcnNpZnk6dGFnZ2VkJztcbmV4cG9ydCB2YXIgVEFHR0VEX1BST1AgPSAnaW52ZXJzaWZ5OnRhZ2dlZF9wcm9wcyc7XG5leHBvcnQgdmFyIFBBUkFNX1RZUEVTID0gJ2ludmVyc2lmeTpwYXJhbXR5cGVzJztcbmV4cG9ydCB2YXIgREVTSUdOX1BBUkFNX1RZUEVTID0gJ2Rlc2lnbjpwYXJhbXR5cGVzJztcbmV4cG9ydCB2YXIgUE9TVF9DT05TVFJVQ1QgPSAncG9zdF9jb25zdHJ1Y3QnO1xuZXhwb3J0IHZhciBQUkVfREVTVFJPWSA9ICdwcmVfZGVzdHJveSc7XG5mdW5jdGlvbiBnZXROb25DdXN0b21UYWdLZXlzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAgIElOSkVDVF9UQUcsXG4gICAgICAgIE1VTFRJX0lOSkVDVF9UQUcsXG4gICAgICAgIE5BTUVfVEFHLFxuICAgICAgICBVTk1BTkFHRURfVEFHLFxuICAgICAgICBOQU1FRF9UQUcsXG4gICAgICAgIE9QVElPTkFMX1RBRyxcbiAgICBdO1xufVxuZXhwb3J0IHZhciBOT05fQ1VTVE9NX1RBR19LRVlTID0gZ2V0Tm9uQ3VzdG9tVGFnS2V5cygpO1xuIiwidmFyIHggPSAoeSkgPT4ge1xuXHR2YXIgeCA9IHt9OyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoeCwgeSk7IHJldHVybiB4XG59IFxudmFyIHkgPSAoeCkgPT4gKCgpID0+ICh4KSlcbmNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSB4KHsgW1wiTGF6eVNlcnZpY2VJZGVudGlmaWVyXCJdOiAoKSA9PiAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9faW52ZXJzaWZ5anNfY29tbW9uXzA4MWQ4YzA3X18uTGF6eVNlcnZpY2VJZGVudGlmaWVyKSB9KTsiLCJ2YXIgQmluZGluZ1Njb3BlRW51bSA9IHtcbiAgICBSZXF1ZXN0OiAnUmVxdWVzdCcsXG4gICAgU2luZ2xldG9uOiAnU2luZ2xldG9uJyxcbiAgICBUcmFuc2llbnQ6ICdUcmFuc2llbnQnLFxufTtcbnZhciBCaW5kaW5nVHlwZUVudW0gPSB7XG4gICAgQ29uc3RhbnRWYWx1ZTogJ0NvbnN0YW50VmFsdWUnLFxuICAgIENvbnN0cnVjdG9yOiAnQ29uc3RydWN0b3InLFxuICAgIER5bmFtaWNWYWx1ZTogJ0R5bmFtaWNWYWx1ZScsXG4gICAgRmFjdG9yeTogJ0ZhY3RvcnknLFxuICAgIEZ1bmN0aW9uOiAnRnVuY3Rpb24nLFxuICAgIEluc3RhbmNlOiAnSW5zdGFuY2UnLFxuICAgIEludmFsaWQ6ICdJbnZhbGlkJyxcbiAgICBQcm92aWRlcjogJ1Byb3ZpZGVyJyxcbn07XG52YXIgVGFyZ2V0VHlwZUVudW0gPSB7XG4gICAgQ2xhc3NQcm9wZXJ0eTogJ0NsYXNzUHJvcGVydHknLFxuICAgIENvbnN0cnVjdG9yQXJndW1lbnQ6ICdDb25zdHJ1Y3RvckFyZ3VtZW50JyxcbiAgICBWYXJpYWJsZTogJ1ZhcmlhYmxlJyxcbn07XG5leHBvcnQgeyBCaW5kaW5nU2NvcGVFbnVtLCBCaW5kaW5nVHlwZUVudW0sIFRhcmdldFR5cGVFbnVtIH07XG4iLCJ2YXIgaWRDb3VudGVyID0gMDtcbmZ1bmN0aW9uIGlkKCkge1xuICAgIHJldHVybiBpZENvdW50ZXIrKztcbn1cbmV4cG9ydCB7IGlkIH07XG4iLCJpbXBvcnQgeyBCaW5kaW5nU2NvcGVFbnVtLCBCaW5kaW5nVHlwZUVudW0gfSBmcm9tICcuLi9jb25zdGFudHMvbGl0ZXJhbF90eXBlcyc7XG5pbXBvcnQgeyBpZCB9IGZyb20gJy4uL3V0aWxzL2lkJztcbnZhciBCaW5kaW5nID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCaW5kaW5nKHNlcnZpY2VJZGVudGlmaWVyLCBzY29wZSkge1xuICAgICAgICB0aGlzLmlkID0gaWQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlSWRlbnRpZmllciA9IHNlcnZpY2VJZGVudGlmaWVyO1xuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgICAgIHRoaXMudHlwZSA9IEJpbmRpbmdUeXBlRW51bS5JbnZhbGlkO1xuICAgICAgICB0aGlzLmNvbnN0cmFpbnQgPSBmdW5jdGlvbiAoX3JlcXVlc3QpIHsgcmV0dXJuIHRydWU7IH07XG4gICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb25UeXBlID0gbnVsbDtcbiAgICAgICAgdGhpcy5jYWNoZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmFjdG9yeSA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvdmlkZXIgPSBudWxsO1xuICAgICAgICB0aGlzLm9uQWN0aXZhdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMub25EZWFjdGl2YXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmR5bmFtaWNWYWx1ZSA9IG51bGw7XG4gICAgfVxuICAgIEJpbmRpbmcucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2xvbmUgPSBuZXcgQmluZGluZyh0aGlzLnNlcnZpY2VJZGVudGlmaWVyLCB0aGlzLnNjb3BlKTtcbiAgICAgICAgY2xvbmUuYWN0aXZhdGVkID1cbiAgICAgICAgICAgIGNsb25lLnNjb3BlID09PSBCaW5kaW5nU2NvcGVFbnVtLlNpbmdsZXRvbiA/IHRoaXMuYWN0aXZhdGVkIDogZmFsc2U7XG4gICAgICAgIGNsb25lLmltcGxlbWVudGF0aW9uVHlwZSA9IHRoaXMuaW1wbGVtZW50YXRpb25UeXBlO1xuICAgICAgICBjbG9uZS5keW5hbWljVmFsdWUgPSB0aGlzLmR5bmFtaWNWYWx1ZTtcbiAgICAgICAgY2xvbmUuc2NvcGUgPSB0aGlzLnNjb3BlO1xuICAgICAgICBjbG9uZS50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICBjbG9uZS5mYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuICAgICAgICBjbG9uZS5wcm92aWRlciA9IHRoaXMucHJvdmlkZXI7XG4gICAgICAgIGNsb25lLmNvbnN0cmFpbnQgPSB0aGlzLmNvbnN0cmFpbnQ7XG4gICAgICAgIGNsb25lLm9uQWN0aXZhdGlvbiA9IHRoaXMub25BY3RpdmF0aW9uO1xuICAgICAgICBjbG9uZS5vbkRlYWN0aXZhdGlvbiA9IHRoaXMub25EZWFjdGl2YXRpb247XG4gICAgICAgIGNsb25lLmNhY2hlID0gdGhpcy5jYWNoZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH07XG4gICAgcmV0dXJuIEJpbmRpbmc7XG59KCkpO1xuZXhwb3J0IHsgQmluZGluZyB9O1xuIiwiZXhwb3J0IHZhciBEVVBMSUNBVEVEX0lOSkVDVEFCTEVfREVDT1JBVE9SID0gJ0Nhbm5vdCBhcHBseSBAaW5qZWN0YWJsZSBkZWNvcmF0b3IgbXVsdGlwbGUgdGltZXMuJztcbmV4cG9ydCB2YXIgRFVQTElDQVRFRF9NRVRBREFUQSA9ICdNZXRhZGF0YSBrZXkgd2FzIHVzZWQgbW9yZSB0aGFuIG9uY2UgaW4gYSBwYXJhbWV0ZXI6JztcbmV4cG9ydCB2YXIgTlVMTF9BUkdVTUVOVCA9ICdOVUxMIGFyZ3VtZW50JztcbmV4cG9ydCB2YXIgS0VZX05PVF9GT1VORCA9ICdLZXkgTm90IEZvdW5kJztcbmV4cG9ydCB2YXIgQU1CSUdVT1VTX01BVENIID0gJ0FtYmlndW91cyBtYXRjaCBmb3VuZCBmb3Igc2VydmljZUlkZW50aWZpZXI6JztcbmV4cG9ydCB2YXIgQ0FOTk9UX1VOQklORCA9ICdDb3VsZCBub3QgdW5iaW5kIHNlcnZpY2VJZGVudGlmaWVyOic7XG5leHBvcnQgdmFyIE5PVF9SRUdJU1RFUkVEID0gJ05vIG1hdGNoaW5nIGJpbmRpbmdzIGZvdW5kIGZvciBzZXJ2aWNlSWRlbnRpZmllcjonO1xuZXhwb3J0IHZhciBUUllJTkdfVE9fUkVTT0xWRV9CSU5ESU5HUyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBcIlRyeWluZyB0byByZXNvbHZlIGJpbmRpbmdzIGZvciBcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIlwiKTsgfTtcbmV4cG9ydCB2YXIgVU5ERUZJTkVEX0lOSkVDVF9BTk5PVEFUSU9OID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gXCJAaW5qZWN0IGNhbGxlZCB3aXRoIHVuZGVmaW5lZCB0aGlzIGNvdWxkIG1lYW4gdGhhdCB0aGUgY2xhc3MgXCIuY29uY2F0KG5hbWUsIFwiIGhhcyBcIikgK1xuICAgICAgICAnYSBjaXJjdWxhciBkZXBlbmRlbmN5IHByb2JsZW0uIFlvdSBjYW4gdXNlIGEgTGF6eVNlcnZpY2VJZGVudGlmZXIgdG8gJyArXG4gICAgICAgICdvdmVyY29tZSB0aGlzIGxpbWl0YXRpb24uJztcbn07XG5leHBvcnQgdmFyIENJUkNVTEFSX0RFUEVOREVOQ1kgPSAnQ2lyY3VsYXIgZGVwZW5kZW5jeSBmb3VuZDonO1xuZXhwb3J0IHZhciBJTlZBTElEX0JJTkRJTkdfVFlQRSA9ICdJbnZhbGlkIGJpbmRpbmcgdHlwZTonO1xuZXhwb3J0IHZhciBOT19NT1JFX1NOQVBTSE9UU19BVkFJTEFCTEUgPSAnTm8gc25hcHNob3QgYXZhaWxhYmxlIHRvIHJlc3RvcmUuJztcbmV4cG9ydCB2YXIgSU5WQUxJRF9NSURETEVXQVJFX1JFVFVSTiA9ICdJbnZhbGlkIHJldHVybiB0eXBlIGluIG1pZGRsZXdhcmUuIE1pZGRsZXdhcmUgbXVzdCByZXR1cm4hJztcbmV4cG9ydCB2YXIgSU5WQUxJRF9GVU5DVElPTl9CSU5ESU5HID0gJ1ZhbHVlIHByb3ZpZGVkIHRvIGZ1bmN0aW9uIGJpbmRpbmcgbXVzdCBiZSBhIGZ1bmN0aW9uISc7XG5leHBvcnQgdmFyIExBWllfSU5fU1lOQyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gXCJZb3UgYXJlIGF0dGVtcHRpbmcgdG8gY29uc3RydWN0IFwiLmNvbmNhdChrZXlUb1N0cmluZyhrZXkpLCBcIiBpbiBhIHN5bmNocm9ub3VzIHdheSBcIikgK1xuICAgICAgICAnYnV0IGl0IGhhcyBhc3luY2hyb25vdXMgZGVwZW5kZW5jaWVzLic7XG59O1xuZXhwb3J0IHZhciBJTlZBTElEX1RPX1NFTEZfVkFMVUUgPSAnVGhlIHRvU2VsZiBmdW5jdGlvbiBjYW4gb25seSBiZSBhcHBsaWVkIHdoZW4gYSBjb25zdHJ1Y3RvciBpcyAnICtcbiAgICAndXNlZCBhcyBzZXJ2aWNlIGlkZW50aWZpZXInO1xuZXhwb3J0IHZhciBJTlZBTElEX0RFQ09SQVRPUl9PUEVSQVRJT04gPSAnVGhlIEBpbmplY3QgQG11bHRpSW5qZWN0IEB0YWdnZWQgYW5kIEBuYW1lZCBkZWNvcmF0b3JzICcgK1xuICAgICdtdXN0IGJlIGFwcGxpZWQgdG8gdGhlIHBhcmFtZXRlcnMgb2YgYSBjbGFzcyBjb25zdHJ1Y3RvciBvciBhIGNsYXNzIHByb3BlcnR5Lic7XG5leHBvcnQgdmFyIEFSR1VNRU5UU19MRU5HVEhfTUlTTUFUQ0ggPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiAnVGhlIG51bWJlciBvZiBjb25zdHJ1Y3RvciBhcmd1bWVudHMgaW4gdGhlIGRlcml2ZWQgY2xhc3MgJyArXG4gICAgICAgIFwiXCIuY29uY2F0KG5hbWUsIFwiIG11c3QgYmUgPj0gdGhhbiB0aGUgbnVtYmVyIG9mIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyBvZiBpdHMgYmFzZSBjbGFzcy5cIik7XG59O1xuZXhwb3J0IHZhciBDT05UQUlORVJfT1BUSU9OU19NVVNUX0JFX0FOX09CSkVDVCA9ICdJbnZhbGlkIENvbnRhaW5lciBjb25zdHJ1Y3RvciBhcmd1bWVudC4gQ29udGFpbmVyIG9wdGlvbnMgJyArXG4gICAgJ211c3QgYmUgYW4gb2JqZWN0Lic7XG5leHBvcnQgdmFyIENPTlRBSU5FUl9PUFRJT05TX0lOVkFMSURfREVGQVVMVF9TQ09QRSA9ICdJbnZhbGlkIENvbnRhaW5lciBvcHRpb24uIERlZmF1bHQgc2NvcGUgbXVzdCAnICtcbiAgICAnYmUgYSBzdHJpbmcgKFwic2luZ2xldG9uXCIgb3IgXCJ0cmFuc2llbnRcIikuJztcbmV4cG9ydCB2YXIgQ09OVEFJTkVSX09QVElPTlNfSU5WQUxJRF9BVVRPX0JJTkRfSU5KRUNUQUJMRSA9ICdJbnZhbGlkIENvbnRhaW5lciBvcHRpb24uIEF1dG8gYmluZCBpbmplY3RhYmxlIG11c3QgJyArICdiZSBhIGJvb2xlYW4nO1xuZXhwb3J0IHZhciBDT05UQUlORVJfT1BUSU9OU19JTlZBTElEX1NLSVBfQkFTRV9DSEVDSyA9ICdJbnZhbGlkIENvbnRhaW5lciBvcHRpb24uIFNraXAgYmFzZSBjaGVjayBtdXN0ICcgKyAnYmUgYSBib29sZWFuJztcbmV4cG9ydCB2YXIgTVVMVElQTEVfUFJFX0RFU1RST1lfTUVUSE9EUyA9ICdDYW5ub3QgYXBwbHkgQHByZURlc3Ryb3kgZGVjb3JhdG9yIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIGNsYXNzJztcbmV4cG9ydCB2YXIgTVVMVElQTEVfUE9TVF9DT05TVFJVQ1RfTUVUSE9EUyA9ICdDYW5ub3QgYXBwbHkgQHBvc3RDb25zdHJ1Y3QgZGVjb3JhdG9yIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIGNsYXNzJztcbmV4cG9ydCB2YXIgQVNZTkNfVU5CSU5EX1JFUVVJUkVEID0gJ0F0dGVtcHRpbmcgdG8gdW5iaW5kIGRlcGVuZGVuY3kgd2l0aCBhc3luY2hyb25vdXMgZGVzdHJ1Y3Rpb24gKEBwcmVEZXN0cm95IG9yIG9uRGVhY3RpdmF0aW9uKSc7XG5leHBvcnQgdmFyIFBPU1RfQ09OU1RSVUNUX0VSUk9SID0gZnVuY3Rpb24gKGNsYXp6LCBlcnJvck1lc3NhZ2UpIHtcbiAgICByZXR1cm4gXCJAcG9zdENvbnN0cnVjdCBlcnJvciBpbiBjbGFzcyBcIi5jb25jYXQoY2xhenosIFwiOiBcIikuY29uY2F0KGVycm9yTWVzc2FnZSk7XG59O1xuZXhwb3J0IHZhciBQUkVfREVTVFJPWV9FUlJPUiA9IGZ1bmN0aW9uIChjbGF6eiwgZXJyb3JNZXNzYWdlKSB7XG4gICAgcmV0dXJuIFwiQHByZURlc3Ryb3kgZXJyb3IgaW4gY2xhc3MgXCIuY29uY2F0KGNsYXp6LCBcIjogXCIpLmNvbmNhdChlcnJvck1lc3NhZ2UpO1xufTtcbmV4cG9ydCB2YXIgT05fREVBQ1RJVkFUSU9OX0VSUk9SID0gZnVuY3Rpb24gKGNsYXp6LCBlcnJvck1lc3NhZ2UpIHtcbiAgICByZXR1cm4gXCJvbkRlYWN0aXZhdGlvbigpIGVycm9yIGluIGNsYXNzIFwiLmNvbmNhdChjbGF6eiwgXCI6IFwiKS5jb25jYXQoZXJyb3JNZXNzYWdlKTtcbn07XG5leHBvcnQgdmFyIENJUkNVTEFSX0RFUEVOREVOQ1lfSU5fRkFDVE9SWSA9IGZ1bmN0aW9uIChmYWN0b3J5VHlwZSwgc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gXCJJdCBsb29rcyBsaWtlIHRoZXJlIGlzIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBvbmUgb2YgdGhlICdcIi5jb25jYXQoZmFjdG9yeVR5cGUsIFwiJyBiaW5kaW5ncy4gUGxlYXNlIGludmVzdGlnYXRlIGJpbmRpbmdzIHdpdGggXCIpICtcbiAgICAgICAgXCJzZXJ2aWNlIGlkZW50aWZpZXIgJ1wiLmNvbmNhdChzZXJ2aWNlSWRlbnRpZmllciwgXCInLlwiKTtcbn07XG5leHBvcnQgdmFyIFNUQUNLX09WRVJGTE9XID0gJ01heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkJztcbmZ1bmN0aW9uIGtleVRvU3RyaW5nKGtleSkge1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBcIltmdW5jdGlvbi9jbGFzcyBcIi5jb25jYXQoa2V5Lm5hbWUgfHwgJzxhbm9ueW1vdXM+JywgXCJdXCIpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIGtleS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gXCInXCIuY29uY2F0KGtleSwgXCInXCIpO1xufVxuIiwiaW1wb3J0ICogYXMgTUVUQURBVEFfS0VZIGZyb20gJy4uL2NvbnN0YW50cy9tZXRhZGF0YV9rZXlzJztcbnZhciBNZXRhZGF0YVJlYWRlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWV0YWRhdGFSZWFkZXIoKSB7XG4gICAgfVxuICAgIE1ldGFkYXRhUmVhZGVyLnByb3RvdHlwZS5nZXRDb25zdHJ1Y3Rvck1ldGFkYXRhID0gZnVuY3Rpb24gKGNvbnN0cnVjdG9yRnVuYykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBjb21waWxlckdlbmVyYXRlZE1ldGFkYXRhID0gKF9hID0gUmVmbGVjdC5nZXRNZXRhZGF0YShNRVRBREFUQV9LRVkuREVTSUdOX1BBUkFNX1RZUEVTLCBjb25zdHJ1Y3RvckZ1bmMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgdmFyIHVzZXJHZW5lcmF0ZWRNZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoTUVUQURBVEFfS0VZLlRBR0dFRCwgY29uc3RydWN0b3JGdW5jKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbXBpbGVyR2VuZXJhdGVkTWV0YWRhdGE6IGNvbXBpbGVyR2VuZXJhdGVkTWV0YWRhdGEsXG4gICAgICAgICAgICB1c2VyR2VuZXJhdGVkTWV0YWRhdGE6IHVzZXJHZW5lcmF0ZWRNZXRhZGF0YSAhPT0gbnVsbCAmJiB1c2VyR2VuZXJhdGVkTWV0YWRhdGEgIT09IHZvaWQgMCA/IHVzZXJHZW5lcmF0ZWRNZXRhZGF0YSA6IHt9LFxuICAgICAgICB9O1xuICAgIH07XG4gICAgTWV0YWRhdGFSZWFkZXIucHJvdG90eXBlLmdldFByb3BlcnRpZXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChjb25zdHJ1Y3RvckZ1bmMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgdXNlckdlbmVyYXRlZE1ldGFkYXRhID0gKF9hID0gUmVmbGVjdC5nZXRNZXRhZGF0YShNRVRBREFUQV9LRVkuVEFHR0VEX1BST1AsIGNvbnN0cnVjdG9yRnVuYykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgICAgICByZXR1cm4gdXNlckdlbmVyYXRlZE1ldGFkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIE1ldGFkYXRhUmVhZGVyO1xufSgpKTtcbmV4cG9ydCB7IE1ldGFkYXRhUmVhZGVyIH07XG4iLCJ2YXIgeCA9ICh5KSA9PiB7XG5cdHZhciB4ID0ge307IF9fd2VicGFja19yZXF1aXJlX18uZCh4LCB5KTsgcmV0dXJuIHhcbn0gXG52YXIgeSA9ICh4KSA9PiAoKCkgPT4gKHgpKVxuY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHgoeyBbXCJDbGFzc0VsZW1lbnRNZXRhZGF0YUtpbmRcIl06ICgpID0+IChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX19pbnZlcnNpZnlqc19jb3JlX2MwOGNmNGExX18uQ2xhc3NFbGVtZW50TWV0YWRhdGFLaW5kKSwgW1wiTGVnYWN5VGFyZ2V0SW1wbFwiXTogKCkgPT4gKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfX2ludmVyc2lmeWpzX2NvcmVfYzA4Y2Y0YTFfXy5MZWdhY3lUYXJnZXRJbXBsKSwgW1wiZ2V0Q2xhc3NFbGVtZW50TWV0YWRhdGFGcm9tTGVnYWN5TWV0YWRhdGFcIl06ICgpID0+IChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX19pbnZlcnNpZnlqc19jb3JlX2MwOGNmNGExX18uZ2V0Q2xhc3NFbGVtZW50TWV0YWRhdGFGcm9tTGVnYWN5TWV0YWRhdGEpLCBbXCJnZXRUYXJnZXRzXCJdOiAoKSA9PiAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9faW52ZXJzaWZ5anNfY29yZV9jMDhjZjRhMV9fLmdldFRhcmdldHMpIH0pOyIsImV4cG9ydCB2YXIgQmluZGluZ0NvdW50O1xuKGZ1bmN0aW9uIChCaW5kaW5nQ291bnQpIHtcbiAgICBCaW5kaW5nQ291bnRbQmluZGluZ0NvdW50W1wiTXVsdGlwbGVCaW5kaW5nc0F2YWlsYWJsZVwiXSA9IDJdID0gXCJNdWx0aXBsZUJpbmRpbmdzQXZhaWxhYmxlXCI7XG4gICAgQmluZGluZ0NvdW50W0JpbmRpbmdDb3VudFtcIk5vQmluZGluZ3NBdmFpbGFibGVcIl0gPSAwXSA9IFwiTm9CaW5kaW5nc0F2YWlsYWJsZVwiO1xuICAgIEJpbmRpbmdDb3VudFtCaW5kaW5nQ291bnRbXCJPbmx5T25lQmluZGluZ0F2YWlsYWJsZVwiXSA9IDFdID0gXCJPbmx5T25lQmluZGluZ0F2YWlsYWJsZVwiO1xufSkoQmluZGluZ0NvdW50IHx8IChCaW5kaW5nQ291bnQgPSB7fSkpO1xuIiwiaW1wb3J0ICogYXMgRVJST1JfTVNHUyBmcm9tICcuLi9jb25zdGFudHMvZXJyb3JfbXNncyc7XG5leHBvcnQgZnVuY3Rpb24gaXNTdGFja092ZXJmbG93RXhjZXB0aW9uKGVycm9yKSB7XG4gICAgcmV0dXJuIChlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IgfHxcbiAgICAgICAgZXJyb3IubWVzc2FnZSA9PT0gRVJST1JfTVNHUy5TVEFDS19PVkVSRkxPVyk7XG59XG5leHBvcnQgdmFyIHRyeUFuZFRocm93RXJyb3JJZlN0YWNrT3ZlcmZsb3cgPSBmdW5jdGlvbiAoZm4sIGVycm9yQ2FsbGJhY2spIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChpc1N0YWNrT3ZlcmZsb3dFeGNlcHRpb24oZXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvckNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufTtcbiIsImltcG9ydCAqIGFzIEVSUk9SX01TR1MgZnJvbSAnLi4vY29uc3RhbnRzL2Vycm9yX21zZ3MnO1xuZnVuY3Rpb24gZ2V0U2VydmljZUlkZW50aWZpZXJBc1N0cmluZyhzZXJ2aWNlSWRlbnRpZmllcikge1xuICAgIGlmICh0eXBlb2Ygc2VydmljZUlkZW50aWZpZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VJZGVudGlmaWVyLm5hbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzZXJ2aWNlSWRlbnRpZmllciA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VJZGVudGlmaWVyLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VydmljZUlkZW50aWZpZXI7XG4gICAgfVxufVxuZnVuY3Rpb24gbGlzdFJlZ2lzdGVyZWRCaW5kaW5nc0ZvclNlcnZpY2VJZGVudGlmaWVyKGNvbnRhaW5lciwgc2VydmljZUlkZW50aWZpZXIsIGdldEJpbmRpbmdzKSB7XG4gICAgdmFyIHJlZ2lzdGVyZWRCaW5kaW5nc0xpc3QgPSAnJztcbiAgICB2YXIgcmVnaXN0ZXJlZEJpbmRpbmdzID0gZ2V0QmluZGluZ3MoY29udGFpbmVyLCBzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgaWYgKHJlZ2lzdGVyZWRCaW5kaW5ncy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgcmVnaXN0ZXJlZEJpbmRpbmdzTGlzdCA9ICdcXG5SZWdpc3RlcmVkIGJpbmRpbmdzOic7XG4gICAgICAgIHJlZ2lzdGVyZWRCaW5kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChiaW5kaW5nKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9ICdPYmplY3QnO1xuICAgICAgICAgICAgaWYgKGJpbmRpbmcuaW1wbGVtZW50YXRpb25UeXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGdldEZ1bmN0aW9uTmFtZShiaW5kaW5nLmltcGxlbWVudGF0aW9uVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWdpc3RlcmVkQmluZGluZ3NMaXN0ID0gXCJcIi5jb25jYXQocmVnaXN0ZXJlZEJpbmRpbmdzTGlzdCwgXCJcXG4gXCIpLmNvbmNhdChuYW1lKTtcbiAgICAgICAgICAgIGlmIChiaW5kaW5nLmNvbnN0cmFpbnQubWV0YURhdGEpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RlcmVkQmluZGluZ3NMaXN0ID0gXCJcIi5jb25jYXQocmVnaXN0ZXJlZEJpbmRpbmdzTGlzdCwgXCIgLSBcIikuY29uY2F0KGJpbmRpbmcuY29uc3RyYWludC5tZXRhRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVnaXN0ZXJlZEJpbmRpbmdzTGlzdDtcbn1cbmZ1bmN0aW9uIGFscmVhZHlEZXBlbmRlbmN5Q2hhaW4ocmVxdWVzdCwgc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICBpZiAocmVxdWVzdC5wYXJlbnRSZXF1ZXN0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxdWVzdC5wYXJlbnRSZXF1ZXN0LnNlcnZpY2VJZGVudGlmaWVyID09PSBzZXJ2aWNlSWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBhbHJlYWR5RGVwZW5kZW5jeUNoYWluKHJlcXVlc3QucGFyZW50UmVxdWVzdCwgc2VydmljZUlkZW50aWZpZXIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlcGVuZGVuY3lDaGFpblRvU3RyaW5nKHJlcXVlc3QpIHtcbiAgICBmdW5jdGlvbiBfY3JlYXRlU3RyaW5nQXJyKHJlcSwgcmVzdWx0KSB7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgeyByZXN1bHQgPSBbXTsgfVxuICAgICAgICB2YXIgc2VydmljZUlkZW50aWZpZXIgPSBnZXRTZXJ2aWNlSWRlbnRpZmllckFzU3RyaW5nKHJlcS5zZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgIHJlc3VsdC5wdXNoKHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKHJlcS5wYXJlbnRSZXF1ZXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZVN0cmluZ0FycihyZXEucGFyZW50UmVxdWVzdCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB2YXIgc3RyaW5nQXJyID0gX2NyZWF0ZVN0cmluZ0FycihyZXF1ZXN0KTtcbiAgICByZXR1cm4gc3RyaW5nQXJyLnJldmVyc2UoKS5qb2luKCcgLS0+ICcpO1xufVxuZnVuY3Rpb24gY2lyY3VsYXJEZXBlbmRlbmN5VG9FeGNlcHRpb24ocmVxdWVzdCkge1xuICAgIHJlcXVlc3QuY2hpbGRSZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZFJlcXVlc3QpIHtcbiAgICAgICAgaWYgKGFscmVhZHlEZXBlbmRlbmN5Q2hhaW4ocmVxdWVzdCwgY2hpbGRSZXF1ZXN0LnNlcnZpY2VJZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgdmFyIHNlcnZpY2VzID0gZGVwZW5kZW5jeUNoYWluVG9TdHJpbmcoY2hpbGRSZXF1ZXN0KTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdChFUlJPUl9NU0dTLkNJUkNVTEFSX0RFUEVOREVOQ1ksIFwiIFwiKS5jb25jYXQoc2VydmljZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW5jeVRvRXhjZXB0aW9uKGNoaWxkUmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGxpc3RNZXRhZGF0YUZvclRhcmdldChzZXJ2aWNlSWRlbnRpZmllclN0cmluZywgdGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldC5pc1RhZ2dlZCgpIHx8IHRhcmdldC5pc05hbWVkKCkpIHtcbiAgICAgICAgdmFyIG1fMSA9ICcnO1xuICAgICAgICB2YXIgbmFtZWRUYWcgPSB0YXJnZXQuZ2V0TmFtZWRUYWcoKTtcbiAgICAgICAgdmFyIG90aGVyVGFncyA9IHRhcmdldC5nZXRDdXN0b21UYWdzKCk7XG4gICAgICAgIGlmIChuYW1lZFRhZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbV8xICs9IHN0cmluZ2lmeU1ldGFkYXRhKG5hbWVkVGFnKSArICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdGhlclRhZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG90aGVyVGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgICAgICAgICAgICBtXzEgKz0gc3RyaW5naWZ5TWV0YWRhdGEodGFnKSArICdcXG4nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiIFwiLmNvbmNhdChzZXJ2aWNlSWRlbnRpZmllclN0cmluZywgXCJcXG4gXCIpLmNvbmNhdChzZXJ2aWNlSWRlbnRpZmllclN0cmluZywgXCIgLSBcIikuY29uY2F0KG1fMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gXCIgXCIuY29uY2F0KHNlcnZpY2VJZGVudGlmaWVyU3RyaW5nKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWUoZnVuYykge1xuICAgIGlmIChmdW5jLm5hbWUgIT0gbnVsbCAmJiBmdW5jLm5hbWUgIT09ICcnKSB7XG4gICAgICAgIHJldHVybiBmdW5jLm5hbWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgbmFtZV8xID0gZnVuYy50b1N0cmluZygpO1xuICAgICAgICB2YXIgbWF0Y2ggPSBuYW1lXzEubWF0Y2goL15mdW5jdGlvblxccyooW15cXHMoXSspLyk7XG4gICAgICAgIHJldHVybiBtYXRjaCA9PT0gbnVsbFxuICAgICAgICAgICAgPyBcIkFub255bW91cyBmdW5jdGlvbjogXCIuY29uY2F0KG5hbWVfMSlcbiAgICAgICAgICAgIDogbWF0Y2hbMV07XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U3ltYm9sRGVzY3JpcHRpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHN5bWJvbC50b1N0cmluZygpLnNsaWNlKDcsIC0xKTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeU1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgcmV0dXJuIFwie1xcXCJrZXlcXFwiOlxcXCJcIi5jb25jYXQobWV0YWRhdGEua2V5LnRvU3RyaW5nKCksIFwiXFxcIixcXFwidmFsdWVcXFwiOlxcXCJcIikuY29uY2F0KG1ldGFkYXRhLnZhbHVlLnRvU3RyaW5nKCksIFwiXFxcIn1cIik7XG59XG5leHBvcnQgeyBnZXRGdW5jdGlvbk5hbWUsIGdldFNlcnZpY2VJZGVudGlmaWVyQXNTdHJpbmcsIGxpc3RSZWdpc3RlcmVkQmluZGluZ3NGb3JTZXJ2aWNlSWRlbnRpZmllciwgbGlzdE1ldGFkYXRhRm9yVGFyZ2V0LCBjaXJjdWxhckRlcGVuZGVuY3lUb0V4Y2VwdGlvbiwgZ2V0U3ltYm9sRGVzY3JpcHRpb24sIH07XG4iLCJpbXBvcnQgeyBpZCB9IGZyb20gJy4uL3V0aWxzL2lkJztcbnZhciBDb250ZXh0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb250ZXh0KGNvbnRhaW5lcikge1xuICAgICAgICB0aGlzLmlkID0gaWQoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgfVxuICAgIENvbnRleHQucHJvdG90eXBlLmFkZFBsYW4gPSBmdW5jdGlvbiAocGxhbikge1xuICAgICAgICB0aGlzLnBsYW4gPSBwbGFuO1xuICAgIH07XG4gICAgQ29udGV4dC5wcm90b3R5cGUuc2V0Q3VycmVudFJlcXVlc3QgPSBmdW5jdGlvbiAoY3VycmVudFJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UmVxdWVzdCA9IGN1cnJlbnRSZXF1ZXN0O1xuICAgIH07XG4gICAgcmV0dXJuIENvbnRleHQ7XG59KCkpO1xuZXhwb3J0IHsgQ29udGV4dCB9O1xuIiwiaW1wb3J0ICogYXMgTUVUQURBVEFfS0VZIGZyb20gJy4uL2NvbnN0YW50cy9tZXRhZGF0YV9rZXlzJztcbnZhciBNZXRhZGF0YSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWV0YWRhdGEoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBNZXRhZGF0YS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmtleSA9PT0gTUVUQURBVEFfS0VZLk5BTUVEX1RBRykge1xuICAgICAgICAgICAgcmV0dXJuIFwibmFtZWQ6IFwiLmNvbmNhdChTdHJpbmcodGhpcy52YWx1ZSkudG9TdHJpbmcoKSwgXCIgXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwidGFnZ2VkOiB7IGtleTpcIi5jb25jYXQodGhpcy5rZXkudG9TdHJpbmcoKSwgXCIsIHZhbHVlOiBcIikuY29uY2F0KFN0cmluZyh0aGlzLnZhbHVlKSwgXCIgfVwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE1ldGFkYXRhO1xufSgpKTtcbmV4cG9ydCB7IE1ldGFkYXRhIH07XG4iLCJ2YXIgUGxhbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUGxhbihwYXJlbnRDb250ZXh0LCByb290UmVxdWVzdCkge1xuICAgICAgICB0aGlzLnBhcmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0O1xuICAgICAgICB0aGlzLnJvb3RSZXF1ZXN0ID0gcm9vdFJlcXVlc3Q7XG4gICAgfVxuICAgIHJldHVybiBQbGFuO1xufSgpKTtcbmV4cG9ydCB7IFBsYW4gfTtcbiIsImltcG9ydCB7IGdldFRhcmdldHMgfSBmcm9tICdAaW52ZXJzaWZ5anMvY29yZSc7XG5pbXBvcnQgKiBhcyBNRVRBREFUQV9LRVkgZnJvbSAnLi4vY29uc3RhbnRzL21ldGFkYXRhX2tleXMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25OYW1lIH0gZnJvbSAnLi4vdXRpbHMvc2VyaWFsaXphdGlvbic7XG5mdW5jdGlvbiBnZXREZXBlbmRlbmNpZXMobWV0YWRhdGFSZWFkZXIsIGZ1bmMpIHtcbiAgICByZXR1cm4gZ2V0VGFyZ2V0cyhtZXRhZGF0YVJlYWRlcikoZnVuYyk7XG59XG5mdW5jdGlvbiBnZXRCYXNlQ2xhc3NEZXBlbmRlbmN5Q291bnQobWV0YWRhdGFSZWFkZXIsIGZ1bmMpIHtcbiAgICB2YXIgYmFzZUNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmMucHJvdG90eXBlKS5jb25zdHJ1Y3RvcjtcbiAgICBpZiAoYmFzZUNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICAgICAgdmFyIHRhcmdldHMgPSBnZXRUYXJnZXRzKG1ldGFkYXRhUmVhZGVyKShiYXNlQ29uc3RydWN0b3IpO1xuICAgICAgICB2YXIgbWV0YWRhdGEgPSB0YXJnZXRzLm1hcChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgcmV0dXJuIHQubWV0YWRhdGEuZmlsdGVyKGZ1bmN0aW9uIChtKSB7IHJldHVybiBtLmtleSA9PT0gTUVUQURBVEFfS0VZLlVOTUFOQUdFRF9UQUc7IH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHVubWFuYWdlZENvdW50ID0gW10uY29uY2F0LmFwcGx5KFtdLCBtZXRhZGF0YSkubGVuZ3RoO1xuICAgICAgICB2YXIgZGVwZW5kZW5jeUNvdW50ID0gdGFyZ2V0cy5sZW5ndGggLSB1bm1hbmFnZWRDb3VudDtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3lDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBkZXBlbmRlbmN5Q291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QmFzZUNsYXNzRGVwZW5kZW5jeUNvdW50KG1ldGFkYXRhUmVhZGVyLCBiYXNlQ29uc3RydWN0b3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG59XG5leHBvcnQgeyBnZXREZXBlbmRlbmNpZXMsIGdldEJhc2VDbGFzc0RlcGVuZGVuY3lDb3VudCwgZ2V0RnVuY3Rpb25OYW1lIH07XG4iLCJpbXBvcnQgeyBpZCB9IGZyb20gJy4uL3V0aWxzL2lkJztcbnZhciBSZXF1ZXN0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXF1ZXN0KHNlcnZpY2VJZGVudGlmaWVyLCBwYXJlbnRDb250ZXh0LCBwYXJlbnRSZXF1ZXN0LCBiaW5kaW5ncywgdGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuaWQgPSBpZCgpO1xuICAgICAgICB0aGlzLnNlcnZpY2VJZGVudGlmaWVyID0gc2VydmljZUlkZW50aWZpZXI7XG4gICAgICAgIHRoaXMucGFyZW50Q29udGV4dCA9IHBhcmVudENvbnRleHQ7XG4gICAgICAgIHRoaXMucGFyZW50UmVxdWVzdCA9IHBhcmVudFJlcXVlc3Q7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLmNoaWxkUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgdGhpcy5iaW5kaW5ncyA9IEFycmF5LmlzQXJyYXkoYmluZGluZ3MpID8gYmluZGluZ3MgOiBbYmluZGluZ3NdO1xuICAgICAgICB0aGlzLnJlcXVlc3RTY29wZSA9IHBhcmVudFJlcXVlc3QgPT09IG51bGwgPyBuZXcgTWFwKCkgOiBudWxsO1xuICAgIH1cbiAgICBSZXF1ZXN0LnByb3RvdHlwZS5hZGRDaGlsZFJlcXVlc3QgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIsIGJpbmRpbmdzLCB0YXJnZXQpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3IFJlcXVlc3Qoc2VydmljZUlkZW50aWZpZXIsIHRoaXMucGFyZW50Q29udGV4dCwgdGhpcywgYmluZGluZ3MsIHRhcmdldCk7XG4gICAgICAgIHRoaXMuY2hpbGRSZXF1ZXN0cy5wdXNoKGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH07XG4gICAgcmV0dXJuIFJlcXVlc3Q7XG59KCkpO1xuZXhwb3J0IHsgUmVxdWVzdCB9O1xuIiwiaW1wb3J0IHsgQ2xhc3NFbGVtZW50TWV0YWRhdGFLaW5kLCBnZXRDbGFzc0VsZW1lbnRNZXRhZGF0YUZyb21MZWdhY3lNZXRhZGF0YSwgTGVnYWN5VGFyZ2V0SW1wbCBhcyBUYXJnZXRJbXBsLCB9IGZyb20gJ0BpbnZlcnNpZnlqcy9jb3JlJztcbmltcG9ydCB7IEJpbmRpbmdDb3VudCB9IGZyb20gJy4uL2JpbmRpbmdzL2JpbmRpbmdfY291bnQnO1xuaW1wb3J0ICogYXMgRVJST1JfTVNHUyBmcm9tICcuLi9jb25zdGFudHMvZXJyb3JfbXNncyc7XG5pbXBvcnQgeyBCaW5kaW5nVHlwZUVudW0gfSBmcm9tICcuLi9jb25zdGFudHMvbGl0ZXJhbF90eXBlcyc7XG5pbXBvcnQgKiBhcyBNRVRBREFUQV9LRVkgZnJvbSAnLi4vY29uc3RhbnRzL21ldGFkYXRhX2tleXMnO1xuaW1wb3J0IHsgaXNTdGFja092ZXJmbG93RXhjZXB0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBjaXJjdWxhckRlcGVuZGVuY3lUb0V4Y2VwdGlvbiwgZ2V0U2VydmljZUlkZW50aWZpZXJBc1N0cmluZywgbGlzdE1ldGFkYXRhRm9yVGFyZ2V0LCBsaXN0UmVnaXN0ZXJlZEJpbmRpbmdzRm9yU2VydmljZUlkZW50aWZpZXIsIH0gZnJvbSAnLi4vdXRpbHMvc2VyaWFsaXphdGlvbic7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YSc7XG5pbXBvcnQgeyBQbGFuIH0gZnJvbSAnLi9wbGFuJztcbmltcG9ydCB7IGdldEJhc2VDbGFzc0RlcGVuZGVuY3lDb3VudCwgZ2V0RGVwZW5kZW5jaWVzLCBnZXRGdW5jdGlvbk5hbWUsIH0gZnJvbSAnLi9yZWZsZWN0aW9uX3V0aWxzJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuL3JlcXVlc3QnO1xuZnVuY3Rpb24gZ2V0QmluZGluZ0RpY3Rpb25hcnkoY250bnIpIHtcbiAgICByZXR1cm4gY250bnIuX2JpbmRpbmdEaWN0aW9uYXJ5O1xufVxuZnVuY3Rpb24gX2NyZWF0ZVRhcmdldChpc011bHRpSW5qZWN0LCB0YXJnZXRUeXBlLCBzZXJ2aWNlSWRlbnRpZmllciwgbmFtZSwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBtZXRhZGF0YUxpc3QgPSBfZ2V0VGFyZ2V0TWV0YWRhdGEoaXNNdWx0aUluamVjdCwgc2VydmljZUlkZW50aWZpZXIsIGtleSwgdmFsdWUpO1xuICAgIHZhciBjbGFzc0VsZW1lbnRNZXRhZGF0YSA9IGdldENsYXNzRWxlbWVudE1ldGFkYXRhRnJvbUxlZ2FjeU1ldGFkYXRhKG1ldGFkYXRhTGlzdCk7XG4gICAgaWYgKGNsYXNzRWxlbWVudE1ldGFkYXRhLmtpbmQgPT09IENsYXNzRWxlbWVudE1ldGFkYXRhS2luZC51bm1hbmFnZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIG1ldGFkYXRhIHdoZW4gY3JlYXRpbmcgdGFyZ2V0Jyk7XG4gICAgfVxuICAgIHZhciB0YXJnZXQgPSBuZXcgVGFyZ2V0SW1wbChuYW1lLCBjbGFzc0VsZW1lbnRNZXRhZGF0YSwgdGFyZ2V0VHlwZSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbmZ1bmN0aW9uIF9nZXRBY3RpdmVCaW5kaW5ncyhtZXRhZGF0YVJlYWRlciwgYXZvaWRDb25zdHJhaW50cywgY29udGV4dCwgcGFyZW50UmVxdWVzdCwgdGFyZ2V0KSB7XG4gICAgdmFyIGJpbmRpbmdzID0gZ2V0QmluZGluZ3MoY29udGV4dC5jb250YWluZXIsIHRhcmdldC5zZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgdmFyIGFjdGl2ZUJpbmRpbmdzID0gW107XG4gICAgaWYgKGJpbmRpbmdzLmxlbmd0aCA9PT0gQmluZGluZ0NvdW50Lk5vQmluZGluZ3NBdmFpbGFibGUgJiZcbiAgICAgICAgY29udGV4dC5jb250YWluZXIub3B0aW9ucy5hdXRvQmluZEluamVjdGFibGUgPT09IHRydWUgJiZcbiAgICAgICAgdHlwZW9mIHRhcmdldC5zZXJ2aWNlSWRlbnRpZmllciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICBtZXRhZGF0YVJlYWRlci5nZXRDb25zdHJ1Y3Rvck1ldGFkYXRhKHRhcmdldC5zZXJ2aWNlSWRlbnRpZmllcilcbiAgICAgICAgICAgIC5jb21waWxlckdlbmVyYXRlZE1ldGFkYXRhKSB7XG4gICAgICAgIGNvbnRleHQuY29udGFpbmVyLmJpbmQodGFyZ2V0LnNlcnZpY2VJZGVudGlmaWVyKS50b1NlbGYoKTtcbiAgICAgICAgYmluZGluZ3MgPSBnZXRCaW5kaW5ncyhjb250ZXh0LmNvbnRhaW5lciwgdGFyZ2V0LnNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICB9XG4gICAgaWYgKCFhdm9pZENvbnN0cmFpbnRzKSB7XG4gICAgICAgIGFjdGl2ZUJpbmRpbmdzID0gYmluZGluZ3MuZmlsdGVyKGZ1bmN0aW9uIChiaW5kaW5nKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGJpbmRpbmcuc2VydmljZUlkZW50aWZpZXIsIGNvbnRleHQsIHBhcmVudFJlcXVlc3QsIGJpbmRpbmcsIHRhcmdldCk7XG4gICAgICAgICAgICByZXR1cm4gYmluZGluZy5jb25zdHJhaW50KHJlcXVlc3QpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFjdGl2ZUJpbmRpbmdzID0gYmluZGluZ3M7XG4gICAgfVxuICAgIF92YWxpZGF0ZUFjdGl2ZUJpbmRpbmdDb3VudCh0YXJnZXQuc2VydmljZUlkZW50aWZpZXIsIGFjdGl2ZUJpbmRpbmdzLCBwYXJlbnRSZXF1ZXN0LCB0YXJnZXQsIGNvbnRleHQuY29udGFpbmVyKTtcbiAgICByZXR1cm4gYWN0aXZlQmluZGluZ3M7XG59XG5mdW5jdGlvbiBfZ2V0VGFyZ2V0TWV0YWRhdGEoaXNNdWx0aUluamVjdCwgc2VydmljZUlkZW50aWZpZXIsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgbWV0YWRhdGFLZXkgPSBpc011bHRpSW5qZWN0XG4gICAgICAgID8gTUVUQURBVEFfS0VZLk1VTFRJX0lOSkVDVF9UQUdcbiAgICAgICAgOiBNRVRBREFUQV9LRVkuSU5KRUNUX1RBRztcbiAgICB2YXIgbWV0YWRhdGFMaXN0ID0gW1xuICAgICAgICBuZXcgTWV0YWRhdGEobWV0YWRhdGFLZXksIHNlcnZpY2VJZGVudGlmaWVyKSxcbiAgICBdO1xuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZXRhZGF0YUxpc3QucHVzaChuZXcgTWV0YWRhdGEoa2V5LCB2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0O1xufVxuZnVuY3Rpb24gX3ZhbGlkYXRlQWN0aXZlQmluZGluZ0NvdW50KHNlcnZpY2VJZGVudGlmaWVyLCBiaW5kaW5ncywgcGFyZW50UmVxdWVzdCwgdGFyZ2V0LCBjb250YWluZXIpIHtcbiAgICBzd2l0Y2ggKGJpbmRpbmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIEJpbmRpbmdDb3VudC5Ob0JpbmRpbmdzQXZhaWxhYmxlOlxuICAgICAgICAgICAgaWYgKHRhcmdldC5pc09wdGlvbmFsKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmluZGluZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VydmljZUlkZW50aWZpZXJTdHJpbmcgPSBnZXRTZXJ2aWNlSWRlbnRpZmllckFzU3RyaW5nKHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB2YXIgbXNnID0gRVJST1JfTVNHUy5OT1RfUkVHSVNURVJFRDtcbiAgICAgICAgICAgICAgICBtc2cgKz0gbGlzdE1ldGFkYXRhRm9yVGFyZ2V0KHNlcnZpY2VJZGVudGlmaWVyU3RyaW5nLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIG1zZyArPSBsaXN0UmVnaXN0ZXJlZEJpbmRpbmdzRm9yU2VydmljZUlkZW50aWZpZXIoY29udGFpbmVyLCBzZXJ2aWNlSWRlbnRpZmllclN0cmluZywgZ2V0QmluZGluZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRSZXF1ZXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZyArPSBcIlxcblwiLmNvbmNhdChFUlJPUl9NU0dTLlRSWUlOR19UT19SRVNPTFZFX0JJTkRJTkdTKGdldFNlcnZpY2VJZGVudGlmaWVyQXNTdHJpbmcocGFyZW50UmVxdWVzdC5zZXJ2aWNlSWRlbnRpZmllcikpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgQmluZGluZ0NvdW50Lk9ubHlPbmVCaW5kaW5nQXZhaWxhYmxlOlxuICAgICAgICAgICAgcmV0dXJuIGJpbmRpbmdzO1xuICAgICAgICBjYXNlIEJpbmRpbmdDb3VudC5NdWx0aXBsZUJpbmRpbmdzQXZhaWxhYmxlOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKCF0YXJnZXQuaXNBcnJheSgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlcnZpY2VJZGVudGlmaWVyU3RyaW5nID0gZ2V0U2VydmljZUlkZW50aWZpZXJBc1N0cmluZyhzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdmFyIG1zZyA9IFwiXCIuY29uY2F0KEVSUk9SX01TR1MuQU1CSUdVT1VTX01BVENILCBcIiBcIikuY29uY2F0KHNlcnZpY2VJZGVudGlmaWVyU3RyaW5nKTtcbiAgICAgICAgICAgICAgICBtc2cgKz0gbGlzdFJlZ2lzdGVyZWRCaW5kaW5nc0ZvclNlcnZpY2VJZGVudGlmaWVyKGNvbnRhaW5lciwgc2VydmljZUlkZW50aWZpZXJTdHJpbmcsIGdldEJpbmRpbmdzKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5ncztcbiAgICAgICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3ViUmVxdWVzdHMobWV0YWRhdGFSZWFkZXIsIGF2b2lkQ29uc3RyYWludHMsIHNlcnZpY2VJZGVudGlmaWVyLCBjb250ZXh0LCBwYXJlbnRSZXF1ZXN0LCB0YXJnZXQpIHtcbiAgICB2YXIgYWN0aXZlQmluZGluZ3M7XG4gICAgdmFyIGNoaWxkUmVxdWVzdDtcbiAgICBpZiAocGFyZW50UmVxdWVzdCA9PT0gbnVsbCkge1xuICAgICAgICBhY3RpdmVCaW5kaW5ncyA9IF9nZXRBY3RpdmVCaW5kaW5ncyhtZXRhZGF0YVJlYWRlciwgYXZvaWRDb25zdHJhaW50cywgY29udGV4dCwgbnVsbCwgdGFyZ2V0KTtcbiAgICAgICAgY2hpbGRSZXF1ZXN0ID0gbmV3IFJlcXVlc3Qoc2VydmljZUlkZW50aWZpZXIsIGNvbnRleHQsIG51bGwsIGFjdGl2ZUJpbmRpbmdzLCB0YXJnZXQpO1xuICAgICAgICB2YXIgdGhlUGxhbiA9IG5ldyBQbGFuKGNvbnRleHQsIGNoaWxkUmVxdWVzdCk7XG4gICAgICAgIGNvbnRleHQuYWRkUGxhbih0aGVQbGFuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFjdGl2ZUJpbmRpbmdzID0gX2dldEFjdGl2ZUJpbmRpbmdzKG1ldGFkYXRhUmVhZGVyLCBhdm9pZENvbnN0cmFpbnRzLCBjb250ZXh0LCBwYXJlbnRSZXF1ZXN0LCB0YXJnZXQpO1xuICAgICAgICBjaGlsZFJlcXVlc3QgPSBwYXJlbnRSZXF1ZXN0LmFkZENoaWxkUmVxdWVzdCh0YXJnZXQuc2VydmljZUlkZW50aWZpZXIsIGFjdGl2ZUJpbmRpbmdzLCB0YXJnZXQpO1xuICAgIH1cbiAgICBhY3RpdmVCaW5kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChiaW5kaW5nKSB7XG4gICAgICAgIHZhciBzdWJDaGlsZFJlcXVlc3QgPSBudWxsO1xuICAgICAgICBpZiAodGFyZ2V0LmlzQXJyYXkoKSkge1xuICAgICAgICAgICAgc3ViQ2hpbGRSZXF1ZXN0ID0gY2hpbGRSZXF1ZXN0LmFkZENoaWxkUmVxdWVzdChiaW5kaW5nLnNlcnZpY2VJZGVudGlmaWVyLCBiaW5kaW5nLCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGJpbmRpbmcuY2FjaGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJDaGlsZFJlcXVlc3QgPSBjaGlsZFJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJpbmRpbmcudHlwZSA9PT0gQmluZGluZ1R5cGVFbnVtLkluc3RhbmNlICYmXG4gICAgICAgICAgICBiaW5kaW5nLmltcGxlbWVudGF0aW9uVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IGdldERlcGVuZGVuY2llcyhtZXRhZGF0YVJlYWRlciwgYmluZGluZy5pbXBsZW1lbnRhdGlvblR5cGUpO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQuY29udGFpbmVyLm9wdGlvbnMuc2tpcEJhc2VDbGFzc0NoZWNrcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBiYXNlQ2xhc3NEZXBlbmRlbmN5Q291bnQgPSBnZXRCYXNlQ2xhc3NEZXBlbmRlbmN5Q291bnQobWV0YWRhdGFSZWFkZXIsIGJpbmRpbmcuaW1wbGVtZW50YXRpb25UeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jaWVzLmxlbmd0aCA8IGJhc2VDbGFzc0RlcGVuZGVuY3lDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBFUlJPUl9NU0dTLkFSR1VNRU5UU19MRU5HVEhfTUlTTUFUQ0goZ2V0RnVuY3Rpb25OYW1lKGJpbmRpbmcuaW1wbGVtZW50YXRpb25UeXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICAgICAgICAgICAgICBfY3JlYXRlU3ViUmVxdWVzdHMobWV0YWRhdGFSZWFkZXIsIGZhbHNlLCBkZXBlbmRlbmN5LnNlcnZpY2VJZGVudGlmaWVyLCBjb250ZXh0LCBzdWJDaGlsZFJlcXVlc3QsIGRlcGVuZGVuY3kpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGdldEJpbmRpbmdzKGNvbnRhaW5lciwgc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICB2YXIgYmluZGluZ3MgPSBbXTtcbiAgICB2YXIgYmluZGluZ0RpY3Rpb25hcnkgPSBnZXRCaW5kaW5nRGljdGlvbmFyeShjb250YWluZXIpO1xuICAgIGlmIChiaW5kaW5nRGljdGlvbmFyeS5oYXNLZXkoc2VydmljZUlkZW50aWZpZXIpKSB7XG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ0RpY3Rpb25hcnkuZ2V0KHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29udGFpbmVyLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBiaW5kaW5ncyA9IGdldEJpbmRpbmdzKGNvbnRhaW5lci5wYXJlbnQsIHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmRpbmdzO1xufVxuZnVuY3Rpb24gcGxhbihtZXRhZGF0YVJlYWRlciwgY29udGFpbmVyLCBpc011bHRpSW5qZWN0LCB0YXJnZXRUeXBlLCBzZXJ2aWNlSWRlbnRpZmllciwga2V5LCB2YWx1ZSwgYXZvaWRDb25zdHJhaW50cykge1xuICAgIGlmIChhdm9pZENvbnN0cmFpbnRzID09PSB2b2lkIDApIHsgYXZvaWRDb25zdHJhaW50cyA9IGZhbHNlOyB9XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dChjb250YWluZXIpO1xuICAgIHZhciB0YXJnZXQgPSBfY3JlYXRlVGFyZ2V0KGlzTXVsdGlJbmplY3QsIHRhcmdldFR5cGUsIHNlcnZpY2VJZGVudGlmaWVyLCAnJywga2V5LCB2YWx1ZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgX2NyZWF0ZVN1YlJlcXVlc3RzKG1ldGFkYXRhUmVhZGVyLCBhdm9pZENvbnN0cmFpbnRzLCBzZXJ2aWNlSWRlbnRpZmllciwgY29udGV4dCwgbnVsbCwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaXNTdGFja092ZXJmbG93RXhjZXB0aW9uKGVycm9yKSkge1xuICAgICAgICAgICAgY2lyY3VsYXJEZXBlbmRlbmN5VG9FeGNlcHRpb24oY29udGV4dC5wbGFuLnJvb3RSZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVNb2NrUmVxdWVzdChjb250YWluZXIsIHNlcnZpY2VJZGVudGlmaWVyLCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIG1ldGFkYXRhTGlzdCA9IF9nZXRUYXJnZXRNZXRhZGF0YShmYWxzZSwgc2VydmljZUlkZW50aWZpZXIsIGtleSwgdmFsdWUpO1xuICAgIHZhciBjbGFzc0VsZW1lbnRNZXRhZGF0YSA9IGdldENsYXNzRWxlbWVudE1ldGFkYXRhRnJvbUxlZ2FjeU1ldGFkYXRhKG1ldGFkYXRhTGlzdCk7XG4gICAgaWYgKGNsYXNzRWxlbWVudE1ldGFkYXRhLmtpbmQgPT09IENsYXNzRWxlbWVudE1ldGFkYXRhS2luZC51bm1hbmFnZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIG1ldGFkYXRhIHdoZW4gY3JlYXRpbmcgdGFyZ2V0Jyk7XG4gICAgfVxuICAgIHZhciB0YXJnZXQgPSBuZXcgVGFyZ2V0SW1wbCgnJywgY2xhc3NFbGVtZW50TWV0YWRhdGEsICdWYXJpYWJsZScpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQoY29udGFpbmVyKTtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHNlcnZpY2VJZGVudGlmaWVyLCBjb250ZXh0LCBudWxsLCBbXSwgdGFyZ2V0KTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbn1cbmV4cG9ydCB7IHBsYW4sIGNyZWF0ZU1vY2tSZXF1ZXN0LCBnZXRCaW5kaW5nRGljdGlvbmFyeSB9O1xuIiwiZnVuY3Rpb24gaXNQcm9taXNlKG9iamVjdCkge1xuICAgIHZhciBpc09iamVjdE9yRnVuY3Rpb24gPSAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB8fFxuICAgICAgICB0eXBlb2Ygb2JqZWN0ID09PSAnZnVuY3Rpb24nO1xuICAgIHJldHVybiAoaXNPYmplY3RPckZ1bmN0aW9uICYmIHR5cGVvZiBvYmplY3QudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5mdW5jdGlvbiBpc1Byb21pc2VPckNvbnRhaW5zUHJvbWlzZShvYmplY3QpIHtcbiAgICBpZiAoaXNQcm9taXNlKG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iamVjdCkgJiYgb2JqZWN0LnNvbWUoaXNQcm9taXNlKTtcbn1cbmV4cG9ydCB7IGlzUHJvbWlzZSwgaXNQcm9taXNlT3JDb250YWluc1Byb21pc2UgfTtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5pbXBvcnQgeyBCaW5kaW5nU2NvcGVFbnVtIH0gZnJvbSAnLi4vY29uc3RhbnRzL2xpdGVyYWxfdHlwZXMnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMvYXN5bmMnO1xuZXhwb3J0IHZhciB0cnlHZXRGcm9tU2NvcGUgPSBmdW5jdGlvbiAocmVxdWVzdFNjb3BlLCBiaW5kaW5nKSB7XG4gICAgaWYgKGJpbmRpbmcuc2NvcGUgPT09IEJpbmRpbmdTY29wZUVudW0uU2luZ2xldG9uICYmIGJpbmRpbmcuYWN0aXZhdGVkKSB7XG4gICAgICAgIHJldHVybiBiaW5kaW5nLmNhY2hlO1xuICAgIH1cbiAgICBpZiAoYmluZGluZy5zY29wZSA9PT0gQmluZGluZ1Njb3BlRW51bS5SZXF1ZXN0ICYmXG4gICAgICAgIHJlcXVlc3RTY29wZS5oYXMoYmluZGluZy5pZCkpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RTY29wZS5nZXQoYmluZGluZy5pZCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbmV4cG9ydCB2YXIgc2F2ZVRvU2NvcGUgPSBmdW5jdGlvbiAocmVxdWVzdFNjb3BlLCBiaW5kaW5nLCByZXN1bHQpIHtcbiAgICBpZiAoYmluZGluZy5zY29wZSA9PT0gQmluZGluZ1Njb3BlRW51bS5TaW5nbGV0b24pIHtcbiAgICAgICAgX3NhdmVUb1NpbmdsZXRvblNjb3BlKGJpbmRpbmcsIHJlc3VsdCk7XG4gICAgfVxuICAgIGlmIChiaW5kaW5nLnNjb3BlID09PSBCaW5kaW5nU2NvcGVFbnVtLlJlcXVlc3QpIHtcbiAgICAgICAgX3NhdmVUb1JlcXVlc3RTY29wZShyZXF1ZXN0U2NvcGUsIGJpbmRpbmcsIHJlc3VsdCk7XG4gICAgfVxufTtcbnZhciBfc2F2ZVRvUmVxdWVzdFNjb3BlID0gZnVuY3Rpb24gKHJlcXVlc3RTY29wZSwgYmluZGluZywgcmVzdWx0KSB7XG4gICAgaWYgKCFyZXF1ZXN0U2NvcGUuaGFzKGJpbmRpbmcuaWQpKSB7XG4gICAgICAgIHJlcXVlc3RTY29wZS5zZXQoYmluZGluZy5pZCwgcmVzdWx0KTtcbiAgICB9XG59O1xudmFyIF9zYXZlVG9TaW5nbGV0b25TY29wZSA9IGZ1bmN0aW9uIChiaW5kaW5nLCByZXN1bHQpIHtcbiAgICBiaW5kaW5nLmNhY2hlID0gcmVzdWx0O1xuICAgIGJpbmRpbmcuYWN0aXZhdGVkID0gdHJ1ZTtcbiAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgdm9pZCBfc2F2ZUFzeW5jUmVzdWx0VG9TaW5nbGV0b25TY29wZShiaW5kaW5nLCByZXN1bHQpO1xuICAgIH1cbn07XG52YXIgX3NhdmVBc3luY1Jlc3VsdFRvU2luZ2xldG9uU2NvcGUgPSBmdW5jdGlvbiAoYmluZGluZywgYXN5bmNSZXN1bHQpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCwgZXhfMTtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbNCwgYXN5bmNSZXN1bHRdO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICBiaW5kaW5nLmNhY2hlID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJldHVybiBbMywgM107XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgZXhfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICBiaW5kaW5nLmNhY2hlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBiaW5kaW5nLmFjdGl2YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRocm93IGV4XzE7XG4gICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMl07XG4gICAgICAgIH1cbiAgICB9KTtcbn0pOyB9O1xuIiwiZXhwb3J0IHZhciBGYWN0b3J5VHlwZTtcbihmdW5jdGlvbiAoRmFjdG9yeVR5cGUpIHtcbiAgICBGYWN0b3J5VHlwZVtcIkR5bmFtaWNWYWx1ZVwiXSA9IFwidG9EeW5hbWljVmFsdWVcIjtcbiAgICBGYWN0b3J5VHlwZVtcIkZhY3RvcnlcIl0gPSBcInRvRmFjdG9yeVwiO1xuICAgIEZhY3RvcnlUeXBlW1wiUHJvdmlkZXJcIl0gPSBcInRvUHJvdmlkZXJcIjtcbn0pKEZhY3RvcnlUeXBlIHx8IChGYWN0b3J5VHlwZSA9IHt9KSk7XG4iLCJpbXBvcnQgKiBhcyBFUlJPUl9NU0dTIGZyb20gJy4uL2NvbnN0YW50cy9lcnJvcl9tc2dzJztcbmltcG9ydCB7IEJpbmRpbmdUeXBlRW51bSB9IGZyb20gJy4uL2NvbnN0YW50cy9saXRlcmFsX3R5cGVzJztcbmltcG9ydCB7IGdldFNlcnZpY2VJZGVudGlmaWVyQXNTdHJpbmcgfSBmcm9tICcuLi91dGlscy9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IEZhY3RvcnlUeXBlIH0gZnJvbSAnLi9mYWN0b3J5X3R5cGUnO1xuZXhwb3J0IHZhciBtdWx0aUJpbmRUb1NlcnZpY2UgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzZXJ2aWNlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgdHlwZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHR5cGVzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYmluZCh0KS50b1NlcnZpY2Uoc2VydmljZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgZW5zdXJlRnVsbHlCb3VuZCA9IGZ1bmN0aW9uIChiaW5kaW5nKSB7XG4gICAgdmFyIGJvdW5kVmFsdWUgPSBudWxsO1xuICAgIHN3aXRjaCAoYmluZGluZy50eXBlKSB7XG4gICAgICAgIGNhc2UgQmluZGluZ1R5cGVFbnVtLkNvbnN0YW50VmFsdWU6XG4gICAgICAgIGNhc2UgQmluZGluZ1R5cGVFbnVtLkZ1bmN0aW9uOlxuICAgICAgICAgICAgYm91bmRWYWx1ZSA9IGJpbmRpbmcuY2FjaGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBCaW5kaW5nVHlwZUVudW0uQ29uc3RydWN0b3I6XG4gICAgICAgIGNhc2UgQmluZGluZ1R5cGVFbnVtLkluc3RhbmNlOlxuICAgICAgICAgICAgYm91bmRWYWx1ZSA9IGJpbmRpbmcuaW1wbGVtZW50YXRpb25UeXBlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQmluZGluZ1R5cGVFbnVtLkR5bmFtaWNWYWx1ZTpcbiAgICAgICAgICAgIGJvdW5kVmFsdWUgPSBiaW5kaW5nLmR5bmFtaWNWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEJpbmRpbmdUeXBlRW51bS5Qcm92aWRlcjpcbiAgICAgICAgICAgIGJvdW5kVmFsdWUgPSBiaW5kaW5nLnByb3ZpZGVyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQmluZGluZ1R5cGVFbnVtLkZhY3Rvcnk6XG4gICAgICAgICAgICBib3VuZFZhbHVlID0gYmluZGluZy5mYWN0b3J5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChib3VuZFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHZhciBzZXJ2aWNlSWRlbnRpZmllckFzU3RyaW5nID0gZ2V0U2VydmljZUlkZW50aWZpZXJBc1N0cmluZyhiaW5kaW5nLnNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KEVSUk9SX01TR1MuSU5WQUxJRF9CSU5ESU5HX1RZUEUsIFwiIFwiKS5jb25jYXQoc2VydmljZUlkZW50aWZpZXJBc1N0cmluZykpO1xuICAgIH1cbn07XG5leHBvcnQgdmFyIGdldEZhY3RvcnlEZXRhaWxzID0gZnVuY3Rpb24gKGJpbmRpbmcpIHtcbiAgICBzd2l0Y2ggKGJpbmRpbmcudHlwZSkge1xuICAgICAgICBjYXNlIEJpbmRpbmdUeXBlRW51bS5GYWN0b3J5OlxuICAgICAgICAgICAgcmV0dXJuIHsgZmFjdG9yeTogYmluZGluZy5mYWN0b3J5LCBmYWN0b3J5VHlwZTogRmFjdG9yeVR5cGUuRmFjdG9yeSB9O1xuICAgICAgICBjYXNlIEJpbmRpbmdUeXBlRW51bS5Qcm92aWRlcjpcbiAgICAgICAgICAgIHJldHVybiB7IGZhY3Rvcnk6IGJpbmRpbmcucHJvdmlkZXIsIGZhY3RvcnlUeXBlOiBGYWN0b3J5VHlwZS5Qcm92aWRlciB9O1xuICAgICAgICBjYXNlIEJpbmRpbmdUeXBlRW51bS5EeW5hbWljVmFsdWU6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGZhY3Rvcnk6IGJpbmRpbmcuZHluYW1pY1ZhbHVlLFxuICAgICAgICAgICAgICAgIGZhY3RvcnlUeXBlOiBGYWN0b3J5VHlwZS5EeW5hbWljVmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBmYWN0b3J5IHR5cGUgXCIuY29uY2F0KGJpbmRpbmcudHlwZSkpO1xuICAgIH1cbn07XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICAgIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbmltcG9ydCB7IE9OX0RFQUNUSVZBVElPTl9FUlJPUiwgUE9TVF9DT05TVFJVQ1RfRVJST1IsIFBSRV9ERVNUUk9ZX0VSUk9SLCB9IGZyb20gJy4uL2NvbnN0YW50cy9lcnJvcl9tc2dzJztcbmltcG9ydCB7IEJpbmRpbmdTY29wZUVudW0sIFRhcmdldFR5cGVFbnVtIH0gZnJvbSAnLi4vY29uc3RhbnRzL2xpdGVyYWxfdHlwZXMnO1xuaW1wb3J0ICogYXMgTUVUQURBVEFfS0VZIGZyb20gJy4uL2NvbnN0YW50cy9tZXRhZGF0YV9rZXlzJztcbmltcG9ydCB7IGlzUHJvbWlzZSwgaXNQcm9taXNlT3JDb250YWluc1Byb21pc2UgfSBmcm9tICcuLi91dGlscy9hc3luYyc7XG5mdW5jdGlvbiBfcmVzb2x2ZVJlcXVlc3RzKGNoaWxkUmVxdWVzdHMsIHJlc29sdmVSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIGNoaWxkUmVxdWVzdHMucmVkdWNlKGZ1bmN0aW9uIChyZXNvbHZlZFJlcXVlc3RzLCBjaGlsZFJlcXVlc3QpIHtcbiAgICAgICAgdmFyIGluamVjdGlvbiA9IHJlc29sdmVSZXF1ZXN0KGNoaWxkUmVxdWVzdCk7XG4gICAgICAgIHZhciB0YXJnZXRUeXBlID0gY2hpbGRSZXF1ZXN0LnRhcmdldC50eXBlO1xuICAgICAgICBpZiAodGFyZ2V0VHlwZSA9PT0gVGFyZ2V0VHlwZUVudW0uQ29uc3RydWN0b3JBcmd1bWVudCkge1xuICAgICAgICAgICAgcmVzb2x2ZWRSZXF1ZXN0cy5jb25zdHJ1Y3RvckluamVjdGlvbnMucHVzaChpbmplY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZWRSZXF1ZXN0cy5wcm9wZXJ0eVJlcXVlc3RzLnB1c2goY2hpbGRSZXF1ZXN0KTtcbiAgICAgICAgICAgIHJlc29sdmVkUmVxdWVzdHMucHJvcGVydHlJbmplY3Rpb25zLnB1c2goaW5qZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc29sdmVkUmVxdWVzdHMuaXNBc3luYykge1xuICAgICAgICAgICAgcmVzb2x2ZWRSZXF1ZXN0cy5pc0FzeW5jID0gaXNQcm9taXNlT3JDb250YWluc1Byb21pc2UoaW5qZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWRSZXF1ZXN0cztcbiAgICB9LCB7XG4gICAgICAgIGNvbnN0cnVjdG9ySW5qZWN0aW9uczogW10sXG4gICAgICAgIGlzQXN5bmM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0eUluamVjdGlvbnM6IFtdLFxuICAgICAgICBwcm9wZXJ0eVJlcXVlc3RzOiBbXSxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIF9jcmVhdGVJbnN0YW5jZShjb25zdHIsIGNoaWxkUmVxdWVzdHMsIHJlc29sdmVSZXF1ZXN0KSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoY2hpbGRSZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciByZXNvbHZlZCA9IF9yZXNvbHZlUmVxdWVzdHMoY2hpbGRSZXF1ZXN0cywgcmVzb2x2ZVJlcXVlc3QpO1xuICAgICAgICB2YXIgY3JlYXRlSW5zdGFuY2VXaXRoSW5qZWN0aW9uc0FyZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXNvbHZlZCksIHsgY29uc3RyOiBjb25zdHIgfSk7XG4gICAgICAgIGlmIChyZXNvbHZlZC5pc0FzeW5jKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVJbnN0YW5jZVdpdGhJbmplY3Rpb25zQXN5bmMoY3JlYXRlSW5zdGFuY2VXaXRoSW5qZWN0aW9uc0FyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVJbnN0YW5jZVdpdGhJbmplY3Rpb25zKGNyZWF0ZUluc3RhbmNlV2l0aEluamVjdGlvbnNBcmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBuZXcgY29uc3RyKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVdpdGhJbmplY3Rpb25zKGFyZ3MpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3ICgoX2EgPSBhcmdzLmNvbnN0cikuYmluZC5hcHBseShfYSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJncy5jb25zdHJ1Y3RvckluamVjdGlvbnMsIGZhbHNlKSkpKCk7XG4gICAgYXJncy5wcm9wZXJ0eVJlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHIsIGluZGV4KSB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHIudGFyZ2V0LmlkZW50aWZpZXI7XG4gICAgICAgIHZhciBpbmplY3Rpb24gPSBhcmdzLnByb3BlcnR5SW5qZWN0aW9uc1tpbmRleF07XG4gICAgICAgIGlmICghci50YXJnZXQuaXNPcHRpb25hbCgpIHx8IGluamVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpbnN0YW5jZVtwcm9wZXJ0eV0gPSBpbmplY3Rpb247XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVdpdGhJbmplY3Rpb25zQXN5bmMoYXJncykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9ySW5qZWN0aW9ucywgcHJvcGVydHlJbmplY3Rpb25zO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQsIHBvc3NpYmx5V2FpdEluamVjdGlvbnMoYXJncy5jb25zdHJ1Y3RvckluamVjdGlvbnMpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9ySW5qZWN0aW9ucyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBwb3NzaWJseVdhaXRJbmplY3Rpb25zKGFyZ3MucHJvcGVydHlJbmplY3Rpb25zKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUluamVjdGlvbnMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiwgY3JlYXRlSW5zdGFuY2VXaXRoSW5qZWN0aW9ucyhfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYXJncyksIHsgY29uc3RydWN0b3JJbmplY3Rpb25zOiBjb25zdHJ1Y3RvckluamVjdGlvbnMsIHByb3BlcnR5SW5qZWN0aW9uczogcHJvcGVydHlJbmplY3Rpb25zIH0pKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcG9zc2libHlXYWl0SW5qZWN0aW9ucyhwb3NzaWJsZVByb21pc2VpbmplY3Rpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5qZWN0aW9ucywgX2ksIHBvc3NpYmxlUHJvbWlzZWluamVjdGlvbnNfMSwgaW5qZWN0aW9uO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBpbmplY3Rpb25zID0gW107XG4gICAgICAgICAgICBmb3IgKF9pID0gMCwgcG9zc2libGVQcm9taXNlaW5qZWN0aW9uc18xID0gcG9zc2libGVQcm9taXNlaW5qZWN0aW9uczsgX2kgPCBwb3NzaWJsZVByb21pc2VpbmplY3Rpb25zXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgaW5qZWN0aW9uID0gcG9zc2libGVQcm9taXNlaW5qZWN0aW9uc18xW19pXTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGluamVjdGlvbnMucHVzaChQcm9taXNlLmFsbChpbmplY3Rpb24pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGluamVjdGlvbnMucHVzaChpbmplY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbMiwgUHJvbWlzZS5hbGwoaW5qZWN0aW9ucyldO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIF9nZXRJbnN0YW5jZUFmdGVyUG9zdENvbnN0cnVjdChjb25zdHIsIHJlc3VsdCkge1xuICAgIHZhciBwb3N0Q29uc3RydWN0UmVzdWx0ID0gX3Bvc3RDb25zdHJ1Y3QoY29uc3RyLCByZXN1bHQpO1xuICAgIGlmIChpc1Byb21pc2UocG9zdENvbnN0cnVjdFJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHBvc3RDb25zdHJ1Y3RSZXN1bHQudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiByZXN1bHQ7IH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5mdW5jdGlvbiBfcG9zdENvbnN0cnVjdChjb25zdHIsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShNRVRBREFUQV9LRVkuUE9TVF9DT05TVFJVQ1QsIGNvbnN0cikpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKE1FVEFEQVRBX0tFWS5QT1NUX0NPTlNUUlVDVCwgY29uc3RyKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBpbnN0YW5jZSlbZGF0YS52YWx1ZV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihQT1NUX0NPTlNUUlVDVF9FUlJPUihjb25zdHIubmFtZSwgZS5tZXNzYWdlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBfdmFsaWRhdGVJbnN0YW5jZVJlc29sdXRpb24oYmluZGluZywgY29uc3RyKSB7XG4gICAgaWYgKGJpbmRpbmcuc2NvcGUgIT09IEJpbmRpbmdTY29wZUVudW0uU2luZ2xldG9uKSB7XG4gICAgICAgIF90aHJvd0lmSGFuZGxpbmdEZWFjdGl2YXRpb24oYmluZGluZywgY29uc3RyKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfdGhyb3dJZkhhbmRsaW5nRGVhY3RpdmF0aW9uKGJpbmRpbmcsIGNvbnN0cikge1xuICAgIHZhciBzY29wZUVycm9yTWVzc2FnZSA9IFwiQ2xhc3MgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBpbiBcIi5jb25jYXQoYmluZGluZy5zY29wZSA9PT0gQmluZGluZ1Njb3BlRW51bS5SZXF1ZXN0ID8gJ3JlcXVlc3QnIDogJ3RyYW5zaWVudCcsIFwiIHNjb3BlLlwiKTtcbiAgICBpZiAodHlwZW9mIGJpbmRpbmcub25EZWFjdGl2YXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKE9OX0RFQUNUSVZBVElPTl9FUlJPUihjb25zdHIubmFtZSwgc2NvcGVFcnJvck1lc3NhZ2UpKTtcbiAgICB9XG4gICAgaWYgKFJlZmxlY3QuaGFzTWV0YWRhdGEoTUVUQURBVEFfS0VZLlBSRV9ERVNUUk9ZLCBjb25zdHIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihQUkVfREVTVFJPWV9FUlJPUihjb25zdHIubmFtZSwgc2NvcGVFcnJvck1lc3NhZ2UpKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXNvbHZlSW5zdGFuY2UoYmluZGluZywgY29uc3RyLCBjaGlsZFJlcXVlc3RzLCByZXNvbHZlUmVxdWVzdCkge1xuICAgIF92YWxpZGF0ZUluc3RhbmNlUmVzb2x1dGlvbihiaW5kaW5nLCBjb25zdHIpO1xuICAgIHZhciByZXN1bHQgPSBfY3JlYXRlSW5zdGFuY2UoY29uc3RyLCBjaGlsZFJlcXVlc3RzLCByZXNvbHZlUmVxdWVzdCk7XG4gICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQudGhlbihmdW5jdGlvbiAocmVzb2x2ZWRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBfZ2V0SW5zdGFuY2VBZnRlclBvc3RDb25zdHJ1Y3QoY29uc3RyLCByZXNvbHZlZFJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9nZXRJbnN0YW5jZUFmdGVyUG9zdENvbnN0cnVjdChjb25zdHIsIHJlc3VsdCk7XG4gICAgfVxufVxuZXhwb3J0IHsgcmVzb2x2ZUluc3RhbmNlIH07XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gICAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0ICogYXMgRVJST1JfTVNHUyBmcm9tICcuLi9jb25zdGFudHMvZXJyb3JfbXNncyc7XG5pbXBvcnQgeyBCaW5kaW5nVHlwZUVudW0gfSBmcm9tICcuLi9jb25zdGFudHMvbGl0ZXJhbF90eXBlcyc7XG5pbXBvcnQgeyBnZXRCaW5kaW5nRGljdGlvbmFyeSB9IGZyb20gJy4uL3BsYW5uaW5nL3BsYW5uZXInO1xuaW1wb3J0IHsgc2F2ZVRvU2NvcGUsIHRyeUdldEZyb21TY29wZSB9IGZyb20gJy4uL3Njb3BlL3Njb3BlJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL2FzeW5jJztcbmltcG9ydCB7IGVuc3VyZUZ1bGx5Qm91bmQsIGdldEZhY3RvcnlEZXRhaWxzIH0gZnJvbSAnLi4vdXRpbHMvYmluZGluZ191dGlscyc7XG5pbXBvcnQgeyB0cnlBbmRUaHJvd0Vycm9ySWZTdGFja092ZXJmbG93IH0gZnJvbSAnLi4vdXRpbHMvZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyByZXNvbHZlSW5zdGFuY2UgfSBmcm9tICcuL2luc3RhbnRpYXRpb24nO1xudmFyIF9yZXNvbHZlUmVxdWVzdCA9IGZ1bmN0aW9uIChyZXF1ZXN0U2NvcGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdC5wYXJlbnRDb250ZXh0LnNldEN1cnJlbnRSZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICB2YXIgYmluZGluZ3MgPSByZXF1ZXN0LmJpbmRpbmdzO1xuICAgICAgICB2YXIgY2hpbGRSZXF1ZXN0cyA9IHJlcXVlc3QuY2hpbGRSZXF1ZXN0cztcbiAgICAgICAgdmFyIHRhcmdldElzQW5BcnJheSA9IHJlcXVlc3QudGFyZ2V0ICYmIHJlcXVlc3QudGFyZ2V0LmlzQXJyYXkoKTtcbiAgICAgICAgdmFyIHRhcmdldFBhcmVudElzTm90QW5BcnJheSA9ICFyZXF1ZXN0LnBhcmVudFJlcXVlc3QgfHxcbiAgICAgICAgICAgICFyZXF1ZXN0LnBhcmVudFJlcXVlc3QudGFyZ2V0IHx8XG4gICAgICAgICAgICAhcmVxdWVzdC50YXJnZXQgfHxcbiAgICAgICAgICAgICFyZXF1ZXN0LnBhcmVudFJlcXVlc3QudGFyZ2V0Lm1hdGNoZXNBcnJheShyZXF1ZXN0LnRhcmdldC5zZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgIGlmICh0YXJnZXRJc0FuQXJyYXkgJiYgdGFyZ2V0UGFyZW50SXNOb3RBbkFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRSZXF1ZXN0cy5tYXAoZnVuY3Rpb24gKGNoaWxkUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHZhciByZXNvbHZlUmVxdWVzdCA9IF9yZXNvbHZlUmVxdWVzdChyZXF1ZXN0U2NvcGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlUmVxdWVzdChjaGlsZFJlcXVlc3QpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVxdWVzdC50YXJnZXQuaXNPcHRpb25hbCgpICYmIGJpbmRpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYmluZGluZyA9IGJpbmRpbmdzWzBdO1xuICAgICAgICAgICAgcmV0dXJuIF9yZXNvbHZlQmluZGluZyhyZXF1ZXN0U2NvcGUsIHJlcXVlc3QsIGJpbmRpbmcpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG52YXIgX3Jlc29sdmVGYWN0b3J5RnJvbUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZywgY29udGV4dCkge1xuICAgIHZhciBmYWN0b3J5RGV0YWlscyA9IGdldEZhY3RvcnlEZXRhaWxzKGJpbmRpbmcpO1xuICAgIHJldHVybiB0cnlBbmRUaHJvd0Vycm9ySWZTdGFja092ZXJmbG93KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhY3RvcnlEZXRhaWxzLmZhY3RvcnkuYmluZChiaW5kaW5nKShjb250ZXh0KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoRVJST1JfTVNHUy5DSVJDVUxBUl9ERVBFTkRFTkNZX0lOX0ZBQ1RPUlkoZmFjdG9yeURldGFpbHMuZmFjdG9yeVR5cGUsIGNvbnRleHQuY3VycmVudFJlcXVlc3Quc2VydmljZUlkZW50aWZpZXIudG9TdHJpbmcoKSkpO1xuICAgIH0pO1xufTtcbnZhciBfZ2V0UmVzb2x2ZWRGcm9tQmluZGluZyA9IGZ1bmN0aW9uIChyZXF1ZXN0U2NvcGUsIHJlcXVlc3QsIGJpbmRpbmcpIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHZhciBjaGlsZFJlcXVlc3RzID0gcmVxdWVzdC5jaGlsZFJlcXVlc3RzO1xuICAgIGVuc3VyZUZ1bGx5Qm91bmQoYmluZGluZyk7XG4gICAgc3dpdGNoIChiaW5kaW5nLnR5cGUpIHtcbiAgICAgICAgY2FzZSBCaW5kaW5nVHlwZUVudW0uQ29uc3RhbnRWYWx1ZTpcbiAgICAgICAgY2FzZSBCaW5kaW5nVHlwZUVudW0uRnVuY3Rpb246XG4gICAgICAgICAgICByZXN1bHQgPSBiaW5kaW5nLmNhY2hlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQmluZGluZ1R5cGVFbnVtLkNvbnN0cnVjdG9yOlxuICAgICAgICAgICAgcmVzdWx0ID0gYmluZGluZy5pbXBsZW1lbnRhdGlvblR5cGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBCaW5kaW5nVHlwZUVudW0uSW5zdGFuY2U6XG4gICAgICAgICAgICByZXN1bHQgPSByZXNvbHZlSW5zdGFuY2UoYmluZGluZywgYmluZGluZy5pbXBsZW1lbnRhdGlvblR5cGUsIGNoaWxkUmVxdWVzdHMsIF9yZXNvbHZlUmVxdWVzdChyZXF1ZXN0U2NvcGUpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVzdWx0ID0gX3Jlc29sdmVGYWN0b3J5RnJvbUJpbmRpbmcoYmluZGluZywgcmVxdWVzdC5wYXJlbnRDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX3Jlc29sdmVJblNjb3BlID0gZnVuY3Rpb24gKHJlcXVlc3RTY29wZSwgYmluZGluZywgcmVzb2x2ZUZyb21CaW5kaW5nKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRyeUdldEZyb21TY29wZShyZXF1ZXN0U2NvcGUsIGJpbmRpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzb2x2ZUZyb21CaW5kaW5nKCk7XG4gICAgc2F2ZVRvU2NvcGUocmVxdWVzdFNjb3BlLCBiaW5kaW5nLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9yZXNvbHZlQmluZGluZyA9IGZ1bmN0aW9uIChyZXF1ZXN0U2NvcGUsIHJlcXVlc3QsIGJpbmRpbmcpIHtcbiAgICByZXR1cm4gX3Jlc29sdmVJblNjb3BlKHJlcXVlc3RTY29wZSwgYmluZGluZywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gX2dldFJlc29sdmVkRnJvbUJpbmRpbmcocmVxdWVzdFNjb3BlLCByZXF1ZXN0LCBiaW5kaW5nKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQudGhlbihmdW5jdGlvbiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX29uQWN0aXZhdGlvbihyZXF1ZXN0LCBiaW5kaW5nLCByZXNvbHZlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IF9vbkFjdGl2YXRpb24ocmVxdWVzdCwgYmluZGluZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xufTtcbmZ1bmN0aW9uIF9vbkFjdGl2YXRpb24ocmVxdWVzdCwgYmluZGluZywgcmVzb2x2ZWQpIHtcbiAgICB2YXIgcmVzdWx0ID0gX2JpbmRpbmdBY3RpdmF0aW9uKHJlcXVlc3QucGFyZW50Q29udGV4dCwgYmluZGluZywgcmVzb2x2ZWQpO1xuICAgIHZhciBjb250YWluZXJzSXRlcmF0b3IgPSBfZ2V0Q29udGFpbmVyc0l0ZXJhdG9yKHJlcXVlc3QucGFyZW50Q29udGV4dC5jb250YWluZXIpO1xuICAgIHZhciBjb250YWluZXI7XG4gICAgdmFyIGNvbnRhaW5lcnNJdGVyYXRvclJlc3VsdCA9IGNvbnRhaW5lcnNJdGVyYXRvci5uZXh0KCk7XG4gICAgZG8ge1xuICAgICAgICBjb250YWluZXIgPSBjb250YWluZXJzSXRlcmF0b3JSZXN1bHQudmFsdWU7XG4gICAgICAgIHZhciBjb250ZXh0XzEgPSByZXF1ZXN0LnBhcmVudENvbnRleHQ7XG4gICAgICAgIHZhciBzZXJ2aWNlSWRlbnRpZmllciA9IHJlcXVlc3Quc2VydmljZUlkZW50aWZpZXI7XG4gICAgICAgIHZhciBhY3RpdmF0aW9uc0l0ZXJhdG9yID0gX2dldENvbnRhaW5lckFjdGl2YXRpb25zRm9yU2VydmljZShjb250YWluZXIsIHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBfYWN0aXZhdGVDb250YWluZXJBc3luYyhhY3RpdmF0aW9uc0l0ZXJhdG9yLCBjb250ZXh0XzEsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBfYWN0aXZhdGVDb250YWluZXIoYWN0aXZhdGlvbnNJdGVyYXRvciwgY29udGV4dF8xLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lcnNJdGVyYXRvclJlc3VsdCA9IGNvbnRhaW5lcnNJdGVyYXRvci5uZXh0KCk7XG4gICAgfSB3aGlsZSAoY29udGFpbmVyc0l0ZXJhdG9yUmVzdWx0LmRvbmUgIT09IHRydWUgJiZcbiAgICAgICAgIWdldEJpbmRpbmdEaWN0aW9uYXJ5KGNvbnRhaW5lcikuaGFzS2V5KHJlcXVlc3Quc2VydmljZUlkZW50aWZpZXIpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxudmFyIF9iaW5kaW5nQWN0aXZhdGlvbiA9IGZ1bmN0aW9uIChjb250ZXh0LCBiaW5kaW5nLCBwcmV2aW91c1Jlc3VsdCkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKHR5cGVvZiBiaW5kaW5nLm9uQWN0aXZhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXN1bHQgPSBiaW5kaW5nLm9uQWN0aXZhdGlvbihjb250ZXh0LCBwcmV2aW91c1Jlc3VsdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBwcmV2aW91c1Jlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX2FjdGl2YXRlQ29udGFpbmVyID0gZnVuY3Rpb24gKGFjdGl2YXRpb25zSXRlcmF0b3IsIGNvbnRleHQsIHJlc3VsdCkge1xuICAgIHZhciBhY3RpdmF0aW9uID0gYWN0aXZhdGlvbnNJdGVyYXRvci5uZXh0KCk7XG4gICAgd2hpbGUgKGFjdGl2YXRpb24uZG9uZSAhPT0gdHJ1ZSkge1xuICAgICAgICByZXN1bHQgPSBhY3RpdmF0aW9uLnZhbHVlKGNvbnRleHQsIHJlc3VsdCk7XG4gICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hY3RpdmF0ZUNvbnRhaW5lckFzeW5jKGFjdGl2YXRpb25zSXRlcmF0b3IsIGNvbnRleHQsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgYWN0aXZhdGlvbiA9IGFjdGl2YXRpb25zSXRlcmF0b3IubmV4dCgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfYWN0aXZhdGVDb250YWluZXJBc3luYyA9IGZ1bmN0aW9uIChhY3RpdmF0aW9uc0l0ZXJhdG9yLCBjb250ZXh0LCByZXN1bHRQcm9taXNlKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQsIGFjdGl2YXRpb247XG4gICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCwgcmVzdWx0UHJvbWlzZV07XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgIGFjdGl2YXRpb24gPSBhY3RpdmF0aW9uc0l0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDI7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgaWYgKCEoYWN0aXZhdGlvbi5kb25lICE9PSB0cnVlKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzQsIGFjdGl2YXRpb24udmFsdWUoY29udGV4dCwgcmVzdWx0KV07XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgIGFjdGl2YXRpb24gPSBhY3RpdmF0aW9uc0l0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIHJlc3VsdF07XG4gICAgICAgIH1cbiAgICB9KTtcbn0pOyB9O1xudmFyIF9nZXRDb250YWluZXJBY3RpdmF0aW9uc0ZvclNlcnZpY2UgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBzZXJ2aWNlSWRlbnRpZmllcikge1xuICAgIHZhciBhY3RpdmF0aW9ucyA9IGNvbnRhaW5lci5fYWN0aXZhdGlvbnM7XG4gICAgcmV0dXJuIGFjdGl2YXRpb25zLmhhc0tleShzZXJ2aWNlSWRlbnRpZmllcilcbiAgICAgICAgPyBhY3RpdmF0aW9ucy5nZXQoc2VydmljZUlkZW50aWZpZXIpLnZhbHVlcygpXG4gICAgICAgIDogW10udmFsdWVzKCk7XG59O1xudmFyIF9nZXRDb250YWluZXJzSXRlcmF0b3IgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgdmFyIGNvbnRhaW5lcnNTdGFjayA9IFtjb250YWluZXJdO1xuICAgIHZhciBwYXJlbnQgPSBjb250YWluZXIucGFyZW50O1xuICAgIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29udGFpbmVyc1N0YWNrLnB1c2gocGFyZW50KTtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgdmFyIGdldE5leHRDb250YWluZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXh0Q29udGFpbmVyID0gY29udGFpbmVyc1N0YWNrLnBvcCgpO1xuICAgICAgICBpZiAobmV4dENvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG5leHRDb250YWluZXIgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGNvbnRhaW5lcnNJdGVyYXRvciA9IHtcbiAgICAgICAgbmV4dDogZ2V0TmV4dENvbnRhaW5lcixcbiAgICB9O1xuICAgIHJldHVybiBjb250YWluZXJzSXRlcmF0b3I7XG59O1xuZnVuY3Rpb24gcmVzb2x2ZShjb250ZXh0KSB7XG4gICAgdmFyIHJlc29sdmVSZXF1ZXN0RnVuY3Rpb24gPSBfcmVzb2x2ZVJlcXVlc3QoY29udGV4dC5wbGFuLnJvb3RSZXF1ZXN0LnJlcXVlc3RTY29wZSk7XG4gICAgcmV0dXJuIHJlc29sdmVSZXF1ZXN0RnVuY3Rpb24oY29udGV4dC5wbGFuLnJvb3RSZXF1ZXN0KTtcbn1cbmV4cG9ydCB7IHJlc29sdmUgfTtcbiIsImltcG9ydCAqIGFzIE1FVEFEQVRBX0tFWSBmcm9tICcuLi9jb25zdGFudHMvbWV0YWRhdGFfa2V5cyc7XG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gJy4uL3BsYW5uaW5nL21ldGFkYXRhJztcbnZhciB0cmF2ZXJzZUFuY2Vyc3RvcnMgPSBmdW5jdGlvbiAocmVxdWVzdCwgY29uc3RyYWludCkge1xuICAgIHZhciBwYXJlbnQgPSByZXF1ZXN0LnBhcmVudFJlcXVlc3Q7XG4gICAgaWYgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY29uc3RyYWludChwYXJlbnQpID8gdHJ1ZSA6IHRyYXZlcnNlQW5jZXJzdG9ycyhwYXJlbnQsIGNvbnN0cmFpbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn07XG52YXIgdGFnZ2VkQ29uc3RyYWludCA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBjb25zdHJhaW50ID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3QgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHJlcXVlc3QudGFyZ2V0ICE9PSBudWxsICYmXG4gICAgICAgICAgICByZXF1ZXN0LnRhcmdldC5tYXRjaGVzVGFnKGtleSkodmFsdWUpO1xuICAgIH07XG4gICAgY29uc3RyYWludC5tZXRhRGF0YSA9IG5ldyBNZXRhZGF0YShrZXksIHZhbHVlKTtcbiAgICByZXR1cm4gY29uc3RyYWludDtcbn07IH07XG52YXIgbmFtZWRDb25zdHJhaW50ID0gdGFnZ2VkQ29uc3RyYWludChNRVRBREFUQV9LRVkuTkFNRURfVEFHKTtcbnZhciB0eXBlQ29uc3RyYWludCA9IGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiBmdW5jdGlvbiAocmVxdWVzdCkge1xuICAgIHZhciBiaW5kaW5nID0gbnVsbDtcbiAgICBpZiAocmVxdWVzdCAhPT0gbnVsbCkge1xuICAgICAgICBiaW5kaW5nID0gcmVxdWVzdC5iaW5kaW5nc1swXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGJpbmRpbmcuc2VydmljZUlkZW50aWZpZXIgPT09IHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29uc3RydWN0b3IgPSByZXF1ZXN0LmJpbmRpbmdzWzBdLmltcGxlbWVudGF0aW9uVHlwZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBjb25zdHJ1Y3RvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59OyB9O1xuZXhwb3J0IHsgdHJhdmVyc2VBbmNlcnN0b3JzLCB0YWdnZWRDb25zdHJhaW50LCBuYW1lZENvbnN0cmFpbnQsIHR5cGVDb25zdHJhaW50LCB9O1xuIiwiaW1wb3J0IHsgQmluZGluZ09uU3ludGF4IH0gZnJvbSAnLi9iaW5kaW5nX29uX3N5bnRheCc7XG5pbXBvcnQgeyBuYW1lZENvbnN0cmFpbnQsIHRhZ2dlZENvbnN0cmFpbnQsIHRyYXZlcnNlQW5jZXJzdG9ycywgdHlwZUNvbnN0cmFpbnQsIH0gZnJvbSAnLi9jb25zdHJhaW50X2hlbHBlcnMnO1xudmFyIEJpbmRpbmdXaGVuU3ludGF4ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCaW5kaW5nV2hlblN5bnRheChiaW5kaW5nKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcgPSBiaW5kaW5nO1xuICAgIH1cbiAgICBCaW5kaW5nV2hlblN5bnRheC5wcm90b3R5cGUud2hlbiA9IGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuY29uc3RyYWludCA9IGNvbnN0cmFpbnQ7XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ09uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5TeW50YXgucHJvdG90eXBlLndoZW5UYXJnZXROYW1lZCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuY29uc3RyYWludCA9IG5hbWVkQ29uc3RyYWludChuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nT25TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICBCaW5kaW5nV2hlblN5bnRheC5wcm90b3R5cGUud2hlblRhcmdldElzRGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fYmluZGluZy5jb25zdHJhaW50ID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRhcmdldElzRGVmYXVsdCA9IHJlcXVlc3QudGFyZ2V0ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgIXJlcXVlc3QudGFyZ2V0LmlzTmFtZWQoKSAmJlxuICAgICAgICAgICAgICAgICFyZXF1ZXN0LnRhcmdldC5pc1RhZ2dlZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldElzRGVmYXVsdDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nT25TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICBCaW5kaW5nV2hlblN5bnRheC5wcm90b3R5cGUud2hlblRhcmdldFRhZ2dlZCA9IGZ1bmN0aW9uICh0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuY29uc3RyYWludCA9IHRhZ2dlZENvbnN0cmFpbnQodGFnKSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ09uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5TeW50YXgucHJvdG90eXBlLndoZW5JbmplY3RlZEludG8gPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuY29uc3RyYWludCA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCAhPT0gbnVsbCAmJiB0eXBlQ29uc3RyYWludChwYXJlbnQpKHJlcXVlc3QucGFyZW50UmVxdWVzdCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ09uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5TeW50YXgucHJvdG90eXBlLndoZW5QYXJlbnROYW1lZCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuY29uc3RyYWludCA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCAhPT0gbnVsbCAmJiBuYW1lZENvbnN0cmFpbnQobmFtZSkocmVxdWVzdC5wYXJlbnRSZXF1ZXN0KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nT25TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICBCaW5kaW5nV2hlblN5bnRheC5wcm90b3R5cGUud2hlblBhcmVudFRhZ2dlZCA9IGZ1bmN0aW9uICh0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuY29uc3RyYWludCA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCAhPT0gbnVsbCAmJiB0YWdnZWRDb25zdHJhaW50KHRhZykodmFsdWUpKHJlcXVlc3QucGFyZW50UmVxdWVzdCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ09uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5TeW50YXgucHJvdG90eXBlLndoZW5BbnlBbmNlc3RvcklzID0gZnVuY3Rpb24gKGFuY2VzdG9yKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuY29uc3RyYWludCA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCAhPT0gbnVsbCAmJiB0cmF2ZXJzZUFuY2Vyc3RvcnMocmVxdWVzdCwgdHlwZUNvbnN0cmFpbnQoYW5jZXN0b3IpKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nT25TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICBCaW5kaW5nV2hlblN5bnRheC5wcm90b3R5cGUud2hlbk5vQW5jZXN0b3JJcyA9IGZ1bmN0aW9uIChhbmNlc3Rvcikge1xuICAgICAgICB0aGlzLl9iaW5kaW5nLmNvbnN0cmFpbnQgPSBmdW5jdGlvbiAocmVxdWVzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAhdHJhdmVyc2VBbmNlcnN0b3JzKHJlcXVlc3QsIHR5cGVDb25zdHJhaW50KGFuY2VzdG9yKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ09uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5TeW50YXgucHJvdG90eXBlLndoZW5BbnlBbmNlc3Rvck5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdGhpcy5fYmluZGluZy5jb25zdHJhaW50ID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0ICE9PSBudWxsICYmIHRyYXZlcnNlQW5jZXJzdG9ycyhyZXF1ZXN0LCBuYW1lZENvbnN0cmFpbnQobmFtZSkpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmdPblN5bnRheCh0aGlzLl9iaW5kaW5nKTtcbiAgICB9O1xuICAgIEJpbmRpbmdXaGVuU3ludGF4LnByb3RvdHlwZS53aGVuTm9BbmNlc3Rvck5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdGhpcy5fYmluZGluZy5jb25zdHJhaW50ID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0ICE9PSBudWxsICYmICF0cmF2ZXJzZUFuY2Vyc3RvcnMocmVxdWVzdCwgbmFtZWRDb25zdHJhaW50KG5hbWUpKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nT25TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICBCaW5kaW5nV2hlblN5bnRheC5wcm90b3R5cGUud2hlbkFueUFuY2VzdG9yVGFnZ2VkID0gZnVuY3Rpb24gKHRhZywgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYmluZGluZy5jb25zdHJhaW50ID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgdHJhdmVyc2VBbmNlcnN0b3JzKHJlcXVlc3QsIHRhZ2dlZENvbnN0cmFpbnQodGFnKSh2YWx1ZSkpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmdPblN5bnRheCh0aGlzLl9iaW5kaW5nKTtcbiAgICB9O1xuICAgIEJpbmRpbmdXaGVuU3ludGF4LnByb3RvdHlwZS53aGVuTm9BbmNlc3RvclRhZ2dlZCA9IGZ1bmN0aW9uICh0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuY29uc3RyYWludCA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICF0cmF2ZXJzZUFuY2Vyc3RvcnMocmVxdWVzdCwgdGFnZ2VkQ29uc3RyYWludCh0YWcpKHZhbHVlKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ09uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5TeW50YXgucHJvdG90eXBlLndoZW5BbnlBbmNlc3Rvck1hdGNoZXMgPSBmdW5jdGlvbiAoY29uc3RyYWludCkge1xuICAgICAgICB0aGlzLl9iaW5kaW5nLmNvbnN0cmFpbnQgPSBmdW5jdGlvbiAocmVxdWVzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZUFuY2Vyc3RvcnMocmVxdWVzdCwgY29uc3RyYWludCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ09uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5TeW50YXgucHJvdG90eXBlLndoZW5Ob0FuY2VzdG9yTWF0Y2hlcyA9IGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuY29uc3RyYWludCA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICF0cmF2ZXJzZUFuY2Vyc3RvcnMocmVxdWVzdCwgY29uc3RyYWludCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ09uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgcmV0dXJuIEJpbmRpbmdXaGVuU3ludGF4O1xufSgpKTtcbmV4cG9ydCB7IEJpbmRpbmdXaGVuU3ludGF4IH07XG4iLCJpbXBvcnQgeyBCaW5kaW5nV2hlblN5bnRheCB9IGZyb20gJy4vYmluZGluZ193aGVuX3N5bnRheCc7XG52YXIgQmluZGluZ09uU3ludGF4ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCaW5kaW5nT25TeW50YXgoYmluZGluZykge1xuICAgICAgICB0aGlzLl9iaW5kaW5nID0gYmluZGluZztcbiAgICB9XG4gICAgQmluZGluZ09uU3ludGF4LnByb3RvdHlwZS5vbkFjdGl2YXRpb24gPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICB0aGlzLl9iaW5kaW5nLm9uQWN0aXZhdGlvbiA9IGhhbmRsZXI7XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ1doZW5TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICBCaW5kaW5nT25TeW50YXgucHJvdG90eXBlLm9uRGVhY3RpdmF0aW9uID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5fYmluZGluZy5vbkRlYWN0aXZhdGlvbiA9IGhhbmRsZXI7XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ1doZW5TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICByZXR1cm4gQmluZGluZ09uU3ludGF4O1xufSgpKTtcbmV4cG9ydCB7IEJpbmRpbmdPblN5bnRheCB9O1xuIiwiaW1wb3J0IHsgQmluZGluZ09uU3ludGF4IH0gZnJvbSAnLi9iaW5kaW5nX29uX3N5bnRheCc7XG5pbXBvcnQgeyBCaW5kaW5nV2hlblN5bnRheCB9IGZyb20gJy4vYmluZGluZ193aGVuX3N5bnRheCc7XG52YXIgQmluZGluZ1doZW5PblN5bnRheCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQmluZGluZ1doZW5PblN5bnRheChiaW5kaW5nKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcgPSBiaW5kaW5nO1xuICAgICAgICB0aGlzLl9iaW5kaW5nV2hlblN5bnRheCA9IG5ldyBCaW5kaW5nV2hlblN5bnRheCh0aGlzLl9iaW5kaW5nKTtcbiAgICAgICAgdGhpcy5fYmluZGluZ09uU3ludGF4ID0gbmV3IEJpbmRpbmdPblN5bnRheCh0aGlzLl9iaW5kaW5nKTtcbiAgICB9XG4gICAgQmluZGluZ1doZW5PblN5bnRheC5wcm90b3R5cGUud2hlbiA9IGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuKGNvbnN0cmFpbnQpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5PblN5bnRheC5wcm90b3R5cGUud2hlblRhcmdldE5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5UYXJnZXROYW1lZChuYW1lKTtcbiAgICB9O1xuICAgIEJpbmRpbmdXaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5UYXJnZXRJc0RlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuVGFyZ2V0SXNEZWZhdWx0KCk7XG4gICAgfTtcbiAgICBCaW5kaW5nV2hlbk9uU3ludGF4LnByb3RvdHlwZS53aGVuVGFyZ2V0VGFnZ2VkID0gZnVuY3Rpb24gKHRhZywgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5UYXJnZXRUYWdnZWQodGFnLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBCaW5kaW5nV2hlbk9uU3ludGF4LnByb3RvdHlwZS53aGVuSW5qZWN0ZWRJbnRvID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ1doZW5TeW50YXgud2hlbkluamVjdGVkSW50byhwYXJlbnQpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5PblN5bnRheC5wcm90b3R5cGUud2hlblBhcmVudE5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5QYXJlbnROYW1lZChuYW1lKTtcbiAgICB9O1xuICAgIEJpbmRpbmdXaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5QYXJlbnRUYWdnZWQgPSBmdW5jdGlvbiAodGFnLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ1doZW5TeW50YXgud2hlblBhcmVudFRhZ2dlZCh0YWcsIHZhbHVlKTtcbiAgICB9O1xuICAgIEJpbmRpbmdXaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5BbnlBbmNlc3RvcklzID0gZnVuY3Rpb24gKGFuY2VzdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuQW55QW5jZXN0b3JJcyhhbmNlc3Rvcik7XG4gICAgfTtcbiAgICBCaW5kaW5nV2hlbk9uU3ludGF4LnByb3RvdHlwZS53aGVuTm9BbmNlc3RvcklzID0gZnVuY3Rpb24gKGFuY2VzdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuTm9BbmNlc3RvcklzKGFuY2VzdG9yKTtcbiAgICB9O1xuICAgIEJpbmRpbmdXaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5BbnlBbmNlc3Rvck5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5BbnlBbmNlc3Rvck5hbWVkKG5hbWUpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5PblN5bnRheC5wcm90b3R5cGUud2hlbkFueUFuY2VzdG9yVGFnZ2VkID0gZnVuY3Rpb24gKHRhZywgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5BbnlBbmNlc3RvclRhZ2dlZCh0YWcsIHZhbHVlKTtcbiAgICB9O1xuICAgIEJpbmRpbmdXaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5Ob0FuY2VzdG9yTmFtZWQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ1doZW5TeW50YXgud2hlbk5vQW5jZXN0b3JOYW1lZChuYW1lKTtcbiAgICB9O1xuICAgIEJpbmRpbmdXaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5Ob0FuY2VzdG9yVGFnZ2VkID0gZnVuY3Rpb24gKHRhZywgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5Ob0FuY2VzdG9yVGFnZ2VkKHRhZywgdmFsdWUpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5PblN5bnRheC5wcm90b3R5cGUud2hlbkFueUFuY2VzdG9yTWF0Y2hlcyA9IGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuQW55QW5jZXN0b3JNYXRjaGVzKGNvbnN0cmFpbnQpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5PblN5bnRheC5wcm90b3R5cGUud2hlbk5vQW5jZXN0b3JNYXRjaGVzID0gZnVuY3Rpb24gKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5Ob0FuY2VzdG9yTWF0Y2hlcyhjb25zdHJhaW50KTtcbiAgICB9O1xuICAgIEJpbmRpbmdXaGVuT25TeW50YXgucHJvdG90eXBlLm9uQWN0aXZhdGlvbiA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nT25TeW50YXgub25BY3RpdmF0aW9uKGhhbmRsZXIpO1xuICAgIH07XG4gICAgQmluZGluZ1doZW5PblN5bnRheC5wcm90b3R5cGUub25EZWFjdGl2YXRpb24gPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ09uU3ludGF4Lm9uRGVhY3RpdmF0aW9uKGhhbmRsZXIpO1xuICAgIH07XG4gICAgcmV0dXJuIEJpbmRpbmdXaGVuT25TeW50YXg7XG59KCkpO1xuZXhwb3J0IHsgQmluZGluZ1doZW5PblN5bnRheCB9O1xuIiwiaW1wb3J0IHsgQmluZGluZ1Njb3BlRW51bSB9IGZyb20gJy4uL2NvbnN0YW50cy9saXRlcmFsX3R5cGVzJztcbmltcG9ydCB7IEJpbmRpbmdXaGVuT25TeW50YXggfSBmcm9tICcuL2JpbmRpbmdfd2hlbl9vbl9zeW50YXgnO1xudmFyIEJpbmRpbmdJblN5bnRheCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQmluZGluZ0luU3ludGF4KGJpbmRpbmcpIHtcbiAgICAgICAgdGhpcy5fYmluZGluZyA9IGJpbmRpbmc7XG4gICAgfVxuICAgIEJpbmRpbmdJblN5bnRheC5wcm90b3R5cGUuaW5SZXF1ZXN0U2NvcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuc2NvcGUgPSBCaW5kaW5nU2NvcGVFbnVtLlJlcXVlc3Q7XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ1doZW5PblN5bnRheCh0aGlzLl9iaW5kaW5nKTtcbiAgICB9O1xuICAgIEJpbmRpbmdJblN5bnRheC5wcm90b3R5cGUuaW5TaW5nbGV0b25TY29wZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fYmluZGluZy5zY29wZSA9IEJpbmRpbmdTY29wZUVudW0uU2luZ2xldG9uO1xuICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmdXaGVuT25TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICBCaW5kaW5nSW5TeW50YXgucHJvdG90eXBlLmluVHJhbnNpZW50U2NvcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuc2NvcGUgPSBCaW5kaW5nU2NvcGVFbnVtLlRyYW5zaWVudDtcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nV2hlbk9uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgcmV0dXJuIEJpbmRpbmdJblN5bnRheDtcbn0oKSk7XG5leHBvcnQgeyBCaW5kaW5nSW5TeW50YXggfTtcbiIsImltcG9ydCB7IEJpbmRpbmdJblN5bnRheCB9IGZyb20gJy4vYmluZGluZ19pbl9zeW50YXgnO1xuaW1wb3J0IHsgQmluZGluZ09uU3ludGF4IH0gZnJvbSAnLi9iaW5kaW5nX29uX3N5bnRheCc7XG5pbXBvcnQgeyBCaW5kaW5nV2hlblN5bnRheCB9IGZyb20gJy4vYmluZGluZ193aGVuX3N5bnRheCc7XG52YXIgQmluZGluZ0luV2hlbk9uU3ludGF4ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCaW5kaW5nSW5XaGVuT25TeW50YXgoYmluZGluZykge1xuICAgICAgICB0aGlzLl9iaW5kaW5nID0gYmluZGluZztcbiAgICAgICAgdGhpcy5fYmluZGluZ1doZW5TeW50YXggPSBuZXcgQmluZGluZ1doZW5TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgICAgIHRoaXMuX2JpbmRpbmdPblN5bnRheCA9IG5ldyBCaW5kaW5nT25TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgICAgIHRoaXMuX2JpbmRpbmdJblN5bnRheCA9IG5ldyBCaW5kaW5nSW5TeW50YXgoYmluZGluZyk7XG4gICAgfVxuICAgIEJpbmRpbmdJbldoZW5PblN5bnRheC5wcm90b3R5cGUuaW5SZXF1ZXN0U2NvcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nSW5TeW50YXguaW5SZXF1ZXN0U2NvcGUoKTtcbiAgICB9O1xuICAgIEJpbmRpbmdJbldoZW5PblN5bnRheC5wcm90b3R5cGUuaW5TaW5nbGV0b25TY29wZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdJblN5bnRheC5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgfTtcbiAgICBCaW5kaW5nSW5XaGVuT25TeW50YXgucHJvdG90eXBlLmluVHJhbnNpZW50U2NvcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nSW5TeW50YXguaW5UcmFuc2llbnRTY29wZSgpO1xuICAgIH07XG4gICAgQmluZGluZ0luV2hlbk9uU3ludGF4LnByb3RvdHlwZS53aGVuID0gZnVuY3Rpb24gKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW4oY29uc3RyYWludCk7XG4gICAgfTtcbiAgICBCaW5kaW5nSW5XaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5UYXJnZXROYW1lZCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuVGFyZ2V0TmFtZWQobmFtZSk7XG4gICAgfTtcbiAgICBCaW5kaW5nSW5XaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5UYXJnZXRJc0RlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuVGFyZ2V0SXNEZWZhdWx0KCk7XG4gICAgfTtcbiAgICBCaW5kaW5nSW5XaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5UYXJnZXRUYWdnZWQgPSBmdW5jdGlvbiAodGFnLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ1doZW5TeW50YXgud2hlblRhcmdldFRhZ2dlZCh0YWcsIHZhbHVlKTtcbiAgICB9O1xuICAgIEJpbmRpbmdJbldoZW5PblN5bnRheC5wcm90b3R5cGUud2hlbkluamVjdGVkSW50byA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5JbmplY3RlZEludG8ocGFyZW50KTtcbiAgICB9O1xuICAgIEJpbmRpbmdJbldoZW5PblN5bnRheC5wcm90b3R5cGUud2hlblBhcmVudE5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5QYXJlbnROYW1lZChuYW1lKTtcbiAgICB9O1xuICAgIEJpbmRpbmdJbldoZW5PblN5bnRheC5wcm90b3R5cGUud2hlblBhcmVudFRhZ2dlZCA9IGZ1bmN0aW9uICh0YWcsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuUGFyZW50VGFnZ2VkKHRhZywgdmFsdWUpO1xuICAgIH07XG4gICAgQmluZGluZ0luV2hlbk9uU3ludGF4LnByb3RvdHlwZS53aGVuQW55QW5jZXN0b3JJcyA9IGZ1bmN0aW9uIChhbmNlc3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ1doZW5TeW50YXgud2hlbkFueUFuY2VzdG9ySXMoYW5jZXN0b3IpO1xuICAgIH07XG4gICAgQmluZGluZ0luV2hlbk9uU3ludGF4LnByb3RvdHlwZS53aGVuTm9BbmNlc3RvcklzID0gZnVuY3Rpb24gKGFuY2VzdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuTm9BbmNlc3RvcklzKGFuY2VzdG9yKTtcbiAgICB9O1xuICAgIEJpbmRpbmdJbldoZW5PblN5bnRheC5wcm90b3R5cGUud2hlbkFueUFuY2VzdG9yTmFtZWQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ1doZW5TeW50YXgud2hlbkFueUFuY2VzdG9yTmFtZWQobmFtZSk7XG4gICAgfTtcbiAgICBCaW5kaW5nSW5XaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5BbnlBbmNlc3RvclRhZ2dlZCA9IGZ1bmN0aW9uICh0YWcsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iaW5kaW5nV2hlblN5bnRheC53aGVuQW55QW5jZXN0b3JUYWdnZWQodGFnLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBCaW5kaW5nSW5XaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5Ob0FuY2VzdG9yTmFtZWQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ1doZW5TeW50YXgud2hlbk5vQW5jZXN0b3JOYW1lZChuYW1lKTtcbiAgICB9O1xuICAgIEJpbmRpbmdJbldoZW5PblN5bnRheC5wcm90b3R5cGUud2hlbk5vQW5jZXN0b3JUYWdnZWQgPSBmdW5jdGlvbiAodGFnLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ1doZW5TeW50YXgud2hlbk5vQW5jZXN0b3JUYWdnZWQodGFnLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBCaW5kaW5nSW5XaGVuT25TeW50YXgucHJvdG90eXBlLndoZW5BbnlBbmNlc3Rvck1hdGNoZXMgPSBmdW5jdGlvbiAoY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ1doZW5TeW50YXgud2hlbkFueUFuY2VzdG9yTWF0Y2hlcyhjb25zdHJhaW50KTtcbiAgICB9O1xuICAgIEJpbmRpbmdJbldoZW5PblN5bnRheC5wcm90b3R5cGUud2hlbk5vQW5jZXN0b3JNYXRjaGVzID0gZnVuY3Rpb24gKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdXaGVuU3ludGF4LndoZW5Ob0FuY2VzdG9yTWF0Y2hlcyhjb25zdHJhaW50KTtcbiAgICB9O1xuICAgIEJpbmRpbmdJbldoZW5PblN5bnRheC5wcm90b3R5cGUub25BY3RpdmF0aW9uID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdPblN5bnRheC5vbkFjdGl2YXRpb24oaGFuZGxlcik7XG4gICAgfTtcbiAgICBCaW5kaW5nSW5XaGVuT25TeW50YXgucHJvdG90eXBlLm9uRGVhY3RpdmF0aW9uID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdPblN5bnRheC5vbkRlYWN0aXZhdGlvbihoYW5kbGVyKTtcbiAgICB9O1xuICAgIHJldHVybiBCaW5kaW5nSW5XaGVuT25TeW50YXg7XG59KCkpO1xuZXhwb3J0IHsgQmluZGluZ0luV2hlbk9uU3ludGF4IH07XG4iLCJpbXBvcnQgKiBhcyBFUlJPUl9NU0dTIGZyb20gJy4uL2NvbnN0YW50cy9lcnJvcl9tc2dzJztcbmltcG9ydCB7IEJpbmRpbmdTY29wZUVudW0sIEJpbmRpbmdUeXBlRW51bSB9IGZyb20gJy4uL2NvbnN0YW50cy9saXRlcmFsX3R5cGVzJztcbmltcG9ydCB7IEJpbmRpbmdJbldoZW5PblN5bnRheCB9IGZyb20gJy4vYmluZGluZ19pbl93aGVuX29uX3N5bnRheCc7XG5pbXBvcnQgeyBCaW5kaW5nV2hlbk9uU3ludGF4IH0gZnJvbSAnLi9iaW5kaW5nX3doZW5fb25fc3ludGF4JztcbnZhciBCaW5kaW5nVG9TeW50YXggPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJpbmRpbmdUb1N5bnRheChiaW5kaW5nKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcgPSBiaW5kaW5nO1xuICAgIH1cbiAgICBCaW5kaW5nVG9TeW50YXgucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKGNvbnN0cnVjdG9yKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcudHlwZSA9IEJpbmRpbmdUeXBlRW51bS5JbnN0YW5jZTtcbiAgICAgICAgdGhpcy5fYmluZGluZy5pbXBsZW1lbnRhdGlvblR5cGUgPSBjb25zdHJ1Y3RvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nSW5XaGVuT25TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICBCaW5kaW5nVG9TeW50YXgucHJvdG90eXBlLnRvU2VsZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9iaW5kaW5nLnNlcnZpY2VJZGVudGlmaWVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHUy5JTlZBTElEX1RPX1NFTEZfVkFMVUUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzZWxmID0gdGhpcy5fYmluZGluZ1xuICAgICAgICAgICAgLnNlcnZpY2VJZGVudGlmaWVyO1xuICAgICAgICByZXR1cm4gdGhpcy50byhzZWxmKTtcbiAgICB9O1xuICAgIEJpbmRpbmdUb1N5bnRheC5wcm90b3R5cGUudG9Db25zdGFudFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcudHlwZSA9IEJpbmRpbmdUeXBlRW51bS5Db25zdGFudFZhbHVlO1xuICAgICAgICB0aGlzLl9iaW5kaW5nLmNhY2hlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuZHluYW1pY1ZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYmluZGluZy5pbXBsZW1lbnRhdGlvblR5cGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9iaW5kaW5nLnNjb3BlID0gQmluZGluZ1Njb3BlRW51bS5TaW5nbGV0b247XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ1doZW5PblN5bnRheCh0aGlzLl9iaW5kaW5nKTtcbiAgICB9O1xuICAgIEJpbmRpbmdUb1N5bnRheC5wcm90b3R5cGUudG9EeW5hbWljVmFsdWUgPSBmdW5jdGlvbiAoZnVuYykge1xuICAgICAgICB0aGlzLl9iaW5kaW5nLnR5cGUgPSBCaW5kaW5nVHlwZUVudW0uRHluYW1pY1ZhbHVlO1xuICAgICAgICB0aGlzLl9iaW5kaW5nLmNhY2hlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYmluZGluZy5keW5hbWljVmFsdWUgPSBmdW5jO1xuICAgICAgICB0aGlzLl9iaW5kaW5nLmltcGxlbWVudGF0aW9uVHlwZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ0luV2hlbk9uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgQmluZGluZ1RvU3ludGF4LnByb3RvdHlwZS50b0NvbnN0cnVjdG9yID0gZnVuY3Rpb24gKGNvbnN0cnVjdG9yKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcudHlwZSA9IEJpbmRpbmdUeXBlRW51bS5Db25zdHJ1Y3RvcjtcbiAgICAgICAgdGhpcy5fYmluZGluZy5pbXBsZW1lbnRhdGlvblR5cGUgPSBjb25zdHJ1Y3RvcjtcbiAgICAgICAgdGhpcy5fYmluZGluZy5zY29wZSA9IEJpbmRpbmdTY29wZUVudW0uU2luZ2xldG9uO1xuICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmdXaGVuT25TeW50YXgodGhpcy5fYmluZGluZyk7XG4gICAgfTtcbiAgICBCaW5kaW5nVG9TeW50YXgucHJvdG90eXBlLnRvRmFjdG9yeSA9IGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcudHlwZSA9IEJpbmRpbmdUeXBlRW51bS5GYWN0b3J5O1xuICAgICAgICB0aGlzLl9iaW5kaW5nLmZhY3RvcnkgPSBmYWN0b3J5O1xuICAgICAgICB0aGlzLl9iaW5kaW5nLnNjb3BlID0gQmluZGluZ1Njb3BlRW51bS5TaW5nbGV0b247XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ1doZW5PblN5bnRheCh0aGlzLl9iaW5kaW5nKTtcbiAgICB9O1xuICAgIEJpbmRpbmdUb1N5bnRheC5wcm90b3R5cGUudG9GdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TR1MuSU5WQUxJRF9GVU5DVElPTl9CSU5ESU5HKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYmluZGluZ1doZW5PblN5bnRheCA9IHRoaXMudG9Db25zdGFudFZhbHVlKGZ1bmMpO1xuICAgICAgICB0aGlzLl9iaW5kaW5nLnR5cGUgPSBCaW5kaW5nVHlwZUVudW0uRnVuY3Rpb247XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuc2NvcGUgPSBCaW5kaW5nU2NvcGVFbnVtLlNpbmdsZXRvbjtcbiAgICAgICAgcmV0dXJuIGJpbmRpbmdXaGVuT25TeW50YXg7XG4gICAgfTtcbiAgICBCaW5kaW5nVG9TeW50YXgucHJvdG90eXBlLnRvQXV0b0ZhY3RvcnkgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgdGhpcy5fYmluZGluZy50eXBlID0gQmluZGluZ1R5cGVFbnVtLkZhY3Rvcnk7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcuZmFjdG9yeSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgICAgICB2YXIgYXV0b2ZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29udGFpbmVyLmdldChzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGF1dG9mYWN0b3J5O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9iaW5kaW5nLnNjb3BlID0gQmluZGluZ1Njb3BlRW51bS5TaW5nbGV0b247XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ1doZW5PblN5bnRheCh0aGlzLl9iaW5kaW5nKTtcbiAgICB9O1xuICAgIEJpbmRpbmdUb1N5bnRheC5wcm90b3R5cGUudG9BdXRvTmFtZWRGYWN0b3J5ID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcudHlwZSA9IEJpbmRpbmdUeXBlRW51bS5GYWN0b3J5O1xuICAgICAgICB0aGlzLl9iaW5kaW5nLmZhY3RvcnkgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbnRhaW5lci5nZXROYW1lZChzZXJ2aWNlSWRlbnRpZmllciwgbmFtZWQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nV2hlbk9uU3ludGF4KHRoaXMuX2JpbmRpbmcpO1xuICAgIH07XG4gICAgQmluZGluZ1RvU3ludGF4LnByb3RvdHlwZS50b1Byb3ZpZGVyID0gZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHRoaXMuX2JpbmRpbmcudHlwZSA9IEJpbmRpbmdUeXBlRW51bS5Qcm92aWRlcjtcbiAgICAgICAgdGhpcy5fYmluZGluZy5wcm92aWRlciA9IHByb3ZpZGVyO1xuICAgICAgICB0aGlzLl9iaW5kaW5nLnNjb3BlID0gQmluZGluZ1Njb3BlRW51bS5TaW5nbGV0b247XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ1doZW5PblN5bnRheCh0aGlzLl9iaW5kaW5nKTtcbiAgICB9O1xuICAgIEJpbmRpbmdUb1N5bnRheC5wcm90b3R5cGUudG9TZXJ2aWNlID0gZnVuY3Rpb24gKHNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy50b0R5bmFtaWNWYWx1ZShmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29udGFpbmVyLmdldChzZXJ2aWNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gQmluZGluZ1RvU3ludGF4O1xufSgpKTtcbmV4cG9ydCB7IEJpbmRpbmdUb1N5bnRheCB9O1xuIiwidmFyIENvbnRhaW5lclNuYXBzaG90ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb250YWluZXJTbmFwc2hvdCgpIHtcbiAgICB9XG4gICAgQ29udGFpbmVyU25hcHNob3Qub2YgPSBmdW5jdGlvbiAoYmluZGluZ3MsIG1pZGRsZXdhcmUsIGFjdGl2YXRpb25zLCBkZWFjdGl2YXRpb25zLCBtb2R1bGVBY3RpdmF0aW9uU3RvcmUpIHtcbiAgICAgICAgdmFyIHNuYXBzaG90ID0gbmV3IENvbnRhaW5lclNuYXBzaG90KCk7XG4gICAgICAgIHNuYXBzaG90LmJpbmRpbmdzID0gYmluZGluZ3M7XG4gICAgICAgIHNuYXBzaG90Lm1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlO1xuICAgICAgICBzbmFwc2hvdC5kZWFjdGl2YXRpb25zID0gZGVhY3RpdmF0aW9ucztcbiAgICAgICAgc25hcHNob3QuYWN0aXZhdGlvbnMgPSBhY3RpdmF0aW9ucztcbiAgICAgICAgc25hcHNob3QubW9kdWxlQWN0aXZhdGlvblN0b3JlID0gbW9kdWxlQWN0aXZhdGlvblN0b3JlO1xuICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGFpbmVyU25hcHNob3Q7XG59KCkpO1xuZXhwb3J0IHsgQ29udGFpbmVyU25hcHNob3QgfTtcbiIsImltcG9ydCAqIGFzIEVSUk9SX01TR1MgZnJvbSAnLi4vY29uc3RhbnRzL2Vycm9yX21zZ3MnO1xuaW1wb3J0IHsgaXNDbG9uYWJsZSB9IGZyb20gJy4uL3V0aWxzL2Nsb25hYmxlJztcbnZhciBMb29rdXAgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvb2t1cCgpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBMb29rdXAucHJvdG90eXBlLmdldE1hcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcDtcbiAgICB9O1xuICAgIExvb2t1cC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLl9jaGVja05vbk51bGlzaChzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHUy5OVUxMX0FSR1VNRU5UKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9tYXAuZ2V0KHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVudHJ5LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWFwLnNldChzZXJ2aWNlSWRlbnRpZmllciwgW3ZhbHVlXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExvb2t1cC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTm9uTnVsaXNoKHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5fbWFwLmdldChzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHUy5LRVlfTk9UX0ZPVU5EKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTG9va3VwLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tOb25OdWxpc2goc2VydmljZUlkZW50aWZpZXIpO1xuICAgICAgICBpZiAoIXRoaXMuX21hcC5kZWxldGUoc2VydmljZUlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHUy5LRVlfTk9UX0ZPVU5EKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTG9va3VwLnByb3RvdHlwZS5yZW1vdmVJbnRlcnNlY3Rpb24gPSBmdW5jdGlvbiAobG9va3VwKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGxvb2t1cEFjdGl2YXRpb25zID0gbG9va3VwLmhhc0tleShzZXJ2aWNlSWRlbnRpZmllcilcbiAgICAgICAgICAgICAgICA/IGxvb2t1cC5nZXQoc2VydmljZUlkZW50aWZpZXIpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAobG9va3VwQWN0aXZhdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZFZhbHVlcyA9IHZhbHVlLmZpbHRlcihmdW5jdGlvbiAobG9va3VwVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFsb29rdXBBY3RpdmF0aW9ucy5zb21lKGZ1bmN0aW9uIChtb2R1bGVBY3RpdmF0aW9uKSB7IHJldHVybiBsb29rdXBWYWx1ZSA9PT0gbW9kdWxlQWN0aXZhdGlvbjsgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3NldFZhbHVlKHNlcnZpY2VJZGVudGlmaWVyLCBmaWx0ZXJlZFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgTG9va3VwLnByb3RvdHlwZS5yZW1vdmVCeUNvbmRpdGlvbiA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJlbW92YWxzID0gW107XG4gICAgICAgIHRoaXMuX21hcC5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyaWVzLCBrZXkpIHtcbiAgICAgICAgICAgIHZhciB1cGRhdGVkRW50cmllcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBlbnRyaWVzXzEgPSBlbnRyaWVzOyBfaSA8IGVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzXzFbX2ldO1xuICAgICAgICAgICAgICAgIHZhciByZW1vdmUgPSBjb25kaXRpb24oZW50cnkpO1xuICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZhbHMucHVzaChlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5fc2V0VmFsdWUoa2V5LCB1cGRhdGVkRW50cmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVtb3ZhbHM7XG4gICAgfTtcbiAgICBMb29rdXAucHJvdG90eXBlLmhhc0tleSA9IGZ1bmN0aW9uIChzZXJ2aWNlSWRlbnRpZmllcikge1xuICAgICAgICB0aGlzLl9jaGVja05vbk51bGlzaChzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuaGFzKHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICB9O1xuICAgIExvb2t1cC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb3B5ID0gbmV3IExvb2t1cCgpO1xuICAgICAgICB0aGlzLl9tYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgICAgIGNvcHkuYWRkKGtleSwgaXNDbG9uYWJsZShiKSA/IGIuY2xvbmUoKSA6IGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9O1xuICAgIExvb2t1cC5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiAoZnVuYykge1xuICAgICAgICB0aGlzLl9tYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgZnVuYyhrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBMb29rdXAucHJvdG90eXBlLl9jaGVja05vbk51bGlzaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TR1MuTlVMTF9BUkdVTUVOVCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExvb2t1cC5wcm90b3R5cGUuX3NldFZhbHVlID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLnNldChzZXJ2aWNlSWRlbnRpZmllciwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWFwLmRlbGV0ZShzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBMb29rdXA7XG59KCkpO1xuZXhwb3J0IHsgTG9va3VwIH07XG4iLCJmdW5jdGlvbiBpc0Nsb25hYmxlKG9iaikge1xuICAgIHJldHVybiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgb2JqICE9PSBudWxsICYmXG4gICAgICAgICdjbG9uZScgaW4gb2JqICYmXG4gICAgICAgIHR5cGVvZiBvYmouY2xvbmUgPT09ICdmdW5jdGlvbicpO1xufVxuZXhwb3J0IHsgaXNDbG9uYWJsZSB9O1xuIiwiaW1wb3J0IHsgTG9va3VwIH0gZnJvbSAnLi9sb29rdXAnO1xudmFyIE1vZHVsZUFjdGl2YXRpb25TdG9yZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTW9kdWxlQWN0aXZhdGlvblN0b3JlKCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIE1vZHVsZUFjdGl2YXRpb25TdG9yZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG1vZHVsZUlkKSB7XG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX21hcC5nZXQobW9kdWxlSWQpO1xuICAgICAgICBpZiAoaGFuZGxlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEVtcHR5SGFuZGxlcnNTdG9yZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21hcC5kZWxldGUobW9kdWxlSWQpO1xuICAgICAgICByZXR1cm4gaGFuZGxlcnM7XG4gICAgfTtcbiAgICBNb2R1bGVBY3RpdmF0aW9uU3RvcmUucHJvdG90eXBlLmFkZERlYWN0aXZhdGlvbiA9IGZ1bmN0aW9uIChtb2R1bGVJZCwgc2VydmljZUlkZW50aWZpZXIsIG9uRGVhY3RpdmF0aW9uKSB7XG4gICAgICAgIHRoaXMuX2dldE1vZHVsZUFjdGl2YXRpb25IYW5kbGVycyhtb2R1bGVJZCkub25EZWFjdGl2YXRpb25zLmFkZChzZXJ2aWNlSWRlbnRpZmllciwgb25EZWFjdGl2YXRpb24pO1xuICAgIH07XG4gICAgTW9kdWxlQWN0aXZhdGlvblN0b3JlLnByb3RvdHlwZS5hZGRBY3RpdmF0aW9uID0gZnVuY3Rpb24gKG1vZHVsZUlkLCBzZXJ2aWNlSWRlbnRpZmllciwgb25BY3RpdmF0aW9uKSB7XG4gICAgICAgIHRoaXMuX2dldE1vZHVsZUFjdGl2YXRpb25IYW5kbGVycyhtb2R1bGVJZCkub25BY3RpdmF0aW9ucy5hZGQoc2VydmljZUlkZW50aWZpZXIsIG9uQWN0aXZhdGlvbik7XG4gICAgfTtcbiAgICBNb2R1bGVBY3RpdmF0aW9uU3RvcmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2xvbmUgPSBuZXcgTW9kdWxlQWN0aXZhdGlvblN0b3JlKCk7XG4gICAgICAgIHRoaXMuX21hcC5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyc1N0b3JlLCBtb2R1bGVJZCkge1xuICAgICAgICAgICAgY2xvbmUuX21hcC5zZXQobW9kdWxlSWQsIHtcbiAgICAgICAgICAgICAgICBvbkFjdGl2YXRpb25zOiBoYW5kbGVyc1N0b3JlLm9uQWN0aXZhdGlvbnMuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICBvbkRlYWN0aXZhdGlvbnM6IGhhbmRsZXJzU3RvcmUub25EZWFjdGl2YXRpb25zLmNsb25lKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9O1xuICAgIE1vZHVsZUFjdGl2YXRpb25TdG9yZS5wcm90b3R5cGUuX2dldE1vZHVsZUFjdGl2YXRpb25IYW5kbGVycyA9IGZ1bmN0aW9uIChtb2R1bGVJZCkge1xuICAgICAgICB2YXIgbW9kdWxlQWN0aXZhdGlvbkhhbmRsZXJzID0gdGhpcy5fbWFwLmdldChtb2R1bGVJZCk7XG4gICAgICAgIGlmIChtb2R1bGVBY3RpdmF0aW9uSGFuZGxlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbW9kdWxlQWN0aXZhdGlvbkhhbmRsZXJzID0gdGhpcy5fZ2V0RW1wdHlIYW5kbGVyc1N0b3JlKCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAuc2V0KG1vZHVsZUlkLCBtb2R1bGVBY3RpdmF0aW9uSGFuZGxlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVBY3RpdmF0aW9uSGFuZGxlcnM7XG4gICAgfTtcbiAgICBNb2R1bGVBY3RpdmF0aW9uU3RvcmUucHJvdG90eXBlLl9nZXRFbXB0eUhhbmRsZXJzU3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoYW5kbGVyc1N0b3JlID0ge1xuICAgICAgICAgICAgb25BY3RpdmF0aW9uczogbmV3IExvb2t1cCgpLFxuICAgICAgICAgICAgb25EZWFjdGl2YXRpb25zOiBuZXcgTG9va3VwKCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBoYW5kbGVyc1N0b3JlO1xuICAgIH07XG4gICAgcmV0dXJuIE1vZHVsZUFjdGl2YXRpb25TdG9yZTtcbn0oKSk7XG5leHBvcnQgeyBNb2R1bGVBY3RpdmF0aW9uU3RvcmUgfTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gICAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuaW1wb3J0IHsgQmluZGluZyB9IGZyb20gJy4uL2JpbmRpbmdzL2JpbmRpbmcnO1xuaW1wb3J0ICogYXMgRVJST1JfTVNHUyBmcm9tICcuLi9jb25zdGFudHMvZXJyb3JfbXNncyc7XG5pbXBvcnQgeyBCaW5kaW5nU2NvcGVFbnVtLCBUYXJnZXRUeXBlRW51bSB9IGZyb20gJy4uL2NvbnN0YW50cy9saXRlcmFsX3R5cGVzJztcbmltcG9ydCAqIGFzIE1FVEFEQVRBX0tFWSBmcm9tICcuLi9jb25zdGFudHMvbWV0YWRhdGFfa2V5cyc7XG5pbXBvcnQgeyBNZXRhZGF0YVJlYWRlciB9IGZyb20gJy4uL3BsYW5uaW5nL21ldGFkYXRhX3JlYWRlcic7XG5pbXBvcnQgeyBjcmVhdGVNb2NrUmVxdWVzdCwgZ2V0QmluZGluZ0RpY3Rpb25hcnksIHBsYW4sIH0gZnJvbSAnLi4vcGxhbm5pbmcvcGxhbm5lcic7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnLi4vcmVzb2x1dGlvbi9yZXNvbHZlcic7XG5pbXBvcnQgeyBCaW5kaW5nVG9TeW50YXggfSBmcm9tICcuLi9zeW50YXgvYmluZGluZ190b19zeW50YXgnO1xuaW1wb3J0IHsgaXNQcm9taXNlLCBpc1Byb21pc2VPckNvbnRhaW5zUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL2FzeW5jJztcbmltcG9ydCB7IGlkIH0gZnJvbSAnLi4vdXRpbHMvaWQnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUlkZW50aWZpZXJBc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgQ29udGFpbmVyU25hcHNob3QgfSBmcm9tICcuL2NvbnRhaW5lcl9zbmFwc2hvdCc7XG5pbXBvcnQgeyBMb29rdXAgfSBmcm9tICcuL2xvb2t1cCc7XG5pbXBvcnQgeyBNb2R1bGVBY3RpdmF0aW9uU3RvcmUgfSBmcm9tICcuL21vZHVsZV9hY3RpdmF0aW9uX3N0b3JlJztcbnZhciBDb250YWluZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnRhaW5lcihjb250YWluZXJPcHRpb25zKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gY29udGFpbmVyT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TR1MuQ09OVEFJTkVSX09QVElPTlNfTVVTVF9CRV9BTl9PQkpFQ1QpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRTY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHRTY29wZSA9IEJpbmRpbmdTY29wZUVudW0uVHJhbnNpZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZGVmYXVsdFNjb3BlICE9PSBCaW5kaW5nU2NvcGVFbnVtLlNpbmdsZXRvbiAmJlxuICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0U2NvcGUgIT09IEJpbmRpbmdTY29wZUVudW0uVHJhbnNpZW50ICYmXG4gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHRTY29wZSAhPT0gQmluZGluZ1Njb3BlRW51bS5SZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHUy5DT05UQUlORVJfT1BUSU9OU19JTlZBTElEX0RFRkFVTFRfU0NPUEUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmF1dG9CaW5kSW5qZWN0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvcHRpb25zLmF1dG9CaW5kSW5qZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9CaW5kSW5qZWN0YWJsZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHUy5DT05UQUlORVJfT1BUSU9OU19JTlZBTElEX0FVVE9fQklORF9JTkpFQ1RBQkxFKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5za2lwQmFzZUNsYXNzQ2hlY2tzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc2tpcEJhc2VDbGFzc0NoZWNrcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLnNraXBCYXNlQ2xhc3NDaGVja3MgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TR1MuQ09OVEFJTkVSX09QVElPTlNfSU5WQUxJRF9TS0lQX0JBU0VfQ0hFQ0spO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGF1dG9CaW5kSW5qZWN0YWJsZTogb3B0aW9ucy5hdXRvQmluZEluamVjdGFibGUsXG4gICAgICAgICAgICBkZWZhdWx0U2NvcGU6IG9wdGlvbnMuZGVmYXVsdFNjb3BlLFxuICAgICAgICAgICAgc2tpcEJhc2VDbGFzc0NoZWNrczogb3B0aW9ucy5za2lwQmFzZUNsYXNzQ2hlY2tzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmlkID0gaWQoKTtcbiAgICAgICAgdGhpcy5fYmluZGluZ0RpY3Rpb25hcnkgPSBuZXcgTG9va3VwKCk7XG4gICAgICAgIHRoaXMuX3NuYXBzaG90cyA9IFtdO1xuICAgICAgICB0aGlzLl9taWRkbGV3YXJlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGlvbnMgPSBuZXcgTG9va3VwKCk7XG4gICAgICAgIHRoaXMuX2RlYWN0aXZhdGlvbnMgPSBuZXcgTG9va3VwKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFSZWFkZXIgPSBuZXcgTWV0YWRhdGFSZWFkZXIoKTtcbiAgICAgICAgdGhpcy5fbW9kdWxlQWN0aXZhdGlvblN0b3JlID0gbmV3IE1vZHVsZUFjdGl2YXRpb25TdG9yZSgpO1xuICAgIH1cbiAgICBDb250YWluZXIubWVyZ2UgPSBmdW5jdGlvbiAoY29udGFpbmVyMSwgY29udGFpbmVyMikge1xuICAgICAgICB2YXIgY29udGFpbmVycyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgY29udGFpbmVyc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29udGFpbmVyID0gbmV3IENvbnRhaW5lcigpO1xuICAgICAgICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IF9fc3ByZWFkQXJyYXkoW1xuICAgICAgICAgICAgY29udGFpbmVyMSxcbiAgICAgICAgICAgIGNvbnRhaW5lcjJcbiAgICAgICAgXSwgY29udGFpbmVycywgdHJ1ZSkubWFwKGZ1bmN0aW9uICh0YXJnZXRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRCaW5kaW5nRGljdGlvbmFyeSh0YXJnZXRDb250YWluZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGJpbmRpbmdEaWN0aW9uYXJ5ID0gZ2V0QmluZGluZ0RpY3Rpb25hcnkoY29udGFpbmVyKTtcbiAgICAgICAgZnVuY3Rpb24gY29weURpY3Rpb25hcnkob3JpZ2luLCBkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgb3JpZ2luLnRyYXZlcnNlKGZ1bmN0aW9uIChfa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKGJpbmRpbmcuc2VydmljZUlkZW50aWZpZXIsIGJpbmRpbmcuY2xvbmUoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldEJpbmRpbmdEaWN0aW9uYXJ5KSB7XG4gICAgICAgICAgICBjb3B5RGljdGlvbmFyeSh0YXJnZXRCaW5kaW5nRGljdGlvbmFyeSwgYmluZGluZ0RpY3Rpb25hcnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1vZHVsZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG1vZHVsZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ2V0SGVscGVycyA9IHRoaXMuX2dldENvbnRhaW5lck1vZHVsZUhlbHBlcnNGYWN0b3J5KCk7XG4gICAgICAgIGZvciAodmFyIF9hID0gMCwgbW9kdWxlc18xID0gbW9kdWxlczsgX2EgPCBtb2R1bGVzXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudE1vZHVsZSA9IG1vZHVsZXNfMVtfYV07XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyTW9kdWxlSGVscGVycyA9IGdldEhlbHBlcnMoY3VycmVudE1vZHVsZS5pZCk7XG4gICAgICAgICAgICBjdXJyZW50TW9kdWxlLnJlZ2lzdHJ5KGNvbnRhaW5lck1vZHVsZUhlbHBlcnMuYmluZEZ1bmN0aW9uLCBjb250YWluZXJNb2R1bGVIZWxwZXJzLnVuYmluZEZ1bmN0aW9uLCBjb250YWluZXJNb2R1bGVIZWxwZXJzLmlzYm91bmRGdW5jdGlvbiwgY29udGFpbmVyTW9kdWxlSGVscGVycy5yZWJpbmRGdW5jdGlvbiwgY29udGFpbmVyTW9kdWxlSGVscGVycy51bmJpbmRBc3luY0Z1bmN0aW9uLCBjb250YWluZXJNb2R1bGVIZWxwZXJzLm9uQWN0aXZhdGlvbkZ1bmN0aW9uLCBjb250YWluZXJNb2R1bGVIZWxwZXJzLm9uRGVhY3RpdmF0aW9uRnVuY3Rpb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmxvYWRBc3luYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1vZHVsZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG1vZHVsZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZ2V0SGVscGVycywgX2EsIG1vZHVsZXNfMiwgY3VycmVudE1vZHVsZSwgY29udGFpbmVyTW9kdWxlSGVscGVycztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEhlbHBlcnMgPSB0aGlzLl9nZXRDb250YWluZXJNb2R1bGVIZWxwZXJzRmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSAwLCBtb2R1bGVzXzIgPSBtb2R1bGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShfYSA8IG1vZHVsZXNfMi5sZW5ndGgpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vZHVsZSA9IG1vZHVsZXNfMltfYV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJNb2R1bGVIZWxwZXJzID0gZ2V0SGVscGVycyhjdXJyZW50TW9kdWxlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgY3VycmVudE1vZHVsZS5yZWdpc3RyeShjb250YWluZXJNb2R1bGVIZWxwZXJzLmJpbmRGdW5jdGlvbiwgY29udGFpbmVyTW9kdWxlSGVscGVycy51bmJpbmRGdW5jdGlvbiwgY29udGFpbmVyTW9kdWxlSGVscGVycy5pc2JvdW5kRnVuY3Rpb24sIGNvbnRhaW5lck1vZHVsZUhlbHBlcnMucmViaW5kRnVuY3Rpb24sIGNvbnRhaW5lck1vZHVsZUhlbHBlcnMudW5iaW5kQXN5bmNGdW5jdGlvbiwgY29udGFpbmVyTW9kdWxlSGVscGVycy5vbkFjdGl2YXRpb25GdW5jdGlvbiwgY29udGFpbmVyTW9kdWxlSGVscGVycy5vbkRlYWN0aXZhdGlvbkZ1bmN0aW9uKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2ErKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLnVubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIG1vZHVsZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG1vZHVsZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBtb2R1bGVzLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZSkge1xuICAgICAgICAgICAgdmFyIGRlYWN0aXZhdGlvbnMgPSBfdGhpcy5fcmVtb3ZlTW9kdWxlQmluZGluZ3MobW9kdWxlLmlkKTtcbiAgICAgICAgICAgIF90aGlzLl9kZWFjdGl2YXRlU2luZ2xldG9ucyhkZWFjdGl2YXRpb25zKTtcbiAgICAgICAgICAgIF90aGlzLl9yZW1vdmVNb2R1bGVIYW5kbGVycyhtb2R1bGUuaWQpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUudW5sb2FkQXN5bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtb2R1bGVzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBtb2R1bGVzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBtb2R1bGVzXzMsIG1vZHVsZV8xLCBkZWFjdGl2YXRpb25zO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSAwLCBtb2R1bGVzXzMgPSBtb2R1bGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShfYSA8IG1vZHVsZXNfMy5sZW5ndGgpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlXzEgPSBtb2R1bGVzXzNbX2FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVhY3RpdmF0aW9ucyA9IHRoaXMuX3JlbW92ZU1vZHVsZUJpbmRpbmdzKG1vZHVsZV8xLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgdGhpcy5fZGVhY3RpdmF0ZVNpbmdsZXRvbnNBc3luYyhkZWFjdGl2YXRpb25zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZU1vZHVsZUhhbmRsZXJzKG1vZHVsZV8xLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2ErKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcy5vcHRpb25zLmRlZmF1bHRTY29wZSB8fCBCaW5kaW5nU2NvcGVFbnVtLlRyYW5zaWVudDtcbiAgICAgICAgdmFyIGJpbmRpbmcgPSBuZXcgQmluZGluZyhzZXJ2aWNlSWRlbnRpZmllciwgc2NvcGUpO1xuICAgICAgICB0aGlzLl9iaW5kaW5nRGljdGlvbmFyeS5hZGQoc2VydmljZUlkZW50aWZpZXIsIGJpbmRpbmcpO1xuICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmdUb1N5bnRheChiaW5kaW5nKTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUucmViaW5kID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyKSB7XG4gICAgICAgIHRoaXMudW5iaW5kKHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmluZChzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLnJlYmluZEFzeW5jID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0LCB0aGlzLnVuYmluZEFzeW5jKHNlcnZpY2VJZGVudGlmaWVyKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiwgdGhpcy5iaW5kKHNlcnZpY2VJZGVudGlmaWVyKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2JpbmRpbmdEaWN0aW9uYXJ5Lmhhc0tleShzZXJ2aWNlSWRlbnRpZmllcikpIHtcbiAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdEaWN0aW9uYXJ5LmdldChzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgICAgICB0aGlzLl9kZWFjdGl2YXRlU2luZ2xldG9ucyhiaW5kaW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVtb3ZlU2VydmljZUZyb21EaWN0aW9uYXJ5KHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUudW5iaW5kQXN5bmMgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGJpbmRpbmdzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9iaW5kaW5nRGljdGlvbmFyeS5oYXNLZXkoc2VydmljZUlkZW50aWZpZXIpKSByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MgPSB0aGlzLl9iaW5kaW5nRGljdGlvbmFyeS5nZXQoc2VydmljZUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCB0aGlzLl9kZWFjdGl2YXRlU2luZ2xldG9uc0FzeW5jKGJpbmRpbmdzKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU2VydmljZUZyb21EaWN0aW9uYXJ5KHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS51bmJpbmRBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuX2JpbmRpbmdEaWN0aW9uYXJ5LnRyYXZlcnNlKGZ1bmN0aW9uIChfa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMuX2RlYWN0aXZhdGVTaW5nbGV0b25zKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2JpbmRpbmdEaWN0aW9uYXJ5ID0gbmV3IExvb2t1cCgpO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS51bmJpbmRBbGxBc3luYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHByb21pc2VzO1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kaW5nRGljdGlvbmFyeS50cmF2ZXJzZShmdW5jdGlvbiAoX2tleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKF90aGlzLl9kZWFjdGl2YXRlU2luZ2xldG9uc0FzeW5jKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgUHJvbWlzZS5hbGwocHJvbWlzZXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmluZGluZ0RpY3Rpb25hcnkgPSBuZXcgTG9va3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUub25BY3RpdmF0aW9uID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCBvbkFjdGl2YXRpb24pIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGlvbnMuYWRkKHNlcnZpY2VJZGVudGlmaWVyLCBvbkFjdGl2YXRpb24pO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5vbkRlYWN0aXZhdGlvbiA9IGZ1bmN0aW9uIChzZXJ2aWNlSWRlbnRpZmllciwgb25EZWFjdGl2YXRpb24pIHtcbiAgICAgICAgdGhpcy5fZGVhY3RpdmF0aW9ucy5hZGQoc2VydmljZUlkZW50aWZpZXIsIG9uRGVhY3RpdmF0aW9uKTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9uIChzZXJ2aWNlSWRlbnRpZmllcikge1xuICAgICAgICB2YXIgYm91bmQgPSB0aGlzLl9iaW5kaW5nRGljdGlvbmFyeS5oYXNLZXkoc2VydmljZUlkZW50aWZpZXIpO1xuICAgICAgICBpZiAoIWJvdW5kICYmIHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICBib3VuZCA9IHRoaXMucGFyZW50LmlzQm91bmQoc2VydmljZUlkZW50aWZpZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib3VuZDtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuaXNDdXJyZW50Qm91bmQgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdEaWN0aW9uYXJ5Lmhhc0tleShzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmlzQm91bmROYW1lZCA9IGZ1bmN0aW9uIChzZXJ2aWNlSWRlbnRpZmllciwgbmFtZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNCb3VuZFRhZ2dlZChzZXJ2aWNlSWRlbnRpZmllciwgTUVUQURBVEFfS0VZLk5BTUVEX1RBRywgbmFtZWQpO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5pc0JvdW5kVGFnZ2VkID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciBib3VuZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fYmluZGluZ0RpY3Rpb25hcnkuaGFzS2V5KHNlcnZpY2VJZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgdmFyIGJpbmRpbmdzID0gdGhpcy5fYmluZGluZ0RpY3Rpb25hcnkuZ2V0KHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0XzEgPSBjcmVhdGVNb2NrUmVxdWVzdCh0aGlzLCBzZXJ2aWNlSWRlbnRpZmllciwga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBib3VuZCA9IGJpbmRpbmdzLnNvbWUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuY29uc3RyYWludChyZXF1ZXN0XzEpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJvdW5kICYmIHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICBib3VuZCA9IHRoaXMucGFyZW50LmlzQm91bmRUYWdnZWQoc2VydmljZUlkZW50aWZpZXIsIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib3VuZDtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuc25hcHNob3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3NuYXBzaG90cy5wdXNoKENvbnRhaW5lclNuYXBzaG90Lm9mKHRoaXMuX2JpbmRpbmdEaWN0aW9uYXJ5LmNsb25lKCksIHRoaXMuX21pZGRsZXdhcmUsIHRoaXMuX2FjdGl2YXRpb25zLmNsb25lKCksIHRoaXMuX2RlYWN0aXZhdGlvbnMuY2xvbmUoKSwgdGhpcy5fbW9kdWxlQWN0aXZhdGlvblN0b3JlLmNsb25lKCkpKTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNuYXBzaG90ID0gdGhpcy5fc25hcHNob3RzLnBvcCgpO1xuICAgICAgICBpZiAoc25hcHNob3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TR1MuTk9fTU9SRV9TTkFQU0hPVFNfQVZBSUxBQkxFKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9iaW5kaW5nRGljdGlvbmFyeSA9IHNuYXBzaG90LmJpbmRpbmdzO1xuICAgICAgICB0aGlzLl9hY3RpdmF0aW9ucyA9IHNuYXBzaG90LmFjdGl2YXRpb25zO1xuICAgICAgICB0aGlzLl9kZWFjdGl2YXRpb25zID0gc25hcHNob3QuZGVhY3RpdmF0aW9ucztcbiAgICAgICAgdGhpcy5fbWlkZGxld2FyZSA9IHNuYXBzaG90Lm1pZGRsZXdhcmU7XG4gICAgICAgIHRoaXMuX21vZHVsZUFjdGl2YXRpb25TdG9yZSA9IHNuYXBzaG90Lm1vZHVsZUFjdGl2YXRpb25TdG9yZTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuY3JlYXRlQ2hpbGQgPSBmdW5jdGlvbiAoY29udGFpbmVyT3B0aW9ucykge1xuICAgICAgICB2YXIgY2hpbGQgPSBuZXcgQ29udGFpbmVyKGNvbnRhaW5lck9wdGlvbnMgfHwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5hcHBseU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtaWRkbGV3YXJlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbWlkZGxld2FyZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5pdGlhbCA9IHRoaXMuX21pZGRsZXdhcmVcbiAgICAgICAgICAgID8gdGhpcy5fbWlkZGxld2FyZVxuICAgICAgICAgICAgOiB0aGlzLl9wbGFuQW5kUmVzb2x2ZSgpO1xuICAgICAgICB0aGlzLl9taWRkbGV3YXJlID0gbWlkZGxld2FyZXMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXJyKSB7IHJldHVybiBjdXJyKHByZXYpOyB9LCBpbml0aWFsKTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuYXBwbHlDdXN0b21NZXRhZGF0YVJlYWRlciA9IGZ1bmN0aW9uIChtZXRhZGF0YVJlYWRlcikge1xuICAgICAgICB0aGlzLl9tZXRhZGF0YVJlYWRlciA9IG1ldGFkYXRhUmVhZGVyO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgdmFyIGdldEFyZ3MgPSB0aGlzLl9nZXROb3RBbGxBcmdzKHNlcnZpY2VJZGVudGlmaWVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRCdXRUaHJvd0lmQXN5bmMoZ2V0QXJncyk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmdldEFzeW5jID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBnZXRBcmdzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGdldEFyZ3MgPSB0aGlzLl9nZXROb3RBbGxBcmdzKHNlcnZpY2VJZGVudGlmaWVyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyLCB0aGlzLl9nZXQoZ2V0QXJncyldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5nZXRUYWdnZWQgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGdldEFyZ3MgPSB0aGlzLl9nZXROb3RBbGxBcmdzKHNlcnZpY2VJZGVudGlmaWVyLCBmYWxzZSwga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRCdXRUaHJvd0lmQXN5bmMoZ2V0QXJncyk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmdldFRhZ2dlZEFzeW5jID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBnZXRBcmdzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGdldEFyZ3MgPSB0aGlzLl9nZXROb3RBbGxBcmdzKHNlcnZpY2VJZGVudGlmaWVyLCBmYWxzZSwga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyLCB0aGlzLl9nZXQoZ2V0QXJncyldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5nZXROYW1lZCA9IGZ1bmN0aW9uIChzZXJ2aWNlSWRlbnRpZmllciwgbmFtZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFnZ2VkKHNlcnZpY2VJZGVudGlmaWVyLCBNRVRBREFUQV9LRVkuTkFNRURfVEFHLCBuYW1lZCk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmdldE5hbWVkQXN5bmMgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIsIG5hbWVkKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIsIHRoaXMuZ2V0VGFnZ2VkQXN5bmMoc2VydmljZUlkZW50aWZpZXIsIE1FVEFEQVRBX0tFWS5OQU1FRF9UQUcsIG5hbWVkKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmdldEFsbCA9IGZ1bmN0aW9uIChzZXJ2aWNlSWRlbnRpZmllcikge1xuICAgICAgICB2YXIgZ2V0QXJncyA9IHRoaXMuX2dldEFsbEFyZ3Moc2VydmljZUlkZW50aWZpZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QnV0VGhyb3dJZkFzeW5jKGdldEFyZ3MpO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5nZXRBbGxBc3luYyA9IGZ1bmN0aW9uIChzZXJ2aWNlSWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZ2V0QXJncztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBnZXRBcmdzID0gdGhpcy5fZ2V0QWxsQXJncyhzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyLCB0aGlzLl9nZXRBbGwoZ2V0QXJncyldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5nZXRBbGxUYWdnZWQgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGdldEFyZ3MgPSB0aGlzLl9nZXROb3RBbGxBcmdzKHNlcnZpY2VJZGVudGlmaWVyLCB0cnVlLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEJ1dFRocm93SWZBc3luYyhnZXRBcmdzKTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZ2V0QWxsVGFnZ2VkQXN5bmMgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGdldEFyZ3M7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgZ2V0QXJncyA9IHRoaXMuX2dldE5vdEFsbEFyZ3Moc2VydmljZUlkZW50aWZpZXIsIHRydWUsIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiwgdGhpcy5fZ2V0QWxsKGdldEFyZ3MpXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZ2V0QWxsTmFtZWQgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIsIG5hbWVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbFRhZ2dlZChzZXJ2aWNlSWRlbnRpZmllciwgTUVUQURBVEFfS0VZLk5BTUVEX1RBRywgbmFtZWQpO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5nZXRBbGxOYW1lZEFzeW5jID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCBuYW1lZCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyLCB0aGlzLmdldEFsbFRhZ2dlZEFzeW5jKHNlcnZpY2VJZGVudGlmaWVyLCBNRVRBREFUQV9LRVkuTkFNRURfVEFHLCBuYW1lZCldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24gKGNvbnN0cnVjdG9yRnVuY3Rpb24pIHtcbiAgICAgICAgdmFyIGlzQm91bmQgPSB0aGlzLmlzQm91bmQoY29uc3RydWN0b3JGdW5jdGlvbik7XG4gICAgICAgIGlmICghaXNCb3VuZCkge1xuICAgICAgICAgICAgdGhpcy5iaW5kKGNvbnN0cnVjdG9yRnVuY3Rpb24pLnRvU2VsZigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXNvbHZlZCA9IHRoaXMuZ2V0KGNvbnN0cnVjdG9yRnVuY3Rpb24pO1xuICAgICAgICBpZiAoIWlzQm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kKGNvbnN0cnVjdG9yRnVuY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX3ByZURlc3Ryb3kgPSBmdW5jdGlvbiAoY29uc3RydWN0b3IsIGluc3RhbmNlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBSZWZsZWN0Lmhhc01ldGFkYXRhKE1FVEFEQVRBX0tFWS5QUkVfREVTVFJPWSwgY29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoTUVUQURBVEFfS0VZLlBSRV9ERVNUUk9ZLCBjb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gaW5zdGFuY2UpW2RhdGEudmFsdWVdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX3JlbW92ZU1vZHVsZUhhbmRsZXJzID0gZnVuY3Rpb24gKG1vZHVsZUlkKSB7XG4gICAgICAgIHZhciBtb2R1bGVBY3RpdmF0aW9uc0hhbmRsZXJzID0gdGhpcy5fbW9kdWxlQWN0aXZhdGlvblN0b3JlLnJlbW92ZShtb2R1bGVJZCk7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRpb25zLnJlbW92ZUludGVyc2VjdGlvbihtb2R1bGVBY3RpdmF0aW9uc0hhbmRsZXJzLm9uQWN0aXZhdGlvbnMpO1xuICAgICAgICB0aGlzLl9kZWFjdGl2YXRpb25zLnJlbW92ZUludGVyc2VjdGlvbihtb2R1bGVBY3RpdmF0aW9uc0hhbmRsZXJzLm9uRGVhY3RpdmF0aW9ucyk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLl9yZW1vdmVNb2R1bGVCaW5kaW5ncyA9IGZ1bmN0aW9uIChtb2R1bGVJZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmluZGluZ0RpY3Rpb25hcnkucmVtb3ZlQnlDb25kaXRpb24oZnVuY3Rpb24gKGJpbmRpbmcpIHsgcmV0dXJuIGJpbmRpbmcubW9kdWxlSWQgPT09IG1vZHVsZUlkOyB9KTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX2RlYWN0aXZhdGUgPSBmdW5jdGlvbiAoYmluZGluZywgaW5zdGFuY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yID0gaW5zdGFuY2UgPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnN0YW5jZSkuY29uc3RydWN0b3I7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVhY3RpdmF0aW9ucy5oYXNLZXkoYmluZGluZy5zZXJ2aWNlSWRlbnRpZmllcikpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZGVhY3RpdmF0ZUNvbnRhaW5lcihpbnN0YW5jZSwgdGhpcy5fZGVhY3RpdmF0aW9ucy5nZXQoYmluZGluZy5zZXJ2aWNlSWRlbnRpZmllcikudmFsdWVzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRGVhY3RpdmF0aW9uRXJyb3IocmVzdWx0LnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiwgdGhpcy5fcHJvcGFnYXRlQ29udGFpbmVyRGVhY3RpdmF0aW9uVGhlbkJpbmRpbmdBbmRQcmVEZXN0cm95QXN5bmMoYmluZGluZywgaW5zdGFuY2UsIGNvbnN0cnVjdG9yKV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pLCBiaW5kaW5nLnNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcHJvcGFnYXRlRGVhY3RpdmF0aW9uUmVzdWx0ID0gdGhpcy5fcHJvcGFnYXRlQ29udGFpbmVyRGVhY3RpdmF0aW9uVGhlbkJpbmRpbmdBbmRQcmVEZXN0cm95KGJpbmRpbmcsIGluc3RhbmNlLCBjb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKHByb3BhZ2F0ZURlYWN0aXZhdGlvblJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRGVhY3RpdmF0aW9uRXJyb3IocHJvcGFnYXRlRGVhY3RpdmF0aW9uUmVzdWx0LCBiaW5kaW5nLnNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TR1MuT05fREVBQ1RJVkFUSU9OX0VSUk9SKGdldFNlcnZpY2VJZGVudGlmaWVyQXNTdHJpbmcoYmluZGluZy5zZXJ2aWNlSWRlbnRpZmllciksIGV4Lm1lc3NhZ2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5faGFuZGxlRGVhY3RpdmF0aW9uRXJyb3IgPSBmdW5jdGlvbiAoYXN5bmNSZXN1bHQsIHNlcnZpY2VJZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBleF8xO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgYXN5bmNSZXN1bHRdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDNdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBleF8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4XzEgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0dTLk9OX0RFQUNUSVZBVElPTl9FUlJPUihnZXRTZXJ2aWNlSWRlbnRpZmllckFzU3RyaW5nKHNlcnZpY2VJZGVudGlmaWVyKSwgZXhfMS5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDNdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5fZGVhY3RpdmF0ZUNvbnRhaW5lciA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgZGVhY3RpdmF0aW9uc0l0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBkZWFjdGl2YXRpb24gPSBkZWFjdGl2YXRpb25zSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAodHlwZW9mIGRlYWN0aXZhdGlvbi52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGRlYWN0aXZhdGlvbi52YWx1ZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiwgdGhpcy5fZGVhY3RpdmF0ZUNvbnRhaW5lckFzeW5jKGluc3RhbmNlLCBkZWFjdGl2YXRpb25zSXRlcmF0b3IpXTtcbiAgICAgICAgICAgICAgICB9KTsgfSk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVhY3RpdmF0aW9uID0gZGVhY3RpdmF0aW9uc0l0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5fZGVhY3RpdmF0ZUNvbnRhaW5lckFzeW5jID0gZnVuY3Rpb24gKGluc3RhbmNlLCBkZWFjdGl2YXRpb25zSXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRlYWN0aXZhdGlvbjtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYWN0aXZhdGlvbiA9IGRlYWN0aXZhdGlvbnNJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiBkZWFjdGl2YXRpb24udmFsdWUgPT09ICdmdW5jdGlvbicpKSByZXR1cm4gWzMsIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBkZWFjdGl2YXRpb24udmFsdWUoaW5zdGFuY2UpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVhY3RpdmF0aW9uID0gZGVhY3RpdmF0aW9uc0l0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLl9nZXRDb250YWluZXJNb2R1bGVIZWxwZXJzRmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHNldE1vZHVsZUlkID0gZnVuY3Rpb24gKGJpbmRpbmdUb1N5bnRheCwgbW9kdWxlSWQpIHtcbiAgICAgICAgICAgIGJpbmRpbmdUb1N5bnRheC5fYmluZGluZy5tb2R1bGVJZCA9IG1vZHVsZUlkO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2V0QmluZEZ1bmN0aW9uID0gZnVuY3Rpb24gKG1vZHVsZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJpbmRpbmdUb1N5bnRheCA9IF90aGlzLmJpbmQoc2VydmljZUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHNldE1vZHVsZUlkKGJpbmRpbmdUb1N5bnRheCwgbW9kdWxlSWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5nVG9TeW50YXg7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2V0VW5iaW5kRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIF90aGlzLnVuYmluZChzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgIH07IH07XG4gICAgICAgIHZhciBnZXRVbmJpbmRBc3luY0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzZXJ2aWNlSWRlbnRpZmllcikgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyLCB0aGlzLnVuYmluZEFzeW5jKHNlcnZpY2VJZGVudGlmaWVyKV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTsgfTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGdldElzYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaXNCb3VuZChzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2V0UmViaW5kRnVuY3Rpb24gPSBmdW5jdGlvbiAobW9kdWxlSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYmluZGluZ1RvU3ludGF4ID0gX3RoaXMucmViaW5kKHNlcnZpY2VJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICBzZXRNb2R1bGVJZChiaW5kaW5nVG9TeW50YXgsIG1vZHVsZUlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmluZGluZ1RvU3ludGF4O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGdldE9uQWN0aXZhdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKG1vZHVsZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCBvbkFjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fbW9kdWxlQWN0aXZhdGlvblN0b3JlLmFkZEFjdGl2YXRpb24obW9kdWxlSWQsIHNlcnZpY2VJZGVudGlmaWVyLCBvbkFjdGl2YXRpb24pO1xuICAgICAgICAgICAgICAgIF90aGlzLm9uQWN0aXZhdGlvbihzZXJ2aWNlSWRlbnRpZmllciwgb25BY3RpdmF0aW9uKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHZhciBnZXRPbkRlYWN0aXZhdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKG1vZHVsZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCBvbkRlYWN0aXZhdGlvbikge1xuICAgICAgICAgICAgICAgIF90aGlzLl9tb2R1bGVBY3RpdmF0aW9uU3RvcmUuYWRkRGVhY3RpdmF0aW9uKG1vZHVsZUlkLCBzZXJ2aWNlSWRlbnRpZmllciwgb25EZWFjdGl2YXRpb24pO1xuICAgICAgICAgICAgICAgIF90aGlzLm9uRGVhY3RpdmF0aW9uKHNlcnZpY2VJZGVudGlmaWVyLCBvbkRlYWN0aXZhdGlvbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1JZCkgeyByZXR1cm4gKHtcbiAgICAgICAgICAgIGJpbmRGdW5jdGlvbjogZ2V0QmluZEZ1bmN0aW9uKG1JZCksXG4gICAgICAgICAgICBpc2JvdW5kRnVuY3Rpb246IGdldElzYm91bmRGdW5jdGlvbigpLFxuICAgICAgICAgICAgb25BY3RpdmF0aW9uRnVuY3Rpb246IGdldE9uQWN0aXZhdGlvbkZ1bmN0aW9uKG1JZCksXG4gICAgICAgICAgICBvbkRlYWN0aXZhdGlvbkZ1bmN0aW9uOiBnZXRPbkRlYWN0aXZhdGlvbkZ1bmN0aW9uKG1JZCksXG4gICAgICAgICAgICByZWJpbmRGdW5jdGlvbjogZ2V0UmViaW5kRnVuY3Rpb24obUlkKSxcbiAgICAgICAgICAgIHVuYmluZEFzeW5jRnVuY3Rpb246IGdldFVuYmluZEFzeW5jRnVuY3Rpb24oKSxcbiAgICAgICAgICAgIHVuYmluZEZ1bmN0aW9uOiBnZXRVbmJpbmRGdW5jdGlvbigpLFxuICAgICAgICB9KTsgfTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX2dldEFsbCA9IGZ1bmN0aW9uIChnZXRBcmdzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIsIFByb21pc2UuYWxsKHRoaXMuX2dldChnZXRBcmdzKSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5fZ2V0ID0gZnVuY3Rpb24gKGdldEFyZ3MpIHtcbiAgICAgICAgdmFyIHBsYW5BbmRSZXNvbHZlQXJncyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZXRBcmdzKSwgeyBjb250ZXh0SW50ZXJjZXB0b3I6IGZ1bmN0aW9uIChjb250ZXh0KSB7IHJldHVybiBjb250ZXh0OyB9LCB0YXJnZXRUeXBlOiBUYXJnZXRUeXBlRW51bS5WYXJpYWJsZSB9KTtcbiAgICAgICAgaWYgKHRoaXMuX21pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgIHZhciBtaWRkbGV3YXJlUmVzdWx0ID0gdGhpcy5fbWlkZGxld2FyZShwbGFuQW5kUmVzb2x2ZUFyZ3MpO1xuICAgICAgICAgICAgaWYgKG1pZGRsZXdhcmVSZXN1bHQgPT09IHVuZGVmaW5lZCB8fCBtaWRkbGV3YXJlUmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TR1MuSU5WQUxJRF9NSURETEVXQVJFX1JFVFVSTik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWlkZGxld2FyZVJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcGxhbkFuZFJlc29sdmUoKShwbGFuQW5kUmVzb2x2ZUFyZ3MpO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5fZ2V0QnV0VGhyb3dJZkFzeW5jID0gZnVuY3Rpb24gKGdldEFyZ3MpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2dldChnZXRBcmdzKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZU9yQ29udGFpbnNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0dTLkxBWllfSU5fU1lOQyhnZXRBcmdzLnNlcnZpY2VJZGVudGlmaWVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX2dldEFsbEFyZ3MgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgdmFyIGdldEFsbEFyZ3MgPSB7XG4gICAgICAgICAgICBhdm9pZENvbnN0cmFpbnRzOiB0cnVlLFxuICAgICAgICAgICAgaXNNdWx0aUluamVjdDogdHJ1ZSxcbiAgICAgICAgICAgIHNlcnZpY2VJZGVudGlmaWVyOiBzZXJ2aWNlSWRlbnRpZmllcixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEFsbEFyZ3M7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLl9nZXROb3RBbGxBcmdzID0gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyLCBpc011bHRpSW5qZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciBnZXROb3RBbGxBcmdzID0ge1xuICAgICAgICAgICAgYXZvaWRDb25zdHJhaW50czogZmFsc2UsXG4gICAgICAgICAgICBpc011bHRpSW5qZWN0OiBpc011bHRpSW5qZWN0LFxuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBzZXJ2aWNlSWRlbnRpZmllcjogc2VydmljZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBnZXROb3RBbGxBcmdzO1xuICAgIH07XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5fcGxhbkFuZFJlc29sdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBwbGFuKF90aGlzLl9tZXRhZGF0YVJlYWRlciwgX3RoaXMsIGFyZ3MuaXNNdWx0aUluamVjdCwgYXJncy50YXJnZXRUeXBlLCBhcmdzLnNlcnZpY2VJZGVudGlmaWVyLCBhcmdzLmtleSwgYXJncy52YWx1ZSwgYXJncy5hdm9pZENvbnN0cmFpbnRzKTtcbiAgICAgICAgICAgIGNvbnRleHQgPSBhcmdzLmNvbnRleHRJbnRlcmNlcHRvcihjb250ZXh0KTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXNvbHZlKGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX2RlYWN0aXZhdGVJZlNpbmdsZXRvbiA9IGZ1bmN0aW9uIChiaW5kaW5nKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghYmluZGluZy5hY3RpdmF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGJpbmRpbmcuY2FjaGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYmluZGluZy5jYWNoZS50aGVuKGZ1bmN0aW9uIChyZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fZGVhY3RpdmF0ZShiaW5kaW5nLCByZXNvbHZlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVhY3RpdmF0ZShiaW5kaW5nLCBiaW5kaW5nLmNhY2hlKTtcbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX2RlYWN0aXZhdGVTaW5nbGV0b25zID0gZnVuY3Rpb24gKGJpbmRpbmdzKSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgYmluZGluZ3NfMSA9IGJpbmRpbmdzOyBfaSA8IGJpbmRpbmdzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgYmluZGluZyA9IGJpbmRpbmdzXzFbX2ldO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2RlYWN0aXZhdGVJZlNpbmdsZXRvbihiaW5kaW5nKTtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0dTLkFTWU5DX1VOQklORF9SRVFVSVJFRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX2RlYWN0aXZhdGVTaW5nbGV0b25zQXN5bmMgPSBmdW5jdGlvbiAoYmluZGluZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0LCBQcm9taXNlLmFsbChiaW5kaW5ncy5tYXAoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiwgdGhpcy5fZGVhY3RpdmF0ZUlmU2luZ2xldG9uKGIpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KTsgfSkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLl9wcm9wYWdhdGVDb250YWluZXJEZWFjdGl2YXRpb25UaGVuQmluZGluZ0FuZFByZURlc3Ryb3kgPSBmdW5jdGlvbiAoYmluZGluZywgaW5zdGFuY2UsIGNvbnN0cnVjdG9yKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlYWN0aXZhdGUuYmluZCh0aGlzLnBhcmVudCkoYmluZGluZywgaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmRpbmdEZWFjdGl2YXRpb25BbmRQcmVEZXN0cm95KGJpbmRpbmcsIGluc3RhbmNlLCBjb25zdHJ1Y3Rvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX3Byb3BhZ2F0ZUNvbnRhaW5lckRlYWN0aXZhdGlvblRoZW5CaW5kaW5nQW5kUHJlRGVzdHJveUFzeW5jID0gZnVuY3Rpb24gKGJpbmRpbmcsIGluc3RhbmNlLCBjb25zdHJ1Y3Rvcikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFyZW50KSByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCB0aGlzLl9kZWFjdGl2YXRlLmJpbmQodGhpcy5wYXJlbnQpKGJpbmRpbmcsIGluc3RhbmNlKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFs0LCB0aGlzLl9iaW5kaW5nRGVhY3RpdmF0aW9uQW5kUHJlRGVzdHJveUFzeW5jKGJpbmRpbmcsIGluc3RhbmNlLCBjb25zdHJ1Y3RvcildO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLl9yZW1vdmVTZXJ2aWNlRnJvbURpY3Rpb25hcnkgPSBmdW5jdGlvbiAoc2VydmljZUlkZW50aWZpZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuX2JpbmRpbmdEaWN0aW9uYXJ5LnJlbW92ZShzZXJ2aWNlSWRlbnRpZmllcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQoRVJST1JfTVNHUy5DQU5OT1RfVU5CSU5ELCBcIiBcIikuY29uY2F0KGdldFNlcnZpY2VJZGVudGlmaWVyQXNTdHJpbmcoc2VydmljZUlkZW50aWZpZXIpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuX2JpbmRpbmdEZWFjdGl2YXRpb25BbmRQcmVEZXN0cm95ID0gZnVuY3Rpb24gKGJpbmRpbmcsIGluc3RhbmNlLCBjb25zdHJ1Y3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIGJpbmRpbmcub25EZWFjdGl2YXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nLm9uRGVhY3RpdmF0aW9uKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fcHJlRGVzdHJveShjb25zdHJ1Y3RvciwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVEZXN0cm95KGNvbnN0cnVjdG9yLCBpbnN0YW5jZSk7XG4gICAgfTtcbiAgICBDb250YWluZXIucHJvdG90eXBlLl9iaW5kaW5nRGVhY3RpdmF0aW9uQW5kUHJlRGVzdHJveUFzeW5jID0gZnVuY3Rpb24gKGJpbmRpbmcsIGluc3RhbmNlLCBjb25zdHJ1Y3Rvcikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgYmluZGluZy5vbkRlYWN0aXZhdGlvbiA9PT0gJ2Z1bmN0aW9uJykpIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIGJpbmRpbmcub25EZWFjdGl2YXRpb24oaW5zdGFuY2UpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbNCwgdGhpcy5fcHJlRGVzdHJveShjb25zdHJ1Y3RvciwgaW5zdGFuY2UpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGFpbmVyO1xufSgpKTtcbmV4cG9ydCB7IENvbnRhaW5lciB9O1xuIiwiaW1wb3J0IHsgaWQgfSBmcm9tICcuLi91dGlscy9pZCc7XG52YXIgQ29udGFpbmVyTW9kdWxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb250YWluZXJNb2R1bGUocmVnaXN0cnkpIHtcbiAgICAgICAgdGhpcy5pZCA9IGlkKCk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICB9XG4gICAgcmV0dXJuIENvbnRhaW5lck1vZHVsZTtcbn0oKSk7XG5leHBvcnQgeyBDb250YWluZXJNb2R1bGUgfTtcbnZhciBBc3luY0NvbnRhaW5lck1vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXN5bmNDb250YWluZXJNb2R1bGUocmVnaXN0cnkpIHtcbiAgICAgICAgdGhpcy5pZCA9IGlkKCk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICB9XG4gICAgcmV0dXJuIEFzeW5jQ29udGFpbmVyTW9kdWxlO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jQ29udGFpbmVyTW9kdWxlIH07XG4iLCJpbXBvcnQgKiBhcyBFUlJPUl9NU0dTIGZyb20gJy4uL2NvbnN0YW50cy9lcnJvcl9tc2dzJztcbmltcG9ydCAqIGFzIE1FVEFEQVRBX0tFWSBmcm9tICcuLi9jb25zdGFudHMvbWV0YWRhdGFfa2V5cyc7XG5pbXBvcnQgeyBnZXRGaXJzdEFycmF5RHVwbGljYXRlIH0gZnJvbSAnLi4vdXRpbHMvanMnO1xuZnVuY3Rpb24gdGFyZ2V0SXNDb25zdHJ1Y3RvckZ1bmN0aW9uKHRhcmdldCkge1xuICAgIHJldHVybiB0YXJnZXQucHJvdG90eXBlICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBfdGhyb3dJZk1ldGhvZFBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lKSB7XG4gICAgaWYgKHBhcmFtZXRlck5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHUy5JTlZBTElEX0RFQ09SQVRPUl9PUEVSQVRJT04pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRhZ1BhcmFtZXRlcihhbm5vdGF0aW9uVGFyZ2V0LCBwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJJbmRleCwgbWV0YWRhdGEpIHtcbiAgICBfdGhyb3dJZk1ldGhvZFBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lKTtcbiAgICBfdGFnUGFyYW1ldGVyT3JQcm9wZXJ0eShNRVRBREFUQV9LRVkuVEFHR0VELCBhbm5vdGF0aW9uVGFyZ2V0LCBwYXJhbWV0ZXJJbmRleC50b1N0cmluZygpLCBtZXRhZGF0YSk7XG59XG5mdW5jdGlvbiB0YWdQcm9wZXJ0eShhbm5vdGF0aW9uVGFyZ2V0LCBwcm9wZXJ0eU5hbWUsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHRhcmdldElzQ29uc3RydWN0b3JGdW5jdGlvbihhbm5vdGF0aW9uVGFyZ2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHUy5JTlZBTElEX0RFQ09SQVRPUl9PUEVSQVRJT04pO1xuICAgIH1cbiAgICBfdGFnUGFyYW1ldGVyT3JQcm9wZXJ0eShNRVRBREFUQV9LRVkuVEFHR0VEX1BST1AsIGFubm90YXRpb25UYXJnZXQuY29uc3RydWN0b3IsIHByb3BlcnR5TmFtZSwgbWV0YWRhdGEpO1xufVxuZnVuY3Rpb24gX2Vuc3VyZU5vTWV0YWRhdGFLZXlEdXBsaWNhdGVzKG1ldGFkYXRhKSB7XG4gICAgdmFyIG1ldGFkYXRhcyA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGFkYXRhKSkge1xuICAgICAgICBtZXRhZGF0YXMgPSBtZXRhZGF0YTtcbiAgICAgICAgdmFyIGR1cGxpY2F0ZSA9IGdldEZpcnN0QXJyYXlEdXBsaWNhdGUobWV0YWRhdGFzLm1hcChmdW5jdGlvbiAobWQpIHsgcmV0dXJuIG1kLmtleTsgfSkpO1xuICAgICAgICBpZiAoZHVwbGljYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdChFUlJPUl9NU0dTLkRVUExJQ0FURURfTUVUQURBVEEsIFwiIFwiKS5jb25jYXQoZHVwbGljYXRlLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbWV0YWRhdGFzID0gW21ldGFkYXRhXTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGFkYXRhcztcbn1cbmZ1bmN0aW9uIF90YWdQYXJhbWV0ZXJPclByb3BlcnR5KG1ldGFkYXRhS2V5LCBhbm5vdGF0aW9uVGFyZ2V0LCBrZXksIG1ldGFkYXRhKSB7XG4gICAgdmFyIG1ldGFkYXRhcyA9IF9lbnN1cmVOb01ldGFkYXRhS2V5RHVwbGljYXRlcyhtZXRhZGF0YSk7XG4gICAgdmFyIHBhcmFtc09yUHJvcGVydGllc01ldGFkYXRhID0ge307XG4gICAgaWYgKFJlZmxlY3QuaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFubm90YXRpb25UYXJnZXQpKSB7XG4gICAgICAgIHBhcmFtc09yUHJvcGVydGllc01ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5ub3RhdGlvblRhcmdldCk7XG4gICAgfVxuICAgIHZhciBwYXJhbU9yUHJvcGVydHlNZXRhZGF0YSA9IHBhcmFtc09yUHJvcGVydGllc01ldGFkYXRhW2tleV07XG4gICAgaWYgKHBhcmFtT3JQcm9wZXJ0eU1ldGFkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFyYW1PclByb3BlcnR5TWV0YWRhdGEgPSBbXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YXMuc29tZShmdW5jdGlvbiAobWQpIHsgcmV0dXJuIG1kLmtleSA9PT0gbS5rZXk7IH0pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KEVSUk9SX01TR1MuRFVQTElDQVRFRF9NRVRBREFUQSwgXCIgXCIpLmNvbmNhdChtLmtleS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgcGFyYW1PclByb3BlcnR5TWV0YWRhdGFfMSA9IHBhcmFtT3JQcm9wZXJ0eU1ldGFkYXRhOyBfaSA8IHBhcmFtT3JQcm9wZXJ0eU1ldGFkYXRhXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgbSA9IHBhcmFtT3JQcm9wZXJ0eU1ldGFkYXRhXzFbX2ldO1xuICAgICAgICAgICAgX2xvb3BfMShtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYXJhbU9yUHJvcGVydHlNZXRhZGF0YS5wdXNoLmFwcGx5KHBhcmFtT3JQcm9wZXJ0eU1ldGFkYXRhLCBtZXRhZGF0YXMpO1xuICAgIHBhcmFtc09yUHJvcGVydGllc01ldGFkYXRhW2tleV0gPSBwYXJhbU9yUHJvcGVydHlNZXRhZGF0YTtcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBwYXJhbXNPclByb3BlcnRpZXNNZXRhZGF0YSwgYW5ub3RhdGlvblRhcmdldCk7XG59XG5mdW5jdGlvbiBjcmVhdGVUYWdnZWREZWNvcmF0b3IobWV0YWRhdGEpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBpbmRleE9yUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXhPclByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRhZ1BhcmFtZXRlcih0YXJnZXQsIHRhcmdldEtleSwgaW5kZXhPclByb3BlcnR5RGVzY3JpcHRvciwgbWV0YWRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFnUHJvcGVydHkodGFyZ2V0LCB0YXJnZXRLZXksIG1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBfZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0KSB7XG4gICAgUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gZGVjb3JhdGUoZGVjb3JhdG9yLCB0YXJnZXQsIHBhcmFtZXRlckluZGV4T3JQcm9wZXJ0eSkge1xuICAgIGlmICh0eXBlb2YgcGFyYW1ldGVySW5kZXhPclByb3BlcnR5ID09PSAnbnVtYmVyJykge1xuICAgICAgICBfZGVjb3JhdGUoW19wYXJhbShwYXJhbWV0ZXJJbmRleE9yUHJvcGVydHksIGRlY29yYXRvcildLCB0YXJnZXQpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgcGFyYW1ldGVySW5kZXhPclByb3BlcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBSZWZsZWN0LmRlY29yYXRlKFtkZWNvcmF0b3JdLCB0YXJnZXQsIHBhcmFtZXRlckluZGV4T3JQcm9wZXJ0eSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBfZGVjb3JhdGUoW2RlY29yYXRvcl0sIHRhcmdldCk7XG4gICAgfVxufVxuZXhwb3J0IHsgZGVjb3JhdGUsIHRhZ1BhcmFtZXRlciwgdGFnUHJvcGVydHksIGNyZWF0ZVRhZ2dlZERlY29yYXRvciB9O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0QXJyYXlEdXBsaWNhdGUoYXJyYXkpIHtcbiAgICB2YXIgc2VlblZhbHVlcyA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKHZhciBfaSA9IDAsIGFycmF5XzEgPSBhcnJheTsgX2kgPCBhcnJheV8xLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgZW50cnkgPSBhcnJheV8xW19pXTtcbiAgICAgICAgaWYgKHNlZW5WYWx1ZXMuaGFzKGVudHJ5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VlblZhbHVlcy5hZGQoZW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4iLCJpbXBvcnQgKiBhcyBFUlJPUlNfTVNHUyBmcm9tICcuLi9jb25zdGFudHMvZXJyb3JfbXNncyc7XG5pbXBvcnQgKiBhcyBNRVRBREFUQV9LRVkgZnJvbSAnLi4vY29uc3RhbnRzL21ldGFkYXRhX2tleXMnO1xuZnVuY3Rpb24gaW5qZWN0YWJsZSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNPd25NZXRhZGF0YShNRVRBREFUQV9LRVkuUEFSQU1fVFlQRVMsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUlNfTVNHUy5EVVBMSUNBVEVEX0lOSkVDVEFCTEVfREVDT1JBVE9SKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhKE1FVEFEQVRBX0tFWS5ERVNJR05fUEFSQU1fVFlQRVMsIHRhcmdldCkgfHwgW107XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoTUVUQURBVEFfS0VZLlBBUkFNX1RZUEVTLCB0eXBlcywgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xufVxuZXhwb3J0IHsgaW5qZWN0YWJsZSB9O1xuIiwiaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuLi9wbGFubmluZy9tZXRhZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVUYWdnZWREZWNvcmF0b3IgfSBmcm9tICcuL2RlY29yYXRvcl91dGlscyc7XG5mdW5jdGlvbiB0YWdnZWQobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgICByZXR1cm4gY3JlYXRlVGFnZ2VkRGVjb3JhdG9yKG5ldyBNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkpO1xufVxuZXhwb3J0IHsgdGFnZ2VkIH07XG4iLCJpbXBvcnQgKiBhcyBNRVRBREFUQV9LRVkgZnJvbSAnLi4vY29uc3RhbnRzL21ldGFkYXRhX2tleXMnO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuLi9wbGFubmluZy9tZXRhZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVUYWdnZWREZWNvcmF0b3IgfSBmcm9tICcuL2RlY29yYXRvcl91dGlscyc7XG5mdW5jdGlvbiBuYW1lZChuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRhZ2dlZERlY29yYXRvcihuZXcgTWV0YWRhdGEoTUVUQURBVEFfS0VZLk5BTUVEX1RBRywgbmFtZSkpO1xufVxuZXhwb3J0IHsgbmFtZWQgfTtcbiIsImltcG9ydCB7IFVOREVGSU5FRF9JTkpFQ1RfQU5OT1RBVElPTiB9IGZyb20gJy4uL2NvbnN0YW50cy9lcnJvcl9tc2dzJztcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSAnLi4vcGxhbm5pbmcvbWV0YWRhdGEnO1xuaW1wb3J0IHsgY3JlYXRlVGFnZ2VkRGVjb3JhdG9yIH0gZnJvbSAnLi9kZWNvcmF0b3JfdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEJhc2UobWV0YWRhdGFLZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNlcnZpY2VJZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGluZGV4T3JQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlSWRlbnRpZmllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicgPyB0YXJnZXQubmFtZSA6IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihVTkRFRklORURfSU5KRUNUX0FOTk9UQVRJT04oY2xhc3NOYW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjcmVhdGVUYWdnZWREZWNvcmF0b3IobmV3IE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBzZXJ2aWNlSWRlbnRpZmllcikpKHRhcmdldCwgdGFyZ2V0S2V5LCBpbmRleE9yUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuIiwiaW1wb3J0ICogYXMgTUVUQURBVEFfS0VZIGZyb20gJy4uL2NvbnN0YW50cy9tZXRhZGF0YV9rZXlzJztcbmltcG9ydCB7IGluamVjdEJhc2UgfSBmcm9tICcuL2luamVjdF9iYXNlJztcbnZhciBpbmplY3QgPSBpbmplY3RCYXNlKE1FVEFEQVRBX0tFWS5JTkpFQ1RfVEFHKTtcbmV4cG9ydCB7IGluamVjdCB9O1xuIiwiaW1wb3J0ICogYXMgTUVUQURBVEFfS0VZIGZyb20gJy4uL2NvbnN0YW50cy9tZXRhZGF0YV9rZXlzJztcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSAnLi4vcGxhbm5pbmcvbWV0YWRhdGEnO1xuaW1wb3J0IHsgY3JlYXRlVGFnZ2VkRGVjb3JhdG9yIH0gZnJvbSAnLi9kZWNvcmF0b3JfdXRpbHMnO1xuZnVuY3Rpb24gb3B0aW9uYWwoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRhZ2dlZERlY29yYXRvcihuZXcgTWV0YWRhdGEoTUVUQURBVEFfS0VZLk9QVElPTkFMX1RBRywgdHJ1ZSkpO1xufVxuZXhwb3J0IHsgb3B0aW9uYWwgfTtcbiIsImltcG9ydCAqIGFzIE1FVEFEQVRBX0tFWSBmcm9tICcuLi9jb25zdGFudHMvbWV0YWRhdGFfa2V5cyc7XG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gJy4uL3BsYW5uaW5nL21ldGFkYXRhJztcbmltcG9ydCB7IHRhZ1BhcmFtZXRlciB9IGZyb20gJy4vZGVjb3JhdG9yX3V0aWxzJztcbmZ1bmN0aW9uIHVubWFuYWdlZCgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBpbmRleCkge1xuICAgICAgICB2YXIgbWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoTUVUQURBVEFfS0VZLlVOTUFOQUdFRF9UQUcsIHRydWUpO1xuICAgICAgICB0YWdQYXJhbWV0ZXIodGFyZ2V0LCB0YXJnZXRLZXksIGluZGV4LCBtZXRhZGF0YSk7XG4gICAgfTtcbn1cbmV4cG9ydCB7IHVubWFuYWdlZCB9O1xuIiwiaW1wb3J0ICogYXMgTUVUQURBVEFfS0VZIGZyb20gJy4uL2NvbnN0YW50cy9tZXRhZGF0YV9rZXlzJztcbmltcG9ydCB7IGluamVjdEJhc2UgfSBmcm9tICcuL2luamVjdF9iYXNlJztcbnZhciBtdWx0aUluamVjdCA9IGluamVjdEJhc2UoTUVUQURBVEFfS0VZLk1VTFRJX0lOSkVDVF9UQUcpO1xuZXhwb3J0IHsgbXVsdGlJbmplY3QgfTtcbiIsImltcG9ydCAqIGFzIE1FVEFEQVRBX0tFWSBmcm9tICcuLi9jb25zdGFudHMvbWV0YWRhdGFfa2V5cyc7XG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gJy4uL3BsYW5uaW5nL21ldGFkYXRhJztcbmltcG9ydCB7IHRhZ1BhcmFtZXRlciB9IGZyb20gJy4vZGVjb3JhdG9yX3V0aWxzJztcbmZ1bmN0aW9uIHRhcmdldE5hbWUobmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGluZGV4KSB7XG4gICAgICAgIHZhciBtZXRhZGF0YSA9IG5ldyBNZXRhZGF0YShNRVRBREFUQV9LRVkuTkFNRV9UQUcsIG5hbWUpO1xuICAgICAgICB0YWdQYXJhbWV0ZXIodGFyZ2V0LCB0YXJnZXRLZXksIGluZGV4LCBtZXRhZGF0YSk7XG4gICAgfTtcbn1cbmV4cG9ydCB7IHRhcmdldE5hbWUgfTtcbiIsImltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSAnLi4vcGxhbm5pbmcvbWV0YWRhdGEnO1xuZnVuY3Rpb24gcHJvcGVydHlFdmVudERlY29yYXRvcihldmVudEtleSwgZXJyb3JNZXNzYWdlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICB2YXIgbWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoZXZlbnRLZXksIHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIGlmIChSZWZsZWN0Lmhhc093bk1ldGFkYXRhKGV2ZW50S2V5LCB0YXJnZXQuY29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKGV2ZW50S2V5LCBtZXRhZGF0YSwgdGFyZ2V0LmNvbnN0cnVjdG9yKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuZXhwb3J0IHsgcHJvcGVydHlFdmVudERlY29yYXRvciB9O1xuIiwiaW1wb3J0ICogYXMgRVJST1JTX01TR1MgZnJvbSAnLi4vY29uc3RhbnRzL2Vycm9yX21zZ3MnO1xuaW1wb3J0ICogYXMgTUVUQURBVEFfS0VZIGZyb20gJy4uL2NvbnN0YW50cy9tZXRhZGF0YV9rZXlzJztcbmltcG9ydCB7IHByb3BlcnR5RXZlbnREZWNvcmF0b3IgfSBmcm9tICcuL3Byb3BlcnR5X2V2ZW50X2RlY29yYXRvcic7XG52YXIgcG9zdENvbnN0cnVjdCA9IHByb3BlcnR5RXZlbnREZWNvcmF0b3IoTUVUQURBVEFfS0VZLlBPU1RfQ09OU1RSVUNULCBFUlJPUlNfTVNHUy5NVUxUSVBMRV9QT1NUX0NPTlNUUlVDVF9NRVRIT0RTKTtcbmV4cG9ydCB7IHBvc3RDb25zdHJ1Y3QgfTtcbiIsImltcG9ydCAqIGFzIEVSUk9SU19NU0dTIGZyb20gJy4uL2NvbnN0YW50cy9lcnJvcl9tc2dzJztcbmltcG9ydCAqIGFzIE1FVEFEQVRBX0tFWSBmcm9tICcuLi9jb25zdGFudHMvbWV0YWRhdGFfa2V5cyc7XG5pbXBvcnQgeyBwcm9wZXJ0eUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi9wcm9wZXJ0eV9ldmVudF9kZWNvcmF0b3InO1xudmFyIHByZURlc3Ryb3kgPSBwcm9wZXJ0eUV2ZW50RGVjb3JhdG9yKE1FVEFEQVRBX0tFWS5QUkVfREVTVFJPWSwgRVJST1JTX01TR1MuTVVMVElQTEVfUFJFX0RFU1RST1lfTUVUSE9EUyk7XG5leHBvcnQgeyBwcmVEZXN0cm95IH07XG4iLCJpbXBvcnQgKiBhcyBrZXlzIGZyb20gJy4vY29uc3RhbnRzL21ldGFkYXRhX2tleXMnO1xuZXhwb3J0IHsgTGF6eVNlcnZpY2VJZGVudGlmaWVyIH0gZnJvbSAnQGludmVyc2lmeWpzL2NvbW1vbic7XG5leHBvcnQgdmFyIE1FVEFEQVRBX0tFWSA9IGtleXM7XG5leHBvcnQgeyBDb250YWluZXIgfSBmcm9tICcuL2NvbnRhaW5lci9jb250YWluZXInO1xuZXhwb3J0IHsgQmluZGluZ1Njb3BlRW51bSwgQmluZGluZ1R5cGVFbnVtLCBUYXJnZXRUeXBlRW51bSwgfSBmcm9tICcuL2NvbnN0YW50cy9saXRlcmFsX3R5cGVzJztcbmV4cG9ydCB7IEFzeW5jQ29udGFpbmVyTW9kdWxlLCBDb250YWluZXJNb2R1bGUsIH0gZnJvbSAnLi9jb250YWluZXIvY29udGFpbmVyX21vZHVsZSc7XG5leHBvcnQgeyBjcmVhdGVUYWdnZWREZWNvcmF0b3IgfSBmcm9tICcuL2Fubm90YXRpb24vZGVjb3JhdG9yX3V0aWxzJztcbmV4cG9ydCB7IGluamVjdGFibGUgfSBmcm9tICcuL2Fubm90YXRpb24vaW5qZWN0YWJsZSc7XG5leHBvcnQgeyB0YWdnZWQgfSBmcm9tICcuL2Fubm90YXRpb24vdGFnZ2VkJztcbmV4cG9ydCB7IG5hbWVkIH0gZnJvbSAnLi9hbm5vdGF0aW9uL25hbWVkJztcbmV4cG9ydCB7IGluamVjdCB9IGZyb20gJy4vYW5ub3RhdGlvbi9pbmplY3QnO1xuZXhwb3J0IHsgb3B0aW9uYWwgfSBmcm9tICcuL2Fubm90YXRpb24vb3B0aW9uYWwnO1xuZXhwb3J0IHsgdW5tYW5hZ2VkIH0gZnJvbSAnLi9hbm5vdGF0aW9uL3VubWFuYWdlZCc7XG5leHBvcnQgeyBtdWx0aUluamVjdCB9IGZyb20gJy4vYW5ub3RhdGlvbi9tdWx0aV9pbmplY3QnO1xuZXhwb3J0IHsgdGFyZ2V0TmFtZSB9IGZyb20gJy4vYW5ub3RhdGlvbi90YXJnZXRfbmFtZSc7XG5leHBvcnQgeyBwb3N0Q29uc3RydWN0IH0gZnJvbSAnLi9hbm5vdGF0aW9uL3Bvc3RfY29uc3RydWN0JztcbmV4cG9ydCB7IHByZURlc3Ryb3kgfSBmcm9tICcuL2Fubm90YXRpb24vcHJlX2Rlc3Ryb3knO1xuZXhwb3J0IHsgTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuL3BsYW5uaW5nL21ldGFkYXRhX3JlYWRlcic7XG5leHBvcnQgeyBpZCB9IGZyb20gJy4vdXRpbHMvaWQnO1xuZXhwb3J0IHsgZGVjb3JhdGUgfSBmcm9tICcuL2Fubm90YXRpb24vZGVjb3JhdG9yX3V0aWxzJztcbmV4cG9ydCB7IHRyYXZlcnNlQW5jZXJzdG9ycywgdGFnZ2VkQ29uc3RyYWludCwgbmFtZWRDb25zdHJhaW50LCB0eXBlQ29uc3RyYWludCwgfSBmcm9tICcuL3N5bnRheC9jb25zdHJhaW50X2hlbHBlcnMnO1xuZXhwb3J0IHsgZ2V0U2VydmljZUlkZW50aWZpZXJBc1N0cmluZyB9IGZyb20gJy4vdXRpbHMvc2VyaWFsaXphdGlvbic7XG5leHBvcnQgeyBtdWx0aUJpbmRUb1NlcnZpY2UgfSBmcm9tICcuL3V0aWxzL2JpbmRpbmdfdXRpbHMnO1xuIl0sIm5hbWVzIjpbIl9fd2VicGFja19yZXF1aXJlX18iLCJleHBvcnRzIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsIk5BTUVEX1RBRyIsIk5BTUVfVEFHIiwiVU5NQU5BR0VEX1RBRyIsIk9QVElPTkFMX1RBRyIsIklOSkVDVF9UQUciLCJNVUxUSV9JTkpFQ1RfVEFHIiwiVEFHR0VEIiwiVEFHR0VEX1BST1AiLCJQQVJBTV9UWVBFUyIsIkRFU0lHTl9QQVJBTV9UWVBFUyIsIlBPU1RfQ09OU1RSVUNUIiwiUFJFX0RFU1RST1kiLCJOT05fQ1VTVE9NX1RBR19LRVlTIiwieSIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfX2ludmVyc2lmeWpzX2NvbW1vbl8wODFkOGMwN19fIiwieCIsImQiLCJCaW5kaW5nU2NvcGVFbnVtIiwiUmVxdWVzdCIsIlNpbmdsZXRvbiIsIlRyYW5zaWVudCIsIkJpbmRpbmdUeXBlRW51bSIsIkNvbnN0YW50VmFsdWUiLCJDb25zdHJ1Y3RvciIsIkR5bmFtaWNWYWx1ZSIsIkZhY3RvcnkiLCJGdW5jdGlvbiIsIkluc3RhbmNlIiwiSW52YWxpZCIsIlByb3ZpZGVyIiwiVGFyZ2V0VHlwZUVudW0iLCJDbGFzc1Byb3BlcnR5IiwiQ29uc3RydWN0b3JBcmd1bWVudCIsIlZhcmlhYmxlIiwiaWRDb3VudGVyIiwiaWQiLCJCaW5kaW5nIiwic2VydmljZUlkZW50aWZpZXIiLCJzY29wZSIsInRoaXMiLCJhY3RpdmF0ZWQiLCJ0eXBlIiwiY29uc3RyYWludCIsIl9yZXF1ZXN0IiwiaW1wbGVtZW50YXRpb25UeXBlIiwiY2FjaGUiLCJmYWN0b3J5IiwicHJvdmlkZXIiLCJvbkFjdGl2YXRpb24iLCJvbkRlYWN0aXZhdGlvbiIsImR5bmFtaWNWYWx1ZSIsImNsb25lIiwiRFVQTElDQVRFRF9JTkpFQ1RBQkxFX0RFQ09SQVRPUiIsIkRVUExJQ0FURURfTUVUQURBVEEiLCJOVUxMX0FSR1VNRU5UIiwiS0VZX05PVF9GT1VORCIsIklOVkFMSURfREVDT1JBVE9SX09QRVJBVElPTiIsIk9OX0RFQUNUSVZBVElPTl9FUlJPUiIsImNsYXp6IiwiZXJyb3JNZXNzYWdlIiwiY29uY2F0IiwiTWV0YWRhdGFSZWFkZXIiLCJnZXRDb25zdHJ1Y3Rvck1ldGFkYXRhIiwiY29uc3RydWN0b3JGdW5jIiwiX2EiLCJjb21waWxlckdlbmVyYXRlZE1ldGFkYXRhIiwiUmVmbGVjdCIsImdldE1ldGFkYXRhIiwidXNlckdlbmVyYXRlZE1ldGFkYXRhIiwiZ2V0UHJvcGVydGllc01ldGFkYXRhIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9faW52ZXJzaWZ5anNfY29yZV9jMDhjZjRhMV9fIiwiQmluZGluZ0NvdW50IiwiaXNTdGFja092ZXJmbG93RXhjZXB0aW9uIiwiZXJyb3IiLCJSYW5nZUVycm9yIiwibWVzc2FnZSIsImdldFNlcnZpY2VJZGVudGlmaWVyQXNTdHJpbmciLCJuYW1lIiwidG9TdHJpbmciLCJsaXN0UmVnaXN0ZXJlZEJpbmRpbmdzRm9yU2VydmljZUlkZW50aWZpZXIiLCJjb250YWluZXIiLCJnZXRCaW5kaW5ncyIsInJlZ2lzdGVyZWRCaW5kaW5nc0xpc3QiLCJyZWdpc3RlcmVkQmluZGluZ3MiLCJsZW5ndGgiLCJmb3JFYWNoIiwiYmluZGluZyIsImdldEZ1bmN0aW9uTmFtZSIsIm1ldGFEYXRhIiwiYWxyZWFkeURlcGVuZGVuY3lDaGFpbiIsInJlcXVlc3QiLCJwYXJlbnRSZXF1ZXN0IiwiY2lyY3VsYXJEZXBlbmRlbmN5VG9FeGNlcHRpb24iLCJjaGlsZFJlcXVlc3RzIiwiY2hpbGRSZXF1ZXN0Iiwic2VydmljZXMiLCJfY3JlYXRlU3RyaW5nQXJyIiwicmVxIiwicmVzdWx0IiwicHVzaCIsInJldmVyc2UiLCJqb2luIiwiZGVwZW5kZW5jeUNoYWluVG9TdHJpbmciLCJFcnJvciIsImZ1bmMiLCJuYW1lXzEiLCJtYXRjaCIsInN0cmluZ2lmeU1ldGFkYXRhIiwibWV0YWRhdGEiLCJDb250ZXh0IiwiYWRkUGxhbiIsInBsYW4iLCJzZXRDdXJyZW50UmVxdWVzdCIsImN1cnJlbnRSZXF1ZXN0IiwiTWV0YWRhdGEiLCJTdHJpbmciLCJQbGFuIiwicGFyZW50Q29udGV4dCIsInJvb3RSZXF1ZXN0IiwiZ2V0QmFzZUNsYXNzRGVwZW5kZW5jeUNvdW50IiwibWV0YWRhdGFSZWFkZXIiLCJiYXNlQ29uc3RydWN0b3IiLCJnZXRQcm90b3R5cGVPZiIsImNvbnN0cnVjdG9yIiwidGFyZ2V0cyIsImdldFRhcmdldHMiLCJtYXAiLCJ0IiwiZmlsdGVyIiwibSIsInVubWFuYWdlZENvdW50IiwiYXBwbHkiLCJkZXBlbmRlbmN5Q291bnQiLCJiaW5kaW5ncyIsInRhcmdldCIsIkFycmF5IiwiaXNBcnJheSIsInJlcXVlc3RTY29wZSIsIk1hcCIsImFkZENoaWxkUmVxdWVzdCIsImNoaWxkIiwiZ2V0QmluZGluZ0RpY3Rpb25hcnkiLCJjbnRuciIsIl9iaW5kaW5nRGljdGlvbmFyeSIsIl9nZXRBY3RpdmVCaW5kaW5ncyIsImF2b2lkQ29uc3RyYWludHMiLCJjb250ZXh0IiwiYWN0aXZlQmluZGluZ3MiLCJOb0JpbmRpbmdzQXZhaWxhYmxlIiwib3B0aW9ucyIsImF1dG9CaW5kSW5qZWN0YWJsZSIsImJpbmQiLCJ0b1NlbGYiLCJpc09wdGlvbmFsIiwic2VydmljZUlkZW50aWZpZXJTdHJpbmciLCJtc2ciLCJpc1RhZ2dlZCIsImlzTmFtZWQiLCJtXzEiLCJuYW1lZFRhZyIsImdldE5hbWVkVGFnIiwib3RoZXJUYWdzIiwiZ2V0Q3VzdG9tVGFncyIsInRhZyIsImxpc3RNZXRhZGF0YUZvclRhcmdldCIsIk9ubHlPbmVCaW5kaW5nQXZhaWxhYmxlIiwiTXVsdGlwbGVCaW5kaW5nc0F2YWlsYWJsZSIsIl92YWxpZGF0ZUFjdGl2ZUJpbmRpbmdDb3VudCIsIl9nZXRUYXJnZXRNZXRhZGF0YSIsImlzTXVsdGlJbmplY3QiLCJtZXRhZGF0YUxpc3QiLCJ1bmRlZmluZWQiLCJfY3JlYXRlU3ViUmVxdWVzdHMiLCJ0aGVQbGFuIiwic3ViQ2hpbGRSZXF1ZXN0IiwiZGVwZW5kZW5jaWVzIiwiZ2V0RGVwZW5kZW5jaWVzIiwic2tpcEJhc2VDbGFzc0NoZWNrcyIsImJhc2VDbGFzc0RlcGVuZGVuY3lDb3VudCIsImRlcGVuZGVuY3kiLCJiaW5kaW5nRGljdGlvbmFyeSIsImhhc0tleSIsInBhcmVudCIsImlzUHJvbWlzZSIsIm9iamVjdCIsInRoZW4iLCJpc1Byb21pc2VPckNvbnRhaW5zUHJvbWlzZSIsInNvbWUiLCJGYWN0b3J5VHlwZSIsIl9zYXZlQXN5bmNSZXN1bHRUb1NpbmdsZXRvblNjb3BlIiwiYXN5bmNSZXN1bHQiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsImV4XzEiLCJib2R5IiwiZiIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwiZyIsImNyZWF0ZSIsIkl0ZXJhdG9yIiwibmV4dCIsInZlcmIiLCJpdGVyYXRvciIsIm4iLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJkb25lIiwicG9wIiwiZSIsInN0ZXAiLCJfX2dlbmVyYXRvciIsIlAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwibXVsdGlCaW5kVG9TZXJ2aWNlIiwic2VydmljZSIsInR5cGVzIiwiX2kiLCJhcmd1bWVudHMiLCJ0b1NlcnZpY2UiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInMiLCJpIiwicCIsImNyZWF0ZUluc3RhbmNlV2l0aEluamVjdGlvbnMiLCJhcmdzIiwiaW5zdGFuY2UiLCJjb25zdHIiLCJ0byIsImZyb20iLCJwYWNrIiwiYXIiLCJsIiwic2xpY2UiLCJfX3NwcmVhZEFycmF5IiwiY29uc3RydWN0b3JJbmplY3Rpb25zIiwicHJvcGVydHlSZXF1ZXN0cyIsInIiLCJpbmRleCIsInByb3BlcnR5IiwiaWRlbnRpZmllciIsImluamVjdGlvbiIsInByb3BlcnR5SW5qZWN0aW9ucyIsInBvc3NpYmx5V2FpdEluamVjdGlvbnMiLCJwb3NzaWJsZVByb21pc2VpbmplY3Rpb25zIiwiaW5qZWN0aW9ucyIsInBvc3NpYmxlUHJvbWlzZWluamVjdGlvbnNfMSIsImFsbCIsIl9nZXRJbnN0YW5jZUFmdGVyUG9zdENvbnN0cnVjdCIsInBvc3RDb25zdHJ1Y3RSZXN1bHQiLCJfYiIsImhhc01ldGFkYXRhIiwiZGF0YSIsIl9wb3N0Q29uc3RydWN0IiwiX3Jlc29sdmVSZXF1ZXN0IiwidGFyZ2V0SXNBbkFycmF5IiwidGFyZ2V0UGFyZW50SXNOb3RBbkFycmF5IiwibWF0Y2hlc0FycmF5IiwicmVzb2x2ZVJlcXVlc3QiLCJfcmVzb2x2ZUJpbmRpbmciLCJfcmVzb2x2ZUZhY3RvcnlGcm9tQmluZGluZyIsImZhY3RvcnlEZXRhaWxzIiwiZmFjdG9yeVR5cGUiLCJnZXRGYWN0b3J5RGV0YWlscyIsInRyeUFuZFRocm93RXJyb3JJZlN0YWNrT3ZlcmZsb3ciLCJfZ2V0UmVzb2x2ZWRGcm9tQmluZGluZyIsImJvdW5kVmFsdWUiLCJzZXJ2aWNlSWRlbnRpZmllckFzU3RyaW5nIiwiZW5zdXJlRnVsbHlCb3VuZCIsInNjb3BlRXJyb3JNZXNzYWdlIiwiX3Rocm93SWZIYW5kbGluZ0RlYWN0aXZhdGlvbiIsIl92YWxpZGF0ZUluc3RhbmNlUmVzb2x1dGlvbiIsInJlc29sdmVkIiwicmVkdWNlIiwicmVzb2x2ZWRSZXF1ZXN0cyIsImlzQXN5bmMiLCJfcmVzb2x2ZVJlcXVlc3RzIiwiY3JlYXRlSW5zdGFuY2VXaXRoSW5qZWN0aW9uc0FyZyIsImNyZWF0ZUluc3RhbmNlV2l0aEluamVjdGlvbnNBc3luYyIsIl9jcmVhdGVJbnN0YW5jZSIsInJlc29sdmVkUmVzdWx0IiwicmVzb2x2ZUluc3RhbmNlIiwiX3Jlc29sdmVJblNjb3BlIiwicmVzb2x2ZUZyb21CaW5kaW5nIiwiaGFzIiwidHJ5R2V0RnJvbVNjb3BlIiwiX3NhdmVUb1NpbmdsZXRvblNjb3BlIiwic2V0IiwiX3NhdmVUb1JlcXVlc3RTY29wZSIsInNhdmVUb1Njb3BlIiwiX29uQWN0aXZhdGlvbiIsIl9iaW5kaW5nQWN0aXZhdGlvbiIsImNvbnRhaW5lcnNJdGVyYXRvciIsIl9nZXRDb250YWluZXJzSXRlcmF0b3IiLCJjb250YWluZXJzSXRlcmF0b3JSZXN1bHQiLCJjb250ZXh0XzEiLCJhY3RpdmF0aW9uc0l0ZXJhdG9yIiwiX2dldENvbnRhaW5lckFjdGl2YXRpb25zRm9yU2VydmljZSIsIl9hY3RpdmF0ZUNvbnRhaW5lckFzeW5jIiwiX2FjdGl2YXRlQ29udGFpbmVyIiwicHJldmlvdXNSZXN1bHQiLCJhY3RpdmF0aW9uIiwicmVzdWx0UHJvbWlzZSIsImFjdGl2YXRpb25zIiwiX2FjdGl2YXRpb25zIiwidmFsdWVzIiwiY29udGFpbmVyc1N0YWNrIiwibmV4dENvbnRhaW5lciIsInRyYXZlcnNlQW5jZXJzdG9ycyIsInRhZ2dlZENvbnN0cmFpbnQiLCJtYXRjaGVzVGFnIiwibmFtZWRDb25zdHJhaW50IiwidHlwZUNvbnN0cmFpbnQiLCJCaW5kaW5nV2hlblN5bnRheCIsIl9iaW5kaW5nIiwid2hlbiIsIkJpbmRpbmdPblN5bnRheCIsIndoZW5UYXJnZXROYW1lZCIsIndoZW5UYXJnZXRJc0RlZmF1bHQiLCJ3aGVuVGFyZ2V0VGFnZ2VkIiwid2hlbkluamVjdGVkSW50byIsIndoZW5QYXJlbnROYW1lZCIsIndoZW5QYXJlbnRUYWdnZWQiLCJ3aGVuQW55QW5jZXN0b3JJcyIsImFuY2VzdG9yIiwid2hlbk5vQW5jZXN0b3JJcyIsIndoZW5BbnlBbmNlc3Rvck5hbWVkIiwid2hlbk5vQW5jZXN0b3JOYW1lZCIsIndoZW5BbnlBbmNlc3RvclRhZ2dlZCIsIndoZW5Ob0FuY2VzdG9yVGFnZ2VkIiwid2hlbkFueUFuY2VzdG9yTWF0Y2hlcyIsIndoZW5Ob0FuY2VzdG9yTWF0Y2hlcyIsImhhbmRsZXIiLCJCaW5kaW5nV2hlbk9uU3ludGF4IiwiX2JpbmRpbmdXaGVuU3ludGF4IiwiX2JpbmRpbmdPblN5bnRheCIsIkJpbmRpbmdJblN5bnRheCIsImluUmVxdWVzdFNjb3BlIiwiaW5TaW5nbGV0b25TY29wZSIsImluVHJhbnNpZW50U2NvcGUiLCJCaW5kaW5nSW5XaGVuT25TeW50YXgiLCJfYmluZGluZ0luU3ludGF4IiwiQmluZGluZ1RvU3ludGF4Iiwic2VsZiIsInRvQ29uc3RhbnRWYWx1ZSIsInRvRHluYW1pY1ZhbHVlIiwidG9Db25zdHJ1Y3RvciIsInRvRmFjdG9yeSIsInRvRnVuY3Rpb24iLCJiaW5kaW5nV2hlbk9uU3ludGF4IiwidG9BdXRvRmFjdG9yeSIsInRvQXV0b05hbWVkRmFjdG9yeSIsIm5hbWVkIiwiZ2V0TmFtZWQiLCJ0b1Byb3ZpZGVyIiwiQ29udGFpbmVyU25hcHNob3QiLCJvZiIsIm1pZGRsZXdhcmUiLCJkZWFjdGl2YXRpb25zIiwibW9kdWxlQWN0aXZhdGlvblN0b3JlIiwic25hcHNob3QiLCJMb29rdXAiLCJfbWFwIiwiZ2V0TWFwIiwiYWRkIiwiX2NoZWNrTm9uTnVsaXNoIiwiZW50cnkiLCJyZW1vdmUiLCJkZWxldGUiLCJyZW1vdmVJbnRlcnNlY3Rpb24iLCJsb29rdXAiLCJfdGhpcyIsInRyYXZlcnNlIiwibG9va3VwQWN0aXZhdGlvbnMiLCJmaWx0ZXJlZFZhbHVlcyIsImxvb2t1cFZhbHVlIiwibW9kdWxlQWN0aXZhdGlvbiIsIl9zZXRWYWx1ZSIsInJlbW92ZUJ5Q29uZGl0aW9uIiwiY29uZGl0aW9uIiwicmVtb3ZhbHMiLCJlbnRyaWVzIiwidXBkYXRlZEVudHJpZXMiLCJlbnRyaWVzXzEiLCJjb3B5IiwiYiIsIk1vZHVsZUFjdGl2YXRpb25TdG9yZSIsIm1vZHVsZUlkIiwiaGFuZGxlcnMiLCJfZ2V0RW1wdHlIYW5kbGVyc1N0b3JlIiwiYWRkRGVhY3RpdmF0aW9uIiwiX2dldE1vZHVsZUFjdGl2YXRpb25IYW5kbGVycyIsIm9uRGVhY3RpdmF0aW9ucyIsImFkZEFjdGl2YXRpb24iLCJvbkFjdGl2YXRpb25zIiwiaGFuZGxlcnNTdG9yZSIsIm1vZHVsZUFjdGl2YXRpb25IYW5kbGVycyIsIkNvbnRhaW5lciIsImNvbnRhaW5lck9wdGlvbnMiLCJkZWZhdWx0U2NvcGUiLCJfc25hcHNob3RzIiwiX21pZGRsZXdhcmUiLCJfZGVhY3RpdmF0aW9ucyIsIl9tZXRhZGF0YVJlYWRlciIsIl9tb2R1bGVBY3RpdmF0aW9uU3RvcmUiLCJtZXJnZSIsImNvbnRhaW5lcjEiLCJjb250YWluZXIyIiwiY29udGFpbmVycyIsInRhcmdldENvbnRhaW5lcnMiLCJ0YXJnZXRDb250YWluZXIiLCJ0YXJnZXRCaW5kaW5nRGljdGlvbmFyeSIsImRlc3RpbmF0aW9uIiwiX2tleSIsImxvYWQiLCJtb2R1bGVzIiwiZ2V0SGVscGVycyIsIl9nZXRDb250YWluZXJNb2R1bGVIZWxwZXJzRmFjdG9yeSIsIm1vZHVsZXNfMSIsImN1cnJlbnRNb2R1bGUiLCJjb250YWluZXJNb2R1bGVIZWxwZXJzIiwicmVnaXN0cnkiLCJiaW5kRnVuY3Rpb24iLCJ1bmJpbmRGdW5jdGlvbiIsImlzYm91bmRGdW5jdGlvbiIsInJlYmluZEZ1bmN0aW9uIiwidW5iaW5kQXN5bmNGdW5jdGlvbiIsIm9uQWN0aXZhdGlvbkZ1bmN0aW9uIiwib25EZWFjdGl2YXRpb25GdW5jdGlvbiIsImxvYWRBc3luYyIsIm1vZHVsZXNfMiIsInVubG9hZCIsIm1vZHVsZSIsIl9yZW1vdmVNb2R1bGVCaW5kaW5ncyIsIl9kZWFjdGl2YXRlU2luZ2xldG9ucyIsIl9yZW1vdmVNb2R1bGVIYW5kbGVycyIsInVubG9hZEFzeW5jIiwibW9kdWxlc18zIiwibW9kdWxlXzEiLCJfZGVhY3RpdmF0ZVNpbmdsZXRvbnNBc3luYyIsInJlYmluZCIsInVuYmluZCIsInJlYmluZEFzeW5jIiwidW5iaW5kQXN5bmMiLCJfcmVtb3ZlU2VydmljZUZyb21EaWN0aW9uYXJ5IiwidW5iaW5kQWxsIiwidW5iaW5kQWxsQXN5bmMiLCJwcm9taXNlcyIsImlzQm91bmQiLCJib3VuZCIsImlzQ3VycmVudEJvdW5kIiwiaXNCb3VuZE5hbWVkIiwiaXNCb3VuZFRhZ2dlZCIsInJlcXVlc3RfMSIsImNsYXNzRWxlbWVudE1ldGFkYXRhIiwiZ2V0Q2xhc3NFbGVtZW50TWV0YWRhdGFGcm9tTGVnYWN5TWV0YWRhdGEiLCJraW5kIiwiQ2xhc3NFbGVtZW50TWV0YWRhdGFLaW5kIiwidW5tYW5hZ2VkIiwiY3JlYXRlTW9ja1JlcXVlc3QiLCJyZXN0b3JlIiwiY3JlYXRlQ2hpbGQiLCJhcHBseU1pZGRsZXdhcmUiLCJtaWRkbGV3YXJlcyIsImluaXRpYWwiLCJfcGxhbkFuZFJlc29sdmUiLCJwcmV2IiwiY3VyciIsImFwcGx5Q3VzdG9tTWV0YWRhdGFSZWFkZXIiLCJnZXRBcmdzIiwiX2dldE5vdEFsbEFyZ3MiLCJfZ2V0QnV0VGhyb3dJZkFzeW5jIiwiZ2V0QXN5bmMiLCJfZ2V0IiwiZ2V0VGFnZ2VkIiwiZ2V0VGFnZ2VkQXN5bmMiLCJnZXROYW1lZEFzeW5jIiwiZ2V0QWxsIiwiX2dldEFsbEFyZ3MiLCJnZXRBbGxBc3luYyIsIl9nZXRBbGwiLCJnZXRBbGxUYWdnZWQiLCJnZXRBbGxUYWdnZWRBc3luYyIsImdldEFsbE5hbWVkIiwiZ2V0QWxsTmFtZWRBc3luYyIsImNvbnN0cnVjdG9yRnVuY3Rpb24iLCJfcHJlRGVzdHJveSIsIm1vZHVsZUFjdGl2YXRpb25zSGFuZGxlcnMiLCJfZGVhY3RpdmF0ZSIsIl9kZWFjdGl2YXRlQ29udGFpbmVyIiwiX2hhbmRsZURlYWN0aXZhdGlvbkVycm9yIiwiX3Byb3BhZ2F0ZUNvbnRhaW5lckRlYWN0aXZhdGlvblRoZW5CaW5kaW5nQW5kUHJlRGVzdHJveUFzeW5jIiwicHJvcGFnYXRlRGVhY3RpdmF0aW9uUmVzdWx0IiwiX3Byb3BhZ2F0ZUNvbnRhaW5lckRlYWN0aXZhdGlvblRoZW5CaW5kaW5nQW5kUHJlRGVzdHJveSIsImV4IiwiZGVhY3RpdmF0aW9uc0l0ZXJhdG9yIiwiZGVhY3RpdmF0aW9uIiwiX2RlYWN0aXZhdGVDb250YWluZXJBc3luYyIsInNldE1vZHVsZUlkIiwiYmluZGluZ1RvU3ludGF4IiwiZ2V0UmViaW5kRnVuY3Rpb24iLCJnZXRPbkFjdGl2YXRpb25GdW5jdGlvbiIsImdldE9uRGVhY3RpdmF0aW9uRnVuY3Rpb24iLCJtSWQiLCJwbGFuQW5kUmVzb2x2ZUFyZ3MiLCJjb250ZXh0SW50ZXJjZXB0b3IiLCJ0YXJnZXRUeXBlIiwibWlkZGxld2FyZVJlc3VsdCIsImtleVRvU3RyaW5nIiwiX2NyZWF0ZVRhcmdldCIsInJlc29sdmVSZXF1ZXN0RnVuY3Rpb24iLCJfZGVhY3RpdmF0ZUlmU2luZ2xldG9uIiwiYmluZGluZ3NfMSIsIl9iaW5kaW5nRGVhY3RpdmF0aW9uQW5kUHJlRGVzdHJveSIsIl9iaW5kaW5nRGVhY3RpdmF0aW9uQW5kUHJlRGVzdHJveUFzeW5jIiwiX2UiLCJDb250YWluZXJNb2R1bGUiLCJBc3luY0NvbnRhaW5lck1vZHVsZSIsInRhZ1BhcmFtZXRlciIsImFubm90YXRpb25UYXJnZXQiLCJwYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVySW5kZXgiLCJfdGhyb3dJZk1ldGhvZFBhcmFtZXRlciIsIl90YWdQYXJhbWV0ZXJPclByb3BlcnR5IiwibWV0YWRhdGFLZXkiLCJtZXRhZGF0YXMiLCJkdXBsaWNhdGUiLCJhcnJheSIsInNlZW5WYWx1ZXMiLCJTZXQiLCJhcnJheV8xIiwiZ2V0Rmlyc3RBcnJheUR1cGxpY2F0ZSIsIm1kIiwiX2Vuc3VyZU5vTWV0YWRhdGFLZXlEdXBsaWNhdGVzIiwicGFyYW1zT3JQcm9wZXJ0aWVzTWV0YWRhdGEiLCJoYXNPd25NZXRhZGF0YSIsInBhcmFtT3JQcm9wZXJ0eU1ldGFkYXRhIiwiX2xvb3BfMSIsInBhcmFtT3JQcm9wZXJ0eU1ldGFkYXRhXzEiLCJkZWZpbmVNZXRhZGF0YSIsImNyZWF0ZVRhZ2dlZERlY29yYXRvciIsInRhcmdldEtleSIsImluZGV4T3JQcm9wZXJ0eURlc2NyaXB0b3IiLCJwcm9wZXJ0eU5hbWUiLCJ0YWdQcm9wZXJ0eSIsIl9kZWNvcmF0ZSIsImRlY29yYXRvcnMiLCJkZWNvcmF0ZSIsIl9wYXJhbSIsInBhcmFtSW5kZXgiLCJkZWNvcmF0b3IiLCJwYXJhbWV0ZXJJbmRleE9yUHJvcGVydHkiLCJpbmplY3RhYmxlIiwidGFnZ2VkIiwibWV0YWRhdGFWYWx1ZSIsImluamVjdEJhc2UiLCJjbGFzc05hbWUiLCJpbmplY3QiLCJvcHRpb25hbCIsIm11bHRpSW5qZWN0IiwidGFyZ2V0TmFtZSIsInByb3BlcnR5RXZlbnREZWNvcmF0b3IiLCJldmVudEtleSIsInByb3BlcnR5S2V5IiwicG9zdENvbnN0cnVjdCIsInByZURlc3Ryb3kiLCJNRVRBREFUQV9LRVkiXSwic291cmNlUm9vdCI6IiJ9